aggiornamento ordini

This commit is contained in:
Surya Paolo
2023-12-14 15:20:21 +01:00
parent d0bf7e1b6a
commit ea2b7095c9
7 changed files with 246 additions and 130 deletions

1
docs/prova.txt Normal file

File diff suppressed because one or more lines are too long

View File

@@ -18,9 +18,7 @@ const orderSchema = new Schema({
idapp: { idapp: {
type: String, type: String,
}, },
userId: { userId: { type: Schema.Types.ObjectId, ref: 'User' },
type: String,
},
status: { status: {
type: Number, type: Number,
}, },
@@ -63,11 +61,11 @@ const orderSchema = new Schema({
date_spedito: { date_spedito: {
type: Date type: Date
}, },
completed: { completato: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
date_completed: { date_completato: {
type: Date type: Date
}, },
consegnato: { consegnato: {

View File

@@ -6,6 +6,7 @@ const shared_consts = require('../tools/shared_nodejs');
const Order = require('../models/order'); const Order = require('../models/order');
var { User } = require('../models/user'); var { User } = require('../models/user');
const Storehouse = require('../models/storehouse');
const Product = require('../models/product'); const Product = require('../models/product');
const tools = require('../tools/general'); const tools = require('../tools/general');
@@ -54,11 +55,11 @@ const OrdersCartSchema = new Schema({
date_spedito: { date_spedito: {
type: Date type: Date
}, },
completed: { completato: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
date_completed: { date_completato: {
type: Date type: Date
}, },
consegnato: { consegnato: {
@@ -84,9 +85,6 @@ const OrdersCartSchema = new Schema({
created_at: { created_at: {
type: Date type: Date
}, },
completed_at: {
type: Date
},
deleted: { deleted: {
type: Boolean, type: Boolean,
default: false, default: false,
@@ -171,9 +169,62 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
query.userId = uid; query.userId = uid;
} }
myorderscart = await OrdersCart.find(query).lean(); myorderscart = await OrdersCart.find(query).populate('items.order')
.populate({
path: 'items.order',
populate: {
path: 'idProduct',
model: 'Product'
},
/*transform: function(doc, populated) {
// Rinomina 'idProduct' a 'product' nei risultati della popolazione
populated.product = populated.idProduct;
delete populated.idProduct;
return populated;
},*/
})
.populate({
path: 'items.order',
populate: {
path: 'idProducer',
model: 'Producer'
},
/* transform: function(doc, populated) {
// Rinomina 'idProduct' a 'product' nei risultati della popolazione
populated.producer = populated.idProducer;
delete populated.idProducer;
return populated;
}, */
})
.populate({
path: 'items.order',
populate: {
path: 'idStorehouse',
model: 'Storehouse'
},
/*transform: function(doc, populated) {
// Rinomina 'idProduct' a 'product' nei risultati della popolazione
populated.storehouse = populated.idStorehouse;
delete populated.idStorehouse;
return populated;
},*/
})
.populate('userId').lean();
for (let ind = 0; ind < myorderscart.length; ind++) { myorderscart = myorderscart.map(order => {
order.items = order.items.map(item => {
item.order.product = item.order.idProduct;
delete item.order.idProduct;
item.order.producer = item.order.idProducer;
delete item.order.idProducer;
item.order.storehouse = item.order.idStorehouse;
delete item.order.idStorehouse;
return item;
});
return order;
});
/*for (let ind = 0; ind < myorderscart.length; ind++) {
for (const idkey in myorderscart[ind].items) { for (const idkey in myorderscart[ind].items) {
try { try {
let idorder = myorderscart[ind].items[idkey]._id.toString(); let idorder = myorderscart[ind].items[idkey]._id.toString();
@@ -181,16 +232,16 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
if (!!myorder) { if (!!myorder) {
idorder = myorderscart[ind].items[idkey].order._id.toString(); idorder = myorderscart[ind].items[idkey].order._id.toString();
} }
myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId); // myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
const myord = await Order.getTotalOrderById(idorder); // const myord = await Order.getTotalOrderById(idorder);
if (myord.length > 0) { // if (myord.length > 0) {
myorderscart[ind].items[idkey].order = myord[0]; // myorderscart[ind].items[idkey].order = myord[0];
} // }
} catch (e) { } catch (e) {
console.log('err', e); console.log('err', e);
} }
} }
} }*/
/* if (!!mycart) { /* if (!!mycart) {
for (const idkey in mycart.items) { for (const idkey in mycart.items) {
@@ -305,88 +356,96 @@ module.exports.updateOrdersCartById = function (id, newOrdersCart, callback) {
}) })
} }
module.exports.setEvasoById = async function (id, evaso) { module.exports.setFieldInOrdersById = async function (objtoset, myOrderCart) {
return await OrdersCart.findOneAndUpdate( const ris = await OrdersCart.findOneAndUpdate(
{ _id: id }, { _id: myOrderCart._id },
{ {
$set: { $set: objtoset
evaso,
date_evaso: new Date(),
}
}, },
{ new: false } { new: false }
) )
// Imposta su tutti i singoli prodotti ordinati (Order)
for (const order of myOrderCart.items) {
await Order.findOneAndUpdate(
{ _id: order._id },
{
$set: objtoset
},
{ new: false }
)
}
} }
module.exports.setConsegnatoById = async function (id, consegnato) { module.exports.setConsegnatoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate( let objtoset = {
{ _id: id }, consegnato: value,
{
$set: {
consegnato,
date_consegnato: new Date(), date_consegnato: new Date(),
} };
},
{ new: false } return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
)
} }
module.exports.setSpeditoById = async function (id, spedito) { module.exports.setSpeditoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate( let objtoset = {
{ _id: id }, spedito: value,
{
$set: {
spedito,
date_spedito: new Date(), date_spedito: new Date(),
} };
},
{ new: false } return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
)
} }
module.exports.setPagatoById = async function (id, pagato) { module.exports.setPagatoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate( let objtoset = {
{ _id: id }, pagato: value,
{
$set: {
pagato,
date_pagato: new Date(), date_pagato: new Date(),
};
if (!value) {
objtoset.date_pagato = null;
} }
},
{ new: false } return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
)
} }
module.exports.setCompletatoById = async function (id, completato) { module.exports.setCompletatoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate( let objtoset = {
{ _id: id }, completato: value,
{
$set: {
completato,
date_completato: new Date(), date_completato: new Date(),
} };
},
{ new: false } return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
)
} }
module.exports.setRicevutoById = async function (id, completato) { module.exports.setEvasoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate( let objtoset = {
{ _id: id }, evaso: value,
{ date_evaso: new Date(),
$set: { };
ricevuto,
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
}
module.exports.setRicevutoById = async function (value, myOrderCart) {
let objtoset = {
ricevuto: value,
date_ricevuto: new Date(), date_ricevuto: new Date(),
} };
},
{ new: false } return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
)
} }
module.exports.createOrdersCart = async function (newOrdersCart) { module.exports.createOrdersCart = async function (newOrdersCart) {
@@ -403,23 +462,14 @@ module.exports.updateStockQtaDalMagazzino = async function (idorderscart) {
let idorder = myorderscart.items[idkey]._id; let idorder = myorderscart.items[idkey]._id;
let order = myorderscart.items[idkey].order; let order = myorderscart.items[idkey].order;
const ris = await Order.findOneAndUpdate( if (!order.evaso) {
{ _id: idorder },
{
$set: {
completato: true,
date_completato: new Date(),
}
},
{ new: false }
)
const update = { const update = {
$inc: { $inc: {
stockQty: -order.quantity stockQty: -order.quantity
} }
}; };
await Product.findOneAndUpdate({ _id: order.idProduct }, update, { new: false }); await Product.findOneAndUpdate({ _id: order.idProduct }, update, { new: false });
}
} }
} }
@@ -429,34 +479,41 @@ module.exports.updateStockQtaDalMagazzino = async function (idorderscart) {
} }
module.exports.updateCmd = async function (idorderscart, cmd, value) { module.exports.updateCmd = async function (ordersCart, status, value) {
let myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
let myOrderCart = await OrdersCart.findOne({ _id: ordersCart._id }).populate('items.order').lean();
try { try {
if (!!myOrderCart) { if (!!myOrderCart) {
const id = myOrderCart._id; const id = myOrderCart._id;
if (cmd === shared_consts.OrderStatus.ORDER_CONFIRMED) { if (status === shared_consts.OrderStatus.ORDER_CONFIRMED) {
ris = await OrdersCart.setEvasoById(id, value);
// Aggiorna anche il Magazzino, togliendo le quantità in Stock // Aggiorna anche il Magazzino, togliendo le quantità in Stock
if (value) { if (value) {
OrdersCart.updateStockQtaDalMagazzino(id); OrdersCart.updateStockQtaDalMagazzino(id);
} }
} else if (cmd === shared_consts.OrderStatus.DELIVERED) { ris = await OrdersCart.setEvasoById(value, myOrderCart);
ris = await OrdersCart.setConsegnatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.SHIPPED) { } else if (status === shared_consts.OrderStatus.DELIVERED) {
ris = await OrdersCart.setSpeditoById(id, value); ris = await OrdersCart.setConsegnatoById(value, myOrderCart);
} else if (cmd === shared_consts.OrderStatus.PAYED) { } else if (status === shared_consts.OrderStatus.SHIPPED) {
ris = await OrdersCart.setPagatoById(id, value); ris = await OrdersCart.setSpeditoById(value, myOrderCart);
} else if (cmd === shared_consts.OrderStatus.COMPLETED) { } else if (status === shared_consts.OrderStatus.PAYED) {
ris = await OrdersCart.setCompletatoById(id, value); ris = await OrdersCart.setPagatoById(value, myOrderCart);
} else if (cmd === shared_consts.OrderStatus.RECEIVED) { } else if (status === shared_consts.OrderStatus.COMPLETED) {
ris = await OrdersCart.setRicevutoById(id, value); ris = await OrdersCart.setCompletatoById(value, myOrderCart);
} else if (status === shared_consts.OrderStatus.RECEIVED) {
ris = await OrdersCart.setRicevutoById(value, myOrderCart);
} }
await OrdersCart.setFieldInOrdersById({ status }, myOrderCart);
myOrderCart = await OrdersCart.findOne({ _id: ordersCart._id }).populate('items.order').lean();
// myOrderCart = await OrdersCart.findOne({ _id: idorderscart }); // myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
return myOrderCart;
} }
} catch (e) { } catch (e) {
console.error('Err:', e) console.error('Err:', e)

View File

@@ -3,6 +3,8 @@ const Schema = mongoose.Schema;
const tools = require('../tools/general'); const tools = require('../tools/general');
const Producer = require('../models/producer');
const shared_consts = require('../tools/shared_nodejs'); const shared_consts = require('../tools/shared_nodejs');
mongoose.Promise = global.Promise; mongoose.Promise = global.Promise;
@@ -58,6 +60,10 @@ const productSchema = new Schema({
type: Number, type: Number,
required: true, required: true,
}, },
price_acquistato: {
type: Number,
required: true,
},
after_price: { after_price: {
type: String type: String
}, },
@@ -113,6 +119,9 @@ const productSchema = new Schema({
img: { img: {
type: String, type: String,
}, },
link: {
type: String,
},
img2: { img2: {
type: String, type: String,
}, },
@@ -128,6 +137,9 @@ const productSchema = new Schema({
note: { note: {
type: String, type: String,
}, },
producer_name: {
type: String,
}
}); });
var Product = module.exports = mongoose.model('Product', productSchema); var Product = module.exports = mongoose.model('Product', productSchema);
@@ -198,7 +210,7 @@ module.exports.findAllIdApp = async function (idapp, code) {
}, },
{ {
$addFields: { $addFields: {
totalQty: { QuantitaOrdinateInAttesa: {
$cond: { $cond: {
if: { $isArray: '$productOrders' }, if: { $isArray: '$productOrders' },
then: { $arrayElemAt: ['$productOrders.totalQty', 0] }, then: { $arrayElemAt: ['$productOrders.totalQty', 0] },
@@ -266,6 +278,25 @@ module.exports.createIndexes((err) => {
if (err) throw err; if (err) throw err;
}); });
module.exports.convertAfterImport = async function () {
const arrprod = await Product.find({}).lean();
for (const prod of arrprod) {
if (prod.producer_name) {
// Cerca il produttore
const recproducer = await Producer.findOne({ name: prod.producer_name }).lean();
const campodarimuovere = 'producer_name';
if (recproducer) {
await Product.findOneAndUpdate({ _id: prod._id }, { $set: { idProducer: recproducer._id } })
await Product.findOneAndUpdate({ _id: prod._id }, { $unset: { [campodarimuovere]: 1 } })
}
}
}
}
// const Product = mongoose.model('Product', ProductSchema); // const Product = mongoose.model('Product', ProductSchema);

View File

@@ -1,15 +1,16 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
const mongoose = require('mongoose').set('debug', false); const mongoose = require('mongoose').set('debug', false);
const {CfgServer} = require('../models/cfgserver'); const { CfgServer } = require('../models/cfgserver');
const shared_consts = require('../tools/shared_nodejs'); const shared_consts = require('../tools/shared_nodejs');
const tools = require('../tools/general'); const tools = require('../tools/general');
const {City} = require('../models/city'); const { City } = require('../models/city');
const Product = require('../models/product');
var {authenticate} = require('../middleware/authenticate'); var { authenticate } = require('../middleware/authenticate');
router.post('/updateval', authenticate, async (req, res) => { router.post('/updateval', authenticate, async (req, res) => {
console.log('/updateval', req.body.pairval); console.log('/updateval', req.body.pairval);
@@ -17,8 +18,8 @@ router.post('/updateval', authenticate, async (req, res) => {
pair = req.body.pairval; pair = req.body.pairval;
return await CfgServer.findOneAndUpdate( return await CfgServer.findOneAndUpdate(
{chiave: pair.chiave, idapp, userId: pair.userId}, {$set: pair}, { chiave: pair.chiave, idapp, userId: pair.userId }, { $set: pair },
{new: false}).then((item) => { { new: false }).then((item) => {
// CfgServer.find({ chiave: pair.chiave }, (err, item) => { // CfgServer.find({ chiave: pair.chiave }, (err, item) => {
if (!!item) { if (!!item) {
res.status(200).send(); res.status(200).send();
@@ -34,7 +35,7 @@ router.post('/updateval', authenticate, async (req, res) => {
router.post('/import', authenticate, async (req, res) => { router.post('/import', authenticate, async (req, res) => {
const cmd = req.body.cmd; const cmd = req.body.cmd;
const data = []; const data = req.body.data;
try { try {
const liste = require('../data/liste'); const liste = require('../data/liste');
@@ -44,8 +45,21 @@ router.post('/import', authenticate, async (req, res) => {
return res.status(200).send(true); return res.status(200).send(true);
}); });
} else if (cmd === shared_consts.Cmd.PRODUCTS) {
let dataObjects = JSON.parse(`[${data}]`);
return await Product.insertMany(dataObjects).then((ris) => {
Product.convertAfterImport().then((ris) => {
return res.status(200).send(true);
});
});
} }
}catch (e) { } catch (e) {
console.error('e', e); console.error('e', e);
res.status(400).send(); res.status(400).send();
} }

View File

@@ -281,7 +281,9 @@ router.post('/:userId/ordercartstatus', authenticate, async function (req, res,
const user = req.user; const user = req.user;
let status = req.body.status; let status = req.body.status;
const orderCart = await OrdersCart.findOne({ idapp, _id: order_id }).lean(); const { User } = require('../models/user');
let orderCart = await OrdersCart.findOne({ idapp, _id: order_id }).lean();
if ((userId !== String(req.user._id)) && !User.isManager(req.user.perm)) { if ((userId !== String(req.user._id)) && !User.isManager(req.user.perm)) {
// I'm trying to write something not mine! // I'm trying to write something not mine!
@@ -300,7 +302,7 @@ router.post('/:userId/ordercartstatus', authenticate, async function (req, res,
if (ris) { if (ris) {
// Aggiorna gli Stati Interni ! // Aggiorna gli Stati Interni !
await OrdersCart.updateCmd(orderCart, status, true); orderCart = await OrdersCart.updateCmd(orderCart, status, true);
let ordertype = ''; let ordertype = '';
@@ -321,8 +323,16 @@ router.post('/:userId/ordercartstatus', authenticate, async function (req, res,
} }
}) })
let orderscart = null;
return res.send({ code: server_constants.RIS_CODE_OK, status }); if (User.isManager(user.perm)) {
// Prende Tutti gli Ordini !
orderscart = await OrdersCart.getOrdersCartByUserId('ALL', idapp, 0);
} else {
orderscart = await OrdersCart.getOrdersCartByUserId(req.user.id, idapp, 0);
}
return res.send({ code: server_constants.RIS_CODE_OK, status, orders: orderscart });
} }
} catch (e) { } catch (e) {

View File

@@ -277,10 +277,15 @@ module.exports = {
Outcoming: 2, Outcoming: 2,
}, },
Cmd: { Cmd: {
PROVINCE: 1, PROVINCE: 1,
COMUNI: 2, COMUNI: 2,
CITIES_SERVER: 3, CITIES_SERVER: 3,
CAT_SKILL_TXT: 4,
CAT_NO_SPAZI: 5,
CAT_GOODS_TXT: 10,
PRODUCTS: 20,
}, },
WalletFinalStatusType: { WalletFinalStatusType: {