diff --git a/Jenkinsfile b/Jenkinsfile index c8a0579d7..c65b01d47 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -101,6 +101,7 @@ pipeline { } stage('Database') { when { anyOf { + branch 'dev' branch 'test' branch 'master' }} diff --git a/back/tests.js b/back/tests.js index 45d19a671..c4c477090 100644 --- a/back/tests.js +++ b/back/tests.js @@ -1,9 +1,10 @@ +/* eslint-disable no-console */ const path = require('path'); const Myt = require('@verdnatura/myt/myt'); const Run = require('@verdnatura/myt/myt-run'); let dataSources = require('../loopback/server/datasources.json'); -let myt; +let server; process.on('warning', warning => { console.log(warning.name); @@ -11,25 +12,33 @@ process.on('warning', warning => { console.log(warning.stack); }); -process.on('SIGUSR2', async() => { - if (myt) await myt.deinit(); -}); +process.on('SIGUSR2', rmServer); +process.on('exit', rmServer); -process.on('exit', async function() { - if (myt) await myt.deinit(); -}); +async function rmServer() { + if (!server) return; + await server.rm(); + server = null; +} async function test() { + console.log('Building and running DB container.'); + const isCI = process.argv[2] === 'ci'; - myt = new Myt(); + const myt = new Myt(); await myt.init({ workspace: path.join(__dirname, '..'), random: true, ci: isCI, + tmpfs: process.platform == 'linux', network: isCI ? 'jenkins' : null }); - const {dbConfig} = await myt.run(Run); + server = await myt.run(Run); + await myt.deinit(); + const {dbConfig} = server; + + console.log('Initializing backend.'); dataSources = JSON.parse(JSON.stringify(dataSources)); Object.assign(dataSources.vn, { @@ -46,6 +55,8 @@ async function test() { // FIXME: Workaround to wait for loopback to be ready await app.models.Application.status(); + console.log('Running tests.'); + const Jasmine = require('jasmine'); const jasmine = new Jasmine(); @@ -81,9 +92,13 @@ async function test() { }); await jasmine.execute(); + + console.log('Stopping.'); + if (app) await app.disconnect(); - if (myt) await myt.deinit(); - console.log('App disconnected & container removed'); + await rmServer(); + + console.log('Tests ended.\n'); } test(); diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 6a58b60f5..0f608d19d 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -6,9 +6,10 @@ */ SET foreign_key_checks = 0; --- CREATE ROLE 'salix'; --- GRANT 'salix' TO 'root'@'%'; --- SET DEFAULT ROLE 'salix' FOR 'root'@'%'; +DROP ROLE 'salix'; +CREATE ROLE 'salix'; +GRANT 'salix' TO 'root'@'%'; +SET DEFAULT ROLE 'salix' FOR 'root'@'%'; CREATE SCHEMA IF NOT EXISTS `vn2008`; CREATE SCHEMA IF NOT EXISTS `tmp`; diff --git a/db/versions/10848-blackAspidistra/00-firstScript.sql b/db/versions/10848-blackAspidistra/00-firstScript.sql new file mode 100644 index 000000000..cc9a59a24 --- /dev/null +++ b/db/versions/10848-blackAspidistra/00-firstScript.sql @@ -0,0 +1,3 @@ +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES + ('Ticket', 'makePdfList', '*', 'ALLOW', 'ROLE', 'employee'), + ('Ticket', 'invoiceTicketsAndPdf', '*', 'ALLOW', 'ROLE', 'employee'); diff --git a/db/versions/10849-chocolateCymbidium/00-roleLog.sql b/db/versions/10849-chocolateCymbidium/00-roleLog.sql new file mode 100644 index 000000000..0f2eb1953 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/00-roleLog.sql @@ -0,0 +1 @@ +ALTER TABLE account.roleLog DROP FOREIGN KEY roleLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/01-userLog.sql b/db/versions/10849-chocolateCymbidium/01-userLog.sql new file mode 100644 index 000000000..87d687afe --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/01-userLog.sql @@ -0,0 +1 @@ +ALTER TABLE account.userLog DROP FOREIGN KEY userLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/02-entryLog.sql b/db/versions/10849-chocolateCymbidium/02-entryLog.sql new file mode 100644 index 000000000..e273f54a3 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/02-entryLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.entryLog DROP FOREIGN KEY entryLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/03-clientLog.sql b/db/versions/10849-chocolateCymbidium/03-clientLog.sql new file mode 100644 index 000000000..38a3424a1 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/03-clientLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.clientLog DROP FOREIGN KEY clientLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/04-itemLog.sql b/db/versions/10849-chocolateCymbidium/04-itemLog.sql new file mode 100644 index 000000000..7ad6a6b15 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/04-itemLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.itemLog DROP FOREIGN KEY itemLogItemFk; diff --git a/db/versions/10849-chocolateCymbidium/05-shelvingLog.sql b/db/versions/10849-chocolateCymbidium/05-shelvingLog.sql new file mode 100644 index 000000000..031921bdf --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/05-shelvingLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.shelvingLog DROP FOREIGN KEY shelvingLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/06-workerLog.sql b/db/versions/10849-chocolateCymbidium/06-workerLog.sql new file mode 100644 index 000000000..c8d4faf44 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/06-workerLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.workerLog DROP FOREIGN KEY workerFk; diff --git a/db/versions/10849-chocolateCymbidium/07-deviceProductionLog.sql b/db/versions/10849-chocolateCymbidium/07-deviceProductionLog.sql new file mode 100644 index 000000000..1cd5b54e9 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/07-deviceProductionLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.deviceProductionLog DROP FOREIGN KEY deviceProductionOriginFk; diff --git a/db/versions/10849-chocolateCymbidium/08-zoneLog.sql b/db/versions/10849-chocolateCymbidium/08-zoneLog.sql new file mode 100644 index 000000000..b4ed11043 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/08-zoneLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.zoneLog DROP FOREIGN KEY zoneLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/09-rateLog.sql b/db/versions/10849-chocolateCymbidium/09-rateLog.sql new file mode 100644 index 000000000..33e2d4b93 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/09-rateLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.rateLog DROP FOREIGN KEY rateOriginFk; diff --git a/db/versions/10849-chocolateCymbidium/10-ticketLog.sql b/db/versions/10849-chocolateCymbidium/10-ticketLog.sql new file mode 100644 index 000000000..e7117d3c6 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/10-ticketLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.ticketLog DROP FOREIGN KEY ticketLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/11-userLog.sql b/db/versions/10849-chocolateCymbidium/11-userLog.sql new file mode 100644 index 000000000..44aa9c495 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/11-userLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.userLog DROP FOREIGN KEY userLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/12-routeLog.sql b/db/versions/10849-chocolateCymbidium/12-routeLog.sql new file mode 100644 index 000000000..dbe8ce143 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/12-routeLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.routeLog DROP FOREIGN KEY routeLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/13-claimLog.sql b/db/versions/10849-chocolateCymbidium/13-claimLog.sql new file mode 100644 index 000000000..23ac00c9a --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/13-claimLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.claimLog DROP FOREIGN KEY claimOriginFk; diff --git a/db/versions/10849-chocolateCymbidium/14-supplierLog.sql b/db/versions/10849-chocolateCymbidium/14-supplierLog.sql new file mode 100644 index 000000000..53626bbd9 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/14-supplierLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.supplierLog DROP FOREIGN KEY supplierLog_supplierFk; diff --git a/db/versions/10849-chocolateCymbidium/15-invoiceInLog.sql b/db/versions/10849-chocolateCymbidium/15-invoiceInLog.sql new file mode 100644 index 000000000..18f015196 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/15-invoiceInLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.invoiceInLog DROP FOREIGN KEY invoiceInLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/16-travelLog.sql b/db/versions/10849-chocolateCymbidium/16-travelLog.sql new file mode 100644 index 000000000..18e68e376 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/16-travelLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.travelLog DROP FOREIGN KEY travelLog_ibfk_1; diff --git a/db/versions/10849-chocolateCymbidium/17-packingSiteDeviceLog.sql b/db/versions/10849-chocolateCymbidium/17-packingSiteDeviceLog.sql new file mode 100644 index 000000000..2119c24d9 --- /dev/null +++ b/db/versions/10849-chocolateCymbidium/17-packingSiteDeviceLog.sql @@ -0,0 +1 @@ +ALTER TABLE vn.packingSiteDeviceLog DROP FOREIGN KEY packingSiteDeviceLog_ibfk_1; diff --git a/e2e/paths/05-ticket/02_expeditions_and_log.spec.js b/e2e/paths/05-ticket/02_expeditions_and_log.spec.js index b97576940..4e8005043 100644 --- a/e2e/paths/05-ticket/02_expeditions_and_log.spec.js +++ b/e2e/paths/05-ticket/02_expeditions_and_log.spec.js @@ -27,6 +27,6 @@ describe('Ticket expeditions and log path', () => { const result = await page .countElement(selectors.ticketExpedition.expeditionRow); - expect(result).toEqual(4); + expect(result).toEqual(6); }); }); diff --git a/e2e/paths/13-supplier/02_basic_data.spec.js b/e2e/paths/13-supplier/02_basic_data.spec.js index 72ea6d890..79a9898ca 100644 --- a/e2e/paths/13-supplier/02_basic_data.spec.js +++ b/e2e/paths/13-supplier/02_basic_data.spec.js @@ -41,10 +41,10 @@ describe('Supplier basic data path', () => { expect(result).toEqual('Plants Nick SL'); }); - it('should check the isSerious checkbox is now unchecked', async() => { + it('should check the isSerious checkbox is now checked', async() => { const result = await page.checkboxState(selectors.supplierBasicData.isSerious); - expect(result).toBe('unchecked'); + expect(result).toBe('checked'); }); it('should check the isActive checkbox is now unchecked', async() => { diff --git a/modules/invoiceOut/back/methods/invoiceOut/makePdfList.js b/modules/invoiceOut/back/methods/invoiceOut/makePdfList.js new file mode 100644 index 000000000..a0449aeda --- /dev/null +++ b/modules/invoiceOut/back/methods/invoiceOut/makePdfList.js @@ -0,0 +1,31 @@ + +module.exports = Self => { + Self.remoteMethodCtx('makePdfList', { + description: 'Handle a list of invoices to generate PDF and send it to client', + accessType: 'WRITE', + accepts: [ + { + arg: 'ids', + type: ['number'], + description: 'The invoice id', + required: true, + http: {source: 'path'} + }, { + arg: 'printerFk', + type: 'number', + description: 'The printer to print' + } + ], + http: { + path: '/:id/makePdfList', + verb: 'POST' + } + }); + + Self.makePdfList = async function(ctx, ids, printerFk, options) { + const pdfs = ids.map(id => + Self.makePdfAndNotify(ctx, id, printerFk, options) + ); + await Promise.all(pdfs); + }; +}; diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/transferinvoice.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/transferinvoice.spec.js index 11575999a..eaaef3e26 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/specs/transferinvoice.spec.js +++ b/modules/invoiceOut/back/methods/invoiceOut/specs/transferinvoice.spec.js @@ -17,6 +17,7 @@ describe('InvoiceOut transferInvoice()', () => { spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ active: activeCtx }); + spyOn(models.InvoiceOut, 'makePdfAndNotify'); }); it('should return the id of the created issued invoice', async() => { diff --git a/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js index 782eaf6d8..8e234d7cc 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js +++ b/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js @@ -86,17 +86,17 @@ module.exports = Self => { clonedTicketIds.push(clonedTicket.id); } - const invoiceCorrection = - {correctedFk: id, cplusRectificationTypeFk, siiTypeInvoiceOutFk, invoiceCorrectionTypeFk}; + const invoiceCorrection = { + correctedFk: id, + cplusRectificationTypeFk, + siiTypeInvoiceOutFk, + invoiceCorrectionTypeFk + }; const refundTicketIds = refundTickets.map(ticket => ticket.id); await models.Ticket.invoiceTickets(ctx, refundTicketIds, invoiceCorrection, myOptions); - const [invoiceId] = await models.Ticket.invoiceTickets(ctx, clonedTicketIds, null, myOptions); - if (tx) { - await tx.commit(); - await models.InvoiceOut.makePdfAndNotify(ctx, invoiceId, null); - } + const [invoiceId] = await models.Ticket.invoiceTicketsAndPdf(ctx, clonedTicketIds, null, myOptions); return invoiceId; } catch (e) { diff --git a/modules/invoiceOut/back/models/invoice-out.js b/modules/invoiceOut/back/models/invoice-out.js index ca77c856f..91f4883ad 100644 --- a/modules/invoiceOut/back/models/invoice-out.js +++ b/modules/invoiceOut/back/models/invoice-out.js @@ -13,6 +13,7 @@ module.exports = Self => { require('../methods/invoiceOut/createManualInvoice')(Self); require('../methods/invoiceOut/clientsToInvoice')(Self); require('../methods/invoiceOut/invoiceClient')(Self); + require('../methods/invoiceOut/makePdfList')(Self); require('../methods/invoiceOut/makePdfAndNotify')(Self); require('../methods/invoiceOut/refund')(Self); require('../methods/invoiceOut/invoiceEmail')(Self); diff --git a/modules/ticket/back/methods/ticket/invoiceTickets.js b/modules/ticket/back/methods/ticket/invoiceTickets.js index 06429836e..53400e724 100644 --- a/modules/ticket/back/methods/ticket/invoiceTickets.js +++ b/modules/ticket/back/methods/ticket/invoiceTickets.js @@ -76,15 +76,11 @@ module.exports = function(Self) { for (const ticketIds of ticketsByAddress) invoicesIds.push(await createInvoice(ctx, companyId, ticketIds, invoiceCorrection, myOptions)); - if (tx) await tx.commit(); + tx && await tx.commit(); } catch (e) { if (tx) await tx.rollback(); throw e; } - if (tx) { - for (const invoiceId of invoicesIds) - await models.InvoiceOut.makePdfAndNotify(ctx, invoiceId, null); - } return invoicesIds; }; diff --git a/modules/ticket/back/methods/ticket/invoiceTicketsAndPdf.js b/modules/ticket/back/methods/ticket/invoiceTicketsAndPdf.js new file mode 100644 index 000000000..2211eb50b --- /dev/null +++ b/modules/ticket/back/methods/ticket/invoiceTicketsAndPdf.js @@ -0,0 +1,36 @@ + +module.exports = function(Self) { + Self.remoteMethodCtx('invoiceTicketsAndPdf', { + description: 'Make out an invoice from one or more tickets', + accessType: 'WRITE', + accepts: [ + { + arg: 'ticketsIds', + description: 'The tickets id', + type: ['number'], + required: true + }, + { + arg: 'invoiceCorrection', + description: 'The invoice correction', + type: 'object', + } + + ], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/invoiceTicketsAndPdf`, + verb: 'POST' + } + }); + + Self.invoiceTicketsAndPdf = async(ctx, ticketsIds, invoiceCorrection, options) => { + const invoiceIds = await Self.invoiceTickets(ctx, ticketsIds, invoiceCorrection, options); + await Self.app.models.InvoiceOut.makePdfList(ctx, invoiceIds, null, options); + return invoiceIds; + }; +}; + diff --git a/modules/ticket/back/methods/ticket/specs/invoiceTickets.spec.js b/modules/ticket/back/methods/ticket/specs/invoiceTickets.spec.js index 162dc066a..7d511cfd2 100644 --- a/modules/ticket/back/methods/ticket/specs/invoiceTickets.spec.js +++ b/modules/ticket/back/methods/ticket/specs/invoiceTickets.spec.js @@ -102,7 +102,7 @@ describe('ticket invoiceTickets()', () => { const options = {transaction: tx}; const ticketsIds = [11]; - const invoicesIds = await models.Ticket.invoiceTickets(ctx, ticketsIds, null, options); + const invoicesIds = await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); expect(invoicesIds.length).toBeGreaterThan(0); diff --git a/modules/ticket/back/methods/ticket/specs/invoiceTicketsAndPdf.spec.js b/modules/ticket/back/methods/ticket/specs/invoiceTicketsAndPdf.spec.js new file mode 100644 index 000000000..086d1117f --- /dev/null +++ b/modules/ticket/back/methods/ticket/specs/invoiceTicketsAndPdf.spec.js @@ -0,0 +1,115 @@ +const models = require('vn-loopback/server/server').models; +const LoopBackContext = require('loopback-context'); + +describe('ticket invoiceTicketsAndPdf()', () => { + const userId = 19; + const clientId = 1102; + const activeCtx = { + getLocale: () => { + return 'en'; + }, + accessToken: {userId: userId}, + headers: {origin: 'http://localhost:5000'}, + }; + const ctx = {req: activeCtx}; + + beforeAll(async() => { + spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ + active: activeCtx + }); + }); + + it('should throw an error when invoicing tickets from multiple clients', async() => { + const invoiceOutModel = models.InvoiceOut; + spyOn(invoiceOutModel, 'makePdfAndNotify'); + + const tx = await models.Ticket.beginTransaction({}); + + let error; + + try { + const options = {transaction: tx}; + + const ticketsIds = [11, 16]; + await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); + + await tx.rollback(); + } catch (e) { + error = e; + await tx.rollback(); + } + + expect(error.message).toEqual(`You can't invoice tickets from multiple clients`); + }); + + it(`should throw an error when invoicing a client without tax data checked`, async() => { + const invoiceOutModel = models.InvoiceOut; + spyOn(invoiceOutModel, 'makePdfAndNotify'); + + const tx = await models.Ticket.beginTransaction({}); + + let error; + + try { + const options = {transaction: tx}; + + const client = await models.Client.findById(clientId, null, options); + await client.updateAttribute('isTaxDataChecked', false, options); + + const ticketsIds = [11]; + await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); + + await tx.rollback(); + } catch (e) { + error = e; + await tx.rollback(); + } + + expect(error.message).toEqual(`This client can't be invoiced`); + }); + + it('should invoice a ticket, then try again to fail', async() => { + const invoiceOutModel = models.InvoiceOut; + spyOn(invoiceOutModel, 'makePdfAndNotify'); + + const tx = await models.Ticket.beginTransaction({}); + + let error; + + try { + const options = {transaction: tx}; + + const ticketsIds = [11]; + await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); + await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); + + await tx.rollback(); + } catch (e) { + error = e; + await tx.rollback(); + } + + expect(error.message).toEqual(`This ticket is already invoiced`); + }); + + it('should success to invoice a ticket', async() => { + const invoiceOutModel = models.InvoiceOut; + spyOn(invoiceOutModel, 'makePdfAndNotify'); + + const tx = await models.Ticket.beginTransaction({}); + + try { + const options = {transaction: tx}; + + const ticketsIds = [11]; + const invoicesIds = await models.Ticket.invoiceTicketsAndPdf(ctx, ticketsIds, null, options); + + expect(invoicesIds.length).toBeGreaterThan(0); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); +}); diff --git a/modules/ticket/back/models/ticket-methods.js b/modules/ticket/back/models/ticket-methods.js index 14cb104be..ce54959e7 100644 --- a/modules/ticket/back/models/ticket-methods.js +++ b/modules/ticket/back/models/ticket-methods.js @@ -42,5 +42,6 @@ module.exports = function(Self) { require('../methods/ticket/expeditionPalletLabel')(Self); require('../methods/ticket/saveSign')(Self); require('../methods/ticket/invoiceTickets')(Self); + require('../methods/ticket/invoiceTicketsAndPdf')(Self); require('../methods/ticket/docuwareDownload')(Self); }; diff --git a/modules/ticket/front/descriptor-menu/index.js b/modules/ticket/front/descriptor-menu/index.js index cd819e623..297d8ee1b 100644 --- a/modules/ticket/front/descriptor-menu/index.js +++ b/modules/ticket/front/descriptor-menu/index.js @@ -265,7 +265,7 @@ class Controller extends Section { }); } - return this.$http.post(`Tickets/invoiceTickets`, {ticketsIds: [this.id]}) + return this.$http.post(`Tickets/invoiceTicketsAndPdf`, {ticketsIds: [this.id]}) .then(() => this.reload()) .then(() => this.vnApp.showSuccess(this.$t('Ticket invoiced'))); } diff --git a/modules/ticket/front/descriptor-menu/index.spec.js b/modules/ticket/front/descriptor-menu/index.spec.js index c755b14c3..6d74881b8 100644 --- a/modules/ticket/front/descriptor-menu/index.spec.js +++ b/modules/ticket/front/descriptor-menu/index.spec.js @@ -191,7 +191,7 @@ describe('Ticket Component vnTicketDescriptorMenu', () => { jest.spyOn(controller.vnApp, 'showSuccess'); const expectedParams = {ticketsIds: [ticket.id]}; - $httpBackend.expectPOST(`Tickets/invoiceTickets`, expectedParams).respond(); + $httpBackend.expectPOST(`Tickets/invoiceTicketsAndPdf`, expectedParams).respond(); controller.makeInvoice(); $httpBackend.flush(); diff --git a/modules/ticket/front/index/index.js b/modules/ticket/front/index/index.js index b3afc838c..489f677a3 100644 --- a/modules/ticket/front/index/index.js +++ b/modules/ticket/front/index/index.js @@ -163,7 +163,7 @@ export default class Controller extends Section { makeInvoice() { const ticketsIds = this.checked.map(ticket => ticket.id); - return this.$http.post(`Tickets/invoiceTickets`, {ticketsIds}) + return this.$http.post(`Tickets/invoiceTicketsAndPdf`, {ticketsIds}) .then(() => this.$.model.refresh()) .then(() => this.vnApp.showSuccess(this.$t('Ticket invoiced'))); } diff --git a/package-lock.json b/package-lock.json index 859fbcf6e..d04a12a14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "@babel/plugin-syntax-dynamic-import": "^7.7.4", "@babel/preset-env": "^7.11.0", "@babel/register": "^7.7.7", - "@verdnatura/myt": "^1.6.0", + "@verdnatura/myt": "^1.6.3", "angular-mocks": "^1.7.9", "babel-jest": "^26.0.1", "babel-loader": "^8.2.4", @@ -3375,9 +3375,9 @@ } }, "node_modules/@verdnatura/myt": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@verdnatura/myt/-/myt-1.6.0.tgz", - "integrity": "sha512-bQWWMTkvX4wQzojp//XmTRLFGTBuVJ+pwNZxSoIl4LjsidCq5FId48qpkFG9E/CBi3gaf7AkbYDD+A8pv1WMUQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@verdnatura/myt/-/myt-1.6.3.tgz", + "integrity": "sha512-VRoTB5sEPL8a7VaX9l2afpaPNT6pBa+If1tP9tpaJ4enFQbNITlApcC0GK6XYmWMkJQjl2lgdN4/u0UCiNb2MQ==", "dev": true, "dependencies": { "@sqltools/formatter": "^1.2.5", @@ -30604,9 +30604,9 @@ } }, "@verdnatura/myt": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@verdnatura/myt/-/myt-1.6.0.tgz", - "integrity": "sha512-bQWWMTkvX4wQzojp//XmTRLFGTBuVJ+pwNZxSoIl4LjsidCq5FId48qpkFG9E/CBi3gaf7AkbYDD+A8pv1WMUQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@verdnatura/myt/-/myt-1.6.3.tgz", + "integrity": "sha512-VRoTB5sEPL8a7VaX9l2afpaPNT6pBa+If1tP9tpaJ4enFQbNITlApcC0GK6XYmWMkJQjl2lgdN4/u0UCiNb2MQ==", "dev": true, "requires": { "@sqltools/formatter": "^1.2.5", diff --git a/package.json b/package.json index 0d1fd41bd..3f3a3ad8e 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@babel/plugin-syntax-dynamic-import": "^7.7.4", "@babel/preset-env": "^7.11.0", "@babel/register": "^7.7.7", - "@verdnatura/myt": "^1.6.0", + "@verdnatura/myt": "^1.6.3", "angular-mocks": "^1.7.9", "babel-jest": "^26.0.1", "babel-loader": "^8.2.4",