@floristcloud/api-lib 1.2.196 → 1.2.197

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.
Files changed (27) hide show
  1. package/build/commands/integration/one-c/get-one-c-order-exchange-state.query.js +8 -0
  2. package/build/commands/integration/one-c/index.js +1 -0
  3. package/build/constant/error.js +16 -0
  4. package/build/enum/index.js +3 -0
  5. package/build/enum/one-c-order-exchange-stage.enum.js +18 -0
  6. package/build/enum/one-c-order-owner.enum.js +12 -0
  7. package/build/enum/one-c-order-pending-reason.enum.js +15 -0
  8. package/build/schemas/integration/one-c/get-one-c-order-exchange-state-response.schema.js +10 -0
  9. package/build/schemas/integration/one-c/index.js +2 -0
  10. package/build/schemas/integration/one-c/one-c-order-exchange-state.schema.js +35 -0
  11. package/build/schemas/integration/one-c/one-c-settings.schema.js +15 -1
  12. package/build/schemas/integration/one-c/one-c-status.schema.js +2 -4
  13. package/build/schemas/integration/one-c/update-one-c-settings-request.schema.js +5 -1
  14. package/commands/integration/one-c/get-one-c-order-exchange-state.query.ts +7 -0
  15. package/commands/integration/one-c/index.ts +1 -0
  16. package/constant/error.ts +16 -0
  17. package/enum/index.ts +3 -0
  18. package/enum/one-c-order-exchange-stage.enum.ts +14 -0
  19. package/enum/one-c-order-owner.enum.ts +8 -0
  20. package/enum/one-c-order-pending-reason.enum.ts +11 -0
  21. package/package.json +1 -1
  22. package/schemas/integration/one-c/get-one-c-order-exchange-state-response.schema.ts +8 -0
  23. package/schemas/integration/one-c/index.ts +2 -0
  24. package/schemas/integration/one-c/one-c-order-exchange-state.schema.ts +34 -0
  25. package/schemas/integration/one-c/one-c-settings.schema.ts +16 -1
  26. package/schemas/integration/one-c/one-c-status.schema.ts +2 -4
  27. package/schemas/integration/one-c/update-one-c-settings-request.schema.ts +6 -1
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCOrderExchangeStateContractQuery = void 0;
4
+ const get_one_c_order_exchange_state_response_schema_1 = require("../../../schemas/integration/one-c/get-one-c-order-exchange-state-response.schema");
5
+ var GetOneCOrderExchangeStateContractQuery;
6
+ (function (GetOneCOrderExchangeStateContractQuery) {
7
+ GetOneCOrderExchangeStateContractQuery.ResponseSchema = get_one_c_order_exchange_state_response_schema_1.GetOneCOrderExchangeStateResponseSchema;
8
+ })(GetOneCOrderExchangeStateContractQuery || (exports.GetOneCOrderExchangeStateContractQuery = GetOneCOrderExchangeStateContractQuery = {}));
@@ -18,6 +18,7 @@ __exportStar(require("./connect-one-c.command"), exports);
18
18
  __exportStar(require("./rotate-one-c-password.command"), exports);
19
19
  __exportStar(require("./disconnect-one-c.command"), exports);
20
20
  __exportStar(require("./get-one-c-status.query"), exports);
21
+ __exportStar(require("./get-one-c-order-exchange-state.query"), exports);
21
22
  __exportStar(require("./get-one-c-stock-conflict-list.query"), exports);
22
23
  __exportStar(require("./get-one-c-stock-conflict-preview.query"), exports);
23
24
  __exportStar(require("./resolve-one-c-stock-conflict.command"), exports);
