From ea3328756b47a961787a27873583aee79e9e7c21 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 1 Mar 2019 13:56:17 +0100 Subject: [PATCH 01/57] #1185 cambiar e2e client log --- e2e/helpers/selectors.js | 1 + e2e/paths/client-module/13_log.spec.js | 29 +++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index e653eb641..a37d63854 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -151,6 +151,7 @@ export default { }, clientLog: { logButton: `vn-left-menu a[ui-sref="client.card.log"]`, + lastModificationDate: 'vn-client-log > vn-log vn-table vn-tbody > vn-tr > vn-td:nth-child(1)', lastModificationPreviousValue: 'vn-client-log vn-table vn-td.before', lastModificationCurrentValue: 'vn-client-log vn-table vn-td.after' diff --git a/e2e/paths/client-module/13_log.spec.js b/e2e/paths/client-module/13_log.spec.js index 2a82744ff..54303599f 100644 --- a/e2e/paths/client-module/13_log.spec.js +++ b/e2e/paths/client-module/13_log.spec.js @@ -4,6 +4,8 @@ import createNightmare from '../../helpers/nightmare'; describe('Client log path', () => { const nightmare = createNightmare(); + let date; + beforeAll(() => { nightmare .loginAndModule('employee', 'client') @@ -17,6 +19,7 @@ describe('Client log path', () => { .write(selectors.clientBasicData.nameInput, 'this is a test') .waitToClick(selectors.clientBasicData.saveButton) .waitForLastSnackbar(); + date = new Date(); expect(result).toEqual('Data saved!'); }); @@ -38,9 +41,33 @@ describe('Client log path', () => { }); it('should check the current value of the last logged change', async() => { + let lastModificationDate = await nightmare + .waitToGetProperty(selectors.clientLog.lastModificationDate, 'innerText'); + + let lastModificationPreviousValue = await nightmare + .waitToGetProperty(selectors.clientLog.lastModificationPreviousValue, 'innerText'); + let lastModificationCurrentValue = await nightmare .waitToGetProperty(selectors.clientLog.lastModificationCurrentValue, 'innerText'); - expect(lastModificationCurrentValue).toContain('this is a test'); + let month = date.getMonth() + 1; + let day = date.getDate(); + let year = date.getFullYear(); + let hours = date.getHours(); + let minutes = date.getMinutes(); + + if (month.toString().length < 2) month = '0' + month; + if (day.toString().length < 2) day = `0${day}`; + if (hours.toString().length < 2) month = '0' + hours; + if (minutes.toString().length < 2) day = `0${minutes}`; + + let today = [day, month, year].join('/'); + let time = [hours, minutes].join(':'); + + let now = [today, time].join(' '); + + expect(lastModificationDate).toContain(now); + expect(lastModificationPreviousValue).toEqual('name: DavidCharlesHaller'); + expect(lastModificationCurrentValue).toEqual('name: this is a test'); }); }); From f6e625a1be3abe95c23e20746bf75529b391e47f Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 4 Mar 2019 08:31:33 +0100 Subject: [PATCH 02/57] fixed a date bug --- e2e/paths/client-module/13_log.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/paths/client-module/13_log.spec.js b/e2e/paths/client-module/13_log.spec.js index 54303599f..aba23ab72 100644 --- a/e2e/paths/client-module/13_log.spec.js +++ b/e2e/paths/client-module/13_log.spec.js @@ -58,8 +58,8 @@ describe('Client log path', () => { if (month.toString().length < 2) month = '0' + month; if (day.toString().length < 2) day = `0${day}`; - if (hours.toString().length < 2) month = '0' + hours; - if (minutes.toString().length < 2) day = `0${minutes}`; + if (hours.toString().length < 2) hours = '0' + hours; + if (minutes.toString().length < 2) minutes = `0${minutes}`; let today = [day, month, year].join('/'); let time = [hours, minutes].join(':'); From 7fd8615157960dad597b73e3aacfae936969fbcd Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 4 Mar 2019 08:35:39 +0100 Subject: [PATCH 03/57] added comment to sql changes --- db/install/changes/4-addressAfterUpdate.sql | 2 ++ db/install/changes/5-addressBeforeInsert.sql | 2 ++ db/install/changes/6-addressBeforeUpdate.sql | 2 ++ db/install/changes/7-clientAfterInsert.sql | 2 ++ db/install/changes/8-clientAfterUpdate.sql | 1 + db/install/changes/9-migrateDefaultAddress.sql | 2 +- 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/db/install/changes/4-addressAfterUpdate.sql b/db/install/changes/4-addressAfterUpdate.sql index 288875454..721dda28f 100644 --- a/db/install/changes/4-addressAfterUpdate.sql +++ b/db/install/changes/4-addressAfterUpdate.sql @@ -1,3 +1,5 @@ +/* Añadir a producción cuando se suba salix */ + DROP TRIGGER IF EXISTS vn2008.ConsignatariosAfterUpdate; USE vn2008; diff --git a/db/install/changes/5-addressBeforeInsert.sql b/db/install/changes/5-addressBeforeInsert.sql index cd42e554a..4a3b3afb2 100644 --- a/db/install/changes/5-addressBeforeInsert.sql +++ b/db/install/changes/5-addressBeforeInsert.sql @@ -1,3 +1,5 @@ +/* Añadir a producción cuando se suba salix */ + DROP TRIGGER IF EXISTS vn2008.ConsignatariosBeforeInsert; USE vn2008; diff --git a/db/install/changes/6-addressBeforeUpdate.sql b/db/install/changes/6-addressBeforeUpdate.sql index 84037f044..2e44dbd77 100644 --- a/db/install/changes/6-addressBeforeUpdate.sql +++ b/db/install/changes/6-addressBeforeUpdate.sql @@ -1,3 +1,5 @@ +/* Añadir a producción cuando se suba salix */ + DROP TRIGGER IF EXISTS vn2008.ConsignatariosBeforeUpdate; USE vn2008; diff --git a/db/install/changes/7-clientAfterInsert.sql b/db/install/changes/7-clientAfterInsert.sql index f12401f49..2c9033b31 100644 --- a/db/install/changes/7-clientAfterInsert.sql +++ b/db/install/changes/7-clientAfterInsert.sql @@ -1 +1,3 @@ +/* Añadir a producción cuando se suba salix */ + DROP TRIGGER vn2008.ClientesAfterInsert; diff --git a/db/install/changes/8-clientAfterUpdate.sql b/db/install/changes/8-clientAfterUpdate.sql index ee877b0a2..cfbd145da 100644 --- a/db/install/changes/8-clientAfterUpdate.sql +++ b/db/install/changes/8-clientAfterUpdate.sql @@ -1,3 +1,4 @@ +/* Añadir a producción cuando se suba salix */ DROP TRIGGER IF EXISTS vn2008.ClientesAfterUpdate; USE vn2008; diff --git a/db/install/changes/9-migrateDefaultAddress.sql b/db/install/changes/9-migrateDefaultAddress.sql index 7d287e793..019c1067f 100644 --- a/db/install/changes/9-migrateDefaultAddress.sql +++ b/db/install/changes/9-migrateDefaultAddress.sql @@ -1,5 +1,5 @@ /* Script de migración consignatarios. - Ejecución únicamente en producción */ + Añadir a producción cuando se suba salix */ /* USE vn; From dd9eab570e88d21a70e33894b8a4f0f2f3da8b33 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 4 Mar 2019 09:13:02 +0100 Subject: [PATCH 04/57] #1200 e2e client fiscal data maintenance --- .../client-module/03_edit_fiscal_data.spec.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/paths/client-module/03_edit_fiscal_data.spec.js b/e2e/paths/client-module/03_edit_fiscal_data.spec.js index d9a4b3f22..d837d817e 100644 --- a/e2e/paths/client-module/03_edit_fiscal_data.spec.js +++ b/e2e/paths/client-module/03_edit_fiscal_data.spec.js @@ -58,7 +58,7 @@ describe('Client Edit fiscalData path', () => { .accessToSection('client.card.fiscalData'); }); - it('should receive an error if VIES and EQtax are being ticked together', async() => { + it('should edit the fiscal data', async() => { const result = await nightmare .wait(selectors.clientFiscalData.socialNameInput) .clearInput(selectors.clientFiscalData.socialNameInput) @@ -87,6 +87,14 @@ describe('Client Edit fiscalData path', () => { expect(result).toEqual('Data saved!'); }, 15000); + it('should propagate the Equalization tax', async() => { + const result = await nightmare + .waitToClick(selectors.clientFiscalData.acceptPropagationButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Equivalent tax spreaded'); + }); + it('should receive an error if the fiscal id contains A or B at the beginning', async() => { const result = await nightmare .waitToClick(selectors.clientFiscalData.viesCheckbox) @@ -108,14 +116,6 @@ describe('Client Edit fiscalData path', () => { expect(result).toEqual('Data saved!'); }); - it('should propagate the Equalization tax', async() => { - const result = await nightmare - .waitToClick(selectors.clientFiscalData.acceptPropagationButton) - .waitForLastSnackbar(); - - expect(result).toEqual('Equivalent tax spreaded'); - }); - // confirm all addresses have now EQtax checked step 1 it(`should click on the addresses button to access to the client's addresses`, async() => { const url = await nightmare From 3c6d27a2853bd3afe81302aed60314f103a55130 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 4 Mar 2019 12:04:23 +0100 Subject: [PATCH 05/57] order sales by concept #1166 --- .../changes/10-ticketGetVisibleAvailable.sql | 36 +++++++++++++++++++ e2e/paths/ticket-module/03_list_sale.spec.js | 8 ++--- front/core/components/td-editable/style.scss | 14 +++++++- .../methods/ticket/specs/getSales.spec.js | 5 ++- modules/ticket/back/methods/ticket/summary.js | 2 +- 5 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 db/install/changes/10-ticketGetVisibleAvailable.sql diff --git a/db/install/changes/10-ticketGetVisibleAvailable.sql b/db/install/changes/10-ticketGetVisibleAvailable.sql new file mode 100644 index 000000000..3d49d98d4 --- /dev/null +++ b/db/install/changes/10-ticketGetVisibleAvailable.sql @@ -0,0 +1,36 @@ +DROP PROCEDURE IF EXISTS vn.ticketGetVisibleAvailable; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`ticketGetVisibleAvailable`( + vTicket INT) +BEGIN + DECLARE vVisibleCalc INT; + DECLARE vAvailableCalc INT; + DECLARE vShipped DATE; + DECLARE vWarehouse TINYINT; + DECLARE vAlertLevel INT; + + SELECT t.warehouseFk, t.shipped, ts.alertLevel INTO vWarehouse, vShipped, vAlertLevel + FROM ticket t + LEFT JOIN ticketState ts ON ts.ticketFk = vTicket + WHERE t.id = vTicket; + + IF vAlertLevel IS NULL OR vAlertLevel = 0 THEN + IF vShipped >= CURDATE() THEN + CALL cache.available_refresh(vAvailableCalc, FALSE, vWarehouse, vShipped); + END IF; + IF vShipped = CURDATE() THEN + CALL cache.visible_refresh(vVisibleCalc, FALSE, vWarehouse); + END IF; + END IF; + + SELECT s.id, s.itemFk, s.quantity, s.concept, s.price, s.reserved, s.discount, v.visible, av.available, it.image + FROM sale s + LEFT JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vVisibleCalc + LEFT JOIN cache.available av ON av.item_id = s.itemFk AND av.calc_id = vAvailableCalc + LEFT JOIN item it ON it.id = s.itemFk + WHERE s.ticketFk = vTicket + ORDER BY s.concept; +END$$ +DELIMITER ; diff --git a/e2e/paths/ticket-module/03_list_sale.spec.js b/e2e/paths/ticket-module/03_list_sale.spec.js index 2813bb988..54d63e26a 100644 --- a/e2e/paths/ticket-module/03_list_sale.spec.js +++ b/e2e/paths/ticket-module/03_list_sale.spec.js @@ -15,21 +15,21 @@ describe('Ticket List sale path', () => { const value = await nightmare .waitToGetProperty(selectors.ticketSales.firstSaleColour, 'innerText'); - expect(value).toContain('Red'); + expect(value).toContain('Yellow'); }); it('should confirm the first ticket sale contains the lenght', async() => { const value = await nightmare .waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText'); - expect(value).toContain('3'); + expect(value).toContain('5'); }); it('should confirm the first ticket sale contains the price', async() => { const value = await nightmare .waitToGetProperty(selectors.ticketSales.firstSalePrice, 'innerText'); - expect(value).toContain('1.30'); + expect(value).toContain('2.30'); }); it('should confirm the first ticket sale contains the discount', async() => { @@ -43,7 +43,7 @@ describe('Ticket List sale path', () => { const value = await nightmare .waitToGetProperty(selectors.ticketSales.firstSaleImport, 'innerText'); - expect(value).toContain('19.50'); + expect(value).toContain('23'); }); it('should navigate to the catalog by pressing the new item button', async() => { diff --git a/front/core/components/td-editable/style.scss b/front/core/components/td-editable/style.scss index 5fd042980..71162e906 100644 --- a/front/core/components/td-editable/style.scss +++ b/front/core/components/td-editable/style.scss @@ -1,11 +1,23 @@ @import "variables"; vn-td-editable { - cursor: pointer; + text { + cursor: pointer; + display: block + } + outline: none; position: relative; &:not([disabled="true"]) { cursor: initial; + + + text:hover::after { + font-family: 'salixfont'; + float: right; + content: '\e900'; + display: block + } } &.selected > .text { visibility: hidden; diff --git a/modules/ticket/back/methods/ticket/specs/getSales.spec.js b/modules/ticket/back/methods/ticket/specs/getSales.spec.js index da44716cf..a2ea4de3f 100644 --- a/modules/ticket/back/methods/ticket/specs/getSales.spec.js +++ b/modules/ticket/back/methods/ticket/specs/getSales.spec.js @@ -6,6 +6,9 @@ describe('ticket getSales()', () => { expect(sales.length).toEqual(4); expect(sales[0].tags).toBeDefined(); - expect(sales[1].claim).toBeDefined(); + expect(sales[1].tags).toBeDefined(); + expect(sales[2].tags).toBeDefined(); + expect(sales[3].tags).toBeDefined(); + expect(sales[2].claim).toBeDefined(); }); }); diff --git a/modules/ticket/back/methods/ticket/summary.js b/modules/ticket/back/methods/ticket/summary.js index b47d325cd..2b1d8711c 100644 --- a/modules/ticket/back/methods/ticket/summary.js +++ b/modules/ticket/back/methods/ticket/summary.js @@ -113,7 +113,7 @@ module.exports = Self => { where: { ticketFk: ticketFk }, - order: 'itemFk ASC', + order: 'concept', include: [ {relation: 'item'}, {relation: 'claimBeginning'} From 9be6f1351a7af8e844503fa16ca253b4dab3b9a9 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 08:42:05 +0100 Subject: [PATCH 06/57] updated steps --- modules/agency/front/basic-data/index.html | 4 ++-- modules/agency/front/create/index.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/agency/front/basic-data/index.html b/modules/agency/front/basic-data/index.html index 4d0a67bdf..28ec35377 100644 --- a/modules/agency/front/basic-data/index.html +++ b/modules/agency/front/basic-data/index.html @@ -51,14 +51,14 @@ label="Price" field="$ctrl.zone.price" min="0.00" - step="0.20" + step="0.10" display-controls="false"> diff --git a/modules/agency/front/create/index.html b/modules/agency/front/create/index.html index 0a8c08207..ac6b76efd 100644 --- a/modules/agency/front/create/index.html +++ b/modules/agency/front/create/index.html @@ -53,14 +53,14 @@ label="Price" field="$ctrl.zone.price" min="0.00" - step="0.20" + step="0.10" display-controls="false"> From 80ebf671e889b53d44f4e838efc0902a97f94b1c Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 10:45:07 +0100 Subject: [PATCH 07/57] fonts rollback to version 1.24 --- front/core/styles/salixfont.css | 430 +++++++++++++++---------------- front/core/styles/salixfont.eot | Bin 24264 -> 0 bytes front/core/styles/salixfont.svg | 160 ++++++------ front/core/styles/salixfont.ttf | Bin 24088 -> 23724 bytes front/core/styles/salixfont.woff | Bin 24164 -> 23800 bytes 5 files changed, 295 insertions(+), 295 deletions(-) delete mode 100644 front/core/styles/salixfont.eot diff --git a/front/core/styles/salixfont.css b/front/core/styles/salixfont.css index 67ff48cb5..8e9a02963 100644 --- a/front/core/styles/salixfont.css +++ b/front/core/styles/salixfont.css @@ -23,240 +23,240 @@ -moz-osx-font-smoothing: grayscale; } -.icon-tax:before { - content: "\e901"; -} -.icon-notes:before { - content: "\e902"; -} -.icon-lineas:before { - content: "\e903"; -} -.icon-languaje:before { - content: "\e904"; -} -.icon-greuge:before { - content: "\e905"; +.icon-pets:before { + content: "\e94e"; } .icon-100:before { - content: "\e906"; -} -.icon-History:before { - content: "\e907"; -} -.icon-Inactivo:before { - content: "\e908"; -} -.icon-person:before { - content: "\e909"; -} -.icon-actions:before { - content: "\e90a"; -} -.icon-addperson:before { - content: "\e90b"; -} -.icon-albaran:before { - content: "\e90c"; -} -.icon-apps:before { - content: "\e90d"; -} -.icon-artificial:before { - content: "\e90e"; -} -.icon-barcode:before { - content: "\e90f"; -} -.icon-basket:before { - content: "\e910"; -} -.icon-bin:before { - content: "\e911"; -} -.icon-botanical:before { - content: "\e912"; -} -.icon-claims:before { - content: "\e913"; -} -.icon-clone:before { - content: "\e914"; -} -.icon-columnadd:before { - content: "\e915"; -} -.icon-columndelete:before { - content: "\e916"; -} -.icon-complementos:before { - content: "\e917"; -} -.icon-components:before { - content: "\e918"; -} -.icon-confeccion:before { - content: "\e919"; -} -.icon-consignatarios:before { - content: "\e91a"; -} -.icon-control:before { - content: "\e91b"; -} -.icon-credit:before { - content: "\e91c"; -} -.icon-deleteline:before { - content: "\e91d"; -} -.icon-delivery:before { - content: "\e91e"; -} -.icon-details:before { - content: "\e900"; -} -.icon-dfiscales:before { - content: "\e91f"; -} -.icon-doc:before { - content: "\e920"; -} -.icon-entrada:before { - content: "\e921"; -} -.icon-eye:before { - content: "\e922"; -} -.icon-flor:before { - content: "\e923"; -} -.icon-frozen:before { - content: "\e924"; -} -.icon-grid:before { - content: "\e925"; -} -.icon-headercol:before { - content: "\e926"; -} -.icon-info:before { - content: "\e927"; -} -.icon-item:before { - content: "\e928"; -} -.icon-linesprepaired:before { - content: "\e929"; -} -.icon-logout:before { - content: "\e92a"; -} -.icon-mana:before { - content: "\e92b"; -} -.icon-mandatory:before { - content: "\e92c"; -} -.icon-newalbaran:before { - content: "\e92d"; -} -.icon-newinvoices:before { - content: "\e92e"; -} -.icon-niche:before { - content: "\e92f"; -} -.icon-no036:before { - content: "\e930"; -} -.icon-noweb:before { - content: "\e931"; -} -.icon-onlinepayment:before { - content: "\e932"; -} -.icon-package:before { - content: "\e933"; -} -.icon-payment:before { - content: "\e934"; -} -.icon-pets:before { - content: "\e935"; -} -.icon-photo:before { - content: "\e936"; -} -.icon-planta:before { - content: "\e937"; -} -.icon-recovery:before { - content: "\e938"; -} -.icon-regentry:before { - content: "\e939"; -} -.icon-reserva:before { - content: "\e93a"; -} -.icon-revision:before { - content: "\e93b"; -} -.icon-riesgo:before { - content: "\e93c"; -} -.icon-services:before { - content: "\e93d"; -} -.icon-settings:before { - content: "\e93e"; -} -.icon-sign:before { - content: "\e93f"; -} -.icon-sms:before { content: "\e940"; } -.icon-solclaim:before { - content: "\e941"; +.icon-accessory:before { + content: "\e90a"; } -.icon-solunion:before { - content: "\e942"; +.icon-actions:before { + content: "\e900"; } -.icon-splitline:before { - content: "\e943"; +.icon-addperson:before { + content: "\e901"; } -.icon-stowaway:before { - content: "\e944"; +.icon-albaran:before { + content: "\e902"; } -.icon-supplier:before { - content: "\e945"; -} -.icon-tags:before { - content: "\e946"; -} -.icon-ticket:before { - content: "\e947"; -} -.icon-traceability:before { +.icon-apps:before { content: "\e948"; } -.icon-transaction:before { +.icon-artificial:before { + content: "\e903"; +} +.icon-barcode:before { + content: "\e904"; +} +.icon-basket:before { + content: "\e942"; +} +.icon-bin:before { + content: "\e905"; +} +.icon-botanical:before { + content: "\e906"; +} +.icon-bucket:before { + content: "\e907"; +} +.icon-claims:before { + content: "\e908"; +} +.icon-clone:before { + content: "\e909"; +} +.icon-columnadd:before { + content: "\e944"; +} +.icon-columndelete:before { + content: "\e90f"; +} +.icon-components:before { + content: "\e90b"; +} +.icon-consignatarios:before { + content: "\e90d"; +} +.icon-control:before { + content: "\e93f"; +} +.icon-credit:before { + content: "\e90e"; +} +.icon-delivery:before { + content: "\e910"; +} +.icon-details:before { + content: "\e911"; +} +.icon-disabled:before { + content: "\e91b"; +} +.icon-doc:before { + content: "\e913"; +} +.icon-entry:before { + content: "\e914"; +} +.icon-exit:before { + content: "\e947"; +} +.icon-eye:before { + content: "\e915"; +} +.icon-fiscal:before { + content: "\e912"; +} +.icon-flower:before { + content: "\e916"; +} +.icon-frozen:before { + content: "\e917"; +} +.icon-greenery:before { + content: "\e93c"; +} +.icon-greuge:before { + content: "\e918"; +} +.icon-grid:before { + content: "\e919"; +} +.icon-handmade:before { + content: "\e90c"; +} +.icon-history:before { + content: "\e91a"; +} +.icon-info:before { content: "\e949"; } -.icon-unavailable:before { +.icon-invoices1:before { content: "\e94a"; } -.icon-verde:before { +.icon-invoices:before { + content: "\e91c"; +} +.icon-item:before { + content: "\e941"; +} +.icon-languaje:before { + content: "\e91d"; +} +.icon-linedelete:before { + content: "\e946"; +} +.icon-lines:before { + content: "\e91e"; +} +.icon-linesplit:before { + content: "\e945"; +} +.icon-linesprepaired:before { content: "\e94b"; } -.icon-volume:before { +.icon-logout:before { + content: "\e91f"; +} +.icon-mana:before { + content: "\e920"; +} +.icon-mandatory:before { + content: "\e921"; +} +.icon-niche:before { + content: "\e922"; +} +.icon-no036:before { + content: "\e923"; +} +.icon-notes:before { + content: "\e924"; +} +.icon-noweb:before { + content: "\e925"; +} +.icon-onlinepayment:before { + content: "\e926"; +} +.icon-package:before { + content: "\e927"; +} +.icon-payment:before { + content: "\e928"; +} +.icon-person:before { + content: "\e929"; +} +.icon-photo:before { + content: "\e92a"; +} +.icon-plant:before { + content: "\e92b"; +} +.icon-recovery:before { + content: "\e92d"; +} +.icon-regentry:before { + content: "\e92e"; +} +.icon-reserve:before { + content: "\e92f"; +} +.icon-revision:before { content: "\e94c"; } -.icon-web:before { +.icon-risk:before { + content: "\e930"; +} +.icon-services:before { content: "\e94d"; } +.icon-settings:before { + content: "\e931"; +} +.icon-sms:before { + content: "\e932"; +} +.icon-solclaim:before { + content: "\e933"; +} +.icon-solunion:before { + content: "\e934"; +} +.icon-splur:before { + content: "\e935"; +} +.icon-stowaway:before { + content: "\e92c"; +} +.icon-supplier:before { + content: "\e936"; +} +.icon-tags:before { + content: "\e937"; +} +.icon-tax:before { + content: "\e938"; +} +.icon-ticket:before { + content: "\e939"; +} +.icon-traceability:before { + content: "\e93a"; +} +.icon-transaction:before { + content: "\e93b"; +} +.icon-volume:before { + content: "\e93d"; +} +.icon-web:before { + content: "\e93e"; +} .icon-worker:before { - content: "\e94e"; + content: "\e943"; } \ No newline at end of file diff --git a/front/core/styles/salixfont.eot b/front/core/styles/salixfont.eot deleted file mode 100644 index d02e74ae49946c4f2ca7f092fdb97ebd37b890e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24264 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 a;rrV$jLst{HHDpi7#^$NFcQD^@Bar9k^2z< diff --git a/front/core/styles/salixfont.svg b/front/core/styles/salixfont.svg index 9c99d9457..d6654ec1e 100644 --- a/front/core/styles/salixfont.svg +++ b/front/core/styles/salixfont.svg @@ -3,87 +3,87 @@ Generated by IcoMoon - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/front/core/styles/salixfont.ttf b/front/core/styles/salixfont.ttf index 229075e3522ad98524ebf2577c77a4c97f7f37aa..7c0ac2492e9e53d1af4eb16ed47a939da5cb585b 100644 GIT binary patch delta 2197 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 diff --git a/front/core/styles/salixfont.woff b/front/core/styles/salixfont.woff index 97f55da68244ca8b245b380c62bd0c08596c05cd..2a9a880f52056e7351bcdcfa84e5312fba9b60ee 100644 GIT binary patch delta 2244 zcmaJ?eQZXNChAOF|N|P&PtLAS^KiCP(5hi;S1QaMs6>p8Xlko=QdwV1K;n1n z`e9nz=4f>4cUq$bAw92AGg~bj=0|+4Ep_Xhr{lO z`2%mP`w;6-dd}m{Ecz4Pj2Tp3ii0>DipJ8o39^f|M4^;$NPxN|kGB#79TLLu9d=a% zA;YU+73}8J7R(A>ciA`LJd90acG9bGpq}@7352oVdNYRkiD`c2jT@#SHw4mnBZg&+ z#T#+5B?Zf?&1*}t5xI%0!}>*efWt`tth|G;FN3>SwP#qrsx07g3qmUk6v0UlRH}Ct6vq{aT!5%aNtX@j2DH_5c}K~otDBL!Pp6y7j~jKrO8GOs}~>^PO2H4gcpEO zkCuXpWN~eaRFc2r-l3{}&b#X~nf2VA+E%iuc-R}Pa(jcpWAhY~`8heO*0joMIGd=A zMz{EUWx4+TT#4-45{uR)vSHOPe5)qaFVC?TWB!I>ds-;9+U(YJL(=C~tEwC&jg^%V zAZ=D4BbAknB_%Z#EwU%sfb@0zBxZl3E&AIrAJLzvhhw-zx9is$MlI~`mh<|5(m5_* zMRa9xbz_gBJeow$p>yb0=vDMO(wU`a>ogpxCVB+82dWIapz?|4CU_&8aVyrEQ^}U- z1}wv-z+H%Fav7GBF^v}^5{@Kgh*J~I8*!ppZAzq)n#%}5 zASe8=Wl`2-S1opF*rmF##+@$A@40c|>(j;41-#*O@$~{(DBRdHe*qgzajB?qe%xQs z7q|bCvKKioeuG`--eP0qJX;~N`u4}JQ2k&1%N%P8zQ;ZluItul9P2}+Z({u)**45R zbnjwUyL(x;l4Wnle$2-07uki#gx*>Q7p*CFPCwh$j`hOUF|13edt4YpD+URqH@SXL zmiZFdq5s44(KFYpA8OV+xP4>6;6e6-5EDNGx*gYU(OeBS!aX)pZXoQya4x z+^lKuXW6}#P1LlEbsmZfaJOlfm|6mT3Z$Q1+Z&ix0U2369P$6O5og4IGsdV9*`RqT z=x69Qrnty8axal6IYT{kj8BLO%Tt!ymIu~)o5QxtcE)zy_Gf$AQSUh6xa_!J(o^#6 zp;AZbd!?V0`JF!JnDbSa#Z~V*<=*Z7sWdFTBHi}hkv}MZzWgiyLH}Z)H!xdKUvar& zLD^SHtGMc(>Ni7=h3Zhta&z~M3$p3MBjz-m$ z`!-BlAz9^TtSDn*3i#(H=HcHxU}6FI0TbJx%g#Z^#?%VTI`FJv4wa&x zn3w?HVPXpSoPkvsz(Ws?nhpUR!zQ+&7IbTTWbE;&L-`XEXdI28G4wc^V*7?_8y~@= XL(texpovGg*v+A!`%(O7LsS0+MMTzC delta 2765 zcmZ`*eM}t36`$GJkGta*cG=rqIJkqm^?h+*xZC?6HrN;Yjue6o#Kr;qkwD6w33@NRp8RM zaJH-{y_?_6Z{B-5`)1yo+4<~O`27o5`DRyJ8^Q>F`-V};YFmM@@z*`dQ}t~#eZvU# z4S%%bx$R>kgTM#EV3D%m+GqdU7zjc3AoSN+;Ff4%Y~si?$Yv43offuWTgQRPhrn+4 zTVV5|1z|jNVPbIl5JG#v7S*oeF#heq!HE%&ordRLvXC$N*4sA@O->yF=d!h%6$4T&NOxk%q#k0mZ>w^oaqVpOr3M|VAyM@CJ@o93yiEH=JZKW7puk0l00zgQ$!z-tBhQ3yp*qwzs? zu-}*T$!VypKbgEHb?N$c;oZ8HmOAQMq?K$ej4B?F0ytWD8c&{C`HZqzAOrOqHq^J) zt>}@~)(CaEuGOPjhN@>p&*v}a^P|QC-Sg&UvXe4#=PTIsvH!y67273je6oF~@f+zu z^Q>bIH+P{oaR@&GOIM0LSn~%%vGgV!N(4jep~rHiSavBj*w1P)P4od*p?G0Y4mktH zkDOlRE)4d1+!D$z%O1vP#Kv3B7Ne9`j1V6-diVz881OTEjMkd`G4m3CKV=4lEHU=B z|IQef?lVqx^_d>mA~q+K1Z@mzuv2dku z%Bra=xN+r6{S0+(Wnc{%>@Hki1LV-HY^p*vkVy#pVG^7n^z1eN)DgzU^Y@)JKI;00 z`FYKcDPunwHYa+Tv3b@Hm1o_U&HQ`s`;;j+3{&RbSQBF=cRZBPWS!!9{U3DFO4 z=zg}Fu!Nqm+i7@W+nH?}4(lvOM1>D~A|Zj-1R)|2ma9?JIziGTw$#Cj9H9y4L?6vogohEMFzCc8<7McfjEYX%0Kr$Vg$u;o${|5SUmS(*@q{CVT(gO>j!VQig zCG1cSAq?Hi&^T|yqlDQ-7)-Kxjw2kyE+1R6zYvTb1Tmn#cigQj@u) z*0j37asc*~n&irGJO#%doOy8IC0lTk12Ly@YC4&Q^D(}1o)qScSv( z>SNI;RURGa$LSe&gEY{eVR<&w+t=FKmt|$i={~2QvwJ$~)`!CzL}8?T<63-)`a@GHKIAx_Bmy~x-Ek>>ly$UUrhbwfwGoQPzenJ zgx*$hg>FV{{ET@497WX+!`IXtyki{FbjW^p6(hmW&uD`&~2E6p;h2 z6<%}zKa8KmFH%F)9Q85jCMU@|bTj<~{WjxgtJzL2$Sv5swx8K)`+EC6hu`Vq^ZaY2 z6{TBB50-5&J686KvWr4o42omoE8+*`{_@w#3sSQy<@$l^g4`!RE&p4|R(LD6xWiTR zRZG>Eyia;Rt%(fRvbA|%weKhX1^1U45r4g6%0GmzijB4SWt`>xdSE8#T|nO_D?tDCl4M$JJ29HfcB$l)L{H~ dcO>!EDwKy)@gO?#)mo!_k4O1Gs$+Ym{|Bs4FyH_H From 7f10a509e04c37cbfcadc8b22b067298d1fea999 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 11:34:05 +0100 Subject: [PATCH 08/57] #1188 item.index filtering doesnt work for some params --- modules/item/back/methods/item/filter.js | 40 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index 6a8eac680..0abb3ceb6 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -23,6 +23,11 @@ module.exports = Self => { type: 'String', description: `If it's and integer searchs by id, otherwise it searchs by name`, http: {source: 'query'} + }, { + arg: 'id', + type: 'Integer', + description: 'Item id', + http: {source: 'query'} }, { arg: 'categoryFk', type: 'Integer', @@ -71,7 +76,7 @@ module.exports = Self => { case 'categoryFk': return {'ic.id': value}; case 'typeFk': - return {'t.id': value}; + return {'i.typeFk': value}; case 'isActive': return {'i.isActive': value}; } @@ -96,10 +101,10 @@ module.exports = Self => { ic.name AS category, i.density, tc.description AS taxClass, b.grouping, b.packing FROM item i - JOIN itemType t ON t.id = i.typeFk + LEFT JOIN itemType t ON t.id = i.typeFk LEFT JOIN itemCategory ic ON ic.id = t.categoryFk - JOIN worker w ON w.id = t.workerFk - JOIN account.user u ON u.id = w.userFk + LEFT JOIN worker w ON w.id = t.workerFk + LEFT JOIN account.user u ON u.id = w.userFk LEFT JOIN intrastat intr ON intr.id = i.intrastatFk LEFT JOIN producer pr ON pr.id = i.producerFk LEFT JOIN origin ori ON ori.id = i.originFk @@ -118,17 +123,26 @@ module.exports = Self => { if (ctx.args.tags) { let i = 1; - for (let tag of ctx.args.tags) { - if (tag.value == null) continue; - let tAlias = `it${i++}`; - stmt.merge({ - sql: `JOIN itemTag ${tAlias} ON ${tAlias}.itemFk = i.id - AND ${tAlias}.tagFk = ? - AND ${tAlias}.value = ?`, - params: [tag.tagFk, tag.value] - }); + for (const tag of ctx.args.tags) { + const tAlias = `it${i++}`; + + if (tag.tagFk) { + stmt.merge({ + sql: `JOIN vn.itemTag ${tAlias} ON ${tAlias}.itemFk = i.id + AND ${tAlias}.tagFk = ? + AND ${tAlias}.value LIKE ?`, + params: [tag.tagFk, `%${tag.value}%`], + }); + } else { + stmt.merge({ + sql: `JOIN vn.itemTag ${tAlias} ON ${tAlias}.itemFk = i.id + AND ${tAlias}.value LIKE ?`, + params: [`%${tag.value}%`], + }); + } } } + stmt.merge(conn.makeSuffix(filter)); let itemsIndex = stmts.push(stmt) - 1; From 00f9754c1e085a69c6b5e309386ec28e7eb0a4b4 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 12:03:34 +0100 Subject: [PATCH 09/57] #1171 item.index mostrar campos medida y nicho --- modules/item/back/methods/item/filter.js | 5 +++-- modules/item/front/index/index.html | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index 0abb3ceb6..0aa8808b1 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -99,7 +99,7 @@ module.exports = Self => { intr.description AS intrastat, i.stems, ori.code AS origin, t.name AS type, ic.name AS category, i.density, tc.description AS taxClass, - b.grouping, b.packing + b.grouping, b.packing, itn.code AS niche FROM item i LEFT JOIN itemType t ON t.id = i.typeFk LEFT JOIN itemCategory ic ON ic.id = t.categoryFk @@ -110,7 +110,8 @@ module.exports = Self => { LEFT JOIN origin ori ON ori.id = i.originFk LEFT JOIN taxClass tc ON tc.id = i.taxClassFk LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = t.warehouseFk - LEFT JOIN vn.buy b ON b.id = lb.buy_id` + LEFT JOIN vn.buy b ON b.id = lb.buy_id + LEFT JOIN itemPlacement itn ON itn.itemFk = i.id AND itn.warehouseFk = t.warehouseFk` ); if (ctx.args.hasVisible === true) { diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index 5a2988537..6f748a752 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -26,6 +26,8 @@ Packing Description Stems + Size + Niche Type Category Intrastat @@ -65,6 +67,8 @@ {{::item.stems}} + {{::item.size}} + {{::item.niche}} {{::item.type}} {{::item.category}} {{::item.intrastat}} From 32893b49c1d07d6d350306b10139d5634b2f63b3 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 12:13:46 +0100 Subject: [PATCH 10/57] #1174 item.index buscador avanzado mostrar comprador --- modules/item/back/methods/item/filter.js | 7 +++++++ modules/item/front/index/index.html | 2 +- modules/item/front/search-panel/index.html | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index 0aa8808b1..f92248037 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -48,6 +48,11 @@ module.exports = Self => { type: 'Boolean', description: 'Whether the the item is o not active', http: {source: 'query'} + }, { + arg: 'salesPersonFk', + type: 'Integer', + description: 'The buyer of the item', + http: {source: 'query'} } ], returns: { @@ -75,6 +80,8 @@ module.exports = Self => { return {'i.description': {like: `%${value}%`}}; case 'categoryFk': return {'ic.id': value}; + case 'salesPersonFk': + return {'t.workerFk': value}; case 'typeFk': return {'i.typeFk': value}; case 'isActive': diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index 6f748a752..88f8fb5bc 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -32,7 +32,7 @@ Category Intrastat Origin - Sales person + Buyer Density Tax class Active diff --git a/modules/item/front/search-panel/index.html b/modules/item/front/search-panel/index.html index e3cb1f3d2..fca01dc2a 100644 --- a/modules/item/front/search-panel/index.html +++ b/modules/item/front/search-panel/index.html @@ -46,6 +46,17 @@ label="Description" model="filter.description"> + + Date: Tue, 5 Mar 2019 12:25:37 +0100 Subject: [PATCH 11/57] changed showfield of salesperson autocomplete --- modules/order/front/search-panel/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/order/front/search-panel/index.html b/modules/order/front/search-panel/index.html index 5f312992e..8f692a0fa 100644 --- a/modules/order/front/search-panel/index.html +++ b/modules/order/front/search-panel/index.html @@ -34,10 +34,10 @@ field="filter.workerFk" url="/client/api/Clients/activeWorkersWithRole" search-function="{firstName: $search}" + show-field="nickname" value-field="id" where="{role: 'employee'}" label="Sales person"> - {{firstName}} {{name}} From f5262954bcb7266735392fde25e57985b9bb71be Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 14:08:00 +0100 Subject: [PATCH 12/57] bug with filter giving wrong dates fixed --- front/core/filters/dateTime.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/front/core/filters/dateTime.js b/front/core/filters/dateTime.js index de1506ead..fdda69870 100644 --- a/front/core/filters/dateTime.js +++ b/front/core/filters/dateTime.js @@ -9,9 +9,13 @@ dateTime.$inject = ['$filter']; export default function dateTime($filter) { return function(input, format) { - let value = new Date(input); - let offset = value.getTimezoneOffset() * 60000; - value.setTime(value.getTime() + offset); + let value; + if (input) { + value = new Date(input); + let offset = value.getTimezoneOffset() * 60000; + value.setTime(value.getTime() + offset); + } + return $filter('date')(value, format); }; } From d6683918bb8126887e29b5ae905966fb663fc03d Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 4 Mar 2019 16:06:41 +0100 Subject: [PATCH 13/57] =?UTF-8?q?#1165=20A=C3=B1adir=20al=20buscador=20ava?= =?UTF-8?q?nzado=20de=20order=20la=20b=C3=BAsqueda=20por=20ticket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/order/back/methods/order/filter.js | 12 ++++++++++++ modules/order/front/search-panel/index.html | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/modules/order/back/methods/order/filter.js b/modules/order/back/methods/order/filter.js index 00b4eec96..628b85343 100644 --- a/modules/order/back/methods/order/filter.js +++ b/modules/order/back/methods/order/filter.js @@ -35,6 +35,10 @@ module.exports = Self => { arg: 'clientFk', type: 'Integer', description: `The client id` + }, { + arg: 'ticketFk', + type: 'Integer', + description: `The ticket id` }, { arg: 'agencyModeFk', type: 'Integer', @@ -78,6 +82,8 @@ module.exports = Self => { return {'o.agency_id': value}; case 'sourceApp': return {'o.source_app': value}; + case 'ticketFk': + return {'ort.ticketFk': value}; case 'isConfirmed': return {'o.confirmed': value ? 1 : 0}; case 'id': @@ -118,6 +124,12 @@ module.exports = Self => { LEFT JOIN worker wk ON wk.id = c.salesPersonFk LEFT JOIN account.user u ON u.id = wk.userFk LEFT JOIN company co ON co.id = o.company_id`); + + if (ctx.args && ctx.args.ticketFk) { + stmt.merge({ + sql: `LEFT JOIN orderTicket ort ON ort.orderFk = o.id` + }); + } stmt.merge(conn.makeSuffix(filter)); stmts.push(stmt); diff --git a/modules/order/front/search-panel/index.html b/modules/order/front/search-panel/index.html index 8f692a0fa..0af885a53 100644 --- a/modules/order/front/search-panel/index.html +++ b/modules/order/front/search-panel/index.html @@ -50,6 +50,13 @@ model="filter.to"> + + + + Date: Mon, 4 Mar 2019 16:34:41 +0100 Subject: [PATCH 14/57] #1039 ticket.summary --- front/core/components/button/button.js | 3 +- modules/ticket/front/summary/index.html | 9 +++++- modules/ticket/front/summary/index.js | 41 +++++++++++++++++++++++-- modules/ticket/front/summary/style.scss | 13 ++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/front/core/components/button/button.js b/front/core/components/button/button.js index a2b798023..4e5cf50a2 100644 --- a/front/core/components/button/button.js +++ b/front/core/components/button/button.js @@ -15,9 +15,8 @@ export default class Button extends Input { } $onInit() { - if (!this.type) { + if (!this.type) this.type = 'button'; - } } } Button.$inject = ['$element']; diff --git a/modules/ticket/front/summary/index.html b/modules/ticket/front/summary/index.html index 6ce487f31..733a4228b 100644 --- a/modules/ticket/front/summary/index.html +++ b/modules/ticket/front/summary/index.html @@ -1,5 +1,12 @@ -
{{$ctrl.summary.id}} - {{$ctrl.summary.client.name}} - {{$ctrl.summary.nickname}}
+
{{$ctrl.summary.id}} - {{$ctrl.summary.client.name}} - {{$ctrl.summary.nickname}} + + +
{ + this.changeTicketState(res.data[0].id); + }); + } + + changeTicketState(value) { + let params; + + if (this.$state.params.id) + params = {ticketFk: this.$state.params.id, stateFk: value}; + + if (!this.$state.params.id) + params = {ticketFk: this.ticket.id, stateFk: value}; + + this.$http.post(`/ticket/api/TicketTrackings/changeState`, params).then(() => { + this.vnApp.showSuccess(this.$translate.instant('Data saved!')); + if (this.card) this.card.reload(); + }); + } } -Controller.$inject = ['$scope', '$http']; +Controller.$inject = ['$scope', '$state', '$http', 'vnApp', '$translate']; ngModule.component('vnTicketSummary', { template: require('./index.html'), controller: Controller, bindings: { ticket: '<' + }, + require: { + card: '?^vnTicketCard' } }); diff --git a/modules/ticket/front/summary/style.scss b/modules/ticket/front/summary/style.scss index 4e94fb4a6..d0165f63f 100644 --- a/modules/ticket/front/summary/style.scss +++ b/modules/ticket/front/summary/style.scss @@ -3,6 +3,19 @@ vn-ticket-summary .summary { max-width: $width-large; + vn-button { + max-height: 27px; + float: right; + button { + box-shadow: none; + height: inherit; + line-height: inherit; + &:active, &:focus { + box-shadow: none !important; + } + } + } + & > div > vn-horizontal > vn-one { min-width: 10em; From ef483bcc129b6da1ebe444d10b27ce8685bc449c Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Tue, 5 Mar 2019 08:24:09 +0100 Subject: [PATCH 15/57] fixed zone calendar weekday offset --- front/core/components/calendar/index.html | 4 ++-- front/core/components/calendar/index.js | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/front/core/components/calendar/index.html b/front/core/components/calendar/index.html index 0ece00f61..25af81815 100644 --- a/front/core/components/calendar/index.html +++ b/front/core/components/calendar/index.html @@ -78,9 +78,9 @@
- {{::day.date | dateTime: 'd'}} + {{::day.date | date: 'd'}} - {{::day.date | dateTime: 'd'}} + {{::day.date | date: 'd'}}
diff --git a/front/core/components/calendar/index.js b/front/core/components/calendar/index.js index cc90846f7..e26e6890a 100644 --- a/front/core/components/calendar/index.js +++ b/front/core/components/calendar/index.js @@ -116,9 +116,6 @@ export default class Calendar extends Component { } addDay(date, day, color = '') { - const curDate = new Date(); - curDate.setHours(0, 0, 0, 0); - const newDate = new Date( date.getFullYear(), date.getMonth(), day); From 8e45858cd007b8af125668a72b7b95574ed44dd7 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Tue, 5 Mar 2019 10:10:43 +0100 Subject: [PATCH 16/57] Disable & create new mandate when sending a new core sample #1207 --- modules/client/back/models/client-sample.js | 36 ++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/modules/client/back/models/client-sample.js b/modules/client/back/models/client-sample.js index a6509efb2..b36d27f84 100644 --- a/modules/client/back/models/client-sample.js +++ b/modules/client/back/models/client-sample.js @@ -7,16 +7,44 @@ module.exports = Self => { Self.observe('before save', async function(ctx) { let models = Self.app.models; - let data = ctx.instance; + let changes = ctx.data || ctx.instance; - let sample = await models.Sample.findById(data.typeFk); + let sample = await models.Sample.findById(changes.typeFk); - if (sample.hasCompany && !data.companyFk) + if (sample.hasCompany && !changes.companyFk) throw new UserError('Choose a company'); + // Renew mandate + if (sample.code === 'sepa-core') { + let mandateType = await models.MandateType.findOne({ + where: {name: 'CORE'} + }); + + let oldMandate = await models.Mandate.findOne({ + where: { + clientFk: changes.clientFk, + companyFk: changes.companyFk, + mandateTypeFk: mandateType.id, + finished: null + } + }); + + // Disable old mandate + if (oldMandate) + oldMandate.updateAttribute('finished', new Date()); + + // Create a new mandate + await models.Mandate.create({ + clientFk: changes.clientFk, + companyFk: changes.companyFk, + mandateTypeFk: mandateType.id + }); + } + + // Apply workerFk let filter = {where: {userFk: ctx.options.accessToken.userId}}; let worker = await Self.app.models.Worker.findOne(filter); - data.workerFk = worker.id; + changes.workerFk = worker.id; }); }; From d37d314304e7eea559ac3ff8bfdc21da2e05453c Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Tue, 5 Mar 2019 12:01:53 +0100 Subject: [PATCH 17/57] #1202 refactor del cambio de estado de un ticket --- .../methods/ticket-tracking/changeState.js | 17 +++++---- modules/ticket/front/summary/index.js | 35 +++++++++---------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/modules/ticket/back/methods/ticket-tracking/changeState.js b/modules/ticket/back/methods/ticket-tracking/changeState.js index e93eb25f3..f70ae93a5 100644 --- a/modules/ticket/back/methods/ticket-tracking/changeState.js +++ b/modules/ticket/back/methods/ticket-tracking/changeState.js @@ -23,23 +23,28 @@ module.exports = Self => { } }); - Self.changeState = async(ctx, data) => { + Self.changeState = async(ctx, params) => { let userId = ctx.req.accessToken.userId; let $ = Self.app.models; - if (!data.stateFk) + if (!params.stateFk && !params.code) throw new UserError('State cannot be blank'); + if (params.code) { + let state = await $.State.findOne({where: {code: params.code}, fields: ['id']}); + params.stateFk = state.id; + } + let isProduction = await $.Account.hasRole(userId, 'production'); let isSalesPerson = await $.Account.hasRole(userId, 'salesPerson'); let ticket = await $.TicketState.findById( - data.ticketFk, + params.ticketFk, {fields: ['stateFk']} ); let oldState = await $.State.findById(ticket.stateFk); - let newState = await $.State.findById(data.stateFk); + let newState = await $.State.findById(params.stateFk); let isAllowed = isProduction || isSalesPerson && oldState.isEditable() @@ -50,9 +55,9 @@ module.exports = Self => { if (newState.code != 'PICKER_DESIGNED') { let worker = await $.Worker.findOne({where: {userFk: userId}}); - data.workerFk = worker.id; + params.workerFk = worker.id; } - return await $.TicketTracking.create(data); + return await $.TicketTracking.create(params); }; }; diff --git a/modules/ticket/front/summary/index.js b/modules/ticket/front/summary/index.js index 3c99acaa4..52ffa40cf 100644 --- a/modules/ticket/front/summary/index.js +++ b/modules/ticket/front/summary/index.js @@ -17,12 +17,7 @@ class Controller { set ticket(value) { this._ticket = value; - if (!value) return; - - this.$http.get(`/ticket/api/Tickets/${this.ticket.id}/summary`).then(res => { - if (res && res.data) - this.summary = res.data; - }); + if (value) this.getSummary(); } get formattedAddress() { @@ -34,6 +29,13 @@ class Controller { return `${address.street} - ${address.city} ${province}`; } + getSummary() { + this.$http.get(`/ticket/api/Tickets/${this.ticket.id}/summary`).then(res => { + if (res && res.data) + this.summary = res.data; + }); + } + showDescriptor(event, itemFk) { this.quicklinks = { btnThree: { @@ -64,25 +66,22 @@ class Controller { } setOkState() { - let filter = {where: {code: 'OK'}, fields: ['id']}; - let json = encodeURIComponent(JSON.stringify(filter)); - this.$http.get(`/ticket/api/States?filter=${json}`).then(res => { - this.changeTicketState(res.data[0].id); - }); - } - - changeTicketState(value) { - let params; + let params = {}; if (this.$state.params.id) - params = {ticketFk: this.$state.params.id, stateFk: value}; + params = {ticketFk: this.$state.params.id}; if (!this.$state.params.id) - params = {ticketFk: this.ticket.id, stateFk: value}; + params = {ticketFk: this.ticket.id}; + + params.code = 'OK'; this.$http.post(`/ticket/api/TicketTrackings/changeState`, params).then(() => { this.vnApp.showSuccess(this.$translate.instant('Data saved!')); - if (this.card) this.card.reload(); + if (this.card) + this.card.reload(); + else + this.getSummary(); }); } } From 17654ef71e58d51d347f15ef73d651b0b159b7f6 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Tue, 5 Mar 2019 12:37:43 +0100 Subject: [PATCH 18/57] #1183 Crear enlace a client summary en /order/descriptor --- modules/order/front/descriptor/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/order/front/descriptor/index.js b/modules/order/front/descriptor/index.js index 4b052526c..26fedd6a3 100644 --- a/modules/order/front/descriptor/index.js +++ b/modules/order/front/descriptor/index.js @@ -15,6 +15,11 @@ class Controller { icon: 'icon-ticket', state: `ticket.index({q: '{"orderFk": ${value.id}}'})`, tooltip: 'Order ticket list' + }, + btnTwo: { + icon: 'person', + state: `client.card.summary({id: ${value.clientFk}})`, + tooltip: 'Client card' } }; } From 52c64e9c1d76ccc026a836b1995e0bd17ca53433 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 14:43:59 +0100 Subject: [PATCH 19/57] tricks with hours deleted and changed order --- modules/ticket/back/methods/ticket/filter.js | 6 ++++-- modules/ticket/front/index/index.html | 2 +- modules/ticket/front/index/index.js | 9 +++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/ticket/back/methods/ticket/filter.js b/modules/ticket/back/methods/ticket/filter.js index 557c75d9e..f05101d75 100644 --- a/modules/ticket/back/methods/ticket/filter.js +++ b/modules/ticket/back/methods/ticket/filter.js @@ -99,11 +99,13 @@ module.exports = Self => { let teamIds = []; - if (worker.collegues().length) { + if (worker.collegues().length && ctx.args.myTeam) { worker.collegues().forEach(collegue => { teamIds.push(collegue.collegueFk); }); - } else { + } + + if (ctx.args.mine || (worker.collegues().length === 0 && ctx.args.myTeam)) { worker = await Self.app.models.Worker.findOne({ fields: ['id'], where: {userFk: ctx.req.accessToken.userId} diff --git a/modules/ticket/front/index/index.html b/modules/ticket/front/index/index.html index 42d5ad3fe..700fd9e87 100644 --- a/modules/ticket/front/index/index.html +++ b/modules/ticket/front/index/index.html @@ -3,7 +3,7 @@ url="/ticket/api/Tickets/filter" limit="20" data="tickets" - order="shipped DESC, clientFk" + order="shipped ASC, clientFk" auto-load="false">
diff --git a/modules/ticket/front/index/index.js b/modules/ticket/front/index/index.js index 809c77d71..5d760b834 100644 --- a/modules/ticket/front/index/index.js +++ b/modules/ticket/front/index/index.js @@ -12,28 +12,25 @@ export default class Controller { this.goToTurns('ticket.weekly'); }, name: 'Turns', always: true}, ]; + this.filter = {}; if (!$stateParams.q) { let today = new Date(); - let offset = today.getTimezoneOffset() * 60000; today.setHours(0, 0, 0, 0); - today.setTime(today.getTime() - offset); let tomorrow = new Date(today); tomorrow.setHours(23, 59, 59, 999); - tomorrow.setTime(tomorrow.getTime() - offset); let sixDays = new Date(today); sixDays.setDate(today.getDate() + 6); sixDays.setHours(23, 59, 59, 999); - sixDays.setTime(sixDays.getTime() - offset); - this.filter = {mine: true, from: today, to: sixDays}; + this.filter = Object.assign(this.filter, {myTeam: true, from: today, to: sixDays}); } } $postLink() { - if (this.filter) + if (this.filter && this.filter != {}) this.onSearch(this.filter); } From 11603f8d903511fef660518527d39348daaebef6 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Tue, 5 Mar 2019 14:59:18 +0100 Subject: [PATCH 20/57] Add services to deliver-note #1201. Renamed receipt --- .../back/methods/packaging/listPackaging.js | 5 +- modules/ticket/front/descriptor/index.js | 2 +- modules/ticket/front/services/index.js | 1 - package-lock.json | 400 ++++++++---------- package.json | 2 +- print/config/routes.json | 2 +- print/lib/reportEngine.js | 3 +- print/package-lock.json | 61 ++- print/package.json | 8 +- print/report/printer-setup/locale.js | 2 + .../rpt-delivery-note/assets/css/style.css | 15 +- print/report/rpt-delivery-note/index.html | 59 ++- print/report/rpt-delivery-note/index.js | 22 +- print/report/rpt-delivery-note/locale.js | 8 +- print/report/rpt-informe/index.js | 33 -- print/report/rpt-informe/locale.js | 10 - .../assets/css/index.js | 0 .../assets/css/style.css | 4 - .../assets/images/signature.png | Bin .../{rpt-informe => rpt-receipt}/index.html | 21 +- print/report/rpt-receipt/index.js | 71 ++++ print/report/rpt-receipt/locale.js | 24 ++ 22 files changed, 400 insertions(+), 353 deletions(-) delete mode 100755 print/report/rpt-informe/index.js delete mode 100644 print/report/rpt-informe/locale.js rename print/report/{rpt-informe => rpt-receipt}/assets/css/index.js (100%) rename print/report/{rpt-informe => rpt-receipt}/assets/css/style.css (81%) rename print/report/{rpt-informe => rpt-receipt}/assets/images/signature.png (100%) rename print/report/{rpt-informe => rpt-receipt}/index.html (51%) create mode 100755 print/report/rpt-receipt/index.js create mode 100644 print/report/rpt-receipt/locale.js diff --git a/modules/ticket/back/methods/packaging/listPackaging.js b/modules/ticket/back/methods/packaging/listPackaging.js index 46be79c77..033201818 100644 --- a/modules/ticket/back/methods/packaging/listPackaging.js +++ b/modules/ticket/back/methods/packaging/listPackaging.js @@ -13,7 +13,7 @@ module.exports = Self => { http: {source: 'query'} }], returns: { - type: ["Object"], + type: ['Object'], root: true }, http: { @@ -28,7 +28,8 @@ module.exports = Self => { `SELECT name, itemFk, packagingFk FROM (SELECT i.name, i.id itemFk, p.id packagingFk FROM item i - JOIN packaging p ON i.id = p.itemFk) p` + JOIN packaging p ON i.id = p.itemFk + WHERE i.name <> '') p` ); stmt.merge(conn.makeSuffix(filter)); diff --git a/modules/ticket/front/descriptor/index.js b/modules/ticket/front/descriptor/index.js index d18063ef7..a236b0d5a 100644 --- a/modules/ticket/front/descriptor/index.js +++ b/modules/ticket/front/descriptor/index.js @@ -11,7 +11,7 @@ class Controller { {callback: this.showAddTurnDialog, name: 'Add turn', show: true}, {callback: this.showAddStowaway, name: 'Add stowaway', show: () => this.isTicketModule()}, {callback: this.showRemoveStowaway, name: 'Remove stowaway', show: () => this.shouldShowRemoveStowaway()}, - /* {callback: this.showDeliveryNote, name: 'Show Delivery Note', show: true}, */ + {callback: this.showDeliveryNote, name: 'Show Delivery Note', show: true}, {callback: this.showDeleteTicketDialog, name: 'Delete ticket', show: true}, /* callback: this.showChangeShipped, name: 'Change shipped hour', show: true} */ ]; diff --git a/modules/ticket/front/services/index.js b/modules/ticket/front/services/index.js index b9bccd446..ce228bf8a 100644 --- a/modules/ticket/front/services/index.js +++ b/modules/ticket/front/services/index.js @@ -18,7 +18,6 @@ class Controller { this.$scope.watcher.check(); this.$scope.model.save().then(() => { this.$scope.watcher.notifySaved(); - this.$scope.model.refresh(); }); } } diff --git a/package-lock.json b/package-lock.json index 8b04fbf96..4e29d792d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1505,7 +1505,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -1733,7 +1733,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -2052,7 +2052,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2097,7 +2097,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2147,7 +2147,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -2322,7 +2322,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -2366,7 +2366,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2497,7 +2497,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -2657,7 +2657,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -2731,19 +2731,10 @@ }, "colors": { "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -2886,6 +2877,18 @@ "xdg-basedir": "^3.0.0" } }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, "connect-history-api-fallback": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", @@ -2924,7 +2927,7 @@ }, "content-disposition": { "version": "0.5.2", - "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-security-policy-builder": { @@ -3017,7 +3020,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3030,7 +3033,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -3193,13 +3196,13 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, "regexpu-core": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { @@ -3210,13 +3213,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -3287,9 +3290,9 @@ "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", + "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", "dev": true }, "date-now": { @@ -3565,7 +3568,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -3686,7 +3689,7 @@ "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { "is-obj": "^1.0.0" @@ -3694,12 +3697,12 @@ }, "duplex": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/duplex/-/duplex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/duplex/-/duplex-1.0.0.tgz", "integrity": "sha1-arxcFuwX5MV4V4cnEmcAWQ06Ldo=" }, "duplexer": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz", "integrity": "sha1-r8t/H4uNdPggcmFx1dZKyeSo/yA=" }, "duplexer2": { @@ -3719,7 +3722,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -3846,7 +3849,7 @@ "dependencies": { "fs-extra": { "version": "0.30.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "dev": true, "requires": { @@ -3972,7 +3975,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -4123,7 +4126,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" @@ -4442,40 +4445,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - } - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -4511,30 +4480,6 @@ } } }, - "expand-range": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - }, - "dependencies": { - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -4901,7 +4846,7 @@ }, "file-loader": { "version": "1.1.11", - "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { @@ -4932,6 +4877,29 @@ } } }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, "find-cache-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", @@ -5139,7 +5107,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -5938,7 +5906,7 @@ "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "dev": true, "requires": { "global-prefix": "^1.0.1", @@ -5975,7 +5943,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -6020,7 +5988,7 @@ }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -6197,7 +6165,7 @@ }, "kind-of": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true }, @@ -6381,7 +6349,7 @@ "dependencies": { "es6-promise": { "version": "3.3.1", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, @@ -7144,7 +7112,7 @@ "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", "dev": true, "requires": { "is-relative": "^1.0.0", @@ -7193,7 +7161,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -7340,7 +7308,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -7371,7 +7339,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { "isobject": "^3.0.1" @@ -7407,7 +7375,7 @@ "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", "dev": true, "requires": { "is-unc-path": "^1.0.0" @@ -7441,7 +7409,7 @@ "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", "dev": true, "requires": { "unc-path-regex": "^0.1.2" @@ -7487,7 +7455,7 @@ }, "isemail": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" }, "isexe": { @@ -7542,7 +7510,7 @@ }, "jasmine-core": { "version": "2.99.1", - "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", "dev": true }, @@ -7559,7 +7527,7 @@ "jasmine-spec-reporter": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", "dev": true, "requires": { "colors": "1.1.2" @@ -7647,7 +7615,7 @@ }, "json-buffer": { "version": "2.0.11", - "resolved": "http://registry.npmjs.org/json-buffer/-/json-buffer-2.0.11.tgz", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-2.0.11.tgz", "integrity": "sha1-PkQf2jCYvo0eMXGtWRvGKjPi1V8=" }, "json-loader": { @@ -7729,28 +7697,27 @@ "dev": true }, "karma": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.4.tgz", - "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.1.tgz", + "integrity": "sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", + "braces": "^2.3.2", "chokidar": "^2.0.3", "colors": "^1.1.0", - "combine-lists": "^1.0.0", "connect": "^3.6.0", "core-js": "^2.2.0", "di": "^0.0.1", "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", "flatted": "^2.0.0", "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^4.17.5", - "log4js": "^3.0.0", + "lodash": "^4.17.11", + "log4js": "^4.0.0", "mime": "^2.3.1", "minimatch": "^3.0.2", "optimist": "^0.6.1", @@ -7764,33 +7731,6 @@ "useragent": "2.3.0" }, "dependencies": { - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -7805,12 +7745,6 @@ "path-is-absolute": "^1.0.0" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, "mime": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", @@ -7822,18 +7756,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true } } }, @@ -8030,7 +7952,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -8259,24 +8181,18 @@ } }, "log4js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", - "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", + "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", "dev": true, "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", + "date-format": "^2.0.0", "debug": "^3.1.0", + "flatted": "^2.0.0", "rfdc": "^1.1.2", - "streamroller": "0.7.0" + "streamroller": "^1.0.1" }, "dependencies": { - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -9510,7 +9426,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { @@ -9533,7 +9449,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -9656,7 +9572,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minstache": { @@ -9670,7 +9586,7 @@ "dependencies": { "commander": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-1.0.4.tgz", "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=", "dev": true, "requires": { @@ -9738,7 +9654,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -9746,7 +9662,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } @@ -9821,7 +9737,7 @@ "dependencies": { "through": { "version": "2.3.4", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.4.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.4.tgz", "integrity": "sha1-SV5A6Nio6uvHwnXqiMK4/BTFZFU=" } } @@ -9898,7 +9814,7 @@ }, "multipipe": { "version": "0.1.2", - "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { @@ -9924,7 +9840,7 @@ }, "mux-demux": { "version": "3.7.9", - "resolved": "http://registry.npmjs.org/mux-demux/-/mux-demux-3.7.9.tgz", + "resolved": "https://registry.npmjs.org/mux-demux/-/mux-demux-3.7.9.tgz", "integrity": "sha1-NTZ3GP02AcgLzi63YlMVdtekrO8=", "requires": { "duplex": "~1.0.0", @@ -10128,7 +10044,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -11581,7 +11497,7 @@ "dependencies": { "minimist": { "version": "0.0.10", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, @@ -11643,7 +11559,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -11659,7 +11575,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -11848,7 +11764,7 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, @@ -12137,7 +12053,7 @@ }, "pretty-bytes": { "version": "1.0.4", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", "dev": true, "requires": { @@ -12208,7 +12124,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -12220,13 +12136,13 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "through2": { "version": "0.2.3", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", "dev": true, "requires": { @@ -12693,7 +12609,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -12918,7 +12834,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "dev": true, "requires": { "lodash": "^4.17.11" } @@ -12927,7 +12842,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", - "dev": true, "requires": { "request-promise-core": "1.1.2", "stealthy-require": "^1.1.1", @@ -13119,7 +13033,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -13244,7 +13158,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -13384,7 +13298,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -13417,7 +13331,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -13495,7 +13409,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -13571,7 +13485,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { "define-property": "^1.0.0", @@ -13622,7 +13536,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { "kind-of": "^3.2.0" @@ -13705,7 +13619,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -13958,7 +13872,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -13967,7 +13881,7 @@ "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", "dev": true, "requires": { "through2": "^2.0.2" @@ -14070,8 +13984,7 @@ "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "stream-browserify": { "version": "2.0.2", @@ -14085,7 +13998,7 @@ }, "stream-combiner": { "version": "0.0.2", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.2.tgz", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.2.tgz", "integrity": "sha1-3+DnRnV0JWXnbGBWeI6lwjvZfbQ=", "requires": { "duplexer": "~0.0.3" @@ -14128,7 +14041,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -14143,7 +14056,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -14154,7 +14067,7 @@ }, "stream-serializer": { "version": "1.1.2", - "resolved": "http://registry.npmjs.org/stream-serializer/-/stream-serializer-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/stream-serializer/-/stream-serializer-1.1.2.tgz", "integrity": "sha1-wfl9FdolH1lK4n1B7IraCahG408=" }, "stream-shift": { @@ -14164,17 +14077,27 @@ "dev": true }, "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", + "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", "dev": true, "requires": { - "date-format": "^1.2.0", + "async": "^2.6.1", + "date-format": "^2.0.0", "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "fs-extra": "^7.0.0", + "lodash": "^4.17.10" }, "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -14184,6 +14107,17 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -14229,7 +14163,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -14645,7 +14579,7 @@ }, "tar": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { @@ -14815,7 +14749,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { @@ -14998,7 +14932,7 @@ "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, "requires": { "nopt": "~1.0.10" @@ -15087,7 +15021,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -15200,7 +15134,7 @@ }, "underscore": { "version": "1.7.0", - "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, "underscore.string": { @@ -15532,6 +15466,12 @@ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", "dev": true }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -15713,7 +15653,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -16216,7 +16156,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -16229,7 +16169,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -16646,7 +16586,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlcreate": { diff --git a/package.json b/package.json index 13ae9bd7f..a6ca2f697 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "jasmine-reporters": "^2.3.2", "jasmine-spec-reporter": "^4.2.1", "json-loader": "^0.5.7", - "karma": "^3.1.4", + "karma": "^4.0.1", "karma-chrome-launcher": "^2.2.0", "karma-firefox-launcher": "^1.1.0", "karma-jasmine": "^2.0.1", diff --git a/print/config/routes.json b/print/config/routes.json index c8326effa..88365b1d0 100644 --- a/print/config/routes.json +++ b/print/config/routes.json @@ -11,7 +11,7 @@ {"type": "report", "name": "rpt-claim-pickup-order"}, {"type": "report", "name": "rpt-letter-debtor"}, {"type": "report", "name": "rpt-sepa-core"}, - {"type": "report", "name": "rpt-informe"}, + {"type": "report", "name": "rpt-receipt"}, {"type": "static", "name": "email-header"}, {"type": "static", "name": "email-footer"}, {"type": "static", "name": "report-header"}, diff --git a/print/lib/reportEngine.js b/print/lib/reportEngine.js index dccb18b4a..8c771c449 100644 --- a/print/lib/reportEngine.js +++ b/print/lib/reportEngine.js @@ -26,7 +26,8 @@ module.exports = { const result = await this.preFetch(component, ctx); const i18n = new VueI18n({ locale: 'es', - fallbackLocale: 'es' + fallbackLocale: 'es', + silentTranslationWarn: true }); const app = new Vue({i18n, render: h => h(result.component)}); diff --git a/print/package-lock.json b/print/package-lock.json index 65f4abb6f..2be86cc84 100644 --- a/print/package-lock.json +++ b/print/package-lock.json @@ -242,9 +242,9 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "denque": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.3.0.tgz", - "integrity": "sha512-4SRaSj+PqmrS1soW5/Avd7eJIM2JJIqLLmwhRqIGleZM/8KwZq80njbSS2Iqas+6oARkSkLDHEk4mm78q3JlIg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.0.tgz", + "integrity": "sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ==" }, "dom-serializer": { "version": "0.1.0", @@ -690,9 +690,9 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -743,33 +743,26 @@ "optional": true }, "mysql2": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.6.4.tgz", - "integrity": "sha512-ZYbYgK06HKfxU45tYYLfwW5gKt8BslfE7FGyULNrf2K2fh+DuEX+e0QKsd2ObpZkMILefaVn8hsakVsTFqravQ==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.6.5.tgz", + "integrity": "sha512-zedaOOyb3msuuZcJJnxIX/EGOpmljDG7B+UevRH5lqcv+yhy9eCwkArBz8/AO+/rlY3/oCsOdG8R5oD6k0hNfg==", "requires": { - "denque": "1.3.0", + "denque": "^1.4.0", "generate-function": "^2.3.1", "iconv-lite": "^0.4.24", "long": "^4.0.0", - "lru-cache": "4.1.3", - "named-placeholders": "1.1.1", - "seq-queue": "0.0.5", - "sqlstring": "2.3.1" + "lru-cache": "^4.1.3", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" } }, "named-placeholders": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.1.tgz", - "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", "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=" - } + "lru-cache": "^4.1.3" } }, "nice-try": { @@ -1131,19 +1124,19 @@ } }, "vue": { - "version": "2.5.22", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.22.tgz", - "integrity": "sha512-pxY3ZHlXNJMFQbkjEgGVMaMMkSV1ONpz+4qB55kZuJzyJOhn6MSy/YZdzhdnumegNzVTL/Dn3Pp4UrVBYt1j/g==" + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.7.tgz", + "integrity": "sha512-g7ADfQ82QU+j6F/bVDioVQf2ccIMYLuR4E8ev+RsDBlmwRkhGO3HhgF4PF9vpwjdPpxyb1zzLur2nQ2oIMAMEg==" }, "vue-i18n": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.7.0.tgz", - "integrity": "sha512-qey+OyZSUIje0xJW8HZrvpIss1jW8yBBRe+0QlUn7HENU31m/+Med/u4pcwjoeCaErHU9WMscBEhqK5aAvvEEQ==" + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.8.2.tgz", + "integrity": "sha512-P09ZN2S0mX1AmhSR/+wP2owP3izGVx1pSoDFcOXTLya5xvP95dG7kc9LQUnboPgSzK/JKe9FkYmoYdDTKDjPSw==" }, "vue-server-renderer": { - "version": "2.5.22", - "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.5.22.tgz", - "integrity": "sha512-PQ0PubA6b2MyZud/gepWeiUuDFSbRfa6h1qYINcbwXRr4Z3yLTHprEQuFnWikdkTkZpeLFYUqZrDxPbDcJ71mA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.7.tgz", + "integrity": "sha512-CVtGR+bE63y4kyIeOcCEF2UNKquSquFQAsTHZ5R1cGM4L4Z0BXgAUEcngTOy8kN+tubt3c1zpRvbrok/bHKeDg==", "requires": { "chalk": "^1.1.3", "hash-sum": "^1.0.2", diff --git a/print/package.json b/print/package.json index 8c922b8a9..bb7c32a3e 100755 --- a/print/package.json +++ b/print/package.json @@ -16,11 +16,11 @@ "fs-extra": "^7.0.1", "html-pdf": "^2.2.0", "juice": "^5.0.1", - "mysql2": "^1.6.1", + "mysql2": "^1.6.5", "nodemailer": "^4.7.0", "strftime": "^0.10.0", - "vue": "^2.5.17", - "vue-i18n": "^8.3.1", - "vue-server-renderer": "^2.5.17" + "vue": "^2.6.7", + "vue-i18n": "^8.8.2", + "vue-server-renderer": "^2.6.7" } } diff --git a/print/report/printer-setup/locale.js b/print/report/printer-setup/locale.js index 34365cca7..e39a4a088 100644 --- a/print/report/printer-setup/locale.js +++ b/print/report/printer-setup/locale.js @@ -21,6 +21,8 @@ module.exports = { 'Abre el programa QLabel', 'Haz clic en el icono de la barra superior con forma de "carpeta"', 'Selecciona el archivo llamado "model.ezp" adjunto en este correo, y haz click en abrir', + 'Ve a "File" -> "Save as" y guárdalo en el escritorio con otro nombre', + 'Cierra el Qlabel y abre el archivo que acabamos de guardar', 'Haz clic encima del texto con el botón secundario del ratón', 'Elige la primera opción "setup"', 'Cambia el texto para imprimir', diff --git a/print/report/rpt-delivery-note/assets/css/style.css b/print/report/rpt-delivery-note/assets/css/style.css index e05617e6e..04474d4c8 100644 --- a/print/report/rpt-delivery-note/assets/css/style.css +++ b/print/report/rpt-delivery-note/assets/css/style.css @@ -9,16 +9,11 @@ max-width: 150px } -#packagings { - box-sizing: border-box; - padding-right: 10px -} - -#taxes { - box-sizing: border-box; - padding-left: 10px -} - .description.phytosanitary { background-color: #e5e5e5 +} + +h3 { + font-weight: 100; + color: #555 } \ No newline at end of file diff --git a/print/report/rpt-delivery-note/index.html b/print/report/rpt-delivery-note/index.html index 65b1866ae..4a994f847 100644 --- a/print/report/rpt-delivery-note/index.html +++ b/print/report/rpt-delivery-note/index.html @@ -58,6 +58,9 @@ + + +

