Untitled
unknown
plain_text
9 months ago
4.9 kB
5
Indexable
exports.filterOrders = catchAsync(async (req, res, next) => {
const { category, status,payment_status, startDate, endDate, limitDate } = req.body;
const page = parseInt(req.query.page);
const limit = parseInt(req.query.limit);
if (!page || !limit) {
return next(new AppError('page and limit required', 400));
}
let category_filter = {};
let filter = {};
if (req?.user?.role == 'adv') {
filter.isvalid = false;
} else if (req?.user?.role == 'manager') {
filter.isvalid = true;
filter.manager = req?.user?.profile;
} else {
filter.isvalid = true;
}
if (category) {
const Id = toObjectId(category, next);
let id_category = await Category.findById(Id);
if (id_category) {
//arrayAND.push({ categories: Id });
category_filter.categories = Id;
} else {
return next(new AppError('invalid categorie value', 400));
}
}
if (status == 'pending' || status == 'processing' || status == 'cancel' || status == 'delivered') {
filter.status = status;
}
//['paid', 'unpaid', 'partial paid'],
if (payment_status == 'paid' || payment_status == 'unpaid' || payment_status == 'partial paid' ) {
filter.payment_status = payment_status;
}
if (limitDate) {
var currentDate = new Date();
let days = parseInt(limitDate);
currentDate.setDate(currentDate.getDate() - days);
filter.createdAt = { $gte: currentDate };
}
if (startDate && !endDate) {
let date = new Date(startDate);
if (date == 'Invalid Date') {
return next(new AppError('Invalid Date', 400));
}
filter.createdAt = { $gte: date };
}
if (!startDate && endDate) {
let date = new Date(endDate);
date.setDate(date.getDate() + 1);
if (date == 'Invalid Date') {
return next(new AppError('Invalid Date', 400));
}
filter.createdAt = { $lte: date };
}
if (startDate && endDate) {
let start_date = new Date(startDate);
let end_date = new Date(endDate);
end_date.setDate(end_date.getDate() + 1);
if (start_date == 'Invalid Date' || end_date == 'Invalid Date') {
return next(new AppError('Invalid Date', 400));
}
filter.createdAt = { $gte: start_date, $lte: end_date };
}
const results = await Order.aggregate([
{ $match: filter },
{ $sort: { createdAt: -1 } },
{
$lookup: {
from: 'products',
localField: 'products.product',
foreignField: '_id',
pipeline: [
{ $match: category_filter },
],
as: 'product'
}
},
{
$lookup: {
from: 'users',
localField: 'ordered_by',
foreignField: '_id',
pipeline: [{ $project: { name: 1,phone : 1 } }],
as: 'clientName'
}
},
{
$lookup: {
from: 'managers',
localField: 'manager',
foreignField: '_id',
pipeline: [{
$lookup: {
from: 'users',
localField: '_id',
foreignField: 'profile',
pipeline: [{ $project: { name: 1 ,phone : 1} }],
as: 'clientName'
}
}],
as: 'managerName'
}
},
// sales_man
{ $limit: (page - 1) * limit + limit },
{ $sort: { createdAt: -1 } },
{ $skip: (page - 1) * limit }
]);
const data = results.reduce((result, order) => {
let obj = {};
obj.units = order?.products.length;
obj.id = order?._id;
obj.product = {};
obj.products = order?.products;
for(let i =0;i< order?.products.length;i++){
obj.products[i].image = order?.product?.at(i)?.images?.at(0);
}
obj.product.name = order?.products?.at(0)?.product_name;
obj.product.image = order?.product?.at(0)?.images?.at(0);
obj.price = order?.totalPrice;
obj.status = order?.status;
obj.payment_method = order?.payment_method;
obj.payment_status = order?.payment_status;
if (order?.payment_status == 'part') {
obj.payment_value = order?.payment_value;
}
obj.nb_tracking = order?.nb_tracking || '';
obj.nb_colis = order?.nb_colis || '';
obj.payment_value = order?.payment_value || '';
obj.shipping_company = order?.shipping_company || '';
obj.shipping_company_website = order?.shipping_company_website || '';
obj.note = order?.note || '';
obj.pdf = order?.pdf || '';
obj.image = order?.image || '';
obj.delivery_estimate = order?.delivery_estimate;
obj.note_dipo = order?.note_dipo;
obj.managerName = order?.managerName?.at(0)?.clientName?.at(0)?.name;
obj.clientName = order?.clientName?.at(0)?.name;
result.push(obj);
return result;
}, []);
const count = await Order.find(filter).count();
res.status(200).json({ status: 'success', count, data });
});Editor is loading...
Leave a Comment