angular.module('voxality').controller('AdminDidsController', [
'$scope', '$http', '$window', '$mdDialog', function($scope, $http, $window, $mdDialog) { $scope.editMarkup = function(markup) { $mdDialog.show({ template: editMarkupDialogTemplate, controller: editMarkupDialogController, clickOutsideToClose: true, locals: { // clones the object markup: $.extend({}, markup) } }) }; $scope.deleteMarkup = function(markup) { var confirm = $mdDialog.confirm() .title('Confirm delete?') .textContent('Are you sure you want to delete this markup?') .ok('Delete') .cancel('Cancel'); $mdDialog.show(confirm).then(function() { deleteMarkup(markup); }); }; $scope.newMarkup = function() { $mdDialog.show({ template: newMarkupDialogTemplate, controller: newMarkupDialogController, clickOutsideToClose: true }) }; $scope.displayTextFor = function(markup) { if (markup.flat) { return '+ $' + markup.modifier; } else { return '+ ' + (markup.modifier * 100) + '%'; } }; var urlFromPath = function(path) { var protocol = $window.location.protocol; var host = $window.location.host; var url = protocol + '//' + host + path; return url; }; var filterMarkupTypes = function(markups) { $scope.initialMarkups = []; $scope.monthlyMarkups = []; var sortMarkup = function(markup) { if (markup.markup_type == 'initial') { $scope.initialMarkups.push(markup); } if (markup.markup_type == 'monthly') { $scope.monthlyMarkups.push(markup); } }; markups.forEach(sortMarkup); }; var loadMarkups = function() { var url = urlFromPath('/api/admin/dids/markups'); var token = $window.Voxality.API.getToken(); var params = { api_token: token } var onSuccess = function(response) { filterMarkupTypes(response.data.data); }; var onFailure = function(response) { alert(response.data.type + '\n' + response.data.exception); }; $http.get(url, { params: params }).then(onSuccess, onFailure); }; var saveMarkup = function(markup) { var url = urlFromPath('/api/admin/markups/' + markup.id); var token = $window.Voxality.API.getToken(); var params = { modifier: markup.modifier, flat: markup.flat, markup_type: markup.markup_type, api_token: token }; var onSuccess = function(response) { loadMarkups(); }; var onFailure = function(response) { alert(response.data.type + '\n' + response.data.exception); }; $http.patch(url, params).then(onSuccess, onFailure); }; var createMarkup = function(markup) { var url = urlFromPath('/api/admin/dids/create_markup'); var token = $window.Voxality.API.getToken(); var params = { modifier: markup.modifier, flat: markup.flat, markup_type: markup.markup_type, api_token: token }; var onSuccess = function(response) { loadMarkups(); }; var onFailure = function(response) { alert(response.data.type + '\n' + response.data.exception); }; $http.post(url, params).then(onSuccess, onFailure); }; var deleteMarkup = function(markup) { var url = urlFromPath('/api/admin/markups/' + markup.id); var token = $window.Voxality.API.getToken(); var params = { api_token: token } var onSuccess = function(response) { loadMarkups(); }; var onFailure = function(response) { alert(response.data.type + '\n' + response.data.exception); }; $http.delete(url, { params: params }).then(onSuccess, onFailure); }; var initialize = function() { loadMarkups(); }; initialize(); // I hate myself for having to write this... // but angular material doesn't support DOM templates // and every other alternative is worse... var editMarkupDialogTemplate = '' + '<md-dialog aria-label="markup dialog">' + ' <md-dialog-content layout-padding>' + ' <form name="editMarkupForm" layout="column" layout-align="center">' + ' <h2 layout="row" layout-align="center" layout-margin>Edit Markup</h2>' + ' <md-input-container>' + ' <label>Modifier</label>' + ' <input ng-model="markup.modifier" required ng-pattern="/^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\\.[0-9]{1,2})?$/">' + ' </md-input-container>' + ' <md-input-container>' + ' <label>Type</label>' + ' <md-select ng-model="markup.markup_type">' + ' <md-option ng-repeat="type in markupTypes">' + ' {{ type }}' + ' </md-option>' + ' </md-select>' + ' </md-input-container>' + ' <md-checkbox ng-model="markup.flat">' + ' flat fee?' + ' </md-checkbox>' + ' <md-button class="md-primary" ng-disabled="editMarkupForm.$invalid" ' + ' ng-click="save()">Save</md-button>' + ' </form>' + ' </md-dialog-content>' + '</md-dialog>'; var editMarkupDialogController = function($scope, $mdDialog, markup) { $scope.markup = markup; $scope.markupTypes = ['initial', 'monthly']; $scope.save = function() { saveMarkup($scope.markup); $mdDialog.hide(); }; }; // please no more :( var newMarkupDialogTemplate = '' + '<md-dialog aria-label="markup dialog">' + ' <md-dialog-content layout-padding>' + ' <form name="newMarkupForm" layout="column" layout-align="center">' + ' <h2 layout="row" layout-align="center" layout-margin>New Markup</h2>' + ' <md-input-container>' + ' <label>Modifier</label>' + ' <input ng-model="markup.modifier" required ng-pattern="/^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\\.[0-9]{1,2})?$/">' + ' </md-input-container>' + ' <md-input-container>' + ' <label>Type</label>' + ' <md-select ng-model="markup.markup_type">' + ' <md-option ng-repeat="type in markupTypes">' + ' {{ type }}' + ' </md-option>' + ' </md-select>' + ' </md-input-container>' + ' <md-checkbox ng-model="markup.flat">' + ' flat fee?' + ' </md-checkbox>' + ' <md-button class="md-primary" ng-disabled="newMarkupForm.$invalid" ' + ' ng-click="save()">Save</md-button>' + ' </form>' + ' </md-dialog-content>' + '</md-dialog>'; var newMarkupDialogController = function($scope, $mdDialog) { $scope.markup = { flat: false, markup_type: 'monthly' }; $scope.markupTypes = ['initial', 'monthly']; $scope.save = function() { createMarkup($scope.markup); $mdDialog.hide(); }; }; }
])