mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
Merge pull request #50405 from frappe/mergify/bp/version-15-hotfix/pr-50326
fix: validate is_group for parent task (backport #50326)
This commit is contained in:
@@ -17,6 +17,10 @@ class CircularReferenceError(frappe.ValidationError):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ParentIsGroupError(frappe.ValidationError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Task(NestedSet):
|
class Task(NestedSet):
|
||||||
# begin: auto-generated types
|
# begin: auto-generated types
|
||||||
# This code is auto-generated. Do not modify anything in this block.
|
# This code is auto-generated. Do not modify anything in this block.
|
||||||
@@ -83,6 +87,7 @@ class Task(NestedSet):
|
|||||||
self.update_depends_on()
|
self.update_depends_on()
|
||||||
self.validate_dependencies_for_template_task()
|
self.validate_dependencies_for_template_task()
|
||||||
self.validate_completed_on()
|
self.validate_completed_on()
|
||||||
|
self.validate_parent_is_group()
|
||||||
|
|
||||||
def validate_dates(self):
|
def validate_dates(self):
|
||||||
self.validate_from_to_dates("exp_start_date", "exp_end_date")
|
self.validate_from_to_dates("exp_start_date", "exp_end_date")
|
||||||
@@ -153,20 +158,36 @@ class Task(NestedSet):
|
|||||||
def validate_parent_template_task(self):
|
def validate_parent_template_task(self):
|
||||||
if self.parent_task:
|
if self.parent_task:
|
||||||
if not frappe.db.get_value("Task", self.parent_task, "is_template"):
|
if not frappe.db.get_value("Task", self.parent_task, "is_template"):
|
||||||
parent_task_format = f"""<a href="/app/task/{self.parent_task}">{self.parent_task}</a>"""
|
frappe.throw(
|
||||||
frappe.throw(_("Parent Task {0} is not a Template Task").format(parent_task_format))
|
_("Parent Task {0} is not a Template Task").format(
|
||||||
|
get_link_to_form("Task", self.parent_task)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def validate_depends_on_tasks(self):
|
def validate_depends_on_tasks(self):
|
||||||
if self.depends_on:
|
if self.depends_on:
|
||||||
for task in self.depends_on:
|
for task in self.depends_on:
|
||||||
if not frappe.db.get_value("Task", task.task, "is_template"):
|
if not frappe.db.get_value("Task", task.task, "is_template"):
|
||||||
dependent_task_format = f"""<a href="/app/task/{task.task}">{task.task}</a>"""
|
frappe.throw(
|
||||||
frappe.throw(_("Dependent Task {0} is not a Template Task").format(dependent_task_format))
|
_("Dependent Task {0} is not a Template Task").format(
|
||||||
|
get_link_to_form("Task", task.task)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def validate_completed_on(self):
|
def validate_completed_on(self):
|
||||||
if self.completed_on and getdate(self.completed_on) > getdate():
|
if self.completed_on and getdate(self.completed_on) > getdate():
|
||||||
frappe.throw(_("Completed On cannot be greater than Today"))
|
frappe.throw(_("Completed On cannot be greater than Today"))
|
||||||
|
|
||||||
|
def validate_parent_is_group(self):
|
||||||
|
if self.parent_task:
|
||||||
|
if not frappe.db.get_value("Task", self.parent_task, "is_group"):
|
||||||
|
frappe.throw(
|
||||||
|
_("Parent Task {0} must be a Group Task").format(
|
||||||
|
get_link_to_form("Task", self.parent_task)
|
||||||
|
),
|
||||||
|
ParentIsGroupError,
|
||||||
|
)
|
||||||
|
|
||||||
def update_depends_on(self):
|
def update_depends_on(self):
|
||||||
depends_on_tasks = ""
|
depends_on_tasks = ""
|
||||||
for d in self.depends_on:
|
for d in self.depends_on:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import unittest
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import add_days, getdate, nowdate
|
from frappe.utils import add_days, getdate, nowdate
|
||||||
|
|
||||||
from erpnext.projects.doctype.task.task import CircularReferenceError
|
from erpnext.projects.doctype.task.task import CircularReferenceError, ParentIsGroupError
|
||||||
|
|
||||||
|
|
||||||
class TestTask(unittest.TestCase):
|
class TestTask(unittest.TestCase):
|
||||||
@@ -109,6 +109,20 @@ 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 test_parent_task_must_be_group(self):
|
||||||
|
parent_task = create_task(
|
||||||
|
subject="_Test Parent Task Non Group",
|
||||||
|
is_group=0,
|
||||||
|
)
|
||||||
|
|
||||||
|
child_task = create_task(
|
||||||
|
subject="_Test Child Task",
|
||||||
|
parent_task=parent_task.name,
|
||||||
|
save=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertRaises(ParentIsGroupError, child_task.save)
|
||||||
|
|
||||||
|
|
||||||
def create_task(
|
def create_task(
|
||||||
subject,
|
subject,
|
||||||
|
|||||||
Reference in New Issue
Block a user