""" Django admin configuration for HR app. """ from django.contrib import admin from django.utils.translation import gettext_lazy as _ from .models import Attendance, Schedule, Holiday, LeaveRequest, LeaveBalance @admin.register(Attendance) class AttendanceAdmin(admin.ModelAdmin): """Admin interface for Attendance model.""" list_display = ['employee', 'date', 'check_in', 'check_out', 'hours_worked', 'status', 'tenant'] list_filter = ['status', 'date', 'tenant'] search_fields = ['employee__username', 'employee__first_name', 'employee__last_name', 'notes'] readonly_fields = ['id', 'hours_worked', 'created_at', 'updated_at'] date_hierarchy = 'date' fieldsets = ( (None, { 'fields': ('employee', 'date', 'tenant', 'status') }), (_('Time'), { 'fields': ('check_in', 'check_out', 'hours_worked') }), (_('Notes'), { 'fields': ('notes',), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) def save_model(self, request, obj, form, change): """Auto-calculate hours_worked on save.""" super().save_model(request, obj, form, change) @admin.register(Schedule) class ScheduleAdmin(admin.ModelAdmin): """Admin interface for Schedule model.""" list_display = ['employee', 'day_of_week', 'start_time', 'end_time', 'duration_hours', 'is_active', 'tenant'] list_filter = ['day_of_week', 'is_active', 'tenant'] search_fields = ['employee__username', 'employee__first_name', 'employee__last_name'] readonly_fields = ['id', 'duration_hours', 'created_at', 'updated_at'] fieldsets = ( (None, { 'fields': ('employee', 'day_of_week', 'tenant', 'is_active') }), (_('Time'), { 'fields': ('start_time', 'end_time', 'duration_hours') }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) @admin.register(Holiday) class HolidayAdmin(admin.ModelAdmin): """Admin interface for Holiday model.""" list_display = ['name', 'date', 'is_recurring', 'tenant'] list_filter = ['is_recurring', 'date', 'tenant'] search_fields = ['name', 'description'] readonly_fields = ['id', 'created_at', 'updated_at'] date_hierarchy = 'date' fieldsets = ( (None, { 'fields': ('name', 'date', 'tenant', 'is_recurring') }), (_('Description'), { 'fields': ('description',), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) @admin.register(LeaveRequest) class LeaveRequestAdmin(admin.ModelAdmin): """Admin interface for Leave Request model.""" list_display = ['employee', 'leave_type', 'start_date', 'end_date', 'days_requested', 'status', 'tenant'] list_filter = ['status', 'leave_type', 'start_date', 'tenant'] search_fields = ['employee__username', 'employee__first_name', 'employee__last_name', 'reason'] readonly_fields = ['id', 'days_requested', 'created_at', 'updated_at'] date_hierarchy = 'start_date' fieldsets = ( (None, { 'fields': ('employee', 'leave_type', 'tenant', 'status') }), (_('Leave Period'), { 'fields': ('start_date', 'end_date', 'days_requested') }), (_('Details'), { 'fields': ('reason', 'attachment') }), (_('Approval'), { 'fields': ('reviewed_by', 'reviewed_at', 'reviewer_comments'), 'classes': ('collapse',) }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), ) def save_model(self, request, obj, form, change): """Auto-calculate days_requested on save.""" super().save_model(request, obj, form, change) @admin.register(LeaveBalance) class LeaveBalanceAdmin(admin.ModelAdmin): """Admin interface for Leave Balance model.""" list_display = ['employee', 'year', 'leave_type', 'total_days', 'used_days', 'remaining_days', 'tenant'] list_filter = ['year', 'leave_type', 'tenant'] search_fields = ['employee__username', 'employee__first_name', 'employee__last_name'] readonly_fields = ['id', 'remaining_days', 'utilization_percentage', 'created_at', 'updated_at'] fieldsets = ( (None, { 'fields': ('employee', 'year', 'leave_type', 'tenant') }), (_('Balance'), { 'fields': ('total_days', 'used_days', 'remaining_days', 'utilization_percentage') }), (_('Metadata'), { 'fields': ('id', 'created_at', 'updated_at'), 'classes': ('collapse',) }), )