salix/db/routines/vn2008/procedures/recobro_credito.sql

56 lines
1.5 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`recobro_credito`()
BEGIN
DECLARE EXIT HANDLER FOR SQLSTATE '45000'
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
INSERT INTO vn.clientCredit(clientFk, amount)
SELECT c.id, 0
FROM vn.`client` c
JOIN vn.payMethod pm ON pm.id = c.payMethodFk
WHERE c.credit <> 0 AND pm.`code` = 'card';
UPDATE vn.`client` c
JOIN vn.payMethod pm ON pm.id = c.payMethodFk
SET credit = 0
WHERE pm.`code` = 'card';
DROP TEMPORARY TABLE IF EXISTS clientes_credit;
CREATE TEMPORARY TABLE clientes_credit
SELECT Id_Cliente, if (Credito > Recobro ,Credito - Recobro,0) AS newCredit
FROM (
SELECT r.Id_Cliente, r.amount AS Recobro,
timestampadd(DAY, period, UltimaFecha) AS Deadline, sub2.amount AS Credito
FROM vn2008.recovery r
JOIN (
SELECT Id_Cliente, amount , odbc_date AS UltimaFecha
FROM (
SELECT * FROM credit
ORDER BY odbc_date DESC
LIMIT 10000000000000000000
) sub
GROUP BY Id_Cliente
) sub2 USING(Id_Cliente)
WHERE dend IS NULL or dend >= util.VN_CURDATE()
GROUP BY Id_Cliente
HAVING Deadline <= util.VN_CURDATE()
) sub3
WHERE Credito > 0;
UPDATE Clientes
JOIN clientes_credit USING(Id_Cliente)
SET Clientes.Credito = newCredit;
INSERT INTO credit(Id_Cliente, amount, Id_Trabajador)
SELECT Id_Cliente, newCredit, NULL
FROM clientes_credit;
DROP TEMPORARY TABLE clientes_credit;
COMMIT;
END$$
DELIMITER ;