fix : order chart
This commit is contained in:
@@ -533,29 +533,47 @@ class OrderRepository extends BaseRepository<IOrder> {
|
||||
};
|
||||
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<IOrder> {
|
||||
|
||||
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) {
|
||||
const d: Date = r._id.period;
|
||||
const key = unit === "month" ? d.toISOString().slice(0, 7) : d.toISOString().slice(0, 10);
|
||||
|
||||
Reference in New Issue
Block a user