Initial commit
This commit is contained in:
72
apps/careers/admin.py
Normal file
72
apps/careers/admin.py
Normal file
@@ -0,0 +1,72 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user