Split a given Issue into 2

Bugs encountered:
Once the dialog pops up, filling in the subject and pressing RETURN
doesn't work. It fails to read the subject. The primary button needs to
be clicked on. This is a generic issue, not related to this PR

Behaviour:
-[x] Add button on communication to split thread
-[x] Popup asks for new subject
-[x] Copy "Customer", "Sender" and other relevant fields to this issue
-[x] Move thread and replies to new issue

fixes #14600
This commit is contained in:
Ameya Shenoy 2018-07-16 17:08:30 +05:30
parent 656016b4e0
commit 769054e00d
No known key found for this signature in database
GPG Key ID: AC016A555657D0A3
2 changed files with 52 additions and 2 deletions

View File

@ -1,9 +1,9 @@
frappe.ui.form.on("Issue", {
"onload": function(frm) {
onload: function(frm) {
frm.email_field = "raised_by";
},
"refresh": function(frm) {
refresh: function(frm) {
if(frm.doc.status!=="Closed") {
frm.add_custom_button(__("Close"), function() {
frm.set_value("status", "Closed");
@ -33,5 +33,39 @@ frappe.ui.form.on("Issue", {
frappe.set_route('Form', 'Help Article', doc.name);
});
}
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: 5px">
${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")){
frm.timeline.wrapper.on('click', '.btn-split-issue', (e) => {
var dialog = new frappe.ui.Dialog({
title: __("Split Issue"),
fields: [
{fieldname: 'subject', fieldtype: 'Data', reqd:1, label: __('Subject'), description: __('All communications including and above this shall be moved into the new Issue')}
],
primary_action_label: __("Split"),
primary_action: function() {
frm.call("split_issue", {
subject: dialog.fields_dict.subject.value,
communication_id: e.currentTarget.closest(".timeline-item").getAttribute("data-name")
}, (r) => {
let url = window.location.href
let arr = url.split("/");
let result = arr[0] + "//" + arr[2]
frappe.msgprint(`New issue created: <a href="${result}/desk#Form/Issue/${r.message}">${r.message}</a>`)
frm.reload_doc();
dialog.hide();
});
}
});
dialog.show()
})
frm.timeline.wrapper.data("split-issue-event-attached", true)
}
}
}
});

View File

@ -81,6 +81,22 @@ class Issue(Document):
self.db_set("description", "")
def split_issue(self, subject, communication_id):
# Bug: Pressing enter doesn't send subject
from copy import deepcopy
replicated_issue = deepcopy(self)
replicated_issue.subject = subject
frappe.get_doc(replicated_issue).insert()
# Replicate linked Communications
# todo get all communications in timeline before this, and modify them to append them to new doc
comm_to_split_from = frappe.get_doc("Communication", communication_id)
communications = frappe.get_all("Communication", filters={"reference_name": 'ISS-00001', "reference_doctype": "Issue", "creation": ('>=', comm_to_split_from.creation)})
for communication in communications:
doc = frappe.get_doc("Communication", communication.name)
doc.reference_name = replicated_issue.name
doc.save()
return replicated_issue.name
def get_list_context(context=None):
return {
"title": _("Issues"),