138 lines
3.3 KiB
JavaScript
138 lines
3.3 KiB
JavaScript
import ngModule from '../module';
|
|
import './style.scss';
|
|
|
|
class Controller {
|
|
constructor($scope, $http) {
|
|
this.$scope = $scope;
|
|
this.$http = $http;
|
|
this.months = this.monthsOfYear();
|
|
this.events = [];
|
|
}
|
|
|
|
get worker() {
|
|
return this._worker;
|
|
}
|
|
|
|
set worker(value) {
|
|
this._worker = value;
|
|
|
|
if (!value) return;
|
|
|
|
let params = {params: {
|
|
workerFk: this.worker.id,
|
|
started: this.started,
|
|
ended: this.ended
|
|
}};
|
|
|
|
let query = `/worker/api/WorkerCalendars/absences`;
|
|
this.$http.get(query, params).then(res => {
|
|
if (!res.data) return;
|
|
|
|
this.setHolidays(res.data);
|
|
this.setWorkerCalendar(res.data);
|
|
this.calendar = res.data.calendar;
|
|
});
|
|
}
|
|
|
|
setHolidays(data) {
|
|
if (!data.holidays) return;
|
|
|
|
const holidays = data.holidays;
|
|
const events = [];
|
|
holidays.forEach(holiday => {
|
|
const holidayDetail = holiday.detail && holiday.detail.description;
|
|
const holidayType = holiday.type && holiday.type.name;
|
|
const holidayName = holidayDetail || holidayType;
|
|
|
|
events.push({
|
|
dated: holiday.dated,
|
|
className: 'red',
|
|
title: holidayName,
|
|
isRemovable: false
|
|
});
|
|
});
|
|
this.events = this.events.concat(events);
|
|
}
|
|
|
|
setWorkerCalendar(data) {
|
|
if (!data.absences) return;
|
|
|
|
const absences = data.absences;
|
|
const events = [];
|
|
absences.forEach(absence => {
|
|
const absenceType = absence.absenceType;
|
|
events.push({
|
|
dated: absence.dated,
|
|
title: absenceType.name,
|
|
style: {
|
|
background: absenceType.rgb
|
|
}
|
|
});
|
|
});
|
|
this.events = this.events.concat(events);
|
|
}
|
|
|
|
get started() {
|
|
const started = new Date();
|
|
started.setHours(0, 0, 0, 0);
|
|
started.setMonth(0);
|
|
started.setDate(1);
|
|
|
|
return started;
|
|
}
|
|
|
|
get ended() {
|
|
const monthIndex = 11;
|
|
const ended = new Date();
|
|
ended.setHours(0, 0, 0, 0);
|
|
ended.setMonth(monthIndex + 1);
|
|
// Last day of previous month (January)
|
|
ended.setDate(0);
|
|
|
|
return ended;
|
|
}
|
|
|
|
monthsOfYear() {
|
|
let months = new Array(12);
|
|
|
|
for (let i = 0; i < months.length; i++) {
|
|
const now = new Date();
|
|
now.setHours(0, 0, 0, 0);
|
|
now.setDate(1);
|
|
now.setMonth(i);
|
|
|
|
months[i] = now;
|
|
}
|
|
|
|
return months;
|
|
}
|
|
|
|
get absenceTypes() {
|
|
return this._absenceTypes;
|
|
}
|
|
|
|
set absenceTypes(value) {
|
|
if (value) {
|
|
this._absenceTypes = value;
|
|
this.legends = [];
|
|
this._absenceTypes.forEach(absenceType => {
|
|
let legend = {};
|
|
legend.id = absenceType.id;
|
|
legend.color = absenceType.rgb;
|
|
legend.name = absenceType.name;
|
|
this.legends.push(legend);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
Controller.$inject = ['$scope', '$http'];
|
|
|
|
ngModule.component('vnWorkerCalendar', {
|
|
template: require('./index.html'),
|
|
controller: Controller,
|
|
bindings: {
|
|
worker: '<'
|
|
}
|
|
});
|