diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 8c2ea73b56c..e0d3e7ada3d 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 @@ -755,9 +761,23 @@ 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 the passed account is accessible under reference doctype 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)) + + 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": 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': 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