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 5b8be4429668..1fbb356d7107 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -205,10 +205,30 @@ def link_supplier_contact(self, rfq_supplier, user): contact.save(ignore_permissions=True) + if rfq_supplier.supplier: + self.update_user_in_supplier(rfq_supplier.supplier, user.name) + if not rfq_supplier.contact: # return contact to later update, RFQ supplier row's contact return contact.name + def update_user_in_supplier(self, supplier, user): + """Update user in Supplier.""" + if not frappe.db.exists("Portal User", {"parent": supplier, "user": user}): + supplier_doc = frappe.get_doc("Supplier", supplier) + supplier_doc.append( + "portal_users", + { + "user": user, + }, + ) + + supplier_doc.flags.ignore_validate = True + supplier_doc.flags.ignore_mandatory = True + supplier_doc.flags.ignore_permissions = True + + supplier_doc.save() + def create_user(self, rfq_supplier, link): user = frappe.get_doc( { @@ -245,6 +265,10 @@ def supplier_rfq_mail(self, data, update_password_link, rfq_link, preview=False) "user_fullname": full_name, } ) + + 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) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index 42fa1d923e16..78d6accd1bb7 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -138,6 +138,33 @@ def test_get_pdf(self): get_pdf(rfq.name, rfq.get("suppliers")[0].supplier) self.assertEqual(frappe.local.response.type, "pdf") + def test_portal_user_with_new_supplier(self): + supplier_doc = frappe.get_doc( + { + "doctype": "Supplier", + "supplier_name": "Test Supplier for RFQ", + "supplier_group": "_Test Supplier Group", + } + ).insert() + + self.assertFalse(supplier_doc.portal_users) + + rfq = make_request_for_quotation( + supplier_data=[ + { + "supplier": supplier_doc.name, + "supplier_name": supplier_doc.supplier_name, + "email_id": "123_testrfquser@example.com", + } + ], + do_not_submit=True, + ) + for rfq_supplier in rfq.suppliers: + rfq.update_supplier_contact(rfq_supplier, rfq.get_link()) + + supplier_doc.reload() + self.assertTrue(supplier_doc.portal_users[0].user) + def make_request_for_quotation(**args) -> "RequestforQuotation": """