diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js
new file mode 100644
index 0000000000..698bb1dac4
--- /dev/null
+++ b/back/methods/viaexpress-config/internationalExpedition.js
@@ -0,0 +1,45 @@
+const axios = require('axios');
+const {DOMParser} = require('xmldom');
+
+module.exports = Self => {
+ Self.remoteMethod('internationalExpedition', {
+ description: 'Create an expedition and return a label',
+ accessType: 'WRITE',
+ accepts: [{
+ arg: 'expeditionFk',
+ type: 'number',
+ required: true
+ }],
+ returns: {
+ type: ['object'],
+ root: true
+ },
+ http: {
+ path: `/internationalExpedition`,
+ verb: 'POST'
+ }
+ });
+
+ Self.internationalExpedition = async expeditionFk => {
+ const models = Self.app.models;
+
+ const viaexpressConfig = await models.ViaexpressConfig.findOne({
+ fields: ['url']
+ });
+
+ const renderedXml = await models.ViaexpressConfig.renderer(expeditionFk);
+ const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, renderedXml, {
+ headers: {
+ 'Content-Type': 'application/soap+xml; charset=utf-8'
+ }
+ });
+
+ const xmlString = response.data;
+ const parser = new DOMParser();
+ const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
+ const referenciaVxElement = xmlDoc.getElementsByTagName('ReferenciaVx')[0];
+ const referenciaVx = referenciaVxElement.textContent;
+
+ return referenciaVx;
+ };
+};
diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js
new file mode 100644
index 0000000000..e9abce5ca7
--- /dev/null
+++ b/back/methods/viaexpress-config/renderer.js
@@ -0,0 +1,126 @@
+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']
+ });
+
+ 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 ticket = expedition.ticket();
+ const sender = ticket.company().client();
+ const shipped = ticket.shipped.toISOString();
+ const data = {
+ viaexpressConfig,
+ sender,
+ senderAddress: sender.defaultAddress(),
+ client: ticket.client(),
+ address: ticket.address(),
+ shipped
+ };
+
+ const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8');
+ const renderedXml = ejs.render(template, data);
+ return renderedXml;
+ };
+};
diff --git a/back/methods/viaexpress-config/template.ejs b/back/methods/viaexpress-config/template.ejs
new file mode 100644
index 0000000000..0b6eb468c6
--- /dev/null
+++ b/back/methods/viaexpress-config/template.ejs
@@ -0,0 +1,52 @@
+
+