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({ name: holidayName, description: holidayName, dated: holiday.dated, isRemovable: false, style: {backgroundColor: '#FFFF00'} }); }); 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({ name: absenceType.name, description: absenceType.name, dated: absence.dated, style: {backgroundColor: 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: '<' } });