From e4aeae1b747dbed6475b51ea12b40e5b1138813c Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 24 Jan 2026 22:51:48 +0000 Subject: [PATCH] .8 --- core/__pycache__/forms.cpython-311.pyc | Bin 11403 -> 10186 bytes core/__pycache__/urls.cpython-311.pyc | Bin 2902 -> 2419 bytes core/__pycache__/views.cpython-311.pyc | Bin 27217 -> 23935 bytes core/forms.py | 13 --- core/templates/base.html | 3 - core/templates/core/event_type_list.html | 127 ----------------------- core/urls.py | 8 +- core/views.py | 59 +---------- 8 files changed, 2 insertions(+), 208 deletions(-) delete mode 100644 core/templates/core/event_type_list.html diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index c88bd47319fb21df0e6315887b6708e7d303cf6e..a81cff1886e5fce313d3b1554c1cd3f566a17db1 100644 GIT binary patch delta 1285 zcmbu8KTH#G6vuhQ7Nxd@O2LA(JyQN0B#d%L2{q~p3i zlT4=-WfeqU?$LowK%Z2F%eIr2Au5t`8@7^S7{yJy$90SXahxFAL?^F9Xmtd;yLj2e zI7L{sif&$yGI|)jj4-2*pj!!kzHW*R4nug&Q42D@IMj--91nf{91d_L5W07Y203K- zG46BYmp~hSa#rJ8X8?aXtuTne(rHYTZCezoX~(hh7{qd0(h4k{<<3hCnX%h}Q+|75 zoH4;@WlS>8Gt7eG0%f}`C|q=hwM;y#YMFjb%(p6vno;*<6{VBh)(d-0@%9HkYpJ9tHY2mBtKWLS>`E^;%ZHMUh+rHJ6MWw zM~3l_q(+%Z@*o%OUDDTgHJQmq<07lhs8=xTb-@^pd$$V_1#U5$o1`7QzjtYuA#FNNm^J3m zANbE43Vt$UDnEyM3I7_AEAWjx;Woz9_@<3BH{O%LuI5_XB31D`>)U|I<_{fC7=*7y ig?T@@qJ1;=zW-fOhc{X(@m|aGGD@RHcND}?y6G=~TMn!M delta 1947 zcmbuAUrbw79LM`ByQNV2kM<&eRw!lAUBF^D%yf;?K?@nMQYhl)mevMtpzcb^y&VSJ zQiwi~=mX}*1BpKQvh86B+W25hd@(VZCfZ^Xh-Q&@9|j2z#Kgq&yRAsIJaKRH={djO z@0|1do}TmT4`UzQGCedJt2ONT@!Gw_l>HM^J&bMiCq^ruf-iGX?}Hb7Z1AtfSZrE~E6TJeNwL^tkOwo%Rlfm@;gn&5yTL+S znJ0!yZTBQaS0$8Kd^(j_6y5BKMNfhvOy(bYjxoFQdmg0g=qAbpz(6C^$|yC1rBacFH#iw+J4>TZG$$Qa$n=W-F8Q16w0pWl4MR zd)uew6OYntgi9>(HHhM#If}FVSKKVK4Pa}X7b3W7ZOBM1HH|E zlout@qJ(f!lme0}$mRU9F+@)F^mkCpO$ZalaoFHOOKSs6V2#zm-DAcWj<(({9>T&; zxk#aEi6G@b(tGtDlP|TjyD-Xf==$FP8Xq@V8T01F7AESTwsUX zZf#iOc5CZ5yRz1fH66X!!#QCX!<=O8e^8OCVv)t?eg!_`Jm-{F)-db3Dqu#7t2!Gu za9{I|7N5I#)Kzu@VD7vdujtiaGW6DRq!XQ)^3ltgD>#g4G*Ql#r?+R-55snL& zz!eHtxthhX$de_Db(bA=$GcRr`zhvBKF3^JTbgg!xV^)>w|RGt7xKKYuhCWop}@7^ zGn->m{7iZh%y;+YZ2r8>zpnvf5Oyv6Mor%0+OY`R7U9vAtx&deAZH2WErF~haI~wh z`Pi^NlGi))dUsy`;*P#|Ti?4io9!FVzC4lBNAmheR{f;emwcH-maVHxty-Sz;zsg7^&Os!xPS*8bqMaS1FmYI)XH-`xG{F1 L`VLQtP?P@~0okZP diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a7894eba8073fccf8e316c89e839d72ca293dd4..1b0776e95743fabd97c525aaa8382914dafe5174 100644 GIT binary patch delta 110 zcmca6_E|_{IWI340}%Z2F3tSP#=!6x#DM`ZDC6@gri~g)n7Gn~qQp`(gBdinHm5P4 tVrKT!6raq)Q8sxRhcCB0P%R@67yoA5{Ep)@BfqXVKT`uY2o}i##Q{Us7$N`w delta 539 zcmew?bWKcSIWI340}ycNmu7ZzFfcp@abQ3S%J^)>yisEb)5Hy|{Fr5RfhwC6!_r%%Ews`5MzH z=K3m$+{DbhlGMD!yyR5<)UwpP65W!@g4AODTl`>NJct*clUZC+C4)<8VoHksEj}dW zK!GZ4T&it=_E~{V%}j~4(@#ywEJ3vlBvPeIjCMQyl+>Kml2rX$f=ISQ#QZd+Cog6z z6D$ISZjm&IkO2|0lf~ErxRrrSMj$RuWZGQF{+Y3qje(W3!Q}#{@`BJSs#X^qgD$WH zUt|fs!V-Lgg##p^zC!ehrtJlnkP9rK7g<8Du!KS-%yzI|vGBbRl6rw9?IKIs6_zxp lgvAckD^`IQBC;>A diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 935de857c2681e227d22321594bf67211289627d..2874f74cdbe29b35c50741f093c21ad1ce5453ee 100644 GIT binary patch delta 4254 zcmb_fU2GKB72a9fi?Mh8Z-ak#Fvc(>7#l+|n1I11wh4rwrfG0uto7cpy|CVeySw~s zn%Gf@A|VKno0K+bP)HOANm_!oDJnvRRLVnykdg{src%|uP*vrjeL$5^)%JXMc6Vl% zvB*P5_P6){p6{G*&b{;9ZRNjLm9h&yUx|yJE!z{JT^moAEmT&WUi#jQ;$ki~KkOgz zyIs0}uZkgf^hM_tm+Le7H=mJKR&vxevY3?;wlOc^66PapXJv#-Svlb{Rzaw-O2Xx= zitsU3P53ygAzZ;~2|HLF;YzlEu#+_}q@ONUPq>OT5O%Xh!qsg44_#W5NGktSibUA` z$-Hah;9D^++HR9}6+w zO&xqSpjVukzf&1V{dN8w_qrCeG!rE2c1IIxfa_``dPtoPL;{nc$mDvJ4^XF8%;#aC z58wx^75BaV#y%7=+whn>#R{mRsw(dnD}A-fHnG(=s%%YtcP}ODeD&$F7EQ z;G)8Z#n+Wrm3}c>wR_W6YW3*_{_57+J`^_th5;`Edc}q6uJ$cdj6oMFN04(QvQ4IrrKwuO{IU@tckML=>!u)Wmw($r^ooxEJpj48QikK3c)Qw6=yrS-@IZP{1qz=)KR>#v0 z{)gJAB!zd;(%P4>)lUGD)F4WuVrY@S2}03Ic^_IZ+istDZPDU2ucPq|f*4|*_B?)a zysxuRoFAtFSR-~zv@|x0&aSSM)+!3t*-WNho&>=4Px6-ulU2hJ3Sb}@4@DztfH9qQ zaPZ-W#Qi19XG}7v=S5%^Z3_W%#n(_e3XqPqh|1^{qC=9M=S&v;#|VtlkY!G6o=co< zFIgakR!+8!**f`K;(GgCWvfs->QmR3exb}{iDqQhhE-u5HS9$hs!rC}2`Bcm0A+y; zWej=~aEd^yNQV*)7W*<(X92nFXH5D|%%w{teUGGXl-YX zoS|W#V(1NmSuwr*M%o=MJNMY!!QZBC>4#kIj8fp7+^@6&W0K(Y%heJv4fu#-mX78s@e)8e}}9{ zR%WTrCE{PuusL{@gU2ku=pZtm%Kw`S84cTy~+rhVf4`eidR=g!ayT8-nYXDP7(20A6(3UpX!`gv5H z=sG20U;50K-Z~~mdYkH`I?JHWaA=<%4oyX)j9(PTd;d*A+uT#1`f$TNx0QAC^vUJ+ zAH#+V0E=I(BR^^UEJo(?GrYmD9*EFQjWTt>Mh})6^JetJ!El0Z03c;}^uu%!iJ7dA zVzJyvYv%D|_$)@b;{613AYN%c9YEPb*F12`rG%~7T)C7w(Kku=1L={nE$fvEE8u40 z70>spw(xrArvGTEW)kYJV4@{bX||(CD@~F5>@mD73J1=nU%YDr$?ql6=LerNIbaug zMn0&rCsO^O9*M`Yw;v3$j!a9tjp%UFZY4S_?fx3oUjnQEc8;Ph4;Pt`oMfD<;?W^L zU7TMYYF4hK-Wz%xQNnHEFT+2xbIu-*GOu#Eb&9qUuMD<}uePUO%`9*JCH2igRI-?b znR!G%Lz_iU2KsZffrO2yq$q_uhz?1%7;K?jv42NhyA|}`V1(2vOwQG+_6$Yc8C+>?cMlp(u(-+ zF#0;+2H-2eVuEM2LN5Jn-P9M0yW<@m+4zQN2>N^0VsH<@N!L=+PRj?xfuR41?7CW+ zdB{jLSzdup4G(=n>3Tfhz@WGlY*7ZqycC zP&|_J8gW;@BW_IiXI_Qr1AuLS34qMW$5DC;j delta 6176 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 ANdN!< diff --git a/core/forms.py b/core/forms.py index 6ce5422..2208cad 100644 --- a/core/forms.py +++ b/core/forms.py @@ -30,7 +30,6 @@ class VoterForm(forms.ModelForm): self.fields['yard_sign'].widget.attrs.update({'class': 'form-select'}) class InteractionForm(forms.ModelForm): - # ... (rest of the file remains the same) class Meta: model = Interaction fields = ['type', 'date', 'description', 'notes'] @@ -107,15 +106,3 @@ class EventForm(forms.ModelForm): for field in self.fields.values(): field.widget.attrs.update({'class': 'form-control'}) self.fields['event_type'].widget.attrs.update({'class': 'form-select'}) - -class EventTypeForm(forms.ModelForm): - class Meta: - model = EventType - fields = ['name', 'is_active'] - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - for field in self.fields.values(): - if not isinstance(field.widget, forms.CheckboxInput): - field.widget.attrs.update({'class': 'form-control'}) - self.fields['is_active'].widget.attrs.update({'class': 'form-check-input'}) \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1fed896..c922003 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -40,9 +40,6 @@ -
Admin Panel diff --git a/core/templates/core/event_type_list.html b/core/templates/core/event_type_list.html deleted file mode 100644 index fa9e81b..0000000 --- a/core/templates/core/event_type_list.html +++ /dev/null @@ -1,127 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block content %} -
-
-
- -

