Merge pull request #35 from Danakcorp/mrtz

fix : order chart
This commit is contained in:
morteza-mortezai
2025-10-28 20:53:13 +03:30
committed by GitHub
+28 -11
View File
@@ -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);