68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
from django.db import IntegrityError
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
from django.views.generic import DetailView, FormView, ListView, TemplateView
|
|
|
|
from .forms import JobApplicationForm
|
|
from .models import JobApplication, JobOffer
|
|
|
|
|
|
class JobListView(ListView):
|
|
template_name = 'careers/job_list.html'
|
|
context_object_name = 'jobs'
|
|
|
|
def get_queryset(self):
|
|
qs = JobOffer.objects.filter(status=JobOffer.Status.PUBLISHED)
|
|
dept = self.request.GET.get('dept')
|
|
if dept:
|
|
qs = qs.filter(department=dept)
|
|
return qs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
ctx = super().get_context_data(**kwargs)
|
|
ctx['departments'] = JobOffer.Department.choices
|
|
ctx['active_dept'] = self.request.GET.get('dept', '')
|
|
return ctx
|
|
|
|
|
|
class JobDetailView(DetailView):
|
|
template_name = 'careers/job_detail.html'
|
|
context_object_name = 'job'
|
|
|
|
def get_object(self):
|
|
return get_object_or_404(JobOffer, slug=self.kwargs['slug'], status=JobOffer.Status.PUBLISHED)
|
|
|
|
|
|
class ApplyView(FormView):
|
|
template_name = 'careers/apply.html'
|
|
form_class = JobApplicationForm
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
self.job = get_object_or_404(JobOffer, slug=kwargs['slug'], status=JobOffer.Status.PUBLISHED)
|
|
if not self.job.is_open:
|
|
return redirect('careers:job_detail', slug=self.job.slug)
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
ctx = super().get_context_data(**kwargs)
|
|
ctx['job'] = self.job
|
|
return ctx
|
|
|
|
def form_valid(self, form):
|
|
application = form.save(commit=False)
|
|
application.job = self.job
|
|
try:
|
|
application.save()
|
|
except IntegrityError:
|
|
form.add_error('email', 'Vous avez déjà postulé à cette offre avec cet email.')
|
|
return self.form_invalid(form)
|
|
return redirect('careers:apply_success', slug=self.job.slug)
|
|
|
|
|
|
class ApplySuccessView(TemplateView):
|
|
template_name = 'careers/apply_success.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
ctx = super().get_context_data(**kwargs)
|
|
ctx['job'] = get_object_or_404(JobOffer, slug=self.kwargs['slug'])
|
|
return ctx
|