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 b49fe2288314e31cb45be7ca5e0b4a4e07314081..62007e84c81cda85a2e9b1afe6636193188fdd78 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
@@ -232,9 +236,7 @@ class StockLedgerEntry(Document):
if not self.serial_and_batch_bundle:
self.throw_error_message(f"Serial No / Batch No are mandatory for Item {self.item_code}")
- if (
- self.serial_and_batch_bundle and not item_detail.has_serial_no and not item_detail.has_batch_no
- ):
+ if self.serial_and_batch_bundle and not item_detail.has_serial_no and not item_detail.has_batch_no:
self.throw_error_message(f"Serial No and Batch No are not allowed for Item {self.item_code}")
def throw_error_message(self, message, exception=frappe.ValidationError):
@@ -262,7 +264,9 @@ class StockLedgerEntry(Document):
)
if older_than_x_days_ago and stock_settings.stock_auth_role not in frappe.get_roles():
frappe.throw(
- _("Not allowed to update stock transactions older than {0}").format(stock_frozen_upto_days),
+ _("Not allowed to update stock transactions older than {0}").format(
+ stock_frozen_upto_days
+ ),
StockFreezeError,
)
@@ -280,7 +284,9 @@ class StockLedgerEntry(Document):
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
if expiry_date:
if getdate(self.posting_date) > getdate(expiry_date):
- frappe.throw(_("Batch {0} of Item {1} has expired.").format(self.batch_no, self.item_code))
+ frappe.throw(
+ _("Batch {0} of Item {1} has expired.").format(self.batch_no, self.item_code)
+ )
def validate_and_set_fiscal_year(self):
if not self.fiscal_year:
@@ -322,7 +328,9 @@ class StockLedgerEntry(Document):
last_transaction_time
):
msg = _("Last Stock Transaction for item {0} under warehouse {1} was on {2}.").format(
- frappe.bold(self.item_code), frappe.bold(self.warehouse), frappe.bold(last_transaction_time)
+ frappe.bold(self.item_code),
+ frappe.bold(self.warehouse),
+ frappe.bold(last_transaction_time),
)
msg += "
" + _(
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 4c876811a74f369d535d903bd5cf2cd0d42cc049..a50e4d9a174dc4995fe34d421a28f9634542c0fa 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -221,6 +221,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