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 ;