[minor] fixes in feedback trigger, and feedback web pageversion-14
@@ -70,7 +70,10 @@ def send_feedback_request(reference_doctype, reference_name, trigger="Manual", d | |||||
def get_feedback_request_details(reference_doctype, reference_name, trigger="Manual", request=None): | def get_feedback_request_details(reference_doctype, reference_name, trigger="Manual", request=None): | ||||
feedback_url = "" | feedback_url = "" | ||||
if not trigger and not request and not frappe.db.get_value("Feedback Trigger", { "document_type": reference_doctype }): | |||||
if not frappe.db.get_value(reference_doctype, reference_name): | |||||
# reference document is either deleted or renamed | |||||
return | |||||
elif not trigger and not request and not frappe.db.get_value("Feedback Trigger", { "document_type": reference_doctype }): | |||||
return | return | ||||
elif not trigger and request: | elif not trigger and request: | ||||
trigger = frappe.db.get_value("Feedback Request", request, "feedback_trigger") | trigger = frappe.db.get_value("Feedback Request", request, "feedback_trigger") | ||||
@@ -81,8 +84,8 @@ def get_feedback_request_details(reference_doctype, reference_name, trigger="Man | |||||
return | return | ||||
feedback_trigger = frappe.get_doc("Feedback Trigger", trigger) | feedback_trigger = frappe.get_doc("Feedback Trigger", trigger) | ||||
doc = frappe.get_doc(reference_doctype, reference_name) | |||||
doc = frappe.get_doc(reference_doctype, reference_name) | |||||
context = get_context(doc) | context = get_context(doc) | ||||
recipients = doc.get(feedback_trigger.email_fieldname, None) | recipients = doc.get(feedback_trigger.email_fieldname, None) | ||||
@@ -2,46 +2,53 @@ | |||||
{% block title %}{{ _("Feedback") }}{% endblock %} | {% block title %}{{ _("Feedback") }}{% endblock %} | ||||
{% block page_content %} | |||||
<div class="feedback"> | |||||
<p class='lead' id="feedback-msg"></p> | |||||
<div> | |||||
{{ _("Your rating: ") }} | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=1></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=2></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=3></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=4></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=5></i> | |||||
</div> | |||||
<div style='max-width: 500px;'> | |||||
<p>{{ _("Full Name") }}</p> | |||||
<input class="form-control fullname" type="text" placeholder="Your Full Name"> | |||||
<p>{{ _("Detailed feedback") }}</p> | |||||
<textarea class='form-control feedback-text' style='min-height: 300px;'></textarea> | |||||
</div> | |||||
<p><button class='btn btn-primary btn-sm btn-submit'>{{ _("Submit") }}</button></p> | |||||
{% if comment_list -%} | |||||
<div class="comments"> | |||||
<br><br> | |||||
<h3>{{ _("Communication") }}</h3> | |||||
{% include 'templates/includes/comments/comments.html' %} | |||||
</div> | |||||
{% endif %} | |||||
</div> | |||||
<div class="feedback-result" style="display: none"> | |||||
{% macro feedback_result(is_valid_request, subject, message='') %} | |||||
<div class="feedback-result" style="{{ 'display: none' if is_valid_request else '' }}"> | |||||
<div class='page-card'> | <div class='page-card'> | ||||
<div class='page-card-head'> | <div class='page-card-head'> | ||||
<span class='indicator darkgrey'>{{_("Thank You !!")}}</span> | |||||
<span class='indicator darkgrey'>{{ _(subject) }}</span> | |||||
</div> | </div> | ||||
<p id="feedback-result"></p> | |||||
<p id="feedback-result">{{ _(message) }}</p> | |||||
<div><a href='/' class='btn btn-primary btn-sm'>{{ _("Home") }}</a></div> | <div><a href='/' class='btn btn-primary btn-sm'>{{ _("Home") }}</a></div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
{% endmacro %} | |||||
{% block page_content %} | |||||
{% if is_valid_request %} | |||||
<div class="feedback"> | |||||
<p class='lead' id="feedback-msg"></p> | |||||
<div> | |||||
{{ _("Your rating: ") }} | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=1></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=2></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=3></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=4></i> | |||||
<i class='fa fa-fw fa-star-o star-icon' data-idx=5></i> | |||||
</div> | |||||
<div style='max-width: 500px;'> | |||||
<p>{{ _("Full Name") }}</p> | |||||
<input class="form-control fullname" type="text" placeholder="Your Full Name"> | |||||
<p>{{ _("Detailed feedback") }}</p> | |||||
<textarea class='form-control feedback-text' style='min-height: 300px;'></textarea> | |||||
</div> | |||||
<p><button class='btn btn-primary btn-sm btn-submit'>{{ _("Submit") }}</button></p> | |||||
{% if comment_list -%} | |||||
<div class="comments"> | |||||
<br><br> | |||||
<h3>{{ _("Communication") }}</h3> | |||||
{% include 'templates/includes/comments/comments.html' %} | |||||
</div> | |||||
{% endif %} | |||||
</div> | |||||
{{ feedback_result(is_valid_request, "Thank You") }} | |||||
{% else %} | |||||
{{ feedback_result(is_valid_request, "Invalid Input", error_message) }} | |||||
{% endif %} | |||||
<script> | <script> | ||||
window.feedback = { | window.feedback = { | ||||
@@ -7,8 +7,13 @@ def get_context(context): | |||||
reference_doctype = frappe.form_dict.get("reference_doctype") | reference_doctype = frappe.form_dict.get("reference_doctype") | ||||
reference_name = frappe.form_dict.get("reference_name") | reference_name = frappe.form_dict.get("reference_name") | ||||
if not all([reference_name, reference_doctype]): | |||||
return {} | |||||
if not all([reference_name, reference_doctype]) or \ | |||||
not frappe.db.get_value(reference_doctype, reference_name): | |||||
return { | |||||
"is_valid_request": False, | |||||
"error_message": "Invalid reference doctype and reference name" | |||||
} | |||||
communications = frappe.get_all("Communication", filters={ | communications = frappe.get_all("Communication", filters={ | ||||
"reference_doctype": reference_doctype, | "reference_doctype": reference_doctype, | ||||
@@ -20,14 +25,17 @@ def get_context(context): | |||||
"reference_doctype": reference_doctype, | "reference_doctype": reference_doctype, | ||||
"reference_name": reference_name, | "reference_name": reference_name, | ||||
"comment_list": communications, | "comment_list": communications, | ||||
"is_communication": True | |||||
"is_communication": True, | |||||
"is_valid_request": True | |||||
} | } | ||||
@frappe.whitelist(allow_guest=True) | @frappe.whitelist(allow_guest=True) | ||||
def accept(key, sender, reference_doctype, reference_name, feedback, rating, fullname): | def accept(key, sender, reference_doctype, reference_name, feedback, rating, fullname): | ||||
""" save the feedback in communication """ | """ save the feedback in communication """ | ||||
if not reference_doctype and not reference_name: | |||||
frappe.throw("Invalid Reference Doctype, Reference Name") | |||||
if not reference_doctype and not reference_name or \ | |||||
not frappe.db.get_value(reference_doctype, reference_name): | |||||
frappe.throw("Invalid reference doctype and reference name") | |||||
if not rating or not feedback: | if not rating or not feedback: | ||||
frappe.throw("Please give both Rating and Detailed Feedback") | frappe.throw("Please give both Rating and Detailed Feedback") | ||||