Files
Makap/makap_backend/makap_backend/onboarding_api.py
T
2026-10-05 16:04:29 +03:00

100 lines
3.5 KiB
Python

import frappe
from frappe import _
DOCTYPE = "Customer Onboarding Request"
FIELDS = [
"name", "organisation_name", "trading_name", "customer_type",
"business_tax_identifier", "contact_name", "email_id", "telephone",
"submitted_address", "location", "product_interest", "initial_enquiry",
"registration_source", "assisted_channel", "onboarding_status",
"customer_match_result", "possible_existing_customer",
"created_linked_customer", "created_linked_contact", "portal_access_status",
"review_notes", "privacy_notice_acknowledged", "acknowledgement_timestamp",
"privacy_notice_reference_version", "creation", "modified", "owner",
]
def _filters(args):
filters = {}
status = args.get("status")
if status and status != "All":
filters["onboarding_status"] = status
return filters
@frappe.whitelist()
def get_onboarding_summary():
return {
"all": frappe.db.count(DOCTYPE),
"submitted": frappe.db.count(DOCTYPE, {"onboarding_status": "Submitted"}),
"under_review": frappe.db.count(DOCTYPE, {"onboarding_status": "Under Review"}),
"approved": frappe.db.count(DOCTYPE, {"onboarding_status": "Approved"}),
"completed": frappe.db.count(DOCTYPE, {"onboarding_status": "Completed"}),
"rejected": frappe.db.count(DOCTYPE, {"onboarding_status": "Rejected"}),
}
@frappe.whitelist()
def get_onboarding_requests(status=None, search=None, limit_start=0, limit_page_length=25):
filters = _filters({"status": status})
fields = [
"name", "organisation_name", "trading_name", "contact_name", "email_id",
"customer_type", "location", "onboarding_status", "customer_match_result",
"portal_access_status", "creation", "modified",
]
rows = frappe.get_list(
DOCTYPE,
filters=filters,
fields=fields,
order_by="modified desc",
limit_start=int(limit_start or 0),
limit_page_length=min(int(limit_page_length or 25), 100),
)
if search:
term = str(search).lower()
rows = [
row for row in rows
if term in " ".join(str(row.get(key) or "") for key in fields).lower()
]
return rows
@frappe.whitelist()
def get_onboarding_request(name):
if not name:
frappe.throw(_("Request name is required."))
return frappe.get_doc(DOCTYPE, name).as_dict()
@frappe.whitelist()
def create_onboarding_request(data):
data = frappe.parse_json(data) if isinstance(data, str) else (data or {})
allowed = {field: data.get(field) for field in FIELDS if field in data}
allowed.pop("name", None)
allowed["doctype"] = DOCTYPE
allowed["onboarding_status"] = "Submitted"
allowed["customer_match_result"] = "Not Checked"
allowed["portal_access_status"] = "Not Provisioned"
if not allowed.get("organisation_name"):
frappe.throw(_("Organisation name is required."))
if not allowed.get("contact_name"):
frappe.throw(_("Contact name is required."))
if not allowed.get("email_id"):
frappe.throw(_("Email address is required."))
doc = frappe.get_doc(allowed)
doc.insert()
frappe.db.commit()
return doc.name
@frappe.whitelist()
def update_onboarding_request(name, data):
data = frappe.parse_json(data) if isinstance(data, str) else (data or {})
doc = frappe.get_doc(DOCTYPE, name)
for field in FIELDS:
if field in data and field not in {"name", "onboarding_status", "customer_match_result", "portal_access_status"}:
doc.set(field, data[field])
doc.save()
frappe.db.commit()
return doc.as_dict()