mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-29 09:54:47 +00:00
refactor: use different GL build logic for advance as liability
(cherry picked from commit 58114e7b24)
This commit is contained in:
@@ -1055,64 +1055,76 @@ class PaymentEntry(AccountsController):
|
|||||||
item=self,
|
item=self,
|
||||||
)
|
)
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
if self.book_advance_payments_in_separate_party_account:
|
|
||||||
against_voucher_type = "Payment Entry"
|
|
||||||
against_voucher = self.name
|
|
||||||
else:
|
|
||||||
against_voucher_type = d.reference_doctype
|
|
||||||
against_voucher = d.reference_name
|
|
||||||
|
|
||||||
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": against_voucher_type,
|
|
||||||
"against_voucher": against_voucher,
|
|
||||||
"cost_center": cost_center,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
gl_entries.append(gle)
|
|
||||||
|
|
||||||
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
|
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
|
||||||
if self.unallocated_amount:
|
if self.book_advance_payments_in_separate_party_account:
|
||||||
exchange_rate = self.get_exchange_rate()
|
if self.payment_type == "Receive":
|
||||||
base_unallocated_amount = self.unallocated_amount * exchange_rate
|
amount = self.base_paid_amount
|
||||||
|
else:
|
||||||
|
amount = self.base_received_amount
|
||||||
|
|
||||||
gle = party_gl_dict.copy()
|
gle = party_gl_dict.copy()
|
||||||
gle.update(
|
gle.update(
|
||||||
{
|
{
|
||||||
dr_or_cr + "_in_account_currency": self.unallocated_amount,
|
dr_or_cr: amount,
|
||||||
dr_or_cr: base_unallocated_amount,
|
# TODO: handle multi currency payments
|
||||||
|
dr_or_cr + "_in_account_currency": amount,
|
||||||
|
"against_voucher_type": "Payment Entry",
|
||||||
|
"against_voucher": self.name,
|
||||||
|
"cost_center": self.cost_center,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
gl_entries.append(gle)
|
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:
|
||||||
|
exchange_rate = self.get_exchange_rate()
|
||||||
|
base_unallocated_amount = self.unallocated_amount * exchange_rate
|
||||||
|
|
||||||
|
gle = party_gl_dict.copy()
|
||||||
|
gle.update(
|
||||||
|
{
|
||||||
|
dr_or_cr + "_in_account_currency": self.unallocated_amount,
|
||||||
|
dr_or_cr: base_unallocated_amount,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
gl_entries.append(gle)
|
||||||
|
|
||||||
def make_advance_gl_entries(self, against_voucher_type=None, against_voucher=None, cancel=0):
|
def make_advance_gl_entries(self, against_voucher_type=None, against_voucher=None, cancel=0):
|
||||||
if self.book_advance_payments_in_separate_party_account:
|
if self.book_advance_payments_in_separate_party_account:
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ def reconcile_against_document(args, skip_ref_details_update_for_pe=False): # n
|
|||||||
|
|
||||||
if voucher_type == "Payment Entry" and doc.book_advance_payments_in_separate_party_account:
|
if voucher_type == "Payment Entry" and doc.book_advance_payments_in_separate_party_account:
|
||||||
# both ledgers must be posted to for `Advance as Liability`
|
# both ledgers must be posted to for `Advance as Liability`
|
||||||
doc.make_gl_entries()
|
doc.make_advance_gl_entries()
|
||||||
else:
|
else:
|
||||||
gl_map = doc.build_gl_map()
|
gl_map = doc.build_gl_map()
|
||||||
create_payment_ledger_entry(gl_map, update_outstanding="No", cancel=0, adv_adj=1)
|
create_payment_ledger_entry(gl_map, update_outstanding="No", cancel=0, adv_adj=1)
|
||||||
|
|||||||
Reference in New Issue
Block a user