From 21bd625b3bfde0c285d933ca252e7547c6af67cc Mon Sep 17 00:00:00 2001 From: vicent <vicent@verdnatura.es> Date: Tue, 30 Nov 2021 12:31:02 +0100 Subject: [PATCH] add exceprion to half day absence --- .../worker-time-control/addTimeEntry.js | 19 +++++++++++-------- .../back/methods/worker/createAbsence.js | 8 +++++--- .../worker/specs/createAbsence.spec.js | 4 ++-- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/modules/worker/back/methods/worker-time-control/addTimeEntry.js b/modules/worker/back/methods/worker-time-control/addTimeEntry.js index 62269afa33..324b8cf26f 100644 --- a/modules/worker/back/methods/worker-time-control/addTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/addTimeEntry.js @@ -46,21 +46,24 @@ module.exports = Self => { if (isSubordinate === false || (isSubordinate && isHimself && !isTeamBoss)) throw new UserError(`You don't have enough privileges`); - const timed = new Date(args.timed); - timed.setHours(0, 0, 0, 0); + const minTime = new Date(args.timed); + minTime.setHours(0, 0, 0, 0); query = `SELECT * FROM vn.workerLabour WHERE workerFk = ? AND (ended >= ? OR ended IS NULL);`; - const [workerLabour] = await Self.rawSql(query, [workerId, timed]); - const hasAbsence = await models.Calendar.findOne({ + const [workerLabour] = await Self.rawSql(query, [workerId, minTime]); + const absence = await models.Calendar.findOne({ where: { businessFk: workerLabour.businessFk, - dated: timed + dated: minTime } }); + if (absence) { + const absenceType = await models.AbsenceType.findById(absence.dayOffTypeFk, null, myOptions); + const isNotHalfAbsence = absenceType.id != 6 && absenceType.id != 15 && absenceType.id != 21; - if (hasAbsence) - throw new UserError(`The worker has a marked absence that day`); - + if (isNotHalfAbsence) + throw new UserError(`The worker has a marked absence that day`); + } return models.WorkerTimeControl.create({ userFk: workerId, direction: args.direction, diff --git a/modules/worker/back/methods/worker/createAbsence.js b/modules/worker/back/methods/worker/createAbsence.js index a3b26a7307..bec7d64f4b 100644 --- a/modules/worker/back/methods/worker/createAbsence.js +++ b/modules/worker/back/methods/worker/createAbsence.js @@ -71,10 +71,12 @@ module.exports = Self => { LIMIT 1;`; const [hasHoursRecorded] = await Self.rawSql(query, [args.id, args.dated, args.dated]); - if (hasHoursRecorded) + const isNotHalfAbsence = args.absenceTypeId != 6 && args.absenceTypeId != 15 && args.absenceTypeId != 21; + + if (hasHoursRecorded && isNotHalfAbsence) throw new UserError(`The worker has hours recorded that day`); - const result = await Self.rawSql( + const [result] = await Self.rawSql( `SELECT COUNT(*) halfHolidayCounter FROM vn.calendar c JOIN postgresql.business b ON b.business_id = c.businessFk @@ -85,7 +87,7 @@ module.exports = Self => { AND c.dated BETWEEN util.firstDayOfYear(CURDATE()) AND LAST_DAY(DATE_ADD(NOW(), INTERVAL 12-MONTH(NOW()) MONTH))`, [args.id]); - const hasHalfHoliday = result[0].halfHolidayCounter > 0; + const hasHalfHoliday = result.halfHolidayCounter > 0; const isHalfHoliday = args.absenceTypeId == 6; if (isHalfHoliday && hasHalfHoliday) diff --git a/modules/worker/back/methods/worker/specs/createAbsence.spec.js b/modules/worker/back/methods/worker/specs/createAbsence.spec.js index e9f6b9d9c9..c9bc56ae6a 100644 --- a/modules/worker/back/methods/worker/specs/createAbsence.spec.js +++ b/modules/worker/back/methods/worker/specs/createAbsence.spec.js @@ -103,13 +103,13 @@ describe('Worker createAbsence()', () => { expect(error.message).toEqual(`Cannot add more than one '1/2 day vacation'`); }); - it(`should throw an error when adding a absence if the worker has hours recorded that day`, async() => { + it(`should throw an error when adding a absence if the worker has hours recorded that day and not is a half absence`, async() => { const ctx = { req: {accessToken: {userId: 19}}, args: { id: 1106, businessFk: 1106, - absenceTypeId: 6, + absenceTypeId: 1, dated: new Date() } };