@floristcloud/api-lib 1.2.106 → 1.2.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GroupCreateStandingOrdersFromPreOrdersContractCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const schemas_1 = require("../../../schemas");
6
+ const SourcePreOrderSchema = zod_1.z.object({
7
+ uuid: zod_1.z.uuid(),
8
+ preOrderNum: zod_1.z.number(),
9
+ clientName: zod_1.z.string(),
10
+ });
11
+ const GroupCreateStandingOrdersFromPreOrdersRequestSchema = zod_1.z.object({
12
+ preOrderUUIDList: zod_1.z.uuid().array().min(1),
13
+ });
14
+ const GroupCreateStandingOrdersFromPreOrdersResponseSchema = zod_1.z.object({
15
+ message: zod_1.z.string().optional(),
16
+ data: zod_1.z.object({
17
+ created: zod_1.z
18
+ .object({
19
+ sourcePreOrder: SourcePreOrderSchema,
20
+ standingOrder: schemas_1.PreOrderSchema,
21
+ warnings: zod_1.z.array(schemas_1.ErrorMessageSchema),
22
+ })
23
+ .array(),
24
+ failed: zod_1.z
25
+ .object({
26
+ sourcePreOrder: SourcePreOrderSchema,
27
+ error: zod_1.z.object({
28
+ code: zod_1.z.string(),
29
+ message: zod_1.z.string(),
30
+ }),
31
+ })
32
+ .array(),
33
+ }),
34
+ });
35
+ var GroupCreateStandingOrdersFromPreOrdersContractCommand;
36
+ (function (GroupCreateStandingOrdersFromPreOrdersContractCommand) {
37
+ GroupCreateStandingOrdersFromPreOrdersContractCommand.RequestSchema = GroupCreateStandingOrdersFromPreOrdersRequestSchema;
38
+ GroupCreateStandingOrdersFromPreOrdersContractCommand.ResponseSchema = GroupCreateStandingOrdersFromPreOrdersResponseSchema;
39
+ })(GroupCreateStandingOrdersFromPreOrdersContractCommand || (exports.GroupCreateStandingOrdersFromPreOrdersContractCommand = GroupCreateStandingOrdersFromPreOrdersContractCommand = {}));
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./group-create-pre-orders-from-standing-orders.command"), exports);
18
+ __exportStar(require("./group-create-standing-orders-from-pre-orders.command"), exports);
18
19
  __exportStar(require("./group-delete-pre-order.command"), exports);
19
20
  __exportStar(require("./group-update-pre-order.command"), exports);
20
21
  __exportStar(require("./analyze-create-pre-orders-from-standing-orders.command"), exports);