Event Types

-
- -
- -
-
- - - - - - - - - - {% for type in event_types %} - - - - - - - - - {% empty %} - - - - {% endfor %} - -
NameStatusActions
{{ type.name }} - {% if type.is_active %} - Active - {% else %} - Inactive - {% endif %} - - -
- {% csrf_token %} - -
-
- - No event types defined yet. -
-
-
-
- - - -{% endblock %} diff --git a/core/urls.py b/core/urls.py index 1bf1955..a1d2ea2 100644 --- a/core/urls.py +++ b/core/urls.py @@ -24,10 +24,4 @@ urlpatterns = [ path('voters//event-participation/add/', views.add_event_participation, name='add_event_participation'), path('event-participation//edit/', views.edit_event_participation, name='edit_event_participation'), path('event-participation//delete/', views.delete_event_participation, name='delete_event_participation'), - - # Maintenance - path('maintenance/event-types/', views.event_type_list, name='event_type_list'), - path('maintenance/event-types/add/', views.event_type_add, name='event_type_add'), - path('maintenance/event-types//edit/', views.event_type_edit, name='event_type_edit'), - path('maintenance/event-types//delete/', views.event_type_delete, name='event_type_delete'), -] +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index 80e7a0c..c56d0e8 100644 --- a/core/views.py +++ b/core/views.py @@ -4,7 +4,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from django.db.models import Q, Sum from django.contrib import messages from .models import Voter, Tenant, Interaction, Donation, VoterLikelihood, EventParticipation, Event, EventType, InteractionType, DonationMethod, ElectionType -from .forms import VoterForm, InteractionForm, DonationForm, VoterLikelihoodForm, EventParticipationForm, EventTypeForm +from .forms import VoterForm, InteractionForm, DonationForm, VoterLikelihoodForm, EventParticipationForm import logging logger = logging.getLogger(__name__) @@ -315,63 +315,6 @@ def delete_event_participation(request, participation_id): messages.success(request, "Event participation removed.") return redirect(reverse('voter_detail', kwargs={'voter_id': voter_id}) + '?active_tab=events') -def event_type_list(request): - """ - Maintenance page for Event Types. - """ - selected_tenant_id = request.session.get('tenant_id') - if not selected_tenant_id: - messages.warning(request, "Please select a campaign first.") - return redirect('index') - - tenant = get_object_or_404(Tenant, id=selected_tenant_id) - event_types = EventType.objects.filter(tenant=tenant) - - context = { - 'event_types': event_types, - 'selected_tenant': tenant, - 'form': EventTypeForm(), - } - return render(request, 'core/event_type_list.html', context) - -def event_type_add(request): - selected_tenant_id = request.session.get('tenant_id') - tenant = get_object_or_404(Tenant, id=selected_tenant_id) - - if request.method == 'POST': - form = EventTypeForm(request.POST) - if form.is_valid(): - event_type = form.save(commit=False) - event_type.tenant = tenant - event_type.save() - messages.success(request, "Event type added.") - return redirect('event_type_list') - -def event_type_edit(request, type_id): - selected_tenant_id = request.session.get('tenant_id') - tenant = get_object_or_404(Tenant, id=selected_tenant_id) - event_type = get_object_or_404(EventType, id=type_id, tenant=tenant) - - if request.method == 'POST': - form = EventTypeForm(request.POST, instance=event_type) - if form.is_valid(): - form.save() - messages.success(request, "Event type updated.") - return redirect('event_type_list') - -def event_type_delete(request, type_id): - selected_tenant_id = request.session.get('tenant_id') - tenant = get_object_or_404(Tenant, id=selected_tenant_id) - event_type = get_object_or_404(EventType, id=type_id, tenant=tenant) - - if request.method == 'POST': - try: - event_type.delete() - messages.success(request, "Event type deleted.") - except Exception as e: - messages.error(request, f"Cannot delete event type: {e}") - return redirect('event_type_list') - def voter_geocode(request, voter_id): """ Manually trigger geocoding for a voter, potentially using values from the request.