2024-01-15 11:31:03 +00:00
|
|
|
DELIMITER $$
|
2024-08-20 08:06:10 +00:00
|
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`duaInvoiceInBooking`(
|
2024-06-10 06:38:58 +00:00
|
|
|
vDuaFk INT
|
|
|
|
)
|
2024-01-15 11:31:03 +00:00
|
|
|
BEGIN
|
2024-02-15 09:04:15 +00:00
|
|
|
/**
|
2024-06-10 06:48:56 +00:00
|
|
|
* Genera el asiento de un DUA y marca las entradas como confirmadas
|
|
|
|
*
|
|
|
|
* @param vDuaFk Id del dua a recalcular
|
|
|
|
*/
|
2024-05-28 10:30:17 +00:00
|
|
|
DECLARE vDone BOOL DEFAULT FALSE;
|
2024-01-15 11:31:03 +00:00
|
|
|
DECLARE vInvoiceFk INT;
|
2024-05-28 10:30:17 +00:00
|
|
|
DECLARE vBookEntry INT;
|
|
|
|
DECLARE vFiscalYear INT;
|
2024-07-24 12:24:06 +00:00
|
|
|
DECLARE vIncorrectInvoiceInDueDay 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
|
2024-01-15 11:31:03 +00:00
|
|
|
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
|
2024-01-15 11:31:03 +00:00
|
|
|
AND de.customsValue
|
|
|
|
AND ii.isBooked = FALSE;
|
|
|
|
|
2024-05-28 10:30:17 +00:00
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-07-24 12:24:06 +00:00
|
|
|
SELECT GROUP_CONCAT(ii.id) INTO vIncorrectInvoiceInDueDay
|
|
|
|
FROM invoiceInDueDay iidd
|
|
|
|
JOIN invoiceIn ii ON iidd.invoiceInFk = ii.id
|
|
|
|
JOIN `entry` e ON e.invoiceInFk = ii.id
|
|
|
|
JOIN duaEntry de ON de.entryFk = e.id
|
|
|
|
JOIN invoiceInConfig iic
|
|
|
|
WHERE de.duaFk = vDuaFk
|
2024-08-06 10:43:51 +00:00
|
|
|
AND iidd.dueDated < util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
|
2024-07-24 12:24:06 +00:00
|
|
|
|
|
|
|
IF vIncorrectInvoiceInDueDay THEN
|
|
|
|
CALL util.throw(CONCAT('Incorrect due date, invoice: ', vIncorrectInvoiceInDueDay));
|
|
|
|
END IF;
|
|
|
|
|
2024-06-12 12:26:26 +00:00
|
|
|
UPDATE 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
|
|
|
|
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)
|
|
|
|
WHERE d.id = vDuaFk;
|
|
|
|
|
2024-05-28 10:30:17 +00:00
|
|
|
SELECT ASIEN INTO vBookEntry FROM dua WHERE id = vDuaFk;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-06-25 11:14:44 +00:00
|
|
|
IF vBookEntry IS NULL THEN
|
2024-05-28 10:30:17 +00:00
|
|
|
SELECT YEAR(IFNULL(ii.bookEntried, d.bookEntried)) INTO vFiscalYear
|
|
|
|
FROM invoiceIn ii
|
2024-06-10 06:47:02 +00:00
|
|
|
JOIN `entry` e ON e.invoiceInFk = ii.id
|
2024-05-28 10:30:17 +00:00
|
|
|
JOIN duaEntry de ON de.entryFk = e.id
|
|
|
|
JOIN dua d ON d.id = de.duaFk
|
2024-05-28 12:50:58 +00:00
|
|
|
WHERE d.id = vDuaFk
|
|
|
|
LIMIT 1;
|
2024-06-03 18:16:27 +00:00
|
|
|
CALL ledger_nextTx(vFiscalYear, vBookEntry);
|
2024-06-25 11:14:44 +00:00
|
|
|
END IF;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-05-28 10:30:17 +00:00
|
|
|
OPEN vInvoicesIn;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-06-10 06:48:56 +00:00
|
|
|
l: LOOP
|
2024-05-28 10:30:17 +00:00
|
|
|
SET vDone = FALSE;
|
|
|
|
FETCH vInvoicesIn INTO vInvoiceFk;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-05-28 10:30:17 +00:00
|
|
|
IF vDone THEN
|
|
|
|
LEAVE l;
|
2024-01-15 11:31:03 +00:00
|
|
|
END IF;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
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
|
|
|
|
2024-02-15 09:14:19 +00:00
|
|
|
UPDATE dua
|
2024-05-28 12:50:58 +00:00
|
|
|
SET ASIEN = vBookEntry
|
2024-02-15 09:04:15 +00:00
|
|
|
WHERE id = vDuaFk;
|
2024-02-15 09:14:19 +00:00
|
|
|
|
2024-05-07 09:35:07 +00:00
|
|
|
UPDATE invoiceIn ii
|
|
|
|
JOIN duaInvoiceIn dii ON dii.invoiceInFk = ii.id
|
|
|
|
SET ii.isBooked = TRUE
|
|
|
|
WHERE dii.duaFk = vDuaFk;
|
2024-06-10 06:47:02 +00:00
|
|
|
|
|
|
|
UPDATE `entry` e
|
|
|
|
JOIN (
|
|
|
|
WITH entries AS (
|
|
|
|
SELECT e.id, de.duaFk
|
2024-06-25 11:14:44 +00:00
|
|
|
FROM vn.`entry` e
|
|
|
|
JOIN vn.duaEntry de ON de.entryFk = e.id
|
2024-06-10 06:47:02 +00:00
|
|
|
WHERE de.duaFk = vDuaFk
|
|
|
|
AND (NOT e.isBooked OR NOT e.isConfirmed)
|
|
|
|
),
|
|
|
|
notBookedEntries AS (
|
2024-07-09 09:03:17 +00:00
|
|
|
SELECT entryFk
|
2024-06-25 11:14:44 +00:00
|
|
|
FROM vn.duaEntry
|
2024-06-12 12:26:26 +00:00
|
|
|
WHERE duaFk = vDuaFk
|
|
|
|
AND NOT customsValue
|
|
|
|
)
|
|
|
|
SELECT e.id
|
2024-06-10 06:47:02 +00:00
|
|
|
FROM entries e
|
2024-06-12 12:26:26 +00:00
|
|
|
LEFT JOIN notBookedEntries nbe ON nbe.entryFk = e.id
|
|
|
|
WHERE nbe.entryFk IS NULL
|
2024-06-10 06:47:02 +00:00
|
|
|
) sub ON sub.id = e.id
|
|
|
|
SET e.isBooked = TRUE,
|
|
|
|
e.isConfirmed = TRUE;
|
2024-01-15 11:31:03 +00:00
|
|
|
END$$
|
|
|
|
DELIMITER ;
|