Gestione Ordini: evaso...

This commit is contained in:
Surya Paolo
2023-12-13 19:17:53 +01:00
parent a2bd4f6e97
commit fcdd826c54
11 changed files with 314 additions and 125 deletions

View File

@@ -42,6 +42,41 @@ const orderSchema = new Schema({
quantity: {
type: Number
},
evaso: { // e quindi è stato tolto dal magazzino (aggiornando il campo StockQty)
type: Boolean,
default: false,
},
date_evaso: {
type: Date
},
pagato: {
type: Boolean,
default: false,
},
date_pagato: {
type: Date
},
spedito: {
type: Boolean,
default: false,
},
date_spedito: {
type: Date
},
completed: {
type: Boolean,
default: false,
},
date_completed: {
type: Date
},
consegnato: {
type: Boolean,
default: false,
},
date_consegnato: {
type: Date
},
weight: {
type: Number
},
@@ -148,6 +183,14 @@ module.exports.updateStatusOrders = async function (arrOrders, status) {
}
module.exports.updateStatusOrdersElements = async function (arrOrders, myelements) {
for (const order of arrOrders) {
const ret = await this.findOneAndUpdate({ _id: order._id }, { $set: myelements });
}
}
module.exports.getTotalOrderById = async function (id) {
const query = [
{ $match: { _id: ObjectID(id) } },

View File

@@ -31,6 +31,41 @@ const OrdersCartSchema = new Schema({
type: Number,
Default: 0,
},
evaso: { // e quindi è stato tolto dal magazzino (aggiornando il campo StockQty)
type: Boolean,
default: false,
},
date_evaso: {
type: Date
},
pagato: {
type: Boolean,
default: false,
},
date_pagato: {
type: Date
},
spedito: {
type: Boolean,
default: false,
},
date_spedito: {
type: Date
},
completed: {
type: Boolean,
default: false,
},
date_completed: {
type: Date
},
consegnato: {
type: Boolean,
default: false,
},
date_consegnato: {
type: Date
},
note: {
type: String
},
@@ -67,20 +102,15 @@ module.exports.getFieldsForSearch = function () {
};
module.exports.getNewNumOrder = async function (uid, idapp) {
module.exports.getLastNumOrder = async function (uid, idapp) {
let query = { userId: uid, idapp, deleted: false }
let numorder = 1;
let numorderrec = await OrdersCart.find(query).sort({ numorder: -1 }).limit(1);
if (numorderrec.length <= 0)
numorder = 1;
else
if (numorderrec && numorderrec.length > 0)
numorder = numorderrec[0].numorder;
if (numorder) {
numorder++
} else {
numorder = 1;
}
else
numorder = 0;
return numorder;
@@ -100,6 +130,25 @@ module.exports.getStatusCartByUserId = async function (uid, idapp, numorder) {
else
return shared_consts.OrderStatus.NONE
}
module.exports.getRecCartByUserId = async function (uid, idapp, numorder) {
let query = { userId: uid, idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
let myorderscart = null;
if (numorder > 0) {
query = { userId: uid, idapp, numorder, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
}
myorderscart = await OrdersCart.findOne(query).lean();
return myorderscart
}
module.exports.getOrdersCartById = async function (id) {
let query = { _id: id };
return await OrdersCart.findOne(query);
}
module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
@@ -223,7 +272,7 @@ module.exports.updateOrdersCartById = function (id, newOrdersCart, callback) {
//exist cart in databse
if (c.length > 0) {
OrdersCart.findOneAndUpdate(
return OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
@@ -242,14 +291,111 @@ module.exports.updateOrdersCartById = function (id, newOrdersCart, callback) {
)
} else {
//no cart in database
newOrdersCart.save(callback)
return newOrdersCart.save(callback)
}
})
}
module.exports.setEvasoById = async function (id, evaso) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
evaso,
date_evaso: new Date(),
}
},
{ new: false }
)
}
module.exports.setConsegnatoById = async function (id, consegnato) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
consegnato,
date_consegnato: new Date(),
}
},
{ new: false }
)
}
module.exports.setSpeditoById = async function (id, spedito) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
spedito,
date_spedito: new Date(),
}
},
{ new: false }
)
}
module.exports.setPagatoById = async function (id, pagato) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
pagato,
date_pagato: new Date(),
}
},
{ new: false }
)
}
module.exports.setCompletatoById = async function (id, completato) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
completato,
date_completato: new Date(),
}
},
{ new: false }
)
}
module.exports.createOrdersCart = async function (newOrdersCart) {
return await newOrdersCart.save()
}
module.exports.updateCmd = async function (idorderscart, cmd, value) {
let myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
try {
if (!!myOrderCart) {
const id = myOrderCart._id;
if (cmd === shared_consts.OrderStatus.ORDER_CONFIRMED) {
ris = await OrdersCart.setEvasoById(id, value);
} else if (cmd === shared_consts.OrderStatus.DELIVERED) {
ris = await OrdersCart.setConsegnatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.SHIPPED) {
ris = await OrdersCart.setSpeditoById(id, value);
} else if (cmd === shared_consts.OrderStatus.PAYED) {
ris = await OrdersCart.setPagatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.COMPLETED) {
ris = await OrdersCart.setCompletatoById(id, value);
}
// myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
}
} catch (e) {
console.error('Err:', e)
}
}
OrdersCartSchema.pre('save', async function (next) {

View File

@@ -21,6 +21,7 @@ const productSchema = new Schema({
},
active: {
type: Boolean,
default: true,
},
idProducer: { type: Schema.Types.ObjectId, ref: 'Producer' },
idStorehouses: [
@@ -172,50 +173,44 @@ module.exports.findAllIdApp = async function (idapp, code) {
},
{
$lookup: {
from: "orders",
localField: "_id",
foreignField: "idProduct",
as: "productOrders",
},
},
{
$unwind: {
path: "$productOrders",
preserveNullAndEmptyArrays: true,
},
},
{
$group: {
_id: "$_id",
products: { $push: "$$ROOT" },
totalQty: {
$sum: {
$cond: {
if: { $lt: ["$productOrders.status", 4] }, // Include stati minori di 4
then: "$productOrders.quantity",
else: 0
}
from: 'orders',
let: { productId: '$_id' },
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ['$idProduct', '$$productId'] },
{ $lt: ['$status', shared_consts.OrderStatus.ORDER_CONFIRMED] }
]
}
},
},
},
{
$project: {
_id: 0,
products: {
$map: {
input: "$products",
as: "product",
in: {
$mergeObjects: [
"$$product",
{ totalQty: { quantity: "$totalQty" } }
]
}
},
{
$group: {
_id: null,
totalQty: { $sum: '$quantity' }
}
}
],
as: 'productOrders'
}
},
{
$addFields: {
totalQty: {
$cond: {
if: { $isArray: '$productOrders' },
then: { $arrayElemAt: ['$productOrders.totalQty', 0] },
else: 0
}
}
}
}
},
{
$unset: 'productOrders'
},
];
let ris = await Product.aggregate(query)