@floristcloud/api-lib 1.2.126 → 1.2.128
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/client/get-client-debt-list.query.js +3 -0
- package/build/commands/report/get-daily-orders-summary.query.js +23 -0
- package/build/enum/index.js +1 -0
- package/build/enum/report-excluded-order-status-list.js +9 -0
- package/commands/client/get-client-debt-list.query.ts +3 -0
- package/commands/report/get-daily-orders-summary.query.ts +23 -0
- package/enum/index.ts +1 -0
- package/enum/report-excluded-order-status-list.ts +7 -0
- package/package.json +1 -1
|
@@ -18,6 +18,9 @@ const GetClientDebtListRequestSchema = zod_1.z.object({
|
|
|
18
18
|
onlyWithDebt: query_boolean_helper_1.queryBooleanSchema,
|
|
19
19
|
onlyOverdue: query_boolean_helper_1.queryBooleanSchema,
|
|
20
20
|
clientUUIDList: zod_1.z.array(zod_1.z.string().uuid()).optional(),
|
|
21
|
+
// «Долг на дату»: расчёт ведётся ПО КОНЕЦ выбранного дня включительно, сутки разворачивает бэк
|
|
22
|
+
// по таймзоне компании. Без параметра берётся сальдо «сейчас» — то, что лежит в client.balance.
|
|
23
|
+
onDate: zod_1.z.coerce.date().optional().describe('Calculate the debt as of the end of this calendar day instead of now.'),
|
|
21
24
|
});
|
|
22
25
|
const GetClientDebtListResponseSchema = zod_1.z.object({
|
|
23
26
|
message: zod_1.z.string().optional(),
|
|
@@ -2,12 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GetDailyOrdersSummaryContractQuery = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const order_status_enum_1 = require("../../enum/order-status.enum");
|
|
6
|
+
const report_order_date_basis_enum_1 = require("../../enum/report-order-date-basis.enum");
|
|
5
7
|
const date_helper_1 = require("../../helpers/date.helper");
|
|
6
8
|
const money_schema_1 = require("../../schemas/money.schema");
|
|
7
9
|
const GetDailyOrdersSummaryRequestSchema = zod_1.z
|
|
8
10
|
.object({
|
|
9
11
|
startDate: zod_1.z.coerce.date(),
|
|
10
12
|
endDate: zod_1.z.coerce.date(),
|
|
13
|
+
// Ось периода — общая с отчётами продаж, чтобы сводка и отчёт за тот же период не разошлись
|
|
14
|
+
// в семантике. Дизъюнкции «любая из дат» здесь нет намеренно, см. ReportOrderDateBasisEnum.
|
|
15
|
+
//
|
|
16
|
+
// COMPLETED_AT сужает сводку до отгруженных заказов: даты отгрузки у остальных статусов
|
|
17
|
+
// просто нет. Поэтому на этой оси ordersCompleted равен ordersCreated, а фильтр по любому
|
|
18
|
+
// статусу кроме COMPLETED даёт нули — на фронте эти два фильтра совмещать не нужно.
|
|
19
|
+
dateBasis: zod_1.z.nativeEnum(report_order_date_basis_enum_1.ReportOrderDateBasisEnum).default(report_order_date_basis_enum_1.ReportOrderDateBasisEnum.CREATED_AT),
|
|
20
|
+
// Необязательное сужение по статусу. Принимается и CSV (`?status=NEW,ACCEPTED`), и повтор
|
|
21
|
+
// параметра — как excludeClientUUID в ReportOrderFilterSchema.
|
|
22
|
+
//
|
|
23
|
+
// Служебные статусы здесь НЕ отсеиваются, хотя в сводку они и так не попадают: отсев на
|
|
24
|
+
// этом слое означал бы «фильтр пуст → фильтра нет», и `?status=TEMPLATE` вернул бы весь
|
|
25
|
+
// отчёт вместо нулей. Отбрасывает их билдер — там пустой результат остаётся пустым.
|
|
26
|
+
status: zod_1.z
|
|
27
|
+
.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())])
|
|
28
|
+
.transform(value => (Array.isArray(value) ? value : value.split(',')).map(item => item.trim()).filter(Boolean))
|
|
29
|
+
.pipe(zod_1.z.array(zod_1.z.nativeEnum(order_status_enum_1.OrderStatusEnum)))
|
|
30
|
+
.optional(),
|
|
11
31
|
})
|
|
12
32
|
.refine(value => (0, date_helper_1.dateRangeCheck)(value.startDate, value.endDate), {
|
|
13
33
|
message: 'validation.dateRange',
|
|
@@ -26,6 +46,9 @@ const metricsShape = {
|
|
|
26
46
|
ordersCreated: zod_1.z.number(),
|
|
27
47
|
ordersCompleted: zod_1.z.number(),
|
|
28
48
|
totalSum: money_schema_1.MoneySchema,
|
|
49
|
+
// Часть totalSum по заказам со статусом COMPLETED. На оси COMPLETED_AT равна totalSum:
|
|
50
|
+
// там весь срез и так отгружен.
|
|
51
|
+
completedSum: money_schema_1.MoneySchema,
|
|
29
52
|
unitsByMeasure: UnitsByMeasureSchema,
|
|
30
53
|
};
|
|
31
54
|
const DailyOrdersSummaryTotalsSchema = zod_1.z.object(Object.assign({}, metricsShape));
|
package/build/enum/index.js
CHANGED
|
@@ -116,6 +116,7 @@ __exportStar(require("./payment-invoice-status.enum"), exports);
|
|
|
116
116
|
__exportStar(require("./order-by.enum"), exports);
|
|
117
117
|
__exportStar(require("./report-sort-by.enum"), exports);
|
|
118
118
|
__exportStar(require("./report-order-date-basis.enum"), exports);
|
|
119
|
+
__exportStar(require("./report-excluded-order-status-list"), exports);
|
|
119
120
|
__exportStar(require("./invoice-product-field.enum"), exports);
|
|
120
121
|
__exportStar(require("./transfer-document-state.enum"), exports);
|
|
121
122
|
__exportStar(require("./transfer-document-kind.enum"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReportExcludedOrderStatusList = void 0;
|
|
4
|
+
const order_status_enum_1 = require("./order-status.enum");
|
|
5
|
+
/**
|
|
6
|
+
* Служебные статусы заказа: шаблон и заготовка импорта. Это не продажи, поэтому из отчётов по
|
|
7
|
+
* заказам они выкидываются всегда — в том числе когда пользователь явно фильтрует по статусу.
|
|
8
|
+
*/
|
|
9
|
+
exports.ReportExcludedOrderStatusList = [order_status_enum_1.OrderStatusEnum.TEMPLATE, order_status_enum_1.OrderStatusEnum.IMPORTED];
|
|
@@ -16,6 +16,9 @@ const GetClientDebtListRequestSchema = z.object({
|
|
|
16
16
|
onlyWithDebt: queryBooleanSchema,
|
|
17
17
|
onlyOverdue: queryBooleanSchema,
|
|
18
18
|
clientUUIDList: z.array(z.string().uuid()).optional(),
|
|
19
|
+
// «Долг на дату»: расчёт ведётся ПО КОНЕЦ выбранного дня включительно, сутки разворачивает бэк
|
|
20
|
+
// по таймзоне компании. Без параметра берётся сальдо «сейчас» — то, что лежит в client.balance.
|
|
21
|
+
onDate: z.coerce.date().optional().describe('Calculate the debt as of the end of this calendar day instead of now.'),
|
|
19
22
|
});
|
|
20
23
|
|
|
21
24
|
const GetClientDebtListResponseSchema = z.object({
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { OrderStatusEnum } from '../../enum/order-status.enum';
|
|
3
|
+
import { ReportOrderDateBasisEnum } from '../../enum/report-order-date-basis.enum';
|
|
2
4
|
import { dateRangeCheck, isStatementPeriodWithinLimit } from '../../helpers/date.helper';
|
|
3
5
|
import { MoneySchema } from '../../schemas/money.schema';
|
|
4
6
|
|
|
@@ -6,6 +8,24 @@ const GetDailyOrdersSummaryRequestSchema = z
|
|
|
6
8
|
.object({
|
|
7
9
|
startDate: z.coerce.date(),
|
|
8
10
|
endDate: z.coerce.date(),
|
|
11
|
+
// Ось периода — общая с отчётами продаж, чтобы сводка и отчёт за тот же период не разошлись
|
|
12
|
+
// в семантике. Дизъюнкции «любая из дат» здесь нет намеренно, см. ReportOrderDateBasisEnum.
|
|
13
|
+
//
|
|
14
|
+
// COMPLETED_AT сужает сводку до отгруженных заказов: даты отгрузки у остальных статусов
|
|
15
|
+
// просто нет. Поэтому на этой оси ordersCompleted равен ordersCreated, а фильтр по любому
|
|
16
|
+
// статусу кроме COMPLETED даёт нули — на фронте эти два фильтра совмещать не нужно.
|
|
17
|
+
dateBasis: z.nativeEnum(ReportOrderDateBasisEnum).default(ReportOrderDateBasisEnum.CREATED_AT),
|
|
18
|
+
// Необязательное сужение по статусу. Принимается и CSV (`?status=NEW,ACCEPTED`), и повтор
|
|
19
|
+
// параметра — как excludeClientUUID в ReportOrderFilterSchema.
|
|
20
|
+
//
|
|
21
|
+
// Служебные статусы здесь НЕ отсеиваются, хотя в сводку они и так не попадают: отсев на
|
|
22
|
+
// этом слое означал бы «фильтр пуст → фильтра нет», и `?status=TEMPLATE` вернул бы весь
|
|
23
|
+
// отчёт вместо нулей. Отбрасывает их билдер — там пустой результат остаётся пустым.
|
|
24
|
+
status: z
|
|
25
|
+
.union([z.string(), z.array(z.string())])
|
|
26
|
+
.transform(value => (Array.isArray(value) ? value : value.split(',')).map(item => item.trim()).filter(Boolean))
|
|
27
|
+
.pipe(z.array(z.nativeEnum(OrderStatusEnum)))
|
|
28
|
+
.optional(),
|
|
9
29
|
})
|
|
10
30
|
.refine(value => dateRangeCheck(value.startDate, value.endDate), {
|
|
11
31
|
message: 'validation.dateRange',
|
|
@@ -26,6 +46,9 @@ const metricsShape = {
|
|
|
26
46
|
ordersCreated: z.number(),
|
|
27
47
|
ordersCompleted: z.number(),
|
|
28
48
|
totalSum: MoneySchema,
|
|
49
|
+
// Часть totalSum по заказам со статусом COMPLETED. На оси COMPLETED_AT равна totalSum:
|
|
50
|
+
// там весь срез и так отгружен.
|
|
51
|
+
completedSum: MoneySchema,
|
|
29
52
|
unitsByMeasure: UnitsByMeasureSchema,
|
|
30
53
|
};
|
|
31
54
|
|
package/enum/index.ts
CHANGED
|
@@ -100,6 +100,7 @@ export * from './payment-invoice-status.enum';
|
|
|
100
100
|
export * from './order-by.enum';
|
|
101
101
|
export * from './report-sort-by.enum';
|
|
102
102
|
export * from './report-order-date-basis.enum';
|
|
103
|
+
export * from './report-excluded-order-status-list';
|
|
103
104
|
export * from './invoice-product-field.enum';
|
|
104
105
|
export * from './transfer-document-state.enum';
|
|
105
106
|
export * from './transfer-document-kind.enum';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { OrderStatusEnum } from './order-status.enum';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Служебные статусы заказа: шаблон и заготовка импорта. Это не продажи, поэтому из отчётов по
|
|
5
|
+
* заказам они выкидываются всегда — в том числе когда пользователь явно фильтрует по статусу.
|
|
6
|
+
*/
|
|
7
|
+
export const ReportExcludedOrderStatusList: OrderStatusEnum[] = [OrderStatusEnum.TEMPLATE, OrderStatusEnum.IMPORTED];
|