accountant/frontend/static/js/accounts.js
2013-12-06 20:36:26 +01:00

198 lines
5.5 KiB
JavaScript

/*
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/>.
*/
// Account object
function account() {
this.id=ko.observable();
this.name=ko.observable();
this.authorized_overdraft=ko.observable();
this.future=ko.observable();
this.current=ko.observable();
this.pointed=ko.observable();
};
// The AccountController.
var AccountController = function($scope, $http, $rootScope, $window) {
// Account store and selection
$scope.account = null;
$scope.accounts = [];
$scope.savedAccount = null;
$scope.editingAccount = null;
$scope.removedAccount = null;
$scope.accountClass = function(account) {
if(account == $scope.account) {
return "active";
}
};
$scope.valueClass = function(account, value) {
if(!account) {
return
}
if(value < account.authorized_overdraft) {
return "text-error";
} else if(value < 0) {
return "text-warning";
}
};
$scope.addAccount = function() {
$scope.editingAccount = {
id: null,
name: null,
authorized_overdraft: null
};
angular.element("#edit-account").modal();
};
$scope.show = function() {
console.debug("show");
};
$scope.editAccount = function(account) {
if(account) {
$scope.editingAccount = account;
$scope.savedAccount = angular.copy(account);
}
};
$scope.cancelEditAccount = function(account, modalScope) {
if($scope.savedAccount) {
account.name = $scope.savedAccount.name;
account.authorized_overdraft = $scope.savedAccount.authorized_overdraft;
}
$scope.editingAccount = null;
$scope.savedAccount = null;
if(modalScope && modalScope.dismiss) {
modalScope.dismiss();
}
};
$scope.saveAccount = function(account, modalScope) {
// Ajax call to save the entry.
var type;
var url = "/api/accounts";
if(account.id) {
url += "/" + account.id;
}
$http.put(url, angular.toJson(account)).success(function(data) {
$.pnotify({
type: "success",
title: "Save",
text: data
});
$scope.editingAccount = null;
$scope.savedAccount = null;
if(modalScope && modalScope.dismiss) {
modalScope.dismiss();
}
// Reload accounts to update solds.
$scope.loadAccounts();
}).error(function(data) {
if(data.error_type == 'validation') {
angular.forEach(data.errors, function(errors, field) {
// $scope.form[field].$setValidity('server', false);
//$scope.errors[field] = errors.join(', ');
});
} else {
$.pnotify({
type: "error",
title: "Save",
text: data.errors
});
}
});
};
// Function to remove of an entry.
$scope.accountRemove = function(account, modalScope) {
$http.delete("/api/accounts/" + account.id).success(function (data) {
$.pnotify({
type: "success",
title: "Save",
text: data
});
// Reload accounts to update solds.
$scope.loadAccounts();
if(modalScope && modalScope.dismiss) {
modalScope.dismiss();
}
});
};
// Function to load accounts
$scope.loadAccounts = function() {
$http.get("/api/accounts").success($scope.loadAccounts_success);
};
$scope.loadAccounts_success = function (data) {
// Update accounts
$scope.accounts = angular.fromJson(data);
var accountToSelect = null
// Reset selected account to the new instance corresponding to the old one.
if($scope.account) {
// Find the new instance of the previously selected account.
angular.forEach($scope.accounts, function(account) {
if(account.id == $scope.account.id) {
accountToSelect = account;
}
});
}
// Set selected account to first one if not yet selected
if(!accountToSelect && $scope.accounts.length > 0){
accountToSelect = $scope.accounts[0];
}
// Reset to account to select
$scope.account = accountToSelect;
$scope.$emit("accountsLoadedEvent", {account: $scope.account});
};
// Callback function to select a new account.
$scope.selectAccount = function(account) {
if(account) {
$scope.account = account;
$scope.$emit("accountsLoadedEvent", {account: $scope.account});
}
};
$rootScope.$on("entrySavedEvent", $scope.loadAccounts);
$rootScope.$on("entryRemovedEvent", $scope.loadAccounts);
$rootScope.$on("operationSavedEvent", $scope.loadAccounts);
$rootScope.$on("operationRemovedEvent", $scope.loadAccounts);
$scope.loadAccounts();
};