Files
JooL_website/apps/careers/admin.py
2026-05-12 16:54:38 +00:00

73 lines
2.8 KiB
Python

from django.contrib import admin
from django.utils import timezone
from .models import JobApplication, JobOffer
@admin.register(JobOffer)
class JobOfferAdmin(admin.ModelAdmin):
list_display = ['title', 'department', 'contract_type', 'location', 'status', 'application_deadline', 'created_at']
list_filter = ['status', 'department', 'contract_type', 'is_remote']
search_fields = ['title', 'location', 'description']
prepopulated_fields = {'slug': ('title',)}
readonly_fields = ['published_at', 'created_at', 'updated_at']
list_editable = ['status']
date_hierarchy = 'created_at'
actions = ['publish_offers', 'close_offers']
fieldsets = (
("Informations générales", {
'fields': ('title', 'slug', 'department', 'contract_type', 'location', 'is_remote', 'salary_range')
}),
("Contenu de l'offre", {
'fields': ('description', 'requirements', 'nice_to_have')
}),
('Publication', {
'fields': ('status', 'application_deadline', 'published_at', 'created_at', 'updated_at')
}),
)
@admin.action(description='Publier les offres sélectionnées')
def publish_offers(self, request, queryset):
queryset.update(status=JobOffer.Status.PUBLISHED, published_at=timezone.now())
@admin.action(description='Fermer les offres sélectionnées')
def close_offers(self, request, queryset):
queryset.update(status=JobOffer.Status.CLOSED)
@admin.register(JobApplication)
class JobApplicationAdmin(admin.ModelAdmin):
list_display = ['full_name_col', 'email', 'job', 'status', 'applied_at']
list_filter = ['status', 'job__department', 'job']
search_fields = ['first_name', 'last_name', 'email', 'job__title']
readonly_fields = [
'first_name', 'last_name', 'email', 'phone', 'linkedin_url',
'cover_letter', 'cv_file', 'portfolio_url', 'applied_at', 'job',
]
list_editable = ['status']
date_hierarchy = 'applied_at'
actions = ['mark_shortlisted', 'mark_rejected']
fieldsets = (
('Candidat', {
'fields': ('first_name', 'last_name', 'email', 'phone', 'linkedin_url', 'portfolio_url')
}),
('Documents', {
'fields': ('job', 'cv_file', 'cover_letter')
}),
('Traitement RH', {
'fields': ('status', 'admin_notes', 'applied_at')
}),
)
@admin.display(description='Candidat')
def full_name_col(self, obj):
return obj.full_name
@admin.action(description='Marquer comme présélectionné(e)')
def mark_shortlisted(self, request, queryset):
queryset.update(status=JobApplication.Status.SHORTLIST)
@admin.action(description='Marquer comme rejeté(e)')
def mark_rejected(self, request, queryset):
queryset.update(status=JobApplication.Status.REJECTED)