fix: too many writes error while making backdated stock reconciliation
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index b0a093d..a605b0c 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -545,6 +545,14 @@
self.get_dynamic_incoming_outgoing_rate(sle)
if (
+ sle.voucher_type == "Stock Reconciliation"
+ and sle.batch_no
+ and sle.voucher_detail_no
+ and sle.actual_qty < 0
+ ):
+ self.reset_actual_qty_for_stock_reco(sle)
+
+ if (
sle.voucher_type in ["Purchase Receipt", "Purchase Invoice"]
and sle.voucher_detail_no
and sle.actual_qty < 0
@@ -605,6 +613,16 @@
if not self.args.get("sle_id"):
self.update_outgoing_rate_on_transaction(sle)
+ def reset_actual_qty_for_stock_reco(self, sle):
+ current_qty = frappe.get_cached_value(
+ "Stock Reconciliation Item", sle.voucher_detail_no, "current_qty"
+ )
+
+ if current_qty:
+ sle.actual_qty = current_qty * -1
+ elif current_qty == 0:
+ sle.is_cancelled = 1
+
def validate_negative_stock(self, sle):
"""
validate negative stock for entries current datetime onwards
@@ -1369,12 +1387,7 @@
def regenerate_sle_for_batch_stock_reco(detail):
doc = frappe.get_cached_doc("Stock Reconciliation", detail.voucher_no)
- doc.docstatus = 2
- doc.update_stock_ledger()
-
doc.recalculate_current_qty(detail.item_code, detail.batch_no)
- doc.docstatus = 1
- doc.update_stock_ledger()
doc.repost_future_sle_and_gle()
@@ -1416,6 +1429,7 @@
and voucher_type = 'Stock Reconciliation'
and voucher_no != %(voucher_no)s
and is_cancelled = 0
+ and batch_no = %(batch_no)s
and (timestamp(posting_date, posting_time) > timestamp(%(posting_date)s, %(posting_time)s)
or (
timestamp(posting_date, posting_time) = timestamp(%(posting_date)s, %(posting_time)s)