From 9283b6c59d764335b7473f557c794c44ca7203e2 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 14:58:45 +0530 Subject: [PATCH 01/15] [demo] [minor] fixes in make demo --- utilities/demo/make_demo.py | 10 +++------- utilities/demo/make_erpnext_demo.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/utilities/demo/make_demo.py b/utilities/demo/make_demo.py index 6f18f76f9a..4383d32129 100644 --- a/utilities/demo/make_demo.py +++ b/utilities/demo/make_demo.py @@ -30,7 +30,6 @@ prob = { } def make(reset=False, simulate=True): - webnotes.connect() #webnotes.print_messages = True webnotes.mute_emails = True webnotes.rollback_on_exception = True @@ -38,7 +37,7 @@ def make(reset=False, simulate=True): if reset: setup() if simulate: - simulate() + _simulate() def setup(): install() @@ -50,7 +49,7 @@ def setup(): # make_opening_stock() # make_opening_accounts() -def simulate(): +def _simulate(): global runs_for current_date = webnotes.utils.getdate(start_date) @@ -411,7 +410,4 @@ def import_data(dt, submit=False): if submit: webnotes.form_dict["params"] = json.dumps({"_submit": 1}) webnotes.uploaded_file = os.path.join(os.path.dirname(__file__), "demo_docs", doctype+".csv") - upload() - -if __name__=="__main__": - make() \ No newline at end of file + upload() \ No newline at end of file diff --git a/utilities/demo/make_erpnext_demo.py b/utilities/demo/make_erpnext_demo.py index db1d25bd82..9e56839fb8 100644 --- a/utilities/demo/make_erpnext_demo.py +++ b/utilities/demo/make_erpnext_demo.py @@ -6,7 +6,14 @@ import webnotes, os import utilities.demo.make_demo def make_demo_app(): - + webnotes.mute_emails = 1 + webnotes.connect() + utilities.demo.make_demo.make(reset=True, simulate=False) + # setup demo user etc so that the site it up faster, while the data loads + make_demo_user() + make_demo_login_page() + make_demo_on_login_script() + utilities.demo.make_demo.make(reset=False, simulate=True) def make_demo_user(): roles = ["Accounts Manager", "Analytics", "Expense Approver", "Accounts User", @@ -111,11 +118,4 @@ def make_demo_on_login_script(): webnotes.conn.commit() if __name__=="__main__": - # webnotes.connect() - webnotes.mute_emails = 1 - utilities.demo.make_demo.make(reset=True, simulate=False) - # setup demo user etc so that the site it up faster, while the data loads - make_demo_user() - make_demo_login_page() - make_demo_on_login_script() - utilities.demo.make_demo.make(reset=False, simulate=True) \ No newline at end of file + make_demo_app() \ No newline at end of file From e527c11e1ed508e18dec1baee8eb474f127ad80f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Sep 2013 15:03:04 +0530 Subject: [PATCH 02/15] [docs] [minor] templatifed docs --- docs/templates/docs.html | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/templates/docs.html diff --git a/docs/templates/docs.html b/docs/templates/docs.html new file mode 100644 index 0000000000..ef3cf8e9f8 --- /dev/null +++ b/docs/templates/docs.html @@ -0,0 +1,51 @@ +{% extends "lib/core/doctype/documentation_tool/docs.html" %} + +{% block navbar %} + +{% endblock %} + +{% block footer %} +
+ +{% endblock %} \ No newline at end of file From 04c4e2aea38755a7b865978c0a76c93b9901cf91 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Sep 2013 15:33:37 +0530 Subject: [PATCH 03/15] [minor] removed erpnext namespaces/branding --- public/js/toolbar.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/public/js/toolbar.js b/public/js/toolbar.js index d2ca512fa6..2566fcb6a3 100644 --- a/public/js/toolbar.js +++ b/public/js/toolbar.js @@ -20,20 +20,6 @@ erpnext.toolbar.setup = function() { '+wn._('Live Chat')+''); } - erpnext.toolbar.set_new_comments(); - $("#toolbar-tools").append('
  • \ Latest Updates
  • '); -} - -erpnext.toolbar.set_new_comments = function(new_comments) { - return; - var navbar_nc = $('.navbar-new-comments'); - if(cint(new_comments)) { - navbar_nc.addClass('navbar-new-comments-true') - navbar_nc.text(new_comments); - } else { - navbar_nc.removeClass('navbar-new-comments-true'); - navbar_nc.text(0); - } } \ No newline at end of file From 215c901a0d856d659c742bd5571daa32c55ad49d Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 15:38:53 +0530 Subject: [PATCH 04/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- controllers/selling_controller.py | 9 ++++-- patches/patch_list.py | 1 + patches/september_2013/__init__.py | 0 .../p01_fix_buying_amount_gl_entries.py | 31 +++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 patches/september_2013/__init__.py create mode 100644 patches/september_2013/p01_fix_buying_amount_gl_entries.py diff --git a/controllers/selling_controller.py b/controllers/selling_controller.py index a13d747279..5605ccf3a2 100644 --- a/controllers/selling_controller.py +++ b/controllers/selling_controller.py @@ -99,6 +99,8 @@ class SellingController(StockController): for item in self.doclist.get({"parentfield": self.fname}): if item.item_code in self.stock_items or \ (item_sales_bom and item_sales_bom.get(item.item_code)): + + buying_amount = 0 if item.item_code in self.stock_items: buying_amount = get_buying_amount(self.doc.doctype, self.doc.name, item.name, stock_ledger_entries.get((item.item_code, @@ -108,9 +110,10 @@ class SellingController(StockController): self.doc.doctype, self.doc.name, item.name, stock_ledger_entries, item_sales_bom) - item.buying_amount = buying_amount >= 0.01 and buying_amount or 0 - webnotes.conn.set_value(item.doctype, item.name, "buying_amount", - item.buying_amount) + # buying_amount >= 0.01 so that gl entry doesn't get created for such small amounts + item.buying_amount = buying_amount >= 0.01 and buying_amount or 0 + webnotes.conn.set_value(item.doctype, item.name, "buying_amount", + item.buying_amount) def check_expense_account(self, item): if item.buying_amount and not item.expense_account: diff --git a/patches/patch_list.py b/patches/patch_list.py index 1d382a56bd..2db62cf3a8 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -257,4 +257,5 @@ patch_list = [ "execute:webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice') # 2013-08-16", "patches.august_2013.p06_fix_sle_against_stock_entry", "execute:webnotes.bean('Style Settings').save() #2013-08-20", + "patches.september_2013.p01_fix_buying_amount_gl_entries", ] \ No newline at end of file diff --git a/patches/september_2013/__init__.py b/patches/september_2013/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py new file mode 100644 index 0000000000..b32317469d --- /dev/null +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -0,0 +1,31 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes +import webnotes.defaults +from webnotes.utils import cint + +def execute(): + if not cint(webnotes.defaults.get_global_default("auto_inventory_accounting")): + return + + # fix delivery note + for dn in webnotes.conn.sql_list("""select name from `tabDelivery Note` where docstatus=1 + and posting_date >= "2013-08-06" """): + recreate_gl_entries("Delivery Note", dn) + + # fix sales invoice + for si in webnotes.conn.sql_list("""select name from `tabSales Invoice` where docstatus=1 + and update_stock=1 and posting_date >= "2013-08-06" """): + recreate_gl_entries("Sales Invoice", si) + +def recreate_gl_entries(doctype, name): + # remove gl entries + webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s + and voucher_no=%s""", (doctype, name)) + + # calculate buying amount and make gl entries + bean = webnotes.bean(doctype, name) + bean.run_method("set_buying_amount") + bean.run_method("make_gl_entries") \ No newline at end of file From d22a9cae90fb7c815197789f9813bb1b38d655cc Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 15:54:52 +0530 Subject: [PATCH 05/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../p01_fix_buying_amount_gl_entries.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index b32317469d..1fe3b4623d 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -13,14 +13,14 @@ def execute(): # fix delivery note for dn in webnotes.conn.sql_list("""select name from `tabDelivery Note` where docstatus=1 and posting_date >= "2013-08-06" """): - recreate_gl_entries("Delivery Note", dn) + recreate_gl_entries("Delivery Note", dn, "delivery_note_details") # fix sales invoice for si in webnotes.conn.sql_list("""select name from `tabSales Invoice` where docstatus=1 and update_stock=1 and posting_date >= "2013-08-06" """): - recreate_gl_entries("Sales Invoice", si) + recreate_gl_entries("Sales Invoice", si, "entries") -def recreate_gl_entries(doctype, name): +def recreate_gl_entries(doctype, name, parentfield): # remove gl entries webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", (doctype, name)) @@ -28,4 +28,20 @@ def recreate_gl_entries(doctype, name): # calculate buying amount and make gl entries bean = webnotes.bean(doctype, name) bean.run_method("set_buying_amount") + + # update missing expense account and cost center + for item in bean.doclist.get({"parentfield": parentfield}): + if item.buying_amount and not (item.expense_account and item.cost_center): + item_values = webnotes.conn.get_value("Item", item.item_code, + ["purchase_account", "default_sales_cost_center"]) + company_values = webnotes.conn.get_value("Company", bean.doc.company, + ["default_expense_account", "cost_center"]) + if not item.expense_account: + item.expense_account = (item_values and item_values[0]) or (company_values and company_values[0]) + if not item.cost_center: + item.cost_center = (item_values and item_values[1]) or (company_values and company_values[1]) + + webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) + webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) + bean.run_method("make_gl_entries") \ No newline at end of file From c81eabe07b431a61cfcafceedb0cef17d49ce424 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 16:27:34 +0530 Subject: [PATCH 06/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../p01_fix_buying_amount_gl_entries.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 1fe3b4623d..160aa15e54 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -35,11 +35,26 @@ def recreate_gl_entries(doctype, name, parentfield): item_values = webnotes.conn.get_value("Item", item.item_code, ["purchase_account", "default_sales_cost_center"]) company_values = webnotes.conn.get_value("Company", bean.doc.company, - ["default_expense_account", "cost_center"]) + ["default_expense_account", "cost_center", "stock_adjustment_cost_center"]) if not item.expense_account: item.expense_account = (item_values and item_values[0]) or (company_values and company_values[0]) + if not item.cost_center: - item.cost_center = (item_values and item_values[1]) or (company_values and company_values[1]) + item.cost_center = (item_values and item_values[1]) or \ + (company_values and (company_values[1] or company_values[2])) + + if not (item.expense_account and item.cost_center): + res = webnotes.conn.sql("""select expense_account, cost_center + from `tab%s` child where docstatus=1 and item_code=%s + ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' + and (select company from `tab%s` parent where parent.name=child.parent)=%s + order by creation desc limit 1""" % (item.doctype, "%s", doctype, "%s"), + (item.item_code, bean.doc.company)) + if res: + if not item.expense_account: + item.expense_account = res[0][0] + if not item.cost_center: + item.cost_center = res[0][1] webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) From d09039ae43d8915ad59f5570511ecb3ec05a2ddb Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 16:29:52 +0530 Subject: [PATCH 07/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- patches/september_2013/p01_fix_buying_amount_gl_entries.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 160aa15e54..22017b4c44 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -45,9 +45,9 @@ def recreate_gl_entries(doctype, name, parentfield): if not (item.expense_account and item.cost_center): res = webnotes.conn.sql("""select expense_account, cost_center - from `tab%s` child where docstatus=1 and item_code=%s - ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' - and (select company from `tab%s` parent where parent.name=child.parent)=%s + from `tab%s` child where docstatus=1 and item_code=%s and + ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and + (select company from `tab%s` parent where parent.name=child.parent)=%s order by creation desc limit 1""" % (item.doctype, "%s", doctype, "%s"), (item.item_code, bean.doc.company)) if res: From fe73c38867849b52c4380c921396eee8c668bf30 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 16:34:49 +0530 Subject: [PATCH 08/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../p01_fix_buying_amount_gl_entries.py | 34 ++++++------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 22017b4c44..7379c302a9 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -32,29 +32,17 @@ def recreate_gl_entries(doctype, name, parentfield): # update missing expense account and cost center for item in bean.doclist.get({"parentfield": parentfield}): if item.buying_amount and not (item.expense_account and item.cost_center): - item_values = webnotes.conn.get_value("Item", item.item_code, - ["purchase_account", "default_sales_cost_center"]) - company_values = webnotes.conn.get_value("Company", bean.doc.company, - ["default_expense_account", "cost_center", "stock_adjustment_cost_center"]) - if not item.expense_account: - item.expense_account = (item_values and item_values[0]) or (company_values and company_values[0]) - - if not item.cost_center: - item.cost_center = (item_values and item_values[1]) or \ - (company_values and (company_values[1] or company_values[2])) - - if not (item.expense_account and item.cost_center): - res = webnotes.conn.sql("""select expense_account, cost_center - from `tab%s` child where docstatus=1 and item_code=%s and - ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and - (select company from `tab%s` parent where parent.name=child.parent)=%s - order by creation desc limit 1""" % (item.doctype, "%s", doctype, "%s"), - (item.item_code, bean.doc.company)) - if res: - if not item.expense_account: - item.expense_account = res[0][0] - if not item.cost_center: - item.cost_center = res[0][1] + res = webnotes.conn.sql("""select expense_account, cost_center + from `tab%s` child where docstatus=1 and item_code=%s and + ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and + (select company from `tab%s` parent where parent.name=child.parent)=%s + order by creation desc limit 1""" % (item.doctype, "%s", doctype, "%s"), + (item.item_code, bean.doc.company)) + if res: + if not item.expense_account: + item.expense_account = res[0][0] + if not item.cost_center: + item.cost_center = res[0][1] webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) From 79401717e0e0527ba90446e015b604cbb058be62 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 16:44:09 +0530 Subject: [PATCH 09/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../p01_fix_buying_amount_gl_entries.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 7379c302a9..7812a2aaaa 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -21,10 +21,6 @@ def execute(): recreate_gl_entries("Sales Invoice", si, "entries") def recreate_gl_entries(doctype, name, parentfield): - # remove gl entries - webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s - and voucher_no=%s""", (doctype, name)) - # calculate buying amount and make gl entries bean = webnotes.bean(doctype, name) bean.run_method("set_buying_amount") @@ -35,16 +31,20 @@ def recreate_gl_entries(doctype, name, parentfield): res = webnotes.conn.sql("""select expense_account, cost_center from `tab%s` child where docstatus=1 and item_code=%s and ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and - (select company from `tab%s` parent where parent.name=child.parent)=%s - order by creation desc limit 1""" % (item.doctype, "%s", doctype, "%s"), - (item.item_code, bean.doc.company)) + (select company from `tabAccount` ac where ac.name=child.expense_account)=%s and + (select company from `tabCost Center` cc where cc.name=child.cost_center)=%s + order by creation desc limit 1""" % (item.doctype, "%s", "%s", "%s"), + (item.item_code, bean.doc.company, bean.doc.company)) if res: if not item.expense_account: item.expense_account = res[0][0] if not item.cost_center: item.cost_center = res[0][1] - webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) - webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) - + webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) + webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) + + # remove gl entries + webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s + and voucher_no=%s""", (doctype, name)) bean.run_method("make_gl_entries") \ No newline at end of file From 9bb928f595aa54baa28366ff93c57d6126ce5c01 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 17:02:00 +0530 Subject: [PATCH 10/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../p01_fix_buying_amount_gl_entries.py | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 7812a2aaaa..0a25cd4faf 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -12,12 +12,12 @@ def execute(): # fix delivery note for dn in webnotes.conn.sql_list("""select name from `tabDelivery Note` where docstatus=1 - and posting_date >= "2013-08-06" """): + and posting_date >= "2013-08-06" order by posting_date"""): recreate_gl_entries("Delivery Note", dn, "delivery_note_details") # fix sales invoice for si in webnotes.conn.sql_list("""select name from `tabSales Invoice` where docstatus=1 - and update_stock=1 and posting_date >= "2013-08-06" """): + and update_stock=1 and posting_date >= "2013-08-06" order by posting_date"""): recreate_gl_entries("Sales Invoice", si, "entries") def recreate_gl_entries(doctype, name, parentfield): @@ -27,24 +27,34 @@ def recreate_gl_entries(doctype, name, parentfield): # update missing expense account and cost center for item in bean.doclist.get({"parentfield": parentfield}): - if item.buying_amount and not (item.expense_account and item.cost_center): + if item.buying_amount and not validate_item_values(item, bean.doc.company): res = webnotes.conn.sql("""select expense_account, cost_center from `tab%s` child where docstatus=1 and item_code=%s and ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and (select company from `tabAccount` ac where ac.name=child.expense_account)=%s and - (select company from `tabCost Center` cc where cc.name=child.cost_center)=%s + (select company from `tabCost Center` cc where cc.name=child.cost_center)=%s and order by creation desc limit 1""" % (item.doctype, "%s", "%s", "%s"), (item.item_code, bean.doc.company, bean.doc.company)) if res: - if not item.expense_account: - item.expense_account = res[0][0] - if not item.cost_center: - item.cost_center = res[0][1] - + item.expense_account = res[0][0] + item.cost_center = res[0][1] + webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) # remove gl entries webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", (doctype, name)) - bean.run_method("make_gl_entries") \ No newline at end of file + bean.run_method("make_gl_entries") + +def validate_item_values(item, company): + if item.expense_account and \ + webnotes.conn.get_value("Account", item.expense_account, "company")!=company: + return False + elif item.cost_center and \ + webnotes.conn.get_value("Cost Center", item.cost_center, "company")!=company: + return False + elif not (item.expense_account and item.cost_center): + return False + + return True \ No newline at end of file From dc30890b790c6fb7b8a6200d754258252c8ec595 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 17:03:38 +0530 Subject: [PATCH 11/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- patches/september_2013/p01_fix_buying_amount_gl_entries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 0a25cd4faf..011180a58a 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -32,7 +32,7 @@ def recreate_gl_entries(doctype, name, parentfield): from `tab%s` child where docstatus=1 and item_code=%s and ifnull(expense_account, '')!='' and ifnull(cost_center, '')!='' and (select company from `tabAccount` ac where ac.name=child.expense_account)=%s and - (select company from `tabCost Center` cc where cc.name=child.cost_center)=%s and + (select company from `tabCost Center` cc where cc.name=child.cost_center)=%s order by creation desc limit 1""" % (item.doctype, "%s", "%s", "%s"), (item.item_code, bean.doc.company, bean.doc.company)) if res: From 96690ebd0f2c02dc122eb49e927dd7b3f17f7c7d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Sep 2013 17:04:27 +0530 Subject: [PATCH 12/15] [communication] [minor] cleaed model --- buying/doctype/supplier/supplier.py | 3 --- buying/doctype/supplier/supplier.txt | 10 +++++++++- hr/doctype/job_applicant/get_job_applications.py | 2 +- hr/doctype/job_applicant/job_applicant.py | 3 --- hr/doctype/job_applicant/job_applicant.txt | 10 +++++++++- selling/doctype/customer/customer.py | 5 +---- selling/doctype/customer/customer.txt | 11 ++++++++++- selling/doctype/lead/get_leads.py | 7 +++++-- selling/doctype/lead/lead.py | 1 - selling/doctype/lead/lead.txt | 10 +++++++++- selling/doctype/opportunity/opportunity.py | 3 --- selling/doctype/opportunity/opportunity.txt | 10 +++++++++- selling/doctype/quotation/quotation.py | 3 --- selling/doctype/quotation/quotation.txt | 10 +++++++++- setup/doctype/sales_person/sales_person.txt | 10 +++++++++- .../doctype/support_ticket/get_support_mails.py | 2 +- support/doctype/support_ticket/support_ticket.py | 5 +---- support/doctype/support_ticket/support_ticket.txt | 10 +++++++++- utilities/doctype/contact/contact.py | 3 --- utilities/doctype/contact/contact.txt | 10 +++++++++- utilities/transaction_base.py | 15 +-------------- 21 files changed, 92 insertions(+), 51 deletions(-) diff --git a/buying/doctype/supplier/supplier.py b/buying/doctype/supplier/supplier.py index c646fdbdb5..75b2e03762 100644 --- a/buying/doctype/supplier/supplier.py +++ b/buying/doctype/supplier/supplier.py @@ -18,9 +18,6 @@ class DocType(TransactionBase): self.doc = doc self.doclist = doclist - def onload(self): - self.add_communication_list() - def autoname(self): supp_master_name = webnotes.defaults.get_global_default('supp_master_name') diff --git a/buying/doctype/supplier/supplier.txt b/buying/doctype/supplier/supplier.txt index 8fa70679f9..50202dcae2 100644 --- a/buying/doctype/supplier/supplier.txt +++ b/buying/doctype/supplier/supplier.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:11", "docstatus": 0, - "modified": "2013-08-08 14:22:08", + "modified": "2013-09-02 16:25:44", "modified_by": "Administrator", "owner": "Administrator" }, @@ -204,6 +204,14 @@ "oldfieldname": "website", "oldfieldtype": "Data" }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "cancel": 0, "create": 0, diff --git a/hr/doctype/job_applicant/get_job_applications.py b/hr/doctype/job_applicant/get_job_applications.py index 9bec43e5e8..2e01328915 100644 --- a/hr/doctype/job_applicant/get_job_applications.py +++ b/hr/doctype/job_applicant/get_job_applications.py @@ -37,7 +37,7 @@ class JobsMailbox(POP3Mailbox): mail.save_attachments_in_doc(applicant.doc) make(content=mail.content, sender=mail.from_email, - doctype="Job Applicant", name=applicant.doc.name, set_lead=False) + doctype="Job Applicant", name=applicant.doc.name) def get_job_applications(): if cint(webnotes.conn.get_value('Jobs Email Settings', None, 'extract_emails')): diff --git a/hr/doctype/job_applicant/job_applicant.py b/hr/doctype/job_applicant/job_applicant.py index e9b12b0f78..04b6da9568 100644 --- a/hr/doctype/job_applicant/job_applicant.py +++ b/hr/doctype/job_applicant/job_applicant.py @@ -11,9 +11,6 @@ class DocType(TransactionBase): def __init__(self, d, dl): self.doc, self.doclist = d, dl - def onload(self): - self.add_communication_list() - def get_sender(self, comm): return webnotes.conn.get_value('Jobs Email Settings',None,'email_id') diff --git a/hr/doctype/job_applicant/job_applicant.txt b/hr/doctype/job_applicant/job_applicant.txt index ebf95f68bb..62b1d807bc 100644 --- a/hr/doctype/job_applicant/job_applicant.txt +++ b/hr/doctype/job_applicant/job_applicant.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-29 19:25:37", "docstatus": 0, - "modified": "2013-07-05 14:43:11", + "modified": "2013-09-02 16:26:23", "modified_by": "Administrator", "owner": "Administrator" }, @@ -89,6 +89,14 @@ "fieldtype": "HTML", "label": "Thread HTML" }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "doctype": "DocPerm" } diff --git a/selling/doctype/customer/customer.py b/selling/doctype/customer/customer.py index 2eabf12dde..cb19d4f931 100644 --- a/selling/doctype/customer/customer.py +++ b/selling/doctype/customer/customer.py @@ -17,10 +17,7 @@ class DocType(TransactionBase): def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist - - def onload(self): - self.add_communication_list() - + def autoname(self): cust_master_name = webnotes.defaults.get_global_default('cust_master_name') if cust_master_name == 'Customer Name': diff --git a/selling/doctype/customer/customer.txt b/selling/doctype/customer/customer.txt index 7da29d2adb..94bd8fceb4 100644 --- a/selling/doctype/customer/customer.txt +++ b/selling/doctype/customer/customer.txt @@ -2,7 +2,7 @@ { "creation": "2013-06-11 14:26:44", "docstatus": 0, - "modified": "2013-08-08 14:22:13", + "modified": "2013-09-02 16:25:13", "modified_by": "Administrator", "owner": "Administrator" }, @@ -348,6 +348,15 @@ "options": "Customer Discount", "permlevel": 0 }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication", + "permlevel": 0 + }, { "amend": 0, "cancel": 0, diff --git a/selling/doctype/lead/get_leads.py b/selling/doctype/lead/get_leads.py index c63468e2f0..91ffd70070 100644 --- a/selling/doctype/lead/get_leads.py +++ b/selling/doctype/lead/get_leads.py @@ -12,6 +12,9 @@ def add_sales_communication(subject, content, sender, real_name, mail=None, lead_name = webnotes.conn.get_value("Lead", {"email_id": sender}) contact_name = webnotes.conn.get_value("Contact", {"email_id": sender}) + parent_doctype = "Contact" if contact_name else "Lead" + parent_name = contact_name or lead_name + if not (lead_name or contact_name): # none, create a new Lead lead = webnotes.bean({ @@ -26,11 +29,11 @@ def add_sales_communication(subject, content, sender, real_name, mail=None, lead_name = lead.doc.name message = make(content=content, sender=sender, subject=subject, - lead=lead_name, contact=contact_name, date=date) + doctype = parent_doctype, name = parent_name, date=date) if mail: # save attachments to parent if from mail - bean = webnotes.bean("Contact" if contact_name else "Lead", contact_name or lead_name) + bean = webnotes.bean(parent_doctype, parent_name) mail.save_attachments_in_doc(bean.doc) class SalesMailbox(POP3Mailbox): diff --git a/selling/doctype/lead/lead.py b/selling/doctype/lead/lead.py index 2bf1aa3845..063c5f0d09 100644 --- a/selling/doctype/lead/lead.py +++ b/selling/doctype/lead/lead.py @@ -24,7 +24,6 @@ class DocType(SellingController): }) def onload(self): - self.add_communication_list() customer = webnotes.conn.get_value("Customer", {"lead_name": self.doc.name}) if customer: self.doc.fields["__is_customer"] = customer diff --git a/selling/doctype/lead/lead.txt b/selling/doctype/lead/lead.txt index d66c6a0269..156b61ec7b 100644 --- a/selling/doctype/lead/lead.txt +++ b/selling/doctype/lead/lead.txt @@ -2,7 +2,7 @@ { "creation": "2013-04-10 11:45:37", "docstatus": 0, - "modified": "2013-08-08 14:22:14", + "modified": "2013-09-02 16:16:14", "modified_by": "Administrator", "owner": "Administrator" }, @@ -410,6 +410,14 @@ "fieldtype": "Check", "label": "Blog Subscriber" }, + { + "doctype": "DocField", + "fieldname": "communcations", + "fieldtype": "Table", + "hidden": 1, + "label": "Communcations", + "options": "Communication" + }, { "cancel": 1, "doctype": "DocPerm", diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py index 906e5470b0..a3ef1976d9 100644 --- a/selling/doctype/opportunity/opportunity.py +++ b/selling/doctype/opportunity/opportunity.py @@ -25,9 +25,6 @@ class DocType(TransactionBase): "contact_by": webnotes.conn.get_value("Opportunity", self.doc.name, "contact_by") if \ (not cint(self.doc.fields.get("__islocal"))) else None, }) - - def onload(self): - self.add_communication_list() def get_item_details(self, item_code): item = sql("""select item_name, stock_uom, description_html, description, item_group, brand diff --git a/selling/doctype/opportunity/opportunity.txt b/selling/doctype/opportunity/opportunity.txt index 5b1d93f962..4ca1564c7d 100644 --- a/selling/doctype/opportunity/opportunity.txt +++ b/selling/doctype/opportunity/opportunity.txt @@ -2,7 +2,7 @@ { "creation": "2013-03-07 18:50:30", "docstatus": 0, - "modified": "2013-08-08 14:22:15", + "modified": "2013-09-02 16:27:33", "modified_by": "Administrator", "owner": "Administrator" }, @@ -442,6 +442,14 @@ "read_only": 1, "width": "150px" }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "doctype": "DocPerm", "role": "Sales User" diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index b6ff1d7fd9..c1b529ca69 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -20,9 +20,6 @@ class DocType(SellingController): self.doclist = doclist self.tname = 'Quotation Item' self.fname = 'quotation_details' - - def onload(self): - self.add_communication_list() # Get contact person details based on customer selected # ------------------------------------------------------ diff --git a/selling/doctype/quotation/quotation.txt b/selling/doctype/quotation/quotation.txt index c3b24347ff..9d47259d80 100644 --- a/selling/doctype/quotation/quotation.txt +++ b/selling/doctype/quotation/quotation.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:08", "docstatus": 0, - "modified": "2013-08-09 14:46:11", + "modified": "2013-09-02 16:25:01", "modified_by": "Administrator", "owner": "Administrator" }, @@ -835,6 +835,14 @@ "read_only": 0, "width": "40px" }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "amend": 1, "cancel": 1, diff --git a/setup/doctype/sales_person/sales_person.txt b/setup/doctype/sales_person/sales_person.txt index 77ba6afd4e..d78b5c8d27 100644 --- a/setup/doctype/sales_person/sales_person.txt +++ b/setup/doctype/sales_person/sales_person.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:24", "docstatus": 0, - "modified": "2013-08-05 18:11:22", + "modified": "2013-09-02 16:26:54", "modified_by": "Administrator", "owner": "Administrator" }, @@ -160,6 +160,14 @@ "options": "Budget Distribution", "search_index": 0 }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "cancel": 0, "create": 0, diff --git a/support/doctype/support_ticket/get_support_mails.py b/support/doctype/support_ticket/get_support_mails.py index 7e09846dda..fb26e570d7 100644 --- a/support/doctype/support_ticket/get_support_mails.py +++ b/support/doctype/support_ticket/get_support_mails.py @@ -46,7 +46,7 @@ class SupportMailbox(POP3Mailbox): make(content=mail.content, sender=mail.from_email, subject = ticket.doc.subject, doctype="Support Ticket", name=ticket.doc.name, - lead = ticket.doc.lead, contact=ticket.doc.contact, date=mail.date) + date=mail.date) if new_ticket and cint(self.email_settings.send_autoreply) and \ "mailer-daemon" not in mail.from_email.lower(): diff --git a/support/doctype/support_ticket/support_ticket.py b/support/doctype/support_ticket/support_ticket.py index 2b8fe85c98..8e723ee3c1 100644 --- a/support/doctype/support_ticket/support_ticket.py +++ b/support/doctype/support_ticket/support_ticket.py @@ -11,9 +11,6 @@ class DocType(TransactionBase): def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist - - def onload(self): - self.add_communication_list() def get_sender(self, comm): return webnotes.conn.get_value('Email Settings',None,'support_email') @@ -53,7 +50,7 @@ class DocType(TransactionBase): if not self.doc.company: self.doc.company = webnotes.conn.get_value("Lead", self.doc.lead, "company") or \ webnotes.conn.get_default("company") - + def on_trash(self): webnotes.conn.sql("""update `tabCommunication` set support_ticket=NULL where support_ticket=%s""", (self.doc.name,)) diff --git a/support/doctype/support_ticket/support_ticket.txt b/support/doctype/support_ticket/support_ticket.txt index dcb45204fd..01d0e35388 100644 --- a/support/doctype/support_ticket/support_ticket.txt +++ b/support/doctype/support_ticket/support_ticket.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-01 10:36:25", "docstatus": 0, - "modified": "2013-08-28 18:29:06", + "modified": "2013-09-02 16:24:24", "modified_by": "Administrator", "owner": "Administrator" }, @@ -261,6 +261,14 @@ "hidden": 1, "label": "Content Type" }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "cancel": 0, "doctype": "DocPerm", diff --git a/utilities/doctype/contact/contact.py b/utilities/doctype/contact/contact.py index 961bb52153..9997cabea5 100644 --- a/utilities/doctype/contact/contact.py +++ b/utilities/doctype/contact/contact.py @@ -12,9 +12,6 @@ class DocType(TransactionBase): self.doc = doc self.doclist = doclist - def onload(self): - self.add_communication_list() - def on_communication_sent(self, comm): webnotes.conn.set(self.doc, 'status', 'Replied') diff --git a/utilities/doctype/contact/contact.txt b/utilities/doctype/contact/contact.txt index 63d02521db..d3c7d889fd 100644 --- a/utilities/doctype/contact/contact.txt +++ b/utilities/doctype/contact/contact.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:32", "docstatus": 0, - "modified": "2013-07-05 14:32:19", + "modified": "2013-09-02 16:26:13", "modified_by": "Administrator", "owner": "Administrator" }, @@ -225,6 +225,14 @@ "oldfieldtype": "Small Text", "read_only": 1 }, + { + "doctype": "DocField", + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication" + }, { "cancel": 1, "doctype": "DocPerm", diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py index aace0cb78e..22bc531851 100644 --- a/utilities/transaction_base.py +++ b/utilities/transaction_base.py @@ -229,20 +229,7 @@ class TransactionBase(StatusUpdater): if int(webnotes.conn.get_value("Notification Control", None, dt) or 0): self.doc.fields["__notification_message"] = \ webnotes.conn.get_value("Notification Control", None, dt + "_message") - - def add_communication_list(self): - # remove communications if present - self.doclist = webnotes.doclist(self.doclist).get({ - "doctype": ["!=", "Communcation"]}) - - comm_list = webnotes.conn.sql("""select * from tabCommunication - where %s=%s order by modified desc limit 20""" \ - % (self.doc.doctype.replace(" ", "_").lower(), "%s"), - self.doc.name, as_dict=1, update={"doctype":"Communication"}) - - self.doclist.extend(webnotes.doclist([webnotes.doc(fielddata=d) \ - for d in comm_list])) - + def validate_posting_time(self): if not self.doc.posting_time: self.doc.posting_time = now_datetime().strftime('%H:%M:%S') From 0b8254e69b9ce90391b56f774c3fa8a6f1c10ccf Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Sep 2013 17:17:48 +0530 Subject: [PATCH 13/15] [fix] [minor] recreate gl entries when using auto inventory accounting to fix bug introduced due to commit - 5dd6b1d082d180133813c1c661d5e72076a19491 --- .../september_2013/p01_fix_buying_amount_gl_entries.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/patches/september_2013/p01_fix_buying_amount_gl_entries.py b/patches/september_2013/p01_fix_buying_amount_gl_entries.py index 011180a58a..369a2914f1 100644 --- a/patches/september_2013/p01_fix_buying_amount_gl_entries.py +++ b/patches/september_2013/p01_fix_buying_amount_gl_entries.py @@ -25,6 +25,9 @@ def recreate_gl_entries(doctype, name, parentfield): bean = webnotes.bean(doctype, name) bean.run_method("set_buying_amount") + company_values = webnotes.conn.get_value("Company", bean.doc.company, ["default_expense_account", + "stock_adjustment_account", "cost_center", "stock_adjustment_cost_center"]) + # update missing expense account and cost center for item in bean.doclist.get({"parentfield": parentfield}): if item.buying_amount and not validate_item_values(item, bean.doc.company): @@ -38,9 +41,12 @@ def recreate_gl_entries(doctype, name, parentfield): if res: item.expense_account = res[0][0] item.cost_center = res[0][1] + elif company_values: + item.expense_account = company_values[0] or company_values[1] + item.cost_center = company_values[2] or company_values[3] - webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) - webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) + webnotes.conn.set_value(item.doctype, item.name, "expense_account", item.expense_account) + webnotes.conn.set_value(item.doctype, item.name, "cost_center", item.cost_center) # remove gl entries webnotes.conn.sql("""delete from `tabGL Entry` where voucher_type=%s From 8f04d119bbc4698db6e7f55e15334a57d282b2c8 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Sep 2013 17:39:59 +0530 Subject: [PATCH 14/15] [communication] [minor --- patches/patch_list.py | 1 + patches/september_2013/__init__.py | 0 patches/september_2013/p01_update_communication.py | 10 ++++++++++ selling/doctype/lead/lead.txt | 6 +++--- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 patches/september_2013/__init__.py create mode 100644 patches/september_2013/p01_update_communication.py diff --git a/patches/patch_list.py b/patches/patch_list.py index 1d382a56bd..b515339b49 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -257,4 +257,5 @@ patch_list = [ "execute:webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice') # 2013-08-16", "patches.august_2013.p06_fix_sle_against_stock_entry", "execute:webnotes.bean('Style Settings').save() #2013-08-20", + "patches.september_2013.p01_update_communication" ] \ No newline at end of file diff --git a/patches/september_2013/__init__.py b/patches/september_2013/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/patches/september_2013/p01_update_communication.py b/patches/september_2013/p01_update_communication.py new file mode 100644 index 0000000000..c3bd61b402 --- /dev/null +++ b/patches/september_2013/p01_update_communication.py @@ -0,0 +1,10 @@ +import webnotes + +def execute(): + for doctype in ("Contact", "Lead", "Job Applicant", "Supplier", "Customer", "Quotation", "Sales Person", "Support Ticket"): + fieldname = doctype.replace(" ", '_').lower() + webnotes.conn.sql("""update tabCommunication + set parenttype=%s, parentfield='communications', + parent=`%s` + where ifnull(`%s`, '')!=''""" % ("%s", fieldname, fieldname), doctype) + \ No newline at end of file diff --git a/selling/doctype/lead/lead.txt b/selling/doctype/lead/lead.txt index 156b61ec7b..9402259ac7 100644 --- a/selling/doctype/lead/lead.txt +++ b/selling/doctype/lead/lead.txt @@ -2,7 +2,7 @@ { "creation": "2013-04-10 11:45:37", "docstatus": 0, - "modified": "2013-09-02 16:16:14", + "modified": "2013-09-02 17:25:59", "modified_by": "Administrator", "owner": "Administrator" }, @@ -412,10 +412,10 @@ }, { "doctype": "DocField", - "fieldname": "communcations", + "fieldname": "communications", "fieldtype": "Table", "hidden": 1, - "label": "Communcations", + "label": "Communications", "options": "Communication" }, { From 2e131e26d42ddb8623643e474f460f9c521d112d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 2 Sep 2013 18:07:53 +0530 Subject: [PATCH 15/15] [fix] [minor] Taxes and charges added/deducted only if category in "Valuation and Total" or "Total" --- buying/doctype/purchase_common/purchase_common.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js index 67ba33c245..5785b1a9d5 100644 --- a/buying/doctype/purchase_common/purchase_common.js +++ b/buying/doctype/purchase_common/purchase_common.js @@ -333,10 +333,10 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ // other charges added/deducted if(tax_count) { this.frm.doc.other_charges_added = wn.utils.sum($.map(this.frm.tax_doclist, - function(tax) { return tax.add_deduct_tax == "Add" ? tax.tax_amount : 0.0; })); + function(tax) { return (tax.add_deduct_tax == "Add" && in_list(["Valuation and Total", "Total"], tax.category)) ? tax.tax_amount : 0.0; })); this.frm.doc.other_charges_deducted = wn.utils.sum($.map(this.frm.tax_doclist, - function(tax) { return tax.add_deduct_tax == "Deduct" ? tax.tax_amount : 0.0; })); + function(tax) { return (tax.add_deduct_tax == "Deduct" && in_list(["Valuation and Total", "Total"], tax.category)) ? tax.tax_amount : 0.0; })); wn.model.round_floats_in(this.frm.doc, ["other_charges_added", "other_charges_deducted"]);