Marwan Alwali 7e014ee160 update
2025-11-16 14:56:32 +03:00

69 lines
4.0 KiB
Python

"""
Appointments app URL configuration.
"""
from django.urls import path
from . import views
from .package_api_views import AvailablePackagesAPIView
app_name = 'appointments'
urlpatterns = [
# Appointment List & Calendar
path('', views.AppointmentListView.as_view(), name='appointment_list'),
path('calendar/', views.AppointmentCalendarView.as_view(), name='appointment_calendar'),
# Appointment CRUD
path('create/', views.AppointmentCreateView.as_view(), name='appointment_create'),
path('<uuid:pk>/', views.AppointmentDetailView.as_view(), name='appointment_detail'),
path('<uuid:pk>/quick-view/', views.AppointmentQuickViewView.as_view(), name='appointment_quick_view'),
path('<uuid:pk>/update/', views.AppointmentUpdateView.as_view(), name='appointment_update'),
path('<uuid:pk>/pdf/', views.AppointmentPDFView.as_view(), name='appointment_pdf'),
path('<uuid:pk>/email-pdf/', views.AppointmentEmailPDFView.as_view(), name='appointment_email_pdf'),
# State Machine Transitions
path('<uuid:pk>/confirm/', views.AppointmentConfirmView.as_view(), name='appointment_confirm'),
path('<uuid:pk>/reschedule/', views.AppointmentRescheduleView.as_view(), name='appointment_reschedule'),
path('<uuid:pk>/cancel/', views.AppointmentCancelView.as_view(), name='appointment_cancel'),
path('<uuid:pk>/arrive/', views.AppointmentArriveView.as_view(), name='appointment_arrive'),
path('<uuid:pk>/start/', views.AppointmentStartView.as_view(), name='appointment_start'),
path('<uuid:pk>/complete/', views.AppointmentCompleteView.as_view(), name='appointment_complete'),
path('<uuid:pk>/no-show/', views.AppointmentNoShowView.as_view(), name='appointment_no_show'),
# Patient Confirmation (Phase 5) - Public URLs (no login required)
path('confirm/<str:token>/', views.ConfirmAppointmentView.as_view(), name='patient_confirm'),
path('decline/<str:token>/', views.DeclineAppointmentView.as_view(), name='patient_decline'),
# Availability API
path('api/available-slots/', views.AvailableSlotsView.as_view(), name='available_slots'),
path('api/available-rooms/', views.AvailableRoomsView.as_view(), name='available_rooms'),
path('api/check-consent/', views.CheckConsentStatusView.as_view(), name='check_consent_status'),
path('api/available-packages/', AvailablePackagesAPIView.as_view(), name='available_packages'),
# Calendar Events API
path('events/', views.AppointmentEventsView.as_view(), name='appointment-events'),
# ============================================================================
# Session URLs (Group Session Support)
# ============================================================================
# Session List & Management
path('sessions/', views.SessionListView.as_view(), name='session_list'),
path('sessions/available/', views.AvailableGroupSessionsView.as_view(), name='available_group_sessions'),
path('sessions/create/', views.GroupSessionCreateView.as_view(), name='group_session_create'),
path('sessions/<uuid:pk>/', views.SessionDetailView.as_view(), name='session_detail'),
# Session Actions
path('sessions/<uuid:pk>/add-patient/', views.AddPatientToSessionView.as_view(), name='session_add_patient'),
path('sessions/<uuid:pk>/start/', views.SessionStartView.as_view(), name='session_start'),
path('sessions/<uuid:pk>/complete/', views.SessionCompleteView.as_view(), name='session_complete'),
path('sessions/<uuid:pk>/cancel/', views.SessionCancelView.as_view(), name='session_cancel'),
# Participant Actions
path('participants/<uuid:pk>/check-in/', views.SessionParticipantCheckInView.as_view(), name='participant_check_in'),
path('participants/<uuid:pk>/update-status/', views.SessionParticipantStatusUpdateView.as_view(), name='participant_update_status'),
# Package Auto-Scheduling
path('packages/<uuid:package_purchase_id>/schedule/', views.schedule_package_view, name='schedule_package'),
]