diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index 498b8a08c35a..b8030271f9cd 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -179,6 +179,17 @@ erpnext.projects.ProjectController = class ProjectController extends crm.QuickCo } // Task Buttons + me.frm.add_custom_button(__('Create Task'), ()=> { + erpnext.projects.create_task() + }, __("Tasks")); + + this.frm.add_custom_button(__('Create Template Tasks'), () => { + frappe.call({ + method: 'erpnext.vehicles.page.workshop_cp.workshop_cp.create_template_tasks', + args: { project: this.frm.doc.name }, + }); + }, __("Tasks")); + if (frappe.model.can_read("Task")) { me.frm.add_custom_button(__("Gantt Chart"), function () { frappe.route_options = { diff --git a/erpnext/public/js/erpnext.bundle.js b/erpnext/public/js/erpnext.bundle.js index b66818fae908..9f3dd58d2bf5 100644 --- a/erpnext/public/js/erpnext.bundle.js +++ b/erpnext/public/js/erpnext.bundle.js @@ -14,6 +14,7 @@ import "./controllers/taxes_and_totals.js" import "./controllers/transaction.js" import "./controllers/applies_to_common.js" import "./utils/manufacturing.js" +import "./utils/projects.js" // Item Selector import "./templates/item_selector.html" diff --git a/erpnext/public/js/utils/projects.js b/erpnext/public/js/utils/projects.js new file mode 100644 index 000000000000..026d6a7a1f20 --- /dev/null +++ b/erpnext/public/js/utils/projects.js @@ -0,0 +1,13 @@ +frappe.provide("erpnext.projects"); + +erpnext.projects.create_task = function(project, subject, standard_time, project_template) { + let task_doc = frappe.new_doc("Task"); + task_doc.project = project; + task_doc.subject = subject; + task_doc.expected_time = flt(standard_time); + task_doc.project_template = project_template; + + task_doc.save(null, () => { + frappe.msgprint(_("{0} created").format(frappe.get_link(task_doc)), { indicator: "green" }); + }); +};