Added balance summary.
This commit is contained in:
parent
a290c07f61
commit
d7fd74fb17
@ -19,6 +19,7 @@ from app import db
|
||||
|
||||
from api.model.accounts import Account
|
||||
from api.model.entries import Entry
|
||||
from api.model.operations import Operation
|
||||
|
||||
from flask import json, request
|
||||
|
||||
@ -49,6 +50,36 @@ def get_accounts():
|
||||
"future": str(i.future)
|
||||
} for i in query.all()])
|
||||
|
||||
@app.route("/api/accounts/<account_id>/<year>/<month>/")
|
||||
def get_account_status(account_id, year, month):
|
||||
session = db.session
|
||||
|
||||
query = session.query(
|
||||
func.sum(case([(func.sign(Operation.value) == -1, Operation.value)], else_=0)).label("expenses"),
|
||||
func.sum(case([(func.sign(Operation.value) == 1, Operation.value)], else_=0)).label("revenues"),
|
||||
func.sum(Operation.value).label("balance")
|
||||
).filter(
|
||||
Operation.account_id == account_id
|
||||
).filter(
|
||||
func.date_trunc('month', Operation.operation_date) == "%s-%s-01" % (year, month)
|
||||
).group_by(Operation.account_id)
|
||||
|
||||
if query.count() == 1:
|
||||
result = query.one()
|
||||
revenues = result.revenues
|
||||
expenses = result.expenses
|
||||
balance = result.balance
|
||||
else:
|
||||
revenues = 0.0
|
||||
expenses = 0.0
|
||||
balance = 0.0
|
||||
|
||||
return json.dumps({
|
||||
"expenses": str(expenses),
|
||||
"revenues": str(revenues),
|
||||
"balance": str(balance)
|
||||
})
|
||||
|
||||
@app.route("/api/accounts/<account_id>/months")
|
||||
def get_months(account_id):
|
||||
session = db.session
|
||||
|
@ -48,8 +48,6 @@ def get_entries(account_id, year, month):
|
||||
|
||||
query = session.query(base_query).select_from(base_query).filter(func.date_trunc('month', base_query.c.operation_date) == "%s-%s-01" % (year, month))
|
||||
|
||||
print query
|
||||
|
||||
return json.dumps([{
|
||||
"id": i.id,
|
||||
"pointed": i.pointed,
|
||||
|
@ -72,6 +72,17 @@ var EntryController = function($scope, $http, $rootScope, $filter) {
|
||||
$scope.drawPieChart(pieChartValues, "#expense-categories-chart-placeholder");
|
||||
};
|
||||
|
||||
$scope.getAccountStatus = function(account, month) {
|
||||
if(account != null && month != null) {
|
||||
$http.get("/api/accounts/" + account.id + "/" + month.year + "/" + month.month).
|
||||
success($scope.getAccountStatus_success);
|
||||
}
|
||||
};
|
||||
|
||||
$scope.getAccountStatus_success = function(status) {
|
||||
$scope.accountStatus = status;
|
||||
};
|
||||
|
||||
// Function to load entries from server for a specific account and month.
|
||||
$scope.loadEntries = function(account, month) {
|
||||
if(account) {
|
||||
@ -145,9 +156,9 @@ var EntryController = function($scope, $http, $rootScope, $filter) {
|
||||
|
||||
// Returns the CSS class for an entry sold.
|
||||
$scope.entryValueClass = function(sold) {
|
||||
if(sold < $scope.account.authorized_overdraft) {
|
||||
if(sold && sold < $scope.account.authorized_overdraft) {
|
||||
return 'text-error';
|
||||
} else if (sold < 0) {
|
||||
} else if (sold && sold < 0) {
|
||||
return 'text-warning';
|
||||
}
|
||||
};
|
||||
@ -388,6 +399,10 @@ var EntryController = function($scope, $http, $rootScope, $filter) {
|
||||
$scope.loadEntries(args.account, args.month);
|
||||
});
|
||||
|
||||
$rootScope.$on("monthsLoadedEvent", function(event, args){
|
||||
$scope.getAccountStatus(args.account, args.month);
|
||||
});
|
||||
|
||||
$scope.$on("entriesLoadedEvent", function(event, args) {
|
||||
$scope.entriesLoaded(args.entries);
|
||||
});
|
||||
|
@ -19,18 +19,29 @@
|
||||
<!-- Chart row -->
|
||||
<div class="row-fluid">
|
||||
<!-- Sold evolution chart placeholder -->
|
||||
<div class="span8">
|
||||
<div class="span7">
|
||||
<div id="entries-chart-placeholder">
|
||||
<svg style='height:300px'/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Expense category piechart -->
|
||||
<div class="span4">
|
||||
<div class="span3">
|
||||
<div id="expense-categories-chart-placeholder">
|
||||
<svg style='height:300px'/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Balance -->
|
||||
<div class="span2" ng-controller="EntryController">
|
||||
<div class="row-fluid">
|
||||
<table class="table">
|
||||
<tr><td>Dépenses :</td><td>[[accountStatus.expenses]]</td></tr>
|
||||
<tr><td>Recettes :</td><td>[[accountStatus.revenues]]</td></tr>
|
||||
<tr><td>Balance :</td><td><span ng-class="entryValueClass(accountStatus.balance)">[[accountStatus.balance]]</span></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Row with entry table -->
|
||||
|
Loading…
Reference in New Issue
Block a user