From 20dc79ac99b0eab69a9030d44ac9adc23d849089 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 23 Dec 2013 17:06:10 +0530 Subject: [PATCH 1/3] General ledger filter by account group --- .../report/general_ledger/general_ledger.py | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/accounts/report/general_ledger/general_ledger.py b/accounts/report/general_ledger/general_ledger.py index bf07e25767..e76c0c4bf9 100644 --- a/accounts/report/general_ledger/general_ledger.py +++ b/accounts/report/general_ledger/general_ledger.py @@ -8,7 +8,9 @@ from webnotes import _ from accounts.utils import get_balance_on def execute(filters=None): - validate_filters(filters) + account_details = webnotes.conn.get_value("Account", filters["account"], + ["debit_or_credit", "group_or_ledger"], as_dict=True) + validate_filters(filters, account_details.group_or_ledger) columns = get_columns() data = [] if filters.get("group_by"): @@ -19,12 +21,13 @@ def execute(filters=None): data.append(get_total_row(data)) if filters.get("account"): - data = [get_opening_balance_row(filters)] + data + [get_closing_balance_row(filters)] + data = [get_opening_balance_row(filters, account_details.debit_or_credit)] + data + \ + [get_closing_balance_row(filters, account_details.debit_or_credit)] return columns, data -def validate_filters(filters): - if filters.get("account") and filters.get("group_by") == "Group by Account": +def validate_filters(filters, group_or_ledger): + if group_or_ledger == "Ledger" and filters.get("group_by") == "Group by Account": webnotes.throw(_("Can not filter based on Account, if grouped by Account")) if filters.get("voucher_no") and filters.get("group_by") == "Group by Voucher": @@ -35,13 +38,19 @@ def get_columns(): "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): +def get_opening_balance_row(filters, debit_or_credit): opening_balance = get_balance_on(filters["account"], add_days(filters["from_date"], -1)) - return ["", "Opening Balance", opening_balance, 0.0, "", "", ""] + return get_balance_row(opening_balance, debit_or_credit, "Opening Balance") -def get_closing_balance_row(filters): +def get_closing_balance_row(filters, debit_or_credit): closing_balance = get_balance_on(filters["account"], filters["to_date"]) - return ["", "Closing Balance", closing_balance, 0.0, "", "", ""] + return get_balance_row(closing_balance, debit_or_credit, "Closing Balance") + +def get_balance_row(balance, debit_or_credit, balance_label): + if debit_or_credit == "Debit": + return ["", balance_label, balance, 0.0, "", "", ""] + else: + return ["", balance_label, 0.0, balance, "", "", ""] def get_gl_entries(filters): gl_entries = webnotes.conn.sql("""select @@ -63,7 +72,9 @@ def get_gl_entries(filters): def get_conditions(filters): conditions = [] if filters.get("account"): - conditions.append("account=%(account)s") + lft, rgt = webnotes.conn.get_value("Account", filters["account"], ["lft", "rgt"]) + conditions.append("""account in (select name from tabAccount + where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt)) if filters.get("voucher_no"): conditions.append("voucher_no=%(voucher_no)s") From facde47c6cad74386f8b9fc1cba8ba8fae54dcc3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 23 Dec 2013 17:06:46 +0530 Subject: [PATCH 2/3] Stock ledger report filter by item and brand --- stock/report/stock_ledger/stock_ledger.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stock/report/stock_ledger/stock_ledger.py b/stock/report/stock_ledger/stock_ledger.py index b2bc64f009..94c8eeda16 100644 --- a/stock/report/stock_ledger/stock_ledger.py +++ b/stock/report/stock_ledger/stock_ledger.py @@ -62,6 +62,9 @@ def get_item_conditions(filters): def get_sle_conditions(filters): conditions = [] + if filters.get("item_code"): + conditions.append("""item_code in (select name from tabItem + {item_conditions})""".format(item_conditions=get_item_conditions(filters))) if filters.get("warehouse"): conditions.append("warehouse=%(warehouse)s") if filters.get("voucher_no"): From c38527ef5f2dc2773961321e117a9fb94af9aa73 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 23 Dec 2013 17:07:57 +0530 Subject: [PATCH 3/3] Show general/stock ledger button links to new query reports --- accounts/doctype/account/account.js | 5 +++-- .../doctype/journal_voucher/journal_voucher.js | 3 ++- .../doctype/purchase_invoice/purchase_invoice.js | 3 ++- accounts/doctype/sales_invoice/sales_invoice.js | 3 ++- .../page/accounts_browser/accounts_browser.js | 5 +++-- accounts/utils.py | 2 +- public/js/account_tree_grid.js | 15 +++++++++++++-- public/js/controllers/stock_controller.js | 14 ++++++++------ public/js/stock_analytics.js | 14 +++++++++++--- 9 files changed, 45 insertions(+), 19 deletions(-) diff --git a/accounts/doctype/account/account.js b/accounts/doctype/account/account.js index b6986cf82a..8837586b06 100644 --- a/accounts/doctype/account/account.js +++ b/accounts/doctype/account/account.js @@ -95,9 +95,10 @@ cur_frm.cscript.add_toolbar_buttons = function(doc) { wn.route_options = { "account": doc.name, "from_date": sys_defaults.year_start_date, - "to_date": sys_defaults.year_end_date + "to_date": sys_defaults.year_end_date, + "company": doc.company }; - wn.set_route("general-ledger"); + wn.set_route("query-report", "General Ledger"); }, "icon-table"); } } diff --git a/accounts/doctype/journal_voucher/journal_voucher.js b/accounts/doctype/journal_voucher/journal_voucher.js index a5cd06d971..6b94ba170a 100644 --- a/accounts/doctype/journal_voucher/journal_voucher.js +++ b/accounts/doctype/journal_voucher/journal_voucher.js @@ -120,8 +120,9 @@ cur_frm.cscript.refresh = function(doc) { "voucher_no": doc.name, "from_date": doc.posting_date, "to_date": doc.posting_date, + "company": doc.company }; - wn.set_route("general-ledger"); + wn.set_route("query-report", "General Ledger"); }, "icon-table"); } } diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js index fc530ddee3..0bdc70e13d 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -35,8 +35,9 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ "voucher_no": doc.name, "from_date": doc.posting_date, "to_date": doc.posting_date, + "company": doc.company }; - wn.set_route("query-report/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 55f6ddecec..a390fb4ed7 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -54,8 +54,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte "voucher_no": doc.name, "from_date": doc.posting_date, "to_date": doc.posting_date, + "company": doc.company }; - wn.set_route("query-report/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/page/accounts_browser/accounts_browser.js b/accounts/page/accounts_browser/accounts_browser.js index d57073a072..235e6ab541 100644 --- a/accounts/page/accounts_browser/accounts_browser.js +++ b/accounts/page/accounts_browser/accounts_browser.js @@ -175,9 +175,10 @@ erpnext.AccountsChart = Class.extend({ wn.route_options = { "account": node.data('label'), "from_date": sys_defaults.year_start_date, - "to_date": sys_defaults.year_end_date + "to_date": sys_defaults.year_end_date, + "company": me.company }; - wn.set_route("general-ledger"); + wn.set_route("query-report", "General Ledger"); }, rename: function() { var node = this.selected_node(); diff --git a/accounts/utils.py b/accounts/utils.py index caad793ca1..8971c80f99 100644 --- a/accounts/utils.py +++ b/accounts/utils.py @@ -16,7 +16,7 @@ class BudgetError(webnotes.ValidationError): pass def get_fiscal_year(date=None, fiscal_year=None, label="Date", verbose=1): - return get_fiscal_years(date, fiscal_year, label, verbose=1)[0] + return get_fiscal_years(date, fiscal_year, label, verbose)[0] def get_fiscal_years(date=None, fiscal_year=None, label="Date", verbose=1): # if year start date is 2012-04-01, year end date should be 2013-03-31 (hence subdate) diff --git a/public/js/account_tree_grid.js b/public/js/account_tree_grid.js index 44bef57722..1cd9aa6083 100644 --- a/public/js/account_tree_grid.js +++ b/public/js/account_tree_grid.js @@ -26,9 +26,10 @@ erpnext.AccountTreeGrid = wn.views.TreeGridReport.extend({ show: true, parent_field: "parent_account", formatter: function(item) { - return repl('%(value)s', { + return repl("\ + %(value)s", { value: item.name, - enc_value: encodeURIComponent(item.name) }); } }, @@ -211,4 +212,14 @@ erpnext.AccountTreeGrid = wn.views.TreeGridReport.extend({ return; } }, + + show_general_ledger: function(account) { + wn.route_options = { + account: account, + company: this.company, + from_date: this.from_date, + to_date: this.to_date + }; + wn.set_route("query-report", "General Ledger"); + } }); \ No newline at end of file diff --git a/public/js/controllers/stock_controller.js b/public/js/controllers/stock_controller.js index ee5c497772..d2fb904419 100644 --- a/public/js/controllers/stock_controller.js +++ b/public/js/controllers/stock_controller.js @@ -11,9 +11,10 @@ erpnext.stock.StockController = wn.ui.form.Controller.extend({ wn.route_options = { voucher_no: me.frm.doc.name, from_date: me.frm.doc.posting_date, - to_date: me.frm.doc.posting_date + to_date: me.frm.doc.posting_date, + company: me.frm.doc.company }; - wn.set_route('stock-ledger'); + wn.set_route("query-report", "Stock Ledger"); }, "icon-bar-chart"); } @@ -24,11 +25,12 @@ erpnext.stock.StockController = wn.ui.form.Controller.extend({ if(this.frm.doc.docstatus===1 && cint(wn.defaults.get_default("auto_accounting_for_stock"))) { cur_frm.appframe.add_button(wn._('Accounting Ledger'), function() { wn.route_options = { - "voucher_no": me.frm.doc.name, - "from_date": me.frm.doc.posting_date, - "to_date": me.frm.doc.posting_date, + voucher_no: me.frm.doc.name, + from_date: me.frm.doc.posting_date, + to_date: me.frm.doc.posting_date, + company: me.frm.doc.company }; - wn.set_route("general-ledger"); + wn.set_route("query-report", "General Ledger"); }, "icon-table"); } }, diff --git a/public/js/stock_analytics.js b/public/js/stock_analytics.js index 832cac5d6e..8b68d39e69 100644 --- a/public/js/stock_analytics.js +++ b/public/js/stock_analytics.js @@ -17,10 +17,10 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ parent_field: "parent_item_group", formatter: function(item) { if(!item.is_group) { - return repl('%(value)s', - { + return repl("\ + %(value)s", { value: item.name, - enc_value: encodeURIComponent(item.name) }); } else { return item.name; @@ -183,5 +183,13 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ }, get_plot_points: function(item, col, idx) { return [[dateutil.user_to_obj(col.name).getTime(), item[col.field]]] + }, + show_stock_ledger: function(item_code) { + wn.route_options = { + item_code: item_code, + from_date: this.from_date, + to_date: this.to_date + }; + wn.set_route("query-report", "Stock Ledger"); } }); \ No newline at end of file