diff --git a/src/modules/order/order.repository.ts b/src/modules/order/order.repository.ts index b67a2c5..d2e9f9b 100644 --- a/src/modules/order/order.repository.ts +++ b/src/modules/order/order.repository.ts @@ -533,29 +533,47 @@ class OrderRepository extends BaseRepository { }; const unit = allowed[granularity] ?? allowed["daily"]; - // Aggregation pipeline + const excludedOrderItemStatuses = [ + OrderItemsStatus.cancelled_shop, + OrderItemsStatus.cancelled_system, + OrderItemsStatus.cancelled_user, + OrderItemsStatus.Returned, + ]; + const pipeline: any[] = [ { $match: { createdAt: { $gte: startDate, $lte: endDate }, - // فقط سفارش‌های ثبت شده/پرداخت شده — تنظیم کن اگر می‌خواهی فیلتر فرق کند - orderStatus: { $ne: OrdersStatus.wait_payment }, + orderStatus: { + $nin: [OrdersStatus.wait_payment, OrdersStatus.cancelled_system, OrdersStatus.Cancelled], + }, }, }, { $lookup: { - from: "orderitems", // اگر اسم کالکشنت فرق دارد اینجا اصلاح کن + from: "orderitems", localField: "_id", foreignField: "order", - as: "items", + as: "orderItems", }, }, - { $unwind: { path: "$items", preserveNullAndEmptyArrays: false } }, + { + $addFields: { + orderItems: { + $filter: { + input: "$orderItems", + as: "item", + cond: { + $not: [{ $in: ["$$item.status", excludedOrderItemStatuses] }], + }, + }, + }, + }, + }, + { $unwind: "$orderItems" }, { $addFields: { - lineTotal: { - $multiply: [{ $ifNull: ["$items.quantity", 0] }, { $ifNull: ["$items.price", 0] }], - }, + lineTotal: { $ifNull: ["$orderItems.totalPaymentPrice", 0] }, }, }, { @@ -577,8 +595,7 @@ class OrderRepository extends BaseRepository { const aggResults: Array<{ _id: { period: Date }; periodTotal: number }> = await this.model.aggregate(pipeline).exec(); - // map نتایج - const map = new Map(); + const map = new Map(); for (const r of aggResults) { const d: Date = r._id.period; const key = unit === "month" ? d.toISOString().slice(0, 7) : d.toISOString().slice(0, 10);