56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from django.contrib import messages
|
|
from . import models
|
|
from .utils import extract_summary_from_pdf
|
|
|
|
from django.contrib import admin
|
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
|
from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
|
|
from django.contrib.auth.models import User, Group
|
|
|
|
from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm
|
|
from unfold.admin import ModelAdmin
|
|
|
|
|
|
admin.site.unregister(User)
|
|
admin.site.unregister(Group)
|
|
|
|
|
|
@admin.register(User)
|
|
class UserAdmin(BaseUserAdmin, ModelAdmin):
|
|
form = UserChangeForm
|
|
add_form = UserCreationForm
|
|
change_password_form = AdminPasswordChangeForm
|
|
|
|
|
|
@admin.register(Group)
|
|
class GroupAdmin(BaseGroupAdmin, ModelAdmin):
|
|
pass
|
|
|
|
|
|
@admin.register(models.Job)
|
|
class JobAdmin(ModelAdmin):
|
|
list_display = ('title', 'is_published', 'posted_to_linkedin', 'created_at')
|
|
list_filter = ('is_published', 'posted_to_linkedin')
|
|
search_fields = ('title', 'description_en', 'description_ar')
|
|
|
|
@admin.action(description="Parse selected resumes")
|
|
def parse_resumes(modeladmin, request, queryset):
|
|
for candidate in queryset:
|
|
if candidate.resume:
|
|
summary = extract_summary_from_pdf(candidate.resume.path)
|
|
candidate.parsed_summary = str(summary)
|
|
candidate.save()
|
|
messages.success(request, f"Parsed {queryset.count()} resumes successfully.")
|
|
|
|
@admin.register(models.Candidate)
|
|
class CandidateAdmin(ModelAdmin):
|
|
list_display = ('name', 'email', 'job', 'applied', 'created_at')
|
|
list_filter = ('applied', 'job')
|
|
search_fields = ('name', 'email')
|
|
# readonly_fields = ('parsed_summary',)
|
|
actions = [parse_resumes]
|
|
|
|
@admin.register(models.TrainingMaterial)
|
|
class TrainingMaterialAdmin(ModelAdmin):
|
|
list_display = ('title', 'created_by', 'created_at')
|
|
search_fields = ('title', 'content') |