175 lines
6.4 KiB
Python
175 lines
6.4 KiB
Python
|
|
with open('core/views.py', 'r') as f:
|
|
lines = f.readlines()
|
|
|
|
new_lines = []
|
|
skip = False
|
|
for i, line in enumerate(lines):
|
|
if 'def voter_advanced_search(request):' in line:
|
|
new_lines.append(line)
|
|
# Reconstruct the whole function
|
|
new_lines.append(' """
|
|
')
|
|
new_lines.append(' Advanced search for voters with multiple filters.
|
|
')
|
|
new_lines.append(' """
|
|
')
|
|
new_lines.append(' selected_tenant_id = request.session.get("tenant_id")
|
|
')
|
|
new_lines.append(' if not selected_tenant_id:
|
|
')
|
|
new_lines.append(' messages.warning(request, "Please select a campaign first.")
|
|
')
|
|
new_lines.append(' return redirect("index")
|
|
|
|
')
|
|
new_lines.append(' tenant = get_object_or_404(Tenant, id=selected_tenant_id)
|
|
')
|
|
new_lines.append(' voters = Voter.objects.filter(tenant=tenant, is_inactive=False).order_by("last_name", "first_name")
|
|
|
|
')
|
|
new_lines.append(' form = AdvancedVoterSearchForm(request.GET)
|
|
')
|
|
new_lines.append(' if form.is_valid():
|
|
')
|
|
new_lines.append(' data = form.cleaned_data
|
|
')
|
|
new_lines.append(' if data.get("first_name"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(first_name__icontains=data["first_name"])
|
|
')
|
|
new_lines.append(' if data.get("last_name"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(last_name__icontains=data["last_name"])
|
|
')
|
|
new_lines.append(' if data.get("address"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(Q(address__icontains=data["address"]) | Q(address_street__icontains=data["address"]))
|
|
')
|
|
new_lines.append(' if data.get("voter_id"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(voter_id__iexact=data["voter_id"])
|
|
')
|
|
new_lines.append(' if data.get("birth_month"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(birthdate__month=data["birth_month"])
|
|
')
|
|
new_lines.append(' if data.get("city"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(city__icontains=data["city"])
|
|
')
|
|
new_lines.append(' if data.get("zip_code"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(zip_code__icontains=data["zip_code"])
|
|
')
|
|
new_lines.append(' if data.get("neighborhood"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(neighborhood__icontains=data["neighborhood"])
|
|
')
|
|
new_lines.append(' if data.get("district"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(district=data["district"])
|
|
')
|
|
new_lines.append(' if data.get("precinct"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(precinct=data["precinct"])
|
|
')
|
|
new_lines.append(' if data.get("email"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(email__icontains=data["email"])
|
|
')
|
|
new_lines.append(' if data.get("phone"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(get_phone_search_filters(data["phone"]))
|
|
')
|
|
new_lines.append(' if data.get("phone_type"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(phone_type=data["phone_type"])
|
|
')
|
|
new_lines.append(' if data.get("is_targeted"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(is_targeted=(data["is_targeted"] == "True"))
|
|
')
|
|
new_lines.append(' if data.get("target_door_visit"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(target_door_visit=(data["target_door_visit"] == "True"))
|
|
')
|
|
new_lines.append(' if data.get("door_visit"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(door_visit=(data["door_visit"] == "True"))
|
|
')
|
|
new_lines.append(' if data.get("voted"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(voted=(data["voted"] == "True"))
|
|
')
|
|
new_lines.append(' if data.get("candidate_support"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(candidate_support=data["candidate_support"])
|
|
')
|
|
new_lines.append(' if data.get("yard_sign"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(yard_sign=data["yard_sign"])
|
|
')
|
|
new_lines.append(' if data.get("window_sticker"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(window_sticker=data["window_sticker"])
|
|
')
|
|
new_lines.append(' if data.get("call_queue_status"):
|
|
')
|
|
new_lines.append(' voters = voters.filter(call_queue_status=data["call_queue_status"])
|
|
|
|
')
|
|
new_lines.append(' # Add donation amount filters
|
|
')
|
|
new_lines.append(' min_total_donation = data.get("min_total_donation")
|
|
')
|
|
new_lines.append(' max_total_donation = data.get("max_total_donation")
|
|
|
|
')
|
|
new_lines.append(' if min_total_donation is not None or max_total_donation is not None:
|
|
')
|
|
new_lines.append(' voters = voters.annotate(total_donation_amount=Coalesce(Sum("donations__amount"), Value(0), output_field=DecimalField()))
|
|
')
|
|
new_lines.append(' if min_total_donation is not None:
|
|
')
|
|
new_lines.append(' voters = voters.filter(total_donation_amount__gte=min_total_donation)
|
|
')
|
|
new_lines.append(' if max_total_donation is not None:
|
|
')
|
|
new_lines.append(' voters = voters.filter(total_donation_amount__lte=max_total_donation)
|
|
|
|
')
|
|
new_lines.append(' paginator = Paginator(voters, 50)
|
|
')
|
|
new_lines.append(' page_number = request.GET.get("page")
|
|
')
|
|
new_lines.append(' voters_page = paginator.get_page(page_number)
|
|
|
|
')
|
|
new_lines.append(' context = {
|
|
')
|
|
new_lines.append(' "form": form,
|
|
')
|
|
new_lines.append(' "voters": voters_page,
|
|
')
|
|
new_lines.append(' "selected_tenant": tenant,
|
|
')
|
|
new_lines.append(' "call_form": ScheduledCallForm(tenant=tenant),
|
|
')
|
|
new_lines.append(' }
|
|
')
|
|
new_lines.append(' return render(request, "core/voter_advanced_search.html", context)
|
|
')
|
|
new_lines.append(' skip = True
|
|
')
|
|
elif skip:
|
|
if line.startswith('@role_required') or line.startswith('def export_voters_csv'):
|
|
skip = False
|
|
new_lines.append('\n')
|
|
new_lines.append(line)
|
|
else:
|
|
new_lines.append(line)
|
|
|
|
with open('core/views.py', 'w') as f:
|
|
f.writelines(new_lines)
|