From 0a5e8e1902c8ec328c5bb9740863f9b490797a10 Mon Sep 17 00:00:00 2001 From: pablone Date: Tue, 14 Nov 2023 14:49:54 +0100 Subject: [PATCH 1/4] refactor(ticketTracking.create): refs #6366 unify Ticket.state ticketTracking.create i vn.ticket_setState --- loopback/locale/es.json | 1 + .../importToNewRefundTicket.js | 2 +- .../ticket/back/methods/ticket/saveSign.js | 14 +++++++++- .../back/methods/ticket/specs/state.spec.js | 23 +++++++--------- modules/ticket/back/methods/ticket/state.js | 27 ++++++++++--------- modules/zone/back/methods/zone/deleteZone.js | 2 +- 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/loopback/locale/es.json b/loopback/locale/es.json index b427204587..c9e1f1ff22 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -296,6 +296,7 @@ "Invalid NIF for VIES": "Invalid NIF for VIES", "Ticket does not exist": "Este ticket no existe", "Ticket is already signed": "Este ticket ya ha sido firmado", + "The DELIVERED state does not exist": "El estado DELIVERED no existe", "Authentication failed": "Autenticación fallida", "You can't use the same password": "No puedes usar la misma contraseña", "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", diff --git a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js index be3baccd73..faa143a452 100644 --- a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js +++ b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js @@ -120,7 +120,7 @@ module.exports = Self => { observationTypeFk: obsevationType.id }, myOptions); - await models.TicketTracking.create({ + await models.Ticket.state(ctx, { ticketFk: newRefundTicket.id, stateFk: state.id, workerFk: worker.id diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js index 9888328e78..9f953cb1a6 100644 --- a/modules/ticket/back/methods/ticket/saveSign.js +++ b/modules/ticket/back/methods/ticket/saveSign.js @@ -130,7 +130,19 @@ module.exports = Self => { await models.TicketDms.create({ticketFk: ticketId, dmsFk: dms[0].id}, myOptions); const ticket = await models.Ticket.findById(ticketId, null, myOptions); await ticket.updateAttribute('isSigned', true, myOptions); - await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, 'DELIVERED'], myOptions); + + const deliveryState = await models.State.find({ + where: { + code: 'DELIVERED' + } + }, options); + if (!deliveryState) + throw new UserError('The DELIVERED state does not exist'); + + await models.Ticket.state(ctx, { + ticketFk: ticketId, + stateFk: deliveryState.id + }, myOptions); } if (tx) await tx.commit(); diff --git a/modules/ticket/back/methods/ticket/specs/state.spec.js b/modules/ticket/back/methods/ticket/specs/state.spec.js index 9b5e801653..50fecd4a57 100644 --- a/modules/ticket/back/methods/ticket/specs/state.spec.js +++ b/modules/ticket/back/methods/ticket/specs/state.spec.js @@ -45,9 +45,8 @@ describe('ticket state()', () => { const options = {transaction: tx}; activeCtx.accessToken.userId = salesPersonId; - const params = {ticketFk: 2, stateFk: 3}; - await models.Ticket.state(ctx, params, options); + await models.Ticket.state(ctx, {ticketFk: 2, stateFk: 3}, options); await tx.rollback(); } catch (e) { @@ -67,9 +66,8 @@ describe('ticket state()', () => { const options = {transaction: tx}; activeCtx.accessToken.userId = employeeId; - const params = {ticketFk: 11, stateFk: 13}; - await models.Ticket.state(ctx, params, options); + await models.Ticket.state(ctx, {ticketFk: 11, stateFk: 13}, options); await tx.rollback(); } catch (e) { @@ -94,10 +92,10 @@ describe('ticket state()', () => { const ticketTracking = await models.Ticket.state(ctx, params, options); - expect(ticketTracking.__data.ticketFk).toBe(params.ticketFk); - expect(ticketTracking.__data.stateFk).toBe(params.stateFk); - expect(ticketTracking.__data.workerFk).toBe(49); - expect(ticketTracking.__data.id).toBeDefined(); + expect(ticketTracking.ticketFk).toBe(params.ticketFk); + expect(ticketTracking.stateFk).toBe(params.stateFk); + expect(ticketTracking.workerFk).toBe(49); + expect(ticketTracking.id).toBeDefined(); await tx.rollback(); } catch (e) { @@ -119,11 +117,10 @@ describe('ticket state()', () => { const params = {ticketFk: ticket.id, stateFk: assignedState.id, workerFk: 1}; const res = await models.Ticket.state(ctx, params, options); - expect(res.__data.ticketFk).toBe(params.ticketFk); - expect(res.__data.stateFk).toBe(params.stateFk); - expect(res.__data.workerFk).toBe(params.workerFk); - expect(res.__data.workerFk).toBe(1); - expect(res.__data.id).toBeDefined(); + expect(res.ticketFk).toBe(params.ticketFk); + expect(res.stateFk).toBe(params.stateFk); + expect(res.workerFk).toBe(params.workerFk); + expect(res.id).toBeDefined(); await tx.rollback(); } catch (e) { diff --git a/modules/ticket/back/methods/ticket/state.js b/modules/ticket/back/methods/ticket/state.js index 01bfbba20c..5282597eb6 100644 --- a/modules/ticket/back/methods/ticket/state.js +++ b/modules/ticket/back/methods/ticket/state.js @@ -37,18 +37,14 @@ module.exports = Self => { } try { - const userId = ctx.req.accessToken.userId; + const {userId} = ctx.req.accessToken; if (!params.stateFk && !params.code) throw new UserError('State cannot be blank'); - if (params.code) { - const state = await models.State.findOne({ - where: {code: params.code}, - fields: ['id'] - }, myOptions); - - params.stateFk = state.id; + if (params.stateFk) { + const {code} = await models.State.findById(params.stateFk, {fields: ['code']}, myOptions); + params.code = code; } if (!params.workerFk) { @@ -68,12 +64,19 @@ module.exports = Self => { oldStateAllowed = await models.State.isEditable(ctx, ticketState.stateFk, myOptions); const newStateAllowed = await models.State.isEditable(ctx, params.stateFk, myOptions); - const isAllowed = (!ticketState || oldStateAllowed == true) && newStateAllowed == true; - - if (!isAllowed) + if (!((!ticketState || oldStateAllowed == true) && newStateAllowed == true)) throw new UserError(`You don't have enough privileges`, 'ACCESS_DENIED'); - const ticketTracking = await models.TicketTracking.create(params, myOptions); + await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [params.ticketFk, params.code], myOptions); + + const ticketTracking = await models.TicketTracking.findOne({ + where: {ticketFk: params.ticketFk}, + order: 'id DESC', + limit: 1 + }, myOptions); + + if (params.workerFk) + await ticketTracking.updateAttribute('workerFk', params.workerFk, myOptions); if (tx) await tx.commit(); diff --git a/modules/zone/back/methods/zone/deleteZone.js b/modules/zone/back/methods/zone/deleteZone.js index 13d45428ca..380b5fcfdf 100644 --- a/modules/zone/back/methods/zone/deleteZone.js +++ b/modules/zone/back/methods/zone/deleteZone.js @@ -61,7 +61,7 @@ module.exports = Self => { for (ticket of ticketList) { if (ticket.ticketState().alertLevel == 0) { - promises.push(models.TicketTracking.create({ + promises.push(models.Ticket.state(ctx, { ticketFk: ticket.id, stateFk: fixingState.id, workerFk: worker.id -- 2.40.1 From ccf5387e045c2f1deae0b7b8c83af29e175954e8 Mon Sep 17 00:00:00 2001 From: pablone Date: Fri, 29 Dec 2023 12:44:24 +0100 Subject: [PATCH 2/4] refactor(state): refs #6366 unifyTicketChangeState --- .../methods/ticket-tracking/setDelivered.js | 2 +- modules/ticket/back/methods/ticket/state.js | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/ticket/back/methods/ticket-tracking/setDelivered.js b/modules/ticket/back/methods/ticket-tracking/setDelivered.js index d3cdb192f1..eded63d114 100644 --- a/modules/ticket/back/methods/ticket-tracking/setDelivered.js +++ b/modules/ticket/back/methods/ticket-tracking/setDelivered.js @@ -49,7 +49,7 @@ module.exports = Self => { for (const id of ticketIds) { const promise = await models.Ticket.state(ctx, { stateFk: state.id, - workerFk: worker.id, + userFk: worker.id, ticketFk: id }, myOptions); promises.push(promise); diff --git a/modules/ticket/back/methods/ticket/state.js b/modules/ticket/back/methods/ticket/state.js index 3d9ca60e60..3b22fac3fc 100644 --- a/modules/ticket/back/methods/ticket/state.js +++ b/modules/ticket/back/methods/ticket/state.js @@ -7,7 +7,6 @@ module.exports = Self => { accepts: [ { arg: 'data', - description: 'Model instance data', type: 'Object', required: true, http: {source: 'body'} @@ -37,21 +36,21 @@ module.exports = Self => { } try { - const {userId} = ctx.req.accessToken; - if (!params.stateFk && !params.code) throw new UserError('State cannot be blank'); if (params.stateFk) { const {code} = await models.State.findById(params.stateFk, {fields: ['code']}, myOptions); params.code = code; + } else { + const {id} = await models.State.findOne({where: {code: params.code}}, myOptions); + params.stateFk = id; } if (!params.userFk) { const worker = await models.Worker.findOne({ - where: {id: userId} + where: {id: ctx.req.accessToken.userId} }, myOptions); - params.userFk = worker.id; } @@ -59,9 +58,10 @@ module.exports = Self => { fields: ['stateFk'] }, myOptions); - let oldStateAllowed; - if (ticketState) - oldStateAllowed = await models.State.isEditable(ctx, ticketState.stateFk, myOptions); + const oldStateAllowed = ticketState ? + await models.State.isEditable(ctx, ticketState.stateFk, myOptions) : + false; + const newStateAllowed = await models.State.isEditable(ctx, params.stateFk, myOptions); if (!((!ticketState || oldStateAllowed == true) && newStateAllowed == true)) @@ -75,8 +75,7 @@ module.exports = Self => { limit: 1 }, myOptions); - if (params.workerFk) - await ticketTracking.updateAttribute('workerFk', params.workerFk, myOptions); + await ticketTracking.updateAttribute('userFk', params.userFk, myOptions); if (tx) await tx.commit(); -- 2.40.1 From e9773b3885094080e432f0263f023a140fe2dd80 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 4 Jan 2024 18:56:31 +0100 Subject: [PATCH 3/4] refactor(state): refs #6366 simplify if condition --- modules/ticket/back/methods/ticket/saveSign.js | 2 -- modules/ticket/back/methods/ticket/state.js | 7 ++----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js index 9f953cb1a6..e062e6f845 100644 --- a/modules/ticket/back/methods/ticket/saveSign.js +++ b/modules/ticket/back/methods/ticket/saveSign.js @@ -136,8 +136,6 @@ module.exports = Self => { code: 'DELIVERED' } }, options); - if (!deliveryState) - throw new UserError('The DELIVERED state does not exist'); await models.Ticket.state(ctx, { ticketFk: ticketId, diff --git a/modules/ticket/back/methods/ticket/state.js b/modules/ticket/back/methods/ticket/state.js index 3b22fac3fc..fea9475f8c 100644 --- a/modules/ticket/back/methods/ticket/state.js +++ b/modules/ticket/back/methods/ticket/state.js @@ -58,13 +58,10 @@ module.exports = Self => { fields: ['stateFk'] }, myOptions); - const oldStateAllowed = ticketState ? - await models.State.isEditable(ctx, ticketState.stateFk, myOptions) : - false; - + const oldStateAllowed = ticketState && await models.State.isEditable(ctx, ticketState.stateFk, myOptions); const newStateAllowed = await models.State.isEditable(ctx, params.stateFk, myOptions); - if (!((!ticketState || oldStateAllowed == true) && newStateAllowed == true)) + if ((ticketState && !oldStateAllowed) || !newStateAllowed) throw new UserError(`You don't have enough privileges`, 'ACCESS_DENIED'); await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [params.ticketFk, params.code], myOptions); -- 2.40.1 From f4062ab47b58702c42dab08fd990fd8551ada9cf Mon Sep 17 00:00:00 2001 From: pablone Date: Mon, 8 Jan 2024 09:13:01 +0100 Subject: [PATCH 4/4] remove(traduction): refs #6366 remove unused traduction --- loopback/locale/es.json | 1 - 1 file changed, 1 deletion(-) diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 89d12d8db9..e2b90983b0 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -296,7 +296,6 @@ "Invalid NIF for VIES": "Invalid NIF for VIES", "Ticket does not exist": "Este ticket no existe", "Ticket is already signed": "Este ticket ya ha sido firmado", - "The DELIVERED state does not exist": "El estado DELIVERED no existe", "Authentication failed": "Autenticación fallida", "You can't use the same password": "No puedes usar la misma contraseña", "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", -- 2.40.1