feat: refs #8139 Added if is campaign
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
This commit is contained in:
parent
6f47d04598
commit
93f5b0ea54
|
@ -24,7 +24,7 @@ BEGIN
|
|||
DECLARE vNextOut DATETIME;
|
||||
DECLARE vNextDirection ENUM('in', 'out');
|
||||
DECLARE vLastDirection ENUM('in', 'out');
|
||||
DECLARE vDayMaxTime INTEGER;
|
||||
DECLARE vDayMaxTime INTEGER;
|
||||
DECLARE vDayBreak INT;
|
||||
DECLARE vShortWeekBreak INT;
|
||||
DECLARE vLongWeekBreak INT;
|
||||
|
@ -52,7 +52,7 @@ BEGIN
|
|||
WHERE w.id = vWorkerFk;
|
||||
|
||||
SELECT `description` INTO vErrorMessage
|
||||
FROM workerTimeControlError
|
||||
FROM workerTimeControlError
|
||||
WHERE `code` = vErrorCode;
|
||||
|
||||
IF vErrorMessage IS NULL THEN
|
||||
|
@ -64,7 +64,7 @@ BEGIN
|
|||
' no ha podido fichar por el siguiente problema: ',
|
||||
vErrorMessage)
|
||||
INTO vErrorMessage;
|
||||
|
||||
|
||||
CALL mail_insert( vMailTo, vMailTo, 'Error al fichar', vErrorMessage);
|
||||
END;
|
||||
|
||||
|
@ -98,6 +98,19 @@ BEGIN
|
|||
WHERE b.workerFk = vWorkerFk
|
||||
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
|
||||
IF vDayBreak IS NULL THEN
|
||||
SET vErrorCode = 'INACTIVE_BUSINESS';
|
||||
|
@ -105,7 +118,7 @@ BEGIN
|
|||
END IF;
|
||||
|
||||
-- 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';
|
||||
CALL util.throw(vErrorCode);
|
||||
END IF;
|
||||
|
@ -142,7 +155,7 @@ BEGIN
|
|||
SET vErrorCode = 'WRONG_DIRECTION';
|
||||
IF(SELECT option1 IS NULL AND option2 IS NULL
|
||||
FROM tmp.workerTimeControlDirection) THEN
|
||||
|
||||
|
||||
SET vErrorCode = 'DAY_MAX_TIME';
|
||||
END IF;
|
||||
CALL util.throw(vErrorCode);
|
||||
|
@ -229,40 +242,35 @@ BEGIN
|
|||
ORDER BY timed ASC
|
||||
LIMIT 1;
|
||||
|
||||
IF (vDirection ='in'
|
||||
AND vNextDirection = 'out'
|
||||
IF (vDirection ='in'
|
||||
AND vNextDirection = 'out'
|
||||
AND UNIX_TIMESTAMP(vNextOut) - UNIX_TIMESTAMP(vTimed) > vDayMaxTime) OR
|
||||
(vDirection ='out'
|
||||
(vDirection ='out'
|
||||
AND vLastDirection = 'in'
|
||||
AND UNIX_TIMESTAMP(vTimed) -UNIX_TIMESTAMP(vLastIn) > vDayMaxTime) THEN
|
||||
SET vErrorCode = 'DAY_MAX_TIME';
|
||||
CALL util.throw(vErrorCode);
|
||||
END IF;
|
||||
|
||||
SELECT EXISTS (
|
||||
SELECT id FROM campaign
|
||||
WHERE vTimed BETWEEN dated - INTERVAL scopeDays DAY AND dated
|
||||
) INTO vIsCampaing;
|
||||
|
||||
-- VERIFICA DESCANSO SEMANAL
|
||||
WITH wtc AS(
|
||||
(SELECT timed
|
||||
FROM vn.workerTimeControl
|
||||
(SELECT timed
|
||||
FROM vn.workerTimeControl
|
||||
WHERE userFk = vWorkerFk
|
||||
AND direction IN ('in', 'out')
|
||||
AND timed BETWEEN vTimed - INTERVAL (vWeekScope * 2) SECOND
|
||||
AND vTimed + INTERVAL (vWeekScope * 2) SECOND )
|
||||
UNION
|
||||
AND timed BETWEEN vTimed - INTERVAL vWeekScope SECOND
|
||||
AND vTimed + INTERVAL vWeekScope SECOND)
|
||||
UNION
|
||||
(SELECT vTimed)
|
||||
), wtcGap AS(
|
||||
SELECT timed,
|
||||
TIMESTAMPDIFF(SECOND, LAG(timed) OVER (ORDER BY timed), timed) gap
|
||||
TIMESTAMPDIFF(SECOND, LAG(timed) OVER (ORDER BY timed), timed) gap
|
||||
FROM wtc
|
||||
ORDER BY timed
|
||||
), wtcBreak AS(
|
||||
), wtcBreak AS(
|
||||
SELECT timed,
|
||||
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
|
||||
ORDER BY timed
|
||||
), wtcBreakCounter AS(
|
||||
|
@ -270,8 +278,8 @@ BEGIN
|
|||
SUM(hasShortBreak) OVER (ORDER BY timed) breakCounter ,
|
||||
LEAD(hasLongBreak) OVER (ORDER BY timed) nextHasLongBreak
|
||||
FROM wtcBreak
|
||||
)SELECT TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkLongCycle OR
|
||||
(TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkShortCycle
|
||||
)SELECT TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkLongCycle OR
|
||||
(TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkShortCycle
|
||||
AND NOT SUM(IFNULL(nextHasLongBreak, 1)))
|
||||
hasError INTO vIsError
|
||||
FROM wtcBreakCounter
|
||||
|
|
Loading…
Reference in New Issue