Hide prices until admin sends the invoice, enforce status transitions, add customer/admin SMS+in-app notifications, schedule cash invoice reminders, and ship updated dist/prisma-client/deploy-bundle for git-pull deploys. Co-authored-by: Cursor <cursoragent@cursor.com>
83 lines
3.2 KiB
JavaScript
83 lines
3.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.ORDER_TRANSITIONS = void 0;
|
|
exports.isFinalStatus = isFinalStatus;
|
|
exports.allowedTransitions = allowedTransitions;
|
|
exports.canTransition = canTransition;
|
|
exports.assertTransition = assertTransition;
|
|
const common_1 = require("@nestjs/common");
|
|
const client_1 = require("@prisma/client");
|
|
const order_status_1 = require("./order-status");
|
|
exports.ORDER_TRANSITIONS = {
|
|
awaiting_review: [client_1.OrderStatus.pricing],
|
|
pricing: [client_1.OrderStatus.awaiting_settlement],
|
|
awaiting_settlement: [
|
|
client_1.OrderStatus.awaiting_cash_payment,
|
|
client_1.OrderStatus.check_in_progress,
|
|
client_1.OrderStatus.pricing,
|
|
],
|
|
awaiting_cash_payment: [
|
|
client_1.OrderStatus.awaiting_cash_confirmation,
|
|
client_1.OrderStatus.expired,
|
|
],
|
|
awaiting_cash_confirmation: [
|
|
client_1.OrderStatus.cash_confirmed,
|
|
client_1.OrderStatus.awaiting_cash_payment,
|
|
],
|
|
cash_confirmed: [client_1.OrderStatus.final_approved],
|
|
check_in_progress: [client_1.OrderStatus.awaiting_check_review],
|
|
awaiting_check_review: [
|
|
client_1.OrderStatus.checks_approved,
|
|
client_1.OrderStatus.check_needs_fix,
|
|
],
|
|
check_needs_fix: [client_1.OrderStatus.awaiting_check_review],
|
|
checks_approved: [client_1.OrderStatus.final_approved],
|
|
final_approved: [client_1.OrderStatus.preparing],
|
|
preparing: [client_1.OrderStatus.ready_to_ship],
|
|
ready_to_ship: [client_1.OrderStatus.shipped],
|
|
shipped: [client_1.OrderStatus.delivered],
|
|
delivered: [],
|
|
cancelled: [],
|
|
rejected: [],
|
|
expired: [],
|
|
cart: [client_1.OrderStatus.awaiting_review],
|
|
submitted: [client_1.OrderStatus.awaiting_review],
|
|
needs_correction: [client_1.OrderStatus.awaiting_review, client_1.OrderStatus.pricing],
|
|
awaiting_settlement_fix: [client_1.OrderStatus.awaiting_settlement],
|
|
cash_in_progress: [client_1.OrderStatus.awaiting_cash_payment],
|
|
cash_invoice_issued: [client_1.OrderStatus.awaiting_cash_payment],
|
|
cash_payment_submitted: [client_1.OrderStatus.awaiting_cash_confirmation],
|
|
check_rejected: [client_1.OrderStatus.check_needs_fix],
|
|
};
|
|
const ADMIN_TERMINAL_TRANSITIONS = [
|
|
client_1.OrderStatus.cancelled,
|
|
client_1.OrderStatus.rejected,
|
|
];
|
|
const FINAL_STATUSES = [
|
|
client_1.OrderStatus.delivered,
|
|
client_1.OrderStatus.cancelled,
|
|
client_1.OrderStatus.rejected,
|
|
client_1.OrderStatus.expired,
|
|
];
|
|
function isFinalStatus(status) {
|
|
return FINAL_STATUSES.includes(status);
|
|
}
|
|
function allowedTransitions(from) {
|
|
const next = [...(exports.ORDER_TRANSITIONS[from] ?? [])];
|
|
if (!isFinalStatus(from)) {
|
|
for (const terminal of ADMIN_TERMINAL_TRANSITIONS) {
|
|
if (!next.includes(terminal))
|
|
next.push(terminal);
|
|
}
|
|
}
|
|
return next;
|
|
}
|
|
function canTransition(from, to) {
|
|
return allowedTransitions(from).includes(to);
|
|
}
|
|
function assertTransition(from, to) {
|
|
if (canTransition(from, to))
|
|
return;
|
|
throw new common_1.BadRequestException(`تغییر وضعیت از «${order_status_1.ORDER_STATUS_LABELS[from]}» به «${order_status_1.ORDER_STATUS_LABELS[to]}» مجاز نیست`);
|
|
}
|
|
//# sourceMappingURL=order-transitions.js.map
|