fix(crm): respect disabled contact form and match customers only for signed-in senders

This commit is contained in:
Nabin Hait
2026-10-21 12:05:14 +05:30
parent d77dc849fb
commit fdabc6dd2a
2 changed files with 52 additions and 6 deletions
+41
View File
@@ -0,0 +1,41 @@
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
from frappe.tests.utils import FrappeTestCase
from erpnext.templates.utils import send_message
test_dependencies = ["Company", "Customer"]
class TestTemplateUtils(FrappeTestCase):
def setUp(self):
frappe.db.set_single_value("Contact Us Settings", "is_disabled", 0)
def test_contact_us_guest_is_not_filed_against_a_customer(self):
frappe.db.set_single_value("CRM Settings", "enable_opportunity_creation_from_contact_us", 1)
self.addCleanup(frappe.db.set_default, "company", frappe.db.get_default("company"))
frappe.db.set_default("company", "_Test Company")
sender = "_test_contact_us_customer@example.com"
frappe.get_doc(
{
"doctype": "Contact",
"first_name": "Contact Us Customer",
"email_ids": [{"email_id": sender, "is_primary": 1}],
"links": [{"link_doctype": "Customer", "link_name": "_Test Customer"}],
}
).insert(ignore_permissions=True)
with self.set_user("Guest"):
send_message(sender, "Renewal request", "Renewal")
opportunity = frappe.db.get_value(
"Opportunity", {"contact_email": sender}, ["opportunity_from", "party_name"], as_dict=True
)
self.assertEqual(opportunity.opportunity_from, "Lead")
self.assertNotEqual(opportunity.party_name, "_Test Customer")
frappe.db.set_single_value("Contact Us Settings", "is_disabled", 1)
with self.set_user("Guest"):
send_message("_test_contact_us_disabled@example.com", "Hello", "Disabled")
self.assertFalse(frappe.db.exists("Lead", {"email_id": "_test_contact_us_disabled@example.com"}))
+11 -6
View File
@@ -12,6 +12,9 @@ from frappe.utils import escape_html
def send_message(sender, message, subject="Website Query"):
from frappe.www.contact import send_message as website_send_message
if frappe.get_single_value("Contact Us Settings", "is_disabled"):
return
website_send_message(sender, message, subject)
message = escape_html(message)
@@ -25,12 +28,14 @@ def send_message(sender, message, subject="Website Query"):
return
lead = customer = None
customer = frappe.db.sql(
"""select distinct dl.link_name from `tabDynamic Link` dl
left join `tabContact` c on dl.parent=c.name where dl.link_doctype='Customer'
and c.email_id = %s""",
sender,
)
# a guest's address is unverified, so only a signed-in sender is matched to a customer
if frappe.session.user == sender:
customer = frappe.db.sql(
"""select distinct dl.link_name from `tabDynamic Link` dl
left join `tabContact` c on dl.parent=c.name where dl.link_doctype='Customer'
and c.email_id = %s""",
sender,
)
if not customer:
lead = frappe.db.get_value("Lead", dict(email_id=sender))