@floristcloud/api-lib 1.2.196 → 1.2.198
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/integration/one-c/get-one-c-order-exchange-state.query.js +8 -0
- package/build/commands/integration/one-c/index.js +1 -0
- package/build/constant/error.js +16 -0
- package/build/enum/index.js +3 -0
- package/build/enum/one-c-order-exchange-stage.enum.js +18 -0
- package/build/enum/one-c-order-owner.enum.js +12 -0
- package/build/enum/one-c-order-pending-reason.enum.js +15 -0
- package/build/schemas/integration/company-integration-flags.schema.js +10 -0
- package/build/schemas/integration/index.js +1 -0
- package/build/schemas/integration/one-c/get-one-c-order-exchange-state-response.schema.js +10 -0
- package/build/schemas/integration/one-c/index.js +2 -0
- package/build/schemas/integration/one-c/one-c-order-exchange-state.schema.js +35 -0
- package/build/schemas/integration/one-c/one-c-settings.schema.js +15 -1
- package/build/schemas/integration/one-c/one-c-status.schema.js +2 -4
- package/build/schemas/integration/one-c/update-one-c-settings-request.schema.js +5 -1
- package/build/schemas/user/get-me-data.schema.js +7 -1
- package/commands/integration/one-c/get-one-c-order-exchange-state.query.ts +7 -0
- package/commands/integration/one-c/index.ts +1 -0
- package/constant/error.ts +16 -0
- package/enum/index.ts +3 -0
- package/enum/one-c-order-exchange-stage.enum.ts +14 -0
- package/enum/one-c-order-owner.enum.ts +8 -0
- package/enum/one-c-order-pending-reason.enum.ts +11 -0
- package/package.json +1 -1
- package/schemas/integration/company-integration-flags.schema.ts +8 -0
- package/schemas/integration/index.ts +1 -0
- package/schemas/integration/one-c/get-one-c-order-exchange-state-response.schema.ts +8 -0
- package/schemas/integration/one-c/index.ts +2 -0
- package/schemas/integration/one-c/one-c-order-exchange-state.schema.ts +34 -0
- package/schemas/integration/one-c/one-c-settings.schema.ts +16 -1
- package/schemas/integration/one-c/one-c-status.schema.ts +2 -4
- package/schemas/integration/one-c/update-one-c-settings-request.schema.ts +6 -1
- package/schemas/user/get-me-data.schema.ts +7 -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);
|
package/build/constant/error.js
CHANGED
|
@@ -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 },
|
package/build/enum/index.js
CHANGED
|
@@ -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.CompanyIntegrationFlagsSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Какие интеграции подключены у компании. Панель по ним решает, слать ли запросы интеграций.
|
|
6
|
+
// oneC — у компании есть интеграция 1С; moysklad — МойСклад в статусе ACTIVE.
|
|
7
|
+
exports.CompanyIntegrationFlagsSchema = zod_1.z.object({
|
|
8
|
+
oneC: zod_1.z.boolean(),
|
|
9
|
+
moysklad: zod_1.z.boolean(),
|
|
10
|
+
});
|
|
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./moysklad"), exports);
|
|
18
18
|
__exportStar(require("./one-c"), exports);
|
|
19
19
|
__exportStar(require("./ozexport"), exports);
|
|
20
|
+
__exportStar(require("./company-integration-flags.schema"), exports);
|
|
@@ -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С уходят изменения выгруженного
|
|
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
|
|
7
|
-
exports.OneCStatusSchema =
|
|
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 ||
|
|
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' });
|
|
@@ -4,4 +4,10 @@ exports.GetMeDataSchema = void 0;
|
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const user_schema_1 = require("./user.schema");
|
|
6
6
|
const access_policy_schema_1 = require("../access-policy/access-policy.schema");
|
|
7
|
-
|
|
7
|
+
const company_integration_flags_schema_1 = require("../integration/company-integration-flags.schema");
|
|
8
|
+
// integrations = null — флаги прочитать не удалось; клиент ведёт себя так, будто интеграция может быть подключена.
|
|
9
|
+
exports.GetMeDataSchema = zod_1.z.object({
|
|
10
|
+
user: user_schema_1.UserSchema,
|
|
11
|
+
permissions: access_policy_schema_1.EffectivePermissionsSchema,
|
|
12
|
+
integrations: company_integration_flags_schema_1.CompanyIntegrationFlagsSchema.nullable(),
|
|
13
|
+
});
|
|
@@ -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
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// Какие интеграции подключены у компании. Панель по ним решает, слать ли запросы интеграций.
|
|
4
|
+
// oneC — у компании есть интеграция 1С; moysklad — МойСклад в статусе ACTIVE.
|
|
5
|
+
export const CompanyIntegrationFlagsSchema = z.object({
|
|
6
|
+
oneC: z.boolean(),
|
|
7
|
+
moysklad: z.boolean(),
|
|
8
|
+
});
|
|
@@ -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С уходят изменения выгруженного
|
|
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 {
|
|
3
|
+
import { OneCSettingsSchema } from './one-c-settings.schema';
|
|
4
4
|
|
|
5
|
-
export const OneCStatusSchema =
|
|
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 =>
|
|
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
|
);
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { UserSchema } from './user.schema';
|
|
3
3
|
import { EffectivePermissionsSchema } from '../access-policy/access-policy.schema';
|
|
4
|
+
import { CompanyIntegrationFlagsSchema } from '../integration/company-integration-flags.schema';
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
// integrations = null — флаги прочитать не удалось; клиент ведёт себя так, будто интеграция может быть подключена.
|
|
7
|
+
export const GetMeDataSchema = z.object({
|
|
8
|
+
user: UserSchema,
|
|
9
|
+
permissions: EffectivePermissionsSchema,
|
|
10
|
+
integrations: CompanyIntegrationFlagsSchema.nullable(),
|
|
11
|
+
});
|