Files
erpnext/erpnext/templates/utils.py
mergify[bot] 85e6b8d27b fix: opportunity creation from contact us page (backport #55841) (#55867)
* fix: opportunity creation from contact us page (#55841)

(cherry picked from commit c933e34914)

# Conflicts:
#	erpnext/templates/utils.py

* chore: resolve conflicts

---------

Co-authored-by: Diptanil Saha <diptanil@frappe.io>
2026-06-13 09:04:23 +00:00

71 lines
1.8 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
from frappe.rate_limiter import rate_limit
from frappe.utils import escape_html
@frappe.whitelist(allow_guest=True, methods=["POST"])
@rate_limit(limit=10, seconds=3 * 60)
def send_message(sender, message, subject="Website Query"):
from frappe.www.contact import send_message as website_send_message
website_send_message(sender, message, subject)
message = escape_html(message)
oppotunity_creation = frappe.get_single_value(
"CRM Settings", "enable_opportunity_creation_from_contact_us"
)
if not oppotunity_creation:
# Meant to silently fail instead of throwing error.
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,
)
if not customer:
lead = frappe.db.get_value("Lead", dict(email_id=sender))
if not lead:
new_lead = frappe.get_doc(
doctype="Lead", email_id=sender, lead_name=sender.split("@")[0].title()
).insert(ignore_permissions=True)
opportunity = frappe.get_doc(
doctype="Opportunity",
opportunity_from="Customer" if customer else "Lead",
status="Open",
title=subject,
contact_email=sender,
)
if customer:
opportunity.party_name = customer[0][0]
elif lead:
opportunity.party_name = lead
else:
opportunity.party_name = new_lead.name
opportunity.insert(ignore_permissions=True)
comm = frappe.get_doc(
{
"doctype": "Communication",
"subject": subject,
"content": message,
"sender": sender,
"sent_or_received": "Received",
"reference_doctype": "Opportunity",
"reference_name": opportunity.name,
}
)
comm.insert(ignore_permissions=True)