Portal, logo, workspace shortcut

This commit is contained in:
KabundiNjuki
2026-10-05 16:04:29 +03:00
parent eafa1242db
commit 72046591a3
95 changed files with 5480 additions and 793 deletions
+103
View File
@@ -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,
}