50 lines
1.2 KiB
MySQL
50 lines
1.2 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditRecovery`()
|
||
|
BEGIN
|
||
|
DECLARE EXIT HANDLER FOR SQLSTATE '45000'
|
||
|
BEGIN
|
||
|
ROLLBACK;
|
||
|
RESIGNAL;
|
||
|
END;
|
||
|
|
||
|
START TRANSACTION;
|
||
|
|
||
|
UPDATE `client` c
|
||
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
||
|
SET c.credit = 0
|
||
|
WHERE pm.`code` = 'card';
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tCreditClients;
|
||
|
CREATE TEMPORARY TABLE tCreditClients
|
||
|
SELECT clientFk, IF (credit > recovery ,credit - recovery,0) newCredit
|
||
|
FROM (
|
||
|
SELECT r.clientFk,
|
||
|
r.amount recovery,
|
||
|
timestampadd(DAY, r.period, sub2.created) deadLine,
|
||
|
sub2.amount credit
|
||
|
FROM recovery r
|
||
|
JOIN (
|
||
|
SELECT clientFk, amount , created
|
||
|
FROM (
|
||
|
SELECT * FROM clientCredit
|
||
|
ORDER BY created DESC
|
||
|
LIMIT 10000000000000000000
|
||
|
) sub
|
||
|
GROUP BY clientFk
|
||
|
) sub2 ON sub2.clientFk = r.clientFk
|
||
|
WHERE r.finished IS NULL OR r.finished >= util.VN_CURDATE()
|
||
|
GROUP BY r.clientFk
|
||
|
HAVING deadLine <= util.VN_CURDATE()
|
||
|
) sub3
|
||
|
WHERE credit > 0;
|
||
|
|
||
|
UPDATE client c
|
||
|
JOIN tCreditClients cc ON cc.clientFk = c.clientFk
|
||
|
SET Clientes.Credito = newCredit;
|
||
|
|
||
|
DROP TEMPORARY TABLE tCreditClients;
|
||
|
COMMIT;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|