#1891 tests for worker time control function

This commit is contained in:
Carlos Jimenez Ruiz 2019-11-21 09:19:03 +01:00
parent d29f86c914
commit 52a8d5e0c2
4 changed files with 87 additions and 19 deletions

View File

@ -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 ;

View File

@ -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

View File

@ -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;
};
};

View File

@ -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();
});