salix/db/routines/vn/procedures/duaInvoiceInBooking.sql

74 lines
1.8 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`duaInvoiceInBooking`(vDuaFk INT)
BEGIN
2024-02-15 09:04:15 +00:00
/**
* Genera el asiento de un DUA y marca las entradas como confirmadas
*
2024-02-15 09:04:15 +00:00
* @param vDuaFk Id del dua a recalcular
*/
2024-05-28 10:30:17 +00:00
DECLARE vDone BOOL DEFAULT FALSE;
DECLARE vInvoiceFk INT;
2024-05-28 10:30:17 +00:00
DECLARE vBookEntry INT;
DECLARE vFiscalYear INT;
2024-02-15 09:04:15 +00:00
2024-05-28 10:30:17 +00:00
DECLARE vInvoicesIn CURSOR FOR
2024-02-15 09:04:15 +00:00
SELECT DISTINCT e.invoiceInFk
FROM entry e
JOIN duaEntry de ON de.entryFk = e.id
2024-02-15 09:04:15 +00:00
JOIN invoiceIn ii ON ii.id = e.invoiceInFk
WHERE de.duaFk = vDuaFk
AND de.customsValue
AND ii.isBooked = FALSE;
2024-05-28 10:30:17 +00:00
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
UPDATE invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
2024-02-15 09:04:15 +00:00
JOIN duaEntry de ON de.entryFk = e.id
JOIN dua d ON d.id = de.duaFk
SET ii.booked = IFNULL(ii.booked, d.booked),
ii.operated = IFNULL(ii.operated, d.operated),
ii.issued = IFNULL(ii.issued, d.issued),
ii.bookEntried = IFNULL(ii.bookEntried, d.bookEntried),
e.isBooked = TRUE,
2024-02-15 09:04:15 +00:00
e.isConfirmed = TRUE
WHERE d.id = vDuaFk;
2024-02-15 09:04:15 +00:00
2024-05-28 10:30:17 +00:00
SELECT ASIEN INTO vBookEntry FROM dua WHERE id = vDuaFk;
2024-05-28 10:30:17 +00:00
IF vBookEntry IS NULL THEN
SELECT YEAR(IFNULL(ii.bookEntried, d.bookEntried)) INTO vFiscalYear
FROM invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
JOIN duaEntry de ON de.entryFk = e.id
JOIN dua d ON d.id = de.duaFk
WHERE d.id = vDuaFk;
CALL ledger_next(vFiscalYear, vBookEntry);
END IF;
2024-05-28 10:30:17 +00:00
OPEN vInvoicesIn;
2024-05-28 10:30:17 +00:00
l: LOOP
SET vDone = FALSE;
FETCH vInvoicesIn INTO vInvoiceFk;
2024-05-28 10:30:17 +00:00
IF vDone THEN
LEAVE l;
END IF;
2024-05-28 10:30:17 +00:00
CALL invoiceIn_booking(vInvoiceFk, vBookEntry);
END LOOP;
2024-02-15 09:04:15 +00:00
2024-05-28 10:30:17 +00:00
CLOSE vInvoicesIn;
2024-02-15 09:04:15 +00:00
UPDATE dua
2024-02-15 09:04:15 +00:00
SET ASIEN = vASIEN
WHERE id = vDuaFk;
UPDATE invoiceIn ii
JOIN duaInvoiceIn dii ON dii.invoiceInFk = ii.id
SET ii.isBooked = TRUE
WHERE dii.duaFk = vDuaFk;
END$$
DELIMITER ;