diff --git a/db/changes/233201/00-ticketAcl.sql b/db/changes/233201/00-ticketAcl.sql new file mode 100644 index 000000000..0bad0f781 --- /dev/null +++ b/db/changes/233201/00-ticketAcl.sql @@ -0,0 +1,3 @@ +INSERT INTO `salix`.`ACL` (`model`,`property`,`accessType`,`permission`,`principalId`) + VALUES + ('Ticket','volume','READ','ALLOW','employee'); diff --git a/modules/ticket/back/methods/ticket/specs/volume.spec.js b/modules/ticket/back/methods/ticket/specs/volume.spec.js new file mode 100644 index 000000000..4787cdf0d --- /dev/null +++ b/modules/ticket/back/methods/ticket/specs/volume.spec.js @@ -0,0 +1,11 @@ +const models = require('vn-loopback/server/server').models; + +fdescribe('ticket volume()', () => { + it('should return the tickets matching the filter', async() => { + const ticketId = 1; + const filter = {order: ['concept']}; + const result = await models.Ticket.volume(ticketId, filter); + + expect(result.length).toBe(4); + }); +}); diff --git a/modules/ticket/back/methods/ticket/volume.js b/modules/ticket/back/methods/ticket/volume.js new file mode 100644 index 000000000..0881edbee --- /dev/null +++ b/modules/ticket/back/methods/ticket/volume.js @@ -0,0 +1,63 @@ +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; + +module.exports = Self => { + Self.remoteMethod('volume', { + description: 'Return the volume of a ticket', + accessType: 'READ', + accepts: [ + { + arg: 'id', + type: 'number', + required: true, + description: 'The ticket id', + http: {source: 'path'} + }, + { + arg: 'filter', + type: 'object' + }], + returns: { + type: 'object', + root: true + }, + http: { + path: '/:id/volume', + verb: 'GET' + } + }); + + Self.volume = async(id, filter) => { + const conn = Self.dataSource.connector; + + const stmt = new ParameterizedSQL( + `SELECT + s.id, + s.itemFk, + s.quantity, + i.name, + i.subName, + i.itemPackingTypeFk, + i.value5, + i.value6, + i.value7, + i.value8, + i.value9, + i.value10 + FROM vn.sale s + JOIN vn.item i ON i.id = s.itemFk + WHERE s.ticketFk = ?` + , [id] + ); + + stmt.merge(conn.makeSuffix(filter)); + + const result = await conn.executeStmt(stmt); + + const outputArray = result.map(({name, subName, itemPackingTypeFk, ...rest}) => ({ + ...rest, + item: {name, subName, itemPackingTypeFk}, + })); + + return outputArray; + }; +}; diff --git a/modules/ticket/back/models/ticket-methods.js b/modules/ticket/back/models/ticket-methods.js index c37337253..3d527d53b 100644 --- a/modules/ticket/back/models/ticket-methods.js +++ b/modules/ticket/back/models/ticket-methods.js @@ -42,4 +42,5 @@ module.exports = function(Self) { require('../methods/ticket/expeditionPalletLabel')(Self); require('../methods/ticket/saveSign')(Self); require('../methods/ticket/invoiceTickets')(Self); + require('../methods/ticket/volume')(Self); }; diff --git a/modules/ticket/front/volume/index.html b/modules/ticket/front/volume/index.html index ff0a86772..e7d43ae3e 100644 --- a/modules/ticket/front/volume/index.html +++ b/modules/ticket/front/volume/index.html @@ -1,10 +1,9 @@ diff --git a/modules/ticket/front/volume/index.js b/modules/ticket/front/volume/index.js index 7acecf570..48e374224 100644 --- a/modules/ticket/front/volume/index.js +++ b/modules/ticket/front/volume/index.js @@ -4,12 +4,6 @@ import Section from 'salix/components/section'; class Controller extends Section { constructor($element, $) { super($element, $); - this.filter = { - include: { - relation: 'item' - }, - order: 'concept' - }; this.ticketVolumes = []; } @@ -25,8 +19,7 @@ class Controller extends Section { } applyVolumes() { - const ticket = this.sales[0].ticketFk; - this.$http.get(`Tickets/${ticket}/getVolume`).then(res => { + this.$http.get(`Tickets/${this.$params.id}/getVolume`).then(res => { const saleVolume = res.data.saleVolume; const volumes = new Map();