From 4290895a97ac0ff788618a836e99a3b3c8e7e20a Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Sat, 16 Dec 2023 18:40:17 +0100 Subject: [PATCH] aggiornamento scontistica, corretto errori --- ecosystem.config.js | 9 ++++-- package.json | 2 +- src/server/models/order.js | 45 ++++++++++++++++++++------ src/server/models/orderscart.js | 17 +++++++--- src/server/models/product.js | 29 ++++++++--------- src/server/models/scontistica.js | 5 ++- src/server/models/site.js | 3 +- src/server/models/user.js | 3 +- src/server/modules/Cart.js | 54 +++++++++++++++++++++++++++++-- src/server/router/index_router.js | 6 ++-- src/server/router/users_router.js | 3 +- 11 files changed, 132 insertions(+), 44 deletions(-) diff --git a/ecosystem.config.js b/ecosystem.config.js index 44c2279..93e084d 100755 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -4,7 +4,10 @@ module.exports = { name: "FreePlanetServerSide", script: "./src/server/server.js", ignore_watch : ["node_modules"], + interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node", watch: false, + //autorestart: true, + instances: 1, env: { "PORT": 3000, "NODE_ENV": "development", @@ -17,9 +20,9 @@ module.exports = { "PORT": 3000, "NODE_ENV": "production", }, - log_file: "combined.outerr.log", - error_file: "err.log", - out_file: "out.log", + log_file: "logs/combined.outerr.log", + error_file: "logs/err.log", + out_file: "logs/out.log", merge_logs: true, log_date_format: "YYYY-MM-DD HH:mm:ss.SSSS Z" } diff --git a/package.json b/package.json index 3e1220f..a681b9e 100755 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test-watch": "nodemon --exec 'npm test'" }, "engines": { - "node": "^18.17.0" + "node": "^18.19.0" }, "author": "Paolo Arena", "license": "MIT", diff --git a/src/server/models/order.js b/src/server/models/order.js index b4d9c75..4d59673 100755 --- a/src/server/models/order.js +++ b/src/server/models/order.js @@ -25,6 +25,7 @@ const orderSchema = new Schema({ idProduct: { type: Schema.Types.ObjectId, ref: 'Product' }, idProducer: { type: Schema.Types.ObjectId, ref: 'Producer' }, idStorehouse: { type: Schema.Types.ObjectId, ref: 'StoreHouse' }, + idScontisticas: [{ type: Schema.Types.ObjectId, ref: 'Scontistica' }], idProvider: { type: Schema.Types.ObjectId, ref: 'Provider' }, price: { type: Number @@ -167,13 +168,23 @@ module.exports.findAllIdApp = async function (idapp) { }, { $unwind: { - path: '$scontistica', + path: '$product', preserveNullAndEmptyArrays: true, }, }, - { $unwind: '$product' }, - { $unwind: '$producer' }, - { $unwind: '$provider' }, + { + $unwind: { + path: '$producer', + preserveNullAndEmptyArrays: true, + }, + }, + { + $unwind: { + path: '$provider', + preserveNullAndEmptyArrays: true, + }, + } + ]; return await Order.aggregate(query) @@ -263,19 +274,33 @@ module.exports.getTotalOrderById = async function (id) { from: 'scontisticas', localField: 'idScontisticas', foreignField: '_id', - as: 'scontistica' + as: 'scontisticas' } }, { $unwind: { - path: '$scontistica', + path: '$product', preserveNullAndEmptyArrays: true, }, }, - { $unwind: '$product' }, - { $unwind: '$producer' }, - { $unwind: '$storehouse' }, - { $unwind: '$provider' }, + { + $unwind: { + path: '$producer', + preserveNullAndEmptyArrays: true, + }, + }, + { + $unwind: { + path: '$storehouse', + preserveNullAndEmptyArrays: true, + }, + }, + { + $unwind: { + path: '$provider', + preserveNullAndEmptyArrays: true, + }, + } ]; return await Order.aggregate(query); diff --git a/src/server/models/orderscart.js b/src/server/models/orderscart.js index 023d8d7..d3e062f 100755 --- a/src/server/models/orderscart.js +++ b/src/server/models/orderscart.js @@ -223,6 +223,13 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) { model: 'Storehouse' }, }) + .populate({ + path: 'items.order', + populate: { + path: 'idScontisticas', + model: 'Scontistica' + }, + }) .populate({ path: 'userId', model: 'User', @@ -237,13 +244,15 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) { if (item.order) { try { item.order.product = item.order.idProduct; - item.order.idProduct = item.order.product._id; + item.order.idProduct = item.order.product ? item.order.product._id : ''; item.order.producer = item.order.idProducer; - item.order.idProducer = item.order.producer._id; + item.order.idProducer = item.order.producer ? item.order.producer._id : ''; item.order.storehouse = item.order.idStorehouse; - item.order.idStorehouse = item.order.storehouse._id; + item.order.idStorehouse = item.order.storehouse ? item.order.storehouse._id : ''; item.order.provider = item.order.idProvider; - item.order.idProvider = item.order.provider._id; + 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); } diff --git a/src/server/models/product.js b/src/server/models/product.js index ccf7aca..2a1bd7d 100755 --- a/src/server/models/product.js +++ b/src/server/models/product.js @@ -206,6 +206,9 @@ module.exports.findAllIdApp = async function (idapp, code, id) { query.push(myqueryadd); } + // DA TOGLIEREE + // myfind = { ...myfind, code: '4012824406094' }; + // return await Product.find(myfind); query.push( @@ -243,15 +246,9 @@ module.exports.findAllIdApp = async function (idapp, code, id) { from: 'scontisticas', localField: 'idScontisticas', foreignField: '_id', - as: 'scontistica' + as: 'scontisticas' } }, - { - $unwind: { - path: '$scontistica', - preserveNullAndEmptyArrays: true, - }, - }, { $lookup: { from: 'storehouses', @@ -372,9 +369,9 @@ module.exports.convertAfterImport = async function (idapp, dataObjects) { let recproducer = await Producer.findOne({ idapp, name: prod.producer_name }).lean(); if (!recproducer) { // Non esiste questo produttore, quindi lo creo ! - recproducer = await Producer.create({ idapp, name: prod.producer_name }, (err, recordCreato) => { - return recordCreato - }) + recproducer = new Producer({ idapp, name: prod.producer_name }); + ris = await recproducer.save(); + recproducer = await Producer.findOne({ idapp, name: prod.producer_name }).lean(); } if (recproducer) { @@ -391,9 +388,9 @@ module.exports.convertAfterImport = async function (idapp, dataObjects) { let recstorehouse = await Storehouse.findOne({ idapp, name: prod.magazzino_name }).lean(); if (!recstorehouse) { // Non esiste questo produttore, quindi lo creo ! - recstorehouse = await Storehouse.create({ idapp, name: prod.magazzino_name }, (err, recordCreato) => { - return recordCreato - }) + recstorehouse = new Storehouse({ idapp, name: prod.magazzino_name }); + ris = await recstorehouse.save(); + recstorehouse = await Storehouse.findOne({ idapp, name: prod.magazzino_name }).lean(); } if (recstorehouse) { @@ -409,10 +406,10 @@ module.exports.convertAfterImport = async function (idapp, dataObjects) { // Cerca il produttore let recprovider = await Provider.findOne({ idapp, name: prod.provider_name }).lean(); if (!recprovider) { + recprovider = new Provider({ idapp, name: prod.provider_name }); // Non esiste questo produttore, quindi lo creo ! - recprovider = await Provider.create({ idapp, name: prod.provider_name }, (err, recordCreato) => { - return recordCreato - }) + ris = await recprovider.save(); + recprovider = await Provider.findOne({ idapp, name: prod.provider_name }).lean(); } if (recprovider) { diff --git a/src/server/models/scontistica.js b/src/server/models/scontistica.js index 2a3a74a..ec448dc 100755 --- a/src/server/models/scontistica.js +++ b/src/server/models/scontistica.js @@ -40,7 +40,10 @@ const scontisticaSchema = new Schema({ var Scontistica = module.exports = mongoose.model('Scontistica', scontisticaSchema); module.exports.getFieldsForSearch = function () { - return [{ field: 'name', type: tools.FieldType.string }] + return [ + { field: 'code', type: tools.FieldType.string }, + { field: 'description', type: tools.FieldType.string } + ] }; module.exports.executeQueryTable = function (idapp, params) { diff --git a/src/server/models/site.js b/src/server/models/site.js index da043f6..f79314d 100755 --- a/src/server/models/site.js +++ b/src/server/models/site.js @@ -338,7 +338,8 @@ module.exports.createFirstUserAdmin = async function () { const numusers = await User.countDocuments({ idapp: mysite.idapp }); if (numusers === 0) { // Non esistono utenti, quindi creo quello di Admin - const utenteadmin = await User.findOne({ idapp: '13', username: telegrambot.ADMIN_USER_SERVER }).lean() + + const utenteadmin = { idapp: '13', username: telegrambot.ADMIN_USER_SERVER }; const newuser = new User(utenteadmin); newuser._id = new ObjectID(); diff --git a/src/server/models/user.js b/src/server/models/user.js index bd376b8..d1b5f33 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -5378,6 +5378,7 @@ UserSchema.statics.addNewSite = async function (idappPass, body) { // cerca un IdApp Libero let idapp = await Site.generateNewSite_IdApp(idappPass, body, true); + if (idapp) { let arrSite = await Site.find({ idapp }).lean(); let numutenti = 0; @@ -5385,7 +5386,7 @@ UserSchema.statics.addNewSite = async function (idappPass, body) { numutenti = await User.countDocuments({ idapp }); }; - if (arrSite && arrSite.length === 1 && numutenti === 0) { + if (arrSite && arrSite.length === 1 && numutenti < 2) { // Nessun Sito Installato e Nessun Utente installato ! let myuser = new User(); myuser._id = new ObjectID(); diff --git a/src/server/modules/Cart.js b/src/server/modules/Cart.js index 2becf20..31677e4 100755 --- a/src/server/modules/Cart.js +++ b/src/server/modules/Cart.js @@ -99,9 +99,59 @@ class Cart { order = this.items[rec]; } this.totalQty += order.quantity; - this.totalPrice += order.price * order.quantity; - } + // Calcolo Sconto + let sconti_da_applicare = []; + let mypricecalc = 0; + if (order.scontisticas) { + + let qtadascontare = order.quantity + let qtanonscontata = 0 + + while (qtadascontare > 0) { + let scontoapplicato = null + for (const sconto of order.scontisticas.filter((rec) => !rec.cumulativo)) { + if (qtadascontare >= sconto.qta) { + scontoapplicato = sconto + scontoapplicato.qtadascontare = sconto.qta + } + } + if (scontoapplicato && scontoapplicato.qtadascontare > 0) { + sconti_da_applicare.push(scontoapplicato) + qtadascontare -= scontoapplicato.qtadascontare + } else { + qtanonscontata = qtadascontare + qtadascontare = 0 + } + } + + /*for (const sconto of order.scontisticas.filter((rec) => rec.cumulativo)) { + if ((sconto.qta % order.quantity) === 0) { + sconti_da_applicare.push(sconto) + } + }*/ + + mypricecalc = order.price * order.quantity; + + if (sconti_da_applicare.length > 0) { + mypricecalc = 0 + for (const sconto of sconti_da_applicare) { + if (sconto.perc_sconto > 0) { + mypricecalc += (sconto.qtadascontare * order.price) * (1 - (sconto.perc_sconto / 100)) + } else { + mypricecalc += sconto.price + } + } + } + if (qtanonscontata > 0) { + mypricecalc += order.price * qtanonscontata; + } + + } else { + mypricecalc = order.price * order.quantity; + } + this.totalPrice += mypricecalc; + } this.totalPrice = parseFloat(this.totalPrice.toFixed(2)) } catch (e) { console.error('Err: ', e); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index f8fd6ce..f501fc6 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -1434,7 +1434,7 @@ function load(req, res, version) { let workers = User.getusersWorkersList(idapp); let storehouses = Storehouse.findAllIdApp(idapp); let providers = Provider.findAllIdApp(idapp); - let scontistica = Scontistica.findAllIdApp(idapp); + let scontisticas = Scontistica.findAllIdApp(idapp); let departments = Department.findAllIdApp(idapp); let categories = Category.findAllIdApp(idapp); @@ -1522,7 +1522,7 @@ function load(req, res, version) { myelems, // 38 categories, // 39 providers, - scontistica, + scontisticas, ]).then((arrdata) => { // console.table(arrdata); let myuser = req.user; @@ -1606,7 +1606,7 @@ function load(req, res, version) { myelems: arrdata[38], categories: arrdata[39], providers: arrdata[40], - scontistica: arrdata[41], + scontisticas: arrdata[41], }); const prova = 1; diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index b6d39ef..9135f41 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -566,8 +566,7 @@ router.post('/login', (req, res) => { // tools.mylog("CREDENZIALI ! "); if (!user) { await tools.snooze(3000); - const msg = 'Tentativo di Login ERRATO [' + body.username + ' , ' + - body.password + ']\n' + '[IP: ' + tools.getiPAddressUser(req) + + const msg = 'Tentativo di Login ERRATO [' + body.username + ' , ' + ']\n' + '[IP: ' + tools.getiPAddressUser(req) + ']'; tools.mylogshow(msg); await telegrambot.sendMsgTelegramToTheAdmin(user.idapp, msg, true);