2025-10-06 15:25:37 +03:00

99 lines
6.3 KiB
Python

"""
Operating Theatre app URLs with comprehensive CRUD operations.
"""
from django.urls import path, include
from . import views
app_name = 'operating_theatre'
urlpatterns = [
# ============================================================================
# DASHBOARD AND OVERVIEW
# ============================================================================
path('', views.OperatingTheatreDashboardView.as_view(), name='dashboard'),
# ============================================================================
# OPERATING ROOM URLS (FULL CRUD - Master Data)
# ============================================================================
path('rooms/', views.OperatingRoomListView.as_view(), name='operating_room_list'),
path('rooms/create/', views.OperatingRoomCreateView.as_view(), name='operating_room_create'),
path('rooms/<int:pk>/', views.OperatingRoomDetailView.as_view(), name='operating_room_detail'),
path('rooms/<int:pk>/update/', views.OperatingRoomUpdateView.as_view(), name='operating_room_update'),
path('rooms/<int:pk>/delete/', views.OperatingRoomDeleteView.as_view(), name='operating_room_delete'),
path("availability/check/", views.check_room_availability, name="check_room_availability"),
# ============================================================================
# SURGICAL NOTE TEMPLATE URLS (FULL CRUD - Master Data)
# ============================================================================
path('templates/', views.SurgicalNoteTemplateListView.as_view(), name='surgical_note_template_list'),
path('templates/create/', views.SurgicalNoteTemplateCreateView.as_view(), name='surgical_note_template_create'),
path('templates/<int:pk>/', views.SurgicalNoteTemplateDetailView.as_view(), name='surgical_note_template_detail'),
path('templates/<int:pk>/update/', views.SurgicalNoteTemplateUpdateView.as_view(), name='surgical_note_template_update'),
path('templates/<int:pk>/delete/', views.SurgicalNoteTemplateDeleteView.as_view(), name='surgical_note_template_delete'),
# ============================================================================
# OR BLOCK URLS (LIMITED CRUD - Operational Data)
# ============================================================================
path('blocks/', views.ORBlockListView.as_view(), name='or_block_list'),
path('blocks/create/', views.ORBlockCreateView.as_view(), name='or_block_create'),
path('blocks/<int:pk>/', views.ORBlockDetailView.as_view(), name='or_block_detail'),
path('blocks/<int:pk>/update/', views.ORBlockUpdateView.as_view(), name='or_block_update'),
# Note: No delete view for OR blocks - use status updates instead
# ============================================================================
# SURGICAL CASE URLS (RESTRICTED CRUD - Clinical Data)
# ============================================================================
path('cases/', views.SurgicalCaseListView.as_view(), name='surgical_case_list'),
path('cases/create/', views.SurgicalCaseCreateView.as_view(), name='surgical_case_create'),
path('cases/<int:pk>/', views.SurgicalCaseDetailView.as_view(), name='surgical_case_detail'),
path('cases/<int:pk>/update/', views.SurgicalCaseUpdateView.as_view(), name='surgical_case_update'),
# Note: No delete view for surgical cases - use status updates instead
# ============================================================================
# SURGICAL NOTE URLS (APPEND-ONLY - Clinical Records)
# ============================================================================
path('notes/', views.SurgicalNoteListView.as_view(), name='surgical_note_list'),
path('notes/create/', views.SurgicalNoteCreateView.as_view(), name='surgical_note_create'),
path('notes/<int:pk>/', views.SurgicalNoteDetailView.as_view(), name='surgical_note_detail'),
path('notes/<int:pk>/preview/', views.surgical_note_preview, name='surgical_note_preview'),
# Note: No update/delete views for surgical notes - append-only for clinical records
# ============================================================================
# EQUIPMENT USAGE URLS (LIMITED CRUD - Operational Data)
# ============================================================================
path('equipment/', views.EquipmentUsageListView.as_view(), name='equipment_list'),
path('equipment/create/', views.EquipmentUsageCreateView.as_view(), name='equipment_create'),
path('equipment/<int:pk>/', views.EquipmentUsageDetailView.as_view(), name='equipment_detail'),
path('equipment/<int:pk>/update/', views.EquipmentUsageUpdateView.as_view(), name='equipment_update'),
# Note: No delete view for equipment usage - operational tracking data
# ============================================================================
# HTMX ENDPOINTS FOR REAL-TIME UPDATES
# ============================================================================
path('htmx/stats/', views.operating_theatre_stats, name='operating_theatre_stats'),
path('htmx/case-search/', views.case_search, name='case_search'),
# ============================================================================
# ACTION URLS FOR WORKFLOW OPERATIONS
# ============================================================================
# Case Workflow Actions
path('cases/<int:pk>/confirm/', views.confirm_case, name='confirm_case'),
path('cases/<int:pk>/prep/', views.prep_case, name='prep_case'),
path('cases/<int:pk>/start/', views.StartCaseView.as_view(), name='start_case'),
path('cases/<int:pk>/complete/', views.CompleteCaseView.as_view(), name='complete_case'),
path('cases/<int:pk>/cancel/', views.cancel_case, name='cancel_case'),
path('cases/<int:pk>/postpone/', views.postpone_case, name='postpone_case'),
path('cases/<int:pk>/reschedule/', views.reschedule_case, name='reschedule_case'),
# Other Workflow Actions
path('notes/<int:note_id>/sign/', views.sign_note, name='sign_note'),
path('rooms/<int:room_id>/update-status/', views.update_room_status, name='update_room_status'),
# ============================================================================
# API ENDPOINTS
# ============================================================================
path('api/', include('operating_theatre.api.urls')),
]