This commit is contained in:
@@ -17,6 +17,11 @@ export enum PermissionEnum {
|
|||||||
|
|
||||||
VIEW_ORDERS = 'view_orders',
|
VIEW_ORDERS = 'view_orders',
|
||||||
VIEW_ASSIGNED_ORDERS = 'view_assigned_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',
|
CREATE_ORDER = 'create_order',
|
||||||
UPDATE_ORDER = 'update_order',
|
UPDATE_ORDER = 'update_order',
|
||||||
ASSIGN_DESIGNER = 'assign_designer',
|
ASSIGN_DESIGNER = 'assign_designer',
|
||||||
@@ -62,6 +67,11 @@ export const PermissionTitles: Record<PermissionEnum, string> = {
|
|||||||
[PermissionEnum.UPDATE_ORDER]: 'ویرایش سفارش ',
|
[PermissionEnum.UPDATE_ORDER]: 'ویرایش سفارش ',
|
||||||
[PermissionEnum.VIEW_ORDERS]: "مشاهده همه سفارش ها",
|
[PermissionEnum.VIEW_ORDERS]: "مشاهده همه سفارش ها",
|
||||||
[PermissionEnum.VIEW_ASSIGNED_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.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش",
|
||||||
|
|
||||||
[PermissionEnum.MANAGE_ADMINS]: 'مدیریت مدیران',
|
[PermissionEnum.MANAGE_ADMINS]: 'مدیریت مدیران',
|
||||||
|
|||||||
@@ -223,25 +223,80 @@ export class OrderService {
|
|||||||
|
|
||||||
|
|
||||||
async updateStatus(orderId: string, adminId: string, dto: UpdateStatusDto): Promise<Order> {
|
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,
|
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 canViewAnyOrder = permissions.includes(PermissionEnum.VIEW_ORDERS);
|
||||||
const order = await this.findOrderOrFail(orderId);
|
const canViewAssignedOrder = permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS);
|
||||||
order.status = dto.status;
|
|
||||||
await this.em.flush();
|
if (!canViewAnyOrder && !canViewAssignedOrder) {
|
||||||
return order
|
throw new ForbiddenException("You don't have permission to update order status");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS)) {
|
const order = canViewAnyOrder
|
||||||
//TODO
|
? await this.findOrderOrFail(orderId)
|
||||||
const order = await this.findOrderOrFailAssignedOrder(orderId, adminId);
|
: await this.findOrderOrFailAssignedOrder(orderId, adminId);
|
||||||
order.status = dto.status;
|
|
||||||
|
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();
|
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) {
|
async assignDesigner(orderId: string, designerId: string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user