diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 76c34db1e9..e418845f3f 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -69,6 +69,7 @@ class Task(NestedSet): self.reschedule_dependent_tasks() self.update_project() self.unassign_todo() + self.populate_depends_on() def unassign_todo(self): if self.status == "Closed" or self.status == "Cancelled": @@ -137,6 +138,16 @@ class Task(NestedSet): if project_user: return True + def populate_depends_on(self): + if self.parent_task: + parent = frappe.get_doc('Task', self.parent_task) + parent.append("depends_on", { + "doctype": "Task Depends On", + "task": self.name, + "subject": self.subject + }) + parent.save() + def on_trash(self): if check_if_child_exists(self.name): throw(_("Child Task exists for this Task. You can not delete this Task.")) @@ -216,12 +227,12 @@ def add_node(): @frappe.whitelist() def add_multiple_tasks(data, parent): - data = json.loads(data)['tasks'] - tasks = data.split('\n') - new_doc = {'doctype': 'Task', 'parent_task': parent} - new_doc['project'] = frappe.db.get_value('Task', {"name": parent}, 'project') + data = json.loads(data) + new_doc = {'doctype': 'Task', 'parent_task': parent if parent!="All Tasks" else ""} + new_doc['project'] = frappe.db.get_value('Task', {"name": parent}, 'project') or "" - for d in tasks: - new_doc['subject'] = d + for d in data: + if not d.get("subject"): continue + new_doc['subject'] = d.get("subject") new_task = frappe.get_doc(new_doc) new_task.insert() diff --git a/erpnext/projects/doctype/task/task_tree.js b/erpnext/projects/doctype/task/task_tree.js index 3ff00f6fc5..d1d872f28a 100644 --- a/erpnext/projects/doctype/task/task_tree.js +++ b/erpnext/projects/doctype/task/task_tree.js @@ -44,23 +44,39 @@ frappe.treeview_settings['Task'] = { return node.expandable; }, click: function(node) { - var d = new frappe.ui.Dialog({ - 'fields': [ - {'fieldname': 'tasks', 'label': 'Tasks', 'fieldtype': 'Text'}, + this.data = []; + const dialog = new frappe.ui.Dialog({ + title: __("Add Multiple Tasks"), + fields: [ + { + fieldname: "multiple_tasks", fieldtype: "Table", + in_place_edit: true, data: this.data, + get_data: () => { + return this.data; + }, + fields: [{ + fieldtype:'Data', + fieldname:"subject", + in_list_view: 1, + reqd: 1, + label: __("Subject") + }] + }, ], primary_action: function() { - d.hide(); + dialog.hide(); return frappe.call({ method: "erpnext.projects.doctype.task.task.add_multiple_tasks", args: { - data: d.get_values(), + data: dialog.get_values()["multiple_tasks"], parent: node.data.value }, callback: function() { } }); - } + }, + primary_action_label: __('Create') }); - d.show(); + dialog.show(); } } ],