149 lines
5.8 KiB
Python
149 lines
5.8 KiB
Python
import frappe
|
|
|
|
@frappe.whitelist(allow_guest=True) # allow_guest=True if you want unauthenticated access
|
|
def lead_magnet(email,subject,content):
|
|
try:
|
|
# Check if a Lead with the given email exists
|
|
lead = frappe.db.get_value("Lead", {"email_id": email}, "name",)
|
|
|
|
if not lead:
|
|
# Create a new Lead if not found
|
|
lead_doc = frappe.get_doc({
|
|
"doctype": "Lead",
|
|
"first_name": "Unknown",
|
|
"email_id": email,
|
|
"status": "Open"
|
|
})
|
|
lead_doc.insert(ignore_permissions=True)
|
|
frappe.db.commit()
|
|
lead = lead_doc.name # Get the newly created lead name
|
|
|
|
# Create a Communication linked to the Lead
|
|
communication = frappe.get_doc({
|
|
"doctype": "Communication",
|
|
"subject": subject,
|
|
"content": content,
|
|
"sender": email,
|
|
"sent_or_received": "Received",
|
|
"reference_doctype": "Lead",
|
|
"reference_name": lead # Link to the existing or new lead
|
|
})
|
|
communication.insert(ignore_permissions=True)
|
|
frappe.db.commit()
|
|
|
|
return {"success": True, "message": "Lead and communication recorded successfully", "lead": lead}
|
|
|
|
except Exception as e:
|
|
frappe.log_error(f"Lead Creation Error: {str(e)}", "Lead API Error")
|
|
return {"success": False, "error": str(e)}
|
|
|
|
|
|
|
|
|
|
@frappe.whitelist(allow_guest=True)
|
|
def contact_form():
|
|
try:
|
|
# Extract data from the form submission
|
|
data = frappe.form_dict # Get request parameters
|
|
first_name = data.get("first_name")
|
|
last_name = data.get("last_name")
|
|
business_name = data.get("business_name")
|
|
email = data.get("email")
|
|
phone = data.get("phone")
|
|
subject = data.get("subject")
|
|
content = data.get("content")
|
|
department = data.get("department")
|
|
|
|
if not email or not subject or not content:
|
|
return {"success": False, "error": "Missing required parameters"}
|
|
|
|
reference_doctype = "Contact"
|
|
reference_name = None
|
|
|
|
if department and department.lower() == "sales":
|
|
# Look for a Lead with the given email
|
|
lead_name = frappe.db.get_value("Lead", {"email_id": email}, "name")
|
|
if lead_name:
|
|
# Update Lead status to 'Open'
|
|
frappe.db.set_value("Lead", lead_name, "status", "Open")
|
|
reference_doctype = "Lead"
|
|
reference_name = lead_name
|
|
else:
|
|
# Create a new Lead if not found
|
|
lead_doc = frappe.get_doc({
|
|
"doctype": "Lead",
|
|
"first_name": first_name or "Unknown",
|
|
"last_name": last_name or "",
|
|
"company_name": business_name or "",
|
|
"email_id": email,
|
|
"phone": phone or "",
|
|
"status": "Open"
|
|
})
|
|
lead_doc.insert(ignore_permissions=True)
|
|
reference_doctype = "Lead"
|
|
reference_name = lead_doc.name
|
|
|
|
if not reference_name:
|
|
# Check if a Contact with the given email exists by querying the Contact Email doctype
|
|
contact_email = frappe.db.get_value("Contact Email", {"email_id": email}, "parent")
|
|
|
|
if not contact_email:
|
|
# Create a new Contact if not found
|
|
contact_doc = frappe.get_doc({
|
|
"doctype": "Contact",
|
|
"first_name": first_name or "Unknown",
|
|
"status": "Open",
|
|
"email_ids": [
|
|
{
|
|
"email_id": email,
|
|
}
|
|
]
|
|
})
|
|
contact_doc.insert(ignore_permissions=True)
|
|
reference_name = contact_doc.name
|
|
else:
|
|
# If contact exists, we ensure the email is linked, but only if it isn't already
|
|
contact_doc = frappe.get_doc("Contact", contact_email)
|
|
existing_email = frappe.db.exists("Contact Email", {"parent": contact_doc.name, "email_id": email})
|
|
|
|
if not existing_email:
|
|
contact_doc.append("email_ids", {
|
|
"email_id": email,
|
|
"is_primary": 1 # Optional: Make it the primary email if needed
|
|
})
|
|
contact_doc.save(ignore_permissions=True)
|
|
|
|
reference_name = contact_doc.name
|
|
|
|
if department and department.lower() == "support":
|
|
# Create an Issue and link it to the Contact
|
|
issue_doc = frappe.get_doc({
|
|
"doctype": "Issue",
|
|
"subject": subject,
|
|
"description": content,
|
|
"raised_by": email,
|
|
"contact": reference_name
|
|
})
|
|
issue_doc.insert(ignore_permissions=True)
|
|
|
|
reference_doctype = "Issue"
|
|
reference_name = issue_doc.name
|
|
|
|
# Create a Communication linked to the determined reference doctype
|
|
communication = frappe.get_doc({
|
|
"doctype": "Communication",
|
|
"subject": subject,
|
|
"content": content,
|
|
"sender": email,
|
|
"sent_or_received": "Received",
|
|
"reference_doctype": reference_doctype,
|
|
"reference_name": reference_name
|
|
})
|
|
communication.insert(ignore_permissions=True)
|
|
|
|
return {"success": True, "message": "Lead, Contact, or Issue and communication recorded successfully", "reference_doctype": reference_doctype, "reference_name": reference_name}
|
|
|
|
except Exception as e:
|
|
frappe.log_error(f"Contact Form Error: {str(e)}", "Contact Form API Error")
|
|
return {"success": False, "error": str(e)}
|