feat: refs #8139 Added if is campaign
gitea/salix/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Carlos Andrés 2024-12-19 19:23:16 +01:00
parent 6f47d04598
commit 93f5b0ea54
1 changed files with 31 additions and 23 deletions

View File

@ -24,7 +24,7 @@ BEGIN
DECLARE vNextOut DATETIME; DECLARE vNextOut DATETIME;
DECLARE vNextDirection ENUM('in', 'out'); DECLARE vNextDirection ENUM('in', 'out');
DECLARE vLastDirection ENUM('in', 'out'); DECLARE vLastDirection ENUM('in', 'out');
DECLARE vDayMaxTime INTEGER; DECLARE vDayMaxTime INTEGER;
DECLARE vDayBreak INT; DECLARE vDayBreak INT;
DECLARE vShortWeekBreak INT; DECLARE vShortWeekBreak INT;
DECLARE vLongWeekBreak INT; DECLARE vLongWeekBreak INT;
@ -52,7 +52,7 @@ BEGIN
WHERE w.id = vWorkerFk; WHERE w.id = vWorkerFk;
SELECT `description` INTO vErrorMessage SELECT `description` INTO vErrorMessage
FROM workerTimeControlError FROM workerTimeControlError
WHERE `code` = vErrorCode; WHERE `code` = vErrorCode;
IF vErrorMessage IS NULL THEN IF vErrorMessage IS NULL THEN
@ -64,7 +64,7 @@ BEGIN
' no ha podido fichar por el siguiente problema: ', ' no ha podido fichar por el siguiente problema: ',
vErrorMessage) vErrorMessage)
INTO vErrorMessage; INTO vErrorMessage;
CALL mail_insert( vMailTo, vMailTo, 'Error al fichar', vErrorMessage); CALL mail_insert( vMailTo, vMailTo, 'Error al fichar', vErrorMessage);
END; END;
@ -98,6 +98,19 @@ BEGIN
WHERE b.workerFk = vWorkerFk WHERE b.workerFk = vWorkerFk
AND vDated BETWEEN b.started AND IFNULL(b.ended, vDated); AND vDated BETWEEN b.started AND IFNULL(b.ended, vDated);
SELECT EXISTS (
SELECT id FROM campaign
WHERE vTimed BETWEEN dated - INTERVAL scopeDays DAY
AND dated + INTERVAL vLongWeekBreak SECOND
) INTO vIsCampaing;
IF vIsCampaing THEN
SET vWeekScope = vWeekScope * 2;
ELSE
SET vLongWeekBreak = vShortWeekBreak,
vMaxWorkLongCycle = vMaxWorkShortCycle;
END IF;
-- CONTRATO EN VIGOR -- CONTRATO EN VIGOR
IF vDayBreak IS NULL THEN IF vDayBreak IS NULL THEN
SET vErrorCode = 'INACTIVE_BUSINESS'; SET vErrorCode = 'INACTIVE_BUSINESS';
@ -105,7 +118,7 @@ BEGIN
END IF; END IF;
-- FICHADAS A FUTURO -- FICHADAS A FUTURO
IF vTimed > util.VN_NOW() + INTERVAL 1 MINUTE THEN IF vTimed > util.VN_NOW() + INTERVAL 1 MINUTE THEN
SET vErrorCode = 'IS_NOT_ALLOWED_FUTURE'; SET vErrorCode = 'IS_NOT_ALLOWED_FUTURE';
CALL util.throw(vErrorCode); CALL util.throw(vErrorCode);
END IF; END IF;
@ -142,7 +155,7 @@ BEGIN
SET vErrorCode = 'WRONG_DIRECTION'; SET vErrorCode = 'WRONG_DIRECTION';
IF(SELECT option1 IS NULL AND option2 IS NULL IF(SELECT option1 IS NULL AND option2 IS NULL
FROM tmp.workerTimeControlDirection) THEN FROM tmp.workerTimeControlDirection) THEN
SET vErrorCode = 'DAY_MAX_TIME'; SET vErrorCode = 'DAY_MAX_TIME';
END IF; END IF;
CALL util.throw(vErrorCode); CALL util.throw(vErrorCode);
@ -229,40 +242,35 @@ BEGIN
ORDER BY timed ASC ORDER BY timed ASC
LIMIT 1; LIMIT 1;
IF (vDirection ='in' IF (vDirection ='in'
AND vNextDirection = 'out' AND vNextDirection = 'out'
AND UNIX_TIMESTAMP(vNextOut) - UNIX_TIMESTAMP(vTimed) > vDayMaxTime) OR AND UNIX_TIMESTAMP(vNextOut) - UNIX_TIMESTAMP(vTimed) > vDayMaxTime) OR
(vDirection ='out' (vDirection ='out'
AND vLastDirection = 'in' AND vLastDirection = 'in'
AND UNIX_TIMESTAMP(vTimed) -UNIX_TIMESTAMP(vLastIn) > vDayMaxTime) THEN AND UNIX_TIMESTAMP(vTimed) -UNIX_TIMESTAMP(vLastIn) > vDayMaxTime) THEN
SET vErrorCode = 'DAY_MAX_TIME'; SET vErrorCode = 'DAY_MAX_TIME';
CALL util.throw(vErrorCode); CALL util.throw(vErrorCode);
END IF; END IF;
SELECT EXISTS (
SELECT id FROM campaign
WHERE vTimed BETWEEN dated - INTERVAL scopeDays DAY AND dated
) INTO vIsCampaing;
-- VERIFICA DESCANSO SEMANAL -- VERIFICA DESCANSO SEMANAL
WITH wtc AS( WITH wtc AS(
(SELECT timed (SELECT timed
FROM vn.workerTimeControl FROM vn.workerTimeControl
WHERE userFk = vWorkerFk WHERE userFk = vWorkerFk
AND direction IN ('in', 'out') AND direction IN ('in', 'out')
AND timed BETWEEN vTimed - INTERVAL (vWeekScope * 2) SECOND AND timed BETWEEN vTimed - INTERVAL vWeekScope SECOND
AND vTimed + INTERVAL (vWeekScope * 2) SECOND ) AND vTimed + INTERVAL vWeekScope SECOND)
UNION UNION
(SELECT vTimed) (SELECT vTimed)
), wtcGap AS( ), wtcGap AS(
SELECT timed, SELECT timed,
TIMESTAMPDIFF(SECOND, LAG(timed) OVER (ORDER BY timed), timed) gap TIMESTAMPDIFF(SECOND, LAG(timed) OVER (ORDER BY timed), timed) gap
FROM wtc FROM wtc
ORDER BY timed ORDER BY timed
), wtcBreak AS( ), wtcBreak AS(
SELECT timed, SELECT timed,
IF(IFNULL(gap, 0) > vShortWeekBreak, TRUE, FALSE) hasShortBreak, IF(IFNULL(gap, 0) > vShortWeekBreak, TRUE, FALSE) hasShortBreak,
IF(IFNULL(gap, 0) > vLongWeekBreak AND NOT vIsCampaing, TRUE, FALSE) hasLongBreak IF(IFNULL(gap, 0) > vLongWeekBreak, TRUE, FALSE) hasLongBreak
FROM wtcGap FROM wtcGap
ORDER BY timed ORDER BY timed
), wtcBreakCounter AS( ), wtcBreakCounter AS(
@ -270,8 +278,8 @@ BEGIN
SUM(hasShortBreak) OVER (ORDER BY timed) breakCounter , SUM(hasShortBreak) OVER (ORDER BY timed) breakCounter ,
LEAD(hasLongBreak) OVER (ORDER BY timed) nextHasLongBreak LEAD(hasLongBreak) OVER (ORDER BY timed) nextHasLongBreak
FROM wtcBreak FROM wtcBreak
)SELECT TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkLongCycle OR )SELECT TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkLongCycle OR
(TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkShortCycle (TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkShortCycle
AND NOT SUM(IFNULL(nextHasLongBreak, 1))) AND NOT SUM(IFNULL(nextHasLongBreak, 1)))
hasError INTO vIsError hasError INTO vIsError
FROM wtcBreakCounter FROM wtcBreakCounter