From 8193b0ffc0b68622c1e989cd8cdc3106fd497d01 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Thu, 6 Feb 2020 07:37:41 +0100 Subject: [PATCH] update ticket.filter --- modules/ticket/back/methods/ticket/filter.js | 36 +++++++++++++++++++ .../back/methods/ticket/specs/filter.spec.js | 27 ++++++++++++++ modules/ticket/front/search-panel/index.html | 20 +++++++---- 3 files changed, 77 insertions(+), 6 deletions(-) diff --git a/modules/ticket/back/methods/ticket/filter.js b/modules/ticket/back/methods/ticket/filter.js index a3c17ecc47..5fea43fbd3 100644 --- a/modules/ticket/back/methods/ticket/filter.js +++ b/modules/ticket/back/methods/ticket/filter.js @@ -63,6 +63,10 @@ module.exports = Self => { arg: 'myTeam', type: 'Boolean', description: `Whether to show only tickets for the current logged user team (For now it shows only the current user tickets)` + }, { + arg: 'problems', + type: 'Boolean', + description: `Whether to show only tickets with problems` }, { arg: 'mine', type: 'Boolean', @@ -239,6 +243,38 @@ module.exports = Self => { FROM tmp.filter f LEFT JOIN tmp.ticketProblems tp ON tp.ticketFk = f.id LEFT JOIN tmp.ticketTotal tt ON tt.ticketFk = f.id`); + + + let condition; + let hasProblem; + let range; + let hasWhere; + switch (ctx.args.problems) { + case true: + condition = `or`; + hasProblem = true; + range = 0; + hasWhere = true; + break; + + case false: + condition = `and`; + hasProblem = null; + range = null; + hasWhere = true; + break; + } + + let problems = {[condition]: [ + {'tp.isFreezed': hasProblem}, + {'tp.risk': hasProblem}, + {'tp.hasTicketRequest': hasProblem}, + {'tp.isAvailable': range} + ]}; + + if (hasWhere) + stmt.merge(conn.makeWhere(problems)); + stmt.merge(conn.makeOrderBy(filter.order)); let ticketsIndex = stmts.push(stmt); diff --git a/modules/ticket/back/methods/ticket/specs/filter.spec.js b/modules/ticket/back/methods/ticket/specs/filter.spec.js index 357ef2bdbb..7e5e1c1263 100644 --- a/modules/ticket/back/methods/ticket/specs/filter.spec.js +++ b/modules/ticket/back/methods/ticket/specs/filter.spec.js @@ -10,4 +10,31 @@ describe('ticket filter()', () => { expect(ticketId).toEqual(24); }); + + it('should return the tickets matching the problems on true', async() => { + let ctx = {req: {accessToken: {userId: 9}}, args: {problems: true}}; + + let filter = {}; + let result = await app.models.Ticket.filter(ctx, filter); + + expect(result.length).toEqual(4); + }); + + it('should return the tickets matching the problems on false', async() => { + let ctx = {req: {accessToken: {userId: 9}}, args: {problems: false}}; + + let filter = {}; + let result = await app.models.Ticket.filter(ctx, filter); + + expect(result.length).toEqual(20); + }); + + it('should return the tickets matching the problems on null', async() => { + let ctx = {req: {accessToken: {userId: 9}}, args: {problems: null}}; + + let filter = {}; + let result = await app.models.Ticket.filter(ctx, filter); + + expect(result.length).toEqual(24); + }); }); diff --git a/modules/ticket/front/search-panel/index.html b/modules/ticket/front/search-panel/index.html index 27b8cbe99a..ae5e152c69 100644 --- a/modules/ticket/front/search-panel/index.html +++ b/modules/ticket/front/search-panel/index.html @@ -91,12 +91,6 @@ - - + + + + + +