DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`machineWorker_update`(vPlate VARCHAR(10), vWorkerFk INT)
BEGIN
	
/**
 * Actualiza el registro correspondiente si el vWorkerFk se ha registrado en las últimas horas (campo maxHours de machineWorkerConfig) con vPlate, 
 * 
 * @param vPlate número de matrícula
 * @param vWorkerFk id del trabajador 
 * 
*/

	DECLARE vMachineFk INT(10);
	DECLARE vMaxHours INT(10);

	SELECT m.id  INTO vMachineFk
	FROM machine m
		WHERE m.plate  = vPlate;
	
	SELECT maxHours INTO vMaxHours
	FROM machineWorkerConfig;

	IF (SELECT COUNT(*) 
			FROM machineWorker m
			WHERE  m.workerFk = vWorkerFk
				AND m.inTimed >= TIMESTAMPADD(HOUR , -vMaxHours, util.VN_NOW()) AND ISNULL(m.outTimed)) THEN				
				
		UPDATE machineWorker m
			SET m.outTimed = CURRENT_TIMESTAMP()
			WHERE m.workerFk = vWorkerFk 
				AND m.inTimed >= TIMESTAMPADD(HOUR , -vMaxHours, util.VN_NOW()) 
				AND ISNULL(m.outTimed)
				AND m.machineFk = vMachineFk;
		
    END IF;
       
END$$
DELIMITER ;