From a733bc8c2f6e658aeafe91c471b29b3af20f371e Mon Sep 17 00:00:00 2001 From: Pau Navarro Date: Wed, 16 Nov 2022 13:36:26 +0100 Subject: [PATCH] refs #4789 hasInvoice on ticket searchbar @3h30m --- modules/ticket/back/methods/ticket/filter.js | 9 +++++ .../back/methods/ticket/specs/filter.spec.js | 38 +++++++++++++++++++ modules/ticket/front/search-panel/index.html | 5 +++ .../ticket/front/search-panel/locale/es.yml | 1 + 4 files changed, 53 insertions(+) diff --git a/modules/ticket/back/methods/ticket/filter.js b/modules/ticket/back/methods/ticket/filter.js index da8f65be2..a2add2e82 100644 --- a/modules/ticket/back/methods/ticket/filter.js +++ b/modules/ticket/back/methods/ticket/filter.js @@ -88,6 +88,11 @@ module.exports = Self => { type: 'boolean', description: `Whether to show only tickets with route` }, + { + arg: 'hasInvoice', + type: 'boolean', + description: `Whether to show only tickets with invoice` + }, { arg: 'pending', type: 'boolean', @@ -199,6 +204,10 @@ module.exports = Self => { if (value == true) return {'t.routeFk': {neq: null}}; return {'t.routeFk': null}; + case 'hasInvoice': + if (value == true) + return {'t.refFk': {neq: null}}; + return {'t.refFk': null}; case 'pending': return {'st.isNotValidated': value}; case 'id': diff --git a/modules/ticket/back/methods/ticket/specs/filter.spec.js b/modules/ticket/back/methods/ticket/specs/filter.spec.js index c3dc40092..7d1613120 100644 --- a/modules/ticket/back/methods/ticket/specs/filter.spec.js +++ b/modules/ticket/back/methods/ticket/specs/filter.spec.js @@ -278,4 +278,42 @@ describe('ticket filter()', () => { throw e; } }); + + it('should return the tickets the invoice on false', async() => { + const tx = await models.Ticket.beginTransaction({}); + + try { + const options = {transaction: tx}; + + const ctx = {req: {accessToken: {userId: 9}}, args: {hasInvoice: true}}; + const filter = {}; + const result = await models.Ticket.filter(ctx, filter, options); + + expect(result.length).toEqual(6); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); + + it('should return the tickets the invoice on null', async() => { + const tx = await models.Ticket.beginTransaction({}); + + try { + const options = {transaction: tx}; + + const ctx = {req: {accessToken: {userId: 9}}, args: {hasInvoice: null}}; + const filter = {}; + const result = await models.Ticket.filter(ctx, filter, options); + + expect(result.length).toEqual(27); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); }); diff --git a/modules/ticket/front/search-panel/index.html b/modules/ticket/front/search-panel/index.html index b0d4963bd..7002f3dd6 100644 --- a/modules/ticket/front/search-panel/index.html +++ b/modules/ticket/front/search-panel/index.html @@ -141,6 +141,11 @@ ng-model="filter.hasRoute" triple-state="true"> + diff --git a/modules/ticket/front/search-panel/locale/es.yml b/modules/ticket/front/search-panel/locale/es.yml index 52cc04d6e..1d1c82d1a 100644 --- a/modules/ticket/front/search-panel/locale/es.yml +++ b/modules/ticket/front/search-panel/locale/es.yml @@ -13,6 +13,7 @@ Grouped States: Estado agrupado Days onward: Días adelante With problems: Con problemas Has route: Con ruta +Has invoice: Con factura Pending: Pendiente FREE: Libre DELIVERED: Servido