This commit is contained in:
@@ -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]: 'مدیریت مدیران',
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user