@floristcloud/api-lib 1.2.156 → 1.2.157

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.
@@ -14,6 +14,7 @@ const CreateOrderRequestSchema = zod_1.z.object({
14
14
  comment: zod_1.z.string().nullable(),
15
15
  clientComment: zod_1.z.string().nullable(),
16
16
  tag: zod_1.z.string().nullable(),
17
+ externalNumber: schemas_1.OrderExternalNumberRequestSchema,
17
18
  // Дата отгрузки/выдачи — одна для самовывоза и доставки. Приоритет над устаревшим
18
19
  // `delivery.deliveryDate`.
19
20
  plannedShipmentDate: schemas_1.CalendarDaySchema.nullable().optional(),
@@ -13,6 +13,7 @@ const UpdateOrderRequestSchema = zod_1.z.object({
13
13
  comment: zod_1.z.string().nullable(),
14
14
  clientComment: zod_1.z.string().nullable(),
15
15
  tag: zod_1.z.string().nullable(),
16
+ externalNumber: schemas_1.OrderExternalNumberRequestSchema,
16
17
  status: zod_1.z.nativeEnum(enum_1.OrderStatusEnum),
17
18
  isPaid: zod_1.z.coerce.boolean(),
18
19
  deliveryVat: zod_1.z.coerce.number().nullable(),
@@ -12,6 +12,7 @@ exports.ErrorI18nKey = {
12
12
  mergeOrderHasDistribution: 'mergeOrder.hasDistribution',
13
13
  mergeOrderHasPaymentInvoice: 'mergeOrder.hasPaymentInvoice',
14
14
  mergeOrderHasTransferDocument: 'mergeOrder.hasTransferDocument',
15
+ mergeOrderSourceHasExternalNumber: 'mergeOrder.sourceHasExternalNumber',
15
16
  mergeOrderPaymentsTransfer: 'mergeOrder.paymentsTransfer',
16
17
  mergeOrderDeliveryMerge: 'mergeOrder.deliveryMerge',
17
18
  mergeOrderDeliveryTransfer: 'mergeOrder.deliveryTransfer',
@@ -414,6 +414,12 @@ exports.ERRORS = {
414
414
  message: 'The order is included in a transfer document and cannot be changed or deleted',
415
415
  httpCode: 409,
416
416
  },
417
+ // В data — номер заказа, за которым номер уже закреплён: UI пишет «привязан к заказу №…».
418
+ ORDER_EXTERNAL_NUMBER_TAKEN: {
419
+ code: 'O063',
420
+ message: 'The external number is already assigned to another order',
421
+ httpCode: 409,
422
+ },
417
423
  ORDER_SPLIT_NOT_COMPLETELY_ERROR: { code: 'O019', message: 'Error splitting orders, not all orders were split', httpCode: 500 },
418
424
  ORDER_TOTAL_COST_NEGATIVE: { code: 'O020', message: 'Order total cost is negative', httpCode: 400 },
419
425
  ORDER_SUBTOTAL_NEGATIVE: { code: 'O021', message: 'Order subtotal is negative', httpCode: 400 },
@@ -437,6 +443,8 @@ exports.ERRORS = {
437
443
  httpCode: 400,
438
444
  },
439
445
  ORDER_PLANNED_SHIPMENT_DATE_NOT_UPDATED: { code: 'O062', message: 'Failed to update order planned shipment date', httpCode: 500 },
446
+ // Источник объединения удаляется, и его связь с документом ERP пропала бы молча.
447
+ ORDER_MERGE_SOURCE_HAS_EXTERNAL_NUMBER: { code: 'O064', message: 'Source order has an external number', httpCode: 400 },
440
448
  ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
441
449
  code: 'O033',
442
450
  message: 'Order status is balance affecting, merge not allowed',
@@ -30,3 +30,4 @@ __exportStar(require("./attribute-normalization.constant"), exports);
30
30
  __exportStar(require("./product-image-merge.constant"), exports);
31
31
  __exportStar(require("./client-group-actions.constant"), exports);
32
32
  __exportStar(require("./standing-order-positions.constant"), exports);
33
+ __exportStar(require("./order-external-number.constant"), exports);
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ORDER_EXTERNAL_NUMBER_MAX_LENGTH = void 0;
4
+ // Номера документов ERP/CRM короткие («ЗК-00123», GUID в 36 символов), 100 — с запасом. Колонка
5
+ // TEXT длину не держит, поэтому граница — только схема запроса.
6
+ exports.ORDER_EXTERNAL_NUMBER_MAX_LENGTH = 100;
@@ -21,4 +21,5 @@ var OrderUpdatedFieldEnum;
21
21
  OrderUpdatedFieldEnum["COMPLETED_AT"] = "COMPLETED_AT";
22
22
  OrderUpdatedFieldEnum["PAYMENT_DUE_AT"] = "PAYMENT_DUE_AT";
23
23
  OrderUpdatedFieldEnum["PLANNED_SHIPMENT_DATE"] = "PLANNED_SHIPMENT_DATE";
24
+ OrderUpdatedFieldEnum["EXTERNAL_NUMBER"] = "EXTERNAL_NUMBER";
24
25
  })(OrderUpdatedFieldEnum || (exports.OrderUpdatedFieldEnum = OrderUpdatedFieldEnum = {}));
@@ -33,6 +33,7 @@ __exportStar(require("./write-off/write-off-list.schema"), exports);
33
33
  __exportStar(require("./write-off/write-off-archive-file.schema"), exports);
34
34
  __exportStar(require("./write-off/write-off-export.schema"), exports);
35
35
  __exportStar(require("./order/order.schema"), exports);
36
+ __exportStar(require("./order/order-external-number.schema"), exports);
36
37
  __exportStar(require("./order-delivery/order-delivery.schema"), exports);
37
38
  __exportStar(require("./order-product/order-product.schema"), exports);
38
39
  __exportStar(require("./order-product/order-product-list.schema"), exports);
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OrderExternalNumberRequestSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const order_external_number_constant_1 = require("../../constant/order-external-number.constant");
6
+ // Номер заказа в ERP/CRM компании на входе create/update. Поле не пришло — номер не меняется;
7
+ // null или строка из пробелов — номер снимается (пустую строку сервер сохраняет как null, иначе
8
+ // вторая пустая строка упрётся в уникальность номера в пределах компании).
9
+ exports.OrderExternalNumberRequestSchema = zod_1.z.string().trim().max(order_external_number_constant_1.ORDER_EXTERNAL_NUMBER_MAX_LENGTH).nullable().optional();
@@ -41,6 +41,8 @@ exports.OrderSchema = zod_1.z.object({
41
41
  // ссылка, документ читается через GET /transfer-document/:uuid. Непустое значение означает, что
42
42
  // заказ заморожен — состав, статус, доставка, дата отгрузки и скидка ему уже недоступны.
43
43
  transferDocumentUUID: zod_1.z.uuid().nullable(),
44
+ // Номер заказа в ERP/CRM компании, которым сотрудники сверяют заказ со своей учётной системой.
45
+ externalNumber: zod_1.z.string().nullable(),
44
46
  completedAt: zod_1.z.date().nullable(),
45
47
  paymentDueAt: zod_1.z.date().nullable(),
46
48
  // План отгрузки/выдачи — одна дата для самовывоза и доставки, календарный день `YYYY-MM-DD`.
@@ -51,12 +53,13 @@ exports.OrderSchema = zod_1.z.object({
51
53
  deletedAt: zod_1.z.date().nullable(),
52
54
  });
53
55
  // Витрина клиента не показывает внутреннюю кухню документов, поэтому ссылки на счёт и на УПД
54
- // сюда не попадают.
56
+ // сюда не попадают. Номер в ERP компании — тоже её внутренний учёт.
55
57
  exports.OrderForClientSchema = exports.OrderSchema.omit({
56
58
  comment: true,
57
59
  tag: true,
58
60
  paymentInvoiceUUID: true,
59
61
  transferDocumentUUID: true,
62
+ externalNumber: true,
60
63
  });
61
64
  exports.OrderExtendedSchema = exports.OrderSchema.extend({
62
65
  client: client_1.ClientSchema,
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { OrderTypeEnum } from '../../enum';
3
- import { CalendarDaySchema, OrderDeliverySchema, OrderSchema } from '../../schemas';
3
+ import { CalendarDaySchema, OrderDeliverySchema, OrderExternalNumberRequestSchema, OrderSchema } from '../../schemas';
4
4
  import { MoneySchema } from '../../schemas/money.schema';
5
5
 
6
6
  const CreateOrderRequestSchema = z.object({
@@ -12,6 +12,7 @@ const CreateOrderRequestSchema = z.object({
12
12
  comment: z.string().nullable(),
13
13
  clientComment: z.string().nullable(),
14
14
  tag: z.string().nullable(),
15
+ externalNumber: OrderExternalNumberRequestSchema,
15
16
  // Дата отгрузки/выдачи — одна для самовывоза и доставки. Приоритет над устаревшим
16
17
  // `delivery.deliveryDate`.
17
18
  plannedShipmentDate: CalendarDaySchema.nullable().optional(),
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { OrderStatusEnum, OrderTypeEnum } from '../../enum';
3
- import { CalendarDaySchema, OrderSchema } from '../../schemas';
3
+ import { CalendarDaySchema, OrderExternalNumberRequestSchema, OrderSchema } from '../../schemas';
4
4
  import { MoneySchema } from '../../schemas/money.schema';
5
5
 
6
6
  const UpdateOrderRequestSchema = z.object({
@@ -11,6 +11,7 @@ const UpdateOrderRequestSchema = z.object({
11
11
  comment: z.string().nullable(),
12
12
  clientComment: z.string().nullable(),
13
13
  tag: z.string().nullable(),
14
+ externalNumber: OrderExternalNumberRequestSchema,
14
15
  status: z.nativeEnum(OrderStatusEnum),
15
16
  isPaid: z.coerce.boolean(),
16
17
  deliveryVat: z.coerce.number().nullable(),
@@ -9,6 +9,7 @@ export const ErrorI18nKey = {
9
9
  mergeOrderHasDistribution: 'mergeOrder.hasDistribution',
10
10
  mergeOrderHasPaymentInvoice: 'mergeOrder.hasPaymentInvoice',
11
11
  mergeOrderHasTransferDocument: 'mergeOrder.hasTransferDocument',
12
+ mergeOrderSourceHasExternalNumber: 'mergeOrder.sourceHasExternalNumber',
12
13
  mergeOrderPaymentsTransfer: 'mergeOrder.paymentsTransfer',
13
14
  mergeOrderDeliveryMerge: 'mergeOrder.deliveryMerge',
14
15
  mergeOrderDeliveryTransfer: 'mergeOrder.deliveryTransfer',
package/constant/error.ts CHANGED
@@ -428,6 +428,12 @@ export const ERRORS = {
428
428
  message: 'The order is included in a transfer document and cannot be changed or deleted',
429
429
  httpCode: 409,
430
430
  },
431
+ // В data — номер заказа, за которым номер уже закреплён: UI пишет «привязан к заказу №…».
432
+ ORDER_EXTERNAL_NUMBER_TAKEN: {
433
+ code: 'O063',
434
+ message: 'The external number is already assigned to another order',
435
+ httpCode: 409,
436
+ },
431
437
  ORDER_SPLIT_NOT_COMPLETELY_ERROR: { code: 'O019', message: 'Error splitting orders, not all orders were split', httpCode: 500 },
432
438
  ORDER_TOTAL_COST_NEGATIVE: { code: 'O020', message: 'Order total cost is negative', httpCode: 400 },
433
439
  ORDER_SUBTOTAL_NEGATIVE: { code: 'O021', message: 'Order subtotal is negative', httpCode: 400 },
@@ -451,6 +457,8 @@ export const ERRORS = {
451
457
  httpCode: 400,
452
458
  },
453
459
  ORDER_PLANNED_SHIPMENT_DATE_NOT_UPDATED: { code: 'O062', message: 'Failed to update order planned shipment date', httpCode: 500 },
460
+ // Источник объединения удаляется, и его связь с документом ERP пропала бы молча.
461
+ ORDER_MERGE_SOURCE_HAS_EXTERNAL_NUMBER: { code: 'O064', message: 'Source order has an external number', httpCode: 400 },
454
462
  ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
455
463
  code: 'O033',
456
464
  message: 'Order status is balance affecting, merge not allowed',
package/constant/index.ts CHANGED
@@ -14,3 +14,4 @@ export * from './attribute-normalization.constant';
14
14
  export * from './product-image-merge.constant';
15
15
  export * from './client-group-actions.constant';
16
16
  export * from './standing-order-positions.constant';
17
+ export * from './order-external-number.constant';
@@ -0,0 +1,3 @@
1
+ // Номера документов ERP/CRM короткие («ЗК-00123», GUID в 36 символов), 100 — с запасом. Колонка
2
+ // TEXT длину не держит, поэтому граница — только схема запроса.
3
+ export const ORDER_EXTERNAL_NUMBER_MAX_LENGTH = 100;
@@ -17,4 +17,5 @@ export enum OrderUpdatedFieldEnum {
17
17
  COMPLETED_AT = 'COMPLETED_AT',
18
18
  PAYMENT_DUE_AT = 'PAYMENT_DUE_AT',
19
19
  PLANNED_SHIPMENT_DATE = 'PLANNED_SHIPMENT_DATE',
20
+ EXTERNAL_NUMBER = 'EXTERNAL_NUMBER',
20
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.156",
3
+ "version": "1.2.157",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
package/schemas/index.ts CHANGED
@@ -17,6 +17,7 @@ export * from './write-off/write-off-list.schema';
17
17
  export * from './write-off/write-off-archive-file.schema';
18
18
  export * from './write-off/write-off-export.schema';
19
19
  export * from './order/order.schema';
20
+ export * from './order/order-external-number.schema';
20
21
  export * from './order-delivery/order-delivery.schema';
21
22
  export * from './order-product/order-product.schema';
22
23
  export * from './order-product/order-product-list.schema';
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { ORDER_EXTERNAL_NUMBER_MAX_LENGTH } from '../../constant/order-external-number.constant';
3
+
4
+ // Номер заказа в ERP/CRM компании на входе create/update. Поле не пришло — номер не меняется;
5
+ // null или строка из пробелов — номер снимается (пустую строку сервер сохраняет как null, иначе
6
+ // вторая пустая строка упрётся в уникальность номера в пределах компании).
7
+ export const OrderExternalNumberRequestSchema = z.string().trim().max(ORDER_EXTERNAL_NUMBER_MAX_LENGTH).nullable().optional();
@@ -43,6 +43,8 @@ export const OrderSchema = z.object({
43
43
  // ссылка, документ читается через GET /transfer-document/:uuid. Непустое значение означает, что
44
44
  // заказ заморожен — состав, статус, доставка, дата отгрузки и скидка ему уже недоступны.
45
45
  transferDocumentUUID: z.uuid().nullable(),
46
+ // Номер заказа в ERP/CRM компании, которым сотрудники сверяют заказ со своей учётной системой.
47
+ externalNumber: z.string().nullable(),
46
48
 
47
49
  completedAt: z.date().nullable(),
48
50
  paymentDueAt: z.date().nullable(),
@@ -56,12 +58,13 @@ export const OrderSchema = z.object({
56
58
  });
57
59
 
58
60
  // Витрина клиента не показывает внутреннюю кухню документов, поэтому ссылки на счёт и на УПД
59
- // сюда не попадают.
61
+ // сюда не попадают. Номер в ERP компании — тоже её внутренний учёт.
60
62
  export const OrderForClientSchema = OrderSchema.omit({
61
63
  comment: true,
62
64
  tag: true,
63
65
  paymentInvoiceUUID: true,
64
66
  transferDocumentUUID: true,
67
+ externalNumber: true,
65
68
  });
66
69
 
67
70
  export const OrderExtendedSchema = OrderSchema.extend({