feat: refs #7937 add warehouse and pickup agency fields to ClaimConfig model and update related logic

This commit is contained in:
Javi Gallego 2025-01-13 09:55:46 +01:00
parent 190731899e
commit 0f83549651
5 changed files with 62 additions and 43 deletions

View File

@ -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

View File

@ -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`);

View File

@ -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"
}
}

View File

@ -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();
}
}
};

View File

@ -30,6 +30,9 @@
},
"pickupdeliveryFk": {
"type": "number"
},
"warehouseFk": {
"type": "number"
}
},
"relations": {