/var/www/greso.tech/server/nsm/controllers/report
NameSizeModeActions
leads_source.js30120644editdlrm
saleman_permormance.js49070644editdlrm
Edit: /var/www/greso.tech/server/nsm/controllers/report/leads_source.js (3012B)
module.exports = function ({ db, logger }) { const { NotFound, BadRequest } = require('../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber, isStatusBiggerThen } = require('../../utils/validator.util') const { LeadsSourceListModel } = 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 { let { limit, page, dateFrom, dateTo } = req.body let offset = page ? (page - 1) * (limit || 100) : 0 let where = {} // LOGIC --> let companies = [] let providers = [] let providersIds = [] let total = { id: '', name: 'Total', totalIn: 0, leads: 0, followUps: 0, estimated: 0, booked: 0, canceled: 0, } // Get user companies const companyUsers = req.user.companies for (let companyUser of companyUsers) { // if (companyUser.roleId == salesmanRole.id) { if (companies.indexOf(companyUser.companyId) === -1) { companies.push(companyUser.companyId) } // } } for (let companyId of companies) { const companyProviders = await db.providers.findAll({ where: { companyId: companyId }, }) for (let provider of companyProviders) { if (providersIds.indexOf(provider.userId) === -1) { providers.push({ id: provider.id, name: provider.name ?? '-', totalIn: 0, leads: 0, followUps: 0, estimated: 0, booked: 0, canceled: 0, }) providersIds.push(provider.id) } } } providers.push(total) if (!isSet(dateTo) || isEmpty(dateTo)) { dateTo = dateFrom } where['createdAt'] = { [Op.between]: [new Date(dateFrom + " 00:00:00"), new Date(dateTo + " 23:59:59")] } if (providersIds.length > 0) { where['providerId'] = { [Op.in]: providersIds } } // const count = await db.order.count(); const orders = await db.order.findAll({ where: where, offset, limit: parseInt(limit) || 100 }) // if (!orders || orders.length == 0) { // throw new NotFound({ lang: req.user?.languageCode }) // } const count = orders.length for (let provider of providers) { for (let order of orders) { if (order.providerId == provider.id) { provider.totalIn++; total.totalIn++; if ( isStatusBiggerThen(order.status, 'estimate' )) { provider.estimated++; total.estimated++; } if ( isStatusBiggerThen(order.status, 'booked' )) { provider.booked++; total.booked++; } if ( order.status == 'cancel' || order.status == 'deleted' ) { provider.canceled++; total.canceled++; } } } } const time = performance.now() - t1 return res.status(200).json(new LeadsSourceListModel({ rows: providers, page, limit, count, time })) } catch (err) { next(err) } } }