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

View File

@@ -6,6 +6,7 @@ const shared_consts = require('../tools/shared_nodejs');
const Order = require('../models/order');
var { User } = require('../models/user');
const Storehouse = require('../models/storehouse');
const Product = require('../models/product');
const tools = require('../tools/general');
@@ -54,11 +55,11 @@ const OrdersCartSchema = new Schema({
date_spedito: {
type: Date
},
completed: {
completato: {
type: Boolean,
default: false,
},
date_completed: {
date_completato: {
type: Date
},
consegnato: {
@@ -84,9 +85,6 @@ const OrdersCartSchema = new Schema({
created_at: {
type: Date
},
completed_at: {
type: Date
},
deleted: {
type: Boolean,
default: false,
@@ -171,9 +169,62 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
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) {
try {
let idorder = myorderscart[ind].items[idkey]._id.toString();
@@ -181,16 +232,16 @@ module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
if (!!myorder) {
idorder = myorderscart[ind].items[idkey].order._id.toString();
}
myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
const myord = await Order.getTotalOrderById(idorder);
if (myord.length > 0) {
myorderscart[ind].items[idkey].order = myord[0];
}
// myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
// const myord = await Order.getTotalOrderById(idorder);
// if (myord.length > 0) {
// myorderscart[ind].items[idkey].order = myord[0];
// }
} catch (e) {
console.log('err', e);
}
}
}
}*/
/* if (!!mycart) {
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(
{ _id: id },
const ris = await OrdersCart.findOneAndUpdate(
{ _id: myOrderCart._id },
{
$set: {
evaso,
date_evaso: new Date(),
}
$set: objtoset
},
{ 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) {
let objtoset = {
consegnato: value,
date_consegnato: new Date(),
};
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
consegnato,
date_consegnato: new Date(),
}
},
{ new: false }
)
}
module.exports.setSpeditoById = async function (id, spedito) {
module.exports.setSpeditoById = async function (value, myOrderCart) {
let objtoset = {
spedito: value,
date_spedito: new Date(),
};
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
spedito,
date_spedito: new Date(),
}
},
{ new: false }
)
}
module.exports.setPagatoById = async function (id, pagato) {
module.exports.setPagatoById = async function (value, myOrderCart) {
let objtoset = {
pagato: value,
date_pagato: new Date(),
};
if (!value) {
objtoset.date_pagato = null;
}
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
pagato,
date_pagato: new Date(),
}
},
{ new: false }
)
}
module.exports.setCompletatoById = async function (id, completato) {
module.exports.setCompletatoById = async function (value, myOrderCart) {
let objtoset = {
completato: value,
date_completato: new Date(),
};
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
completato,
date_completato: new Date(),
}
},
{ new: false }
)
}
module.exports.setRicevutoById = async function (id, completato) {
module.exports.setEvasoById = async function (value, myOrderCart) {
return await OrdersCart.findOneAndUpdate(
{ _id: id },
{
$set: {
ricevuto,
date_ricevuto: new Date(),
}
},
{ new: false }
)
let objtoset = {
evaso: value,
date_evaso: new Date(),
};
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
}
module.exports.setRicevutoById = async function (value, myOrderCart) {
let objtoset = {
ricevuto: value,
date_ricevuto: new Date(),
};
return await OrdersCart.setFieldInOrdersById(objtoset, myOrderCart);
}
module.exports.createOrdersCart = async function (newOrdersCart) {
@@ -403,23 +462,14 @@ module.exports.updateStockQtaDalMagazzino = async function (idorderscart) {
let idorder = myorderscart.items[idkey]._id;
let order = myorderscart.items[idkey].order;
const ris = await Order.findOneAndUpdate(
{ _id: idorder },
{
$set: {
completato: true,
date_completato: new Date(),
if (!order.evaso) {
const update = {
$inc: {
stockQty: -order.quantity
}
},
{ new: false }
)
const update = {
$inc: {
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 {
if (!!myOrderCart) {
const id = myOrderCart._id;
if (cmd === shared_consts.OrderStatus.ORDER_CONFIRMED) {
ris = await OrdersCart.setEvasoById(id, value);
if (status === shared_consts.OrderStatus.ORDER_CONFIRMED) {
// Aggiorna anche il Magazzino, togliendo le quantità in Stock
if (value) {
OrdersCart.updateStockQtaDalMagazzino(id);
}
} else if (cmd === shared_consts.OrderStatus.DELIVERED) {
ris = await OrdersCart.setConsegnatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.SHIPPED) {
ris = await OrdersCart.setSpeditoById(id, value);
} else if (cmd === shared_consts.OrderStatus.PAYED) {
ris = await OrdersCart.setPagatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.COMPLETED) {
ris = await OrdersCart.setCompletatoById(id, value);
} else if (cmd === shared_consts.OrderStatus.RECEIVED) {
ris = await OrdersCart.setRicevutoById(id, value);
ris = await OrdersCart.setEvasoById(value, myOrderCart);
} else if (status === shared_consts.OrderStatus.DELIVERED) {
ris = await OrdersCart.setConsegnatoById(value, myOrderCart);
} else if (status === shared_consts.OrderStatus.SHIPPED) {
ris = await OrdersCart.setSpeditoById(value, myOrderCart);
} else if (status === shared_consts.OrderStatus.PAYED) {
ris = await OrdersCart.setPagatoById(value, myOrderCart);
} else if (status === shared_consts.OrderStatus.COMPLETED) {
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 });
return myOrderCart;
}
} catch (e) {
console.error('Err:', e)

View File

@@ -3,6 +3,8 @@ const Schema = mongoose.Schema;
const tools = require('../tools/general');
const Producer = require('../models/producer');
const shared_consts = require('../tools/shared_nodejs');
mongoose.Promise = global.Promise;
@@ -58,6 +60,10 @@ const productSchema = new Schema({
type: Number,
required: true,
},
price_acquistato: {
type: Number,
required: true,
},
after_price: {
type: String
},
@@ -113,6 +119,9 @@ const productSchema = new Schema({
img: {
type: String,
},
link: {
type: String,
},
img2: {
type: String,
},
@@ -128,6 +137,9 @@ const productSchema = new Schema({
note: {
type: String,
},
producer_name: {
type: String,
}
});
var Product = module.exports = mongoose.model('Product', productSchema);
@@ -198,7 +210,7 @@ module.exports.findAllIdApp = async function (idapp, code) {
},
{
$addFields: {
totalQty: {
QuantitaOrdinateInAttesa: {
$cond: {
if: { $isArray: '$productOrders' },
then: { $arrayElemAt: ['$productOrders.totalQty', 0] },
@@ -266,6 +278,25 @@ module.exports.createIndexes((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);

View File

@@ -1,15 +1,16 @@
const express = require('express');
const router = express.Router();
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 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) => {
console.log('/updateval', req.body.pairval);
@@ -17,24 +18,24 @@ router.post('/updateval', authenticate, async (req, res) => {
pair = req.body.pairval;
return await CfgServer.findOneAndUpdate(
{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 {
{ 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();
}
}).catch(err => {
console.log('ERR:', err);
res.status(400).send();
});
});
});
router.post('/import', authenticate, async (req, res) => {
const cmd = req.body.cmd;
const data = [];
const data = req.body.data;
try {
const liste = require('../data/liste');
@@ -44,8 +45,21 @@ router.post('/import', authenticate, async (req, res) => {
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);
res.status(400).send();
}

View File

@@ -281,7 +281,9 @@ router.post('/:userId/ordercartstatus', authenticate, async function (req, res,
const user = req.user;
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)) {
// I'm trying to write something not mine!
@@ -300,7 +302,7 @@ router.post('/:userId/ordercartstatus', authenticate, async function (req, res,
if (ris) {
// Aggiorna gli Stati Interni !
await OrdersCart.updateCmd(orderCart, status, true);
orderCart = await OrdersCart.updateCmd(orderCart, status, true);
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) {

View File

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