diff --git a/brewman/static/partial/ledger.html b/brewman/static/partial/ledger.html
index 277b0320..d0805e98 100644
--- a/brewman/static/partial/ledger.html
+++ b/brewman/static/partial/ledger.html
@@ -51,7 +51,7 @@
-
{{item.Date}} |
{{item.Name}} |
@@ -65,9 +65,9 @@
{{display.Footer.Date}} |
- {{display.Footer.Name}} |
- {{display.Footer.Type}} |
- {{display.Footer.Narration}} |
+ Closing Balance |
+ Closing Balance |
+ |
{{display.Footer.Debit | currency}} |
{{display.Footer.Credit | currency}} |
{{display.Footer.Running | accounting}} |
diff --git a/brewman/static/scripts/ledger.js b/brewman/static/scripts/ledger.js
index 76865ca9..38c784ae 100644
--- a/brewman/static/scripts/ledger.js
+++ b/brewman/static/scripts/ledger.js
@@ -47,20 +47,21 @@ var LedgerCtrl = ['$scope', '$routeParams', '$location', 'dateFilter', 'ledger',
if (hidden.length !== 0) {
data = _.filter(data, function (item) {
return !_.any(hidden, function (hi) {
- if (!item.hasOwnProperty('Url') && !hi.hasOwnProperty('Url')) {
- return true;
- } else if (item.hasOwnProperty('Url') !== hi.hasOwnProperty('Url')) {
- return false;
- }
- return item.Url === hi.Url;
+ return item.ID === hi;
});
});
}
_.forEach(data, function (item) {
- debit += item.Debit;
- credit += item.Credit;
- running = debit - credit;
+ if (item.Type !== 'Opening Balance') {
+ debit += item.Debit;
+ credit += item.Credit;
+ if (item.Posted) {
+ running += item.Debit - item.Credit;
+ }
+ } else {
+ running += item.Debit - item.Credit;
+ }
item.Running = running;
});
footer.Debit = debit;
@@ -92,8 +93,8 @@ var LedgerCtrl = ['$scope', '$routeParams', '$location', 'dateFilter', 'ledger',
if ($scope.selected > -1) {
$scope.$apply(function () {
var max = $scope.display.Body.length;
- $scope.hidden.push(angular.copy($scope.display.Body[$scope.selected]));
- if ($scope.selected === max -1) {
+ $scope.hidden.push($scope.display.Body[$scope.selected].ID);
+ if ($scope.selected === max - 1) {
$scope.selected = max - 2;
}
});
diff --git a/brewman/views/reports/ledger.py b/brewman/views/reports/ledger.py
index 5b999528..589a3fcb 100644
--- a/brewman/views/reports/ledger.py
+++ b/brewman/views/reports/ledger.py
@@ -1,16 +1,15 @@
import datetime
+import uuid
+
import pkg_resources
from pyramid.response import FileResponse
from sqlalchemy.orm import joinedload_all
from sqlalchemy.sql.expression import func
-import uuid
-
from pyramid.view import view_config
from brewman.models import DBSession
from brewman.models.master import LedgerBase
from brewman.models.validation_exception import TryCatchFunction
-
from brewman.models.voucher import Voucher, Journal, VoucherType
from brewman.views.services.session import session_period_start, session_period_finish
from brewman.views.services.voucher import get_edit_url
@@ -33,8 +32,8 @@ def show_blank(request):
@view_config(request_method='GET', route_name='api_ledger_id', renderer='json', permission='Ledger')
@TryCatchFunction
def show_data(request):
- id = request.matchdict['id']
- ledger = LedgerBase.by_id(uuid.UUID(id))
+ ledger_id = request.matchdict['id']
+ ledger = LedgerBase.by_id(uuid.UUID(ledger_id))
start_date = request.GET.get('StartDate', session_period_start(request))
finish_date = request.GET.get('FinishDate', session_period_finish(request))
info = {'StartDate': start_date, 'FinishDate': finish_date,
@@ -48,7 +47,7 @@ def build_report(request, info):
ledger_id = info['Ledger']['LedgerID']
start_date = info['StartDate']
finish_date = info['FinishDate']
- total_debit, total_credit, running_total, opening = opening_balance(ledger_id, start_date)
+ opening = opening_balance(ledger_id, start_date)
info['Body'].append(opening)
query = Voucher.query().options(joinedload_all(Voucher.journals, Journal.ledger, innerjoin=True)) \
@@ -65,37 +64,31 @@ def build_report(request, info):
name = ""
for journal in voucher.journals:
if journal.ledger_id == ledger_id:
- if voucher.posted:
- running_total += (journal.amount * journal.debit)
journal_debit = journal.debit
if journal.debit == 1:
debit = journal.amount
- total_debit += journal.amount
credit = 0
else:
credit = journal.amount
- total_credit += journal.amount
debit = 0
for journal in voucher.journals:
if journal.debit != journal_debit:
name += "{0} / ".format(journal.ledger.name)
name = name[:-3]
info['Body'].append(
- {'Date': voucher.date.strftime('%d-%b-%Y'), 'Name': name, 'Url': get_edit_url(request, voucher),
- 'Type': VoucherType.by_id(voucher.type).name, 'Narration': voucher.narration, 'Debit': debit,
- 'Credit': credit, 'Running': running_total, 'Posted': voucher.posted})
+ {'ID': voucher.id, 'Date': voucher.date.strftime('%d-%b-%Y'), 'Name': name,
+ 'Url': get_edit_url(request, voucher), 'Type': VoucherType.by_id(voucher.type).name,
+ 'Narration': voucher.narration, 'Debit': debit, 'Credit': credit, 'Posted': voucher.posted})
- info['Footer'] = {'Date': finish_date, 'Name': 'Closing Balance', 'Type': 'Closing Balance',
- 'Narration': '', 'Debit': total_debit, 'Credit': total_credit,
- 'Running': running_total, 'Posted': True}
+ info['Footer'] = {'Date': finish_date}
-def opening_balance(ledgerID, start_date):
+def opening_balance(ledger_id, start_date):
opening = DBSession.query(func.sum(Journal.amount * Journal.debit)) \
.join(Journal.voucher) \
.filter(Voucher.date < datetime.datetime.strptime(start_date, '%d-%b-%Y')) \
.filter(Voucher.type != VoucherType.by_name('Issue').id) \
- .filter(Journal.ledger_id == ledgerID) \
+ .filter(Journal.ledger_id == ledger_id) \
.scalar()
opening = 0 if opening is None else opening
if opening < 0:
@@ -104,7 +97,7 @@ def opening_balance(ledgerID, start_date):
else:
debit = opening
credit = 0
- return 0, 0, opening, {'Date': start_date, 'Name': 'Opening Balance', 'Type': 'Opening Balance',
- 'Narration': '', 'Debit': debit, 'Credit': credit, 'Running': opening, 'Posted': True}
+ return {'Date': start_date, 'ID': 'OB', 'Name': 'Opening Balance', 'Type': 'Opening Balance',
+ 'Narration': '', 'Debit': debit, 'Credit': credit, 'Posted': True}