refactor: refs #8153 Optimized order_getTax
gitea/salix/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Guillermo Bonet 2024-11-12 13:04:23 +01:00
parent aec4d0b1a4
commit d52f537f0c
1 changed files with 33 additions and 27 deletions

View File

@ -15,41 +15,47 @@ BEGIN
ENGINE = MEMORY ENGINE = MEMORY
SELECT DISTINCT o.address_id addressFk, o.company_id companyFk SELECT DISTINCT o.address_id addressFk, o.company_id companyFk
FROM tmp.`order` tmpOrder FROM tmp.`order` tmpOrder
JOIN hedera.`order` o ON o.id = tmpOrder.orderFk; JOIN `order` o ON o.id = tmpOrder.orderFk;
CALL vn.addressTaxArea; CALL vn.addressTaxArea();
-- Calcula el IVA y el recargo desglosado. -- Calcula el IVA y el recargo desglosado.
CREATE OR REPLACE TEMPORARY TABLE tmp.orderTax
DROP TEMPORARY TABLE IF EXISTS tmp.orderTax; (PRIMARY KEY (orderFk, code, rate))
CREATE TEMPORARY TABLE tmp.orderTax
(INDEX (orderFk))
ENGINE = MEMORY ENGINE = MEMORY
SELECT o.id orderFk, WITH orders AS (
SELECT tor.orderFk,
oro.amount * oro.price total,
s.countryFk,
ata.areaFk,
itc.taxClassFk
FROM orderRow oro
JOIN tmp.order tor ON tor.orderFk = oro.orderFk
JOIN `order` o ON o.id = tor.orderFk
JOIN vn.item i ON i.id = oro.itemFk
JOIN vn.`client` c ON c.id = o.customer_id
JOIN vn.supplier s ON s.id = o.company_id
JOIN tmp.addressTaxArea ata ON ata.addressFk = o.address_id
AND ata.companyFk = o.company_id
JOIN vn.itemTaxCountry itc ON itc.itemFk = i.id
AND itc.countryFk = s.countryFk
HAVING total
)
SELECT o.orderFk,
tc.code, tc.code,
SUM(m.amount * m.price) taxableBase, SUM(o.total) taxableBase,
pgc.rate pgc.rate
FROM tmp.`order` tmpOrder FROM orders o
JOIN `order` o ON o.id = tmpOrder.orderFk JOIN vn.bookingPlanner bp ON bp.countryFk = o.countryFk
JOIN orderRow m ON m.orderFk = o.id AND bp.taxAreaFk = o.areaFk
JOIN vn.item i ON i.id = m.itemFk AND bp.taxClassFk = o.taxClassFk
JOIN vn.`client` c ON c.id = o.customer_id JOIN vn.pgc ON pgc.code = bp.pgcFk
JOIN vn.supplier s ON s.id = o.company_id
JOIN tmp.addressTaxArea ata
ON ata.addressFk = o.address_id AND ata.companyFk = o.company_id
JOIN vn.itemTaxCountry itc
ON itc.itemFk = i.id AND itc.countryFk = s.countryFk
JOIN vn.bookingPlanner bp
ON bp.countryFk = s.countryFk
AND bp.taxAreaFk = ata.areaFk
AND bp.taxClassFk = itc.taxClassFk
JOIN vn.pgc ON pgc.`code` = bp.pgcFk
JOIN vn.taxClass tc ON tc.id = bp.taxClassFk JOIN vn.taxClass tc ON tc.id = bp.taxClassFk
GROUP BY tmpOrder.orderFk, pgc.`code`, pgc.rate GROUP BY o.orderFk, pgc.code, pgc.rate
HAVING taxableBase != 0; HAVING taxableBase
ORDER BY bp.priority;
DROP TEMPORARY TABLE IF EXISTS tmp.orderAmount; CREATE OR REPLACE TEMPORARY TABLE tmp.orderAmount
CREATE TEMPORARY TABLE tmp.orderAmount
(INDEX (orderFk)) (INDEX (orderFk))
ENGINE = MEMORY ENGINE = MEMORY
SELECT orderFk, taxableBase, `code`, SELECT orderFk, taxableBase, `code`,