From 2373cb7f1fa07a5b364e3a91fb83b519f84d50de Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 3 Mar 2017 10:22:32 +0530 Subject: [PATCH] [enhancement] auto feedback request should be triggered only once --- .../doctype/communication/communication.json | 35 +---------- .../feedback_request/feedback_request.json | 62 ++++++++++++++----- .../feedback_request/feedback_request_list.js | 24 +++---- .../feedback_trigger/feedback_trigger.py | 35 ++++++----- .../feedback_trigger/test_feedback_trigger.py | 9 ++- frappe/desk/form/load.py | 2 +- frappe/patches.txt | 1 + frappe/patches/v7_2/update_communications.py | 18 ++++++ frappe/public/js/frappe/feedback.js | 1 - .../public/js/frappe/form/footer/timeline.js | 8 +-- .../emails/feedback_request_url.html | 10 +-- frappe/www/feedback.html | 9 ++- frappe/www/feedback.py | 11 +++- 13 files changed, 133 insertions(+), 92 deletions(-) create mode 100644 frappe/patches/v7_2/update_communications.py diff --git a/frappe/core/doctype/communication/communication.json b/frappe/core/doctype/communication/communication.json index fe62e2cf6e..c819ed961e 100644 --- a/frappe/core/doctype/communication/communication.json +++ b/frappe/core/doctype/communication/communication.json @@ -1254,7 +1254,7 @@ { "allow_on_submit": 0, "bold": 0, - "collapsible": 0, + "collapsible": 1, "columns": 0, "fieldname": "feedback_section", "fieldtype": "Section Break", @@ -1280,35 +1280,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "feedback", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Feedback", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -1330,7 +1301,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1379,7 +1350,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-01 00:24:58.426373", + "modified": "2017-03-02 15:06:10.193120", "modified_by": "Administrator", "module": "Core", "name": "Communication", diff --git a/frappe/core/doctype/feedback_request/feedback_request.json b/frappe/core/doctype/feedback_request/feedback_request.json index 581478c916..2987116b0e 100644 --- a/frappe/core/doctype/feedback_request/feedback_request.json +++ b/frappe/core/doctype/feedback_request/feedback_request.json @@ -41,6 +41,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "is_feedback_submitted", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Feedback Submitted", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -74,7 +103,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "is_feedback_submitted", + "description": "Is Feedback request triggered manually ?", + "fieldname": "is_manual", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -83,7 +113,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Feedback Submitted", + "label": "Is Manual", "length": 0, "no_copy": 0, "permlevel": 0, @@ -95,7 +125,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 0, + "set_only_once": 1, "unique": 0 }, { @@ -160,7 +190,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 2, "fieldname": "reference_doctype", "fieldtype": "Data", "hidden": 0, @@ -189,7 +219,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 2, "fieldname": "reference_name", "fieldtype": "Data", "hidden": 0, @@ -306,17 +336,17 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, - "fieldname": "feedback_rating", - "fieldtype": "HTML", - "hidden": 0, + "columns": 2, + "fieldname": "rating", + "fieldtype": "Data", + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, - "label": "Feedback Rating", + "label": "Rating", "length": 0, "no_copy": 0, "permlevel": 0, @@ -336,16 +366,16 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "rating", - "fieldtype": "Int", - "hidden": 1, + "fieldname": "feedback_rating", + "fieldtype": "HTML", + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Rating", + "label": "Feedback Rating", "length": 0, "no_copy": 0, "permlevel": 0, @@ -400,7 +430,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-14 18:48:05.482244", + "modified": "2017-03-03 08:11:09.718589", "modified_by": "Administrator", "module": "Core", "name": "Feedback Request", diff --git a/frappe/core/doctype/feedback_request/feedback_request_list.js b/frappe/core/doctype/feedback_request/feedback_request_list.js index d3971d6749..17f7b09cd4 100644 --- a/frappe/core/doctype/feedback_request/feedback_request_list.js +++ b/frappe/core/doctype/feedback_request/feedback_request_list.js @@ -1,14 +1,16 @@ frappe.listview_settings['Feedback Request'] = { - add_fields: ["rating"], - get_indicator: function(doc) { - if(doc.rating == 0) { - return [__("Not Rated"), "darkgrey", "rating,=,0"]; - } else if (doc.rating<=2) { - return ["", "red", "rating,in,1,2"]; - } else if (doc.rating>=3 && doc.rating<=4) { - return ["", "orange", "rating,in,3,4"]; - } else if (doc.rating==5) { - return ["", "green", "rating,=,5"]; - } + colwidths: { + subject: 2, }, + column_render: { + rating: function(doc) { + html = "" + for (var i = 0; i < 5; i++) { + html += repl("", + {color: i b.creation ? -1 : 1 }), function(i, c) { - if(c.content || c.feedback) { + if(c.content) { c.frm = me.frm; me.render_timeline_item(c); } @@ -264,10 +264,10 @@ frappe.ui.form.Timeline = Class.extend({ c.original_content = c.content; c.content = frappe.utils.toggle_blockquote(c.content); } else if (c.communication_type==="Feedback") { - c.content = frappe.utils.strip_original_content(c.feedback); + c.content = frappe.utils.strip_original_content(c.content); - c.original_content = c.feedback; - c.content = frappe.utils.toggle_blockquote(c.feedback); + c.original_content = c.content; + c.content = frappe.utils.toggle_blockquote(c.content); } if(!frappe.utils.is_html(c.content)) { diff --git a/frappe/templates/emails/feedback_request_url.html b/frappe/templates/emails/feedback_request_url.html index 00485d3376..e2f25927aa 100644 --- a/frappe/templates/emails/feedback_request_url.html +++ b/frappe/templates/emails/feedback_request_url.html @@ -1,8 +1,8 @@

{{ _("Please select a rating") }}

- 1 - 2 - 3 - 4 - 5 + + + + +
diff --git a/frappe/www/feedback.html b/frappe/www/feedback.html index 01a37dbd63..e23f3347cc 100644 --- a/frappe/www/feedback.html +++ b/frappe/www/feedback.html @@ -16,6 +16,8 @@
+

{{ _("Full Name") }}

+

{{ _("Detailed feedback") }}

@@ -53,7 +55,6 @@ this.rating = get_url_arg("rating") || 0; // set ratings - console.log(this.rating) this.set_ratings_icon(this.rating) this.bind_events(); @@ -81,6 +82,9 @@ if(!$('.star-icon.fa-star').length) { frappe.msgprint(__("Please give a rating.")); return; + } else if(!$('.fullname').val().length){ + frappe.msgprint(__("Please give a fullname.")); + return; } else if(!$('.feedback-text').val().length){ frappe.msgprint(__("Please give a detailed feebdack.")); return; @@ -94,7 +98,8 @@ reference_name: me.reference_name, reference_doctype: me.reference_doctype, feedback: $('.feedback-text').val(), - rating: $('.star-icon.fa-star').length + rating: $('.star-icon.fa-star').length, + fullname: $('.fullname').val() }, callback: function(r) { if(r.message) { diff --git a/frappe/www/feedback.py b/frappe/www/feedback.py index 7e75f8f0ac..70d6c0efae 100644 --- a/frappe/www/feedback.py +++ b/frappe/www/feedback.py @@ -6,6 +6,10 @@ no_cache = True def get_context(context): reference_doctype = frappe.form_dict.get("reference_doctype") reference_name = frappe.form_dict.get("reference_name") + + if not all([reference_name, reference_doctype]): + return {} + communications = frappe.get_all("Communication", filters={ "reference_doctype": reference_doctype, "reference_name": reference_name, @@ -20,7 +24,7 @@ def get_context(context): } @frappe.whitelist(allow_guest=True) -def accept(key, sender, reference_doctype, reference_name, feedback, rating): +def accept(key, sender, reference_doctype, reference_name, feedback, rating, fullname): """ save the feedback in communication """ if not reference_doctype and not reference_name: frappe.throw("Invalid Reference Doctype, Reference Name") @@ -36,13 +40,14 @@ def accept(key, sender, reference_doctype, reference_name, feedback, rating): communication = frappe.get_doc({ "rating": rating, - "sender": sender, "status": "Closed", - "feedback": feedback, + "content": feedback, "doctype": "Communication", + "sender": sender or "Guest", "sent_or_received": "Received", "communication_type": "Feedback", "reference_name": reference_name, + "sender_full_name": fullname or "", "feedback_request": feedback_request, "reference_doctype": reference_doctype, "subject": "Feedback for {0} {1}".format(reference_doctype, reference_name),