2022-09-14 11:32:04 +02:00
|
|
|
const mongoose = require('mongoose').set('debug', false)
|
2021-01-18 00:48:17 +01:00
|
|
|
const Schema = mongoose.Schema;
|
|
|
|
|
|
|
|
|
|
const shared_consts = require('../tools/shared_nodejs');
|
|
|
|
|
|
|
|
|
|
const Order = require('../models/order');
|
2021-04-30 01:31:12 +02:00
|
|
|
var { User } = require('../models/user');
|
2021-01-18 00:48:17 +01:00
|
|
|
|
2021-02-03 01:33:30 +01:00
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
2021-01-18 00:48:17 +01:00
|
|
|
const { ObjectID } = require('mongodb');
|
|
|
|
|
|
|
|
|
|
const OrdersCartSchema = new Schema({
|
|
|
|
|
idapp: {
|
|
|
|
|
type: String
|
|
|
|
|
},
|
|
|
|
|
numorder: { type: Number },
|
|
|
|
|
userId: { type: Schema.Types.ObjectId, ref: 'User' },
|
|
|
|
|
totalQty: { type: Number, default: 0 },
|
|
|
|
|
totalPrice: { type: Number, default: 0 },
|
2021-02-03 01:33:30 +01:00
|
|
|
department: {
|
|
|
|
|
type: String, ref: 'Department'
|
|
|
|
|
},
|
2021-01-18 00:48:17 +01:00
|
|
|
items: [
|
|
|
|
|
{
|
|
|
|
|
order:
|
|
|
|
|
{ type: Schema.Types.ObjectId, ref: 'Order' }
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
status: {
|
2021-02-03 01:33:30 +01:00
|
|
|
type: Number,
|
|
|
|
|
Default: 0,
|
2021-01-18 00:48:17 +01:00
|
|
|
},
|
2023-12-13 19:17:53 +01:00
|
|
|
evaso: { // e quindi è stato tolto dal magazzino (aggiornando il campo StockQty)
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
date_evaso: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
|
|
|
|
pagato: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
date_pagato: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
|
|
|
|
spedito: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
date_spedito: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
|
|
|
|
completed: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
date_completed: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
|
|
|
|
consegnato: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
date_consegnato: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
2021-01-18 00:48:17 +01:00
|
|
|
note: {
|
|
|
|
|
type: String
|
|
|
|
|
},
|
|
|
|
|
modify_at: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
|
|
|
|
created_at: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
2021-04-30 01:31:12 +02:00
|
|
|
completed_at: {
|
|
|
|
|
type: Date
|
|
|
|
|
},
|
2023-12-09 19:38:23 +01:00
|
|
|
deleted: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
2021-01-18 00:48:17 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var OrdersCart = module.exports = mongoose.model('OrdersCart', OrdersCartSchema);
|
|
|
|
|
|
|
|
|
|
module.exports.findAllIdApp = async function (idapp, userId) {
|
2023-12-09 19:38:23 +01:00
|
|
|
const myfind = { idapp, userId, deleted: false };
|
2021-01-18 00:48:17 +01:00
|
|
|
|
2022-09-11 11:45:33 +02:00
|
|
|
return await await OrdersCart.find(myfind);
|
2021-02-03 01:33:30 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports.executeQueryTable = function (idapp, params) {
|
|
|
|
|
params.fieldsearch = this.getFieldsForSearch();
|
|
|
|
|
return tools.executeQueryTable(this, idapp, params);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
module.exports.getFieldsForSearch = function () {
|
2021-03-30 02:23:38 +02:00
|
|
|
return [{ field: 'note', type: tools.FieldType.string }]
|
2021-01-18 00:48:17 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2023-12-13 19:17:53 +01:00
|
|
|
module.exports.getLastNumOrder = async function (uid, idapp) {
|
2023-12-09 19:38:23 +01:00
|
|
|
let query = { userId: uid, idapp, deleted: false }
|
2021-01-18 00:48:17 +01:00
|
|
|
let numorder = 1;
|
|
|
|
|
let numorderrec = await OrdersCart.find(query).sort({ numorder: -1 }).limit(1);
|
2023-12-13 19:17:53 +01:00
|
|
|
|
|
|
|
|
if (numorderrec && numorderrec.length > 0)
|
2021-01-18 00:48:17 +01:00
|
|
|
numorder = numorderrec[0].numorder;
|
2023-12-13 19:17:53 +01:00
|
|
|
else
|
|
|
|
|
numorder = 0;
|
2021-01-18 00:48:17 +01:00
|
|
|
|
|
|
|
|
return numorder;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2021-04-30 01:31:12 +02:00
|
|
|
module.exports.getStatusCartByUserId = async function (uid, idapp, numorder) {
|
2021-02-03 01:33:30 +01:00
|
|
|
let query = { userId: uid, idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
|
2021-03-30 02:23:38 +02:00
|
|
|
let myorderscart = null;
|
|
|
|
|
if (numorder > 0) {
|
|
|
|
|
query = { userId: uid, idapp, numorder, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-30 01:31:12 +02:00
|
|
|
myorderscart = await OrdersCart.findOne(query);
|
|
|
|
|
|
|
|
|
|
if (!!myorderscart)
|
|
|
|
|
return myorderscart.status;
|
|
|
|
|
else
|
|
|
|
|
return shared_consts.OrderStatus.NONE
|
|
|
|
|
|
2023-12-13 19:17:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.getRecCartByUserId = async function (uid, idapp, numorder) {
|
|
|
|
|
let query = { userId: uid, idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
|
|
|
|
|
let myorderscart = null;
|
|
|
|
|
if (numorder > 0) {
|
|
|
|
|
query = { userId: uid, idapp, numorder, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
myorderscart = await OrdersCart.findOne(query).lean();
|
|
|
|
|
|
|
|
|
|
return myorderscart
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.getOrdersCartById = async function (id) {
|
|
|
|
|
let query = { _id: id };
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOne(query);
|
|
|
|
|
|
2021-04-30 01:31:12 +02:00
|
|
|
}
|
|
|
|
|
module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) {
|
|
|
|
|
|
2023-12-09 19:38:23 +01:00
|
|
|
let query = { idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT }, deleted: false }
|
2021-04-30 01:31:12 +02:00
|
|
|
let myorderscart = null;
|
|
|
|
|
if (numorder > 0) {
|
|
|
|
|
query.numorder = numorder;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (uid !== 'ALL') {
|
|
|
|
|
query.userId = uid;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart = await OrdersCart.find(query).lean();
|
2021-01-18 00:48:17 +01:00
|
|
|
|
|
|
|
|
for (let ind = 0; ind < myorderscart.length; ind++) {
|
|
|
|
|
for (const idkey in myorderscart[ind].items) {
|
|
|
|
|
try {
|
2021-04-30 01:31:12 +02:00
|
|
|
let idorder = myorderscart[ind].items[idkey]._id.toString();
|
2021-01-18 00:48:17 +01:00
|
|
|
const myorder = myorderscart[ind].items[idkey].order;
|
|
|
|
|
if (!!myorder) {
|
|
|
|
|
idorder = myorderscart[ind].items[idkey].order._id.toString();
|
|
|
|
|
}
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
|
2021-01-18 00:48:17 +01:00
|
|
|
const myord = await Order.getTotalOrderById(idorder);
|
|
|
|
|
if (myord.length > 0) {
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].items[idkey].order = myord[0];
|
2021-01-18 00:48:17 +01:00
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log('err', e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* if (!!mycart) {
|
|
|
|
|
for (const idkey in mycart.items) {
|
|
|
|
|
try {
|
|
|
|
|
idorder = mycart.items[idkey]._id.toString();
|
|
|
|
|
const myorder = mycart.items[idkey].order;
|
|
|
|
|
if (!!myorder) {
|
|
|
|
|
idorder = mycart.items[idkey].order._id.toString();
|
|
|
|
|
}
|
|
|
|
|
const myord = await Order.getTotalOrderById(idorder);
|
|
|
|
|
if (myord.length > 0) {
|
|
|
|
|
mycart.items[idkey]._doc.order = myord[0];
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log('err', e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return mycart;
|
|
|
|
|
}*/
|
|
|
|
|
return myorderscart
|
|
|
|
|
// return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-03 01:33:30 +01:00
|
|
|
module.exports.getOrdersCartByDepartmentId = async function (depId, idapp) {
|
2023-12-09 19:38:23 +01:00
|
|
|
let query = {
|
|
|
|
|
idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT },
|
|
|
|
|
deleted: false,
|
|
|
|
|
}
|
2022-03-03 20:32:04 +01:00
|
|
|
const myorderscart = await OrdersCart.find(query).lean();
|
2021-02-03 01:33:30 +01:00
|
|
|
|
|
|
|
|
for (let ind = 0; ind < myorderscart.length; ind++) {
|
|
|
|
|
for (const idkey in myorderscart[ind].items) {
|
|
|
|
|
try {
|
2021-04-30 01:31:12 +02:00
|
|
|
let idorder = myorderscart[ind].items[idkey]._id.toString();
|
|
|
|
|
const myorder = myorderscart[ind].items[idkey].order;
|
|
|
|
|
if (!!myorder) {
|
|
|
|
|
idorder = myorderscart[ind].items[idkey].order._id.toString();
|
|
|
|
|
}
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
|
2021-04-30 01:31:12 +02:00
|
|
|
const myord = await Order.getTotalOrderById(idorder);
|
|
|
|
|
if (myord.length > 0) {
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].items[idkey].order = myord[0];
|
2021-04-30 01:31:12 +02:00
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log('err', e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return myorderscart
|
|
|
|
|
// return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.getOrderById = async function (Id, idapp) {
|
|
|
|
|
let query = { _id: Id, idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } }
|
2022-03-03 20:32:04 +01:00
|
|
|
const myorderscart = await OrdersCart.find(query).lean();
|
2021-04-30 01:31:12 +02:00
|
|
|
|
|
|
|
|
for (let ind = 0; ind < myorderscart.length; ind++) {
|
|
|
|
|
for (const idkey in myorderscart[ind].items) {
|
|
|
|
|
try {
|
|
|
|
|
let idorder = myorderscart[ind].items[idkey]._id.toString();
|
2021-02-03 01:33:30 +01:00
|
|
|
const myorder = myorderscart[ind].items[idkey].order;
|
|
|
|
|
if (!!myorder) {
|
|
|
|
|
idorder = myorderscart[ind].items[idkey].order._id.toString();
|
|
|
|
|
}
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].nameSurname = await User.getNameSurnameById(idapp, myorderscart[ind].userId);
|
2021-02-03 01:33:30 +01:00
|
|
|
const myord = await Order.getTotalOrderById(idorder);
|
|
|
|
|
if (myord.length > 0) {
|
2022-03-03 20:32:04 +01:00
|
|
|
myorderscart[ind].items[idkey].order = myord[0];
|
2021-02-03 01:33:30 +01:00
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log('err', e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return myorderscart
|
|
|
|
|
// return null;
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-18 00:48:17 +01:00
|
|
|
module.exports.updateOrdersCartById = function (id, newOrdersCart, callback) {
|
2023-12-09 19:38:23 +01:00
|
|
|
let query = {
|
|
|
|
|
id,
|
|
|
|
|
deleted: false,
|
|
|
|
|
}
|
2021-01-18 00:48:17 +01:00
|
|
|
OrdersCart.find(query, function (err, c) {
|
|
|
|
|
if (err) throw err
|
|
|
|
|
|
|
|
|
|
//exist cart in databse
|
|
|
|
|
if (c.length > 0) {
|
2023-12-13 19:17:53 +01:00
|
|
|
return OrdersCart.findOneAndUpdate(
|
2021-01-18 00:48:17 +01:00
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
items: newOrdersCart.items,
|
|
|
|
|
totalQty: newOrdersCart.totalQty,
|
|
|
|
|
totalPrice: newOrdersCart.totalPrice,
|
|
|
|
|
userId: userId,
|
|
|
|
|
status: newOrdersCart.status,
|
|
|
|
|
numorder: newOrdersCart.numorder,
|
|
|
|
|
note: newOrdersCart.note,
|
|
|
|
|
modify_at: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: true },
|
|
|
|
|
callback
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
//no cart in database
|
2023-12-13 19:17:53 +01:00
|
|
|
return newOrdersCart.save(callback)
|
2021-01-18 00:48:17 +01:00
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-13 19:17:53 +01:00
|
|
|
module.exports.setEvasoById = async function (id, evaso) {
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOneAndUpdate(
|
|
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
evaso,
|
|
|
|
|
date_evaso: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: false }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.setConsegnatoById = async function (id, consegnato) {
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOneAndUpdate(
|
|
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
consegnato,
|
|
|
|
|
date_consegnato: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: false }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.setSpeditoById = async function (id, spedito) {
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOneAndUpdate(
|
|
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
spedito,
|
|
|
|
|
date_spedito: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: false }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.setPagatoById = async function (id, pagato) {
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOneAndUpdate(
|
|
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
pagato,
|
|
|
|
|
date_pagato: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: false }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports.setCompletatoById = async function (id, completato) {
|
|
|
|
|
|
|
|
|
|
return await OrdersCart.findOneAndUpdate(
|
|
|
|
|
{ _id: id },
|
|
|
|
|
{
|
|
|
|
|
$set: {
|
|
|
|
|
completato,
|
|
|
|
|
date_completato: new Date(),
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ new: false }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-18 00:48:17 +01:00
|
|
|
module.exports.createOrdersCart = async function (newOrdersCart) {
|
|
|
|
|
return await newOrdersCart.save()
|
|
|
|
|
}
|
2023-12-13 19:17:53 +01:00
|
|
|
module.exports.updateCmd = async function (idorderscart, cmd, value) {
|
|
|
|
|
|
|
|
|
|
let myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (!!myOrderCart) {
|
|
|
|
|
const id = myOrderCart._id;
|
|
|
|
|
if (cmd === shared_consts.OrderStatus.ORDER_CONFIRMED) {
|
|
|
|
|
ris = await OrdersCart.setEvasoById(id, value);
|
|
|
|
|
} 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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// myOrderCart = await OrdersCart.findOne({ _id: idorderscart });
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('Err:', e)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2021-01-18 00:48:17 +01:00
|
|
|
|
|
|
|
|
OrdersCartSchema.pre('save', async function (next) {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (this.isNew) {
|
|
|
|
|
try {
|
|
|
|
|
const myrec = await User.findOne({ idapp: this.idapp }).limit(1).sort({ neworder: -1 });
|
|
|
|
|
|
|
|
|
|
if (!!myrec) {
|
|
|
|
|
this.neworder = myrec._doc.neworder + 1;
|
|
|
|
|
} else {
|
|
|
|
|
this.neworder = 1;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this.neworder = 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if (user.isModified('password')) {
|
|
|
|
|
bcrypt.genSalt(10, (err, salt) => {
|
|
|
|
|
bcrypt.hash(user.password, salt, (err, hash) => {
|
|
|
|
|
user.password = hash;
|
|
|
|
|
next();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
next();
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
next();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error(e.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-12-09 11:55:58 +01:00
|
|
|
|
|
|
|
|
module.exports.createIndexes((err) => {
|
|
|
|
|
if (err) throw err;
|
|
|
|
|
});
|