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
*/
guillermo marked this conversation as resolved Outdated

Eliminar los números

Eliminar los números
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
FROM greugeType
WHERE code = 'recovery';
IF vRecoveryGreugeType IS NULL
OR vManaGreugeType IS NULL
OR vClaimGreugeType IS NULL
OR vDebtComponentType IS NULL THEN
CALL util.throw('Required variables not found');
END IF;
-- Reclamaciones demasiado sensibles
INSERT INTO greuge(shipped, clientFk, description,
amount, greugeTypeFk, ticketFk)
SELECT c.ticketCreated
, c.clientFk
, concat('Claim ', c.id,' : ', s.concept)
,round( -1 * ((c.responsibility -1)/4) * s.quantity *
s.price * (100 - s.discount) / 100, 2)
, 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)
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),
3,
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(-1 * ((c.responsibility - 1) / 4) * s.quantity *
s.price * (100 - s.discount) / 100, 2),
vClaimGreugeType,
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
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 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;
-- Marcamos para no repetir
UPDATE claimEnd ce
JOIN claimDestination cd ON cd.id = ce.claimDestinationFk
JOIN claim c ON c.id = ce.claimFk
JOIN claimState cs ON cs.id = c.claimStateFk
SET c.isChargedToMana = TRUE
WHERE ce.claimDestinationFk NOT IN (1,5)
WHERE cd.description NOT IN ('Bueno', 'Corregido')
AND NOT ce.isGreuge
AND c.claimStateFk = 3;
AND cs.code = 'resolved';
-- Recobros
CREATE OR REPLACE TEMPORARY TABLE tTicketList
@ -69,23 +94,26 @@ BEGIN
JOIN ticketLastState ts ON ts.ticketFk = t.id
JOIN ticketTracking tt ON tt.id = ts.ticketTrackingFk
JOIN state st ON st.id = tt.stateFk
WHERE sc.componentFk = 17
AND sc.isGreuge = 0
JOIN alertLevel al ON al.id = st.alertLevel
WHERE sc.componentFk = vDebtComponentType
AND NOT sc.isGreuge
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 st.alertLevel >= 3;
AND al.code = 'DELIVERED';
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
JOIN tTicketList t ON t.ticketFk = g.ticketFk
WHERE g.greugeTypeFk = vRecoveryGreugeType;
INSERT INTO greuge(clientFk,
`description`,
amount,
shipped,
greugeTypeFk,
ticketFk)
INSERT INTO greuge(
clientFk,
`description`,
amount,
shipped,
greugeTypeFk,
ticketFk
)
SELECT t.clientFk,
'Recobro',
- ROUND(SUM(sc.value * s.quantity), 2) dif,
@ -96,51 +124,68 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk
JOIN tTicketList tl ON tl.ticketFk = t.id
JOIN saleComponent sc ON sc.saleFk = s.id
AND sc.componentFk = 17
AND sc.componentFk = vDebtComponentType
GROUP BY t.id
HAVING ABS(dif) > 1;
HAVING ABS(dif) > 1;
UPDATE saleComponent sc
JOIN sale s ON s.id = sc.saleFk
JOIN tTicketList tl ON tl.ticketFk = s.ticketFk
SET sc.isGreuge = TRUE
WHERE sc.componentFk = 17;
WHERE sc.componentFk = vDebtComponentType;
/*
* Recalculamos la ratio de las reclamaciones, que luego
* se va a utilizar en el recobro
*/
REPLACE claimRatio(clientFk, yearSale, claimAmount, claimingRate, priceIncreasing)
SELECT id, 0, 0, 0, 0
FROM client;
REPLACE claimRatio(
clientFk,
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)
SELECT cac.clientFk, 12 * cac.invoiced, totalClaims,
ROUND(totalClaims / (12 * cac.invoiced), 4), 0
REPLACE claimRatio(
clientFk,
yearSale,
claimAmount,
claimingRate,
priceIncreasing
)
SELECT cac.clientFk,
12 * cac.invoiced,
totalClaims,
ROUND(totalClaims / (12 * cac.invoiced), 4),
0
FROM bs.clientAnnualConsumption cac
LEFT JOIN(
SELECT c.clientFk, round(sum(-1 * ((c.responsibility -1)/4) *
s.quantity * s.price * (100 - s.discount) / 100))
totalClaims
LEFT JOIN (
SELECT c.clientFk,
ROUND(SUM(-1 * ((c.responsibility - 1) / 4) *
s.quantity * s.price * (100 - s.discount)
/ 100)) totalClaims
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
WHERE ce.claimDestinationFk NOT IN (1,5)
AND c.claimStateFk = 3
JOIN claimState cs ON cs.id = c.claimStateFk
WHERE ce.claimDestinationFk NOT IN ('Bueno', 'Corregido')
AND cs.code = 'resolved'
AND c.ticketCreated >= util.VN_CURDATE() - INTERVAL 1 YEAR
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
UPDATE claimRatio cr
JOIN (
SELECT clientFk, IFNULL(SUM(amount), 0) AS Greuge
SELECT clientFk, IFNULL(SUM(amount), 0) greuge
FROM greuge
WHERE shipped <= util.VN_CURDATE()
GROUP BY clientFk
) g ON g.clientFk = cr.clientFk
SET cr.priceIncreasing = GREATEST(0, round(IFNULL(Greuge, 0) /
(IFNULL(Consumo, 0) * vMonthToRefund / 12 ), 3));
) sub ON subg.clientFk = cr.clientFk
SET cr.priceIncreasing = GREATEST(0, ROUND(IFNULL(sub.greuge, 0) /
(IFNULL(cr.yearSale, 0) * vMonthToRefund / 12 ), 3));
-- Protección neonatos
UPDATE claimRatio cr