Files
RangelDigital/rangeldigital/api.py
2025-02-17 22:53:49 -08:00

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)}