fix: get party advance amount based on account

(cherry picked from commit d7fa95dd2f)
This commit is contained in:
venkat102
2024-10-18 18:42:45 +05:30
committed by Mergify
parent 6bbc8e0544
commit b673377b70

View File

@@ -881,16 +881,17 @@ def get_party_shipping_address(doctype: str, name: str) -> str | None:
def get_partywise_advanced_payment_amount( def get_partywise_advanced_payment_amount(
party_type, posting_date=None, future_payment=0, company=None, party=None party_type, posting_date=None, future_payment=0, company=None, party=None
): ):
account_type = frappe.get_cached_value("Party Type", party_type, "account_type")
ple = frappe.qb.DocType("Payment Ledger Entry") ple = frappe.qb.DocType("Payment Ledger Entry")
acc = frappe.qb.DocType("Account")
query = ( query = (
frappe.qb.from_(ple) frappe.qb.from_(ple)
.select(ple.party, Abs(Sum(ple.amount).as_("amount"))) .inner_join(acc)
.where( .on(ple.account == acc.name)
(ple.party_type.isin(party_type)) .select(ple.party)
& (ple.amount < 0) .where((ple.party_type.isin(party_type)) & (acc.account_type == account_type) & (ple.delinked == 0))
& (ple.against_voucher_no == ple.voucher_no)
& (ple.delinked == 0)
)
.groupby(ple.party) .groupby(ple.party)
) )
@@ -909,9 +910,32 @@ def get_partywise_advanced_payment_amount(
if invoice_doctypes := frappe.get_hooks("invoice_doctypes"): if invoice_doctypes := frappe.get_hooks("invoice_doctypes"):
query = query.where(ple.voucher_type.notin(invoice_doctypes)) query = query.where(ple.voucher_type.notin(invoice_doctypes))
data = query.run() # Get advance amount from Receivable / Payable Account
if data: party_ledger = query.select(Abs(Sum(ple.amount).as_("amount")))
return frappe._dict(data) party_ledger = party_ledger.where(ple.amount < 0)
party_ledger = party_ledger.where(ple.against_voucher_no == ple.voucher_no)
party_ledger = party_ledger.where(
acc.root_type == ("Liability" if account_type == "Payable" else "Asset")
)
data = party_ledger.run()
data = frappe._dict(data or {})
# Get advance amount from Advance Account
advance_ledger = query.select(Sum(ple.amount).as_("amount"), ple.account)
advance_ledger = advance_ledger.where(
acc.root_type == ("Asset" if account_type == "Payable" else "Liability")
)
advance_ledger = advance_ledger.groupby(ple.account)
advance_ledger = advance_ledger.having(Sum(ple.amount) < 0)
advance_data = advance_ledger.run()
for row in advance_data:
data.setdefault(row[0], 0)
data[row[0]] += abs(row[1])
return data
def get_default_contact(doctype: str, name: str) -> str | None: def get_default_contact(doctype: str, name: str) -> str | None: