From 90169a39bbc787fd4774ce5b69f7dfeabc8de715 Mon Sep 17 00:00:00 2001 From: Pugazhendhi Velu Date: Sun, 1 Mar 2026 18:21:09 +0000 Subject: [PATCH] fix: handle html email template separately in RFQ to avoid jinja context error (cherry picked from commit 49d363b1748640e3addb23d4ee5a186210cb4d62) # Conflicts: # erpnext/buying/doctype/request_for_quotation/request_for_quotation.json --- .../request_for_quotation.js | 15 ++++++++--- .../request_for_quotation.json | 27 +++++++++++++++++-- .../request_for_quotation.py | 21 ++++++++++++--- 3 files changed, 53 insertions(+), 10 deletions(-) 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 6420f034df7..d9d4d7ea1cc 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -250,10 +250,17 @@ frappe.ui.form.on("Request for Quotation", { "subject", ]) .then((r) => { - frm.set_value( - "message_for_supplier", - r.message.use_html ? r.message.response_html : r.message.response - ); + if (r.message.use_html) { + frm.set_value({ + mfs_html: r.message.response_html, + use_html: 1, + }); + } else { + frm.set_value({ + message_for_supplier: r.message.response, + use_html: 0, + }); + } frm.set_value("subject", r.message.subject); }); } 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 c5e72fb8e20..3fa3511dfb4 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -31,7 +31,9 @@ "send_document_print", "sec_break_email_2", "subject", + "use_html", "message_for_supplier", + "mfs_html", "terms_section_break", "incoterm", "named_place", @@ -142,12 +144,13 @@ { "allow_on_submit": 1, "default": "Please supply the specified items at the best possible rates", + "depends_on": "eval:doc.use_html == 0", "fieldname": "message_for_supplier", "fieldtype": "Text Editor", "in_list_view": 1, "label": "Message for Supplier", - "print_hide": 1, - "reqd": 1 + "mandatory_depends_on": "eval:doc.use_html == 0", + "print_hide": 1 }, { "collapsible": 1, @@ -324,6 +327,22 @@ "label": "Subject", "not_nullable": 1, "reqd": 1 + }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.use_html == 1", + "fieldname": "mfs_html", + "fieldtype": "Code", + "label": "Message for Supplier", + "mandatory_depends_on": "eval:doc.use_html == 1", + "print_hide": 1 + }, + { + "default": "0", + "fieldname": "use_html", + "fieldtype": "Check", + "hidden": 1, + "label": "Use HTML" } ], "grid_page_length": 50, @@ -331,7 +350,11 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-01-05 14:27:33.329810", +======= + "modified": "2026-03-01 23:38:48.079274", +>>>>>>> 49d363b174 (fix: handle html email template separately in RFQ to avoid jinja context error) "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 cd22aec6960..e14a0265119 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -47,7 +47,8 @@ class RequestforQuotation(BuyingController): incoterm: DF.Link | None items: DF.Table[RequestforQuotationItem] letter_head: DF.Link | None - message_for_supplier: DF.TextEditor + message_for_supplier: DF.TextEditor | None + mfs_html: DF.Code | None named_place: DF.Data | None naming_series: DF.Literal["PUR-RFQ-.YYYY.-"] opportunity: DF.Link | None @@ -61,6 +62,7 @@ class RequestforQuotation(BuyingController): tc_name: DF.Link | None terms: DF.TextEditor | None transaction_date: DF.Date + use_html: DF.Check vendor: DF.Link | None # end: auto-generated types @@ -100,8 +102,16 @@ class RequestforQuotation(BuyingController): ["use_html", "response", "response_html", "subject"], as_dict=True, ) - if not self.message_for_supplier: - self.message_for_supplier = data.response_html if data.use_html else data.response + + self.use_html = data.use_html + + if data.use_html: + if not self.mfs_html: + self.mfs_html = data.response_html + else: + if not self.message_for_supplier: + self.message_for_supplier = data.response + if not self.subject: self.subject = data.subject @@ -304,7 +314,10 @@ class RequestforQuotation(BuyingController): else: sender = frappe.session.user not in STANDARD_USERS and frappe.session.user or None - rendered_message = frappe.render_template(self.message_for_supplier, doc_args) + message_template = self.mfs_html if self.use_html else self.message_for_supplier + # nosemgrep: frappe-semgrep-rules.rules.security.frappe-ssti + rendered_message = frappe.render_template(message_template, doc_args) + subject_source = ( self.subject or frappe.get_value("Email Template", self.email_template, "subject")