feat: refs #8139 Added if is campaign
gitea/salix/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Guillermo Bonet 2024-11-14 11:19:21 +01:00
parent cd7ed6987a
commit 2d3ae5ce9e
1 changed files with 26 additions and 27 deletions

View File

@ -7,7 +7,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`workerTimeControl_clo
)
BEGIN
/**
* Verifica si el empleado puede fichar
* Verifica si el empleado puede fichar, en caso de que ficha.
* @param vWorkerFk Identificador del trabajador
* @param vTimed Balor de la fichada, IF vTimed IS NULL vTimed = NOW
* @param vDirection Solo se pueden pasa los valores del campo
@ -18,7 +18,6 @@ BEGIN
* Solo retorna el primer problema, en caso de no ocurrir ningún error se añadirá
* fichada a la tabla vn.workerTimeControl
*/
DECLARE vLastIn DATETIME;
DECLARE vLastOut DATETIME;
DECLARE vNextIn DATETIME;
@ -40,6 +39,7 @@ BEGIN
DECLARE vIsManual BOOLEAN DEFAULT TRUE;
DECLARE vMaxWorkShortCycle INT;
DECLARE vMaxWorkLongCycle INT;
DECLARE vIsCampaing BOOL;
DECLARE EXIT HANDLER FOR SQLSTATE '45000'
BEGIN
@ -75,11 +75,16 @@ BEGIN
SET vDated = DATE(vTimed);
SELECT EXISTS (
SELECT TRUE FROM campaign
WHERE vTimed BETWEEN dated - INTERVAL scopeDays DAY AND dated
) INTO vIsCampaing;
SELECT IF(pc.code = 'driverCE',
wc.dayBreakDriver,
wc.dayBreak),
wc.shortWeekBreak,
wc.longWeekBreak,
IF(vIsCampaing, NULL, wc.longWeekBreak),
wc.weekScope,
wc.dayMaxTime,
wc.maxWorkShortCycle,
@ -121,7 +126,6 @@ BEGIN
CALL util.throw(vErrorCode);
END IF;
-- DIRECCION CORRECTA
CALL workerTimeControl_direction(vWorkerFk, vTimed);
IF (SELECT
@ -139,7 +143,6 @@ BEGIN
SET vIsError = TRUE;
END IF;
IF vIsError THEN
SET vErrorCode = 'WRONG_DIRECTION';
IF(SELECT option1 IS NULL AND option2 IS NULL
@ -150,6 +153,7 @@ BEGIN
CALL util.throw(vErrorCode);
END IF;
DROP TEMPORARY TABLE tmp.workerTimeControlDirection;
-- FICHADAS IMPARES
SELECT timed INTO vLastIn
FROM workerTimeControl
@ -204,11 +208,8 @@ BEGIN
CALL util.throw(vErrorCode);
END IF;
IF (vDirection IN('in', 'out')) THEN
-- VERIFICA MAXIMO TIEMPO DESDE ENTRADA HASTA LA SALIDA
SELECT timed INTO vNextOut
FROM workerTimeControl
WHERE userFk = vWorkerFk
@ -244,7 +245,6 @@ BEGIN
END IF;
-- VERIFICA DESCANSO SEMANAL
WITH wtc AS(
(SELECT timed
FROM vn.workerTimeControl
@ -271,7 +271,7 @@ BEGIN
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
(TIMESTAMPDIFF(SECOND, MIN(timed), MAX(timed)) > vMaxWorkShortCycle
AND NOT SUM(IFNULL(nextHasLongBreak, 1)))
hasError INTO vIsError
FROM wtcBreakCounter
@ -290,6 +290,5 @@ BEGIN
VALUES(vWorkerFk, vTimed, vDirection, vDevice, vIsManual);
SELECT LAST_INSERT_ID() id;
END$$
DELIMITER ;