From e2bb950012b0f7c22510fba566f87d25497300c7 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Tue, 15 Oct 2019 15:03:13 +0530 Subject: [PATCH 01/23] [fix] - from date cannot be greater than to date on blanket order --- .../doctype/blanket_order/blanket_order.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py index 822c7fcc1a..faed707d60 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py @@ -4,13 +4,21 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt +from frappe import _ +from frappe.utils import flt, getdate from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc from erpnext.stock.doctype.item.item import get_item_defaults class BlanketOrder(Document): + def validate(self): + self.validate_dates() + + def validate_dates(self): + if getdate(self.from_date) > getdate(self.to_date): + frappe.throw(_("From date cannot be greater than To date")) + def update_ordered_qty(self): ref_doctype = "Sales Order" if self.blanket_order_type == "Selling" else "Purchase Order" item_ordered_qty = frappe._dict(frappe.db.sql(""" From 3db65ef7e86f997f15770c0053839caf3d7dd39b Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Tue, 15 Oct 2019 19:16:45 +0530 Subject: [PATCH 02/23] fix: Demo Script --- erpnext/demo/setup/setup_data.py | 28 +++++++----- erpnext/demo/user/accounts.py | 14 +++--- erpnext/demo/user/projects.py | 57 ------------------------ erpnext/demo/user/sales.py | 2 +- erpnext/setup/doctype/company/company.py | 2 +- 5 files changed, 28 insertions(+), 75 deletions(-) diff --git a/erpnext/demo/setup/setup_data.py b/erpnext/demo/setup/setup_data.py index 48dcdbe863..a395c7c17a 100644 --- a/erpnext/demo/setup/setup_data.py +++ b/erpnext/demo/setup/setup_data.py @@ -10,13 +10,14 @@ from erpnext.demo.domains import data from frappe import _ def setup(domain): + frappe.flags.in_demo = 1 complete_setup(domain) setup_demo_page() setup_fiscal_year() setup_holiday_list() setup_user() setup_employee() - setup_user_roles() + setup_user_roles(domain) setup_role_permissions() setup_custom_field_for_domain() @@ -183,13 +184,19 @@ def setup_salary_structure(employees, salary_slip_based_on_timesheet=0): return ss -def setup_user_roles(): +def setup_user_roles(domain): user = frappe.get_doc('User', 'demo@erpnext.com') user.add_roles('HR User', 'HR Manager', 'Accounts User', 'Accounts Manager', 'Stock User', 'Stock Manager', 'Sales User', 'Sales Manager', 'Purchase User', 'Purchase Manager', 'Projects User', 'Manufacturing User', 'Manufacturing Manager', - 'Support Team', 'Academics User', 'Physician', 'Healthcare Administrator', 'Laboratory User', - 'Nursing User', 'Patient') + 'Support Team') + + if domain == "Healthcare": + user.add_roles('Physician', 'Healthcare Administrator', 'Laboratory User', + 'Nursing User', 'Patient') + + if domain == "Education": + user.add_roles('Academics User') if not frappe.db.get_global('demo_hr_user'): user = frappe.get_doc('User', 'CaitlinSnow@example.com') @@ -219,7 +226,7 @@ def setup_user_roles(): if not frappe.db.get_global('demo_manufacturing_user'): user = frappe.get_doc('User', 'NeptuniaAquaria@example.com') - user.add_roles('Manufacturing User', 'Stock User', 'Purchase User', 'Accounts User') + user.add_roles('Manufacturing User', 'Stock Manager', 'Stock User', 'Purchase User', 'Accounts User') update_employee_department(user.name, 'Production') frappe.db.set_global('demo_manufacturing_user', user.name) @@ -241,11 +248,12 @@ def setup_user_roles(): update_employee_department(user.name, 'Management') frappe.db.set_global('demo_projects_user', user.name) - if not frappe.db.get_global('demo_education_user'): - user = frappe.get_doc('User', 'ArthurCurry@example.com') - user.add_roles('Academics User') - update_employee_department(user.name, 'Management') - frappe.db.set_global('demo_education_user', user.name) + if domain == "Education": + if not frappe.db.get_global('demo_education_user'): + user = frappe.get_doc('User', 'ArthurCurry@example.com') + user.add_roles('Academics User') + update_employee_department(user.name, 'Management') + frappe.db.set_global('demo_education_user', user.name) #Add Expense Approver user = frappe.get_doc('User', 'ClarkKent@example.com') diff --git a/erpnext/demo/user/accounts.py b/erpnext/demo/user/accounts.py index 6206dfd2d0..7fab772235 100644 --- a/erpnext/demo/user/accounts.py +++ b/erpnext/demo/user/accounts.py @@ -73,14 +73,16 @@ def work(): make_pos_invoice() def make_payment_entries(ref_doctype, report): - outstanding_invoices = list(set([r[3] for r in query_report.run(report, { - "report_date": frappe.flags.current_date, - "company": erpnext.get_default_company() - })["result"] if r[2]==ref_doctype])) + + outstanding_invoices = frappe.get_all(ref_doctype, fields=["name"], + filters={ + "company": erpnext.get_default_company(), + "outstanding_amount": (">", 0.0) + }) # make Payment Entry for inv in outstanding_invoices[:random.randint(1, 2)]: - pe = get_payment_entry(ref_doctype, inv) + pe = get_payment_entry(ref_doctype, inv.name) pe.posting_date = frappe.flags.current_date pe.reference_no = random_string(6) pe.reference_date = frappe.flags.current_date @@ -91,7 +93,7 @@ def make_payment_entries(ref_doctype, report): # make payment via JV for inv in outstanding_invoices[:1]: - jv = frappe.get_doc(get_payment_entry_against_invoice(ref_doctype, inv)) + jv = frappe.get_doc(get_payment_entry_against_invoice(ref_doctype, inv.name)) jv.posting_date = frappe.flags.current_date jv.cheque_no = random_string(6) jv.cheque_date = frappe.flags.current_date diff --git a/erpnext/demo/user/projects.py b/erpnext/demo/user/projects.py index 36d676f317..044e2967fd 100644 --- a/erpnext/demo/user/projects.py +++ b/erpnext/demo/user/projects.py @@ -39,61 +39,4 @@ def make_project(current_date): "doctype": "Project", "project_name": "New Product Development " + current_date.strftime("%Y-%m-%d"), }) - project.set("tasks", [ - { - "title": "Review Requirements", - "start_date": frappe.utils.add_days(current_date, 10), - "end_date": frappe.utils.add_days(current_date, 11) - }, - { - "title": "Design Options", - "start_date": frappe.utils.add_days(current_date, 11), - "end_date": frappe.utils.add_days(current_date, 20) - }, - { - "title": "Make Prototypes", - "start_date": frappe.utils.add_days(current_date, 20), - "end_date": frappe.utils.add_days(current_date, 30) - }, - { - "title": "Customer Feedback on Prototypes", - "start_date": frappe.utils.add_days(current_date, 30), - "end_date": frappe.utils.add_days(current_date, 40) - }, - { - "title": "Freeze Feature Set", - "start_date": frappe.utils.add_days(current_date, 40), - "end_date": frappe.utils.add_days(current_date, 45) - }, - { - "title": "Testing", - "start_date": frappe.utils.add_days(current_date, 45), - "end_date": frappe.utils.add_days(current_date, 60) - }, - { - "title": "Product Engineering", - "start_date": frappe.utils.add_days(current_date, 45), - "end_date": frappe.utils.add_days(current_date, 55) - }, - { - "title": "Supplier Contracts", - "start_date": frappe.utils.add_days(current_date, 55), - "end_date": frappe.utils.add_days(current_date, 70) - }, - { - "title": "Design and Build Fixtures", - "start_date": frappe.utils.add_days(current_date, 45), - "end_date": frappe.utils.add_days(current_date, 65) - }, - { - "title": "Test Run", - "start_date": frappe.utils.add_days(current_date, 70), - "end_date": frappe.utils.add_days(current_date, 80) - }, - { - "title": "Launch", - "start_date": frappe.utils.add_days(current_date, 80), - "end_date": frappe.utils.add_days(current_date, 90) - }, - ]) project.insert() diff --git a/erpnext/demo/user/sales.py b/erpnext/demo/user/sales.py index 457e9763dc..8d5ba28b79 100644 --- a/erpnext/demo/user/sales.py +++ b/erpnext/demo/user/sales.py @@ -66,7 +66,7 @@ def make_opportunity(domain): b = frappe.get_doc({ "doctype": "Opportunity", "opportunity_from": "Customer", - "customer": get_random("Customer"), + "party_name": frappe.get_value("Customer", get_random("Customer"), 'name'), "opportunity_type": "Sales", "with_items": 1, "transaction_date": frappe.flags.current_date, diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 9eb374824a..e69a6aaded 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -204,7 +204,7 @@ class Company(NestedSet): }) for default_account in default_accounts: - if self.is_new() or frappe.flags.in_test: + if self.is_new() or frappe.flags.in_test or frappe.flags.in_demo: self._set_default_account(default_account, default_accounts.get(default_account)) if not self.default_income_account: From a32618dff46e5bfebb23f68c34ba42592b6d826a Mon Sep 17 00:00:00 2001 From: ashish-greycube Date: Wed, 16 Oct 2019 10:26:25 +0530 Subject: [PATCH 03/23] add coupon code on selling card of desk --- erpnext/config/selling.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py index 928bd5fa32..5db4cc2702 100644 --- a/erpnext/config/selling.py +++ b/erpnext/config/selling.py @@ -127,7 +127,11 @@ def get_data(): "name": "Shipping Rule", "description": _("Rules for adding shipping costs."), }, - + { + "type": "doctype", + "name": "Coupon Code", + "description": _("Define coupon codes."), + } ] }, { From c41e44d964a296145332eafee7c342456e5326ce Mon Sep 17 00:00:00 2001 From: ashish-greycube Date: Wed, 16 Oct 2019 10:38:31 +0530 Subject: [PATCH 04/23] fix: relative link in href --- erpnext/www/all-products/item_row.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/www/all-products/item_row.html b/erpnext/www/all-products/item_row.html index 9fa7fa3539..b61785aa2d 100644 --- a/erpnext/www/all-products/item_row.html +++ b/erpnext/www/all-products/item_row.html @@ -2,7 +2,7 @@
@@ -10,7 +10,7 @@
- + {{ item.item_name or item.name }}
From 01f8a4966ab0bb7b38a953613b90c0ab7f2381f9 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Wed, 16 Oct 2019 11:40:27 +0530 Subject: [PATCH 05/23] [Fix] - making customer/supplier field manadatory on order type condition --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 0bbf689d4a..1e18678eb0 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -51,11 +51,13 @@ frappe.ui.form.on('Blanket Order', { set_tc_name_filter: function(frm) { if (frm.doc.blanket_order_type === 'Selling') { + frm.set_df_property("customer","reqd", 1) frm.set_query("tc_name", function() { return { filters: { selling: 1 } }; }); } if (frm.doc.blanket_order_type === 'Purchasing') { + frm.set_df_property("customer","reqd", 1) frm.set_query("tc_name", function() { return { filters: { buying: 1 } }; }); From 1675181e49079c8a045c7dd9a874f3db98705e0a Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Wed, 16 Oct 2019 12:02:56 +0530 Subject: [PATCH 06/23] [Fix] - making customer/supplier field manadatory on order type condition on BO --- .../manufacturing/doctype/blanket_order/blanket_order.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 1e18678eb0..87ad3b5d9f 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -52,12 +52,16 @@ frappe.ui.form.on('Blanket Order', { set_tc_name_filter: function(frm) { if (frm.doc.blanket_order_type === 'Selling') { frm.set_df_property("customer","reqd", 1) + frm.set_df_property("supplier","reqd", 0) + frm.set_query("tc_name", function() { return { filters: { selling: 1 } }; }); } if (frm.doc.blanket_order_type === 'Purchasing') { - frm.set_df_property("customer","reqd", 1) + frm.set_df_property("supplier","reqd", 1) + frm.set_df_property("customer","reqd", 0) + frm.set_query("tc_name", function() { return { filters: { buying: 1 } }; }); @@ -66,7 +70,7 @@ frappe.ui.form.on('Blanket Order', { blanket_order_type: function (frm) { frm.trigger('set_tc_name_filter'); - } + }, }); From 7084f07dab2f34889d952020785e5d10ceeb0b6c Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Wed, 16 Oct 2019 13:40:33 +0530 Subject: [PATCH 07/23] [Fix] - making customer/supplier field manadatory on order type condition on BO --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 87ad3b5d9f..8f0a5e0133 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -70,7 +70,7 @@ frappe.ui.form.on('Blanket Order', { blanket_order_type: function (frm) { frm.trigger('set_tc_name_filter'); - }, + } }); From 5f4b6d267cb1caba153692405578beb558e006f5 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Wed, 16 Oct 2019 13:40:58 +0530 Subject: [PATCH 08/23] [Fix] - making customer/supplier field manadatory on order type condition on BO --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 3 +++ .../manufacturing/doctype/blanket_order/blanket_order.json | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 8f0a5e0133..b6ad27632e 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -53,6 +53,7 @@ frappe.ui.form.on('Blanket Order', { if (frm.doc.blanket_order_type === 'Selling') { frm.set_df_property("customer","reqd", 1) frm.set_df_property("supplier","reqd", 0) + frm.set_value("supplier", "") frm.set_query("tc_name", function() { return { filters: { selling: 1 } }; @@ -61,6 +62,8 @@ frappe.ui.form.on('Blanket Order', { if (frm.doc.blanket_order_type === 'Purchasing') { frm.set_df_property("supplier","reqd", 1) frm.set_df_property("customer","reqd", 0) + frm.set_value("customer", "") + frm.set_query("tc_name", function() { return { filters: { buying: 1 } }; diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.json b/erpnext/manufacturing/doctype/blanket_order/blanket_order.json index 570d435c5f..260e0b8a73 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.json +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.json @@ -88,7 +88,8 @@ "fieldname": "company", "fieldtype": "Link", "label": "Company", - "options": "Company" + "options": "Company", + "reqd": 1 }, { "fieldname": "section_break_12", @@ -128,7 +129,7 @@ } ], "is_submittable": 1, - "modified": "2019-06-19 11:59:09.279607", + "modified": "2019-10-16 13:38:32.302316", "modified_by": "Administrator", "module": "Manufacturing", "name": "Blanket Order", From 8750caa8e36ce3ffa764663bdbef2950a6432689 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Fri, 18 Oct 2019 17:01:16 +0530 Subject: [PATCH 09/23] [Fix] - if its not multi company set it by default on BO --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index b6ad27632e..19ec2fc00a 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -12,6 +12,7 @@ frappe.ui.form.on('Blanket Order', { }, refresh: function(frm) { + erpnext.hide_company(); if (frm.doc.customer && frm.doc.docstatus === 1) { frm.add_custom_button(__('View Orders'), function() { frappe.set_route('List', 'Sales Order', {blanket_order: frm.doc.name}); From cdebd400ec88879077f7aa36ce89932ce3cc4893 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Mon, 21 Oct 2019 16:29:16 +0530 Subject: [PATCH 10/23] [Fix] - changed codacy changers suggested --- .../doctype/blanket_order/blanket_order.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 19ec2fc00a..420fb1099d 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -52,18 +52,18 @@ frappe.ui.form.on('Blanket Order', { set_tc_name_filter: function(frm) { if (frm.doc.blanket_order_type === 'Selling') { - frm.set_df_property("customer","reqd", 1) - frm.set_df_property("supplier","reqd", 0) - frm.set_value("supplier", "") + frm.set_df_property("customer","reqd", 1); + frm.set_df_property("supplier","reqd", 0); + frm.set_value("supplier", ""); frm.set_query("tc_name", function() { return { filters: { selling: 1 } }; }); } if (frm.doc.blanket_order_type === 'Purchasing') { - frm.set_df_property("supplier","reqd", 1) - frm.set_df_property("customer","reqd", 0) - frm.set_value("customer", "") + frm.set_df_property("supplier","reqd", 1); + frm.set_df_property("customer","reqd", 0); + frm.set_value("customer", ""); frm.set_query("tc_name", function() { From ad71307a5e0bc2558737978b8622f87810a18b3f Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Mon, 21 Oct 2019 17:46:35 +0530 Subject: [PATCH 11/23] fix: date validation, setting up default conpany, customer/supplier manadatory property on Blanket Order --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 420fb1099d..20336a1dfa 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -65,7 +65,6 @@ frappe.ui.form.on('Blanket Order', { frm.set_df_property("customer","reqd", 0); frm.set_value("customer", ""); - frm.set_query("tc_name", function() { return { filters: { buying: 1 } }; }); From e22ca23b81984d85f73ce1044a63f95ab14e50d0 Mon Sep 17 00:00:00 2001 From: Khushal Trivedi Date: Mon, 21 Oct 2019 18:17:42 +0530 Subject: [PATCH 12/23] fix: fix: date validation, setting up default conpany, customer/supplier manadatory property on Blanket Order --- erpnext/manufacturing/doctype/blanket_order/blanket_order.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js index 20336a1dfa..1cd9446c8b 100644 --- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js +++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js @@ -61,7 +61,7 @@ frappe.ui.form.on('Blanket Order', { }); } if (frm.doc.blanket_order_type === 'Purchasing') { - frm.set_df_property("supplier","reqd", 1); + frm.set_df_property("supplier","reqd", 1); frm.set_df_property("customer","reqd", 0); frm.set_value("customer", ""); From eaff54134916412456e73b081de21b68400b8b81 Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Tue, 22 Oct 2019 11:46:17 +0530 Subject: [PATCH 13/23] fix: query (#19376) --- erpnext/stock/report/total_stock_summary/total_stock_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/report/total_stock_summary/total_stock_summary.py b/erpnext/stock/report/total_stock_summary/total_stock_summary.py index 41e2f86f29..ed52393923 100644 --- a/erpnext/stock/report/total_stock_summary/total_stock_summary.py +++ b/erpnext/stock/report/total_stock_summary/total_stock_summary.py @@ -30,7 +30,7 @@ def get_total_stock(filters): if filters.get("group_by") == "Warehouse": if filters.get("company"): - conditions += " AND warehouse.company = '%s'" % frappe.db.escape(filters.get("company"), percent=False) + conditions += " AND warehouse.company = %s" % frappe.db.escape(filters.get("company"), percent=False) conditions += " GROUP BY ledger.warehouse, item.item_code" columns += "'' as company, ledger.warehouse" From b7e9e2a1a536a4c751a25060b01be72da66cf92e Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Tue, 22 Oct 2019 11:47:03 +0530 Subject: [PATCH 14/23] fix: if naming if item-code and index both are same (#19371) --- erpnext/manufacturing/doctype/bom/bom.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index eb01b8c81e..225ae29429 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -35,7 +35,8 @@ class BOM(WebsiteGenerator): # name can be BOM/ITEM/001, BOM/ITEM/001-1, BOM-ITEM-001, BOM-ITEM-001-1 # split by item - names = [name.split(self.item)[-1][1:] for name in names] + names = [name.split(self.item, 1) for name in names] + names = [d[-1][1:] for d in filter(lambda x: len(x) > 1 and x[-1], names)] # split by (-) if cancelled names = [cint(name.split('-')[-1]) for name in names] From bdc899857c97d58911fe6d853fbba9f94a5071f0 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 22 Oct 2019 12:31:56 +0530 Subject: [PATCH 15/23] Fix: Shopify payload operations logging (#19366) * fix: payload logging for shopify * fix: remove print statements --- .../connectors/shopify_connection.py | 15 +++++---- .../doctype/shopify_log/shopify_log.py | 33 ++++++++++++++----- .../shopify_settings/shopify_settings.py | 7 ---- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/erpnext/erpnext_integrations/connectors/shopify_connection.py b/erpnext/erpnext_integrations/connectors/shopify_connection.py index bd980374b6..3be08a2757 100644 --- a/erpnext/erpnext_integrations/connectors/shopify_connection.py +++ b/erpnext/erpnext_integrations/connectors/shopify_connection.py @@ -29,7 +29,8 @@ def sync_sales_order(order, request_id=None): validate_item(order, shopify_settings) create_order(order, shopify_settings) except Exception as e: - make_shopify_log(status="Error", message=e.message, exception=False) + make_shopify_log(status="Error", exception=e) + else: make_shopify_log(status="Success") @@ -42,9 +43,9 @@ def prepare_sales_invoice(order, request_id=None): sales_order = get_sales_order(cstr(order['id'])) if sales_order: create_sales_invoice(order, shopify_settings, sales_order) - make_shopify_log(status="Success") - except Exception: - make_shopify_log(status="Error", exception=True) + make_shopify_log(status="Success") + except Exception as e: + make_shopify_log(status="Error", exception=e, rollback=True) def prepare_delivery_note(order, request_id=None): frappe.set_user('Administrator') @@ -56,8 +57,8 @@ def prepare_delivery_note(order, request_id=None): if sales_order: create_delivery_note(order, shopify_settings, sales_order) make_shopify_log(status="Success") - except Exception: - make_shopify_log(status="Error", exception=True) + except Exception as e: + make_shopify_log(status="Error", exception=e, rollback=True) def get_sales_order(shopify_order_id): sales_order = frappe.db.get_value("Sales Order", filters={"shopify_order_id": shopify_order_id}) @@ -97,7 +98,7 @@ def create_sales_order(shopify_order, shopify_settings, company=None): message = 'Following items are exists in order but relevant record not found in Product master' message += "\n" + ", ".join(product_not_exists) - make_shopify_log(status="Error", message=message, exception=True) + make_shopify_log(status="Error", exception=e, rollback=True) return '' diff --git a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py index 0c821e031d..7d3f572978 100644 --- a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py +++ b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py @@ -12,23 +12,38 @@ class ShopifyLog(Document): pass -def make_shopify_log(status="Queued", message=None, exception=False): +def make_shopify_log(status="Queued", exception=None, rollback=False): # if name not provided by log calling method then fetch existing queued state log + make_new = False + if not frappe.flags.request_id: - return + make_new = True - log = frappe.get_doc("Shopify Log", frappe.flags.request_id) - - if exception: + if rollback: frappe.db.rollback() - log = frappe.get_doc({"doctype":"Shopify Log"}).insert(ignore_permissions=True) - log.message = message if message else '' + if make_new: + log = frappe.get_doc({"doctype":"Shopify Log"}).insert(ignore_permissions=True) + else: + log = log = frappe.get_doc("Shopify Log", frappe.flags.request_id) + + log.message = get_message(exception) log.traceback = frappe.get_traceback() log.status = status log.save(ignore_permissions=True) frappe.db.commit() +def get_message(exception): + message = None + + if hasattr(exception, 'message'): + message = exception.message + elif hasattr(exception, '__str__'): + message = e.__str__() + else: + message = "Something went wrong while syncing" + return message + def dump_request_data(data, event="create/order"): event_mapper = { "orders/create": get_webhook_address(connector_name='shopify_connection', method="sync_sales_order", exclude_uri=True), @@ -43,11 +58,11 @@ def dump_request_data(data, event="create/order"): }).insert(ignore_permissions=True) frappe.db.commit() - frappe.enqueue(method=event_mapper[event], queue='short', timeout=300, is_async=True, + frappe.enqueue(method=event_mapper[event], queue='short', timeout=300, is_async=True, **{"order": data, "request_id": log.name}) @frappe.whitelist() def resync(method, name, request_data): frappe.db.set_value("Shopify Log", name, "status", "Queued", update_modified=False) - frappe.enqueue(method=method, queue='short', timeout=300, is_async=True, + frappe.enqueue(method=method, queue='short', timeout=300, is_async=True, **{"order": json.loads(request_data), "request_id": name}) diff --git a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py index e2f6d497d2..a4332b199e 100644 --- a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py +++ b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py @@ -30,13 +30,9 @@ class ShopifySettings(Document): # url = get_shopify_url('admin/webhooks.json', self) created_webhooks = [d.method for d in self.webhooks] url = get_shopify_url('admin/api/2019-04/webhooks.json', self) - print('url', url) for method in webhooks: - print('method', method) session = get_request_session() - print('session', session) try: - print(get_header(self)) d = session.post(url, data=json.dumps({ "webhook": { "topic": method, @@ -44,7 +40,6 @@ class ShopifySettings(Document): "format": "json" } }), headers=get_header(self)) - print('d', d.json()) d.raise_for_status() self.update_webhook_table(method, d.json()) except Exception as e: @@ -67,7 +62,6 @@ class ShopifySettings(Document): self.remove(d) def update_webhook_table(self, method, res): - print('update') self.append("webhooks", { "webhook_id": res['webhook']['id'], "method": method @@ -75,7 +69,6 @@ class ShopifySettings(Document): def get_shopify_url(path, settings): if settings.app_type == "Private": - print(settings.api_key, settings.get_password('password'), settings.shopify_url, path) return 'https://{}:{}@{}/{}'.format(settings.api_key, settings.get_password('password'), settings.shopify_url, path) else: return 'https://{}/{}'.format(settings.shopify_url, path) From bebbc6371b56efcbda43c701a3c169bb070749ad Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 22 Oct 2019 12:35:21 +0530 Subject: [PATCH 16/23] fix: Validation message in work order --- erpnext/stock/doctype/stock_entry/stock_entry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 758fb37211..7fa7d3b0b6 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -329,8 +329,8 @@ class StockEntry(StockController): if total_completed_qty > flt(completed_qty): job_card = frappe.db.get_value('Job Card', {'operation_id': d.name}, 'name') if not job_card: - frappe.throw(_("Work Order {0}: job card not found for the operation {1}") - .format(self.work_order, job_card)) + frappe.throw(_("Work Order {0}: Job Card not found for the operation {1}") + .format(self.work_order, d.operation)) work_order_link = frappe.utils.get_link_to_form('Work Order', self.work_order) job_card_link = frappe.utils.get_link_to_form('Job Card', job_card) From 22bc0a929b7a6c1e6265c41fdf39d07dff9445f4 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Tue, 22 Oct 2019 13:14:57 +0530 Subject: [PATCH 17/23] chore(docs): Added contribution templates, SECURITY policy --- .github/ISSUE_TEMPLATE/bug_report.md | 47 +++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 28 +++++++++++ .../question-about-using-erpnext.md | 17 +++++++ .github/PULL_REQUEST_TEMPLATE.md | 33 ++++++++++++- SECURITY.md | 7 +++ 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question-about-using-erpnext.md create mode 100644 SECURITY.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..c145291b57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,47 @@ +--- +name: Bug report +about: Report a bug encountered while using ERPNext +labels: bug +--- + + + +## Description of the issue + +## Context information (for bug reports) + +**Output of `bench version`** +``` +(paste here) +``` + +## Steps to reproduce the issue + +1. +2. +3. + +### Observed result + +### Expected result + +### Stacktrace / full error message + +``` +(paste here) +``` + +## Additional information + +OS version / distribution, `ERPNext` install method, etc. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..6cdad356cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,28 @@ +--- +name: Feature request +about: Suggest an idea to improve ERPNext +labels: feature-request +--- + + + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question-about-using-erpnext.md b/.github/ISSUE_TEMPLATE/question-about-using-erpnext.md new file mode 100644 index 0000000000..455c20ebda --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question-about-using-erpnext.md @@ -0,0 +1,17 @@ +--- +name: Question about using ERPNext +about: This is not the appropriate channel +labels: invalid +--- + +Please post on our forums: + +for questions about using `ERPNext`: https://discuss.erpnext.com + +for questions about using the `Frappe Framework`: https://discuss.frappe.io + +for questions about using `bench`, probably the best place to start is the [bench repo](https://github.com/frappe/bench) + +For documentation issues, use the [ERPNext Documentation](https://erpnext.com/docs/) or [Frappe Framework Documentation](https://frappe.io/docs/user/en) or the [developer cheetsheet](https://github.com/frappe/frappe/wiki/Developer-Cheatsheet) + +> **Posts that are not bug reports or feature requests will not be addressed on this issue tracker.** \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c0e186dbfd..8fc5248b7b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,2 +1,33 @@ -Please read the pull request checklist to make sure your changes are merged: https://github.com/frappe/erpnext/wiki/Pull-Request-Checklist + + +> Please provide enough information so that others can review your pull request: + + + +> Explain the **details** for making this change. What existing problem does the pull request solve? + + + +> Screenshots/GIFs + + diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..46ed43725b --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +The ERPNext team and community take security issues seriously. To report a security issue, fill out the form at [https://erpnext.com/security/report](https://erpnext.com/security/report). + +You can help us make ERPNext and all it's users more secure by following the [Reporting guidelines](https://erpnext.com/security). + +We appreciate your efforts to responsibly disclose your findings. We'll endeavor to respond quickly, and will keep you updated throughout the process. \ No newline at end of file From ce77c4ac4cfb0cd667d607253bd3d3a25845e00a Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Tue, 22 Oct 2019 13:20:02 +0530 Subject: [PATCH 18/23] fix(docs): link update frappe => erpnext --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8fc5248b7b..091cf4715a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -14,7 +14,7 @@ Also, if you're new here - Documentation Guidelines => https://github.com/frappe/erpnext/wiki/Updating-Documentation -- Contribution Guide => https://github.com/frappe/frappe/blob/develop/.github/CONTRIBUTING.md +- Contribution Guide => https://github.com/frappe/erpnext/blob/develop/.github/CONTRIBUTING.md - Pull Request Checklist => https://github.com/frappe/erpnext/wiki/Pull-Request-Checklist From b5bd3f3abf1782f20e9ca2cf5122fd8fffbbae6d Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Tue, 22 Oct 2019 13:38:36 +0530 Subject: [PATCH 19/23] fix: custom doctypes and reports not visible in Accounts module view --- erpnext/config/{accounting.py => accounts.py} | 0 erpnext/config/desktop.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename erpnext/config/{accounting.py => accounts.py} (100%) diff --git a/erpnext/config/accounting.py b/erpnext/config/accounts.py similarity index 100% rename from erpnext/config/accounting.py rename to erpnext/config/accounts.py diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py index 8ce096499d..95f6f7c510 100644 --- a/erpnext/config/desktop.py +++ b/erpnext/config/desktop.py @@ -18,7 +18,7 @@ def get_data(): "onboard_present": 1 }, { - "module_name": "Accounting", + "module_name": "Accounts", "category": "Modules", "label": _("Accounting"), "color": "#3498db", From d8ddd1e2ec0228ed9f795a88dd3ecb93fb554173 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 22 Oct 2019 14:03:27 +0530 Subject: [PATCH 20/23] fix: not able to select the zero qty batch while making the sales return entry --- erpnext/controllers/queries.py | 39 ++++++++++++-------- erpnext/public/js/controllers/transaction.js | 5 +++ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 19dea080b1..2f6b59f0fb 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -280,22 +280,31 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters): "page_len": page_len } + having_clause = "having sum(sle.actual_qty) > 0" + if filters.get("is_return"): + having_clause = "" + if args.get('warehouse'): - batch_nos = frappe.db.sql("""select sle.batch_no, round(sum(sle.actual_qty),2), sle.stock_uom, concat('MFG-',batch.manufacturing_date), concat('EXP-',batch.expiry_date) - from `tabStock Ledger Entry` sle - INNER JOIN `tabBatch` batch on sle.batch_no = batch.name - where - batch.disabled = 0 - and sle.item_code = %(item_code)s - and sle.warehouse = %(warehouse)s - and (sle.batch_no like %(txt)s - or batch.manufacturing_date like %(txt)s) - and batch.docstatus < 2 - {0} - {match_conditions} - group by batch_no having sum(sle.actual_qty) > 0 - order by batch.expiry_date, sle.batch_no desc - limit %(start)s, %(page_len)s""".format(cond, match_conditions=get_match_cond(doctype)), args) + batch_nos = frappe.db.sql("""select sle.batch_no, round(sum(sle.actual_qty),2), sle.stock_uom, + concat('MFG-',batch.manufacturing_date), concat('EXP-',batch.expiry_date) + from `tabStock Ledger Entry` sle + INNER JOIN `tabBatch` batch on sle.batch_no = batch.name + where + batch.disabled = 0 + and sle.item_code = %(item_code)s + and sle.warehouse = %(warehouse)s + and (sle.batch_no like %(txt)s + or batch.manufacturing_date like %(txt)s) + and batch.docstatus < 2 + {cond} + {match_conditions} + group by batch_no {having_clause} + order by batch.expiry_date, sle.batch_no desc + limit %(start)s, %(page_len)s""".format( + cond=cond, + match_conditions=get_match_cond(doctype), + having_clause = having_clause + ), args) return batch_nos else: diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index a9b19eddd7..57a1cc2ca1 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -1652,6 +1652,11 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ 'item_code': item.item_code, 'posting_date': me.frm.doc.posting_date || frappe.datetime.nowdate(), } + + if (doc.is_return) { + filters["is_return"] = 1; + } + if (item.warehouse) filters["warehouse"] = item.warehouse; return { From bd6b1806cd0526ae7acf5e7329682b2b09eda593 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 22 Oct 2019 14:28:37 +0530 Subject: [PATCH 21/23] fix: fixed asset register report and made skip-dn field hidden --- .../fixed_asset_register/fixed_asset_register.json | 4 ++-- .../fixed_asset_register/fixed_asset_register.py | 7 ++++--- .../selling/doctype/sales_order/sales_order.json | 13 +++++++------ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json index ae2aa542f5..b40243cb75 100644 --- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json @@ -1,13 +1,13 @@ { "add_total_row": 0, "creation": "2019-09-23 16:35:02.836134", - "disable_prepared_report": 0, + "disable_prepared_report": 1, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2019-09-23 16:35:02.836134", + "modified": "2019-10-22 13:00:31.539726", "modified_by": "Administrator", "module": "Assets", "name": "Fixed Asset Register", diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py index 2c9e48a06c..f395499ad6 100644 --- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _ +from frappe.utils import cstr def execute(filters=None): filters = frappe._dict(filters or {}) @@ -149,12 +150,12 @@ def get_finance_book_value_map(finance_book=''): FROM `tabAsset Finance Book` WHERE parentfield='finance_books' - AND finance_book=%s''', (finance_book))) + AND ifnull(finance_book, '')=%s''', cstr(finance_book))) def get_purchase_receipt_supplier_map(): return frappe._dict(frappe.db.sql(''' Select pr.name, pr.supplier - FROM `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri + FROM `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri WHERE pri.parent = pr.name AND pri.is_fixed_asset=1 @@ -164,7 +165,7 @@ def get_purchase_receipt_supplier_map(): def get_purchase_invoice_supplier_map(): return frappe._dict(frappe.db.sql(''' Select pi.name, pi.supplier - FROM `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pii + FROM `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pii WHERE pii.parent = pi.name AND pii.is_fixed_asset=1 diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 78e7b4abb8..ccc48e19b3 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -682,10 +682,10 @@ "label": "Additional Discount and Coupon Code" }, { - "fieldname": "coupon_code", - "fieldtype": "Link", - "label": "Coupon Code", - "options": "Coupon Code" + "fieldname": "coupon_code", + "fieldtype": "Link", + "label": "Coupon Code", + "options": "Coupon Code" }, { "default": "Grand Total", @@ -1185,6 +1185,7 @@ "default": "0", "fieldname": "skip_delivery_note", "fieldtype": "Check", + "hidden": 1, "label": "Skip Delivery Note", "print_hide": 1 } @@ -1192,7 +1193,7 @@ "icon": "fa fa-file-text", "idx": 105, "is_submittable": 1, - "modified": "2019-10-14 08:46:07.540565", + "modified": "2019-10-22 14:26:42.767189", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", @@ -1269,4 +1270,4 @@ "title_field": "title", "track_changes": 1, "track_seen": 1 -} +} \ No newline at end of file From 5ff377e2bb634034554a2d6fb6a5729460136730 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Wed, 23 Oct 2019 11:09:21 +0530 Subject: [PATCH 22/23] fix: product link not working in website (#19373) --- erpnext/www/all-products/item_row.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/www/all-products/item_row.html b/erpnext/www/all-products/item_row.html index 9fa7fa3539..9e628265aa 100644 --- a/erpnext/www/all-products/item_row.html +++ b/erpnext/www/all-products/item_row.html @@ -2,7 +2,7 @@
@@ -10,14 +10,14 @@
- + {{ item.item_name or item.name }}

{{ item.website_description or item.description or 'No description' }}

- {{ _('More details') }} + {{ _('More details') }}
From 7bdc6120132c23af4e7e334f6a96aeaae06c8ee7 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Thu, 24 Oct 2019 18:01:58 +0530 Subject: [PATCH 23/23] chore: Update module name (#19404) --- erpnext/patches/v10_1/transfer_subscription_to_auto_repeat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/patches/v10_1/transfer_subscription_to_auto_repeat.py b/erpnext/patches/v10_1/transfer_subscription_to_auto_repeat.py index 5c18985f7f..3d1a88e800 100644 --- a/erpnext/patches/v10_1/transfer_subscription_to_auto_repeat.py +++ b/erpnext/patches/v10_1/transfer_subscription_to_auto_repeat.py @@ -4,7 +4,7 @@ from frappe.model.utils.rename_field import rename_field def execute(): - frappe.reload_doc('desk', 'doctype', 'auto_repeat') + frappe.reload_doc('automation', 'doctype', 'auto_repeat') doctypes_to_rename = { 'accounts': ['Journal Entry', 'Payment Entry', 'Purchase Invoice', 'Sales Invoice'], @@ -41,4 +41,4 @@ def drop_columns_from_subscription(): if field in frappe.db.get_table_columns("Subscription"): fields_to_drop['Subscription'].append(field) - frappe.model.delete_fields(fields_to_drop, delete=1) \ No newline at end of file + frappe.model.delete_fields(fields_to_drop, delete=1)