From 2a9e4e9a32e0906227caa8cc77620f9eb6dcea37 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 19 Dec 2013 19:11:53 +0530 Subject: [PATCH] Opening and closing balance in general ledger report --- .../purchase_invoice/purchase_invoice.js | 2 +- .../doctype/sales_invoice/sales_invoice.js | 2 +- .../report/general_ledger/general_ledger.py | 33 +++++++++++++++---- stock/report/stock_ledger/stock_ledger.py | 8 +++-- .../stock_projected_qty.py | 2 +- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js index 9d752647ad..fc530ddee3 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -36,7 +36,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ "from_date": doc.posting_date, "to_date": doc.posting_date, }; - wn.set_route("general-ledger"); + wn.set_route("query-report/General Ledger"); }, "icon-table"); } diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index 7784005578..55f6ddecec 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -55,7 +55,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte "from_date": doc.posting_date, "to_date": doc.posting_date, }; - wn.set_route("general-ledger"); + wn.set_route("query-report/General Ledger"); }, "icon-table"); var percent_paid = cint(flt(doc.grand_total - doc.outstanding_amount) / flt(doc.grand_total) * 100); diff --git a/accounts/report/general_ledger/general_ledger.py b/accounts/report/general_ledger/general_ledger.py index fcf8010715..bf07e25767 100644 --- a/accounts/report/general_ledger/general_ledger.py +++ b/accounts/report/general_ledger/general_ledger.py @@ -3,20 +3,24 @@ from __future__ import unicode_literals import webnotes -from webnotes.utils import flt +from webnotes.utils import flt, add_days from webnotes import _ +from accounts.utils import get_balance_on def execute(filters=None): validate_filters(filters) columns = get_columns() - + data = [] if filters.get("group_by"): - data = get_grouped_gle(filters) + data += get_grouped_gle(filters) else: - data = get_gl_entries(filters) + data += get_gl_entries(filters) if data: data.append(get_total_row(data)) + if filters.get("account"): + data = [get_opening_balance_row(filters)] + data + [get_closing_balance_row(filters)] + return columns, data def validate_filters(filters): @@ -27,12 +31,20 @@ def validate_filters(filters): webnotes.throw(_("Can not filter based on Voucher No, if grouped by Voucher")) def get_columns(): - return ["Posting Date:Date:100", "Account:Link/Account:200", "Debit:Currency:100", - "Credit:Currency:100", "Voucher Type::120", "Voucher No::160", + return ["Posting Date:Date:100", "Account:Link/Account:200", "Debit:Float:100", + "Credit:Float:100", "Voucher Type::120", "Voucher No::160", "Link::20", "Cost Center:Link/Cost Center:100", "Remarks::200"] +def get_opening_balance_row(filters): + opening_balance = get_balance_on(filters["account"], add_days(filters["from_date"], -1)) + return ["", "Opening Balance", opening_balance, 0.0, "", "", ""] + +def get_closing_balance_row(filters): + closing_balance = get_balance_on(filters["account"], filters["to_date"]) + return ["", "Closing Balance", closing_balance, 0.0, "", "", ""] + def get_gl_entries(filters): - return webnotes.conn.sql("""select + gl_entries = webnotes.conn.sql("""select posting_date, account, debit, credit, voucher_type, voucher_no, cost_center, remarks from `tabGL Entry` where company=%(company)s @@ -40,6 +52,13 @@ def get_gl_entries(filters): {conditions} order by posting_date, account"""\ .format(conditions=get_conditions(filters)), filters, as_list=1) + + for d in gl_entries: + icon = """""" \ + % ("/".join(["#Form", d[4], d[5]]),) + d.insert(6, icon) + + return gl_entries def get_conditions(filters): conditions = [] diff --git a/stock/report/stock_ledger/stock_ledger.py b/stock/report/stock_ledger/stock_ledger.py index ea1a60fac2..034884b12e 100644 --- a/stock/report/stock_ledger/stock_ledger.py +++ b/stock/report/stock_ledger/stock_ledger.py @@ -13,10 +13,14 @@ def execute(filters=None): data = [] for sle in sl_entries: item_detail = item_details[sle.item_code] + voucher_link_icon = """""" \ + % ("/".join(["#Form", sle.voucher_type, sle.voucher_no]),) + data.append([sle.date, sle.item_code, item_detail.item_name, item_detail.item_group, item_detail.brand, item_detail.description, sle.warehouse, item_detail.stock_uom, sle.actual_qty, sle.qty_after_transaction, sle.stock_value, sle.voucher_type, - sle.voucher_no, sle.batch_no, sle.serial_no, sle.company]) + sle.voucher_no, voucher_link_icon, sle.batch_no, sle.serial_no, sle.company]) return columns, data @@ -25,7 +29,7 @@ def get_columns(): "Item Group:Link/Item Group:100", "Brand:Link/Brand:100", "Description::200", "Warehouse:Link/Warehouse:100", "Stock UOM:Link/UOM:100", "Qty:Float:50", "Balance Qty:Float:80", - "Balance Value:Currency:100", "Voucher Type::100", "Voucher #::100", + "Balance Value:Currency:100", "Voucher Type::100", "Voucher #::100", "Link::30", "Batch:Link/Batch:100", "Serial #:Link/Serial No:100", "Company:Link/Company:100"] def get_stock_ledger_entries(filters): diff --git a/stock/report/stock_projected_qty/stock_projected_qty.py b/stock/report/stock_projected_qty/stock_projected_qty.py index d116d03b59..0572f7961e 100644 --- a/stock/report/stock_projected_qty/stock_projected_qty.py +++ b/stock/report/stock_projected_qty/stock_projected_qty.py @@ -20,7 +20,7 @@ def execute(filters=None): where item_code = item.name and warehouse = wh.name order by item.name, wh.name"""\ .format(item_conditions=get_item_conditions(filters), - warehouse_conditions=get_warehouse_conditions(filters)), filters, debug=1) + warehouse_conditions=get_warehouse_conditions(filters)), filters) return columns, data