""" HR app URLs with comprehensive CRUD operations. """ from django.urls import path, include from . import views app_name = 'hr' urlpatterns = [ # ============================================================================ # DASHBOARD AND OVERVIEW # ============================================================================ path('', views.HRDashboardView.as_view(), name='dashboard'), # ============================================================================ # EMPLOYEE URLS (FULL CRUD - Master Data) # ============================================================================ path('employees/', views.EmployeeListView.as_view(), name='employee_list'), path('employees/create/', views.EmployeeCreateView.as_view(), name='employee_create'), path('employees//', views.EmployeeDetailView.as_view(), name='employee_detail'), path('employees//update/', views.EmployeeUpdateView.as_view(), name='employee_update'), path('employees//delete/', views.EmployeeDeleteView.as_view(), name='employee_delete'), # ============================================================================ # DEPARTMENT URLS (FULL CRUD - Master Data) # ============================================================================ path('departments/', views.DepartmentListView.as_view(), name='department_list'), path('departments/create/', views.DepartmentCreateView.as_view(), name='department_create'), path('departments//', views.DepartmentDetailView.as_view(), name='department_detail'), path('departments//update/', views.DepartmentUpdateView.as_view(), name='department_update'), path('departments//delete/', views.DepartmentDeleteView.as_view(), name='department_delete'), path('departments//activate/', views.activate_department, name='activate_department'), path('departments//deactivate/', views.deactivate_department, name='deactivate_department'), path('departments/bulk-activate/', views.bulk_activate_departments, name='bulk_activate_departments'), path('departments/bulk-deactivate/', views.bulk_deactivate_departments, name='bulk_deactivate_departments'), path('departments//assign-head/', views.assign_department_head, name='assign_department_head'), path('api/department-hierarchy/', views.get_department_hierarchy, name='get_department_hierarchy'), path('htmx/department-tree/', views.department_tree, name='department_tree'), path('search/departments/', views.department_search, name='department_search'), # ============================================================================ # SCHEDULE URLS (LIMITED CRUD - Operational Data) # ============================================================================ path('schedules/', views.ScheduleListView.as_view(), name='schedule_list'), path('schedules/create/', views.ScheduleCreateView.as_view(), name='schedule_create'), path('schedules//', views.ScheduleDetailView.as_view(), name='schedule_detail'), path('schedules//update/', views.ScheduleUpdateView.as_view(), name='schedule_update'), # Note: No delete view for schedules - use status updates instead # ============================================================================ # SCHEDULE ASSIGNMENT URLS (LIMITED CRUD - Operational Data) # ============================================================================ path('assignments/', views.ScheduleAssignmentListView.as_view(), name='schedule_assignment_list'), path('assignments/create/', views.ScheduleAssignmentCreateView.as_view(), name='schedule_assignment_create'), path('assignments//update/', views.ScheduleAssignmentUpdateView.as_view(), name='schedule_assignment_update'), # Note: No detail/delete views for assignments - managed via schedules # ============================================================================ # TIME ENTRY URLS (RESTRICTED CRUD - Operational Data) # ============================================================================ path('time-entries/', views.TimeEntryListView.as_view(), name='time_entry_list'), path('time-entries/create/', views.TimeEntryCreateView.as_view(), name='time_entry_create'), path('time-entries//', views.TimeEntryDetailView.as_view(), name='time_entry_detail'), path('time-entries//update/', views.TimeEntryUpdateView.as_view(), name='time_entry_update'), # Note: No delete view for time entries - use status updates instead # ============================================================================ # PERFORMANCE REVIEW URLS (FULL CRUD - Operational Data) # ============================================================================ path('reviews/', views.PerformanceReviewListView.as_view(), name='performance_review_list'), path('reviews/create/', views.PerformanceReviewCreateView.as_view(), name='performance_review_create'), path('reviews//', views.PerformanceReviewDetailView.as_view(), name='performance_review_detail'), path('reviews//update/', views.PerformanceReviewUpdateView.as_view(), name='performance_review_update'), path('reviews//delete/', views.PerformanceReviewDeleteView.as_view(), name='performance_review_delete'), path('reviews//complete/', views.complete_performance_review, name='complete_performance_review'), # ============================================================================ # TRAINING RECORD URLS (FULL CRUD - Operational Data) # ============================================================================ path('training-management', views.TrainingManagementView.as_view(), name='training_management'), path('training/', views.TrainingRecordListView.as_view(), name='training_record_list'), path('training/create/', views.TrainingRecordCreateView.as_view(), name='training_record_create'), path('training//', views.TrainingRecordDetailView.as_view(), name='training_record_detail'), path('training//update/', views.TrainingRecordUpdateView.as_view(), name='training_record_update'), path('training//delete/', views.TrainingRecordDeleteView.as_view(), name='training_record_delete'), # ============================================================================ # HTMX ENDPOINTS FOR REAL-TIME UPDATES # ============================================================================ path('htmx/stats/', views.hr_stats, name='hr_stats'), path('htmx/employee-search/', views.employee_search, name='employee_search'), # ============================================================================ # ACTION URLS FOR WORKFLOW OPERATIONS # ============================================================================ path('clock-in/', views.clock_in, name='clock_in'), path('clock-out/', views.clock_out, name='clock_out'), path('time-entries//approve/', views.approve_time_entry, name='approve_time_entry'), path('schedules//publish/', views.publish_schedule, name='publish_schedule'), # ============================================================================ # API ENDPOINTS # ============================================================================ path('api/', include('hr.api.urls')), ]