feat(issue): Create tasks from issues

This commit is contained in:
Rohan Bansal 2019-02-14 13:20:50 +05:30
parent 2221151132
commit 5327d0253d
2 changed files with 30 additions and 1 deletions

9
erpnext/support/doctype/issue/issue.js Normal file → Executable file
View File

@ -9,6 +9,13 @@ frappe.ui.form.on("Issue", {
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 @@ frappe.ui.form.on("Issue", {
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")){

22
erpnext/support/doctype/issue/issue.py Normal file → Executable file
View File

@ -7,11 +7,13 @@ import json
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 @@ class Issue(Document):
doc.save(ignore_permissions=True)
return replicated_issue.name
def get_list_context(context=None):
return {
"title": _("Issues"),
@ -107,6 +110,7 @@ def get_list_context(context=None):
'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 @@ def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20, ord
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 @@ def set_multiple_status(names, status):
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 has_website_permission(doc, ptype, user, verbose=False):
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