fix: Service start and end date validation for deferred accounting (#19805)

This commit is contained in:
Nabin Hait
2019-12-04 15:30:01 +05:30
committed by GitHub
parent a830f89a59
commit acdd5081da
3 changed files with 30 additions and 9 deletions

View File

@@ -1,4 +1,5 @@
{ {
"actions": [],
"autoname": "hash", "autoname": "hash",
"creation": "2013-05-22 12:43:10", "creation": "2013-05-22 12:43:10",
"doctype": "DocType", "doctype": "DocType",
@@ -507,7 +508,8 @@
"depends_on": "enable_deferred_expense", "depends_on": "enable_deferred_expense",
"fieldname": "service_stop_date", "fieldname": "service_stop_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service Stop Date" "label": "Service Stop Date",
"no_copy": 1
}, },
{ {
"default": "0", "default": "0",
@@ -523,13 +525,15 @@
"depends_on": "enable_deferred_expense", "depends_on": "enable_deferred_expense",
"fieldname": "service_start_date", "fieldname": "service_start_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service Start Date" "label": "Service Start Date",
"no_copy": 1
}, },
{ {
"depends_on": "enable_deferred_expense", "depends_on": "enable_deferred_expense",
"fieldname": "service_end_date", "fieldname": "service_end_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service End Date" "label": "Service End Date",
"no_copy": 1
}, },
{ {
"fieldname": "reference", "fieldname": "reference",
@@ -766,7 +770,8 @@
], ],
"idx": 1, "idx": 1,
"istable": 1, "istable": 1,
"modified": "2019-11-21 16:27:52.043744", "links": [],
"modified": "2019-12-04 12:23:17.046413",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Purchase Invoice Item", "name": "Purchase Invoice Item",

View File

@@ -1,4 +1,5 @@
{ {
"actions": [],
"autoname": "hash", "autoname": "hash",
"creation": "2013-06-04 11:02:19", "creation": "2013-06-04 11:02:19",
"doctype": "DocType", "doctype": "DocType",
@@ -484,7 +485,8 @@
"depends_on": "enable_deferred_revenue", "depends_on": "enable_deferred_revenue",
"fieldname": "service_stop_date", "fieldname": "service_stop_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service Stop Date" "label": "Service Stop Date",
"no_copy": 1
}, },
{ {
"default": "0", "default": "0",
@@ -500,13 +502,15 @@
"depends_on": "enable_deferred_revenue", "depends_on": "enable_deferred_revenue",
"fieldname": "service_start_date", "fieldname": "service_start_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service Start Date" "label": "Service Start Date",
"no_copy": 1
}, },
{ {
"depends_on": "enable_deferred_revenue", "depends_on": "enable_deferred_revenue",
"fieldname": "service_end_date", "fieldname": "service_end_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Service End Date" "label": "Service End Date",
"no_copy": 1
}, },
{ {
"collapsible": 1, "collapsible": 1,
@@ -783,7 +787,8 @@
], ],
"idx": 1, "idx": 1,
"istable": 1, "istable": 1,
"modified": "2019-07-16 16:36:46.527606", "links": [],
"modified": "2019-12-04 12:22:38.517710",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Sales Invoice Item", "name": "Sales Invoice Item",

View File

@@ -61,7 +61,6 @@ class AccountsController(TransactionBase):
_('{0} is blocked so this transaction cannot proceed'.format(supplier_name)), raise_exception=1) _('{0} is blocked so this transaction cannot proceed'.format(supplier_name)), raise_exception=1)
def validate(self): def validate(self):
if not self.get('is_return'): if not self.get('is_return'):
self.validate_qty_is_not_zero() self.validate_qty_is_not_zero()
@@ -100,11 +99,23 @@ class AccountsController(TransactionBase):
if self.is_return: if self.is_return:
self.validate_qty() self.validate_qty()
else:
self.validate_deferred_start_and_end_date()
validate_regional(self) validate_regional(self)
if self.doctype != 'Material Request': if self.doctype != 'Material Request':
apply_pricing_rule_on_transaction(self) apply_pricing_rule_on_transaction(self)
def validate_deferred_start_and_end_date(self):
for d in self.items:
if d.get("enable_deferred_revenue") or d.get("enable_deferred_expense"):
if not (d.service_start_date and d.service_end_date):
frappe.throw(_("Row #{0}: Service Start and End Date is required for deferred accounting").format(d.idx))
elif getdate(d.service_start_date) > getdate(d.service_end_date):
frappe.throw(_("Row #{0}: Service Start Date cannot be greater than Service End Date").format(d.idx))
elif getdate(self.posting_date) > getdate(d.service_end_date):
frappe.throw(_("Row #{0}: Service End Date cannot be before Invoice Posting Date").format(d.idx))
def validate_invoice_documents_schedule(self): def validate_invoice_documents_schedule(self):
self.validate_payment_schedule_dates() self.validate_payment_schedule_dates()
self.set_due_date() self.set_due_date()