diff --git a/src/server/models/product.js b/src/server/models/product.js index fe9812e..eb3d0d6 100755 --- a/src/server/models/product.js +++ b/src/server/models/product.js @@ -7,6 +7,7 @@ const Producer = require('../models/producer'); const Storehouse = require('../models/storehouse'); const Provider = require('../models/provider'); const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); const Gasordine = require('../models/gasordine'); const Scontistica = require('../models/scontistica'); @@ -153,6 +154,9 @@ const productSchema = new Schema({ cat_name: { type: String, }, + subcat_name: { + type: String, + }, sconto1: { type: String, }, @@ -318,6 +322,14 @@ module.exports.findAllIdApp = async function (idapp, code, id) { as: 'catprods' } }, + { + $lookup: { + from: 'subcatprods', + localField: 'idSubCatProds', + foreignField: '_id', + as: 'subcatprods' + } + }, { $lookup: { from: 'scontisticas', @@ -696,6 +708,7 @@ module.exports.singlerecconvert_AfterImport_AndSave = async function (idapp, pro const objDelete = { cat_name: 1, + subcat_name: 1, producer_name: 1, provider_name: 1, magazzino_name: 1, diff --git a/src/server/models/productInfo.js b/src/server/models/productInfo.js index 12ee0e7..0e724d8 100755 --- a/src/server/models/productInfo.js +++ b/src/server/models/productInfo.js @@ -37,6 +37,7 @@ const productInfoSchema = new Schema({ type: String, }, idCatProds: [{ type: Schema.Types.ObjectId, ref: 'CatProd' }], + idSubCatProds: [{ type: Schema.Types.ObjectId, ref: 'SubCatProd' }], color: { type: String }, @@ -131,6 +132,14 @@ module.exports.findAllIdApp = async function (idapp, code, id) { as: 'catprods' } }, + { + $lookup: { + from: 'subcatprods', + localField: 'idSubCatProds', + foreignField: '_id', + as: 'subcatprods' + } + }, { $sort: { name: 1 // 1 for ascending order, -1 for descending order diff --git a/src/server/models/subcatprod.js b/src/server/models/subcatprod.js new file mode 100755 index 0000000..5c40fe3 --- /dev/null +++ b/src/server/models/subcatprod.js @@ -0,0 +1,65 @@ + +const mongoose = require('mongoose').set('debug', false) +const Schema = mongoose.Schema; + +mongoose.Promise = global.Promise; +mongoose.level = "F"; + +const tools = require('../tools/general'); + +// Resolving error Unknown modifier: $pushAll +mongoose.plugin(schema => { + schema.options.usePushEach = true +}); + +const SubCatProdSchema = new Schema({ + idapp: { + type: String, + }, + idCatProd: { + type: String, + }, + name: { + type: String, + }, + img: { + type: String, + }, + icon: { + type: String, + }, + color: { + type: String, + }, +}); + +SubCatProdSchema.statics.getAllCategories = function (callback) { + SubCatProd.find(callback) +} + +SubCatProdSchema.statics.getSubCatProdById = function (id, callback) { + SubCatProd.findById(id, callback); +} + +SubCatProdSchema.statics.getFieldsForSearch = function () { + return [{ field: 'name', type: tools.FieldType.string }] +}; + +SubCatProdSchema.statics.executeQueryTable = function (idapp, params) { + return tools.executeQueryTable(this, idapp, params); +}; + +SubCatProdSchema.statics.findAllIdApp = async function (idapp) { + const myfind = { idapp }; + + return await SubCatProd.find(myfind).sort({ name: 1 }); +}; + +const SubCatProd = mongoose.model('SubCatProd', SubCatProdSchema); + +SubCatProd.createIndexes((err) => { + if (err) throw err; +}); + + +module.exports = SubCatProd; diff --git a/src/server/router/admin_router.js b/src/server/router/admin_router.js index 14c66ae..16e30a9 100755 --- a/src/server/router/admin_router.js +++ b/src/server/router/admin_router.js @@ -11,6 +11,7 @@ const { City } = require('../models/city'); const Product = require('../models/product'); const ProductInfo = require('../models/productInfo'); const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); var { authenticate } = require('../middleware/authenticate'); @@ -66,6 +67,7 @@ router.post('/import', authenticate, async (req, res) => { name: product.name, link: product.link, idCatProds: [], + idSubCatProds: [], img: 'upload/products/' + product.code + '.jpg', weight: product.weight, unit: tools.getIdUnitsByText(product.unit), @@ -91,6 +93,27 @@ router.post('/import', authenticate, async (req, res) => { } } + 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); + } + } + } + if (!product.hasOwnProperty('active')) { product.active = true; } diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index be6a651..e333d82 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -67,6 +67,7 @@ const OrdersCart = require('../models/orderscart'); const Storehouse = require('../models/storehouse'); const Provider = require('../models/provider'); const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); const Gasordine = require('../models/gasordine'); const Product = require('../models/product'); const ProductInfo = require('../models/productInfo'); @@ -1440,6 +1441,7 @@ function load(req, res, version) { let storehouses = Storehouse.findAllIdApp(idapp); let providers = Provider.findAllIdApp(idapp); let catprods = CatProd.findAllIdApp(idapp); + let subcatprods = SubCatProd.findAllIdApp(idapp); let gasordines = Gasordine.findAllIdApp(idapp); let products = Product.findAllIdApp(idapp); let productInfos = ProductInfo.findAllIdApp(idapp); @@ -1536,6 +1538,7 @@ function load(req, res, version) { products, productInfos, catprods, + subcatprods, ]).then((arrdata) => { // console.table(arrdata); let myuser = req.user; @@ -1624,6 +1627,7 @@ function load(req, res, version) { products: arrdata[43], productInfos: arrdata[44], catprods: arrdata[45], + subcatprods: arrdata[46], }); const prova = 1; diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index b254999..d42118f 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -37,6 +37,7 @@ const Cart = require('../models/cart'); const CartClass = require('../modules/Cart'); const Product = require('../models/product'); const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); const ProductInfo = require('../models/productInfo'); const Order = require('../models/order'); const OrdersCart = require('../models/orderscart'); @@ -1316,6 +1317,10 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) { await CatProd.collection.drop(); + } else if (mydata.dbop === 'dropSubCatProd') { + + await SubCatProd.collection.drop(); + } else if (mydata.dbop === 'dropAllOrders') { try { diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index 4a32f02..96b5a74 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -66,6 +66,7 @@ const Gasordine = require('../models/gasordine'); const Scontistica = require('../models/scontistica'); const Department = require('../models/department'); const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); const { Category } = require('../models/category'); const ShareWithUs = require('../models/sharewithus'); const Site = require('../models/site'); @@ -122,6 +123,8 @@ module.exports = { mytable = Category; else if (tablename === 'catprods') mytable = CatProd; + else if (tablename === 'subcatprods') + mytable = SubCatProd; else if (tablename === 'sharewithus') mytable = ShareWithUs; else if (tablename === 'sites')