From 2ab4bd4e2af2759d22220c1b5a0af0e884892132 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Thu, 21 Dec 2023 01:34:33 +0100 Subject: [PATCH] Corretto incongruenze OrdersCart --- src/server/models/order.js | 4 +- src/server/models/orderscart.js | 86 +++++++++++++++++++++++++++++--- src/server/modules/Cart.js | 23 ++++++--- src/server/router/cart_router.js | 15 +++++- 4 files changed, 110 insertions(+), 18 deletions(-) diff --git a/src/server/models/order.js b/src/server/models/order.js index e280549..409a056 100755 --- a/src/server/models/order.js +++ b/src/server/models/order.js @@ -260,7 +260,7 @@ module.exports.updateTotals = function (order) { let sconti_da_applicare = []; if (order.scontisticas) { - let qtadascontare = order.quantity + let qtadascontare = order.quantity + order.quantitypreordered let qtanonscontata = 0 while (qtadascontare > 0) { @@ -300,7 +300,7 @@ module.exports.updateTotals = function (order) { } } else { - mypricecalc = order.price * order.quantity; + mypricecalc = (order.price * order.quantity) + (order.price * order.quantitypreordered); } order.TotalPriceProduct += mypricecalc; diff --git a/src/server/models/orderscart.js b/src/server/models/orderscart.js index 3019b08..1da041d 100755 --- a/src/server/models/orderscart.js +++ b/src/server/models/orderscart.js @@ -22,7 +22,6 @@ const OrdersCartSchema = new Schema({ numord_pers: { type: Number }, userId: { type: Schema.Types.ObjectId, ref: 'User' }, totalQty: { type: Number, default: 0 }, - TotalPriceProduct: { type: Number, default: 0 }, totalQtyPreordered: { type: Number, default: 0 }, totalPrice: { type: Number, default: 0 }, department: { @@ -130,10 +129,10 @@ module.exports.getLastNumOrder = async function (idapp) { module.exports.getLastNumOrdPers = 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); + let numorderrec = await OrdersCart.find(query).sort({ numord_pers: -1 }).limit(1); if (numorderrec && numorderrec.length > 0) - numorder = numorderrec[0].numorder; + numorder = numorderrec[0].numord_pers; else numorder = 0; @@ -178,7 +177,7 @@ module.exports.getOrdersCartById = async function (id) { } -module.exports.getOrdersCartByQuery = async function (query) { +module.exports.getOLDOrdersCartByQuery = async function (query) { let myorderscart = await OrdersCart.find(query) .populate('items.order') @@ -252,6 +251,82 @@ module.exports.getOrdersCartByQuery = async function (query) { return myorderscart; } + + +module.exports.getOrdersCartByQuery = async function (query) { + + let myorderscart = await OrdersCart.find(query) + .populate('items.order') + .populate({ + path: 'items.order', + populate: { + path: 'idProduct', + model: 'Product' + }, + }) + .populate({ + path: 'items.order', + populate: { + path: 'idProducer', + model: 'Producer' + }, + }) + .populate({ + path: 'items.order', + populate: { + path: 'idProvider', + model: 'Provider' + }, + }) + .populate({ + path: 'items.order', + populate: { + path: 'idStorehouse', + model: 'Storehouse' + }, + }) + .populate({ + path: 'items.order', + populate: { + path: 'idScontisticas', + model: 'Scontistica' + }, + }) + .populate({ + path: 'userId', + model: 'User', + select: '_id name surname username profile', // Specify the fields you want to retrieve + }) + .lean(); + + myorderscart = myorderscart.map(order => { + order.user = order.userId + order.userId = order.user._id + order.items = order.items.map(item => { + if (item.order) { + try { + item.order.product = item.order.idProduct; + item.order.idProduct = item.order.product ? item.order.product._id : ''; + item.order.producer = item.order.idProducer; + item.order.idProducer = item.order.producer ? item.order.producer._id : ''; + item.order.storehouse = item.order.idStorehouse; + item.order.idStorehouse = item.order.storehouse ? item.order.storehouse._id : ''; + item.order.provider = item.order.idProvider; + item.order.idProvider = item.order.provider ? item.order.provider._id : ''; + item.order.scontisticas = item.order.scontisticas; + item.order.idScontisticas = item.order.idScontisticas ? item.order.idScontisticas._id : ''; + } catch (e) { + console.error('Err: ', e); + } + } + return item; + }); + return order; + }); + + return myorderscart; +} + module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder, filterStatus) { try { @@ -306,7 +381,6 @@ module.exports.updateOrdersCartById = function (id, newOrdersCart, callback) { totalQty: newOrdersCart.totalQty, totalQtyPreordered: newOrdersCart.totalQtyPreordered, totalPrice: newOrdersCart.totalPrice, - totalPriceProduct: newOrdersCart.totalPriceProduct, userId: userId, status: newOrdersCart.status, numorder: newOrdersCart.numorder, @@ -559,7 +633,7 @@ module.exports.getmsgorderTelegram = async function (ordersCart) { if (ord.order.quantity > 0) qtystr += 'Ordinate: ' + ord.order.quantity if (ord.order.quantitypreordered > 0) - qtystr += 'Prenotate: ' + ord.order.quantitypreordered + qtystr += ' Pre-Ordinate: ' + ord.order.quantitypreordered msg += '✅ [' + qtystr + '] ' + ord.order.product.name + ' (' + ord.order.price + ' € ' + (ord.order.after_price ? ord.order.after_price : '') + ' Tot=' + ord.order.TotalPriceProduct + '€ )'; } diff --git a/src/server/modules/Cart.js b/src/server/modules/Cart.js index f6060b6..4e940df 100755 --- a/src/server/modules/Cart.js +++ b/src/server/modules/Cart.js @@ -6,18 +6,25 @@ const { ObjectID } = require('mongodb'); const Order = require('../models/order'); class Cart { - constructor(order) { - this.items = {}; - if (!!order) { - this.idapp = order.idapp || 0; - this.items[order._id] = order; - this.userId = order.userId || ""; - } + constructor(order, arrorders) { this.modify_at = new Date(); + this.items = {}; + if (!!order) { + this.initializeFromOrder(order); + } else if (!!arrorders) { + for (const ord of arrorders) { + this.items.push(ord) + } + } this.updatetotals(); } + initializeFromOrder(order) { + this.idapp = order.idapp || 0; + this.userId = order.userId || ""; + this.items[order._id] = order; + } static constructByCart(cart) { try { const mynewcart = new Cart(null); @@ -117,7 +124,7 @@ class Cart { } catch (e) { console.error('Err', e); } - return null; + return null; } updatetotals() { diff --git a/src/server/router/cart_router.js b/src/server/router/cart_router.js index cef6e7e..70c5606 100755 --- a/src/server/router/cart_router.js +++ b/src/server/router/cart_router.js @@ -90,11 +90,13 @@ router.post('/:userId', authenticate, async function (req, res, next) { myord = await newCart.subqty(order); } else { const ind = newCart.addItem(order); - myord = order; + const arrord = await Order.getTotalOrderById(order._id); + myord = arrord ? arrord[0] : null; } } else { await newCart.updatetotals(); - myord = order; + const arrord = await Order.getTotalOrderById(order._id); + myord = arrord ? arrord[0] : null; } cart = await Cart.updateCartByCartId(mycart._id, newCart.generateModel()); @@ -311,6 +313,15 @@ router.post('/:userId/createorderscart', authenticate, async function (req, res, }) } }) + } else if (status < shared_consts.OrderStatus.CHECKOUT_SENT) { + // Aggiorna il carrello ! + + /*const cartpao = await Cart.getCartByUserId(userId, idapp); + let newCart = CartClass.constructByCart(cartpao); + if (newCart) + await newCart.updatetotals(); + newCart;*/ + } }