Files
soleprint/cfg/amar/databrowse/depot/views.json
2025-12-31 08:34:18 -03:00

179 lines
7.7 KiB
JSON

{
"views": [
{
"name": "users_by_role",
"title": "Users by Role",
"slug": "users-by-role",
"description": "All users grouped by role (USER/VET/ADMIN) for quick login selection",
"mode": "sql",
"entity": "User",
"group_by": "role",
"order_by": "username ASC",
"fields": ["id", "username", "email", "first_name", "last_name", "is_staff", "is_active", "date_joined"],
"display_fields": {
"id": {"label": "ID", "width": "60px"},
"username": {"label": "Username", "width": "150px", "primary": true},
"email": {"label": "Email", "width": "200px"},
"first_name": {"label": "First Name", "width": "120px"},
"last_name": {"label": "Last Name", "width": "120px"},
"is_active": {"label": "Active", "width": "80px", "type": "boolean"}
},
"actions": {
"login_as": {
"label": "Login as this user",
"type": "command",
"command": "echo 'Login as {{username}}' | pbcopy"
},
"copy_credentials": {
"label": "Copy credentials",
"type": "copy",
"template": "{{username}} / Amar2025!"
}
}
},
{
"name": "petowners_by_state",
"title": "Pet Owners by Data State",
"slug": "petowners-by-state",
"description": "Pet owners grouped by data state (has_pets, has_coverage, has_requests, has_turnos)",
"mode": "sql",
"entity": "PetOwner",
"group_by": "state_category",
"order_by": "created_at DESC",
"fields": ["id", "user_id", "first_name", "last_name", "email", "phone", "has_pets", "has_coverage", "has_requests", "has_turnos"],
"computed_group": {
"state_category": {
"sql": "CASE WHEN has_turnos THEN 'with_turnos' WHEN has_requests THEN 'with_requests' WHEN has_pets THEN 'with_pets' WHEN has_coverage THEN 'with_coverage' ELSE 'new' END",
"labels": {
"new": "New Users (Empty)",
"with_coverage": "With Coverage Only",
"with_pets": "With Pets Only",
"with_requests": "With Requests",
"with_turnos": "With Scheduled Turnos"
}
}
},
"display_fields": {
"id": {"label": "ID", "width": "60px"},
"first_name": {"label": "First Name", "width": "120px"},
"last_name": {"label": "Last Name", "width": "120px", "primary": true},
"email": {"label": "Email", "width": "200px"},
"phone": {"label": "Phone", "width": "120px"},
"has_pets": {"label": "Pets", "width": "60px", "type": "icon"},
"has_coverage": {"label": "Coverage", "width": "80px", "type": "icon"},
"has_requests": {"label": "Requests", "width": "80px", "type": "icon"},
"has_turnos": {"label": "Turnos", "width": "70px", "type": "icon"}
},
"actions": {
"login_as": {
"label": "Login as petowner",
"type": "link",
"template": "/login?user_id={{user_id}}"
}
}
},
{
"name": "vets_by_availability",
"title": "Veterinarians by Availability",
"slug": "vets-by-availability",
"description": "Vets grouped by availability and active work status",
"mode": "sql",
"entity": "Veterinarian",
"group_by": "availability_status",
"order_by": "active_requests DESC, completed_visits DESC",
"fields": ["id", "user_id", "first_name", "last_name", "email", "phone", "matricula", "has_availability", "has_specialties", "has_coverage_areas", "active_requests", "completed_visits"],
"computed_group": {
"availability_status": {
"sql": "CASE WHEN NOT has_availability THEN 'no_availability' WHEN active_requests > 3 THEN 'very_busy' WHEN active_requests > 0 THEN 'busy' ELSE 'available' END",
"labels": {
"no_availability": "No Availability Configured",
"available": "Available (No Active Requests)",
"busy": "Busy (1-3 Active Requests)",
"very_busy": "Very Busy (4+ Active Requests)"
}
}
},
"display_fields": {
"id": {"label": "ID", "width": "60px"},
"first_name": {"label": "First Name", "width": "120px"},
"last_name": {"label": "Last Name", "width": "120px", "primary": true},
"matricula": {"label": "Matricula", "width": "100px"},
"phone": {"label": "Phone", "width": "120px"},
"has_availability": {"label": "Avail", "width": "60px", "type": "icon"},
"has_specialties": {"label": "Spec", "width": "60px", "type": "icon"},
"has_coverage_areas": {"label": "Areas", "width": "60px", "type": "icon"},
"active_requests": {"label": "Active", "width": "70px", "type": "number"},
"completed_visits": {"label": "Completed", "width": "90px", "type": "number"}
},
"actions": {
"login_as": {
"label": "Login as vet",
"type": "link",
"template": "/login?user_id={{user_id}}"
}
}
},
{
"name": "requests_pipeline",
"title": "Service Requests Pipeline",
"slug": "requests-pipeline",
"description": "Active service requests grouped by state (like turnos monitor)",
"mode": "sql",
"entity": "ServiceRequest",
"group_by": "state",
"order_by": "created_at DESC",
"fields": ["id", "petowner_id", "veterinarian_id", "state", "pay_number", "date_coordinated", "hour_coordinated", "has_cart", "has_payment", "has_turno", "age_hours", "created_at"],
"filter": {
"state": ["pending", "in_progress_vet", "vet_asked", "vet_accepted", "in_progress_pay", "payed", "coordinated", "not_coordinated"]
},
"display_fields": {
"id": {"label": "ID", "width": "60px", "primary": true},
"petowner_id": {"label": "Owner", "width": "70px", "type": "link"},
"veterinarian_id": {"label": "Vet", "width": "60px", "type": "link"},
"state": {"label": "State", "width": "120px", "type": "badge"},
"has_cart": {"label": "Cart", "width": "50px", "type": "icon"},
"has_payment": {"label": "Pay", "width": "50px", "type": "icon"},
"has_turno": {"label": "Turno", "width": "50px", "type": "icon"},
"age_hours": {"label": "Age (h)", "width": "70px", "type": "number"}
},
"state_colors": {
"pending": "#fbbf24",
"in_progress_vet": "#f97316",
"vet_asked": "#fb923c",
"vet_accepted": "#4ade80",
"in_progress_pay": "#60a5fa",
"payed": "#2dd4bf",
"coordinated": "#22c55e",
"not_coordinated": "#facc15"
},
"actions": {
"view_details": {
"label": "View request",
"type": "link",
"template": "/admin/solicitudes/servicerequest/{{id}}/change/"
}
}
},
{
"name": "full_graph",
"title": "Full Data Graph",
"slug": "full-graph",
"description": "Complete data model graph showing all entities and relationships",
"mode": "graph",
"graph_type": "erd",
"entities": ["User", "PetOwner", "Veterinarian", "Pet", "ServiceRequest", "VetVisit"],
"relationships": [
{"from": "User", "to": "PetOwner", "type": "1:1", "via": "user_id"},
{"from": "User", "to": "Veterinarian", "type": "1:1", "via": "user_id"},
{"from": "PetOwner", "to": "Pet", "type": "1:N", "via": "petowner_id"},
{"from": "PetOwner", "to": "ServiceRequest", "type": "1:N", "via": "petowner_id"},
{"from": "Veterinarian", "to": "ServiceRequest", "type": "1:N", "via": "veterinarian_id"},
{"from": "ServiceRequest", "to": "VetVisit", "type": "1:1", "via": "service_request_id"},
{"from": "Veterinarian", "to": "VetVisit", "type": "1:N", "via": "veterinarian_id"}
},
"layout": "hierarchical",
"generators": ["graphviz", "mermaid", "d3"]
}
]
}