DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doCmr`(vSelf INT)
BEGIN
/**
* Crea u actualiza la información del CMR asociado con
* un ticket específico en caso de que sea necesario.
*
* @param vSelf El id del ticket
*/
	DECLARE vCmrFk INT;
	SELECT cmrFk INTO vCmrFk
		FROM ticket
		WHERE id = vSelf;

	CREATE OR REPLACE TEMPORARY TABLE tTicket
		SELECT wo.firstName,
				v.numberPlate,
				com.id companyFk,
				a.id addressFk,
				c2.defaultAddressFk,
				IFNULL(sat.supplierFk, su.id) supplierFk,
				t.landed
			FROM ticket t
				JOIN ticketState ts ON ts.ticketFk = t.id
				JOIN `state` s ON s.id = ts.stateFk
				JOIN alertLevel al ON al.id = s.alertLevel
				JOIN client c ON c.id = t.clientFk
				JOIN `address` a ON a.id = t.addressFk
				JOIN province p ON p.id = a.provinceFk
				JOIN country co ON co.id = p.countryFk
				JOIN warehouse w ON w.id = t.warehouseFk
				JOIN company com ON com.id = t.companyFk
				JOIN client c2 ON c2.id = com.clientFk
				JOIN supplierAccount sa ON sa.id = com.supplierAccountFk
				JOIN supplier su ON su.id = sa.supplierFk
				LEFT JOIN route r ON r.id = t.routeFk
				LEFT JOIN worker wo ON wo.id = r.workerFk
				LEFT JOIN vehicle v ON v.id = r.vehicleFk
				LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
				LEFT JOIN agency ag ON ag.id = am.agencyFk
				LEFT JOIN supplierAgencyTerm sat ON sat.agencyFk = ag.id
					AND wo.isFreelance
			WHERE al.code IN ('PACKED', 'DELIVERED')
				AND co.code <> 'ES'
				AND am.name <> 'ABONO'
				AND w.code = 'ALG'
				AND t.id = vSelf
			GROUP BY t.id;
	
	IF vCmrFk THEN
		UPDATE cmr c
				JOIN tTicket t
			SET c.senderInstruccions = t.firstName,
				c.truckPlate = t.numberPlate,
				c.companyFk = t.companyFk,
				c.addressToFk = t.addressFk,
				c.addressFromFk = t.defaultAddressFk,
				c.supplierFk = t.supplierFk,
				c.ead = t.landed
			WHERE id = vCmrFk;
	ELSE		
		INSERT INTO cmr (
			senderInstruccions,
			truckPlate,
			companyFk,
			addressToFk,
			addressFromFk,
			supplierFk,
			ead
		)
			SELECT * FROM tTicket;

		IF (SELECT EXISTS(SELECT * FROM tTicket)) THEN
			UPDATE ticket
				SET cmrFk = LAST_INSERT_ID()
				WHERE id = vSelf;
		END IF;
	END IF;

	DROP TEMPORARY TABLE tTicket;
END$$
DELIMITER ;