USE `vn`;
DROP procedure IF EXISTS `ticketComponentPriceDifference`;

DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentPriceDifference`(
	vTicketFk INT,
    vDate DATE, 
    vAddressFk INT,
    vAgencyModeFk INT,
    vWarehouseFk INT)
BEGIN
/**
 * Devuelve las diferencias de precio 
 * de los movimientos de un ticket.
 * 
 * @param vTicketFk Id del ticket
 * @param vDate Fecha de envÃ­o
 * @param vAddressFk Id del consignatario
 * @param vAgencyModeFk Id del modo de agencia
 * @param vWarehouseFk Id del almacén
 */
	CALL vn.ticketComponentPreview(vTicketFk, vDate, vAddressFk, vAgencyModeFk, vWarehouseFk);

	SELECT 
			s.itemFk, 
			i.name, 
			i.size, 
			i.category, 
			IFNULL(s.quantity, 0) AS quantity, 
			IFNULL(s.price, 0) AS price, 
			ROUND(SUM(tc.cost), 2) AS newPrice,
			s.quantity * (s.price - ROUND(SUM(cost), 2)) difference,
			s.id AS saleFk
		FROM sale s
			JOIN item i ON i.id = s.itemFk 
			JOIN ticket t ON t.id = s.ticketFk 
			LEFT JOIN tmp.ticketComponent tc ON tc.itemFk = s.itemFk 
				AND tc.warehouseFk = t.warehouseFk
			LEFT JOIN saleComponent sc ON sc.saleFk = s.id 
				AND sc.componentFk = tc.componentFk
			LEFT JOIN componentRate cr ON cr.id = tc.componentFk 
		WHERE 
			t.id = vTicketFk 
			AND IF(sc.componentFk IS NULL 
				AND cr.classRate IS NOT NULL, FALSE, TRUE) 
		GROUP BY s.id ORDER BY s.id;

	DROP TEMPORARY TABLE 
        tmp.ticketComponent,
		tmp.ticketComponentPrice;
END$$

DELIMITER ;

