const db = require('../core/database'); const Email = require('../core/email'); const smtp = require('../core/smtp'); const config = require('../core/config'); module.exports = app => { app.get('/api/closure/by-ticket', async function(request, response) { }); app.get('/api/closure/all', async function(request, response) { response.status(200).json({ message: 'Task executed successfully' }); const failedtickets = []; const tickets = await db.rawSql(` SELECT t.id, t.clientFk, c.email recipient, c.isToBeMailed, c.salesPersonFk, eu.email salesPersonEmail FROM expedition e JOIN ticket t ON t.id = e.ticketFk JOIN client c ON c.id = t.clientFk JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission JOIN ticketState ts ON ts.ticketFk = t.id JOIN alertLevel al ON al.alertLevel = ts.alertLevel LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk WHERE al.code = 'PACKED' AND DATE(t.shipped) BETWEEN DATE_ADD(CURDATE(), INTERVAL -2 DAY) AND CURDATE() AND t.refFk IS NULL GROUP BY e.ticketFk`); for (const ticket of tickets) { try { await db.rawSql(`CALL vn.ticket_closeByTicket(:ticketId)`, { ticketId: ticket.id }); if (!ticket.salesPersonFk || !ticket.isToBeMailed) continue; if (!ticket.recipient) { const body = `No se ha podido enviar el albarán ${ticket.id} al cliente ${ticket.clientFk} porque no tiene un email especificado.

Para dejar de recibir esta notificación, asígnale un email o desactiva la notificación por email para este cliente.`; smtp.send({ to: ticket.salesPersonEmail, subject: 'No se ha podido enviar el albarán', html: body }); continue; } const args = { ticketId: ticket.id, recipientId: ticket.clientFk, recipient: ticket.recipient }; const email = new Email('delivery-note-link', args); await email.send(); } catch (error) { // Save tickets on a list of failed ids failedtickets.push({ id: ticket.id, stacktrace: error }); } } // Send email with failed tickets if (failedtickets.length > 0) { let body = 'This following tickets have failed:

'; for (ticket of failedtickets) { body += `Ticket: ${ticket.id}
${ticket.stacktrace}

`; } smtp.send({ to: config.app.reportEmail, subject: '[API] Nightly ticket closure report', html: body }); } }); };