@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.
- package/build/commands/pre-order/group/group-create-standing-orders-from-pre-orders.command.js +39 -0
- package/build/commands/pre-order/group/index.js +1 -0
- package/build/constant/error-i18n-key.js +5 -0
- package/build/constant/error.js +22 -0
- package/build/schemas/pre-order/pre-order.schema.js +16 -2
- package/commands/pre-order/group/group-create-standing-orders-from-pre-orders.command.ts +42 -0
- package/commands/pre-order/group/index.ts +1 -0
- package/constant/error-i18n-key.ts +6 -0
- package/constant/error.ts +22 -0
- package/package.json +1 -1
- package/schemas/pre-order/pre-order.schema.ts +16 -1
package/build/commands/pre-order/group/group-create-standing-orders-from-pre-orders.command.js
ADDED
|
@@ -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',
|
package/build/constant/error.js
CHANGED
|
@@ -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
|
-
|
|
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
|
@@ -43,7 +43,22 @@ export const CreatePreOrderSchema = z.object({
|
|
|
43
43
|
status: z.nativeEnum(PreOrderStatusEnum),
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
-
|
|
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(),
|