diff --git a/NorahUniversity/__pycache__/settings.cpython-313.pyc b/NorahUniversity/__pycache__/settings.cpython-313.pyc index 3876470..ffd727a 100644 Binary files a/NorahUniversity/__pycache__/settings.cpython-313.pyc and b/NorahUniversity/__pycache__/settings.cpython-313.pyc differ diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 82d1381..cee4284 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -30,13 +30,6 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ - "unfold", # before django.contrib.admin - "unfold.contrib.filters", # optional, if special filters are needed - "unfold.contrib.forms", # optional, if special form elements are needed - "unfold.contrib.inlines", # optional, if special inlines are needed - "unfold.contrib.import_export", # optional, if django-import-export package is used - "unfold.contrib.guardian", # optional, if django-guardian package is used - "unfold.contrib.simple_history", 'django.contrib.admin', 'django.contrib.humanize', 'django.contrib.auth', diff --git a/recruitment/__pycache__/admin.cpython-313.pyc b/recruitment/__pycache__/admin.cpython-313.pyc index 33016b7..d3967fd 100644 Binary files a/recruitment/__pycache__/admin.cpython-313.pyc and b/recruitment/__pycache__/admin.cpython-313.pyc differ diff --git a/recruitment/admin.py b/recruitment/admin.py index a84bdde..67c8f21 100644 --- a/recruitment/admin.py +++ b/recruitment/admin.py @@ -1,110 +1,10 @@ -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 .models import FormTemplate, FormStage, FormField, FormSubmission, FieldResponse -from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm -from unfold.admin import ModelAdmin +from .models import FormTemplate, FormStage, FormField,FieldResponse,FormSubmission -admin.site.unregister(User) -admin.site.unregister(Group) +admin.site.register(FormTemplate) +admin.site.register(FormStage) +admin.site.register(FormField) +admin.site.register(FormSubmission) +admin.site.register(FieldResponse) - -@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 = ('first_name','last_name','phone', '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') - - -class FormFieldInline(admin.TabularInline): - model = FormField - extra = 0 - fields = ('label', 'field_type', 'required', 'order', 'is_predefined') - ordering = ('order',) - -class FormStageInline(admin.TabularInline): - model = FormStage - extra = 0 - fields = ('name', 'order', 'is_predefined') - ordering = ('order',) - inlines = [FormFieldInline] - -@admin.register(FormTemplate) -class FormTemplateAdmin(admin.ModelAdmin): - list_display = ('name', 'created_by', 'created_at', 'is_active', 'get_stage_count') - list_filter = ('is_active', 'created_at', 'created_by') - search_fields = ('name', 'description', 'created_by__username') - inlines = [FormStageInline] - readonly_fields = ('created_at', 'updated_at') - - def get_stage_count(self, obj): - return obj.get_stage_count() - get_stage_count.short_description = 'Stages' - -@admin.register(FormStage) -class FormStageAdmin(admin.ModelAdmin): - list_display = ('name', 'template', 'order', 'is_predefined') - list_filter = ('is_predefined', 'template') - search_fields = ('name', 'template__name') - ordering = ('template', 'order') - -@admin.register(FormField) -class FormFieldAdmin(admin.ModelAdmin): - list_display = ('label', 'field_type', 'stage', 'required', 'order', 'is_predefined') - list_filter = ('field_type', 'required', 'is_predefined', 'stage__template') - search_fields = ('label', 'stage__name', 'stage__template__name') - ordering = ('stage', 'order') - -@admin.register(FormSubmission) -class FormSubmissionAdmin(admin.ModelAdmin): - list_display = ('template', 'applicant_name', 'applicant_email', 'submitted_at') - list_filter = ('submitted_at', 'template') - search_fields = ('applicant_name', 'applicant_email', 'template__name') - readonly_fields = ('submitted_at',) - -@admin.register(FieldResponse) -class FieldResponseAdmin(admin.ModelAdmin): - list_display = ('field', 'submission', 'display_value') - list_filter = ('field__field_type', 'submission__template') - search_fields = ('field__label', 'submission__applicant_name') - readonly_fields = ('display_value',) \ No newline at end of file