Merge pull request #23567 from nextchamp-saqib/restrict-future-posting
chore: do not allow future transactions
This commit is contained in:
commit
c9ebef4d30
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||||||
import frappe
|
import frappe
|
||||||
import frappe.share
|
import frappe.share
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import cstr, now_datetime, cint, flt, get_time, get_datetime, get_link_to_form
|
from frappe.utils import cstr, now_datetime, cint, flt, get_time, get_datetime, get_link_to_form, date_diff, nowdate
|
||||||
from erpnext.controllers.status_updater import StatusUpdater
|
from erpnext.controllers.status_updater import StatusUpdater
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
|
|
||||||
@ -29,8 +29,28 @@ class TransactionBase(StatusUpdater):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
frappe.throw(_('Invalid Posting Time'))
|
frappe.throw(_('Invalid Posting Time'))
|
||||||
|
|
||||||
|
self.validate_future_posting()
|
||||||
self.validate_with_last_transaction_posting_time()
|
self.validate_with_last_transaction_posting_time()
|
||||||
|
|
||||||
|
def is_stock_transaction(self):
|
||||||
|
if self.doctype not in ["Sales Invoice", "Purchase Invoice", "Stock Entry", "Stock Reconciliation",
|
||||||
|
"Delivery Note", "Purchase Receipt", "Fees"]:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if self.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
||||||
|
if not (self.get("update_stock") or self.get("is_pos")):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def validate_future_posting(self):
|
||||||
|
if not self.is_stock_transaction():
|
||||||
|
return
|
||||||
|
|
||||||
|
if getattr(self, 'set_posting_time', None) and date_diff(self.posting_date, nowdate()) > 0:
|
||||||
|
msg = _("Posting future transactions are not allowed due to Immutable Ledger")
|
||||||
|
frappe.throw(msg, title=_("Future Posting Not Allowed"))
|
||||||
|
|
||||||
def add_calendar_event(self, opts, force=False):
|
def add_calendar_event(self, opts, force=False):
|
||||||
if cstr(self.contact_by) != cstr(self._prev.contact_by) or \
|
if cstr(self.contact_by) != cstr(self._prev.contact_by) or \
|
||||||
cstr(self.contact_date) != cstr(self._prev.contact_date) or force or \
|
cstr(self.contact_date) != cstr(self._prev.contact_date) or force or \
|
||||||
@ -162,12 +182,7 @@ class TransactionBase(StatusUpdater):
|
|||||||
|
|
||||||
def validate_with_last_transaction_posting_time(self):
|
def validate_with_last_transaction_posting_time(self):
|
||||||
|
|
||||||
if self.doctype not in ["Sales Invoice", "Purchase Invoice", "Stock Entry", "Stock Reconciliation",
|
if not self.is_stock_transaction():
|
||||||
"Delivery Note", "Purchase Receipt", "Fees"]:
|
|
||||||
return
|
|
||||||
|
|
||||||
if self.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
|
||||||
if not (self.get("update_stock") or self.get("is_pos")):
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for item in self.get('items'):
|
for item in self.get('items'):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user