54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
from django.shortcuts import render, get_object_or_404
|
|
from . import models
|
|
from django.utils.translation import get_language
|
|
from . import forms
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
import ast
|
|
from .dashboard import get_dashboard_data
|
|
|
|
def job_list(request):
|
|
jobs = models.Job.objects.filter(is_published=True).order_by('-created_at')
|
|
lang = get_language()
|
|
return render(request, 'recruitment/job_list.html', {'jobs': jobs, 'lang': lang})
|
|
|
|
def job_detail(request, job_id):
|
|
job = get_object_or_404(models.Job, id=job_id, is_published=True)
|
|
form = forms.CandidateForm()
|
|
return render(request, 'recruitment/job_detail.html', {'job': job, 'form': form})
|
|
|
|
|
|
@login_required
|
|
def training_list(request):
|
|
materials = models.TrainingMaterial.objects.all().order_by('-created_at')
|
|
return render(request, 'recruitment/training_list.html', {'materials': materials})
|
|
|
|
|
|
def candidate_detail(request, candidate_id):
|
|
candidate = get_object_or_404(models.Candidate, id=candidate_id)
|
|
try:
|
|
parsed = ast.literal_eval(candidate.parsed_summary)
|
|
except:
|
|
parsed = {}
|
|
return render(request, 'recruitment/candidate_detail.html', {
|
|
'candidate': candidate,
|
|
'parsed': parsed,
|
|
})
|
|
|
|
|
|
def dashboard_view(request):
|
|
total_jobs = models.Job.objects.count()
|
|
total_candidates = models.Candidate.objects.count()
|
|
jobs = models.Job.objects.all()
|
|
|
|
job_titles = [job.title for job in jobs]
|
|
job_app_counts = [job.candidates.count() for job in jobs]
|
|
average_applications = round(sum(job_app_counts) / total_jobs, 2) if total_jobs > 0 else 0
|
|
|
|
context = {
|
|
'total_jobs': total_jobs,
|
|
'total_candidates': total_candidates,
|
|
'job_titles': job_titles,
|
|
'job_app_counts': job_app_counts,
|
|
'average_applications': average_applications,
|
|
}
|
|
return render(request, 'recruitment/dashboard.html', context) |