This commit is contained in:
@@ -26,6 +26,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
|
||||
import { OrderMessage } from 'src/common/enums/message.enum';
|
||||
import { AdminCreateOrderDto } from '../dto/admin-create-order.dto';
|
||||
import { AdminUpdateOrderFeesDto } from '../dto/admin-update-order-fees.dto';
|
||||
import { FoodOrderReportDto, FoodOrderReportSortBy } from '../dto/food-order-report.dto';
|
||||
import { DailyOrderReportDto, DailyOrderReportSortBy } from '../dto/daily-order-report.dto';
|
||||
type OrderItemData = { food: Food; quantity: number; unitPrice: number; discount: number };
|
||||
@@ -243,6 +244,46 @@ export class OrdersService {
|
||||
return order;
|
||||
}
|
||||
|
||||
async updateOrderFees(orderId: string, restId: string, dto: AdminUpdateOrderFeesDto): Promise<Order> {
|
||||
if (dto.deliveryFee === undefined && dto.packingFee === undefined && dto.prepareTime === undefined) {
|
||||
throw new BadRequestException(OrderMessage.NO_FIELDS_TO_UPDATE);
|
||||
}
|
||||
|
||||
const order = await this.getOrderOrFail(orderId, restId);
|
||||
|
||||
if ([OrderStatus.CANCELED, OrderStatus.COMPLETED].includes(order.status)) {
|
||||
throw new BadRequestException(OrderMessage.CANNOT_UPDATE_CANCELED_OR_COMPLETED_ORDER);
|
||||
}
|
||||
|
||||
const feesChanged = dto.deliveryFee !== undefined || dto.packingFee !== undefined;
|
||||
|
||||
if (dto.deliveryFee !== undefined) {
|
||||
order.deliveryFee = dto.deliveryFee;
|
||||
}
|
||||
if (dto.packingFee !== undefined) {
|
||||
order.packingFee = dto.packingFee;
|
||||
}
|
||||
if (dto.prepareTime !== undefined) {
|
||||
order.prepareTime = dto.prepareTime;
|
||||
}
|
||||
|
||||
if (feesChanged) {
|
||||
order.total = order.subTotal - order.totalDiscount + order.deliveryFee + order.packingFee + order.tax;
|
||||
|
||||
const pendingPayment = await this.em.findOne(Payment, {
|
||||
order: { id: orderId },
|
||||
status: PaymentStatusEnum.Pending,
|
||||
});
|
||||
|
||||
if (pendingPayment) {
|
||||
pendingPayment.amount = order.total;
|
||||
}
|
||||
}
|
||||
|
||||
await this.em.persistAndFlush(order);
|
||||
return order;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates cart and prepares all required data for order creation
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user