perf: Optimization for providional gl entries

This commit is contained in:
Nabin Hait
2024-02-27 14:40:15 +05:30
parent 091d6f330a
commit d7b738ff61

View File

@@ -720,7 +720,7 @@ class PurchaseInvoice(BuyingController):
"Company", self.company, "enable_provisional_accounting_for_non_stock_items" "Company", self.company, "enable_provisional_accounting_for_non_stock_items"
) )
) )
provisional_enpenses_booked_in_pr = False
purchase_receipt_doc_map = {} purchase_receipt_doc_map = {}
for item in self.get("items"): for item in self.get("items"):
@@ -859,34 +859,37 @@ 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, pr_qty, pr_base_rate = frappe.get_cached_value( if not provisional_enpenses_booked_in_pr:
"Purchase Receipt Item", provisional_account, pr_qty, pr_base_rate = frappe.get_cached_value(
item.pr_detail, "Purchase Receipt Item",
["provisional_expense_account", "qty", "base_rate"], item.pr_detail,
) ["provisional_expense_account", "qty", "base_rate"],
provisional_account = provisional_account 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) )
# Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt
provision_gle_against_pr = frappe.db.get_value(
"GL Entry",
{
"is_cancelled": 0,
"voucher_type": "Purchase Receipt",
"voucher_no": item.purchase_receipt,
"voucher_detail_no": item.pr_detail,
"account": provisional_account,
},
["name"],
)
if provision_gle_against_pr:
provisional_enpenses_booked_in_pr = True
if not purchase_receipt_doc: if provisional_enpenses_booked_in_pr:
purchase_receipt_doc = frappe.get_doc("Purchase Receipt", item.purchase_receipt) purchase_receipt_doc = purchase_receipt_doc_map.get(item.purchase_receipt)
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 if not purchase_receipt_doc:
expense_booked_in_pr = frappe.db.get_value( purchase_receipt_doc = frappe.get_doc("Purchase Receipt", item.purchase_receipt)
"GL Entry", purchase_receipt_doc_map[item.purchase_receipt] = purchase_receipt_doc
{
"is_cancelled": 0,
"voucher_type": "Purchase Receipt",
"voucher_no": item.purchase_receipt,
"voucher_detail_no": item.pr_detail,
"account": provisional_account,
},
"name",
)
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, item,