55 lines
1.6 KiB
SQL
55 lines
1.6 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`duaTax_doRecalc`(vDuaFk INT)
|
|
BEGIN
|
|
/**
|
|
* Borra los valores de duaTax y los vuelve a crear en base a la tabla duaEntry
|
|
*
|
|
* @param vDuaFk Id del dua a recalcular
|
|
*/
|
|
DELETE FROM duaTax
|
|
WHERE duaFk = vDuaFk;
|
|
|
|
INSERT INTO duaTax(duaFk, taxClassFk, base)
|
|
SELECT vDuaFk, taxClassFk, SUM(sub.totalBase)
|
|
FROM intrastat ist
|
|
JOIN
|
|
(SELECT i.intrastatFk,
|
|
CAST(SUM(b.quantity *
|
|
b.buyingValue *
|
|
de.customsValue /
|
|
de.value)
|
|
* di.totalAmount /
|
|
bi.totalAmount AS DECIMAL(10,2)
|
|
) totalBase
|
|
FROM buy b
|
|
JOIN item i ON i.id = b.itemFk
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN duaEntry de ON de.entryFk = e.id
|
|
JOIN(
|
|
SELECT i.intrastatFk,
|
|
CAST(SUM(b.quantity *
|
|
b.buyingValue *
|
|
de.customsValue /
|
|
de.value) AS DECIMAL(10,2)
|
|
) totalAmount
|
|
FROM buy b
|
|
JOIN item i ON i.id = b.itemFk
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN duaEntry de ON de.entryFk = e.id
|
|
WHERE de.duaFk = vDuaFk
|
|
GROUP BY i.intrastatFk
|
|
) bi ON bi.intrastatFk = i.intrastatFk
|
|
JOIN(
|
|
SELECT intrastatFk, SUM(amount) totalAmount
|
|
FROM duaIntrastat
|
|
WHERE duaFk = vDuaFk
|
|
GROUP BY intrastatFK
|
|
) di ON di.intrastatFk = i.intrastatFk
|
|
WHERE de.duaFk = vDuaFk
|
|
GROUP BY i.intrastatFk
|
|
HAVING totalBase
|
|
)sub ON ist.id = sub.intrastatFk
|
|
GROUP BY ist.taxClassFk;
|
|
END$$
|
|
DELIMITER ;
|