This commit is contained in:
parent
dae43bb9b0
commit
340e7b8495
|
@ -1,5 +1,4 @@
|
|||
const UserError = require('vn-loopback/util/user-error');
|
||||
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
|
||||
|
||||
module.exports = Self => {
|
||||
Self.remoteMethodCtx('absences', {
|
||||
|
@ -36,7 +35,7 @@ module.exports = Self => {
|
|||
}
|
||||
});
|
||||
|
||||
Self.absences = async(ctx, workerFk, started, ended) => {
|
||||
Self.absences = async(ctx, workerFk, yearStarted, yearEnded) => {
|
||||
const models = Self.app.models;
|
||||
const isSubordinate = await models.Worker.isSubordinate(ctx, workerFk);
|
||||
|
||||
|
@ -53,7 +52,7 @@ module.exports = Self => {
|
|||
},
|
||||
where: {
|
||||
workerFk: workerFk,
|
||||
dated: {between: [started, ended]}
|
||||
dated: {between: [yearStarted, yearEnded]}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -66,7 +65,7 @@ module.exports = Self => {
|
|||
});
|
||||
|
||||
// Get active contracts on current year
|
||||
const year = started.getFullYear();
|
||||
const year = yearStarted.getFullYear();
|
||||
const contracts = await models.WorkerLabour.find({
|
||||
include: [{
|
||||
relation: 'holidays',
|
||||
|
@ -87,7 +86,7 @@ module.exports = Self => {
|
|||
relation: 'type'
|
||||
}],
|
||||
where: {
|
||||
dated: {between: [started, ended]}
|
||||
dated: {between: [yearStarted, yearEnded]}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +96,7 @@ module.exports = Self => {
|
|||
and: [
|
||||
{workerFk: workerFk},
|
||||
{or: [{
|
||||
ended: {gte: [started]}
|
||||
ended: {gte: [yearStarted]}
|
||||
}, {ended: null}]}
|
||||
],
|
||||
|
||||
|
@ -106,13 +105,7 @@ module.exports = Self => {
|
|||
|
||||
// Get number of total holidays
|
||||
contracts.forEach(contract => {
|
||||
let totalHolidays = contract.holidays().days;
|
||||
|
||||
if (contract.started && contract.ended)
|
||||
totalHolidays = getHolidaysByContract(started, contract);
|
||||
|
||||
calendar.totalHolidays += totalHolidays;
|
||||
|
||||
calendar.totalHolidays += getHolidaysByContract(contract, yearEnded);
|
||||
|
||||
let holidayList = contract.workCenter().holidays();
|
||||
for (let day of holidayList) {
|
||||
|
@ -126,19 +119,18 @@ module.exports = Self => {
|
|||
return [calendar, absences, holidays];
|
||||
};
|
||||
|
||||
function getHolidaysByContract(started, contract) {
|
||||
function getHolidaysByContract(contract, endOfYear) {
|
||||
const dayTimestamp = 1000 * 60 * 60 * 24;
|
||||
const endedTime = contract.ended.getTime();
|
||||
|
||||
const started = contract.started;
|
||||
const ended = contract.ended;
|
||||
const startedTime = started.getTime();
|
||||
const endedTime = ended && ended.getTime() || endOfYear;
|
||||
|
||||
const contractDays = Math.floor((endedTime - startedTime) / dayTimestamp);
|
||||
|
||||
if (contractDays < 365) {
|
||||
let holidays = contract.holidays().days * (contractDays + 1) / 365;
|
||||
let integerPart = parseInt(holidays);
|
||||
let decimalPart = holidays - integerPart;
|
||||
let decimal = decimalPart >= 0.5 ? 0.5 : 0;
|
||||
|
||||
holidays = integerPart + decimal;
|
||||
let holidays = Math.round(2 * contract.holidays().days * (contractDays + 1) / 365) / 2;
|
||||
|
||||
return holidays;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ describe('Worker absences()', () => {
|
|||
expect(sixthType).toEqual('Holidays');
|
||||
});
|
||||
|
||||
it(`should fire the worker 106 on July and see he/she has 13.5`, async() => {
|
||||
it(`should fire the worker 106 on July and see he/she has 14`, async() => {
|
||||
const firedWorker = await app.models.WorkerLabour.findById(106);
|
||||
|
||||
const endedDate = new Date();
|
||||
|
@ -71,7 +71,7 @@ describe('Worker absences()', () => {
|
|||
let calendar = result[0];
|
||||
let absences = result[1];
|
||||
|
||||
expect(calendar.totalHolidays).toEqual(13.5);
|
||||
expect(calendar.totalHolidays).toEqual(14);
|
||||
expect(calendar.holidaysEnjoyed).toEqual(5);
|
||||
|
||||
let firstType = absences[0].absenceType().name;
|
||||
|
@ -81,7 +81,7 @@ describe('Worker absences()', () => {
|
|||
expect(sixthType).toEqual('Holidays');
|
||||
});
|
||||
|
||||
it(`should fire the worker 106 on March and see he/she has 6.5`, async() => {
|
||||
it(`should fire the worker 106 on March and see he/she has 7`, async() => {
|
||||
const firedWorker = await app.models.WorkerLabour.findById(106);
|
||||
|
||||
const endedDate = new Date();
|
||||
|
@ -109,7 +109,7 @@ describe('Worker absences()', () => {
|
|||
let calendar = result[0];
|
||||
let absences = result[1];
|
||||
|
||||
expect(calendar.totalHolidays).toEqual(6.5);
|
||||
expect(calendar.totalHolidays).toEqual(7);
|
||||
expect(calendar.holidaysEnjoyed).toEqual(5);
|
||||
|
||||
let firstType = absences[0].absenceType().name;
|
||||
|
|
|
@ -14,12 +14,5 @@
|
|||
"name": {
|
||||
"type": "String"
|
||||
}
|
||||
},
|
||||
"relations": {
|
||||
"father": {
|
||||
"type": "belongsTo",
|
||||
"model": "Department",
|
||||
"foreignKey": "fatherFk"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue