From ccf2b7b08b6f5be2ca9c08d8c0303f5051411018 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Thu, 29 Mar 2018 16:36:59 +0530 Subject: [PATCH 01/15] minor fix for the program enrollment tool --- .../doctype/program_enrollment_tool/program_enrollment_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py b/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py index bc6021839a..ca5b49cde7 100644 --- a/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py +++ b/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py @@ -26,7 +26,7 @@ class ProgramEnrollmentTool(Document): elif self.get_students_from == "Program Enrollment": condition2 = 'and student_batch_name=%(student_batch)s' if self.student_batch else " " students = frappe.db.sql('''select student, student_name, student_batch_name from `tabProgram Enrollment` - where program=%(program)s and academic_year=%(academic_year)s {0} {1}''' + where program=%(program)s and academic_year=%(academic_year)s {0} {1} and docstatus != 2''' .format(condition, condition2), self.as_dict(), as_dict=1) student_list = [d.student for d in students] From 9240eaa0a6f1282a651ec549a90e4b5bd48aac60 Mon Sep 17 00:00:00 2001 From: Shreya Date: Fri, 30 Mar 2018 12:19:11 +0530 Subject: [PATCH 02/15] typo for accrual journal entry --- erpnext/demo/user/hr.py | 4 ++-- erpnext/hr/doctype/payroll_entry/payroll_entry.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/demo/user/hr.py b/erpnext/demo/user/hr.py index 504478a241..f5dcecf303 100644 --- a/erpnext/demo/user/hr.py +++ b/erpnext/demo/user/hr.py @@ -34,14 +34,14 @@ def work(): payroll_entry.salary_slip_based_on_timesheet = 0 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() - payroll_entry.make_accural_jv_entry() + payroll_entry.make_accrual_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) payroll_entry.salary_slip_based_on_timesheet = 1 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() - payroll_entry.make_accural_jv_entry() + payroll_entry.make_accrual_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py index e53a2a67fa..111df4c973 100644 --- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py +++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py @@ -164,7 +164,7 @@ class PayrollEntry(Document): except frappe.ValidationError: not_submitted_ss.append(ss_dict) if submitted_ss: - jv_name = self.make_accural_jv_entry() + jv_name = self.make_accrual_jv_entry() frappe.msgprint(_("Salary Slip submitted for period from {0} to {1}") .format(ss_obj.start_date, ss_obj.end_date)) @@ -237,7 +237,7 @@ class PayrollEntry(Document): return payroll_payable_account - def make_accural_jv_entry(self): + def make_accrual_jv_entry(self): self.check_permission('write') earnings = self.get_salary_component_total(component_type = "earnings") or {} deductions = self.get_salary_component_total(component_type = "deductions") or {} @@ -249,7 +249,7 @@ class PayrollEntry(Document): if earnings or deductions: journal_entry = frappe.new_doc('Journal Entry') journal_entry.voucher_type = 'Journal Entry' - journal_entry.user_remark = _('Accural Journal Entry for salaries from {0} to {1}')\ + journal_entry.user_remark = _('Accrual Journal Entry for salaries from {0} to {1}')\ .format(self.start_date, self.end_date) journal_entry.company = self.company journal_entry.posting_date = self.posting_date From 03016e5000572147fda38ee326a08ddc54b16908 Mon Sep 17 00:00:00 2001 From: Gaurav Naik Date: Wed, 17 Jan 2018 16:12:55 +0530 Subject: [PATCH 03/15] Exploded view for BOM Stock Report (#12506) * Multilevel BOM Stock Report prototype * Rechristened multilevel to exploded view * Removed trailing whitespace in line 16. Replaced spaces with tabs for indentation * Used BOM Explosion item in query for exploded view * Removed trailing whitespaces for Codacy compliance --- .../bom_stock_report/bom_stock_report.js | 4 + .../bom_stock_report/bom_stock_report.py | 89 ++++++++++--------- 2 files changed, 53 insertions(+), 40 deletions(-) diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js index 95c78e6f1f..049a822ec0 100644 --- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js +++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js @@ -12,6 +12,10 @@ frappe.query_reports["BOM Stock Report"] = { "fieldtype": "Link", "options": "Warehouse", "reqd": 1 + }, { + "fieldname": "show_exploded_view", + "label": __("Show exploded view"), + "fieldtype": "Check" } ] } diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py index ab9f83d522..32368395c0 100644 --- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py +++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py @@ -6,52 +6,61 @@ import frappe from frappe import _ def execute(filters=None): - if not filters: filters = {} - columns = get_columns() - data = get_bom_stock(filters) - return columns, data + if not filters: filters = {} + columns = get_columns() + + data = get_bom_stock(filters) + + return columns, data def get_columns(): - """return columns""" - columns = [ - _("Item") + ":Link/Item:150", - _("Description") + "::500", - _("Required Qty") + ":Float:100", - _("In Stock Qty") + ":Float:100", - _("Enough Parts to Build") + ":Float:200", - ] + """return columns""" + columns = [ + _("Item") + ":Link/Item:150", + _("Description") + "::500", + _("Required Qty") + ":Float:100", + _("In Stock Qty") + ":Float:100", + _("Enough Parts to Build") + ":Float:200", + ] - return columns + return columns def get_bom_stock(filters): - conditions = "" - bom = filters.get("bom") + conditions = "" + bom = filters.get("bom") - if filters.get("warehouse"): - warehouse_details = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1) - if warehouse_details: - conditions += " and exists (select name from `tabWarehouse` wh \ - where wh.lft >= %s and wh.rgt <= %s and ledger.warehouse = wh.name)" % (warehouse_details.lft, - warehouse_details.rgt) - else: - conditions += " and ledger.warehouse = '%s'" % frappe.db.escape(filters.get("warehouse")) + table = "`tabBOM Item`" + qty_field = "qty" - else: - conditions += "" + if filters.get("show_exploded_view"): + table = "`tabBOM Explosion Item`" + qty_field = "stock_qty" - return frappe.db.sql(""" - SELECT - bom_item.item_code , - bom_item.description , - bom_item.qty, - sum(ledger.actual_qty) as actual_qty, - sum(FLOOR(ledger.actual_qty /bom_item.qty))as to_build - FROM - `tabBOM Item` AS bom_item - LEFT JOIN `tabBin` AS ledger - ON bom_item.item_code = ledger.item_code - %s - WHERE - bom_item.parent = '%s' and bom_item.parenttype='BOM' + if filters.get("warehouse"): + warehouse_details = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1) + if warehouse_details: + conditions += " and exists (select name from `tabWarehouse` wh \ + where wh.lft >= %s and wh.rgt <= %s and ledger.warehouse = wh.name)" % (warehouse_details.lft, + warehouse_details.rgt) + else: + conditions += " and ledger.warehouse = '%s'" % frappe.db.escape(filters.get("warehouse")) - GROUP BY bom_item.item_code""" % (conditions, bom)) + else: + conditions += "" + + return frappe.db.sql(""" + SELECT + bom_item.item_code , + bom_item.description , + bom_item.{qty_field}, + sum(ledger.actual_qty) as actual_qty, + sum(FLOOR(ledger.actual_qty / bom_item.{qty_field}))as to_build + FROM + {table} AS bom_item + LEFT JOIN `tabBin` AS ledger + ON bom_item.item_code = ledger.item_code + {conditions} + WHERE + bom_item.parent = '{bom}' and bom_item.parenttype='BOM' + + GROUP BY bom_item.item_code""".format(qty_field=qty_field, table=table, conditions=conditions, bom=bom)) From 562227db8f3b0d70b6b8e1b45d730a51cc851fd0 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Mon, 2 Apr 2018 10:12:37 +0530 Subject: [PATCH 04/15] db escape as single quote in address causes error (#13451) --- erpnext/setup/doctype/company/delete_company_transactions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/company/delete_company_transactions.py b/erpnext/setup/doctype/company/delete_company_transactions.py index d975a9ee8d..247445da5d 100644 --- a/erpnext/setup/doctype/company/delete_company_transactions.py +++ b/erpnext/setup/doctype/company/delete_company_transactions.py @@ -85,7 +85,7 @@ def delete_lead_addresses(company_name): in ({leads})""".format(leads=",".join(leads))) if addresses: - addresses = ["'%s'"%addr for addr in addresses] + addresses = ["'%s'"%frappe.db.escape(addr) for addr in addresses] frappe.db.sql("""delete from tabAddress where name in ({addresses}) and name not in (select distinct dl1.parent from `tabDynamic Link` dl1 From 0289ad285f4396a4a922fed64cd21219d9b20516 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 2 Apr 2018 10:13:22 +0530 Subject: [PATCH 05/15] fix the route filters and payment account (#13447) --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 2 ++ erpnext/hr/doctype/expense_claim/expense_claim.js | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index eafdac3c31..2f8e6b83a2 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -768,6 +768,8 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_account = doc.receivable_account elif dt == "Employee Advance": party_account = doc.advance_account + elif dt == "Expense Claim": + party_account = doc.payable_account else: party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company) diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js index f40e77c53c..7cce7d34dd 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/expense_claim.js @@ -98,9 +98,9 @@ cur_frm.cscript.refresh = function(doc) { if (cint(doc.total_amount_reimbursed) > 0 && frappe.model.can_read(entry_doctype)) { cur_frm.add_custom_button(__('Bank Entries'), function() { frappe.route_options = { - entry_route_doctype: me.frm.doc.doctype, - entry_route_name: me.frm.doc.name, - company: me.frm.doc.company + party_type: "Employee", + party: doc.employee, + company: doc.company }; frappe.set_route("List", entry_doctype); }, __("View")); @@ -205,7 +205,7 @@ frappe.ui.form.on("Expense Claim", { make_payment_entry: function(frm) { var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry"; if(frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) { - method = "erpnext.hr.doctype.expense_claim.expense_claim.make_bank_entry" + method = "erpnext.hr.doctype.expense_claim.expense_claim.make_bank_entry"; } return frappe.call({ method: method, From d17c24f96951e97954159e65caddbdd8b86eeef3 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Mon, 2 Apr 2018 10:13:48 +0530 Subject: [PATCH 06/15] set query in payment account (#13446) --- .../hr/doctype/salary_structure/salary_structure.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js index 68c5f25fd2..8e6b69bd9e 100755 --- a/erpnext/hr/doctype/salary_structure/salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/salary_structure.js @@ -39,6 +39,16 @@ frappe.ui.form.on('Salary Structure', { } } }); + frm.set_query("payment_account", function () { + var account_types = ["Bank", "Cash"]; + return { + filters: { + "account_type": ["in", account_types], + "is_group": 0, + "company": frm.doc.company + } + }; + }); }, refresh: function(frm) { From 40a5a3063c4f8336af5c10d0adca038cdc2a4b78 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 2 Apr 2018 10:14:49 +0530 Subject: [PATCH 07/15] [Fix] Allow zero valuation rate if previous sle has zero valuation rate (#13432) --- erpnext/stock/stock_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index db9c2a682f..22db7f12ab 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -442,7 +442,7 @@ def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` where item_code = %s and warehouse = %s - and valuation_rate > 0 + and valuation_rate >= 0 order by posting_date desc, posting_time desc, name desc limit 1""", (item_code, warehouse)) if not last_valuation_rate: From a8df73c263b1409a303278149ada8e5db8731814 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Mon, 2 Apr 2018 10:16:27 +0530 Subject: [PATCH 08/15] typo in landed cost voucher doc (#13472) --- erpnext/docs/user/manual/en/stock/tools/landed-cost-voucher.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/docs/user/manual/en/stock/tools/landed-cost-voucher.md b/erpnext/docs/user/manual/en/stock/tools/landed-cost-voucher.md index a11759d233..259d60e070 100644 --- a/erpnext/docs/user/manual/en/stock/tools/landed-cost-voucher.md +++ b/erpnext/docs/user/manual/en/stock/tools/landed-cost-voucher.md @@ -24,7 +24,7 @@ In the document, you can select multiple Purchase Receipts and fetch all items f Landed Cost Vouher -### What happend on submission? +### What happens on submission? 1. On submission of Landed Cost Voucher, the applicable landed cost charges are updated in Purchase Receipt Item table. From a7f55895640bb015fe28a8f38ce4716091255891 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 2 Apr 2018 10:32:00 +0530 Subject: [PATCH 09/15] fix for the update button in the sales invoice (#13435) --- erpnext/controllers/accounts_controller.py | 4 +++- erpnext/public/js/controllers/transaction.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 1af2fdd70d..d690241736 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -666,7 +666,9 @@ class AccountsController(TransactionBase): self.remove(item) def set_payment_schedule(self): - if self.doctype == 'Sales Invoice' and self.is_pos: return + if self.doctype == 'Sales Invoice' and self.is_pos: + self.payment_terms_template = '' + return posting_date = self.get("bill_date") or self.get("posting_date") or self.get("transaction_date") date = self.get("due_date") diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index eae5283d32..9ed20c9bfa 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -106,7 +106,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ } if( - this.frm.fields_dict["payment_terms_template"] + this.frm.docstatus < 2 + && this.frm.fields_dict["payment_terms_template"] && this.frm.fields_dict["payment_schedule"] && this.frm.doc.payment_terms_template && !this.frm.doc.payment_schedule.length From e9ca5e81d223d10bd50847ce07fd1f7f56a725ed Mon Sep 17 00:00:00 2001 From: Zarrar Date: Mon, 2 Apr 2018 10:40:39 +0530 Subject: [PATCH 10/15] hide add_child for root node (#13444) --- erpnext/accounts/doctype/cost_center/cost_center_tree.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/accounts/doctype/cost_center/cost_center_tree.js b/erpnext/accounts/doctype/cost_center/cost_center_tree.js index f409d648fe..5043669810 100644 --- a/erpnext/accounts/doctype/cost_center/cost_center_tree.js +++ b/erpnext/accounts/doctype/cost_center/cost_center_tree.js @@ -48,5 +48,10 @@ frappe.treeview_settings["Cost Center"] = { }, __('Budget')); }, + onrender: function(node) { + if(node.is_root){ + node.hide_add = true; + } + } } \ No newline at end of file From d021e45301ee948d8d05176647472304b1246dfd Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Mon, 2 Apr 2018 10:43:19 +0530 Subject: [PATCH 11/15] exclude current doc while validating (#13450) --- erpnext/hr/doctype/salary_component/salary_component.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/hr/doctype/salary_component/salary_component.py b/erpnext/hr/doctype/salary_component/salary_component.py index 35d274cd60..9108f31f9b 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.py +++ b/erpnext/hr/doctype/salary_component/salary_component.py @@ -17,6 +17,5 @@ class SalaryComponent(Document): self.salary_component.split()]).upper() self.salary_component_abbr = self.salary_component_abbr.strip() - - self.salary_component_abbr = append_number_if_name_exists('Salary Component', - self.salary_component_abbr, 'salary_component_abbr', separator='_') \ No newline at end of file + self.salary_component_abbr = append_number_if_name_exists('Salary Component', self.salary_component_abbr, + 'salary_component_abbr', separator='_', filters={"name": ["!=", self.name]}) \ No newline at end of file From d5f9ebd0086be256e4a13a98b1ec765df23558d1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Apr 2018 23:37:33 +0530 Subject: [PATCH 12/15] [optimize] item queries (#13480) --- erpnext/controllers/queries.py | 10 +++++-- .../stock/report/stock_ledger/stock_ledger.py | 26 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 139586f1e2..15a93bd4eb 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -152,6 +152,11 @@ def tax_account_query(doctype, txt, searchfield, start, page_len, filters): def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False): conditions = [] + description_cond = '' + if frappe.db.count('Item', cache=True) < 50000: + # scan description only if items are less than 50000 + description_cond = 'or tabItem.description LIKE %(txt)s' + return frappe.db.sql("""select tabItem.name, tabItem.item_group, if(length(tabItem.item_name) > 40, concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name, @@ -166,7 +171,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals or tabItem.item_group LIKE %(txt)s or tabItem.item_name LIKE %(txt)s or tabItem.barcode LIKE %(txt)s - or tabItem.description LIKE %(txt)s) + {description_cond}) {fcond} {mcond} order by if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), @@ -176,7 +181,8 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals limit %(start)s, %(page_len)s """.format( key=searchfield, fcond=get_filters_cond(doctype, filters, conditions).replace('%', '%%'), - mcond=get_match_cond(doctype).replace('%', '%%')), + mcond=get_match_cond(doctype).replace('%', '%%'), + description_cond = description_cond), { "today": nowdate(), "txt": "%%%s%%" % txt, diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 305702e755..6b88c52996 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -7,8 +7,9 @@ from frappe import _ def execute(filters=None): columns = get_columns() - sl_entries = get_stock_ledger_entries(filters) - item_details = get_item_details(filters) + item_conditions = get_item_conditions(filters) + item_details = get_item_details(filters, item_conditions) + sl_entries = get_stock_ledger_entries(filters, item_conditions, item_details) opening_row = get_opening_balance(filters, columns) data = [] @@ -52,7 +53,12 @@ def get_columns(): return columns -def get_stock_ledger_entries(filters): +def get_stock_ledger_entries(filters, item_conditions, item_details): + item_conditions_sql = '' + if item_conditions: + items = ['"' + frappe.db.escape(i) + '"' for i in item_details.keys()] + if items: + item_conditions_sql = 'and sle.item_code in ({})'.format(', '.join(items)) return frappe.db.sql("""select concat_ws(" ", posting_date, posting_time) as date, item_code, warehouse, actual_qty, qty_after_transaction, incoming_rate, valuation_rate, stock_value, voucher_type, voucher_no, batch_no, serial_no, company, project @@ -60,14 +66,18 @@ def get_stock_ledger_entries(filters): where company = %(company)s and posting_date between %(from_date)s and %(to_date)s {sle_conditions} + {item_conditions_sql} order by posting_date asc, posting_time asc, name asc"""\ - .format(sle_conditions=get_sle_conditions(filters)), filters, as_dict=1) + .format( + sle_conditions=get_sle_conditions(filters), + item_conditions_sql = item_conditions_sql + ), filters, as_dict=1, debug=1) -def get_item_details(filters): +def get_item_details(filters, item_conditions): item_details = {} for item in frappe.db.sql("""select name, item_name, description, item_group, brand, stock_uom from `tabItem` item {item_conditions}"""\ - .format(item_conditions=get_item_conditions(filters)), filters, as_dict=1): + .format(item_conditions=item_conditions), filters, as_dict=1): item_details.setdefault(item.name, item) return item_details @@ -85,10 +95,6 @@ def get_item_conditions(filters): def get_sle_conditions(filters): conditions = [] - item_conditions=get_item_conditions(filters) - if item_conditions: - conditions.append("""sle.item_code in (select item.name from tabItem item - {item_conditions})""".format(item_conditions=item_conditions)) if filters.get("warehouse"): warehouse_condition = get_warehouse_condition(filters.get("warehouse")) if warehouse_condition: From 2505c74d64a7a84f6c0ede12a16bdfba91a63ad1 Mon Sep 17 00:00:00 2001 From: Vishal Dhayagude Date: Wed, 4 Apr 2018 11:05:21 +0530 Subject: [PATCH 13/15] Place of Supply set on save Delivery Note if Customer Address Present (#13492) --- erpnext/hooks.py | 2 +- erpnext/regional/india/utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 698c373866..5f1e7d4243 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -204,7 +204,7 @@ doc_events = { 'Address': { 'validate': 'erpnext.regional.india.utils.validate_gstin_for_india' }, - ('Sales Invoice', 'Purchase Invoice'): { + ('Sales Invoice', 'Purchase Invoice', 'Delivery Note'): { 'validate': 'erpnext.regional.india.utils.set_place_of_supply' } } diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index 1b912183b1..fb2fabace4 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -64,7 +64,7 @@ def get_itemised_tax_breakup_data(doc): def set_place_of_supply(doc, method): if not frappe.get_meta('Address').has_field('gst_state'): return - if doc.doctype == "Sales Invoice": + if doc.doctype in ("Sales Invoice", "Delivery Note"): address_name = doc.shipping_address_name or doc.customer_address elif doc.doctype == "Purchase Invoice": address_name = doc.shipping_address or doc.supplier_address From 5fd79f7f77f68371db9a09421c5f7e5c762b77bd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Apr 2018 11:20:16 +0530 Subject: [PATCH 14/15] Update stock_ledger.py --- erpnext/stock/report/stock_ledger/stock_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 6b88c52996..ef198f0d23 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -71,7 +71,7 @@ def get_stock_ledger_entries(filters, item_conditions, item_details): .format( sle_conditions=get_sle_conditions(filters), item_conditions_sql = item_conditions_sql - ), filters, as_dict=1, debug=1) + ), filters, as_dict=1) def get_item_details(filters, item_conditions): item_details = {} From adddb15380609a858dc9433b37d8d9eda07807f8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Apr 2018 11:56:19 +0600 Subject: [PATCH 15/15] bumped to version 10.1.19 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index ccb7e8f936..7f8dde3fc3 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '10.1.18' +__version__ = '10.1.19' def get_default_company(user=None): '''Get default company for user'''