DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticketGetTax_new`()
	READS SQL DATA
BEGIN
/**
 * Calcula la base imponible, el IVA y el recargo de equivalencia para
 * un conjunto de tickets.
 *
 * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
 * @return tmp.ticketTax Impuesto desglosado para cada ticket
 * @return tmp.ticketAmount
 */

	DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
	CREATE TEMPORARY TABLE tmp.addressCompany
		(INDEX (addressFk, companyFk))
		ENGINE = MEMORY
			SELECT DISTINCT t.addressFk, t.companyFk
				FROM tmp.ticket tmpTicket
					JOIN ticket t ON t.id = tmpTicket.ticketFk;

    CALL addressTaxArea ();
     
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketTax;
	CREATE TEMPORARY TABLE tmp.ticketTax
		(INDEX (ticketFk))
		ENGINE = MEMORY
			SELECT tmpTicket.ticketFk,
					bp.pgcFk,
					SUM(ROUND(s.quantity * s.price * (100 - s.discount)/100,2) 
						) AS taxableBase,
					SUM(ROUND(s.quantity * s.price * (100 - s.discount)/100,2)
						) * pgc.rate / 100 AS tax,
					tc.code
                        
				FROM tmp.ticket tmpTicket
					JOIN sale s ON s.ticketFk = tmpTicket.ticketFk
					JOIN item i ON i.id = s.itemFk
                    JOIN ticket t ON t.id = tmpTicket.ticketFk
                    JOIN supplier su ON su.id = t.companyFk
                    JOIN tmp.addressTaxArea ata 
						ON ata.addressFk = t.addressFk AND ata.companyFk = t.companyFk
					JOIN itemTaxCountry itc 
						ON itc.itemFk = i.id AND itc.countryFk = su.countryFk
					JOIN bookingPlanner bp 
						ON bp.countryFk = su.countryFk
							AND bp.taxAreaFk = ata.areaFk
							AND bp.taxClassFk = itc.taxClassFk
					JOIN pgc ON pgc.code = bp.pgcFk
                    JOIN taxClass tc ON tc.id = bp.taxClassFk
				GROUP BY tmpTicket.ticketFk, pgc.code
				HAVING taxableBase != 0;
                              
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketAmount;
	CREATE TEMPORARY TABLE tmp.ticketAmount
		(INDEX (ticketFk))
		ENGINE = MEMORY
			SELECT ticketFk, taxableBase, SUM(tax) tax
				FROM tmp.ticketTax
				GROUP BY ticketFk, code;

    DROP TEMPORARY TABLE IF EXISTS tmp.addressCompany;
    DROP TEMPORARY TABLE IF EXISTS tmp.addressTaxArea;
    
END$$
DELIMITER ;
