From 3234f0d299a420c010b0bf76446847e42bc6fe72 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Mon, 12 Aug 2019 16:18:36 +0530 Subject: [PATCH 1/6] fix: Check if account passed is accessible under Payment Entry --- .../accounts/doctype/payment_entry/payment_entry.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 8c2ea73b56c..3e1bd62ee9c 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -755,6 +755,17 @@ def get_party_details(company, party_type, party, date, cost_center=None): @frappe.whitelist() def get_account_details(account, date, cost_center=None): frappe.has_permission('Payment Entry', throw=True) + + # to check if passed account is accessible under Payment Entry + # There might be user permissions which can only allow account under certain doctypes + # except Payment Entry + account_list = frappe.get_list('Account', { + 'name': account + }, reference_doctype='Payment Entry', limit=1) + + if not account_list: + frappe.throw(_('Account: {0} is not permitted under Payment Entry').format(account)) + return frappe._dict({ "account_currency": get_account_currency(account), "account_balance": get_balance_on(account, date, cost_center=cost_center), From bd2e7c0e53bf8326fd48c8d1ba0794f6c13a9a82 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Mon, 12 Aug 2019 16:32:14 +0530 Subject: [PATCH 2/6] fix: Comment description --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 3e1bd62ee9c..da7b42df776 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -756,13 +756,13 @@ def get_party_details(company, party_type, party, date, cost_center=None): def get_account_details(account, date, cost_center=None): frappe.has_permission('Payment Entry', throw=True) - # to check if passed account is accessible under Payment Entry - # There might be user permissions which can only allow account under certain doctypes - # except Payment Entry + # to check if the passed account is accessible if the reference doctype is Payment Entry account_list = frappe.get_list('Account', { 'name': account }, reference_doctype='Payment Entry', limit=1) - + + # There might be some user permissions which will allow account under certain doctypes + # except for Payment Entry, only in such case we should throw permission error if not account_list: frappe.throw(_('Account: {0} is not permitted under Payment Entry').format(account)) From 1a2600c9ea731f11d0e878c29a7ee1c574a2006e Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 13 Aug 2019 12:05:22 +0530 Subject: [PATCH 3/6] fix: Ignore account permission check --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 6 +++++- erpnext/accounts/utils.py | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 3e1bd62ee9c..2f1efa5d5c1 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -763,12 +763,16 @@ def get_account_details(account, date, cost_center=None): 'name': account }, reference_doctype='Payment Entry', limit=1) + account_balance = get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True) + + # There might be some user permissions which will allow account under certain doctypes + # except for Payment Entry, only in such case we should throw permission error if not account_list: frappe.throw(_('Account: {0} is not permitted under Payment Entry').format(account)) return frappe._dict({ "account_currency": get_account_currency(account), - "account_balance": get_balance_on(account, date, cost_center=cost_center), + "account_balance": account_balance, "account_type": frappe.db.get_value("Account", account, "account_type") }) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index e1ed642e732..ac69fd3c969 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -84,7 +84,8 @@ def validate_fiscal_year(date, fiscal_year, company, label="Date", doc=None): throw(_("{0} '{1}' not in Fiscal Year {2}").format(label, formatdate(date), fiscal_year)) @frappe.whitelist() -def get_balance_on(account=None, date=None, party_type=None, party=None, company=None, in_account_currency=True, cost_center=None): +def get_balance_on(account=None, date=None, party_type=None, party=None, company=None, + in_account_currency=True, cost_center=None, ignore_account_permission=False): if not account and frappe.form_dict.get("account"): account = frappe.form_dict.get("account") if not date and frappe.form_dict.get("date"): @@ -140,7 +141,8 @@ def get_balance_on(account=None, date=None, party_type=None, party=None, company if account: - if not frappe.flags.ignore_account_permission: + if not (frappe.flags.ignore_account_permission + or ignore_account_permission): acc.check_permission("read") if report_type == 'Profit and Loss': From 64a962ce97f436dddc30d88dbcbae9c907e1589a Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 13 Aug 2019 12:08:49 +0530 Subject: [PATCH 4/6] fix: Re-organise code --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 2f1efa5d5c1..57c10d2f316 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -763,13 +763,14 @@ def get_account_details(account, date, cost_center=None): 'name': account }, reference_doctype='Payment Entry', limit=1) - account_balance = get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True) - # There might be some user permissions which will allow account under certain doctypes # except for Payment Entry, only in such case we should throw permission error if not account_list: frappe.throw(_('Account: {0} is not permitted under Payment Entry').format(account)) + account_balance = get_balance_on(account, date, cost_center=cost_center, + ignore_account_permission=True) + return frappe._dict({ "account_currency": get_account_currency(account), "account_balance": account_balance, From d2f13fe0a6cd036d1dcf19775619a39a2c9bc909 Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Tue, 13 Aug 2019 13:19:24 +0530 Subject: [PATCH 5/6] fix: query (#18709) --- .../doctype/payment_entry/payment_entry.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 8c2ea73b56c..fc46132c1ba 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -648,13 +648,18 @@ def get_orders_to_be_billed(posting_date, party_type, party, orders = [] if voucher_type: - ref_field = "base_grand_total" if party_account_currency == company_currency else "grand_total" + if party_account_currency == company_currency: + grand_total_field = "base_grand_total" + rounded_total_field = "base_rounded_total" + else: + grand_total_field = "grand_total" + rounded_total_field = "rounded_total" orders = frappe.db.sql(""" select name as voucher_no, - {ref_field} as invoice_amount, - ({ref_field} - advance_paid) as outstanding_amount, + if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) as invoice_amount, + (if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) - advance_paid) as outstanding_amount, transaction_date as posting_date from `tab{voucher_type}` @@ -663,13 +668,14 @@ def get_orders_to_be_billed(posting_date, party_type, party, and docstatus = 1 and company = %s and ifnull(status, "") != "Closed" - and {ref_field} > advance_paid + and if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) > advance_paid and abs(100 - per_billed) > 0.01 {condition} order by transaction_date, name """.format(**{ - "ref_field": ref_field, + "rounded_total_field": rounded_total_field, + "grand_total_field": grand_total_field, "voucher_type": voucher_type, "party_type": scrub(party_type), "condition": condition From 33d00bfeaeeec1713521f29e01c49b2ecb430c09 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 13 Aug 2019 19:39:48 +0530 Subject: [PATCH 6/6] fix: v12 patches sequence (#18610) --- erpnext/patches.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 33d4f55ae02..b6ea542554e 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -596,6 +596,7 @@ erpnext.patches.v12_0.rename_pricing_rule_child_doctypes erpnext.patches.v12_0.move_target_distribution_from_parent_to_child erpnext.patches.v12_0.stock_entry_enhancements erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019 #25-06-2019 +erpnext.patches.v12_0.make_item_manufacturer erpnext.patches.v12_0.move_item_tax_to_item_tax_template erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user @@ -606,7 +607,6 @@ erpnext.patches.v11_1.delete_scheduling_tool erpnext.patches.v12_0.rename_tolerance_fields erpnext.patches.v12_0.make_custom_fields_for_bank_remittance #14-06-2019 execute:frappe.delete_doc_if_exists("Page", "support-analytics") -erpnext.patches.v12_0.make_item_manufacturer erpnext.patches.v12_0.remove_patient_medical_record_page erpnext.patches.v11_1.move_customer_lead_to_dynamic_column erpnext.patches.v11_1.set_default_action_for_quality_inspection