From e5d466b697e33513ea98b74b855f4c17877a8ba8 Mon Sep 17 00:00:00 2001 From: jorgep Date: Fri, 26 Jan 2024 08:30:43 +0100 Subject: [PATCH] fix: refs #6703 drop & replace sale refund by clone --- modules/ticket/back/methods/sale/clone.js | 28 +++++ modules/ticket/back/methods/sale/refund.js | 61 ----------- .../back/methods/sale/specs/refund.spec.js | 101 ------------------ modules/ticket/back/methods/ticket/refund.js | 2 +- modules/ticket/back/models/sale.js | 1 - 5 files changed, 29 insertions(+), 164 deletions(-) delete mode 100644 modules/ticket/back/methods/sale/refund.js delete mode 100644 modules/ticket/back/methods/sale/specs/refund.spec.js diff --git a/modules/ticket/back/methods/sale/clone.js b/modules/ticket/back/methods/sale/clone.js index f8eb4d143..8397499f7 100644 --- a/modules/ticket/back/methods/sale/clone.js +++ b/modules/ticket/back/methods/sale/clone.js @@ -1,4 +1,32 @@ module.exports = Self => { + Self.remoteMethodCtx('clone', { + description: 'Clone sales and services provided', + accessType: 'WRITE', + accepts: [ + { + arg: 'salesIds', + type: ['number'], + }, { + arg: 'servicesIds', + type: ['number'] + }, { + arg: 'withWarehouse', + type: 'boolean', + required: true + }, { + arg: 'negative', + type: 'boolean' + } + ], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/refund`, + verb: 'post' + } + }); Self.clone = async(ctx, salesIds, servicesIds, withWarehouse, negative, options) => { const models = Self.app.models; const myOptions = {}; diff --git a/modules/ticket/back/methods/sale/refund.js b/modules/ticket/back/methods/sale/refund.js deleted file mode 100644 index 19a8dfbb0..000000000 --- a/modules/ticket/back/methods/sale/refund.js +++ /dev/null @@ -1,61 +0,0 @@ -module.exports = Self => { - Self.remoteMethodCtx('refund', { - description: 'Create refund tickets with sales and services if provided', - accessType: 'WRITE', - accepts: [ - { - arg: 'salesIds', - type: ['number'], - }, - { - arg: 'servicesIds', - type: ['number'] - }, - { - arg: 'withWarehouse', - type: 'boolean', - required: true - } - ], - returns: { - type: ['object'], - root: true - }, - http: { - path: `/refund`, - verb: 'post' - } - }); - - Self.refund = async(ctx, salesIds, servicesIds, withWarehouse, options) => { - const models = Self.app.models; - const myOptions = {userId: ctx.req.accessToken.userId}; - let tx; - - if (typeof options == 'object') - Object.assign(myOptions, options); - - if (!myOptions.transaction) { - tx = await Self.beginTransaction({}); - myOptions.transaction = tx; - } - - try { - const refundsTicket = await models.Sale.clone( - ctx, - salesIds, - servicesIds, - withWarehouse, - true, - myOptions - ); - - if (tx) await tx.commit(); - - return refundsTicket; - } catch (e) { - if (tx) await tx.rollback(); - throw e; - } - }; -}; diff --git a/modules/ticket/back/methods/sale/specs/refund.spec.js b/modules/ticket/back/methods/sale/specs/refund.spec.js deleted file mode 100644 index ab5e1e281..000000000 --- a/modules/ticket/back/methods/sale/specs/refund.spec.js +++ /dev/null @@ -1,101 +0,0 @@ -const models = require('vn-loopback/server/server').models; -const LoopBackContext = require('loopback-context'); - -describe('Sale refund()', () => { - const userId = 5; - const ctx = {req: {accessToken: userId}, args: {}}; - const activeCtx = { - accessToken: {userId}, - }; - const servicesIds = [3]; - const withWarehouse = true; - - beforeEach(() => { - spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ - active: activeCtx - }); - }); - - it('should create ticket with the selected lines', async() => { - const tx = await models.Sale.beginTransaction({}); - const salesIds = [7, 8]; - - try { - const options = {transaction: tx}; - - const refundedTickets = await models.Sale.refund(ctx, salesIds, servicesIds, withWarehouse, options); - - expect(refundedTickets).toBeDefined(); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - throw e; - } - }); - - it('should create one ticket for each unique ticketFk in the sales', async() => { - const tx = await models.Sale.beginTransaction({}); - const salesIds = [6, 7]; - - try { - const options = {transaction: tx}; - const ticketsBefore = await models.Ticket.find({}, options); - - const tickets = await models.Sale.refund(ctx, salesIds, servicesIds, withWarehouse, options); - - const refundedTicket = await getTicketRefund(tickets[0].id, options); - const ticketsAfter = await models.Ticket.find({}, options); - const salesLength = refundedTicket.ticketSales().length; - const componentsLength = refundedTicket.ticketSales()[0].components().length; - - expect(refundedTicket).toBeDefined(); - expect(salesLength).toEqual(1); - expect(ticketsBefore.length).toEqual(ticketsAfter.length - 2); - expect(componentsLength).toEqual(4); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - throw e; - } - }); - - it('should create a ticket without sales', async() => { - const servicesIds = [4]; - const tx = await models.Sale.beginTransaction({}); - const options = {transaction: tx}; - try { - const tickets = await models.Sale.refund(ctx, null, servicesIds, withWarehouse, options); - const refundedTicket = await getTicketRefund(tickets[0].id, options); - - expect(refundedTicket).toBeDefined(); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - throw e; - } - }); -}); - -async function getTicketRefund(id, options) { - return models.Ticket.findOne({ - where: { - id - }, - include: [ - { - relation: 'ticketSales', - scope: { - include: { - relation: 'components' - } - } - }, - { - relation: 'ticketServices', - } - ] - }, options); -} diff --git a/modules/ticket/back/methods/ticket/refund.js b/modules/ticket/back/methods/ticket/refund.js index 4fed02260..b07995453 100644 --- a/modules/ticket/back/methods/ticket/refund.js +++ b/modules/ticket/back/methods/ticket/refund.js @@ -45,7 +45,7 @@ module.exports = Self => { const services = await models.TicketService.find(filter, myOptions); const servicesIds = services.map(service => service.id); - const refundedTickets = await models.Sale.refund(ctx, salesIds, servicesIds, withWarehouse, myOptions); + const refundedTickets = await models.Sale.clone(ctx, salesIds, servicesIds, withWarehouse, true, myOptions); if (tx) await tx.commit(); diff --git a/modules/ticket/back/models/sale.js b/modules/ticket/back/models/sale.js index dd092573d..30fb74b75 100644 --- a/modules/ticket/back/models/sale.js +++ b/modules/ticket/back/models/sale.js @@ -9,7 +9,6 @@ module.exports = Self => { require('../methods/sale/updateQuantity')(Self); require('../methods/sale/updateConcept')(Self); require('../methods/sale/recalculatePrice')(Self); - require('../methods/sale/refund')(Self); require('../methods/sale/canEdit')(Self); require('../methods/sale/usesMana')(Self); require('../methods/sale/clone')(Self);