from django.contrib.auth.decorators import login_required from django.db.models import Q from django.shortcuts import get_object_or_404, render from contacts.models import Channel from leads.models import Lead @login_required def lead_list(request): leads = Lead.objects.select_related("contact", "attribution").all() q = (request.GET.get("q") or "").strip() status = (request.GET.get("status") or "").strip() if q: leads = leads.filter( Q(contact__first_name__icontains=q) | Q(contact__last_name__icontains=q) | Q(contact__email__icontains=q) | Q(contact__phone__icontains=q) | Q(message__icontains=q) ) if status: leads = leads.filter(status=status) return render( request, "leads/list.html", { "leads": leads[:200], "status_choices": Lead.Status.choices, "q": q, "status_filter": status, }, ) @login_required def lead_detail(request, pk): lead = get_object_or_404( Lead.objects.select_related( "contact", "attribution", "attribution__visit" ).prefetch_related("notes", "contact__consents"), pk=pk, ) consent_map = {c.value: False for c in Channel} for record in lead.contact.consents.all(): consent_map[record.channel] = record.opted_in return render( request, "leads/detail.html", {"lead": lead, "consent_map": consent_map}, )