refactor: refs #7519 Refactor claim_ratio_routine #2394

Merged
guillermo merged 14 commits from 6701-claimRatioRoutine into dev 2024-06-21 05:05:21 +00:00
1 changed files with 108 additions and 63 deletions
Showing only changes of commit 883f6f18a3 - Show all commits

View File

@ -7,57 +7,82 @@ BEGIN
* cargos que luego vamos a utilizar para calcular el recobro * cargos que luego vamos a utilizar para calcular el recobro
*/ */
guillermo marked this conversation as resolved Outdated

Eliminar los números

Eliminar los números
DECLARE vMonthToRefund INT DEFAULT 4; DECLARE vMonthToRefund INT DEFAULT 4;
DECLARE vRecoveryGreugeType INT; DECLARE vRecoveryGreugeType INT
DEFAULT (SELECT id FROM greugeType WHERE code = 'recovery');
DECLARE vManaGreugeType INT
DEFAULT (SELECT id FROM greugeType WHERE code = 'mana');
DECLARE vClaimGreugeType INT
DEFAULT (SELECT id FROM greugeType WHERE code = 'claim');
DECLARE vDebtComponentType INT
DEFAULT (SELECT id FROM component WHERE code = 'debtCollection');
SELECT id INTO vRecoveryGreugeType IF vRecoveryGreugeType IS NULL
FROM greugeType OR vManaGreugeType IS NULL
WHERE code = 'recovery'; OR vClaimGreugeType IS NULL
OR vDebtComponentType IS NULL THEN
CALL util.throw('Required variables not found');
END IF;
-- Reclamaciones demasiado sensibles -- Reclamaciones demasiado sensibles
INSERT INTO greuge(shipped, clientFk, description, INSERT INTO greuge(
amount, greugeTypeFk, ticketFk) shipped,
SELECT c.ticketCreated clientFk,
, c.clientFk `description`,
, concat('Claim ', c.id,' : ', s.concept) amount,
,round( -1 * ((c.responsibility -1)/4) * s.quantity * greugeTypeFk,
s.price * (100 - s.discount) / 100, 2) ticketFk
, 4 )
, s.ticketFk
FROM sale s
JOIN claimEnd ce ON ce.saleFk = s.id
JOIN claim c ON c.id = ce.claimFk
WHERE ce.claimDestinationFk NOT IN (1,5)
AND NOT ce.isGreuge
AND c.claimStateFk = 3;
-- Reclamaciones que pasan a Maná
INSERT INTO greuge(shipped,
clientFk,
`description`,
amount,
greugeTypeFk,
ticketFk)
SELECT c.ticketCreated, SELECT c.ticketCreated,
c.clientFk, c.clientFk,
concat('Claim_mana ',c.id,' : ', s.concept), CONCAT('Claim ', c.id,' : ', s.concept),
guillermo marked this conversation as resolved
Review

Se utiliza varias veces, mirar hacer una columna virtual en la tabla claim

Se utiliza varias veces, mirar hacer una columna virtual en la tabla claim
Review

Se utiliza únicamente solo 2 veces en el procedimiento, no creo que sea justificación para crear una columna virtual.

De todas formas se puede crear redmine para valorarlo.

