const fs = require('fs'); const ejs = require('ejs'); module.exports = Self => { Self.remoteMethod('renderer', { description: 'Renders the data from an XML', accessType: 'READ', accepts: [{ arg: 'expeditionFk', type: 'number', required: true }], returns: { type: ['object'], root: true }, http: { path: `/renderer`, verb: 'GET' } }); Self.renderer = async (expeditionFk) => { const models = Self.app.models; const viaexpressConfig = await models.ViaexpressConfig.findOne({ fields: ['client', 'user', 'password', 'defaultWeight', 'deliveryType', 'agencyModeFk'] }); const expedition = await models.Expedition.findOne({ fields: ['id', 'ticketFk'], where: {id: expeditionFk}, include: [ { relation: 'ticket', scope: { fields: ['shipped', 'addressFk', 'clientFk', 'companyFk', 'agencyModeFk'], include: [ { relation: 'client', scope: { fields: ['mobile', 'phone', 'email'] } }, { relation: 'address', scope: { fields: [ 'nickname', 'street', 'postalCode', 'city', 'mobile', 'phone', 'provinceFk' ], include: { relation: 'province', scope: { fields: ['name', 'countryFk'], include: { relation: 'country', scope: { fields: ['code'], } } } } } }, { relation: 'company', scope: { fields: ['clientFk'], include: { relation: 'client', scope: { fields: ['socialName', 'mobile', 'phone', 'email', 'defaultAddressFk'], include: { relation: 'defaultAddress', scope: { fields: [ 'street', 'postalCode', 'city', 'mobile', 'phone', 'provinceFk' ], include: { relation: 'province', scope: { fields: ['name'] } } } } } } } } ] } } ] }); const ticket = expedition.ticket(); const sender = ticket.company().client(); const shipped = ticket.shipped.toISOString(); const isInterdia = (ticket.agencyModeFk === viaexpressConfig.agencyModeFk) const data = { viaexpressConfig, sender, senderAddress: sender.defaultAddress(), client: ticket.client(), address: ticket.address(), shipped, isInterdia }; const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8'); const renderedXml = ejs.render(template, data); return renderedXml; }; };