From 3ac4dc73fbd23fb44de3194d3dadd9a567b0301f Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 29 Jan 2026 19:21:27 +0000 Subject: [PATCH] Autosave: 20260129-192127 --- core/__pycache__/forms.cpython-311.pyc | Bin 19783 -> 19954 bytes core/__pycache__/models.cpython-311.pyc | Bin 27142 -> 27380 bytes core/__pycache__/views.cpython-311.pyc | Bin 42701 -> 42894 bytes core/forms.py | 3 ++- ...ondary_phone_voter_secondary_phone_type.py | 23 ++++++++++++++++++ ...voter_secondary_phone_type.cpython-311.pyc | Bin 0 -> 1132 bytes core/models.py | 3 +++ .../templates/core/voter_advanced_search.html | 6 +++++ core/templates/core/voter_detail.html | 15 ++++++++++++ core/templates/core/voter_list.html | 7 +++++- core/views.py | 4 +-- 11 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 core/migrations/0027_voter_secondary_phone_voter_secondary_phone_type.py create mode 100644 core/migrations/__pycache__/0027_voter_secondary_phone_voter_secondary_phone_type.cpython-311.pyc diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index dd564835ed6fc0224182c25d957bca1a837cb8a3..fdd70b94a7bf44d5acd87a7f079083ca2b017d0e 100644 GIT binary patch delta 3646 zcmbuCZBSHI7{|G=EU*hK8i*io3N9?jf*_#0*z*3Ott2m_nQa?fXKyaMaPEc4tYE?k zN6Ug^*5s5gQx;m9Zm*g)lQuX`6y@~6>r6BDq59B=tUlRH)A^rW7j`35g5l>m&w0*y z?)g8@Irlp8n(+HUA@=Q<7+nba`R>F{$&h`1d*esF`WB_K5pxr8HEoj$Jdqq;{-=Q?4IG=uAmgu<{@n|Uh#u6jw=(mwA z)RGe(r?;9yXG|}qt94oBd2IGA{Wdr0$(Kc^*rkvaST7$~24pdqbZWTV-zyR|(q@xf zl47%wayqIj7K-SXx_WIj9GhsIK1Gn}DRZW$Rc{pNo&s}~g^i4BNhuu4fYm?^(8Qp| z*lb-+yDWE!PN&T_E|4~6l?4V1sitS6*OkVGKP3DXa&IISPesh}P@#nWWH=%8(y_SA zv|hyQV_+g|X8)*R)vg_^O;eC7ntwfJ-5Rs_z!%E+X|RlG{bhFc;9oWaGmSN7bSh?Fv~1 z`xam&14|U9a&Ie>JgA_w7+V7%16*%4rp~U2?NX1}?CR}T=mKMcfvd@j?^)*7NzW&X zzT@M`S&|xBx|>2yA)|aB>a(iQJ@~YC9n%EJd4TTOFZ3~nmoueAKBM0k{zkg}I=9P? zDs5mjY35g-j@^B|m~bwHzHc_tuQOkrL+Jg82{@S03G`5w%PaPNzu0}ths#RgHGMlq zqC2hPY_h%1Tz1erqcK1v&sO8FK7roA8i4|lL(CSSk{(X~U!{~zw<41D(st1)Io$Me zjv?Y{wz7P~tB}TYVGe~3;u(M^xI%xKdRwAH&~$2PTMX@lSJW}|0|hfh�(qjL)W390u;KtkUZT=u~bzJ#3B=_Ii$+V}&^c zI*Rpy=eR&O3w#0{g+QKX3eAG{LAVssGb@emVKn_WEx$Td4KA7K`_!cI9^`l7`W}Eu zR#q87b;!3otulX!;WVpJ|8=XLV50}<_M(0N79D5T!IeIVkU>h%JiDbQ}?Zm#I+dyAH>hyk}@-S*ms)M*FC(EK%t5*efCg-MH3D_#ItL zcdyQB$Gd@D-GN^LL6`ryCir#V#%9SHhT!X*pC&q5d0zxF^asHyT1G3^v@Nu-{&>vH zG|?k#GHRif8fJGo`9rBu4U*IM32>H;ct1>LeQA3z47@`%<-5E$lZWryQn4WJ1B`wM zd<1;V_8uvueTw!u;4_Bc4bYLw)G9vbJX|cm1)!5*=J&!S7=hDhd;wU1ODz1<{6hb{ zHn)n$x%O@raem>C)n-;r zVZ}RypM($aRbco@9{!WMCG!g()sS6v?JmOeM+CkP3_r!gr#B|dFZ|<8ORIjoi||+B z1N;ye{wlrP delta 3588 zcmbtXdrXs86z7AsJj&bEf(nAXtOA1g0JTu%p#|kF#w@0(@NLwTukL<@DceA|X%;n$ zcyWny58aj##xlXWxMxH%r&h1{uA=6m=F^!bMPiqGFcI}14Jept&0U3aN&tlyU zNmmZp!f#ko!`~0*O^XWnu2Lhvmz3v8iYg1|qlMbUn0ixqz`|mFJ|;WOMC%^tpK`IT z0#$a(?QXUNo|Xa@@qc2BQYkm+OQa%h)mLX#KwU%7o80Dd%dCdh720eL#o@Nu45U{# zd&cxusp{LP2Kr^lYFNisVA)E*Du4w5FWxwtt=(x?)pptGwAqFw)?E*|Z># zW`1jKL0&egz52>dm!n;-amdaNrjmxu1Ec|R0J%KRSY%vGqBo&sYhzvEBfN9BS?jABw%J-*t(A4v&3+TnDPqSh@YYK3uz(o1J%nt}RpaH!K5gS; zRjK@=jB5T@>Y20xm=qFt^&PU>&K$el4wu66p)TMP^Kz>}l~;!*wY%AJ=(huw5m4E% zR9M$j0YX|$hq={&QeH4WMZXr}I)Is9%$%d$N8(oAIbWVUK%QIk)57}?lGYpTP;K^h zx1&d9B16#;Xa-;XUxb9vri6g1M`LBAYv(RHNh+o6aMCI9^+MD$-7?#&%5LVyQqc|m z9`Hsv6xD54+GX;|UFj*!q9u?>P+!ncv<3Esw($1_jeAq93PnTCE+yz>?x0y!kAC5Q zr{BvKcSSQ?hgPc(Nyq7_t`4ux-sS36+`bA3l2DR* zQ*>w65we;U2V=Jb;ta@z99Fd zg)3k+brVKmIK_*vCr^@c55Jw88$<*jElKrc=G~II1Q~B&WiT1+P0|H1qKDD{V}#pH znUT+vAN6h+w;2}k5!1vBESx|@z_Y}{OTOkg;b&ma(!-$)#9=`w1MiUXAYYT8_g@AM z<}VNLKY&H=60|Zw#(NkClVOSt=!{s*Psc+dCLXOl7FPH0)yvX!aHnd;nR;Q_Pcu+* z3NZi&h!P`ztH|l2<&>WmrT76-4wH18&n1{fRh5Y`?*JdDn2;l*P;xt}dHF+9`i1f4k=hbQH;%2}j z;6Xx*c=%*gwzOr?g)P%F#O1kRiIif7b@fbK!Nt6!EV~w$KfPvxzwsd#`LHJRW8Oro zR1HDEZOu=YrAZ_FLfLcT+dUi?SU0|TO-3cC^G4X6PLY5&x`q<-eZxPY8Q&9Q+7Ip+ zrU66z%$k>dtu`ih{p;GK#Iu<70L}qErhP_9i_b&;6z~~AXtJd0O%ZkA_NqB%vG8*k zi+lPDNUc~l`E0{@;vtMe7zYUB36V&7dHVE;WX+yP4zDO*z+*Q=o4WfaRF!4E0cW#> zzX}_G5XLbQ;jdEoYmXQDTuq+&2RND~^mW((zJo9h5TUP&oqw~@@Oa@3)=cwVIGZK> zP1peLKo|#z@He??Rh|@Y(mp7~M_YWePGKl+4RL@(!9@3n8VUl%o`h$!-yt6552Ds} qxjMR?ayk2+udBVbB3;7&EYssr?O?+1V(yPX3ya5GHx{lzlK%qv&L77B diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 411f104be508670ad8099bd733de3947fb033c4a..5bcaf3e5f8f5ac3c378d94efe450ff93bc8f4cea 100644 GIT binary patch delta 1922 zcmZuxZA?>F7`|_53l3wroq>lDRE9hr7w5$&w}e;}2tmrArLkg3Huo(=3|!!?_T5-cwus;Z5$7=e%Ff zd){;IeLD;feu4F0CMW9z_B=TI`uHXHh4oi6;iU3g=0z1Y+p@rh<2HM|s1m&K6FK;A zmIZS0g3S(j9PPMf%Z<82QCluk2qFA?yM{Oo4dZdJN zwlg3IXW1Kh`irGJNt}cJl6heiq@1~g{w-4OoY4QmyznaYmnve;KoWeX%ocmqa80>g zIs{=ROd#GK-KWu%1pdlX@wG8=gNj`bh@&nKniok8k*KTvxGt3|3Px9kKxp=}=mJ-X0w2xO^=_#=d%lc{IbQ-ma2~~P<;A59rHKE7K zs#99i11{~O4 z1Z8-9`@HrZt03P;b4@w?fvq(=Q)Q~TqJOH6So1O5#1eM~+{I>hCLCAB-2XwTG5@{M zurYrz=b~rHShsAf3mfZZ+pk-SKCB2^iWcRi`mUux?~-M7*)kfoj4r9o%Kkb#q!(-Q z?+MR=A?5T-7Xi|-&(p5m!1g3R#Pc3Aq~c|dBPE#(1RL2KoJMz7Av$*KfnB=WN zu7M_U>lm--c5}~$O1LT{NK0bx~a#Nl;L1-{D99Z4SElIeW4(i zlM6{$N3n^t3HA!Lk#6$HNU&Kkw~N4jI&3`Hx${#tllwbY!Gp`Y+Om1nE-F$<@q8pM zVkKnTfxaZOu7K7AZXD`(i=|VcwT?Sr!oNCuOcmsAq3~7)&N!K$mVasafOw5Q8Hxo58y6=3Y4OzU&_sjXd^EvKdw z)(3NOOtM2Bo|N(-AHQZ;fDx%sU&y^_6svc0dkvPlG95*MoPaa~oyD_4KLlJeiJc{Z z>=~hR?X2(;bgokmySfcXc>|g$4Pz$9n4wg* zGsJeU=vStk76aNT&G6Z9M$9h=L1WCGGck2D7sE9bcDpv_nA8U2_TdCN9bJq53I{k) zu5cVQtt^yr<3&fgQ@WJ}F@Lnod*%}OTgMzJ!$^Ocd}8_bwUY8wg5 zN=c}1T>hQyL-QaA52l5imV%GXpJ!aLc&=JJvzp^c>Q5WpBBbEsO>3YO-M(4f9THo@ zd7lTa<89w=?AUw?Zs1>=GaQSg#Ds)ug@&)Z9D^}(w5!?G|AN}QB?oN9+Po#@eUeqU;Lxxf=#j_e;c$qTrMQWf zNR6zbCfJIN-9?84ZgP;s1FW{&Fk&!b`R=>yA2C*I!8Sm%0cl}fFp);nTfXo?sNjjeZ@UH-Jkvh9 znyzs<(}J#VXoTH@k^y+K#ftupRA|BWj*f!p>qIFsNVb=(VrDJqhUD-IBLU?RootC_ z_7R0(CtIOumN^S;`-Z@W&K)*&Zr}5u%O#2huXXmBYnU0!uL&O=m1EiEE;Ag!iLMSW z&(3E|IioY)Lka6>yN)bg7N540&K}a4o|lv4rvrjkEZYAq_^E$2@xVI(M*Oh5Si76K zg7`!Co6(P^8GC!`VF*9%Ig-p1_mfsL7WI}SH;@!TFW@PI8ISgU0u5ZRs?RHGyO?Jj zCk}oA6Ic+av=kBjIUY{1jo=X;2@EE+lZRjgZwDgKj+f9<2rz0;pAu0J5c`X%A%I9q#s=Uwi*w~}#8qi!6y0RI87FQ$qB diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 645f02c0b18ab44be520f30048863fd861853d13..0f3b89b43ff6cffdd1f6b1c0e2a5d755f88d0197 100644 GIT binary patch delta 472 zcmX?mmZ|SN6Yp|fUM>b8*t@zq^UFqFnKEt(AdeY{KWA}GKImvZd46W)<|k#$9PGDh z`D%CC}K)6$YV?~tl?Xr z15(TaWaz>edLV`ZP`N%#dAjH_Mh1q}Knwwl3_Z6uXEn@VWCYsSlqp-qADo(;pO=zY zRH+b@!P?%>rmgk@Mu5S?Y|glb6hDXSAKH zGux7}dUM+B1FVv&vf=I6Yp|fUM>b8_;sr)vtuK#Oc}QrkjD(fpDnm1A9OUIJU_E?^OG`W4)%k! zd^Nlaq$V5siB4v&U(J-IKKWF=0#6ZBia{P@ieU}k0>?PRy7vpD}^7#STV^Ul^{ zGXv@=a-3{CTbZdRXjfK@UYBpVMTZt;{B<>X{0=@ldv6{i*@ bZd$YlVrP*ZNJ-`78n^`MiVcLH4e)PTfy*Kl{S~U@@&s*>PFA73` zgi@^1KjB~sgbhRy#R2MI2X_=l!AL=m5mi1SsxsVGi=a)Aw*G65O0_v;mG*?&QZlpS zH@TbmQ5a`>C!#Efy&_WVk__wzn*bY#AqP|BC=@rbqbi7L?Sd4Proy7P%OX%Ls?pN6 zz6ot?!Pj5g<&%U?<*1y@(L~hvim6G5wuetf4rXd9PK8#XxpSHEyyyyA)VzqZY;1D! z&RyaL3FE{M0bNgYO{kl&tn@YlOLjhHUKCQ7uaIsl3fcT#9Y{lp(n8>dOE4^VnFK6s zCM`<^O^l0#Zii)>#L}YA0-Dta(vW1O%Pdt;X+<5jYCZuRe<3PJdMpT5%^ARB+q;M_ zt(va^`!+rbME1mCK;g32ihPg7S(&m$Hw_YA1;?yqWECRm5R#dM0KGI|AP*DrCUpZr zQD~HPSx8yv`7Gw*Vq}#Els*#Fxh7O&rsZ;}XJ*ueNy+Q+6CHpP9kp!Hgq<#=VUpTx znR#gvaa%BsyROGd?#TG=r8dqfVH3=ZaOs~FcrcZKUvPJ$5PZvbompIk@AWUeZ8 zeeGFpBID90vsW40y?A+dq_JCTtl#L>8b9j48auV=-?iypZ8|S&hPjUb4h0Ov+$>^t zZpZyMN9Y57sKEA8nG@USys|IxP~u>|>QGHzdnz72Uhtl^w9KGwH*7`|bV1HqPPpIM z74e(=_bNz7m8t%L-RIXp#qh{{ voter.get_phone_type_display }} {% endif %} + {% if voter.secondary_phone %} +
+ {{ voter.secondary_phone }} +
{{ voter.get_secondary_phone_type_display }}
+
+ {% endif %} {% if voter.is_targeted %} diff --git a/core/templates/core/voter_detail.html b/core/templates/core/voter_detail.html index e862f4e..3e4c973 100644 --- a/core/templates/core/voter_detail.html +++ b/core/templates/core/voter_detail.html @@ -92,6 +92,13 @@ {{ voter.get_phone_type_display }} {% endif %} + {% if voter.secondary_phone %} +
  • + + {{ voter.secondary_phone }} + {{ voter.get_secondary_phone_type_display }} +
  • + {% endif %}
  • {{ voter.birthdate|date:"M d, Y"|default:"N/A" }} @@ -453,6 +460,14 @@ {{ voter_form.phone_type }} +
    + + {{ voter_form.secondary_phone }} +
    +
    + + {{ voter_form.secondary_phone_type }} +
    {{ voter_form.email }} diff --git a/core/templates/core/voter_list.html b/core/templates/core/voter_list.html index 7c97803..70a76e2 100644 --- a/core/templates/core/voter_list.html +++ b/core/templates/core/voter_list.html @@ -45,7 +45,12 @@
    {{ voter.address|default:"No address provided" }}
    {{ voter.district|default:"-" }} - {{ voter.phone|default:"-" }} + + {{ voter.phone|default:"-" }} + {% if voter.secondary_phone %} +
    {{ voter.secondary_phone }} + {% endif %} + {% if voter.is_targeted %} Yes diff --git a/core/views.py b/core/views.py index 43c2add..7013db4 100644 --- a/core/views.py +++ b/core/views.py @@ -531,14 +531,14 @@ def export_voters_csv(request): writer = csv.writer(response) writer.writerow([ 'Voter ID', 'First Name', 'Last Name', 'Nickname', 'Birthdate', - 'Address', 'City', 'State', 'Zip Code', 'Phone', 'Phone Type', 'Email', + 'Address', 'City', 'State', 'Zip Code', 'Phone', 'Phone Type', 'Secondary Phone', 'Secondary Phone Type', 'Email', 'District', 'Precinct', 'Is Targeted', 'Support', 'Yard Sign', 'Window Sticker', 'Notes' ]) for voter in voters: writer.writerow([ voter.voter_id, voter.first_name, voter.last_name, voter.nickname, voter.birthdate, - voter.address, voter.city, voter.state, voter.zip_code, voter.phone, voter.get_phone_type_display(), voter.email, + voter.address, voter.city, voter.state, voter.zip_code, voter.phone, voter.get_phone_type_display(), voter.secondary_phone, voter.get_secondary_phone_type_display(), voter.email, voter.district, voter.precinct, 'Yes' if voter.is_targeted else 'No', voter.get_candidate_support_display(), voter.get_yard_sign_display(), voter.get_window_sticker_display(), voter.notes ])