Handle attendee conflicts in the Web interface

See @d7b010
This commit is contained in:
Francis Lachapelle
2016-02-15 15:58:58 -05:00
parent f2ffb52318
commit d56d9f8b08
9 changed files with 176 additions and 21 deletions
@@ -162,8 +162,7 @@
component.setDelta(coordinates.duration * 15);
newComponent(null, component).finally(function() {
$timeout(function() {
Component.$ghost.pointerHandler = null;
Component.$ghost.component = null;
Component.$resetGhost();
});
});
}
@@ -186,8 +185,11 @@
// Immediately perform the adjustments
component.$adjust(params).then(function() {
$rootScope.$emit('calendars:list');
}, function(response) {
onComponentAdjustError(response, component, params);
}).finally(function() {
$timeout(function() {
Component.$ghost = {};
Component.$resetGhost();
});
});
else if (component.occurrenceId) {
@@ -199,7 +201,7 @@
params: params
},
template: [
'<md-dialog flex="50" md-flex="80" sm-flex="90">',
'<md-dialog flex="50" sm-flex="80" xs-flex="90">',
' <md-dialog-content class="md-dialog-content">',
' <p>' + l('editRepeatingItem') + '</p>',
' </md-dialog-content>',
@@ -214,7 +216,7 @@
$rootScope.$emit('calendars:list');
}).finally(function() {
$timeout(function() {
Component.$ghost = {};
Component.$resetGhost();
});
});
}
@@ -226,13 +228,58 @@
RecurrentComponentDialogController.$inject = ['$scope', '$mdDialog', 'component', 'params'];
function RecurrentComponentDialogController($scope, $mdDialog, component, params) {
$scope.updateThisOccurrence = function() {
component.$adjust(params).then($mdDialog.hide, $mdDialog.cancel);
component.$adjust(params).then($mdDialog.hide, function(response) {
$mdDialog.cancel().then(function() {
onComponentAdjustError(response, component, params);
});
});
};
$scope.updateAllOccurrences = function() {
delete component.occurrenceId;
component.$adjust(params).then($mdDialog.hide, $mdDialog.cancel);
component.$adjust(params).then($mdDialog.hide, function(response) {
$mdDialog.cancel().then(function() {
onComponentAdjustError(response, component, params);
});
});
};
}
function onComponentAdjustError(response, component, params) {
if (response.status == 403 &&
response.data && response.data.message && angular.isObject(response.data.message)) {
$mdDialog.show({
parent: angular.element(document.body),
clickOutsideToClose: false,
escapeToClose: false,
templateUrl: 'UIxAttendeeConflictDialog',
controller: AttendeeConflictDialogController,
controllerAs: '$AttendeeConflictDialogController',
locals: {
component: component,
params: params,
conflictError: response.data.message
}
}).then(function() {
$rootScope.$emit('calendars:list');
});
}
}
/**
* @ngInject
*/
AttendeeConflictDialogController.$inject = ['$scope', '$mdDialog', 'component', 'params', 'conflictError'];
function AttendeeConflictDialogController($scope, $mdDialog, component, params, conflictError) {
var vm = this;
vm.conflictError = conflictError;
vm.cancel = $mdDialog.cancel;
vm.save = save;
function save() {
component.$adjust(angular.extend({ ignoreConflicts: true }, params)).then($mdDialog.hide);
}
}
}
function filter(filterpopup) {
@@ -414,6 +414,15 @@
});
};
/**
* @function $resetGhost
* @desc Prepare the ghost object for the next drag by resetting appropriate attributes
*/
Component.$resetGhost = function() {
this.$ghost.pointerHandler = null;
this.$ghost.component = null;
};
/**
* @function $parseDate
* @desc Parse a date string with format YYYY-MM-DDTHH:MM
@@ -1035,8 +1044,9 @@
* @function $save
* @memberof Component.prototype
* @desc Save the component to the server.
* @param {object} extraAttributes - additional attributes to send to the server
*/
Component.prototype.$save = function() {
Component.prototype.$save = function(extraAttributes) {
var _this = this, options, path, component, date, dlp;
component = this.$omit();
@@ -1106,6 +1116,8 @@
if (this.occurrenceId)
path.push(this.occurrenceId);
angular.extend(component, extraAttributes);
return Component.$$resource.save(path.join('/'), component, options)
.then(function(data) {
// Make a copy of the data for an eventual reset
@@ -162,6 +162,7 @@
vm.addAttachUrl = addAttachUrl;
vm.cancel = cancel;
vm.save = save;
vm.attendeeConflictError = false;
vm.attendeesEditor = {
days: getDays(),
hours: getHours()
@@ -217,15 +218,18 @@
}
}
function save(form) {
function save(form, options) {
if (form.$valid) {
vm.component.$save()
vm.component.$save(options)
.then(function(data) {
$rootScope.$emit('calendars:list');
$mdDialog.hide();
Alarm.getAlarms();
}, function(data, status) {
$log.debug('failed');
}, function(response) {
if (response.status == 403 &&
response.data && response.data.message && angular.isObject(response.data.message)) {
vm.attendeeConflictError = response.data.message;
}
});
}
}