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: ['clientViaexpress', 'userViaexpress', 'passwordViaexpress', 'defaultWeight', 'deliveryType'] }); const expedition = await models.Expedition.findOne({ fields: ['id', 'ticketFk'], where: {id: expeditionFk}, include: [ { relation: 'ticket', scope: { fields: ['shipped', 'addressFk', 'clientFk', 'companyFk'], 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 shipped = expedition.ticket().shipped; const data = { defaultWeight: viaexpressConfig.defaultWeight, date: shipped.toISOString(), // const date = new Date().toISOString(); deliveryType: viaexpressConfig.deliveryType, senderName: expedition.ticket().company().client().socialName, senderStreet: expedition.ticket().company().client().defaultAddress().street, senderPostalCode: expedition.ticket().company().client().defaultAddress().postalCode, senderCity: expedition.ticket().company().client().defaultAddress().city, senderProvince: expedition.ticket().company().client().defaultAddress().province().name, senderPhone: expedition.ticket().company().client().defaultAddress().mobile || expedition.ticket().company().client().defaultAddress().phone || expedition.ticket().company().client().mobile || expedition.ticket().company().client().phone, senderEmail: expedition.ticket().company().client().email, receiverName: expedition.ticket().address().nickname, receiverStreet: expedition.ticket().address().street, receiverPostalCode: expedition.ticket().address().postalCode, receiverCity: expedition.ticket().address().city, receiverProvince: expedition.ticket().address().province().name, receiverPhone: expedition.ticket().address().mobile || expedition.ticket().address().phone || expedition.ticket().client().mobile || expedition.ticket().client().phone, receiverEmail: expedition.ticket().client().email, receiverCountry: expedition.ticket().address().province().country().code, clientViaexpress: viaexpressConfig.clientViaexpress, userViaexpress: viaexpressConfig.userViaexpress, passwordViaexpress: viaexpressConfig.passwordViaexpress }; const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8'); const renderedXml = ejs.render(template, data); return renderedXml; }; };