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