DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_componentMakeUpdate`(
		vTicketFk INT,
		vClientFk INT,
		vNickname VARCHAR(50),
		vAgencyModeFk INT,
		vAddressFk INT,
		vZoneFk INT,
		vWarehouseFk INT,
		vCompanyFk INT,
		vShipped DATETIME,
		vLanded DATE,
		vIsDeleted BOOLEAN,
		vHasToBeUnrouted BOOLEAN,
		vOption VARCHAR(25))
BEGIN
	
	/**
	 * Modifica en el ticket los campos que se le pasan por parámetro
	 * y cambia sus componentes
	 * 
	 * @param vTicketFk Id del ticket a modificar
	 * @param vClientFk nuevo cliente
	 * @param vNickname nuevo alias
	 * @param vAgencyModeFk nueva agencia
	 * @param vAddressFk nuevo consignatario
	 * @param vZoneFk nueva zona
	 * @param vWarehouseFk nuevo almacen
	 * @param vCompanyFk nueva empresa
	 * @param vShipped nueva fecha del envio de mercancia
	 * @param vLanded nueva fecha de recepcion de mercancia
	 * @param vIsDeleted si se borra el ticket
	 * @param vHasToBeUnrouted si se le elimina la ruta  al ticket
	 * @param vOption opcion para el case del proc ticketComponentUpdateSale
	 */
	
	DECLARE vPrice DECIMAL(10,2);
	DECLARE vBonus DECIMAL(10,2);

	CALL ticket_componentPreview (vTicketFk, vLanded, vAddressFk, vZoneFk, vWarehouseFk);

	IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
			
		UPDATE ticket t 
				JOIN address a ON a.id = vAddressFk
			SET t.nickname = a.nickname
			WHERE t.id = vTicketFk;
			
	END IF;

	CALL zone_getShipped(vLanded, vAddressFk, vAgencyModeFk, TRUE);

	SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus 
		FROM tmp.zoneGetShipped
		WHERE shipped BETWEEN DATE(vShipped) AND util.dayEnd(vShipped)  AND warehouseFk = vWarehouseFk LIMIT 1;

	UPDATE ticket t
		SET 
			t.clientFk = vClientFk,
		    t.nickname = vNickname,
			t.agencyModeFk = vAgencyModeFk,
			t.addressFk = vAddressFk,
			t.zoneFk = vZoneFk,
			t.zonePrice = vPrice,
			t.zoneBonus = vBonus,
			t.warehouseFk = vWarehouseFk,
			t.companyFk = vCompanyFk,
			t.landed = vLanded,
			t.shipped = vShipped,
			t.isDeleted = vIsDeleted
		WHERE
			t.id = vTicketFk;

	IF vHasToBeUnrouted THEN
		UPDATE ticket t SET t.routeFk = NULL
			WHERE t.id = vTicketFk;
	END IF;

	DROP TEMPORARY TABLE IF EXISTS tmp.sale;
	CREATE TEMPORARY TABLE tmp.sale
		(PRIMARY KEY (saleFk))
		ENGINE = MEMORY
		SELECT id AS saleFk, vWarehouseFk warehouseFk
			FROM sale s WHERE s.ticketFk = vTicketFk;

	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
	CREATE TEMPORARY TABLE tmp.ticketComponent
		SELECT * FROM tmp.ticketComponentPreview;

	CALL ticketComponentUpdateSale (vOption);

	DROP TEMPORARY TABLE tmp.sale;
	DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;

	DROP TEMPORARY TABLE tmp.zoneGetShipped, tmp.ticketComponentPreview;
END$$
DELIMITER ;