Se utiliza únicamente solo 2 veces en el procedimiento, no creo que sea justificación para crear una columna virtual. De todas formas se puede crear redmine para valorarlo.
round( ((c.responsibility -1)/4) * s.quantity * s.price * (100 - s.discount) / 100, 2), ROUND(-1 * ((c.responsibility - 1) / 4) * s.quantity *
3, s.price * (100 - s.discount) / 100, 2),
vClaimGreugeType,
s.ticketFk s.ticketFk
FROM sale s FROM sale s
JOIN claimEnd ce ON ce.saleFk = s.id JOIN claimEnd ce ON ce.saleFk = s.id
JOIN claimDestination cd ON cd.id = ce.claimDestinationFk
JOIN claim c ON c.id = ce.claimFk JOIN claim c ON c.id = ce.claimFk
WHERE ce.claimDestinationFk NOT IN (1,5) JOIN claimState cs ON cs.id = c.claimStateFk
WHERE ce.claimDestinationFk NOT IN ('Bueno', 'Corregido')
AND NOT ce.isGreuge AND NOT ce.isGreuge
AND c.claimStateFk = 3 AND cs.code = 'resolved';
-- Reclamaciones que pasan a Maná
INSERT INTO greuge(
shipped,
clientFk,
`description`,
amount,
greugeTypeFk,
ticketFk
)
SELECT c.ticketCreated,
c.clientFk,
CONCAT('Claim_mana ', c.id,' : ', s.concept),
ROUND( ((c.responsibility -1)/4) * s.quantity * s.price * (100 - s.discount) / 100, 2),
vManaGreugeType,
s.ticketFk
FROM sale s
JOIN claimEnd ce ON ce.saleFk = s.id
JOIN claimDestination cd ON cd.id = ce.claimDestinationFk
JOIN claim c ON c.id = ce.claimFk
JOIN claimState cs ON cs.id = c.claimStateFk
WHERE cd.description NOT IN ('Bueno', 'Corregido')
AND NOT ce.isGreuge
AND cs.code = 'resolved'
AND c.isChargedToMana; AND c.isChargedToMana;
-- Marcamos para no repetir -- Marcamos para no repetir
UPDATE claimEnd ce UPDATE claimEnd ce
JOIN claimDestination cd ON cd.id = ce.claimDestinationFk
JOIN claim c ON c.id = ce.claimFk JOIN claim c ON c.id = ce.claimFk
JOIN claimState cs ON cs.id = c.claimStateFk
SET c.isChargedToMana = TRUE SET c.isChargedToMana = TRUE
WHERE ce.claimDestinationFk NOT IN (1,5) WHERE cd.description NOT IN ('Bueno', 'Corregido')
AND NOT ce.isGreuge AND NOT ce.isGreuge
AND c.claimStateFk = 3; AND cs.code = 'resolved';
-- Recobros -- Recobros
CREATE OR REPLACE TEMPORARY TABLE tTicketList CREATE OR REPLACE TEMPORARY TABLE tTicketList
@ -69,23 +94,26 @@ BEGIN
JOIN ticketLastState ts ON ts.ticketFk = t.id JOIN ticketLastState ts ON ts.ticketFk = t.id
JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk
JOIN state st ON st.id = tt.stateFk JOIN state st ON st.id = tt.stateFk
WHERE sc.componentFk = 17 JOIN alertLevel al ON al.id = st.alertLevel
AND sc.isGreuge = 0 WHERE sc.componentFk = vDebtComponentType
AND NOT sc.isGreuge
AND t.shipped >= '2016-10-01' AND t.shipped >= '2016-10-01'
guillermo marked this conversation as resolved
Review

Eliminar y pasar a table config

Eliminar y pasar a table config
AND t.shipped < util.VN_CURDATE() AND t.shipped < util.VN_CURDATE()
AND st.alertLevel >= 3; AND al.code = 'DELIVERED';
DELETE g.* DELETE g.*
guillermo marked this conversation as resolved Outdated

DELETE g no es necesario g.*

DELETE g no es necesario g.*

Sí que lo es, si no da error.

