This commit is contained in:
parent
a7c0949f0e
commit
869bdab7ce
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue