From 06b22e9ac132f8e6b08adcd096727eac0d8d1222 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 6 Sep 2017 19:45:36 +0530 Subject: [PATCH 01/12] [Fix] Customer search optimization for the offline POS --- erpnext/accounts/page/pos/pos.js | 74 ++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 33b41e9ee4..f8399bf518 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -732,7 +732,12 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ input = input.toLowerCase(); item = this.get_item(item.value); - return item.searchtext.includes(input) + result = item ? item.searchtext.includes(input) : ''; + if(!result) { + me.prepare_customer_mapper(input); + } else { + return result; + } }, item: function (item, input) { var d = this.get_item(item.value); @@ -753,6 +758,9 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.party_field.$input .on('input', function (e) { + if(me.customers_mapper.length <= 1) { + me.prepare_customer_mapper(e.target.value); + } me.party_field.awesomeplete.list = me.customers_mapper; }) .on('awesomplete-select', function (e) { @@ -793,24 +801,56 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); }, - prepare_customer_mapper: function() { + prepare_customer_mapper: function(key) { var me = this; + var customer_data = ''; - this.customers_mapper = this.customers.map(function (c) { - contact = me.contacts[c.name]; - return { - label: c.name, - value: c.name, - customer_name: c.customer_name, - customer_group: c.customer_group, - territory: c.territory, - phone: contact ? contact["phone"] : '', - mobile_no: contact ? contact["mobile_no"] : '', - email_id: contact ? contact["email_id"] : '', - searchtext: ['customer_name', 'customer_group', 'value', - 'label', 'email_id', 'phone', 'mobile_no'] - .map(key => c[key]).join(' ') - .toLowerCase() + if (key) { + key = key.toLowerCase().trim(); + var re = new RegExp('%', 'g'); + var reg = new RegExp(key.replace(re, '\\w*\\s*[a-zA-Z0-9]*')); + + customer_data = $.grep(this.customers, function(data) { + contact = me.contacts[data.name]; + if(reg.test(data.name.toLowerCase()) + || reg.test(data.customer_name.toLowerCase()) + || (contact && reg.test(contact["mobile_no"])) + || (contact && reg.test(contact["phone"])) + || (data.customer_group && reg.test(data.customer_group.toLowerCase()))){ + return data; + } + }) + } else { + customer_data = this.customers; + } + + this.customers_mapper = []; + + customer_data.forEach(function (c, index) { + if(index < 30) { + contact = me.contacts[c.name]; + if(contact && !c['phone']) { + c["phone"] = contact["phone"]; + c["email_id"] = contact["email_id"]; + c["mobile_no"] = contact["mobile_no"]; + } + + me.customers_mapper.push({ + label: c.name, + value: c.name, + customer_name: c.customer_name, + customer_group: c.customer_group, + territory: c.territory, + phone: contact ? contact["phone"] : '', + mobile_no: contact ? contact["mobile_no"] : '', + email_id: contact ? contact["email_id"] : '', + searchtext: ['customer_name', 'customer_group', 'name', 'value', + 'label', 'email_id', 'phone', 'mobile_no'] + .map(key => c[key]).join(' ') + .toLowerCase() + }); + } else { + return; } }); From f5cbb9c7b95118b5904b967f23ed600146ceef8d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Sep 2017 13:58:15 +0530 Subject: [PATCH 02/12] [fix] Actual amount for budget variance report --- .../report/budget_variance_report/budget_variance_report.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py index 875ec99663..bc457aa6f2 100644 --- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py @@ -99,7 +99,8 @@ def get_actual_details(name, filters): where b.name = ba.parent and b.docstatus = 1 - and ba.account=gl.account + and ba.account=gl.account + and b.{budget_against} = gl.{budget_against} and gl.fiscal_year=%s and b.{budget_against}=%s and exists(select name from `tab{tab}` where name=gl.{budget_against} and {cond}) From cfb9310d138ec83fac9a9aa21040ed743ff2c402 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Sep 2017 15:00:16 +0530 Subject: [PATCH 03/12] Removed commit after creating custom gst fields --- erpnext/regional/india/setup.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py index 0c59ba003a..f306945bf0 100644 --- a/erpnext/regional/india/setup.py +++ b/erpnext/regional/india/setup.py @@ -54,8 +54,6 @@ def create_hsn_codes(data, code_field): hsn_code.name = d[code_field] hsn_code.db_insert() - frappe.db.commit() - def add_custom_roles_for_reports(): for report_name in ('GST Sales Register', 'GST Purchase Register', 'GST Itemised Sales Register', 'GST Itemised Purchase Register'): From 509bca36b17be80d5fbe97f4ee22dedb9d235e13 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Sep 2017 15:18:58 +0530 Subject: [PATCH 04/12] Reverse charge in gst print format --- .../print_format/gst_tax_invoice/gst_tax_invoice.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json b/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json index cb99fd0f38..55d870f996 100644 --- a/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json +++ b/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json @@ -1,5 +1,5 @@ { - "align_labels_left": 0, + "align_labels_right": 0, "creation": "2017-07-04 16:26:21.120187", "custom_format": 0, "disabled": 0, @@ -7,10 +7,10 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"
\\n\\t

\\n\\t\\tTAX INVOICE
\\n\\t\\t{{ doc.name }}\\n\\t

\\n
\\n

\\n\\t{% if doc.invoice_copy -%}\\n\\t\\t{{ doc.invoice_copy }}\\n\\t{% endif -%}\\n

\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"company_address_display\", \"label\": \"Company Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"posting_date\", \"label\": \"Date\"}, {\"print_hide\": 0, \"fieldname\": \"due_date\", \"label\": \"Payment Due Date\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"options\": \"
\", \"fieldname\": \"_custom_html\", \"fieldtype\": \"HTML\", \"label\": \"Custom HTML\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"customer_name\", \"label\": \"Customer Name\"}, {\"print_hide\": 0, \"fieldname\": \"address_display\", \"label\": \"Address\"}, {\"print_hide\": 0, \"fieldname\": \"contact_display\", \"label\": \"Contact\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"shipping_address\", \"label\": \"Shipping Address\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"item_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"200px\"}, {\"print_hide\": 0, \"fieldname\": \"gst_hsn_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"serial_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"uom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"items\", \"label\": \"Items\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"total\", \"label\": \"Total\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}], \"print_hide\": 0, \"fieldname\": \"taxes\", \"label\": \"Sales Taxes and Charges\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"grand_total\", \"label\": \"Grand Total\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"in_words\", \"label\": \"In Words\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"other_charges_calculation\", \"align\": \"left\", \"label\": \"Tax Breakup\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Terms\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"terms\", \"label\": \"Terms and Conditions Details\"}]", + "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"
\\n\\t

\\n\\t\\tTAX INVOICE
\\n\\t\\t{{ doc.name }}\\n\\t

\\n
\\n

\\n\\t{% if doc.invoice_copy -%}\\n\\t\\t{{ doc.invoice_copy }}\\n\\t{% endif -%}\\n

\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"company_address_display\", \"label\": \"Company Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"posting_date\", \"label\": \"Date\"}, {\"print_hide\": 0, \"fieldname\": \"due_date\", \"label\": \"Payment Due Date\"}, {\"print_hide\": 0, \"fieldname\": \"reverse_charge\", \"label\": \"Reverse Charge\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"options\": \"
\", \"fieldname\": \"_custom_html\", \"fieldtype\": \"HTML\", \"label\": \"Custom HTML\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"customer_name\", \"label\": \"Customer Name\"}, {\"print_hide\": 0, \"fieldname\": \"address_display\", \"label\": \"Address\"}, {\"print_hide\": 0, \"fieldname\": \"contact_display\", \"label\": \"Contact\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"shipping_address\", \"label\": \"Shipping Address\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"item_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"200px\"}, {\"print_hide\": 0, \"fieldname\": \"gst_hsn_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"serial_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"uom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"items\", \"label\": \"Items\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"total\", \"label\": \"Total\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}], \"print_hide\": 0, \"fieldname\": \"taxes\", \"label\": \"Sales Taxes and Charges\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"grand_total\", \"label\": \"Grand Total\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"in_words\", \"label\": \"In Words\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"other_charges_calculation\", \"align\": \"left\", \"label\": \"Tax Breakup\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Terms\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"terms\", \"label\": \"Terms and Conditions Details\"}]", "idx": 0, "line_breaks": 0, - "modified": "2017-08-29 13:58:58.503343", + "modified": "2017-09-11 14:56:25.303797", "modified_by": "Administrator", "module": "Regional", "name": "GST Tax Invoice", From e5716e3b1ef9175d94cc327d702e8b7bde46b949 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Sep 2017 19:21:37 +0530 Subject: [PATCH 05/12] Default view of BOM is Listview --- erpnext/hooks.py | 2 +- erpnext/regional/india/setup.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 7e65fc9262..adcf5dec94 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -38,7 +38,7 @@ get_help_messages = "erpnext.utilities.activation.get_help_messages" on_session_creation = "erpnext.shopping_cart.utils.set_cart_count" on_logout = "erpnext.shopping_cart.utils.clear_cart_count" -treeviews = ['Account', 'Cost Center', 'Warehouse', 'Item Group', 'Customer Group', 'Sales Person', 'Territory', "BOM"] +treeviews = ['Account', 'Cost Center', 'Warehouse', 'Item Group', 'Customer Group', 'Sales Person', 'Territory'] # website update_website_context = "erpnext.shopping_cart.utils.update_website_context" diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py index f306945bf0..59e23a7882 100644 --- a/erpnext/regional/india/setup.py +++ b/erpnext/regional/india/setup.py @@ -78,7 +78,8 @@ def add_print_formats(): def make_custom_fields(): hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC', - fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description', print_hide=1) + fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description', + allow_on_submit=1, print_hide=1) invoice_gst_fields = [ dict(fieldname='gst_section', label='GST Details', fieldtype='Section Break', insert_after='select_print_heading', print_hide=1, collapsible=1), From 38830e54d82e5f5564060c8c8c302fe0b594f213 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 12 Sep 2017 11:25:02 +0530 Subject: [PATCH 06/12] [fix] No module namd student_batch_name.student_batch_name error in the patch (#10745) --- erpnext/patches/v8_0/merge_student_batch_and_student_group.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py index c5654eb3ac..d30b35e909 100644 --- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py +++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py @@ -9,7 +9,8 @@ from frappe.model.mapper import get_mapped_doc def execute(): # for converting student batch into student group - for doctype in ["Student Group", "Student Group Student", "Student Group Instructor", "Student Attendance", "Student"]: + for doctype in ["Student Group", "Student Group Student", + "Student Group Instructor", "Student Attendance", "Student", "Student Batch Name"]: frappe.reload_doc("schools", "doctype", frappe.scrub(doctype)) if frappe.db.table_exists("Student Batch"): From d54d6bc572b892ba3d1fd9c230c38e813b8df8d9 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 12 Sep 2017 11:31:10 +0530 Subject: [PATCH 07/12] [fix] use stock_qty in reports instead of qty to match with stock_uom (#10727) --- .../item_wise_purchase_register.py | 6 +++--- .../item_wise_sales_register/item_wise_sales_register.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py index fa458df472..b21027ee35 100644 --- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py +++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py @@ -49,7 +49,7 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum row += [ d.credit_to, d.mode_of_payment, d.project, d.company, d.purchase_order, - purchase_receipt, expense_account, d.qty, d.stock_uom, d.base_net_rate, d.base_net_amount + purchase_receipt, expense_account, d.stock_qty, d.stock_uom, d.base_net_rate, d.base_net_amount ] total_tax = 0 @@ -81,7 +81,7 @@ def get_columns(additional_table_columns): _("Mode of Payment") + ":Link/Mode of Payment:80", _("Project") + ":Link/Project:80", _("Company") + ":Link/Company:100", _("Purchase Order") + ":Link/Purchase Order:100", _("Purchase Receipt") + ":Link/Purchase Receipt:100", _("Expense Account") + ":Link/Account:140", - _("Qty") + ":Float:120", _("Stock UOM") + "::100", + _("Stock Qty") + ":Float:120", _("Stock UOM") + "::100", _("Rate") + ":Currency/currency:120", _("Amount") + ":Currency/currency:120" ] @@ -112,7 +112,7 @@ def get_items(filters, additional_query_columns): pi_item.name, pi_item.parent, pi.posting_date, pi.credit_to, pi.company, pi.supplier, pi.remarks, pi.base_net_total, pi_item.item_code, pi_item.item_name, pi_item.item_group, pi_item.project, pi_item.purchase_order, pi_item.purchase_receipt, - pi_item.po_detail, pi_item.expense_account, pi_item.qty, pi_item.stock_uom, + pi_item.po_detail, pi_item.expense_account, pi_item.stock_qty, pi_item.stock_uom, pi_item.base_net_rate, pi_item.base_net_amount, pi.supplier_name, pi.mode_of_payment {0} from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index 0fc58316ef..eb50022688 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -49,7 +49,7 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum row += [ d.customer_group, d.debit_to, ", ".join(mode_of_payments.get(d.parent, [])), d.territory, d.project, d.company, d.sales_order, - delivery_note, d.income_account, d.cost_center, d.qty, d.stock_uom, + delivery_note, d.income_account, d.cost_center, d.stock_qty, d.stock_uom, d.base_net_rate, d.base_net_amount ] @@ -82,7 +82,7 @@ def get_columns(additional_table_columns): _("Project") + ":Link/Project:80", _("Company") + ":Link/Company:100", _("Sales Order") + ":Link/Sales Order:100", _("Delivery Note") + ":Link/Delivery Note:100", _("Income Account") + ":Link/Account:140", _("Cost Center") + ":Link/Cost Center:140", - _("Qty") + ":Float:120", _("Stock UOM") + "::100", + _("Stock Qty") + ":Float:120", _("Stock UOM") + "::100", _("Rate") + ":Currency/currency:120", _("Amount") + ":Currency/currency:120" ] @@ -118,7 +118,7 @@ def get_items(filters, additional_query_columns): si.customer, si.remarks, si.territory, si.company, si.base_net_total, si_item.item_code, si_item.item_name, si_item.item_group, si_item.sales_order, si_item.delivery_note, si_item.income_account, si_item.cost_center, - si_item.qty, si_item.stock_uom, si_item.base_net_rate, si_item.base_net_amount, + si_item.stock_qty, si_item.stock_uom, si_item.base_net_rate, si_item.base_net_amount, si.customer_name, si.customer_group, si_item.so_detail, si.update_stock {0} from `tabSales Invoice` si, `tabSales Invoice Item` si_item where si.name = si_item.parent and si.docstatus = 1 %s From c9e96c15aff67993c6107778f7f6eb167b32aac3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 12 Sep 2017 15:45:39 +0530 Subject: [PATCH 08/12] Rate and amount in a single row in tax breakup --- erpnext/templates/includes/itemised_tax_breakup.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/includes/itemised_tax_breakup.html b/erpnext/templates/includes/itemised_tax_breakup.html index 2fda0f8aac..4162b3ab5a 100644 --- a/erpnext/templates/includes/itemised_tax_breakup.html +++ b/erpnext/templates/includes/itemised_tax_breakup.html @@ -23,7 +23,7 @@ {% if tax_details %} {% if tax_details.tax_rate or not tax_details.tax_amount %} - ({{ tax_details.tax_rate }}%)
+ ({{ tax_details.tax_rate }}%) {% endif %} {{ frappe.utils.fmt_money(tax_details.tax_amount, None, company_currency) }} From 580f39a12c3cf25536cfbece66a0fe11b2379059 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 12 Sep 2017 15:49:36 +0530 Subject: [PATCH 09/12] check the instructor table before querying (#10754) --- .../patches/v8_0/merge_student_batch_and_student_group.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py index d30b35e909..aacd97b2d9 100644 --- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py +++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py @@ -40,8 +40,10 @@ def execute(): student.update({"group_roll_number": i+1}) doc.extend("students", student_list) - instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor` - where parent=%s''', (doc.student_group_name), as_dict=1) + instructor_list = None + if frappe.db.table_exists("Student Batch Instructor"): + instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor` + where parent=%s''', (doc.student_group_name), as_dict=1) if instructor_list: doc.extend("instructors", instructor_list) doc.save() From 54099e592e16b49de1166a3d3198a1aef187be7d Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 12 Sep 2017 15:51:52 +0530 Subject: [PATCH 10/12] [fix] Serial No has already been received error while making purchase receipt entry for the returned serial no (#10736) --- erpnext/stock/doctype/serial_no/serial_no.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index ca64b1eda2..c39efa06f7 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -240,7 +240,8 @@ def has_duplicate_serial_no(sn, sle): status = False if sn.purchase_document_no: - if sle.voucher_type in ['Purchase Receipt', 'Stock Entry']: + if sle.voucher_type in ['Purchase Receipt', 'Stock Entry'] and \ + sn.delivery_document_type not in ['Purchase Receipt', 'Stock Entry']: status = True if status and sle.voucher_type == 'Stock Entry' and \ From 67dfd26639a716cac35c439ffcffa4ac6493d142 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 12 Sep 2017 15:54:27 +0530 Subject: [PATCH 11/12] [fix] Production planning tool, unable to download material required report (#10704) --- .../production_planning_tool.py | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 050c3c1c33..815e504447 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -376,19 +376,20 @@ class ProductionPlanningTool(Document): else: bom_wise_item_details[d.item_code] = d - if include_sublevel: + if include_sublevel and d.default_bom: if ((d.default_material_request_type == "Purchase" and d.is_sub_contracted and supply_subs) or (d.default_material_request_type == "Manufacture")): my_qty = 0 projected_qty = self.get_item_projected_qty(d.item_code) - if self.create_material_requests_for_all_required_qty: my_qty = d.qty - elif (bom_wise_item_details[d.item_code].qty - d.qty) < projected_qty: - my_qty = bom_wise_item_details[d.item_code].qty - projected_qty else: - my_qty = d.qty + total_required_qty = flt(bom_wise_item_details.get(d.item_code, frappe._dict()).qty) + if (total_required_qty - d.qty) < projected_qty: + my_qty = total_required_qty - projected_qty + else: + my_qty = d.qty if my_qty > 0: self.get_subitems(bom_wise_item_details, @@ -483,14 +484,15 @@ class ProductionPlanningTool(Document): return items_to_be_requested def get_item_projected_qty(self,item): + conditions = "" + if self.purchase_request_for_warehouse: + conditions = " and warehouse='{0}'".format(frappe.db.escape(self.purchase_request_for_warehouse)) + item_projected_qty = frappe.db.sql(""" select ifnull(sum(projected_qty),0) as qty from `tabBin` - where item_code = %(item_code)s and warehouse=%(warehouse)s - """, { - "item_code": item, - "warehouse": self.purchase_request_for_warehouse - }, as_dict=1) + where item_code = %(item_code)s {conditions} + """.format(conditions=conditions), { "item_code": item }, as_dict=1) return item_projected_qty[0].qty From e47bd4f4773291b768ec3b242312f56b5f12e0cd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 12 Sep 2017 16:46:55 +0600 Subject: [PATCH 12/12] bumped to version 8.11.2 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index c97197d8f4..1c9b0b4530 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -4,7 +4,7 @@ import inspect import frappe from erpnext.hooks import regional_overrides -__version__ = '8.11.1' +__version__ = '8.11.2' def get_default_company(user=None): '''Get default company for user'''