lead/customer backend

This commit is contained in:
Casey 2025-12-12 16:09:03 -06:00
parent ae5cb23e6e
commit 0d7976b140

View File

@ -210,17 +210,30 @@ def upsert_client(data):
print("#####DEBUG: Checking for existing customer with name:", data.get("customer_name"))
customer = frappe.db.exists("Customer", {"customer_name": data.get("customer_name")})
if not customer:
customer_doc = frappe.get_doc({
"doctype": "Customer",
new_lead_data = {"doctype": "Lead"}
is_individual = data.get("customer_type") == "Individual"
primary_contact = next((c for c in data.get("contacts", []) if c.get("is_primary")), None)
if not primary_contact:
return build_error_response("Primary contact information is required to create a new customer.", 400)
if is_individual:
# Grab the contact that has is_primary true
new_lead_data["first_name"] = primary_contact.get("first_name")
new_lead_data["last_name"] = primary_contact.get("last_name")
else:
new_lead_data["company_name"] = data.get("customer_name")
new_lead_data["email_id"] = primary_contact.get("email")
new_lead_data["phone"] = primary_contact.get("phone_number")
new_client_doc = frappe.get_doc({
"doctype": "Lead",
"customer_name": data.get("customer_name"),
"customer_type": data.get("customer_type")
}).insert(ignore_permissions=True)
else:
customer_doc = frappe.get_doc("Customer", data.get("customer_name"))
print("Customer:", customer_doc.as_dict())
new_client_doc = frappe.get_doc("Customer", data.get("customer_name"))
print(f"#####DEBUG: {new_client_doc.doctype}:", new_client_doc.as_dict())
# Handle address creation
print("#####DEBUG: Checking for existing address for customer:", data.get("customer_name"))
print("#####DEBUG: Checking for existing address for customer/lead:", data.get("customer_name"))
existing_address = frappe.db.exists(
"Address",
{
@ -230,7 +243,7 @@ def upsert_client(data):
})
print("Existing address check:", existing_address)
if existing_address:
frappe.throw(f"Address already exists for customer {data.get('customer_name')}.", frappe.ValidationError)
return build_error_response("Address already exists for this customer.", 400)
address_doc = frappe.get_doc({
"doctype": "Address",
@ -240,8 +253,8 @@ def upsert_client(data):
"city": data.get("city"),
"state": data.get("state"),
"country": "United States",
"pincode": data.get("pincode"),
"custom_customer_to_bill": customer_doc.name
# "custom_customer_to_bill": new_client_doc.name,
"pincode": data.get("pincode")
}).insert(ignore_permissions=True)
print("Address:", address_doc.as_dict())
@ -281,34 +294,37 @@ def upsert_client(data):
##### Create links
# Customer -> Address
print("#####DEBUG: Creating links between customer, address, and contacts.")
customer_doc.append("custom_select_address", {
"address_name": address_doc.name,
"address_line_1": address_doc.address_line1,
"city": address_doc.city,
"state": address_doc.state,
"pincode": address_doc.pincode
})
# Customer -> Contact
print("#####DEBUG: Linking contacts to customer.")
for contact_doc in contact_docs:
print("Linking contact:", contact_doc.as_dict())
print("with role:", contact_doc.role)
print("customer to append to:", customer_doc.as_dict())
customer_doc.append("custom_add_contacts", {
"contact": contact_doc.name,
"email": contact_doc.custom_email,
"phone": contact_doc.phone,
"role": contact_doc.role
if new_client_doc.doctype == "Customer":
print("#####DEBUG: Creating links between customer, address, and contacts.")
new_client_doc.append("custom_select_address", {
"address_name": address_doc.name,
"address_line_1": address_doc.address_line1,
"city": address_doc.city,
"state": address_doc.state,
"pincode": address_doc.pincode
})
# Address -> Customer
# Customer -> Contact
print("#####DEBUG: Linking contacts to customer.")
for contact_doc in contact_docs:
print("Linking contact:", contact_doc.as_dict())
print("with role:", contact_doc.role)
print("customer to append to:", new_client_doc.as_dict())
new_client_doc.append("custom_add_contacts", {
"contact": contact_doc.name,
"email": contact_doc.custom_email,
"phone": contact_doc.phone,
"role": contact_doc.role
})
new_client_doc.save(ignore_permissions=True)
# Address -> Customer/Lead
print("#####DEBUG: Linking address to customer.")
address_doc.append("links", {
"link_doctype": "Customer",
"link_name": customer_doc.name
"link_doctype": new_client_doc.doctype,
"link_name": new_client_doc.name
})
# Address -> Contact
print("#####DEBUG: Linking address to contacts.")
@ -320,27 +336,27 @@ def upsert_client(data):
"phone": contact_doc.phone,
"role": contact_doc.role
})
address_doc.save(ignore_permissions=True)
# Contact -> Customer & Address
# Contact -> Customer/Lead & Address
print("#####DEBUG: Linking contacts to customer.")
for contact_doc in contact_docs:
contact_doc.address = address_doc.name
contact_doc.append("links", {
"link_doctype": "Customer",
"link_name": customer_doc.name
"link_doctype": new_client_doc.doctype,
"link_name": new_client_doc.name
})
contact_doc.append("links", {
"link_doctype": "Address",
"link_name": address_doc.name
})
contact_doc.custom_customer = customer_doc.name
contact_doc.custom_customer = new_client_doc.name
contact_doc.save(ignore_permissions=True)
address_doc.save(ignore_permissions=True)
customer_doc.save(ignore_permissions=True)
frappe.local.message_log = []
return build_success_response({
"customer": customer_doc.as_dict(),
"customer": new_client_doc.as_dict(),
"address": address_doc.as_dict(),
"contacts": [contact_doc.as_dict() for contact_doc in contact_docs]
})