@floristcloud/api-lib 1.2.105 → 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);
@@ -10,6 +10,7 @@ exports.ErrorI18nKey = {
10
10
  mergeOrderHasDeliveryRoute: 'mergeOrder.hasDeliveryRoute',
11
11
  mergeOrderHasWriteOffs: 'mergeOrder.hasWriteOffs',
12
12
  mergeOrderHasDistribution: 'mergeOrder.hasDistribution',
13
+ mergeOrderHasPaymentInvoice: 'mergeOrder.hasPaymentInvoice',
13
14
  mergeOrderPaymentsTransfer: 'mergeOrder.paymentsTransfer',
14
15
  mergeOrderDeliveryMerge: 'mergeOrder.deliveryMerge',
15
16
  mergeOrderDeliveryTransfer: 'mergeOrder.deliveryTransfer',
@@ -65,6 +66,10 @@ exports.ErrorI18nKey = {
65
66
  soProductNotCreated: 'preOrderFromStandingOrder.productNotCreated',
66
67
  soCriticalError: 'preOrderFromStandingOrder.criticalError',
67
68
  soNoPreOrdersCreated: 'preOrderFromStandingOrder.noPreOrdersCreated',
69
+ // Pre-order → standing-order conversion warnings
70
+ preOrderToSoSourceEmpty: 'preOrderToStandingOrder.sourceEmpty',
71
+ preOrderToSoItemSkipped: 'preOrderToStandingOrder.itemSkipped',
72
+ preOrderToSoProductNotCreated: 'preOrderToStandingOrder.productNotCreated',
68
73
  // Copy pre-order per-item warnings
69
74
  preOrderCopyItemNoMatches: 'preOrderCopy.itemNoMatches',
70
75
  preOrderCopyItemInsufficientQuantity: 'preOrderCopy.itemInsufficientQuantity',
@@ -397,6 +397,7 @@ exports.ERRORS = {
397
397
  ORDER_MERGE_HAS_DELIVERY_ROUTE: { code: 'O030', message: 'Order is assigned to a delivery route', httpCode: 400 },
398
398
  ORDER_MERGE_HAS_WRITE_OFFS: { code: 'O031', message: 'Order has write-offs', httpCode: 400 },
399
399
  ORDER_MERGE_HAS_DISTRIBUTION: { code: 'O032', message: 'Order has products with distribution', httpCode: 400 },
400
+ ORDER_MERGE_HAS_PAYMENT_INVOICE: { code: 'O040', message: 'Order is included in a payment invoice', httpCode: 400 },
400
401
  ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
401
402
  code: 'O033',
402
403
  message: 'Order status is balance affecting, merge not allowed',
@@ -851,6 +852,27 @@ exports.ERRORS = {
851
852
  message: 'No pre-orders were created for this standing order: no matching items found in the selected collections',
852
853
  httpCode: 400,
853
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
+ },
854
876
  // PRE ORDER — copy pre-order per-item warnings
855
877
  PRE_ORDER_COPY_ITEM_NO_MATCHES: {
856
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';
@@ -7,6 +7,7 @@ export const ErrorI18nKey = {
7
7
  mergeOrderHasDeliveryRoute: 'mergeOrder.hasDeliveryRoute',
8
8
  mergeOrderHasWriteOffs: 'mergeOrder.hasWriteOffs',
9
9
  mergeOrderHasDistribution: 'mergeOrder.hasDistribution',
10
+ mergeOrderHasPaymentInvoice: 'mergeOrder.hasPaymentInvoice',
10
11
  mergeOrderPaymentsTransfer: 'mergeOrder.paymentsTransfer',
11
12
  mergeOrderDeliveryMerge: 'mergeOrder.deliveryMerge',
12
13
  mergeOrderDeliveryTransfer: 'mergeOrder.deliveryTransfer',
@@ -69,6 +70,11 @@ export const ErrorI18nKey = {
69
70
  soCriticalError: 'preOrderFromStandingOrder.criticalError',
70
71
  soNoPreOrdersCreated: 'preOrderFromStandingOrder.noPreOrdersCreated',
71
72
 
73
+ // Pre-order → standing-order conversion warnings
74
+ preOrderToSoSourceEmpty: 'preOrderToStandingOrder.sourceEmpty',
75
+ preOrderToSoItemSkipped: 'preOrderToStandingOrder.itemSkipped',
76
+ preOrderToSoProductNotCreated: 'preOrderToStandingOrder.productNotCreated',
77
+
72
78
  // Copy pre-order per-item warnings
73
79
  preOrderCopyItemNoMatches: 'preOrderCopy.itemNoMatches',
74
80
  preOrderCopyItemInsufficientQuantity: 'preOrderCopy.itemInsufficientQuantity',
package/constant/error.ts CHANGED
@@ -411,6 +411,7 @@ export const ERRORS = {
411
411
  ORDER_MERGE_HAS_DELIVERY_ROUTE: { code: 'O030', message: 'Order is assigned to a delivery route', httpCode: 400 },
412
412
  ORDER_MERGE_HAS_WRITE_OFFS: { code: 'O031', message: 'Order has write-offs', httpCode: 400 },
413
413
  ORDER_MERGE_HAS_DISTRIBUTION: { code: 'O032', message: 'Order has products with distribution', httpCode: 400 },
414
+ ORDER_MERGE_HAS_PAYMENT_INVOICE: { code: 'O040', message: 'Order is included in a payment invoice', httpCode: 400 },
414
415
  ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
415
416
  code: 'O033',
416
417
  message: 'Order status is balance affecting, merge not allowed',
@@ -887,6 +888,27 @@ export const ERRORS = {
887
888
  message: 'No pre-orders were created for this standing order: no matching items found in the selected collections',
888
889
  httpCode: 400,
889
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
+ },
890
912
  // PRE ORDER — copy pre-order per-item warnings
891
913
  PRE_ORDER_COPY_ITEM_NO_MATCHES: {
892
914
  code: 'PO032',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.105",
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(),