const mongoose = require('mongoose').set('debug', false) const Schema = mongoose.Schema; const { ObjectID } = require('mongodb'); mongoose.Promise = global.Promise; mongoose.level = "F"; // Resolving error Unknown modifier: $pushAll mongoose.plugin(schema => { schema.options.usePushEach = true }); const orderSchema = new Schema({ idapp: { type: String, }, userId: { type: String, }, status: { type: Number, }, idProduct: { type: Schema.Types.ObjectId, ref: 'Product' }, idProducer: { type: Schema.Types.ObjectId, ref: 'Producer' }, idStorehouse: { type: Schema.Types.ObjectId, ref: 'StoreHouse' }, price: { type: Number }, after_price: { type: String }, color: { type: String }, size: { type: String }, quantity: { type: Number }, 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 }, weight: { type: Number }, unit: { type: Number }, stars: { type: Number }, date_created: { type: Date }, date_checkout: { type: Date }, date_payment: { type: Date }, date_shipping: { type: Date }, date_delivered: { type: Date }, notes: { type: String } }); var Order = module.exports = mongoose.model('Order', orderSchema); module.exports.createIndexes((err) => { if (err) throw err; }); module.exports.getFieldsForSearch = function () { return [] }; module.exports.executeQueryTable = function (idapp, params) { const tools = require('../tools/general'); params.fieldsearch = this.getFieldsForSearch(); return tools.executeQueryTable(this, idapp, params); }; module.exports.findAllIdApp = async function (idapp) { const query = [ { $match: { idapp } }, { $lookup: { from: 'products', localField: 'idProduct', foreignField: '_id', as: 'product' } }, { $lookup: { from: 'producers', localField: 'idProducer', foreignField: '_id', as: 'producer' } }, { $unwind: '$product' }, { $unwind: '$producer' }, ]; return await Order.aggregate(query) }; module.exports.getAllOrders = function (query, sort, callback) { Order.find(query, null, sort, callback) } module.exports.getOrderByUserId = function (userId, sort, callback) { Order.find({ userId }, null, sort, callback) } module.exports.getOrderByID = function (id, callback) { Order.findById(id, callback); } module.exports.createOrder = async function (order) { const orderModel = new Order(order); return await orderModel.save(order) .then((ris) => { if (!!ris) return ris._id; return null; }); } module.exports.updateStatusOrders = async function (arrOrders, status) { for (const order of arrOrders) { const ret = await this.findOneAndUpdate({ _id: order._id }, { $set: status }); } } module.exports.updateStatusOrdersElements = async function (arrOrders, myelements) { for (const order of arrOrders) { const ret = await this.findOneAndUpdate({ _id: order._id }, { $set: myelements }); } } module.exports.getTotalOrderById = async function (id) { const query = [ { $match: { _id: ObjectID(id) } }, { $lookup: { from: 'products', localField: 'idProduct', foreignField: '_id', as: 'product' } }, { $lookup: { from: 'producers', localField: 'idProducer', foreignField: '_id', as: 'producer' } }, { $lookup: { from: 'storehouses', localField: 'idStorehouse', foreignField: '_id', as: 'storehouse' } }, { $unwind: '$product' }, { $unwind: '$producer' }, { $unwind: '$storehouse' }, ]; return await Order.aggregate(query); } // const Order = mongoose.model('Order', OrderSchema); // module.exports = { Order };