Template
Populate the client website template with catalog feature flags.
Extract always-on public/portal/UTM plus optional email_sms, directmail, blog, payments, social, and social_ai so new client sites can be bootstrapped from this seed. Refs #1 Refs #2 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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},
|
||||
)
|
||||
Reference in New Issue
Block a user