60 lines
1.4 KiB
MySQL
60 lines
1.4 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`workerCalendar_calculateYear`(vYear INT, vWorkerFk INT)
|
||
|
BEGIN
|
||
|
|
||
|
/**
|
||
|
* Calcula los días y horas de vacaciones en función de un trabajador y año
|
||
|
*
|
||
|
* @param vYear
|
||
|
* @param vWorkerFk
|
||
|
* @return tmp.workerCalendarCalculateYear (days, hours, daysEnjoyed, hoursEnjoyed)
|
||
|
*/
|
||
|
DECLARE vDone BOOL;
|
||
|
DECLARE vBusinessFk INT;
|
||
|
|
||
|
DECLARE cur CURSOR FOR
|
||
|
SELECT b.id
|
||
|
FROM business b
|
||
|
WHERE vYear BETWEEN YEAR(b.started) AND IFNULL(YEAR(b.ended), vYear)
|
||
|
AND b.workerFk = vWorkerFk;
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||
|
SET vDone = TRUE;
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.workerCalendarCalculateYear;
|
||
|
|
||
|
CREATE TEMPORARY TABLE tmp.workerCalendarCalculateYear
|
||
|
(days DEC(5,2),
|
||
|
hours DEC(5,2),
|
||
|
daysEnjoyed DEC(5,2),
|
||
|
hoursEnjoyed DEC(5,2))
|
||
|
ENGINE = MEMORY;
|
||
|
INSERT INTO tmp.workerCalendarCalculateYear VALUES(0, 0, 0, 0);
|
||
|
|
||
|
OPEN cur;
|
||
|
|
||
|
l: LOOP
|
||
|
SET vDone = FALSE;
|
||
|
FETCH cur INTO vBusinessFk;
|
||
|
|
||
|
IF vDone THEN
|
||
|
LEAVE l;
|
||
|
END IF;
|
||
|
|
||
|
CALL workerCalendar_calculateBusiness(vYear, vBusinessFk);
|
||
|
UPDATE tmp.workerCalendarCalculateYear w
|
||
|
JOIN tmp.workerCalendarCalculateBusiness wc
|
||
|
SET w.days = w.days + wc.days,
|
||
|
w.hours = w.hours + wc.hours,
|
||
|
w.daysEnjoyed = w.daysEnjoyed + wc.daysEnjoyed,
|
||
|
w.hoursEnjoyed = w.hoursEnjoyed + wc.hoursEnjoyed;
|
||
|
|
||
|
DROP TEMPORARY TABLE tmp.workerCalendarCalculateBusiness;
|
||
|
|
||
|
END LOOP;
|
||
|
|
||
|
CLOSE cur;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|