From af30c3fdfde8e0a4bfb7d207d515111de49427e2 Mon Sep 17 00:00:00 2001 From: Akhilesh Darjee Date: Mon, 23 Dec 2013 16:13:42 +0530 Subject: [PATCH 1/6] [fix] [minor] update item price on change of item details --- stock/doctype/item/item.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index 8dbfef7bac..ca2a6132d7 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -49,6 +49,7 @@ class DocType(DocListController, WebsiteGenerator): def on_update(self): self.validate_name_with_item_group() self.update_website() + self.update_item_price() def check_warehouse_is_set_for_stock_item(self): if self.doc.is_stock_item=="Yes" and not self.doc.default_warehouse: @@ -210,6 +211,11 @@ class DocType(DocListController, WebsiteGenerator): WebsiteGenerator.on_update(self) + def update_item_price(self): + webnotes.conn.sql("""update `tabItem Price` set item_name=%s, + item_description=%s where item_code=%s""", + (self.doc.item_name, self.doc.description, self.doc.name)) + def get_page_title(self): if self.doc.name==self.doc.item_name: page_name_from = self.doc.name From 61da43f7936c5339db1de007eb4be600b4c95494 Mon Sep 17 00:00:00 2001 From: Akhilesh Darjee Date: Mon, 23 Dec 2013 16:24:33 +0530 Subject: [PATCH 2/6] [fix] [minor] update modified date and time to item price when updating item and price list --- stock/doctype/item/item.py | 2 +- stock/doctype/price_list/price_list.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index ca2a6132d7..4ebf9c49d9 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -213,7 +213,7 @@ class DocType(DocListController, WebsiteGenerator): def update_item_price(self): webnotes.conn.sql("""update `tabItem Price` set item_name=%s, - item_description=%s where item_code=%s""", + item_description=%s, modified=NOW() where item_code=%s""", (self.doc.item_name, self.doc.description, self.doc.name)) def get_page_title(self): diff --git a/stock/doctype/price_list/price_list.py b/stock/doctype/price_list/price_list.py index 226b9da8e1..d0e5d2b6d4 100644 --- a/stock/doctype/price_list/price_list.py +++ b/stock/doctype/price_list/price_list.py @@ -44,5 +44,5 @@ class DocType(DocListController): def update_item_price(self): webnotes.conn.sql("""update `tabItem Price` set currency=%s, - buying_or_selling=%s where price_list=%s""", + buying_or_selling=%s, modified=NOW() where price_list=%s""", (self.doc.currency, self.doc.buying_or_selling, self.doc.name)) \ No newline at end of file From 20dc79ac99b0eab69a9030d44ac9adc23d849089 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 23 Dec 2013 17:06:10 +0530 Subject: [PATCH 3/6] 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 4/6] 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 5/6] 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 From 2117afba07aea95c791f8581b75be433a3123018 Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Mon, 23 Dec 2013 18:01:22 +0600 Subject: [PATCH 6/6] bumped to version 3.3.7 --- config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.json b/config.json index 23561d588b..55c776ad0a 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "app_name": "ERPNext", - "app_version": "3.3.6", + "app_version": "3.3.7", "base_template": "app/portal/templates/base.html", "modules": { "Accounts": { @@ -74,5 +74,5 @@ "type": "module" } }, - "requires_framework_version": "==3.3.1" + "requires_framework_version": "==3.3.2" } \ No newline at end of file