Sí que lo es, si no da error.
FROM greuge g FROM greuge g
JOIN tTicketList t ON t.ticketFk = g.ticketFk JOIN tTicketList t ON t.ticketFk = g.ticketFk
WHERE g.greugeTypeFk = vRecoveryGreugeType; WHERE g.greugeTypeFk = vRecoveryGreugeType;
INSERT INTO greuge(clientFk, INSERT INTO greuge(
`description`, clientFk,
amount, `description`,
shipped, amount,
greugeTypeFk, shipped,
ticketFk) greugeTypeFk,
ticketFk
)
SELECT t.clientFk, SELECT t.clientFk,
'Recobro', 'Recobro',
- ROUND(SUM(sc.value * s.quantity), 2) dif, - ROUND(SUM(sc.value * s.quantity), 2) dif,
@ -96,51 +124,68 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk JOIN ticket t ON t.id = s.ticketFk
JOIN tTicketList tl ON tl.ticketFk = t.id JOIN tTicketList tl ON tl.ticketFk = t.id
JOIN saleComponent sc ON sc.saleFk = s.id JOIN saleComponent sc ON sc.saleFk = s.id
AND sc.componentFk = 17 AND sc.componentFk = vDebtComponentType
GROUP BY t.id GROUP BY t.id
HAVING ABS(dif) > 1; HAVING ABS(dif) > 1;
UPDATE saleComponent sc UPDATE saleComponent sc
JOIN sale s ON s.id = sc.saleFk JOIN sale s ON s.id = sc.saleFk
JOIN tTicketList tl ON tl.ticketFk = s.ticketFk JOIN tTicketList tl ON tl.ticketFk = s.ticketFk
SET sc.isGreuge = TRUE SET sc.isGreuge = TRUE
WHERE sc.componentFk = 17; WHERE sc.componentFk = vDebtComponentType;
/* /*
* Recalculamos la ratio de las reclamaciones, que luego * Recalculamos la ratio de las reclamaciones, que luego
* se va a utilizar en el recobro * se va a utilizar en el recobro
*/ */
REPLACE claimRatio(clientFk, yearSale, claimAmount, claimingRate, priceIncreasing) REPLACE claimRatio(
SELECT id, 0, 0, 0, 0 clientFk,
FROM client; yearSale,
claimAmount,
claimingRate,
guillermo marked this conversation as resolved
Review

12

12
Review

Entiendo que se refiere a los meses que tiene un año, en ese caso hablamos que se permitia.

Entiendo que se refiere a los meses que tiene un año, en ese caso hablamos que se permitia.
priceIncreasing
)
SELECT id, 0, 0, 0, 0 FROM client;
REPLACE claimRatio(clientFk, yearSale, claimAmount, claimingRate, priceIncreasing) REPLACE claimRatio(
SELECT cac.clientFk, 12 * cac.invoiced, totalClaims, clientFk,
ROUND(totalClaims / (12 * cac.invoiced), 4), 0 yearSale,
claimAmount,
claimingRate,
priceIncreasing
)
SELECT cac.clientFk,
12 * cac.invoiced,
totalClaims,
ROUND(totalClaims / (12 * cac.invoiced), 4),
0
FROM bs.clientAnnualConsumption cac FROM bs.clientAnnualConsumption cac
LEFT JOIN( LEFT JOIN (
SELECT c.clientFk, round(sum(-1 * ((c.responsibility -1)/4) * SELECT c.clientFk,
s.quantity * s.price * (100 - s.discount) / 100)) ROUND(SUM(-1 * ((c.responsibility - 1) / 4) *
totalClaims s.quantity * s.price * (100 - s.discount)
/ 100)) totalClaims
FROM sale s FROM sale s
JOIN claimEnd ce ON ce.saleFk = s.id JOIN claimEnd ce ON ce.saleFk = s.id
JOIN claimDestination cd ON cd.id = ce.claimDestinationFk
JOIN claim c ON c.id = ce.claimFk JOIN claim c ON c.id = ce.claimFk
WHERE ce.claimDestinationFk NOT IN (1,5) JOIN claimState cs ON cs.id = c.claimStateFk
AND c.claimStateFk = 3 WHERE ce.claimDestinationFk NOT IN ('Bueno', 'Corregido')
AND cs.code = 'resolved'
AND c.ticketCreated >= util.VN_CURDATE() - INTERVAL 1 YEAR AND c.ticketCreated >= util.VN_CURDATE() - INTERVAL 1 YEAR
GROUP BY c.clientFk GROUP BY c.clientFk
guillermo marked this conversation as resolved Outdated

12

12

Entiendo que se refiere a los meses que tiene un año, en ese caso hablamos que se permitia.

Entiendo que se refiere a los meses que tiene un año, en ese caso hablamos que se permitia.
) claims ON claims.clientFk = fm.Id_Cliente; ) sub ON sub.clientFk = cac.clientFk;
-- Calculamos el porcentaje del recobro para añadirlo al precio de venta -- Calculamos el porcentaje del recobro para añadirlo al precio de venta
UPDATE claimRatio cr UPDATE claimRatio cr
JOIN ( JOIN (
SELECT clientFk, IFNULL(SUM(amount), 0) AS Greuge SELECT clientFk, IFNULL(SUM(amount), 0) greuge
FROM greuge FROM greuge
WHERE shipped <= util.VN_CURDATE() WHERE shipped <= util.VN_CURDATE()
GROUP BY clientFk GROUP BY clientFk
) g ON g.clientFk = cr.clientFk ) sub ON subg.clientFk = cr.clientFk
SET cr.priceIncreasing = GREATEST(0, round(IFNULL(Greuge, 0) / SET cr.priceIncreasing = GREATEST(0, ROUND(IFNULL(sub.greuge, 0) /
(IFNULL(Consumo, 0) * vMonthToRefund / 12 ), 3)); (IFNULL(cr.yearSale, 0) * vMonthToRefund / 12 ), 3));
-- Protección neonatos -- Protección neonatos
UPDATE claimRatio cr UPDATE claimRatio cr