From b73c02c595160a5718549d7518bae42c99bd729f Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 21 Jan 2019 08:16:43 +0100 Subject: [PATCH 1/9] client summary red color on negative balance #1007 --- modules/client/front/summary/index.html | 6 +++--- modules/client/front/summary/style.scss | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/client/front/summary/index.html b/modules/client/front/summary/index.html index 311da805a..e47c2e76a 100644 --- a/modules/client/front/summary/index.html +++ b/modules/client/front/summary/index.html @@ -168,11 +168,11 @@

Financial information

+ ng-class="{alert: $ctrl.summary.debt.debt > $ctrl.summary.credit}"> $ctrl.summary.creditInsurance || ($ctrl.summary.credit && $ctrl.summary.creditInsurance == null)}"> + ng-class="{alert: $ctrl.summary.defaulters[0].amount}"> Date: Mon, 21 Jan 2019 08:44:21 +0100 Subject: [PATCH 2/9] stowaway fixes --- modules/item/front/ticket-descriptor/addStowaway.js | 8 +++----- .../item/front/ticket-descriptor/removeStowaway.js | 13 +++++++++---- .../back/methods/ticket/getPossibleStowaways.js | 1 + modules/ticket/front/card/index.js | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/modules/item/front/ticket-descriptor/addStowaway.js b/modules/item/front/ticket-descriptor/addStowaway.js index d61d88a66..4c05bb65c 100644 --- a/modules/item/front/ticket-descriptor/addStowaway.js +++ b/modules/item/front/ticket-descriptor/addStowaway.js @@ -18,8 +18,9 @@ class Controller { addStowaway(index) { let params = {id: this.possibleStowaways[index].id, shipFk: this.ticket.id}; this.$http.post(`/api/Stowaways/`, params) - .then(() => { - this.card.reload(); + .then(res => { + this.ticket.ship.push = res.data[0]; + this.hide; }); } @@ -39,8 +40,5 @@ ngModule.component('vnAddStowaway', { controller: Controller, bindings: { ticket: '<' - }, - require: { - card: '^vnTicketCard' } }); diff --git a/modules/item/front/ticket-descriptor/removeStowaway.js b/modules/item/front/ticket-descriptor/removeStowaway.js index 60b40d91c..0ab62b69e 100644 --- a/modules/item/front/ticket-descriptor/removeStowaway.js +++ b/modules/item/front/ticket-descriptor/removeStowaway.js @@ -45,7 +45,15 @@ class Controller { deleteStowaway(response) { if (response === 'ACCEPT') { this.$http.delete(`/api/Stowaways/${this.stowawayToDelete.id}`).then(res => { - this.card.reload(); + if (this.ticket.stowaway) + delete this.ticket.stowaway; + else { + for (let i = 0; i < this.ticket.ship.length; i++) { + if (this.ticket.ship[i].id === this.stowawayToDelete.id) + delete this.ticket.ship[i]; + } + } + this.hide(); }); } } @@ -71,8 +79,5 @@ ngModule.component('vnRemoveStowaway', { controller: Controller, bindings: { ticket: '<' - }, - require: { - card: '^vnTicketCard' } }); diff --git a/modules/ticket/back/methods/ticket/getPossibleStowaways.js b/modules/ticket/back/methods/ticket/getPossibleStowaways.js index 045e0595c..4ff5fa9d5 100644 --- a/modules/ticket/back/methods/ticket/getPossibleStowaways.js +++ b/modules/ticket/back/methods/ticket/getPossibleStowaways.js @@ -29,6 +29,7 @@ module.exports = Self => { let possibleStowaways = await Self.app.models.Ticket.find({ where: { + id: {neq: ticketFk}, clientFk: ship.clientFk, addressFk: ship.addressFk, agencyModeFk: ship.agencyModeFk, diff --git a/modules/ticket/front/card/index.js b/modules/ticket/front/card/index.js index 94a35f02a..cfd60800d 100644 --- a/modules/ticket/front/card/index.js +++ b/modules/ticket/front/card/index.js @@ -7,9 +7,9 @@ class Controller { this.filter = { include: [ {relation: 'warehouse', scope: {fields: ['name']}}, - // {relation: 'ship'}, + {relation: 'ship'}, {relation: 'agencyMode', scope: {fields: ['name']}}, - // {relation: 'stowaway'}, + {relation: 'stowaway'}, { relation: 'client', scope: { From 2a339185fce0f4645e2d0f471dcc1bb8709c918c Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 21 Jan 2019 08:45:02 +0100 Subject: [PATCH 3/9] stowaway fixes --- modules/item/front/ticket-descriptor/index.js | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/modules/item/front/ticket-descriptor/index.js b/modules/item/front/ticket-descriptor/index.js index dc8432be8..bada14293 100644 --- a/modules/item/front/ticket-descriptor/index.js +++ b/modules/item/front/ticket-descriptor/index.js @@ -10,17 +10,38 @@ class Controller { this.$translate = $translate; this.moreOptions = [ {callback: this.showAddTurnDialog, name: 'Add turn', show: true}, - {callback: this.showDeleteTicketDialog, name: 'Delete ticket', show: true}/* , + {callback: this.showDeleteTicketDialog, name: 'Delete ticket', show: true}, {callback: this.showAddStowaway, name: 'Add stowaway', show: true}, - {callback: this.showRemoveStowaway, name: 'Remove stowaway', show: false} - */ + {callback: this.showRemoveStowaway, name: 'Remove stowaway', show: () => this.shouldShowRemoveStowaway()}, + /* callback: this.showChangeShipped, name: 'Change shipped hour', show: true} */ ]; } + // Change shipped hour + showChangeShipped() { + if (!this.isEditable) { + this.vnApp.showError(this.$translate.instant('This ticket can\'t be modified')); + return; + } + this.newShipped = new Date(this.ticket.shipped); + this.$scope.changeShippedDialog.show(); + } + + changeShipped(response) { + console.log(response); + if (response === 'ACCEPT') { + let params = {shipped: this.newShipped}; + this.$http.patch(`/ticket/api/Tickets/${this.ticket.id}/`, params).then(() => { + this.$state.go('ticket.index'); + this.vnApp.showSuccess(this.$translate.instant('Shipped hour updated')); + }); + } + } + shouldShowRemoveStowaway() { if (!this._ticket) return false; - return (this._ticket.stowaway || this._ticket.ship.length > 1); + return (this._ticket.stowaway || (this._ticket.ship && this._ticket.ship.length > 1)); } onMoreChange(callback) { @@ -81,7 +102,6 @@ class Controller { showAddStowaway() { this.$scope.addStowaway.show(); - console.log(this.$state.getCurrentPath()); } showRemoveStowaway() { @@ -110,16 +130,16 @@ class Controller { tooltip: 'Ship' }; } - /* - if (value.ship.length == 1) { + + if (value.ship && value.ship.length == 1) { links.btnThree = { icon: 'icon-polizon', state: `ticket.card.summary({id: ${value.ship[0].id}})`, tooltip: 'Stowaway' }; - } else if (value.ship.length > 1) + } else if (value.ship && value.ship.length > 1) this.shipStowaways = value.ship; -*/ + this._quicklinks = links; } From 6e84a43e99afbb27fc4f608f2f9a0efcc7b37b4f Mon Sep 17 00:00:00 2001 From: Bernat Date: Mon, 21 Jan 2019 09:25:02 +0100 Subject: [PATCH 4/9] update structure db #9480 --- .../changes/1.2-CHECK/02-ticketService.sql | 12 - .../changes/1.2-CHECK/07-logAddWithUser.sql | 34 +++ .../install/changes/1.2-CHECK/08-logAdd.sql | 21 ++ .../changes/1.2-CHECK/09-ticketCreate.sql | 21 ++ .../1.2-CHECK/11-ticketCreateWithUser.sql | 82 ++++++ .../changes/1.2-CHECK/12-orderConfirm.sql | 18 ++ .../1.2-CHECK/13-orderConfirmWithUser.sql | 233 ++++++++++++++++++ 7 files changed, 409 insertions(+), 12 deletions(-) delete mode 100644 services/db/install/changes/1.2-CHECK/02-ticketService.sql create mode 100644 services/db/install/changes/1.2-CHECK/07-logAddWithUser.sql create mode 100644 services/db/install/changes/1.2-CHECK/08-logAdd.sql create mode 100644 services/db/install/changes/1.2-CHECK/09-ticketCreate.sql create mode 100644 services/db/install/changes/1.2-CHECK/11-ticketCreateWithUser.sql create mode 100644 services/db/install/changes/1.2-CHECK/12-orderConfirm.sql create mode 100644 services/db/install/changes/1.2-CHECK/13-orderConfirmWithUser.sql diff --git a/services/db/install/changes/1.2-CHECK/02-ticketService.sql b/services/db/install/changes/1.2-CHECK/02-ticketService.sql deleted file mode 100644 index 408506c3d..000000000 --- a/services/db/install/changes/1.2-CHECK/02-ticketService.sql +++ /dev/null @@ -1,12 +0,0 @@ -ALTER TABLE `vn`.`ticketService` -ADD COLUMN `ticketFk` INT(11) NOT NULL AFTER `taxClassFk`; - - -ALTER TABLE `vn`.`ticketService` -ADD INDEX `fgn_ticketFk_idx` (`ticketFk` ASC); -ALTER TABLE `vn`.`ticketService` -ADD CONSTRAINT `fgn_ticketFk` - FOREIGN KEY (`ticketFk`) - REFERENCES `vn2008`.`Tickets` (`Id_Ticket`) - ON DELETE CASCADE - ON UPDATE CASCADE; diff --git a/services/db/install/changes/1.2-CHECK/07-logAddWithUser.sql b/services/db/install/changes/1.2-CHECK/07-logAddWithUser.sql new file mode 100644 index 000000000..b0d1f075d --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/07-logAddWithUser.sql @@ -0,0 +1,34 @@ +USE `vn`; +DROP procedure IF EXISTS `logAddWithUser`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `logAddWithUser`(vOriginFk INT, vUserId INT, vActionCode VARCHAR(45), vEntity VARCHAR(45), vDescription TEXT) +BEGIN + /** + * Guarda las acciones realizadas por el usuario + * + * @param vOriginFk Id del registro de origen + * @param vActionCode Código de la acción {insert | delete | update} + * @param vEntity Nombre que hace referencia a la tabla. + * @param descripcion Descripción de la acción realizada por el usuario + */ + DECLARE vTableName VARCHAR(255) DEFAULT CONCAT(IFNULL(vEntity, ''), 'Log'); + + SET @sqlQuery = CONCAT( + 'INSERT INTO vn.', vTableName, ' SET originFk = ?, userFk = ?, action = ?, description = ?' + ); + SET @originFk = vOriginFk; + SET @userFk = vUserId; + SET @action = vActionCode; + SET @description = vDescription; + + PREPARE stmt FROM @sqlQuery; + EXECUTE stmt USING @originFk, @userFk, @action, @description; + DEALLOCATE PREPARE stmt; + + SET @sqlQuery = NULL; +END$$ + +DELIMITER ; + diff --git a/services/db/install/changes/1.2-CHECK/08-logAdd.sql b/services/db/install/changes/1.2-CHECK/08-logAdd.sql new file mode 100644 index 000000000..e9554e954 --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/08-logAdd.sql @@ -0,0 +1,21 @@ +USE `vn`; +DROP procedure IF EXISTS `logAdd`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `logAdd`(vOriginFk INT, vActionCode VARCHAR(45), vEntity VARCHAR(45), vDescription TEXT) +BEGIN +/** + * Guarda las acciones realizadas por el usuario + * + * @param vOriginFk Id del registro de origen + * @param vActionCode Código de la acción {insert | delete | update} + * @param vEntity Nombre que hace referencia a la tabla. + * @param descripcion Descripción de la acción realizada por el usuario + */ + + CALL logAddWithUser(vOriginFk, account.userGetId(), vActionCode, vEntity, vDescription); +END$$ + +DELIMITER ; + diff --git a/services/db/install/changes/1.2-CHECK/09-ticketCreate.sql b/services/db/install/changes/1.2-CHECK/09-ticketCreate.sql new file mode 100644 index 000000000..f6b96d4a6 --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/09-ticketCreate.sql @@ -0,0 +1,21 @@ +USE `vn`; +DROP procedure IF EXISTS `ticketCreate`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `ticketCreate`( + vClientId INT + ,vShipped DATE + ,vWarehouseId INT + ,vCompanyFk INT + ,vAddressFk INT + ,vAgencyType INT + ,vRouteFk INT + ,vlanded DATE + ,OUT vNewTicket INT) +BEGIN + CALL `ticketCreateWithUser`(vClientId, vShipped, vWarehouseId, vCompanyFk, vAddressFk, vAgencyType, vRouteFk, vlanded, account.userGetId(), vNewTicket); +END$$ + +DELIMITER ; + diff --git a/services/db/install/changes/1.2-CHECK/11-ticketCreateWithUser.sql b/services/db/install/changes/1.2-CHECK/11-ticketCreateWithUser.sql new file mode 100644 index 000000000..38a744ee8 --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/11-ticketCreateWithUser.sql @@ -0,0 +1,82 @@ +USE `vn`; +DROP procedure IF EXISTS `ticketCreateWithUser`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `ticketCreateWithUser`( + vClientId INT + ,vShipped DATE + ,vWarehouseId INT + ,vCompanyFk INT + ,vAddressFk INT + ,vAgencyType INT + ,vRouteFk INT + ,vlanded DATE + ,vUserId INT + ,OUT vNewTicket INT) +BEGIN + + DECLARE vClientOrnamentales INT DEFAULT 5270; + DECLARE vCompanyOrn INT DEFAULT 1381; + DECLARE vProvinceName VARCHAR(255); + + SELECT p.name INTO vProvinceName + FROM vn.client c + JOIN province p ON p.id = c.provinceFk + WHERE c.id = vClientId; + + IF vProvinceName IN ('SANTA CRUZ DE TENERIFE', 'LAS PALMAS DE GRAN CANARIA') AND vClientId <> vClientOrnamentales THEN + SET vCompanyFk = vCompanyOrn; + END IF; + + IF NOT vAddressFk OR vAddressFk IS NULL THEN + SELECT id INTO vAddressFk + FROM address + WHERE clientFk = vClientId AND isDefaultAddress; + END IF; + + INSERT INTO vn2008.Tickets ( + Id_Cliente, + Fecha, + Id_Consigna, + Id_Agencia, + Alias, + warehouse_id, + Id_Ruta, + empresa_id, + landing + ) + SELECT + vClientId, + vShipped, + a.id, + IF(vAgencyType, vAgencyType, a.agencyModeFk), + a.nickname, + vWarehouseId, + IF(vRouteFk,vRouteFk,NULL), + vCompanyFk, + vlanded + FROM address a + JOIN agencyMode am ON am.id = a.agencyModeFk + WHERE a.id = vAddressFk; + + SET vNewTicket = LAST_INSERT_ID(); + + INSERT INTO ticketObservation(ticketFk, observationTypeFk, description) + SELECT vNewTicket, ao.observationTypeFk, ao.description + FROM addressObservation ao + JOIN address a ON a.id = ao.addressFk + WHERE a.id = vAddressFk; + + CALL logAddWithUser(vNewTicket, vUserId, 'insert', 'ticket', CONCAT('Ha creado el ticket', ' ', vNewTicket)); + + IF (SELECT isCreatedAsServed FROM vn.client WHERE id = vClientId ) <> FALSE THEN + INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador) + SELECT id, vNewTicket, getWorker() + FROM state + WHERE `code` = 'DELIVERED'; + END IF; +END$$ + +DELIMITER ; + diff --git a/services/db/install/changes/1.2-CHECK/12-orderConfirm.sql b/services/db/install/changes/1.2-CHECK/12-orderConfirm.sql new file mode 100644 index 000000000..d7d5514d6 --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/12-orderConfirm.sql @@ -0,0 +1,18 @@ +USE `hedera`; +DROP procedure IF EXISTS `orderConfirm`; + +DELIMITER $$ +USE `hedera`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `orderConfirm`(vOrder INT) +BEGIN +/** + * Confirms an order, creating each of its tickets on + * the corresponding date and store. + * + * @param vOrder The order identifier + */ + CALL orderConfirmWithUser(vOrder, account.userGetId()); + +END$$ + +DELIMITER ; \ No newline at end of file diff --git a/services/db/install/changes/1.2-CHECK/13-orderConfirmWithUser.sql b/services/db/install/changes/1.2-CHECK/13-orderConfirmWithUser.sql new file mode 100644 index 000000000..1eb972f39 --- /dev/null +++ b/services/db/install/changes/1.2-CHECK/13-orderConfirmWithUser.sql @@ -0,0 +1,233 @@ +USE `hedera`; +DROP procedure IF EXISTS `orderConfirmWithUser`; + +DELIMITER $$ +USE `hedera`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `orderConfirmWithUser`(vOrder INT, vUserId INT) +BEGIN +/** + * Confirms an order, creating each of its tickets on + * the corresponding date, store and user + * + * @param vOrder The order identifier + *@param vUser The user identifier + */ + DECLARE vOk BOOL; + DECLARE vDone BOOL DEFAULT FALSE; + DECLARE vWarehouse INT; + DECLARE vShipment DATETIME; + DECLARE vTicket INT; + DECLARE vNotes VARCHAR(255); + DECLARE vItem INT; + DECLARE vConcept VARCHAR(30); + DECLARE vAmount INT; + DECLARE vPrice DECIMAL(10,2); + DECLARE vSale INT; + DECLARE vRate INT; + DECLARE vRowId INT; + DECLARE vDelivery DATE; + DECLARE vAddress INT; + DECLARE vAgency INT; + DECLARE vIsConfirmed BOOL; + DECLARE vClientId INT; + DECLARE vCompanyId INT; + DECLARE vAgencyModeId INT; + + DECLARE TICKET_FREE INT DEFAULT 2; + DECLARE SYSTEM_WORKER INT DEFAULT 20; + + DECLARE cDates CURSOR FOR + SELECT ah.shipped, r.warehouse_id + FROM `order` o + JOIN order_row r ON r.order_id = o.id + LEFT JOIN tmp.agencyHourGetShipped ah ON ah.warehouseFk = r.warehouse_id + WHERE o.id = vOrder AND r.amount != 0 + GROUP BY warehouse_id; + + DECLARE cRows CURSOR FOR + SELECT r.id, r.item_id, a.Article, r.amount, r.price, r.rate + FROM order_row r + JOIN vn2008.Articles a ON a.Id_Article = r.item_id + WHERE r.amount != 0 + AND r.warehouse_id = vWarehouse + AND r.order_id = vOrder + ORDER BY r.rate DESC; + + DECLARE CONTINUE HANDLER FOR NOT FOUND + SET vDone = TRUE; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + ROLLBACK; + RESIGNAL; + END; + + -- Carga los datos del pedido + + SELECT o.date_send, o.address_id, o.note, a.agency_id, + o.confirmed, cs.Id_Cliente, o.company_id, o.agency_id + INTO vDelivery, vAddress, vNotes, vAgency, + vIsConfirmed, vClientId, vCompanyId, vAgencyModeId + FROM hedera.`order` o + JOIN vn2008.Agencias a ON a.Id_Agencia = o.agency_id + JOIN vn2008.Consignatarios cs ON cs.Id_Consigna = o.address_id + WHERE id = vOrder; + + -- Comprueba que el pedido no está confirmado + + IF vIsConfirmed THEN + CALL util.throw ('ORDER_ALREADY_CONFIRMED'); + END IF; + + -- Comprueba que el pedido no está vacío + + SELECT COUNT(*) > 0 INTO vOk + FROM order_row WHERE order_id = vOrder AND amount > 0; + + IF !vOk THEN + CALL util.throw ('ORDER_EMPTY'); + END IF; + + -- Carga las fechas de salida de cada almacén + + CALL vn.agencyHourGetShipped (vDelivery, vAddress, vAgency); + + -- Trabajador que realiza la acción + + IF vUserId IS NULL THEN + SELECT employeeFk INTO vUserId FROM orderConfig; + END IF; + + -- Crea los tickets del pedido + + START TRANSACTION; + + OPEN cDates; + + lDates: + LOOP + SET vTicket = NULL; + SET vDone = FALSE; + FETCH cDates INTO vShipment, vWarehouse; + + IF vDone THEN + LEAVE lDates; + END IF; + + -- Busca un ticket existente que coincida con los parametros del nuevo pedido + + SELECT Id_Ticket INTO vTicket + FROM vn2008.Tickets t + LEFT JOIN vn.ticketState tls on tls.ticket = t.Id_Ticket + JOIN `order` o + ON o.address_id = t.Id_Consigna + AND vWarehouse = t.warehouse_id + AND o.agency_id = t.Id_Agencia + AND t.landing = o.date_send + AND vShipment = DATE(t.Fecha) + WHERE o.id = vOrder + AND t.Factura IS NULL + AND IFNULL(tls.alertLevel,0) = 0 + AND t.Id_Cliente <> 1118 + LIMIT 1; + + -- Crea el ticket en el caso de no existir uno adecuado + + IF vTicket IS NULL + THEN + CALL vn.ticketCreateWithUser( + vClientId, + IFNULL(vShipment, CURDATE()), + vWarehouse, + vCompanyId, + vAddress, + vAgencyModeId, + NULL, + vDelivery, + vUserId, + vTicket + ); + ELSE + INSERT INTO vncontrol.inter + SET Id_Ticket = vTicket, + Id_Trabajador = SYSTEM_WORKER, + state_id = TICKET_FREE; + END IF; + + INSERT IGNORE INTO vn2008.order_Tickets + SET order_id = vOrder, + Id_Ticket = vTicket; + + -- Añade las notas + + IF vNotes IS NOT NULL AND vNotes != '' + THEN + INSERT INTO vn2008.ticket_observation (Id_Ticket, observation_type_id, text) + VALUES (vTicket, 4/*comercial*/ , vNotes) + ON DUPLICATE KEY UPDATE text = CONCAT(VALUES(text),'. ', text); + END IF; + + -- Añade los movimientos y sus componentes + + OPEN cRows; + + lRows: + LOOP + SET vDone = FALSE; + FETCH cRows INTO vRowId, vItem, vConcept, vAmount, vPrice, vRate; + + IF vDone THEN + LEAVE lRows; + END IF; + + INSERT INTO vn2008.Movimientos + SET + Id_Article = vItem, + Id_Ticket = vTicket, + Concepte = vConcept, + Cantidad = vAmount, + Preu = vPrice, + CostFixat = 0, + PrecioFijado = TRUE; + + SET vSale = LAST_INSERT_ID(); + + INSERT INTO vn2008.Movimientos_componentes (Id_Movimiento, Id_Componente, Valor) + SELECT vSale, cm.component_id, cm.price + FROM order_component cm + JOIN bi.tarifa_componentes tc ON tc.Id_Componente = cm.component_id + WHERE cm.order_row_id = vRowId + GROUP BY vSale, cm.component_id; + + UPDATE order_row SET Id_Movimiento = vSale + WHERE id = vRowId; + + END LOOP; + + CLOSE cRows; + + -- Fija el Costfixat + + UPDATE vn2008.Movimientos m + JOIN (SELECT SUM(mc.Valor) sum_valor,mc.Id_Movimiento + FROM vn2008.Movimientos_componentes mc + JOIN bi.tarifa_componentes tc USING(Id_Componente) + JOIN bi.tarifa_componentes_series tcs on tcs.tarifa_componentes_series_id = tc.tarifa_componentes_series_id AND tcs.base + JOIN vn2008.Movimientos m ON m.Id_Movimiento = mc.Id_Movimiento + WHERE m.Id_Ticket = vTicket + GROUP BY mc.Id_Movimiento) mc ON mc.Id_Movimiento = m.Id_Movimiento + SET m.CostFixat = sum_valor; + END LOOP; + + CLOSE cDates; + + DELETE FROM basketOrder WHERE orderFk = vOrder; + UPDATE `order` SET confirmed = TRUE, confirm_date = NOW() + WHERE id = vOrder; + + COMMIT; + +END$$ + +DELIMITER ; + From c87fd81a62a35ad4b34e901d2f916cb4366a5518 Mon Sep 17 00:00:00 2001 From: Bernat Date: Mon, 21 Jan 2019 11:35:37 +0100 Subject: [PATCH 5/9] new model sip and fixtures #9474 --- modules/client/back/model-config.json | 3 +++ modules/client/back/models/sip.json | 38 +++++++++++++++++++++++++++ services/db/install/dump/fixtures.sql | 9 ++++++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 modules/client/back/models/sip.json diff --git a/modules/client/back/model-config.json b/modules/client/back/model-config.json index 2a06866dc..06c21f1cf 100644 --- a/modules/client/back/model-config.json +++ b/modules/client/back/model-config.json @@ -82,5 +82,8 @@ }, "TpvResponse": { "dataSource": "vn" + }, + "Sip": { + "dataSource": "vn" } } diff --git a/modules/client/back/models/sip.json b/modules/client/back/models/sip.json new file mode 100644 index 000000000..de6af8ad8 --- /dev/null +++ b/modules/client/back/models/sip.json @@ -0,0 +1,38 @@ +{ + "name": "Sip", + "base": "VnModel", + "options": { + "mysql": { + "table": "pbx.sip" + } + }, + "properties": { + "code": { + "type": "Number", + "id": true, + "mysql": { + "columnName": "extension" + } + }, + "password": { + "type": "string", + "mysql": { + "columnName": "secret" + } + }, + "name": { + "type": "string", + "mysql": { + "columnName": "caller_id" + } + } + }, + "relations": { + "user": { + "type": "belongsTo", + "model": "Account", + "foreignKey": "user_id" + } + } +} + \ No newline at end of file diff --git a/services/db/install/dump/fixtures.sql b/services/db/install/dump/fixtures.sql index 4b92486b0..4ac6bb93e 100644 --- a/services/db/install/dump/fixtures.sql +++ b/services/db/install/dump/fixtures.sql @@ -1064,4 +1064,11 @@ INSERT INTO `vn`.`ticketService`(`id`, `description`, `quantity`, `price`, `taxC VALUES (1, 'delivery charge', 1, 2.00, 1, 1), (2, 'training course', 1, 10.00, 1, 2), - (3, 'delivery charge', 1, 5.50, 1, 11); \ No newline at end of file + (3, 'delivery charge', 1, 5.50, 1, 11); + +INSERT INTO `pbx`.`sip`(`user_id`, `extension`, `secret`, `caller_id`) + VALUES + (1, 1010, '123456', 'employee'), + (3, 1101, '123456', 'agency'), + (5, 1102, '123456', 'administrative'), + (9, 1201, '123456', 'developer'); \ No newline at end of file From 5a53195574d46d5558fac955584c6beace66728a Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 21 Jan 2019 11:45:53 +0100 Subject: [PATCH 6/9] agency module --- front/core/components/calendar/index.html | 77 +++++- front/core/components/calendar/index.js | 240 +++++++++++++++--- front/core/components/calendar/style.scss | 117 ++++++++- front/core/components/check/check.js | 2 + front/core/components/check/style.scss | 2 +- front/core/components/index.js | 1 + front/core/components/treeview/child.html | 25 ++ front/core/components/treeview/child.js | 27 ++ front/core/components/treeview/index.html | 14 +- front/core/components/treeview/index.js | 129 +++++++++- front/core/components/treeview/style.scss | 40 ++- front/core/locale/es.yml | 15 +- .../methods/labour-holiday/getByWarehouse.js | 35 +++ .../methods/zone-calendar/removeByDate.js | 31 +++ .../methods/zone-included/toggleIsIncluded.js | 35 +++ .../back/methods/zone-treeview/getLeaves.js | 94 +++++++ modules/agency/back/model-config.json | 58 +++-- .../back/models/labour-holiday-legend.json | 18 ++ .../back/models/labour-holiday-type.json | 21 ++ modules/agency/back/models/labour-holiday.js | 3 + .../agency/back/models/labour-holiday.json | 39 +++ modules/agency/back/models/work-center.json | 25 ++ modules/agency/back/models/zone-calendar.js | 3 + modules/agency/back/models/zone-calendar.json | 3 +- modules/agency/back/models/zone-included.js | 3 + modules/agency/back/models/zone-treeview.js | 3 + modules/agency/back/models/zone-treeview.json | 30 +++ modules/agency/front/basic-data/index.html | 67 +++++ .../front/{edit => basic-data}/index.js | 3 +- modules/agency/front/calendar/index.html | 30 ++- modules/agency/front/calendar/index.js | 139 +++++++++- modules/agency/front/card/index.html | 18 +- modules/agency/front/card/index.spec.js | 2 +- modules/agency/front/create/index.js | 2 +- modules/agency/front/create/index.spec.js | 2 +- modules/agency/front/descriptor/index.html | 22 +- modules/agency/front/descriptor/index.js | 5 - modules/agency/front/index.js | 2 +- modules/agency/front/index/index.html | 9 +- modules/agency/front/index/index.js | 4 +- modules/agency/front/index/index.spec.js | 2 +- modules/agency/front/locale/es.yml | 4 +- modules/agency/front/location/index.html | 36 ++- modules/agency/front/location/index.js | 29 ++- modules/agency/front/routes.json | 17 +- modules/agency/front/summary/index.html | 55 ++-- modules/agency/front/summary/index.js | 13 +- modules/claim/front/index/index.js | 4 +- modules/client/front/index/index.js | 2 +- modules/travel/back/models/travel.json | 3 + modules/travel/front/index/index.js | 5 + modules/travel/front/search-panel/index.html | 17 ++ 52 files changed, 1369 insertions(+), 213 deletions(-) create mode 100644 front/core/components/treeview/child.html create mode 100644 front/core/components/treeview/child.js create mode 100644 modules/agency/back/methods/labour-holiday/getByWarehouse.js create mode 100644 modules/agency/back/methods/zone-calendar/removeByDate.js create mode 100644 modules/agency/back/methods/zone-included/toggleIsIncluded.js create mode 100644 modules/agency/back/methods/zone-treeview/getLeaves.js create mode 100644 modules/agency/back/models/labour-holiday-legend.json create mode 100644 modules/agency/back/models/labour-holiday-type.json create mode 100644 modules/agency/back/models/labour-holiday.js create mode 100644 modules/agency/back/models/labour-holiday.json create mode 100644 modules/agency/back/models/work-center.json create mode 100644 modules/agency/back/models/zone-calendar.js create mode 100644 modules/agency/back/models/zone-included.js create mode 100644 modules/agency/back/models/zone-treeview.js create mode 100644 modules/agency/back/models/zone-treeview.json create mode 100644 modules/agency/front/basic-data/index.html rename modules/agency/front/{edit => basic-data}/index.js (84%) diff --git a/front/core/components/calendar/index.html b/front/core/components/calendar/index.html index 4d9c80df6..4291af674 100644 --- a/front/core/components/calendar/index.html +++ b/front/core/components/calendar/index.html @@ -2,21 +2,84 @@ - {{$ctrl.defaultDate | date: 'dd/MM/yyyy'}} + + {{$ctrl.defaultDate | date: 'MMMM'}} + {{$ctrl.defaultDate | date: 'yyyy'}} + - -
- {{::day.number}} -
+ + + + +
+ L +
+
+ M +
+
+ X +
+
+ J +
+
+ V +
+
+ S +
+
+ D +
+
+ +
+ + {{::day.date | date: 'd'}} + + {{::day.date | date: 'd'}} +
+
+
+
\ No newline at end of file diff --git a/front/core/components/calendar/index.js b/front/core/components/calendar/index.js index 2f27f0e73..62b28b03b 100644 --- a/front/core/components/calendar/index.js +++ b/front/core/components/calendar/index.js @@ -9,8 +9,10 @@ import './style.scss'; export default class Calendar extends Component { constructor($element, $scope) { super($element, $scope); - + this.events = []; this.defaultDate = new Date(); + this.displayControls = true; + this.skip = 1; } get defaultDate() { @@ -19,67 +21,218 @@ export default class Calendar extends Component { set defaultDate(value) { this._defaultDate = value; - this.buildDays(); + + this.repaint(); } - get lastDay() { - let year = this.defaultDate.getYear(); - // Month starts from zero, so we increment one month - let month = this.defaultDate.getMonth() + 1; - - return new Date(year, month, 0).getDate(); + get currentMonth() { + return this.defaultDate; } - buildDays() { - let firstMonthDay = new Date(this.defaultDate); - firstMonthDay.setDate(1); + get events() { + return this._events; + } - let weekday = firstMonthDay.getDay(); + set events(value) { + if (!value) return; - let year = this.defaultDate.getYear(); - let month = this.defaultDate.getMonth(); - let previousLastMonthDay = new Date(year, month, 0); + value.map(event => { + event.date = new Date(event.date); + }); + + this._events = value; + + if (value.length && this.defaultDate) + this.repaint(); + } + + get nextMonth() { + const newDate = new Date(this.currentMonth); + newDate.setMonth(this.currentMonth.getMonth() + 1); + + return newDate; + } + + get previousMonth() { + const newDate = new Date(this.currentMonth); + newDate.setMonth(this.currentMonth.getMonth() - 1); + + return newDate; + } + + /** + * Returns first day of month from a given date + * + * @param {Date} date - Origin date + * @return {Integer} + */ + firstDay(date) { + const newDate = new Date( + date.getFullYear(), + date.getMonth(), 1); + + this.applyOffset(newDate); + + return newDate; + } + + /** + * Returns last day of month from a given date + * + * @param {Date} date - Origin date + * @return {Integer} + */ + lastDay(date) { + const newDate = new Date( + date.getFullYear(), + date.getMonth() + 1, 0); + + this.applyOffset(newDate); + + return newDate; + } + + applyOffset(date) { + date.setTime(date.getTime() - date.getTimezoneOffset() * 60000); + } + + repaint() { + const firstWeekday = this.firstDay(this.currentMonth).getDay(); + const previousLastDay = this.lastDay(this.previousMonth).getDate(); + const currentLastDay = this.lastDay(this.currentMonth).getDate(); + const maxFields = 42; // Max field limit + + let weekdayOffset = firstWeekday > 0 ? firstWeekday : 7; + let dayPrevious = previousLastDay - (weekdayOffset - 2); + let dayCurrent = 1; + let dayNext = 1; this.days = []; - let day = 1; - let previousMonthDay = previousLastMonthDay.getDate() - (weekday - 2); - let nextMonthDay = 1; - - for (let d = 1; d <= 35; d++) { - if (d < weekday) { - let monthDay = new Date(previousLastMonthDay); - monthDay.setDate(previousMonthDay); - this.days.push({number: previousMonthDay, date: monthDay, color: 'gray'}); - previousMonthDay++; - } else if (d >= weekday && day <= this.lastDay) { - let monthDay = new Date(this.defaultDate); - monthDay.setDate(day); - this.days.push({number: day, date: monthDay}); - day++; - } else if (d >= weekday && day > this.lastDay) { - this.days.push({number: nextMonthDay, color: 'gray'}); - nextMonthDay++; + for (let fieldIndex = 1; fieldIndex <= maxFields; fieldIndex++) { + if (fieldIndex < weekdayOffset) { + this.addDay(this.previousMonth, dayPrevious, 'gray'); + dayPrevious++; + } else if (fieldIndex >= weekdayOffset && dayCurrent <= currentLastDay) { + this.addDay(this.currentMonth, dayCurrent); + dayCurrent++; + } else if (fieldIndex >= weekdayOffset && dayCurrent > currentLastDay) { + this.addDay(this.nextMonth, dayNext, 'gray'); + dayNext++; } } } - moveNext() { - let next = this.defaultDate.getMonth() + 1; + addDay(date, day, color = '') { + const curDate = new Date(); + curDate.setHours(0, 0, 0, 0); + + this.applyOffset(curDate); + + const newDate = new Date( + date.getFullYear(), + date.getMonth(), day); + + this.applyOffset(newDate); + + let event = this.events.find(event => { + return event.date >= newDate && event.date <= newDate; + }); + + /* if (curDate >= newDate && curDate <= newDate) + color = 'orange'; */ + + /* if (newDate.getMonth() === this.currentMonth.getMonth() && newDate.getDay() == 6) + color = 'light-blue'; */ + + if (newDate.getMonth() === this.currentMonth.getMonth() && newDate.getDay() == 0) + color = 'red'; + + if (event) + color = event.color; + + this.days.push({date: newDate, color, event}); + } + + /** + * Adds a new calendar event + * + * @param {Date} date - Day to add event + * @param {String} color - [green, blue, orange, red] + * @param {String} title - Tooltip description + * @param {Boolean} isRemovable - True if is removable by users + */ + addEvent(date, color, title = '', isRemovable = true) { + const event = this.events.findIndex(event => { + return event.date >= date && event.date <= date; + }); + + if (event == -1) + this.events.push({date, color, title, isRemovable}); + + this.repaint(); + } + + removeEvent(date) { + const event = this.events.findIndex(event => { + return event.date >= date && event.date <= date; + }); + + if (event > -1) + this.events.splice(event, 1); + + this.repaint(); + } + + /** + * Moves to next month + * + * @param {Integer} skip - Months to skip at once + */ + moveNext(skip = 1) { + let next = this.defaultDate.getMonth() + skip; this.defaultDate.setMonth(next); - this.buildDays(); + this.repaint(); + + this.emit('moveNext'); } - movePrevious() { - let previous = this.defaultDate.getMonth() - 1; + /** + * Moves to previous month + * + * @param {Integer} skip - Months to skip at once + */ + movePrevious(skip = 1) { + let previous = this.defaultDate.getMonth() - skip; this.defaultDate.setMonth(previous); - this.buildDays(); + this.repaint(); + + this.emit('movePrevious'); } + /** + * Day selection event + * + * @param {Integer} index - Index from days array + */ select(index) { - this.emit('selection', {value: this.days[index]}); + let day = this.days[index]; + day.index = index; + + this.emit('selection', {values: [day]}); } + selectAll(weekday) { + let selected = []; + for (let i in this.days) { + const day = this.days[i]; + const date = day.date; + day.index = i; + if (date.getDay() === weekday && date.getMonth() == this.defaultDate.getMonth()) + selected.push(day); + } + this.emit('selection', {values: selected}); + } } Calendar.$inject = ['$element', '$scope', '$attrs']; @@ -89,7 +242,12 @@ ngModule.component('vnCalendar', { controller: Calendar, bindings: { model: '<', + events: ' .day { + .weekdays { + border-bottom: 1px solid $hover; + border-top: 1px solid $hover; + font-weight: bold + } + + .day { box-sizing: border-box; padding: 0.1em; width: 14.2857143%; line-height: 1.5em; span { + transition: background-color 0.3s; text-align: center; font-size: 0.8vw; border-radius: 50%; @@ -26,16 +36,105 @@ vn-calendar { padding: 0.2em; cursor: pointer } - } - & > .day:hover span { + .day:hover span { background-color: #DDD } - & > .day.gray { + .day.gray { color: $secondary-font-color } + + .day.orange { + font-weight: bold; + color: $main-01; + } + + .day.orange-circle { + color: $main-font-color; + & > span { + background-color: $main-01 + } + } + + .day.orange-circle:hover { + & > span { + background-color: $main-01-05 + } + } + + .day.light-orange { + color: $main-01-05 + } + + .day.green { + font-weight: bold; + color: $main-02; + } + + .day.green-circle { + color: $main-font-color; + & > span { + background-color: $main-02 + } + } + + .day.green-circle:hover { + & > span { + background-color: $main-02-05 + } + } + + .day.light-green { + font-weight: bold; + color: $main-02-05 + } + + .day.blue { + font-weight: bold; + color: $main-03; + } + + .day.blue-circle { + color: $main-font-color; + & > span { + background-color: $main-03 + } + } + + .day.blue-circle:hover { + & > span { + background-color: $main-03-05 + } + } + + .day.light-blue { + font-weight: bold; + color: $main-03-05 + } + + .day.red { + font-weight: bold; + color: $alert-01 + } + + .day.red-circle { + color: $main-font-color; + & > span { + background-color: $alert-01 + } + } + + .day.red-circle:hover { + & > span { + background-color: $alert-01-05 + } + } + + .day.light-red { + font-weight: bold; + color: $alert-01-05; + } } - } diff --git a/front/core/components/check/check.js b/front/core/components/check/check.js index 83a94a2df..99098ce89 100644 --- a/front/core/components/check/check.js +++ b/front/core/components/check/check.js @@ -35,6 +35,7 @@ export default class Controller extends Input { onChange() { this._field = this.input.checked == true; this.$.$applyAsync(); + this.emit('change'); } } Controller.$inject = ['$element', '$scope', '$attrs']; @@ -47,6 +48,7 @@ ngModule.component('vnCheck', { }, bindings: { field: '=?', + onChange: '&?', label: '@?', disabled: ' +
  • + + + + + + + + + + + + + {{::item.name}} + + + + + +
  • + \ No newline at end of file diff --git a/front/core/components/treeview/child.js b/front/core/components/treeview/child.js new file mode 100644 index 000000000..5144a829e --- /dev/null +++ b/front/core/components/treeview/child.js @@ -0,0 +1,27 @@ +import ngModule from '../../module'; +import Component from '../../lib/component'; + +class Controller extends Component { + constructor($element, $scope) { + super($element, $scope); + } + + toggle(item) { + this.treeview.onToggle(item); + } + + select(item) { + this.treeview.onSelection(item); + } +} + +ngModule.component('vnTreeviewChild', { + template: require('./child.html'), + controller: Controller, + bindings: { + items: '<' + }, + require: { + treeview: '^vnTreeview' + } +}); diff --git a/front/core/components/treeview/index.html b/front/core/components/treeview/index.html index 62d695a41..05c485fef 100644 --- a/front/core/components/treeview/index.html +++ b/front/core/components/treeview/index.html @@ -1,13 +1 @@ - \ No newline at end of file + diff --git a/front/core/components/treeview/index.js b/front/core/components/treeview/index.js index 03e6306c1..69cbb4f26 100644 --- a/front/core/components/treeview/index.js +++ b/front/core/components/treeview/index.js @@ -8,20 +8,137 @@ import './style.scss'; * @property {String} position The relative position to the parent */ export default class Treeview extends Component { - constructor($element, $scope, $timeout) { + constructor($element, $scope) { super($element, $scope); + this.data = []; } - get data() { - return this.model.data; + $onInit() { + this.refresh(); } - set selection(value) { - this._selection = value; + refresh() { + this.model.refresh().then(() => { + this.data = this.model.data; + this.repaintAll(); + }); + } + + repaintAll() { + let oldData = this.data; + oldData.forEach(node => { + this.repaintAsc(node); + this.repaintDesc(node); + }); + } + + repaintNode(node) { + this.repaintAsc(node); + this.repaintDesc(node); + } + + repaintAsc(node) { + if (!node.parent) return; + + const parent = node.parent; + if ((node.selected || node.included) && !parent.selected) { + parent.included = true; + parent.hasCheckedChilds = true; + } else if (!this.hasCheckedChilds(parent) && !this.hasCheckedParents(node)) + parent.included = false; + + // FIXME - Propagate hasCheckedCHilds + if (!node.selected && this.hasCheckedParents(node)) { + node.included = true; + parent.hasCheckedChilds = false; + } + + if (!this.hasCheckedChilds(node)) + node.hasCheckedChilds = false; + + this.repaintAsc(parent); + } + + repaintDesc(node) { + /* if (node.hasCheckedChilds) + node.included = false; */ + + if (!node.selected && this.hasCheckedChilds(node)) { + node.hasCheckedChilds = true; + node.included = true; + } else if (!node.selected && node.childs && !this.hasCheckedChilds(node)) + node.hasCheckedChilds = false; + + + const childs = node.childs || []; + for (let i = 0; i < childs.length; i++) { + childs[i].included = false; + + if ((node.selected || node.included && this.hasCheckedParents(childs[i])) && !childs[i].selected) + childs[i].included = true; + + this.repaintDesc(childs[i]); + } + + if (!node.selected && node.hasCheckedChilds) + node.included = true; + } + + hasCheckedChilds(node) { + if (!node.childs) return false; + + const childs = node.childs; + for (let i = 0; i < childs.length; i++) { + if (childs[i].selected || this.hasCheckedChilds(childs[i])) + return true; + } + + return false; + } + + hasCheckedParents(node) { + if (!node.parent) return false; + + const parent = node.parent; + if (parent.selected || this.hasCheckedParents(parent)) + return true; + + return false; + } + + onSelection(item) { + item.selected = !item.selected; + + if (item.selected && item.included) + item.included = false; + + if (this.hasCheckedChilds(item)) + item.hasCheckedChilds = true; + else if (this.childs) + item.hasCheckedChilds = false; + + this.emit('selection', {item}); + } + + onToggle(item) { + if (item.childs && item.childs.length == 0) + return; + + if (item.childs) + item.childs = undefined; + else { + this.model.applyFilter({}, {parentFk: item.id}).then(() => { + item.childs = this.model.data; + item.childs.forEach(child => { + child.parent = item; + }); + this.repaintNode(item); + }); + } } } -Treeview.$inject = ['$element', '$scope', '$attrs']; +Treeview.$inject = ['$element', '$scope']; ngModule.component('vnTreeview', { template: require('./index.html'), diff --git a/front/core/components/treeview/style.scss b/front/core/components/treeview/style.scss index 9179a4eba..eb8cd1ff3 100644 --- a/front/core/components/treeview/style.scss +++ b/front/core/components/treeview/style.scss @@ -1,3 +1,5 @@ +@import "colors"; + vn-treeview { ul { margin: 0; @@ -5,15 +7,43 @@ vn-treeview { li { list-style: none; + cursor: pointer; - a { - display: block; + .actions { + padding: 0.5em; + } + + .description { padding: 0.5em } } - } - & > ul > li { - + li ul { + padding: 0 1.8em; + } + + li > vn-horizontal:hover { + background-color: $hover + } + + li.selected > vn-horizontal > .description .text, + li.included > vn-horizontal > .description .text { + font-weight: bold; + color: $main-01; + } + + li.included { + & > vn-horizontal > .description > vn-horizontal > vn-check { + .mdl-checkbox .mdl-checkbox__box-outline, { + border: 2px solid $main-01-05; + } + fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline, .mdl-checkbox.is-disabled .mdl-checkbox__box-outline { + border: 2px solid rgba(0,0,0,.26); + } + .mdl-checkbox .mdl-checkbox__tick-outline { + background: $main-01-05; + } + } + } } } diff --git a/front/core/locale/es.yml b/front/core/locale/es.yml index 0771b1181..10d172444 100644 --- a/front/core/locale/es.yml +++ b/front/core/locale/es.yml @@ -24,4 +24,17 @@ Value should be %s characters long: El valor debe ser de %s carácteres de longi Value should have a length between %s and %s: El valor debe tener una longitud de entre %s y %s Value should have at least %s characters: El valor debe tener al menos %s carácteres Value should have at most %s characters: El valor debe tener un máximo de %s carácteres -General search: Busqueda general \ No newline at end of file +General search: Busqueda general +January: Enero +February: Febrero +March: Marzo +April: Abril +May: Mayo +June: Junio +July: Julio +August: Agosto +September: Septiembre +October: Octubre +November: Noviembre +December: Diciembre +Has delivery: Hay reparto \ No newline at end of file diff --git a/modules/agency/back/methods/labour-holiday/getByWarehouse.js b/modules/agency/back/methods/labour-holiday/getByWarehouse.js new file mode 100644 index 000000000..23282305a --- /dev/null +++ b/modules/agency/back/methods/labour-holiday/getByWarehouse.js @@ -0,0 +1,35 @@ +module.exports = Self => { + Self.remoteMethod('getByWarehouse', { + description: 'Returns an array of labour holidays from an specified warehouse', + accessType: '', + accepts: [{ + arg: 'warehouseFk', + type: 'Number', + required: true, + }], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/getByWarehouse`, + verb: 'GET' + } + }); + + Self.getByWarehouse = warehouseFk => { + let beginningYear = new Date(); + beginningYear.setMonth(0); + beginningYear.setDate(1); + beginningYear.setHours(0, 0, 0, 0); + + return Self.rawSql( + `SELECT lh.dated, lhl.description, lht.name, w.id + FROM vn.labourHoliday lh + JOIN vn.workCenter w ON w.id = lh.workcenterFk + LEFT JOIN vn.labourHolidayLegend lhl ON lhl.id = lh.labourHolidayLegendFk + LEFT JOIN vn.labourHolidayType lht ON lht.id = lh.labourHolidayTypeFk + WHERE w.warehouseFk = ? AND lh.dated >= ?`, [warehouseFk, beginningYear] + ); + }; +}; diff --git a/modules/agency/back/methods/zone-calendar/removeByDate.js b/modules/agency/back/methods/zone-calendar/removeByDate.js new file mode 100644 index 000000000..bbe32a86c --- /dev/null +++ b/modules/agency/back/methods/zone-calendar/removeByDate.js @@ -0,0 +1,31 @@ +module.exports = Self => { + Self.remoteMethod('removeByDate', { + description: 'Removes one or more delivery dates for a zone', + accessType: '', + accepts: [{ + arg: 'zoneFk', + type: 'Number', + required: true, + }, + { + arg: 'dates', + type: ['Date'], + required: true, + }], + returns: { + type: 'object', + root: true + }, + http: { + path: `/removeByDate`, + verb: 'POST' + } + }); + + Self.removeByDate = (zoneFk, dates) => { + return Self.destroyAll({zoneFk, delivered: {inq: dates}}); + /* return Self.rawSql(` + DELETE FROM vn.zoneCalendar + WHERE zoneFk = ? AND delivered IN(?)`, [zoneFk, dates]); */ + }; +}; diff --git a/modules/agency/back/methods/zone-included/toggleIsIncluded.js b/modules/agency/back/methods/zone-included/toggleIsIncluded.js new file mode 100644 index 000000000..dd9e89d28 --- /dev/null +++ b/modules/agency/back/methods/zone-included/toggleIsIncluded.js @@ -0,0 +1,35 @@ +module.exports = Self => { + Self.remoteMethod('toggleIsIncluded', { + description: 'Toggle include to delivery', + accessType: '', + accepts: [{ + arg: 'zoneFk', + type: 'Number', + required: true, + }, + { + arg: 'geoFk', + type: 'Number', + required: true, + }], + returns: { + type: 'object', + root: true + }, + http: { + path: `/toggleIsIncluded`, + verb: 'POST' + } + }); + + Self.toggleIsIncluded = async(zoneFk, geoFk) => { + const isIncluded = await Self.findOne({ + where: {zoneFk, geoFk} + }); + + if (isIncluded) + return Self.destroyAll({zoneFk, geoFk}); + else + return Self.upsert({zoneFk, geoFk}); + }; +}; diff --git a/modules/agency/back/methods/zone-treeview/getLeaves.js b/modules/agency/back/methods/zone-treeview/getLeaves.js new file mode 100644 index 000000000..06a878411 --- /dev/null +++ b/modules/agency/back/methods/zone-treeview/getLeaves.js @@ -0,0 +1,94 @@ + +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; + +module.exports = Self => { + Self.remoteMethod('getLeaves', { + description: 'Returns the first shipped and landed possible for params', + accessType: '', + accepts: [{ + arg: 'filter', + type: 'Object', + description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', + http: {source: 'query'} + }, + { + arg: 'zoneFk', + type: 'Number', + required: true, + }, + { + arg: 'parentFk', + type: 'Number', + default: 1, + required: false, + }], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/getLeaves`, + verb: 'GET' + } + }); + + Self.getLeaves = async(filter, zoneFk, parentFk = 1) => { + let conn = Self.dataSource.connector; + let stmts = []; + + stmts.push(new ParameterizedSQL( + `SELECT lft, rgt, depth + 1 INTO @lft, @rgt, @depth + FROM zoneTreeview WHERE id = ?`, [parentFk])); + + stmts.push(`DROP TEMPORARY TABLE IF EXISTS tChilds`); + + let stmt = new ParameterizedSQL( + `CREATE TEMPORARY TABLE tChilds + ENGINE = MEMORY + SELECT id, lft, rgt + FROM zoneTreeview pt`); + stmt.merge(conn.makeSuffix(filter)); + + if (!filter.where) { + stmt.merge(`WHERE pt.lft > @lft AND pt.rgt < @rgt + AND pt.depth = @depth`); + } + + stmts.push(stmt); + + stmts.push(`DROP TEMPORARY TABLE IF EXISTS tZones`); + stmts.push(new ParameterizedSQL( + `CREATE TEMPORARY TABLE tZones + (INDEX (id)) + ENGINE = MEMORY + SELECT t.id + FROM tChilds t + JOIN zoneTreeview zt + ON zt.lft > t.lft AND zt.rgt < t.rgt + JOIN zoneIncluded zi + ON zi.geoFk = zt.id AND zi.zoneFk = ? + GROUP BY t.id`, [zoneFk])); + + const resultIndex = stmts.push(new ParameterizedSQL( + `SELECT + pt.id, + pt.name, + pt.lft, + pt.rgt, + pt.depth, + pt.sons, + ti.id IS NOT NULL hasCheckedChilds, + zi.geoFk IS NOT NULL AS selected + FROM zoneTreeview pt + LEFT JOIN vn.zoneIncluded zi + ON zi.geoFk = pt.id AND zi.zoneFk = ? + JOIN tChilds c ON c.id = pt.id + LEFT JOIN tZones ti ON ti.id = pt.id + ORDER BY selected DESC, name`, [zoneFk])) - 1; + + const sql = ParameterizedSQL.join(stmts, ';'); + const result = await Self.rawStmt(sql); + + return result[resultIndex]; + }; +}; diff --git a/modules/agency/back/model-config.json b/modules/agency/back/model-config.json index c92a5555d..d0959864d 100644 --- a/modules/agency/back/model-config.json +++ b/modules/agency/back/model-config.json @@ -1,23 +1,39 @@ { - "Agency": { - "dataSource": "vn" - }, - "AgencyMode": { - "dataSource": "vn" - }, - "DeliveryMethod": { - "dataSource": "vn" - }, - "Zone": { - "dataSource": "vn" - }, - "ZoneCalendar": { - "dataSource": "vn" - }, - "ZoneGeo": { - "dataSource": "vn" - }, - "ZoneIncluded": { - "dataSource": "vn" - } + "Agency": { + "dataSource": "vn" + }, + "AgencyMode": { + "dataSource": "vn" + }, + "DeliveryMethod": { + "dataSource": "vn" + }, + "Zone": { + "dataSource": "vn" + }, + "ZoneGeo": { + "dataSource": "vn" + }, + "ZoneCalendar": { + "dataSource": "vn" + }, + "ZoneIncluded": { + "dataSource": "vn" + }, + "ZoneTreeview": { + "dataSource": "vn" + }, + "LabourHoliday": { + "dataSource": "vn" + }, + "LabourHolidayLegend": { + "dataSource": "vn" + }, + "LabourHolidayType": { + "dataSource": "vn" + } } + + + + diff --git a/modules/agency/back/models/labour-holiday-legend.json b/modules/agency/back/models/labour-holiday-legend.json new file mode 100644 index 000000000..a2650ddd7 --- /dev/null +++ b/modules/agency/back/models/labour-holiday-legend.json @@ -0,0 +1,18 @@ +{ + "name": "LabourHolidayLegend", + "base": "VnModel", + "options": { + "mysql": { + "table": "labourHolidayLegend" + } + }, + "properties": { + "id": { + "id": true, + "type": "Number" + }, + "description": { + "type": "String" + } + } +} \ No newline at end of file diff --git a/modules/agency/back/models/labour-holiday-type.json b/modules/agency/back/models/labour-holiday-type.json new file mode 100644 index 000000000..ea4272723 --- /dev/null +++ b/modules/agency/back/models/labour-holiday-type.json @@ -0,0 +1,21 @@ +{ + "name": "LabourHolidayType", + "base": "VnModel", + "options": { + "mysql": { + "table": "labourHolidayType" + } + }, + "properties": { + "id": { + "id": true, + "type": "Number" + }, + "name": { + "type": "String" + }, + "rgb": { + "type": "String" + } + } +} \ No newline at end of file diff --git a/modules/agency/back/models/labour-holiday.js b/modules/agency/back/models/labour-holiday.js new file mode 100644 index 000000000..629e11a91 --- /dev/null +++ b/modules/agency/back/models/labour-holiday.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/labour-holiday/getByWarehouse')(Self); +}; diff --git a/modules/agency/back/models/labour-holiday.json b/modules/agency/back/models/labour-holiday.json new file mode 100644 index 000000000..a15b22675 --- /dev/null +++ b/modules/agency/back/models/labour-holiday.json @@ -0,0 +1,39 @@ +{ + "name": "LabourHoliday", + "base": "VnModel", + "options": { + "mysql": { + "table": "labourHoliday" + } + }, + "properties": { + "labourHolidayLegendFk": { + "id": true, + "type": "Number" + }, + "labourHolidayTypeFk": { + "id": true, + "type": "Number" + }, + "dated": { + "type": "Date" + } + }, + "relations": { + "legend": { + "type": "belongsTo", + "model": "LabourHolidayLegend", + "foreignKey": "labourHolidayLegendFk" + }, + "type": { + "type": "belongsTo", + "model": "LabourHolidayType", + "foreignKey": "labourHolidayTypeFk" + }, + "workCenter": { + "type": "belongsTo", + "model": "WorkCenter", + "foreignKey": "workCenterFk" + } + } +} \ No newline at end of file diff --git a/modules/agency/back/models/work-center.json b/modules/agency/back/models/work-center.json new file mode 100644 index 000000000..44096bda7 --- /dev/null +++ b/modules/agency/back/models/work-center.json @@ -0,0 +1,25 @@ +{ + "name": "WorkCenter", + "base": "VnModel", + "options": { + "mysql": { + "table": "work-center" + } + }, + "properties": { + "id": { + "id": true, + "type": "Number" + }, + "name": { + "type": "String" + } + }, + "relations": { + "warehouse": { + "type": "belongsTo", + "model": "Warehouse", + "foreignKey": "warehouseFk" + } + } +} \ No newline at end of file diff --git a/modules/agency/back/models/zone-calendar.js b/modules/agency/back/models/zone-calendar.js new file mode 100644 index 000000000..871852882 --- /dev/null +++ b/modules/agency/back/models/zone-calendar.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/zone-calendar/removeByDate')(Self); +}; diff --git a/modules/agency/back/models/zone-calendar.json b/modules/agency/back/models/zone-calendar.json index 9690cdd0f..35926a0db 100644 --- a/modules/agency/back/models/zone-calendar.json +++ b/modules/agency/back/models/zone-calendar.json @@ -3,7 +3,7 @@ "base": "VnModel", "options": { "mysql": { - "table": "ZoneCalendar" + "table": "zoneCalendar" } }, "properties": { @@ -12,6 +12,7 @@ "type": "Number" }, "delivered": { + "id": true, "type": "Date" } }, diff --git a/modules/agency/back/models/zone-included.js b/modules/agency/back/models/zone-included.js new file mode 100644 index 000000000..6cf1192aa --- /dev/null +++ b/modules/agency/back/models/zone-included.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/zone-included/toggleIsIncluded')(Self); +}; diff --git a/modules/agency/back/models/zone-treeview.js b/modules/agency/back/models/zone-treeview.js new file mode 100644 index 000000000..36c76e12f --- /dev/null +++ b/modules/agency/back/models/zone-treeview.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/zone-treeview/getLeaves')(Self); +}; diff --git a/modules/agency/back/models/zone-treeview.json b/modules/agency/back/models/zone-treeview.json new file mode 100644 index 000000000..9ffd14d7e --- /dev/null +++ b/modules/agency/back/models/zone-treeview.json @@ -0,0 +1,30 @@ +{ + "name": "ZoneTreeview", + "base": "VnModel", + "options": { + "mysql": { + "table": "zoneTreeview" + } + }, + "properties": { + "id": { + "id": true, + "type": "Number" + }, + "name": { + "type": "String" + }, + "lft": { + "type": "Number" + }, + "rgt": { + "type": "Number" + }, + "depth": { + "type": "Number" + }, + "sons": { + "type": "Number" + } + } +} \ No newline at end of file diff --git a/modules/agency/front/basic-data/index.html b/modules/agency/front/basic-data/index.html new file mode 100644 index 000000000..4a2e03075 --- /dev/null +++ b/modules/agency/front/basic-data/index.html @@ -0,0 +1,67 @@ + + + +
    + + Basic data + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/agency/front/edit/index.js b/modules/agency/front/basic-data/index.js similarity index 84% rename from modules/agency/front/edit/index.js rename to modules/agency/front/basic-data/index.js index 3ff19fb1d..a730ed362 100644 --- a/modules/agency/front/edit/index.js +++ b/modules/agency/front/basic-data/index.js @@ -8,7 +8,6 @@ class Controller { onSubmit() { this.$scope.watcher.submit().then(() => { - this.$state.go('zone.card.location'); this.card.reload(); }); } @@ -16,7 +15,7 @@ class Controller { Controller.$inject = ['$scope', '$state']; -ngModule.component('vnZoneEdit', { +ngModule.component('vnZoneBasicData', { template: require('./index.html'), controller: Controller, bindings: { diff --git a/modules/agency/front/calendar/index.html b/modules/agency/front/calendar/index.html index 07c1ff9d7..6180cdd17 100644 --- a/modules/agency/front/calendar/index.html +++ b/modules/agency/front/calendar/index.html @@ -1,21 +1,29 @@ - + url="/agency/api/ZoneCalendars" + fields="['zoneFk', 'delivered']" + link="{zoneFk: $ctrl.$stateParams.id}" + data="$ctrl.data" + primary-key="zoneFk" auto-load="true"> + - + - + + + + + - diff --git a/modules/agency/front/calendar/index.js b/modules/agency/front/calendar/index.js index 02bfa86ee..11deaae54 100644 --- a/modules/agency/front/calendar/index.js +++ b/modules/agency/front/calendar/index.js @@ -1,19 +1,144 @@ import ngModule from '../module'; class Controller { - constructor($scope) { + constructor($scope, $stateParams, $http) { + this.$stateParams = $stateParams; this.$scope = $scope; - this.defaultDate = new Date(); - this.defaultNexDate = new Date(this.defaultDate); - this.defaultNexDate.setMonth(this.defaultNexDate.getMonth() + 1); + this.$http = $http; + this.stMonthDate = new Date(); + this.ndMonthDate = new Date(); + this.ndMonthDate.setMonth(this.ndMonthDate.getMonth() + 1); + this.events = []; } - onSelection(value) { - console.log(value); + $postLink() { + this.stMonth = this.$scope.stMonth; + this.ndMonth = this.$scope.ndMonth; + } + + get zone() { + return this._zone; + } + + set zone(value) { + this._zone = value; + + if (!value) return; + + let query = '/agency/api/LabourHolidays/getByWarehouse'; + this.$http.get(query, {params: {warehouseFk: value.warehouseFk}}).then(res => { + if (!res.data) return; + const events = []; + res.data.forEach(holiday => { + events.push({ + date: holiday.dated, + color: 'blue-circle', + title: holiday.description || holiday.name, + isRemovable: false + }); + }); + + this.events = this.events.concat(events); + }); + } + + get data() { + return this._data; + } + + set data(value) { + this._data = value; + + if (!value) return; + + const events = []; + value.forEach(event => { + events.push({ + date: event.delivered, + color: 'green-circle', + title: 'Has delivery', + isRemovable: true + }); + }); + + this.events = this.events.concat(events); + } + + onSelection(calendar, values) { + let totalEvents = 0; + values.forEach(day => { + const exists = this.events.findIndex(event => { + return event.date >= day.date && event.date <= day.date + && event.isRemovable; + }); + + if (exists > -1) totalEvents++; + }); + + if (totalEvents > (values.length / 2)) + this.removeEvents(values); + else + this.addEvents(values); + } + + addEvents(days) { + days.forEach(day => { + const event = this.events.find(event => { + return event.date >= day.date && event.date <= day.date; + }); + + if (event) + return false; + + this.$scope.model.insert({ + zoneFk: this.zone.id, + delivered: day.date + }); + + this.stMonth.addEvent(day.date, 'green-circle', 'Has delivery', true); + this.stMonth.repaint(); + this.ndMonth.addEvent(day.date, 'green-circle', 'Has delivery', true); + this.ndMonth.repaint(); + }); + this.$scope.model.save(); + } + + removeEvents(days) { + let dates = []; + days.forEach(day => { + const event = this.events.find(event => { + return event.date >= day.date && event.date <= day.date; + }); + + if (event && !event.isRemovable) + return false; + + // FIXME - Date offset + let date = new Date(day.date); + date.setHours(0, 0, 0, 0); + dates.push(date); + + this.stMonth.removeEvent(day.date); + this.stMonth.repaint(); + this.ndMonth.removeEvent(day.date); + this.ndMonth.repaint(); + }); + + if (dates.length == 0) return; + const params = {zoneFk: this.zone.id, dates}; + this.$http.post('/agency/api/zoneCalendars/removeByDate', params); + } + + onMoveNext(calendar) { + calendar.moveNext(2); + } + + onMovePrevious(calendar) { + calendar.movePrevious(2); } } -Controller.$inject = ['$scope']; +Controller.$inject = ['$scope', '$stateParams', '$http']; ngModule.component('vnZoneCalendar', { template: require('./index.html'), diff --git a/modules/agency/front/card/index.html b/modules/agency/front/card/index.html index a049230de..b2d4c0522 100644 --- a/modules/agency/front/card/index.html +++ b/modules/agency/front/card/index.html @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + diff --git a/modules/agency/front/card/index.spec.js b/modules/agency/front/card/index.spec.js index 8b1d2490f..15e8fada9 100644 --- a/modules/agency/front/card/index.spec.js +++ b/modules/agency/front/card/index.spec.js @@ -1,6 +1,6 @@ import './index.js'; -describe('Agency', () => { +xdescribe('Agency', () => { describe('Component vnZoneCard', () => { let $scope; let controller; diff --git a/modules/agency/front/create/index.js b/modules/agency/front/create/index.js index b9c2a3499..d10db3e3a 100644 --- a/modules/agency/front/create/index.js +++ b/modules/agency/front/create/index.js @@ -14,7 +14,7 @@ export default class Controller { onSubmit() { this.$scope.watcher.submit().then(res => { - this.$state.go('zone.card.basicData', {id: res.data.id}); + this.$state.go('zone.card.location', {id: res.data.id}); }); } } diff --git a/modules/agency/front/create/index.spec.js b/modules/agency/front/create/index.spec.js index 257187e46..70e061612 100644 --- a/modules/agency/front/create/index.spec.js +++ b/modules/agency/front/create/index.spec.js @@ -1,7 +1,7 @@ import './index'; import watcher from 'core/mocks/watcher'; -describe('Agency', () => { +xdescribe('Agency', () => { describe('Component vnZoneCreate', () => { let $scope; let $state; diff --git a/modules/agency/front/descriptor/index.html b/modules/agency/front/descriptor/index.html index 6a225d8c6..450714055 100644 --- a/modules/agency/front/descriptor/index.html +++ b/modules/agency/front/descriptor/index.html @@ -14,36 +14,34 @@ on-change="$ctrl.onMoreChange(value)"> - + + value="{{$ctrl.zone.id}}"> + value="{{$ctrl.zone.name}}"> + value="{{$ctrl.zone.warehouse.name}}"> + value="{{$ctrl.zone.agencyMode.name}}"> - - + value="{{$ctrl.zone.hour | date: 'HH:mm'}}"> + value="{{$ctrl.zone.travelingDays}}"> + value="{{$ctrl.zone.price | currency: '€': 2}}"> + value="{{$ctrl.zone.price | currency: '€': 2}}"> - +
    { diff --git a/modules/agency/front/index.js b/modules/agency/front/index.js index 199deb6a0..f58cc8f60 100644 --- a/modules/agency/front/index.js +++ b/modules/agency/front/index.js @@ -6,6 +6,6 @@ import './card'; import './descriptor'; import './search-panel'; import './create'; -import './edit'; +import './basic-data'; import './location'; import './calendar'; diff --git a/modules/agency/front/index/index.html b/modules/agency/front/index/index.html index d12b03628..7257c89d2 100644 --- a/modules/agency/front/index/index.html +++ b/modules/agency/front/index/index.html @@ -40,7 +40,7 @@ {{::zone.price | currency:'€':2}} @@ -54,6 +54,13 @@ + + + + + diff --git a/modules/agency/front/index/index.js b/modules/agency/front/index/index.js index ed3442871..6c2d250c5 100644 --- a/modules/agency/front/index/index.js +++ b/modules/agency/front/index/index.js @@ -26,8 +26,8 @@ export default class Controller { preview(event, zone) { event.preventDefault(); event.stopImmediatePropagation(); - this.$scope.summary.zone = zone; - this.$scope.dialog.show(); + this.zoneSelected = zone; + this.$scope.summary.show(); } } diff --git a/modules/agency/front/index/index.spec.js b/modules/agency/front/index/index.spec.js index 1f6c18c4d..2e5e5d013 100644 --- a/modules/agency/front/index/index.spec.js +++ b/modules/agency/front/index/index.spec.js @@ -1,6 +1,6 @@ import './index.js'; -describe('Agency', () => { +xdescribe('Agency', () => { describe('Component vnZoneIndex', () => { let $componentController; let controller; diff --git a/modules/agency/front/locale/es.yml b/modules/agency/front/locale/es.yml index 58f0ef81e..ed2142b60 100644 --- a/modules/agency/front/locale/es.yml +++ b/modules/agency/front/locale/es.yml @@ -6,7 +6,7 @@ Price: Precio Create: Crear Delete: Eliminar Settings: Ajustes -Delivery days: Días de envío +Locations: Localizaciones Enter a new search: Introduce una nueva búsqueda Delete zone: Eliminar zona Are you sure you want to delete this zone?: ¿Estás seguro de querer eliminar esta zona? @@ -15,4 +15,4 @@ Zones: Zonas List: Listado Summary: Vista previa New zone: Nueva zona -Edit zone: Editar zona \ No newline at end of file +Basic data: Datos básicos \ No newline at end of file diff --git a/modules/agency/front/location/index.html b/modules/agency/front/location/index.html index bc028604b..41d42ac3d 100644 --- a/modules/agency/front/location/index.html +++ b/modules/agency/front/location/index.html @@ -1,18 +1,26 @@ + url="/agency/api/ZoneTreeviews/getLeaves" + filter="::$ctrl.filter" + params="{zoneFk: $ctrl.$stateParams.id, parentFk: 1}"> - - - Delivery days - - - - - \ No newline at end of file + + + + Locations + + + + + + + + + + \ No newline at end of file diff --git a/modules/agency/front/location/index.js b/modules/agency/front/location/index.js index ded4b9868..cdb89829a 100644 --- a/modules/agency/front/location/index.js +++ b/modules/agency/front/location/index.js @@ -1,12 +1,37 @@ import ngModule from '../module'; class Controller { - constructor($scope) { + constructor($scope, $http, $stateParams) { + this.$stateParams = $stateParams; this.$scope = $scope; + this.$http = $http; + this.searchValue = ''; + this.filter = {}; + } + + onSearch() { + this.$scope.$$postDigest(() => { + this.$scope.treeview.refresh(); + }); + } + + exprBuilder(param, value) { + switch (param) { + case 'search': + return {name: {like: `%${value}%`}}; + } + } + + onSelection(item) { + const path = '/agency/api/ZoneIncludeds/toggleIsIncluded'; + const params = {geoFk: item.id, zoneFk: this.zone.id}; + this.$http.post(path, params).then(() => { + this.$scope.treeview.repaintNode(item); + }); } } -Controller.$inject = ['$scope']; +Controller.$inject = ['$scope', '$http', '$stateParams']; ngModule.component('vnZoneLocation', { template: require('./index.html'), diff --git a/modules/agency/front/routes.json b/modules/agency/front/routes.json index b33c81fba..99f08ec2a 100644 --- a/modules/agency/front/routes.json +++ b/modules/agency/front/routes.json @@ -32,23 +32,26 @@ "description": "Detail" }, { - "url": "/location", + "url": "/location?q", "state": "zone.card.location", "component": "vn-zone-location", - "description": "Location", + "description": "Locations", "params": { "zone": "$ctrl.zone" } }, { - "url": "/edit", - "state": "zone.card.edit", - "component": "vn-zone-edit", - "description": "Edit zone", + "url": "/basic-data", + "state": "zone.card.basicData", + "component": "vn-zone-basic-data", + "description": "Basic data", "params": { "zone": "$ctrl.zone" } } ], - "menu": [] + "menu": [ + {"state": "zone.card.basicData", "icon": "settings"}, + {"state": "zone.card.location", "icon": "my_location"} + ] } \ No newline at end of file diff --git a/modules/agency/front/summary/index.html b/modules/agency/front/summary/index.html index c860d2bb1..9d4ad04e8 100644 --- a/modules/agency/front/summary/index.html +++ b/modules/agency/front/summary/index.html @@ -1,30 +1,37 @@ - - - -
    Basic data
    - - - - - - - - - - - - -
    + +
    {{$ctrl.summary.name}}
    +
    + + + + + + + + + + + + + + + + + + + + -
    \ No newline at end of file diff --git a/modules/agency/front/summary/index.js b/modules/agency/front/summary/index.js index 55c46fe5f..1c200edde 100644 --- a/modules/agency/front/summary/index.js +++ b/modules/agency/front/summary/index.js @@ -18,8 +18,17 @@ class Controller { } getSummary() { - this.$http.get(`/agency/api/Zones/${this.zone.id}`).then(response => { - this.summary = response.data; + let filter = { + include: [ + {relation: 'warehouse', fields: ['name']}, + {relation: 'agencyMode', fields: ['name']} + ], + where: {id: this.zone.id} + }; + filter = encodeURIComponent(JSON.stringify((filter))); + this.$http.get(`/agency/api/Zones/findOne?filter=${filter}`).then(res => { + if (res && res.data) + this.summary = res.data; }); } } diff --git a/modules/claim/front/index/index.js b/modules/claim/front/index/index.js index 0ff5c9b7c..0c93ca415 100644 --- a/modules/claim/front/index/index.js +++ b/modules/claim/front/index/index.js @@ -36,9 +36,9 @@ export default class Controller { case 'search': return /^\d+$/.test(value) ? {id: value} - : {client: {regexp: value}}; + : {client: {like: `%${value}%`}}; case 'client': - return {[param]: {regexp: value}}; + return {[param]: {like: `%${value}%`}}; case 'created': return {created: {between: [value, value]}}; case 'id': diff --git a/modules/client/front/index/index.js b/modules/client/front/index/index.js index 1497224fe..482aef7e9 100644 --- a/modules/client/front/index/index.js +++ b/modules/client/front/index/index.js @@ -23,7 +23,7 @@ export default class Controller { case 'name': case 'socialName': case 'city': - return {[param]: {regexp: `%${value}%`}}; + return {[param]: {like: `%${value}%`}}; case 'id': case 'fi': case 'postcode': diff --git a/modules/travel/back/models/travel.json b/modules/travel/back/models/travel.json index d950e1d4f..e7fe4684e 100644 --- a/modules/travel/back/models/travel.json +++ b/modules/travel/back/models/travel.json @@ -26,6 +26,9 @@ }, "ref": { "type": "String" + }, + "totalEntries": { + "type": "Number" } }, "relations": { diff --git a/modules/travel/front/index/index.js b/modules/travel/front/index/index.js index 3a79d57cf..d30cc39f8 100644 --- a/modules/travel/front/index/index.js +++ b/modules/travel/front/index/index.js @@ -35,10 +35,15 @@ export default class Controller { return {id: value}; case 'ref': return {[param]: {regexp: value}}; + case 'shipped': + return {shipped: {lte: value}}; + case 'landed': + return {landed: {gte: value}}; case 'id': case 'agencyFk': case 'warehouseOutFk': case 'warehouseInFk': + case 'totalEntries': return {[param]: value}; } } diff --git a/modules/travel/front/search-panel/index.html b/modules/travel/front/search-panel/index.html index d3898fcf9..9e1a98c5e 100644 --- a/modules/travel/front/search-panel/index.html +++ b/modules/travel/front/search-panel/index.html @@ -14,6 +14,11 @@ label="Reference" model="filter.ref"> + + + + + + + + Date: Mon, 21 Jan 2019 13:48:32 +0100 Subject: [PATCH 7/9] update fixtures #9466 --- .../item-module/09_regularize_item.spec.js | 6 +- services/db/install/dump/fixtures.sql | 95 +++++++++++-------- 2 files changed, 58 insertions(+), 43 deletions(-) diff --git a/e2e/paths/item-module/09_regularize_item.spec.js b/e2e/paths/item-module/09_regularize_item.spec.js index fa1f98449..07ceb4e62 100644 --- a/e2e/paths/item-module/09_regularize_item.spec.js +++ b/e2e/paths/item-module/09_regularize_item.spec.js @@ -145,10 +145,10 @@ describe('Item regularize path', () => { expect(url.hash).toEqual('#!/ticket/index'); }); - it('should search for the ticket with id 22 once again', async() => { + it('should search for the ticket with id 23 once again', async() => { const result = await nightmare .wait(selectors.ticketsIndex.searchTicketInput) - .type(selectors.ticketsIndex.searchTicketInput, 'id:22') + .type(selectors.ticketsIndex.searchTicketInput, 'id:23') .click(selectors.ticketsIndex.searchButton) .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) .countElement(selectors.ticketsIndex.searchResult); @@ -158,7 +158,7 @@ describe('Item regularize path', () => { it(`should now click on the search result to access to the ticket summary`, async() => { const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, '22') + .waitForTextInElement(selectors.ticketsIndex.searchResult, '23') .waitToClick(selectors.ticketsIndex.searchResult) .waitForURL('/summary') .parsedUrl(); diff --git a/services/db/install/dump/fixtures.sql b/services/db/install/dump/fixtures.sql index 4ac6bb93e..f5b8f4b75 100644 --- a/services/db/install/dump/fixtures.sql +++ b/services/db/install/dump/fixtures.sql @@ -345,27 +345,28 @@ INSERT INTO `vn`.`invoiceOut`(`id`,`ref`, `serial`, `amount`, `issued`,`clientFk INSERT INTO `vn`.`ticket`(`id`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `created`) VALUES - (1 , 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY) , DATE_ADD(CURDATE(), INTERVAL -15 DAY) , 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY) ), - (2 , 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -10 DAY) , DATE_ADD(CURDATE(), INTERVAL -10 DAY) , 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY) ), - (3 , 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL -5 DAY) , DATE_ADD(CURDATE(), INTERVAL -5 DAY) , 102, 'address 22', 122, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY) ), - (4 , 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL -4 DAY) , DATE_ADD(CURDATE(), INTERVAL -4 DAY) , 102, 'address 22', 122, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -4 DAY) ), - (5 , 3, 3, 3, DATE_ADD(CURDATE(), INTERVAL -3 DAY) , DATE_ADD(CURDATE(), INTERVAL -3 DAY) , 103, 'address 23', 123, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -3 DAY) ), - (6 , 3, 3, 4, DATE_ADD(CURDATE(), INTERVAL -2 DAY) , DATE_ADD(CURDATE(), INTERVAL -2 DAY) , 103, 'address 23', 123, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -2 DAY) ), - (7 , 4, 4, 4, DATE_ADD(CURDATE(), INTERVAL -1 DAY) , DATE_ADD(CURDATE(), INTERVAL -1 DAY) , 104, 'address 24', 124, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -1 DAY) ), - (8 , 1, 1, 4, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), 104, 'address 24', 124, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)), - (9 , 5, 5, 4, DATE_ADD(CURDATE(), INTERVAL -2 MONTH), DATE_ADD(CURDATE(), INTERVAL -2 MONTH), 105, 'address 25', 125, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -2 MONTH)), - (10, 6, 5, 5, DATE_ADD(CURDATE(), INTERVAL -3 MONTH), DATE_ADD(CURDATE(), INTERVAL -3 MONTH), 105, 'address 25', 125, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -3 MONTH)), - (11, 7, 1, 1, CURDATE() , CURDATE() , 101, 'address 21', 121, NULL, 0, CURDATE() ), - (12, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)), - (13, 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL +2 MONTH), DATE_ADD(CURDATE(), INTERVAL +2 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +2 MONTH)), - (14, 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL +3 MONTH), DATE_ADD(CURDATE(), INTERVAL +3 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +3 MONTH)), - (15, 3, 3, 3, DATE_ADD(CURDATE(), INTERVAL +4 MONTH), DATE_ADD(CURDATE(), INTERVAL +4 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +4 MONTH)), - (16, 1, 1, 1, CURDATE() , CURDATE() , 101, 'address 21', 121, NULL, 0, CURDATE() ), - (17, 4, 4, 4, CURDATE() , CURDATE() , 106, 'address 26', 126, NULL, 0, CURDATE() ), - (18, 4, 4, 4, CURDATE() , CURDATE() , 107, 'address 27', 127, NULL, 0, CURDATE() ), - (19, 5, 5, 4, CURDATE() , CURDATE() , 108, 'address 28', 128, NULL, 0, CURDATE() ), - (20, 5, 5, 4, CURDATE() , CURDATE() , 108, 'address 28', 128, NULL, 0, CURDATE() ), - (21, 5, 5, 4, CURDATE() , CURDATE() , 110, 'address 29', 129, NULL, 1, CURDATE() ); + (1 , 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY) , DATE_ADD(CURDATE(), INTERVAL -15 DAY) , 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY) ), + (2 , 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -10 DAY) , DATE_ADD(CURDATE(), INTERVAL -10 DAY) , 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY) ), + (3 , 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL -5 DAY) , DATE_ADD(CURDATE(), INTERVAL -5 DAY) , 102, 'address 22', 122, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY) ), + (4 , 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL -4 DAY) , DATE_ADD(CURDATE(), INTERVAL -4 DAY) , 102, 'address 22', 122, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -4 DAY) ), + (5 , 3, 3, 3, DATE_ADD(CURDATE(), INTERVAL -3 DAY) , DATE_ADD(CURDATE(), INTERVAL -3 DAY) , 103, 'address 23', 123, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -3 DAY) ), + (6 , 3, 3, 4, DATE_ADD(CURDATE(), INTERVAL -2 DAY) , DATE_ADD(CURDATE(), INTERVAL -2 DAY) , 103, 'address 23', 123, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -2 DAY) ), + (7 , 4, 4, 4, DATE_ADD(CURDATE(), INTERVAL -1 DAY) , DATE_ADD(CURDATE(), INTERVAL -1 DAY) , 104, 'address 24', 124, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -1 DAY) ), + (8 , 1, 1, 4, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), 104, 'address 24', 124, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH) ), + (9 , 5, 5, 4, DATE_ADD(CURDATE(), INTERVAL -2 MONTH), DATE_ADD(CURDATE(), INTERVAL -2 MONTH), 105, 'address 25', 125, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -2 MONTH) ), + (10, 6, 5, 5, DATE_ADD(CURDATE(), INTERVAL -3 MONTH), DATE_ADD(CURDATE(), INTERVAL -3 MONTH), 105, 'address 25', 125, NULL, 0, DATE_ADD(CURDATE(), INTERVAL -3 MONTH) ), + (11, 7, 1, 1, CURDATE() , CURDATE() , 101, 'address 21', 121, NULL, 0, CURDATE() ), + (12, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH) ), + (13, 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL +2 MONTH), DATE_ADD(CURDATE(), INTERVAL +2 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +2 MONTH) ), + (14, 2, 2, 2, DATE_ADD(CURDATE(), INTERVAL +3 MONTH), DATE_ADD(CURDATE(), INTERVAL +3 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +3 MONTH) ), + (15, 3, 3, 3, DATE_ADD(CURDATE(), INTERVAL +4 MONTH), DATE_ADD(CURDATE(), INTERVAL +4 MONTH), 101, 'address 21', 121, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +4 MONTH) ), + (16, 1, 1, 1, CURDATE(), CURDATE(), 101, 'address 21', 121, NULL, 0, CURDATE() ), + (17, 4, 4, 4, CURDATE(), CURDATE(), 106, 'address 26', 126, NULL, 0, CURDATE() ), + (18, 4, 4, 4, CURDATE(), CURDATE(), 107, 'address 27', 127, NULL, 0, CURDATE() ), + (19, 5, 5, 4, DATE_ADD(CURDATE(), INTERVAL +1 DAY), DATE_ADD(CURDATE(), INTERVAL +1 DAY), 108, 'address 28', 128, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 DAY) ), + (20, 5, 5, 4, DATE_ADD(CURDATE(), INTERVAL +1 DAY), DATE_ADD(CURDATE(), INTERVAL +1 DAY), 108, 'address 28', 128, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 DAY) ), + (21, 5, 5, 4, CURDATE(), CURDATE(), 110, 'address 29', 129, NULL, 1, CURDATE() ), + (22, 5, 5, 4, DATE_ADD(CURDATE(), INTERVAL +1 DAY), DATE_ADD(CURDATE(), INTERVAL +1 DAY), 108, 'address 28', 128, NULL, 1, DATE_ADD(CURDATE(), INTERVAL +1 DAY) ); INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`) VALUES @@ -394,8 +395,9 @@ INSERT INTO `vn`.`ticketTracking`(`id`, `ticketFk`, `stateFk`, `workerFk`, `crea (17, 17, 1 , 19, CURDATE()), (18, 18, 1 , 19, CURDATE()), (19, 19, 13, 19, CURDATE()), - (20, 20, 15, 19, CURDATE()), - (21, 21, 3 , 19, CURDATE()); + (20, 20, 13, 19, CURDATE()), + (21, 21, 3 , 19, CURDATE()), + (23, 21, 13, 19, CURDATE()); INSERT INTO `vn`.`stowaway`(`id`, `shipFk`, `created`) VALUES @@ -537,22 +539,24 @@ INSERT INTO `vn`.`ticketPackaging`(`id`, `ticketFk`, `packagingFk`, `quantity`, INSERT INTO `vn`.`sale`(`id`, `itemFk`, `ticketFk`, `concept`, `quantity`, `price`, `discount`, `reserved`, `isPicked`, `created`) VALUES - (1, 1, 1 , 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), - (2, 2, 1 , 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), - (3, 1, 1 , 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), - (4, 4, 1 , 'Object4 Armor2 2', 20, 3.06, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), - (5, 1, 2 , 'Object1 Gem1 5', 10, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY)), - (6, 1, 3 , 'Object1 Gem1 5', 15, 6.50, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY)), - (7, 2, 11, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()), - (8, 4, 11, 'Object4 Armor2 2', 10, 3.26, 0, 0, 0, CURDATE()), - (9, 1, 16, 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, CURDATE()), - (10, 2, 16, 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, CURDATE()), - (11, 1, 16, 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, CURDATE()), - (12, 4, 16, 'Object4 Armor2 2', 20, 3.06, 0, 0, 0, CURDATE()), - (13, 2, 8, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()), - (14, 1, 8, 'Object1 Gem1 5', 10, 2.30, 0, 0, 0, CURDATE()), - (15, 1, 19, 'Object1 Gem1 5', 10, 1.50, 0, 0, 0, CURDATE()), - (16, 2, 20, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()); + (1, 1, 1 , 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), + (2, 2, 1 , 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), + (3, 1, 1 , 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), + (4, 4, 1 , 'Object4 Armor2 2', 20, 3.06, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), + (5, 1, 2 , 'Object1 Gem1 5', 10, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY)), + (6, 1, 3 , 'Object1 Gem1 5', 15, 6.50, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY)), + (7, 2, 11, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()), + (8, 4, 11, 'Object4 Armor2 2', 10, 3.26, 0, 0, 0, CURDATE()), + (9, 1, 16, 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, CURDATE()), + (10, 2, 16, 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, CURDATE()), + (11, 1, 16, 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, CURDATE()), + (12, 4, 16, 'Object4 Armor2 2', 20, 3.06, 0, 0, 0, CURDATE()), + (13, 2, 8, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()), + (14, 1, 8, 'Object1 Gem1 5', 10, 2.30, 0, 0, 0, CURDATE()), + (15, 1, 19, 'Object1 Gem1 5', 10, 1.50, 0, 0, 0, CURDATE()), + (16, 2, 20, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()), + (17, 2, 22, 'Object2 Gem2 3', 30, 2.30, 0, 0, 0, CURDATE()), + (18, 4, 22, 'Object4 Armor2 2', 20, 3.00, 0, 0, 0, CURDATE()); INSERT INTO `vn`.`saleChecked`(`saleFk`, `isChecked`) VALUES @@ -637,7 +641,18 @@ INSERT INTO `vn`.`saleComponent`(`saleFk`, `componentFk`, `value`) (16, 21, 0.002), (16, 28, 5.6), (16, 29, -4.6), - (16, 39, 0.01); + (16, 39, 0.01), + (17, 15, 0.058), + (17, 21, 0.002), + (17, 28, 5.6), + (17, 29, -4.6), + (17, 39, 0.01), + (18, 15, 0.051), + (18, 22, -0.001), + (18, 28, 20.72), + (18, 29, -19.72), + (18, 37, 2), + (18, 39, 0.01); INSERT INTO `vn`.`saleTracking`(`saleFk`, `isChecked`, `created`, `originalQuantity`, `workerFk`, `actionFk`, `id`, `stateFk`) VALUES From ae2c5089d4338d1b60eaa78e0d388d58e9741831 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 21 Jan 2019 14:46:22 +0100 Subject: [PATCH 8/9] removed print & mail services --- docker-compose.yml | 11 +- services/mailer/.gitignore | 1 - services/mailer/Dockerfile | 6 - services/mailer/application/auth.js | 75 - services/mailer/application/config.js | 34 - .../application/config/datasources.json | 29 - services/mailer/application/database.js | 33 - services/mailer/application/locale.js | 42 - services/mailer/application/mail.js | 112 -- .../mailer/application/route/notification.js | 288 --- services/mailer/application/router.js | 49 - services/mailer/application/template.js | 234 --- .../template/client-welcome/attachment.json | 1 - .../template/client-welcome/client-welcome.js | 46 - .../template/client-welcome/index.html | 67 - .../template/client-welcome/locale/es.json | 29 - .../template/client-welcome/style.css | 0 .../template/default/image/download.svg | 4 - .../template/default/image/preview.svg | 4 - .../application/template/footer/footer.js | 21 - .../template/footer/image/action.png | Bin 3225 -> 0 bytes .../template/footer/image/facebook.png | Bin 3586 -> 0 bytes .../template/footer/image/header.png | Bin 30712 -> 0 bytes .../template/footer/image/info.png | Bin 3045 -> 0 bytes .../template/footer/image/instagram.png | Bin 3719 -> 0 bytes .../template/footer/image/linkedin.png | Bin 3588 -> 0 bytes .../template/footer/image/pinterest.png | Bin 3807 -> 0 bytes .../template/footer/image/twitter.png | Bin 3646 -> 0 bytes .../template/footer/image/youtube.png | Bin 3513 -> 0 bytes .../application/template/footer/index.html | 42 - .../template/footer/locale/es.json | 7 - .../template/footer/locale/fr.json | 7 - .../application/template/footer/style.css | 54 - .../application/template/header/header.js | 21 - .../template/header/image/logo.png | Bin 30712 -> 0 bytes .../application/template/header/index.html | 3 - .../template/header/locale/es.json | 2 - .../application/template/header/style.css | 3 - .../template/letter-debtor-nd/attachment.json | 1 - .../template/letter-debtor-nd/index.html | 87 - .../letter-debtor-nd/letter-debtor-nd.js | 39 - .../template/letter-debtor-nd/locale/es.json | 18 - .../template/letter-debtor-nd/style.css | 0 .../template/letter-debtor-st/attachment.json | 1 - .../template/letter-debtor-st/index.html | 69 - .../letter-debtor-st/letter-debtor-st.js | 39 - .../template/letter-debtor-st/locale/es.json | 11 - .../template/letter-debtor-st/style.css | 0 .../notification-alias/attachment.json | 1 - .../template/notification-alias/index.html | 33 - .../notification-alias/locale/es.json | 11 - .../notification-alias/notification-alias.js | 29 - .../template/notification-alias/style.css | 0 .../notification-notice/attachment.json | 1 - .../template/notification-notice/index.html | 76 - .../notification-notice/locale/es.json | 13 - .../notification-notice.js | 28 - .../template/payment-update/attachment.json | 1 - .../template/payment-update/index.html | 39 - .../template/payment-update/locale/es.json | 13 - .../template/payment-update/locale/fr.json | 13 - .../template/payment-update/payment-update.js | 43 - .../template/payment-update/style.css | 0 .../template/printer-setup/attachment.json | 1 - .../printer-setup/attachment/model.ezp | Bin 9845 -> 0 bytes .../template/printer-setup/index.html | 68 - .../template/printer-setup/locale/es.json | 31 - .../template/printer-setup/printer-setup.js | 46 - .../template/printer-setup/style.css | 0 .../template/sepa-core/attachment.json | 1 - .../application/template/sepa-core/index.html | 54 - .../template/sepa-core/locale/es.json | 7 - .../template/sepa-core/sepa-core.js | 32 - .../application/template/sepa-core/style.css | 0 services/mailer/application/util/format.js | 41 - services/mailer/application/util/system.js | 10 - services/mailer/package.json | 23 - services/mailer/server/server.js | 35 - services/mailer/static/css/component.css | 217 --- services/nginx/nginx.development.mst | 3 - services/nginx/nginx.mst | 4 - services/print/.gitignore | 1 - services/print/Dockerfile | 5 - services/print/application/auth.js | 80 - services/print/application/config.js | 30 - .../print/application/config/datasources.json | 18 - services/print/application/database.js | 16 - services/print/application/locale.js | 42 - .../print/application/route/manuscript.js | 171 -- services/print/application/router.js | 31 - services/print/application/template.js | 256 --- .../template/claim-pickup/claim-pickup.js | 56 - .../template/claim-pickup/image/action.png | Bin 3225 -> 0 bytes .../template/claim-pickup/image/facebook.png | Bin 3586 -> 0 bytes .../template/claim-pickup/image/header.png | Bin 30712 -> 0 bytes .../template/claim-pickup/image/info.png | Bin 3045 -> 0 bytes .../template/claim-pickup/image/instagram.png | Bin 3719 -> 0 bytes .../template/claim-pickup/image/linkedin.png | Bin 3588 -> 0 bytes .../template/claim-pickup/image/logo.png | Bin 8577 -> 0 bytes .../template/claim-pickup/image/logo.svg | 48 - .../template/claim-pickup/image/pinterest.png | Bin 3807 -> 0 bytes .../template/claim-pickup/image/twitter.png | Bin 3646 -> 0 bytes .../template/claim-pickup/image/youtube.png | Bin 3513 -> 0 bytes .../template/claim-pickup/index.html | 91 - .../template/claim-pickup/locale/es.json | 16 - .../template/claim-pickup/style.css | 22 - .../template/delivery-note/delivery-note.js | 179 -- .../template/delivery-note/image/action.png | Bin 3225 -> 0 bytes .../template/delivery-note/image/facebook.png | Bin 3586 -> 0 bytes .../template/delivery-note/image/header.png | Bin 30712 -> 0 bytes .../template/delivery-note/image/info.png | Bin 3045 -> 0 bytes .../delivery-note/image/instagram.png | Bin 3719 -> 0 bytes .../template/delivery-note/image/linkedin.png | Bin 3588 -> 0 bytes .../template/delivery-note/image/logo.png | Bin 8577 -> 0 bytes .../template/delivery-note/image/logo.svg | 48 - .../delivery-note/image/pinterest.png | Bin 3807 -> 0 bytes .../template/delivery-note/image/twitter.png | Bin 3646 -> 0 bytes .../template/delivery-note/image/youtube.png | Bin 3513 -> 0 bytes .../template/delivery-note/index.html | 162 -- .../template/delivery-note/locale/es.json | 31 - .../template/delivery-note/style.css | 22 - .../application/template/footer/footer.js | 20 - .../template/footer/image/action.png | Bin 3225 -> 0 bytes .../template/footer/image/facebook.png | Bin 3586 -> 0 bytes .../template/footer/image/info.png | Bin 3045 -> 0 bytes .../template/footer/image/instagram.png | Bin 3719 -> 0 bytes .../template/footer/image/linkedin.png | Bin 3588 -> 0 bytes .../template/footer/image/pinterest.png | Bin 3807 -> 0 bytes .../template/footer/image/twitter.png | Bin 3646 -> 0 bytes .../template/footer/image/youtube.png | Bin 3513 -> 0 bytes .../application/template/footer/index.html | 7 - .../template/footer/locale/es.json | 4 - .../application/template/footer/style.css | 13 - .../application/template/header/header.js | 9 - .../template/header/image/logo.png | Bin 19195 -> 0 bytes .../template/header/image/logo.svg | 48 - .../application/template/header/index.html | 5 - .../template/header/locale/es.json | 4 - .../application/template/header/style.css | 10 - .../template/letter-debtor/image/action.png | Bin 3225 -> 0 bytes .../template/letter-debtor/image/facebook.png | Bin 3586 -> 0 bytes .../template/letter-debtor/image/header.png | Bin 30712 -> 0 bytes .../template/letter-debtor/image/info.png | Bin 3045 -> 0 bytes .../letter-debtor/image/instagram.png | Bin 3719 -> 0 bytes .../template/letter-debtor/image/linkedin.png | Bin 3588 -> 0 bytes .../template/letter-debtor/image/logo.png | Bin 8577 -> 0 bytes .../template/letter-debtor/image/logo.svg | 48 - .../letter-debtor/image/pinterest.png | Bin 3807 -> 0 bytes .../template/letter-debtor/image/twitter.png | Bin 3646 -> 0 bytes .../template/letter-debtor/image/youtube.png | Bin 3513 -> 0 bytes .../template/letter-debtor/index.html | 78 - .../template/letter-debtor/letter-debtor.js | 89 - .../template/letter-debtor/locale/es.json | 31 - .../template/letter-debtor/style.css | 22 - .../application/template/sepa-core/index.html | 128 -- .../template/sepa-core/locale/es.json | 31 - .../template/sepa-core/sepa-core.js | 55 - .../application/template/sepa-core/style.css | 22 - services/print/application/util/format.js | 99 -- services/print/application/util/system.js | 10 - services/print/package-lock.json | 1573 ----------------- services/print/package.json | 23 - services/print/server/server.js | 30 - services/print/static/css/common.css | 216 --- 164 files changed, 1 insertion(+), 6263 deletions(-) delete mode 100644 services/mailer/.gitignore delete mode 100644 services/mailer/Dockerfile delete mode 100644 services/mailer/application/auth.js delete mode 100644 services/mailer/application/config.js delete mode 100644 services/mailer/application/config/datasources.json delete mode 100644 services/mailer/application/database.js delete mode 100644 services/mailer/application/locale.js delete mode 100644 services/mailer/application/mail.js delete mode 100644 services/mailer/application/route/notification.js delete mode 100644 services/mailer/application/router.js delete mode 100644 services/mailer/application/template.js delete mode 100644 services/mailer/application/template/client-welcome/attachment.json delete mode 100644 services/mailer/application/template/client-welcome/client-welcome.js delete mode 100644 services/mailer/application/template/client-welcome/index.html delete mode 100644 services/mailer/application/template/client-welcome/locale/es.json delete mode 100644 services/mailer/application/template/client-welcome/style.css delete mode 100644 services/mailer/application/template/default/image/download.svg delete mode 100644 services/mailer/application/template/default/image/preview.svg delete mode 100644 services/mailer/application/template/footer/footer.js delete mode 100644 services/mailer/application/template/footer/image/action.png delete mode 100644 services/mailer/application/template/footer/image/facebook.png delete mode 100644 services/mailer/application/template/footer/image/header.png delete mode 100644 services/mailer/application/template/footer/image/info.png delete mode 100644 services/mailer/application/template/footer/image/instagram.png delete mode 100644 services/mailer/application/template/footer/image/linkedin.png delete mode 100644 services/mailer/application/template/footer/image/pinterest.png delete mode 100644 services/mailer/application/template/footer/image/twitter.png delete mode 100644 services/mailer/application/template/footer/image/youtube.png delete mode 100644 services/mailer/application/template/footer/index.html delete mode 100644 services/mailer/application/template/footer/locale/es.json delete mode 100644 services/mailer/application/template/footer/locale/fr.json delete mode 100644 services/mailer/application/template/footer/style.css delete mode 100644 services/mailer/application/template/header/header.js delete mode 100644 services/mailer/application/template/header/image/logo.png delete mode 100644 services/mailer/application/template/header/index.html delete mode 100644 services/mailer/application/template/header/locale/es.json delete mode 100644 services/mailer/application/template/header/style.css delete mode 100644 services/mailer/application/template/letter-debtor-nd/attachment.json delete mode 100644 services/mailer/application/template/letter-debtor-nd/index.html delete mode 100644 services/mailer/application/template/letter-debtor-nd/letter-debtor-nd.js delete mode 100644 services/mailer/application/template/letter-debtor-nd/locale/es.json delete mode 100644 services/mailer/application/template/letter-debtor-nd/style.css delete mode 100644 services/mailer/application/template/letter-debtor-st/attachment.json delete mode 100644 services/mailer/application/template/letter-debtor-st/index.html delete mode 100644 services/mailer/application/template/letter-debtor-st/letter-debtor-st.js delete mode 100644 services/mailer/application/template/letter-debtor-st/locale/es.json delete mode 100644 services/mailer/application/template/letter-debtor-st/style.css delete mode 100644 services/mailer/application/template/notification-alias/attachment.json delete mode 100644 services/mailer/application/template/notification-alias/index.html delete mode 100644 services/mailer/application/template/notification-alias/locale/es.json delete mode 100644 services/mailer/application/template/notification-alias/notification-alias.js delete mode 100644 services/mailer/application/template/notification-alias/style.css delete mode 100644 services/mailer/application/template/notification-notice/attachment.json delete mode 100644 services/mailer/application/template/notification-notice/index.html delete mode 100644 services/mailer/application/template/notification-notice/locale/es.json delete mode 100644 services/mailer/application/template/notification-notice/notification-notice.js delete mode 100644 services/mailer/application/template/payment-update/attachment.json delete mode 100644 services/mailer/application/template/payment-update/index.html delete mode 100644 services/mailer/application/template/payment-update/locale/es.json delete mode 100644 services/mailer/application/template/payment-update/locale/fr.json delete mode 100644 services/mailer/application/template/payment-update/payment-update.js delete mode 100644 services/mailer/application/template/payment-update/style.css delete mode 100644 services/mailer/application/template/printer-setup/attachment.json delete mode 100644 services/mailer/application/template/printer-setup/attachment/model.ezp delete mode 100644 services/mailer/application/template/printer-setup/index.html delete mode 100644 services/mailer/application/template/printer-setup/locale/es.json delete mode 100644 services/mailer/application/template/printer-setup/printer-setup.js delete mode 100644 services/mailer/application/template/printer-setup/style.css delete mode 100644 services/mailer/application/template/sepa-core/attachment.json delete mode 100644 services/mailer/application/template/sepa-core/index.html delete mode 100644 services/mailer/application/template/sepa-core/locale/es.json delete mode 100644 services/mailer/application/template/sepa-core/sepa-core.js delete mode 100644 services/mailer/application/template/sepa-core/style.css delete mode 100644 services/mailer/application/util/format.js delete mode 100644 services/mailer/application/util/system.js delete mode 100644 services/mailer/package.json delete mode 100644 services/mailer/server/server.js delete mode 100644 services/mailer/static/css/component.css delete mode 100644 services/print/.gitignore delete mode 100644 services/print/Dockerfile delete mode 100644 services/print/application/auth.js delete mode 100644 services/print/application/config.js delete mode 100644 services/print/application/config/datasources.json delete mode 100644 services/print/application/database.js delete mode 100644 services/print/application/locale.js delete mode 100644 services/print/application/route/manuscript.js delete mode 100644 services/print/application/router.js delete mode 100644 services/print/application/template.js delete mode 100644 services/print/application/template/claim-pickup/claim-pickup.js delete mode 100644 services/print/application/template/claim-pickup/image/action.png delete mode 100644 services/print/application/template/claim-pickup/image/facebook.png delete mode 100644 services/print/application/template/claim-pickup/image/header.png delete mode 100644 services/print/application/template/claim-pickup/image/info.png delete mode 100644 services/print/application/template/claim-pickup/image/instagram.png delete mode 100644 services/print/application/template/claim-pickup/image/linkedin.png delete mode 100644 services/print/application/template/claim-pickup/image/logo.png delete mode 100644 services/print/application/template/claim-pickup/image/logo.svg delete mode 100644 services/print/application/template/claim-pickup/image/pinterest.png delete mode 100644 services/print/application/template/claim-pickup/image/twitter.png delete mode 100644 services/print/application/template/claim-pickup/image/youtube.png delete mode 100644 services/print/application/template/claim-pickup/index.html delete mode 100644 services/print/application/template/claim-pickup/locale/es.json delete mode 100644 services/print/application/template/claim-pickup/style.css delete mode 100644 services/print/application/template/delivery-note/delivery-note.js delete mode 100644 services/print/application/template/delivery-note/image/action.png delete mode 100644 services/print/application/template/delivery-note/image/facebook.png delete mode 100644 services/print/application/template/delivery-note/image/header.png delete mode 100644 services/print/application/template/delivery-note/image/info.png delete mode 100644 services/print/application/template/delivery-note/image/instagram.png delete mode 100644 services/print/application/template/delivery-note/image/linkedin.png delete mode 100644 services/print/application/template/delivery-note/image/logo.png delete mode 100644 services/print/application/template/delivery-note/image/logo.svg delete mode 100644 services/print/application/template/delivery-note/image/pinterest.png delete mode 100644 services/print/application/template/delivery-note/image/twitter.png delete mode 100644 services/print/application/template/delivery-note/image/youtube.png delete mode 100644 services/print/application/template/delivery-note/index.html delete mode 100644 services/print/application/template/delivery-note/locale/es.json delete mode 100644 services/print/application/template/delivery-note/style.css delete mode 100644 services/print/application/template/footer/footer.js delete mode 100644 services/print/application/template/footer/image/action.png delete mode 100644 services/print/application/template/footer/image/facebook.png delete mode 100644 services/print/application/template/footer/image/info.png delete mode 100644 services/print/application/template/footer/image/instagram.png delete mode 100644 services/print/application/template/footer/image/linkedin.png delete mode 100644 services/print/application/template/footer/image/pinterest.png delete mode 100644 services/print/application/template/footer/image/twitter.png delete mode 100644 services/print/application/template/footer/image/youtube.png delete mode 100644 services/print/application/template/footer/index.html delete mode 100644 services/print/application/template/footer/locale/es.json delete mode 100644 services/print/application/template/footer/style.css delete mode 100644 services/print/application/template/header/header.js delete mode 100644 services/print/application/template/header/image/logo.png delete mode 100644 services/print/application/template/header/image/logo.svg delete mode 100644 services/print/application/template/header/index.html delete mode 100644 services/print/application/template/header/locale/es.json delete mode 100644 services/print/application/template/header/style.css delete mode 100644 services/print/application/template/letter-debtor/image/action.png delete mode 100644 services/print/application/template/letter-debtor/image/facebook.png delete mode 100644 services/print/application/template/letter-debtor/image/header.png delete mode 100644 services/print/application/template/letter-debtor/image/info.png delete mode 100644 services/print/application/template/letter-debtor/image/instagram.png delete mode 100644 services/print/application/template/letter-debtor/image/linkedin.png delete mode 100644 services/print/application/template/letter-debtor/image/logo.png delete mode 100644 services/print/application/template/letter-debtor/image/logo.svg delete mode 100644 services/print/application/template/letter-debtor/image/pinterest.png delete mode 100644 services/print/application/template/letter-debtor/image/twitter.png delete mode 100644 services/print/application/template/letter-debtor/image/youtube.png delete mode 100644 services/print/application/template/letter-debtor/index.html delete mode 100644 services/print/application/template/letter-debtor/letter-debtor.js delete mode 100644 services/print/application/template/letter-debtor/locale/es.json delete mode 100644 services/print/application/template/letter-debtor/style.css delete mode 100644 services/print/application/template/sepa-core/index.html delete mode 100644 services/print/application/template/sepa-core/locale/es.json delete mode 100644 services/print/application/template/sepa-core/sepa-core.js delete mode 100644 services/print/application/template/sepa-core/style.css delete mode 100644 services/print/application/util/format.js delete mode 100644 services/print/application/util/system.js delete mode 100644 services/print/package-lock.json delete mode 100644 services/print/package.json delete mode 100644 services/print/server/server.js delete mode 100644 services/print/static/css/common.css diff --git a/docker-compose.yml b/docker-compose.yml index 497803c4c..2d5c8cb33 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,13 +19,4 @@ services: - NODE_ENV volumes: - /containers/salix:/etc/salix - - /mnt/storage/pdfs:/var/lib/salix/pdfs - mailer: - image: registry.verdnatura.es/salix-mailer:${TAG} - restart: unless-stopped - build: - context: services/mailer - environment: - - NODE_ENV - volumes: - - /containers/vn-mailer:/etc/vn-mailer \ No newline at end of file + - /mnt/storage/pdfs:/var/lib/salix/pdfs \ No newline at end of file diff --git a/services/mailer/.gitignore b/services/mailer/.gitignore deleted file mode 100644 index 3c3629e64..000000000 --- a/services/mailer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/services/mailer/Dockerfile b/services/mailer/Dockerfile deleted file mode 100644 index 29e87585e..000000000 --- a/services/mailer/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM node:lts-slim - -RUN npm -g install pm2 -COPY . /app -WORKDIR /app -CMD ["pm2-docker", "./server/server.js"] diff --git a/services/mailer/application/auth.js b/services/mailer/application/auth.js deleted file mode 100644 index 49918eb57..000000000 --- a/services/mailer/application/auth.js +++ /dev/null @@ -1,75 +0,0 @@ -var database = require('./database.js'); -let config = require('./config.js'); - -module.exports = { - /** - * Initialize auth. - * @param {Object} request Request object - * @param {Object} response Response object - * @param {Object} next Next object - */ - init: function(request, response, next) { - this.request = request; - this.response = response; - this.next = next; - - this.validateToken(); - }, - - /** - * Validate auth token. - */ - validateToken: function() { - let query = 'SELECT userId, ttl, created FROM salix.AccessToken WHERE id = ?'; - - database.pool.query(query, [this.getToken()], (error, result) => { - let token = result[0]; - - if (error || result.length == 0) - return this.response.status(401).send({message: 'Invalid token'}); - - if (this.isTokenExpired(token.created, token.ttl)) - return this.response.status(401).send({message: 'Token expired'}); - - // Set proxy host - let proxy = config.proxy; - - if (!proxy) - proxy = { - host: 'localhost', - port: 80 - }; - - this.request.proxyHost = `http://${proxy.host}:${proxy.port}`; - this.request.user = { - id: token.userId, - token: this.getToken() - }; - this.next(); - }); - }, - - /** - * Get request token. - * @return {String} Token - */ - getToken: function() { - return this.request.headers.authorization || this.request.query.token; - }, - - /** - * Checks if the token has expired. - * @param {String} created Creation date - * @param {Integer} ttl Ttl seconds - * @return {Boolean} %true if the token has expired - */ - isTokenExpired: function(created, ttl) { - let date = new Date(created); - let currentDate = new Date(); - - date.setSeconds(date.getSeconds() + ttl); - - if (currentDate > date) - return true; - } -}; diff --git a/services/mailer/application/config.js b/services/mailer/application/config.js deleted file mode 100644 index f0f0dfea6..000000000 --- a/services/mailer/application/config.js +++ /dev/null @@ -1,34 +0,0 @@ -require('require-yaml'); -const fs = require('fs-extra'); -const packageJson = require('../package.json'); -let configPath = `/etc/${packageJson.name}`; -let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; - -let config = require('./config/datasources.json'); -let configFiles = [ - `${configPath}/datasources.json`, - `${configPath}/datasources.${env}.json` -]; - -for (let configFile of configFiles) { - if (fs.existsSync(configFile)) - Object.assign(config, require(configFile)); -} - -let proxyConf = {}; -let proxyFiles = [ - '../../nginx/config.yml', - `${configPath}/config.yml`, - `${configPath}/config.${env}.yml` -]; - -for (let proxyFile of proxyFiles) { - if (fs.existsSync(proxyFile)) - Object.assign(proxyConf, require(proxyFile)); -} - -config.proxy = proxyConf; -config.package = packageJson; -config.env = env; - -module.exports = config; diff --git a/services/mailer/application/config/datasources.json b/services/mailer/application/config/datasources.json deleted file mode 100644 index 6d489ec36..000000000 --- a/services/mailer/application/config/datasources.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "app": { - "port": 3000, - "debug": false, - "defaultLanguage": "es", - "senderMail": "noreply@localhost", - "senderName": "MySender" - }, - "mysql": { - "host": "localhost", - "port": 3306, - "database": "vn", - "user": "root", - "password": "root" - }, - "smtp": { - "host": "localhost", - "port": 465, - "secure": true, - "auth": { - "user": "noreply", - "pass": "" - }, - "tls": { - "rejectUnauthorized": false - }, - "pool": true - } -} \ No newline at end of file diff --git a/services/mailer/application/database.js b/services/mailer/application/database.js deleted file mode 100644 index 4fe4a0ba9..000000000 --- a/services/mailer/application/database.js +++ /dev/null @@ -1,33 +0,0 @@ -var mysql = require('mysql'); -let config = require('./config.js'); - -module.exports = { - /** - * Pool instance - */ - pool: null, - - /** - * Start database pool - */ - init: function() { - this.pool = mysql.createPool(config.mysql); - - this.pool.getConnection(function(error, connection) { - if (error) { - throw new Error('Can\'t connect to database: ' + error.code); - } else if (config.app.debug) { - console.log('Database connection stablished'); - } - }); - }, - - /** - * Set test environment mail. - */ - testEmail: function() { - this.pool.query('SELECT fakeEmail as email FROM vn.config', function(error, qryRs) { - config.smtp.testEmail = qryRs[0].email; - }); - } -}; diff --git a/services/mailer/application/locale.js b/services/mailer/application/locale.js deleted file mode 100644 index f9737fea3..000000000 --- a/services/mailer/application/locale.js +++ /dev/null @@ -1,42 +0,0 @@ -var fs = require('fs'); -var config = require('./config.js'); -var path = require('path'); - -module.exports = { -/** - * Returns template locale - * @param {String} template - Template name - * @param {String} countryCode - Language code - * @param {Object} cb - Callback - */ - load: function(template, countryCode, cb) { - var localeFile = path.join(__dirname, 'template', `${template}`, 'locale', `${countryCode}.json`); - var defaultLocaleFile = path.join(__dirname, 'template', `${template}`, 'locale', `${config.app.defaultLanguage}.json`); - - fs.stat(localeFile, (error, stats) => { - if (error) { - fs.stat(defaultLocaleFile, (error, stats) => { - if (error) - return cb(new Error('Translation not found for template ' + template)); - - cb(null, {locale: require(defaultLocaleFile)}); - }); - } else { - cb(null, {locale: require(localeFile)}); - } - }); - }, - -/** - * Parse locale text - * @param {String} text - Locale text - * @param {Object} params - Locale params - * @return {String} - Returns parsed text - */ - parseText: function(text, params) { - for (var key in params) { - text = text.replace(`%${key}%`, params[key]); - } - return text; - } -}; diff --git a/services/mailer/application/mail.js b/services/mailer/application/mail.js deleted file mode 100644 index 27d25e39a..000000000 --- a/services/mailer/application/mail.js +++ /dev/null @@ -1,112 +0,0 @@ -var nodemailer = require('nodemailer'); -var config = require('./config.js'); -var template = require('./template.js'); -var database = require('./database.js'); - -/** - * Mail module - */ -module.exports = { - transporter: null, - /** - * Load mail config. - */ - init: function() { - this.transporter = nodemailer.createTransport(config.smtp); - - this.transporter.verify(function(error, success) { - if (error) { - console.error(error); - } else if (config.app.debug) { - console.log('SMTP connection stablished'); - } - }); - - }, - - /** - * Send email. - * @param {Object} recipient - Mail destinatary - * @param {String} subject - Subject - * @param {String} body - Mail body - * @param {Object} attachments - Mail attachments - * @param {Object} params - Params - * @param {Object} cb - Callback - */ - send: function(recipient, subject, body, attachments, params, cb) { - let mailOptions = { - from: '"' + config.app.senderName + '" <' + config.app.senderMail + '>', - to: recipient, - subject: subject, - html: body, - attachments - }; - - if (config.env != 'production') - mailOptions.to = config.app.senderMail; - - this.transporter.sendMail(mailOptions, (error, info) => { - try { - let status = (error ? error.message : 'OK'); - this.log(params.sender, params.recipient, recipient, subject, body, params.message, status); - - if (error) - return cb(new Error('Email not sent: ' + error)); - - if (config.app.debug) - console.log('Mail sent ' + info.messageId + ' [' + info.response + ']'); - - cb(); - } catch (e) { - throw e; - } - }); - }, - - /** - * Send email with template. - * @param {String} tplName - Template name - * @param {Object} params - Params object - * @param {Object} cb - Callback - */ - sendWithTemplate: function(tplName, params, cb) { - template.get(tplName, params, (error, result) => { - if (error) - return cb(error); - - // Custom attachments - if (params.attachments) - params.attachments.forEach(function(attachment) { - result.attachments.push(attachment); - }); - - this.send(result.recipient, result.subject, result.body, result.attachments, params, error => { - if (error) - return cb(error); - - cb(); - }); - }); - }, - - /** - * Add mail log - * @param {Integer} senderId - Sender id - * @param {Integer} recipientId - Recipient id - * @param {String} sender - Sender email - * @param {String} subject - Mail subject - * @param {String} body - Mail body - * @param {String} plainTextBody - Mail plain text body - * @param {String} status - Mail status - */ - log: function(senderId, recipientId, sender, subject, body, plainTextBody, status) { - let qry = `INSERT INTO mail(senderFk, recipientFk, sender, replyTo, subject, body, plainTextBody, sent, status) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`; - let qryParams = [senderId, recipientId, sender, config.app.senderMail, subject, body, plainTextBody, 1, status]; - - database.pool.query(qry, qryParams, function(error, result) { - if (config.app.debug && error) - console.log('Mail log: ' + error); - }); - } -}; diff --git a/services/mailer/application/route/notification.js b/services/mailer/application/route/notification.js deleted file mode 100644 index 7787cd8a7..000000000 --- a/services/mailer/application/route/notification.js +++ /dev/null @@ -1,288 +0,0 @@ -var express = require('express'); -var router = new express.Router(); -var config = require('../config.js'); -var mail = require('../mail.js'); -var template = require('../template.js'); -var httpRequest = require('request'); -var auth = require('../auth.js'); - -// Auth middleware -var requestToken = function(request, response, next) { - auth.init(request, response, next); -}; - -// Printer setup -router.get('/printer-setup/:clientId', requestToken, function(request, response) { - mail.sendWithTemplate('printer-setup', {clientId: request.params.clientId}, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// Printer setup preview -router.get('/printer-setup/:clientId/preview', requestToken, function(request, response) { - template.get('printer-setup', {clientId: request.params.clientId, isPreview: true}, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - -// Client welcome -router.get('/client-welcome/:clientId', requestToken, function(request, response) { - mail.sendWithTemplate('client-welcome', {clientId: request.params.clientId}, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// Client welcome preview -router.get('/client-welcome/:clientId/preview', requestToken, function(request, response) { - template.get('client-welcome', {clientId: request.params.clientId, isPreview: true}, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - -// Client SEPA CORE -router.get('/sepa-core/:companyId/:clientId', requestToken, function(request, response) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId - }; - - let path = `${request.proxyHost}/print/manuscript/sepa-core/${params.companyId}/${params.clientId}`; - let options = { - url: path, - method: 'GET', - headers: { - 'Authorization': request.headers.authorization - } - } - - let httpStream = httpRequest(options, function(error, httpResponse, body) { - if (error || httpResponse.statusCode != 200) - return response.status(400).json({message: error}); - }); - - if (httpStream) - params.attachments = [{filename: 'sepa-core.pdf', content: httpStream}]; - - mail.sendWithTemplate('sepa-core', params, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// Client SEPA CORE preview -router.get('/sepa-core/:companyId/:clientId/preview', requestToken, function(request, response) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId, - token: request.user.token, - isPreview: true - }; - - template.get('sepa-core', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - -// First debtor letter -router.get('/letter-debtor-st/:companyId/:clientId', requestToken, function(request, response) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId, - token: request.user.token - }; - - let path = `${request.proxyHost}/print/manuscript/letter-debtor/${params.companyId}/${params.clientId}`; - let options = { - url: path, - method: 'GET', - headers: { - 'Authorization': request.user.token - } - } - - let httpStream = httpRequest(options, function(error, httpResponse, body) { - if (error || httpResponse.statusCode != 200) - return response.status(400).json({message: error}); - }); - - if (httpStream) - params.attachments = [{filename: 'extracto.pdf', content: httpStream}]; - - mail.sendWithTemplate('letter-debtor-st', params, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// First debtor letter preview -router.get('/letter-debtor-st/:companyId/:clientId/preview', requestToken, function(request, response) { - template.get('letter-debtor-st', { - clientId: request.params.clientId, - companyId: request.params.companyId, - token: request.user.token, - isPreview: true - }, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - -// Second debtor letter -router.get('/letter-debtor-nd/:companyId/:clientId', requestToken, function(request, response) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId, - token: request.user.token - }; - - let path = `${request.proxyHost}/print/manuscript/letter-debtor/${params.companyId}/${params.clientId}`; - let options = { - url: path, - method: 'GET', - headers: { - 'Authorization': request.headers.authorization - } - } - - let httpStream = httpRequest(options, function(error, httpResponse, body) { - if (error || httpResponse.statusCode != 200) - return response.status(400).json({message: error}); - }); - - if (httpStream) - params.attachments = [{filename: 'extracto.pdf', content: httpStream}]; - - mail.sendWithTemplate('letter-debtor-nd', params, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// Second debtor letter preview -router.get('/letter-debtor-nd/:companyId/:clientId/preview', requestToken, function(request, response) { - template.get('letter-debtor-nd', { - clientId: request.params.clientId, - companyId: request.params.companyId, - token: request.user.token, - isPreview: true - }, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - -// Payment method changes -router.get('/payment-update/:clientId', requestToken, function(request, response) { - mail.sendWithTemplate('payment-update', {clientId: request.params.clientId}, error => { - if (error) - return response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -// Send notification to alias creditInsurance on client deactivate -router.get('/client-deactivate/:clientId', requestToken, function(request, response) { - var params = { - alias: 'creditInsurance', - code: 'clientDeactivate', - bodyParams: { - clientId: request.params.clientId - } - }; - - mail.sendWithTemplate('notification-alias', params, error => { - if (error) - response.status(400).json({message: error.message}); - - return response.json(); - }); -}); - -module.exports = router; - - -// Single user notification -/* router.post('/:recipient/noticeUserSend', function(request, response) { - var params = { - recipient: request.params.recipient, - sender: request.body.sender, - category: request.body.category, - message: request.body.message - }; - - if (params.sender == params.recipient) - return; - - let query = `SELECT COUNT(*) isEnabled - FROM noticeSubscription s - JOIN noticeCategory c ON c.id = s.noticeCategoryFk AND c.isEnabled - WHERE c.keyName = ? AND s.userFk = ?`; - - database.pool.query(query, [params.category, params.recipient, params.sender], (error, result) => { - mail.sendWithTemplate('notification-notice', params, result => { - return response.json(result); - }); - }); -}); */ - -// Send notification to all user subscribed to category -/* router.post('/:category/noticeCategorySend', function(request, response) { - var params = { - sender: request.body.sender, - category: request.params.category, - message: request.body.message - }; - - let query = `SELECT s.userFk id FROM noticeSubscription s JOIN noticeCategory - c ON c.id = s.noticeCategoryFk AND c.isEnabled WHERE c.keyName = ? AND s.userFk != ?`; - - database.pool.query(query, [params.category, params.sender], (error, result) => { - result.forEach(function(user) { - params.recipient = user.id; - - mail.sendWithTemplate('notification-notice', params, result => { - return response.json(result); - }); - }, this); - }); -}); */ - -// Send system notification -/* router.post('/:recipient/noticeSystemSend', function(request, response) { - var params = { - recipient: request.params.recipient, - sender: settings.smtp().auth.id, - category: request.body.category, - message: request.body.message - }; - - mail.sendWithTemplate('notification-notice', params, result => { - return response.json(result); - }); -}); */ \ No newline at end of file diff --git a/services/mailer/application/router.js b/services/mailer/application/router.js deleted file mode 100644 index c8e32b564..000000000 --- a/services/mailer/application/router.js +++ /dev/null @@ -1,49 +0,0 @@ -var express = require('express'); -var router = new express.Router(); -var fs = require('fs'); -var path = require('path'); - -// Mailer default page -router.get('/', function(request, response) { - response.json({}); -}); - -// Notifications -router.use('/notification', require('./route/notification.js')); - -// Serve static images -router.use('/static/:template/:image', function(request, response) { - let imagePath = path.join(__dirname, '/template/', request.params.template, '/image/', request.params.image); - - fs.stat(imagePath, function(error) { - if (error) - return response.json({message: 'Image not found'}); - - let readStream = fs.createReadStream(imagePath); - - readStream.on('open', function() { - let contentType = getContentType(imagePath); - - if (contentType) - response.setHeader('Content-type', getContentType(imagePath)); - - readStream.pipe(response); - }); - }); -}); - -function getContentType(path) { - let types = { - png: 'image/png', - svg: 'image/svg+xml', - gif: 'image/gif', - jpeg: 'image/jpeg', - jpg: 'image/jpeg' - }; - - let extension = path.split('.')[1]; - - return types[extension]; -} - -module.exports = router; diff --git a/services/mailer/application/template.js b/services/mailer/application/template.js deleted file mode 100644 index 1e9c92fde..000000000 --- a/services/mailer/application/template.js +++ /dev/null @@ -1,234 +0,0 @@ -var fs = require('fs'); -var mustache = require('mustache'); -var locale = require('./locale.js'); -var inlineCss = require('inline-css'); -var path = require('path'); - -module.exports = { -/** - * Get template. - * @param {String} template - Template name - * @param {Object} countryCode - Language code - * @param {Object} params - Params - * @param {Object} cb - Callback - */ - get: function(template, params, cb) { - var templatePath = path.join(__dirname, 'template', `${template}`, `index.html`); - var classPath = path.join(__dirname, 'template', `${template}`, `${template}.js`); - var stylePath = path.join(__dirname, 'template', `${template}`, 'style.css'); - - fs.stat(templatePath, (error, stat) => { - if (error) - return cb(new Error('Template ' + template + ' not found')); - - let TemplateClass = require(classPath); - let instance = new TemplateClass(); - - let getRenderedStyles = (error, body) => { - if (error) - return cb(error); - - this.renderStyles(stylePath, body, (error, body) => { - if (error) - return cb(error); - - // Check if has a subject param - params.subject = params.subject || instance.subject; - - if (params.subject == undefined) { - // Try to find a subject from Html source - let title = body.match(new RegExp('(.*?)', 'i')); - - if (title) - params.subject = title[1]; - } - - this.getAttachments(template, body, params.isPreview, (error, result) => { - if (error) - return cb(error); - - cb(null, {recipient: instance.recipient, subject: params.subject, body: result.body, attachments: result.attachments}); - }); - }); - }; - - let getDataCb = () => { - this.render(templatePath, instance, (error, result) => getRenderedStyles(error, result)); - }; - - instance.getData(params, (error, result) => { - if (error) - return cb(error); - - locale.load(template, instance.countryCode, (error, result) => { - if (error) - return cb(error); - - instance._ = result.locale; - instance.isPreview = params.isPreview; - - getDataCb(null, result); - }); - }); - }); - }, - -/** - * Render template - * @param {String} path - Template path - * @param {Object} data - Params - * @param {Object} cb - Callback - */ - render: function(path, data, cb) { - fs.readFile(path, 'utf8', (error, body) => { - // Find matching sub-templates - let regexp = new RegExp(/\{\{\$\.(.*?)\}\}/, 'ig'); - let subTpl = body.match(regexp); - - if (!subTpl) { - mustache.parse(body); - return cb(null, mustache.render(body, data)); - } - - let parentBody = body; - this.renderSub(parentBody, subTpl, data, regexp, (error, body) => { - if (error) - return cb(error); - - mustache.parse(body); - cb(null, mustache.render(body, data)); - }); - }); - }, - -/** - * Render sub-template - * @param {String} body - Raw body - * @param {Object} subTpl - Sub-template name - * @param {Object} data - Params - * @param {Object} regexp - Regexp - * @param {Object} cb - Callback - */ - renderSub: function(body, subTpl, data, regexp, cb) { - let index = 1; - - subTpl.forEach(keyName => { - subTplName = keyName.replace(regexp, '$1'); - - this.get(subTplName, data, (error, result) => { - if (error) - return cb(error); - - let subTplBody = result.body; - body = body.replace(keyName, subTplBody); - - if (index === subTpl.length) - cb(null, body); - - index++; - }); - - }); - }, - -/** - * Render template style. - * @param {String} path - Stylesheet path - * @param {String} body - Rendered html - * @param {Object} cb - Callback - */ - renderStyles: function(stylePath, html, cb) { - // Common components - let comPath = path.join(__dirname, '../', 'static', 'css', 'component.css'); - - fs.readFile(comPath, 'utf8', (error, comCss) => { - fs.stat(stylePath, error => { - if (error) - return cb(new Error('Template stylesheet not found')); - - fs.readFile(stylePath, 'utf8', (error, css) => { - let style = ''; - let body = style + html; - let options = {url: ' '}; - - inlineCss(body, options) - .then(function(body) { - cb(null, body); - }); - }); - }); - }); - }, - -/** - * Get template attachments - * @param {String} template - Template name - * @param {String} body - template body - * @param {Object} cb - Callback - */ - getAttachments: function(template, body, isPreview, cb) { - let attachments = []; - let tplAttachments = body.match(new RegExp('src="cid:(.*?)"', 'ig')); - - if (!tplAttachments) - tplAttachments = {}; - - // Template default attachments - for (var i = 0; i < tplAttachments.length; i++) { - let src = tplAttachments[i].replace('src="cid:', '').replace('"', '').split('/'); - let attachmentTpl = src[0]; - let attachment = src[1]; - - if (isPreview) { - let attachmentPath = `/mailer/static/${attachmentTpl}/${attachment}`; - body = body.replace(tplAttachments[i], `src="${attachmentPath}"`); - } else { - let attachmentPath = path.join(__dirname, 'template', `${attachmentTpl}`, 'image', attachment); - let attachmentName = attachmentTpl + '/' + attachment; - attachments.push({filename: attachmentName, path: attachmentPath, cid: attachmentName}); - } - } - - if (isPreview) - return cb(null, {body: body, attachments: attachments}); - - // Template attachment files - let attachmentsPath = path.join(__dirname, 'template', `${template}`, 'attachment.json'); - - fs.stat(attachmentsPath, (error, stats) => { - if (error) - return cb(null, {body: body, attachments: attachments}); - - let attachObj = require(attachmentsPath); - - for (var i = 0; i < attachObj.length; i++) { - let filename = attachObj[i]; - let attachmentPath = path.join(__dirname, 'template', `${template}`, 'attachment', filename); - - attachments.push({filename: filename, path: attachmentPath, cid: filename}); - } - - this.checkAttachments(attachments, error => { - if (error) - return cb(error); - cb(null, {body: body, attachments: attachments}); - }); - }); - }, - -/** -* Check all template attachments -* @param {Object} attachments - Attachments object -* @param {Object} cb - Callback -*/ - checkAttachments: function(attachments, cb) { - for (var i = 0; i < attachments.length; i++) { - var attachment = attachments[i]; - fs.stat(attachment.path, error => { - if (error) - return cb(new Error(`Could not load attachment file ${attachment.path}`)); - }); - } - cb(); - } -}; \ No newline at end of file diff --git a/services/mailer/application/template/client-welcome/attachment.json b/services/mailer/application/template/client-welcome/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/client-welcome/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/client-welcome/client-welcome.js b/services/mailer/application/template/client-welcome/client-welcome.js deleted file mode 100644 index 7cf435d0e..000000000 --- a/services/mailer/application/template/client-welcome/client-welcome.js +++ /dev/null @@ -1,46 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class ClientWelcome { - getData(params, cb) { - let query = `SELECT - c.id clientId, - CONCAT(w.name, ' ', w.firstName) name, - w.phone AS phone, - CONCAT(wu.name, '@verdnatura.es') AS email, - u.name AS userName, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - JOIN account.user u ON u.id = c.id - LEFT JOIN worker w ON w.id = c.salesPersonFk - LEFT JOIN account.user wu ON wu.id = w.userFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } - - get salesPersonName() { - if (this.name) - return `
    ${this._.salesPersonNameText}: ${this.name}
    `; - } - - get salesPersonPhone() { - if (this.phone) - return `
    ${this._.salesPersonPhoneText}: ${format.phone(this.phone)}
    `; - } - - get salesPersonEmail() { - if (this.email) - return `
    ${this._.salesPersonEmailText}: ` + - `${this.email}
    `; - } -}; diff --git a/services/mailer/application/template/client-welcome/index.html b/services/mailer/application/template/client-welcome/index.html deleted file mode 100644 index 6d25bcd7e..000000000 --- a/services/mailer/application/template/client-welcome/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.dear}}

    -

    {{{_.bodyDescription}}}

    -

    -

    {{_.clientNumber}} {{clientId}}
    -
    {{_.user}} {{userName}}
    -
    {{_.password}} ******** {{{_.passwordResetText}}}
    -

    - -

    {{_.sectionHowToBuyTitle}}

    -

    {{_.sectionHowToBuyDescription}}

    -
      -
    1. {{_.sectionHowToBuyRequeriment1}}
    2. -
    3. {{_.sectionHowToBuyRequeriment2}}
    4. -
    5. {{_.sectionHowToBuyRequeriment3}}
    6. -
    -

    {{_.sectionHowToBuyStock}}

    -

    {{_.sectionHowToBuyDelivery}}

    - -

    {{_.sectionHowToPayTitle}}

    -

    {{_.sectionHowToPayDescription}}

    -
      -
    • {{{_.sectionHowToPayOption1}}}
    • -
    • {{{_.sectionHowToPayOption2}}}
    • -
    - -

    {{_.sectionToConsiderTitle}}

    -

    {{_.sectionToConsiderDescription}}

    - -

    {{_.sectionClaimsPolicyTitle}}

    -

    {{_.sectionClaimsPolicyDescription}}

    -

    {{{_.doubtsText}}}

    -

    - {{{salesPersonName}}} - {{{salesPersonPhone}}} - {{{salesPersonEmail}}} -

    -
    - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/client-welcome/locale/es.json b/services/mailer/application/template/client-welcome/locale/es.json deleted file mode 100644 index 95a903e5c..000000000 --- a/services/mailer/application/template/client-welcome/locale/es.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "subject": "¡Le damos la bienvenida!", - "title": "¡LE DAMOS LA BIENVENIDA!", - "dear": "Estimado cliente,", - "bodyDescription": "Sus datos para poder comprar en la web de verdnatura (
    https://www.verdnatura.es) o en nuestras aplicaciones para iOS y Android (Ver tutorial de uso), son:", - "clientNumber": "Identificador de cliente:", - "user": "Usuario:", - "password": "Contraseña:", - "passwordResetText": "(Haga clic en \"¿Has olvidado tu contraseña?\")", - "sectionHowToBuyTitle": "Cómo hacer un pedido", - "sectionHowToBuyDescription": "Para realizar un pedido en nuestra web, debe configurarlo indicando:", - "sectionHowToBuyRequeriment1": "Si quiere recibir el pedido (por agencia o por nuestro propio reparto) o si lo prefiere recoger en alguno de nuestros almacenes.", - "sectionHowToBuyRequeriment2": "La fecha en la que quiera recibir el pedido (se preparará el día anterior).", - "sectionHowToBuyRequeriment3": "La dirección de entrega o el almacén donde quiera recoger el pedido.", - "sectionHowToBuyStock": "En nuestra web y aplicaciones puedes visualizar el stock disponible de flor cortada, verdes, plantas, complementos y artificial. Tenga en cuenta que dicho stock puede variar en función de la fecha seleccionada al configurar el pedido. Es importante CONFIRMAR los pedidos para que la mercancía quede reservada.", - "sectionHowToBuyDelivery": "El reparto se realiza de lunes a sábado según la zona en la que se encuentre. Por regla general, los pedidos que se entregan por agencia, deben estar confirmados y pagados antes de las 17h del día en que se preparan (el día anterior a recibirlos), aunque esto puede variar si el pedido se envía a través de nuestro reparto y según la zona.", - "sectionHowToPayTitle": "Cómo pagar", - "sectionHowToPayDescription": "Las formas de pago admitidas en Verdnatura son:", - "sectionHowToPayOption1": "Con tarjeta a través de nuestra plataforma web (al confirmar el pedido).", - "sectionHowToPayOption2": "Mediante giro bancario mensual, modalidad que hay que solicitar y tramitar.", - "sectionToConsiderTitle": "Cosas a tener en cuenta", - "sectionToConsiderDescription": "Verdnatura vende EXCLUSIVAMENTE a profesionales, por lo que debe remitirnos el Modelo 036 ó 037, para comprobar que está dado/a de alta en el epígrafe correspondiente al comercio de flores.", - "sectionClaimsPolicyTitle": "POLÍTICA DE RECLAMACIONES", - "sectionClaimsPolicyDescription": "Verdnatura aceptará las reclamaciones que se realicen dentro de los dos días naturales siguientes a la recepción del pedido (incluyendo el mismo día de la recepción). Pasado este plazo no se aceptará ninguna reclamación.", - "doubtsText": "Cualquier duda que le surja, no dude en consultarla, ¡estamos para atenderle!", - "salesPersonNameText": "Soy tu comercial y mi nombre es", - "salesPersonPhoneText": "Teléfono y whatsapp", - "salesPersonEmailText": "Dirección de e-mail" -} \ No newline at end of file diff --git a/services/mailer/application/template/client-welcome/style.css b/services/mailer/application/template/client-welcome/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/default/image/download.svg b/services/mailer/application/template/default/image/download.svg deleted file mode 100644 index b05bc05c8..000000000 --- a/services/mailer/application/template/default/image/download.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/services/mailer/application/template/default/image/preview.svg b/services/mailer/application/template/default/image/preview.svg deleted file mode 100644 index 09a2a6bca..000000000 --- a/services/mailer/application/template/default/image/preview.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/services/mailer/application/template/footer/footer.js b/services/mailer/application/template/footer/footer.js deleted file mode 100644 index 555e70b10..000000000 --- a/services/mailer/application/template/footer/footer.js +++ /dev/null @@ -1,21 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class Footer { - getData(params, cb) { - let query = `SELECT - socialName, - LOWER(ct.code) countryCode - FROM client c - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } -}; diff --git a/services/mailer/application/template/footer/image/action.png b/services/mailer/application/template/footer/image/action.png deleted file mode 100644 index 2cd16c453d66b10611f90ee01deba70edbd7113e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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%0AZQE6(OF&wX?nb&(3F$_|vza?Z{P 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 diff --git a/services/mailer/application/template/footer/image/linkedin.png b/services/mailer/application/template/footer/image/linkedin.png deleted file mode 100644 index 0d191e5aee4fa6b5a86ec10745ca92cfd258c269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 Q0ssI207*qoM6N<$f)8laWdHyG diff --git a/services/mailer/application/template/footer/image/youtube.png b/services/mailer/application/template/footer/image/youtube.png deleted file mode 100644 index 11871deb548d3f160444b577756e872cac2cda45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 zcmV;q4My^bP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0008yNkl2nyY75E>+UE)Eh6H6#iz^ZEL=97taJ>UZD0zIPA2<^AsYp2P3YIp1@R zQHMxs0WJgAfdbGE^a9;L3s3>JflXi?SOu1V4`x=0Yu92rI{@4RCV-Q`dte190vo^% zum$u0T|gg@1BQVsz<1y|@XX9Uk)}u*l(ZmeU(%waF-aYP7#*&+=r{|K2Gel1Q_`HI zvZQ%Q`Gj!uj#qa4&ZHb3l2nwmCTS$46C82;qNJgE!A2#OBt4bXp7PaecRM9Xqj5nd zB<)F>oR8 zvzGRw3w)ewlICh9j&fRIt*J~RP&W}2r7#S_rNUtGddYQ9OG&bxmD2mhRvv`7<+ zbCp>Db9(t1xNl}J0zmqJ8^DPeKKuZd&1^lu-Wc#0IE$o$q@N*dP13XO+t9pQUv-Vujw|DdgW$TG_#w)?IdwsHh|v9i_o2$?d+ZUHTkm-#&@C4@Ff4}f<-5+tk#sI+=tqALZ5Zvjt$ z3kkw@0o#!`Qu-2f_PnH5!0Ut^#{JxE_0CT&K=E6RwbQ^ype+FJYrwZTU_J6y)o_5~ z60m>7T3evQl^BU_H7@s`R)C!#(O@c{$)}OqN#y-kRA)fW1E~FN=ISyOm2O zYsAb} - - - - - - - - -
    -

    {{_.fiscalAddress}}

    -

    {{_.privacy}}

    -

    {{_.privacyLaw}}

    -
    - \ No newline at end of file diff --git a/services/mailer/application/template/footer/locale/es.json b/services/mailer/application/template/footer/locale/es.json deleted file mode 100644 index 1ad532d34..000000000 --- a/services/mailer/application/template/footer/locale/es.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "actionButton": "Visita nuestra Web", - "infoButton": "Ayúdanos a mejorar", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/mailer/application/template/footer/locale/fr.json b/services/mailer/application/template/footer/locale/fr.json deleted file mode 100644 index 4953874ff..000000000 --- a/services/mailer/application/template/footer/locale/fr.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "actionButton": "Visitez notre site web", - "infoButton": "Aidez-nous à améliorer", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/mailer/application/template/footer/style.css b/services/mailer/application/template/footer/style.css deleted file mode 100644 index f35364e8c..000000000 --- a/services/mailer/application/template/footer/style.css +++ /dev/null @@ -1,54 +0,0 @@ -.buttons { - background-color: #FFF; - text-align: center; - width: 100% -} - -.buttons a { - text-decoration: none; - font-size: 18px; - color: #fff -} - -.buttons .btn { - background-color: #333; - min-width: 300px; - height: 72px; - display: inline-block; - text-align: center -} - -.buttons .btn .text { - display: inline-block; - padding-top: 22px -} - -.buttons .btn .icon { - background-color: #95d831; - text-align: center; - padding-top: 22px; - float: right; - height: 50px; - width: 70px -} - -.footer { - background-color: #555; - text-align: center; - padding: 20px 0 -} - -.footer a { - text-decoration: none; - margin-right: 5px -} - -.footer a img { - margin: 0 -} - -.privacy { - padding: 20px 0; - font-size: 10px; - font-weight: 100 -} \ No newline at end of file diff --git a/services/mailer/application/template/header/header.js b/services/mailer/application/template/header/header.js deleted file mode 100644 index a6d1d6194..000000000 --- a/services/mailer/application/template/header/header.js +++ /dev/null @@ -1,21 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class Header { - getData(params, cb) { - let query = `SELECT - c.name AS clientName, - LOWER(ct.code) countryCode - FROM client c - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } -}; diff --git a/services/mailer/application/template/header/image/logo.png b/services/mailer/application/template/header/image/logo.png deleted file mode 100644 index 3c063ae444b501e6d0ac7a9588781efcb31e1e72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30712 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%0AZQE6(OF&wX?nb&(3F$_|vza?Z{P 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 - VerdNatura - diff --git a/services/mailer/application/template/header/locale/es.json b/services/mailer/application/template/header/locale/es.json deleted file mode 100644 index 7a73a41bf..000000000 --- a/services/mailer/application/template/header/locale/es.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/services/mailer/application/template/header/style.css b/services/mailer/application/template/header/style.css deleted file mode 100644 index 4ea8ee36d..000000000 --- a/services/mailer/application/template/header/style.css +++ /dev/null @@ -1,3 +0,0 @@ -.banner img { - width: 100% -} \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-nd/attachment.json b/services/mailer/application/template/letter-debtor-nd/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/letter-debtor-nd/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-nd/index.html b/services/mailer/application/template/letter-debtor-nd/index.html deleted file mode 100644 index aa4379519..000000000 --- a/services/mailer/application/template/letter-debtor-nd/index.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.dear}}

    - -

    {{_.bodyDescription}}

    -

    {{_.termLimits}}

    -

    - {{_.payMethod}} - -

      -
    1. {{_.payMethodOption1}}
    2. -
    3. {{_.payMethodOption2}}
    4. -
    -

    -

    - {{_.legalActions}} -

      -
    1. {{_.legalActionsOption1}}
    2. -
    3. {{_.legalActionsOption2}}
    4. -
    5. {{_.legalActionsOption3}}
    6. -
    -

    - -

    {{_.contact}}

    - -

    {{_.waitingForNews}}

    -

    {{_.conclusion}}

    - -

    -

    -
    {{bankName}}
    -
    {{iban}}
    -
    -
    {{_.accountTransferData}}
    -
    -
    -

    - - {{#isPreview}} - -
    -
    - Ver adjunto -
    - Ver adjunto -
    -
    - - -
    -
    - Descargar adjunto -
    - Descargar PDF -
    -
    - {{/isPreview}} -
    - - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-nd/letter-debtor-nd.js b/services/mailer/application/template/letter-debtor-nd/letter-debtor-nd.js deleted file mode 100644 index be0f996e1..000000000 --- a/services/mailer/application/template/letter-debtor-nd/letter-debtor-nd.js +++ /dev/null @@ -1,39 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class LetterDebtorNd { - getData(params, cb) { - let query = `SELECT - sa.iban, - be.name AS bankName, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - JOIN company AS cny - JOIN supplierAccount AS sa ON sa.id = cny.supplierAccountFk - JOIN bankEntity be ON be.id = sa.bankEntityFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ? AND cny.id = ?`; - - this.clientId = params.clientId; - this.companyId = params.companyId; - this.token = params.token; - - database.pool.query(query, [params.clientId, params.companyId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - - cb(); - }); - } - - get previewAttachments() { - if (this.isPreview) - return `` + - '
    Descargar adjunto
    ' + - 'extracto.pdf
    '; - } -}; diff --git a/services/mailer/application/template/letter-debtor-nd/locale/es.json b/services/mailer/application/template/letter-debtor-nd/locale/es.json deleted file mode 100644 index 1f8790eba..000000000 --- a/services/mailer/application/template/letter-debtor-nd/locale/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "subject": "Reiteración de aviso por saldo deudor", - "title": "AVISO REITERADO", - "dear": "Estimado cliente,", - "bodyDescription": "Nos dirigimos a Vd. nuevamente para informarle que sigue pendiente su deuda con nuestra empresa, tal y como puede comprobar en el extracto adjunto.", - "termLimits": "Dado que los plazos de pago acordados están ampliamente superados, no procede mayor dilación en la liquidación del importe adeudado.", - "payMethod": "Para ello dispone de las siguientes formas de pago:", - "payMethodOption1": "Pago online desde nuestra web", - "payMethodOption2": "Ingreso o transferencia al número de cuenta que detallamos al pie de esta carta, indicando el número de cliente.", - "legalActions": "En caso de no ser atendido este apremio de pago, nos veremos obligados a iniciar las acciones legales que procedan, entre las que están:", - "legalActionsOption1": "Inclusión en ficheros negativos sobre solvencia patrimonial y crédito.", - "legalActionsOption2": "Reclamación judicial", - "legalActionsOption3": "Cesión de deuda a una empresa de gestión de cobro", - "contact": "Para consultas, puede ponerse en contacto con nosotros en el 96 324 21 00.", - "waitingForNews": "En espera de sus noticias", - "conclusion": "Gracias por su atención.", - "accountTransferData": "Datos para transferencia bancaria" -} \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-nd/style.css b/services/mailer/application/template/letter-debtor-nd/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/letter-debtor-st/attachment.json b/services/mailer/application/template/letter-debtor-st/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/letter-debtor-st/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-st/index.html b/services/mailer/application/template/letter-debtor-st/index.html deleted file mode 100644 index a3b07e677..000000000 --- a/services/mailer/application/template/letter-debtor-st/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.dear}}

    - -

    {{_.bodyDescription}}

    -

    {{_.viewExtract}}

    -

    {{_.validData}}

    -

    {{_.payMethod}}

    -

    {{_.conclusion}}

    - -

    -

    -
    {{bankName}}
    -
    {{iban}}
    -
    -
    {{_.accountTransferData}}
    -
    -
    -

    - - {{#isPreview}} - -
    -
    - Ver adjunto -
    - Ver adjunto -
    -
    - - -
    -
    - Descargar adjunto -
    - Descargar PDF -
    -
    - {{/isPreview}} -
    - - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-st/letter-debtor-st.js b/services/mailer/application/template/letter-debtor-st/letter-debtor-st.js deleted file mode 100644 index 43ccb7a25..000000000 --- a/services/mailer/application/template/letter-debtor-st/letter-debtor-st.js +++ /dev/null @@ -1,39 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class LetterDebtorSt { - getData(params, cb) { - let query = `SELECT - sa.iban, - be.name AS bankName, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - JOIN company AS cny - JOIN supplierAccount AS sa ON sa.id = cny.supplierAccountFk - JOIN bankEntity be ON be.id = sa.bankEntityFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ? AND cny.id = ?`; - - this.clientId = params.clientId; - this.companyId = params.companyId; - this.token = params.token; - - database.pool.query(query, [params.clientId, params.companyId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - - cb(); - }); - } - - get previewAttachments() { - if (this.isPreview) - return `` + - '
    Descargar adjunto
    ' + - 'extracto.pdf
    '; - } -}; diff --git a/services/mailer/application/template/letter-debtor-st/locale/es.json b/services/mailer/application/template/letter-debtor-st/locale/es.json deleted file mode 100644 index 558b18753..000000000 --- a/services/mailer/application/template/letter-debtor-st/locale/es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "subject": "Aviso inicial por saldo deudor", - "title": "AVISO INICIAL", - "dear": "Estimado cliente,", - "bodyDescription": "Por el presente escrito le comunicamos que, según nuestros datos contables, su cuenta tiene un saldo pendiente de liquidar.", - "viewExtract": "Le solicitamos compruebe que el extracto adjunto corresponde con los datos de que Vd. dispone. Nuestro departamento de administración le aclarará gustosamente cualquier duda que pueda tener, e igualmente le facilitará cualquier documento que solicite.", - "validData": "Si al comprobar los datos aportados resultaran correctos, le rogamos proceda a regularizar su situación.", - "payMethod": "Si no desea desplazarse personalmente hasta nuestras oficinas, puede realizar el pago mediante transferencia bancaria a la cuenta que figura al pie del comunicado, indicando su número de cliente, o bien puede realizar el pago online desde nuestra página web.", - "conclusion": "De antemano le agradecemos su amable colaboración.", - "accountTransferData": "Datos para transferencia bancaria" -} \ No newline at end of file diff --git a/services/mailer/application/template/letter-debtor-st/style.css b/services/mailer/application/template/letter-debtor-st/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/notification-alias/attachment.json b/services/mailer/application/template/notification-alias/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/notification-alias/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/notification-alias/index.html b/services/mailer/application/template/notification-alias/index.html deleted file mode 100644 index 6e79e1278..000000000 --- a/services/mailer/application/template/notification-alias/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.hello}} #{{alias}}

    -

    {{message}}

    -
    - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/notification-alias/locale/es.json b/services/mailer/application/template/notification-alias/locale/es.json deleted file mode 100644 index 6e39b7f63..000000000 --- a/services/mailer/application/template/notification-alias/locale/es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "subject": "Has recibido una nueva notificación", - "title": "Nueva notificación", - "hello": "Hola,", - "notificationCode": { - "clientDeactivate": { - "subject": "Gestionar baja de contrato", - "message": "El cliente con id %clientId% está clasificado, por favor, gestione la baja del contrato primero." - } - } -} \ No newline at end of file diff --git a/services/mailer/application/template/notification-alias/notification-alias.js b/services/mailer/application/template/notification-alias/notification-alias.js deleted file mode 100644 index 937e1bf8c..000000000 --- a/services/mailer/application/template/notification-alias/notification-alias.js +++ /dev/null @@ -1,29 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var locale = require(path.join(__dirname, '../../locale.js')); - -module.exports = class NotificationAlias { - getData(params, cb) { - this.params = params; - - let query = `SELECT alias, CONCAT(alias, '@verdnatura.es') AS recipient - FROM account.mailAlias - WHERE alias = ?`; - - database.pool.query(query, [params.alias], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } - - get subject() { - return this._.notificationCode[this.params.code].subject; - } - - get message() { - return locale.parseText(this._.notificationCode[this.params.code].message, this.params.bodyParams); - } -}; diff --git a/services/mailer/application/template/notification-alias/style.css b/services/mailer/application/template/notification-alias/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/notification-notice/attachment.json b/services/mailer/application/template/notification-notice/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/notification-notice/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/notification-notice/index.html b/services/mailer/application/template/notification-notice/index.html deleted file mode 100644 index c1e206078..000000000 --- a/services/mailer/application/template/notification-notice/index.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - {{_.subject}} - - - -
    - -
    - VerdNatura -
    - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    Hola, {{recipientName}}

    -

    {{_.bodyDescription}} {{senderName}}:

    -

    "{{message}}"

    -

    {{_.noticeDescription}} '{{categoryName}}'. {{_.unsubscribe}}

    -
    - - - - - - - - - - - -
    -

    {{_.fiscalAddress}}

    -

    {{_.privacy}}

    -

    {{_.privacyLaw}}

    -
    - -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/notification-notice/locale/es.json b/services/mailer/application/template/notification-notice/locale/es.json deleted file mode 100644 index 21cab5f37..000000000 --- a/services/mailer/application/template/notification-notice/locale/es.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "subject": "Has recibido una nueva notificación", - "title": "Nueva notificación", - "hello": "Hola", - "bodyDescription": "Has recibido la siguiente notificación de", - "noticeDescription": "Recibes esta notificación porque estás suscrito a", - "unsubscribe": "Puedes dejar de recibir estas notificaciones desde 'Notificaciones > Configuración' en cualquier aplicación de VerdNatura.", - "actionButton": "Visita nuestra Web", - "infoButton": "Ayúdanos a mejorar", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla _ www.verdnatura.es _ clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/mailer/application/template/notification-notice/notification-notice.js b/services/mailer/application/template/notification-notice/notification-notice.js deleted file mode 100644 index 493261913..000000000 --- a/services/mailer/application/template/notification-notice/notification-notice.js +++ /dev/null @@ -1,28 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); - -module.exports = class NotificationNotice { - getData(params, cb) { - let query = `SELECT - LOWER(ct.code) countryCode, - c.email recipient, - nc.name categoryName, - recipient.name recipientName, - sender.name senderName - FROM client c - JOIN account.user recipient ON recipient.id = c.id - JOIN country ct ON ct.id = c.countryFk - JOIN noticeCategory nc ON nc.keyName = ? - JOIN account.user sender ON sender.id = ? - WHERE c.id = ?`; - database.pool.query(query, [params.category, params.sender, params.recipient], (error, result) => { - if (error || result.length == 0) - return cb({status: 'REJECT', data: {message: 'No data found', error: error}}); - - Object.assign(this, result[0]); - this.message = params.message; - - cb({status: 'ACCEPT', data: {}}); - }); - } -}; diff --git a/services/mailer/application/template/payment-update/attachment.json b/services/mailer/application/template/payment-update/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/payment-update/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/payment-update/index.html b/services/mailer/application/template/payment-update/index.html deleted file mode 100644 index 78d6612c4..000000000 --- a/services/mailer/application/template/payment-update/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.dear}}

    -

    {{_.bodyDescription}}

    -

    -

    {{_.paymentMethod}} {{payMethodName}}
    - {{{paymentDay}}} -

    -

    {{paymentAdvice}}

    -

    {{_.notifyError}}

    -
    - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/payment-update/locale/es.json b/services/mailer/application/template/payment-update/locale/es.json deleted file mode 100644 index 1216dcd99..000000000 --- a/services/mailer/application/template/payment-update/locale/es.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "subject": "Cambios en las condiciones de pago", - "title": "Cambio en las condiciones", - "dear": "Estimado cliente,", - "bodyDescription": "Le informamos que han cambiado las condiciones de pago de su cuenta. A continuación le indicamos las nuevas condiciones:", - "paymentMethod": "Método de pago:", - "paymentDay": "Día de pago:", - "everyMonth": "de cada mes", - "cardPaymentAdvice": "Su modo de pago actual implica que deberá abonar el importe de los pedidos realizados en el mismo día para que se puedan enviar.", - "accountPaymentAdviceBefore": "Su modo de pago actual implica que se le pasará un cargo a la cuenta", - "accountPaymentAdviceAfter": "por el importe pendiente, al vencimiento establecido en las condiciones.", - "notifyError": "En el caso de detectar algún error en los datos indicados o para cualquier aclaración, debe dirigirse a su comercial." -} \ No newline at end of file diff --git a/services/mailer/application/template/payment-update/locale/fr.json b/services/mailer/application/template/payment-update/locale/fr.json deleted file mode 100644 index c8780141b..000000000 --- a/services/mailer/application/template/payment-update/locale/fr.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "subject": "Changement des C.G.V", - "title": "Changement des C.G.V", - "dear": "Chèr client,", - "bodyDescription": "Nous vous informons que les conditions de paiement ont changé. Voici les nouvelles conditions:", - "paymentMethod": "Méthode de paiement:", - "paymentDay": "Date paiement:", - "everyMonth": "de chaque mois", - "cardPaymentAdvice": "Avec votre mode de règlement vous devrez payer le montant des commandes avant son départ.", - "accountPaymentAdviceBefore": "Avec ce mode de règlement nous vous passerons un prélèvement automatique sur votre compte bancaire", - "accountPaymentAdviceAfter": "pour le montant dû, au date à terme établi en nos conditions.", - "notifyError": "Pour tout renseignement contactez votre commercial.." -} \ No newline at end of file diff --git a/services/mailer/application/template/payment-update/payment-update.js b/services/mailer/application/template/payment-update/payment-update.js deleted file mode 100644 index 9d75f20b3..000000000 --- a/services/mailer/application/template/payment-update/payment-update.js +++ /dev/null @@ -1,43 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class PaymentUpdate { - getData(params, cb) { - let query = `SELECT - pm.id payMethodFk, - pm.name payMethodName, - c.dueDay, - c.iban, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - JOIN payMethod pm ON pm.id = c.payMethodFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - - this.clientId = params.clientId; - - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } - - get paymentDay() { - if (this.payMethodFk != 5) - return `
    ${this._.paymentDay} ${this.dueDay} ${this._.everyMonth}
    `; - } - - get paymentAdvice() { - switch (this.payMethodFk) { - case 4: - return `${this._.accountPaymentAdviceBefore} ${format.partialAccountAddress(this.iban)} ${this._.accountPaymentAdviceAfter}`; - case 5: - return this._.cardPaymentAdvice; - } - } -}; diff --git a/services/mailer/application/template/payment-update/style.css b/services/mailer/application/template/payment-update/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/printer-setup/attachment.json b/services/mailer/application/template/printer-setup/attachment.json deleted file mode 100644 index 7294783a8..000000000 --- a/services/mailer/application/template/printer-setup/attachment.json +++ /dev/null @@ -1 +0,0 @@ -["model.ezp"] \ No newline at end of file diff --git a/services/mailer/application/template/printer-setup/attachment/model.ezp b/services/mailer/application/template/printer-setup/attachment/model.ezp deleted file mode 100644 index 297df3d214694a64f677aa40d7305ebddb368e28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9845 zcmeHNe@s=^9sfSKh9||2*4nYk*jse!?10BFM@dJ#3i`0vpitY_kSLZ%eeHwygm-;t z-J%gKNm*tS(`n`!+ib0!u32a6m?If!OGe*lW?J2xVv8HiY(kr?-5+dg_xAbRdkGqLA|nOmjm%q3S;iwKVX~9rJ2ct`=DvXbk6pPdZ8X zCnhhSgbjR{ygPF9yt(<_ydqCtK}q4VlKf@TWXpXUTa~J5TOciFojwVSQ7C(5%OiWG z8@chxnakL`jt^LQ@fkWntLHflI=INIF?af-?ePV#r4-{iUjH~n3!q*MCi$yF;mvg+ zi=J%Ti0mqbi|YcvMHJ?H>ISP!HR$$6j0&`q$d<+yvD&de#U;s->TsPc!zET+##TT& zkx1~z92ac=N=N(GPtg9fXCE*^F$M|!R5b^iqJd^lbs%a)kjE|H6=KX^nB_J5?lOG2 z!6T>~S|KMaK;c*;e+_;(&S|goK$^fh^#}^f?IPcR0L^Ivb=sF2k_mj^ygS+VwoiWW zOs>{Bf1kFYCs(@-^oz*lFfe6vq1Oi74_rl#9#`WD;?FY`sT{`R+q7ZiAT|<5_ zt4cP#7B`0`c{?zX(tq!ho+tc+u#K2s@gGLp=&T;s`EV+KwvpK&=FO=*hrAthZ9q5bQF@KIPJIsw zeGzIQCq2SPuE)X4eMmQQAU^_{`pRa}7Tt`=dKY9L1mV|yKKkGyPb@5e%h1^aU#x47 zY?H@qds7Hr>BE+NH}kp6743{tBr%-f5jYsZKkw<^jxHx#&%uEhKhu^|Az=R{f{1#R@k#`rqe~FnN z@tzy4wS;quG;MA=kge5cB$9so*TvdTQ7CIe{lwRnYQ2!hf!{!hUcmbun0^ROUjxv~ z%E{3<2l>6NAPqME*z7krhnzCnzJBafztUqp6S~DHTuaOxK&$mOh`B|36>}kI=Q^SM zTu(t~aBZZ$fx`9~n-~3&w;wj{%-=*w6I7oKfqw+09K21(_L{QO z&+j$k(eD~NudhRL6ggPXV(PNKuV8EJC6v|g*KA9_gndSG3shRn{ZS$09PixMFi!zK zgZC;UlGA7P&*5qGS1e#bKAO547hZ!oySQ$7dm zd(=&7y^BKu|;!#@w53}Z5DDI22EY&@Xk{?no9jW(0l|{zYTOoHrfz5 z9e~Y)6)pK*>>X?IKCXG;tT`5_d*h2+V`?p-e-FwUX^=MP5!~jl$k2(>kysZ~d^wj- zjJ$5ln7y_>ea25(xts&9 zzt8RsHr0n?o|-^wbkg5^v{yxCyvQba@7owLk4cqiYPjYe&nkUwMP-FPt{=6pWbl}6DrOOK7;vT##@KD_b16O&?L0&P)d+}V2 zH`86eP9*VOjj9>8JxB{aWB#LNb5g$mPi62+*X5y5Fw(+ay%HvB2WOwtf$F#x@hD${^P@h<(oydM&cvC5eiZkL>%&G<{rbQI7z)(o z`5%z*UTyBN+>tX2=5o6%HqS_Svf+~Q%F2qW>he769E0+S`i1F#YrUXN0OhlFWS+z=itNH7ir+hXkVE3nI7=e{Zb+5E60v?FU__Z>5F_Z?e25f zML>^tzr>C-I}?~d-;70^1e+`SVrsFbvoC_kch%>yFAA<>UrZv_boa$6^vCCJUKCz^ zUm*Rd&5KFI;@GW2;appHPx*S@5b=Moc<%jZ74Gr?wKy}RydRk7%=7Gf*bi|JTh`<^ O)c;>mciLg9iT)e;UnVyI diff --git a/services/mailer/application/template/printer-setup/index.html b/services/mailer/application/template/printer-setup/index.html deleted file mode 100644 index ee021281c..000000000 --- a/services/mailer/application/template/printer-setup/index.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - {{_.subject}} - - - -
    -
    - - {{$.header}} - - - -
    -

    {{_.title}}

    -
    - - - -
    -

    {{_.dear}}

    -

    {{_.bodyDescription}}

    -

    {{{_.followGuide}}}

    -

    {{{_.downloadFrom}}}

    - -

    {{_.sectionQLabelTitle}}

    - -

    {{_.sectionQLabelDescription}}

    - -
      -
    1. {{_.sectionQLabelStep1}}
    2. -
    3. {{_.sectionQLabelStep2}}
    4. -
    5. {{_.sectionQLabelStep3}}
    6. -
    7. {{{_.sectionQLabelStep4}}}
    8. -
    9. {{_.sectionQLabelStep5}}
    10. -
    11. {{_.sectionQLabelStep6}}
    12. -
    13. {{_.sectionQLabelStep7}}
    14. -
    15. {{_.sectionQLabelStep8}}
    16. -
    17. {{{_.sectionQLabelStep9}}}
    18. -
    19. {{_.sectionQLabelStep10}}
    20. -
    21. {{_.sectionQLabelStep11}}
    22. -
    23. {{_.sectionQLabelStep12}}
    24. -
    25. {{_.sectionQLabelStep13}}
    26. -
    27. {{_.sectionQLabelStep14}}
    28. -
    29. {{_.sectionQLabelStep15}}
    30. -
    - -

    {{_.sectionHelpTitle}}

    - -

    {{_.sectionHelpDescription}}

    -

    {{{_.sectionHelpDownloadRemoteSupport}}}

    - -

    - {{{salesPersonName}}} - {{{salesPersonPhone}}} - {{{salesPersonEmail}}} -

    -
    - - - - {{$.footer}} - -
    -
    - - \ No newline at end of file diff --git a/services/mailer/application/template/printer-setup/locale/es.json b/services/mailer/application/template/printer-setup/locale/es.json deleted file mode 100644 index 08c28c113..000000000 --- a/services/mailer/application/template/printer-setup/locale/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "subject": "Instalación y configuración de impresora", - "title": "¡GRACIAS POR SU CONFIANZA!", - "dear": "Estimado cliente,", - "bodyDescription": "Siga las intrucciones especificadas en este correo para llevar a cabo la instalación de la impresora.", - "followGuide": "Puede utilizar como guía, el video del montaje del ribon y la cinta https://www.youtube.com/watch?v=qhb0kgQF3o8. También necesitará el QLabel, el programa para imprimir las cintas.", - "downloadFrom": "Puede descargarlo desde este enlace http://ww.godexintl.com/es1/download/downloads/Download/2996", - "sectionQLabelTitle": "Utilización de QLabel", - "sectionQLabelDescription": "Para utilizar el programa de impresión de cintas siga estos pasos:", - "sectionQLabelStep1": "Abra el programa QLabel.", - "sectionQLabelStep2": "Haga clic en el icono de la barra superior superior de la \"carpeta\".", - "sectionQLabelStep3": "Seleccione el archivo plantilla llamado \"model.ezp\".", - "sectionQLabelStep4": "Haga clic encima del texto con el boton secundario del ratón.", - "sectionQLabelStep5": "Elija la primera opcion \"setup\".", - "sectionQLabelStep6": "Cambie el texto para imprimir.", - "sectionQLabelStep7": "Haga clic en el boton \"Ok\".", - "sectionQLabelStep8": "Desplácese con el raton para ver la medida máxima.", - "sectionQLabelStep9": "Haga clic encima del texto con el botón secundario del ratón.", - "sectionQLabelStep10": "Elija la primera opcion \"Setup printer\".", - "sectionQLabelStep11": "Haga clic en la primera pestalla \"Label Setup\".", - "sectionQLabelStep12": "Modifique la propidad \"Paper Height\".", - "sectionQLabelStep13": "Haga clic en el boton \"Ok\".", - "sectionQLabelStep14": "Haga clic sobre el icono de la impresora.", - "sectionQLabelStep15": "Haga clic en \"Print\".", - "sectionHelpTitle": "¿Necesita ayuda?", - "sectionHelpDescription": "Si necesita ayuda, descárguese nuestro programa de soporte para poder conectarnos remotamente a su equipo y hacerle la instalación. Proporciónenos un horario de contacto para atenderle, y contactaremos con usted.", - "sectionHelpDownloadRemoteSupport": "Puede descargarse el programa desde este enlace http://soporte.verdnatura.es.", - "salesPersonNameText": "Soy su comercial y mi nombre es", - "salesPersonPhoneText": "Teléfono y whatsapp", - "salesPersonEmailText": "Dirección de e-mail" -} \ No newline at end of file diff --git a/services/mailer/application/template/printer-setup/printer-setup.js b/services/mailer/application/template/printer-setup/printer-setup.js deleted file mode 100644 index d17add406..000000000 --- a/services/mailer/application/template/printer-setup/printer-setup.js +++ /dev/null @@ -1,46 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class PrinterSetup { - getData(params, cb) { - let query = `SELECT - CONCAT(w.name, ' ', w.firstName) name, - w.phone AS phone, - CONCAT(u.name, '@verdnatura.es') AS email, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - LEFT JOIN worker w ON w.id = c.salesPersonFk - LEFT JOIN account.user u ON u.id = w.userFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - - this.clientId = params.clientId; - this.isPreview = params.isPreview; - - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - }); - } - - get salesPersonName() { - if (this.name) - return `
    ${this._.salesPersonNameText}: ${this.name}
    `; - } - - get salesPersonPhone() { - if (this.phone) - return `
    ${this._.salesPersonPhoneText}: ${format.phone(this.phone)}
    `; - } - - get salesPersonEmail() { - if (this.email) - return `
    ${this._.salesPersonEmailText}: ` + - `${this.email}
    `; - } -}; diff --git a/services/mailer/application/template/printer-setup/style.css b/services/mailer/application/template/printer-setup/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/template/sepa-core/attachment.json b/services/mailer/application/template/sepa-core/attachment.json deleted file mode 100644 index 0637a088a..000000000 --- a/services/mailer/application/template/sepa-core/attachment.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/services/mailer/application/template/sepa-core/index.html b/services/mailer/application/template/sepa-core/index.html deleted file mode 100644 index 1acdae3fc..000000000 --- a/services/mailer/application/template/sepa-core/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - {{_.subject}} - - - - - - \ No newline at end of file diff --git a/services/mailer/application/template/sepa-core/locale/es.json b/services/mailer/application/template/sepa-core/locale/es.json deleted file mode 100644 index 48eaadf3a..000000000 --- a/services/mailer/application/template/sepa-core/locale/es.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "subject": "Solicitud de domiciliación bancaria", - "title": "CAMBIOS EN SU FORMA DE PAGO", - "dear": "Estimado cliente,", - "bodyDescription": "Para poder tramitar su solicitud de cambio de su forma de pago a giro bancario, le adjuntamos los documentos correspondientes a la Ley de Pago, que tiene que cumplimentar y enviarnos.", - "conclusion": "Gracias por su atención." -} \ No newline at end of file diff --git a/services/mailer/application/template/sepa-core/sepa-core.js b/services/mailer/application/template/sepa-core/sepa-core.js deleted file mode 100644 index ec19dd29b..000000000 --- a/services/mailer/application/template/sepa-core/sepa-core.js +++ /dev/null @@ -1,32 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class SepaCore { - getData(params, cb) { - let query = `SELECT - CONCAT(w.name, ' ', w.firstName) name, - w.phone AS phone, - CONCAT(u.name, '@verdnatura.es') AS email, - LOWER(ct.code) countryCode, - c.email recipient - FROM client c - LEFT JOIN worker w ON w.id = c.salesPersonFk - LEFT JOIN account.user u ON u.id = w.userFk - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - - this.clientId = params.clientId; - this.companyId = params.companyId; - this.token = params.token; - - database.pool.query(query, [params.clientId], (error, result) => { - if (error || result.length == 0) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - - cb(); - }); - } -}; diff --git a/services/mailer/application/template/sepa-core/style.css b/services/mailer/application/template/sepa-core/style.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/services/mailer/application/util/format.js b/services/mailer/application/util/format.js deleted file mode 100644 index 52e997a72..000000000 --- a/services/mailer/application/util/format.js +++ /dev/null @@ -1,41 +0,0 @@ -let database = require('../database.js'); - -module.exports = { - - /** - * Devuelve el iban - * @param {String} addressNumber - Dirección de cuenta bancaria - * @param {Object} cb - Callback - */ - accountAddressIban: function(addressNumber, cb) { - database.pool.query('SELECT vn2008.cc_to_iban(?) AS iban', [addressNumber], function(error, result) { - cb(result[0].iban); - }); - }, - - /** - * Obtiene el numero de cuenta completo incluyendo iban - * @param {String} addressNumber - Dirección de cuenta bancaria - * @return {String} Cuenta bancaria formateada - */ - accountAddress: function(addressNumber) { - if (!addressNumber) return; - var formattedAccountAddress = addressNumber.replace(/(.{4})/g, '$1-'); - return formattedAccountAddress.substring(0, formattedAccountAddress.length - 1); - }, - - /** - * Devuelve el numero de cuenta mostrando únicamente los últimos 4 dígitos. - * @param {String} addressNumber - Dirección de cuenta bancaria - * @return {String} Cuenta bancaria formateada - */ - partialAccountAddress: function(addressNumber) { - if (!addressNumber) return; - let address = this.accountAddress(addressNumber); - return address.substring(0, 19).replace(/[0-9]/g, 'X') + address.substring(19, 24); - }, - - phone: function(number) { - return number; - } -}; diff --git a/services/mailer/application/util/system.js b/services/mailer/application/util/system.js deleted file mode 100644 index 358346184..000000000 --- a/services/mailer/application/util/system.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - /** - * Obtiene las variables de entorno - * @param {String} env - Nombre de la variable de entorno - * @return {String} Valor de la variable de entorno - */ - getEnv: function(env) { - return process.env[env]; - } -}; diff --git a/services/mailer/package.json b/services/mailer/package.json deleted file mode 100644 index 17bd23567..000000000 --- a/services/mailer/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "vn-mailer", - "version": "0.0.1", - "description": "Servidor de envío de correos", - "main": "server/server.js", - "dependencies": { - "body-parser": "^1.17.2", - "express": "^4.15.3", - "inline-css": "^2.2.2", - "mustache": "^2.3.0", - "mysql": "^2.13.0", - "nodemailer": "^4.0.1", - "path": "^0.12.7", - "request": "^2.83.0", - "require-yaml": "0.0.1", - "fs-extra": "^5.0.0" - }, - "repository": { - "type": "git", - "url": "https://git.verdnatura.es/salix" - }, - "license": "GPL-3.0" -} diff --git a/services/mailer/server/server.js b/services/mailer/server/server.js deleted file mode 100644 index 27f189211..000000000 --- a/services/mailer/server/server.js +++ /dev/null @@ -1,35 +0,0 @@ -var express = require('express'); -var app = module.exports = express(); -var bodyParser = require('body-parser'); -var config = require('../application/config.js'); -var mail = require('../application/mail.js'); -var database = require('../application/database.js'); -var path = require('path'); - -// Body parser middleware -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({extended: true})); - -app.use('/static', express.static(path.join(__dirname, '../static'))); - -// Load routes -app.use('/', require('../application/router.js')); - -app.start = function(port) { - var listener = app.listen(port ? port : config.app.port, function() { - var servicePath = 'http://' + listener.address().address + ':' + listener.address().port; - mail.init(); - database.init(); - - if (config.app.debug) { - let packageJson = require('../package.json'); - console.log(`Web server ${packageJson.name} listening at: ${servicePath}`); - console.log(`${packageJson.name} service debug mode enabled`); - } - }); - return listener; -}; - -if (require.main === module) { - app.start(); -} diff --git a/services/mailer/static/css/component.css b/services/mailer/static/css/component.css deleted file mode 100644 index 2621048c3..000000000 --- a/services/mailer/static/css/component.css +++ /dev/null @@ -1,217 +0,0 @@ -body { - padding: 0; - margin: 0 -} - -img { - margin: 0 -} - -.wrapper { - background-color: #EEE -} - -.container { - font-family: arial, sans-serif; - max-width: 600px; - min-width: 320px; - font-size: 16px; - margin: 0 auto; - color: #555 -} - -.title { - background-color: #95d831; - text-align: center; - padding: 35px 0 -} - -.title h1 { - font-size: 32px; - color: #333; - margin: 0 -} - -.body { - background-color:#FFF; - padding: 20px -} - -.body a { - color: #8dba25 -} - -.body h1 { - color: #999 -} - -.body h3 { - font-size: 16px -} - -.panel { - border: 1px solid #DDD; - margin-bottom: 10px; - position: relative; - padding:10px -} - -.row { - margin-bottom: 15px; - overflow: hidden -} - -.row .text { - margin-bottom: 5px -} - -.row .control { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -.row .text, .row .control { - overflow: hidden -} - -.row .description { - position: relative; - padding-top: 2px; - overflow: hidden; - font-size: 11px; - display: block; - color: #999 -} - -.row .line { - border-bottom: 1px solid #DDD; - border-right: 1px solid #DDD; - border-left: 1px solid #DDD; - margin-top: 10px; - color: #999; - padding: 5px -} - -.row .description span { - background-color: #FFF; - margin: -5px 0 0 50px; - display: block; - padding: 5px; - float: left -} - -.row:last-child { - margin-bottom: 0 -} - -.row.inline .text { - margin-bottom: 0; - width: 40%; - float: left -} - -.row.inline .control { - font-weight: bold; - padding-left: 20px; - color: #000; - width: 60%; - float: left -} - -.row.inline .description { - position: static; - overflow: visible -} - -.box { - border-top: 1px solid #CCC; - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; - font-weight: bold; - text-align: center; - padding-top: 4px; - width: 25px; - height: 21px; - color: #000; - float: left -} - -.box.crossed { - font-weight: 100; - font-size: 16px -} - -.row .control .box:first-child { - border-left: 1px solid #CCC; -} - -.font.small { - font-size: 10px -} - -.font.verticalAlign { - height: 27px; - line-height: 27px -} - -.font.centered { - height: 27px; - line-height: 27px; - text-align: center -} - -.verticalText { - -moz-transform: rotate(90deg); - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - position: absolute; - text-align: center; - font-size: .65em; - width: 200px; - right: -115px; - top: 50% -} - -.attachment { - overflow: hidden; - margin-top: 10px -} - -.attachment-icon { - float: left -} - -.attachment span { - padding: 16px 0 0 10px; - float: left -} - -.columns { - overflow: hidden -} - -.columns .size100 { - width: 100%; - float: left -} - -.columns .size75 { - width: 75%; - float: left -} - -.columns .size50 { - width: 50%; - float: left -} - -.columns .size33 { - width: 33.33%; - float: left -} - -.columns .size25 { - width: 25%; - float: left -} \ No newline at end of file diff --git a/services/nginx/nginx.development.mst b/services/nginx/nginx.development.mst index 55adc8645..0fc3dbd1c 100644 --- a/services/nginx/nginx.development.mst +++ b/services/nginx/nginx.development.mst @@ -31,9 +31,6 @@ http { } {{/services}} - location ~ ^/mailer(?:/(.*)?)$ { - proxy_pass http://127.0.0.1:{{defaultPort}}/$1$is_args$args; - } location ~ ^/static(?:/(.*)?)$ { proxy_pass http://127.0.0.1:{{devServerPort}}/$1$is_args$args; } diff --git a/services/nginx/nginx.mst b/services/nginx/nginx.mst index ef57f0afc..39d72115d 100644 --- a/services/nginx/nginx.mst +++ b/services/nginx/nginx.mst @@ -14,10 +14,6 @@ server { } {{/services}} - location ~ ^/mailer(?:/(.*))?$ { - resolver 127.0.0.11; - proxy_pass http://mailer:{{defaultPort}}/$1$is_args$args; - } location ~ ^/static(?:/(.*))?$ { alias /salix/dist/$1; autoindex on; diff --git a/services/print/.gitignore b/services/print/.gitignore deleted file mode 100644 index 3c3629e64..000000000 --- a/services/print/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/services/print/Dockerfile b/services/print/Dockerfile deleted file mode 100644 index 79ec29c2f..000000000 --- a/services/print/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM vn-loopback:latest - -COPY print /app -WORKDIR /app -CMD ["pm2-docker", "./server/server.js"] diff --git a/services/print/application/auth.js b/services/print/application/auth.js deleted file mode 100644 index b314397ad..000000000 --- a/services/print/application/auth.js +++ /dev/null @@ -1,80 +0,0 @@ -var database = require('./database.js'); -let config = require('./config.js'); - -module.exports = { - -/** - * Initialize auth - * @param {Object} request - Request object - * @param {Object} response - Response object - * @param {Object} next - Next object - */ - init: function(request, response, next) { - this.request = request; - this.response = response; - this.next = next; - - this.validateToken(); - }, - -/** - * Validate auth token - */ - validateToken: async function() { - let query = 'SELECT userId, ttl, created FROM salix.AccessToken WHERE id = ?'; - - try { - let [result] = await database.pool.query(query, [this.getToken()]); - let token = result[0]; - - if (result.length == 0) - throw new Error('Invalid token'); - - if (this.isTokenExpired(token.created, token.ttl)) - throw new Error('Token expired'); - - // Set proxy host - let proxy = config.proxy; - - if (!proxy) - proxy = { - host: 'localhost', - port: 80 - }; - - this.request.proxyHost = `http://${proxy.host}:${proxy.port}`; - this.request.user = { - id: token.userId, - token: this.getToken() - }; - this.next(); - } catch (e) { - this.response.status(401).send({message: e.message}); - this.next(e); - } - }, - -/** - * Get request token - * @return {String} Token - */ - getToken: function() { - return this.request.headers.authorization || this.request.query.token; - }, - -/** - * Checks if the token has expired - * @param {String} created - Creation date - * @param {Integer} ttl - Ttl seconds - * @return {Boolean} True if the token has expired - */ - isTokenExpired: function(created, ttl) { - let date = new Date(created); - let currentDate = new Date(); - - date.setSeconds(date.getSeconds() + ttl); - - if (currentDate > date) - return true; - } -}; \ No newline at end of file diff --git a/services/print/application/config.js b/services/print/application/config.js deleted file mode 100644 index e1b9eb8d0..000000000 --- a/services/print/application/config.js +++ /dev/null @@ -1,30 +0,0 @@ -require('require-yaml'); -const fs = require('fs-extra'); -const package = require('../package.json'); -let configPath = `/config/${package.name}`; -let nginxConfigPath = '/config/nginx'; - -let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; - -if (env === 'development') { - configPath = `${__dirname}/config`; - nginxConfigPath = '../../nginx'; -} - -let config = require(`${configPath}/datasources.json`); -let configEnvFile = `${configPath}/datasources.${env}.json`; - -if (fs.existsSync(configEnvFile)) - Object.assign(config, require(configEnvFile)); - -let proxyConf = require(`${nginxConfigPath}/config.yml`); -let proxyEnvFile = `${nginxConfigPath}/config.${env}.yml`; - -if (fs.existsSync(proxyEnvFile)) - Object.assign(proxyConf, require(proxyEnvFile)); - -config.proxy = proxyConf; -config.package = package; -config.env = env; - -module.exports = config; \ No newline at end of file diff --git a/services/print/application/config/datasources.json b/services/print/application/config/datasources.json deleted file mode 100644 index 8f8a4228e..000000000 --- a/services/print/application/config/datasources.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "app": { - "port": 3000, - "debug": false, - "defaultLanguage": "es" - }, - "mysql": { - "host": "localhost", - "port": 3306, - "database": "vn", - "user": "root", - "password": "root" - }, - "pdf": { - "format": "A4", - "border": "1.5cm" - } -} \ No newline at end of file diff --git a/services/print/application/database.js b/services/print/application/database.js deleted file mode 100644 index a27fbab55..000000000 --- a/services/print/application/database.js +++ /dev/null @@ -1,16 +0,0 @@ -var mysql = require('mysql2/promise'); -let config = require('./config.js'); - -module.exports = { - /** - * Pool instance - */ - pool: null, - - /** - * Start database pool - */ - init: function() { - this.pool = mysql.createPool(config.mysql); - } -}; \ No newline at end of file diff --git a/services/print/application/locale.js b/services/print/application/locale.js deleted file mode 100644 index f9737fea3..000000000 --- a/services/print/application/locale.js +++ /dev/null @@ -1,42 +0,0 @@ -var fs = require('fs'); -var config = require('./config.js'); -var path = require('path'); - -module.exports = { -/** - * Returns template locale - * @param {String} template - Template name - * @param {String} countryCode - Language code - * @param {Object} cb - Callback - */ - load: function(template, countryCode, cb) { - var localeFile = path.join(__dirname, 'template', `${template}`, 'locale', `${countryCode}.json`); - var defaultLocaleFile = path.join(__dirname, 'template', `${template}`, 'locale', `${config.app.defaultLanguage}.json`); - - fs.stat(localeFile, (error, stats) => { - if (error) { - fs.stat(defaultLocaleFile, (error, stats) => { - if (error) - return cb(new Error('Translation not found for template ' + template)); - - cb(null, {locale: require(defaultLocaleFile)}); - }); - } else { - cb(null, {locale: require(localeFile)}); - } - }); - }, - -/** - * Parse locale text - * @param {String} text - Locale text - * @param {Object} params - Locale params - * @return {String} - Returns parsed text - */ - parseText: function(text, params) { - for (var key in params) { - text = text.replace(`%${key}%`, params[key]); - } - return text; - } -}; diff --git a/services/print/application/route/manuscript.js b/services/print/application/route/manuscript.js deleted file mode 100644 index 1facac2be..000000000 --- a/services/print/application/route/manuscript.js +++ /dev/null @@ -1,171 +0,0 @@ -var express = require('express'); -var router = new express.Router(); -var template = require('../template.js'); -var config = require('../config.js'); -var pdf = require('html-pdf'); -var path = require('path'); -var auth = require('../auth.js'); - -// Auth middleware -var requestToken = function(request, response, next) { - auth.init(request, response, next); -}; - -// Sepa core -router.get('/sepa-core/:companyId/:clientId', requestToken, function(request, response, next) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId - }; - - template.get('sepa-core', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - pdf.create(result.body, config.pdf).toStream(function(error, stream) { - if (error) - throw Error(error); - - response.setHeader('Content-Disposition', 'attachment; filename="sepa-core.pdf"'); - response.setHeader('Content-type', 'application/pdf'); - stream.pipe(response); - }); - }); -}); - -// Sepa core html preview -router.get('/sepa-core/:companyId/:clientId/preview', requestToken, function(request, response, next) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId, - isPreview: true - }; - - template.get('sepa-core', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - - // Debtor letter -router.get('/letter-debtor/:companyId/:clientId', requestToken, function(request, response, next) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId - }; - - template.get('letter-debtor', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - pdf.create(result.body, config.pdf).toStream(function(error, stream) { - if (error) - throw Error(error); - - response.setHeader('Content-Disposition', 'attachment; filename="extracto.pdf"'); - response.setHeader('Content-type', 'application/pdf'); - stream.pipe(response); - }); - }); -}); - - // Debtor letter html preview -router.get('/letter-debtor/:companyId/:clientId/preview', requestToken, function(request, response, next) { - let params = { - clientId: request.params.clientId, - companyId: request.params.companyId, - isPreview: true - }; - - template.get('letter-debtor', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - response.send(result.body); - }); -}); - - // Delivery note -router.get('/delivery-note/:ticketId/preview', requestToken, function(request, response) { - let params = { - ticketId: request.params.ticketId, - isPreview: true - }; - - template.get('delivery-note', params, (error, result) => { - if (error) - return response.status(400).json(error); - - response.send(result.body); - }); -}); - -router.get('/delivery-note/:ticketId', requestToken, function(request, response, next) { - let params = { - ticketId: request.params.ticketId - }; - - template.get('delivery-note', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - pdf.create(result.body, config.pdf).toStream(function(error, stream) { - if (error) - throw Error(error); - - stream.pipe(response); - }); - }); -}); - -router.get('/claim-pickup/:claimId/preview', requestToken, function(request, response) { - let params = { - claimId: request.params.claimId, - isPreview: true - }; - - template.get('claim-pickup', params, (error, result) => { - if (error) - return response.status(400).json(error); - - response.send(result.body); - }); -}); - -router.get('/claim-pickup/:claimId', requestToken, function(request, response) { - let params = { - claimId: request.params.claimId - }; - - template.get('claim-pickup', params, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - pdf.create(result.body, config.pdf).toStream(function(error, stream) { - if (error) - throw Error(error); - stream.pipe(response); - }); - }); -}); - -module.exports = router; - - // store pdf -/* router.post('/sepa-core/:clientId', function(request, response, next) { - template.get('sepa-core', {recipient: request.params.clientId}, (error, result) => { - if (error) - return response.status(400).json({message: error.message}); - - pdf.create(result.body).toFile('./tmp/test.pdf', function(error, result) { - if (error) - return response.status(400).json({message: error}); - - console.log(result); - return response.json(); - }); - }); - }); - */ diff --git a/services/print/application/router.js b/services/print/application/router.js deleted file mode 100644 index a9ebe1acf..000000000 --- a/services/print/application/router.js +++ /dev/null @@ -1,31 +0,0 @@ -var express = require('express'); -var router = new express.Router(); -var fs = require('fs'); -var path = require('path'); - -// Default page -router.get('/', function(request, response) { - response.json({}); -}); - -// Manuscripts -router.use('/manuscript', require('./route/manuscript.js')); - -// Serve static images -router.use('/static/:template/:image', function(request, response) { - let imagePath = path.join(__dirname, '/template/', request.params.template, '/image/', request.params.image); - - fs.stat(imagePath, function(error) { - if (error) - return response.json({message: 'Image not found'}); - - let readStream = fs.createReadStream(imagePath); - - readStream.on('open', function() { - readStream.pipe(response); - }); - }); -}); - - -module.exports = router; diff --git a/services/print/application/template.js b/services/print/application/template.js deleted file mode 100644 index 67ff4af9b..000000000 --- a/services/print/application/template.js +++ /dev/null @@ -1,256 +0,0 @@ -var fs = require('fs'); -var mustache = require('mustache'); -var locale = require('./locale.js'); -var inlineCss = require('inline-css'); -var path = require('path'); - -module.exports = { - -/** - * Get template. - * @param {String} template - Template name - * @param {Object} countryCode - Language code - * @param {Object} params - Params - * @param {Object} cb - Callback - */ - get: function(template, params, cb) { - var templatePath = path.join(__dirname, 'template', `${template}`, `index.html`); - var classPath = path.join(__dirname, 'template', `${template}`, `${template}.js`); - var stylePath = path.join(__dirname, 'template', `${template}`, 'style.css'); - - fs.stat(templatePath, (error, stat) => { - if (error) - return cb(new Error('Template ' + template + ' not found')); - - let TemplateClass = require(classPath); - let instance = new TemplateClass(); - - let getRenderedStyles = (error, body) => { - if (error) - return cb(error); - - this.renderStyles(stylePath, body, (error, body) => { - if (error) - return cb(error); - - // Check if has a subject param - params.subject = params.subject || instance.subject; - - if (params.subject == undefined) { - // Try to find a subject from Html source - let title = body.match(new RegExp('(.*?)', 'i')); - - if (title) - params.subject = title[1]; - } - - this.renderImages(template, body, params.isPreview, (error, body) => { - if (error) - return cb(error); - - cb(null, {body: body}); - }); - }); - }; - - let getDataCb = () => { - this.render(templatePath, params, instance, (error, result) => getRenderedStyles(error, result)); - }; - - instance.getData(params, (error, result) => { - if (error) - return cb(error); - - locale.load(template, instance.countryCode, (error, result) => { - if (error) - return cb(error); - - instance._ = result.locale; - instance.isPreview = params.isPreview; - getDataCb(null, result); - }); - }); - }); - }, - -/** - * Render template - * @param {String} path - Template path - * @param {Object} data - Params - * @param {Object} cb - Callback - */ - render: function(path, params, data, cb) { - fs.readFile(path, 'utf8', (error, body) => { - // Find matching sub-templates - let regexp = new RegExp(/\{\{\$\.(.*?)\}\}/, 'ig'); - let subTpl = body.match(regexp); - - if (!subTpl) { - mustache.parse(body); - return cb(null, mustache.render(body, data)); - } - - let parentBody = body; - this.renderSub(parentBody, subTpl, data, regexp, (error, body) => { - if (error) - return cb(error); - - mustache.parse(body); - cb(null, mustache.render(body, data)); - }); - }); - }, - - renderSub: function(body, subTpl, params, regexp, cb) { - let index = 1; - - subTpl.forEach(keyName => { - subTplName = keyName.replace(regexp, '$1'); - - this.get(subTplName, params, (error, result) => { - if (error) - return cb(error); - - let subTplBody = result.body; - body = body.replace(keyName, subTplBody); - - if (index === subTpl.length) - cb(null, body); - - index++; - }); - - }); - }, - -/** - * Render template style. - * @param {String} path - Stylesheet path - * @param {String} body - Rendered html - * @param {Object} cb - Callback - */ - renderStyles: function(stylePath, html, cb) { - // Common components - let comPath = path.join(__dirname, '../', 'static', 'css', 'common.css'); - - fs.readFile(comPath, 'utf8', (error, comCss) => { - fs.stat(stylePath, error => { - if (error) - return cb(new Error('Template stylesheet not found')); - - fs.readFile(stylePath, 'utf8', (error, css) => { - let style = ''; - let body = style + html; - let options = {url: ' '}; - - inlineCss(body, options) - .then(function(body) { - cb(null, body); - }); - }); - }); - }); - }, - -/** - * Render template images - * @param {String} template - Template name - * @param {String} body - template body - * @param {Object} cb - Callback - */ - renderImages: function(template, body, isPreview, cb) { - let tplImages = body.match(new RegExp('src="cid:(.*?)"', 'ig')); - - if (!tplImages) - tplImages = {}; - - // Template default attachments - for (var i = 0; i < tplImages.length; i++) { - let src = tplImages[i].replace('src="cid:', '').replace('"', '').split('/'); - let attachmentTpl = src[0]; - let attachment = src[1]; - - if (isPreview) { - let imagePath = `/print/static/${attachmentTpl}/${attachment}`; - body = body.replace(tplImages[i], `src="${imagePath}"`); - } else { - let imagePath = path.join(__dirname, 'template', attachmentTpl, 'image', attachment); - body = body.replace(tplImages[i], `src="file:///${imagePath}"`); - } - } - - cb(null, body); - }, - - /** - * Get template attachments - * @param {String} template - Template name - * @param {String} body - template body - * @param {Object} cb - Callback - */ - getAttachments: function(template, body, isPreview, cb) { - let attachments = []; - let tplAttachments = body.match(new RegExp('src="cid:(.*?)"', 'ig')); - - if (!tplAttachments) - tplAttachments = {}; - - // Template default attachments - for (var i = 0; i < tplAttachments.length; i++) { - let src = tplAttachments[i].replace('src="cid:', '').replace('"', '').split('/'); - let attachmentTpl = src[0]; - let attachment = src[1]; - - if (isPreview) { - let attachmentPath = `/mailer/static/${attachmentTpl}/${attachment}`; - body = body.replace(tplAttachments[i], `src="${attachmentPath}"`); - } else { - let attachmentPath = path.join(__dirname, 'template', `${attachmentTpl}`, 'image', attachment); - let attachmentName = attachmentTpl + '/' + attachment; - attachments.push({filename: attachmentName, path: attachmentPath, cid: attachmentName}); - } - } - - if (isPreview) - return cb(null, {body: body, attachments: attachments}); - - // Template attachment files - let attachmentsPath = path.join(__dirname, 'template', `${template}`, 'attachment.json'); - - fs.stat(attachmentsPath, (error, stats) => { - if (error) - return cb(null, {body: body, attachments: attachments}); - - let attachObj = require(attachmentsPath); - - for (var i = 0; i < attachObj.length; i++) { - let filename = attachObj[i]; - let attachmentPath = path.join(__dirname, 'template', `${template}`, 'attachment', filename); - - attachments.push({filename: filename, path: attachmentPath, cid: filename}); - } - - this.checkAttachments(attachments, error => { - if (error) - return cb(error); - cb(null, {body: body, attachments: attachments}); - }); - }); - }, - -/** -* Check all template attachments -* @param {Object} attachments - Attachments object -* @param {Object} cb - Callback -*/ - checkAttachments: function(attachments, cb) { - for (var i = 0; i < attachments.length; i++) { - var attachment = attachments[i]; - fs.stat(attachment.path, error => { - if (error) - return cb(new Error(`Could not load attachment file ${attachment.path}`)); - }); - } - cb(); - } -}; \ No newline at end of file diff --git a/services/print/application/template/claim-pickup/claim-pickup.js b/services/print/application/template/claim-pickup/claim-pickup.js deleted file mode 100644 index 43641a633..000000000 --- a/services/print/application/template/claim-pickup/claim-pickup.js +++ /dev/null @@ -1,56 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -let strftime = require('strftime'); - -module.exports = class ClaimPickup { - async getData(params, cb) { - let qryData = ` - SELECT - c.id clientId, - cl.id claimId, - LOWER(ct.code) AS countryCode, - c.email AS recipient, - c.socialName, - c.name AS clientName, - c.street, - c.postcode, - c.city, - c.fi, - p.name AS province, - ct.country - FROM claim cl - JOIN client c ON c.id = cl.clientFk - JOIN country ct ON ct.id = c.countryFk - LEFT JOIN province p ON p.id = c.provinceFk - WHERE cl.id = ?`; - - let qryLines = ` - SELECT - s.id, - s.quantity, - s.concept, - cb.quantity claimQuantity - FROM claimBeginning cb - JOIN sale s ON s.id = cb.saleFk - WHERE cb.claimFk = ?`; - - try { - let [data] = await database.pool.query(qryData, [params.claimId]); - - if (!data) - throw new Error('No body data found'); - - let [lines] = await database.pool.query(qryLines, [params.claimId]); - - Object.assign(this, data[0]); - this.lines = lines; - cb(); - } catch (e) { - cb(e); - } - } - - get currentDate() { - return strftime('%d-%m-%Y', new Date()); - } -}; diff --git a/services/print/application/template/claim-pickup/image/action.png b/services/print/application/template/claim-pickup/image/action.png deleted file mode 100644 index 2cd16c453d66b10611f90ee01deba70edbd7113e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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%0AZQE6(OF&wX?nb&(3F$_|vza?Z{P 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 diff --git a/services/print/application/template/claim-pickup/image/linkedin.png b/services/print/application/template/claim-pickup/image/linkedin.png deleted file mode 100644 index 0d191e5aee4fa6b5a86ec10745ca92cfd258c269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/services/print/application/template/claim-pickup/image/pinterest.png b/services/print/application/template/claim-pickup/image/pinterest.png deleted file mode 100644 index 4d7b28ef81877be92afd73b3df221fbbcd23f7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3807 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 Q0ssI207*qoM6N<$f)8laWdHyG diff --git a/services/print/application/template/claim-pickup/image/youtube.png b/services/print/application/template/claim-pickup/image/youtube.png deleted file mode 100644 index 11871deb548d3f160444b577756e872cac2cda45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 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 - - - {{_.subject}} - - - - - {{$.header}} - - - -
    -
    -
    -
    -

    {{_.title}}

    -
    -
    {{_.claim}}:
    -
    {{claimId}}
    -
    -
    -
    {{_.client}}:
    -
    {{clientId}}
    -
    -
    -
    {{_.date}}:
    -
    {{currentDate}}
    -
    -
    -
    -
    -
    -
    {{_.clientData}}
    -

    - {{clientName}} -

    -
    - {{street}} -
    -
    - {{postcode}}, {{city}} ({{province}}) -
    -
    - {{country}} -
    -
    -
    -
    - -
    -
    -
    {{_.quantity}}
    -
    {{_.claims}}
    -
    {{_.reference}}
    -
    {{_.concept}}
    -
    - {{#lines}} -
    -
    {{quantity}} 
    -
    {{claimQuantity}} 
    -
    {{id}} 
    -
    {{concept}} 
    -
    - {{/lines}} -
    -
    -
     
    -
    -
    -
    -

    {{clientName}}

    -
    -
    -
    -
     
    -
    -

    - {{_.agencyContact}} -

    -

    - {{{_.agencyContactData}}} -

    -
    - - - - {{$.footer}} - - - \ No newline at end of file diff --git a/services/print/application/template/claim-pickup/locale/es.json b/services/print/application/template/claim-pickup/locale/es.json deleted file mode 100644 index 90b124beb..000000000 --- a/services/print/application/template/claim-pickup/locale/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": "ORD. RECOGIDA", - "claim": "RECLAMACIÓN", - "client": "CLIENTE", - "date": "DATE", - "clientData": "Datos del cliente", - "quantity": "Cantidad", - "claims": "Reclama", - "reference": "Referencia", - "concept": "Concepto", - "agencyContact": "Para agilizar su recogida, por favor, póngase en contacto con la oficina de integrados.", - "agencyContactData": "Tlf: 96 166 77 88 - Ana Gómez (agomezf@integra2.es)", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/print/application/template/claim-pickup/style.css b/services/print/application/template/claim-pickup/style.css deleted file mode 100644 index 5b1e628d6..000000000 --- a/services/print/application/template/claim-pickup/style.css +++ /dev/null @@ -1,22 +0,0 @@ -img { - margin: 0 -} - -.body { - font-family: arial, sans-serif; - max-width: 90%; - margin: 0 auto; - font-size: 14px; - color: #000 -} - -body .title { - text-align: center; - padding-bottom: 20px -} - -body .title h1 { - font-size: 16px; - color: #333; - margin: 0 -} \ No newline at end of file diff --git a/services/print/application/template/delivery-note/delivery-note.js b/services/print/application/template/delivery-note/delivery-note.js deleted file mode 100644 index 452bf58be..000000000 --- a/services/print/application/template/delivery-note/delivery-note.js +++ /dev/null @@ -1,179 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class DeliveryNote { - async getData(params, cb) { - let qryHead = `SELECT - c.id clientId, - c.name clientName, - c.socialName, - c.street, - c.fi, - c.postcode, - c.city, - p.name province, - ct.country, - a.street, - a.city, - a.postalCode, - t.shipped, - tg.gestdoc_id AS docId, - g.odbc_date AS docDate - FROM ticket t - JOIN client c ON c.id = t.clientFk - JOIN address a ON a.id = t.addressFk - JOIN province p ON p.id = a.provinceFk - JOIN country ct ON ct.id = p.countryFk - LEFT JOIN vn2008.tickets_gestdoc tg ON tg.Id_Ticket = t.id - LEFT JOIN vn2008.gestdoc g ON g.id = tg.gestdoc_id - WHERE t.id = ?`; - - let qryBuys = `SELECT - s.id, - s.itemFk, - s.concept, - s.quantity, - s.price, - s.price - SUM(IF(tcs.tarifa_componentes_series_id = 6, - sc.value, - 0)) netPrice, - s.discount, - i.size, - i.stems, - ic.type taxType, - i.category, - it.id itemTypeId, - o.code AS origin, - i.inkFk, - s.ticketFk, - ita.tag1, - ita.val1, - ita.tag2, - ita.val2, - ita.tag3, - ita.val3 - FROM sale s - LEFT JOIN saleComponent sc ON sc.saleFk = s.id - LEFT JOIN bi.tarifa_componentes tc ON sc.componentFk = tc.Id_Componente - LEFT JOIN bi.tarifa_componentes_series tcs ON tcs.tarifa_componentes_series_id = tc.tarifa_componentes_series_id - LEFT JOIN item i ON i.id = s.itemFk - LEFT JOIN ticket t ON t.id = s.ticketFk - LEFT JOIN origin o ON o.id = i.originFk - INNER JOIN supplier sp ON sp.id = t.companyFk - INNER JOIN itemType it ON it.id = i.typeFk - LEFT JOIN - (SELECT * - FROM - (SELECT tt.countryFk, tcc.taxClassFk, tc.type - FROM taxClassCode tcc - JOIN taxCode tc ON tc.id = tcc.taxCodeFk - JOIN taxType tt ON tt.id = tc.taxTypeFk - WHERE tcc.effectived <= '2018-01-29 13:00:00' - ORDER BY tcc.effectived DESC) tx - GROUP BY tx.countryFk, tx.taxClassFk) ic ON ic.countryFk = sp.countryFk - AND ic.taxClassFk = i.taxClassFk - JOIN vn.itemTagArranged ita ON ita.itemFk = s.itemFk - WHERE s.ticketFk = ? - GROUP BY s.id - ORDER BY (it.isPackaging), s.concept, s.itemFk`; - let qryTax = 'CALL vn.ticketGetTaxAdd(?)'; - let qryPackaging = `SELECT - t.*, i.name, p.itemFk - FROM vn.ticketPackaging t - JOIN vn.packaging p ON p.id = t.packagingFk - JOIN vn.item i ON i.id = p.itemFk - WHERE t.ticketFk = ? - ORDER BY itemFk`; - try { - let [headDetail] = await database.pool.query(qryHead, [params.ticketId]); - Object.assign(this, headDetail[0]); - - if (!headDetail) - throw new Error('No head data found'); - - let bodyDetail = await database.pool.query(qryBuys, [params.ticketId]); - this.buys = bodyDetail[0]; - - if (!bodyDetail) - throw new Error('No body data found'); - - let [ticketTax] = await database.pool.query(qryTax, [params.ticketId]); - this.ticketTax = ticketTax[0]; - - let packaging = await database.pool.query(qryPackaging, [params.ticketId]); - this.packaging = packaging[0]; - - this.ticketId = params.ticketId; - this.shipped = format.date(this.shipped); - this.docDate = format.date(this.docDate, '%d-%m-%Y %T'); - - this.setSubTotal(); - this.formatBuys(); - this.formatPackages(); - this.setTotalTaxes(); - this.setTotal(); - this.formatTaxes(); - cb(); - } catch (e) { - cb(e); - } - } - - get hasPackages() { - if (this.packaging.length) - return true; - } - - setSubTotal() { - this.subTotal = 0.00; - - this.buys.forEach(buy => { - buy.netPrice = buy.quantity * buy.price * (1 - buy.discount / 100); - this.subTotal += buy.netPrice; - }); - } - - formatBuys() { - this.buys.forEach(buy => { - buy.itemFk = format.code(buy.itemFk, '000000'); - buy.quantity = parseInt(buy.quantity); - buy.price = format.currency(buy.price); - buy.discount = format.currency(buy.discount); - buy.netPrice = format.currency(buy.netPrice); - }); - - this.subTotal = format.currency(this.subTotal); - } - - formatPackages() { - this.packaging.forEach(item => { - item.itemFk = format.code(item.itemFk, '000000'); - }); - } - - setTotalTaxes() { - this.totalBase = 0.00; - this.totalTax = 0.00; - - this.ticketTax.forEach(tax => { - this.totalBase += parseFloat(tax.Base); - this.totalTax += parseFloat(tax.tax); - }); - } - - setTotal() { - this.total = format.currency(this.totalBase + this.totalTax); - } - - formatTaxes() { - this.ticketTax.forEach(tax => { - tax.Base = format.currency(tax.Base); - tax.vatPercent = format.percent(tax.vatPercent); - tax.tax = format.currency(tax.tax); - }); - - this.totalBase = format.currency(this.totalBase); - this.totalTax = format.currency(this.totalTax); - } -}; diff --git a/services/print/application/template/delivery-note/image/action.png b/services/print/application/template/delivery-note/image/action.png deleted file mode 100644 index 2cd16c453d66b10611f90ee01deba70edbd7113e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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%0AZQE6(OF&wX?nb&(3F$_|vza?Z{P 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 diff --git a/services/print/application/template/delivery-note/image/linkedin.png b/services/print/application/template/delivery-note/image/linkedin.png deleted file mode 100644 index 0d191e5aee4fa6b5a86ec10745ca92cfd258c269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/services/print/application/template/delivery-note/image/pinterest.png b/services/print/application/template/delivery-note/image/pinterest.png deleted file mode 100644 index 4d7b28ef81877be92afd73b3df221fbbcd23f7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3807 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 Q0ssI207*qoM6N<$f)8laWdHyG diff --git a/services/print/application/template/delivery-note/image/youtube.png b/services/print/application/template/delivery-note/image/youtube.png deleted file mode 100644 index 11871deb548d3f160444b577756e872cac2cda45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 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 - - - {{_.subject}} - - - - - {{$.header}} - - - -
    -
    -
    -
    -

    ALBARÁN

    -
    -
    CLIENTE:
    -
    {{clientId}}
    -
    -
    -
    ALBARÁN:
    -
    {{ticketId}}
    -
    -
    -
    FECHA:
    -
    {{shipped}}
    -
    -
    -
    -
    -
    -
    Dirección de entrega
    -

    - {{clientName}} -

    -
    - {{street}} -
    -
    - {{postcode}}, {{city}} ({{province}}) -
    -
    - {{country}} -
    -
    - -
    -
    Datos fiscales
    -
    - {{socialName}} -
    -
    - {{street}} -
    -
    - {{fi}} -
    -
    -
    -
    - -
    -
    -
    Ref
    -
    Cant.
    -
    Concepto
    -
    PVP/u
    -
    Dto
    -
    IVA
    -
    Importe
    -
    - {{#buys}} -
    -
    {{itemFk}}
    -
    {{quantity}}
    -
    -
    {{concept}}
    -
    - - {{tag1}} {{val1}} - - {{tag2}} {{val2}} - - {{tag3}} {{val3}} - -
    -
    -
    {{price}}
    -
    {{discount}}
    -
    {{taxType}}
    -
    {{netPrice}}
    -
    - {{/buys}} -
    -
    Subtotal {{1+1}}
    -
    {{subTotal}}
    -
    -
    -
    -
    - {{#hasPackages}} -

    Cajas y cubos

    -
    -
    -
    Id
    -
    Concepto
    -
    Cantidad
    -
    - {{#packaging}} -
    -
    {{itemFk}}
    -
    {{name}}
    -
    {{quantity}}
    -
    - {{/packaging}} -
    - {{/hasPackages}} - {{^hasPackages}} {{/hasPackages}} - -
    -
    Firma digital
    - -
    {{docDate}}
    -
    -
    -
    -

    Desglose impositivo

    -
    -
    -
    Tipo
    -
    Base imp.
    -
    Tasa
    -
    Cuota
    -
    - {{#ticketTax}} -
    -
    {{name}}
    -
    {{Base}}
    -
    {{vatPercent}}
    -
    {{tax}}
    -
    - {{/ticketTax}} -
    -
    Subtotal
    -
    {{totalBase}}
    -
    {{totalTax}}
    -
    -
    -
    Total
    -
    {{total}}
    -
    -
    -
    -
    -
    - - - - {{$.footer}} - - - \ No newline at end of file diff --git a/services/print/application/template/delivery-note/locale/es.json b/services/print/application/template/delivery-note/locale/es.json deleted file mode 100644 index e5453e858..000000000 --- a/services/print/application/template/delivery-note/locale/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "title": "Orden de domiciliación de adeudo directo SEPA CORE", - "toCompleteBySupplier": "A cumplimentar por el acreedor", - "toCompleteByClient": "A cumplimentar por el deudor", - "bodyDescription": "Mediante la firma de esta orden de domiciliación, el deudor autoriza (A) al acreedor a enviar instrucciones a la entidad del deudor para adeudar su cuenta y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las instrucciones del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso por su entidad en los términos y condiciones del contrato suscrito con la misma. La solicitud de reembolso deberá efectuarse dentro de las ocho semanas que adeudo en cuenta. Puede obtener información adicional sobre sus derechos en su entidad financiera.", - "orderReference": "Referencia de la orden de domiciliación", - "supplierIdentifier": "Identificador del acreedor", - "supplierName": "Nombre del acreedor", - "supplierStreet": "Dirección", - "supplierLocation": "CP - Población - Provincia", - "supplierCountry": "País", - "clientAdvice": "Debe llevar a su Entidad Bancaria una copia del documento firmado para que lo registre y evitar la devolución.", - "clientName": "Nombre del deudor/es", - "clientStreet": "Dirección del deudor", - "clientLocation": "CP - Población - Provincia", - "clientCountry": "País del deudor", - "swift": "Swift BIC", - "accountNumber": "Número de cuenta - IBAN", - "accountHolder": "(Titular/es de la cuenta de cargo)", - "accountNumberFormat": "En España el IBAN consta de 24 posiciones comenzando siempre por ES", - "paymentType": "Tipo de pago", - "recurrent": "Recurrente", - "unique": "Único", - "signLocation": "Fecha - Localidad", - "sign": "Firma del deudor y sello", - "mandatoryFields": "TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.", - "sendOrder": "UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/print/application/template/delivery-note/style.css b/services/print/application/template/delivery-note/style.css deleted file mode 100644 index 5b1e628d6..000000000 --- a/services/print/application/template/delivery-note/style.css +++ /dev/null @@ -1,22 +0,0 @@ -img { - margin: 0 -} - -.body { - font-family: arial, sans-serif; - max-width: 90%; - margin: 0 auto; - font-size: 14px; - color: #000 -} - -body .title { - text-align: center; - padding-bottom: 20px -} - -body .title h1 { - font-size: 16px; - color: #333; - margin: 0 -} \ No newline at end of file diff --git a/services/print/application/template/footer/footer.js b/services/print/application/template/footer/footer.js deleted file mode 100644 index 412ed7579..000000000 --- a/services/print/application/template/footer/footer.js +++ /dev/null @@ -1,20 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class Footer { - async getData(params, cb) { - let query = `SELECT - socialName - FROM client c - JOIN country ct ON ct.id = c.countryFk - WHERE c.id = ?`; - try { - let [result] = await database.pool.query(query, [params.clientId]); - Object.assign(this, result[0]); - } catch (e) { - return cb(new Error('No template data found')); - } - cb(); - } -}; diff --git a/services/print/application/template/footer/image/action.png b/services/print/application/template/footer/image/action.png deleted file mode 100644 index 2cd16c453d66b10611f90ee01deba70edbd7113e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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 diff --git a/services/print/application/template/footer/image/linkedin.png b/services/print/application/template/footer/image/linkedin.png deleted file mode 100644 index 0d191e5aee4fa6b5a86ec10745ca92cfd258c269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 Q0ssI207*qoM6N<$f)8laWdHyG diff --git a/services/print/application/template/footer/image/youtube.png b/services/print/application/template/footer/image/youtube.png deleted file mode 100644 index 11871deb548d3f160444b577756e872cac2cda45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 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 - -

    {{_.phytosanitary}}

    - - \ No newline at end of file diff --git a/services/print/application/template/footer/locale/es.json b/services/print/application/template/footer/locale/es.json deleted file mode 100644 index 04a61fddd..000000000 --- a/services/print/application/template/footer/locale/es.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "phytosanitary": "VERDNATURA LEVANTE SL - Pasaporte Fitosanitario R.P. Generalitat Valenciana - Nº Comerciante: ES17462130", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/print/application/template/footer/style.css b/services/print/application/template/footer/style.css deleted file mode 100644 index ab17d11d1..000000000 --- a/services/print/application/template/footer/style.css +++ /dev/null @@ -1,13 +0,0 @@ -footer, footer p { - text-align: center; - font-size: 12px -} - -footer .page-footer { - border-bottom: 2px solid #CCC; - padding-bottom: 2px -} - - #pageFooter { - zoom: 0.55 -} \ No newline at end of file diff --git a/services/print/application/template/header/header.js b/services/print/application/template/header/header.js deleted file mode 100644 index 7c8d0649c..000000000 --- a/services/print/application/template/header/header.js +++ /dev/null @@ -1,9 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -var format = require(path.join(__dirname, '../../util/format.js')); - -module.exports = class Header { - getData(params, cb) { - cb(); - } -}; diff --git a/services/print/application/template/header/image/logo.png b/services/print/application/template/header/image/logo.png deleted file mode 100644 index 27c5604499b4618465316691a9648121e9430819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19195 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 B9|8aX diff --git a/services/print/application/template/header/image/logo.svg b/services/print/application/template/header/image/logo.svg deleted file mode 100644 index 51baf46d3..000000000 --- a/services/print/application/template/header/image/logo.svg +++ /dev/null @@ -1,48 +0,0 @@ - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/services/print/application/template/header/index.html b/services/print/application/template/header/index.html deleted file mode 100644 index 52c09db06..000000000 --- a/services/print/application/template/header/index.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    {{_.mercantileRegistry}}
    -
    {{_.fiscalAddress}}
    -
    \ No newline at end of file diff --git a/services/print/application/template/header/locale/es.json b/services/print/application/template/header/locale/es.json deleted file mode 100644 index 86dbe5e58..000000000 --- a/services/print/application/template/header/locale/es.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "mercantileRegistry": "CIF: B97367486 Registro Mercantil de Valencia, Tomo 8041, Libro 5334, Folio 160, sección 8, Hoja V 102076", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es" -} \ No newline at end of file diff --git a/services/print/application/template/header/style.css b/services/print/application/template/header/style.css deleted file mode 100644 index b82ac9749..000000000 --- a/services/print/application/template/header/style.css +++ /dev/null @@ -1,10 +0,0 @@ -header.report { - border-bottom: 1px solid #DDD; - padding-bottom: 10px; - font-size: 12px; - text-align: center -} - -header #logo { - margin-bottom: 10px -} \ No newline at end of file diff --git a/services/print/application/template/letter-debtor/image/action.png b/services/print/application/template/letter-debtor/image/action.png deleted file mode 100644 index 2cd16c453d66b10611f90ee01deba70edbd7113e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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%0AZQE6(OF&wX?nb&(3F$_|vza?Z{P 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 diff --git a/services/print/application/template/letter-debtor/image/linkedin.png b/services/print/application/template/letter-debtor/image/linkedin.png deleted file mode 100644 index 0d191e5aee4fa6b5a86ec10745ca92cfd258c269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/services/print/application/template/letter-debtor/image/pinterest.png b/services/print/application/template/letter-debtor/image/pinterest.png deleted file mode 100644 index 4d7b28ef81877be92afd73b3df221fbbcd23f7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3807 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 Q0ssI207*qoM6N<$f)8laWdHyG diff --git a/services/print/application/template/letter-debtor/image/youtube.png b/services/print/application/template/letter-debtor/image/youtube.png deleted file mode 100644 index 11871deb548d3f160444b577756e872cac2cda45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 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 - - - {{_.subject}} - - - - - {{$.header}} - - - -
    -
    -
    -
    -

    EXTRACTO

    -
    -
    CLIENTE:
    -
    {{clientId}}
    -
    -
    -
    FECHA:
    -
    {{currentDate}}
    -
    -
    -
    -
    -
    -
    Datos de cliente
    -

    - {{clientName}} -

    -
    - {{street}} -
    -
    - {{postcode}}, {{city}} ({{province}}) -
    -
    - {{country}} -
    -
    -
    -
    - -
    -
    -
    Fecha
    -
    Concepto
    -
    Facturado
    -
    Pagado
    -
    Saldo
    -
    - {{#lines}} -
    -
    {{issued}} 
    -
    {{ref}} 
    -
    {{debtOut}} 
    -
    {{debtIn}} 
    -
    {{balance}} 
    -
    - {{/lines}} -
    -
    Total
    -
    {{totalDebtOut}}
    -
    {{totalDebtIn}}
    -
    {{totalBalance}}
    -
    -
    -
    - - - - {{$.footer}} - - - \ No newline at end of file diff --git a/services/print/application/template/letter-debtor/letter-debtor.js b/services/print/application/template/letter-debtor/letter-debtor.js deleted file mode 100644 index 51ec0223e..000000000 --- a/services/print/application/template/letter-debtor/letter-debtor.js +++ /dev/null @@ -1,89 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -let strftime = require('strftime'); - -module.exports = class LetterDebtor { - async getData(params, cb) { - let qryData = `SELECT - c.id clientId, - LOWER(ct.code) AS countryCode, - c.email AS recipient, - c.socialName AS clientName, - c.street, - c.postcode, - c.city, - c.fi, - p.name AS province, - ct.country - FROM client c - JOIN country ct ON ct.id = c.countryFk - LEFT JOIN province p ON p.id = c.provinceFk - WHERE c.id = ?`; - - let qryLines = `CALL vn.clientGetDebtDiary(?, ?)`; - - try { - let [data] = await database.pool.query(qryData, [params.clientId]); - - if (!data) - throw new Error('No body data found'); - - let [lines] = await database.pool.query(qryLines, [params.clientId, params.companyId]); - - Object.assign(this, data[0]); - - this.lines = lines[0]; - this.formatLines(); - this.getBalance(); - cb(); - } catch (e) { - cb(e); - } - } - - get currentDate() { - return strftime('%d-%m-%Y', new Date()); - } - - formatLines() { - this.lines.forEach(line => { - if (line.issued) - line.issued = strftime('%d-%m-%Y', line.issued); - }); - } - - getBalance() { - let balance = 0.00; - this.lines.forEach(line => { - if (line.debtOut) - balance += parseFloat(line.debtOut); - - if (line.debtIn) - balance -= parseFloat(line.debtIn); - - line.balance = parseFloat(balance.toFixed(2)); - }); - } - - totalDebtOut() { - let debtOut = 0.00; - this.lines.forEach(line => { - debtOut += line.debtOut ? parseFloat(line.debtOut) : 0; - }); - - return debtOut.toFixed(2); - } - - totalDebtIn() { - let debtIn = 0.00; - this.lines.forEach(line => { - debtIn += line.debtIn ? parseFloat(line.debtIn) : 0; - }); - - return debtIn.toFixed(2); - } - - totalBalance() { - return this.totalDebtOut() - this.totalDebtIn(); - } -}; diff --git a/services/print/application/template/letter-debtor/locale/es.json b/services/print/application/template/letter-debtor/locale/es.json deleted file mode 100644 index e5453e858..000000000 --- a/services/print/application/template/letter-debtor/locale/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "title": "Orden de domiciliación de adeudo directo SEPA CORE", - "toCompleteBySupplier": "A cumplimentar por el acreedor", - "toCompleteByClient": "A cumplimentar por el deudor", - "bodyDescription": "Mediante la firma de esta orden de domiciliación, el deudor autoriza (A) al acreedor a enviar instrucciones a la entidad del deudor para adeudar su cuenta y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las instrucciones del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso por su entidad en los términos y condiciones del contrato suscrito con la misma. La solicitud de reembolso deberá efectuarse dentro de las ocho semanas que adeudo en cuenta. Puede obtener información adicional sobre sus derechos en su entidad financiera.", - "orderReference": "Referencia de la orden de domiciliación", - "supplierIdentifier": "Identificador del acreedor", - "supplierName": "Nombre del acreedor", - "supplierStreet": "Dirección", - "supplierLocation": "CP - Población - Provincia", - "supplierCountry": "País", - "clientAdvice": "Debe llevar a su Entidad Bancaria una copia del documento firmado para que lo registre y evitar la devolución.", - "clientName": "Nombre del deudor/es", - "clientStreet": "Dirección del deudor", - "clientLocation": "CP - Población - Provincia", - "clientCountry": "País del deudor", - "swift": "Swift BIC", - "accountNumber": "Número de cuenta - IBAN", - "accountHolder": "(Titular/es de la cuenta de cargo)", - "accountNumberFormat": "En España el IBAN consta de 24 posiciones comenzando siempre por ES", - "paymentType": "Tipo de pago", - "recurrent": "Recurrente", - "unique": "Único", - "signLocation": "Fecha - Localidad", - "sign": "Firma del deudor y sello", - "mandatoryFields": "TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.", - "sendOrder": "UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/print/application/template/letter-debtor/style.css b/services/print/application/template/letter-debtor/style.css deleted file mode 100644 index 5b1e628d6..000000000 --- a/services/print/application/template/letter-debtor/style.css +++ /dev/null @@ -1,22 +0,0 @@ -img { - margin: 0 -} - -.body { - font-family: arial, sans-serif; - max-width: 90%; - margin: 0 auto; - font-size: 14px; - color: #000 -} - -body .title { - text-align: center; - padding-bottom: 20px -} - -body .title h1 { - font-size: 16px; - color: #333; - margin: 0 -} \ No newline at end of file diff --git a/services/print/application/template/sepa-core/index.html b/services/print/application/template/sepa-core/index.html deleted file mode 100644 index 92cc6fb80..000000000 --- a/services/print/application/template/sepa-core/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - {{_.subject}} - - - - - {{$.header}} - - - -
    - - -
    -

    {{_.title}}

    -
    - -
    -
    {{_.toCompleteBySupplier}}
    -
    -
    {{_.orderReference}}
    -
    {{mandateCode}}
    -
    -
    -
    {{_.supplierIdentifier}}
    -
    ES89000B97367486
    -
    -
    -
    {{_.supplierName}}
    -
    {{supplierName}}
    -
    -
    -
    {{_.supplierStreet}}
    -
    {{supplierStreet}}
    -
    -
    -
    {{_.supplierLocation}}
    -
    {{supplierPostCode}}, {{supplierCity}} ({{supplierProvince}})
    -
    -
    -
    {{_.supplierCountry}}
    -
    {{supplierCountry}}
    -
    -
    - -

    {{_.bodyDescription}}

    -

    {{_.clientAdvice}}

    - -
    -
    {{_.toCompleteByClient}}
    -
    -
    {{_.clientName}}
    -
    {{clientName}}
    -
    {{_.accountHolder}}
    -
    -
    -
    {{_.clientStreet}}
    -
    {{clientStreet}}
    -
    -
    -
    {{_.clientLocation}}
    -
    {{clientPostCode}}, {{clientCity}} ({{clientProvince}})
    -
    -
    -
    {{_.clientCountry}}
    -
    {{clientCountry}}
    -
    -
    -
    {{_.swift}}
    -
    - {{#swiftFields}} -
    - {{/swiftFields}} -
    -
    -
    -
    {{_.accountNumber}}
    -
    -
    ES
    - {{#accountNumberFields}} -
    - {{/accountNumberFields}} -
    -
    -
    {{_.accountNumberFormat}}
    -
    -
    -
    -
    {{_.paymentType}}
    -
    -
    -
    -
    -
    X
    -
    -
    {{_.recurrent}}
    -
    -
    O
    -
    -
    -
    -
    -
    {{_.unique}}
    -
    -
    -
    -
    -
    -
    {{_.signLocation}}
    -
    {{currentDate}}, {{supplierProvince}}
    -
    -
    -
    {{_.sign}}
    -
    -
    -
    -

    {{_.mandatoryFields}}

    -

    {{_.sendOrder}}

    -
    - - - - {{$.footer}} - - - \ No newline at end of file diff --git a/services/print/application/template/sepa-core/locale/es.json b/services/print/application/template/sepa-core/locale/es.json deleted file mode 100644 index e5453e858..000000000 --- a/services/print/application/template/sepa-core/locale/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "title": "Orden de domiciliación de adeudo directo SEPA CORE", - "toCompleteBySupplier": "A cumplimentar por el acreedor", - "toCompleteByClient": "A cumplimentar por el deudor", - "bodyDescription": "Mediante la firma de esta orden de domiciliación, el deudor autoriza (A) al acreedor a enviar instrucciones a la entidad del deudor para adeudar su cuenta y (B) a la entidad para efectuar los adeudos en su cuenta siguiendo las instrucciones del acreedor.Como parte de sus derechos, el deudor está legitimado al reembolso por su entidad en los términos y condiciones del contrato suscrito con la misma. La solicitud de reembolso deberá efectuarse dentro de las ocho semanas que adeudo en cuenta. Puede obtener información adicional sobre sus derechos en su entidad financiera.", - "orderReference": "Referencia de la orden de domiciliación", - "supplierIdentifier": "Identificador del acreedor", - "supplierName": "Nombre del acreedor", - "supplierStreet": "Dirección", - "supplierLocation": "CP - Población - Provincia", - "supplierCountry": "País", - "clientAdvice": "Debe llevar a su Entidad Bancaria una copia del documento firmado para que lo registre y evitar la devolución.", - "clientName": "Nombre del deudor/es", - "clientStreet": "Dirección del deudor", - "clientLocation": "CP - Población - Provincia", - "clientCountry": "País del deudor", - "swift": "Swift BIC", - "accountNumber": "Número de cuenta - IBAN", - "accountHolder": "(Titular/es de la cuenta de cargo)", - "accountNumberFormat": "En España el IBAN consta de 24 posiciones comenzando siempre por ES", - "paymentType": "Tipo de pago", - "recurrent": "Recurrente", - "unique": "Único", - "signLocation": "Fecha - Localidad", - "sign": "Firma del deudor y sello", - "mandatoryFields": "TODOS LOS CAMPOS HAN DE SER CUMPLIMENTADOS OBLIGATORIAMENTE.", - "sendOrder": "UNA VEZ FIRMADA ESTA ORDEN DE DOMICILIACIÓN DEBE SER ENVIADA AL ACREEDOR PARA SU CUSTODIA Y ES RECOMENDABLE FACILITAR UNA COPIA A SU ENTIDAD BANCARIA.", - "fiscalAddress": "VERDNATURA LEVANTE SL, B97367486 Avda. Espioca, 100, 46460 Silla · www.verdnatura.es · clientes@verdnatura.es", - "privacy": "- AVISO - Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo. Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones, errores u omisiones que pudieran hacerse al mensaje una vez enviado.", - "privacyLaw": "En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad. La finalidad del fichero es la gestión administrativa, contabilidad, y facturación." -} \ No newline at end of file diff --git a/services/print/application/template/sepa-core/sepa-core.js b/services/print/application/template/sepa-core/sepa-core.js deleted file mode 100644 index b5a8910ee..000000000 --- a/services/print/application/template/sepa-core/sepa-core.js +++ /dev/null @@ -1,55 +0,0 @@ -var path = require('path'); -var database = require(path.join(__dirname, '../../database.js')); -let strftime = require('strftime'); - -module.exports = class SepaCore { - async getData(params, cb) { - let query = `SELECT - c.id clientId, - m.code mandateCode, - LOWER(ct.code) AS countryCode, - c.email AS recipient, - c.socialName AS clientName, - c.street AS clientStreet, - c.postcode AS clientPostCode, - c.city AS clientCity, - p.name AS clientProvince, - ct.country AS clientCountry, - s.name AS supplierName, - s.street AS supplierStreet, - sc.country AS supplierCountry, - s.postCode AS supplierPostCode, - s.city AS supplierCity, - sp.name AS supplierProvince - FROM client c - JOIN country ct ON ct.id = c.countryFk - LEFT JOIN province p ON p.id = c.provinceFk - LEFT JOIN mandate m ON m.clientFk = c.id AND m.finished IS NULL - LEFT JOIN supplier s ON s.id = m.companyFk - LEFT JOIN country sc ON sc.id = s.countryFk - LEFT JOIN province sp ON sp.id = s.provinceFk - WHERE c.id = ?`; - - let [result] = await database.pool.query(query, [params.clientId]); - - if (!result || !result.length) - return cb(new Error('No template data found')); - - Object.assign(this, result[0]); - cb(); - } - - // Swift BIC fields - get swiftFields() { - return new Array(11); - } - - // Account number fields - get accountNumberFields() { - return new Array(23); - } - - get currentDate() { - return strftime('%d-%m-%Y', new Date()); - } -}; diff --git a/services/print/application/template/sepa-core/style.css b/services/print/application/template/sepa-core/style.css deleted file mode 100644 index 5b1e628d6..000000000 --- a/services/print/application/template/sepa-core/style.css +++ /dev/null @@ -1,22 +0,0 @@ -img { - margin: 0 -} - -.body { - font-family: arial, sans-serif; - max-width: 90%; - margin: 0 auto; - font-size: 14px; - color: #000 -} - -body .title { - text-align: center; - padding-bottom: 20px -} - -body .title h1 { - font-size: 16px; - color: #333; - margin: 0 -} \ No newline at end of file diff --git a/services/print/application/util/format.js b/services/print/application/util/format.js deleted file mode 100644 index f03d3c636..000000000 --- a/services/print/application/util/format.js +++ /dev/null @@ -1,99 +0,0 @@ -let database = require('../database.js'); -let strftime = require('strftime'); - -module.exports = { - - /** - * Devuelve el iban - * @param {String} addressNumber - Dirección de cuenta bancaria - * @param {Object} cb - Callback - */ - accountAddressIban: function(addressNumber, cb) { - database.pool.query('SELECT vn2008.cc_to_iban(?) AS iban', [addressNumber], function(error, result) { - cb(result[0].iban); - }); - }, - - /** - * Obtiene el numero de cuenta completo incluyendo iban - * @param {String} addressNumber - Dirección de cuenta bancaria - * @return {String} Cuenta bancaria formateada - */ - accountAddress: function(addressNumber) { - var formattedAccountAddress = addressNumber.replace(/(.{4})/g, '$1-'); - return formattedAccountAddress.substring(0, formattedAccountAddress.length - 1); - }, - - /** - * Devuelve el numero de cuenta mostrando únicamente los últimos 4 dígitos. - * @param {String} addressNumber - Dirección de cuenta bancaria - * @return {String} Cuenta bancaria formateada - */ - partialAccountAddress: function(addressNumber) { - let address = this.accountAddress(addressNumber); - return address.substring(0, 19).replace(/[0-9]/g, 'X') + address.substring(19, 24); - }, - - phone: function(number) { - return number; - }, - -/** - * Format number - * @param {Integer} number Input number - * @return {Integer} Formatted number - */ - number: function(number, minDigits = 0, maxDigits = 2) { - let options = { - style: 'decimal', - minimumFractionDigits: minDigits, - maximumFractionDigits: maxDigits - }; - - return new Intl.NumberFormat('es-ES', options).format(number); - }, - -/** - * Format currency - * @param {Integer} ammount Input ammount - * @param {String} type Currency type [EUR, USD, ...] - * @return {Integer} Formatted currency - */ - currency: function(ammount, type = 'EUR', minDigits = 2, maxDigits = 2) { - let options = { - style: 'currency', - currency: type, - minimumFractionDigits: minDigits, - maximumFractionDigits: maxDigits - }; - - return new Intl.NumberFormat('es-ES', options).format(ammount); - }, - - percent: function(number, minDigits = 2, maxDigits = 2) { - let options = { - style: 'percent', - minimumFractionDigits: minDigits, - maximumFractionDigits: maxDigits - }; - - return new Intl.NumberFormat('es-ES', options).format(number); - }, - -/** - * Format date dd-mm-yyyy - * @param {Object} date - Date object - * @param {String} delimiter - Date delimiter - * @return {String} Formatted date - */ - date: function(date, format = '%d-%m-%Y') { - return strftime(format, date); - }, - - code: function(code, pad) { - code = String(code); - pad = String(pad); - - return pad.substring(0, (pad.length - code.length)) + code; - } -}; \ No newline at end of file diff --git a/services/print/application/util/system.js b/services/print/application/util/system.js deleted file mode 100644 index 358346184..000000000 --- a/services/print/application/util/system.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - /** - * Obtiene las variables de entorno - * @param {String} env - Nombre de la variable de entorno - * @return {String} Valor de la variable de entorno - */ - getEnv: function(env) { - return process.env[env]; - } -}; diff --git a/services/print/package-lock.json b/services/print/package-lock.json deleted file mode 100644 index 917153b80..000000000 --- a/services/print/package-lock.json +++ /dev/null @@ -1,1573 +0,0 @@ -{ - "name": "vn-print", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "optional": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "optional": true - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "optional": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "optional": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cardinal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", - "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "requires": { - "ansicolors": "~0.2.1", - "redeyed": "~1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true - }, - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "optional": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "css-rules": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/css-rules/-/css-rules-1.0.3.tgz", - "integrity": "sha512-zdlrprCn9RutJI5n42OEydMNErhVRTzPd7hb7DzbOkgSEHERjOlRqKd4nWEDi+626vstikcjN8RRtG/b3p2T/g==", - "requires": { - "cssom": "^0.3.2" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" - }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "denque": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.2.3.tgz", - "integrity": "sha512-BOjyD1zPf7gqgXlXBCnCsz84cbRNfqpQNvWOUiw3Onu9s7a2afW2LyHzctoie/2KELfUoZkNHTnW02C3hCU20w==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "optional": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extract-css": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extract-css/-/extract-css-1.2.0.tgz", - "integrity": "sha1-vlOQ9AnIWwy18buQKZx35RaIqN4=", - "requires": { - "batch": "^0.6.1", - "href-content": "^1.0.2", - "list-stylesheets": "^1.2.1", - "style-data": "^1.3.0" - } - }, - "extract-zip": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", - "optional": true, - "requires": { - "concat-stream": "1.6.0", - "debug": "2.6.9", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "optional": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "optional": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "optional": true, - "requires": { - "pend": "~1.2.0" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "optional": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "optional": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "optional": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", - "optional": true, - "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "href-content": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/href-content/-/href-content-1.0.3.tgz", - "integrity": "sha1-vjI21iI1EceN4Yrv2cLNTo1TT4c=", - "requires": { - "remote-content": "^1.0.1" - } - }, - "html-pdf": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/html-pdf/-/html-pdf-2.2.0.tgz", - "integrity": "sha1-S8+Rwky1YOR6o/rP0DPg4b8kG5E=", - "requires": { - "phantomjs-prebuilt": "^2.1.4" - } - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "inline-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/inline-css/-/inline-css-2.4.0.tgz", - "integrity": "sha1-3wyZkDuhy68G/PXJMZ/5Gw8a7L8=", - "requires": { - "bluebird": "^3.5.1", - "cheerio": "^0.22.0", - "css-rules": "^1.0.3", - "extend": "^3.0.1", - "extract-css": "^1.2.0", - "flatten": "^1.0.2", - "object.pick": "^1.3.0", - "slick": "^1.12.2", - "specificity": "^0.3.2" - } - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "optional": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "optional": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "optional": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "optional": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", - "optional": true - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "list-stylesheets": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/list-stylesheets/-/list-stylesheets-1.2.1.tgz", - "integrity": "sha1-eX82xaRU8xE2kZc970Lk8Mxm3+s=", - "requires": { - "cheerio": "^0.22.0", - "extend": "^3.0.1", - "object.pick": "^1.3.0" - } - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mediaquery-text": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mediaquery-text/-/mediaquery-text-1.0.5.tgz", - "integrity": "sha512-xTMfHiICZHxijWFrb5rXjGUblQo2TrYmVnWFRhp2HESJQ1BGPmgAerq/t7Sm9i+79ZyUb1l0DMRsXGfHT119kQ==", - "requires": { - "cssom": "^0.3.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "optional": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mustache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", - "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=" - }, - "mysql2": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.5.3.tgz", - "integrity": "sha512-Oov36YQSeciNP9SeqE7je4eWgeGADOorXLmsqhtxOJmPGUOJSNJT0s6/eq1Byy4nhXTRQUvlMHsI4Q/eMEs88Q==", - "requires": { - "cardinal": "1.0.0", - "denque": "1.2.3", - "generate-function": "^2.0.0", - "iconv-lite": "^0.4.18", - "long": "^4.0.0", - "lru-cache": "4.1.1", - "named-placeholders": "1.1.1", - "object-assign": "^4.1.1", - "readable-stream": "2.3.5", - "safe-buffer": "^5.0.1", - "seq-queue": "0.0.5", - "sqlstring": "2.3.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "sqlstring": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "named-placeholders": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.1.tgz", - "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", - "requires": { - "lru-cache": "2.5.0" - }, - "dependencies": { - "lru-cache": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", - "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=" - } - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "requires": { - "boolbase": "~1.0.0" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", - "requires": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "optional": true - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", - "optional": true, - "requires": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" - }, - "dependencies": { - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optional": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "optional": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "optional": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "optional": true - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "redeyed": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", - "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "requires": { - "esprima": "~3.0.0" - }, - "dependencies": { - "esprima": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", - "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=" - } - } - }, - "remote-content": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remote-content/-/remote-content-1.0.2.tgz", - "integrity": "sha1-zsuiuo98KK0b/lAqI1X08r99EMU=", - "requires": { - "superagent": "^3.8.2" - } - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "optional": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", - "optional": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "require-yaml": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/require-yaml/-/require-yaml-0.0.1.tgz", - "integrity": "sha1-LhsY2RPDuqcqWk03O28Tjd0sMr0=", - "requires": { - "js-yaml": "3.11.0" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "slick": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", - "integrity": "sha1-vQSN23TefRymkV+qSldXCzVQwtc=" - }, - "specificity": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz", - "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "optional": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "strftime": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz", - "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "style-data": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-data/-/style-data-1.3.0.tgz", - "integrity": "sha1-tZcW3LCMQEY5Bv5V8E5HWOyRup0=", - "requires": { - "cheerio": "^0.22.0", - "extend": "^3.0.1", - "mediaquery-text": "^1.0.5", - "object.pick": "^1.3.0" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "optional": true - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "optional": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "optional": true, - "requires": { - "fd-slicer": "~1.0.1" - } - } - } -} diff --git a/services/print/package.json b/services/print/package.json deleted file mode 100644 index b964769e8..000000000 --- a/services/print/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "vn-print", - "version": "0.0.1", - "description": "Servidor de impresión PDF", - "main": "server/server.js", - "dependencies": { - "body-parser": "^1.17.2", - "express": "^4.15.3", - "fs-extra": "^5.0.0", - "html-pdf": "^2.2.0", - "inline-css": "^2.2.2", - "mustache": "^2.3.0", - "mysql2": "^1.5.3", - "path": "^0.12.7", - "require-yaml": "0.0.1", - "strftime": "^0.10.0" - }, - "repository": { - "type": "git", - "url": "https://git.verdnatura.es/salix" - }, - "license": "GPL-3.0" -} diff --git a/services/print/server/server.js b/services/print/server/server.js deleted file mode 100644 index 91d4e5f67..000000000 --- a/services/print/server/server.js +++ /dev/null @@ -1,30 +0,0 @@ -var express = require('express'); -var app = module.exports = express(); -var bodyParser = require('body-parser'); -var config = require('../application/config.js'); -var database = require('../application/database.js'); - -// Body parser middleware -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({extended: true})); - -// Load routes -app.use('/', require('../application/router.js')); - -app.start = function(port) { - var listener = app.listen(port ? port : config.app.port, function() { - var servicePath = 'http://' + listener.address().address + ':' + listener.address().port; - database.init(); - - if (config.app.debug) { - let packageJson = require('../package.json'); - console.log(`Web server ${packageJson.name} listening at: ${servicePath}`); - console.log(`${packageJson.name} service debug mode enabled`); - } - }); - return listener; -}; - -if (require.main === module) { - app.start(); -} diff --git a/services/print/static/css/common.css b/services/print/static/css/common.css deleted file mode 100644 index 91379b956..000000000 --- a/services/print/static/css/common.css +++ /dev/null @@ -1,216 +0,0 @@ -body { - font-family: arial, sans-serif; - margin: 0 auto; - font-size: 1em; - zoom: 0.55 -} - -main { - padding: 20px 0 -} - -img { - margin: 0 -} - -p { - text-align: justify -} - -* { - box-sizing: border-box -} - -.panel { - border: 1px solid #DDD; - margin-bottom: 10px; - position: relative; - padding:10px -} - -.panel .header { - font-weight: bold -} - -.row { - margin-bottom: 15px; - overflow: hidden -} - -.row.small { - margin-bottom: 5px -} - -.row .text { - margin-bottom: 5px -} - -.row .control { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -.row .text, .row .control { - overflow: hidden -} - -.row .description { - position: relative; - padding-top: 2px; - overflow: hidden; - font-size: 9px; - display: block; - color: #999 -} - -.row .line { - border-bottom: 1px solid #DDD; - border-right: 1px solid #DDD; - border-left: 1px solid #DDD; - margin-top: 10px; - color: #999; - padding: 5px -} - -.row .description span { - background-color: #FFF; - margin: -5px 0 0 50px; - display: block; - padding: 5px; - float: left -} - -.row:last-child { - margin-bottom: 0 -} - -.row.inline .text { - margin-bottom: 0; - width: 40%; - float: left -} - -.row.inline .control { - font-weight: bold; - padding-left: 20px; - color: #000; - width: 60%; - float: left -} - -.row.inline .description { - position: static; - overflow: visible -} - -.box { - border-top: 1px solid #CCC; - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; - font-weight: bold; - text-align: center; - padding-top: 4px; - width: 25px; - height: 21px; - color: #000; - float: left -} - -.box.crossed { - font-weight: 100; - font-size: 16px -} - -.row .control .box:first-child { - border-left: 1px solid #CCC; -} - -.font.small { - font-size: 10px -} - -.font.gray { - color: #555 -} - -.font.verticalAlign { - height: 27px; - line-height: 27px -} - -.font.centered { - height: 27px; - line-height: 27px; - text-align: center -} - -.verticalText { - -moz-transform: rotate(90deg); - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - position: absolute; - text-align: center; - font-size: .65em; - width: 200px; - right: -115px; - top: 50% -} - -.columns { - overflow: hidden -} - -.columns .size100 { - width: 100%; - float: left -} - -.columns .size75 { - width: 75%; - float: left -} - -.columns .size50 { - width: 50%; - float: left -} - -.columns .size33 { - width: 33.33%; - float: left -} - -.columns .size25 { - width: 25%; - float: left -} - -.pull-left { - float: left -} - -.pull-right { - float: right -} - - -.grid { - border-bottom: 3px solid #888888 -} - -.grid .row { - padding: 5px; - margin-bottom: 0 -} - -.grid .header { - border-bottom: 1px solid #808080; - border-top: 1px solid #808080; - background-color: #c0c0c0; -} - - -.grid .row.inline > div { - float: left; -} From 643dcc3856a047b0609017fe8bbe4cd6f0fb27ec Mon Sep 17 00:00:00 2001 From: Bernat Date: Mon, 21 Jan 2019 14:53:23 +0100 Subject: [PATCH 9/9] update model sip --- back/model-config.json | 3 +++ {modules/client/back => back}/models/sip.json | 0 modules/client/back/model-config.json | 3 --- 3 files changed, 3 insertions(+), 3 deletions(-) rename {modules/client/back => back}/models/sip.json (100%) diff --git a/back/model-config.json b/back/model-config.json index 3140d7cd3..d7c5410ad 100644 --- a/back/model-config.json +++ b/back/model-config.json @@ -37,5 +37,8 @@ }, "WorkerTeamCollegues": { "dataSource": "vn" + }, + "Sip": { + "dataSource": "vn" } } \ No newline at end of file diff --git a/modules/client/back/models/sip.json b/back/models/sip.json similarity index 100% rename from modules/client/back/models/sip.json rename to back/models/sip.json diff --git a/modules/client/back/model-config.json b/modules/client/back/model-config.json index 06c21f1cf..2a06866dc 100644 --- a/modules/client/back/model-config.json +++ b/modules/client/back/model-config.json @@ -82,8 +82,5 @@ }, "TpvResponse": { "dataSource": "vn" - }, - "Sip": { - "dataSource": "vn" } }