diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 64e70b1aef5d..9c31ebfbb333 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -301,7 +301,8 @@ def set_incoming_rate(self): rate = flt(outgoing_rate * (d.conversion_factor or 1), d.precision("rate")) else: - rate = frappe.db.get_value(ref_doctype, d.get(frappe.scrub(ref_doctype)), "rate") + field = "incoming_rate" if self.get("is_internal_supplier") else "rate" + rate = frappe.db.get_value(ref_doctype, d.get(frappe.scrub(ref_doctype)), field) if self.is_internal_transfer(): if rate != d.rate: diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 4e64b7b18339..270acb869c50 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -635,6 +635,24 @@ def get_incoming_outgoing_rate_from_transaction(self, sle): voucher_detail_no=sle.voucher_detail_no, sle=sle, ) + + elif ( + sle.voucher_type in ["Purchase Receipt", "Purchase Invoice"] + and sle.actual_qty > 0 + and frappe.get_cached_value(sle.voucher_type, sle.voucher_no, "is_internal_supplier") + ): + sle_details = frappe.db.get_value( + "Stock Ledger Entry", + { + "voucher_type": sle.voucher_type, + "voucher_no": sle.voucher_no, + "dependant_sle_voucher_detail_no": sle.voucher_detail_no, + }, + ["stock_value_difference", "actual_qty"], + as_dict=1, + ) + + rate = abs(sle_details.stock_value_difference / sle.actual_qty) else: if sle.voucher_type in ("Purchase Receipt", "Purchase Invoice"): rate_field = "valuation_rate"