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/routines/vn2008/views/tr2.sql b/db/routines/vn2008/views/tr2.sql deleted file mode 100644 index e3b42c59a..000000000 --- a/db/routines/vn2008/views/tr2.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`tr2` -AS SELECT `vn`.`travel`.`id` AS `id`, - `vn`.`travel`.`shipped` AS `shipped`, - `vn`.`travel`.`shipmentHour` AS `shipmentHour`, - `vn`.`travel`.`landed` AS `landed`, - `vn`.`travel`.`landingHour` AS `landingHour`, - `vn`.`travel`.`warehouseInFk` AS `warehouseInFk`, - `vn`.`travel`.`warehouseOutFk` AS `warehouseOutFk`, - `vn`.`travel`.`agencyModeFk` AS `agencyFk`, - `vn`.`travel`.`ref` AS `ref`, - `vn`.`travel`.`isDelivered` AS `isDelivered`, - `vn`.`travel`.`isReceived` AS `isReceived`, - `vn`.`travel`.`m3` AS `m3`, - `vn`.`travel`.`kg` AS `kg`, - `vn`.`travel`.`cargoSupplierFk` AS `cargoSupplierFk`, - `vn`.`travel`.`totalEntries` AS `totalEntries` -FROM `vn`.`travel` diff --git a/db/routines/vn2008/views/travel_thermograph.sql b/db/routines/vn2008/views/travel_thermograph.sql deleted file mode 100644 index e6f5ce954..000000000 --- a/db/routines/vn2008/views/travel_thermograph.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`travel_thermograph` -AS SELECT `tt`.`thermographFk` AS `thermograph_id`, - `tt`.`created` AS `odbc_date`, - `tt`.`warehouseFk` AS `warehouse_id`, - `tt`.`travelFk` AS `travel_id`, - `tt`.`temperatureFk` AS `temperature`, - `tt`.`result` AS `result`, - `tt`.`dmsFk` AS `gestdoc_id` -FROM `vn`.`travelThermograph` `tt` diff --git a/db/routines/vn2008/views/v_account.sql b/db/routines/vn2008/views/v_account.sql deleted file mode 100644 index 51333f639..000000000 --- a/db/routines/vn2008/views/v_account.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_account` -AS SELECT `a`.`id` AS `user_id` -FROM `account`.`account` `a` diff --git a/db/routines/vn2008/views/v_analisis_ventas.sql b/db/routines/vn2008/views/v_analisis_ventas.sql deleted file mode 100644 index d95e5d274..000000000 --- a/db/routines/vn2008/views/v_analisis_ventas.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_analisis_ventas` -AS SELECT `bi`.`analisis_ventas`.`Familia` AS `Familia`, - `bi`.`analisis_ventas`.`Reino` AS `Reino`, - `bi`.`analisis_ventas`.`Comercial` AS `Comercial`, - `bi`.`analisis_ventas`.`Comprador` AS `Comprador`, - `bi`.`analisis_ventas`.`Provincia` AS `Provincia`, - `bi`.`analisis_ventas`.`almacen` AS `almacen`, - `bi`.`analisis_ventas`.`Año` AS `Año`, - `bi`.`analisis_ventas`.`Mes` AS `Mes`, - `bi`.`analisis_ventas`.`Semana` AS `Semana`, - `bi`.`analisis_ventas`.`Vista` AS `Vista`, - `bi`.`analisis_ventas`.`Importe` AS `Importe` -FROM `bi`.`analisis_ventas` diff --git a/db/routines/vn2008/views/v_barcodes.sql b/db/routines/vn2008/views/v_barcodes.sql deleted file mode 100644 index b86af8c6b..000000000 --- a/db/routines/vn2008/views/v_barcodes.sql +++ /dev/null @@ -1,21 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_barcodes` -AS SELECT `Articles`.`Id_Article` AS `code`, - `Articles`.`Id_Article` AS `Id_Article` -FROM `vn2008`.`Articles` -UNION ALL -SELECT `barcodes`.`code` AS `code`, - `barcodes`.`Id_Article` AS `Id_Article` -FROM `vn2008`.`barcodes` -UNION ALL -SELECT `c`.`Id_Compra` AS `Id_Compra`, - `c`.`Id_Article` AS `Id_Article` -FROM ( - ( - `vn2008`.`Compres` `c` - JOIN `vn2008`.`Entradas` `e` ON(`c`.`Id_Entrada` = `e`.`Id_Entrada`) - ) - JOIN `vn2008`.`travel` `tr` ON(`tr`.`id` = `e`.`travel_id`) - ) -WHERE `tr`.`landing` >= `util`.`VN_CURDATE`() + INTERVAL -15 DAY diff --git a/db/routines/vn2008/views/v_departure_limit.sql b/db/routines/vn2008/views/v_departure_limit.sql deleted file mode 100644 index 39478a54a..000000000 --- a/db/routines/vn2008/views/v_departure_limit.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_departure_limit` -AS SELECT `cache`.`departure_limit`.`warehouse_id` AS `warehouse_id`, - `cache`.`departure_limit`.`fecha` AS `fecha`, - `cache`.`departure_limit`.`hora` AS `hora`, - `cache`.`departure_limit`.`minSpeed` AS `minSpeed` -FROM `cache`.`departure_limit` diff --git a/db/routines/vn2008/views/v_descuadre_bionic.sql b/db/routines/vn2008/views/v_descuadre_bionic.sql deleted file mode 100644 index 446c10694..000000000 --- a/db/routines/vn2008/views/v_descuadre_bionic.sql +++ /dev/null @@ -1,41 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_descuadre_bionic` -AS SELECT `t`.`Id_Ticket` AS `Id_Ticket`, - `t`.`Alias` AS `Alias`, - `m`.`Concepte` AS `Concepte`, - sum(`mc`.`Valor`) AS `suma_componente`, - `m`.`Preu` AS `Preu`, - `m`.`Descuento` AS `Descuento`, - `m`.`Preu` * (100 - `m`.`Descuento`) / 100 - sum(`mc`.`Valor`) AS `diferencia`, - `t`.`Fecha` AS `Fecha`, - `m`.`Preu` > 0 - AND `tp`.`reino_id` <> 6 - AND `a`.`tipo_id` NOT IN (7, 115) AS `benvenut` -FROM ( - ( - ( - ( - ( - ( - `vn2008`.`Movimientos` `m` - JOIN `vn2008`.`Tickets` `t` ON(`m`.`Id_Ticket` = `t`.`Id_Ticket`) - ) - JOIN `vn2008`.`Clientes` `c` ON(`t`.`Id_Cliente` = `c`.`id_cliente`) - ) - JOIN `vn2008`.`warehouse` `w` ON(`w`.`id` = `t`.`warehouse_id`) - ) - JOIN `vn2008`.`Articles` `a` ON(`m`.`Id_Article` = `a`.`Id_Article`) - ) - JOIN `vn2008`.`Tipos` `tp` ON(`a`.`tipo_id` = `tp`.`tipo_id`) - ) - LEFT JOIN `vn2008`.`Movimientos_componentes` `mc` ON(`m`.`Id_Movimiento` = `mc`.`Id_Movimiento`) - ) -WHERE `t`.`Fecha` >= '2015-09-01' - AND `t`.`empresa_id` IN (442, 791, 567) - AND `w`.`reserve` <> 0 - AND `c`.`real` <> 0 - AND `tp`.`reino_id` <> 6 -GROUP BY `m`.`Id_Movimiento` -HAVING abs(`diferencia`) > 0.01 - OR `diferencia` IS NULL diff --git a/db/routines/vn2008/views/v_inter.sql b/db/routines/vn2008/views/v_inter.sql deleted file mode 100644 index 7701c8471..000000000 --- a/db/routines/vn2008/views/v_inter.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_inter` -AS SELECT `tt`.`id` AS `inter_id`, - `tt`.`stateFk` AS `state_id`, - `tt`.`notes` AS `nota`, - `tt`.`created` AS `odbc_date`, - `tt`.`ticketFk` AS `Id_Ticket`, - `tt`.`userFk` AS `Id_Trabajador`, - `tt`.`supervisorFk` AS `Id_supervisor` -FROM `vn`.`ticketTracking` `tt` diff --git a/db/routines/vn2008/views/v_miriam.sql b/db/routines/vn2008/views/v_miriam.sql deleted file mode 100644 index 70af88943..000000000 --- a/db/routines/vn2008/views/v_miriam.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_miriam` -AS SELECT `M`.`Id_Article` AS `Id_Article`, - `M`.`Concepte` AS `Concepte`, - `M`.`Cantidad` AS `Cantidad`, - `M`.`Preu` AS `Preu`, - `M`.`Descuento` AS `Descuento`, - `T`.`Fecha` AS `Fecha`, - `T`.`Id_Cliente` AS `Id_Cliente`, - `M`.`Cantidad` * `M`.`Preu` * (100 - `M`.`Descuento`) / 100 AS `Importe` -FROM ( - ( - ( - `vn2008`.`Tickets` `T` - JOIN `vn2008`.`Movimientos` `M` ON(`T`.`Id_Ticket` = `M`.`Id_Ticket`) - ) - JOIN `vn2008`.`Articles` `A` ON(`M`.`Id_Article` = `A`.`Id_Article`) - ) - JOIN `vn2008`.`Tipos` `TP` ON(`A`.`tipo_id` = `TP`.`tipo_id`) - ) -WHERE `T`.`Fecha` >= '2011-01-01' - AND `A`.`tipo_id` = 7 diff --git a/db/routines/vn2008/views/v_price_fixed.sql b/db/routines/vn2008/views/v_price_fixed.sql deleted file mode 100644 index db48e5a46..000000000 --- a/db/routines/vn2008/views/v_price_fixed.sql +++ /dev/null @@ -1,35 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`v_price_fixed` -AS SELECT `pf`.`warehouse_id` AS `warehouse_id`, - `pf`.`item_id` AS `item_id`, - `pf`.`rate_0` AS `rate_0`, - `pf`.`rate_1` AS `rate_1`, - `pf`.`rate_2` AS `rate_2`, - `pf`.`rate_3` AS `rate_3`, - `pf`.`date_start` AS `date_start`, - `pf`.`date_end` AS `date_end`, - `pf`.`bonus` AS `bonus`, - `pf`.`grouping` AS `grouping`, - `pf`.`Packing` AS `Packing`, - `pf`.`caja` AS `caja` -FROM `vn2008`.`price_fixed` `pf` -WHERE `pf`.`warehouse_id` < 1000 -UNION ALL -SELECT `wg`.`warehouse_id` AS `warehouse_id`, - `pf`.`item_id` AS `item_id`, - `pf`.`rate_0` AS `rate_0`, - `pf`.`rate_1` AS `rate_1`, - `pf`.`rate_2` AS `rate_2`, - `pf`.`rate_3` AS `rate_3`, - `pf`.`date_start` AS `date_start`, - `pf`.`date_end` AS `date_end`, - `pf`.`bonus` AS `bonus`, - `pf`.`grouping` AS `grouping`, - `pf`.`Packing` AS `Packing`, - `pf`.`caja` AS `caja` -FROM ( - `vn2008`.`price_fixed` `pf` - JOIN `vn2008`.`warehouse_group` `wg` - ) -WHERE `wg`.`warehouse_alias_id` + 1000 = `pf`.`warehouse_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 7b51527d4..10a79e01e 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/addTimeEntry.js b/modules/worker/back/methods/worker-time-control/addTimeEntry.js index 5dbac51ca..86ef12c49 100644 --- a/modules/worker/back/methods/worker-time-control/addTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/addTimeEntry.js @@ -46,6 +46,6 @@ module.exports = Self => { if (!isSubordinate || (isHimself && !isTeamBoss)) throw new UserError(`You don't have enough privileges`); - return Self.clockIn(workerId, args.timed, args.direction, myOptions); + return Self.clockIn(workerId, args.timed, args.direction, null, myOptions); }; }; diff --git a/modules/worker/back/methods/worker-time-control/clockIn.js b/modules/worker/back/methods/worker-time-control/clockIn.js index 44e0c547a..2bc3f16ac 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/methods/worker-time-control/specs/clockIn.spec.js b/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js index 9cd3ed1c0..ff4cac7b7 100644 --- a/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js +++ b/modules/worker/back/methods/worker-time-control/specs/clockIn.spec.js @@ -30,7 +30,7 @@ describe('workerTimeControl clockIn()', () => { try { const options = {transaction: tx}; - await models.WorkerTimeControl.clockIn(workerId, inTime, 'in', options); + await models.WorkerTimeControl.clockIn(workerId, inTime, 'in', 'test', options); const isClockIn = await models.WorkerTimeControl.findOne({ where: { userFk: workerId diff --git a/modules/worker/back/methods/worker-time-control/specs/login.spec.js b/modules/worker/back/methods/worker-time-control/specs/login.spec.js index d9f2dbb39..e125a876d 100644 --- a/modules/worker/back/methods/worker-time-control/specs/login.spec.js +++ b/modules/worker/back/methods/worker-time-control/specs/login.spec.js @@ -3,29 +3,15 @@ const LoopBackContext = require('loopback-context'); const UserError = require('vn-loopback/util/user-error'); describe('workerTimeControl login()', () => { - let ctx; - beforeAll(async() => { - ctx = { - accessToken: {userId: 9}, - req: { - headers: {origin: 'http://localhost'}, - __: key => key - } - }; - spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ - active: ctx - }); - }); - it('should correctly login', async() => { - const response = await models.WorkerTimeControl.login(ctx, 9); + const response = await models.WorkerTimeControl.login(9); expect(response.name).toBe('developer'); }); it('should throw UserError if pin is not provided', async() => { try { - await models.WorkerTimeControl.login(ctx); + await models.WorkerTimeControl.login(); } catch (error) { expect(error).toBeInstanceOf(UserError); expect(error.message).toBe('Incorrect pin'); 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": { diff --git a/package.json b/package.json index 041bd39df..e68b40e4c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "node-ssh": "^11.0.0", "object-diff": "0.0.4", "object.pick": "^1.3.0", - "puppeteer": "^20.3.0", + "puppeteer": "^21.10.0", "read-chunk": "^3.2.0", "require-yaml": "0.0.1", "smbhash": "0.0.1",