From 0f83549651ede433e4a66274301c484244717b7c Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 13 Jan 2025 09:55:46 +0100 Subject: [PATCH] feat: refs #7937 add warehouse and pickup agency fields to ClaimConfig model and update related logic --- db/dump/fixtures.before.sql | 4 +- .../11401-azureMoss/00-claimConfig.sql | 27 +++++--- loopback/locale/en.json | 2 +- .../importToNewRefundTicket.js | 69 +++++++++++-------- modules/claim/back/models/claim-config.json | 3 + 5 files changed, 62 insertions(+), 43 deletions(-) diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index ff896b84d2..5d37c0ac01 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -1940,9 +1940,9 @@ INSERT INTO `vn`.`claimEnd`(`id`, `saleFk`, `claimFk`, `workerFk`, `claimDestina (1, 31, 4, 21, 2), (2, 32, 3, 21, 3); -INSERT INTO `vn`.`claimConfig`(`id`, `maxResponsibility`, `monthsToRefund`, `minShipped`) +INSERT INTO `vn`.`claimConfig`(`id`, `maxResponsibility`, `monthsToRefund`, `minShipped`, `pickupAgencyFk`, `pickupDeliveryFk`, `warehouseFk`) VALUES - (1, 5, 4, '2016-10-01'); + (1, 5, 4, '2016-10-01', 1, 8, 4); INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRate`, `priceIncreasing`, `packingRate`) VALUES diff --git a/db/versions/11401-azureMoss/00-claimConfig.sql b/db/versions/11401-azureMoss/00-claimConfig.sql index d50fa363d4..ccd9653a92 100644 --- a/db/versions/11401-azureMoss/00-claimConfig.sql +++ b/db/versions/11401-azureMoss/00-claimConfig.sql @@ -1,13 +1,20 @@ ALTER TABLE `vn`.`claimConfig` - ADD COLUMN `pickupAgencyFk` INT(11) DEFAULT 6 - COMMENT 'Agencia utilizada para las recogidas mediante agencia', - ADD COLUMN `pickupDeliveryFk` INT(11) DEFAULT 847 - COMMENT 'Agencia utilizada para las recogidas mediante reparto', + ADD COLUMN `pickupAgencyFk` INT(11) + COMMENT 'Agencia utilizada para las recogidas mediante agencia', + ADD COLUMN `pickupDeliveryFk` INT(11) + COMMENT 'Agencia utilizada para las recogidas mediante reparto', + ADD COLUMN `warehouseFk` smallint(6) unsigned + COMMENT 'Almacén usado para los tickets de reclamaciones', - ADD CONSTRAINT `fk_claimConfig_pickupAgencyFk` - FOREIGN KEY (`pickupAgencyFk`) - REFERENCES `agencyMode` (`id`), + ADD CONSTRAINT `fk_claimConfig_pickupAgencyFk` + FOREIGN KEY (`pickupAgencyFk`) + REFERENCES `agencyMode` (`id`), + + ADD CONSTRAINT `fk_claimConfig_pickupdeliveryFk` + FOREIGN KEY (`pickupdeliveryFk`) + REFERENCES `agencyMode` (`id`), + + ADD CONSTRAINT `fk_claimConfig_warehouseFk` + FOREIGN KEY (`warehouseFk`) + REFERENCES `warehouse` (`id`); - ADD CONSTRAINT `fk_claimConfig_pickupdeliveryFk` - FOREIGN KEY (`pickupdeliveryFk`) - REFERENCES `agencyMode` (`id`); diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 80da13ae59..2e25408c62 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -251,4 +251,4 @@ "Price cannot be blank": "Price cannot be blank", "There are tickets to be invoiced": "There are tickets to be invoiced", "The address of the customer must have information about Incoterms and Customs Agent": "The address of the customer must have information about Incoterms and Customs Agent" -} \ No newline at end of file +} diff --git a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js index b220e06c8c..f6cd15607f 100644 --- a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js +++ b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js @@ -78,19 +78,17 @@ module.exports = Self => { where: {id: userId} }, myOptions); - const obsevationType = await models.ObservationType.findOne({ + const observationSalesPerson = await models.ObservationType.findOne({ where: {code: 'salesPerson'} }, myOptions); const claim = await models.Claim.findOne(filter, myOptions); const today = Date.vnNew(); - let shipped; - let landed; let warehouseFk; let agencyModeFk; - let zoneFk; let nickname; let state; + let discountValue = null; if (claim.pickup === null) { state = await models.State.findOne({ @@ -99,49 +97,47 @@ module.exports = Self => { const agencyMode = await models.AgencyMode.findOne({ where: {code: 'refund'} }, myOptions); - const zone = await models.Zone.findOne({ - where: {agencyModeFk: agencyMode.id} - }, myOptions); - shipped = today; - landed = today; warehouseFk = claim.ticket().warehouseFk; agencyModeFk = agencyMode.id; - zoneFk = zone.id; nickname = `Abono del: ${claim.ticketFk}`; } else { + const claimConfig = await models.ClaimConfig.findOne(); + + discountValue = 100; state = await models.State.findOne({ where: {code: 'WAITING_FOR_PICKUP'} }, myOptions); - const warehouse = await models.Warehouse.findOne({ - where: {code: 'rcl'} - }, myOptions); - warehouseFk = warehouse.id; + nickname = `Recogida pendiente del: ${claim.ticketFk}`; - zoneFk = zone.id; - const claimConfig = await models.claimConfig.findOne(); - if (claim.pickup == 'delivery') { - shipped = today; - landed = today; + warehouseFk = claimConfig.warehouseFk; + if (claim.pickup == 'delivery') agencyModeFk = claimConfig.pickupDeliveryFk; - } else { - shipped = null; - landed = null; + else agencyModeFk = claimConfig.pickupAgencyFk; - } } const newRefundTicket = await models.Ticket.create({ clientFk: claim.ticket().clientFk, - shipped, - landed, + shipped: await getNextShipped(today, claim.ticket().addressFk, agencyModeFk, warehouseFk, myOptions), + landed: null, nickname, warehouseFk, companyFk: claim.ticket().companyFk, addressFk: claim.ticket().addressFk, agencyModeFk, - zoneFk + zoneFk: null }, myOptions); + if (claim.pickup == 'pickup') { + const observationDelivery = + await models.ObservationType.findOne({where: {code: 'delivery'}}, myOptions); + + await saveObservation({ + description: `recoger reclamación: ${claim.id}`, + ticketFk: newRefundTicket.id, + observationTypeFk: observationDelivery.id + }, myOptions); + } await models.TicketRefund.create({ refundTicketFk: newRefundTicket.id, originalTicketFk: claim.ticket().id @@ -150,7 +146,7 @@ module.exports = Self => { await saveObservation({ description: `Reclama ticket: ${claim.ticketFk}`, ticketFk: newRefundTicket.id, - observationTypeFk: obsevationType.id + observationTypeFk: observationSalesPerson.id }, myOptions); await models.Ticket.state(ctx, { @@ -160,7 +156,7 @@ module.exports = Self => { }, myOptions); const salesToRefund = await models.ClaimBeginning.find(salesFilter, myOptions); - const createdSales = await addSalesToTicket(salesToRefund, newRefundTicket.id, myOptions); + const createdSales = await addSalesToTicket(salesToRefund, newRefundTicket.id, discountValue, myOptions); await insertIntoClaimEnd(createdSales, id, worker.id, myOptions); await Self.rawSql('CALL vn.ticketCalculateClon(?, ?)', [ @@ -176,7 +172,7 @@ module.exports = Self => { } }; - async function addSalesToTicket(salesToRefund, ticketId, options) { + async function addSalesToTicket(salesToRefund, ticketId, discountValue, options) { let formatedSales = []; salesToRefund.forEach(sale => { let formatedSale = { @@ -185,7 +181,7 @@ module.exports = Self => { concept: sale.sale().concept, quantity: -Math.abs(sale.quantity), price: sale.sale().price, - discount: sale.sale().discount, + discount: discountValue ?? sale.sale().discount, reserved: sale.sale().reserved, isPicked: sale.sale().isPicked, created: sale.sale().created @@ -218,4 +214,17 @@ module.exports = Self => { observation.description ], options); } + + async function getNextShipped(vLanded, vAddressFk, vAgencyModeFk, warehouseFk, options) { + await Self.rawSql( + 'CALL vn.zone_getShipped(?, ?, ?, TRUE)', [vLanded, vAddressFk, vAgencyModeFk], options); + + try { + const [resultSet] = await Self.rawSql( + 'SELECT shipped FROM tmp.zoneGetShipped WHERE warehouseFk = ?', [warehouseFk], options); + return resultSet.shipped; + } catch (error) { + return Date.vnNew(); + } + } }; diff --git a/modules/claim/back/models/claim-config.json b/modules/claim/back/models/claim-config.json index 7e5aac1ce4..858070ae49 100644 --- a/modules/claim/back/models/claim-config.json +++ b/modules/claim/back/models/claim-config.json @@ -30,6 +30,9 @@ }, "pickupdeliveryFk": { "type": "number" + }, + "warehouseFk": { + "type": "number" } }, "relations": {