change order status
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-07-08 19:27:27 +03:30
parent efcdc91bcf
commit 9aa3c4f7c1
2 changed files with 77 additions and 12 deletions
+10
View File
@@ -17,6 +17,11 @@ export enum PermissionEnum {
VIEW_ORDERS = 'view_orders',
VIEW_ASSIGNED_ORDERS = 'view_assigned_orders',
CHANGE_ORDER_STATUS_FROM_ANY_TO_ANY = 'change_order_status_from_any_to_any',
CHANGE_ORDER_STATUS_TO_CANCELLED = 'change_order_status_to_cancelled',
CHANGE_ORDER_STATUS_IN_PROGRESS = 'change_order_status_in_progress',
CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED = 'change_order_status_from_in_progress_to_finished',
CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED = 'change_order_status_from_finished_to_invoiced',
CREATE_ORDER = 'create_order',
UPDATE_ORDER = 'update_order',
ASSIGN_DESIGNER = 'assign_designer',
@@ -62,6 +67,11 @@ export const PermissionTitles: Record<PermissionEnum, string> = {
[PermissionEnum.UPDATE_ORDER]: 'ویرایش سفارش ',
[PermissionEnum.VIEW_ORDERS]: "مشاهده همه سفارش ها",
[PermissionEnum.VIEW_ASSIGNED_ORDERS]: "مشاهده سفارش های من",
[PermissionEnum.CHANGE_ORDER_STATUS_FROM_ANY_TO_ANY]: "تغییر وضعیت سفارش از هر وضعیت به هر وضعیت",
[PermissionEnum.CHANGE_ORDER_STATUS_TO_CANCELLED]: "تغییر وضعیت سفارش به لغو شده",
[PermissionEnum.CHANGE_ORDER_STATUS_IN_PROGRESS]: "تغییر وضعیت سفارش در حال انجام",
[PermissionEnum.CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED]: "تغییر وضعیت سفارش از در حال انجام به پایان یافته",
[PermissionEnum.CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED]: "تغییر وضعیت سفارش از پایان یافته به فاکتور شده",
[PermissionEnum.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش",
[PermissionEnum.MANAGE_ADMINS]: 'مدیریت مدیران',
+67 -12
View File
@@ -223,25 +223,80 @@ export class OrderService {
async updateStatus(orderId: string, adminId: string, dto: UpdateStatusDto): Promise<Order> {
const statusPermissions = [
PermissionEnum.CHANGE_ORDER_STATUS_FROM_ANY_TO_ANY,
PermissionEnum.CHANGE_ORDER_STATUS_TO_CANCELLED,
PermissionEnum.CHANGE_ORDER_STATUS_IN_PROGRESS,
PermissionEnum.CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED,
PermissionEnum.CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED,
];
const permissions = await this.adminService.ownedPermissions(adminId,
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS])
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS, ...statusPermissions]);
if (permissions.includes(PermissionEnum.VIEW_ORDERS)) {
const order = await this.findOrderOrFail(orderId);
order.status = dto.status;
await this.em.flush();
return order
const canViewAnyOrder = permissions.includes(PermissionEnum.VIEW_ORDERS);
const canViewAssignedOrder = permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS);
if (!canViewAnyOrder && !canViewAssignedOrder) {
throw new ForbiddenException("You don't have permission to update order status");
}
if (permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS)) {
//TODO
const order = await this.findOrderOrFailAssignedOrder(orderId, adminId);
order.status = dto.status;
const order = canViewAnyOrder
? await this.findOrderOrFail(orderId)
: await this.findOrderOrFailAssignedOrder(orderId, adminId);
const fromStatus = order.status;
const toStatus = dto.status;
if (permissions.includes(PermissionEnum.CHANGE_ORDER_STATUS_FROM_ANY_TO_ANY)) {
order.status = toStatus;
await this.em.flush();
return order
return order;
}
throw new ForbiddenException("You don't have permission to update order status")
const inProgressStatuses = [
OrderStatusEnum.DESIGN_INITIATED,
OrderStatusEnum.DESIGN_FINISHED,
OrderStatusEnum.DESIGN_REVISION,
OrderStatusEnum.READY_TO_PRINTING,
OrderStatusEnum.IN_PRINTING,
OrderStatusEnum.READY_FOR_DELIVERY,
OrderStatusEnum.DELIVERED,
OrderStatusEnum.AFTER_PRINT_COVER,
OrderStatusEnum.AFTER_PRINT_BOXING,
OrderStatusEnum.AFTER_PRINT_CARTONING,
];
const canChangeToCancelled =
toStatus === OrderStatusEnum.CANCELED &&
permissions.includes(PermissionEnum.CHANGE_ORDER_STATUS_TO_CANCELLED);
const canChangeInProgress =
inProgressStatuses.includes(toStatus) &&
permissions.includes(PermissionEnum.CHANGE_ORDER_STATUS_IN_PROGRESS);
const canChangeFromInProgressToFinished =
inProgressStatuses.includes(fromStatus) &&
toStatus === OrderStatusEnum.FINISHED &&
permissions.includes(PermissionEnum.CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED);
const canChangeFromFinishedToInvoiced =
fromStatus === OrderStatusEnum.FINISHED &&
toStatus === OrderStatusEnum.INVOICED &&
permissions.includes(PermissionEnum.CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED);
if (
!canChangeToCancelled &&
!canChangeInProgress &&
!canChangeFromInProgressToFinished &&
!canChangeFromFinishedToInvoiced
) {
throw new ForbiddenException("You don't have permission to change to this order status");
}
order.status = toStatus;
await this.em.flush();
return order;
}
async assignDesigner(orderId: string, designerId: string) {