{{$t('saleLines')}}

@@ -116,32 +119,40 @@
+ +
-
-

{{$t('packaging')}}

+ +
+

{{$t('services')}}

- + + - - - - + + + + + - - - + + +
Id {{$t('concept')}} {{$t('quantity')}}{{$t('vatType')}}{{$t('amount')}}
{{packaging.itemFk}}{{packaging.name}}{{packaging.quantity}}
{{service.description}}{{service.quantity}}{{service.taxDescription}}{{service.price | currency('EUR')}}
{{$t('total')}}0
{{$t('total')}} {{serviceTotal | currency('EUR')}}
+ + +

{{$t('taxBreakdown')}}

@@ -175,15 +186,41 @@
+ + + +
+

{{$t('packagings')}}

+ + + + + + + + + + + + + + + +
Id{{$t('concept')}}{{$t('quantity')}}
{{packaging.itemFk}}{{packaging.name}}{{packaging.quantity}}
+
+ + +
-
Firma digital
+
{{$t('digitalSignature')}}
{{signature.created | date}}
+
diff --git a/print/report/rpt-delivery-note/index.js b/print/report/rpt-delivery-note/index.js index 0a1afc7e5..68450252c 100755 --- a/print/report/rpt-delivery-note/index.js +++ b/print/report/rpt-delivery-note/index.js @@ -14,11 +14,12 @@ module.exports = { const [[taxes]] = await this.fetchTaxes(params.ticketFk); const [sales] = await this.fetchSales(params.ticketFk); const [packagings] = await this.fetchPackagings(params.ticketFk); + const [services] = await this.fetchServices(params.ticketFk); if (!ticket) throw new UserException('No ticket data found'); - return {client, ticket, address, sales, taxes, packagings, signature}; + return {client, ticket, address, sales, taxes, packagings, services, signature}; }, created() { if (this.client.locale) @@ -35,6 +36,14 @@ module.exports = { }, shipped() { return strftime('%d-%m-%Y', this.ticket.shipped); + }, + serviceTotal() { + let total = 0.00; + this.services.forEach(service => { + total += parseFloat(service.price) * service.quantity; + }); + + return total; } }, filters: { @@ -169,6 +178,17 @@ module.exports = { WHERE tp.ticketFk = ? ORDER BY itemFk`, [ticketFk]); }, + fetchServices(ticketFk) { + return database.pool.query( + `SELECT + tc.description taxDescription, + ts.description, + ts.quantity, + ts.price + FROM ticketService ts + JOIN taxClass tc ON tc.id = ts.taxClassFk + WHERE ts.ticketFk = ?`, [ticketFk]); + }, fetchSignature(ticketFk) { return database.pool.query( `SELECT diff --git a/print/report/rpt-delivery-note/locale.js b/print/report/rpt-delivery-note/locale.js index afc54c72c..c637d9977 100644 --- a/print/report/rpt-delivery-note/locale.js +++ b/print/report/rpt-delivery-note/locale.js @@ -6,6 +6,7 @@ module.exports = { clientId: 'Cliente', deliveryAddress: 'Dirección de entrega', fiscalData: 'Datos fiscales', + saleLines: 'Líneas de pedido', date: 'Fecha', reference: 'Ref.', quantity: 'Cant.', @@ -18,10 +19,13 @@ module.exports = { taxBase: 'Base imp.', tax: 'Tasa', fee: 'Cuota', - packaging: 'Cubos y embalajes', - taxBreakdown: 'Desglose impositivo', total: 'Total', subtotal: 'Subtotal', + taxBreakdown: 'Desglose impositivo', + packagings: 'Cubos y embalajes', + services: 'Servicios', + vatType: 'Tipo de IVA', + digitalSignature: 'Firma digital', ticket: 'Albarán {0}' }, }, diff --git a/print/report/rpt-informe/index.js b/print/report/rpt-informe/index.js deleted file mode 100755 index b5204e8c7..000000000 --- a/print/report/rpt-informe/index.js +++ /dev/null @@ -1,33 +0,0 @@ -const strftime = require('strftime'); - -module.exports = { - name: 'rpt-informe', - created() { - if (this.locale) - this.$i18n.locale = this.locale; - - const embeded = []; - this.files.map(file => { - embeded[file] = `file://${__dirname + file}`; - }); - this.embeded = embeded; - }, - data() { - return { - client: { - id: 101, - name: 'Batman' - }, - files: ['/assets/images/signature.png'], - }; - }, - methods: { - /* dated: () => { - return strftime('%d-%m-%Y', new Date()); - }, */ - }, - components: { - 'report-header': require('../report-header'), - 'report-footer': require('../report-footer'), - }, -}; diff --git a/print/report/rpt-informe/locale.js b/print/report/rpt-informe/locale.js deleted file mode 100644 index 69f63bce6..000000000 --- a/print/report/rpt-informe/locale.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - messages: { - es: { - title: 'Recibo', - date: 'Fecha', - dated: 'En {0}, a {1} de {2} de {3}', - client: 'Cliente {0}', - }, - }, -}; diff --git a/print/report/rpt-informe/assets/css/index.js b/print/report/rpt-receipt/assets/css/index.js similarity index 100% rename from print/report/rpt-informe/assets/css/index.js rename to print/report/rpt-receipt/assets/css/index.js diff --git a/print/report/rpt-informe/assets/css/style.css b/print/report/rpt-receipt/assets/css/style.css similarity index 81% rename from print/report/rpt-informe/assets/css/style.css rename to print/report/rpt-receipt/assets/css/style.css index 9dd6ff5b8..350925428 100644 --- a/print/report/rpt-informe/assets/css/style.css +++ b/print/report/rpt-receipt/assets/css/style.css @@ -3,10 +3,6 @@ p { margin: 0 } -.main { - position: relative; - height: 100% -} .content { position: absolute; diff --git a/print/report/rpt-informe/assets/images/signature.png b/print/report/rpt-receipt/assets/images/signature.png similarity index 100% rename from print/report/rpt-informe/assets/images/signature.png rename to print/report/rpt-receipt/assets/images/signature.png diff --git a/print/report/rpt-informe/index.html b/print/report/rpt-receipt/index.html similarity index 51% rename from print/report/rpt-informe/index.html rename to print/report/rpt-receipt/index.html index f77c5d2ae..99058dd9c 100644 --- a/print/report/rpt-informe/index.html +++ b/print/report/rpt-receipt/index.html @@ -3,20 +3,27 @@
- +

{{$t('title')}}

- Recibo de LEON LLORENS LUIS ENRIQUE, - la cantidad de 259,96 € en concepto de 'entrega a cuenta', quedando pendiente en la cuenta del cliente - un saldo de 0,00 €. + Recibo de {{client.socialName}}, + la cantidad de {{receipt.amountPaid}} € en concepto de 'entrega a cuenta', + quedando pendiente en la cuenta del cliente + un saldo de {{receipt.amountUnpaid}} €.

-

{{$t('dated', ['Silla', '20', 'enero', '2019'])}}

+

{{$t('payed', [ + 'Silla', + receipt.payed.getDate(), + $t('months')[receipt.payed.getMonth()], + receipt.payed.getFullYear()]) + }} +

@@ -24,8 +31,8 @@ + :center-text="client.socialName" + :locale="client.locale">
diff --git a/print/report/rpt-receipt/index.js b/print/report/rpt-receipt/index.js new file mode 100755 index 000000000..7a173e6ee --- /dev/null +++ b/print/report/rpt-receipt/index.js @@ -0,0 +1,71 @@ +const strftime = require('strftime'); +const database = require(`${appPath}/lib/database`); +const UserException = require(`${appPath}/lib/exceptions/userException`); + +module.exports = { + name: 'rpt-receipt', + /* serverPrefetch() { + console.log(arguments); + return new Promise(accept => { + this.client = this.getReceipt(); + }); + }, */ + async asyncData(ctx, params) { + Object.assign(this, this.methods); + + const [[client]] = await this.fetchClient(params.receiptFk); + const [[receipt]] = await this.fetchReceipt(params.receiptFk); + + if (!receipt) + throw new UserException('No receipt data found'); + + return {client, receipt}; + }, + created() { + if (this.client.locale) + this.$i18n.locale = this.client.locale; + + const embeded = []; + this.files.map(file => { + embeded[file] = `file://${__dirname + file}`; + }); + this.embeded = embeded; + }, + data() { + return { + files: ['/assets/images/signature.png'] + }; + }, + methods: { + fetchClient(receiptFk) { + return database.pool.query( + `SELECT + c.id, + c.socialName, + u.lang locale + FROM receipt r + JOIN client c ON c.id = r.clientFk + JOIN account.user u ON u.id = c.id + WHERE r.id = ?`, [receiptFk]); + }, + fetchReceipt(receiptFk) { + return database.pool.query( + `SELECT + r.id, + r.amountPaid, + r.amountUnpaid, + r.payed, + r.companyFk + FROM receipt r + JOIN client c ON c.id = r.clientFk + WHERE r.id = ?`, [receiptFk]); + } + /* dated: () => { + return strftime('%d-%m-%Y', new Date()); + }, */ + }, + components: { + 'report-header': require('../report-header'), + 'report-footer': require('../report-footer'), + }, +}; diff --git a/print/report/rpt-receipt/locale.js b/print/report/rpt-receipt/locale.js new file mode 100644 index 000000000..b8d524274 --- /dev/null +++ b/print/report/rpt-receipt/locale.js @@ -0,0 +1,24 @@ +module.exports = { + messages: { + es: { + title: 'Recibo', + date: 'Fecha', + payed: 'En {0}, a {1} de {2} de {3}', + client: 'Cliente {0}', + months: [ + 'Enero', + 'Febrero', + 'Marzo', + 'Abril', + 'Mayo', + 'Junio', + 'Julio', + 'Agosto', + 'Septiembre', + 'Octubre', + 'Noviembre', + 'Diciembre' + ] + }, + }, +}; From dd7ded018bd4d6534d11a449539de858e2b9f9f7 Mon Sep 17 00:00:00 2001 From: Gerard Date: Tue, 5 Mar 2019 15:00:17 +0100 Subject: [PATCH 21/57] test fixed --- modules/ticket/back/methods/ticket/specs/filter.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ticket/back/methods/ticket/specs/filter.spec.js b/modules/ticket/back/methods/ticket/specs/filter.spec.js index 5b27bd0dc..648cfe3ba 100644 --- a/modules/ticket/back/methods/ticket/specs/filter.spec.js +++ b/modules/ticket/back/methods/ticket/specs/filter.spec.js @@ -2,7 +2,7 @@ const app = require('vn-loopback/server/server'); describe('ticket filter()', () => { it('should call the filter method', async() => { - let ctx = {req: {accessToken: {userId: 9}}}; + let ctx = {req: {accessToken: {userId: 9}}, args: {}}; let filter = {order: 'shipped DESC'}; let result = await app.models.Ticket.filter(ctx, filter); From 8923970e75d94634b7fc8e33af40f4f10a307d7e Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 08:54:04 +0100 Subject: [PATCH 22/57] e2e fixed --- e2e/helpers/selectors.js | 2 +- modules/ticket/front/services/index.html | 7 ++++--- modules/ticket/front/services/index.js | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index a37d63854..818232ef5 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -425,7 +425,7 @@ export default { addServiceButton: 'vn-ticket-service > form > vn-card > div > vn-one:nth-child(3) > vn-icon-button > button > vn-icon', firstDescriptionInput: 'vn-ticket-service vn-textfield[label="Description"] input', firstQuantityInput: 'vn-ticket-service vn-textfield[label="Quantity"] input', - firstPriceInput: 'vn-ticket-service vn-textfield[label="Price"] input', + firstPriceInput: 'vn-ticket-service vn-input-number[label="Price"] input', firstVatTypeAutocomplete: 'vn-ticket-service vn-autocomplete[label="Tax class"]', fistDeleteServiceButton: 'vn-ticket-card > vn-main-block > div.content-block.ng-scope > vn-ticket-service > form > vn-card > div > vn-one:nth-child(1) > vn-horizontal:nth-child(1) > vn-auto > vn-icon-button[icon="delete"]', serviceLine: 'vn-ticket-service > form > vn-card > div > vn-one:nth-child(2) > vn-horizontal', diff --git a/modules/ticket/front/services/index.html b/modules/ticket/front/services/index.html index ba50c4651..83b504021 100644 --- a/modules/ticket/front/services/index.html +++ b/modules/ticket/front/services/index.html @@ -27,12 +27,13 @@ model="service.quantity" rule="TicketService.quantity"> - - + display-controls="false"> + { this.$scope.watcher.notifySaved(); + this.$scope.model.refresh(); }); } } From 80168900fee2cab8de6ab8b7cfa9c732737165d2 Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 08:54:32 +0100 Subject: [PATCH 23/57] e2e fixed --- e2e/paths/ticket-module/13_create_ticket_services.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e/paths/ticket-module/13_create_ticket_services.spec.js b/e2e/paths/ticket-module/13_create_ticket_services.spec.js index 394b7cd9f..0d9ae610c 100644 --- a/e2e/paths/ticket-module/13_create_ticket_services.spec.js +++ b/e2e/paths/ticket-module/13_create_ticket_services.spec.js @@ -17,7 +17,6 @@ describe('Ticket services path', () => { .write(selectors.ticketService.firstDescriptionInput, 'my service') .clearInput(selectors.ticketService.firstQuantityInput) .write(selectors.ticketService.firstQuantityInput, 99) - .clearInput(selectors.ticketService.firstPriceInput) .write(selectors.ticketService.firstPriceInput, 999) .autocompleteSearch(selectors.ticketService.firstVatTypeAutocomplete, 'General VAT') .waitToClick(selectors.ticketService.saveServiceButton) From b2adde4ba341ff5a7046c2d1a48b1344c256dbd4 Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 08:54:56 +0100 Subject: [PATCH 24/57] #1176 ticket.sale actualizar descuento --- .../ticket/back/methods/sale/updateDiscount.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/ticket/back/methods/sale/updateDiscount.js b/modules/ticket/back/methods/sale/updateDiscount.js index 1c1db1927..e1793241b 100644 --- a/modules/ticket/back/methods/sale/updateDiscount.js +++ b/modules/ticket/back/methods/sale/updateDiscount.js @@ -1,7 +1,7 @@ let UserError = require('vn-loopback/util/user-error'); module.exports = Self => { - Self.remoteMethod('updateDiscount', { + Self.remoteMethodCtx('updateDiscount', { description: 'Changes the discount of a sale', accessType: '', accepts: [{ @@ -21,16 +21,12 @@ module.exports = Self => { } }); - Self.updateDiscount = async params => { + Self.updateDiscount = async(ctx, params) => { if (isNaN(params.editLines[0].discount)) throw new UserError(`The value should be a number`); let model = Self.app.models; let thisTicketIsEditable = await model.Ticket.isEditable(params.editLines[0].ticketFk); - - if (!thisTicketIsEditable) - throw new UserError(`The sales of this ticket can't be modified`); - let ticket = await model.Ticket.find({ where: { id: params.editLines[0].ticketFk @@ -41,9 +37,16 @@ module.exports = Self => { fields: ['salesPersonFk'] } }], - fields: ['id', 'clientFk'] + fields: ['id', 'clientFk', 'refFk'] }); + let userId = ctx.req.accessToken.userId; + let isSalesAssistant = await Self.app.models.Account.hasRole(userId, 'salesAssistant'); + + if ((!thisTicketIsEditable && !isSalesAssistant) || (ticket.refFk && isSalesAssistant)) + throw new UserError(`The sales of this ticket can't be modified`); + + let componentToUse; let usesMana = await model.WorkerMana.findOne({where: {workerFk: ticket[0].client().salesPersonFk}, fields: 'amount'}); From 49d2a367eaf0b4bcce506e3d77564017acc9dd47 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Wed, 6 Mar 2019 09:26:05 +0100 Subject: [PATCH 25/57] #1210 e2e item.index ocultar columnas selectors --- e2e/helpers/selectors.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index a37d63854..1267a8708 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -171,7 +171,7 @@ export default { firstPaymentConfirmed: 'vn-client-web-payment vn-tr:nth-child(1) vn-icon[icon="check"][aria-hidden="false"]' }, itemsIndex: { - goBackToModuleIndexButton: `vn-ticket-descriptor a[href="#!/ticket/index"]`, + goBackToModuleIndexButton: `vn-item-descriptor a[href="#!/item/index"]`, createItemButton: `${components.vnFloatButton}`, searchResult: `vn-item-index a.vn-tr`, searchResultPreviewButton: `vn-item-index .buttons > [icon="desktop_windows"]`, @@ -179,7 +179,23 @@ export default { acceptClonationAlertButton: `vn-item-index [vn-id="clone"] [response="ACCEPT"]`, searchItemInput: `vn-searchbar vn-textfield input`, searchButton: `vn-searchbar vn-icon[icon="search"]`, - closeItemSummaryPreview: 'vn-item-index [vn-id="preview"] button.close' + closeItemSummaryPreview: 'vn-item-index [vn-id="preview"] button.close', + fieldsToShowButton: 'vn-item-index vn-table > div.ng-scope > div > vn-icon-button[icon="menu"]', + fieldsToShowForm: 'vn-item-index > div > vn-card > div > vn-table > div.ng-scope > div > vn-dialog > div > form', + firstItemImage: 'vn-item-index vn-tbody > a:nth-child(1) > vn-td:nth-child(1)', + firstItemId: 'vn-item-index vn-tbody > a:nth-child(1) > vn-td:nth-child(2)', + idCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(2) > vn-check > md-checkbox', + stemsCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(3) > vn-check > md-checkbox', + sizeCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(4) > vn-check > md-checkbox', + nicheCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(5) > vn-check > md-checkbox', + typeCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(6) > vn-check > md-checkbox', + categoryCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(7) > vn-check > md-checkbox', + intrastadCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(8) > vn-check > md-checkbox', + originCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(9) > vn-check > md-checkbox', + buyerCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(10) > vn-check > md-checkbox', + destinyCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(11) > vn-check > md-checkbox', + taxClassCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(12) > vn-check > md-checkbox', + saveFieldsButton: 'vn-item-index vn-dialog vn-horizontal:nth-child(17) > vn-button > button' }, itemCreateView: { temporalName: `${components.vnTextfield}[name="provisionalName"]`, From c4bcd52d3c9f2dfd22114737f95cf8604f3d1b50 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Wed, 6 Mar 2019 09:50:12 +0100 Subject: [PATCH 26/57] #1210 e2e item.index ocultar columnas --- e2e/paths/item-module/10_item_index.spec.js | 86 ++++++++++ package-lock.json | 172 ++++++++++---------- 2 files changed, 172 insertions(+), 86 deletions(-) create mode 100644 e2e/paths/item-module/10_item_index.spec.js diff --git a/e2e/paths/item-module/10_item_index.spec.js b/e2e/paths/item-module/10_item_index.spec.js new file mode 100644 index 000000000..32e855cee --- /dev/null +++ b/e2e/paths/item-module/10_item_index.spec.js @@ -0,0 +1,86 @@ +import selectors from '../../helpers/selectors.js'; +import createNightmare from '../../helpers/nightmare'; + +// #1216 item.index ocultar columnas no refresca la vista al guardar la información +xdescribe('Item index path', () => { + const nightmare = createNightmare(); + + beforeAll(() => { + nightmare + .loginAndModule('salesPerson', 'item'); + }); + + it('should click on the fields to show button to open the list of columns to show', async() => { + const visible = await nightmare + .waitToClick(selectors.itemsIndex.fieldsToShowButton) + .isVisible(selectors.itemsIndex.fieldsToShowForm); + + expect(visible).toBeTruthy(); + }); + + it('should unmark all checkboxes except the first and the last ones', async() => { + const result = await nightmare + .waitToClick(selectors.itemsIndex.idCheckbox) + .waitToClick(selectors.itemsIndex.stemsCheckbox) + .waitToClick(selectors.itemsIndex.sizeCheckbox) + .waitToClick(selectors.itemsIndex.nicheCheckbox) + .waitToClick(selectors.itemsIndex.typeCheckbox) + .waitToClick(selectors.itemsIndex.categoryCheckbox) + .waitToClick(selectors.itemsIndex.intrastadCheckbox) + .waitToClick(selectors.itemsIndex.originCheckbox) + .waitToClick(selectors.itemsIndex.buyerCheckbox) + .waitToClick(selectors.itemsIndex.destinyCheckbox) + .waitToClick(selectors.itemsIndex.taxClassCheckbox) + .waitToClick(selectors.itemsIndex.saveFieldsButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); + + it('should navigate forth and back to see the images column is still visible', async() => { + const imageVisible = await nightmare + .waitToClick(selectors.itemsIndex.searchResult) + .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) + .wait(selectors.itemsIndex.searchResult) + .isVisible(selectors.itemsIndex.firstItemImage); + + expect(imageVisible).toBeTruthy(); + }); + + it('should check the ids column is not visible', async() => { + const idVisible = await nightmare + .isVisible(selectors.itemsIndex.firstItemId); + + expect(idVisible).toBeFalsy(); + }); + + it('should mark all unchecked boxes to leave the index as it was', async() => { + const result = await nightmare + .waitToClick(selectors.itemsIndex.fieldsToShowButton) + .waitToClick(selectors.itemsIndex.idCheckbox) + .waitToClick(selectors.itemsIndex.stemsCheckbox) + .waitToClick(selectors.itemsIndex.sizeCheckbox) + .waitToClick(selectors.itemsIndex.nicheCheckbox) + .waitToClick(selectors.itemsIndex.typeCheckbox) + .waitToClick(selectors.itemsIndex.categoryCheckbox) + .waitToClick(selectors.itemsIndex.intrastadCheckbox) + .waitToClick(selectors.itemsIndex.originCheckbox) + .waitToClick(selectors.itemsIndex.buyerCheckbox) + .waitToClick(selectors.itemsIndex.destinyCheckbox) + .waitToClick(selectors.itemsIndex.taxClassCheckbox) + .waitToClick(selectors.itemsIndex.saveFieldsButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); + + it('should now navigate forth and back to see the ids column is now visible', async() => { + const idVisible = await nightmare + .waitToClick(selectors.itemsIndex.searchResult) + .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) + .wait(1999) + .isVisible(selectors.itemsIndex.firstItemId); + + expect(idVisible).toBeTruthy(); + }); +}); diff --git a/package-lock.json b/package-lock.json index 4e29d792d..e774036c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1505,7 +1505,7 @@ }, "util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -1733,7 +1733,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -2052,7 +2052,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2097,7 +2097,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2147,7 +2147,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -2322,7 +2322,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -2366,7 +2366,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2497,7 +2497,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -2657,7 +2657,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -2731,7 +2731,7 @@ }, "colors": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, @@ -2927,7 +2927,7 @@ }, "content-disposition": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-security-policy-builder": { @@ -3020,7 +3020,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3033,7 +3033,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -3196,13 +3196,13 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, "regexpu-core": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { @@ -3213,13 +3213,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -3568,7 +3568,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -3689,7 +3689,7 @@ "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", "dev": true, "requires": { "is-obj": "^1.0.0" @@ -3697,12 +3697,12 @@ }, "duplex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/duplex/-/duplex-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/duplex/-/duplex-1.0.0.tgz", "integrity": "sha1-arxcFuwX5MV4V4cnEmcAWQ06Ldo=" }, "duplexer": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz", "integrity": "sha1-r8t/H4uNdPggcmFx1dZKyeSo/yA=" }, "duplexer2": { @@ -3722,7 +3722,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -3849,7 +3849,7 @@ "dependencies": { "fs-extra": { "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "dev": true, "requires": { @@ -3975,7 +3975,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -4126,7 +4126,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" @@ -4846,7 +4846,7 @@ }, "file-loader": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { @@ -5107,7 +5107,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -5906,7 +5906,7 @@ "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { "global-prefix": "^1.0.1", @@ -5943,7 +5943,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -5988,7 +5988,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -6165,7 +6165,7 @@ }, "kind-of": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true }, @@ -6349,7 +6349,7 @@ "dependencies": { "es6-promise": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, @@ -7112,7 +7112,7 @@ "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { "is-relative": "^1.0.0", @@ -7161,7 +7161,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -7308,7 +7308,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -7339,7 +7339,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" @@ -7375,7 +7375,7 @@ "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { "is-unc-path": "^1.0.0" @@ -7409,7 +7409,7 @@ "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { "unc-path-regex": "^0.1.2" @@ -7455,7 +7455,7 @@ }, "isemail": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", + "resolved": "http://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" }, "isexe": { @@ -7510,7 +7510,7 @@ }, "jasmine-core": { "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", "dev": true }, @@ -7527,7 +7527,7 @@ "jasmine-spec-reporter": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", "dev": true, "requires": { "colors": "1.1.2" @@ -7615,7 +7615,7 @@ }, "json-buffer": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-2.0.11.tgz", + "resolved": "http://registry.npmjs.org/json-buffer/-/json-buffer-2.0.11.tgz", "integrity": "sha1-PkQf2jCYvo0eMXGtWRvGKjPi1V8=" }, "json-loader": { @@ -7952,7 +7952,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -9426,7 +9426,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { @@ -9449,7 +9449,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -9572,7 +9572,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minstache": { @@ -9586,7 +9586,7 @@ "dependencies": { "commander": { "version": "1.0.4", - "resolved": "http://registry.npmjs.org/commander/-/commander-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.4.tgz", "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=", "dev": true, "requires": { @@ -9654,7 +9654,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -9662,7 +9662,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } @@ -9737,7 +9737,7 @@ "dependencies": { "through": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.4.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.4.tgz", "integrity": "sha1-SV5A6Nio6uvHwnXqiMK4/BTFZFU=" } } @@ -9814,7 +9814,7 @@ }, "multipipe": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { @@ -9840,7 +9840,7 @@ }, "mux-demux": { "version": "3.7.9", - "resolved": "https://registry.npmjs.org/mux-demux/-/mux-demux-3.7.9.tgz", + "resolved": "http://registry.npmjs.org/mux-demux/-/mux-demux-3.7.9.tgz", "integrity": "sha1-NTZ3GP02AcgLzi63YlMVdtekrO8=", "requires": { "duplex": "~1.0.0", @@ -10044,7 +10044,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -11497,7 +11497,7 @@ "dependencies": { "minimist": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, @@ -11559,7 +11559,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -11575,7 +11575,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -11764,7 +11764,7 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, @@ -12053,7 +12053,7 @@ }, "pretty-bytes": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", "dev": true, "requires": { @@ -12124,7 +12124,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -12136,13 +12136,13 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "through2": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", "dev": true, "requires": { @@ -12609,7 +12609,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -13033,7 +13033,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -13158,7 +13158,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -13298,7 +13298,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -13331,7 +13331,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -13409,7 +13409,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -13485,7 +13485,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { "define-property": "^1.0.0", @@ -13536,7 +13536,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { "kind-of": "^3.2.0" @@ -13619,7 +13619,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -13872,7 +13872,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -13881,7 +13881,7 @@ "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, "requires": { "through2": "^2.0.2" @@ -13998,7 +13998,7 @@ }, "stream-combiner": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.2.tgz", + "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.2.tgz", "integrity": "sha1-3+DnRnV0JWXnbGBWeI6lwjvZfbQ=", "requires": { "duplexer": "~0.0.3" @@ -14041,7 +14041,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -14056,7 +14056,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -14067,7 +14067,7 @@ }, "stream-serializer": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/stream-serializer/-/stream-serializer-1.1.2.tgz", + "resolved": "http://registry.npmjs.org/stream-serializer/-/stream-serializer-1.1.2.tgz", "integrity": "sha1-wfl9FdolH1lK4n1B7IraCahG408=" }, "stream-shift": { @@ -14163,7 +14163,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -14579,7 +14579,7 @@ }, "tar": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { @@ -14749,7 +14749,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { @@ -14932,7 +14932,7 @@ "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", "dev": true, "requires": { "nopt": "~1.0.10" @@ -15021,7 +15021,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -15134,7 +15134,7 @@ }, "underscore": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, "underscore.string": { @@ -15653,7 +15653,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -16156,7 +16156,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -16169,7 +16169,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -16586,7 +16586,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlcreate": { From 665f34b67e6db8fe6f35d383d79f1142e6d0a6ea Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 11:05:29 +0100 Subject: [PATCH 27/57] #1216 uvc now deletes the styles when you change the state --- front/core/directives/uvc.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/front/core/directives/uvc.js b/front/core/directives/uvc.js index 45e04a27b..c881cf545 100644 --- a/front/core/directives/uvc.js +++ b/front/core/directives/uvc.js @@ -49,13 +49,26 @@ export function directive($http, $compile, vnApp, $translate) { } }); - let rule = selectors.join(', ') + '{display: none;}'; - if ($scope.css) - document.head.removeChild($scope.css); - $scope.css = document.createElement('style'); - document.head.appendChild($scope.css); - $scope.css.appendChild(document.createTextNode(rule)); + if ($scope.css || document.querySelector('style[id="uvc"]')) { + let child = document.querySelector('style[id="uvc"]'); + child.parentNode.removeChild(child); + } + + if (selectors.length) { + let rule = selectors.join(', ') + '{display: none;}'; + $scope.css = document.createElement('style'); + $scope.css.setAttribute('id', 'uvc'); + document.head.appendChild($scope.css); + $scope.css.appendChild(document.createTextNode(rule)); + } + + $scope.$on('$destroy', () => { + if ($scope.css && document.querySelector('style[id="uvc"]')) { + let child = document.querySelector('style[id="uvc"]'); + child.parentNode.removeChild(child); + } + }); } function saveConfiguration(tableConfiguration) { From 6289978de8c79a80981418d289d4376c16c4f09c Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Wed, 6 Mar 2019 11:40:37 +0100 Subject: [PATCH 28/57] increased default timeout for 1 single test which failed constantly --- e2e/paths/ticket-module/13_create_ticket_services.spec.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/e2e/paths/ticket-module/13_create_ticket_services.spec.js b/e2e/paths/ticket-module/13_create_ticket_services.spec.js index 0d9ae610c..0b1c08463 100644 --- a/e2e/paths/ticket-module/13_create_ticket_services.spec.js +++ b/e2e/paths/ticket-module/13_create_ticket_services.spec.js @@ -7,7 +7,7 @@ describe('Ticket services path', () => { beforeAll(() => { nightmare .loginAndModule('employee', 'ticket') - .accessToSearchResult('id:1') + .accessToSearchResult('1') .accessToSection('ticket.card.service'); }); @@ -17,13 +17,14 @@ describe('Ticket services path', () => { .write(selectors.ticketService.firstDescriptionInput, 'my service') .clearInput(selectors.ticketService.firstQuantityInput) .write(selectors.ticketService.firstQuantityInput, 99) + .clearInput(selectors.ticketService.firstPriceInput) .write(selectors.ticketService.firstPriceInput, 999) .autocompleteSearch(selectors.ticketService.firstVatTypeAutocomplete, 'General VAT') .waitToClick(selectors.ticketService.saveServiceButton) .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); - }); + }, 15000); it('should confirm the service description was edited correctly', async() => { const result = await nightmare From eef85a47db2cae96b82a83e84d41ae0ccc85dc53 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Wed, 6 Mar 2019 11:40:52 +0100 Subject: [PATCH 29/57] #1210 e2e item.index ocultar columnas --- e2e/paths/item-module/10_item_index.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/e2e/paths/item-module/10_item_index.spec.js b/e2e/paths/item-module/10_item_index.spec.js index 32e855cee..36d8d07d8 100644 --- a/e2e/paths/item-module/10_item_index.spec.js +++ b/e2e/paths/item-module/10_item_index.spec.js @@ -1,8 +1,7 @@ import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/nightmare'; -// #1216 item.index ocultar columnas no refresca la vista al guardar la información -xdescribe('Item index path', () => { +describe('Item index path', () => { const nightmare = createNightmare(); beforeAll(() => { From 5efce3699c349fd15771042b0b5597778432238d Mon Sep 17 00:00:00 2001 From: Bernat Date: Wed, 6 Mar 2019 11:45:05 +0100 Subject: [PATCH 30/57] cau 9994 new procedure ticketCalculateSale --- db/install/changes/11-ticketCalculateSale.sql | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 db/install/changes/11-ticketCalculateSale.sql diff --git a/db/install/changes/11-ticketCalculateSale.sql b/db/install/changes/11-ticketCalculateSale.sql new file mode 100644 index 000000000..3f0f424da --- /dev/null +++ b/db/install/changes/11-ticketCalculateSale.sql @@ -0,0 +1,72 @@ +USE `vn`; +DROP procedure IF EXISTS `ticketCalculateSale`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculateSale`(IN vSale BIGINT) +proc: BEGIN + +/* +Este procedimiento bioniza una linea de movimiento +*/ + DECLARE vShipped DATE; + DECLARE vWarehouse SMALLINT; + DECLARE vAgencyMode INT; + DECLARE vAddress INT; + DECLARE vTicket BIGINT; + DECLARE vItem BIGINT; + DECLARE vLanded DATE; + DECLARE vTicketFree BOOLEAN DEFAULT TRUE; + + SELECT FALSE + INTO vTicketFree + FROM vn.ticket t + JOIN vn.sale s ON s.ticketFk = t.id + LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id + WHERE s.id = vSale + AND (t.refFk != "" OR (ts.alertLevel > 0 AND s.price != 0)) + LIMIT 1; + + SELECT ticketFk, itemFk + INTO vTicket, vItem + FROM sale + WHERE id = vSale; + + SELECT t.warehouseFk, DATE(t.shipped), t.addressFk, t.agencyModeFk, t.landed + INTO vWarehouse, vShipped, vAddress, vAgencyMode, vLanded + FROM agencyMode a + JOIN ticket t ON t.agencyModeFk = a.id + WHERE t.id = vTicket; + + DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetShipped; + CREATE TEMPORARY TABLE tmp.agencyHourGetShipped ENGINE = MEMORY + SELECT vWarehouse warehouseFk, vShipped shipped, vLanded landed; + + CALL buyUltimate (vWarehouse, vShipped); -- rellena la tabla tmp.buyUltimate con la ultima compra + + DELETE FROM tmp.buyUltimate WHERE itemFk != vItem; + + DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot; + CREATE TEMPORARY TABLE tmp.ticketLot + SELECT vWarehouse warehouseFk, NULL available, vItem itemFk, buyFk + FROM tmp.buyUltimate + WHERE itemFk = vItem; + + CALL ticketComponentCalculate(vAddress, vAgencyMode); + + DROP TEMPORARY TABLE IF EXISTS tmp.sale; + CREATE TEMPORARY TABLE tmp.sale + (PRIMARY KEY (saleFk)) ENGINE = MEMORY + SELECT vSale saleFk,vWarehouse warehouseFk; + + CALL ticketComponentUpdateSale(IF(vTicketFree,1,6)); -- si el ticket esta facturado, respeta los precios + + -- Log + INSERT INTO vn.ticketLog (originFk, userFk, `action`, description) + VALUES (vTicket, account.userGetId(), 'update', CONCAT('Bionizo linea id ', vSale)); + + -- Limpieza + DROP TEMPORARY TABLE tmp.buyUltimate; +END$$ + +DELIMITER ; \ No newline at end of file From 9db3275b674fbc6660ee29a47d63cc915edc8df5 Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 12:26:26 +0100 Subject: [PATCH 31/57] input time not showing icons fixed --- front/core/components/input-number/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/core/components/input-number/index.html b/front/core/components/input-number/index.html index bebeb6a31..64d76485f 100644 --- a/front/core/components/input-number/index.html +++ b/front/core/components/input-number/index.html @@ -3,7 +3,7 @@
Date: Wed, 6 Mar 2019 12:27:56 +0100 Subject: [PATCH 32/57] #1208 Cambiar componente de icono papelera vn-icon por vn-icon-button --- e2e/helpers/selectors.js | 2 +- modules/ticket/front/note/index.html | 4 ++-- modules/ticket/front/package/index.html | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index db1a50b38..68aa59a09 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -341,7 +341,7 @@ export default { packagesButton: `vn-left-menu a[ui-sref="ticket.card.package.index"]`, firstPackageAutocomplete: `vn-autocomplete[label="Package"]`, firstQuantityInput: `vn-textfield[label="Quantity"] input`, - firstRemovePackageButton: `vn-icon[vn-tooltip="Remove package"]`, + firstRemovePackageButton: `vn-icon-button[vn-tooltip="Remove package"]`, addPackageButton: `vn-icon-button[vn-tooltip="Add package"]`, clearPackageAutocompleteButton: `vn-autocomplete[label="Package"] > div > div > div > vn-icon > i`, savePackagesButton: `${components.vnSubmit}` diff --git a/modules/ticket/front/note/index.html b/modules/ticket/front/note/index.html index ce177b4cb..bc808ce8e 100644 --- a/modules/ticket/front/note/index.html +++ b/modules/ticket/front/note/index.html @@ -35,12 +35,12 @@ rule="ticketObservation.description"> - - + diff --git a/modules/ticket/front/package/index.html b/modules/ticket/front/package/index.html index d8a25c11a..5baf0580c 100644 --- a/modules/ticket/front/package/index.html +++ b/modules/ticket/front/package/index.html @@ -39,12 +39,12 @@ ng-readonly="true"> - - + From 0e3d568743828a0ea01ff6c06504b9fe13fe0d1e Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 14:06:36 +0100 Subject: [PATCH 33/57] #1218 ticket.new quitar restricciones al crear un ticket abono --- modules/ticket/back/methods/ticket/new.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/ticket/back/methods/ticket/new.js b/modules/ticket/back/methods/ticket/new.js index a1a53ca3b..db25fe715 100644 --- a/modules/ticket/back/methods/ticket/new.js +++ b/modules/ticket/back/methods/ticket/new.js @@ -36,10 +36,14 @@ module.exports = Self => { ] }); - {if (!address) - throw new UserError(`This address doesn't exist`);} + if (!address) + throw new UserError(`This address doesn't exist`); - if (address.client().type().code === 'normal') { + let agency; + if (params && params.agencyModeFk) + agency = await Self.app.models.AgencyMode.findById(params.agencyModeFk); + + if (address.client().type().code === 'normal' && (!agency || agency.code != 'refund')) { if (address.client().isFreezed) throw new UserError(`You can't create a ticket for a frozen client`); @@ -54,10 +58,6 @@ module.exports = Self => { throw new UserError(`You can't create a ticket for a client that has a debt`); } - let agency; - if (params.agencyModeFk) - agency = await Self.app.models.AgencyMode.findById(params.agencyModeFk); - if (!params.shipped && params.landed) { params.shipped = await Self.app.models.Agency.getShipped({ landed: params.landed, From af960e5f5f6ae5cba29195ec27347bfad8a6424e Mon Sep 17 00:00:00 2001 From: Gerard Date: Wed, 6 Mar 2019 16:28:09 +0100 Subject: [PATCH 34/57] fonts updated to 1.26 version --- front/core/styles/salixfont.css | 13 ++++++++----- front/core/styles/salixfont.svg | 1 + front/core/styles/salixfont.ttf | Bin 23724 -> 23996 bytes front/core/styles/salixfont.woff | Bin 23800 -> 24072 bytes modules/client/front/routes.json | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/front/core/styles/salixfont.css b/front/core/styles/salixfont.css index 8e9a02963..dc0703edb 100644 --- a/front/core/styles/salixfont.css +++ b/front/core/styles/salixfont.css @@ -23,8 +23,8 @@ -moz-osx-font-smoothing: grayscale; } -.icon-pets:before { - content: "\e94e"; +.icon-unavailable:before { + content: "\e94f"; } .icon-100:before { content: "\e940"; @@ -134,12 +134,12 @@ .icon-info:before { content: "\e949"; } -.icon-invoices1:before { - content: "\e94a"; -} .icon-invoices:before { content: "\e91c"; } +.icon-invoices1:before { + content: "\e94a"; +} .icon-item:before { content: "\e941"; } @@ -191,6 +191,9 @@ .icon-person:before { content: "\e929"; } +.icon-pets:before { + content: "\e94e"; +} .icon-photo:before { content: "\e92a"; } diff --git a/front/core/styles/salixfont.svg b/front/core/styles/salixfont.svg index d6654ec1e..2e3395047 100644 --- a/front/core/styles/salixfont.svg +++ b/front/core/styles/salixfont.svg @@ -86,4 +86,5 @@ + \ No newline at end of file diff --git a/front/core/styles/salixfont.ttf b/front/core/styles/salixfont.ttf index 7c0ac2492e9e53d1af4eb16ed47a939da5cb585b..291a7be49bf762f2b25ee4400c5c103eb418c82f 100644 GIT binary patch delta 554 zcmZ3plX1^(#(D-u1_lOhh6V;^1_S?KeItG$wql^j9w1Ig&P^;354&`Yfq_v5$PYmAVtjbNSC}1dJJPhRD0rC~{5_41I!f(0* z`G0^K<`v`@mjE3K1hI1_?r>-HpTy|R=)c*A(J;K8lY!y?0Tu@413(4rKp%-R$S}Av zcrgSrgaWk+Dhsj$F{7!nD7&e$fv60lsEDYls2roXDLX%-k(sfPn5YPwvXYvq4WlVL zP?%krUEJK%T#nJ$$lQ+6+|1NOO&w&4u`0W+cLpPvQ;9m>V^1n*O#c9m!y39=LK_&vj1{9+}EIMQE^>}`puMFHQpb%rYv2@BD v7(IDGggIl#<{J?{jFT0j)`;k^0cAk?LKqJ+$bwWcFioBqBfR;2)Lupa@tS>t delta 284 zcmdn9n{mxf#(D-u1_lOhh6V;^1_S?KeItG$wj!X&9w1Ig&P^;354&`gfq_v5$PYFLv9yJ?U_8IgR|aktkUEAN uo!b;)^yC$h=8VCcA4K{vPBw^MAprJ!Fylc6S+G*3$qQqJH~){`%Lo8e6Gr3! diff --git a/front/core/styles/salixfont.woff b/front/core/styles/salixfont.woff index 2a9a880f52056e7351bcdcfa84e5312fba9b60ee..60b4ccb9310f4cea1b6253a9a043441f4e39b7ef 100644 GIT binary patch delta 576 zcmeydld)qDqgc7Wn;Qco0}#YYzA?8eA(G$%h9sLn3B2B>Hi2p8^*waHDa09qWQ0pu%y zaS`L;yu{p8pqK|x<2(?K3%}`JkY8K^^v8>dfBYH!C;KpZGx~3y!Dtv>&&j~>{{RaE z^8p5C26mutMHyrmTp7F=0vSSqdIgmQ*@2kRR9TeWRM|jOhEY^RR8>@tQQVZBpV7$7 z*hoxNgiTpV&D4g`lpQF{uFNiOZfY*aXl!I|$7pV5YNDnNGR0Vx-Pl}@(Ueh~QJwK> zhqgA8kakogqj|lQu5eVO0~;@!LuiDpZG;P(s4$PzGUH{OvR+zx8X8uD0;!&Vr$)&! zW><)%F*7oLxA|jZ!^F#&|BqLnN$KxqCPAC@$ODp+{)R?IuG+jR!Y3l599SZ3LB_H1 zvb)Ndi1DsAUMru85bfnf)VaUd3*G52~r xzs*+$ZWf>b1H+A_Q|7?v$!{Xe8ACR!MEWpJ&WT#XrNai40qG0bEEj!?5de(!f2#lh delta 306 zcmeC!!}wz-qgc7Wn;Qco0}#agVBiMRYZw?Oe~cBIs3Tlol$@Jbz`($m0h9;A&?1HvAndw1)+RTx0?3b+0P+>U zxRCL1USe)4P|O0TaUKZAh2L~9$S*Dd`sc>PKmLq Date: Thu, 7 Mar 2019 07:51:29 +0100 Subject: [PATCH 35/57] cau 10041 update fixtures for workers and fix test --- db/install/dump/fixtures.sql | 39 ++++++++---- .../back/methods/client/isValidClient.js | 19 +++--- .../client/specs/isValidClient.spec.js | 60 ++++++++----------- 3 files changed, 61 insertions(+), 57 deletions(-) diff --git a/db/install/dump/fixtures.sql b/db/install/dump/fixtures.sql index 2488c231b..ea867559a 100644 --- a/db/install/dump/fixtures.sql +++ b/db/install/dump/fixtures.sql @@ -191,18 +191,23 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`) INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`fax`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`,`mailAddress`,`cplusTerIdNifFk`,`hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`) VALUES - (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), - (102, 'Petter Parker', '87945234L', 'Spider-Man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, 18, 0, 1), - (103, 'Clark Kent', '06815934E', 'Super-Man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 0, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (104, 'Tony Stark', '06089160W', 'Iron-Man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (105, 'Max Eisenhardt', '39182496H', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, NULL, 0, 1), - (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Evil hideout', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), - (107, 'Hank Pym', '09854837G', 'Ant-Man', 'Hawk', 'Anthill', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), - (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'CharlesXavier@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), - (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceBanner@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, 19, 0, 1), - (110, 'Jessica Jones', '58282869H', 'Jessica Jones', 'Luke Cage', 'NYCC 2015 Poster', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'JessicaJones@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, NULL, 0, 1), - (200, 'Missing', NULL, 'Missing man', 'Anton', 'The space', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), - (400, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); + (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), + (102, 'Petter Parker', '87945234L', 'Spider-Man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, 18, 0, 1), + (103, 'Clark Kent', '06815934E', 'Super-Man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 0, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (104, 'Tony Stark', '06089160W', 'Iron-Man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (105, 'Max Eisenhardt', '39182496H', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, NULL, 0, 1), + (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Evil hideout', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), + (107, 'Hank Pym', '09854837G', 'Ant-Man', 'Hawk', 'Anthill', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), + (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'CharlesXavier@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), + (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceBanner@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, 19, 0, 1), + (110, 'Jessica Jones', '58282869H', 'Jessica Jones', 'Luke Cage', 'NYCC 2015 Poster', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'JessicaJones@verdnatura.es', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 1, NULL, 1, 1, 0, 1, NULL, 0, 0, NULL, 0, 1), + (200, 'Missing', NULL, 'Missing man', 'Anton', 'The space', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), + (400, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1,'0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); + +INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `phone`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`) + SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), CONCAT(name, 'Social'), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'SILLA', 46460, 623111111, 1, CONCAT(name,'@verdnatura.es'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, CURDATE(), 1 + FROM `account`.`role` `r` + WHERE `r`.`hasLogin` = 1; INSERT INTO `vn`.`clientManaCache`(`clientFk`, `mana`, `dated`) VALUES @@ -258,6 +263,11 @@ INSERT INTO `vn`.`address`(`id`, `nickname`, `street`, `city`, `postalCode`, `pr (131, 'Missing', 'The space', 'Silla', 46460, 1, 1111111111, 222222222, 1, 200, 2, NULL, NULL, 0, 0), (132, 'Trash', 'New York city', 'Silla', 46460, 1, 1111111111, 222222222, 1, 400, 2, NULL, NULL, 0, 0); +INSERT INTO `vn`.`address`( `nickname`, `street`, `city`, `postalCode`, `provinceFk`, `isActive`, `clientFk`, `agencyModeFk`, `isDefaultAddress`) + SELECT name, CONCAT(name, 'Street'), 'SILLA', 46460, 1, 1, id, 2, 1 + FROM `account`.`role` `r` + WHERE `r`.`hasLogin` = 1; + UPDATE `vn`.`client` SET defaultAddressFk = 1 WHERE id = 101; UPDATE `vn`.`client` SET defaultAddressFk = 2 WHERE id = 102; UPDATE `vn`.`client` SET defaultAddressFk = 3 WHERE id = 103; @@ -271,6 +281,11 @@ UPDATE `vn`.`client` SET defaultAddressFk = 10 WHERE id = 110; UPDATE `vn`.`client` SET defaultAddressFk = 11 WHERE id = 200; UPDATE `vn`.`client` SET defaultAddressFk = 12 WHERE id = 400; +UPDATE `vn`.`client` `c` + JOIN `vn`.`address` `a` ON `a`.`clientFk` = `c`.`id` + SET `c`.`defaultAddressFk` = `a`.`id` + WHERE `defaultAddressFk` IS NULL; + INSERT INTO `vn`.`clientCredit`(`id`, `clientFk`, `workerFk`, `amount`, `created`) VALUES (1 , 101, 5, 300, DATE_ADD(CURDATE(), INTERVAL -1 MONTH)), diff --git a/modules/client/back/methods/client/isValidClient.js b/modules/client/back/methods/client/isValidClient.js index 583efa299..241121927 100644 --- a/modules/client/back/methods/client/isValidClient.js +++ b/modules/client/back/methods/client/isValidClient.js @@ -29,22 +29,23 @@ module.exports = Self => { } }); - Self.isValidClient = async function(id) { + Self.isValidClient = async id => { let query = `SELECT r.name - FROM salix.Account A - JOIN vn.client C ON A.id = C.id - JOIN salix.RoleMapping rm ON rm.principalId = A.id + FROM salix.Account a + JOIN vn.client c ON a.id = c.id + JOIN salix.RoleMapping rm ON rm.principalId = a.id JOIN salix.Role r ON r.id = rm.roleId - WHERE A.id = ? AND C.isActive AND C.isTaxDataChecked`; + WHERE a.id = ? AND c.isActive AND c.isTaxDataChecked`; let roleNames = await Self.rawSql(query, [id]); - if (!roleNames.length) return false; - roleNames.forEach(role => { - if (role.name === 'employee') - return false; + let isEmployee = roleNames.findIndex(role => { + return role.name === 'employee'; }); + + if (!roleNames.length || isEmployee > -1 ) return false; + return true; }; }; diff --git a/modules/client/back/methods/client/specs/isValidClient.spec.js b/modules/client/back/methods/client/specs/isValidClient.spec.js index f995bb7ab..446392374 100644 --- a/modules/client/back/methods/client/specs/isValidClient.spec.js +++ b/modules/client/back/methods/client/specs/isValidClient.spec.js @@ -1,57 +1,45 @@ const app = require('vn-loopback/server/server'); describe('Client isValidClient', () => { - it('should call the isValidClient() method with a client id and receive true', done => { + it('should call the isValidClient() method with a client id and receive true', async() => { let id = 101; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeTruthy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeTruthy(); }); - it('should call the isValidClient() method with a employee id and receive false', done => { + it('should call the isValidClient() method with an employee id to receive false', async() => { let id = 1; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeFalsy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeFalsy(); }); - it('should call the isValidClient() method with a unexistant id and receive false', done => { + it('should call the isValidClient() method with an unexistant id and receive false', async() => { let id = 999999; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeFalsy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeFalsy(); }); - it('should call the isValidClient() method with a invalid id and receive false', done => { + it('should call the isValidClient() method with an invalid id and receive false', async() => { let id = 'Pepinillos'; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeFalsy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeFalsy(); }); - it('should call the isValidClient() method with a customer id which isnt active and return false', done => { + it('should call the isValidClient() method with a customer id which isnt active and return false', async() => { let id = '106'; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeFalsy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeFalsy(); }); - it('should call the isValidClient() method with a customer id which his data isnt verified and return false', done => { + it('should call the isValidClient() method with a customer id which his data isnt verified and return false', async() => { let id = '110'; - app.models.Client.isValidClient(id) - .then(result => { - expect(result).toBeFalsy(); - done(); - }); + let result = await app.models.Client.isValidClient(id); + + expect(result).toBeFalsy(); }); }); From 1bf7aa112aca725e4c9d1b71eac32a768c430b84 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Thu, 7 Mar 2019 09:55:03 +0100 Subject: [PATCH 36/57] Bug #1194 configuracion de usuario, buscar por id --- .../user-configuration-popover/index.html | 11 +++-------- .../user-configuration-popover/index.js | 15 +++++++++------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/front/salix/components/user-configuration-popover/index.html b/front/salix/components/user-configuration-popover/index.html index 3fe9a40a5..7761fcc4c 100644 --- a/front/salix/components/user-configuration-popover/index.html +++ b/front/salix/components/user-configuration-popover/index.html @@ -1,9 +1,3 @@ - - + value-field="id" + search-function="{or: [{id: $search}, {bank: {like: '%'+ $search +'%'}}]}"> {{id}}: {{bank}} Date: Thu, 7 Mar 2019 09:55:22 +0100 Subject: [PATCH 37/57] #1211 client.billingData --- loopback/locale/es.json | 5 +++-- modules/client/front/billing-data/index.html | 6 ++++++ modules/client/front/billing-data/index.js | 3 +++ modules/client/front/billing-data/locale/es.yml | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 05e100fb7..b62cd53aa 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -71,6 +71,7 @@ "You can't create a ticket for a client that has a debt": "No puedes crear un ticket para un client con deuda", "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT", "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido", - "Street cannot be empty": "Street cannot be empty", - "City cannot be empty": "City cannot be empty" + "Street cannot be empty": "Dirección no puede estar en blanco", + "City cannot be empty": "Cuidad no puede estar en blanco", + "Code cannot be blank": "Código no puede estar en blanco" } \ No newline at end of file diff --git a/modules/client/front/billing-data/index.html b/modules/client/front/billing-data/index.html index 300919acc..ce4748829 100644 --- a/modules/client/front/billing-data/index.html +++ b/modules/client/front/billing-data/index.html @@ -111,6 +111,12 @@ show-field="country"> + + + + Date: Thu, 7 Mar 2019 12:11:06 +0100 Subject: [PATCH 38/57] #1211 client.billingData --- e2e/helpers/selectors.js | 1 + .../client-module/04_edit_pay_method.spec.js | 1 + .../client/front/billing-data/index.spec.js | 21 ++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 68aa59a09..9c7f71770 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -87,6 +87,7 @@ export default { newBankEntityButton: 'vn-client-billing-data vn-icon-button[vn-tooltip="New bank entity"] > button', newBankEntityName: 'vn-client-billing-data > vn-dialog vn-textfield[label="Name"] input', newBankEntityBIC: 'vn-client-billing-data > vn-dialog vn-textfield[label="Swift / BIC"] input', + newBankEntityCode: 'vn-client-billing-data > vn-dialog vn-textfield[label="Code"] input', acceptBankEntityButton: 'vn-client-billing-data > vn-dialog button[response="ACCEPT"]', saveButton: `${components.vnSubmit}` }, diff --git a/e2e/paths/client-module/04_edit_pay_method.spec.js b/e2e/paths/client-module/04_edit_pay_method.spec.js index a8b58ca11..ef8c514d8 100644 --- a/e2e/paths/client-module/04_edit_pay_method.spec.js +++ b/e2e/paths/client-module/04_edit_pay_method.spec.js @@ -44,6 +44,7 @@ describe('Client Edit pay method path', () => { const newcode = await nightmare .waitToClick(selectors.clientPayMethod.newBankEntityButton) .write(selectors.clientPayMethod.newBankEntityName, 'Gotham City Bank') + .write(selectors.clientPayMethod.newBankEntityCode, 999) .write(selectors.clientPayMethod.newBankEntityBIC, 'GTHMCT') .waitToClick(selectors.clientPayMethod.acceptBankEntityButton) .waitToGetProperty(`${selectors.clientPayMethod.swiftBicAutocomplete} input`, 'value'); diff --git a/modules/client/front/billing-data/index.spec.js b/modules/client/front/billing-data/index.spec.js index 277ff7a2d..7ce5440df 100644 --- a/modules/client/front/billing-data/index.spec.js +++ b/modules/client/front/billing-data/index.spec.js @@ -51,7 +51,8 @@ describe('Client', () => { controller.newBankEntity = { name: '', bic: 'ES123', - countryFk: 1 + countryFk: 1, + id: 999 }; controller.onBankEntityResponse('ACCEPT'); @@ -62,18 +63,32 @@ describe('Client', () => { controller.newBankEntity = { name: 'My new bank entity', bic: '', - countryFk: 1 + countryFk: 1, + id: 999 }; controller.onBankEntityResponse('ACCEPT'); expect(vnApp.showError).toHaveBeenCalledWith(`Swift / BIC can't be empty`); }); + it(`should throw an error if id property is empty`, () => { + controller.newBankEntity = { + name: 'My new bank entity', + bic: 'ES123', + countryFk: 1, + id: null + }; + controller.onBankEntityResponse('ACCEPT'); + + expect(vnApp.showError).toHaveBeenCalledWith(`Code can't be empty`); + }); + it('should request to create a new bank entity', () => { let newBankEntity = { name: 'My new bank entity', bic: 'ES123', - countryFk: 1 + countryFk: 1, + id: 999 }; controller.newBankEntity = newBankEntity; $httpBackend.when('POST', '/client/api/BankEntities').respond('done'); From 9f3f0224ab23b047d7cff8eb91e11f80faeae53d Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Thu, 7 Mar 2019 13:53:06 +0100 Subject: [PATCH 39/57] recovered sql --- db/install/changes/8-clientAfterUpdate.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/install/changes/8-clientAfterUpdate.sql b/db/install/changes/8-clientAfterUpdate.sql index cfbd145da..385db8739 100644 --- a/db/install/changes/8-clientAfterUpdate.sql +++ b/db/install/changes/8-clientAfterUpdate.sql @@ -12,7 +12,8 @@ BEGIN UPDATE Consignatarios SET predeterminada = FALSE WHERE Id_cliente = NEW.Id_cliente; - + UPDATE Consignatarios SET predeterminada = TRUE + WHERE Id_consigna = NEW.default_address; END IF; END$$ DELIMITER ; From 7d8879a979d87518b260ecbcf57332666bb89ab0 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 07:52:43 +0100 Subject: [PATCH 40/57] deleted default query on item index --- modules/item/front/index/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/item/front/index/index.js b/modules/item/front/index/index.js index e31cbaa08..d8d0ebbe2 100644 --- a/modules/item/front/index/index.js +++ b/modules/item/front/index/index.js @@ -18,11 +18,6 @@ class Controller { this.filter = {hasVisible: true, isActive: true}; } - $postLink() { - if (this.filter) - this.onSearch(this.filter); - } - stopEvent(event) { event.preventDefault(); event.stopImmediatePropagation(); From 7e7023c680958ccc3c1ebe78d362693a3e6e4c51 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 07:58:09 +0100 Subject: [PATCH 41/57] validation disabled when displaycontrols is false --- front/core/components/input-number/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/front/core/components/input-number/index.js b/front/core/components/input-number/index.js index 086ab7817..b5762d0cc 100644 --- a/front/core/components/input-number/index.js +++ b/front/core/components/input-number/index.js @@ -52,10 +52,11 @@ export default class InputNumber extends Textfield { } validateValue() { + console.log(this.displayControls); if ((this.validate() !== undefined && !this.validate()) || (this.max && this.value > this.max) || (this.min && this.value < this.min) || - (this.step && this.value % this.step != 0)) + (this.displayControls && (this.step && this.value % this.step != 0))) this.$element[0].querySelector('.infix').classList.add('invalid', 'validated'); From f5a95d31909360dcf73f983faee363f7f28b8a06 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 07:58:46 +0100 Subject: [PATCH 42/57] console log deleted --- front/core/components/input-number/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/front/core/components/input-number/index.js b/front/core/components/input-number/index.js index b5762d0cc..9c187a815 100644 --- a/front/core/components/input-number/index.js +++ b/front/core/components/input-number/index.js @@ -52,7 +52,6 @@ export default class InputNumber extends Textfield { } validateValue() { - console.log(this.displayControls); if ((this.validate() !== undefined && !this.validate()) || (this.max && this.value > this.max) || (this.min && this.value < this.min) || From 7f0d3279d1c55c4d9a18d989a7abe58f2dd152d6 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 08:14:22 +0100 Subject: [PATCH 43/57] #1189 ticket.index mostrar mas informacion --- db/install/changes/12-ticketGetProblems.sql | 165 +++++++++++++++++++ modules/ticket/back/methods/ticket/filter.js | 4 +- modules/ticket/front/index/index.html | 24 ++- 3 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 db/install/changes/12-ticketGetProblems.sql diff --git a/db/install/changes/12-ticketGetProblems.sql b/db/install/changes/12-ticketGetProblems.sql new file mode 100644 index 000000000..29bd3e93a --- /dev/null +++ b/db/install/changes/12-ticketGetProblems.sql @@ -0,0 +1,165 @@ +USE `vn`; +DROP procedure IF EXISTS `ticketGetProblems`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `ticketGetProblems`() +BEGIN +/* + * Obtiene los problemas de uno o varios tickets + * + * @table tmp.ticketGetProblems(ticketFk, clientFk, warehouseFk, shipped) + * @return tmp.ticketProblems + */ + DECLARE vWarehouse INT; + DECLARE vDate DATE; + DECLARE vAvailableCache INT; + DECLARE vVisibleCache INT; + DECLARE vDone INT DEFAULT 0; + + DECLARE vCursor CURSOR FOR + SELECT DISTINCT tt.warehouseFk, date(tt.shipped) + FROM tmp.ticketGetProblems tt + WHERE DATE(tt.shipped) BETWEEN CURDATE() + AND TIMESTAMPADD(DAY, 1.9, CURDATE()); + + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; + + DROP TEMPORARY TABLE IF EXISTS tmp.ticketProblems; + CREATE TEMPORARY TABLE tmp.ticketProblems ( + ticketFk INT(11) PRIMARY KEY, + isFreezed INTEGER(1) DEFAULT 0, + risk DECIMAL(10,2) DEFAULT 0, + hasTicketRequest INTEGER(1) DEFAULT 0, + isAvailable INTEGER(1) DEFAULT 1 + ) ENGINE = MEMORY; + + DROP TEMPORARY TABLE IF EXISTS tmp.ticketList; + CREATE TEMPORARY TABLE tmp.ticketList + (PRIMARY KEY (ticketFk)) + ENGINE = MEMORY + SELECT tp.ticketFk, c.id clientFk + FROM tmp.ticketGetProblems tp + JOIN vn.client c ON c.id = tp.clientFk; + + -- Inserta tickets de clientes congelados + INSERT INTO tmp.ticketProblems(ticketFk, isFreezed) + SELECT DISTINCT tl.ticketFk, 1 + FROM tmp.ticketList tl + JOIN vn.client c ON c.id = tl.clientFk + WHERE c.isFreezed; + + DELETE tl FROM tmp.ticketList tl + JOIN tmp.ticketProblems tp ON tl.ticketFk = tp.ticketFk; + + DROP TEMPORARY TABLE IF EXISTS tmp.clientGetDebt; + CREATE TEMPORARY TABLE tmp.clientGetDebt + (PRIMARY KEY (clientFk)) + ENGINE = MEMORY + SELECT DISTINCT clientFk + FROM tmp.ticketList; + + CALL clientGetDebt(CURDATE()); + + -- Inserta tickets de clientes con riesgo + INSERT INTO tmp.ticketProblems(ticketFk, risk) + SELECT DISTINCT tl.ticketFk, r.risk + FROM tmp.ticketList tl + JOIN vn.ticket t ON t.id = tl.ticketFk + JOIN vn.agencyMode a ON t.agencyModeFk = a.id + JOIN tmp.risk r ON r.clientFk = t.clientFk + JOIN vn.client c ON c.id = t.clientFk + WHERE r.risk > c.credit + 10 + AND a.deliveryMethodFk != 3 + ON DUPLICATE KEY UPDATE + risk = r.risk; + + DELETE tl FROM tmp.ticketList tl + JOIN tmp.ticketProblems tp ON tl.ticketFk = tp.ticketFk; + + -- Inserta tickets que tengan codigos 100 + INSERT INTO tmp.ticketProblems(ticketFk, hasTicketRequest) + SELECT DISTINCT tl.ticketFk, 'Code 100' + FROM tmp.ticketList tl + JOIN vn.ticketRequest tr ON tr.ticketFk = tl.ticketFk + WHERE tr.isOK IS NULL + ON DUPLICATE KEY UPDATE + hasTicketRequest = 1; + + DELETE tl FROM tmp.ticketList tl + JOIN tmp.ticketProblems tp ON tl.ticketFk = tp.ticketFk; + + OPEN vCursor; + + WHILE NOT vDone + DO + FETCH vCursor INTO vWarehouse, vDate; + + CALL cache.visible_refresh(vVisibleCache, FALSE, vWarehouse); + CALL cache.available_refresh(vAvailableCache, FALSE, vWarehouse, vDate); + + -- Inserta tickets con articulos que no tegan disponible + INSERT INTO tmp.ticketProblems(ticketFk, isAvailable) + SELECT tl.ticketFk, 0 + FROM tmp.ticketList tl + JOIN vn.ticket t ON t.id = tl.ticketFk + LEFT JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.item i ON i.id = s.itemFk + JOIN vn.itemType it on it.id = i.typeFk + LEFT JOIN cache.visible v ON i.id = v.item_id + AND v.calc_id = vVisibleCache + LEFT JOIN cache.available av ON av.item_id = i.id + AND av.calc_id = vAvailableCache + WHERE date(t.shipped) = vDate + AND categoryFk != 6 + AND s.quantity > IFNULL(v.visible, 0) + AND IFNULL(av.available, 0) < 0 + AND s.isPicked = FALSE + AND NOT i.generic + AND vWarehouse = t.warehouseFk + GROUP BY tl.ticketFk + ON DUPLICATE KEY UPDATE + isAvailable = 0; + + + DELETE tl FROM tmp.ticketList tl + JOIN tmp.ticketProblems tp ON tl.ticketFk = tp.ticketFk; + + + INSERT INTO tmp.ticketProblems(ticketFk, isAvailable) + SELECT tl.ticketFk, 0 + FROM tmp.ticketList tl + JOIN vn.ticket t ON t.id = tl.ticketFk + LEFT JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.item i ON i.id = s.itemFk + JOIN vn.itemType it on it.id = i.typeFk + LEFT JOIN cache.visible v ON i.id = v.item_id AND v.calc_id = vVisibleCache + LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCache + WHERE IFNULL(av.available, 0) >= 0 + AND s.quantity > IFNULL(v.visible, 0) + AND s.isPicked = FALSE + AND s.reserved = FALSE + AND it.categoryFk != 6 + AND date(t.shipped) = vDate + AND NOT i.generic + AND CURDATE() = vDate + AND t.warehouseFk = vWarehouse + GROUP BY tl.ticketFk + ON DUPLICATE KEY UPDATE + isAvailable = 0; + + DELETE tl FROM tmp.ticketList tl + JOIN tmp.ticketProblems tp ON tl.ticketFk = tp.ticketFk; + + END WHILE; + + CLOSE vCursor; + + SELECT * FROM tmp.ticketProblems; + + DROP TEMPORARY TABLE + tmp.clientGetDebt, + tmp.ticketList; +END$$ + +DELIMITER ; diff --git a/modules/ticket/back/methods/ticket/filter.js b/modules/ticket/back/methods/ticket/filter.js index f05101d75..259fe5820 100644 --- a/modules/ticket/back/methods/ticket/filter.js +++ b/modules/ticket/back/methods/ticket/filter.js @@ -220,12 +220,12 @@ module.exports = Self => { SELECT f.*, tt.total, - tp.problem + tp.* FROM tmp.filter f LEFT JOIN tmp.ticketProblems tp ON tp.ticketFk = f.id LEFT JOIN tmp.ticketTotal tt ON tt.ticketFk = f.id`); stmt.merge(conn.makeOrderBy(filter.order)); - let ticketsIndex = stmts.push(stmt) - 1; + let ticketsIndex = stmts.push(stmt); stmts.push( `DROP TEMPORARY TABLE diff --git a/modules/ticket/front/index/index.html b/modules/ticket/front/index/index.html index 700fd9e87..3835ba6b2 100644 --- a/modules/ticket/front/index/index.html +++ b/modules/ticket/front/index/index.html @@ -52,10 +52,28 @@ ui-sref="ticket.card.summary({id: {{::ticket.id}}})"> + vn-tooltip="{{ticket.hasTicketRequest}}" + icon="icon-100"> + + + + + + {{::ticket.id}} From aceecd9c7a5396592a70bf4436bd21b0ff13186a Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 8 Mar 2019 09:41:53 +0100 Subject: [PATCH 44/57] Tarea #1197 worker.centralita --- modules/worker/front/card/index.js | 4 +++- modules/worker/front/index.js | 1 + modules/worker/front/locale/es.yml | 3 ++- modules/worker/front/pbx/index.html | 28 ++++++++++++++++++++++++++++ modules/worker/front/pbx/index.js | 8 ++++++++ modules/worker/front/routes.json | 12 +++++++++++- 6 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 modules/worker/front/pbx/index.html create mode 100644 modules/worker/front/pbx/index.js diff --git a/modules/worker/front/card/index.js b/modules/worker/front/card/index.js index 9b4f6f93f..fe8a57fb9 100644 --- a/modules/worker/front/card/index.js +++ b/modules/worker/front/card/index.js @@ -22,7 +22,9 @@ class Controller { }, { relation: 'sip', - scope: {fields: ['extension']} + scope: { + fields: ['extension', 'secret'] + } }, { relation: 'department', scope: { diff --git a/modules/worker/front/index.js b/modules/worker/front/index.js index 79f374f30..e9aa1424c 100644 --- a/modules/worker/front/index.js +++ b/modules/worker/front/index.js @@ -7,3 +7,4 @@ import './descriptor'; import './descriptor-popover'; import './search-panel'; import './basic-data'; +import './pbx'; diff --git a/modules/worker/front/locale/es.yml b/modules/worker/front/locale/es.yml index 7caf36e0b..674d13ea0 100644 --- a/modules/worker/front/locale/es.yml +++ b/modules/worker/front/locale/es.yml @@ -7,4 +7,5 @@ Department: Departamento User id: Id de usuario Role: Rol Extension: Extensión -Go to client: Ir al cliente \ No newline at end of file +Go to client: Ir al cliente +Private Branch Exchange: Centralita \ No newline at end of file diff --git a/modules/worker/front/pbx/index.html b/modules/worker/front/pbx/index.html new file mode 100644 index 000000000..ed29e4450 --- /dev/null +++ b/modules/worker/front/pbx/index.html @@ -0,0 +1,28 @@ + + + +
+ + + + + + + + + + + + + +
diff --git a/modules/worker/front/pbx/index.js b/modules/worker/front/pbx/index.js new file mode 100644 index 000000000..70dcc9aef --- /dev/null +++ b/modules/worker/front/pbx/index.js @@ -0,0 +1,8 @@ +import ngModule from '../module'; + +ngModule.component('vnWorkerPbx', { + template: require('./index.html'), + bindings: { + worker: '<' + } +}); diff --git a/modules/worker/front/routes.json b/modules/worker/front/routes.json index cb2823484..7ef1237e0 100644 --- a/modules/worker/front/routes.json +++ b/modules/worker/front/routes.json @@ -4,7 +4,8 @@ "icon" : "icon-worker", "validations" : true, "menu": [ - {"state": "worker.card.basicData", "icon": "settings"} + {"state": "worker.card.basicData", "icon": "settings"}, + {"state": "worker.card.pbx", "icon": ""} ], "routes": [ { @@ -41,6 +42,15 @@ "worker": "$ctrl.worker" }, "acl": ["developer"] + }, { + "url": "/pbx", + "state": "worker.card.pbx", + "component": "vn-worker-pbx", + "description": "Private Branch Exchange", + "params": { + "worker": "$ctrl.worker" + }, + "acl": ["hr"] } ] } \ No newline at end of file From 479ca86196a27dbb825d3eed72952e0291ed6d84 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 8 Mar 2019 11:00:47 +0100 Subject: [PATCH 45/57] e2e repairs --- e2e/paths/client-module/04_edit_pay_method.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/paths/client-module/04_edit_pay_method.spec.js b/e2e/paths/client-module/04_edit_pay_method.spec.js index ef8c514d8..c315371e0 100644 --- a/e2e/paths/client-module/04_edit_pay_method.spec.js +++ b/e2e/paths/client-module/04_edit_pay_method.spec.js @@ -44,7 +44,7 @@ describe('Client Edit pay method path', () => { const newcode = await nightmare .waitToClick(selectors.clientPayMethod.newBankEntityButton) .write(selectors.clientPayMethod.newBankEntityName, 'Gotham City Bank') - .write(selectors.clientPayMethod.newBankEntityCode, 999) + .write(selectors.clientPayMethod.newBankEntityCode, 9999) .write(selectors.clientPayMethod.newBankEntityBIC, 'GTHMCT') .waitToClick(selectors.clientPayMethod.acceptBankEntityButton) .waitToGetProperty(`${selectors.clientPayMethod.swiftBicAutocomplete} input`, 'value'); From f6c725d0074dd6e7b96a85ac4c6c09cc6713e36d Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 8 Mar 2019 11:01:10 +0100 Subject: [PATCH 46/57] more e2e repairs --- e2e/helpers/selectors.js | 1 + e2e/paths/item-module/10_item_index.spec.js | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 9c7f71770..d67aa5722 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -172,6 +172,7 @@ export default { firstPaymentConfirmed: 'vn-client-web-payment vn-tr:nth-child(1) vn-icon[icon="check"][aria-hidden="false"]' }, itemsIndex: { + searchIcon: `vn-item-index vn-searchbar vn-icon[icon="search"]`, goBackToModuleIndexButton: `vn-item-descriptor a[href="#!/item/index"]`, createItemButton: `${components.vnFloatButton}`, searchResult: `vn-item-index a.vn-tr`, diff --git a/e2e/paths/item-module/10_item_index.spec.js b/e2e/paths/item-module/10_item_index.spec.js index 36d8d07d8..9c9dc1dce 100644 --- a/e2e/paths/item-module/10_item_index.spec.js +++ b/e2e/paths/item-module/10_item_index.spec.js @@ -6,7 +6,8 @@ describe('Item index path', () => { beforeAll(() => { nightmare - .loginAndModule('salesPerson', 'item'); + .loginAndModule('salesPerson', 'item') + .waitToClick(selectors.itemsIndex.searchIcon); }); it('should click on the fields to show button to open the list of columns to show', async() => { @@ -40,6 +41,7 @@ describe('Item index path', () => { const imageVisible = await nightmare .waitToClick(selectors.itemsIndex.searchResult) .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) + .waitToClick(selectors.itemsIndex.searchIcon) .wait(selectors.itemsIndex.searchResult) .isVisible(selectors.itemsIndex.firstItemImage); @@ -77,7 +79,8 @@ describe('Item index path', () => { const idVisible = await nightmare .waitToClick(selectors.itemsIndex.searchResult) .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) - .wait(1999) + .waitToClick(selectors.itemsIndex.searchIcon) + .wait(selectors.itemsIndex.searchResult) .isVisible(selectors.itemsIndex.firstItemId); expect(idVisible).toBeTruthy(); From 720803facb71e59f10e64b2db33e0ac802447d06 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 13:12:13 +0100 Subject: [PATCH 47/57] =?UTF-8?q?#1220=20item.index=20a=C3=B1adir=20campos?= =?UTF-8?q?=20a=20buscador=20avanzado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../06_create_item_botanical.spec.js | 2 +- .../08_item_create_and_clone.spec.js | 4 +- modules/item/front/index/index.js | 6 +- modules/item/front/search-panel/index.html | 58 +++++++++++++------ modules/item/front/search-panel/index.js | 26 ++++++++- modules/item/front/search-panel/locale/es.yml | 7 ++- 6 files changed, 78 insertions(+), 25 deletions(-) diff --git a/e2e/paths/item-module/06_create_item_botanical.spec.js b/e2e/paths/item-module/06_create_item_botanical.spec.js index c17a7adc7..fd1e1bf1d 100644 --- a/e2e/paths/item-module/06_create_item_botanical.spec.js +++ b/e2e/paths/item-module/06_create_item_botanical.spec.js @@ -7,7 +7,7 @@ describe('Item Create botanical path', () => { beforeAll(() => { nightmare .loginAndModule('buyer', 'item') - .accessToSearchResult('Object5 Weapon 50') + .accessToSearchResult('Object5 Weapon 50 hasVisible:false') .accessToSection('item.card.botanical'); }); diff --git a/e2e/paths/item-module/08_item_create_and_clone.spec.js b/e2e/paths/item-module/08_item_create_and_clone.spec.js index b5e33cc4a..025c958b7 100644 --- a/e2e/paths/item-module/08_item_create_and_clone.spec.js +++ b/e2e/paths/item-module/08_item_create_and_clone.spec.js @@ -95,7 +95,7 @@ describe('Item Create/Clone path', () => { it(`should search for the item Infinity Gauntlet`, async() => { const result = await nightmare - .write(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') + .write(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet hasVisible:false') .waitToClick(selectors.itemsIndex.searchButton) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) .countElement(selectors.itemsIndex.searchResult); @@ -117,7 +117,7 @@ describe('Item Create/Clone path', () => { it('should search for the item Infinity Gauntlet and find two', async() => { const result = await nightmare .waitToClick(selectors.itemTags.goToItemIndexButton) - .write(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') + .write(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet hasVisible:false') .waitToClick(selectors.itemsIndex.searchButton) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 2) .countElement(selectors.itemsIndex.searchResult); diff --git a/modules/item/front/index/index.js b/modules/item/front/index/index.js index d8d0ebbe2..76d966170 100644 --- a/modules/item/front/index/index.js +++ b/modules/item/front/index/index.js @@ -13,9 +13,6 @@ class Controller { id: false, actions: false }; - - if (!$stateParams.q) - this.filter = {hasVisible: true, isActive: true}; } stopEvent(event) { @@ -24,6 +21,9 @@ class Controller { } onSearch(params) { + if (params && params.hasVisible === undefined && params.isActive === undefined) + Object.assign(params, {hasVisible: true, isActive: true}); + if (params) this.$.model.applyFilter(null, params); else diff --git a/modules/item/front/search-panel/index.html b/modules/item/front/search-panel/index.html index fca01dc2a..ba512c1d0 100644 --- a/modules/item/front/search-panel/index.html +++ b/modules/item/front/search-panel/index.html @@ -9,18 +9,6 @@ vn-focus>
- - - - - - - - + + + More fields + + + + + + + + + + + + + + diff --git a/modules/item/front/search-panel/index.js b/modules/item/front/search-panel/index.js index 0c98b707a..458382a99 100644 --- a/modules/item/front/search-panel/index.js +++ b/modules/item/front/search-panel/index.js @@ -2,6 +2,21 @@ import ngModule from '../module'; import SearchPanel from 'core/components/searchbar/search-panel'; class Controller extends SearchPanel { + constructor($scope) { + super(); + this.$ = $scope; + this.moreFields = [ + {field: 'id'}, + {field: 'description'}, + {field: 'name'} + ]; + } + + initializeMoreFields() { + if (!this.$.filter.moreFields || !this.$.filter.moreFields.length) + this.$.filter.moreFields = [{}]; + } + set filter(value) { if (!value) value = {}; @@ -20,7 +35,14 @@ class Controller extends SearchPanel { } get filter() { - return this.$.filter; + if (this.$.filter.moreFields) { + this.$.filter.moreFields.forEach(element => { + this.$.filter[element.field] = element.value; + }); + } + let filter = Object.assign({}, this.$.filter); + delete filter.moreFields; + return filter; } getSourceTable(selection) { @@ -36,6 +58,8 @@ class Controller extends SearchPanel { } } +Controller.$inject = ['$scope']; + ngModule.component('vnItemSearchPanel', { template: require('./index.html'), controller: Controller diff --git a/modules/item/front/search-panel/locale/es.yml b/modules/item/front/search-panel/locale/es.yml index 1411cc42d..660991827 100644 --- a/modules/item/front/search-panel/locale/es.yml +++ b/modules/item/front/search-panel/locale/es.yml @@ -1,3 +1,8 @@ Ink: Tinta Origin: Origen -Producer: Productor \ No newline at end of file +Producer: Productor. +With visible: Con visible +Field: Campo +More fields: Mas campos +Add field: Añadir campo +Remove field: Quitar campo \ No newline at end of file From 99ef9d71fe3fbc8d0f2400b8eb0f6d7333e12b3d Mon Sep 17 00:00:00 2001 From: Bernat Date: Fri, 8 Mar 2019 13:45:38 +0100 Subject: [PATCH 48/57] new acl --- db/install/changes/0-ACL.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 db/install/changes/0-ACL.sql diff --git a/db/install/changes/0-ACL.sql b/db/install/changes/0-ACL.sql new file mode 100644 index 000000000..099e3c5a9 --- /dev/null +++ b/db/install/changes/0-ACL.sql @@ -0,0 +1,2 @@ +INSERT INTO `salix`.`ACL` (`id`,`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (149, 'Sip', '*', 'WRITE', 'ALLOW', 'ROLE', 'hr'); +INSERT INTO `salix`.`ACL` (`id`,`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (150, 'Sip', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); \ No newline at end of file From d1ce85c81e290f536b84579edfb50a641f5dc148 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 8 Mar 2019 13:46:33 +0100 Subject: [PATCH 49/57] taxclass field temporally removed as it slows the query --- modules/item/back/methods/item/filter.js | 3 +-- modules/item/front/index/index.html | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index f92248037..0bea205e3 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -105,7 +105,7 @@ module.exports = Self => { t.name type, u.id userId, intr.description AS intrastat, i.stems, ori.code AS origin, t.name AS type, - ic.name AS category, i.density, tc.description AS taxClass, + ic.name AS category, i.density, b.grouping, b.packing, itn.code AS niche FROM item i LEFT JOIN itemType t ON t.id = i.typeFk @@ -115,7 +115,6 @@ module.exports = Self => { LEFT JOIN intrastat intr ON intr.id = i.intrastatFk LEFT JOIN producer pr ON pr.id = i.producerFk LEFT JOIN origin ori ON ori.id = i.originFk - LEFT JOIN taxClass tc ON tc.id = i.taxClassFk LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = t.warehouseFk LEFT JOIN vn.buy b ON b.id = lb.buy_id LEFT JOIN itemPlacement itn ON itn.itemFk = i.id AND itn.warehouseFk = t.warehouseFk` diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index 88f8fb5bc..76bb017f2 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -34,7 +34,6 @@ Origin Buyer Density - Tax class Active @@ -81,7 +80,6 @@ {{::item.density}} - {{::item.taxClass}} Date: Fri, 8 Mar 2019 14:12:16 +0100 Subject: [PATCH 50/57] e2e fixes --- e2e/helpers/selectors.js | 2 +- e2e/paths/item-module/10_item_index.spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index d67aa5722..e2312c3ea 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -197,7 +197,7 @@ export default { buyerCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(10) > vn-check > md-checkbox', destinyCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(11) > vn-check > md-checkbox', taxClassCheckbox: 'vn-item-index vn-dialog form vn-horizontal:nth-child(12) > vn-check > md-checkbox', - saveFieldsButton: 'vn-item-index vn-dialog vn-horizontal:nth-child(17) > vn-button > button' + saveFieldsButton: 'vn-item-index vn-dialog vn-horizontal:nth-child(16) > vn-button > button' }, itemCreateView: { temporalName: `${components.vnTextfield}[name="provisionalName"]`, diff --git a/e2e/paths/item-module/10_item_index.spec.js b/e2e/paths/item-module/10_item_index.spec.js index 9c9dc1dce..850a9273c 100644 --- a/e2e/paths/item-module/10_item_index.spec.js +++ b/e2e/paths/item-module/10_item_index.spec.js @@ -30,7 +30,7 @@ describe('Item index path', () => { .waitToClick(selectors.itemsIndex.originCheckbox) .waitToClick(selectors.itemsIndex.buyerCheckbox) .waitToClick(selectors.itemsIndex.destinyCheckbox) - .waitToClick(selectors.itemsIndex.taxClassCheckbox) + // .waitToClick(selectors.itemsIndex.taxClassCheckbox) .waitToClick(selectors.itemsIndex.saveFieldsButton) .waitForLastSnackbar(); @@ -68,7 +68,7 @@ describe('Item index path', () => { .waitToClick(selectors.itemsIndex.originCheckbox) .waitToClick(selectors.itemsIndex.buyerCheckbox) .waitToClick(selectors.itemsIndex.destinyCheckbox) - .waitToClick(selectors.itemsIndex.taxClassCheckbox) + // .waitToClick(selectors.itemsIndex.taxClassCheckbox) .waitToClick(selectors.itemsIndex.saveFieldsButton) .waitForLastSnackbar(); From 78103137bbae1e46151962f717445d019ea70743 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 8 Mar 2019 14:46:01 +0100 Subject: [PATCH 51/57] Test #1221 e2e worker.pbx --- e2e/helpers/selectors.js | 5 ++++ e2e/paths/worker-module/01_pbx.spec.js | 35 ++++++++++++++++++++++++++ modules/worker/front/index/index.html | 5 ++-- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 e2e/paths/worker-module/01_pbx.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index d67aa5722..a89298790 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -533,4 +533,9 @@ export default { confirmOrder: 'vn-order-line > vn-vertical > vn-button-bar > vn-button > button', confirmButton: 'vn-order-line > vn-confirm button[response="ACCEPT"]', }, + workerPbx: { + extensionInput: 'vn-worker-pbx vn-textfield[model="$ctrl.worker.sip.extension"] input', + passwordInput: 'vn-worker-pbx vn-textfield[model="$ctrl.worker.sip.secret"] input', + saveButton: 'vn-worker-pbx vn-submit[label="Save"] input' + } }; diff --git a/e2e/paths/worker-module/01_pbx.spec.js b/e2e/paths/worker-module/01_pbx.spec.js new file mode 100644 index 000000000..e7e97f9b1 --- /dev/null +++ b/e2e/paths/worker-module/01_pbx.spec.js @@ -0,0 +1,35 @@ +import selectors from '../../helpers/selectors.js'; +import createNightmare from '../../helpers/nightmare'; + +describe('pbx path', () => { + const nightmare = createNightmare(); + + beforeAll(() => { + nightmare + .loginAndModule('hr', 'worker') + .accessToSearchResult('employee') + .accessToSection('worker.card.pbx'); + }); + + it('should receive an error when the extension exceeds 4 characters', async() => { + const result = await nightmare + .write(selectors.workerPbx.extensionInput, 55555) + + .waitToClick(selectors.workerPbx.saveButton) + .waitForLastSnackbar(); + + expect(result).toEqual('EXTENSION_INVALID_FORMAT'); + }); + + it('should sucessfully save the changes', async() => { + const result = await nightmare + .clearInput(selectors.workerPbx.extensionInput) + .write(selectors.workerPbx.extensionInput, 4444) + .clearInput(selectors.workerPbx.passwordInput) + .write(selectors.workerPbx.passwordInput, 666666) + .waitToClick(selectors.workerPbx.saveButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); +}); diff --git a/modules/worker/front/index/index.html b/modules/worker/front/index/index.html index 7debfc728..0da3d89c9 100644 --- a/modules/worker/front/index/index.html +++ b/modules/worker/front/index/index.html @@ -16,10 +16,11 @@ - + class="vn-list-item searchResult">
{{::worker.user.nickname}}
From 2269565dc2fd82811bcfe65a1e5c20c436b9c9d8 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Sun, 10 Mar 2019 13:14:13 +0100 Subject: [PATCH 52/57] #1124 E2E item descriptor icono no activo --- e2e/helpers/selectors.js | 4 +- e2e/paths/item-module/11_inactive.spec.js | 48 +++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 e2e/paths/item-module/11_inactive.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 901c7f57f..330d2f0b0 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -213,7 +213,9 @@ export default { regularizeQuantityInput: `vn-item-descriptor > vn-dialog > div > form > div.body > tpl-body > div > vn-textfield > div > div > div.infix > input`, regularizeWarehouseAutocomplete: 'vn-item-descriptor vn-dialog vn-autocomplete[field="$ctrl.warehouseFk"]', editButton: 'vn-item-card vn-item-descriptor vn-float-button[icon="edit"]', - regularizeSaveButton: `vn-item-descriptor > vn-dialog > div > form > div.buttons > tpl-buttons > button` + regularizeSaveButton: `vn-item-descriptor > vn-dialog > div > form > div.buttons > tpl-buttons > button`, + inactiveIcon: 'vn-item-descriptor vn-icon[icon="icon-unavailable"]', + navigateBackToIndex: 'vn-item-descriptor vn-icon[icon="chevron_left"]' }, itemBasicData: { basicDataButton: `vn-left-menu a[ui-sref="item.card.data"]`, diff --git a/e2e/paths/item-module/11_inactive.spec.js b/e2e/paths/item-module/11_inactive.spec.js new file mode 100644 index 000000000..cdc9d7e65 --- /dev/null +++ b/e2e/paths/item-module/11_inactive.spec.js @@ -0,0 +1,48 @@ +import selectors from '../../helpers/selectors.js'; +import createNightmare from '../../helpers/nightmare'; + +describe('Item regularize path', () => { + const nightmare = createNightmare(); + beforeAll(() => { + nightmare + .loginAndModule('developer', 'item') + .accessToSearchResult(1) + .accessToSection('item.card.data'); + }); + + it('should check the descriptor inactive icon is dark as the item is active', async() => { + let darkIcon = await nightmare + .wait(selectors.itemDescriptor.inactiveIcon) + .waitForClassNotPresent(selectors.itemDescriptor.inactiveIcon, 'bright') + .isVisible(selectors.itemDescriptor.inactiveIcon); + + expect(darkIcon).toBeTruthy(); + }); + + it('should set the item to inactive', async() => { + let result = await nightmare + .waitToClick(selectors.itemBasicData.isActiveCheckbox) + .waitToClick(selectors.itemBasicData.submitBasicDataButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); + + it('should reload the section and check the inactive icon is bright', async() => { + let brightIcon = await nightmare + .reloadSection('item.card.data') + .waitForClassPresent(selectors.itemDescriptor.inactiveIcon, 'bright') + .isVisible(selectors.itemDescriptor.inactiveIcon); + + expect(brightIcon).toBeTruthy(); + }); + + it('should set the item back to active', async() => { + let result = await nightmare + .waitToClick(selectors.itemBasicData.isActiveCheckbox) + .waitToClick(selectors.itemBasicData.submitBasicDataButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); +}); From f6eb8315a3adb9489dfe2cd78b5673fd12e0acef Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 11 Mar 2019 08:00:49 +0100 Subject: [PATCH 53/57] #999 worker.index buscador --- modules/worker/back/methods/worker/filter.js | 126 +++++++++++++++++++ modules/worker/back/models/worker.js | 3 + modules/worker/front/index/index.html | 18 ++- modules/worker/front/index/index.js | 29 +---- modules/worker/front/locale/es.yml | 6 +- modules/worker/front/search-panel/index.html | 38 +++++- 6 files changed, 181 insertions(+), 39 deletions(-) create mode 100644 modules/worker/back/methods/worker/filter.js create mode 100644 modules/worker/back/models/worker.js diff --git a/modules/worker/back/methods/worker/filter.js b/modules/worker/back/methods/worker/filter.js new file mode 100644 index 000000000..cd644730a --- /dev/null +++ b/modules/worker/back/methods/worker/filter.js @@ -0,0 +1,126 @@ + +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; +const buildFilter = require('vn-loopback/util/filter').buildFilter; +const mergeFilters = require('vn-loopback/util/filter').mergeFilters; + +module.exports = Self => { + Self.remoteMethodCtx('filter', { + description: 'Find all instances of the model matched by filter from the data source.', + accessType: 'READ', + accepts: [ + { + arg: 'filter', + type: 'Object', + description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', + http: {source: 'query'} + }, { + arg: 'tags', + type: ['Object'], + description: 'List of tags to filter with', + http: {source: 'query'} + }, { + arg: 'search', + type: 'String', + description: `If it's and integer searchs by id, otherwise it searchs by name`, + http: {source: 'query'} + }, { + arg: 'id', + type: 'Integer', + description: 'The worker id', + http: {source: 'query'} + }, { + arg: 'fi', + type: 'String', + description: 'The worker fi', + http: {source: 'query'} + }, { + arg: 'departmentFk', + type: 'Integer', + description: 'The worker department id', + http: {source: 'query'} + }, { + arg: 'extension', + type: 'Integer', + description: 'The worker extension id', + http: {source: 'query'} + }, { + arg: 'firstName', + type: 'String', + description: 'The worker firstName', + http: {source: 'query'} + }, { + arg: 'name', + type: 'String', + description: 'The worker name', + http: {source: 'query'} + }, { + arg: 'nickname', + type: 'String', + description: 'The worker name', + http: {source: 'query'} + } + ], + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/filter`, + verb: 'GET' + } + }); + + Self.filter = async(ctx, filter) => { + let conn = Self.dataSource.connector; + + let where = buildFilter(ctx.args, (param, value) => { + switch (param) { + case 'search': + return /^\d+$/.test(value) + ? {'w.id': value} + : {or: [ + {'w.firstName': {like: `%${value}%`}}, + {'w.name': {like: `%${value}%`}} + ]}; + case 'id': + return {'w.id': value}; + case 'name': + return {'w.name': {like: `%${value}%`}}; + case 'firstName': + return {'w.firstName': {like: `%${value}%`}}; + case 'extension': + return {'p.extension': value}; + case 'fi': + return {'c.fi': value}; + case 'departmentFk': + return {'d.id': value}; + case 'userName': + return {'u.name': {like: `%${value}%`}}; + } + }); + + filter = mergeFilters(ctx.args.filter, {where}); + + let stmts = []; + let stmt; + + stmt = new ParameterizedSQL( + `SELECT w.id, u.email, p.extension, u.name as userName, + d.name AS department, w.name, u.nickname + FROM worker w + LEFT JOIN workerDepartment wd ON wd.workerFk = w.id + LEFT JOIN department d ON d.id = wd.departmentFk + LEFT JOIN client c ON c.id = w.userFk + LEFT JOIN account.user u ON u.id = w.userFk + LEFT JOIN pbx.sip p ON p.user_id = u.id` + ); + + + stmt.merge(conn.makeSuffix(filter)); + let itemsIndex = stmts.push(stmt) - 1; + + let sql = ParameterizedSQL.join(stmts, ';'); + let result = await conn.executeStmt(sql); + return itemsIndex === 0 ? result : result[itemsIndex]; + }; +}; diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js new file mode 100644 index 000000000..91939c66f --- /dev/null +++ b/modules/worker/back/models/worker.js @@ -0,0 +1,3 @@ +module.exports = Self => { + require('../methods/worker/filter')(Self); +}; diff --git a/modules/worker/front/index/index.html b/modules/worker/front/index/index.html index 7debfc728..a6fdc511e 100644 --- a/modules/worker/front/index/index.html +++ b/modules/worker/front/index/index.html @@ -1,8 +1,8 @@
@@ -10,8 +10,7 @@ @@ -22,21 +21,18 @@ class="vn-list-item"> -
{{::worker.user.nickname}}
+
{{::worker.nickname}}
+ value="{{::worker.userName}}"> - - + value="{{::worker.userName}}@verdnatura.es"> + value="{{::worker.department}}">
diff --git a/modules/worker/front/index/index.js b/modules/worker/front/index/index.js index 53a601ca7..333edcd4d 100644 --- a/modules/worker/front/index/index.js +++ b/modules/worker/front/index/index.js @@ -5,33 +5,14 @@ export default class Controller { Object.assign(this, { $, selectedWorker: null, - include: [ - { - relation: 'user', - scope: {fields: ['nickname', 'email']} - }, { - relation: 'client', - scope: {fields: ['fi']} - } - ] }); } - exprBuilder(param, value) { - switch (param) { - case 'search': - return /^\d+$/.test(value) - ? {id: value} - : {or: [ - {firstName: {like: `%${value}%`}}, - {name: {like: `%${value}%`}} - ]}; - case 'name': - case 'firstName': - return {[param]: {like: `%${value}%`}}; - case 'id': - return {[param]: value}; - } + onSearch(params) { + if (params) + this.$.model.applyFilter(null, params); + else + this.$.model.clear(); } preview(event, worker) { diff --git a/modules/worker/front/locale/es.yml b/modules/worker/front/locale/es.yml index 7caf36e0b..fec7b0995 100644 --- a/modules/worker/front/locale/es.yml +++ b/modules/worker/front/locale/es.yml @@ -7,4 +7,8 @@ Department: Departamento User id: Id de usuario Role: Rol Extension: Extensión -Go to client: Ir al cliente \ No newline at end of file +Go to client: Ir al cliente +View worker: Ver trabajador +Worker id: Id trabajador +Fiscal Identifier: NIF +User name: Usuario diff --git a/modules/worker/front/search-panel/index.html b/modules/worker/front/search-panel/index.html index 36945f33d..67fd0ffcc 100644 --- a/modules/worker/front/search-panel/index.html +++ b/modules/worker/front/search-panel/index.html @@ -11,22 +11,54 @@ + label="User id" + model="filter.id"> + + + + + + + + + + + + + + From 63787a7bebc74a1ef5d9dbc3db30a223db8e2fd9 Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 11 Mar 2019 08:11:48 +0100 Subject: [PATCH 54/57] showing client tickets from client descriptor works again --- modules/ticket/front/index/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ticket/front/index/index.js b/modules/ticket/front/index/index.js index 5d760b834..8c9d22fff 100644 --- a/modules/ticket/front/index/index.js +++ b/modules/ticket/front/index/index.js @@ -12,7 +12,6 @@ export default class Controller { this.goToTurns('ticket.weekly'); }, name: 'Turns', always: true}, ]; - this.filter = {}; if (!$stateParams.q) { let today = new Date(); @@ -25,7 +24,7 @@ export default class Controller { sixDays.setDate(today.getDate() + 6); sixDays.setHours(23, 59, 59, 999); - this.filter = Object.assign(this.filter, {myTeam: true, from: today, to: sixDays}); + this.filter = Object.assign({}, {myTeam: true, from: today, to: sixDays}); } } @@ -35,6 +34,7 @@ export default class Controller { } onSearch(params) { + console.log(params); if (params) this.$.model.applyFilter(null, params); else From 987fc1e4e3b7aa09c497cc4e8f66dd4bad4fbaa7 Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 11 Mar 2019 08:40:35 +0100 Subject: [PATCH 55/57] tranlations added --- modules/item/front/create/locale/es.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 modules/item/front/create/locale/es.yml diff --git a/modules/item/front/create/locale/es.yml b/modules/item/front/create/locale/es.yml new file mode 100644 index 000000000..041826e1c --- /dev/null +++ b/modules/item/front/create/locale/es.yml @@ -0,0 +1 @@ +Temporal name: Nombre temporal \ No newline at end of file From 91f8f337f59f814a323db2a7c60e5afd3a61d9fc Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 11 Mar 2019 11:09:59 +0100 Subject: [PATCH 56/57] removed clog --- modules/ticket/front/index/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/ticket/front/index/index.js b/modules/ticket/front/index/index.js index 8c9d22fff..f9c14600d 100644 --- a/modules/ticket/front/index/index.js +++ b/modules/ticket/front/index/index.js @@ -34,7 +34,6 @@ export default class Controller { } onSearch(params) { - console.log(params); if (params) this.$.model.applyFilter(null, params); else From 41a34421dfc1ee3b2537188a492cd27042c2570b Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 11 Mar 2019 11:29:31 +0100 Subject: [PATCH 57/57] ship menu now open the stowaways in new tabs --- modules/ticket/front/descriptor/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/ticket/front/descriptor/index.js b/modules/ticket/front/descriptor/index.js index a236b0d5a..fdee19bec 100644 --- a/modules/ticket/front/descriptor/index.js +++ b/modules/ticket/front/descriptor/index.js @@ -57,7 +57,8 @@ class Controller { } goToTicket(ticketID) { - this.$state.go('ticket.card.sale', {id: ticketID}); + let url = this.$state.href('ticket.card.sale', {id: ticketID}, {absolute: true}); + window.open(url, '_blank'); } onMoreOpen() {