From 633b9a2d8c762828952f95859c255d9ca20e58c8 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Fri, 29 Dec 2023 15:19:15 +0100 Subject: [PATCH] aggiornato prodotti e scontistica --- src/server/models/catprod.js | 6 ++++ src/server/models/product.js | 54 ++++++++++++++++++++++++++++++ src/server/models/user.js | 8 +++-- src/server/modules/Cart.js | 21 +++++++----- src/server/router/admin_router.js | 53 ++++++++++++++++++----------- src/server/router/index_router.js | 1 + src/server/telegram/telegrambot.js | 8 ++--- 7 files changed, 117 insertions(+), 34 deletions(-) diff --git a/src/server/models/catprod.js b/src/server/models/catprod.js index 3a7a19b..158f8ca 100755 --- a/src/server/models/catprod.js +++ b/src/server/models/catprod.js @@ -22,6 +22,12 @@ const CatProdSchema = new Schema({ img: { type: String, }, + icon: { + type: String, + }, + color: { + type: String, + }, }); CatProdSchema.statics.getAllCategories = function (callback) { diff --git a/src/server/models/product.js b/src/server/models/product.js index dfa2c25..f8e4d06 100755 --- a/src/server/models/product.js +++ b/src/server/models/product.js @@ -66,6 +66,11 @@ const productSchema = new Schema({ default: 1, required: true, }, + minStepQty: { // step quantità acquistabile + type: Number, + default: 1, + required: true, + }, maxBookableQty: { // quantità massima Pre-ordinabile (singolarmente) type: Number, default: 0, @@ -113,6 +118,12 @@ const productSchema = new Schema({ cat_name: { type: String, }, + sconto1: { + type: String, + }, + sconto2: { + type: String, + }, }); var Product = module.exports = mongoose.model('Product', productSchema); @@ -502,6 +513,7 @@ module.exports.singlerecconvert_AfterImport = async function (idapp, prod, isnuo objtoset = { idapp, minBuyQty: 1, + minStepQty: 1, maxBookableQty: 0, } } @@ -563,6 +575,46 @@ module.exports.singlerecconvert_AfterImport = async function (idapp, prod, isnuo } } + let arrsconti = [] + + if (prod.sconto1) { + // Cerca la scontistica + let recscontistica = await Scontistica.findOne({ idapp, code: prod.sconto1 }).lean(); + if (!recscontistica) { + recscontistica = new Scontistica({ idapp, code: prod.sconto1 }); + // Non esiste questa scontistica, quindi lo creo ! + ris = await recscontistica.save(); + recscontistica = await Scontistica.findOne({ idapp, code: prod.sconto1 }).lean(); + } + + if (recscontistica) { + arrsconti.push(recscontistica); + } + } + + if (prod.sconto2) { + // Cerca la scontistica + let recscontistica = await Scontistica.findOne({ idapp, code: prod.sconto2 }).lean(); + if (!recscontistica) { + recscontistica = new Scontistica({ idapp, code: prod.sconto2 }); + // Non esiste questa scontistica, quindi lo creo ! + ris = await recscontistica.save(); + recscontistica = await Scontistica.findOne({ idapp, code: prod.sconto2 }).lean(); + } + + if (recscontistica) { + arrsconti.push(recscontistica); + } + } + + if (arrsconti.length > 0) { + objtoset = { + ...objtoset, + idScontisticas: arrsconti, + } + setta = true; + } + // Aggiorna il prezzo ? const aggiornaprezzo = false; if (aggiornaprezzo) { @@ -584,6 +636,8 @@ module.exports.singlerecconvert_AfterImport = async function (idapp, prod, isnuo producer_name: 1, provider_name: 1, magazzino_name: 1, + sconto1: 1, + sconto2: 1, }; ris = await Product.updateOne({ _id: ObjectID(prod._id) }, { $unset: objDelete }) diff --git a/src/server/models/user.js b/src/server/models/user.js index 8509448..6e3311b 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -287,6 +287,9 @@ const UserSchema = new mongoose.Schema({ manage_telegram: { type: Boolean, }, + admin_telegram: { + type: Boolean, + }, resplist: { type: Boolean, }, @@ -3606,7 +3609,7 @@ UserSchema.statics.getusersAdmin = async function (idapp) { // Int32 mongodb 6.0 - return await User.find({ idapp, 'profile.manage_telegram': true, perm: { $bitsAnySet: 0b001 } }, + return await User.find({ idapp, 'profile.admin_telegram': true, perm: { $bitsAnySet: 0b001 } }, { username: 1, 'profile.teleg_id': 1, perm: 1 }).then((arrrec) => { return (!!arrrec) ? arrrec : null; }).catch((e) => { @@ -3707,7 +3710,7 @@ UserSchema.statics.isAdminByIdTeleg = async function (idapp, idtelegram) { return await User.findOne({ idapp, username: 'paoloar77', - 'profile.manage_telegram': true, + 'profile.admin_telegram': true, 'profile.teleg_id': idtelegram, }, { 'profile.teleg_id': 1 }).then((rec) => { return (!!rec && rec.profile.teleg_id === idtelegram); @@ -5407,6 +5410,7 @@ UserSchema.statics.addNewSite = async function (idappPass, body) { myuser.profile.special_req = true; myuser.profile.nationality = 'IT'; myuser.profile.manage_telegram = true; + myuser.profile.admin_telegram = true; myuser.profile.teleg_id = MyTelegramBot.ADMIN_IDTELEGRAM_SERVER; myuser.profile.username_telegram = MyTelegramBot.ADMIN_USERNAME_TELEGRAM; myuser.lasttimeonline = new Date(); diff --git a/src/server/modules/Cart.js b/src/server/modules/Cart.js index 26555e1..19657ac 100755 --- a/src/server/modules/Cart.js +++ b/src/server/modules/Cart.js @@ -69,23 +69,24 @@ class Cart { async addqty(itemorder) { const myitem = this.items.find((rec) => rec.order._id.toString() === itemorder._id) if (!!myitem) { - let step = 1; + let stepmin = myitem.order.product.minStepQty | 1; + let step = stepmin; if (this.isAvailableByOrder(myitem.order)) { if (myitem.order.quantity === 0) - step = myitem.order.product.minBuyQty | 1 + step = myitem.order.product.minBuyQty | stepmin else if (myitem.order.quantity >= 10) - step = 2 + step = stepmin < 2 ? 2 : stepmin else if (myitem.order.quantity >= 20) - step = 5 + step = stepmin < 5 ? 5 : stepmin myitem.order.quantity += step; } else { if (myitem.order.quantitypreordered === 0) - step = myitem.order.product.minBuyQty | 1 + step = myitem.order.product.minBuyQty | stepmin else if (myitem.order.quantitypreordered >= 10) - step = 2 + step = stepmin < 2 ? 2 : stepmin else if (myitem.order.quantitypreordered >= 20) - step = 5 + step = stepmin < 5 ? 5 : stepmin myitem.order.quantitypreordered += step; } @@ -99,11 +100,15 @@ class Cart { } qtaNextSub(myorder, myproduct) { - let step = 1 + let step = myproduct.minStepQty | 1 let minqta = myproduct.minBuyQty | 1 if (myproduct.quantityAvailable > 0) { if (myorder.quantity === minqta) step = minqta + else{ + if ((myorder.quantity - step) < 0) + step = myorder.quantity - step + } } else { if (myorder.quantitypreordered === minqta) step = minqta diff --git a/src/server/router/admin_router.js b/src/server/router/admin_router.js index 5abda76..e8167f4 100755 --- a/src/server/router/admin_router.js +++ b/src/server/router/admin_router.js @@ -39,6 +39,7 @@ router.post('/import', authenticate, async (req, res) => { const cmd = req.body.cmd; const idapp = req.body.idapp; const data = req.body.data; + const options = req.body.data.options; try { const liste = require('../data/liste'); @@ -49,8 +50,7 @@ router.post('/import', authenticate, async (req, res) => { }); } else if (cmd === shared_consts.Cmd.PRODUCTS) { - - let dataObjects = JSON.parse(`[${data}]`); + let dataObjects = JSON.parse(`[${data.arrdata}]`); let updated = 0; let imported = 0; @@ -59,7 +59,7 @@ router.post('/import', authenticate, async (req, res) => { for (const product of dataObjects) { let isnuovo = false let setta = false - + let productInfo = { idapp: product.idapp, code: product.code, @@ -72,27 +72,35 @@ router.post('/import', authenticate, async (req, res) => { } if (product.cat_name) { - // Cerca la Categoria - let reccateg = await CatProd.findOne({ idapp, name: product.cat_name }).lean(); - if (!reccateg) { - // Non esiste questo produttore, quindi lo creo ! - reccateg = new CatProd({ idapp, name: product.cat_name }); - ris = await reccateg.save(); - reccateg = await CatProd.findOne({ idapp, name: product.cat_name }).lean(); - } - - if (reccateg) { - productInfo.idCatProds.push(reccateg._id); + arrcat = product.cat_name.trim().split(','); + for (const mycat of arrcat) { + // Cerca la Categoria + let reccateg = await CatProd.findOne({ idapp, name: mycat }).lean(); + if (!reccateg) { + // Non esiste questo produttore, quindi lo creo ! + reccateg = new CatProd({ idapp, name: mycat }); + ris = await reccateg.save(); + reccateg = await CatProd.findOne({ idapp, name: mycat }).lean(); + } + + if (reccateg) { + productInfo.idCatProds.push(reccateg._id); + } } } - + if (!product.hasOwnProperty('active')) { product.active = true; } - delete product.code; - delete product.name; - delete product.link; + if (product.code) + delete product.code; + if (product.name) + delete product.name; + if (product.link) + delete product.link; + + let esisteindb = await ProductInfo.findOne({ code: productInfo.code }).lean(); // Update ProductInfo let risrecInfo = await ProductInfo.findOneAndUpdate({ code: productInfo.code }, { $set: productInfo }, { new: true, upsert: true }); @@ -109,12 +117,17 @@ router.post('/import', authenticate, async (req, res) => { console.log('Changed: ', recnewInfo.name + ': ' + arrfieldchange); } } - + let recProductExist = await Product.findOne({ idProductInfo: product.idProductInfo }).lean(); if (!recProductExist) { isnuovo = true; } - + + if (!options.aggiornaStockQta && esisteindb) { + delete product.stockQty; + delete product.bookableQty; + } + let risrec = await Product.findOneAndUpdate({ idProductInfo: product.idProductInfo }, { $set: product }, { new: true, upsert: true }); let recnew = await Product.findOne({ idProductInfo: product.idProductInfo }).lean(); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 91346e4..9c2d5e2 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -87,6 +87,7 @@ const UserCost = { FIELDS_UPDATE_TELEGRAM_BOT: [ 'profile.teleg_id', 'profile.manage_telegram', + 'profile.admin_telegram', 'deleted', 'reported', ], diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index ad8c6f1..148c96e 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -1977,21 +1977,21 @@ class Telegram { await this.menumsgPaolo(msg); } else if (cmd1 === Menu.EXECSH) { if (rec.user && cmd2) { - let isAdmin = rec.user ? rec.user.profile.manage_telegram : false; + let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { const ris = await tools.execScript(this.idapp, msg, cmd2, 'Eseguo lo script'); } } } else if (cmd1 === Menu.LOG_SRV) { if (rec.user) { - let isAdmin = rec.user ? rec.user.profile.manage_telegram : false; + let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { await this.menuLogSrv(rec, msg, cmd2); } } } else if (cmd1 === Menu.REBOOT_SRV) { if (rec.user) { - let isAdmin = rec.user ? rec.user.profile.manage_telegram : false; + let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { await this.menuRebootSrv(rec, msg, cmd2); } @@ -3519,7 +3519,7 @@ class Telegram { // Check if you are Admin const user = await User.UserByIdTelegram(idapp, id); // let isAdmin = user ? user.profile.manage_telegram && user.username === 'paoloar77' : false; - let isAdmin = user ? user.profile.manage_telegram : false; + let isAdmin = user ? user.profile.admin_telegram : false; const isManager = user ? user.profile.manage_telegram : false; const isVerified = user ? user.profile.teleg_id > 0 && user.verified_by_aportador : false;