ref #6065 fetchHours relocated
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Jorge Penadés 2023-09-28 11:36:03 +02:00
parent a7c0949f0e
commit 869bdab7ce
3 changed files with 99 additions and 96 deletions

View File

@ -2,7 +2,7 @@ import ngModule from '../module';
import ModuleCard from 'salix/components/module-card';
class Controller extends ModuleCard {
async reload() {
reload() {
const filter = {
include: [
{
@ -31,12 +31,13 @@ class Controller extends ModuleCard {
}
]
};
const promises = await Promise.all([
this.$http.get(`Workers/${this.$params.id}`, {filter}),
return Promise.all([
this.$http.get(`Workers/${this.$params.id}`, {filter})
.then(res => this.worker = res.data),
this.$http.get(`Workers/${this.$params.id}/activeContract`)
.then(res => this.hasWorkCenter = res.data?.workCenterFk)
]);
this.worker = await promises[0].data;
this.worker.hasWorkCenter = await promises[1].data?.workCenterFk;
}
}

View File

@ -52,6 +52,28 @@ class Controller extends Section {
set worker(value) {
this._worker = value;
this.fetchHours();
}
/**
* Worker hours data
*/
get hours() {
return this._hours;
}
set hours(value) {
this._hours = value;
for (const weekDay of this.weekDays) {
if (value) {
let day = weekDay.dated.getDay();
weekDay.hours = value
.filter(hour => new Date(hour.timed).getDay() == day)
.sort((a, b) => new Date(a.timed) - new Date(b.timed));
} else
weekDay.hours = null;
}
}
/**
@ -87,10 +109,17 @@ class Controller extends Section {
dayIndex.setDate(dayIndex.getDate() + 1);
}
this.fetchHours();
this.getWeekData();
}
set weekTotalHours(totalHours) {
this._weekTotalHours = this.formatHours(totalHours);
}
get weekTotalHours() {
return this._weekTotalHours;
}
getWeekData() {
const filter = {
where: {
@ -101,38 +130,19 @@ class Controller extends Section {
};
this.$http.get('WorkerTimeControlMails', {filter})
.then(res => {
const workerTimeControlMail = res.data;
if (!workerTimeControlMail.length) {
const mail = res.data;
if (!mail.length) {
this.state = null;
return;
}
this.state = workerTimeControlMail[0].state;
this.reason = workerTimeControlMail[0].reason;
this.state = mail[0].state;
this.reason = mail[0].reason;
});
}
/**
* Worker hours data
*/
get hours() {
return this._hours;
}
fetchHours() {
if (!this.worker || !this.date) return;
set hours(value) {
this._hours = value;
for (const weekDay of this.weekDays) {
if (value) {
let day = weekDay.dated.getDay();
weekDay.hours = value
.filter(hour => new Date(hour.timed).getDay() == day)
.sort((a, b) => new Date(a.timed) - new Date(b.timed));
} else
weekDay.hours = null;
}
}
async fetchHours() {
const params = {workerFk: this.$params.id};
const filter = {
where: {and: [
@ -140,62 +150,11 @@ class Controller extends Section {
{timed: {lte: this.ended}}
]}
};
await this.$.model.applyFilter(filter, params);
if (!this.worker.hasWorkCenter) return;
this.$.model.applyFilter(filter, params).then(() => {
if (!this.card.hasWorkCenter) return;
await this.getWorkedHours(this.started, this.ended);
await this.getAbsences();
}
hasEvents(day) {
return day >= this.started && day < this.ended;
}
getAbsences() {
const fullYear = this.started.getFullYear();
let params = {
workerFk: this.$params.id,
businessFk: null,
year: fullYear
};
return this.$http.get(`Calendars/absences`, {params})
.then(res => this.onData(res.data));
}
onData(data) {
const events = {};
const addEvent = (day, event) => {
events[new Date(day).getTime()] = event;
};
if (data.holidays) {
data.holidays.forEach(holiday => {
const holidayDetail = holiday.detail && holiday.detail.description;
const holidayType = holiday.type && holiday.type.name;
const holidayName = holidayDetail || holidayType;
addEvent(holiday.dated, {
name: holidayName,
color: '#ff0'
});
});
}
if (data.absences) {
data.absences.forEach(absence => {
const type = absence.absenceType;
addEvent(absence.dated, {
name: type.name,
color: type.rgb
});
});
}
this.weekDays.forEach(day => {
const timestamp = day.dated.getTime();
if (events[timestamp])
day.event = events[timestamp];
this.getWorkedHours(this.started, this.ended);
this.getAbsences();
});
}
@ -238,6 +197,58 @@ class Controller extends Section {
});
}
getAbsences() {
const fullYear = this.started.getFullYear();
let params = {
workerFk: this.$params.id,
businessFk: null,
year: fullYear
};
return this.$http.get(`Calendars/absences`, {params})
.then(res => this.onData(res.data));
}
hasEvents(day) {
return day >= this.started && day < this.ended;
}
onData(data) {
const events = {};
const addEvent = (day, event) => {
events[new Date(day).getTime()] = event;
};
if (data.holidays) {
data.holidays.forEach(holiday => {
const holidayDetail = holiday.detail && holiday.detail.description;
const holidayType = holiday.type && holiday.type.name;
const holidayName = holidayDetail || holidayType;
addEvent(holiday.dated, {
name: holidayName,
color: '#ff0'
});
});
}
if (data.absences) {
data.absences.forEach(absence => {
const type = absence.absenceType;
addEvent(absence.dated, {
name: type.name,
color: type.rgb
});
});
}
this.weekDays.forEach(day => {
const timestamp = day.dated.getTime();
if (events[timestamp])
day.event = events[timestamp];
});
}
getFinishTime() {
if (!this.weekDays) return;
@ -266,14 +277,6 @@ class Controller extends Section {
}
}
set weekTotalHours(totalHours) {
this._weekTotalHours = this.formatHours(totalHours);
}
get weekTotalHours() {
return this._weekTotalHours;
}
formatHours(timestamp = 0) {
let hour = Math.floor(timestamp / 3600);
let min = Math.floor(timestamp / 60 - 60 * hour);

View File

@ -22,7 +22,7 @@ describe('Component vnWorkerTimeControl', () => {
}));
describe('date() setter', () => {
it(`should set the weekDays, the date in the controller and call fetchHours`, () => {
it(`should set the weekDays and the date in the controller`, () => {
let today = Date.vnNew();
jest.spyOn(controller, 'fetchHours').mockReturnThis();
@ -32,7 +32,6 @@ describe('Component vnWorkerTimeControl', () => {
expect(controller.started).toBeDefined();
expect(controller.ended).toBeDefined();
expect(controller.weekDays.length).toEqual(7);
expect(controller.fetchHours).toHaveBeenCalledWith();
});
});