fix(Purchase Invoice): Fetch Purchase Receipt details using a function
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 01df806..32e2eb8 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -517,6 +517,8 @@
if d.category in ('Valuation', 'Total and Valuation')
and flt(d.base_tax_amount_after_discount_amount)]
+ purchase_receipt_details = self.get_purchase_receipt_details()
+
for item in self.get("items"):
if flt(item.base_net_amount):
account_currency = get_account_currency(item.expense_account)
@@ -634,10 +636,13 @@
"project": item.project or self.project
}, account_currency, item=item))
- # check if the exchange rate has changed
- purchase_receipt_conversion_rate = frappe.db.get_value('Purchase Receipt', {'name': item.purchase_receipt}, ['conversion_rate'])
- if purchase_receipt_conversion_rate and self.conversion_rate != purchase_receipt_conversion_rate:
- discrepancy_caused_by_exchange_rate_difference = (item.qty * item.rate) * (purchase_receipt_conversion_rate - self.conversion_rate)
+ if purchase_receipt_details[item.item_code]["conversion_rate"] and \
+ self.conversion_rate != purchase_receipt_details[item.item_code]["conversion_rate"] and \
+ item.net_rate == purchase_receipt_details[item.item_code]["net_rate"]:
+
+ discrepancy_caused_by_exchange_rate_difference = (item.qty * item.net_rate) * \
+ (purchase_receipt_details[item.item_code]["conversion_rate"] - self.conversion_rate)
+
gl_entries.append(
self.get_gl_dict({
"account": expense_account,
@@ -710,6 +715,23 @@
self.negative_expense_to_be_booked += flt(item.item_tax_amount, \
item.precision("item_tax_amount"))
+ def get_purchase_receipt_details(self):
+ purchase_receipt_details = {}
+ for item in self.items:
+ if item.purchase_receipt:
+ purchase_receipt = frappe.get_doc('Purchase Receipt', item.purchase_receipt)
+ pr_item_details = {
+ "conversion_rate" : purchase_receipt.conversion_rate
+ }
+
+ for pr_item in purchase_receipt.items:
+ if pr_item.item_code == item.item_code:
+ pr_item_details["net_rate"] = pr_item.net_rate
+
+ purchase_receipt_details[item.item_code] = pr_item_details
+
+ return purchase_receipt_details
+
def get_asset_gl_entry(self, gl_entries):
arbnb_account = self.get_company_default("asset_received_but_not_billed")
eiiav_account = self.get_company_default("expenses_included_in_asset_valuation")