const db = require('vn-print/core/database'); const Email = require('vn-print/core/email'); const closure = require('./closure'); module.exports = async function(request, response, next) { try { const reqArgs = request.query; if (!reqArgs.routeId) throw new Error('The argument routeId is required'); response.status(200).json({ message: 'Success' }); const tickets = await db.rawSql(` SELECT t.id, t.clientFk, c.name clientName, c.email recipient, c.salesPersonFk, c.isToBeMailed, c.hasToInvoice, co.hasDailyInvoice, eu.email salesPersonEmail FROM expedition e JOIN ticket t ON t.id = e.ticketFk JOIN ticketState ts ON ts.ticketFk = t.id JOIN alertLevel al ON al.id = ts.alertLevel JOIN client c ON c.id = t.clientFk JOIN province p ON p.id = c.provinceFk JOIN country co ON co.id = p.countryFk LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk WHERE al.code = 'PACKED' AND t.routeFk = ? AND t.refFk IS NULL GROUP BY e.ticketFk`, [reqArgs.routeId]); await closure.start(tickets, response.locals); // Send route report to the agency const agencyMail = await db.findValue(` SELECT am.reportMail FROM route r JOIN agencyMode am ON am.id = r.agencyModeFk WHERE r.id = ?`, [reqArgs.routeId]); if (agencyMail) { const args = Object.assign({ routeId: Number.parseInt(reqArgs.routeId), recipient: agencyMail }, response.locals); const email = new Email('driver-route', args); await email.send(); } } catch (error) { next(error); } };