/var/www/greso.tech/server/nsm/controllers/order
NameSizeModeActions
comment/-0755rm
document/-0755rm
inventory/-0755rm
message/-0755rm
movement/-0755rm
payment/-0755rm
status/-0755rm
create.js127780644editdlrm
delete.js8280644editdlrm
details.js21680644editdlrm
edit.js140900644editdlrm
history.js11930644editdlrm
lead.js110190644editdlrm
list.js37870644editdlrm
search.js30470644editdlrm
Edit: /var/www/greso.tech/server/nsm/controllers/order/list.js (3787B)
module.exports = function ({ db, logger }) { const { NotFound, BadRequest, Forbidden } = require('../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber } = require('../../utils/validator.util') const { OrderListModel } = require('../../responseModels') const { Op } = require('sequelize') // const sequelize = require('sequelize') return async (req, res, next) => { logger.child({ path: req.path, request: req.query }).info() let t1 = performance.now() try { const { id, status, storage, inStatus, include, exclude, roleId, // selected role providerId, companyId, warehouseId, limit, page } = req.query let where = {} // superuser check if (req.user.roleKey != 'su') { var userRole = await SERVICES.AuthService.GetRole(req.user.roleId) if (!userRole) { throw new Forbidden({ lang: req.user?.languageCode }) } var companies = [] // look for user companies for (var c_idx in req.user.companies) { companies.push(req.user.companies[c_idx].companyId) // rewrite company user role userRole = await SERVICES.AuthService.GetRole(req.user.companies[c_idx].roleId) } if (companies.length > 0) { where['companyId'] = companies } if (!userRole) { throw new Forbidden({ lang: req.user?.languageCode }) } // rule by role switch (userRole.key) { case 'client': where['userId'] = req.user.id case 'sales_rep': where['salesRepId'] = req.user.id case 'sales_qa': where['qaId'] = req.user.id case 'abc_worker': // todo all workers and separate branch where['workerId'] = req.user.id } } let included = [ { model: db.user, include: [ db.userEmail, db.userPhone ], as: 'user' }, { model: db.user, include: [ db.userEmail, db.userPhone ], as: 'destinationUser' }, {model: db.address, as: 'pickupAddress'}, {model: db.address, as: 'deliveryAddress'}, {model: db.orderInventory, as: 'inventory'}, {model: db.orderDocument, as: 'orderDocuments'}, ] if (isSet(providerId) && !isEmpty(providerId)) { where['providerId'] = providerId } if (isSet(companyId) && !isEmpty(companyId)) { where['companyId'] = companyId } if (isSet(warehouseId) && !isEmpty(warehouseId)) { where['warehouseId'] = warehouseId } if (isSet(status) && !isEmpty(status)) { where['status'] = status } if (isSet(storage) && !isEmpty(storage)) { where['storage'] = storage } if (isSet(id) && !isEmpty(id)) { where['id'] = id } if (isSet(inStatus) && !isEmpty(inStatus)) { if (inStatus != 'all') { where['status'] = { [Op.in]: inStatus.split(',').map((p) => { return p.trim() }) } } } if (isSet(include) && !isEmpty(include)) { include.split(',').map((p) => { where[p] = { [Op.and]: [{ [Op.not]: '' }, { [Op.not]: null }] }; }) } if (isSet(exclude) && !isEmpty(exclude)) { exclude.split(',').map((p) => { where[p] = {[Op.or]: ['', null]}; }) } let offset = page ? (page - 1) * (limit || 10) : 0 const count = await db.order.count({ where, }); const rows = await db.order.findAll({ include: included, where, offset, order: [ ['createdAt', 'DESC'], ], limit: parseInt(limit) || 10 }) if (!rows || rows.length == 0) { throw new NotFound({ lang: req.user?.languageCode }) } const time = performance.now() - t1 return res.status(200).json(new OrderListModel({ rows: rows, page, limit, count, time })) } catch (err) { next(err) } } }