Merge pull request #42140 from nabinhait/provisional_entry_fix3

fix: provisional entry for non stock items
This commit is contained in:
ruthra kumar
2024-07-03 07:20:56 +05:30
committed by GitHub
3 changed files with 30 additions and 31 deletions

View File

@@ -179,7 +179,8 @@
"fieldname": "voucher_detail_no", "fieldname": "voucher_detail_no",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Voucher Detail No", "label": "Voucher Detail No",
"read_only": 1 "read_only": 1,
"search_index": 1
}, },
{ {
"fieldname": "project", "fieldname": "project",
@@ -290,7 +291,7 @@
"idx": 1, "idx": 1,
"in_create": 1, "in_create": 1,
"links": [], "links": [],
"modified": "2023-12-18 15:38:14.006208", "modified": "2024-07-02 14:31:51.496466",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "GL Entry", "name": "GL Entry",
@@ -322,7 +323,7 @@
], ],
"quick_entry": 1, "quick_entry": 1,
"search_fields": "voucher_no,account,posting_date,against_voucher", "search_fields": "voucher_no,account,posting_date,against_voucher",
"sort_field": "modified", "sort_field": "creation",
"sort_order": "DESC", "sort_order": "DESC",
"states": [] "states": []
} }

View File

@@ -32,8 +32,6 @@ class GLEntry(Document):
account: DF.Link | None account: DF.Link | None
account_currency: DF.Link | None account_currency: DF.Link | None
against: DF.Text | None against: DF.Text | None
against_link: DF.DynamicLink | None
against_type: DF.Link | None
against_voucher: DF.DynamicLink | None against_voucher: DF.DynamicLink | None
against_voucher_type: DF.Link | None against_voucher_type: DF.Link | None
company: DF.Link | None company: DF.Link | None

View File

@@ -972,7 +972,6 @@ class PurchaseInvoice(BuyingController):
"Company", self.company, "enable_provisional_accounting_for_non_stock_items" "Company", self.company, "enable_provisional_accounting_for_non_stock_items"
) )
) )
self.provisional_enpenses_booked_in_pr = False
if provisional_accounting_for_non_stock_items: if provisional_accounting_for_non_stock_items:
self.get_provisional_accounts() self.get_provisional_accounts()
@@ -1218,37 +1217,38 @@ class PurchaseInvoice(BuyingController):
fields=["name", "provisional_expense_account", "qty", "base_rate"], fields=["name", "provisional_expense_account", "qty", "base_rate"],
) )
default_provisional_account = self.get_company_default("default_provisional_account") default_provisional_account = self.get_company_default("default_provisional_account")
provisional_accounts = set(
[
d.provisional_expense_account
if d.provisional_expense_account
else default_provisional_account
for d in pr_items
]
)
provisional_gl_entries = frappe.get_all(
"GL Entry",
filters={
"voucher_type": "Purchase Receipt",
"voucher_no": ("in", linked_purchase_receipts),
"account": ("in", provisional_accounts),
"is_cancelled": 0,
},
fields=["voucher_detail_no"],
)
rows_with_provisional_entries = [d.voucher_detail_no for d in provisional_gl_entries]
for item in pr_items: for item in pr_items:
self.provisional_accounts[item.name] = { self.provisional_accounts[item.name] = {
"provisional_account": item.provisional_expense_account or default_provisional_account, "provisional_account": item.provisional_expense_account or default_provisional_account,
"qty": item.qty, "qty": item.qty,
"base_rate": item.base_rate, "base_rate": item.base_rate,
"has_provisional_entry": item.name in rows_with_provisional_entries,
} }
def make_provisional_gl_entry(self, gl_entries, item): def make_provisional_gl_entry(self, gl_entries, item):
if item.purchase_receipt: if item.purchase_receipt:
if not self.provisional_enpenses_booked_in_pr:
pr_item = self.provisional_accounts.get(item.pr_detail, {}) pr_item = self.provisional_accounts.get(item.pr_detail, {})
provisional_account = pr_item.get("provisional_account") if pr_item.get("has_provisional_entry"):
pr_qty = pr_item.get("qty")
pr_base_rate = pr_item.get("base_rate")
# 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:
self.provisional_enpenses_booked_in_pr = True
if self.provisional_enpenses_booked_in_pr:
purchase_receipt_doc = frappe.get_cached_doc("Purchase Receipt", item.purchase_receipt) purchase_receipt_doc = frappe.get_cached_doc("Purchase Receipt", item.purchase_receipt)
# Intentionally passing purchase invoice item to handle partial billing # Intentionally passing purchase invoice item to handle partial billing
@@ -1256,9 +1256,9 @@ class PurchaseInvoice(BuyingController):
item, item,
gl_entries, gl_entries,
self.posting_date, self.posting_date,
provisional_account, pr_item.get("provisional_account"),
reverse=1, reverse=1,
item_amount=(min(item.qty, pr_qty) * pr_base_rate), item_amount=(min(item.qty, pr_item.get("qty")) * pr_item.get("base_rate")),
) )
def update_gross_purchase_amount_for_linked_assets(self, item): def update_gross_purchase_amount_for_linked_assets(self, item):