fix: incorrect Parent Task getting set for 2nd to nth child Task (#37230)
This commit is contained in:
parent
0f6b530032
commit
73fc974950
@ -70,6 +70,7 @@ class Project(Document):
|
|||||||
tmp_task_details.append(template_task_details)
|
tmp_task_details.append(template_task_details)
|
||||||
task = self.create_task_from_template(template_task_details)
|
task = self.create_task_from_template(template_task_details)
|
||||||
project_tasks.append(task)
|
project_tasks.append(task)
|
||||||
|
|
||||||
self.dependency_mapping(tmp_task_details, project_tasks)
|
self.dependency_mapping(tmp_task_details, project_tasks)
|
||||||
|
|
||||||
def create_task_from_template(self, task_details):
|
def create_task_from_template(self, task_details):
|
||||||
@ -108,36 +109,28 @@ class Project(Document):
|
|||||||
|
|
||||||
def dependency_mapping(self, template_tasks, project_tasks):
|
def dependency_mapping(self, template_tasks, project_tasks):
|
||||||
for project_task in project_tasks:
|
for project_task in project_tasks:
|
||||||
if project_task.get("template_task"):
|
template_task = frappe.get_doc("Task", project_task.template_task)
|
||||||
template_task = frappe.get_doc("Task", project_task.template_task)
|
|
||||||
else:
|
|
||||||
template_task = list(filter(lambda x: x.subject == project_task.subject, template_tasks))[0]
|
|
||||||
template_task = frappe.get_doc("Task", template_task.name)
|
|
||||||
|
|
||||||
self.check_depends_on_value(template_task, project_task, project_tasks)
|
self.check_depends_on_value(template_task, project_task, project_tasks)
|
||||||
self.check_for_parent_tasks(template_task, project_task, project_tasks)
|
self.check_for_parent_tasks(template_task, project_task, project_tasks)
|
||||||
|
|
||||||
def check_depends_on_value(self, template_task, project_task, project_tasks):
|
def check_depends_on_value(self, template_task, project_task, project_tasks):
|
||||||
if template_task.get("depends_on") and not project_task.get("depends_on"):
|
if template_task.get("depends_on") and not project_task.get("depends_on"):
|
||||||
|
project_template_map = {pt.template_task: pt for pt in project_tasks}
|
||||||
|
|
||||||
for child_task in template_task.get("depends_on"):
|
for child_task in template_task.get("depends_on"):
|
||||||
child_task_subject = frappe.db.get_value("Task", child_task.task, "subject")
|
if project_template_map and project_template_map.get(child_task.task):
|
||||||
corresponding_project_task = list(
|
|
||||||
filter(lambda x: x.subject == child_task_subject, project_tasks)
|
|
||||||
)
|
|
||||||
if len(corresponding_project_task):
|
|
||||||
project_task.reload() # reload, as it might have been updated in the previous iteration
|
project_task.reload() # reload, as it might have been updated in the previous iteration
|
||||||
project_task.append("depends_on", {"task": corresponding_project_task[0].name})
|
project_task.append("depends_on", {"task": project_template_map.get(child_task.task).name})
|
||||||
project_task.save()
|
project_task.save()
|
||||||
|
|
||||||
def check_for_parent_tasks(self, template_task, project_task, project_tasks):
|
def check_for_parent_tasks(self, template_task, project_task, project_tasks):
|
||||||
if template_task.get("parent_task") and not project_task.get("parent_task"):
|
if template_task.get("parent_task") and not project_task.get("parent_task"):
|
||||||
parent_task_subject = frappe.db.get_value("Task", template_task.get("parent_task"), "subject")
|
for pt in project_tasks:
|
||||||
corresponding_project_task = list(
|
if pt.template_task == template_task.parent_task:
|
||||||
filter(lambda x: x.subject == parent_task_subject, project_tasks)
|
project_task.parent_task = pt.name
|
||||||
)
|
project_task.save()
|
||||||
if len(corresponding_project_task):
|
break
|
||||||
project_task.parent_task = corresponding_project_task[0].name
|
|
||||||
project_task.save()
|
|
||||||
|
|
||||||
def is_row_updated(self, row, existing_task_data, fields):
|
def is_row_updated(self, row, existing_task_data, fields):
|
||||||
if self.get("__islocal") or not existing_task_data:
|
if self.get("__islocal") or not existing_task_data:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user