55 lines
1.5 KiB
SQL
55 lines
1.5 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromEntries`(IN vInvoiceInFk INT)
|
|
BEGIN
|
|
DECLARE vRate DOUBLE DEFAULT 1;
|
|
DECLARE vDated DATE;
|
|
DECLARE vExpenseFk VARCHAR(10);
|
|
DECLARE vIsBooked BOOLEAN DEFAULT FALSE;
|
|
|
|
SELECT isBooked INTO vIsBooked
|
|
FROM invoiceIn ii
|
|
WHERE id = vInvoiceInFk;
|
|
|
|
IF vIsBooked THEN
|
|
CALL util.throw('A booked invoice cannot be modified');
|
|
END IF;
|
|
|
|
SELECT MAX(rr.dated) INTO vDated
|
|
FROM referenceRate rr
|
|
JOIN invoiceIn ii ON ii.id = vInvoiceInFk
|
|
WHERE rr.dated <= ii.issued
|
|
AND rr.currencyFk = ii.currencyFk ;
|
|
|
|
IF vDated THEN
|
|
SELECT `value` INTO vRate
|
|
FROM referenceRate
|
|
WHERE dated = vDated;
|
|
END IF;
|
|
|
|
SELECT id INTO vExpenseFk
|
|
FROM vn.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) / IFNULL(vRate,1) taxableBase,
|
|
vExpenseFk,
|
|
IF(ii.currencyFk = 1,NULL,SUM(b.buyingValue * b.quantity )) divisa,
|
|
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
|
|
LEFT JOIN referenceRate rr ON rr.currencyFk = ii.currencyFk
|
|
AND rr.dated = ii.issued
|
|
WHERE ii.id = vInvoiceInFk
|
|
HAVING taxableBase IS NOT NULL;
|
|
END$$
|
|
DELIMITER ;
|