From 52a8d5e0c2bcb2300a1b0cb5a6323115e76c3266 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Thu, 21 Nov 2019 09:19:03 +0100 Subject: [PATCH] #1891 tests for worker time control function --- .../00-workerTimeControlAdd.sql | 73 +++++++++++++++++++ db/dump/fixtures.sql | 10 +-- .../worker-time-control/addTimeEntry.js | 4 +- .../specs/timeEntry.spec.js | 19 ++--- 4 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 db/changes/10110-postCampaign/00-workerTimeControlAdd.sql diff --git a/db/changes/10110-postCampaign/00-workerTimeControlAdd.sql b/db/changes/10110-postCampaign/00-workerTimeControlAdd.sql new file mode 100644 index 0000000000..c2091ff830 --- /dev/null +++ b/db/changes/10110-postCampaign/00-workerTimeControlAdd.sql @@ -0,0 +1,73 @@ +DROP function IF EXISTS `vn`.`workerTimeControl_add`; + +DELIMITER $$ +CREATE DEFINER=`root`@`%` FUNCTION `vn`.`workerTimeControl_add`( vUserFk INT, vWarehouseFk INT, vTimed DATETIME, vIsManual BOOL) RETURNS int(11) + DETERMINISTIC +BEGIN + DECLARE vDirection VARCHAR(6); + DECLARE vLastIn DATETIME; + DECLARE vDayStayMax INT; + DECLARE vHasDirectionOut INT; + DECLARE vLastInsertedId INT; + + SELECT dayStayMax INTO vDayStayMax + FROM workerTimeControlParams; + + SELECT timeWorkerControl_getDirection(vUserFk,vTimed) INTO vDirection; + + IF vDirection = 'out' THEN + + SELECT MAX(timed) INTO vLastIn + FROM workerTimeControl + WHERE userFk = vUserFk + AND direction = 'in' + AND timed < vTimed; + + UPDATE workerTimeControl wtc + SET wtc.direction = 'middle' + WHERE userFk = vUserFk + AND direction = 'out' + AND timed BETWEEN vLastIn AND vTimed; + + ELSE IF vDirection = 'in' THEN + + SELECT COUNT(*) INTO vHasDirectionOut + FROM workerTimeControl wtc + WHERE userFk = vUserFk + AND direction = 'out' + AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed); + + UPDATE workerTimeControl wtc + SET wtc.direction = IF (vHasDirectionOut,'middle','out') + WHERE userFk = vUserFk + AND direction = 'in' + AND timed BETWEEN vTimed AND TIMESTAMPADD(SECOND, 50400, vTimed); + + END IF; + END IF; + + INSERT INTO workerTimeControl(userFk, timed, warehouseFk, direction, manual) + VALUES(vUserFk, vTimed, vWarehouseFk, vDirection, vIsManual); + + SET vLastInsertedId = LAST_INSERT_ID(); + + CALL workerTimeControlSOWP(vUserFk, vTimed); + + RETURN vLastInsertedId; +END$$ + +DELIMITER ; + + + +DROP procedure IF EXISTS `vn`.`workerTimeControl_add`; + +DELIMITER $$ +CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`workerTimeControl_add`(IN vUserFk INT, IN vWarehouseFk INT, IN vTimed DATETIME, IN vIsManual BOOL) +BEGIN + + + SELECT workerTimeControl_add(vUserFk,vWarehouseFk,vTimed,vIsManual); +END$$ + +DELIMITER ; \ No newline at end of file diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 21413d3297..ea13c8763c 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -1830,12 +1830,12 @@ INSERT INTO `vn`.`zoneEvent`(`zoneFk`, `type`, `dated`) (8, 'day', DATE_ADD(CURDATE(), INTERVAL +5 DAY)), (8, 'day', DATE_ADD(CURDATE(), INTERVAL +6 DAY)); -INSERT INTO `vn`.`workerTimeControl`(`userFk`,`timed`,`manual`, `direction`) +INSERT INTO `vn`.`workerTimeControl`(`userFk`, `timed`, `order`, `manual`, `direction`) VALUES - (106, CONCAT(CURDATE(), ' 07:00'), TRUE, 'in'), - (106, CONCAT(CURDATE(), ' 10:00'), TRUE, 'middle'), - (106, CONCAT(CURDATE(), ' 10:10'), TRUE, 'middle'), - (106, CONCAT(CURDATE(), ' 15:00'), TRUE, 'out'); + (106, CONCAT(CURDATE(), ' 07:00'), 1, TRUE, 'in'), + (106, CONCAT(CURDATE(), ' 10:00'), 2, TRUE, 'middle'), + (106, CONCAT(CURDATE(), ' 10:10'), 3, TRUE, 'middle'), + (106, CONCAT(CURDATE(), ' 15:00'), 4, TRUE, 'out'); INSERT INTO `vn`.`dmsType`(`id`, `name`, `path`, `readRoleFk`, `writeRoleFk`, `code`) VALUES diff --git a/modules/worker/back/methods/worker-time-control/addTimeEntry.js b/modules/worker/back/methods/worker-time-control/addTimeEntry.js index 6493641511..86030d7133 100644 --- a/modules/worker/back/methods/worker-time-control/addTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/addTimeEntry.js @@ -34,7 +34,9 @@ module.exports = Self => { const subordinate = await Worker.findById(data.workerFk); const timed = new Date(data.timed); - return Self.rawSql('CALL vn.workerTimeControl_add(?, ?, ?, ?)', [ + let [result] = await Self.rawSql('SELECT vn.workerTimeControl_add(?, ?, ?, ?) AS id', [ subordinate.userFk, null, timed, true]); + + return result; }; }; diff --git a/modules/worker/back/methods/worker-time-control/specs/timeEntry.spec.js b/modules/worker/back/methods/worker-time-control/specs/timeEntry.spec.js index bcc15225a0..ff5e13a2d9 100644 --- a/modules/worker/back/methods/worker-time-control/specs/timeEntry.spec.js +++ b/modules/worker/back/methods/worker-time-control/specs/timeEntry.spec.js @@ -1,7 +1,8 @@ const app = require('vn-loopback/server/server'); describe('workerTimeControl addTimeEntry()', () => { - let insertedTime; + let timeEntry; + let createdTimeEntry; it('should fail to add a time entry if the target user is not a subordinate', async() => { let error; @@ -52,11 +53,9 @@ describe('workerTimeControl addTimeEntry()', () => { timed: todayAtSix }; - await app.models.WorkerTimeControl.addTimeEntry(ctx, data); + timeEntry = await app.models.WorkerTimeControl.addTimeEntry(ctx, data); - insertedTime = await app.models.WorkerTimeControl.findOne({where: {timed: data.timed}}); - - let createdTimeEntry = await app.models.WorkerTimeControl.findById(insertedTime.id); + createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeDefined(); }); @@ -66,10 +65,6 @@ describe('workerTimeControl addTimeEntry()', () => { let teamBossId = 13; let ctx = {req: {accessToken: {userId: teamBossId}}}; - let createdTimeEntry = await app.models.WorkerTimeControl.findById(insertedTime.id); - - expect(createdTimeEntry).toBeDefined(); - try { await app.models.WorkerTimeControl.deleteTimeEntry(ctx, createdTimeEntry.id); } catch (e) { @@ -85,14 +80,12 @@ describe('workerTimeControl addTimeEntry()', () => { let HHRRId = 37; let ctx = {req: {accessToken: {userId: HHRRId}}}; - let createdTimeEntry = await app.models.WorkerTimeControl.findById(insertedTime.id); - expect(createdTimeEntry).toBeDefined(); ctx.req.accessToken.userId = HHRRId; - await app.models.WorkerTimeControl.deleteTimeEntry(ctx, insertedTime.id); + await app.models.WorkerTimeControl.deleteTimeEntry(ctx, timeEntry.id); - createdTimeEntry = await app.models.WorkerTimeControl.findById(insertedTime.id); + createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeNull(); });