feat(issue): Create tasks from issues
diff --git a/erpnext/support/doctype/issue/issue.js b/erpnext/support/doctype/issue/issue.js
old mode 100644
new mode 100755
index d0a9bf3..05c9130
--- a/erpnext/support/doctype/issue/issue.js
+++ b/erpnext/support/doctype/issue/issue.js
@@ -9,6 +9,13 @@
frm.set_value("status", "Closed");
frm.save();
});
+
+ frm.add_custom_button(__("Task"), function () {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.support.doctype.issue.issue.make_task",
+ frm: frm
+ });
+ }, __("Make"));
} else {
frm.add_custom_button(__("Reopen"), function() {
frm.set_value("status", "Open");
@@ -37,7 +44,7 @@
if (!frm.timeline.wrapper.find('.btn-split-issue').length) {
let split_issue = __("Split Issue")
$(`<button class="btn btn-xs btn-link btn-add-to-kb text-muted hidden-xs btn-split-issue pull-right" style="display:inline-block; margin-right: 15px">
- ${split_issue}
+ ${split_issue}
</button>`)
.appendTo(frm.timeline.wrapper.find('.comment-header .asset-details:not([data-communication-type="Comment"])'))
if (!frm.timeline.wrapper.data("split-issue-event-attached")){
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
old mode 100644
new mode 100755
index 0b5eb53..3e498c8
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -7,11 +7,13 @@
from frappe import _
from frappe.model.document import Document
+from frappe.model.mapper import get_mapped_doc
from frappe.utils import now
from frappe.utils.user import is_website_user
sender_field = "raised_by"
+
class Issue(Document):
def get_feed(self):
return "{0}: {1}".format(_(self.status), self.subject)
@@ -97,6 +99,7 @@
doc.save(ignore_permissions=True)
return replicated_issue.name
+
def get_list_context(context=None):
return {
"title": _("Issues"),
@@ -107,6 +110,7 @@
'no_breadcrumbs': True
}
+
def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by=None):
from frappe.www.list import get_list
user = frappe.session.user
@@ -124,12 +128,14 @@
return get_list(doctype, txt, filters, limit_start, limit_page_length, ignore_permissions=ignore_permissions)
+
@frappe.whitelist()
def set_status(name, status):
st = frappe.get_doc("Issue", name)
st.status = status
st.save()
+
def auto_close_tickets():
""" auto close the replied support tickets after 7 days """
auto_close_after_days = frappe.db.get_value("Support Settings", "Support Settings", "close_issue_after_days") or 7
@@ -150,6 +156,7 @@
for name in names:
set_status(name, status)
+
def has_website_permission(doc, ptype, user, verbose=False):
from erpnext.controllers.website_list_for_contact import has_website_permission
permission_based_on_customer = has_website_permission(doc, ptype, user, verbose)
@@ -160,3 +167,18 @@
def update_issue(contact, method):
"""Called when Contact is deleted"""
frappe.db.sql("""UPDATE `tabIssue` set contact='' where contact=%s""", contact.name)
+
+
+@frappe.whitelist()
+def make_task(source_name, target_doc=None):
+ def set_missing_values(source, target):
+ if not target.project:
+ target.project = frappe.db.get_value("Project", {"customer": source.customer})
+
+ doclist = get_mapped_doc("Issue", source_name, {
+ "Issue": {
+ "doctype": "Task"
+ }
+ }, target_doc, set_missing_values)
+
+ return doclist