From 4e4c1e4befd52ee7d931c8269af032ba24dd24e2 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 21 May 2024 10:33:29 +0530 Subject: [PATCH] fix: Deadlock on submitting Sales Invoice (#41417) --- .../doctype/stock_ledger_entry/stock_ledger_entry.py | 12 ++++++++---- erpnext/stock/stock_ledger.py | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index a3166a8a9d0..f3fd2097262 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -93,11 +93,15 @@ class StockLedgerEntry(Document): self.validate_with_last_transaction_posting_time() self.validate_inventory_dimension_negative_stock() - def set_posting_datetime(self): + def set_posting_datetime(self, save=False): from erpnext.stock.utils import get_combine_datetime - self.posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) - self.db_set("posting_datetime", self.posting_datetime) + if save: + posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) + if not self.posting_datetime or self.posting_datetime != posting_datetime: + self.db_set("posting_datetime", posting_datetime) + else: + self.posting_datetime = get_combine_datetime(self.posting_date, self.posting_time) def validate_inventory_dimension_negative_stock(self): if self.is_cancelled: @@ -169,7 +173,7 @@ class StockLedgerEntry(Document): return inv_dimension_dict def on_submit(self): - self.set_posting_datetime() + self.set_posting_datetime(save=True) self.check_stock_frozen_date() # Added to handle few test cases where serial_and_batch_bundles are not required diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 51585bf7cb0..40f5d2956c0 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -220,6 +220,7 @@ def make_entry(args, allow_negative_stock=False, via_landed_cost_voucher=False): sle.flags.ignore_permissions = 1 sle.allow_negative_stock = allow_negative_stock sle.via_landed_cost_voucher = via_landed_cost_voucher + sle.set_posting_datetime() sle.submit() # Added to handle the case when the stock ledger entry is created from the repostig