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