43 lines
2.0 KiB
SQL
43 lines
2.0 KiB
SQL
DROP PROCEDURE IF EXISTS `vn`.`timeControl_calculate`;
|
|
DELIMITER $$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`timeControl_calculate`(vDatedFrom DATETIME, vDatedTo DATETIME)
|
|
BEGIN
|
|
SET @vIsOdd := TRUE;
|
|
SET @vUser := NULL;
|
|
SET @vDated := NULL;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
|
|
|
|
CREATE TEMPORARY TABLE tmp.timeControlCalculate
|
|
SELECT
|
|
userFk,
|
|
dated,
|
|
IF( timeWork >= 18000, @timeWork:=timeWork + 1200, @timeWork:=timeWork) timeWorkSeconds,
|
|
SEC_TO_TIME(@timeWork ) timeWorkSexagesimal,
|
|
@timeWork / 3600 timeWorkDecimal,
|
|
timed
|
|
FROM (SELECT SUM(timeWork) timeWork,
|
|
userFk,
|
|
dated,
|
|
GROUP_CONCAT(DATE_FORMAT(sub.timed,"%H:%i") ORDER BY sub.timed ASC SEPARATOR ' - ') timed
|
|
FROM (SELECT IF(@vUser = wtc.userFk, @vUser :=@vUser, @vUser := wtc.userFk),
|
|
IF(@vIsOdd, @vIsOdd := FALSE, @vIsOdd := TRUE),
|
|
IF(direction='in', @vIsOdd := TRUE, @vIsOdd := @vIsOdd),
|
|
IF(@vIsOdd, @vLastTimed:=UNIX_TIMESTAMP(timed),@vLastTimed:=@vLastTimed),
|
|
IF(@vIsOdd, 0, UNIX_TIMESTAMP(timed)-@vLastTimed) timeWork,
|
|
IF(direction='in', @vDated := DATE(wtc.timed), @vDated :=@vDated) dated,
|
|
wtc.timed timed,
|
|
wtc.userFk,
|
|
direction
|
|
FROM (SELECT DISTINCT(wtc.id), wtc.userFk, wtc.timed, wtc.direction
|
|
FROM workerTimeControl wtc
|
|
JOIN tmp.`user` w ON w.userFk = wtc.userFk
|
|
WHERE wtc.timed BETWEEN vDatedFrom AND vDatedTo
|
|
ORDER BY userFk, timed ASC
|
|
) wtc
|
|
WHERE wtc.timed BETWEEN vDatedFrom AND vDatedTo
|
|
) sub
|
|
GROUP BY userFk, dated
|
|
)sub2;
|
|
END$$
|
|
DELIMITER ; |