Seera/frappe_api_setup.py
2025-11-03 13:38:27 +05:30

167 lines
5.3 KiB
Python

# Add this file to your Frappe app: asset_lite/api/custom_api.py
# This file should be placed at: /path/to/your/frappe/sites/seeraasm-med/apps/asset_lite/asset_lite/api/custom_api.py
import frappe
from frappe import _
from frappe.utils import now, today, get_datetime
import json
@frappe.whitelist(allow_guest=False)
def get_user_details(user_id=None):
"""
Get detailed user information
Usage: /api/method/asset_lite.api.custom_api.get_user_details
"""
try:
if not user_id:
user_id = frappe.session.user
user = frappe.get_doc("User", user_id)
# Get user roles
roles = frappe.get_roles(user_id)
response_data = {
"user_id": user_id,
"full_name": user.full_name,
"email": user.email,
"user_image": user.user_image,
"roles": roles,
"last_login": user.last_login,
"enabled": user.enabled,
"creation": user.creation,
"modified": user.modified
}
frappe.response.message = response_data
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_user_details: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
@frappe.whitelist(allow_guest=False)
def get_doctype_records(doctype, filters=None, fields=None, limit=20, offset=0):
"""
Get records from any DocType with filtering and pagination
Usage: /api/method/asset_lite.api.custom_api.get_doctype_records
"""
try:
# Parse filters and fields if provided as JSON strings
if isinstance(filters, str):
filters = json.loads(filters)
if isinstance(fields, str):
fields = json.loads(fields)
# Build the query
query_filters = filters or {}
# Get records
records = frappe.get_list(
doctype,
filters=query_filters,
fields=fields or ["*"],
limit=limit,
start=offset,
order_by="creation desc"
)
# Get total count for pagination
total_count = frappe.db.count(doctype, query_filters)
response_data = {
"records": records,
"total_count": total_count,
"limit": limit,
"offset": offset,
"has_more": (offset + limit) < total_count
}
frappe.response.message = response_data
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_doctype_records: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
@frappe.whitelist(allow_guest=False)
def get_dashboard_stats():
"""
Get dashboard statistics
Usage: /api/method/asset_lite.api.custom_api.get_dashboard_stats
"""
try:
# Example: Get counts for different DocTypes
stats = {
"total_users": frappe.db.count("User", {"enabled": 1}),
"total_customers": frappe.db.count("Customer"),
"total_items": frappe.db.count("Item"),
"total_orders": frappe.db.count("Sales Order"),
"recent_activities": []
}
# Get recent activities (example)
recent_users = frappe.get_list(
"User",
fields=["name", "full_name", "creation"],
limit=5,
order_by="creation desc"
)
stats["recent_activities"] = recent_users
frappe.response.message = stats
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_dashboard_stats: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
# Example KYC API for your KYCDetails component
@frappe.whitelist(allow_guest=False)
def get_kyc_details():
"""
Get KYC details - customize this based on your actual KYC DocType
Usage: /api/method/asset_lite.api.custom_api.get_kyc_details
"""
try:
# Replace 'KYC' with your actual DocType name
kyc_records = frappe.get_list(
"KYC", # Change this to your actual DocType
fields=["name", "kyc_status", "kyc_type", "creation"],
limit=50,
order_by="creation desc"
)
frappe.response.message = kyc_records
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in get_kyc_details: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500
# Simple test endpoint to verify API is working
@frappe.whitelist(allow_guest=False)
def test_api():
"""
Simple test endpoint to verify the API is working
Usage: /api/method/asset_lite.api.custom_api.test_api
"""
try:
frappe.response.message = {
"status": "success",
"message": "API is working!",
"user": frappe.session.user,
"timestamp": now()
}
frappe.response.status_code = 200
except Exception as e:
frappe.log_error(f"Error in test_api: {str(e)}")
frappe.response.message = {"error": str(e)}
frappe.response.status_code = 500