175 lines
4.2 KiB
JavaScript
175 lines
4.2 KiB
JavaScript
import ngModule from '../module';
|
|
import './style.scss';
|
|
|
|
class Controller {
|
|
constructor($, _, $http, $stateParams) {
|
|
Object.assign(this, {
|
|
$,
|
|
_,
|
|
$http
|
|
});
|
|
|
|
this.wdays = [
|
|
{
|
|
code: 'mon',
|
|
name: 'Monday'
|
|
}, {
|
|
code: 'tue',
|
|
name: 'Tuesday'
|
|
}, {
|
|
code: 'wed',
|
|
name: 'Wednesday'
|
|
}, {
|
|
code: 'thu',
|
|
name: 'Thursday'
|
|
}, {
|
|
code: 'fri',
|
|
name: 'Friday'
|
|
}, {
|
|
code: 'sat',
|
|
name: 'Saturday'
|
|
}, {
|
|
code: 'sun',
|
|
name: 'Sunday'
|
|
}
|
|
];
|
|
|
|
this.abrWdays = {};
|
|
for (let wday of this.wdays) {
|
|
let locale = _.instant(wday.name);
|
|
this.abrWdays[wday.code] = locale.substr(0, 3);
|
|
wday.abr = locale.substr(0, 1);
|
|
}
|
|
|
|
this.options = [
|
|
{
|
|
label: 'One day',
|
|
value: 'day'
|
|
}, {
|
|
label: 'Range of dates',
|
|
value: 'range'
|
|
}, {
|
|
label: 'Indefinitely',
|
|
value: 'indefinitely'
|
|
}
|
|
];
|
|
|
|
this.$http.get(`/api/Zones/${$stateParams.id}/exclusions`)
|
|
.then(res => this.$.exclusions = res.data);
|
|
|
|
this.path = `/api/Zones/${$stateParams.id}/events`;
|
|
this.refresh();
|
|
}
|
|
|
|
refresh() {
|
|
this.$http.get(this.path)
|
|
.then(res => this.$.data = res.data);
|
|
}
|
|
|
|
formatWdays(weekDays) {
|
|
if (!weekDays) return;
|
|
|
|
let abrWdays = [];
|
|
for (let wday of weekDays.split(','))
|
|
abrWdays.push(this.abrWdays[wday]);
|
|
|
|
return abrWdays.length < 7
|
|
? abrWdays.join(', ')
|
|
: this._.instant('Everyday');
|
|
}
|
|
|
|
onEdit(row, event) {
|
|
if (event.defaultPrevented) return;
|
|
|
|
this.isNew = false;
|
|
|
|
if (row.from && !row.to)
|
|
this.eventType = 'day';
|
|
else if (!row.from)
|
|
this.eventType = 'indefinitely';
|
|
else
|
|
this.eventType = 'range';
|
|
|
|
this.selected = angular.copy(row);
|
|
this.selected.wdays = {};
|
|
|
|
if (row.weekDays) {
|
|
let weekDays = row.weekDays.split(',');
|
|
for (let day of weekDays)
|
|
this.selected.wdays[day] = true;
|
|
}
|
|
|
|
this.$.dialog.show();
|
|
}
|
|
|
|
onCreate() {
|
|
this.isNew = true;
|
|
this.eventType = 'day';
|
|
this.selected = {};
|
|
this.$.dialog.show();
|
|
}
|
|
|
|
onSave(response) {
|
|
if (response != 'ACCEPT') return;
|
|
|
|
let selected = this.selected;
|
|
|
|
if (this.eventType == 'indefinitely') {
|
|
selected.from = null;
|
|
selected.to = null;
|
|
}
|
|
|
|
if (this.eventType != 'day') {
|
|
let weekDays = [];
|
|
|
|
for (let wday in selected.wdays) {
|
|
if (selected.wdays[wday])
|
|
weekDays.push(wday);
|
|
}
|
|
|
|
selected.weekDays = weekDays.join(',');
|
|
} else {
|
|
selected.to = null;
|
|
selected.weekDays = '';
|
|
}
|
|
|
|
let req;
|
|
|
|
if (this.isNew)
|
|
req = this.$http.post(this.path, selected);
|
|
else
|
|
req = this.$http.put(`${this.path}/${selected.id}`, selected);
|
|
|
|
req.then(() => {
|
|
this.selected = null;
|
|
this.isNew = null;
|
|
this.$.dialog.hide();
|
|
this.refresh();
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
onDelete(id, event) {
|
|
event.preventDefault();
|
|
this.$.confirm.show();
|
|
this.deleteId = id;
|
|
}
|
|
|
|
delete(response) {
|
|
if (response != 'ACCEPT') return;
|
|
if (!this.deleteId) return;
|
|
this.$http.delete(`${this.path}/${this.deleteId}`)
|
|
.then(() => {
|
|
this.refresh();
|
|
this.deleteId = null;
|
|
});
|
|
}
|
|
}
|
|
Controller.$inject = ['$scope', '$translate', '$http', '$stateParams'];
|
|
|
|
ngModule.component('vnZoneEvents', {
|
|
template: require('./index.html'),
|
|
controller: Controller
|
|
});
|