@@ -66,6 +66,10 @@ exports.ErrorI18nKey = {
66
66
  soProductNotCreated: 'preOrderFromStandingOrder.productNotCreated',
67
67
  soCriticalError: 'preOrderFromStandingOrder.criticalError',
68
68
  soNoPreOrdersCreated: 'preOrderFromStandingOrder.noPreOrdersCreated',
69
+ // Pre-order → standing-order conversion warnings
70
+ preOrderToSoSourceEmpty: 'preOrderToStandingOrder.sourceEmpty',
71
+ preOrderToSoItemSkipped: 'preOrderToStandingOrder.itemSkipped',
72
+ preOrderToSoProductNotCreated: 'preOrderToStandingOrder.productNotCreated',
69
73
  // Copy pre-order per-item warnings
70
74
  preOrderCopyItemNoMatches: 'preOrderCopy.itemNoMatches',
71
75
  preOrderCopyItemInsufficientQuantity: 'preOrderCopy.itemInsufficientQuantity',
@@ -852,6 +852,27 @@ exports.ERRORS = {
852
852
  message: 'No pre-orders were created for this standing order: no matching items found in the selected collections',
853
853
  httpCode: 400,
854
854
  },
855
+ // PRE ORDER — pre-order → standing-order conversion
856
+ PRE_ORDER_TO_STANDING_ORDER_FAILED: {
857
+ code: 'PO044',
858
+ message: 'Failed to create standing order from pre-order',
859
+ httpCode: 500,
860
+ },
861
+ PRE_ORDER_TO_SO_SOURCE_EMPTY: {
862
+ code: 'PO045',
863
+ message: 'Pre-order has no positions to convert into a standing order',
864
+ httpCode: 400,
865
+ },
866
+ PRE_ORDER_TO_SO_ITEM_SKIPPED: {
867
+ code: 'PO046',
868
+ message: 'Position was skipped: a standing-order position requires both a name and a category',
869
+ httpCode: 400,
870
+ },
871
+ PRE_ORDER_TO_SO_PRODUCT_NOT_CREATED: {
872
+ code: 'PO047',
873
+ message: 'Failed to create standing-order position from pre-order position',
874
+ httpCode: 400,
875
+ },
855
876
  // PRE ORDER — copy pre-order per-item warnings
856
877
  PRE_ORDER_COPY_ITEM_NO_MATCHES: {
857
878
  code: 'PO032',
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdatePreOrderWebshopSchema = exports.CreatePreOrderWebshopSchema = exports.UpdatePreOrderSchema = exports.CreatePreOrderSchema = exports.PreOrderListSchema = exports.PreOrderWithClientSchema = exports.PreOrderExtendedSchema = exports.PreOrderSchema = void 0;
3
+ exports.UpdatePreOrderWebshopSchema = exports.CreatePreOrderWebshopSchema = exports.UpdatePreOrderSchema = exports.UpdatablePreOrderStatusSchema = exports.CreatePreOrderSchema = exports.PreOrderListSchema = exports.PreOrderWithClientSchema = exports.PreOrderExtendedSchema = exports.PreOrderSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const enum_1 = require("../../enum");
6
6
  const client_1 = require("../client");
@@ -40,7 +40,21 @@ exports.CreatePreOrderSchema = zod_1.z.object({
40
40
  tag: zod_1.z.string().nullable(),
41
41
  status: zod_1.z.nativeEnum(enum_1.PreOrderStatusEnum),
42
42
  });
43
- exports.UpdatePreOrderSchema = exports.PreOrderSchema.omit({ uuid: true, preOrderNum: true, createdAt: true }).partial();
43
+ // STANDING_ORDER is not a status a pre-order can be switched into: an SO must live in the
44
+ // STANDING_ORDER_CATALOG collection with its own 1:1 collection items. Flipping the status alone
45
+ // leaves the pre-order half-converted (shared catalog items, stale reserved balances), so the
46
+ // panel update endpoints only accept the regular lifecycle statuses. Use the pre-order → SO
47
+ // conversion (POST /pre-order/group-actions/create-standing-orders-from-pre-orders) instead.
48
+ exports.UpdatablePreOrderStatusSchema = zod_1.z.enum([
49
+ enum_1.PreOrderStatusEnum.NEW,
50
+ enum_1.PreOrderStatusEnum.WEBSHOP_NEW,
51
+ enum_1.PreOrderStatusEnum.ACCEPTED,
52
+ enum_1.PreOrderStatusEnum.VERIFIED,
53
+ enum_1.PreOrderStatusEnum.COMPLETED,
54
+ ]);
55
+ exports.UpdatePreOrderSchema = exports.PreOrderSchema.omit({ uuid: true, preOrderNum: true, createdAt: true })
56
+ .partial()
57
+ .extend({ status: exports.UpdatablePreOrderStatusSchema.optional() });
44
58
  exports.CreatePreOrderWebshopSchema = exports.PreOrderSchema.pick({ branchUUID: true, comment: true }).extend({
45
59
  preOrderCollectionUUID: zod_1.z.string(),
46
60
  branchUUID: zod_1.z.string().nullable().optional(),
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ import { ErrorMessageSchema, PreOrderSchema } from '../../../schemas';
3
+
4
+ const SourcePreOrderSchema = z.object({
5
+ uuid: z.uuid(),
6
+ preOrderNum: z.number(),
7
+ clientName: z.string(),
8
+ });
9
+
10
+ const GroupCreateStandingOrdersFromPreOrdersRequestSchema = z.object({
11
+ preOrderUUIDList: z.uuid().array().min(1),
12
+ });
13
+
14
+ const GroupCreateStandingOrdersFromPreOrdersResponseSchema = z.object({
15
+ message: z.string().optional(),
16
+ data: z.object({
17
+ created: z
18
+ .object({
19
+ sourcePreOrder: SourcePreOrderSchema,
20
+ standingOrder: PreOrderSchema,
21
+ warnings: z.array(ErrorMessageSchema),
22
+ })
23
+ .array(),
24
+ failed: z
25
+ .object({
26
+ sourcePreOrder: SourcePreOrderSchema,
27
+ error: z.object({
28
+ code: z.string(),
29
+ message: z.string(),
30
+ }),
31
+ })
32
+ .array(),
33
+ }),
34
+ });
35
+
36
+ export namespace GroupCreateStandingOrdersFromPreOrdersContractCommand {
37
+ export const RequestSchema = GroupCreateStandingOrdersFromPreOrdersRequestSchema;
38
+ export type Request = z.infer<typeof RequestSchema>;
39
+
40
+ export const ResponseSchema = GroupCreateStandingOrdersFromPreOrdersResponseSchema;
41
+ export type Response = z.infer<typeof ResponseSchema>;
42
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './group-create-pre-orders-from-standing-orders.command';
2
+ export * from './group-create-standing-orders-from-pre-orders.command';
2
3
  export * from './group-delete-pre-order.command';
3
4
  export * from './group-update-pre-order.command';
4
5
  export * from './analyze-create-pre-orders-from-standing-orders.command';
@@ -70,6 +70,11 @@ export const ErrorI18nKey = {
70
70
  soCriticalError: 'preOrderFromStandingOrder.criticalError',
71
71
  soNoPreOrdersCreated: 'preOrderFromStandingOrder.noPreOrdersCreated',
72
72
 
73
+ // Pre-order → standing-order conversion warnings
74
+ preOrderToSoSourceEmpty: 'preOrderToStandingOrder.sourceEmpty',
75
+ preOrderToSoItemSkipped: 'preOrderToStandingOrder.itemSkipped',
76
+ preOrderToSoProductNotCreated: 'preOrderToStandingOrder.productNotCreated',
77
+
73
78
  // Copy pre-order per-item warnings
74
79
  preOrderCopyItemNoMatches: 'preOrderCopy.itemNoMatches',
75
80
  preOrderCopyItemInsufficientQuantity: 'preOrderCopy.itemInsufficientQuantity',
package/constant/error.ts CHANGED
@@ -888,6 +888,27 @@ export const ERRORS = {
888
888
  message: 'No pre-orders were created for this standing order: no matching items found in the selected collections',
889
889
  httpCode: 400,
890
890
  },
891
+ // PRE ORDER — pre-order → standing-order conversion
892
+ PRE_ORDER_TO_STANDING_ORDER_FAILED: {
893
+ code: 'PO044',
894
+ message: 'Failed to create standing order from pre-order',
895
+ httpCode: 500,
896
+ },
897
+ PRE_ORDER_TO_SO_SOURCE_EMPTY: {
898
+ code: 'PO045',
899
+ message: 'Pre-order has no positions to convert into a standing order',
900
+ httpCode: 400,
901
+ },
902
+ PRE_ORDER_TO_SO_ITEM_SKIPPED: {
903
+ code: 'PO046',
904
+ message: 'Position was skipped: a standing-order position requires both a name and a category',
905
+ httpCode: 400,
906
+ },
907
+ PRE_ORDER_TO_SO_PRODUCT_NOT_CREATED: {
908
+ code: 'PO047',
909
+ message: 'Failed to create standing-order position from pre-order position',
910
+ httpCode: 400,
911
+ },
891
912
  // PRE ORDER — copy pre-order per-item warnings
892
913
  PRE_ORDER_COPY_ITEM_NO_MATCHES: {
893
914
  code: 'PO032',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.106",
3
+ "version": "1.2.107",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -43,7 +43,22 @@ export const CreatePreOrderSchema = z.object({
43
43
  status: z.nativeEnum(PreOrderStatusEnum),
44
44
  });
45
45
 
46
- export const UpdatePreOrderSchema = PreOrderSchema.omit({ uuid: true, preOrderNum: true, createdAt: true }).partial();
46
+ // STANDING_ORDER is not a status a pre-order can be switched into: an SO must live in the
47
+ // STANDING_ORDER_CATALOG collection with its own 1:1 collection items. Flipping the status alone
48
+ // leaves the pre-order half-converted (shared catalog items, stale reserved balances), so the
49
+ // panel update endpoints only accept the regular lifecycle statuses. Use the pre-order → SO
50
+ // conversion (POST /pre-order/group-actions/create-standing-orders-from-pre-orders) instead.
51
+ export const UpdatablePreOrderStatusSchema = z.enum([
52
+ PreOrderStatusEnum.NEW,
53
+ PreOrderStatusEnum.WEBSHOP_NEW,
54
+ PreOrderStatusEnum.ACCEPTED,
55
+ PreOrderStatusEnum.VERIFIED,
56
+ PreOrderStatusEnum.COMPLETED,
57
+ ]);
58
+
59
+ export const UpdatePreOrderSchema = PreOrderSchema.omit({ uuid: true, preOrderNum: true, createdAt: true })
60
+ .partial()
61
+ .extend({ status: UpdatablePreOrderStatusSchema.optional() });
47
62
 
48
63
  export const CreatePreOrderWebshopSchema = PreOrderSchema.pick({ branchUUID: true, comment: true }).extend({
49
64
  preOrderCollectionUUID: z.string(),