salix/db/routines/vn/procedures/addressTaxArea.sql

39 lines
1.4 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`addressTaxArea`()
READS SQL DATA
BEGIN
/**
* Devuelve el taxArea para un conjunto de Consignatarios y empresas,
*
* @table tmp.addressCompany(addressFk, companyFk) valores a calcular
* @return tmp.addressTaxArea(addressFk,companyFk)
*/
DROP TEMPORARY TABLE IF EXISTS tmp.addressTaxArea;
CREATE TEMPORARY TABLE tmp.addressTaxArea
(PRIMARY KEY (addressFk, companyFk))
ENGINE = MEMORY
SELECT CASE
WHEN (NOT IFNULL(auClient.isUeeMember, cClient.isUeeMember) OR NOT cSupplier.isUeeMember)
AND NOT (auSupplier.id <=> auClient.id) THEN
'WORLD'
WHEN cClient.isUeeMember AND cSupplier.isUeeMember AND c.countryFk != s.countryFk AND c.isVies THEN
'CEE'
WHEN a.isEqualizated AND cClient.code = 'ES' THEN
'EQU'
ELSE
'NATIONAL'
END AS areaFk, ac.addressFk, ac.companyFk
FROM tmp.addressCompany ac
JOIN address a ON a.id = ac.addressFk
JOIN `client` c ON c.id = a.clientFk
JOIN country cClient ON cClient.id = c.countryFk
LEFT JOIN province pClient ON pClient.id = c.provinceFk
LEFT JOIN autonomy auClient ON auClient.id = pClient.autonomyFk
JOIN supplier s ON s.id = ac.companyFk
JOIN country cSupplier ON cSupplier.id = s.countryFk
LEFT JOIN province pSupplier ON pSupplier.id = s.provinceFk
LEFT JOIN autonomy auSupplier ON auSupplier.id = pSupplier.autonomyFk;
END$$
DELIMITER ;