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 ba2409871ec..335bb28b0fb 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -34,15 +34,6 @@ frappe.ui.form.on("Request for Quotation", { }); }, - onload: function (frm) { - if (!frm.doc.message_for_supplier) { - frm.set_value( - "message_for_supplier", - __("Please supply the specified items at the best possible rates") - ); - } - }, - refresh: function (frm, cdt, cdn) { if (frm.doc.docstatus === 1) { frm.add_custom_button( @@ -256,12 +247,14 @@ frappe.ui.form.on("Request for Quotation", { "use_html", "response", "response_html", + "subject", ]) .then((r) => { frm.set_value( "message_for_supplier", r.message.use_html ? r.message.response_html : r.message.response ); + 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 b2f12d73cab..ae629650765 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -30,6 +30,7 @@ "send_attached_files", "send_document_print", "sec_break_email_2", + "subject", "message_for_supplier", "terms_section_break", "incoterm", @@ -126,6 +127,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.suppliers.some((item) => item.send_email) && !(doc.docstatus == 1 && !doc.email_template)", "fieldname": "supplier_response_section", "fieldtype": "Section Break", "label": "Email Details" @@ -139,6 +141,7 @@ }, { "allow_on_submit": 1, + "default": "Please supply the specified items at the best possible rates", "fieldname": "message_for_supplier", "fieldtype": "Text Editor", "in_list_view": 1, @@ -249,7 +252,7 @@ "label": "Preview Email" }, { - "depends_on": "eval:!doc.__islocal", + "depends_on": "eval:doc.suppliers.some((item) => item.send_email)", "fieldname": "sec_break_email_2", "fieldtype": "Section Break", "hide_border": 1 @@ -313,6 +316,14 @@ "hidden": 1, "label": "Has Unit Price Items", "no_copy": 1 + }, + { + "default": "Request for Quotation", + "fieldname": "subject", + "fieldtype": "Data", + "label": "Subject", + "not_nullable": 1, + "reqd": 1 } ], "grid_page_length": 50, @@ -320,7 +331,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2025-12-29 14:44:18.934901", + "modified": "2026-01-05 14:27:33.329810", "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 7eb00c9477c..b2f8a1ed1e5 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -56,6 +56,7 @@ class RequestforQuotation(BuyingController): send_attached_files: DF.Check send_document_print: DF.Check status: DF.Literal["", "Draft", "Submitted", "Cancelled"] + subject: DF.Data suppliers: DF.Table[RequestforQuotationSupplier] tc_name: DF.Link | None terms: DF.TextEditor | None @@ -66,7 +67,7 @@ class RequestforQuotation(BuyingController): def before_validate(self): self.set_has_unit_price_items() self.flags.allow_zero_qty = self.has_unit_price_items - self.set_message_for_supplier() + self.set_data_for_supplier() def validate(self): self.validate_duplicate_supplier() @@ -91,12 +92,18 @@ class RequestforQuotation(BuyingController): not row.qty for row in self.get("items") if (row.item_code and not row.qty) ) - def set_message_for_supplier(self): - if self.email_template and not self.message_for_supplier: + def set_data_for_supplier(self): + if self.email_template: data = frappe.get_value( - "Email Template", self.email_template, ["use_html", "response", "response_html"], as_dict=True + "Email Template", + self.email_template, + ["use_html", "response", "response_html", "subject"], + as_dict=True, ) - self.message_for_supplier = data.response_html if data.use_html else data.response + if not self.message_for_supplier: + self.message_for_supplier = data.response_html if data.use_html else data.response + if not self.subject: + self.subject = data.subject def validate_duplicate_supplier(self): supplier_list = [d.supplier for d in self.suppliers] @@ -291,12 +298,6 @@ class RequestforQuotation(BuyingController): } ) - if not self.email_template: - return - - email_template = frappe.get_doc("Email Template", self.email_template) - message = frappe.render_template(email_template.response_, doc_args) - subject = frappe.render_template(email_template.subject, doc_args) fixed_procurement_email = frappe.db.get_single_value("Buying Settings", "fixed_email") if fixed_procurement_email: sender = frappe.db.get_value("Email Account", fixed_procurement_email, "email_id") @@ -304,7 +305,12 @@ class RequestforQuotation(BuyingController): sender = frappe.session.user not in STANDARD_USERS and frappe.session.user or None if preview: - return {"message": message, "subject": subject} + return { + "message": self.message_for_supplier, + "subject": self.subject + or frappe.get_value("Email Template", self.email_template, "subject") + or _("Request for Quotation"), + } attachments = [] if self.send_attached_files: @@ -324,7 +330,15 @@ class RequestforQuotation(BuyingController): ) ) - self.send_email(data, sender, subject, message, attachments) + self.send_email( + data, + sender, + self.subject + or frappe.get_value("Email Template", self.email_template, "subject") + or _("Request for Quotation"), + self.message_for_supplier, + attachments, + ) def send_email(self, data, sender, subject, message, attachments): make( diff --git a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json index 4019be335cd..34ce6200db2 100644 --- a/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json +++ b/erpnext/buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json @@ -80,21 +80,22 @@ "fieldname": "email_id", "fieldtype": "Data", "in_list_view": 1, - "label": "Email Id", + "label": "Email ID", "no_copy": 1 } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2024-03-27 13:10:33.435013", + "modified": "2026-01-05 14:08:27.274538", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation Supplier", "owner": "Administrator", "permissions": [], + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +}