/* This file is part of Accountant. Accountant is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Foobar is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Accountant. If not, see . */ var SchedulerController = function($scope, $http, $rootScope, $filter) { // Operations store and selection $scope.operations = []; $scope.selectedOperation = null; $scope.account = null; // Placeholder for saved value to cancel entry edition $scope.savedOperation = null; $scope.loadOperations = function(account) { // Clean up selected entry. $scope.selectedOperation = null; $scope.savedOperation = null; if(account) { $scope.account = account; $http.get("/api/scheduled_operations/" + account.id).success($scope.loadOperations_success); } else { $scope.loadOperations_success(null); } }; $scope.loadOperations_success = function(data) { var operations = [{ id: null, start_date: null, stop_date: null, day: null, frequency: null, label: null, account_id: null, category: null, state: "edit" }]; if(data) { operations = operations.concat(angular.fromJson(data)); } $scope.operations = operations; $scope.$emit("operationsLoadedEvent", {operations: operations}); }; $scope.iconSaveClass = function(operation) { if($scope.isNew(operation)) { return "icon-plus"; } else if ($scope.isEditing(operation)) { return "icon-ok"; } }; $scope.iconCancelClass = function(operation) { if($scope.isNew(operation)) { return "icon-remove"; } else if ($scope.isEditing(operation)) { return "icon-ban-circle"; } }; $scope.isNew = function(operation) { return !operation.id; }; // Returns true if the entry is in editing state. $scope.isEditing = function(operation) { return operation.state === 'edit'; }; $scope.isDisplaying = function(operation) { return operation.id && (!operation.state || operation.state === 'display'); }; $scope.saveOperation = function(operation) { if(!operation.account_id) { operation.account_id = $scope.account.id; } // prepare the Ajax xall to save the sceduled operation. var type; var url = "/api/scheduled_operations"; if(!$scope.isNew(operation)) { url += "/" + operation.id; } $http.put(url, angular.toJson(operation)).success(function(data) { $.pnotify({ type: "success", title: "Save", text: data }); $scope.$emit("operationSavedEvent", operation); }); }; $scope.editOperation = function(operation) { // Cancel previous editing. if($scope.selectedOperation) { $scope.cancelEditOperation($scope.selectedItem); } // Save current entry values. $scope.savedOperation = angular.copy(operation); $scope.selectedOperation = operation; // Enter edit state. operation.state='edit'; }; $scope.cancelEditOperation = function(operation) { if ($scope.isNew(operation)) { operation.id = null; operation.start_date = null; operation.stop_date = null; operation.day = null; operation.frequency = null; operation.label = null; operation.value = null; operation.category = null; operation.account_id = $scope.account.id; } else if ($scope.isEditing(operation)) { if($scope.savedOperation) { operation.id = $scope.savedOperation.id; operation.start_date = $scope.savedOperation.start_date; operation.stop_date = $scope.savedOperation.stop_date; operation.day = $scope.savedOperation.day; operation.frequency = $scope.savedOperation.frequency; operation.label = $scope.savedOperation.label; operation.value = $scope.savedOperation.value; operation.category = $scope.savedOperation.category; operation.account_id = $scope.savedOperation.account_id; } $scope.savedOperation = null; $scope.selectedOperation = null; operation.state = 'display'; } }; $scope.removeOperation = function(operation, modalScope) { // Cancel current editing. if (!$scope.isNew(operation)) { $http.delete("/api/scheduled_operations/" + operation.id).success(function (result) { $.pnotify({ type: "success", title: "Delete", text: result }); // Send the "entry removed" event. $scope.$emit("operationRemovedEvent", operation); $scope.closeModal(modalScope); }).error(function (data) { $.pnotify({ type: "error", title: "Delete", text: data }); $scope.closeModal(modalScope); }); } }; $scope.closeModal = function(modalScope) { // Close the modal dialog if(modalScope && modalScope.dismiss) { modalScope.dismiss(); } }; $rootScope.$on("accountsLoadedEvent", function(event, args){ $scope.loadOperations(args.account); }); }