Removed third parties to use CloudFlare CDN.
Added scheduling (missing database update) Using Jinja2 templates. Updated layout.
This commit is contained in:
190
src/static/js/scheduler.js
Normal file
190
src/static/js/scheduler.js
Normal file
@ -0,0 +1,190 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
// Util function to show a message in message placeholder.
|
||||
function message(alertType, title, message) {
|
||||
$(".alert").alert('close');
|
||||
$("#message-placeholder").append('<div class="alert alert-' + alertType + '"><button type="button" class="close" data-dismiss="alert">×</button><h4>' + title + '</h4>' + message + '</div>');
|
||||
}
|
||||
|
||||
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) {
|
||||
message("success", "Save", 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) {
|
||||
message("success", "Delete", result);
|
||||
|
||||
// Send the "entry removed" event.
|
||||
$scope.$emit("operationRemovedEvent", operation);
|
||||
|
||||
$scope.closeModal(modalScope);
|
||||
}).error(function (data) {
|
||||
message("error", "Delete", 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);
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user