fix : order chart

This commit is contained in:
morteza-mortezai
2025-10-28 20:52:10 +03:30
parent 76c0e6a83e
commit 6c4d150006
+26 -9
View File
@@ -533,31 +533,49 @@ class OrderRepository extends BaseRepository<IOrder> {
}; };
const unit = allowed[granularity] ?? allowed["daily"]; const unit = allowed[granularity] ?? allowed["daily"];
// Aggregation pipeline const excludedOrderItemStatuses = [
OrderItemsStatus.cancelled_shop,
OrderItemsStatus.cancelled_system,
OrderItemsStatus.cancelled_user,
OrderItemsStatus.Returned,
];
const pipeline: any[] = [ const pipeline: any[] = [
{ {
$match: { $match: {
createdAt: { $gte: startDate, $lte: endDate }, createdAt: { $gte: startDate, $lte: endDate },
// فقط سفارش‌های ثبت شده/پرداخت شده — تنظیم کن اگر می‌خواهی فیلتر فرق کند orderStatus: {
orderStatus: { $ne: OrdersStatus.wait_payment }, $nin: [OrdersStatus.wait_payment, OrdersStatus.cancelled_system, OrdersStatus.Cancelled],
},
}, },
}, },
{ {
$lookup: { $lookup: {
from: "orderitems", // اگر اسم کالکشنت فرق دارد اینجا اصلاح کن from: "orderitems",
localField: "_id", localField: "_id",
foreignField: "order", foreignField: "order",
as: "items", as: "orderItems",
}, },
}, },
{ $unwind: { path: "$items", preserveNullAndEmptyArrays: false } },
{ {
$addFields: { $addFields: {
lineTotal: { orderItems: {
$multiply: [{ $ifNull: ["$items.quantity", 0] }, { $ifNull: ["$items.price", 0] }], $filter: {
input: "$orderItems",
as: "item",
cond: {
$not: [{ $in: ["$$item.status", excludedOrderItemStatuses] }],
}, },
}, },
}, },
},
},
{ $unwind: "$orderItems" },
{
$addFields: {
lineTotal: { $ifNull: ["$orderItems.totalPaymentPrice", 0] },
},
},
{ {
$group: { $group: {
_id: { _id: {
@@ -577,7 +595,6 @@ class OrderRepository extends BaseRepository<IOrder> {
const aggResults: Array<{ _id: { period: Date }; periodTotal: number }> = await this.model.aggregate(pipeline).exec(); const aggResults: Array<{ _id: { period: Date }; periodTotal: number }> = await this.model.aggregate(pipeline).exec();
// map نتایج
const map = new Map<string, number>(); const map = new Map<string, number>();
for (const r of aggResults) { for (const r of aggResults) {
const d: Date = r._id.period; const d: Date = r._id.period;