@@ -1791,6 +1791,22 @@ exports.ERRORS = {
1791
1791
  ONE_C_EXCHANGE_FILE_TOO_LARGE: { code: 'OC024', message: '1C exchange file exceeds the size limit', httpCode: 413 },
1792
1792
  // Приём каталога выключен на интеграции (CompanyIntegration.isCatalogExchangeEnabled), обмен заказами продолжается.
1793
1793
  ONE_C_CATALOG_EXCHANGE_DISABLED: { code: 'OC025', message: '1C catalog exchange is disabled for this company', httpCode: 409 },
1794
+ // Состав заказа из файла заказов 1С (1С ведёт заказ) не применён к заказу FC.
1795
+ ONE_C_ORDER_APPLY_UNKNOWN_PRODUCT: {
1796
+ code: 'OC026',
1797
+ message: '1C order contains a product that is not linked in Florist Cloud',
1798
+ httpCode: 422,
1799
+ },
1800
+ ONE_C_ORDER_APPLY_FRACTIONAL_QUANTITY: { code: 'OC027', message: '1C order contains a fractional quantity', httpCode: 422 },
1801
+ ONE_C_ORDER_APPLY_FAILED: { code: 'OC028', message: 'Failed to apply 1C order to Florist Cloud order', httpCode: 500 },
1802
+ ONE_C_ORDER_EXCHANGE_STATE_FAILED: { code: 'OC029', message: 'Failed to read 1C order exchange state', httpCode: 500 },
1803
+ ONE_C_ORDER_APPLY_INVALID_LINE: {
1804
+ code: 'OC030',
1805
+ message: '1C order contains a line without product, quantity or price',
1806
+ httpCode: 422,
1807
+ },
1808
+ ONE_C_ORDER_APPLY_EMPTY: { code: 'OC031', message: '1C order contains no lines', httpCode: 422 },
1809
+ ONE_C_ORDER_APPLY_MIXED_PRICES: { code: 'OC032', message: '1C order contains one product at different prices', httpCode: 422 },
1794
1810
  // COMPANY INTEGRATION (общая запись интеграции компании)
1795
1811
  COMPANY_INTEGRATION_FETCH_FAILED: { code: 'CINT001', message: 'Failed to read company integration', httpCode: 500 },
1796
1812
  COMPANY_INTEGRATION_NOT_SAVED: { code: 'CINT002', message: 'Failed to save company integration', httpCode: 500 },
@@ -169,6 +169,9 @@ __exportStar(require("./write-off-report-date-basis.enum"), exports);
169
169
  __exportStar(require("./write-off-status.enum"), exports);
170
170
  __exportStar(require("./one-c-stock-conflict-status.enum"), exports);
171
171
  __exportStar(require("./one-c-order-sync-mode.enum"), exports);
172
+ __exportStar(require("./one-c-order-owner.enum"), exports);
173
+ __exportStar(require("./one-c-order-exchange-stage.enum"), exports);
174
+ __exportStar(require("./one-c-order-pending-reason.enum"), exports);
172
175
  __exportStar(require("./one-c-stock-conflict-line-action.enum"), exports);
173
176
  __exportStar(require("./one-c-stock-conflict-line-restriction.enum"), exports);
174
177
  __exportStar(require("./pre-order-conversion-match-kind.enum"), exports);
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCOrderExchangeStageEnum = void 0;
4
+ // Где заказ FC находится в обмене с 1С — для предупреждения на заказе.
5
+ var OneCOrderExchangeStageEnum;
6
+ (function (OneCOrderExchangeStageEnum) {
7
+ // В 1С ещё не ушёл: ждёт обмена, нужного статуса или даты отгрузки (см. pendingReason).
8
+ OneCOrderExchangeStageEnum["NOT_SENT"] = "NOT_SENT";
9
+ // В 1С, изменения FC доходят до документа.
10
+ OneCOrderExchangeStageEnum["SENT"] = "SENT";
11
+ // FC ведёт заказ, но в 1С началось исполнение (отгрузка, «Завершен», проведение в режиме «До проведения»):
12
+ // изменения FC в 1С больше не уходят.
13
+ OneCOrderExchangeStageEnum["IN_PROGRESS_IN_ONE_C"] = "IN_PROGRESS_IN_ONE_C";
14
+ // 1С ведёт заказ: изменения FC в 1С не уходят, состав приходит из 1С.
15
+ OneCOrderExchangeStageEnum["MANAGED_BY_ONE_C"] = "MANAGED_BY_ONE_C";
16
+ // 1С сообщила о полной отгрузке.
17
+ OneCOrderExchangeStageEnum["SHIPPED"] = "SHIPPED";
18
+ })(OneCOrderExchangeStageEnum || (exports.OneCOrderExchangeStageEnum = OneCOrderExchangeStageEnum = {}));
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCOrderOwnerEnum = void 0;
4
+ // Кто ведёт заказ после передачи в 1С.
5
+ var OneCOrderOwnerEnum;
6
+ (function (OneCOrderOwnerEnum) {
7
+ // FC — источник правды: изменения уходят в 1С до границы исполнения (первая отгрузка, «Завершен») или до сигнала режима
8
+ // OneCOrderSyncModeEnum, смотря что раньше.
9
+ OneCOrderOwnerEnum["FC"] = "FC";
10
+ // FC — канал продаж: заказ уходит в 1С один раз, дальше его состав приходит из файла заказов 1С.
11
+ OneCOrderOwnerEnum["ONE_C"] = "ONE_C";
12
+ })(OneCOrderOwnerEnum || (exports.OneCOrderOwnerEnum = OneCOrderOwnerEnum = {}));
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCOrderPendingReasonEnum = void 0;
4
+ // Почему заказ ещё не ушёл в 1С.
5
+ var OneCOrderPendingReasonEnum;
6
+ (function (OneCOrderPendingReasonEnum) {
7
+ // Ждёт ближайшего обмена.
8
+ OneCOrderPendingReasonEnum["AWAITING_EXCHANGE"] = "AWAITING_EXCHANGE";
9
+ // Статус заказа не входит в статусы, с которых заказы уходят в 1С.
10
+ OneCOrderPendingReasonEnum["STATUS_NOT_EXPORTED"] = "STATUS_NOT_EXPORTED";
11
+ // 1С резервирует заказы, а без даты отгрузки УНФ заказ не проведёт.
12
+ OneCOrderPendingReasonEnum["SHIPMENT_DATE_REQUIRED"] = "SHIPMENT_DATE_REQUIRED";
13
+ // В заказе нет товаров из 1С.
14
+ OneCOrderPendingReasonEnum["NO_ONE_C_PRODUCTS"] = "NO_ONE_C_PRODUCTS";
15
+ })(OneCOrderPendingReasonEnum || (exports.OneCOrderPendingReasonEnum = OneCOrderPendingReasonEnum = {}));
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCOrderExchangeStateResponseSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_order_exchange_state_schema_1 = require("./one-c-order-exchange-state.schema");
6
+ // data = null — интеграция 1С не подключена.
7
+ exports.GetOneCOrderExchangeStateResponseSchema = zod_1.z.object({
8
+ message: zod_1.z.string().optional(),
9
+ data: one_c_order_exchange_state_schema_1.OneCOrderExchangeStateSchema.nullable(),
10
+ });
@@ -30,3 +30,5 @@ __exportStar(require("./resolve-one-c-stock-conflict-response.schema"), exports)
30
30
  __exportStar(require("./one-c-settings.schema"), exports);
31
31
  __exportStar(require("./update-one-c-settings-request.schema"), exports);
32
32
  __exportStar(require("./update-one-c-settings-response.schema"), exports);
33
+ __exportStar(require("./one-c-order-exchange-state.schema"), exports);
34
+ __exportStar(require("./get-one-c-order-exchange-state-response.schema"), exports);
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCOrderExchangeStateSchema = exports.OneCShipmentDiscrepancySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_order_exchange_stage_enum_1 = require("../../../enum/one-c-order-exchange-stage.enum");
6
+ const one_c_order_owner_enum_1 = require("../../../enum/one-c-order-owner.enum");
7
+ const one_c_order_pending_reason_enum_1 = require("../../../enum/one-c-order-pending-reason.enum");
8
+ // Товар, отгруженный в 1С не в том количестве, что в заказе FC, — в том числе отгруженный, но отсутствующий в заказе.
9
+ exports.OneCShipmentDiscrepancySchema = zod_1.z.object({
10
+ // Ид номенклатуры 1С.
11
+ externalId: zod_1.z.string(),
12
+ // null — товар 1С без товара FC (связки нет).
13
+ productUUID: zod_1.z.string().nullable(),
14
+ productName: zod_1.z.string().nullable(),
15
+ orderedQuantity: zod_1.z.number(),
16
+ shippedQuantity: zod_1.z.number(),
17
+ });
18
+ // Состояние заказа в обмене с 1С: панель показывает по нему предупреждение на заказе.
19
+ exports.OneCOrderExchangeStateSchema = zod_1.z.object({
20
+ orderOwner: zod_1.z.nativeEnum(one_c_order_owner_enum_1.OneCOrderOwnerEnum),
21
+ stage: zod_1.z.nativeEnum(one_c_order_exchange_stage_enum_1.OneCOrderExchangeStageEnum),
22
+ // Только для NOT_SENT.
23
+ pendingReason: zod_1.z.nativeEnum(one_c_order_pending_reason_enum_1.OneCOrderPendingReasonEnum).nullable(),
24
+ // Изменения FC дойдут до документа в 1С.
25
+ isChangesDelivered: zod_1.z.boolean(),
26
+ sentAt: zod_1.z.string().datetime().nullable(),
27
+ postedAt: zod_1.z.string().datetime().nullable(),
28
+ firstShippedAt: zod_1.z.string().datetime().nullable(),
29
+ shippedAt: zod_1.z.string().datetime().nullable(),
30
+ completedInOneCAt: zod_1.z.string().datetime().nullable(),
31
+ shipmentDiscrepancies: zod_1.z.array(exports.OneCShipmentDiscrepancySchema),
32
+ // Последнее применение состава из 1С не прошло (режим ONE_C): код ошибки и когда.
33
+ applyErrorCode: zod_1.z.string().nullable(),
34
+ applyErrorAt: zod_1.z.string().datetime().nullable(),
35
+ });
@@ -2,10 +2,24 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OneCSettingsSchema = void 0;
4
4
  const zod_1 = require("zod");
5
+ const one_c_order_owner_enum_1 = require("../../../enum/one-c-order-owner.enum");
5
6
  const one_c_order_sync_mode_enum_1 = require("../../../enum/one-c-order-sync-mode.enum");
7
+ const order_status_enum_1 = require("../../../enum/order-status.enum");
8
+ // Статусы, с которых заказ не может уйти в 1С: корзина витрины и шаблон.
9
+ const NOT_EXPORTABLE_STATUSES = [order_status_enum_1.OrderStatusEnum.WEBSHOP_NEW, order_status_enum_1.OrderStatusEnum.TEMPLATE];
6
10
  // Настройки интеграции 1С, которые меняет администратор компании.
7
11
  exports.OneCSettingsSchema = zod_1.z.object({
8
12
  isOrderMeasureUnitFromProduct: zod_1.z.boolean(),
9
- // До какого события в 1С уходят изменения выгруженного заказа (FC-583).
13
+ // До какого события в 1С уходят изменения выгруженного заказа, когда заказ ведёт FC (FC-583).
10
14
  orderSyncMode: zod_1.z.nativeEnum(one_c_order_sync_mode_enum_1.OneCOrderSyncModeEnum),
15
+ // Кто ведёт заказ после передачи в 1С.
16
+ orderOwner: zod_1.z.nativeEnum(one_c_order_owner_enum_1.OneCOrderOwnerEnum),
17
+ // С каких статусов новый заказ уходит в 1С; пусто — с любого, кроме корзины и шаблона.
18
+ exportStatuses: zod_1.z
19
+ .array(zod_1.z.nativeEnum(order_status_enum_1.OrderStatusEnum))
20
+ .refine(statuses => statuses.every(status => !NOT_EXPORTABLE_STATUSES.includes(status)), {
21
+ message: 'Cart and template statuses cannot be exported',
22
+ }),
23
+ // 1С резервирует заказы FC: остаток считается без двойного вычета, заказ без даты отгрузки не уходит.
24
+ isOneCReserving: zod_1.z.boolean(),
11
25
  });
@@ -3,11 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OneCStatusSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const integration_status_enum_1 = require("../../../enum/integration-status.enum");
6
- const one_c_order_sync_mode_enum_1 = require("../../../enum/one-c-order-sync-mode.enum");
7
- exports.OneCStatusSchema = zod_1.z.object({
6
+ const one_c_settings_schema_1 = require("./one-c-settings.schema");
7
+ exports.OneCStatusSchema = one_c_settings_schema_1.OneCSettingsSchema.extend({
8
8
  isConnected: zod_1.z.boolean(),
9
- isOrderMeasureUnitFromProduct: zod_1.z.boolean(),
10
- orderSyncMode: zod_1.z.nativeEnum(one_c_order_sync_mode_enum_1.OneCOrderSyncModeEnum),
11
9
  status: zod_1.z.nativeEnum(integration_status_enum_1.IntegrationStatusEnum).nullable(),
12
10
  username: zod_1.z.string().nullable(),
13
11
  lastCheckauthAt: zod_1.z.string().datetime().nullable(),
@@ -4,4 +4,8 @@ exports.UpdateOneCSettingsRequestSchema = void 0;
4
4
  const one_c_settings_schema_1 = require("./one-c-settings.schema");
5
5
  // Меняются только переданные настройки; пустой запрос — ошибка валидации. Поля перечислены явно: библиотека собирается
6
6
  // под ES2016, Object.values в ней нет. Новая настройка добавляется и сюда.
7
- exports.UpdateOneCSettingsRequestSchema = one_c_settings_schema_1.OneCSettingsSchema.partial().refine(settings => settings.isOrderMeasureUnitFromProduct !== undefined || settings.orderSyncMode !== undefined, { message: 'At least one setting is required' });
7
+ exports.UpdateOneCSettingsRequestSchema = one_c_settings_schema_1.OneCSettingsSchema.partial().refine(settings => settings.isOrderMeasureUnitFromProduct !== undefined ||
8
+ settings.orderSyncMode !== undefined ||
9
+ settings.orderOwner !== undefined ||
10
+ settings.exportStatuses !== undefined ||
11
+ settings.isOneCReserving !== undefined, { message: 'At least one setting is required' });
@@ -0,0 +1,7 @@
1
+ import type { z } from 'zod';
2
+ import { GetOneCOrderExchangeStateResponseSchema } from '../../../schemas/integration/one-c/get-one-c-order-exchange-state-response.schema';
3
+
4
+ export namespace GetOneCOrderExchangeStateContractQuery {
5
+ export const ResponseSchema = GetOneCOrderExchangeStateResponseSchema;
6
+ export type Response = z.infer<typeof ResponseSchema>;
7
+ }
@@ -2,6 +2,7 @@ export * from './connect-one-c.command';
2
2
  export * from './rotate-one-c-password.command';
3
3
  export * from './disconnect-one-c.command';
4
4
  export * from './get-one-c-status.query';
5
+ export * from './get-one-c-order-exchange-state.query';
5
6
  export * from './get-one-c-stock-conflict-list.query';
6
7
  export * from './get-one-c-stock-conflict-preview.query';
7
8
  export * from './resolve-one-c-stock-conflict.command';
package/constant/error.ts CHANGED
@@ -1861,6 +1861,22 @@ export const ERRORS = {
1861
1861
  ONE_C_EXCHANGE_FILE_TOO_LARGE: { code: 'OC024', message: '1C exchange file exceeds the size limit', httpCode: 413 },
1862
1862
  // Приём каталога выключен на интеграции (CompanyIntegration.isCatalogExchangeEnabled), обмен заказами продолжается.
1863
1863
  ONE_C_CATALOG_EXCHANGE_DISABLED: { code: 'OC025', message: '1C catalog exchange is disabled for this company', httpCode: 409 },
1864
+ // Состав заказа из файла заказов 1С (1С ведёт заказ) не применён к заказу FC.
1865
+ ONE_C_ORDER_APPLY_UNKNOWN_PRODUCT: {
1866
+ code: 'OC026',
1867
+ message: '1C order contains a product that is not linked in Florist Cloud',
1868
+ httpCode: 422,
1869
+ },
1870
+ ONE_C_ORDER_APPLY_FRACTIONAL_QUANTITY: { code: 'OC027', message: '1C order contains a fractional quantity', httpCode: 422 },
1871
+ ONE_C_ORDER_APPLY_FAILED: { code: 'OC028', message: 'Failed to apply 1C order to Florist Cloud order', httpCode: 500 },
1872
+ ONE_C_ORDER_EXCHANGE_STATE_FAILED: { code: 'OC029', message: 'Failed to read 1C order exchange state', httpCode: 500 },
1873
+ ONE_C_ORDER_APPLY_INVALID_LINE: {
1874
+ code: 'OC030',
1875
+ message: '1C order contains a line without product, quantity or price',
1876
+ httpCode: 422,
1877
+ },
1878
+ ONE_C_ORDER_APPLY_EMPTY: { code: 'OC031', message: '1C order contains no lines', httpCode: 422 },
1879
+ ONE_C_ORDER_APPLY_MIXED_PRICES: { code: 'OC032', message: '1C order contains one product at different prices', httpCode: 422 },
1864
1880
 
1865
1881
  // COMPANY INTEGRATION (общая запись интеграции компании)
1866
1882
  COMPANY_INTEGRATION_FETCH_FAILED: { code: 'CINT001', message: 'Failed to read company integration', httpCode: 500 },
package/enum/index.ts CHANGED
@@ -153,6 +153,9 @@ export * from './write-off-report-date-basis.enum';
153
153
  export * from './write-off-status.enum';
154
154
  export * from './one-c-stock-conflict-status.enum';
155
155
  export * from './one-c-order-sync-mode.enum';
156
+ export * from './one-c-order-owner.enum';
157
+ export * from './one-c-order-exchange-stage.enum';
158
+ export * from './one-c-order-pending-reason.enum';
156
159
  export * from './one-c-stock-conflict-line-action.enum';
157
160
  export * from './one-c-stock-conflict-line-restriction.enum';
158
161
  export * from './pre-order-conversion-match-kind.enum';
@@ -0,0 +1,14 @@
1
+ // Где заказ FC находится в обмене с 1С — для предупреждения на заказе.
2
+ export enum OneCOrderExchangeStageEnum {
3
+ // В 1С ещё не ушёл: ждёт обмена, нужного статуса или даты отгрузки (см. pendingReason).
4
+ NOT_SENT = 'NOT_SENT',
5
+ // В 1С, изменения FC доходят до документа.
6
+ SENT = 'SENT',
7
+ // FC ведёт заказ, но в 1С началось исполнение (отгрузка, «Завершен», проведение в режиме «До проведения»):
8
+ // изменения FC в 1С больше не уходят.
9
+ IN_PROGRESS_IN_ONE_C = 'IN_PROGRESS_IN_ONE_C',
10
+ // 1С ведёт заказ: изменения FC в 1С не уходят, состав приходит из 1С.
11
+ MANAGED_BY_ONE_C = 'MANAGED_BY_ONE_C',
12
+ // 1С сообщила о полной отгрузке.
13
+ SHIPPED = 'SHIPPED',
14
+ }
@@ -0,0 +1,8 @@
1
+ // Кто ведёт заказ после передачи в 1С.
2
+ export enum OneCOrderOwnerEnum {
3
+ // FC — источник правды: изменения уходят в 1С до границы исполнения (первая отгрузка, «Завершен») или до сигнала режима
4
+ // OneCOrderSyncModeEnum, смотря что раньше.
5
+ FC = 'FC',
6
+ // FC — канал продаж: заказ уходит в 1С один раз, дальше его состав приходит из файла заказов 1С.
7
+ ONE_C = 'ONE_C',
8
+ }
@@ -0,0 +1,11 @@
1
+ // Почему заказ ещё не ушёл в 1С.
2
+ export enum OneCOrderPendingReasonEnum {
3
+ // Ждёт ближайшего обмена.
4
+ AWAITING_EXCHANGE = 'AWAITING_EXCHANGE',
5
+ // Статус заказа не входит в статусы, с которых заказы уходят в 1С.
6
+ STATUS_NOT_EXPORTED = 'STATUS_NOT_EXPORTED',
7
+ // 1С резервирует заказы, а без даты отгрузки УНФ заказ не проведёт.
8
+ SHIPMENT_DATE_REQUIRED = 'SHIPMENT_DATE_REQUIRED',
9
+ // В заказе нет товаров из 1С.
10
+ NO_ONE_C_PRODUCTS = 'NO_ONE_C_PRODUCTS',
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.196",
3
+ "version": "1.2.197",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { OneCOrderExchangeStateSchema } from './one-c-order-exchange-state.schema';
3
+
4
+ // data = null — интеграция 1С не подключена.
5
+ export const GetOneCOrderExchangeStateResponseSchema = z.object({
6
+ message: z.string().optional(),
7
+ data: OneCOrderExchangeStateSchema.nullable(),
8
+ });
@@ -14,3 +14,5 @@ export * from './resolve-one-c-stock-conflict-response.schema';
14
14
  export * from './one-c-settings.schema';
15
15
  export * from './update-one-c-settings-request.schema';
16
16
  export * from './update-one-c-settings-response.schema';
17
+ export * from './one-c-order-exchange-state.schema';
18
+ export * from './get-one-c-order-exchange-state-response.schema';
@@ -0,0 +1,34 @@
1
+ import { z } from 'zod';
2
+ import { OneCOrderExchangeStageEnum } from '../../../enum/one-c-order-exchange-stage.enum';
3
+ import { OneCOrderOwnerEnum } from '../../../enum/one-c-order-owner.enum';
4
+ import { OneCOrderPendingReasonEnum } from '../../../enum/one-c-order-pending-reason.enum';
5
+
6
+ // Товар, отгруженный в 1С не в том количестве, что в заказе FC, — в том числе отгруженный, но отсутствующий в заказе.
7
+ export const OneCShipmentDiscrepancySchema = z.object({
8
+ // Ид номенклатуры 1С.
9
+ externalId: z.string(),
10
+ // null — товар 1С без товара FC (связки нет).
11
+ productUUID: z.string().nullable(),
12
+ productName: z.string().nullable(),
13
+ orderedQuantity: z.number(),
14
+ shippedQuantity: z.number(),
15
+ });
16
+
17
+ // Состояние заказа в обмене с 1С: панель показывает по нему предупреждение на заказе.
18
+ export const OneCOrderExchangeStateSchema = z.object({
19
+ orderOwner: z.nativeEnum(OneCOrderOwnerEnum),
20
+ stage: z.nativeEnum(OneCOrderExchangeStageEnum),
21
+ // Только для NOT_SENT.
22
+ pendingReason: z.nativeEnum(OneCOrderPendingReasonEnum).nullable(),
23
+ // Изменения FC дойдут до документа в 1С.
24
+ isChangesDelivered: z.boolean(),
25
+ sentAt: z.string().datetime().nullable(),
26
+ postedAt: z.string().datetime().nullable(),
27
+ firstShippedAt: z.string().datetime().nullable(),
28
+ shippedAt: z.string().datetime().nullable(),
29
+ completedInOneCAt: z.string().datetime().nullable(),
30
+ shipmentDiscrepancies: z.array(OneCShipmentDiscrepancySchema),
31
+ // Последнее применение состава из 1С не прошло (режим ONE_C): код ошибки и когда.
32
+ applyErrorCode: z.string().nullable(),
33
+ applyErrorAt: z.string().datetime().nullable(),
34
+ });
@@ -1,9 +1,24 @@
1
1
  import { z } from 'zod';
2
+ import { OneCOrderOwnerEnum } from '../../../enum/one-c-order-owner.enum';
2
3
  import { OneCOrderSyncModeEnum } from '../../../enum/one-c-order-sync-mode.enum';
4
+ import { OrderStatusEnum } from '../../../enum/order-status.enum';
5
+
6
+ // Статусы, с которых заказ не может уйти в 1С: корзина витрины и шаблон.
7
+ const NOT_EXPORTABLE_STATUSES: OrderStatusEnum[] = [OrderStatusEnum.WEBSHOP_NEW, OrderStatusEnum.TEMPLATE];
3
8
 
4
9
  // Настройки интеграции 1С, которые меняет администратор компании.
5
10
  export const OneCSettingsSchema = z.object({
6
11
  isOrderMeasureUnitFromProduct: z.boolean(),
7
- // До какого события в 1С уходят изменения выгруженного заказа (FC-583).
12
+ // До какого события в 1С уходят изменения выгруженного заказа, когда заказ ведёт FC (FC-583).
8
13
  orderSyncMode: z.nativeEnum(OneCOrderSyncModeEnum),
14
+ // Кто ведёт заказ после передачи в 1С.
15
+ orderOwner: z.nativeEnum(OneCOrderOwnerEnum),
16
+ // С каких статусов новый заказ уходит в 1С; пусто — с любого, кроме корзины и шаблона.
17
+ exportStatuses: z
18
+ .array(z.nativeEnum(OrderStatusEnum))
19
+ .refine(statuses => statuses.every(status => !NOT_EXPORTABLE_STATUSES.includes(status)), {
20
+ message: 'Cart and template statuses cannot be exported',
21
+ }),
22
+ // 1С резервирует заказы FC: остаток считается без двойного вычета, заказ без даты отгрузки не уходит.
23
+ isOneCReserving: z.boolean(),
9
24
  });
@@ -1,11 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { IntegrationStatusEnum } from '../../../enum/integration-status.enum';
3
- import { OneCOrderSyncModeEnum } from '../../../enum/one-c-order-sync-mode.enum';
3
+ import { OneCSettingsSchema } from './one-c-settings.schema';
4
4
 
5
- export const OneCStatusSchema = z.object({
5
+ export const OneCStatusSchema = OneCSettingsSchema.extend({
6
6
  isConnected: z.boolean(),
7
- isOrderMeasureUnitFromProduct: z.boolean(),
8
- orderSyncMode: z.nativeEnum(OneCOrderSyncModeEnum),
9
7
  status: z.nativeEnum(IntegrationStatusEnum).nullable(),
10
8
  username: z.string().nullable(),
11
9
  lastCheckauthAt: z.string().datetime().nullable(),
@@ -3,6 +3,11 @@ import { OneCSettingsSchema } from './one-c-settings.schema';
3
3
  // Меняются только переданные настройки; пустой запрос — ошибка валидации. Поля перечислены явно: библиотека собирается
4
4
  // под ES2016, Object.values в ней нет. Новая настройка добавляется и сюда.
5
5
  export const UpdateOneCSettingsRequestSchema = OneCSettingsSchema.partial().refine(
6
- settings => settings.isOrderMeasureUnitFromProduct !== undefined || settings.orderSyncMode !== undefined,
6
+ settings =>
7
+ settings.isOrderMeasureUnitFromProduct !== undefined ||
8
+ settings.orderSyncMode !== undefined ||
9
+ settings.orderOwner !== undefined ||
10
+ settings.exportStatuses !== undefined ||
11
+ settings.isOneCReserving !== undefined,
7
12
  { message: 'At least one setting is required' },
8
13
  );