mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-13 09:43:49 +00:00
fix: correct exchange gain loss in ppr
(cherry picked from commit 02e96039ac)
This commit is contained in:
@@ -415,8 +415,9 @@ def reconcile(doc: None | str = None) -> None:
|
|||||||
for x in allocations:
|
for x in allocations:
|
||||||
pr.append("allocation", x)
|
pr.append("allocation", x)
|
||||||
|
|
||||||
|
skip_ref_details_update_for_pe = check_multi_currency(pr)
|
||||||
# reconcile
|
# reconcile
|
||||||
pr.reconcile_allocations(skip_ref_details_update_for_pe=True)
|
pr.reconcile_allocations(skip_ref_details_update_for_pe=skip_ref_details_update_for_pe)
|
||||||
|
|
||||||
# If Payment Entry, update details only for newly linked references
|
# If Payment Entry, update details only for newly linked references
|
||||||
# This is for performance
|
# This is for performance
|
||||||
@@ -504,6 +505,37 @@ def reconcile(doc: None | str = None) -> None:
|
|||||||
frappe.db.set_value("Process Payment Reconciliation", doc, "status", "Completed")
|
frappe.db.set_value("Process Payment Reconciliation", doc, "status", "Completed")
|
||||||
|
|
||||||
|
|
||||||
|
def check_multi_currency(pr_doc):
|
||||||
|
GL = frappe.qb.DocType("GL Entry")
|
||||||
|
Account = frappe.qb.DocType("Account")
|
||||||
|
|
||||||
|
def get_account_currency(voucher_type, voucher_no):
|
||||||
|
currency = (
|
||||||
|
frappe.qb.from_(GL)
|
||||||
|
.join(Account)
|
||||||
|
.on(GL.account == Account.name)
|
||||||
|
.select(Account.account_currency)
|
||||||
|
.where(
|
||||||
|
(GL.voucher_type == voucher_type)
|
||||||
|
& (GL.voucher_no == voucher_no)
|
||||||
|
& (Account.account_type.isin(["Payable", "Receivable"]))
|
||||||
|
)
|
||||||
|
.limit(1)
|
||||||
|
).run(as_dict=True)
|
||||||
|
|
||||||
|
return currency[0].account_currency if currency else None
|
||||||
|
|
||||||
|
for allocation in pr_doc.allocation:
|
||||||
|
reference_currency = get_account_currency(allocation.reference_type, allocation.reference_name)
|
||||||
|
|
||||||
|
invoice_currency = get_account_currency(allocation.invoice_type, allocation.invoice_number)
|
||||||
|
|
||||||
|
if reference_currency != invoice_currency:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def is_any_doc_running(for_filter: str | dict | None = None) -> str | None:
|
def is_any_doc_running(for_filter: str | dict | None = None) -> str | None:
|
||||||
running_doc = None
|
running_doc = None
|
||||||
|
|||||||
Reference in New Issue
Block a user