diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 2f64eddb300..272195e2a68 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -728,6 +728,8 @@ class update_entries_after(object): self.update_rate_on_purchase_receipt(sle, outgoing_rate) elif flt(sle.actual_qty) < 0 and sle.voucher_type == "Subcontracting Receipt": self.update_rate_on_subcontracting_receipt(sle, outgoing_rate) + elif sle.voucher_type == "Stock Reconciliation": + self.update_rate_on_stock_reconciliation(sle) def update_rate_on_stock_entry(self, sle, outgoing_rate): frappe.db.set_value("Stock Entry Detail", sle.voucher_detail_no, "basic_rate", outgoing_rate) @@ -795,6 +797,38 @@ class update_entries_after(object): for d in scr.items: d.db_update() + def update_rate_on_stock_reconciliation(self, sle): + if not sle.serial_no and not sle.batch_no: + sr = frappe.get_doc("Stock Reconciliation", sle.voucher_no, for_update=True) + + for item in sr.items: + # Skip for Serial and Batch Items + if item.serial_no or item.batch_no: + continue + + previous_sle = get_previous_sle( + { + "item_code": item.item_code, + "warehouse": item.warehouse, + "posting_date": sr.posting_date, + "posting_time": sr.posting_time, + "sle": sle.name, + } + ) + + item.current_qty = previous_sle.get("qty_after_transaction") or 0.0 + item.current_valuation_rate = previous_sle.get("valuation_rate") or 0.0 + item.current_amount = flt(item.current_qty) * flt(item.current_valuation_rate) + + item.amount = flt(item.qty) * flt(item.valuation_rate) + item.amount_difference = item.amount - item.current_amount + else: + sr.difference_amount = sum([item.amount_difference for item in sr.items]) + sr.db_update() + + for item in sr.items: + item.db_update() + def get_serialized_values(self, sle): incoming_rate = flt(sle.incoming_rate) actual_qty = flt(sle.actual_qty)