feat: replace pipeline profile and source health

This commit is contained in:
Jens
2026-07-22 20:10:34 +02:00
parent 3371455255
commit 4fa2a34447
14 changed files with 282 additions and 130 deletions
+38 -3
View File
@@ -7,6 +7,7 @@ from django.db.models import Count, F, Q
from django.http import Http404, HttpResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils import timezone
from django.utils.http import url_has_allowed_host_and_scheme
from django.views.decorators.http import require_POST
from django.views.generic import DetailView, ListView, TemplateView, UpdateView
@@ -18,6 +19,7 @@ from .models import Application, Feedback, JobPosting, ScoreRun
from .services.applications import (
build_application_export,
build_print_html,
change_application_status,
delete_application_dossier,
track_application_changes,
)
@@ -206,8 +208,10 @@ class ApplicationListView(LoginRequiredMixin, ListView):
context_object_name = "applications"
def get_queryset(self):
return Application.objects.filter(user=self.request.user).select_related(
"job", "job__employer"
return (
Application.objects.filter(user=self.request.user)
.select_related("job", "job__employer")
.prefetch_related("timeline_events")
)
def get_context_data(self, **kwargs):
@@ -222,6 +226,16 @@ class ApplicationListView(LoginRequiredMixin, ListView):
}
for status, label in Application.Status.choices
]
context["status_choices"] = Application.Status.choices
context["open_count"] = sum(
item.status not in {Application.Status.REJECTED, Application.Status.WITHDRAWN}
for item in applications
)
context["follow_up_count"] = sum(
bool(item.follow_up_date and item.follow_up_date <= timezone.localdate())
for item in applications
)
context["today"] = timezone.localdate()
return context
@@ -231,7 +245,11 @@ class ApplicationUpdateView(LoginRequiredMixin, UpdateView):
template_name = "applications/edit.html"
def get_queryset(self):
return Application.objects.filter(user=self.request.user).select_related("job")
return (
Application.objects.filter(user=self.request.user)
.select_related("job", "job__employer")
.prefetch_related("timeline_events")
)
def form_valid(self, form):
previous = (
@@ -269,6 +287,23 @@ def application_export(request, pk: int):
return response
@login_required
@require_POST
def application_status(request, pk: int):
application = get_object_or_404(Application, pk=pk, user=request.user)
try:
change_application_status(
application=application,
user=request.user,
status=request.POST.get("status", ""),
)
except ValueError as exc:
messages.error(request, str(exc))
else:
messages.success(request, "Pipelinestatus bijgewerkt.")
return redirect("jobs:applications")
@login_required
def application_print(request, pk: int):
application = get_object_or_404(