Portal, logo, workspace shortcut
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user