diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index 4a937f7f0d3..46327574f70 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -22,8 +22,6 @@ frappe.ui.form.on("Request for Quotation",{ }, onload: function(frm) { - frm.add_fetch('email_template', 'response', 'message_for_supplier'); - if(!frm.doc.message_for_supplier) { frm.set_value("message_for_supplier", __("Please supply the specified items at the best possible rates")) } @@ -194,6 +192,56 @@ frappe.ui.form.on("Request for Quotation",{ }); }); dialog.show() + }, + + preview: (frm) => { + let dialog = new frappe.ui.Dialog({ + title: __('Preview Email'), + fields: [ + { + label: __('Supplier'), + fieldtype: 'Select', + fieldname: 'supplier', + options: frm.doc.suppliers.map(row => row.supplier), + reqd: 1 + }, + { + fieldtype: 'Column Break', + fieldname: 'col_break_1', + }, + { + label: __('Subject'), + fieldtype: 'Data', + fieldname: 'subject', + read_only: 1 + }, + { + fieldtype: 'Section Break', + fieldname: 'sec_break_1', + hide_border: 1 + }, + { + label: __('Email'), + fieldtype: 'HTML', + fieldname: 'email_preview', + }, + ] + }); + + dialog.fields_dict['supplier'].df.onchange = () => { + var args = { + 'supplier' : dialog.get_value('supplier'), + 'salutation' : frm.doc.salutation || null, + 'message' : frm.doc.message_for_supplier + } + frm.call('get_supplier_email_preview', args).then(result => { + dialog.fields_dict.email_preview.$wrapper.empty(); + dialog.fields_dict.email_preview.$wrapper.append(result.message); + }); + + } + dialog.set_value("subject", frm.doc.subject); + dialog.show(); } }) @@ -276,7 +324,7 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e }) }, __("Get items from")); // Get items from Opportunity - this.frm.add_custom_button(__('Opportunity'), + this.frm.add_custom_button(__('Opportunity'), function() { erpnext.utils.map_current_doc({ method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json index 5cd8e6f4fa8..715556c2044 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -1,5 +1,5 @@ { - "actions": "", + "actions": [], "allow_import": 1, "autoname": "naming_series:", "creation": "2016-02-25 01:24:07.224790", @@ -19,7 +19,12 @@ "items", "link_to_mrs", "supplier_response_section", + "salutation", "email_template", + "col_break_email_1", + "subject", + "preview", + "sec_break_email_2", "message_for_supplier", "terms_section_break", "tc_name", @@ -126,8 +131,10 @@ "label": "Link to Material Requests" }, { + "depends_on": "eval:!doc.__islocal", "fieldname": "supplier_response_section", - "fieldtype": "Section Break" + "fieldtype": "Section Break", + "label": "Email Details" }, { "fieldname": "email_template", @@ -137,6 +144,8 @@ "print_hide": 1 }, { + "fetch_from": "email_template.response", + "fetch_if_empty": 1, "fieldname": "message_for_supplier", "fieldtype": "Text Editor", "in_list_view": 1, @@ -230,12 +239,41 @@ "options": "Request for Quotation", "print_hide": 1, "read_only": 1 + }, + { + "fetch_from": "email_template.subject", + "fetch_if_empty": 1, + "fieldname": "subject", + "fieldtype": "Data", + "label": "Subject" + }, + { + "description": "Select a greeting for the receiver. E.g. Mr., Ms., etc.", + "fieldname": "salutation", + "fieldtype": "Link", + "label": "Salutation", + "options": "Salutation" + }, + { + "fieldname": "col_break_email_1", + "fieldtype": "Column Break" + }, + { + "fieldname": "preview", + "fieldtype": "Button", + "label": "Preview Email" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "sec_break_email_2", + "fieldtype": "Section Break", + "hide_border": 1 } ], "icon": "fa fa-shopping-cart", "is_submittable": 1, "links": [], - "modified": "2020-06-25 14:37:21.140194", + "modified": "2020-09-28 14:25:31.357817", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index b54a585b97f..c3f69d7b051 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -62,6 +62,31 @@ class RequestforQuotation(BuyingController): def on_cancel(self): frappe.db.set(self, 'status', 'Cancelled') + def get_supplier_email_preview(self, args): + rfq_suppliers = list(filter(lambda row: row.supplier == args.get('supplier'), self.suppliers)) + rfq_supplier = rfq_suppliers[0].as_dict() + + update_password_link = self.update_supplier_contact(rfq_supplier, self.get_link()) + + full_name = get_user_fullname(frappe.session['user']) + if full_name == "Guest": + full_name = "Administrator" + + args = { + 'update_password_link': update_password_link, + 'message': frappe.render_template(self.message_for_supplier, args), + 'rfq_link': self.get_link(), + 'user_fullname': full_name, + 'supplier': rfq_supplier.supplier_name, + 'salutation': args.get('salutation') + } + args.update(self.as_dict()) + + subject = _("Request for Quotation") + template = "templates/emails/request_for_quotation.html" + message = frappe.get_template(template).render(args) + return message + def send_to_supplier(self): for rfq_supplier in self.suppliers: if rfq_supplier.send_email: diff --git a/erpnext/templates/emails/request_for_quotation.html b/erpnext/templates/emails/request_for_quotation.html index b4dfb88c675..414dd0f7423 100644 --- a/erpnext/templates/emails/request_for_quotation.html +++ b/erpnext/templates/emails/request_for_quotation.html @@ -1,11 +1,24 @@ -

{{_("Request for Quotation")}}

+

{{_("Request for Quotation")}}

+

{{_("Dear")}} {{ salutation if salutation else ''}} {{ supplier }},

{{ message }}

-{% if update_password_link %} -

{{_("Please click on the following link to set your new password")}}:

-

{{ update_password_link }}

-{% else %} +

{{_("The request for quotation can be accessed by clicking on the following link")}}:

-

Submit your Quotation

-{% endif %} -

{{_("Thank you")}},
-{{ user_fullname }}

+

+ +


+ +

{{_("Regards")}},
+{{ user_fullname }}


+ +{% if update_password_link %} +
+

{{_("Please click on the following link to set your new password")}}:

+

+ +

+
+{% endif %} \ No newline at end of file