This commit is contained in:
Kirill
2026-05-24 13:43:23 +05:00
parent 75841342c6
commit 2fe426b70a
17 changed files with 425 additions and 82 deletions
+22 -22
View File
@@ -1,13 +1,13 @@
export const ORDER_STATUSES = Object.freeze([
'DRAFT',
'PENDING_PAYMENT',
'PAID',
'IN_PROGRESS',
'SHIPPED',
'READY_FOR_PICKUP',
'DONE',
'CANCELLED',
])
"DRAFT",
"PENDING_PAYMENT",
"PAID",
"IN_PROGRESS",
"SHIPPED",
"READY_FOR_PICKUP",
"DONE",
"CANCELLED",
]);
/**
* Допустимые переходы статусов, доступные админу.
@@ -15,24 +15,24 @@ export const ORDER_STATUSES = Object.freeze([
* Для IN_PROGRESS: объект с ключами по deliveryType.
*/
export const ADMIN_ORDER_TRANSITIONS = Object.freeze({
DRAFT: ['PENDING_PAYMENT', 'CANCELLED'],
PENDING_PAYMENT: ['PAID', 'CANCELLED'],
PAID: ['IN_PROGRESS', 'CANCELLED'],
DRAFT: ["PENDING_PAYMENT", "CANCELLED"],
PENDING_PAYMENT: ["PAID", "CANCELLED"],
PAID: ["IN_PROGRESS", "CANCELLED"],
IN_PROGRESS: Object.freeze({
delivery: ['SHIPPED', 'CANCELLED'],
pickup: ['READY_FOR_PICKUP', 'CANCELLED'],
delivery: ["SHIPPED", "CANCELLED"],
pickup: ["READY_FOR_PICKUP", "CANCELLED"],
}),
})
});
export function getNextAdminStatuses(from, deliveryType) {
const transition = ADMIN_ORDER_TRANSITIONS[from]
if (!transition) return []
if (Array.isArray(transition)) return [...transition]
return transition[deliveryType] ? [...transition[deliveryType]] : []
const transition = ADMIN_ORDER_TRANSITIONS[from];
if (!transition) return [];
if (Array.isArray(transition)) return [...transition];
return transition[deliveryType] ? [...transition[deliveryType]] : [];
}
export function canTransitionAdminOrderStatus(order, next) {
const from = order.status
if (from === next) return true
return getNextAdminStatuses(from, order.deliveryType).includes(next)
const from = order.status;
if (from === next) return true;
return getNextAdminStatuses(from, order.deliveryType).includes(next);
}