Merge pull request #16288 from Anurag810/task-fixes
[fix] 'Expected End Date' in task should not be later than 'Expected End Date' of project
This commit is contained in:
commit
5c86cf54a2
@ -12,6 +12,7 @@ from frappe.utils.nestedset import NestedSet
|
|||||||
|
|
||||||
|
|
||||||
class CircularReferenceError(frappe.ValidationError): pass
|
class CircularReferenceError(frappe.ValidationError): pass
|
||||||
|
class EndDateCannotBeGreaterThanProjectEndDateError(frappe.ValidationError): pass
|
||||||
|
|
||||||
class Task(NestedSet):
|
class Task(NestedSet):
|
||||||
nsm_parent_field = 'parent_task'
|
nsm_parent_field = 'parent_task'
|
||||||
@ -43,6 +44,12 @@ class Task(NestedSet):
|
|||||||
if self.act_start_date and self.act_end_date and getdate(self.act_start_date) > getdate(self.act_end_date):
|
if self.act_start_date and self.act_end_date and getdate(self.act_start_date) > getdate(self.act_end_date):
|
||||||
frappe.throw(_("'Actual Start Date' can not be greater than 'Actual End Date'"))
|
frappe.throw(_("'Actual Start Date' can not be greater than 'Actual End Date'"))
|
||||||
|
|
||||||
|
if(self.project):
|
||||||
|
if frappe.db.exists("Project", self.project):
|
||||||
|
expected_end_date = frappe.db.get_value("Project", self.project, "expected_end_date")
|
||||||
|
if self.exp_end_date and expected_end_date and getdate(self.exp_end_date) > getdate(expected_end_date) :
|
||||||
|
frappe.throw(_("Expected end date cannot be after Project: <b>'{0}'</b> Expected end date").format(self.project), EndDateCannotBeGreaterThanProjectEndDateError)
|
||||||
|
|
||||||
def validate_status(self):
|
def validate_status(self):
|
||||||
if self.status!=self.get_db_value("status") and self.status == "Closed":
|
if self.status!=self.get_db_value("status") and self.status == "Closed":
|
||||||
for d in self.depends_on:
|
for d in self.depends_on:
|
||||||
|
|||||||
@ -5,11 +5,11 @@ import frappe
|
|||||||
import unittest
|
import unittest
|
||||||
from frappe.utils import getdate, nowdate, add_days
|
from frappe.utils import getdate, nowdate, add_days
|
||||||
|
|
||||||
from erpnext.projects.doctype.task.task import CircularReferenceError
|
from erpnext.projects.doctype.task.task import CircularReferenceError, EndDateCannotBeGreaterThanProjectEndDateError
|
||||||
|
|
||||||
class TestTask(unittest.TestCase):
|
class TestTask(unittest.TestCase):
|
||||||
def test_circular_reference(self):
|
def test_circular_reference(self):
|
||||||
task1 = create_task("_Test Task 1", nowdate(), add_days(nowdate(), 10))
|
task1 = create_task("_Test Task 1", add_days(nowdate(), -15), add_days(nowdate(), -10))
|
||||||
task2 = create_task("_Test Task 2", add_days(nowdate(), 11), add_days(nowdate(), 15), task1.name)
|
task2 = create_task("_Test Task 2", add_days(nowdate(), 11), add_days(nowdate(), 15), task1.name)
|
||||||
task3 = create_task("_Test Task 3", add_days(nowdate(), 11), add_days(nowdate(), 15), task2.name)
|
task3 = create_task("_Test Task 3", add_days(nowdate(), 11), add_days(nowdate(), 15), task2.name)
|
||||||
|
|
||||||
@ -97,7 +97,16 @@ class TestTask(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(frappe.db.get_value("Task", task.name, "status"), "Overdue")
|
self.assertEqual(frappe.db.get_value("Task", task.name, "status"), "Overdue")
|
||||||
|
|
||||||
def create_task(subject, start=None, end=None, depends_on=None, project=None):
|
def test_end_date_validation(self):
|
||||||
|
task_end = create_task("Testing_Enddate_validation", add_days(nowdate(), 35), add_days(nowdate(), 45), save=False)
|
||||||
|
pro = frappe.get_doc("Project", task_end.project)
|
||||||
|
pro.expected_end_date = add_days(nowdate(), 40)
|
||||||
|
pro.save()
|
||||||
|
self.assertRaises(EndDateCannotBeGreaterThanProjectEndDateError, task_end.save)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def create_task(subject, start=None, end=None, depends_on=None, project=None, save=True):
|
||||||
if not frappe.db.exists("Task", subject):
|
if not frappe.db.exists("Task", subject):
|
||||||
task = frappe.new_doc('Task')
|
task = frappe.new_doc('Task')
|
||||||
task.status = "Open"
|
task.status = "Open"
|
||||||
@ -105,6 +114,7 @@ def create_task(subject, start=None, end=None, depends_on=None, project=None):
|
|||||||
task.exp_start_date = start or nowdate()
|
task.exp_start_date = start or nowdate()
|
||||||
task.exp_end_date = end or nowdate()
|
task.exp_end_date = end or nowdate()
|
||||||
task.project = project or "_Test Project"
|
task.project = project or "_Test Project"
|
||||||
|
if save:
|
||||||
task.save()
|
task.save()
|
||||||
else:
|
else:
|
||||||
task = frappe.get_doc("Task", subject)
|
task = frappe.get_doc("Task", subject)
|
||||||
@ -113,6 +123,7 @@ def create_task(subject, start=None, end=None, depends_on=None, project=None):
|
|||||||
task.append("depends_on", {
|
task.append("depends_on", {
|
||||||
"task": depends_on
|
"task": depends_on
|
||||||
})
|
})
|
||||||
|
if save:
|
||||||
task.save()
|
task.save()
|
||||||
|
|
||||||
return task
|
return task
|
||||||
Loading…
x
Reference in New Issue
Block a user