Files
freeplanet_serverside/src/server/router/admin_router.js

217 lines
6.9 KiB
JavaScript
Raw Normal View History

const express = require('express');
const router = express.Router();
2022-09-14 11:32:04 +02:00
const mongoose = require('mongoose').set('debug', false);
2023-12-14 15:20:21 +01:00
const { CfgServer } = require('../models/cfgserver');
const shared_consts = require('../tools/shared_nodejs');
const tools = require('../tools/general');
2023-12-14 15:20:21 +01:00
const { City } = require('../models/city');
const Product = require('../models/product');
2023-12-28 23:48:03 +01:00
const ProductInfo = require('../models/productInfo');
2023-12-27 02:58:15 +01:00
const CatProd = require('../models/catprod');
2024-01-12 13:02:59 +01:00
const SubCatProd = require('../models/subcatprod');
2023-12-14 15:20:21 +01:00
var { authenticate } = require('../middleware/authenticate');
2020-04-24 10:29:25 +02:00
router.post('/updateval', authenticate, async (req, res) => {
console.log('/updateval', req.body.pairval);
2020-04-24 10:29:25 +02:00
idapp = req.body.idapp;
pair = req.body.pairval;
return await CfgServer.findOneAndUpdate(
2023-12-14 15:20:21 +01:00
{ chiave: pair.chiave, idapp, userId: pair.userId }, { $set: pair },
{ new: false }).then((item) => {
// CfgServer.find({ chiave: pair.chiave }, (err, item) => {
if (!!item) {
res.status(200).send();
} else {
res.status(400).send();
}
}).catch(err => {
console.log('ERR:', err);
res.status(400).send();
2023-12-14 15:20:21 +01:00
});
});
router.post('/import', authenticate, async (req, res) => {
const cmd = req.body.cmd;
const idapp = req.body.idapp;
2023-12-14 15:20:21 +01:00
const data = req.body.data;
2023-12-29 15:19:15 +01:00
const options = req.body.data.options;
try {
const liste = require('../data/liste');
if (cmd === shared_consts.Cmd.CITIES_SERVER) {
return await City.insertMany(liste.Comuni).then((ris) => {
return res.status(200).send(true);
});
2023-12-14 15:20:21 +01:00
} else if (cmd === shared_consts.Cmd.PRODUCTS) {
2023-12-29 15:19:15 +01:00
let dataObjects = JSON.parse(`[${data.arrdata}]`);
2023-12-14 15:20:21 +01:00
2023-12-18 12:11:12 +01:00
let updated = 0;
let imported = 0;
let errors = 0;
for (const product of dataObjects) {
2023-12-27 02:58:15 +01:00
let isnuovo = false
let setta = false
2023-12-29 15:19:15 +01:00
2023-12-27 02:58:15 +01:00
let productInfo = {
idapp: product.idapp,
code: product.code,
name: product.name,
link: product.link,
idCatProds: [],
2024-01-12 13:02:59 +01:00
idSubCatProds: [],
2023-12-27 02:58:15 +01:00
img: 'upload/products/' + product.code + '.jpg',
weight: product.weight,
unit: tools.getIdUnitsByText(product.unit),
2023-12-27 02:58:15 +01:00
}
if (product.cat_name) {
2023-12-29 15:19:15 +01:00
arrcat = product.cat_name.trim().split(',');
for (const mycat of arrcat) {
let mycatstr = mycat.trim();
2023-12-29 15:19:15 +01:00
// Cerca la Categoria
let reccateg = await CatProd.findOne({ idapp, name: mycatstr }).lean();
2023-12-29 15:19:15 +01:00
if (!reccateg) {
// Non esiste questo produttore, quindi lo creo !
reccateg = new CatProd({ idapp, name: mycatstr });
2023-12-29 15:19:15 +01:00
ris = await reccateg.save();
reccateg = await CatProd.findOne({ idapp, name: mycatstr }).lean();
2023-12-29 15:19:15 +01:00
}
if (reccateg) {
productInfo.idCatProds.push(reccateg._id);
}
2023-12-27 02:58:15 +01:00
}
}
2023-12-29 15:19:15 +01:00
2024-01-12 13:02:59 +01:00
if (product.subcat_name) {
arrsubcat = product.subcat_name.trim().split(',');
for (const mysubcat of arrsubcat) {
let mysubcatstr = mysubcat.trim();
// Cerca la Sotto Categoria
let recsubcateg = await SubCatProd.findOne({ idapp, name: mysubcatstr }).lean();
if (!recsubcateg) {
// Non esiste questa Sotto Categoria, quindi la creo !
const idCatProd = reccateg ? reccateg._id : ''
recsubcateg = new SubCatProd({ idapp, name: mycatstr, idCatProd });
ris = await recsubcateg.save();
recsubcateg = await SubCatProd.findOne({ idapp, name: mysubcatstr, idCatProd }).lean();
}
if (recsubcateg) {
productInfo.idSubCatProds.push(recsubcateg._id);
}
}
}
2023-12-18 12:11:12 +01:00
if (!product.hasOwnProperty('active')) {
product.active = true;
}
2023-12-29 15:19:15 +01:00
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();
2023-12-27 02:58:15 +01:00
// Update ProductInfo
let risrecInfo = await ProductInfo.findOneAndUpdate({ code: productInfo.code }, { $set: productInfo }, { new: true, upsert: true });
if (risrecInfo) {
product.idProductInfo = risrecInfo._id;
2023-12-18 12:11:12 +01:00
2023-12-27 02:58:15 +01:00
recnewInfo = await ProductInfo.findOne({ code: productInfo.code }).lean();
if (risrecInfo._id) {
2023-12-18 12:11:12 +01:00
// Record existed, so it was updated
2023-12-27 02:58:15 +01:00
let arrfieldchange = tools.differentObjects(productInfo, recnewInfo);
2023-12-28 23:48:03 +01:00
if (arrfieldchange && arrfieldchange.length > 0) {
2023-12-27 02:58:15 +01:00
// updated++;
console.log('Changed: ', recnewInfo.name + ': ' + arrfieldchange);
}
}
2023-12-29 15:19:15 +01:00
2023-12-27 02:58:15 +01:00
let recProductExist = await Product.findOne({ idProductInfo: product.idProductInfo }).lean();
if (!recProductExist) {
isnuovo = true;
}
2023-12-29 15:19:15 +01:00
2023-12-29 21:17:17 +01:00
if (!options.aggiornaStockQty && esisteindb) {
2023-12-29 15:19:15 +01:00
delete product.stockQty;
delete product.maxbookableGASQty;
2023-12-29 15:19:15 +01:00
}
// AGGIORNA PRODUCT
2023-12-27 02:58:15 +01:00
let risrec = await Product.findOneAndUpdate({ idProductInfo: product.idProductInfo }, { $set: product }, { new: true, upsert: true });
let recnew = await Product.findOne({ idProductInfo: product.idProductInfo }).lean();
if (risrec) {
if (risrec._id) {
// Record existed, so it was updated
let arrfieldchange = tools.differentObjects(product, recnew);
if (arrfieldchange.length > 0) {
updated++;
console.log('Changed: ', product.idProductInfo + ': ' + arrfieldchange);
}
} else {
// Record didn't exist, so it was created
imported++;
2023-12-18 12:11:12 +01:00
}
} else {
2023-12-27 02:58:15 +01:00
// risrec is null or undefined, indicating an error
console.error('Error: ', product.productInfo.name);
errors++;
2023-12-18 12:11:12 +01:00
}
2023-12-27 02:58:15 +01:00
await Product.singlerecconvert_AfterImport_AndSave(idapp, recnew, isnuovo);
2023-12-18 12:11:12 +01:00
} else {
2023-12-27 02:58:15 +01:00
console.error('Error ProductInfo: ', product.code);
2023-12-18 12:11:12 +01:00
errors++;
}
}
// L'opzione ordered: false gestisce gli errori senza interrompere l'inserimento
2023-12-18 12:11:12 +01:00
/*return await Product.insertMany(dataObjects, { ordered: false })
.then((ris) => {
2023-12-14 15:20:21 +01:00
Product.convertAfterImportALLPROD(idapp, dataObjects).then((ris) => {
return res.status(200).send(true);
});
2023-12-14 15:20:21 +01:00
})
.catch((errors) => {
console.error(errors);
Product.convertAfterImportALLPROD(idapp).then((ris) => {
return res.status(200).send(true);
});
2023-12-18 12:11:12 +01:00
});*/
return res.status(200).send({ updated, imported, errors });
2023-12-14 15:20:21 +01:00
}
2023-12-14 15:20:21 +01:00
} catch (e) {
console.error('e', e);
res.status(400).send();
}
res.status(400).send();
});
module.exports = router;