DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromEntries`(IN vId INT)
BEGIN
	DECLARE vRate DOUBLE DEFAULT 1;
	DECLARE vDated DATE;
	DECLARE vExpenseFk VARCHAR(10);

	SELECT MAX(rr.dated) INTO vDated
		FROM referenceRate rr
			JOIN invoiceIn ii ON ii.id = vId
		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 = vId;

	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 = vId 
			HAVING taxableBase IS NOT NULL;
END$$
DELIMITER ;
