fix: handle partial invoice against provisional entry

(cherry picked from commit 2a46799188)
This commit is contained in:
Gursheen Anand
2024-01-29 11:34:06 +05:30
committed by Mergify
parent e62c49d9a6
commit 5f23614960

View File

@@ -859,9 +859,12 @@ class PurchaseInvoice(BuyingController):
if provisional_accounting_for_non_stock_items: if provisional_accounting_for_non_stock_items:
if item.purchase_receipt: if item.purchase_receipt:
provisional_account = frappe.db.get_value( provisional_account, pr_base_rate = frappe.get_cached_value(
"Purchase Receipt Item", item.pr_detail, "provisional_expense_account" "Purchase Receipt Item", item.pr_detail, ["provisional_expense_account", "base_rate"]
) or self.get_company_default("default_provisional_account") )
provisional_account = provisional_account or self.get_company_default(
"default_provisional_account"
)
purchase_receipt_doc = purchase_receipt_doc_map.get(item.purchase_receipt) purchase_receipt_doc = purchase_receipt_doc_map.get(item.purchase_receipt)
if not purchase_receipt_doc: if not purchase_receipt_doc:
@@ -869,7 +872,7 @@ class PurchaseInvoice(BuyingController):
purchase_receipt_doc_map[item.purchase_receipt] = purchase_receipt_doc purchase_receipt_doc_map[item.purchase_receipt] = purchase_receipt_doc
# Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt # Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt
expense_booked_in_pr, credit = frappe.db.get_value( expense_booked_in_pr = frappe.db.get_value(
"GL Entry", "GL Entry",
{ {
"is_cancelled": 0, "is_cancelled": 0,
@@ -878,13 +881,18 @@ class PurchaseInvoice(BuyingController):
"voucher_detail_no": item.pr_detail, "voucher_detail_no": item.pr_detail,
"account": provisional_account, "account": provisional_account,
}, },
["name", "credit"], "name",
) )
if expense_booked_in_pr: if expense_booked_in_pr:
# Intentionally passing purchase invoice item to handle partial billing # Intentionally passing purchase invoice item to handle partial billing
purchase_receipt_doc.add_provisional_gl_entry( purchase_receipt_doc.add_provisional_gl_entry(
item, gl_entries, self.posting_date, provisional_account, reverse=1, item_amount=credit item,
gl_entries,
self.posting_date,
provisional_account,
reverse=1,
item_amount=(item.qty * pr_base_rate),
) )
if not self.is_internal_transfer(): if not self.is_internal_transfer():