const express = require('express'); const router = new express.Router(); const path = require('path'); const db = require('../../../core/database'); const sqlPath = path.join(__dirname, 'sql'); module.exports = app => { router.get('/preview', async function(req, res, next) { try { const reqArgs = req.args; if (!reqArgs.ticketId) throw new Error('The argument ticketId is required'); const ticketId = reqArgs.ticketId; const sales = await db.rawSqlFromDef(`${sqlPath}/sales`, [ticketId]); const content = app.toCSV(sales); const fileName = `ticket_${ticketId}.csv`; res.setHeader('Content-type', 'application/json; charset=utf-8'); res.setHeader('Content-Disposition', `inline; filename="${fileName}"`); res.end(content); } catch (error) { next(error); } }); router.get('/download', async function(req, res, next) { try { const reqArgs = req.args; if (!reqArgs.ticketId) throw new Error('The argument ticketId is required'); const ticketId = reqArgs.ticketId; const sales = await db.rawSqlFromDef(`${sqlPath}/sales`, [ticketId]); const content = app.toCSV(sales); const fileName = `ticket_${ticketId}.csv`; res.setHeader('Content-type', 'text/csv'); res.setHeader('Content-Disposition', `inline; filename="${fileName}"`); res.end(content); } catch (error) { next(error); } }); const Email = require('../../../core/email'); router.get('/send', async function(req, res, next) { try { const reqArgs = req.args; if (!reqArgs.ticketId) throw new Error('The argument ticketId is required'); const ticketId = reqArgs.ticketId; const ticket = await db.findOneFromDef(`${sqlPath}/ticket`, [ticketId]); const sales = await db.rawSqlFromDef(`${sqlPath}/sales`, [ticketId]); const args = Object.assign({ ticketId: (String(ticket.id)), recipientId: ticket.clientFk, recipient: ticket.recipient, replyTo: ticket.salesPersonEmail }, reqArgs); const content = app.toCSV(sales); const fileName = `ticket_${ticketId}.csv`; const email = new Email('delivery-note', args); await email.send({ overrideAttachments: true, attachments: [{ filename: fileName, content: content }] }); res.status(200).json({message: 'ok'}); } catch (error) { next(error); } }); return router; };