From dd17b2c05d52ef2cd407bc4673ad792262893d19 Mon Sep 17 00:00:00 2001 From: guillermo Date: Wed, 31 Jan 2024 09:04:30 +0100 Subject: [PATCH] feat: refs #6235 Added device in clockIn --- .../procedures/workerTimeControl_clockIn.sql | 36 ++++++++++--------- db/versions/10853-grayOak/00-firstScript.sql | 1 + db/versions/10853-grayOak/00-secondScript.sql | 1 + loopback/locale/es.json | 2 +- .../methods/worker-time-control/clockIn.js | 17 ++++++--- .../back/methods/worker-time-control/login.js | 7 ++-- .../back/models/worker-time-control.json | 5 ++- 7 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 db/versions/10853-grayOak/00-firstScript.sql create mode 100644 db/versions/10853-grayOak/00-secondScript.sql diff --git a/db/routines/vn/procedures/workerTimeControl_clockIn.sql b/db/routines/vn/procedures/workerTimeControl_clockIn.sql index 2d790c301..23739a515 100644 --- a/db/routines/vn/procedures/workerTimeControl_clockIn.sql +++ b/db/routines/vn/procedures/workerTimeControl_clockIn.sql @@ -2,21 +2,23 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`workerTimeControl_clockIn`( vWorkerFk INT, vTimed DATETIME, - vDirection VARCHAR(10) + vDirection VARCHAR(10), + vDevice VARCHAR(255) ) BEGIN /** - * Verifica si el empleado puede fichar - * @param vWorkerFk Identificador del trabajador - * @param vTimed valor de la fichada, IF vTimed IS NULL vTimed = NOW - * @param vDirection solo se pueden pasa los valores del campo - * workerTimeControl.direction ENUM('in', 'out', 'middle') - * @return Si todo es correcto, retorna el número de id la tabla workerTimeControl. - * Si hay algún problema, devuelve el mesaje que se debe mostrar al usuario - * Solo retorna el primer problema, en caso de no ocurrir ningún error se añadirá - * fichada a la tabla vn.workerTimeControl - */ - +* Verifica si el empleado puede fichar +* @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 +* workerTimeControl.direction ENUM('in', 'out', 'middle') +* @param vDevice Dispositivo en el que se ha fichado +* @return Si todo es correcto, retorna el número de id la tabla workerTimeControl. +* Si hay algún problema, devuelve el mesaje que se debe mostrar al usuario +* 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; @@ -269,16 +271,16 @@ BEGIN GROUP BY breakCounter HAVING hasError LIMIT 1; - + IF vIsError THEN SET vErrorCode = 'BREAK_WEEK'; CALL util.throw(vErrorCode); END IF; END IF; - - -- SE PERMITE FICHAR - INSERT INTO workerTimeControl(userFk, timed, direction, `manual`) - VALUES(vWorkerFk, vTimed, vDirection, vIsManual); + + -- Se permite fichar + INSERT INTO workerTimeControl(userFk, timed, direction, device, `manual`) + VALUES(vWorkerFk, vTimed, vDirection, vDevice, vIsManual); SELECT LAST_INSERT_ID() id; diff --git a/db/versions/10853-grayOak/00-firstScript.sql b/db/versions/10853-grayOak/00-firstScript.sql new file mode 100644 index 000000000..4b07ce72d --- /dev/null +++ b/db/versions/10853-grayOak/00-firstScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.workerTimeControl ADD device varchar(255) DEFAULT NULL NULL COMMENT 'Dispositivo en el que se ha fichado' AFTER `order`; \ No newline at end of file diff --git a/db/versions/10853-grayOak/00-secondScript.sql b/db/versions/10853-grayOak/00-secondScript.sql new file mode 100644 index 000000000..43a98b837 --- /dev/null +++ b/db/versions/10853-grayOak/00-secondScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.workerTimeControl CHANGE direction direction enum('in','out','middle') CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT 'middle' NULL AFTER timed; diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 5555ef8b0..0a0865bdf 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -333,7 +333,7 @@ "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}", "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada", "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada", - "Incorrect pin": "Pin incorrecto.", + "Incorrect pin": "Pin incorrecto", "You already have the mailAlias": "Ya tienes este alias de correo", "The alias cant be modified": "Este alias de correo no puede ser modificado", "No tickets to invoice": "No hay tickets para facturar" diff --git a/modules/worker/back/methods/worker-time-control/clockIn.js b/modules/worker/back/methods/worker-time-control/clockIn.js index 44e0c547a..379e7484d 100644 --- a/modules/worker/back/methods/worker-time-control/clockIn.js +++ b/modules/worker/back/methods/worker-time-control/clockIn.js @@ -18,7 +18,10 @@ module.exports = Self => { arg: 'direction', type: 'string' }, - + { + arg: 'device', + type: 'string' + }, ], http: { path: `/clockIn`, @@ -30,13 +33,19 @@ module.exports = Self => { } }); - Self.clockIn = async(workerFk, timed, direction, options) => { + Self.clockIn = async(workerFk, timed, direction, device, options) => { const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); - const query = 'CALL vn.workerTimeControl_clockIn(?, ?, ?)'; - const [[response]] = await Self.rawSql(query, [workerFk, timed, direction], myOptions); + const query = 'CALL vn.workerTimeControl_clockIn(?, ?, ?, ?)'; + const [[response]] = await Self.rawSql(query, [ + workerFk, + timed, + direction, + device || null], + myOptions); + if (response && response.error) throw new UserError(response.error); diff --git a/modules/worker/back/methods/worker-time-control/login.js b/modules/worker/back/methods/worker-time-control/login.js index 9aa4bd145..6024a689a 100644 --- a/modules/worker/back/methods/worker-time-control/login.js +++ b/modules/worker/back/methods/worker-time-control/login.js @@ -1,7 +1,7 @@ const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { - Self.remoteMethodCtx('login', { + Self.remoteMethod('login', { description: 'Consult the user\'s information and the buttons that must be activated after logging in', accessType: 'READ', accepts: [ @@ -21,15 +21,14 @@ module.exports = Self => { } }); - Self.login = async(ctx, pin, options) => { + Self.login = async(pin, options) => { const myOptions = {}; - const $t = ctx.req.__; if (typeof options == 'object') Object.assign(myOptions, options); const query = `CALL vn.workerTimeControl_login(?)`; const [[user]] = await Self.rawSql(query, [pin], myOptions); - if (!user) throw new UserError($t('Incorrect pin')); + if (!user) throw new UserError('Incorrect pin'); return user; }; }; diff --git a/modules/worker/back/models/worker-time-control.json b/modules/worker/back/models/worker-time-control.json index c40989d84..e2b74875a 100644 --- a/modules/worker/back/models/worker-time-control.json +++ b/modules/worker/back/models/worker-time-control.json @@ -14,13 +14,16 @@ "timed": { "type": "date" }, + "direction": { + "type": "string" + }, "manual": { "type": "boolean" }, "order": { "type": "number" }, - "direction": { + "device": { "type": "string" }, "isSendMail": {