feat: Supplier Email Preview in RFQ
This commit is contained in:
parent
7b2f141d0d
commit
bd36f2b94d
@ -22,8 +22,6 @@ frappe.ui.form.on("Request for Quotation",{
|
|||||||
},
|
},
|
||||||
|
|
||||||
onload: function(frm) {
|
onload: function(frm) {
|
||||||
frm.add_fetch('email_template', 'response', 'message_for_supplier');
|
|
||||||
|
|
||||||
if(!frm.doc.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"))
|
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()
|
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"));
|
||||||
// Get items from Opportunity
|
// Get items from Opportunity
|
||||||
this.frm.add_custom_button(__('Opportunity'),
|
this.frm.add_custom_button(__('Opportunity'),
|
||||||
function() {
|
function() {
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
|
method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"actions": "",
|
"actions": [],
|
||||||
"allow_import": 1,
|
"allow_import": 1,
|
||||||
"autoname": "naming_series:",
|
"autoname": "naming_series:",
|
||||||
"creation": "2016-02-25 01:24:07.224790",
|
"creation": "2016-02-25 01:24:07.224790",
|
||||||
@ -19,7 +19,12 @@
|
|||||||
"items",
|
"items",
|
||||||
"link_to_mrs",
|
"link_to_mrs",
|
||||||
"supplier_response_section",
|
"supplier_response_section",
|
||||||
|
"salutation",
|
||||||
"email_template",
|
"email_template",
|
||||||
|
"col_break_email_1",
|
||||||
|
"subject",
|
||||||
|
"preview",
|
||||||
|
"sec_break_email_2",
|
||||||
"message_for_supplier",
|
"message_for_supplier",
|
||||||
"terms_section_break",
|
"terms_section_break",
|
||||||
"tc_name",
|
"tc_name",
|
||||||
@ -126,8 +131,10 @@
|
|||||||
"label": "Link to Material Requests"
|
"label": "Link to Material Requests"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"depends_on": "eval:!doc.__islocal",
|
||||||
"fieldname": "supplier_response_section",
|
"fieldname": "supplier_response_section",
|
||||||
"fieldtype": "Section Break"
|
"fieldtype": "Section Break",
|
||||||
|
"label": "Email Details"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "email_template",
|
"fieldname": "email_template",
|
||||||
@ -137,6 +144,8 @@
|
|||||||
"print_hide": 1
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"fetch_from": "email_template.response",
|
||||||
|
"fetch_if_empty": 1,
|
||||||
"fieldname": "message_for_supplier",
|
"fieldname": "message_for_supplier",
|
||||||
"fieldtype": "Text Editor",
|
"fieldtype": "Text Editor",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -230,12 +239,41 @@
|
|||||||
"options": "Request for Quotation",
|
"options": "Request for Quotation",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 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",
|
"icon": "fa fa-shopping-cart",
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-06-25 14:37:21.140194",
|
"modified": "2020-09-28 14:25:31.357817",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Buying",
|
"module": "Buying",
|
||||||
"name": "Request for Quotation",
|
"name": "Request for Quotation",
|
||||||
|
@ -62,6 +62,31 @@ class RequestforQuotation(BuyingController):
|
|||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
frappe.db.set(self, 'status', 'Cancelled')
|
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):
|
def send_to_supplier(self):
|
||||||
for rfq_supplier in self.suppliers:
|
for rfq_supplier in self.suppliers:
|
||||||
if rfq_supplier.send_email:
|
if rfq_supplier.send_email:
|
||||||
|
@ -1,11 +1,24 @@
|
|||||||
<h3>{{_("Request for Quotation")}}</h3>
|
<h4>{{_("Request for Quotation")}}</h4>
|
||||||
|
<p>{{_("Dear")}} {{ salutation if salutation else ''}} {{ supplier }},</p>
|
||||||
<p>{{ message }}</p>
|
<p>{{ message }}</p>
|
||||||
{% if update_password_link %}
|
|
||||||
<p>{{_("Please click on the following link to set your new password")}}:</p>
|
|
||||||
<p><a href="{{ update_password_link }}">{{ update_password_link }}</a></p>
|
|
||||||
{% else %}
|
|
||||||
<p>{{_("The request for quotation can be accessed by clicking on the following link")}}:</p>
|
<p>{{_("The request for quotation can be accessed by clicking on the following link")}}:</p>
|
||||||
<p><a href="{{ rfq_link }}">Submit your Quotation</a></p>
|
<p>
|
||||||
{% endif %}
|
<button style="border: 1px solid #15c; padding: 6px; border-radius: 5px; background-color: white;">
|
||||||
<p>{{_("Thank you")}},<br>
|
<a href="{{ rfq_link }}" style="color: #15c" target="_blank">Submit your Quotation</a>
|
||||||
{{ user_fullname }}</p>
|
</button>
|
||||||
|
</p><br>
|
||||||
|
|
||||||
|
<p>{{_("Regards")}},<br>
|
||||||
|
{{ user_fullname }}</p><br>
|
||||||
|
|
||||||
|
{% if update_password_link %}
|
||||||
|
<div>
|
||||||
|
<p>{{_("Please click on the following link to set your new password")}}:</p>
|
||||||
|
<p>
|
||||||
|
<button style="border: 1px solid #15c; padding: 4px; border-radius: 5px; background-color: white;">
|
||||||
|
<a href="{{ update_password_link }}" style="color: #15c; font-size: 12px;" target="_blank">{{_("Update Password") }}</a>
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
Loading…
x
Reference in New Issue
Block a user