mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-20 10:45:29 +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
|
||||
|
||||
|
||||
class ParentIsGroupError(frappe.ValidationError):
|
||||
pass
|
||||
|
||||
|
||||
class Task(NestedSet):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
@@ -83,6 +87,7 @@ class Task(NestedSet):
|
||||
self.update_depends_on()
|
||||
self.validate_dependencies_for_template_task()
|
||||
self.validate_completed_on()
|
||||
self.validate_parent_is_group()
|
||||
|
||||
def validate_dates(self):
|
||||
self.validate_from_to_dates("exp_start_date", "exp_end_date")
|
||||
@@ -153,20 +158,36 @@ class Task(NestedSet):
|
||||
def validate_parent_template_task(self):
|
||||
if self.parent_task:
|
||||
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(_("Parent Task {0} is not a Template Task").format(parent_task_format))
|
||||
frappe.throw(
|
||||
_("Parent Task {0} is not a Template Task").format(
|
||||
get_link_to_form("Task", self.parent_task)
|
||||
)
|
||||
)
|
||||
|
||||
def validate_depends_on_tasks(self):
|
||||
if self.depends_on:
|
||||
for task in self.depends_on:
|
||||
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(_("Dependent Task {0} is not a Template Task").format(dependent_task_format))
|
||||
frappe.throw(
|
||||
_("Dependent Task {0} is not a Template Task").format(
|
||||
get_link_to_form("Task", task.task)
|
||||
)
|
||||
)
|
||||
|
||||
def validate_completed_on(self):
|
||||
if self.completed_on and getdate(self.completed_on) > getdate():
|
||||
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):
|
||||
depends_on_tasks = ""
|
||||
for d in self.depends_on:
|
||||
|
||||
@@ -6,7 +6,7 @@ import unittest
|
||||
import frappe
|
||||
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):
|
||||
@@ -109,6 +109,20 @@ class TestTask(unittest.TestCase):
|
||||
|
||||
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(
|
||||
subject,
|
||||
|
||||
Reference in New Issue
Block a user