salix/db/routines/vn/procedures/invoiceInTax_getFromEntries...

52 lines
1.3 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromEntries`(
IN vInvoiceInFk INT
)
BEGIN
DECLARE vRate DOUBLE DEFAULT 1;
DECLARE vExpenseFk VARCHAR(10);
WITH rate AS(
SELECT MAX(rr.dated) dated, ii.currencyFk
FROM vn.invoiceIn ii
JOIN vn.referenceRate rr ON rr.currencyFk = ii.currencyFk
WHERE ii.id = vInvoiceInFk
AND rr.dated <= ii.issued
) SELECT `value` INTO vRate
FROM vn.referenceRate rr
JOIN rate r ON r.dated = rr.dated
AND r.currencyFk = rr.currencyFk;
SELECT id INTO vExpenseFk
FROM expense
WHERE `name` = 'Adquisición mercancia Extracomunitaria'
GROUP BY id
LIMIT 1;
DELETE FROM invoiceInTax
WHERE invoiceInFk = vInvoiceInFk;
INSERT INTO invoiceInTax(
invoiceInFk,
taxableBase,
expenseFk,
foreignValue,
taxTypeSageFk,
transactionTypeSageFk
)SELECT ii.id,
SUM(b.buyingValue * b.quantity) / vRate taxableBase,
vExpenseFk,
IF(ii.currencyFk = 1,
NULL,
SUM(b.buyingValue * b.quantity )),
taxTypeSageFk,
transactionTypeSageFk
FROM invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
JOIN supplier s ON s.id = e.supplierFk
JOIN buy b ON b.entryFk = e.id
WHERE ii.id = vInvoiceInFk
HAVING taxableBase IS NOT NULL;
END$$
DELIMITER ;