From 0cc5781f3fc2b562ee1fd617a40f35402be2fd6d Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 13 Jun 2023 15:05:37 +0200 Subject: [PATCH 01/21] =?UTF-8?q?refs=20#4734=20feat:=20a=C3=B1adido=20m?= =?UTF-8?q?=C3=A9todo=20putExpedicionInternacional=20de=20viaexpress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../putExpedicionInternacional.js | 135 ++++++++++++++++++ back/model-config.json | 3 + back/models/viaexpress-config.js | 3 + back/models/viaexpress-config.json | 34 +++++ db/changes/232601/00-acl_viaexpressConfig.sql | 3 + db/changes/232601/00-viaexpress.sql | 13 ++ db/dump/fixtures.sql | 12 +- 7 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 back/methods/viaexpress-config/putExpedicionInternacional.js create mode 100644 back/models/viaexpress-config.js create mode 100644 back/models/viaexpress-config.json create mode 100644 db/changes/232601/00-acl_viaexpressConfig.sql create mode 100644 db/changes/232601/00-viaexpress.sql diff --git a/back/methods/viaexpress-config/putExpedicionInternacional.js b/back/methods/viaexpress-config/putExpedicionInternacional.js new file mode 100644 index 0000000000..dc1df32181 --- /dev/null +++ b/back/methods/viaexpress-config/putExpedicionInternacional.js @@ -0,0 +1,135 @@ +const axios = require('axios'); + +module.exports = Self => { + Self.remoteMethod('putExpedicionInternacional', { + description: 'Returns the lastest campaigns', + accessType: 'WRITE', + accepts: [{ + arg: 'expeditionFk', + type: 'number', + required: true + }], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/putExpedicionInternacional`, + verb: 'POST' + } + }); + + Self.putExpedicionInternacional = async(expeditionFk, options) => { + const myOptions = {}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + + const [data] = await Self.rawSql(` + SELECT urlAccess, + clientViaexpress, + userViaexpress, + passwordViaexpress, + defaultWeight, + DATE_FORMAT(t.shipped, '%Y-%m-%d') shipped, + deliveryType, + cv.socialName senderName, + av.street senderStreet, + av.postalCode senderPostalCode, + av.city senderCity, + pv.name senderProvince, + IFNULL(av.mobile, IFNULL(av.phone, IFNULL(cv.mobile, cv.phone))) senderPhone, + SUBSTRING_INDEX(cv.email, ',', 1) senderEmail, + a.nickname receiverName, + a.street receiverStreet, + a.postalCode receiverPostalCode, + a.city receiverCity, + p.name receiverProvince, + IFNULL(a.mobile, IFNULL(a.phone, IFNULL(c.mobile, c.phone))) receiverPhone, + SUBSTRING_INDEX(c.email, ',', 1) receiverEmail, + c2.code receiverCountry + FROM vn.viaexpressConfig + JOIN vn.expedition e ON e.id = ? + JOIN vn.ticket t ON t.id = e.ticketFk + JOIN vn.address a ON a.id = t.addressFk + JOIN vn.province p ON p.id = a.provinceFk + JOIN vn.client c ON c.id = t.clientFk + JOIN vn.company co ON co.id = t.companyFk + JOIN vn.client cv ON cv.id = co.clientFk + JOIN vn.address av ON av.id = cv.defaultAddressFk + JOIN vn.province pv ON pv.id = av.provinceFk + JOIN vn.country c2 ON c2.id = p.countryFk`, [expeditionFk], myOptions); + + const xmlData = ` + + + + + ${data.defaultWeight} + 1 + 0 + ${data.shipped} + 0 + ${data.deliveryType} + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + ${data.senderName} + ${data.senderStreet} + ${data.senderPostalCode} + ${data.senderCity} + ${data.senderProvince} + + ${data.senderPhone} + ${data.senderEmail} + + + ${data.receiverName} + ${data.receiverStreet} + ${data.receiverPostalCode} + ${data.receiverCity} + + ${data.receiverProvince} + + ${data.receiverPhone} + ${data.receiverEmail} + ${data.receiverCountry} + + + ${data.clientViaexpress} + ${data.userViaexpress} + ${data.passwordViaexpress} + + + + + `; + + const url = 'http://82.223.6.71:82/ServicioVxClientes.asmx'; + try { + const response = await axios.post(url, xmlData, { + headers: { + 'Content-Type': 'application/soap+xml; charset=utf-8' + } + }); + + const startTag = ''; + const endTag = ''; + const startIndex = response.data.indexOf(startTag) + startTag.length; + const endIndex = response.data.indexOf(endTag); + const referenciaVx = response.data.substring(startIndex, endIndex); + + return referenciaVx; + } catch (error) { + throw Error(error.response.data); + } + }; +}; diff --git a/back/model-config.json b/back/model-config.json index ff2bf5850b..ec126455b4 100644 --- a/back/model-config.json +++ b/back/model-config.json @@ -139,6 +139,9 @@ }, "PrintConfig": { "dataSource": "vn" + }, + "ViaexpressConfig": { + "dataSource": "vn" } } diff --git a/back/models/viaexpress-config.js b/back/models/viaexpress-config.js new file mode 100644 index 0000000000..712bde60d0 --- /dev/null +++ b/back/models/viaexpress-config.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/viaexpress-config/putExpedicionInternacional')(Self); +}; diff --git a/back/models/viaexpress-config.json b/back/models/viaexpress-config.json new file mode 100644 index 0000000000..ed150a448d --- /dev/null +++ b/back/models/viaexpress-config.json @@ -0,0 +1,34 @@ +{ + "name": "ViaexpressConfig", + "base": "VnModel", + "options": { + "mysql": { + "table": "viaexpressConfig" + } + }, + "properties": { + "id": { + "type": "number", + "required": true + }, + "urlAccess": { + "type": "string", + "required": true + }, + "clientViaexpress": { + "type": "date" + }, + "userViaexpress": { + "type": "number" + }, + "passwordViaexpress": { + "type": "number" + }, + "defaultWeight": { + "type": "number" + }, + "deliveryType": { + "type": "number" + } + } +} diff --git a/db/changes/232601/00-acl_viaexpressConfig.sql b/db/changes/232601/00-acl_viaexpressConfig.sql new file mode 100644 index 0000000000..8371852620 --- /dev/null +++ b/db/changes/232601/00-acl_viaexpressConfig.sql @@ -0,0 +1,3 @@ +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) + VALUES + ('ViaexpressConfig', 'putExpedicionInternacional', 'WRITE', 'ALLOW', 'ROLE', 'employee'); diff --git a/db/changes/232601/00-viaexpress.sql b/db/changes/232601/00-viaexpress.sql new file mode 100644 index 0000000000..1313135f94 --- /dev/null +++ b/db/changes/232601/00-viaexpress.sql @@ -0,0 +1,13 @@ +CREATE TABLE `vn`.`viaexpressConfig` ( + id int auto_increment NOT NULL, + urlAccess varchar(100) NOT NULL, + clientViaexpress varchar(100) NOT NULL, + userViaexpress varchar(100) NOT NULL, + passwordViaexpress varchar(100) NOT NULL, + defaultWeight decimal(10,2) NOT NULL, + deliveryType varchar(5) NOT NULL, + CONSTRAINT viaexpressConfig_PK PRIMARY KEY (id) +) +ENGINE=InnoDB +DEFAULT CHARSET=utf8mb3 +COLLATE=utf8mb3_unicode_ci; diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index a6557ff895..eddb1f6a95 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -566,13 +566,13 @@ INSERT INTO `vn`.`supplierAccount`(`id`, `supplierFk`, `iban`, `bankEntityFk`) VALUES (241, 442, 'ES111122333344111122221111', 128); -INSERT INTO `vn`.`company`(`id`, `code`, `supplierAccountFk`, `workerManagerFk`, `companyCode`, `sage200Company`, `expired`, `companyGroupFk`, `phytosanitary`) +INSERT INTO `vn`.`company`(`id`, `code`, `supplierAccountFk`, `workerManagerFk`, `companyCode`, `sage200Company`, `expired`, `companyGroupFk`, `phytosanitary` , `clientFk`) VALUES - (69 , 'CCs', NULL, 30, NULL, 0, NULL, 1, NULL), - (442 , 'VNL', 241, 30, 2 , 1, NULL, 2, 'VNL Company - Plant passport'), - (567 , 'VNH', NULL, 30, NULL, 4, NULL, 1, 'VNH Company - Plant passport'), - (791 , 'FTH', NULL, 30, NULL, 3, '2015-11-30', 1, NULL), - (1381, 'ORN', NULL, 30, NULL, 7, NULL, 1, 'ORN Company - Plant passport'); + (69 , 'CCs', NULL, 30, NULL, 0, NULL, 1, NULL , NULL), + (442 , 'VNL', 241, 30, 2 , 1, NULL, 2, 'VNL Company - Plant passport' , 1101), + (567 , 'VNH', NULL, 30, NULL, 4, NULL, 1, 'VNH Company - Plant passport' , NULL), + (791 , 'FTH', NULL, 30, NULL, 3, '2015-11-30', 1, NULL , NULL), + (1381, 'ORN', NULL, 30, NULL, 7, NULL, 1, 'ORN Company - Plant passport' , NULL); INSERT INTO `vn`.`taxArea` (`code`, `claveOperacionFactura`, `CodigoTransaccion`) VALUES From 0a9bdc6f891b050c95f1806857681c4119dd5ff8 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 13:25:45 +0200 Subject: [PATCH 02/21] test: jenkins test secuenciales --- Jenkinsfile | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index cf9b8cd677..1fe2cfc9bb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -54,19 +54,17 @@ pipeline { NODE_ENV = "" TZ = 'Europe/Madrid' } - parallel { - stage('Frontend') { - steps { - nodejs('node-v20') { - sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' - } + stage('Frontend') { + steps { + nodejs('node-v20') { + sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' } } - stage('Backend') { - steps { - nodejs('node-v20') { - sh 'npm run test:back:ci' - } + } + stage('Backend') { + steps { + nodejs('node-v20') { + sh 'npm run test:back:ci' } } } From 1f4e98075cfa5d36ed309246870b8e6572e97f6b Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 13:27:35 +0200 Subject: [PATCH 03/21] fix: test secuendiales --- Jenkinsfile | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1fe2cfc9bb..72d70dc979 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -54,17 +54,19 @@ pipeline { NODE_ENV = "" TZ = 'Europe/Madrid' } - stage('Frontend') { - steps { - nodejs('node-v20') { - sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' + steps { + stage('Frontend') { + steps { + nodejs('node-v20') { + sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' + } } } - } - stage('Backend') { - steps { - nodejs('node-v20') { - sh 'npm run test:back:ci' + stage('Backend') { + steps { + nodejs('node-v20') { + sh 'npm run test:back:ci' + } } } } From a31b735d3cef087646a8d7ea1d498741cfb942cd Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 13:29:00 +0200 Subject: [PATCH 04/21] fix --- Jenkinsfile | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 72d70dc979..5345b6dfed 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -55,17 +55,18 @@ pipeline { TZ = 'Europe/Madrid' } steps { - stage('Frontend') { - steps { - nodejs('node-v20') { - sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' + script { + if (!env.BRANCH_NAME.equals('test') && !env.BRANCH_NAME.equals('master')) { + stage('Frontend') { + nodejs('node-v20') { + sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' + } } - } - } - stage('Backend') { - steps { - nodejs('node-v20') { - sh 'npm run test:back:ci' + + stage('Backend') { + nodejs('node-v20') { + sh 'npm run test:back:ci' + } } } } From 2da54ac3d72175c28cb7b11972dcba43fa0e6cc7 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 13:39:05 +0200 Subject: [PATCH 05/21] test secuenciales --- Jenkinsfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 5345b6dfed..897bf4f3e5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -57,17 +57,17 @@ pipeline { steps { script { if (!env.BRANCH_NAME.equals('test') && !env.BRANCH_NAME.equals('master')) { - stage('Frontend') { - nodejs('node-v20') { - sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' - } - } - stage('Backend') { nodejs('node-v20') { sh 'npm run test:back:ci' } } + + stage('Frontend') { + nodejs('node-v20') { + sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' + } + } } } } From 998597dfcc53f90f4fe5bc4334f87045c2d5f05b Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 13:49:21 +0200 Subject: [PATCH 06/21] refs #4734 recator: cambiado nombre ruta --- ...onInternacional.js => internationalExpedition.js} | 12 ++++++------ back/models/viaexpress-config.js | 2 +- back/models/viaexpress-config.json | 2 +- db/changes/232601/00-acl_viaexpressConfig.sql | 2 +- db/changes/232601/00-viaexpress.sql | 7 ++----- 5 files changed, 11 insertions(+), 14 deletions(-) rename back/methods/viaexpress-config/{putExpedicionInternacional.js => internationalExpedition.js} (94%) diff --git a/back/methods/viaexpress-config/putExpedicionInternacional.js b/back/methods/viaexpress-config/internationalExpedition.js similarity index 94% rename from back/methods/viaexpress-config/putExpedicionInternacional.js rename to back/methods/viaexpress-config/internationalExpedition.js index dc1df32181..99a4197c7a 100644 --- a/back/methods/viaexpress-config/putExpedicionInternacional.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -1,7 +1,7 @@ const axios = require('axios'); module.exports = Self => { - Self.remoteMethod('putExpedicionInternacional', { + Self.remoteMethod('internationalExpedition', { description: 'Returns the lastest campaigns', accessType: 'WRITE', accepts: [{ @@ -14,19 +14,20 @@ module.exports = Self => { root: true }, http: { - path: `/putExpedicionInternacional`, + path: `/internationalExpedition`, verb: 'POST' } }); - Self.putExpedicionInternacional = async(expeditionFk, options) => { + Self.internationalExpedition = async(expeditionFk, options) => { const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); const [data] = await Self.rawSql(` - SELECT urlAccess, + SELECT + url, clientViaexpress, userViaexpress, passwordViaexpress, @@ -113,9 +114,8 @@ module.exports = Self => { `; - const url = 'http://82.223.6.71:82/ServicioVxClientes.asmx'; try { - const response = await axios.post(url, xmlData, { + const response = await axios.post(`${data.url}ServicioVxClientes.asmx`, xmlData, { headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' } diff --git a/back/models/viaexpress-config.js b/back/models/viaexpress-config.js index 712bde60d0..72424f806c 100644 --- a/back/models/viaexpress-config.js +++ b/back/models/viaexpress-config.js @@ -1,3 +1,3 @@ module.exports = Self => { - require('../methods/viaexpress-config/putExpedicionInternacional')(Self); + require('../methods/viaexpress-config/internationalExpedition')(Self); }; diff --git a/back/models/viaexpress-config.json b/back/models/viaexpress-config.json index ed150a448d..5927cee3f6 100644 --- a/back/models/viaexpress-config.json +++ b/back/models/viaexpress-config.json @@ -11,7 +11,7 @@ "type": "number", "required": true }, - "urlAccess": { + "url": { "type": "string", "required": true }, diff --git a/db/changes/232601/00-acl_viaexpressConfig.sql b/db/changes/232601/00-acl_viaexpressConfig.sql index 8371852620..91a7e3c5b5 100644 --- a/db/changes/232601/00-acl_viaexpressConfig.sql +++ b/db/changes/232601/00-acl_viaexpressConfig.sql @@ -1,3 +1,3 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES - ('ViaexpressConfig', 'putExpedicionInternacional', 'WRITE', 'ALLOW', 'ROLE', 'employee'); + ('ViaexpressConfig', 'internationalExpedition', 'WRITE', 'ALLOW', 'ROLE', 'employee'); diff --git a/db/changes/232601/00-viaexpress.sql b/db/changes/232601/00-viaexpress.sql index 1313135f94..9e3baa9fd5 100644 --- a/db/changes/232601/00-viaexpress.sql +++ b/db/changes/232601/00-viaexpress.sql @@ -1,13 +1,10 @@ CREATE TABLE `vn`.`viaexpressConfig` ( id int auto_increment NOT NULL, - urlAccess varchar(100) NOT NULL, + url varchar(100) NOT NULL, clientViaexpress varchar(100) NOT NULL, userViaexpress varchar(100) NOT NULL, passwordViaexpress varchar(100) NOT NULL, defaultWeight decimal(10,2) NOT NULL, deliveryType varchar(5) NOT NULL, CONSTRAINT viaexpressConfig_PK PRIMARY KEY (id) -) -ENGINE=InnoDB -DEFAULT CHARSET=utf8mb3 -COLLATE=utf8mb3_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; From 1027e0753e399e4e7ed39d35468c1c5197945623 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 14:06:36 +0200 Subject: [PATCH 07/21] test in paralel --- Jenkinsfile | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 897bf4f3e5..cf9b8cd677 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -54,19 +54,18 @@ pipeline { NODE_ENV = "" TZ = 'Europe/Madrid' } - steps { - script { - if (!env.BRANCH_NAME.equals('test') && !env.BRANCH_NAME.equals('master')) { - stage('Backend') { - nodejs('node-v20') { - sh 'npm run test:back:ci' - } + parallel { + stage('Frontend') { + steps { + nodejs('node-v20') { + sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' } - - stage('Frontend') { - nodejs('node-v20') { - sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2' - } + } + } + stage('Backend') { + steps { + nodejs('node-v20') { + sh 'npm run test:back:ci' } } } From 90ce0d1c275e1f508bceb8a13224aef97262ada4 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 14:24:47 +0200 Subject: [PATCH 08/21] refs #4734 refactor: consulta con loopback --- .../internationalExpedition.js | 95 +++++++++++++++++-- back/models/company.json | 7 ++ 2 files changed, 96 insertions(+), 6 deletions(-) diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index 99a4197c7a..fd8d69e6db 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -20,6 +20,7 @@ module.exports = Self => { }); Self.internationalExpedition = async(expeditionFk, options) => { + const models = Self.app.models; const myOptions = {}; if (typeof options == 'object') @@ -27,13 +28,13 @@ module.exports = Self => { const [data] = await Self.rawSql(` SELECT - url, - clientViaexpress, - userViaexpress, - passwordViaexpress, - defaultWeight, + -- url, + -- clientViaexpress, + -- userViaexpress, + -- passwordViaexpress, + -- defaultWeight, + -- deliveryType, DATE_FORMAT(t.shipped, '%Y-%m-%d') shipped, - deliveryType, cv.socialName senderName, av.street senderStreet, av.postalCode senderPostalCode, @@ -61,6 +62,88 @@ module.exports = Self => { JOIN vn.province pv ON pv.id = av.provinceFk JOIN vn.country c2 ON c2.id = p.countryFk`, [expeditionFk], myOptions); + 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'] + } + } + } + } + } + } + } + } + ] + } + + } + ] + }, myOptions); + console.log(data); + console.log(expedition); + const xmlData = ` diff --git a/back/models/company.json b/back/models/company.json index f16c5762fc..53266e38ac 100644 --- a/back/models/company.json +++ b/back/models/company.json @@ -24,5 +24,12 @@ "where" :{ "expired": null } + }, + "relations": { + "client": { + "type": "belongsTo", + "model": "Client", + "foreignKey": "clientFk" + } } } From ab68cb7165a0ae7a34074c6699f716a1476600e1 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 14:27:29 +0200 Subject: [PATCH 09/21] refs #4734 fix: manejo errores --- back/methods/viaexpress-config/internationalExpedition.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index fd8d69e6db..dd46ff7945 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -212,7 +212,8 @@ module.exports = Self => { return referenciaVx; } catch (error) { - throw Error(error.response.data); + if (error?.response?.data) throw Error(error.response.data); + throw Error(error); } }; }; From 219ad75172ad57a6e76fa4ae84c718f249f0f3b6 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 16 Jun 2023 14:30:33 +0200 Subject: [PATCH 10/21] a --- .../viaexpress-config/internationalExpedition.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index dd46ff7945..23b62e8452 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -28,12 +28,12 @@ module.exports = Self => { const [data] = await Self.rawSql(` SELECT - -- url, - -- clientViaexpress, - -- userViaexpress, - -- passwordViaexpress, - -- defaultWeight, - -- deliveryType, + url, + clientViaexpress, + userViaexpress, + passwordViaexpress, + defaultWeight, + deliveryType, DATE_FORMAT(t.shipped, '%Y-%m-%d') shipped, cv.socialName senderName, av.street senderStreet, From 303be74382a9bc38f931e994db15027df9e890f7 Mon Sep 17 00:00:00 2001 From: vicent Date: Mon, 19 Jun 2023 11:55:07 +0200 Subject: [PATCH 11/21] refs #4734 refactor: use loopback instead of --- .../internationalExpedition.js | 92 +++++++------------ back/models/viaexpress-config.json | 8 +- 2 files changed, 36 insertions(+), 64 deletions(-) diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index 23b62e8452..70a68acd6e 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -26,42 +26,6 @@ module.exports = Self => { if (typeof options == 'object') Object.assign(myOptions, options); - const [data] = await Self.rawSql(` - SELECT - url, - clientViaexpress, - userViaexpress, - passwordViaexpress, - defaultWeight, - deliveryType, - DATE_FORMAT(t.shipped, '%Y-%m-%d') shipped, - cv.socialName senderName, - av.street senderStreet, - av.postalCode senderPostalCode, - av.city senderCity, - pv.name senderProvince, - IFNULL(av.mobile, IFNULL(av.phone, IFNULL(cv.mobile, cv.phone))) senderPhone, - SUBSTRING_INDEX(cv.email, ',', 1) senderEmail, - a.nickname receiverName, - a.street receiverStreet, - a.postalCode receiverPostalCode, - a.city receiverCity, - p.name receiverProvince, - IFNULL(a.mobile, IFNULL(a.phone, IFNULL(c.mobile, c.phone))) receiverPhone, - SUBSTRING_INDEX(c.email, ',', 1) receiverEmail, - c2.code receiverCountry - FROM vn.viaexpressConfig - JOIN vn.expedition e ON e.id = ? - JOIN vn.ticket t ON t.id = e.ticketFk - JOIN vn.address a ON a.id = t.addressFk - JOIN vn.province p ON p.id = a.provinceFk - JOIN vn.client c ON c.id = t.clientFk - JOIN vn.company co ON co.id = t.companyFk - JOIN vn.client cv ON cv.id = co.clientFk - JOIN vn.address av ON av.id = cv.defaultAddressFk - JOIN vn.province pv ON pv.id = av.provinceFk - JOIN vn.country c2 ON c2.id = p.countryFk`, [expeditionFk], myOptions); - const expedition = await models.Expedition.findOne({ fields: ['id', 'ticketFk'], where: {id: expeditionFk}, @@ -141,20 +105,28 @@ module.exports = Self => { } ] }, myOptions); - console.log(data); - console.log(expedition); + + const viaexpressConfig = await models.ViaexpressConfig.findOne({ + fields: ['url', 'clientViaexpress', 'userViaexpress', 'passwordViaexpress', 'defaultWeight', 'deliveryType'] + }, myOptions); + + const shipped = expedition.ticket().shipped; + const year = shipped.getFullYear(); + const month = shipped.getMonth() + 1; + const day = shipped.getDate(); + const date = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; const xmlData = ` - ${data.defaultWeight} + ${viaexpressConfig.defaultWeight} 1 0 - ${data.shipped} + ${date} 0 - ${data.deliveryType} + ${viaexpressConfig.deliveryType} 0 0 0 @@ -166,31 +138,31 @@ module.exports = Self => { - ${data.senderName} - ${data.senderStreet} - ${data.senderPostalCode} - ${data.senderCity} - ${data.senderProvince} + ${expedition.ticket().company().client().socialName} + ${expedition.ticket().company().client().defaultAddress().street} + ${expedition.ticket().company().client().defaultAddress().postalCode} + ${expedition.ticket().company().client().defaultAddress().city} + ${expedition.ticket().company().client().defaultAddress().province().name} - ${data.senderPhone} - ${data.senderEmail} + ${expedition.ticket().company().client().defaultAddress().mobile || expedition.ticket().company().client().defaultAddress().phone || expedition.ticket().company().client().mobile || expedition.ticket().company().client().phone} + ${expedition.ticket().company().client().email} - ${data.receiverName} - ${data.receiverStreet} - ${data.receiverPostalCode} - ${data.receiverCity} + ${expedition.ticket().address().nickname} + ${expedition.ticket().address().street} + ${expedition.ticket().address().postalCode} + ${expedition.ticket().address().city} - ${data.receiverProvince} + ${expedition.ticket().address().province().name} - ${data.receiverPhone} - ${data.receiverEmail} - ${data.receiverCountry} + ${expedition.ticket().address().mobile || expedition.ticket().address().phone || expedition.ticket().client().mobile || expedition.ticket().client().phone} + ${expedition.ticket().client().email} + ${expedition.ticket().address().province().country().code} - ${data.clientViaexpress} - ${data.userViaexpress} - ${data.passwordViaexpress} + ${viaexpressConfig.clientViaexpress} + ${viaexpressConfig.userViaexpress} + ${viaexpressConfig.passwordViaexpress} @@ -198,7 +170,7 @@ module.exports = Self => { `; try { - const response = await axios.post(`${data.url}ServicioVxClientes.asmx`, xmlData, { + const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, xmlData, { headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' } diff --git a/back/models/viaexpress-config.json b/back/models/viaexpress-config.json index 5927cee3f6..26d6c8e375 100644 --- a/back/models/viaexpress-config.json +++ b/back/models/viaexpress-config.json @@ -16,19 +16,19 @@ "required": true }, "clientViaexpress": { - "type": "date" + "type": "string" }, "userViaexpress": { - "type": "number" + "type": "string" }, "passwordViaexpress": { - "type": "number" + "type": "string" }, "defaultWeight": { "type": "number" }, "deliveryType": { - "type": "number" + "type": "string" } } } From cfe340eeff471d70d188e5f1b5573179b38941b1 Mon Sep 17 00:00:00 2001 From: vicent Date: Mon, 19 Jun 2023 14:27:24 +0200 Subject: [PATCH 12/21] refs #4734 feat: xml en otro archivo --- .../internationalExpedition.js | 232 ++++++------------ back/methods/viaexpress-config/renderer.js | 162 ++++++++++++ back/methods/viaexpress-config/template.xml | 52 ++++ back/models/viaexpress-config.js | 1 + package.json | 1 + 5 files changed, 285 insertions(+), 163 deletions(-) create mode 100644 back/methods/viaexpress-config/renderer.js create mode 100644 back/methods/viaexpress-config/template.xml diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index 70a68acd6e..cbb1c2c675 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -1,4 +1,5 @@ const axios = require('axios'); +const fs = require('fs'); module.exports = Self => { Self.remoteMethod('internationalExpedition', { @@ -19,173 +20,78 @@ module.exports = Self => { } }); - Self.internationalExpedition = async(expeditionFk, options) => { + Self.internationalExpedition = async expeditionFk => { const models = Self.app.models; - const myOptions = {}; - - if (typeof options == 'object') - Object.assign(myOptions, options); - - 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'] - } - } - } - } - } - } - } - } - ] - } - - } - ] - }, myOptions); const viaexpressConfig = await models.ViaexpressConfig.findOne({ - fields: ['url', 'clientViaexpress', 'userViaexpress', 'passwordViaexpress', 'defaultWeight', 'deliveryType'] - }, myOptions); + fields: ['url'] + }); - const shipped = expedition.ticket().shipped; - const year = shipped.getFullYear(); - const month = shipped.getMonth() + 1; - const day = shipped.getDate(); - const date = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; + const renderedXml = await models.ViaexpressConfig.renderer(expeditionFk); + // const renderedXml = ` + // + // + // + // + // 10 + // 1 + // 0 + // 2023-06-12 + // 0 + // E + // 0 + // 0 + // 0 + // 0 + // 0 + // + // + // 0 + // + // + // + // VERDNATURA LEVANTE SL + // FENOLLARS, 2 + // 46680 + // Algemesi + // Valencia + // + // 963677177 + // pako.natek@gmail.com + // + // + // ROSAMARY FLORISTERIA + // C SANTA ROSA,25 + // 03802 + // ALCOY + // ALCOY + // Alicante + // + // 653967489 + // correo@floristeriarosamary.com + // ES + // + // + // 16092 + // B97367486 + // VERDNA22 + // + // + // + // + // `; + const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, renderedXml, { + headers: { + 'Content-Type': 'application/soap+xml; charset=utf-8' + } + }); + console.log(response); + const startTag = ''; + const endTag = ''; + const startIndex = response.data.indexOf(startTag) + startTag.length; + const endIndex = response.data.indexOf(endTag); + const referenciaVx = response.data.substring(startIndex, endIndex); - const xmlData = ` - - - - - ${viaexpressConfig.defaultWeight} - 1 - 0 - ${date} - 0 - ${viaexpressConfig.deliveryType} - 0 - 0 - 0 - 0 - 0 - - - 0 - - - - ${expedition.ticket().company().client().socialName} - ${expedition.ticket().company().client().defaultAddress().street} - ${expedition.ticket().company().client().defaultAddress().postalCode} - ${expedition.ticket().company().client().defaultAddress().city} - ${expedition.ticket().company().client().defaultAddress().province().name} - - ${expedition.ticket().company().client().defaultAddress().mobile || expedition.ticket().company().client().defaultAddress().phone || expedition.ticket().company().client().mobile || expedition.ticket().company().client().phone} - ${expedition.ticket().company().client().email} - - - ${expedition.ticket().address().nickname} - ${expedition.ticket().address().street} - ${expedition.ticket().address().postalCode} - ${expedition.ticket().address().city} - - ${expedition.ticket().address().province().name} - - ${expedition.ticket().address().mobile || expedition.ticket().address().phone || expedition.ticket().client().mobile || expedition.ticket().client().phone} - ${expedition.ticket().client().email} - ${expedition.ticket().address().province().country().code} - - - ${viaexpressConfig.clientViaexpress} - ${viaexpressConfig.userViaexpress} - ${viaexpressConfig.passwordViaexpress} - - - - - `; - - try { - const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, xmlData, { - headers: { - 'Content-Type': 'application/soap+xml; charset=utf-8' - } - }); - - const startTag = ''; - const endTag = ''; - const startIndex = response.data.indexOf(startTag) + startTag.length; - const endIndex = response.data.indexOf(endTag); - const referenciaVx = response.data.substring(startIndex, endIndex); - - return referenciaVx; - } catch (error) { - if (error?.response?.data) throw Error(error.response.data); - throw Error(error); - } + return referenciaVx; }; }; diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js new file mode 100644 index 0000000000..79dab21c9f --- /dev/null +++ b/back/methods/viaexpress-config/renderer.js @@ -0,0 +1,162 @@ +const fs = require('fs'); +const handlebars = require('handlebars'); + +module.exports = Self => { + Self.remoteMethod('renderer', { + description: 'Returns the lastest campaigns', + 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 year = shipped.getFullYear(); + const month = shipped.getMonth() + 1; + const day = shipped.getDate(); + const date = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; + + const data = { + defaultWeight: viaexpressConfig.defaultWeight, + date: date, // 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 templateXml = fs.readFileSync(__dirname + '/template.xml', 'utf-8'); + + // // Crea una instancia de Vue con los datos + // const vueInstance = new Vue({ + // data: data, + // template: templateXml, + // }); + + // // Renderiza la plantilla con los datos utilizando vue-server-renderer + // const renderer = createRenderer(); + // return renderer.renderToString(vueInstance); + + const compiledTemplate = handlebars.compile(templateXml); + const renderedHtml = compiledTemplate(data); + return renderedHtml; + }; +}; diff --git a/back/methods/viaexpress-config/template.xml b/back/methods/viaexpress-config/template.xml new file mode 100644 index 0000000000..141fb939ae --- /dev/null +++ b/back/methods/viaexpress-config/template.xml @@ -0,0 +1,52 @@ + + + + + + {{ defaultWeight }} + 1 + 0 + {{ date }} + 0 + {{ deliveryType }} + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + {{ senderName }} + {{ senderStreet }} + {{ senderPostalCode }} + {{ senderCity }} + {{ senderProvince }} + + {{ senderPhone }} + {{ senderEmail }} + + + {{ receiverName }} + {{ receiverStreet }} + {{ receiverPostalCode }} + {{ receiverCity }} + + {{ receiverProvince }} + + {{ receiverPhone }} + {{ receiverEmail }} + {{ receiverCountry }} + + + {{ clientViaexpress }} + {{ userViaexpress }} + {{ passwordViaexpress }} + + + + + diff --git a/back/models/viaexpress-config.js b/back/models/viaexpress-config.js index 72424f806c..d0335b28b6 100644 --- a/back/models/viaexpress-config.js +++ b/back/models/viaexpress-config.js @@ -1,3 +1,4 @@ module.exports = Self => { require('../methods/viaexpress-config/internationalExpedition')(Self); + require('../methods/viaexpress-config/renderer')(Self); }; diff --git a/package.json b/package.json index 4358c86a70..857a7c1729 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "ftps": "^1.2.0", "gm": "^1.25.0", "got": "^10.7.0", + "handlebars": "^4.7.7", "helmet": "^3.21.2", "i18n": "^0.8.4", "image-type": "^4.1.0", From 1ba19714da1d8c14d5ee54ca4cbe044cae8a86d5 Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 20 Jun 2023 07:11:45 +0200 Subject: [PATCH 13/21] refs #4734 feat: add acl --- db/changes/232601/00-acl_viaexpressConfig.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/changes/232601/00-acl_viaexpressConfig.sql b/db/changes/232601/00-acl_viaexpressConfig.sql index 91a7e3c5b5..d4c186dd41 100644 --- a/db/changes/232601/00-acl_viaexpressConfig.sql +++ b/db/changes/232601/00-acl_viaexpressConfig.sql @@ -1,3 +1,4 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES - ('ViaexpressConfig', 'internationalExpedition', 'WRITE', 'ALLOW', 'ROLE', 'employee'); + ('ViaexpressConfig', 'internationalExpedition', 'WRITE', 'ALLOW', 'ROLE', 'employee'), + ('ViaexpressConfig', 'renderer', 'READ', 'ALLOW', 'ROLE', 'employee'); From c3af2e3c925186e56f31a0f80f33b4095604770b Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 20 Jun 2023 07:19:32 +0200 Subject: [PATCH 14/21] refs #4734 refactor: actualizada descripcion --- back/methods/viaexpress-config/internationalExpedition.js | 3 +-- back/methods/viaexpress-config/renderer.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index cbb1c2c675..75f44401f5 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -1,9 +1,8 @@ const axios = require('axios'); -const fs = require('fs'); module.exports = Self => { Self.remoteMethod('internationalExpedition', { - description: 'Returns the lastest campaigns', + description: 'Create an expedition and return a label', accessType: 'WRITE', accepts: [{ arg: 'expeditionFk', diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js index 79dab21c9f..7308b482ed 100644 --- a/back/methods/viaexpress-config/renderer.js +++ b/back/methods/viaexpress-config/renderer.js @@ -3,7 +3,7 @@ const handlebars = require('handlebars'); module.exports = Self => { Self.remoteMethod('renderer', { - description: 'Returns the lastest campaigns', + description: 'Renders the data from an XML', accessType: 'READ', accepts: [{ arg: 'expeditionFk', From 13e95bcd35920d28fa170b97b2d317cf4cee918d Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 20 Jun 2023 11:25:47 +0200 Subject: [PATCH 15/21] add vue commented code --- back/methods/viaexpress-config/renderer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js index 7308b482ed..588733174d 100644 --- a/back/methods/viaexpress-config/renderer.js +++ b/back/methods/viaexpress-config/renderer.js @@ -1,5 +1,7 @@ const fs = require('fs'); const handlebars = require('handlebars'); +// const Vue = require('vue'); +// const renderer = require('vue-server-renderer').createRenderer(); module.exports = Self => { Self.remoteMethod('renderer', { From 4444b45b08e5e5427408d15f57b7ff80b87bce1e Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 20 Jun 2023 14:07:36 +0200 Subject: [PATCH 16/21] refs #4734 feat: se utiliza la libreria ejs y xmldom --- .../internationalExpedition.js | 65 ++----------------- back/methods/viaexpress-config/renderer.js | 28 ++------ back/methods/viaexpress-config/template.ejs | 52 +++++++++++++++ back/methods/viaexpress-config/template.xml | 52 --------------- 4 files changed, 64 insertions(+), 133 deletions(-) create mode 100644 back/methods/viaexpress-config/template.ejs delete mode 100644 back/methods/viaexpress-config/template.xml diff --git a/back/methods/viaexpress-config/internationalExpedition.js b/back/methods/viaexpress-config/internationalExpedition.js index 75f44401f5..698bb1dac4 100644 --- a/back/methods/viaexpress-config/internationalExpedition.js +++ b/back/methods/viaexpress-config/internationalExpedition.js @@ -1,4 +1,5 @@ const axios = require('axios'); +const {DOMParser} = require('xmldom'); module.exports = Self => { Self.remoteMethod('internationalExpedition', { @@ -27,69 +28,17 @@ module.exports = Self => { }); const renderedXml = await models.ViaexpressConfig.renderer(expeditionFk); - // const renderedXml = ` - // - // - // - // - // 10 - // 1 - // 0 - // 2023-06-12 - // 0 - // E - // 0 - // 0 - // 0 - // 0 - // 0 - // - // - // 0 - // - // - // - // VERDNATURA LEVANTE SL - // FENOLLARS, 2 - // 46680 - // Algemesi - // Valencia - // - // 963677177 - // pako.natek@gmail.com - // - // - // ROSAMARY FLORISTERIA - // C SANTA ROSA,25 - // 03802 - // ALCOY - // ALCOY - // Alicante - // - // 653967489 - // correo@floristeriarosamary.com - // ES - // - // - // 16092 - // B97367486 - // VERDNA22 - // - // - // - // - // `; const response = await axios.post(`${viaexpressConfig.url}ServicioVxClientes.asmx`, renderedXml, { headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' } }); - console.log(response); - const startTag = ''; - const endTag = ''; - const startIndex = response.data.indexOf(startTag) + startTag.length; - const endIndex = response.data.indexOf(endTag); - const referenciaVx = response.data.substring(startIndex, endIndex); + + 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 index 588733174d..4014dd42d3 100644 --- a/back/methods/viaexpress-config/renderer.js +++ b/back/methods/viaexpress-config/renderer.js @@ -1,7 +1,5 @@ const fs = require('fs'); -const handlebars = require('handlebars'); -// const Vue = require('vue'); -// const renderer = require('vue-server-renderer').createRenderer(); +const ejs = require('ejs'); module.exports = Self => { Self.remoteMethod('renderer', { @@ -110,14 +108,10 @@ module.exports = Self => { }); const shipped = expedition.ticket().shipped; - const year = shipped.getFullYear(); - const month = shipped.getMonth() + 1; - const day = shipped.getDate(); - const date = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; const data = { defaultWeight: viaexpressConfig.defaultWeight, - date: date, // const date = new Date().toISOString(); + date: shipped.toISOString(), // const date = new Date().toISOString(); deliveryType: viaexpressConfig.deliveryType, senderName: expedition.ticket().company().client().socialName, senderStreet: expedition.ticket().company().client().defaultAddress().street, @@ -145,20 +139,8 @@ module.exports = Self => { passwordViaexpress: viaexpressConfig.passwordViaexpress }; - const templateXml = fs.readFileSync(__dirname + '/template.xml', 'utf-8'); - - // // Crea una instancia de Vue con los datos - // const vueInstance = new Vue({ - // data: data, - // template: templateXml, - // }); - - // // Renderiza la plantilla con los datos utilizando vue-server-renderer - // const renderer = createRenderer(); - // return renderer.renderToString(vueInstance); - - const compiledTemplate = handlebars.compile(templateXml); - const renderedHtml = compiledTemplate(data); - return renderedHtml; + 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..e8b1f19776 --- /dev/null +++ b/back/methods/viaexpress-config/template.ejs @@ -0,0 +1,52 @@ + + + + + + <%= defaultWeight %> + 1 + 0 + <%= date %> + 0 + <%= deliveryType %> + 0 + 0 + 0 + 0 + 0 + + + 0 + + + + <%= senderName %> + <%= senderStreet %> + <%= senderPostalCode %> + <%= senderCity %> + <%= senderProvince %> + + <%= senderPhone %> + <%= senderEmail %> + + + <%= receiverName %> + <%= receiverStreet %> + <%= receiverPostalCode %> + <%= receiverCity %> + + <%= receiverProvince %> + + <%= receiverPhone %> + <%= receiverEmail %> + <%= receiverCountry %> + + + <%= clientViaexpress %> + <%= userViaexpress %> + <%= passwordViaexpress %> + + + + + diff --git a/back/methods/viaexpress-config/template.xml b/back/methods/viaexpress-config/template.xml deleted file mode 100644 index 141fb939ae..0000000000 --- a/back/methods/viaexpress-config/template.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - {{ defaultWeight }} - 1 - 0 - {{ date }} - 0 - {{ deliveryType }} - 0 - 0 - 0 - 0 - 0 - - - 0 - - - - {{ senderName }} - {{ senderStreet }} - {{ senderPostalCode }} - {{ senderCity }} - {{ senderProvince }} - - {{ senderPhone }} - {{ senderEmail }} - - - {{ receiverName }} - {{ receiverStreet }} - {{ receiverPostalCode }} - {{ receiverCity }} - - {{ receiverProvince }} - - {{ receiverPhone }} - {{ receiverEmail }} - {{ receiverCountry }} - - - {{ clientViaexpress }} - {{ userViaexpress }} - {{ passwordViaexpress }} - - - - - From 783d4c60c4d7e81e5cf99369944947fac7624502 Mon Sep 17 00:00:00 2001 From: vicent Date: Wed, 28 Jun 2023 13:02:47 +0200 Subject: [PATCH 17/21] refs #4734 delete module handlebars from package.json --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 857a7c1729..4358c86a70 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "ftps": "^1.2.0", "gm": "^1.25.0", "got": "^10.7.0", - "handlebars": "^4.7.7", "helmet": "^3.21.2", "i18n": "^0.8.4", "image-type": "^4.1.0", From 112d7a84e336b6242ff04a845faf256bb81b71b2 Mon Sep 17 00:00:00 2001 From: vicent Date: Thu, 13 Jul 2023 09:32:08 +0200 Subject: [PATCH 18/21] solved test --- back/methods/vn-user/specs/addAlias.spec.js | 68 ------------------- modules/ticket/front/descriptor-menu/index.js | 2 +- 2 files changed, 1 insertion(+), 69 deletions(-) delete mode 100644 back/methods/vn-user/specs/addAlias.spec.js diff --git a/back/methods/vn-user/specs/addAlias.spec.js b/back/methods/vn-user/specs/addAlias.spec.js deleted file mode 100644 index ef657a3a80..0000000000 --- a/back/methods/vn-user/specs/addAlias.spec.js +++ /dev/null @@ -1,68 +0,0 @@ -const {models} = require('vn-loopback/server/server'); - -describe('VnUser addAlias()', () => { - const employeeId = 1; - const sysadminId = 66; - const developerId = 9; - const customerId = 2; - const mailAlias = 1; - it('should throw an error when user not has privileges', async() => { - const ctx = {req: {accessToken: {userId: employeeId}}}; - const tx = await models.VnUser.beginTransaction({}); - - let error; - try { - const options = {transaction: tx}; - - await models.VnUser.addAlias(ctx, employeeId, mailAlias, options); - - await tx.rollback(); - } catch (e) { - error = e; - await tx.rollback(); - } - - expect(error.message).toContain(`You don't have grant privilege`); - }); - - it('should throw an error when user has privileges but not has the role from user', async() => { - const ctx = {req: {accessToken: {userId: sysadminId}}}; - const tx = await models.VnUser.beginTransaction({}); - - let error; - try { - const options = {transaction: tx}; - - await models.VnUser.addAlias(ctx, employeeId, mailAlias, options); - - await tx.rollback(); - } catch (e) { - error = e; - await tx.rollback(); - } - - expect(error.message).toContain(`You cannot assign an alias that you are not assigned to`); - }); - - it('should add an alias', async() => { - const ctx = {req: {accessToken: {userId: developerId}}}; - const tx = await models.VnUser.beginTransaction({}); - - let result; - try { - const options = {transaction: tx}; - - const user = await models.VnUser.findById(developerId, null, options); - await user.updateAttribute('hasGrant', true, options); - - result = await models.VnUser.addAlias(ctx, customerId, mailAlias, options); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - } - - expect(result.mailAlias).toBe(mailAlias); - expect(result.account).toBe(customerId); - }); -}); diff --git a/modules/ticket/front/descriptor-menu/index.js b/modules/ticket/front/descriptor-menu/index.js index 0b47102acc..0fc8488cae 100644 --- a/modules/ticket/front/descriptor-menu/index.js +++ b/modules/ticket/front/descriptor-menu/index.js @@ -270,7 +270,7 @@ class Controller extends Section { }); } - return this.$http.post(`Tickets/invoiceTickets`, params) + return this.$http.post(`Tickets/invoiceTickets`, {ticketsIds: [this.id]}) .then(() => this.reload()) .then(() => this.vnApp.showSuccess(this.$t('Ticket invoiced'))); } From 834e4b3723d3d3c9ed569f1397a4d75d475a59e0 Mon Sep 17 00:00:00 2001 From: vicent Date: Tue, 18 Jul 2023 07:56:44 +0200 Subject: [PATCH 19/21] refs #4734 refactor: variables definindas --- back/methods/viaexpress-config/renderer.js | 40 +++++--------------- back/methods/viaexpress-config/template.ejs | 42 ++++++++++----------- back/models/viaexpress-config.json | 6 +-- db/changes/232601/00-viaexpress.sql | 6 +-- 4 files changed, 37 insertions(+), 57 deletions(-) diff --git a/back/methods/viaexpress-config/renderer.js b/back/methods/viaexpress-config/renderer.js index 4014dd42d3..e9abce5ca7 100644 --- a/back/methods/viaexpress-config/renderer.js +++ b/back/methods/viaexpress-config/renderer.js @@ -24,7 +24,7 @@ module.exports = Self => { const models = Self.app.models; const viaexpressConfig = await models.ViaexpressConfig.findOne({ - fields: ['clientViaexpress', 'userViaexpress', 'passwordViaexpress', 'defaultWeight', 'deliveryType'] + fields: ['client', 'user', 'password', 'defaultWeight', 'deliveryType'] }); const expedition = await models.Expedition.findOne({ @@ -107,36 +107,16 @@ module.exports = Self => { ] }); - const shipped = expedition.ticket().shipped; - + const ticket = expedition.ticket(); + const sender = ticket.company().client(); + const shipped = ticket.shipped.toISOString(); 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 + viaexpressConfig, + sender, + senderAddress: sender.defaultAddress(), + client: ticket.client(), + address: ticket.address(), + shipped }; const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8'); diff --git a/back/methods/viaexpress-config/template.ejs b/back/methods/viaexpress-config/template.ejs index e8b1f19776..0b6eb468c6 100644 --- a/back/methods/viaexpress-config/template.ejs +++ b/back/methods/viaexpress-config/template.ejs @@ -3,12 +3,12 @@ - <%= defaultWeight %> + <%= viaexpressConfig.defaultWeight %> 1 0 - <%= date %> + <%= shipped %> 0 - <%= deliveryType %> + <%= viaexpressConfig.deliveryType %> 0 0 0 @@ -20,31 +20,31 @@ - <%= senderName %> - <%= senderStreet %> - <%= senderPostalCode %> - <%= senderCity %> - <%= senderProvince %> + <%= sender.socialName %> + <%= senderAddress.street %> + <%= senderAddress.postalCode %> + <%= senderAddress.city %> + <%= senderAddress.province().name %> - <%= senderPhone %> - <%= senderEmail %> + <%= senderAddress.mobile || senderAddress.phone || sender.mobile || sender.phone %> + <%= sender.email %> - <%= receiverName %> - <%= receiverStreet %> - <%= receiverPostalCode %> - <%= receiverCity %> + <%= address.nickname %> + <%= address.street %> + <%= address.postalCode %> + <%= address.city %> - <%= receiverProvince %> + <%= address.province().name %> - <%= receiverPhone %> - <%= receiverEmail %> - <%= receiverCountry %> + <%= address.mobile || address.phone || client.mobile || client.phone %> + <%= client.email %> + <%= address.province().country().code %> - <%= clientViaexpress %> - <%= userViaexpress %> - <%= passwordViaexpress %> + <%= viaexpressConfig.client %> + <%= viaexpressConfig.user %> + <%= viaexpressConfig.password %> diff --git a/back/models/viaexpress-config.json b/back/models/viaexpress-config.json index 26d6c8e375..8df24201be 100644 --- a/back/models/viaexpress-config.json +++ b/back/models/viaexpress-config.json @@ -15,13 +15,13 @@ "type": "string", "required": true }, - "clientViaexpress": { + "client": { "type": "string" }, - "userViaexpress": { + "user": { "type": "string" }, - "passwordViaexpress": { + "password": { "type": "string" }, "defaultWeight": { diff --git a/db/changes/232601/00-viaexpress.sql b/db/changes/232601/00-viaexpress.sql index 9e3baa9fd5..42cf3b6479 100644 --- a/db/changes/232601/00-viaexpress.sql +++ b/db/changes/232601/00-viaexpress.sql @@ -1,9 +1,9 @@ CREATE TABLE `vn`.`viaexpressConfig` ( id int auto_increment NOT NULL, url varchar(100) NOT NULL, - clientViaexpress varchar(100) NOT NULL, - userViaexpress varchar(100) NOT NULL, - passwordViaexpress varchar(100) NOT NULL, + client varchar(100) NOT NULL, + user varchar(100) NOT NULL, + password varchar(100) NOT NULL, defaultWeight decimal(10,2) NOT NULL, deliveryType varchar(5) NOT NULL, CONSTRAINT viaexpressConfig_PK PRIMARY KEY (id) From 65b9cadd9e6ed72d263c8a23e1efb0878069b4ca Mon Sep 17 00:00:00 2001 From: vicent Date: Thu, 27 Jul 2023 12:51:14 +0200 Subject: [PATCH 20/21] refs #5804 refactor: sustituido activeBuyers por getItemTypeWorker --- .../item/back/methods/item/activeBuyers.js | 44 ------------------- .../methods/item/specs/activeBuyers.spec.js | 24 ---------- modules/item/back/models/item.js | 1 - .../front/request-search-panel/index.html | 14 +++--- modules/item/front/search-panel/index.html | 12 ++--- .../ticket-request/getItemTypeWorker.js | 33 ++++++++------ .../specs/getItemTypeWorkers.spec.js | 6 +-- 7 files changed, 34 insertions(+), 100 deletions(-) delete mode 100644 modules/item/back/methods/item/activeBuyers.js delete mode 100644 modules/item/back/methods/item/specs/activeBuyers.spec.js diff --git a/modules/item/back/methods/item/activeBuyers.js b/modules/item/back/methods/item/activeBuyers.js deleted file mode 100644 index e16ff877b0..0000000000 --- a/modules/item/back/methods/item/activeBuyers.js +++ /dev/null @@ -1,44 +0,0 @@ -const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; -const mergeFilters = require('vn-loopback/util/filter').mergeFilters; - -module.exports = Self => { - Self.remoteMethod('activeBuyers', { - description: 'Returns a list of buyers for the given item type', - accepts: [{ - arg: 'filter', - type: 'object', - description: `Filter defining where, order, offset, and limit - must be a JSON-encoded string` - }], - returns: { - type: ['object'], - root: true - }, - http: { - path: `/activeBuyers`, - verb: 'GET' - } - }); - - Self.activeBuyers = async(filter, options) => { - const conn = Self.dataSource.connector; - const where = {isActive: true}; - const myOptions = {}; - - if (typeof options == 'object') - Object.assign(myOptions, options); - - filter = mergeFilters(filter, {where}); - - let stmt = new ParameterizedSQL( - `SELECT DISTINCT w.id workerFk, w.firstName, w.lastName, u.name, u.nickname - FROM worker w - JOIN itemType it ON it.workerFk = w.id - JOIN account.user u ON u.id = w.id - JOIN item i ON i.typeFk = it.id`, - null, myOptions); - - stmt.merge(conn.makeSuffix(filter)); - - return conn.executeStmt(stmt); - }; -}; diff --git a/modules/item/back/methods/item/specs/activeBuyers.spec.js b/modules/item/back/methods/item/specs/activeBuyers.spec.js deleted file mode 100644 index 5bf36756fc..0000000000 --- a/modules/item/back/methods/item/specs/activeBuyers.spec.js +++ /dev/null @@ -1,24 +0,0 @@ -const models = require('vn-loopback/server/server').models; - -describe('Worker activeBuyers', () => { - it('should return the buyers in itemType as result', async() => { - const tx = await models.Item.beginTransaction({}); - - try { - const options = {transaction: tx}; - const filter = {}; - const result = await models.Item.activeBuyers(filter, options); - const firstWorker = result[0]; - const secondWorker = result[1]; - - expect(result.length).toEqual(2); - expect(firstWorker.nickname).toEqual('logisticBossNick'); - expect(secondWorker.nickname).toEqual('buyerNick'); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - throw e; - } - }); -}); diff --git a/modules/item/back/models/item.js b/modules/item/back/models/item.js index b8baa97ea7..61c5c2588c 100644 --- a/modules/item/back/models/item.js +++ b/modules/item/back/models/item.js @@ -14,7 +14,6 @@ module.exports = Self => { require('../methods/item/getWasteByWorker')(Self); require('../methods/item/getWasteByItem')(Self); require('../methods/item/createIntrastat')(Self); - require('../methods/item/activeBuyers')(Self); require('../methods/item/buyerWasteEmail')(Self); require('../methods/item/labelPdf')(Self); diff --git a/modules/item/front/request-search-panel/index.html b/modules/item/front/request-search-panel/index.html index a766847760..9d35fbca4a 100644 --- a/modules/item/front/request-search-panel/index.html +++ b/modules/item/front/request-search-panel/index.html @@ -1,7 +1,7 @@
@@ -26,7 +26,7 @@ search-function="{firstName: $search}" value-field="id" where="{role: {inq: ['logistic', 'buyer']}}" - label="Atender"> + label="Buyer"> {{nickname}} @@ -57,7 +57,7 @@ {{firstName}} {{lastName}} - +
- - - - { - Self.remoteMethodCtx('getItemTypeWorker', { + Self.remoteMethod('getItemTypeWorker', { description: 'Returns the workers that appear in itemType', accessType: 'READ', accepts: [{ @@ -20,10 +22,9 @@ module.exports = Self => { } }); - Self.getItemTypeWorker = async(ctx, filter, options) => { + Self.getItemTypeWorker = async(filter, options) => { const myOptions = {}; const conn = Self.dataSource.connector; - let tx; if (typeof options == 'object') Object.assign(myOptions, options); @@ -33,25 +34,29 @@ module.exports = Self => { FROM itemType it JOIN worker w ON w.id = it.workerFk JOIN account.user u ON u.id = w.id`; + const stmt = new ParameterizedSQL(query); - let stmt = new ParameterizedSQL(query); - - if (filter.where) { - const value = filter.where.firstName; - const myFilter = { - where: {or: [ + filter.where = buildFilter(filter.where, (param, value) => { + switch (param) { + case 'firstName': + return {or: [ {'w.firstName': {like: `%${value}%`}}, {'w.lastName': {like: `%${value}%`}}, {'u.name': {like: `%${value}%`}}, {'u.nickname': {like: `%${value}%`}} - ]} - }; + ]}; + case 'id': + return {'w.id': value}; + } + }); - stmt.merge(conn.makeSuffix(myFilter)); - } + let myFilter = { + where: {'u.active': true} + }; - if (tx) await tx.commit(); + myFilter = mergeFilters(myFilter, filter); + stmt.merge(conn.makeSuffix(myFilter)); return conn.executeStmt(stmt); }; }; diff --git a/modules/ticket/back/methods/ticket-request/specs/getItemTypeWorkers.spec.js b/modules/ticket/back/methods/ticket-request/specs/getItemTypeWorkers.spec.js index ae5c508b6d..c57451c261 100644 --- a/modules/ticket/back/methods/ticket-request/specs/getItemTypeWorkers.spec.js +++ b/modules/ticket/back/methods/ticket-request/specs/getItemTypeWorkers.spec.js @@ -1,12 +1,10 @@ const models = require('vn-loopback/server/server').models; describe('ticket-request getItemTypeWorker()', () => { - const ctx = {req: {accessToken: {userId: 18}}}; - it('should return the buyer as result', async() => { const filter = {where: {firstName: 'buyer'}}; - const result = await models.TicketRequest.getItemTypeWorker(ctx, filter); + const result = await models.TicketRequest.getItemTypeWorker(filter); expect(result.length).toEqual(1); }); @@ -14,7 +12,7 @@ describe('ticket-request getItemTypeWorker()', () => { it('should return the workers at itemType as result', async() => { const filter = {}; - const result = await models.TicketRequest.getItemTypeWorker(ctx, filter); + const result = await models.TicketRequest.getItemTypeWorker(filter); expect(result.length).toBeGreaterThan(1); }); From 1d4ce2c70342e01371143b317f80d5c17214c474 Mon Sep 17 00:00:00 2001 From: vicent Date: Fri, 28 Jul 2023 12:24:24 +0200 Subject: [PATCH 21/21] refs #5804 fix: delete transaction --- .../ticket/back/methods/ticket-request/getItemTypeWorker.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/ticket/back/methods/ticket-request/getItemTypeWorker.js b/modules/ticket/back/methods/ticket-request/getItemTypeWorker.js index f160cfaaca..9ea859f7cf 100644 --- a/modules/ticket/back/methods/ticket-request/getItemTypeWorker.js +++ b/modules/ticket/back/methods/ticket-request/getItemTypeWorker.js @@ -22,13 +22,9 @@ module.exports = Self => { } }); - Self.getItemTypeWorker = async(filter, options) => { - const myOptions = {}; + Self.getItemTypeWorker = async filter => { const conn = Self.dataSource.connector; - if (typeof options == 'object') - Object.assign(myOptions, options); - const query = `SELECT DISTINCT u.id, u.nickname FROM itemType it