/var/www/greso.tech/server/nsm/controllers/order
Edit: /var/www/greso.tech/server/nsm/controllers/order/search.js (3047B)
module.exports = function ({ db, logger }) {
const { NotFound, BadRequest } = require('../../responseModels/errors')
const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber } = require('../../utils/validator.util')
const { OrderListModel } = require('../../responseModels')
const { Op } = require('sequelize')
return async (req, res, next) => {
logger.child({ path: req.path, request: req.query }).info()
let t1 = performance.now()
try {
const {
q,
limit,
page
} = req.query
let include = [
{
model: db.user,
include: [
db.userEmail,
db.userPhone
],
as: 'user'
},
{
model: db.user,
include: [
db.userEmail,
db.userPhone
],
as: 'destinationUser'
},
// {
// model: db.user,
// include: [
// db.userEmail,
// db.userPhone
// ],
// as: 'salesRep'
// },
// {
// model: db.user,
// include: [
// db.userEmail,
// db.userPhone
// ],
// as: 'qa'
// },
// {
// model: db.user,
// include: [
// db.userEmail,
// db.userPhone
// ],
// as: 'worker'
// },
// {
// model: db.user,
// include: [
// db.userEmail,
// db.userPhone
// ],
// as: 'carrierWorker'
// },
// {model: db.rateAreas, as: 'pickupArea'},
// {model: db.rateAreas, as: 'deliveryArea'},
{model: db.address, as: 'pickupAddress'},
{model: db.address, as: 'deliveryAddress'},
// {model:
// db.orderInventory, as: 'inventories',
// include:[
// { model: db.inventoryExtras, as: 'extras' },
// { model: db.inventoryItems, as: 'items',
// include: [
// { model: db.inventoryItemsConditions, as: 'conditions' },
// { model: db.inventoryItemsPackages, as: 'packages' },
// { model: db.inventoryItemsAttachments, as: 'attachments' }
// ],
// }]
// },
// {model: db.orderDocument, as: 'orderDocuments'},
// {model: db.user, as: 'workers'},
// {model: db.user, as: 'carrierWorkers'},
// {model: db.branch, as: 'branch'},
// {model: db.branch, as: 'carrier'},
// {model: db.providers, as: 'provider'},
// {model: db.warehouses, as: 'warehouse'},
]
let where = {}
if (isSet(q) && !isEmpty(q)) {
where['number'] = {
[Op.like]: '%'+q+'%'
}
}else{
throw new NotFound({ lang: req.user?.languageCode })
}
let offset = page ? (page - 1) * (limit || 10) : 0
const count = await db.order.count({
where,
});
const rows = await db.order.findAll({
include: include,
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)
}
}
}