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}