diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 26c88536e45..453a7b1202d 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -1131,73 +1131,49 @@ class PaymentEntry(AccountsController): ) dr_or_cr = "credit" if self.payment_type == "Receive" else "debit" - if self.book_advance_payments_in_separate_party_account: + + for d in self.get("references"): + # re-defining dr_or_cr for every reference in order to avoid the last value affecting calculation of reverse + dr_or_cr = "credit" if self.payment_type == "Receive" else "debit" + cost_center = self.cost_center + if d.reference_doctype == "Sales Invoice" and not cost_center: + cost_center = frappe.db.get_value(d.reference_doctype, d.reference_name, "cost_center") + gle = party_gl_dict.copy() - if self.payment_type == "Receive": - amount = self.base_paid_amount - else: - amount = self.base_received_amount + allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference(d) + reverse_dr_or_cr = 0 + + if d.reference_doctype in ["Sales Invoice", "Purchase Invoice"]: + is_return = frappe.db.get_value(d.reference_doctype, d.reference_name, "is_return") + payable_party_types = get_party_types_from_account_type("Payable") + receivable_party_types = get_party_types_from_account_type("Receivable") + if ( + is_return + and self.party_type in receivable_party_types + and (self.payment_type == "Pay") + ): + reverse_dr_or_cr = 1 + elif ( + is_return + and self.party_type in payable_party_types + and (self.payment_type == "Receive") + ): + reverse_dr_or_cr = 1 + + if is_return and not reverse_dr_or_cr: + dr_or_cr = "debit" if dr_or_cr == "credit" else "credit" - exchange_rate = self.get_exchange_rate() - amount_in_account_currency = amount * exchange_rate gle.update( { - dr_or_cr: amount, - dr_or_cr + "_in_account_currency": amount_in_account_currency, - "against_voucher_type": "Payment Entry", - "against_voucher": self.name, - "cost_center": self.cost_center, + dr_or_cr: abs(allocated_amount_in_company_currency), + dr_or_cr + "_in_account_currency": abs(d.allocated_amount), + "against_voucher_type": d.reference_doctype, + "against_voucher": d.reference_name, + "cost_center": cost_center, } ) gl_entries.append(gle) - else: - for d in self.get("references"): - # re-defining dr_or_cr for every reference in order to avoid the last value affecting calculation of reverse - dr_or_cr = "credit" if self.payment_type == "Receive" else "debit" - cost_center = self.cost_center - if d.reference_doctype == "Sales Invoice" and not cost_center: - cost_center = frappe.db.get_value( - d.reference_doctype, d.reference_name, "cost_center" - ) - - gle = party_gl_dict.copy() - - allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference( - d - ) - reverse_dr_or_cr = 0 - - if d.reference_doctype in ["Sales Invoice", "Purchase Invoice"]: - is_return = frappe.db.get_value(d.reference_doctype, d.reference_name, "is_return") - payable_party_types = get_party_types_from_account_type("Payable") - receivable_party_types = get_party_types_from_account_type("Receivable") - if ( - is_return - and self.party_type in receivable_party_types - and (self.payment_type == "Pay") - ): - reverse_dr_or_cr = 1 - elif ( - is_return - and self.party_type in payable_party_types - and (self.payment_type == "Receive") - ): - reverse_dr_or_cr = 1 - - if is_return and not reverse_dr_or_cr: - dr_or_cr = "debit" if dr_or_cr == "credit" else "credit" - - gle.update( - { - dr_or_cr: abs(allocated_amount_in_company_currency), - dr_or_cr + "_in_account_currency": abs(d.allocated_amount), - "against_voucher_type": d.reference_doctype, - "against_voucher": d.reference_name, - "cost_center": cost_center, - } - ) - gl_entries.append(gle) if self.unallocated_amount: dr_or_cr = "credit" if self.payment_type == "Receive" else "debit" @@ -1212,6 +1188,13 @@ class PaymentEntry(AccountsController): } ) + if self.book_advance_payments_in_separate_party_account: + gle.update( + { + "against_voucher_type": "Payment Entry", + "against_voucher": self.name, + } + ) gl_entries.append(gle) def make_advance_gl_entries(