salix/modules/worker/front/calendar/index.js

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: '<'
}
});