Merge pull request 'fix: refs #7213 componentLack y setRisk' (!2820) from 7213-Hotfix-calculo-problemas into master
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #2820
Reviewed-by: Guillermo Bonet <guillermo@verdnatura.es>
This commit is contained in:
Carlos Andrés 2024-07-31 14:05:31 +00:00
commit ce8eba9b85
3 changed files with 65 additions and 81 deletions

View File

@ -14,7 +14,7 @@ BEGIN
ENGINE = MEMORY ENGINE = MEMORY
SELECT vSelf saleFk, SELECT vSelf saleFk,
sale_hasComponentLack(vSelf) hasProblem, sale_hasComponentLack(vSelf) hasProblem,
ticket_isProblemCalcNeeded(ticketFk) isProblemCalcNeeded (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
FROM sale FROM sale
WHERE id = vSelf; WHERE id = vSelf;

View File

@ -14,9 +14,9 @@ BEGIN
ENGINE = MEMORY ENGINE = MEMORY
SELECT saleFk, SELECT saleFk,
sale_hasComponentLack(saleFk) hasProblem, sale_hasComponentLack(saleFk) hasProblem,
ticket_isProblemCalcNeeded(ticketFk) isProblemCalcNeeded (ticket_isProblemCalcNeeded(ticketFk) AND quantity > 0) isProblemCalcNeeded
FROM ( FROM (
SELECT s.id saleFk, s.ticketFk SELECT s.id saleFk, s.ticketFk, s.quantity
FROM ticket t FROM ticket t
JOIN sale s ON s.ticketFk = t.id JOIN sale s ON s.ticketFk = t.id
LEFT JOIN saleComponent sc ON sc.saleFk = s.id LEFT JOIN saleComponent sc ON sc.saleFk = s.id

View File

@ -1,92 +1,76 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setRisk`( CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setRisk`(
vClientFk INT) vClientFk INT
)
BEGIN BEGIN
/** /**
* Update the risk for a client with pending tickets * Update the risk for a client with pending tickets.
* *
* @param vClientFk Id cliente * @param vClientFk Id cliente
*/ */
DECLARE vHasDebt BOOL; IF (SELECT COUNT(*) FROM client WHERE id = vClientFk AND typeFk = 'normal') THEN
DECLARE vStarted DATETIME;
SELECT COUNT(*) INTO vHasDebt
FROM `client`
WHERE id = vClientFk
AND typeFk = 'normal';
IF vHasDebt THEN
SELECT util.VN_CURDATE() - INTERVAL riskScope MONTH INTO vStarted
FROM clientConfig;
CREATE OR REPLACE TEMPORARY TABLE tTicketRisk CREATE OR REPLACE TEMPORARY TABLE tTicketRisk
(KEY (ticketFk)) (PRIMARY KEY (ticketFk))
ENGINE = MEMORY ENGINE = MEMORY
WITH ticket AS( WITH ticket AS (
SELECT id ticketFk, SELECT t.id ticketFk,
companyFk, t.companyFk,
DATE(shipped) dated, DATE(t.shipped) dated,
totalWithVat, t.totalWithVat,
ticket_isProblemCalcNeeded(id) isProblemCalcNeeded ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM vn.ticket FROM vn.ticket t
WHERE clientFk = vClientFk JOIN vn.clientConfig cc
AND refFk IS NULL WHERE t.clientFk = vClientFk
AND NOT isDeleted AND t.refFk IS NULL
AND IFNULL(totalWithVat, 0) <> 0 AND NOT t.isDeleted
AND shipped > vStarted AND IFNULL(t.totalWithVat, 0) <> 0
), balance AS( AND t.shipped > (util.VN_CURDATE() - INTERVAL cc.riskScope MONTH)
SELECT SUM(amount)amount, companyFk ), balance AS (
FROM ( SELECT SUM(amount)amount, companyFk
SELECT amount, companyFk FROM (
FROM vn.clientRisk SELECT amount, companyFk
WHERE clientFk = vClientFk FROM vn.clientRisk
UNION ALL WHERE clientFk = vClientFk
SELECT -(SUM(amount) / 100) amount, tm.companyFk UNION ALL
FROM hedera.tpvTransaction t SELECT -(SUM(amount) / 100) amount, tm.companyFk
JOIN hedera.tpvMerchant tm ON t.id = t.merchantFk FROM hedera.tpvTransaction t
WHERE clientFk = vClientFk JOIN hedera.tpvMerchant tm ON t.id = t.merchantFk
AND receiptFk IS NULL WHERE clientFk = vClientFk
AND status = 'ok' AND receiptFk IS NULL
) sub AND `status` = 'ok'
WHERE companyFk ) sub
GROUP BY companyFk WHERE companyFk
), uninvoiced AS( GROUP BY companyFk
SELECT companyFk, dated, SUM(totalWithVat) amount ), uninvoiced AS (
FROM ticket SELECT companyFk, dated, SUM(totalWithVat) amount
GROUP BY companyFk, dated FROM ticket
), receipt AS( GROUP BY companyFk, dated
SELECT companyFk, DATE(payed) dated, SUM(amountPaid) amount ), receipt AS (
FROM vn.receipt SELECT companyFk, DATE(payed) dated, SUM(amountPaid) amount
WHERE clientFk = vClientFk FROM vn.receipt
AND payed > util.VN_CURDATE() WHERE clientFk = vClientFk
GROUP BY companyFk, DATE(payed) AND payed > util.VN_CURDATE()
), risk AS( GROUP BY companyFk, DATE(payed)
SELECT b.companyFk, ), risk AS (
ui.dated, SELECT b.companyFk,
SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated ) + ui.dated,
b.amount + SUM(ui.amount) OVER (PARTITION BY b.companyFk ORDER BY ui.dated) +
SUM(IFNULL(r.amount, 0)) amount b.amount +
FROM balance b SUM(IFNULL(r.amount, 0)) amount
JOIN uninvoiced ui ON ui.companyFk = b.companyFk FROM balance b
LEFT JOIN receipt r ON r.dated > ui.dated AND r.companyFk = ui.companyFk JOIN uninvoiced ui ON ui.companyFk = b.companyFk
GROUP BY b.companyFk, ui.dated LEFT JOIN receipt r ON r.dated > ui.dated
) AND r.companyFk = ui.companyFk
SELECT ti.ticketFk, r.amount, ti.isProblemCalcNeeded GROUP BY b.companyFk, ui.dated
FROM ticket ti )
JOIN risk r ON r.dated = ti.dated AND r.companyFk = ti.companyFk; SELECT ti.ticketFk, r.amount, ti.isProblemCalcNeeded
FROM ticket ti
JOIN risk r ON r.dated = ti.dated
AND r.companyFk = ti.companyFk;
UPDATE ticket t UPDATE ticket t
JOIN tTicketRisk tr ON tr.ticketFk = t.id JOIN tTicketRisk tr ON tr.ticketFk = t.id
SET t.risk = tr.amount SET t.risk = IF(tr.isProblemCalcNeeded, tr.amount, NULL);
WHERE tr.isProblemCalcNeeded
ORDER BY t.id;
UPDATE ticket t
JOIN tTicketRisk tr ON tr.ticketFk = t.id
SET t.risk = NULL
WHERE tr.isProblemCalcNeeded
ORDER BY t.id;
DROP TEMPORARY TABLE tTicketRisk; DROP TEMPORARY TABLE tTicketRisk;
END IF; END IF;