104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
import frappe
|
|
from frappe import _
|
|
|
|
|
|
CONTACT_FIELDS = [
|
|
"name",
|
|
"first_name",
|
|
"last_name",
|
|
"full_name",
|
|
"email_id",
|
|
"phone",
|
|
"mobile_no",
|
|
"company_name",
|
|
"designation",
|
|
"status",
|
|
"image",
|
|
"modified",
|
|
]
|
|
|
|
|
|
def _ensure_read_permission():
|
|
if not frappe.has_permission("Contact", "read"):
|
|
frappe.throw(_("You do not have permission to view Contacts."), frappe.PermissionError)
|
|
|
|
|
|
def _contact_row(row):
|
|
row = dict(row)
|
|
row["display_name"] = row.get("full_name") or " ".join(
|
|
value for value in [row.get("first_name"), row.get("last_name")] if value
|
|
) or row.get("name")
|
|
return row
|
|
|
|
|
|
@frappe.whitelist()
|
|
def list_contacts(search=None, limit_start=0, limit_page_length=25):
|
|
"""Return a permission-aware, searchable Contact list for the MAKAP workspace."""
|
|
_ensure_read_permission()
|
|
search = (search or "").strip()
|
|
limit_start = max(int(limit_start or 0), 0)
|
|
limit_page_length = min(max(int(limit_page_length or 25), 1), 50)
|
|
|
|
or_filters = None
|
|
if search:
|
|
like = f"%{search}%"
|
|
or_filters = [
|
|
["Contact", "name", "like", like],
|
|
["Contact", "full_name", "like", like],
|
|
["Contact", "first_name", "like", like],
|
|
["Contact", "last_name", "like", like],
|
|
["Contact", "email_id", "like", like],
|
|
["Contact", "company_name", "like", like],
|
|
]
|
|
|
|
rows = frappe.get_list(
|
|
"Contact",
|
|
fields=CONTACT_FIELDS,
|
|
filters={},
|
|
or_filters=or_filters,
|
|
order_by="modified desc",
|
|
limit_start=limit_start,
|
|
limit_page_length=limit_page_length,
|
|
)
|
|
return [_contact_row(row) for row in rows]
|
|
|
|
|
|
@frappe.whitelist()
|
|
def get_contact(name):
|
|
"""Return a Contact and its linked Customers for the right-hand detail panel."""
|
|
_ensure_read_permission()
|
|
if not name:
|
|
frappe.throw(_("Contact name is required."))
|
|
|
|
doc = frappe.get_doc("Contact", name)
|
|
if not frappe.has_permission(doc, "read"):
|
|
frappe.throw(_("You do not have permission to view this Contact."), frappe.PermissionError)
|
|
|
|
links = []
|
|
for link in doc.get("links") or []:
|
|
links.append({
|
|
"doctype": link.link_doctype,
|
|
"name": link.link_name,
|
|
})
|
|
|
|
emails = [{"email_id": row.email_id, "is_primary": row.is_primary} for row in doc.get("email_ids") or []]
|
|
phones = [{"phone": row.phone, "is_primary": row.is_primary, "is_mobile": row.is_mobile} for row in doc.get("phone_nos") or []]
|
|
|
|
return {
|
|
"name": doc.name,
|
|
"display_name": doc.full_name or " ".join(value for value in [doc.first_name, doc.last_name] if value) or doc.name,
|
|
"first_name": doc.first_name,
|
|
"last_name": doc.last_name,
|
|
"email_id": doc.email_id,
|
|
"phone": doc.phone,
|
|
"mobile_no": doc.mobile_no,
|
|
"company_name": doc.company_name,
|
|
"designation": doc.designation,
|
|
"status": doc.status,
|
|
"image": doc.image,
|
|
"modified": doc.modified,
|
|
"links": links,
|
|
"emails": emails,
|
|
"phones": phones,
|
|
}
|