From 8c9978b83ff29a8a81932a4a01750ee5f9c312e8 Mon Sep 17 00:00:00 2001 From: Cody Evans <1123code@gmail.com> Date: Wed, 29 Apr 2020 13:39:49 -0700 Subject: [PATCH 01/35] This doesn't work but google does --- db.sqlite3 | Bin 143360 -> 241664 bytes myapp/__pycache__/forms.cpython-37.pyc | Bin 2589 -> 2688 bytes myapp/__pycache__/models.cpython-37.pyc | Bin 1555 -> 1604 bytes myapp/__pycache__/views.cpython-37.pyc | Bin 2480 -> 2526 bytes myapp/forms.py | 46 +++--------------- myapp/migrations/0005_auto_20200401_1323.py | 19 ++++++++ .../0005_auto_20200401_1323.cpython-37.pyc | Bin 0 -> 708 bytes myapp/models.py | 18 +++---- myapp/templates/registration/login.html | 22 ++++++++- myapp/views.py | 8 +-- mysite/__pycache__/settings.cpython-37.pyc | Bin 2310 -> 2703 bytes mysite/__pycache__/urls.cpython-37.pyc | Bin 980 -> 1067 bytes mysite/settings.py | 33 ++++++++++++- mysite/urls.py | 3 ++ 14 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 myapp/migrations/0005_auto_20200401_1323.py create mode 100644 myapp/migrations/__pycache__/0005_auto_20200401_1323.cpython-37.pyc diff --git a/db.sqlite3 b/db.sqlite3 index 96feb8650dbc126a5e2810a36e2ff181ca70dd2d..1f7cfbca7fc27f1bf443702e138f96ff594ed197 100644 GIT binary patch literal 241664 zcmeI53v?UVd6+Q(NDw4}k+jRj?n+ugkhBuaB{?&|;6ZsULnKH+OMpv?@AU>507G&> zyo3i|PHKazb=o|7Qs*QmX;0!dC+*2O$!U|ciJRjlr?%U=sZSox^Q39wq|W2S&cjY> z`!u%O{`bxRGkB3)b-f#De@Yr*?*0G&{{MF$GxyFV=H9}bQkC7C#d2P%x_zcICWbM+ z*X=f$Odo`QH{stT{A1wX_rO0Z{A>J>w3B{5Xd3ss`#{RVeu>E5WWUCKh5gdd^Fu#x z|1H~>?LXT8iM}oCKe2q?{0;Lw^I_Akon-K&{Q9kPHrLJ=Q?Dq6jJz+^s@ut0MJ^|| z%Eel#qJCB~>S+=_g#A8|OLOUDt)Sd*7k^@EF&bHlx|b8Nh2^L_mY9yNxjpStCm8j( z=M$Yu9`_9obxg^4UT}M;d*F}9Tc12@b8Us0x}-;-=9c7gUa3@+Vxf}MKa(Ir{|+)w~-v+RJYZV59-S5D<_ORz~Uo$(1`iql(82ca{)+fRqA-XxDH=G3u4lWH*o z!CrMj)r_`OjX@+`EL7z}HCa6<$)rgMoBm)x_NQpo=yGhAI?;2Jy{s7g)}=}NX;T0< z?>TI)gHh&))vH8T=_nvw%*X{PFDE%(O8J7Kq}PV7Pom^0>*R5AqU_I;dgUb}WfDVs_e zis>!caO7ACIWH+Wy`-S1mjwF6(W=LK`N4iy z^b%vD!(ruq4sO?yP*ETc_c!E|c7ww=KMoxw25hcyn0XM?>sM_{dhb#@Mn|f>OU-u( zJybJLt-R@t8K~<)ksGLQ#u!sS({FQKzRc8j+JI8#G%{N+a1RBmwGDvzpw zKDJq?#MO2|KM%m&Gx=vay4q)RjgB&}eL#;#r$~d+Py4$>rsuv1;faRupgP-c368JO zOjasv6K5EqZCPwCpN~1J(Hiff*(J%^ zTJv2b-h|rcjmW`a-TUsf(u}Elw)bUoKWW8-CbHrK=ib0itr<&~|nR3(!!jf$bTqmz(v3A2x9Anr**t&&jr<-qFr5} z_rGfm4z4?J7HnE>#e}K)fmz}@u{BGxM$2S}wbL=_%!+$pXk>Qo$vqQf+ z^ut5nI&@|5PX~W`usZnOL5uw}_V2T=+ebhZe~>{kALhBxd9ZP#J3Q83m?54?ye$agP zvwbGli;)UU^ef=Mkd$&&cz}^9!qP*5&MRtir?xmA4hO?rh7~%f(w+d8I+GLFc=oXT=3>o;Ns0l{s8VvAwZEXXCz4( zoS);9yif2o3gmdVz)cFiNq=xW;0yD7&^OX&x(M;f>Vpu_Z!6I^=HuL4aMJIe^!dg^ z!64YW`D9CpenW{qAD4u3{c4GA$|6){;N}x8%08pA5Ki*`9?C)h+QH3pEy_@tuymuw z>JvgqKHP}4tz_QEheF(0P`=g#b!?!3mJj*fd#2AcG8-W?cmTsEYbCn6R4Nzu4-8Lu zw07HCW-tU6geev*#2Xekt?{W#31pVh(JI=EK%)qTW}RSUSu?_gH6wJ5nXdJn#*irT zL2U8o}g5qO>siEHWlPKJ|Ny61QRbcOh6ByU0er5 z7ekYUT231$+8}cRAMm}`4mKKf%|V;iZ8X^wOVzG{1VRB`3{MS!g+^V&KxweheFSKA zBM{_xF>uEQMphf4G)60ZfrzfSo=`~v5!~_J>F+aLn~iAeKNKUO2z>L!-6mf32^DEU z-SCn@!XJ+HLB|1~GI^x{CVXUZ86Iwx4`@A;h1g;txtWu;lIiWD0_y@@O$i+D7b8|M z1(Y>Yf^JH4i*{&eK3z?4eqQ7_3+=`Y6UTOAF%;tcfeAA(g;AAuZim)2+BkYLt+nhiDc3sf1 zTqJ-5kN^@u0!RP}AOR$R1dsp{csvMPzG#_cT9#{*+8J!BpbMDRCoPsSMtgov=g(yN zZFl}}ll8)LmRt62%5;tP?30%33|(MM!rIrSl9MftVap|k%&6&hZ3|m7_1Q;8EEAd- zY^<)q;uhJ&VSes{WvZ)fZH?6Rltr{_pVhTenE#hy-ROya%cxq0zWxznS(oKXBM1_f znf<4xr|hbChGHEK%jE&;AYE-^f74_=f8KJl7a_B&&*E#CHSU>lLhBf@w?i9YAk>bX z2p0!I*y;SFiM`2QWdDl&H2dG#Uts?^TVvDgcd<*(Z#e%5GVuoqAOR$R1dsp{Kmter z2_OL^fCP}h+fU%4_4<|8NwT^uKo=dIT-b<2glM~+L@>({&Hshh`!FIvw}Fxoty zZis+sHvASD{H8qY9~gStdj48VuC@p;=(M^<7`lEz4)(KF*Lii3L0gI#7_qvps40f& zzwJru#q&&KUz7HK{{`!{D~xeRgyD0a!#XlTmmA1_53AEU;-Y7C`M~mob>uQV)t4g7 z;L1fiT}Nqbh#>p_oz72~*uP|dm;G<-e_%htekWUHQ|vu2-z_}=Kl^0oVmyuo&TRR!|7#ms?Yz=GEnfvmia$<{vR3& zn%KXFC;$JM{TcR$+1J@TyUNb8e)ckZhGm?8?fiY`FFQZ#{1NBt&VuuO&RM76yyUby zzUcTJ$A5JEYsU{c9ysnhQjV7$?{SPfT*KcO{@n1VhyTs+_YU75UK)P)@a5tDp}!pZ z-Jwqm{lw4@41I8DYbXH);tvu)0!RP}AOR$R1dsp{cytInWo5<~=dL2}X+Si=3%ztr)4@?j6Qv_$-)y><~rlh4MQ4Fy%;u{)xIU;St}zl!>y*(tO+%%)x4TD?y@oy%&?&dHGS-Y zl?gLLw3v>krY}5aWnN^4w4yq)N7ZbtxQ^_1owqVUW{4Eok>{oE4C=*#6xow~;~6XC zV+M^SYB|@{9AjZx&hr%NV6z-8`5J3wE-`i$AUxW=de+KZVeAcVka9&$Y2bnskJHLr zWZtcSRZr|YXSH8vsO82peCv}|`zWKCZ6sP~qGq#^Xg*`LU!!fYkwWJG zX7;Nl_UmxKA0&VTkN^@u0!RP}AOR$R1dsp{KmthMaUx)~m>9FgVzQI{{}%RhCibiF z8vvhsoI=D{kN^@u0!RP}AOR$R1dsp{Kmter3B02S3|MR=UdCh@Fl(R8Himw(o5=j% zbcP)82MHhnB!C2v01`j~NB{{S0VIF~kN^^RTnW(U|4z}wzT*5T_z!=O01`j~NB{{S z0VIF~kN^@u0!RP}=mZWd!=_|p;QWYVz#eg3j;&T_H~leg>YjWjb8kitROc4=B3p7s zS(~4oSh9{& z!8UhLjY#q0Qtay8+0=SXxgVOHiO(;`4iD#MB6(#uI~R@4^E8T&`<@3Ftd{wn)R>?he@U_Z+KH2V|m zzhpnc{t)|p?Dw$W!PeRLvo*HJDr}m4m0e{Q*q7KSdy5UTK6Z?~&R%BEvm-3a+F6V9 z8_usfzvTRa^G}?gb^fmNH=Muh{FL+K&W}NX_=5zH01`j~NB{{S0VIF~kN^@u0!ZK_ z0(};SafawINRI(}6v@%yr$-+>3iQa6<1j~$6ZAMvk7MLG^a4GO(&M}6(MyhlH|X&? zJw8v5*T~U+l^(CqqlX?ZljDG!9xu`3bM$zT9Bmiq@jN{~OOMZxWB=3i=%UA`=y8M` z`<|r7C+P7UJ)R{;>lu1v>Cs7#4sx^%)8i054$`BY9L)ptXrsq|dhD}W?2MHhEaU+1 z|FhHg|Ka!lpVZ(m9|<4LKmter z2_OL^fCP{L5Yfb;)H zzYZ}1B!C2v01`j~NB{{S0VIF~kN^@u0w)o``Tt3TFdqpZ0VIF~kN^@u0!RP}AOR$R z1dza^PXOotkA59u1V{i0AOR$R1dsp{Kmter2_OL^fCNq=;IMt!#4?{Uu~(hHZvU>|iuzf}Bm)vJ$eB>8UEs;7#b{(H>W(F*qqZ+I?=jfQWTnDZF)3y8 zN+FpmZZ&PC#eiQpXe0xxNmr91WLx^t>3t0b0s0X1sYz5 z$#k($l?&Bm^`ImtA39j|B)7!;14UhM=fAE~mH8#e4$3#_1<>Yn` z+Rra)9xX*~&qcda003?U;@gtT?!^3(JFz@B=YDxH7LP2hyI+c~yCcg>^RWaNiboSm zFStEYx~dcl$*Pi1OoT*U}ezu(pssm~?3oL4FpsGmww|4iB}znMyjn?kzjwAxX0 zp~|zZt+%&e56fyR?yW{B>BW)e;jP~~XLId9$E&mj(>AWqQxZkk?-RK+mrm9S%6+{k zRs0DpfaOGNVObq)V1Q_sY7P+HjkZUjnl=s>&^{Wf5W(bGn`|+)(g%kGLT^^gVcj4t?$Q+I~K)`J)Ye?b%wN?d;*l4SnCNaiJMxr#l@34wcos zKVc;E4n1#r*>&j>^PwxP$eJ()dqC5uzhhP!z+W-`_;6-6K8KrF+ogdKqZv`9|sFmT`dlLY;#2-%!8YHgQ6AIUTb>IwC6aw^wh2f% zIg+SNZ8DWtw#pKj@>Dt!%q?~sb5UL4p=v}bl??MEQEZtX5np@ff@)5YVcyj-E%V~@ z|F$&^JVgRX00|%gB!C2v01`j~NB{{S0VMDk5^z|5+;q--XtI97e8~EpiX$?-GxVPZ zpSJ&reZhXg_Gh-A?El;TpXknI7E?b^R}_1yP$RI}AXA11%w#!HOa(VX zX))9^)n3Y|w!}lWE|3M#H*Q*6J?y1O)`;5O@_4O3&U}mO)-C2iR9!dhrQOq?>#a*u zJ>?#1i7H)|;kkdebtYJ)ufSFb;|f&$jN7;b-M&SkxdiN@V5Hu;S+@`z2tn1AtZ? zCYw?^*HB#SGN*#AP6i7X^7Z1-jpPaF|?s=Jdn2w+t_6m%WWUr6BUsB3)lC~&G zOb3KOz}G5rrPa;W%&z*Xd#!@RH$zz-@6BkxYu?-I($K1$(`kF>J$H#%$AdZ)`(m3w63am>@G2OYzs>%#YUj&@RTd2>2+G? zrEd08b5lwgHW88*rCuugvpJ}FePX|B z_Hr-YhUe$J{`pe=ny!(P(S{rgirHZFL{N)4V961N%`C5?bqwI?$ILAZm2GFnA_t=kak4VmtwAo^RJR4U0z z6$a5xCm@Gx+S`Rzt+p@SKRSA5;jXsVjS~&M)vcCV_SUanhy7ZkE&H|f$EHc+R!4Gg zD{T6M0oku^LeS-$TB~f_(UOL%=k~N>cnGdblZM<@EL=`obIwCNEhnxy}RjCM*?l7VF9+EUAtx@&zm1GdPmWVrrkw9 zeXdK-*K;4L`?q869G#6Lqjm)|DxG?aY{sm2(zaXE)>ZRezvoKx?%lfghLl80VIF~kN^@u0!RP} zAOR$R1dzbnM*#Q#zkTenWF&wDkN^@u0!RP}AOR$R1dsp{KmuTB!C2v z01`j~NB{{S0VIF~kN^@u0&gDyGXJ-;pEj{yWB;1{GW+N3=h)w8e~0}HB;gMdKmter z2_OL^fCP{L5IBqGoAmN9bm!kaGThF%+9iA=f|B{r^E4cj&(@FA0&VTkN^@u0!RP}AOR$R z1dzZxia^kAH$~Vn2g5J|Cvan&e@qCw1#VLCPjbO=e=x)eetx!C+{(%BIr4rAcjV=m z!)$qFfGRF`RTRbpoWS$J4#ijA?@4bdAkoD{k7V1VbsZ7AS9Zz^93bIL*tc)J+zPl~?ra5yLg z{Q?j1bMS|s3~?L>JdH-|=BSyHGaBLjZVsA>ILY(lK`{{YbvBbWGY)f!86>{cq0uy( zn`Xy9DFns^KI{+iJb8sqZo62iHk|3vW~Phq+PZ?9zLo)AUofpyN;&C3Jtr;6Zl?49 zQ2(}x{U7Ylu>X)vv6Jku^ADW=&iMn*vNPcvcb;>6(eW#epK`qJSaMt${>t!g4*%rv zgW+!-7Kg1vzcKW$h8_&PZ^%D%X7GOv{`%lg4Ssk~9u(~V*ZynvAF{vCere!O2R=G* zG!P%SVEaqkzqh?+TeO|;|AYR20R`d@5I-K(qEVB56QCg88g7k5S80nzQyN#5S|ibw+M-c2#>PNt zB0Ow}MAtAzqoxL50P*nD5RIhcjls=mXpS3RRxr7F8GJcd5!+ zWL=fD=sJ}}FDM5iLnOkknk33jwXqwZHW41wBLz9~R^zrHwN(B(i2Gg~G{$F8XbG*M z^1P~IjLM+W5|EZYdJR;@f`f3X#$u3%k6IX7;)SaqeCfJfZFMl~X?k9P6ZaL!y)tUo z941L5Uvrd7cvK0^zlMb77dd_QGDuv!W+(16vWXkyv&Rj2*Tx2D>DtRQn+|B_&tC!= zFF&C9V35+>XvjUM%4wb$4L7sz<|e$8Pm)mW{n-t$kXa+;q8In75c#XSOYS4R7Zdj=umnsz$+BuI<} z`>0pii`&TCKbxLuX>O7@@dOC-H~TdA+Qc=UEehvU1l8%>{aX!45K)u3Lx? zO#$KrJ-IOexuZTa^+JDrV$&5p=>;1|P6W-GKY9j{)tu53U+7n*HP7@6BCWZnCqCZ? z(q7(7eAH8kC~;IzxoYh**{}1|S$Kgdyal~{&~z0N+%)Be1*Aqr%~7MA=B6%brjnYI zMoG=Zrlf}f$!inDL8BOPuPI~r{y+8|aU+UBA^{|T1dsp{Kmter2_OL^fCP{L5_ks^ zAp8H#j(wB!6OMhy>N^kshKvM|01`j~NZ=76U^^49$0Pin5Xe+AVl`9QlsA<vKU{D3me(n+4mmo{>V z>ASi3Y@A;|ECplvne4g{=2L~m%}jpfKw8}>ZLBVCZmja#((0ZvpBMSm?0#6?Z7GiN zK5aX!$d8A3Usx1Orv5_w2jxh)n#z`I+lLi?|9)+&AeHump+YvD^HmCk>UQoRez@h| z$Y!#M=}az>U*4Oaj_q$OZR{kbBffQELD-m$bBXE14#bd42=V>(?A`3fG~;EHrBSebbe-YV|IpH zzo+{d%SQJTOK}lwi;2VK!^GjbFAlX9U)mDmQ?W`czfxUa%~fLAq7q+<9>j&j?#Ap& zWJ92}RD&9<#uSLNTMZT#4>GIEU_;zatuB*Tr&GeB7>lk5>#O1+(F6a5ja6|om7l3@ zfM2m4uzzQV#F$@SaNT*6wCgg2+J`++04fo4Oa?p1T*my(DbyC!(4Asnu;hy_Vota z6SN*_3*LkD+uLbh!k6;h-68U^rQ7-CT&B7ptlUotxx(VISV{R7Ym0Ys>ltC?-oj2; zS`do9Wo~N1GbLoZ;`Hk(=okWhbskE?i(B!L-I^8Ix z3#9$D)eDVl<}fo8t^s=*+u|D7Da1+Hxzy@RDFtntw3&Do+PtusTbRwz_Mx&RwsVJT zz67_vx{-%=33a%CxN&b!k=7EM&`&sNZ3FCz;p7pn1WZW%rY z;@O1&w8>gLyMC~$+zo@?VFubUse9;ed+B^QyRnuyBy1b~lE^^Y+@tM-#yrDkX16!f zvoi+}8)Esz7gn}6mS9ZGM>!Y+xb?%C{6=;I z+TiVcA|Ks@JYPJ!k&9>J{sb8#bK&jG+G26dXW*m6Xx|2=l({wrl5rAZ6KNlSb^&A9 z3MWm8+v_l-B8-bg(hlaQ zH?s4qF&@UV0~q5E<9WCWWx@Y!dOv=c%WY&=pxgx*SC_N(MPT{u?GhDUk-#HYv1tnM5FZemW9H<1Ot@|ao!t5smxMJjE`-$ud zloUTm2&gW^Q#NodiFMqtUXEYlhLLv$`+Cvv!(46jCiyM zLhF)NV>OLzQ!afVCP;5hMejn?)m$pSKzj5hm759E5n@f)-cAc!WR%X&FToWs9~0yG zb?|pb+?ZY$*H@SKBYuxM!>b23r_mQNlqB| z3xde=gX~95X7KKm0)gNB{{S0VIF~kN^@u0!RP}AOR$R1l|$?S1oa-_qvg~ zDr5mqu7!oI>`q|2ls-)JN@{yMTs$m<(?xDGkk14HS)cieC2l`yRfO#Sx3FI{v0rDu z0{`I;5Z3n;qAdUz4pg$0_JZFh$FAHe? zGM?erBP;BbI`{w6-~VTSk?jBf#YYzpdX5B;01`j~NB{{S0VIF~kN^@u0!ZL- zCU5~>J2*1JTs94uc4`Nk@Y)*L()e9}A?#u7rYj=@B)3qky7!9Z9i_0fE#*oL87@Tj z|1<2@Oz;?f5FF>=4?h{=IIi{VJYzLo^5%+ZDYsp$RGS~DsKfdV(;)L1lk-RI-#xfH zbZ79Xfp4?@7yD-|-^+Z4{BgW*_(RN~{gP?LlsFZY0U~9;#Jt~?yv5WPltM<{uN2dY zl#|lwVy#e3s%O>Wj$BAerBYJKBm=&HW(F*qib$YPq}u39`}6W z7;%sLhDUY54Tep}G*{V`1CwFsimtmO%S-dI1Xzqm6H70+J+x?#yDINjn+lEOWJOMw(7C6H{34AzmWVCIB6D-= zT4HpX6h>QXmyk~^s8l*#A>O0xs?9Y!%RIQ(v-+C#-mMConcT_M*p$_Ldt+6pmHtgf z0^A#oyVF4<_)JzRY!zt-IwfrTCG#)2Zr)^GJ2(z@56ly%0{l>DOXcFOl99_E_pVe< zZ%gGHKF(|GF9j(t>zV%6%ydqXVVEU7qM^=nts;${)+>KUKIowg!zAJ_0itU z)PcS$H#O_|Q?OGdzd8JBEpWno3*4MksU~y9Eu~-_ZnV)2S|b^PlG&nCkb$s19_a!w zxRs?Oc%E77ZVtMMbl6cZtKCEij7BYa2a~3}YYT2@1W+*L&da8`J!tE)S>}k47(=hr(+DE&t$9r^h-sTcT=D{l|B*(qF*0v z8zX_qWWM04z`eKH9-2MEFkfiitZ4HGa!xv1a5EKezbRMCpwb`7m)C zZrHr_cfVqD$x}@I)!qcOkyC4b$q?^{3gyy`XpdfbiB4!9L_2$yv0t|I9b?AzWBQm; z?x8vw%vj)dpvR3s1@6O)w+Jvh0yr%iVqSg!-{(#2=O5(&(RU<(1dsp{ zKmter2_OL^fCP{L5`oOk2kz*uRHzW?EoB$J=-!w|Qa7c%k~?T7H>FETx>_sCr10%(wN#m$n8X^0Ae~9=Btl!e znT6$SU?H*n@!xi_UKG=c<> z01`j~NB{{S0VIF~kN^@u0!ZMoAW)Ap1EwR%5wSA|k`Nx3xQOh}?N0HL`;qWgVQ#xn z&E<2x)ntChznDm8mtVdg*nauW=3$l-{rp}mC@ zf44Z3QIe7T^8MM_t-CY#UfPY$3#np>i>EjKbh=iXif=Bj zuj~kg&;~C>?!*JDe0aN*4sC{IQ7mt+S7s{9d#m$)zi}@FPj^Z9$Ne0=p<6LHPaueiPdd2b1af$0Ib10tp}iB!C2v z01`j~NB{{S0VIF~kU%#A`{n`DGneZZ9WSb1v^Pt?anK!kImY|LK7WW0`TU}PjF-gn zZmPDE4%bTJ_HN!^5(AY$Fe}UX@OG{yjZ39crTcgF9fY@Mgu_@UJzKcrtKM6Q23BTD zh5ZzG^TB7vI!c}^ZYc#)zAq5+1^6Jx@xjoTA_+mRaz9xtDveu>`^_NRi`LH2K9{{I&y_Alt4zwJf`(~tlXKmter z2_OL^fCP{L5G_hY) z|2zWGpo>TV2_OL^fCP{L5U_>$r8Yz*=(^i=Ko(Z zv0s8e@D9M<>X?HBkN^@u0!RP}AOR$R1dsp{Kmter2|NM>VE*3^5B)86#yI~6#~JqP zCisg#NB{{S0VIF~kN^@u0!RP}AOR$R1dzaENPs^7hqxH{@_+pP|HrU`F(f2_1dsp{ zKmter2_OL^fCP{L5Xk;nsUW(kFi@H50iF@2PJW9sn zRti;lOD?+;^Goi;^4y&J<;7S$vbgSkDZ1{CEHBN+5@0wUO)S0O_LR!ST_q!zJ?>qp zoZgnoH+-D8sR{x$VzQCPhk0-P-HOd6PcijZl|n||KPJ9pts<9`N+ucN{Q)`1rH_&I zX|cu<)6q4z=NQQjs~-1!;#ds=MsvmEJ>oZQuA4WR*A8eMbu9?qu+y#9N+o}5jr5TE z=2S#M%FB99_*-i!ol|6JUhQ>dtjHbtKvyRfY0Rw1>9Snyk?(aJIu1>Pv}KRJc5ch& znwnx>AMMRgZR}m?s99|-`xwb@4$F>4ZDf&?D%E6;yd25n&PY|cs^n#3K1oYvi%LO; zp3zO9(bhV9;$n0rx)@DNMen&iQmwj8+p-p-*F8;g7injYC1Ojl$lTnzmKdFet|;$U z%Tf|blsxV#oHU*C*7xstb-`a;h>SuO6!g(SQ@igd_;FCh7aOt2exDi}VwJ9ahL zyDw645~}Kg$6J3fX>)CX&(cXgYhx$)9Txdbf#>9&euqx&cc;9u<*x-Q86m}F%ZwK%!%i`_a^6k zp7(v9bMnkCtFz1U+ikuOA!HN#*47ILyL+_|=}GDWO98IhfQGA{4%dx^mtMhp&04W! z>cgpLbOy9^dhEZlU`gJtdR(7T>I?Vn6k72Fk#U&dkN7p7!C`z4_v19?a7W!Ymc(wq z$ag_zx>iV6%xbAPHB~I{*1Z8fFkbQhD5*{QsGH3(%sh z6Z6IDR4q;Wk8mB9>h#kmk8nt<1=v8}e;gENlU>_eF|7r8vkki2!paY8o5;3~xsd@$ zi$-BSL$w@)K%%|^1nAQ_xI%}H|4V}Bqm(%IH9GH%;=V&kwl>VNF)8fFOsHMWqB6{mxPNqwF z&>A02Km|m0)xkRrx2_kjS^B>X*K!+`IxOE#9s0~Aw6p3qW|Uvix_v<4b(fb)i(nh@ zOQqrc9{vc3pk5&A1!kR7sysIU!c+5tL6?!!8`u5<4P2}P;1Xe>Gtwf`CFHg;6W$~& vWmhR|#HajBl~CgEyRsSRxjQB_r`(J@#OKvadgu=t(9Leew9;ERZ0qGhm_8I#WQJnrg%l z50IF-Y63Ssa`WKDn+I>+HZk$;f8fdYw(>&{?&f{=?Ytke@4NFZ{k$uAEs=;3xH_I~ z-Jgl=CO=R*pg+=H{hi)uVn8(jf)pqx1!IHEQBJwB?iNhJ7A!EEo1B#>w>Bxaxx-!V zZL)%cQ62-jhvIEK&Jz&zU>#$JYm-phzG)WPcn9xXCx!S1X);ns+$DZ0^d^;B784cu zc$VTv!Darjc6h4OfQGS6INhNQ6407aGaKZkvA`O%VQf)KIDtmSROm?YWLc=1Z-r*H zQk6%bGPKlkRY;ja-wlG&QmGaMzIi8PN|fh9R+RH9v=>+L>C?~)g4uFWsUVQJyX-(5 z1)!rCfY3Otr}jU3aIdHSY&^P|fw(+{$RcupdMwJ#POnvkZ?=L_8fNT|Y`_cJbucxq z*Uh0chXDh-LARY9LP>+dke2>t<{XJS`L2$!T>lwx99;AZ*_OB;Stzh`|62i0F$?|Ez+y3^umttdq?+8~TiF4e@m zkP{_Q=FxW2*BxG_=L96TghG|EyXptH1~kuGIn$9ToiL8;S5|@c=pRtyUzTkS8JFvwuWt$(TM!|Bs+kz9%n06FGpmh(KB8CBz^gbQVQC+D#7Q zTAyy($1K!kT)(w5bX0$`>vro0>Adrz?NB%U#TjXzfz;?AxRgNi$!(trQ} delta 914 zcmZvay>HV%7{-0}Ikr3Aa&s;1|&K%c7lbSjok|~e*+A>uT$uUaCE=e@AH1#J@%`C5B;eto|n|%y3w<_ zc-7rWeIjH+eIbMN_FU<@`c6uTX;9@`^~)^0q|D~VlEnzqYlInFggGq9y0+*7#vNGZ zKFwt&^R|qIB*f_QMKej8bGQ)TE_ zuB|QUjApeq2@=c%T5a;t-qr|2U^5BzkmfUySKe(9G@*eY(A0O-Ce0THaR(<5Lx^EO z)|SA5tZdt?(6W+!>am5^VyS-F$YWb05oC~7k`FJ-kJTztnaCeIijY`#)Z zL8_zx8%`-E)eHM^DKceq1>V~z4vD?Wfo!eBcaEOkyd@k+)k|;bHi<7>@&PUc#if5pH5dZ94;GRDE{dB=BrvR27p`#+`Kf E4=0nq;{X5v diff --git a/myapp/__pycache__/models.cpython-37.pyc b/myapp/__pycache__/models.cpython-37.pyc index 103b6a448b4b4f3fbd8de10fcbfce1fd0e7e8552..0d0550007bce5cf935f6e3752f49483ab883d833 100644 GIT binary patch delta 750 zcmZWmzi-n(6!zKY`bX?Efj|-o2q2a)bm)Y{QYEygAOeC&NFHjrxl7{I_^Pv0=v1Lb zV#*L5e*y~<3;zQ`{0ZnL)=VI=FmlgPMI_Gh=kI;*p5MFgg!jcOcYNQ~)Y|_uJGf~s z$_MwTMNMiDYpxTUI5X`W1@4;Wl2W0S9%{rR{!Al2MHBnnSbW$OU-h>;5~tH7k?yPL zO_>->LU+Y`W4kAv?l|ImF-?fH6E=wQ zn5EL|FqY6LE%d;dW|W8d=`oeggD9sf)jf=PJ`RZzK5D!U{pw<*->*Om8&%X(MjqlD z;tuZGRT#xk0mF6F6z_1Wv?_tRhWLydn`K2atU%K-;w|wVcV0FjeGT9Sz*>n4Wi^XV zXjn{l%-Jwb=w&5mx&lq-w-gS5UaSp8cGR1V7r!5!dDJHs!PJi8Dt* zmAEgoc1f1@vusMkCydZ!NmQwF6HHzHQqWhPLa_1|NiUk_EKJ$!Fd}5R4ZDqh8@L6+ z>N0xmOT6JhsSf}L=P)#f@x>3cW%8@Qn)>xK>FzO3<5BvUo^m*Ww4ObG+TZQ=13wxL z=^&@1uz+7t$-s%TFk{IHC2M9Cwl!3m-&O!o20d+cJ!Q1Q8Y*(Vwl5triP90R)fOI&J(JkZdKb;C38@fD z3K}Ds`2Y%NsOYIFXy5}z{D372K7fKdYf!Q)ojLc+oqNvA*HDIWKZ*hazTSt|gFp5% z9`tq%>Qe9ApdLe0@61XA<}!y_)L)o1p!IX(45jr;T1X?UEk8b5Zu)2_e_4C4Y?xtF zXJMuxv!)SnZ-LU7`uj!_sQMEj<_teAD9ct9+!LgN8F`5_mLHYl)o+jv5|ewdDm$NN z88n1sUKThnPB5W#b-y~rb@pdTLwOkIWX3R70midJenH*9-x(ABc)~I&zuR}~%6~{o zR@LvE&3kD?4iDL=WE9T@<0|YIMaD>8HKhJTU{Pc*82x1M7MSpsJTM=~(rLOe;x$l~ zKi}?F{_B{|FeCZ#>YL7GUg!y`_Z)l#?RoSD{RO zoeh_#&l%s)bugUpa*Qe5IYS|t{G^3+p_K?p)CB!?nZ2u>>9N*X6q53*}P zye=LFS`S4w7teYS#Jg9~YX!lZpTLV3->!*>;4E+6{Ab?0_vW{+YhPM( zcVE5h_v=X34(p zt14A%Lg60IZM8c+v&M%oZ@!7pyyf+yD!BA{=yL=Y)dGdz1Df(-kqNTvWaIBN{b~FC zf7;Hp9f`=vTxuC(h)R+-n0gXp=IQcGODlz$+HNpur_f@v4btKt?c{m_(}XT1eD_yE z(z297e*W;|l#!Q$d10+wEyvV^^iO%hwNIRan9EAR>D;E8qX#unohPTN=8N^*nQ}6b zy-I|R?Zt~>ewhE<+vU!9d^otV_dpL+aaA?UXZxm@&m$HKoa-W7&T;zSfyLLLj^v@v zeW)Pq65s;yvUwyXI>Tq=Z0SqccTt>~Vjh*7$BmW0WJJS3JYz4nLj zm*&c;{{V5qlVvH6#ns-- zm_#N0$^}-N{*yGTK?v#A6(>g6qtyF4FepVaISNEQ zT23xLoUdNJTuHBP@bB<{u=Ww%9@XzRr^m?xyU%^yB#W`algoa{vgCa6c9o30le>3I zXogS!o8de<;zzUTENr%|+K~yJPOXt+*ruuJ^o{YrmhKK;2v;MS9f61cg5hoLogin -{% endblock %} \ No newline at end of file +{% load socialaccount %} + + + Google Registration + + +

My Google Login Project

+ {% if user.is_authenticated %} +

Welcome, {{ user.username }} !

+ + {% else %} +

My Google Login Project

+ Login with Google + {% endif %} + + + + + +{% endblock %} + diff --git a/myapp/views.py b/myapp/views.py index e5d79c5..b04f76f 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -20,12 +20,12 @@ def index(request, page=0): @login_required def submit(request): if request.method == "POST": - form = forms.IssueForm(request.POST) + form = forms.IssueForm(data=request.POST, request=request) if form.is_valid(): form.save() form = forms.IssueForm() else: - form = forms.IssueForm() + form = forms.IssueForm(request=request) context = { "title":"ODIT - Submit Request", @@ -36,7 +36,7 @@ def submit(request): @login_required def viewissues(request): if request.method == "POST": - form = forms.IssueFilter(request.POST) + form = forms.IssueFilter(data=request.POST, request=request) if form.is_valid(): issues_list = models.Issue_Model.objects.all() if (form.cleaned_data['keyword']): @@ -51,7 +51,7 @@ def viewissues(request): Q(issue_type__exact=form.cleaned_data['issue_type']) ) else: - form = forms.IssueFilter() + form = forms.IssueFilter(request=request) issues_list = models.Issue_Model.objects.all() else: form = forms.IssueFilter() diff --git a/mysite/__pycache__/settings.cpython-37.pyc b/mysite/__pycache__/settings.cpython-37.pyc index 7cb4e01380467fd5d20a2e68ff53aec3fd165122..00557fafdbf4f9c73beb8f90aeb04be69b519e08 100644 GIT binary patch delta 649 zcmZuuOK;Oa5Vkj)hiKBIc{FX>LV;2f9xhM{5+@ud5*Fm4I0dn)Fs^4~wl#JXJ4ocx z0}?lcP_8||1;Gu`D-sue0B5e8_zQ>w8#m#^NZ)AY)66%cnU~qu1*wusoe;Qv$h?2_ zDlG^<$H~-^Jh;u_|9K z!YNp_F%#kRA+|-5hBG7sXJL(sd+6;PjlsEh2-Xh~6G;{%IL|93D2M(+=r1zS#v})q zNFFYetpZ>&&r#%90GTYp1}VW6vIJM*8f@AKuEQ2@yb($+1JZ@^&ClXjF_(uu)3rU> z^4y@$c4eOhqc7;eLlQR~#~cJthUrNlo0jDb++bLk6250K)0xui|E1+#-+RV@_I=s* zJlmm1xkwI2(6BuE9?2iw^I#|y{ZR;Zg=z|A;nx?hVkfAqJ)u%(CAyDlEhIQ K;}=3m#F4*j*1UoM delta 269 zcmeAdZ4**=;^pOH00Iwz#<)W~3=EG!92npLG8}-o_{v0e-}-d+D4rC)6#f)}6u}gs z6yX#Rpa^e@XcS+HSUN)rONw}kM2cjJREl&uOD1EA%p8_<#wh+2*(iY&xfJG^;6#v?%sh+$CDkFQ diff --git a/mysite/settings.py b/mysite/settings.py index adea8ce..9bcf094 100644 --- a/mysite/settings.py +++ b/mysite/settings.py @@ -10,6 +10,8 @@ https://docs.djangoproject.com/en/3.0/ref/settings/ """ +# https://www.youtube.com/watch?v=ZTBexYIIOP8 + import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -35,11 +37,17 @@ INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', - 'django.contrib.contenttypes', + 'django.contrib.contenttypes', + 'django.contrib.sites', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', + + 'allauth', + 'allauth.account', + 'allauth.socialaccount', + 'allauth.socialaccount.providers.google', ] MIDDLEWARE = [ @@ -121,3 +129,26 @@ # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = '/static/' + +# Django allauth settings +AUTHENTICATION_BACKENDS = ( + # Needed to login by username in Django admin, regardless of 'allauth' + 'django.contrib.auth.backends.ModelBackend', + + # 'allauth' specific authenication methods, such as login by email + 'allauth.account.auth_backends.AuthenticationBackend', +) + +SITE_ID = 1 + +SOCIALACCOUNT_PROVIDERS = { + 'google': { + 'SCOPE': [ + 'profile', + 'email', + ], + 'AUTH_PARAMS': { + 'access_type': 'online', + } + } +} diff --git a/mysite/urls.py b/mysite/urls.py index 7ea0131..5922de5 100644 --- a/mysite/urls.py +++ b/mysite/urls.py @@ -13,12 +13,15 @@ 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ + from django.contrib import admin from django.urls import path, include +from django.views.generic import TemplateView import myapp urlpatterns = [ path('admin/', admin.site.urls), + path('accounts/', include('allauth.urls')), path('', include('myapp.urls') ), ] From e36bfb930c70676dd5afd1a7543d178f89494dbd Mon Sep 17 00:00:00 2001 From: Asterisk007 Date: Mon, 6 Apr 2020 12:28:23 -0700 Subject: [PATCH 02/35] Completed tasks #24, #28 (#36) * Merge VioletInferno/ODIT:4aa6f225 into master - Add basic registration and login functionality. - Validate usernames/emails are unique. - Modify front-end to showcase current logged in user * Resolve issues #24, #28 - Add issue submission guide image - Ensure mobile browsers can view all pages correctly without odd margins - Add small tweaks to view submissions page to make it slightly prettier * Resolve issues #24, #28 - Add issue submission guide image - Ensure mobile browsers can view all pages correctly without odd margins - Add small tweaks to view submissions page to make it slightly prettier * Revert change to settings.py * Remove old database files Co-authored-by: John Higdon --- db.sqlite3 | Bin 143360 -> 139264 bytes myapp/__pycache__/__init__.cpython-36.pyc | Bin 163 -> 0 bytes myapp/__pycache__/__init__.cpython-37.pyc | Bin 142 -> 132 bytes myapp/__pycache__/admin.cpython-36.pyc | Bin 313 -> 0 bytes myapp/__pycache__/admin.cpython-37.pyc | Bin 280 -> 282 bytes myapp/__pycache__/forms.cpython-36.pyc | Bin 2632 -> 0 bytes myapp/__pycache__/forms.cpython-37.pyc | Bin 2589 -> 2622 bytes myapp/__pycache__/models.cpython-36.pyc | Bin 958 -> 0 bytes myapp/__pycache__/models.cpython-37.pyc | Bin 1555 -> 927 bytes myapp/__pycache__/urls.cpython-36.pyc | Bin 1266 -> 0 bytes myapp/__pycache__/urls.cpython-37.pyc | Bin 1245 -> 1235 bytes myapp/__pycache__/views.cpython-36.pyc | Bin 2501 -> 0 bytes myapp/__pycache__/views.cpython-37.pyc | Bin 2480 -> 2470 bytes myapp/forms.py | 10 +- myapp/migrations/0002_auto_20200328_1923.py | 33 ----- .../__pycache__/0001_initial.cpython-36.pyc | Bin 1080 -> 0 bytes .../__pycache__/0001_initial.cpython-37.pyc | Bin 1059 -> 1049 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 153 -> 143 bytes myapp/static/img/issue-submission.png | Bin 0 -> 16732 bytes myapp/static/style.css | 117 ++++++++++-------- myapp/static/style.scss | 14 ++- myapp/templates/submit.html | 21 +++- myapp/templates/viewissues.html | 26 ++-- mysite/__pycache__/__init__.cpython-36.pyc | Bin 164 -> 0 bytes mysite/__pycache__/__init__.cpython-37.pyc | Bin 143 -> 133 bytes mysite/__pycache__/settings.cpython-36.pyc | Bin 2331 -> 0 bytes mysite/__pycache__/settings.cpython-37.pyc | Bin 2310 -> 2300 bytes mysite/__pycache__/urls.cpython-36.pyc | Bin 1001 -> 0 bytes mysite/__pycache__/urls.cpython-37.pyc | Bin 980 -> 970 bytes mysite/__pycache__/wsgi.cpython-36.pyc | Bin 565 -> 0 bytes 30 files changed, 121 insertions(+), 100 deletions(-) delete mode 100644 myapp/__pycache__/__init__.cpython-36.pyc delete mode 100644 myapp/__pycache__/admin.cpython-36.pyc delete mode 100644 myapp/__pycache__/forms.cpython-36.pyc delete mode 100644 myapp/__pycache__/models.cpython-36.pyc delete mode 100644 myapp/__pycache__/urls.cpython-36.pyc delete mode 100644 myapp/__pycache__/views.cpython-36.pyc delete mode 100644 myapp/migrations/0002_auto_20200328_1923.py delete mode 100644 myapp/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 myapp/static/img/issue-submission.png delete mode 100644 mysite/__pycache__/__init__.cpython-36.pyc delete mode 100644 mysite/__pycache__/settings.cpython-36.pyc delete mode 100644 mysite/__pycache__/urls.cpython-36.pyc delete mode 100644 mysite/__pycache__/wsgi.cpython-36.pyc diff --git a/db.sqlite3 b/db.sqlite3 index 96feb8650dbc126a5e2810a36e2ff181ca70dd2d..a3f85ac4843006a6e731d5582a6a7041f81a3453 100644 GIT binary patch delta 1393 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 diff --git a/myapp/__pycache__/__init__.cpython-36.pyc b/myapp/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index a0a93ba75375f2e064410519df29ff9a41615372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmXr!<>g{nP#?zt1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnuK@kryb}Fn{m|mn zqGJ85+>Fe0eV6>?(%jU%l4AYf1$83>eG_8?{oKm5{Gx1qe;3aX lAUm<3KtDb{GcU6wK3=b&@)n0pZhlH>PO2TqreYvw006(pC`$kU diff --git a/myapp/__pycache__/__init__.cpython-37.pyc b/myapp/__pycache__/__init__.cpython-37.pyc index 4a46b64e228dbc04a0844d1266b629f0b4c9f492..591a468b269b9a791a18aa7876e3793b2d4e7076 100644 GIT binary patch delta 58 zcmeBUY+>Yf;^pOH0D@ZPgo)f1%DVa)`MIh3DT#TRsX6*C`N^fZsd**E`uQoDCHlFQ Li3J7v6AR=3uCozh delta 68 zcmZo+>|^A1;^pOH00Iwz#);e(y5>$+F)pda*(Lb}F)mq&dFlBI!6l_>X)*pTo+180 Sp6*~qOm1ajK|##KG&ulaYZP4o diff --git a/myapp/__pycache__/admin.cpython-36.pyc b/myapp/__pycache__/admin.cpython-36.pyc deleted file mode 100644 index 31ed279654c1862a6f08cfadba6761dd67558181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmX|5Jx{|h5IyIkM4|0(U_)7Y6=h&Rh@ne|(jl;90EO734zV5C$`KZ4l!OJ14! z7nrbHsVCjL_jLDkZ!wvq@b&Th4FJEcPZc6rf)s=R4QSW~A}m4zj5JXb zv#=R`y3I+Qc}1ffvUu;@kP#b~RB*W`M>P_PverCgNin5ODQh*WlQ64D4m?%{F~9Odt6V=+xaG;BSpW_E@1`8*Idu*SJ*GAeih8=G9iI z7V}PXSzlaU&GC9MN3nZT`W-jR)uZEO*Wn@VtlQb-)@2=9cITs;k%KWAhg0$omk&~A diff --git a/myapp/__pycache__/admin.cpython-37.pyc b/myapp/__pycache__/admin.cpython-37.pyc index 8d867a02809298763b2d5a5d2c61f6d8d236ad6e..c62fda98f9037f23cfa36046b7113a244e5629fc 100644 GIT binary patch delta 84 zcmbQiG>eJXiIZc^; hWv1rnyW}UA=BDPA6zk`wWR~dXRwfn{=uiBv2msB}8Z-a^ delta 82 zcmbQmG=quPiIhCd9(@oP|-9g`;hV|S`;XP1aV!sMbsiud*C4i&0R}WNKx5c z#j&BFKoy`s0soNxlKzJUdg{ryo_p%d(y<)Xhf>(l?9MEAW_IQq-fp#mKmPpr@n&ck ze;KD98~D30#2g4UC@GAR#DpMk7G`P1mgcR(E}huXyj{3uBW?iiP`B_(KlXudQ17J? z2j3Xfr@>2u28@iG3o8y`rAb3r36ED=u+pM!SZOm0G}?6SkrAyQfdxiHl(Sp$QUJ65 zqhS0#XQ|Aq$rdcanvHAl-+Go7IZY)?L@^s4k$S6JR+JSY!zn%{3=7767~(@9(ioGm zIR`%v$qOQ_Iav^DKC$^#X^$OhEyyo~8eomxM@v|l<^{*M9bCKDnZePWy2%uDvFuLwRlA%Cne4D+Hp!pPm=8w?7l=XHBqaPCa2ZZtJt(^i zL;MDW88L(#v9a?dK zJ6B|Fkge(WHt9M&2dNd(4Y-)|%HI}Z#xNh0lNG5D2O)a-X;w`nuL``kR7x&lXOPQ+ z4UQ;y5ZTJz%ju9w zX$dBq&h5zO4X{HswM)qZtRWR<1xqK4CQxK4e+%UNZ6xm?c^B3FTqL3@oNefGl&QI2R|z$F7O9!Z3SL$7vI{CTFOh3 zNm{ZbQ9+VGiO&k;!z6h+ON&}kmzIBjl=7{d6;$~H_FQgHrZcIHS02t&s8#KT3b!Yc z4Oy+cbV}QH%3iEQu8rORt_?%n0OAoFet~HclX#X5w4Nb<%w2iKfkw!2_u1vO1(N?= zUX7I^@t{b2C?JmpaQn^U8{E=}!_UK;S4)Fmz{PX5MrUWg^BvpYt2o`_7eNr&D~VjE z`h}&szMHd?z7J{i0lb7?LvkGnra4F0Op!q-bb2HrMeAL8h% z^@nT-aL!LUk8-}oRxp54KdEvR9QUA#i`Q&9>8Tj(r7f{d-PoZHoX|M9xOzhO0h6in zuqZL3xd(fdKLvQh`?vw@h%QW|Apx%zCL$I!p_f8W9a|Jp%1rDz;UCRGrg6yxf9?Jj zz_OcFWtmHDcjPEX%%*@q_`166-a`)khA3Y}{tF~nbgmB^!(dev^nS^F&dCtZU8yo)u Dl3-Ui diff --git a/myapp/__pycache__/forms.cpython-37.pyc b/myapp/__pycache__/forms.cpython-37.pyc index c9b04d11f88257bafd27157310d1120d8eb27eda..21f950110fa18de1f5fd107dc1ca4ae842be0d1b 100644 GIT binary patch delta 364 zcmX|*Jxc>Y5QcB|KC*YosgQsYL`5SQ;n>cIog#u-YU33`$ZpK(;#-4s!pu$TuaYj&%x78`!Si{3lHXF~IVYd#VBxq)eN;DqZ>gd2U}CbxKo)4t(b z$TAad|8oa_pJId}SNn7j%VJhU!Vm+2kuNFtCjKifmo?b@;XN}a05LCla zK64?uomlcRk$GHYL;|k9%?%gAj0Z0tBf3R}DX`ZJ54A zM`BEDvZ5$$08^K=2%GAGmf%he=m}I*)-J7Xp-s+=g`r$wCOMSx2jkI>K4nU#j_pUB M(6eUMkG%|YzufRv>Hq)$ delta 319 zcmdldGFODxiI0bO$qHaw`)H3Su_jVqD0~=r&oFNynZ&l{t$wg)xOGlQD(4mobGSg*AnlG@Go$slsmw5*7dvAZ-Pc a<2gkc^(L2c_OXEYlQ={t%Wx?&3IPC~0Y@DG diff --git a/myapp/__pycache__/models.cpython-36.pyc b/myapp/__pycache__/models.cpython-36.pyc deleted file mode 100644 index 6bc28034d193365e4f2ccddebedab0fa709783f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmZ`%J#*7Q5WUlfEy=QB0`zo@n<$f{WS9(iU{YX;ghmB77wy@WIZ5VD0$fpqHot<3 zf5LCLmdYJ96?>-y$PCEiy|=sXR;zt`G#)4Amrrl*`h6a4FAG(dn#Qqi1J z@`8W|{$~Qdplk2a&wY#p5Mm^}js!3`Bh%pyZ;~lBgQ@``bz$9`=Xd!Fj0lobAh{>} zbpRB+E1HK6`?m0vmk-bzUXnb*Gsf5e8Hr;IuNk9TUW(orGZFG85Mwim8J%j~3HH+V zvIBf8c9vB9Ba@Pb? zV2^v(@5fE3TfGLV^j~vX#P&K8%SU_j%YE>??SyObCs9T+#6)UWfoo!TEFCRWSJjjlZ4zg;yXw=*6 z)$H^fG2d*mUfTW5R^b8>tE!%$iD*hEw6_!La<}BS diff --git a/myapp/__pycache__/models.cpython-37.pyc b/myapp/__pycache__/models.cpython-37.pyc index 103b6a448b4b4f3fbd8de10fcbfce1fd0e7e8552..5b588f2002f45186e2d6ba467887e87a15834bce 100644 GIT binary patch delta 527 zcmYk2Jx;?w5QTTVc49kD1c3-zL}ekx4JASdMM6R%4We;DWV{O`@=vsOic~2`OA)2# zr{NM@fHU|8X(%YEm~jAkrTzT;cKkd$OXs=XI&C&>hHL+GcD=zDt=;oOd=pGS#A5IP z*clU=;BzLpgpu~ZeU6SU40McNM;EnA=GIpf(_lRI)-m1jRB`-5Up{F&Gg2Y$|3$_L z?yQH9%m=}IP4ba0KxmKP8x>tEH81_Tg5w81~qXzv3jNEU;Q31QJ?g3FW{EA%u3@0ICpKq=t)CVL6#e;?%LjjMLpp zJ%Dzv{SUk1#6RIT%#~Aa95^8kJnuLy?O1;2{Tln3_jzZIdcDZP`24qDfBM(8tUt-P z8L+JI3zyaOiF7I61sVAJ*{u?U| z;0@vPkP(>-f1lC4XT`93hy=*%^AKnw-91riE3)qi?2hBFz!t6Z7g;H)MYG)f1=l38 zWq?_`)wV2=5a-*b&Z_!(mUF)Q%&d~c&^Q_BAj_(JEwW5US%xBPOVZ;k`+1v}ZA9Ai zweWbE%Wn!%a@}c)rWCr%g__A?(-d{37sQ zv(YNA7WIdx&2~ONdp0_moUJeO&E~9ScDT8e9@hDIRUaZ?G3&Ed_L+&@Be#Q`CzL#a zxJxdz*UIAzl={#DZi8Z*yVqz(*b#IzDWXJY49f?BJ?MStHt4j|!Jbb42U*XHk~%D` zs|=)yMofyo8HjZZMJk6WZT*o%YV3=W?O$z$K*m z?KWeT&PXn%$AZGUw6zEV@`#su-U!Aa0j))Z=eTXwpYhj=-l>r P#h@9Fa~K}_4?6z=B{O!6 diff --git a/myapp/__pycache__/urls.cpython-36.pyc b/myapp/__pycache__/urls.cpython-36.pyc deleted file mode 100644 index 4bdabfc0168eac973b66d21dd81dd18976fcf2ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcma)5O>fgc5VajAPMojOUO4V8wN$*NL{zXVV2&1Z~LodOjZ2?ard zkg<#4Nu(^q7~_~l!jBhWK4%4I3ld2`Vic1cANu=PvLcNHR%8sv3+%qS4k_dkWA~)Y zBc*P2tWNsaM=#?Tg*i%T!MGeFG~? z^C&ChG@pYB`aD%y1kGIgbE=I&AO+f^xMbHuv)an>%C1#Ad}a7rWX;{vrrcZYG-GoN z2Ch#UsesNq@;vtrZiC^ORWpofntN7dE5|FRW~(>as5=vQm9ccwJSNwEB5AhligHR* zx!MdBEfu09Vig#KQ6F8rFskl`9lQY%4)@!rcK+u2VJQ>dgg1e!pl*-gj-ocT@T#@a9Jqhv22HKB>YOQo z@1cy!saspM*J1-DpUq}fcVj-k8GKu5QOnOWOmm4Nd?^SQctMkNj*nSXQj$x7&!dE~ z44)TV&Bf?oA3r(V$Mgm+=STeZ`1ArWOr^eHesNQ^pHdc=8F@a0+~OfDw%Iec%%0V2 KxaRsd0Q3usR*1d; diff --git a/myapp/__pycache__/urls.cpython-37.pyc b/myapp/__pycache__/urls.cpython-37.pyc index e2c3652da83307bcf77ff3b23ba5e473a7b9576a..1828c0cd5e8689d59cf700dbba9306fb3ebef21e 100644 GIT binary patch delta 60 zcmcc1d6|>jiIMDE&&bbB)lW&x%S_GDcgasK%}vcKDb~+V$t=;& OtxPN^(4V}T#Rvczd=qd0 delta 70 zcmcc2d6$#hiIgB|8(gb}FNFUH5V$gI^6h+XqK@l(Fq_JBRTvVVnBZ)E}%FM`$ z2^n1|TlWk61KkzlTXc(FgXcARoo>VPI_>Oh z-5akVCar6fHfI@Sylgy{a{8Q!X`TsIx}4FNvw`fAlKcQgE6GQ3*5~ZS4Eibb*wB;D zp#u>M=Xsp>hB&DcOLo~oBQ+V#Fx20j8(5c<@t~a5$9Qyh+ffpoX`DO z`tzJ0iLd-3*@xWxIP)VP17|||cke#%A3|#s3&|i6A3w&pKOg7*I1;`bGhZCVNh08T zjKTy!fyKwH8roduV9ZYZF-xXCz|ix%W@*V-Cag5$Y?znEIG>j$Wnxfx5H5S!8_P5S ze4Ig^N%j(;<%kh*;H;J{&1p1ZybZm-Yy3Jq-aHA?Oa_DCN5QxVCh0gH1&{KjW>? z;2mfUkW2hs;_Ml8EVK#mcBJ!rl1y}H8B20X7Gz>BHU1?$t))gZ99wFqBy%rnR9_Hk zoa?}|4LqB`v!!^p_e%5G)BS^DXT|pZ>@WrDo>x3|bzXELLmB@ z?vVy@;qr9X0GM=s8+z9;nb25E`)_EhVfyn5n9ij&u_w;N1&9EaNsa2aG+r$9i6`q9 zZEBp6jh1;vzSTC`);nz*+dxINo&)Rsv9TVsse49n{Ka1vlx#+kb*}2AwFT1Vog1fy zYyfTbg+UvNw&q?1uXDssV3&apgl#4IejimG#Tht2xPz+a@l?Xbyfkn#g3UV0812tM z&+iNkhu}B=87jRPneEGyDTAf2y>0dT>}52NMQ5d;pFrdn`Vn2D5>Q>u7yShGyCS}5 z<7TLOFA1v2Zvumrn(DhsO>qJqp%Uir;TRaaR#s#ECun!2lOIkXYEc?dl9Y`>!XnI$ zMlvexVf8*Lq|%?cp}!BX_bL&3Z{zzI=7>+BxDaB4c*Hb%qyxe6(JVeQm>AR1V5p91y7m-eRkaoJypH6R1NgDB7#kp08|w z>UMurv8=xWI7lAs4u*zjU)J<0RZVbFhfNK zhmP_)$nITzfPo?) nLfrsWWv49N{Tf1Bf SS)!j?nOIPuzqyY|i5&oB#}sG) delta 74 zcmZ1`yg``HiI6$oM#kiyvXP4v`#JFT7=B4K=1ecVirN#KW Yc!u}~dAfrcF}anA1qCsiTbPvC0qXx24gdfE diff --git a/myapp/forms.py b/myapp/forms.py index dcd08ae..83faec4 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -94,7 +94,10 @@ def save(self): class IssueFilter(forms.Form): keyword = forms.CharField( widget = forms.TextInput( - attrs={'class': 'form-control'} + attrs={ + 'class': 'form-control font-weight-normal', + 'id': 'keyword' + } ), label='Filter by Keyword', required=False, @@ -103,7 +106,10 @@ class IssueFilter(forms.Form): issue_type = forms.IntegerField( widget = forms.TextInput( - attrs={'class': 'form-control'} + attrs={ + 'class': 'form-control font-weight-normal', + 'id': 'issue_type' + } ), label='Filter by Issue Type', required=False diff --git a/myapp/migrations/0002_auto_20200328_1923.py b/myapp/migrations/0002_auto_20200328_1923.py deleted file mode 100644 index 5ea3102..0000000 --- a/myapp/migrations/0002_auto_20200328_1923.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.0.3 on 2020-03-28 19:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('myapp', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='issue_model', - name='affected_user', - field=models.CharField(max_length=50, null=True), - ), - migrations.AlterField( - model_name='issue_model', - name='assigned_user', - field=models.CharField(max_length=50, null=True), - ), - migrations.AlterField( - model_name='issue_model', - name='description', - field=models.CharField(max_length=240, null=True), - ), - migrations.AlterField( - model_name='issue_model', - name='is_solved', - field=models.BooleanField(null=True), - ), - ] diff --git a/myapp/migrations/__pycache__/0001_initial.cpython-36.pyc b/myapp/migrations/__pycache__/0001_initial.cpython-36.pyc deleted file mode 100644 index be0cddae65ebcd67e1f5ca18554e5a263af33c8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmZuwJ985;5Y|2H+?^i;2yY51zy&#zP%=y)o-i&FiiE}m8gW{m<=l(YIba%Q2yOlY zE&qhypq9!V1r-%5`8-KxxEt;4C++UH`Xp_4Isy6q<=xi?A-~9l&qaR+hkS^J6K*9W zwMJHIk8F#)Cfw%EH^LpTrp~D|a=3d)dW{9flAf)CRKz8#M4n02Omhy2jP%m#YooJ+ zL;gVnWMpwNvbi;KVlr}}F>UJdur~F$g}=)iym{u1ZN7$cKKHnPW+4g;YSpNXC^#iJ z-$Ad1d0i8A#YC;wQCBaaYlzx9C-(UDGutq4{FnL0rM#P$&@F>**9>=7HTm6(QE^i< z#P+De@1a!pmA}8z=t#AOQqF+xYo(Me_@1(dgPyC}Y*ytoDuGqNRjVjP%E~!ChPm=3 zl!7JVGpP0nl<#v1G-D~KMkT5Q795rBS$Goc6HOqCtBGoHkWncLeJ+dNxUK?Wc&mAV zRXCEYxG;0co#h`X<6L!^lp@Z6(-{&kwsdxfjmHpSXJ$_MLQ@uHfw5g{-8rArvnJ~R@0HJ|EQ|9^{@$o!gfNTeTUdIVSY3I~mqNeLdPyzgy7LdX CRye8v diff --git a/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc b/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc index ca73e90f150ee56078f552437717e18a41c10573..4059959aee2b0b552d55a735e2152482ff9b5419 100644 GIT binary patch delta 73 zcmZ3?F_VMWiI0bO$qHaw`)H3Sx3I(~A;IGV}9_Vzf? diff --git a/myapp/migrations/__pycache__/__init__.cpython-37.pyc b/myapp/migrations/__pycache__/__init__.cpython-37.pyc index 6f01c20c98ce83126774f82ef38dd631ccf84207..0817031beb1864eb363699ba76b4936df4a16cc0 100644 GIT binary patch delta 69 zcmbQq*w4uA#LLUY00gzn2@|<3^epr<@^e%5QxfwsQ*-oP@{>z*Q}arS_489QOZ0Oq X6AKFTb2HP65=%1k^NRH+R?7hZl$90* delta 79 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 r6R_{;(=_kAFnE2
-
-

Submit request:

+ {% comment %} Submission form {% endcomment %} +
+
+

Submit request: +

+
-
+
{% csrf_token %} - {{ form.as_table }}
+ {{ form.as_table }}

+ {% comment %} Submission guide image {% endcomment %} +
+
+ +
+
diff --git a/myapp/templates/viewissues.html b/myapp/templates/viewissues.html index 93a84bd..b47fbf6 100644 --- a/myapp/templates/viewissues.html +++ b/myapp/templates/viewissues.html @@ -1,19 +1,29 @@ {% extends "base.html" %} {% block content %} -
-
- {% csrf_token %} - {{ form.as_table }}
- -
-
+
+

Search for posted issues:

+
+
+
+
+ {% csrf_token %} + {{ form.as_table }}
+
+
+
+
+ +
+
+
+
{% if issues_list %}
-
+
{% for i in issues_list %}

Ticket # {{ i.id }}

  • Title: {{ i.title }}
  • diff --git a/mysite/__pycache__/__init__.cpython-36.pyc b/mysite/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index b6e74a51b6485775186b779879ee116a3c5c93ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmXr!<>g{nP#?zt1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnuR#6Wyb}Fn{m|mn zqGJ85+>Fe0eV6>?(%jU%l4AYf1$83>eG_8?{oKm5{Gx1qe;3aX mAiFrTBvn5?J~J<~BtBlRpz;=nO>TZlX-=vg$f{x>W&i;0SSY{% diff --git a/mysite/__pycache__/__init__.cpython-37.pyc b/mysite/__pycache__/__init__.cpython-37.pyc index 2bb9fa63ea0c08ccd13ef9393179ffcb72f375c0..7b0e490fd58a036ddb18d5af03a29a4f1a474ced 100644 GIT binary patch delta 59 zcmeBYY-Qwj;^pOH0D@ZPgo)f1Dth`E`MIh3DT#TRsX6*C`N^fZsd**E`uQoDCHlFQ M#hE3k`V$M~0Kxnb+W-In delta 69 zcmZo=>}TY5;^pOH00Iwz#);e(dKOMrF)pda*(Lb}F)mq&dFlBI!6l_>X)*pTo+180 Tp6*~qOm1ayW=U$y#B@0TceE7N diff --git a/mysite/__pycache__/settings.cpython-36.pyc b/mysite/__pycache__/settings.cpython-36.pyc deleted file mode 100644 index 0a96c6fef697550f0e668abcadc96b77b9bb7e5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2331 zcmb7FTX)k&5Vjq~cAN_k0^!zHl+7-ci z=>va*KhXcvC%yKGzra&RvXl5YoYT~6t;e(TeKR{dv#KsGRvv!(^N;O?T<)LT#HWn% zQ+(LpI6=unZSr1vQIs$ykERP7VZEg)49suEBLjpn16QQE>9cIrz#r4`0JK znb!-X2;zqVeEYFL^TsmVgj;BN6K-eooov2K^NwI#gf(LY?irUbrpx%O;&TPojjK@5 za_jf42l-sCQtw;76Nrp(PJM@o2SF%$Lq<6f2Vu}BHkT@uZQ_&A;snI~p|}PaWWxfF z`Xb|2$j6pzV#JU{9CKEsO{t3L=P6|n5|R4I?pd4$zKCDmqv(&i}Oeq zz-H3O$58}!;K{_7kx=HrfZ9wxidP=d^BxfoBG(mN%D5ODob1Q)0UZ$&AaT@=6W!=b31&0C%pG~>z&ts52X4y za;v>Zmi{>}$3@u<9O}m_qpeAH;Pa5~OIaG@i__YO_u}hQ$`nF;&W8iS;?=1|Mi|4y zo?h^9!Ez9BZ5qMxDD3nAm@(@Ot-&DP7@K$$z$J%PNF+w=D5QKSX=7pMcrAW3%{Y!h zn!sx#-2`g=v=cmFFYu*W_VXX6EIg2EIK86eaKiM5saPz`;A9*M{>S7|JFCA5;PfVr z@-+$G8Rc*S_5Bw%;Zple-?HCe4@j?{hn7d$gS6P$1a5xRTv8OeESAS4oOlBl`%BtK zH1Xl6{-t`>YWjGY8OvD-yyqr%hK(@=A&c)#lbp7Zfb2(3eE$rVA$f~k!s7>H+v74# z)AWy|wi&w|lI%E!& zus|`x+3_VMAO}|D^5de0{gdRew=Uja)wqJnvAkYLifU`S(NYtkrR=C-dcnsprsB?O zW?(UP7=&Qrg+U>6Cv_PK6`uBM#EC{d>RM?}yc$^qVf^H*Ogq%4UgR~2@9^FU{@1hO zM=i2Dj`4)x=~)R{kw-#mpJtdP{zk-%nXX=o%QD{U*emk-wWMU4cqN-=QV3Wg3@qNm z?9*kBL zrfbP^vyDe$c2qQ1Yr5I(G?TfJE)|y=Elo!R+GA;GNoA)|uQ$~_rK2Vbopw6|)Y`4* z$(*k4>^2o$)spjj+IAzgZ#HU5T1AP_52&Ba)fHVyW7Co=N>_hj?kbwL*Y4EKS4y*i zi)}2y#ir8Q?kd}=S!>r-q;2e|rqRZ#DR*&KjfX$BMpEgcJKhW}SC zyor^SO`m_0J)g_AoK_E$`(BSaay_u|0DR75&F%$(D{F%=eP^z1ZOV_To3b~=cjOzn zU2o_pr|;q8SCBLqCgoqe03w$>nMW_|HBLgIJaeNY%m@V>d11DYKN&^gL@wluGs5V9 X;Yhnw6iTVQQYp@)qf*XTQl{d+JPZ(| diff --git a/mysite/__pycache__/settings.cpython-37.pyc b/mysite/__pycache__/settings.cpython-37.pyc index 7cb4e01380467fd5d20a2e68ff53aec3fd165122..c0246e4417926a46c5b06a1dc04fa5b5a43819f2 100644 GIT binary patch delta 63 zcmZn@`Xk8e#LLUY00heK>f_uu@`iG#=;>$V=cekXB<5wN=IFcRCzs}?=9Lud=cifjN5OuQ2?vl2^Pw*{`w8W+5v;qWbsalB-iME#<*ru^}lO?tz+X1#04*ers z`AfNS;xBMw?9ECmB&1r3HF2Kbym>P@+S`k~AKyPE1B8B|trbH23Lbq18$}tS9`$RF z`J*U28lASHuHcJ1#DFa zSE1N)KaMATU8Uq~f@6_;c=z!5{_NW3g;M!SmkA>DsP!J5p=-Mr4nj zI8*Me_NJB#0tRj}#rDAQ#z_+Wh6zTA*M&Ldl}P+9u#R`59{v7y=su7R-9~(6eY1*^ zs2j~@FgCMU_OMq91sYY|D41c??QF?c@cSSY*yGSqbb%f5F0f49&Q`yFBDHI=cKh>= zaA8P6t~67cEO}Wi$cZdk&V0GehIP7;wCn2 bR^9kHm$a?f%SS-2BiI6O*L&=b2fN;1J2^I- diff --git a/mysite/__pycache__/urls.cpython-37.pyc b/mysite/__pycache__/urls.cpython-37.pyc index 6c89a8e6394ff4a4d74e6a844ed7ba8ec64872fe..260cbbff077d279226d7c5c17aafae4d776c4c83 100644 GIT binary patch delta 63 zcmcb@eu|yfiITdTl;1LEu(sswRGIUzKG)U7Jo+Cw@a^+0Ok*Tlg;qS)=$T{ukq zA6)r|cF2{}{)L@zS|QbvpP&7n-}mF^;mJu9{QmjvSAfu8bTC5ifAZ4~yy0kpc)+m? z7J*+wiB-4=0|Y_YDUW!EAKhWU3-8e4nBxTXk8kgzugQ2qGNV@_Co5AEwY9`lB4(*|1vdLYgVyWVvKjB}K-ZFnYQ4 z_0C%nQv(s&>#1FU810J-OIAX{8)5;X!nw+Rpp=`;#=K-YH~*P3qbO)Pj0dzZ*UnH5 zl{8xg+RjJXK8XapHHUaB)y!Ct}f1QpYI Date: Sun, 12 Apr 2020 02:08:07 -0700 Subject: [PATCH 03/35] Added profile page, technician sign-up, foreign-key relationships, and issue assignment. Closes #1 Closes #7 Closes #8 --- myapp/forms.py | 7 +++++-- myapp/models.py | 4 ++-- myapp/templates/base.html | 2 +- myapp/templates/profile.html | 15 +++++++++++++ myapp/templates/viewissues.html | 3 ++- myapp/urls.py | 3 +++ myapp/views.py | 37 ++++++++++++++++++++++++++++++++- 7 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 myapp/templates/profile.html diff --git a/myapp/forms.py b/myapp/forms.py index 83faec4..2d4fa52 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -61,6 +61,7 @@ class IssueForm(forms.Form): # this field will eventually be removed as the affected user will # be automatically set to the user who is logged in + """ affected_user = forms.CharField( widget = forms.TextInput( attrs={'class': 'form-control'} @@ -69,6 +70,8 @@ class IssueForm(forms.Form): required=True, max_length=50, ) + """ + # it's now been removed :D """ is_solved = forms.BooleanField( @@ -79,14 +82,14 @@ class IssueForm(forms.Form): ) """ - def save(self): + def save(self, this_user): issues_instance = models.Issue_Model() issues_instance.title = self.cleaned_data["title"] issues_instance.description = self.cleaned_data["description"] issues_instance.issue_type = self.cleaned_data["issue_type"] #issues_instance.date_created = self.cleaned_data["date_created"] #issues_instance.assigned_user = self.cleaned_data["assigned_user"] - issues_instance.affected_user = self.cleaned_data["affected_user"] + issues_instance.affected_user = this_user issues_instance.is_solved = 0 issues_instance.save() return issues_instance diff --git a/myapp/models.py b/myapp/models.py index 30184a5..ea21d20 100644 --- a/myapp/models.py +++ b/myapp/models.py @@ -9,8 +9,8 @@ class Issue_Model(models.Model): description = models.CharField(max_length=240, null=True) issue_type = models.IntegerField() date_created = models.DateField(auto_now_add=True) - assigned_user = models.CharField(max_length=50, null=True) - affected_user = models.CharField(max_length=50, null=True) + assigned_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='assigned_user') + affected_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='affected_user') is_solved = models.BooleanField(null=True) # 0 for unsolved, 1 for solved class Profile(models.Model): diff --git a/myapp/templates/base.html b/myapp/templates/base.html index a51b3df..c6ea51a 100644 --- a/myapp/templates/base.html +++ b/myapp/templates/base.html @@ -20,7 +20,7 @@
    diff --git a/myapp/urls.py b/myapp/urls.py index a7e4a80..6bb70be 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -24,7 +24,10 @@ path('index.html', views.index), path('submit.html', views.submit), path('viewissues.html', views.viewissues), + path('viewissues/assign/', views.self_assign), path('aboutodit.html', views.about), + path('profile.html',views.profile_page), + path('profile/become_technician',views.become_technician), path('login/', auth_views.LoginView.as_view()), path('register/', views.register), path('logout/', views.logoff) diff --git a/myapp/views.py b/myapp/views.py index e5d79c5..68dd0f7 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -2,6 +2,7 @@ from django.db.models import Q #allows complex query lookups from django.contrib.auth.decorators import login_required from django.contrib.auth import logout +from django.core.exceptions import ObjectDoesNotExist from . import models from . import forms @@ -22,7 +23,7 @@ def submit(request): if request.method == "POST": form = forms.IssueForm(request.POST) if form.is_valid(): - form.save() + form.save(request.user) #pass in user for foreign key relationship form = forms.IssueForm() else: form = forms.IssueForm() @@ -61,9 +62,21 @@ def viewissues(request): "title":"ODIT - View Requests", "issues_list":issues_list, "form":form, + "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, } return render(request, "viewissues.html", context=context) +@login_required +def self_assign(request,issue_id): + if models.Profile.objects.get(user__exact=request.user).user_type: #confirm that user is a technician + try: + this_issue = models.Issue_Model.objects.get(id__exact=issue_id) + this_issue.assigned_user = request.user + this_issue.save() + except ObjectDoesNotExist: + pass + return redirect("/viewissues.html") + def about(request): context = { "title":"ODIT - About", @@ -88,3 +101,25 @@ def register(request): def logoff(request): logout(request) return redirect("/login") + +@login_required +def profile_page(request): + this_user = models.Profile.objects.get(user__exact=request.user) + context = { + "title": "ODIT - {}".format(request.user.username), + "user_name": request.user.username, + "bio": this_user.bio, + "email": request.user.email, + "is_technician": this_user.user_type, + } + return render(request, "profile.html", context=context) + +@login_required +def become_technician(request): + try: + this_user = models.Profile.objects.get(user__exact=request.user) + this_user.user_type = True + this_user.save() + except ObjectDoesNotExist: + pass + return redirect("/profile.html") From ca7b24f9aee63f1a5f843756a173a7e342b21ab5 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Wed, 15 Apr 2020 14:13:01 -0700 Subject: [PATCH 04/35] Fixes #46. --- myapp/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myapp/views.py b/myapp/views.py index 68dd0f7..22cc24d 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -44,8 +44,8 @@ def viewissues(request): issues_list = issues_list.filter( Q(title__contains=form.cleaned_data['keyword']) | Q(description__contains=form.cleaned_data['keyword']) | - Q(assigned_user__contains=form.cleaned_data['keyword']) | - Q(affected_user__contains=form.cleaned_data['keyword']) + Q(assigned_user__username__contains=form.cleaned_data['keyword']) | + Q(affected_user__username__contains=form.cleaned_data['keyword']) ) if (form.cleaned_data['issue_type']): issues_list = issues_list.filter( From a195936498fdc94877d609998411378ebeb7ee00 Mon Sep 17 00:00:00 2001 From: lcnorine <60401135+lcnorine@users.noreply.github.com> Date: Sun, 19 Apr 2020 14:35:36 -0700 Subject: [PATCH 05/35] added view assignments page. Closes #40 --- myapp/templates/base.html | 5 +++- myapp/templates/viewmyissues.html | 44 +++++++++++++++++++++++++++++++ myapp/urls.py | 1 + myapp/views.py | 42 ++++++++++++++++++++++++++++- 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 myapp/templates/viewmyissues.html diff --git a/myapp/templates/base.html b/myapp/templates/base.html index c6ea51a..6e98fbd 100644 --- a/myapp/templates/base.html +++ b/myapp/templates/base.html @@ -14,7 +14,10 @@ diff --git a/myapp/templates/viewmyissues.html b/myapp/templates/viewmyissues.html new file mode 100644 index 0000000..326aecd --- /dev/null +++ b/myapp/templates/viewmyissues.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} +{% block content %} + +
    +

    My Assigned Issues:

    +
    +
    +
    +
    + {% csrf_token %} + {{ form.as_table }}
    +
    +
    +
    +
    + +
    +
    +
    +
    + +{% if issues_list %} + +
    +
    +
    + {% for i in issues_list %} +

    Ticket # {{ i.id }}

    +
  • Title: {{ i.title }}
  • +
  • Description: {{ i.description }}
  • +
  • Date Created: {{ i.date_created }}
  • +
  • Issue_type: {{ i.issue_type }}
  • +
  • Assigned_user: {{ i.assigned_user }}
  • +
  • Affected_user: {{ i.affected_user }}
  • +
  • Is_solved?: {{ i.is_solved }}

  • + {% endfor %} +
    +
    +
    +{% else %} +

    You don't have any assigned issued with those parameters.

    +{% endif %} + +{% endblock %} diff --git a/myapp/urls.py b/myapp/urls.py index 6bb70be..e5ac2fd 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -24,6 +24,7 @@ path('index.html', views.index), path('submit.html', views.submit), path('viewissues.html', views.viewissues), + path('viewmyissues.html', views.viewmyissues), path('viewissues/assign/', views.self_assign), path('aboutodit.html', views.about), path('profile.html',views.profile_page), diff --git a/myapp/views.py b/myapp/views.py index 22cc24d..2c715e5 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -15,6 +15,10 @@ def index(request, page=0): "how":"How it works: ", "desc":"Send in a request --> A registered ODITer who has the skills needed receives the request --> They help out. ", } + try: + context["is_technician"] = models.Profile.objects.get(user__exact=request.user).user_type + except: # user is not logged in + pass return render(request, "index.html", context=context) @@ -30,7 +34,8 @@ def submit(request): context = { "title":"ODIT - Submit Request", - "form":form + "form":form, + "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, } return render(request, "submit.html", context=context) @@ -66,6 +71,36 @@ def viewissues(request): } return render(request, "viewissues.html", context=context) +@login_required +def viewmyissues(request): + issues_list = models.Issue_Model.objects.filter(assigned_user=request.user) + if request.method == "POST": + form = forms.IssueFilter(request.POST) + if form.is_valid(): + + if (form.cleaned_data['keyword']): + issues_list = issues_list.filter( + Q(title__contains=form.cleaned_data['keyword']) | + Q(description__contains=form.cleaned_data['keyword']) | + Q(affected_user__username__contains=form.cleaned_data['keyword']) + ) + if (form.cleaned_data['issue_type']): + issues_list = issues_list.filter( + Q(issue_type__exact=form.cleaned_data['issue_type']) + ) + else: + form = forms.IssueFilter() + else: + form = forms.IssueFilter() + + context = { + "title":"ODIT - View Requests", + "issues_list":issues_list, + "form":form, + "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, + } + return render(request, "viewmyissues.html", context=context) + @login_required def self_assign(request,issue_id): if models.Profile.objects.get(user__exact=request.user).user_type: #confirm that user is a technician @@ -81,6 +116,11 @@ def about(request): context = { "title":"ODIT - About", } + try: + context["is_technician"] = models.Profile.objects.get(user__exact=request.user).user_type + except: # user is not logged in + pass + return render(request, "aboutodit.html", context=context) def register(request): From be78d99929aaf5899dac661a0930c7887810e410 Mon Sep 17 00:00:00 2001 From: lcnorine <60401135+lcnorine@users.noreply.github.com> Date: Mon, 20 Apr 2020 21:44:46 -0700 Subject: [PATCH 06/35] Added view technicians page. Added edit profile page. Added pages to view other people's profiles. Made clear button work on search pages. Closed #3 Fixed #49 --- myapp/forms.py | 116 +++++++++++++++++++++++---- myapp/templates/base.html | 1 + myapp/templates/editprofile.html | 22 +++++ myapp/templates/profile.html | 1 + myapp/templates/viewissues.html | 2 +- myapp/templates/viewmyissues.html | 2 +- myapp/templates/viewprofile.html | 12 +++ myapp/templates/viewtechnicians.html | 39 +++++++++ myapp/urls.py | 3 + myapp/views.py | 90 ++++++++++++++++++--- 10 files changed, 257 insertions(+), 31 deletions(-) create mode 100644 myapp/templates/editprofile.html create mode 100644 myapp/templates/viewprofile.html create mode 100644 myapp/templates/viewtechnicians.html diff --git a/myapp/forms.py b/myapp/forms.py index 2d4fa52..25fdd81 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -119,20 +119,104 @@ class IssueFilter(forms.Form): ) class RegistrationForm(UserCreationForm): - email = forms.EmailField( - label="Email", - required=True, + email = forms.EmailField( + label="Email", + required=True, validators=[must_be_unique] - ) - - class Meta: - model = User - fields = ("username", "email", - "password1", "password2") - - def save(self, commit=True): - user = super(RegistrationForm, self).save(commit=False) - user.email = self.cleaned_data["email"] - if commit: - user.save() - return user \ No newline at end of file + ) + + class Meta: + model = User + fields = ("username", "email", + "password1", "password2") + + def save(self, commit=True): + user = super(RegistrationForm, self).save(commit=False) + user.email = self.cleaned_data["email"] + if commit: + user.save() + return user + +class ProfileForm(forms.Form): + user_name = forms.CharField( + widget = forms.TextInput( + attrs={'class': 'form-control'} + ), + label='User Name', + required=False, + max_length=150 + ) + + email = forms.EmailField( + label="Email", + required=False + ) + + bio = forms.CharField( + widget=forms.Textarea( + attrs={'class': 'form-control'} + ), + label='Bio', + required=False, + max_length=720 + ) + + def save(self,id): + this_user = User.objects.get(id__exact=id) + if self.cleaned_data["email"] and self.cleaned_data["email"] != this_user.email: + this_user.email = self.cleaned_data["email"] + if self.cleaned_data['user_name']: + this_user.username = self.cleaned_data["user_name"] + if self.cleaned_data['bio']: + this_user.profile.bio = self.cleaned_data["bio"] + this_user.save() + return this_user + +class ProfileFormNontech(forms.Form): + user_name = forms.CharField( + widget = forms.TextInput( + attrs={'class': 'form-control'} + ), + label='User Name', + required=False, + max_length=150 + ) + + email = forms.EmailField( + label="Email", + required=False + ) + + def save(self,id): + this_user = User.objects.get(id__exact=id) + if self.cleaned_data["email"] and self.cleaned_data["email"] != this_user.email: + this_user.email = self.cleaned_data["email"] + if self.cleaned_data['user_name']: + this_user.username = self.cleaned_data["user_name"] + this_user.save() + return this_user + +class ProfileFilter(forms.Form): + keyword = forms.CharField( + widget = forms.TextInput( + attrs={ + 'class': 'form-control font-weight-normal', + 'id': 'keyword' + } + ), + label='Filter by Keyword', + required=False, + max_length=100 + ) + + name = forms.CharField( + widget = forms.TextInput( + attrs={ + 'class': 'form-control font-weight-normal', + 'id': 'issue_type' + } + ), + label='Filter by Name', + required=False, + max_length=100 + ) \ No newline at end of file diff --git a/myapp/templates/base.html b/myapp/templates/base.html index 6e98fbd..362d0e3 100644 --- a/myapp/templates/base.html +++ b/myapp/templates/base.html @@ -14,6 +14,7 @@

    - + Clear
    diff --git a/myapp/templates/viewmyissues.html b/myapp/templates/viewmyissues.html index 326aecd..3eae4e1 100644 --- a/myapp/templates/viewmyissues.html +++ b/myapp/templates/viewmyissues.html @@ -13,7 +13,7 @@

    My Assigned Issues:


    - + Clear
    diff --git a/myapp/templates/viewprofile.html b/myapp/templates/viewprofile.html new file mode 100644 index 0000000..cb6b09d --- /dev/null +++ b/myapp/templates/viewprofile.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% block content %} + +{% load static %} + +

    {{ user_name }}

    +

    Email: {{ email }}

    +

    Bio:

    +

    {{ bio }}

    + + +{% endblock %} diff --git a/myapp/templates/viewtechnicians.html b/myapp/templates/viewtechnicians.html new file mode 100644 index 0000000..c9bb78b --- /dev/null +++ b/myapp/templates/viewtechnicians.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% block content %} + +
    +

    Search for users

    +
    +
    +
    +
    + {% csrf_token %} + {{ form.as_table }}
    +
    +
    +
    +
    + Clear +
    +
    +
    +
    + +{% if profile_list %} + +
    +
    +
    + {% for i in profile_list %} +
  • Name: {{ i.user.username }}
  • +
  • Bio: {{ i.bio }}
  • +
  • View Profile
  • + {% endfor %} +
    +
    +
    +{% else %} +

    There are no technicians with those parameters.

    +{% endif %} + +{% endblock %} diff --git a/myapp/urls.py b/myapp/urls.py index e5ac2fd..1d92d18 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -28,7 +28,10 @@ path('viewissues/assign/', views.self_assign), path('aboutodit.html', views.about), path('profile.html',views.profile_page), + path('profile/edit.html',views.edit_profile), path('profile/become_technician',views.become_technician), + path('viewtechnicians.html',views.view_technicians), + path('viewprofile/',views.view_profile), path('login/', auth_views.LoginView.as_view()), path('register/', views.register), path('logout/', views.logoff) diff --git a/myapp/views.py b/myapp/views.py index 2c715e5..03937ce 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -124,19 +124,19 @@ def about(request): return render(request, "aboutodit.html", context=context) def register(request): - if request.method == "POST": - form_instance = forms.RegistrationForm(request.POST) - if form_instance.is_valid(): - form_instance.save() - return redirect("/login/") - - else: - form_instance = forms.RegistrationForm() - context = { + if request.method == "POST": + form_instance = forms.RegistrationForm(request.POST) + if form_instance.is_valid(): + form_instance.save() + return redirect("/login/") + + else: + form_instance = forms.RegistrationForm() + context = { "title":"ODIT - Register", - "form":form_instance, - } - return render(request, "registration/register.html", context=context) + "form":form_instance, + } + return render(request, "registration/register.html", context=context) def logoff(request): logout(request) @@ -151,9 +151,29 @@ def profile_page(request): "bio": this_user.bio, "email": request.user.email, "is_technician": this_user.user_type, - } + } return render(request, "profile.html", context=context) +@login_required +def edit_profile(request): + this_user = models.Profile.objects.get(user__exact=request.user) + if request.method == "POST": + form_instance = forms.ProfileForm(request.POST) + if form_instance.is_valid(): + form_instance.save(request.user.id) + return redirect("/profile.html") + else: + if this_user.user_type: + form_instance = forms.ProfileForm(initial={'bio':this_user.bio,'email':request.user.email,'user_name':request.user.username}) + else: + form_instance = forms.ProfileFormNontech(initial={'email':request.user.email,'user_name':request.user.username}) + context = { + "title": "ODIT - Edit Profile".format(request.user.username), + "form": form_instance, + "is_technician": this_user.user_type, + } + return render(request, "editprofile.html", context=context) + @login_required def become_technician(request): try: @@ -163,3 +183,47 @@ def become_technician(request): except ObjectDoesNotExist: pass return redirect("/profile.html") + +@login_required +def view_technicians(request): + if request.method == "POST": + form = forms.ProfileFilter(request.POST) + if form.is_valid(): + profile_list = models.Profile.objects.filter(user_type=True) + if (form.cleaned_data['keyword']): + profile_list = profile_list.filter( + Q(bio__contains=form.cleaned_data['keyword']) | + Q(user__username__contains=form.cleaned_data['keyword']) + ) + if (form.cleaned_data['name']): + profile_list = profile_list.filter(user__username__contains=form.cleaned_data['user_name']) + else: + form = forms.ProfileFilter() + profile_list = models.Profile.objects.filter(user_type=True) + else: + form = forms.ProfileFilter() + profile_list = models.Profile.objects.filter(user_type=True) + + context = { + "title":"ODIT - View Requests", + "profile_list":profile_list, + "form":form, + "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, + } + return render(request, "viewtechnicians.html", context=context) + +@login_required +def view_profile(request,user_id): + this_user = models.Profile.objects.get(user__exact=request.user) + try: + view_user = models.Profile.objects.get(user__id__exact=user_id) + except ObjectDoesNotExist: + return redirect("/viewtechnicians.html") + context = { + "title": "ODIT - {}".format(view_user.user.username), + "user_name": view_user.user.username, + "bio": view_user.bio, + "email": view_user.user.email, + "is_technician": this_user.user_type, + } + return render(request, "viewprofile.html", context=context) \ No newline at end of file From 643f19259963786c55f7797d2d6ea8d58652687f Mon Sep 17 00:00:00 2001 From: Asterisk007 Date: Sun, 26 Apr 2020 16:11:37 -0700 Subject: [PATCH 07/35] Complete #43, start #44 (#52) * Merge VioletInferno/ODIT:4aa6f225 into master - Add basic registration and login functionality. - Validate usernames/emails are unique. - Modify front-end to showcase current logged in user * Resolve issues #24, #28 - Add issue submission guide image - Ensure mobile browsers can view all pages correctly without odd margins - Add small tweaks to view submissions page to make it slightly prettier * Resolve issues #24, #28 - Add issue submission guide image - Ensure mobile browsers can view all pages correctly without odd margins - Add small tweaks to view submissions page to make it slightly prettier * Revert change to settings.py * Remove old database files * Remove migrations and database file for merge * Add styling to user profile page, viewissues page - User can view their own issues and assigned issues here - Viewissues page has gotten a reformatting using Bootstrap cards * Add issue views on profile page, edit signup form appearance (resolve #43, #44) * mend * Add everything else that I didn't, apparently. * Fix broken viewmyissues page * Fix broken viewmysubmittedissues page Co-authored-by: John Higdon --- db.sqlite3 | Bin 139264 -> 151552 bytes myapp/__pycache__/__init__.cpython-37.pyc | Bin 132 -> 143 bytes myapp/__pycache__/admin.cpython-37.pyc | Bin 282 -> 290 bytes myapp/__pycache__/forms.cpython-37.pyc | Bin 2622 -> 4534 bytes myapp/__pycache__/models.cpython-37.pyc | Bin 927 -> 1650 bytes myapp/__pycache__/urls.cpython-37.pyc | Bin 1235 -> 1661 bytes myapp/__pycache__/views.cpython-37.pyc | Bin 2470 -> 6414 bytes myapp/forms.py | 20 +++-- myapp/migrations/0001_initial.py | 38 --------- myapp/migrations/0003_auto_20200329_1444.py | 30 ------- myapp/migrations/0004_auto_20200330_0044.py | 28 ------- .../__pycache__/0001_initial.cpython-37.pyc | Bin 1049 -> 1442 bytes .../0002_auto_20200328_1923.cpython-36.pyc | Bin 780 -> 0 bytes .../0002_auto_20200328_1923.cpython-37.pyc | Bin 749 -> 0 bytes .../0003_auto_20200329_1444.cpython-37.pyc | Bin 1092 -> 0 bytes .../0004_auto_20200330_0044.cpython-37.pyc | Bin 719 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 174 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 143 -> 154 bytes myapp/static/style.css | 24 +++++- myapp/templates/base.html | 1 + myapp/templates/profile.html | 28 ++++--- myapp/templates/registration/login.html | 4 +- myapp/templates/registration/register.html | 75 ++++++++++++++---- myapp/templates/viewissues.html | 52 +++++++----- myapp/templates/viewmysubmittedissues.html | 53 +++++++++++++ myapp/urls.py | 1 + myapp/views.py | 32 +++++++- mysite/__pycache__/__init__.cpython-37.pyc | Bin 133 -> 144 bytes mysite/__pycache__/settings.cpython-37.pyc | Bin 2300 -> 2311 bytes mysite/__pycache__/urls.cpython-37.pyc | Bin 970 -> 981 bytes mysite/__pycache__/wsgi.cpython-37.pyc | Bin 544 -> 545 bytes mysite/settings.py | 4 +- 32 files changed, 239 insertions(+), 151 deletions(-) delete mode 100644 myapp/migrations/0001_initial.py delete mode 100644 myapp/migrations/0003_auto_20200329_1444.py delete mode 100644 myapp/migrations/0004_auto_20200330_0044.py delete mode 100644 myapp/migrations/__pycache__/0002_auto_20200328_1923.cpython-36.pyc delete mode 100644 myapp/migrations/__pycache__/0002_auto_20200328_1923.cpython-37.pyc delete mode 100644 myapp/migrations/__pycache__/0003_auto_20200329_1444.cpython-37.pyc delete mode 100644 myapp/migrations/__pycache__/0004_auto_20200330_0044.cpython-37.pyc delete mode 100644 myapp/migrations/__pycache__/__init__.cpython-36.pyc create mode 100644 myapp/templates/viewmysubmittedissues.html diff --git a/db.sqlite3 b/db.sqlite3 index a3f85ac4843006a6e731d5582a6a7041f81a3453..4b8190114148f26e69ac9d8a64f9739d27029399 100644 GIT binary patch delta 3611 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 a6vldI1KO62@8Nw<#eeb7M1{V#nfM1jxyaT4 diff --git a/myapp/__pycache__/__init__.cpython-37.pyc b/myapp/__pycache__/__init__.cpython-37.pyc index 591a468b269b9a791a18aa7876e3793b2d4e7076..85b3d1810ad963d33fddcc8e68f0a2a5a77a5176 100644 GIT binary patch delta 69 zcmZo+>}TY5;^pOH0D>r^qKVuVdKNBLF`>n&Ma4121(n&EF)sPZrManjCB-rE&iOex Wsp+XP{w|&&F}anA1qCq^)8qi5;1)Xo delta 58 zcmeBYY+>Yf;^pOH0D@ZPgo)f1%DVa)`MIh3DT#TRsX6*C`N^fZsd**E`uQoDCHlFQ Li3J7v6AR@4uI~|K diff --git a/myapp/__pycache__/admin.cpython-37.pyc b/myapp/__pycache__/admin.cpython-37.pyc index c62fda98f9037f23cfa36046b7113a244e5629fc..4963cc4fd2de23a27a57e3e70e95e393ce8a2fd1 100644 GIT binary patch delta 92 zcmbQmw1|nS7fWTAW%`98+9S pnVlKqlAm0fo0?Zr924)HpOcfCo*Lut;u#W?TbWo;5HseJXiIZc^; iWv1rnyW}UA=BDPA6zk`wWR~dXRwfn{=uc*3R0II%Ul~gP diff --git a/myapp/__pycache__/forms.cpython-37.pyc b/myapp/__pycache__/forms.cpython-37.pyc index 21f950110fa18de1f5fd107dc1ca4ae842be0d1b..c8eb7987f6039c5a9cfdfb2679b40612ddd1c1eb 100644 GIT binary patch literal 4534 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 diff --git a/myapp/__pycache__/models.cpython-37.pyc b/myapp/__pycache__/models.cpython-37.pyc index 5b588f2002f45186e2d6ba467887e87a15834bce..a074bf0a4c2267d751d0236c608df2bc0376279b 100644 GIT binary patch literal 1650 zcmY*ZO>f*p81~p+f30_uY$`zIOF}|oLFC8*A=EZ$QPg&e$o68b7Jh!vaO`)3#kiLuG+GxO}byV@Nd7@G>!`=G_yZ84VstvNz2TfDSyzXX-OU-pt zol5b$qdr31ihsY^`*ucj&@;U{J1J*-O|f3ey45qj+f)?*&Ytb*KHd(Kd2dkdjn?gZQZ3~^M5mM~#6Ux51B1RdGNzWSW}QCaIY zuM26yYZeA4FLHIHZ^0#`X1j~qqr+ESGiZyNFgdQz)K~ZxR7e_xl5~rdNOaB?&KvgD zq5BXB*<=h-T+L&AdrNs1lllVL>Pr$gJXRLM7G=EyfD*J_(p6tWpWt4J#UihdnjJCk zx_bA@E}FVk<$MP>$nj3cblc+WgPR|&+&grsfTjmb4l6?E1Yh$A4G^G` zG_<6YJSPx9_=!L$=tb}`EJH*hh!KgekqAaFNip8zNm5WdY7_`*Di)~a`m1MDCAQ+kZsvbbdv z##-J8#%#tI{$nqlpELHh=W@vCz*S41Zn%C{3kf#v>P`wf0bwd#Z@XHxHa}}Su@(cP z%xd3fx7!MvE_f&W!7>MQS)~PTP)@lq^|}?ndLuN3tCgrQ;X|9BDkTMPhm&b-m{Ial zz*nO0U_ajcdNALpM$Cb?*w}obs=g6zXXXm(Zr<$pb~_(*JKpXz-VWjZg$|J8QT8I?uNL$CQ5RZdXl)MGEsQowe zm&HW8i>xQknR$Wt!iyLFO*FsKe&lh6?fCuN60EuH%8`Xo;cU3_jgulnAkNth~GxD5&6}8FZ;r2YCuCkkR9v-E?0lq)t AL;wH) diff --git a/myapp/__pycache__/urls.cpython-37.pyc b/myapp/__pycache__/urls.cpython-37.pyc index 1828c0cd5e8689d59cf700dbba9306fb3ebef21e..659d7a6b60331fc7d277bd10daf6f3e78101a669 100644 GIT binary patch delta 664 zcmZ{i%}T>S6or$tR;_7G`lqcZ?y4XbL_|bHv>P|NP&Y#`q|G#)nm;;8rQLMl6G+#B zu3fozE$)2;eF{PF&ZI$6oRH)@_h#nY19_ePl&c4sOj>~T_HcKxk%Bi9@yY@0!%g3B zs@>saCwnd7q$%Uc&Mc=4kisboq;i@C%5hSF@|;wl0;e2Mky9Q|bxL=0_X1Z1sLyjM z0+p{NOF5Ewf%! zs2P+J%dPDaH`w7NotS%rtkLkoz%xk@ohJKTuSIMeDRr!Ba4h@a82rj{t$~}KgY^J6 z+b(Gm!yOcu-M1bOSZ39D6Sog3?lSk$ZDL7W7(FGdAxcF7Q2KjhBr}fFqGF_e1w}Iy z+bumxhbDL&6sORA!@@{r)9d32kosqCr1TcS=tmM7S;u=ud&#YB6@G*+dwguxceHbe zKsD<3FNs$7nxTW;fNJ`oXWQ7q+DZNBOmq5%?`xy`WNB>$_9aDGR76>l6KV0kD+`@3 D7dO$P delta 246 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 C8FwlG delta 1316 zcmZuwOK%)S5T2g5XJ@<{uipa2BC(?-B8!kv4zZ93QNV{7@sL1s$ZEXRYY)t0)7|UD zmaRSDBSebk>H}Pm_y-*M2NB}L91y<%?l~Z;dLpwSnN~lhyQ})EufBTx&X3*s+ffu4 z_+9yHdjHwnllfKl_{p{HFC1{QAaBJjW`F}8uERLQ^%D3ncgEs~dk{eD%=m`I^SBNn z((5+NL;K8#JJ5kkIA4MV=;FKpi=P?2kdBo0e1Ns4#2f9Yhbez3Z;X#>CoO+>VqJeiv_xB{K9=IXFzR6lz;0hx|DMqJw8*nFb18hu#cb zGIE=DFp70U5-o-qu#oxK0@JrJL{qF+y9;aV&+1+0=`9G(ty4>dh`)7WL8$RZyA1;G zYku^w6wqUFTcs-FgTb&YRFW1Fx2jLvwc9I+l<9uKVK9+gyl}pfj7EH@UOK9SlmZ>7 zqcJBpzqq}r)o|6)CvuRbQt23v+my0q_XX}Eu|m;n;#v)HX{NZ)z{M(^&EZftXM=ks z@T~UAy{{0FtgR%=>TsCxgpfm0jlIq-tuT9r-`B~@t4I$119cVe$gS$BckLcBdjQ?CRi;!;kOme7^D4#`}BaL{-1Gy4&~*W(S00U;-0I}(dKK&BhsYO{53xxD+06jcPw5izxAPJv8GnyF WN=nQkRtPo|yA=dsC%o*te*0gVPb3Zi diff --git a/myapp/forms.py b/myapp/forms.py index 25fdd81..03666ab 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -98,7 +98,7 @@ class IssueFilter(forms.Form): keyword = forms.CharField( widget = forms.TextInput( attrs={ - 'class': 'form-control font-weight-normal', + 'class': 'form-control', 'id': 'keyword' } ), @@ -110,7 +110,7 @@ class IssueFilter(forms.Form): issue_type = forms.IntegerField( widget = forms.TextInput( attrs={ - 'class': 'form-control font-weight-normal', + 'class': 'form-control', 'id': 'issue_type' } ), @@ -127,8 +127,18 @@ class RegistrationForm(UserCreationForm): class Meta: model = User - fields = ("username", "email", - "password1", "password2") + fields = ( + "username", + "email", + "password1", + "password2" + ) + + def __init__(self, *args, **kwargs): + super(RegistrationForm, self).__init__(*args, **kwargs) + for field in self.fields: + self.fields[field].widget.attrs.update({'class' : 'form-control'}) + self.fields['password1'].widget.attrs.update({'onfocus' : 'display_requirements()'}) def save(self, commit=True): user = super(RegistrationForm, self).save(commit=False) @@ -219,4 +229,4 @@ class ProfileFilter(forms.Form): label='Filter by Name', required=False, max_length=100 - ) \ No newline at end of file + ) diff --git a/myapp/migrations/0001_initial.py b/myapp/migrations/0001_initial.py deleted file mode 100644 index e2eae9b..0000000 --- a/myapp/migrations/0001_initial.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.0.3 on 2020-03-01 22:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Issue_Model', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('description', models.CharField(max_length=240)), - ('issue_type', models.IntegerField()), - ('date_created', models.DateField(auto_now_add=True)), - ('assigned_user', models.CharField(max_length=50)), - ('affected_user', models.CharField(max_length=50)), - ('is_solved', models.BooleanField()), - ], - ), - migrations.CreateModel( - name='User_Model', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('first_name', models.CharField(max_length=50)), - ('last_name', models.CharField(max_length=50)), - ('location', models.CharField(max_length=200)), - ('user_type', models.BooleanField()), - ('username', models.CharField(max_length=50)), - ], - ), - ] diff --git a/myapp/migrations/0003_auto_20200329_1444.py b/myapp/migrations/0003_auto_20200329_1444.py deleted file mode 100644 index 2f72d2d..0000000 --- a/myapp/migrations/0003_auto_20200329_1444.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.0.4 on 2020-03-29 21:44 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('myapp', '0002_auto_20200328_1923'), - ] - - operations = [ - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('bio', models.TextField(blank=True, max_length=500)), - ('location', models.CharField(max_length=200)), - ('user_type', models.BooleanField()), - ('birth_date', models.DateField(blank=True, null=True)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.DeleteModel( - name='User_Model', - ), - ] diff --git a/myapp/migrations/0004_auto_20200330_0044.py b/myapp/migrations/0004_auto_20200330_0044.py deleted file mode 100644 index aa6505b..0000000 --- a/myapp/migrations/0004_auto_20200330_0044.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.0.4 on 2020-03-30 07:44 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('myapp', '0003_auto_20200329_1444'), - ] - - operations = [ - migrations.AlterField( - model_name='profile', - name='bio', - field=models.TextField(blank=True, max_length=500, null=True), - ), - migrations.AlterField( - model_name='profile', - name='location', - field=models.CharField(max_length=200, null=True), - ), - migrations.AlterField( - model_name='profile', - name='user_type', - field=models.BooleanField(null=True), - ), - ] diff --git a/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc b/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc index 4059959aee2b0b552d55a735e2152482ff9b5419..02ce77dbdc7a55a00a636196fbdf48cd0adf90c3 100644 GIT binary patch literal 1442 zcmZuxOLOBy5Y|YtEh)D1*le zA0LGmxYPk|%wa@0V-gc$WLLOjFZRZM>|5-KT3mnSFrU?abyy9&tnrH%H<)+jbn16_ z-sun>C@4#wr>f)XXv|ZYl)T85u8#`_LR}1v-||^U;RP;rKpY30m@p@H8Hqjc-_@X= zHQtky!~ytO$Xw<@l&vs=KdgY&=l;lL4b(MJ6W|Kx9%>@gw3zX0&RxVU#BD_FIYG3F zXcZA*Yu37scn#LGjV#I@Wt%1^+c1{2&K}KOn|bqpGe5R@w%E3f`^2K1`>Y>8^zQL{ z2Qz-S$oSOyeT3+tnrDc%9|IH?sSdGUrOjOmaostWNM*=Z%C z5e$(hYRmHEmI>9AAPjky8@X*%twbrF=1WK4UebEY&(Ut3E;>6pp!N`@I-(TcgQ)$Qk6rnRJb5_3*m)Exo=v{(+ufc8|~S zUP})S$kCDQvE@jbw_AsY*!mO0pbmTRwp@ruH;Jso=F6fGkmL(P7jIdKt;-yG1#T6r zvn`X_+1QuU} z-yQkfkYu)hUv&@q*Ej>JuO_ow-tQK}=@{}-_32R|1cvQjc29f#@eFC{KYUjD`}_M} z(gk&UlbNhxv;dd-!U(SKwSAws?k3qFYov{9*Q>CRBh<9XQ({kb0-PUv!M$OTk1Ddm wg@z4mUn)X(?v;DhM{RFOhWrY%+Gr1VtE8{dpo8aC^S?1YR(0H(SViFd2cZ6+9{>OV literal 1049 zcmZuwJ9E=O5SC7|Ey)i8gf}&Vi^PFC!-OOgCPmT!jS7y7cdeY!3!NM=Gc-V({{SWb zgx_#2l{*S5D)!Fugv@Z7+u7aQ-EZ%^)o#BZIkY}{uU~y?InGaGtd>v84sG>-1UTTP zPUgmL#$x6=&m3UjeR04;cj|riVh{Z1&akzhSZBy|l*yzLwJdU_+gSmas*vfOum2bM#-+TQm#kaXy4@h$S=EHQ|3)Qk zgOISe5BG?w`#L;Yar8oW50#oBKQc^dCgDJ{!~LPJdtz1>d|aWZ5p=h#WG1RPe}i)! zDy*bPQ*i56c<3u4qbW)@t&ucC-tfB0;+K(OY<&^Uv#b`X>sd$ zNmYPAR#=p|#LkO%Tmb04P)a5_0-q7^;<3r@i^&AX)S30^P%5s9^bCO}z_-1$ClXUo zI(kV-&Gn**tW>@1HB7}y4boz4CuZ@()D8^{w~YlxHRXXqiin9a&+;F zjJCG69`UB>&2nCuf3HnjJtPq@pZUJ;GPdpx=!>izxNF{p&v438E7NY^eVQ z3;&W=rf$qkJf~M35@5^E&)<9c{Jv+;r_<==w@+`sdIcMPQ0-(+ z?Pjino+Ii~?+csJLFpTj11MAX}(;tqGOcwnyGCHWuFf^^N&O@S#~Sq z%U+1s1MOBXk$KGkvo=_ACMa-d%}aU7VGb$Nh2pL4()K41nviRv8}WhB*ijK6XR)gS z*wqM39GNj0XbCY9v4!=5fj=SSeV+?^l|50`GD(>%IMd3tywPLPG4;$Aq2QU}qNl5T zcQ%tJO(R$?hp35~mR-KvccgCEtF8G};aYaMz;8gj##O!IB|dG6zGkx1cu}l?1TR{} zWqIpvn&5l$1lQ|jqb~64(--I9Lx1trr@+wZl;nNakTgk?WS-t9#}Cr^QM*?5<5|7> zHkh$D@_omJIdlKL5BX=YZ$et-vTTm%yFvA!bO>JQ*m*aB*Nh+T`uE5-MB6sayx&qs B&a?mk diff --git a/myapp/migrations/__pycache__/0002_auto_20200328_1923.cpython-37.pyc b/myapp/migrations/__pycache__/0002_auto_20200328_1923.cpython-37.pyc deleted file mode 100644 index 69a36b756a641222d0aacba3289fad45a97cd28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmZ`%J#W-N5Z$$Xm$UBDEDfYM8w+DVAc5vuOc z0LiEznI~vLGarKWz=FeYy(a=O5W{Ov>|O8TqyNN17mxm`A7gxk(aANnC`FKkVv1Dn znDF(EBN85zSG;M=BuSD3CM(%VuClSzx(DX?n<-zdVA+9Sy@qy^BJm5?DgVqAR7H1b zf~r?4_OW~0F{^k97_)Y;lAr`)Xf2EC2E&X6=w&M#JEzSr1T>-4OxNlYh?ur^H>YuA zM$ADmW+G=E62+;P#)jdQZa44v%2niIV0#y?(QPh=_-2@xQPS;LLdaK%N z{-6gqR{fEF!(Myh-cwJVT_>Pg+R4o9?7W#blfz=sR^a=&@#TF@SCrqvSbShB2XK;o z5JVv;R7R+SkkHjo9cdkHq<3^_YhkWqyjF-#a^Dn^qgs&vs&(>2YbmaA5APKhaWkQ5 z>PN%GRk=O#hs;a;I7+xNiU|#q^S+2%d=4lFaFXvJsM0}1>8Mn@)oCs;?hrvkwUY-N zlc+?aR$v1*pc8}SXZk=TCin{Av4}lW!7hO95Qh|J2&^S)-4^c@(3Zi!B;S@~+zQys zv=poaRW#;Ivs$gzus2C# zT&vcq)t%Z4yuDZ3;rX{L9{3^Us!!U-Ts>{NI(KAXpHVNRgcrulA9-wwuj!Oq31z+) z`kyIxK2p|;6N)2mM7h@UWB(5VY5}wtdeJqo>fPXwM#J=qn_=9S1mFJx23^Ef;D=ii zNQcwum~y-4v-AoRfOJ(>61RFZ2}7=n7)WZx5r)Cg6lzUlaOe`(82B_K3AZmrsxvV= z$o>r8pSv5}#Iib!xs5Rlb`nz19gIIryimNym}vs5oO}YFydK;WI;Ih!QGd!*akX5( zY@guE*3mnBcF{a~!<~l+pC-J}kUU9bCbpDYb>R6}l*O$!y-DY41>Kw*#NWEx& z(S)8ewRjQHb_^mj4H9_KFy<=haZ~mV8_M&IdaF@y9`Qm`(jk$#9gpdJg?}il3Ux^F z_vCQD+oZ{L8jrh8nQp6-=;j%1W;@M%B{?X9cDMf4j<}P4-;0 bATS@B$+T_oar0$1%~xW2i2=fa3QX-E*9<#* diff --git a/myapp/migrations/__pycache__/0004_auto_20200330_0044.cpython-37.pyc b/myapp/migrations/__pycache__/0004_auto_20200330_0044.cpython-37.pyc deleted file mode 100644 index 9d7f8620e261952ba8cb5177d57a7b2ee2244ef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmYjPJ#X7E5G6&)mK3`PvJ_~SP6f0Cs^g_aQKYWXkD=)hPl6CaHqVY6N>ud$#ADE| z{uQ12Px>3UcFJCK=+q+}BcX7|<2&N zNeY_K!bu!TJ`mvu_MHd@bj`l8gbDYYMBXjlC6S}UB45>6o2#gq|m-p3#-BHFYGdM>HxReD6WI9ftt6Q z3L&svL(Y-3lYsGn^RHbd4Y4^1sGt;3E^=sUoEg#KTiHVW-aJ_|OFo0^ z)}D3n?lRk@^kAZtgsj{pLRG=tfPRwti7Cvue;+5W(kV1ot*X-LIxAP|*?HS7m+6=3 zr&(&HOYdi!qKM;%BA&z?k@0c0sm=e>Lu(AL&w8#)9sG`*-F|qt+k0n`s{>)5I~H@> bmTko*@2lHIPmxdiuXh5yF&#HXheP%s-J!d6 diff --git a/myapp/migrations/__pycache__/__init__.cpython-36.pyc b/myapp/migrations/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 7835ec047d8192e6e33e0d088052b011ae2940fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmXr!<>g{nP#?zt1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnuW0?;yb}Fn{m|mn zqGJ85+>Fe0eV6>?(%jU%l4AYf1$83>eG_8?{oKm5{Gx1qe;3aX wAUm<3KtDG#y(qCHGe56bKR!M)FS8^*Uaz3?7Kcr4eoARhsvXGEVjyM!0KrTw!Tz*Q}arS_489QOZ0Oq X6AKFTb2HP65=%1k^NRH+*2n<>l-w2v diff --git a/myapp/static/style.css b/myapp/static/style.css index 4f1e5a3..9b99361 100644 --- a/myapp/static/style.css +++ b/myapp/static/style.css @@ -1,8 +1,11 @@ -.card { - color: #f1f1f1; +a { + color: #aac4ff; } @media (prefers-color-scheme: light) { + .card { + color: #f1f1f1; + } .navbar { background-color: gray; } @@ -26,6 +29,23 @@ } @media (prefers-color-scheme: dark) { /* Like regular styles.css, but dark mode */ + .card { + color: #FFFFFF; + } + .card.bg-light{ + color: #3c3c3c; + } + .card.bg-light > .card-header { + color: #3c3c3c; + background-color: #dfdfdf; + } + .card.bg-light > .card-body { + color: #3c3c3c; + background-color: #c2c2c2; + } + .card.bg-light > *{ + color: #3c3c3c; + } body { color: #c4c4c4; background: #414141; diff --git a/myapp/templates/base.html b/myapp/templates/base.html index 362d0e3..9bb8ded 100644 --- a/myapp/templates/base.html +++ b/myapp/templates/base.html @@ -14,6 +14,7 @@ diff --git a/myapp/templates/profile.html b/myapp/templates/profile.html index 9bf41dd..472f4eb 100644 --- a/myapp/templates/profile.html +++ b/myapp/templates/profile.html @@ -17,9 +17,12 @@

    Email: {{ email }}

    {% if is_technician %}

    Bio:

    {{ bio }}

    +

    Location:

    +

    {{ location }}

    {% else %} Sign Up to be a Technician! {% endif %} + Edit Profile diff --git a/myapp/templates/viewprofile.html b/myapp/templates/viewprofile.html index cb6b09d..61af0e4 100644 --- a/myapp/templates/viewprofile.html +++ b/myapp/templates/viewprofile.html @@ -7,6 +7,8 @@

    {{ user_name }}

    Email: {{ email }}

    Bio:

    {{ bio }}

    +

    Location:

    +

    {{ location }}

    {% endblock %} diff --git a/myapp/templates/viewtechnicians.html b/myapp/templates/viewtechnicians.html index c9bb78b..fbf20c6 100644 --- a/myapp/templates/viewtechnicians.html +++ b/myapp/templates/viewtechnicians.html @@ -2,7 +2,8 @@ {% block content %}
    -

    Search for users

    +

    Search for technicians

    +

    Searches can be done via username, bio or location.

    @@ -26,8 +27,10 @@

    Search for users

    {% for i in profile_list %}
  • Name: {{ i.user.username }}
  • -
  • Bio: {{ i.bio }}
  • -
  • View Profile
  • +
  • Bio: {{ i.bio }}
  • +
  • Location: {{ i.location }}
  • +
  • View Profile
  • +
    {% endfor %}
    diff --git a/myapp/views.py b/myapp/views.py index fc63a61..c39e2b9 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -93,7 +93,7 @@ def viewmyissues(request): form = forms.IssueFilter() context = { - "title":"ODIT - View Requests", + "title":"ODIT - View Assignments", "issues_list":issues_list, "form":form, "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, @@ -148,6 +148,7 @@ def profile_page(request): "title": "ODIT - {}".format(request.user.username), "user_name": request.user.username, "bio": this_user.bio, + "location": this_user.location, "email": request.user.email, "is_technician": this_user.user_type, } @@ -163,7 +164,7 @@ def edit_profile(request): return redirect("/profile.html") else: if this_user.user_type: - form_instance = forms.ProfileForm(initial={'bio':this_user.bio,'email':request.user.email,'user_name':request.user.username}) + form_instance = forms.ProfileForm(initial={'location':this_user.location,'bio':this_user.bio,'email':request.user.email,'user_name':request.user.username}) else: form_instance = forms.ProfileFormNontech(initial={'email':request.user.email,'user_name':request.user.username}) context = { @@ -195,7 +196,11 @@ def view_technicians(request): Q(user__username__contains=form.cleaned_data['keyword']) ) if (form.cleaned_data['name']): - profile_list = profile_list.filter(user__username__contains=form.cleaned_data['user_name']) + profile_list = profile_list.filter(user__username__contains=form.cleaned_data['name']) + if (form.cleaned_data['location']): + profile_list = profile_list.filter( + Q(location__contains=form.cleaned_data['location']) + ) else: form = forms.ProfileFilter() profile_list = models.Profile.objects.filter(user_type=True) @@ -222,6 +227,7 @@ def view_profile(request,user_id): "title": "ODIT - {}".format(view_user.user.username), "user_name": view_user.user.username, "bio": view_user.bio, + "location": view_user.location, "email": view_user.user.email, "is_technician": this_user.user_type, } From b93ebd7883fe955e69a7d2594efe29ec5f9c0fa3 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 17:45:35 -0700 Subject: [PATCH 09/35] Delete database file. This doesn't need to be hosted on github. --- db.sqlite3 | Bin 151552 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 db.sqlite3 diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index ee3743cc04b57740098a82e182edfc9921266075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151552 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 KYvk@+|Nnnwp7Lw} From 70c9ea534f073c377d0816d941247b4e1ce1896d Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 17:58:14 -0700 Subject: [PATCH 10/35] Added location as a 'keyword' option to search by in view_technicians. --- myapp/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/myapp/views.py b/myapp/views.py index c39e2b9..64c199d 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -193,7 +193,8 @@ def view_technicians(request): if (form.cleaned_data['keyword']): profile_list = profile_list.filter( Q(bio__contains=form.cleaned_data['keyword']) | - Q(user__username__contains=form.cleaned_data['keyword']) + Q(user__username__contains=form.cleaned_data['keyword']) | + Q(location__contains=form.cleaned_data['location']) ) if (form.cleaned_data['name']): profile_list = profile_list.filter(user__username__contains=form.cleaned_data['name']) From 6ca7d454be558ddbbb5b00358d89ce8cc52a0178 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:08:53 -0700 Subject: [PATCH 11/35] Fixes #51 and #56 by adding a validators for usernames and emails on the edit profile page. Added boilerplate for #41. --- myapp/forms.py | 16 +++++++++--- myapp/migrations/0001_initial.py | 42 +++++++++++++++++++++++++++++++ myapp/models.py | 1 + myapp/templates/profile.html | 2 +- myapp/templates/viewissues.html | 5 ++-- myapp/templates/viewmyissues.html | 35 +++++++++++++++----------- myapp/urls.py | 1 + myapp/views.py | 2 +- 8 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 myapp/migrations/0001_initial.py diff --git a/myapp/forms.py b/myapp/forms.py index 5cd45e2..680b4bf 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -6,11 +6,17 @@ from . import models # validator to ensure email addresses are unique -def must_be_unique(value): +def must_be_unique_email(value): user = User.objects.filter(email=value) if len(user) > 0: raise forms.ValidationError("A user with that email already exists.") +# validator to ensure email addresses are unique +def must_be_unique_user(value): + user = User.objects.filter(username=value) + if len(user) > 0: + raise forms.ValidationError("A user with that username already exists.") + class IssueForm(forms.Form): title = forms.CharField( widget = forms.TextInput( @@ -76,7 +82,7 @@ class RegistrationForm(UserCreationForm): email = forms.EmailField( label="Email", required=True, - validators=[must_be_unique] + validators=[must_be_unique_email] ) class Meta: @@ -108,12 +114,14 @@ class ProfileForm(forms.Form): ), label='User Name', required=False, + validators=[must_be_unique_user], max_length=150 ) email = forms.EmailField( label="Email", - required=False + required=False, + validators=[must_be_unique_email] ) bio = forms.CharField( @@ -154,11 +162,13 @@ class ProfileFormNontech(forms.Form): ), label='User Name', required=False, + validators=[must_be_unique_user], max_length=150 ) email = forms.EmailField( label="Email", + validators=[must_be_unique_email], required=False ) diff --git a/myapp/migrations/0001_initial.py b/myapp/migrations/0001_initial.py new file mode 100644 index 0000000..4df8ccc --- /dev/null +++ b/myapp/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 3.0.5 on 2020-04-27 02:49 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bio', models.TextField(blank=True, max_length=500, null=True)), + ('location', models.CharField(max_length=200, null=True)), + ('user_type', models.BooleanField(null=True)), + ('birth_date', models.DateField(blank=True, null=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Issue_Model', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('description', models.CharField(max_length=240, null=True)), + ('issue_type', models.IntegerField()), + ('date_created', models.DateField(auto_now_add=True)), + ('is_solved', models.BooleanField(null=True)), + ('resolution', models.CharField(max_length=240, null=True)), + ('affected_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='affected_user', to=settings.AUTH_USER_MODEL)), + ('assigned_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_user', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/myapp/models.py b/myapp/models.py index ea21d20..3e00e10 100644 --- a/myapp/models.py +++ b/myapp/models.py @@ -12,6 +12,7 @@ class Issue_Model(models.Model): assigned_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='assigned_user') affected_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='affected_user') is_solved = models.BooleanField(null=True) # 0 for unsolved, 1 for solved + resolution = models.CharField(max_length=240, null=True) class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) diff --git a/myapp/templates/profile.html b/myapp/templates/profile.html index 472f4eb..4dd4185 100644 --- a/myapp/templates/profile.html +++ b/myapp/templates/profile.html @@ -20,7 +20,7 @@

    Bio:

    Location:

    {{ location }}

    {% else %} - Sign Up to be a Technician! + Sign Up to be a Technician!
    {% endif %} Edit Profile
    diff --git a/myapp/templates/viewissues.html b/myapp/templates/viewissues.html index b5cc3f9..573ff8a 100644 --- a/myapp/templates/viewissues.html +++ b/myapp/templates/viewissues.html @@ -32,7 +32,8 @@

    Search for posted issues:

    {% if issues_list %} {% for i in issues_list %}
    -
    Ticket #{{ i.id }}: {{ i.title|title }} +
    + Ticket #{{ i.id }}: {{ i.title|title }}

    Description: {{ i.description }}

    @@ -42,7 +43,7 @@

    Search for posted issues:

    Affected user: {{ i.affected_user }}

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    {% if is_technician and user != i.assigned_user and user != i.affected_user %} - Assign Myself + Assign Myself {% endif %}
    diff --git a/myapp/templates/viewmyissues.html b/myapp/templates/viewmyissues.html index 3eae4e1..52d3443 100644 --- a/myapp/templates/viewmyissues.html +++ b/myapp/templates/viewmyissues.html @@ -19,26 +19,33 @@

    My Assigned Issues:

    -{% if issues_list %} -
    -
    +
    + {% if issues_list %} {% for i in issues_list %} -

    Ticket # {{ i.id }}

    -
  • Title: {{ i.title }}
  • -
  • Description: {{ i.description }}
  • -
  • Date Created: {{ i.date_created }}
  • -
  • Issue_type: {{ i.issue_type }}
  • -
  • Assigned_user: {{ i.assigned_user }}
  • -
  • Affected_user: {{ i.affected_user }}
  • -
  • Is_solved?: {{ i.is_solved }}

  • +
    +
    + Ticket #{{ i.id }}: {{ i.title|title }} +
    +
    +

    Description: {{ i.description }}

    +

    Date created: {{ i.date_created }}

    +

    Issue type: {{ i.issue_type }}

    +

    Assigned user: {{ i.assigned_user }}

    +

    Affected user: {{ i.affected_user }}

    +

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    + {% if i.is_solved == False %} + Resolve? + {% endif %} +
    +
    {% endfor %} + {% else %} +

    There are no entries with those parameters.

    + {% endif %}
    -{% else %} -

    You don't have any assigned issued with those parameters.

    -{% endif %} {% endblock %} diff --git a/myapp/urls.py b/myapp/urls.py index e88794c..78b1439 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -27,6 +27,7 @@ path('viewmyissues.html', views.viewmyissues), path('viewmysubmittedissues.html', views.viewmysubmittedissues), path('viewissues/assign/', views.self_assign), + #path('viewmyissues/resolve/', views.resolve_ticket), path('aboutodit.html', views.about), path('profile.html',views.profile_page), path('profile/edit.html',views.edit_profile), diff --git a/myapp/views.py b/myapp/views.py index 64c199d..2c8f7ef 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -194,7 +194,7 @@ def view_technicians(request): profile_list = profile_list.filter( Q(bio__contains=form.cleaned_data['keyword']) | Q(user__username__contains=form.cleaned_data['keyword']) | - Q(location__contains=form.cleaned_data['location']) + Q(location__contains=form.cleaned_data['keyword']) ) if (form.cleaned_data['name']): profile_list = profile_list.filter(user__username__contains=form.cleaned_data['name']) From c7ce6368361ff2d5943be209c2a10104d67580e8 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:16:15 -0700 Subject: [PATCH 12/35] Delete unnecessary migration file. --- myapp/migrations/0001_initial.py | 42 -------------------------------- 1 file changed, 42 deletions(-) delete mode 100644 myapp/migrations/0001_initial.py diff --git a/myapp/migrations/0001_initial.py b/myapp/migrations/0001_initial.py deleted file mode 100644 index 4df8ccc..0000000 --- a/myapp/migrations/0001_initial.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-27 02:49 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('bio', models.TextField(blank=True, max_length=500, null=True)), - ('location', models.CharField(max_length=200, null=True)), - ('user_type', models.BooleanField(null=True)), - ('birth_date', models.DateField(blank=True, null=True)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Issue_Model', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('description', models.CharField(max_length=240, null=True)), - ('issue_type', models.IntegerField()), - ('date_created', models.DateField(auto_now_add=True)), - ('is_solved', models.BooleanField(null=True)), - ('resolution', models.CharField(max_length=240, null=True)), - ('affected_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='affected_user', to=settings.AUTH_USER_MODEL)), - ('assigned_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_user', to=settings.AUTH_USER_MODEL)), - ], - ), - ] From a692867c03ce1900a0bba224bcf29bad4649c5f9 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:19:09 -0700 Subject: [PATCH 13/35] Remove unnecessary files. --- myapp/__pycache__/__init__.cpython-37.pyc | Bin 143 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/__init__.cpython-37.pyc diff --git a/myapp/__pycache__/__init__.cpython-37.pyc b/myapp/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 85b3d1810ad963d33fddcc8e68f0a2a5a77a5176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmZ?b<>g`kf+(Y+I1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlH Date: Sun, 26 Apr 2020 21:19:20 -0700 Subject: [PATCH 14/35] Remove unnecessary files. --- myapp/__pycache__/admin.cpython-37.pyc | Bin 290 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/admin.cpython-37.pyc diff --git a/myapp/__pycache__/admin.cpython-37.pyc b/myapp/__pycache__/admin.cpython-37.pyc deleted file mode 100644 index 4963cc4fd2de23a27a57e3e70e95e393ce8a2fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmX|6K~BRk5VYeYjiBv6a_J4JLI@$qrH29%aEUCcP%n{#9Y@~ekbm$1kht&`e&8#o zet{Eq5nX9#cCSbs&bvuYT~Y}x+a3K=sWt)>Ugudk7fsdHX0bJGZ{?GX{DmVn z4iuy8!DSX|i9J|%yh0pcvkqoAxwYn5D)=Nee6fe0lj4*=AXwzsjW3cHW; Date: Sun, 26 Apr 2020 21:19:27 -0700 Subject: [PATCH 15/35] Remove unnecessary files. --- myapp/__pycache__/forms.cpython-37.pyc | Bin 4534 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/forms.cpython-37.pyc diff --git a/myapp/__pycache__/forms.cpython-37.pyc b/myapp/__pycache__/forms.cpython-37.pyc deleted file mode 100644 index c8eb7987f6039c5a9cfdfb2679b40612ddd1c1eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4534 zcmb_f%WoV>8Sm=H%yiGgk9E9B$ZAJy2s;aLV0k07nAq{k3p*gzyGSjwt@c#e?s3l} zRXy=Tj)X|0h=bwAiGy>50|##W2OQyAS5Cfh=EU!-o|o-G8&>qFzWJ)Ys;;lT`hAan zSgi&Yo)>>Q|8(hwW&M*nqsIlail+Vo!Y$5HtHVOZh__R_X{qCfKKLRpJ-5Q(eT(}%cy94Puy*;G6IL)%<`s-oh9gysRCx^}HQ``J4gEPj zkN*5{#vDc#_##FYha>YCd5te&WNA3Ez;AqHHI^@+x7A?U+wIAY0yF=y5^_z7I7@on z4Gdz;r7`?hpTudx<4i;<9qe7Od}*Q6<04fp>e6GQIcRHW>TQtBYO}U|3hSJ)rz~?$ z*)zuN16SV7+;fjRFWIjdx1f#NBuzvoPEtv4JGu9x`T$$k50h-ap6$n3-3aS(3I+Lb zT^uDUQ!9;vq>IqS-cDPzGNlW7(a9$yLXp9!c4g4O@FS%|K|EcKD+u z=P>Qx-&+6vHXT-NtN!spvc2AG4LYKmsqJX3m!@J*Z2xq9b8EYE9QXU%#%3%1V_oYE zR2J=sXwXd_4}_0bsRD?_YOKQK0=O1+M-RzX(Nqc|tPsZ!ZQ-^kL3FFQg<1Rsj z7th?VKvG@;El$Y+6<&sv#{Da6D_C1SbHaev_#B{B=JPP|g7!C+8VI^s?X}Wasgnww z<9@5x&15g78;G+^s?gg?vQ%tcaOl`@b>T4Kdm__b8t;fym!x<+NTlF8=)^}64851_ zhvjvlS~BSy@Lc@Mtdy_gPc9R=N#qvDNno_7ZyonV!^wqa8qH|YjnP9WBHkcr9ZY7O zvzOLWV5x0$cFQ`oBggQz;a$T!hWAbxqy_GR7EkT-(o2hBK1|>>wU^P+beT`I)j>jb zi85$pz}N6)5nJlA(KPyyK&~sTRK#7uBX~h9zW}+sL*xybS&esh0Y69yQrb^cqdhZuOK1Ng2vseje!p|wN0{D}f zQH`#0g*Iq5D!LR!-MAy7NC!~_#~h@@SEA_gAWm~h?hyXkek?Z48YGPo0A%~rc@=@kw)J|a5Xe_7o@~o`~ur%HY+(UXx<}!$UTs> zVzzI50Ld)h;Laax?!r5aZ}8I4JBma6`(t?k-zmcbO1y$=uMTf=!-R&*px4C%aeUa5 zykX1Nu&uTe-e7VG?8!pDpuTfl|8YKPLm~~pC9c5M0NdE-WNEU-T+wWtHvzFP;Z5=$ zkuMV=v`dPavO(lNk*^RTfX%e{S0RYe)NK%Bao9U>MmBecJxTK}+1bMYJ?g5RDZU7A zk0Ov07LYg)g^)PBXLeY8VeK-CNY6{KYG8UL?mtHgdttdqU$Apo&;MNPAuh{t3enyp zis@VM^s$rcV31Ff8`EyGUBoemPVpk?CRr58 zZ=;(dnhdWCgFa&%M zo!q*1XQQnz#d`-!sHqi@iTTJls2(Wt8?zv)yQfUPgUD`=BfHz&fKG*0uhU5~gMfx7 zzl-;nv*uCjP3n?j03)4D{*Va8EI9mo#7_=F(f4;~$`pX+ATGt->+m!2oozMBSCK^y ztpfvp6KqW_VD>l2kz^~Qn63^@*%E0wGAF4rQp?2G2N*a;Q=~9?JNbFw)ci`poUw)B z@iVS6KE=?)lRl%$Kp~3A>Yv%Bs-TL*pQ<sBauA`7oqbo=_P-MIj^B*4O3MYWLRf1Q)lK#L0urf zX)t3dgtmL&O!tAIA)e$1BM!*&4DVv?&WJm;+l6a&1UW#$qevXZtsHOKrvPM9uy%Hm z9wI!&1W6U4c2GXaG5+McG*;~AR+AevjQ}^oCE;J*C1L<+h`|6&`ZJoM)JYZQZ8%t9 zT8+>-KXnnKx?mP8r}E4ryhyGRAs?E*FKP530*WAwnFA#v(5xa8-15bl|)&d~^D1sJ;s@-9Hq`-hOt!i$WV; zo>Y_#>qJRTI*M$cr% Date: Sun, 26 Apr 2020 21:19:33 -0700 Subject: [PATCH 16/35] Remove unnecessary files. --- myapp/__pycache__/models.cpython-37.pyc | Bin 1650 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/models.cpython-37.pyc diff --git a/myapp/__pycache__/models.cpython-37.pyc b/myapp/__pycache__/models.cpython-37.pyc deleted file mode 100644 index a074bf0a4c2267d751d0236c608df2bc0376279b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1650 zcmY*ZO>f*p81~p+f30_uY$`zIOF}|oLFC8*A=EZ$QPg&e$o68b7Jh!vaO`)3#kiLuG+GxO}byV@Nd7@G>!`=G_yZ84VstvNz2TfDSyzXX-OU-pt zol5b$qdr31ihsY^`*ucj&@;U{J1J*-O|f3ey45qj+f)?*&Ytb*KHd(Kd2dkdjn?gZQZ3~^M5mM~#6Ux51B1RdGNzWSW}QCaIY zuM26yYZeA4FLHIHZ^0#`X1j~qqr+ESGiZyNFgdQz)K~ZxR7e_xl5~rdNOaB?&KvgD zq5BXB*<=h-T+L&AdrNs1lllVL>Pr$gJXRLM7G=EyfD*J_(p6tWpWt4J#UihdnjJCk zx_bA@E}FVk<$MP>$nj3cblc+WgPR|&+&grsfTj Date: Sun, 26 Apr 2020 21:19:39 -0700 Subject: [PATCH 17/35] Remove unnecessary files. --- myapp/__pycache__/urls.cpython-37.pyc | Bin 1661 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/urls.cpython-37.pyc diff --git a/myapp/__pycache__/urls.cpython-37.pyc b/myapp/__pycache__/urls.cpython-37.pyc deleted file mode 100644 index 659d7a6b60331fc7d277bd10daf6f3e78101a669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 zcma)5O>f&q5G7?vlqp%3{E^h@Wp6S8mu%9WgfwVsH>iQ21=^$sLI^{VD{39?F0s38 zBVF@Hl4Fp6#A|!WU+Af`OR`l{1PBdNZysmohzmryz=*IF7u1A6MUG>Mk;HiJB6!wH z6>=T~DNm%I-oz~9h2S?hQGUW{fLZXB|7DyN^ni=<4dU zCg@!sJxo&+Gel^?g_1)j?zCbLd z_?wx=Gta%uV=2E_LSyMp)Q?rc)fx+3h;M{y%lQFfnd(2W8tw1LGSWfLy$>q7W=USA zgk>Ot$){UOV3@5w*G3owrNDT!FFyCss*!SD%T+8p*T8kch30)1% z<&whDu011r*srAvU0rA`Rye9fZLHJU`at4vC~>}uYF)#g5i)G`i;6hI;YjNiHO+_9 z|49~3bmSckWu3V_Qtdz13jGRBmD6lSHE7iewSIiHs)jr3{nipwErx#m_4UpBH3%Y^jUFfy&i%m7SPkCDA_`xB>kmvB~+9P{n Pk2<40*Z$bw7{2@s3Z@e7 From 2def571d22e0fbd5c4211d363f4e7e7a6de80764 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:19:46 -0700 Subject: [PATCH 18/35] Remove unnecessary files. --- myapp/__pycache__/views.cpython-37.pyc | Bin 6414 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/__pycache__/views.cpython-37.pyc diff --git a/myapp/__pycache__/views.cpython-37.pyc b/myapp/__pycache__/views.cpython-37.pyc deleted file mode 100644 index 71246c01bf43b04dbbb187d025d1a2e0ffcd7720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6414 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 C8FwlG From a9a1db517999bd57cd62711b6150e63dcc6c6b45 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:20:02 -0700 Subject: [PATCH 19/35] Remove unnecessary files. --- .../__pycache__/0001_initial.cpython-37.pyc | Bin 1442 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/migrations/__pycache__/0001_initial.cpython-37.pyc diff --git a/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc b/myapp/migrations/__pycache__/0001_initial.cpython-37.pyc deleted file mode 100644 index 02ce77dbdc7a55a00a636196fbdf48cd0adf90c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 zcmZuxOLOBy5Y|YtEh)D1*le zA0LGmxYPk|%wa@0V-gc$WLLOjFZRZM>|5-KT3mnSFrU?abyy9&tnrH%H<)+jbn16_ z-sun>C@4#wr>f)XXv|ZYl)T85u8#`_LR}1v-||^U;RP;rKpY30m@p@H8Hqjc-_@X= zHQtky!~ytO$Xw<@l&vs=KdgY&=l;lL4b(MJ6W|Kx9%>@gw3zX0&RxVU#BD_FIYG3F zXcZA*Yu37scn#LGjV#I@Wt%1^+c1{2&K}KOn|bqpGe5R@w%E3f`^2K1`>Y>8^zQL{ z2Qz-S$oSOyeT3+tnrDc%9|IH?sSdGUrOjOmaostWNM*=Z%C z5e$(hYRmHEmI>9AAPjky8@X*%twbrF=1WK4UebEY&(Ut3E;>6pp!N`@I-(TcgQ)$Qk6rnRJb5_3*m)Exo=v{(+ufc8|~S zUP})S$kCDQvE@jbw_AsY*!mO0pbmTRwp@ruH;Jso=F6fGkmL(P7jIdKt;-yG1#T6r zvn`X_+1QuU} z-yQkfkYu)hUv&@q*Ej>JuO_ow-tQK}=@{}-_32R|1cvQjc29f#@eFC{KYUjD`}_M} z(gk&UlbNhxv;dd-!U(SKwSAws?k3qFYov{9*Q>CRBh<9XQ({kb0-PUv!M$OTk1Ddm wg@z4mUn)X(?v;DhM{RFOhWrY%+Gr1VtE8{dpo8aC^S?1YR(0H(SViFd2cZ6+9{>OV From ed7891fb44aea4049a0d3fbd76a3e976b1435bd2 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:20:10 -0700 Subject: [PATCH 20/35] Delete __init__.cpython-37.pyc --- .../__pycache__/__init__.cpython-37.pyc | Bin 154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myapp/migrations/__pycache__/__init__.cpython-37.pyc diff --git a/myapp/migrations/__pycache__/__init__.cpython-37.pyc b/myapp/migrations/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index abd2b750d78fe5363a2f9d9862a48784f59bd54b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmZ?b<>g`kf+(Y+I1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlH Date: Sun, 26 Apr 2020 21:20:34 -0700 Subject: [PATCH 21/35] Delete __init__.cpython-37.pyc --- mysite/__pycache__/__init__.cpython-37.pyc | Bin 144 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mysite/__pycache__/__init__.cpython-37.pyc diff --git a/mysite/__pycache__/__init__.cpython-37.pyc b/mysite/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 132e18dbbd81cf749f6aea579a4caa7eef1c7cea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmZ?b<>g`kf+(Y+I1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlH Date: Sun, 26 Apr 2020 21:20:40 -0700 Subject: [PATCH 22/35] Delete settings.cpython-37.pyc --- mysite/__pycache__/settings.cpython-37.pyc | Bin 2311 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mysite/__pycache__/settings.cpython-37.pyc diff --git a/mysite/__pycache__/settings.cpython-37.pyc b/mysite/__pycache__/settings.cpython-37.pyc deleted file mode 100644 index 3861ca95bfc969ed85643833492634980b4b29cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2311 zcmb7FTXWM!6!t~29p?gsK)AJ4xf>ce5NHe2p;c@VJou8aWI{EbY80Q1yg?VET@kF` z!b5rN|LK!n`p~ET1*Q)@lI_HGm}%;@)~ns~edp}i@2t0$mWnC-x-}qXW%THgB3Urt2na+7xZPgXr(}aHMj(q;R;-}1e%6x9|S9{pMfv* zv+yN+m3Tczav*-pz}Fu#G_9||b-00+*WqT;-%9%1G;Im`dAOsm!d?9W#&i*%HGD2X zNxuvkHC4K2-cP4e#p;3STAs)V=hU^BxbOL*Gh~z#ao~Fgq{pRVahtfrH#q@uZz$e@ z1hQ^|LtT+^)8}K$J7U0)L>zN&N*mH9qMyfbW9*d7q*`YLjo!Jt_7% zAF!w8GI%{EjeJZZ=y^_=xMd_Pb8kRV~VMtw}x4riF+rvj~ny(Tfj&>2uD|91Ozsv57+gY;tJ&L}H{D_>>PNbv$Ss zt%Z+f8OJe5Q+RbWH-##lbb<%$c&=1Qe*VLh`TJ4@yH}JPPMLl;6N`x%oQ^}rcT67b zCHk8J&Te9ouW4{&l*1|1x1ZUBO?z(+%-$QU0qON~-*iZ85R08n;TA^4B?Z3C!t$7e z6K7y!eMx(WCN50$FIAIL)5gn8Ur8kJo*P&hJ&eioS$KDr4lr#z!gq3}CWW5~BQ;TzRQ9tGZCFwbiH~@9Y@KDBs%AYOSUk zu8p&G$Sf+MKrzF~@kMzc`(|MCBT>WNaq`$(8}F~pu!xi6aVZn!l;(D=sYF6kZYX|y z!G|wq;!ZR(Fc~}ad@%6BppdweI*j--kLxwyM5PY3&A29BjVwGre0Ex<26d?uICbJ$ zynl@U@wE6+iR_GHJSO<*v;@t-AwKP$WSArFdcgE-N2`Q|GT!T0E9KIaC~p{eB^ySR z@mM4bOy0-rQ{P2-M|pFPB{K!Xh%XYu&H__6;-9uRy5s;gJ|^1E74-R z)k*-BR`Yo@uPKe4x~wT`baq$WuEqBCT1Adk6bT0&b))&JtjTd~YII5NXfKQ%Sygvi z?W*xguGes}g%Vt<%gybMysa3OR#idTT0=4P7OJMu!CloJeBT_6>JK)WQ7)d-blj+h zo+@$pzoq=^sH~*>^rZT<8!Lx(*12 zsPKd1L12?-3&_S^V<%(^*=uxg}F@nxaI!+mKB6#Ei Date: Sun, 26 Apr 2020 21:20:46 -0700 Subject: [PATCH 23/35] Delete urls.cpython-37.pyc --- mysite/__pycache__/urls.cpython-37.pyc | Bin 981 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mysite/__pycache__/urls.cpython-37.pyc diff --git a/mysite/__pycache__/urls.cpython-37.pyc b/mysite/__pycache__/urls.cpython-37.pyc deleted file mode 100644 index d74c7a61e24584de29df143eb510c01125ac53a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcma)5(QeZ)6m`<1Em;SAg5T0eC4nJcB0!9mX_XL2u)RbPnHRfhN^D2A19Y$b8h$CS zJn;)WVW+87AtB9DtZV1^+;fkw-=3a&K#$~1d^sNg@XIU?!_~nX{mDx`VUPf9VY{-Z zo!FL%2i1T&i9_AQ?bc2;Ooqh4F0nVG&3I?)ct~74+F3ihu#*Sa`3!Fnde=t3A|}URU@T{VDbi5rBqPxMiFTaNT@jcR+8^Bgcn>u$_0TX zTX8`<3RqVJNdhGyu?O{7D^<%liZIV*h&PB8ycT>zauw#BMubJr!>5trb(zb^fFqq= zM&7$0h-xkwdlwDMjkj`Udw&oPFG!IIWos2IYP;1tqrhU&WCJi?##_^xDKz)^+z zs4jLr_5E32*P2r@gA7sf$~Unec=HNL`Q%m?hL2ePr-G|B5k^SZ8Fi3zsku7!_f%u> zA(ELPnFjwTTC%)qaLEd7LYL2!mg~zr__OScfm({b9)l&*0Iqr~j;hE2a!E? z)|ql|wYL>7B5mLylW#UUUOx!D-@1cAV6`s7v}A$ZI>zyK)T2M#4Z9yv3+_C+HNF`| zf!B_*Ot(#zB@cV0xIjIA+`JC|bv~clKpUZwj7lNz$H-nQeHl;fr%uODd=Y2L77 MO{~ZEcrda40&~$YEdT%j From f5dff2ad60d433178db65567a4cf71fc60ec11fe Mon Sep 17 00:00:00 2001 From: John Higdon Date: Sun, 26 Apr 2020 21:20:52 -0700 Subject: [PATCH 24/35] Delete wsgi.cpython-37.pyc --- mysite/__pycache__/wsgi.cpython-37.pyc | Bin 545 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mysite/__pycache__/wsgi.cpython-37.pyc diff --git a/mysite/__pycache__/wsgi.cpython-37.pyc b/mysite/__pycache__/wsgi.cpython-37.pyc deleted file mode 100644 index cf6bf12a751d04ad900830e92ff91c5c403300ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmYjOO^?$s5Ov({whAn8K%9N81j!1-WrYwQS*jvv5A6ymif~OlP2F|u$acGQulxq? zaO4kh@RbvPffG)nm3AaQdp!1g&*L{ICou|pT}4XO85I3SJD z8z@~8#}h~3Yoje#;?_XA^Gr(iMFL@#Fj8y2mGDHu4kXzzBMv3SYT#tKWKAPQ$(+z? zxeR>oS`lr42o?0|LxE@&$b}^lEx0P)(n#-61q*QHJPhN(*5cq( zIh}H7q~6z{TzX|Ik;Z>RH_&tx`G*xa+V0U?HvFUP{p;y?M(5{?#bi33(~q<4;=}p% z{qFIJ1?PmS>}cQzlm-WsdaSK~(D_KpU_WVD4Gubf0BR?URz40FIjq=LI)CSu;4fs_ zFFe4%=h<0tVZqqKHv3CaWV+n8)@?!GYAK}? J@m+im{|8?bt1SQk From e562da1e9fc1aa656aca3841df1e770052e2da03 Mon Sep 17 00:00:00 2001 From: lcnorine <60401135+lcnorine@users.noreply.github.com> Date: Mon, 27 Apr 2020 22:17:49 -0700 Subject: [PATCH 25/35] Added links to user accounts. Added rating system for technicians. --- myapp/forms.py | 72 ++++++++++++++ myapp/models.py | 43 +++++--- myapp/templates/editreview.html | 22 +++++ myapp/templates/viewissues.html | 4 +- myapp/templates/viewmyissues.html | 3 +- myapp/templates/viewmysubmittedissues.html | 6 +- myapp/templates/viewprofile.html | 37 ++++++- myapp/templates/viewtechnicians.html | 1 + myapp/urls.py | 1 + myapp/views.py | 108 ++++++++++++++------- 10 files changed, 239 insertions(+), 58 deletions(-) create mode 100644 myapp/templates/editreview.html diff --git a/myapp/forms.py b/myapp/forms.py index 680b4bf..5a87e27 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -217,3 +217,75 @@ class ProfileFilter(forms.Form): required=False, max_length=100 ) + +STARS = [ + ('5','5'), + ('4','4'), + ('3','3'), + ('2','2'), + ('1','1'), + ('0','0'), +] +class AddReviewForm(forms.Form): + rating = forms.CharField( + widget = forms.Select( + choices=STARS, + attrs={'class': 'form-control'} + ), + label='Rating', + required=True + ) + + review = forms.CharField( + label='Review', + widget=forms.Textarea( + attrs={'class': 'form-control'} + ), + required=False, + max_length=240 + ) + + def save(self, writer, subject): + review_instance = models.Review() + review_instance.rating = int(self.cleaned_data["rating"]) + review_instance.review = self.cleaned_data["review"] + review_instance.writer = User.objects.get(id__exact=writer) + review_instance.subject = User.objects.get(id__exact=subject) + review_instance.save() + subject_instance = models.Profile.objects.get(user=review_instance.subject) + subject_instance.rating_count = subject_instance.rating_count + 1 + subject_instance.rating_sum = subject_instance.rating_sum + review_instance.rating + subject_instance.rating_avg = round(subject_instance.rating_sum / subject_instance.rating_count,1) + subject_instance.save() + return review_instance + +class EditReviewForm(forms.Form): + rating = forms.CharField( + widget = forms.Select( + choices=STARS, + attrs={'class': 'form-control'} + ), + label='Rating', + required=True + ) + + review = forms.CharField( + label='Review', + widget=forms.Textarea( + attrs={'class': 'form-control'} + ), + required=False, + max_length=240 + ) + + def save(self, id): + review_instance = models.Review.objects.get(id__exact=id) + subject_instance = models.Profile.objects.get(user=review_instance.subject) + subject_instance.rating_sum = subject_instance.rating_sum - review_instance.rating + review_instance.rating = int(self.cleaned_data["rating"]) + subject_instance.rating_sum = subject_instance.rating_sum + review_instance.rating + review_instance.review = self.cleaned_data["review"] + subject_instance.rating_avg = round(subject_instance.rating_sum / subject_instance.rating_count,1) + subject_instance.save() + review_instance.save() + return review_instance \ No newline at end of file diff --git a/myapp/models.py b/myapp/models.py index 3e00e10..68f835d 100644 --- a/myapp/models.py +++ b/myapp/models.py @@ -2,30 +2,41 @@ from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver +from django.core.validators import MinValueValidator, MaxValueValidator # Create your models here. class Issue_Model(models.Model): - title = models.CharField(max_length=100) - description = models.CharField(max_length=240, null=True) - issue_type = models.IntegerField() - date_created = models.DateField(auto_now_add=True) - assigned_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='assigned_user') - affected_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='affected_user') - is_solved = models.BooleanField(null=True) # 0 for unsolved, 1 for solved - resolution = models.CharField(max_length=240, null=True) + title = models.CharField(max_length=100) + description = models.CharField(max_length=240, null=True) + issue_type = models.IntegerField() + date_created = models.DateField(auto_now_add=True) + assigned_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='assigned_user') + affected_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='affected_user') + is_solved = models.BooleanField(null=True) # 0 for unsolved, 1 for solved + resolution = models.CharField(max_length=240, null=True) class Profile(models.Model): - user = models.OneToOneField(User, on_delete=models.CASCADE) - bio = models.TextField(null=True, max_length=500, blank=True) - location = models.CharField(null=True, max_length=200) - user_type = models.BooleanField(null=True) # 0 for user, 1 for ODITer - birth_date = models.DateField(null=True, blank=True) + user = models.OneToOneField(User, on_delete=models.CASCADE) + bio = models.TextField(null=True, max_length=500, blank=True) + location = models.CharField(null=True, max_length=200) + user_type = models.BooleanField(null=True) # 0 for user, 1 for ODITer + birth_date = models.DateField(null=True, blank=True) + rating_sum = models.IntegerField(default=0) + rating_count = models.IntegerField(default=0) + rating_avg = models.FloatField(default=0) @receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): - if created: - Profile.objects.create(user=instance) + if created: + Profile.objects.create(user=instance) @receiver(post_save, sender=User) def save_user_profile(sender, instance, **kwargs): - instance.profile.save() + instance.profile.save() + +class Review(models.Model): + writer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='writer') + subject = models.ForeignKey(User, on_delete=models.CASCADE, related_name='subject') + date_created = models.DateField(auto_now_add=True) + rating = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(5)]) + review = models.CharField(max_length=240, null=True) diff --git a/myapp/templates/editreview.html b/myapp/templates/editreview.html new file mode 100644 index 0000000..c068e2a --- /dev/null +++ b/myapp/templates/editreview.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% block content %} + +{% load static %} + + +{% endblock %} diff --git a/myapp/templates/viewissues.html b/myapp/templates/viewissues.html index 573ff8a..a1abb7e 100644 --- a/myapp/templates/viewissues.html +++ b/myapp/templates/viewissues.html @@ -39,8 +39,8 @@

    Search for posted issues:

    Description: {{ i.description }}

    Date created: {{ i.date_created }}

    Issue type: {{ i.issue_type }}

    -

    Assigned user: {{ i.assigned_user }}

    -

    Affected user: {{ i.affected_user }}

    +

    Assigned user: {{ i.assigned_user }} {% if i.assigned_user %}View Profile{% endif %}

    +

    Affected user: {{ i.affected_user }} {% if i.affected_user %}View Profile{% endif %}

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    {% if is_technician and user != i.assigned_user and user != i.affected_user %} Assign Myself diff --git a/myapp/templates/viewmyissues.html b/myapp/templates/viewmyissues.html index 52d3443..e6608f4 100644 --- a/myapp/templates/viewmyissues.html +++ b/myapp/templates/viewmyissues.html @@ -32,8 +32,7 @@

    My Assigned Issues:

    Description: {{ i.description }}

    Date created: {{ i.date_created }}

    Issue type: {{ i.issue_type }}

    -

    Assigned user: {{ i.assigned_user }}

    -

    Affected user: {{ i.affected_user }}

    +

    Affected user: {{ i.affected_user }} {% if i.affected_user %}View Profile{% endif %}

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    {% if i.is_solved == False %} Resolve? diff --git a/myapp/templates/viewmysubmittedissues.html b/myapp/templates/viewmysubmittedissues.html index 7fbfcee..efe33c7 100644 --- a/myapp/templates/viewmysubmittedissues.html +++ b/myapp/templates/viewmysubmittedissues.html @@ -30,14 +30,16 @@ {% if issues_list.count > 0 %} {% comment %} TODO: Add a filter form to this list, too {% endcomment %} {% for issue in issues_list %} -
    +
    {{ issue.title|title }}

    {{ issue.description }}

    Date Created: {{ issue.date_created }}

    -

    Issue type: {{ issue.issue_type }}

    +

    Issue Type: {{ issue.issue_type }}

    +

    Assigned Technician: {{ issue.assigned_user }} {% if issue.assigned_user %}View Profile{% endif %}

    +

    Issue solved?: {% if issue.is_solved == True %} Yes {% else %} No {% endif %}

    {% endfor %} diff --git a/myapp/templates/viewprofile.html b/myapp/templates/viewprofile.html index 61af0e4..eef47ed 100644 --- a/myapp/templates/viewprofile.html +++ b/myapp/templates/viewprofile.html @@ -3,12 +3,45 @@ {% load static %} -

    {{ user_name }}

    +

    {{ user_name }} ({{ rating }} Stars)

    Email: {{ email }}

    Bio:

    {{ bio }}

    Location:

    {{ location }}

    - +{% if form %} +
    +

    Leave a Review:

    +
    +
    +
    +
    +
    + {% csrf_token %} + {{ form.as_table }}

    + +
    +
    +
    +
    +
    +{% endif %} +{% if reviews_list %} +
    +

    Reviews

    + {% for r in reviews_list %} +
    +
    +

    {{ r.writer }} gave {{ r.subject }} {{ r.rating }} stars on {{ r.date_created }}{% if r.writer %}: View Profile{% endif %}

    +
    +
    +

    {{ r.review }}

    + {% if r.writer == user %} + Edit + {% endif %} +
    +
    + {% endfor %} +{% endif %} {% endblock %} diff --git a/myapp/templates/viewtechnicians.html b/myapp/templates/viewtechnicians.html index fbf20c6..1339168 100644 --- a/myapp/templates/viewtechnicians.html +++ b/myapp/templates/viewtechnicians.html @@ -27,6 +27,7 @@

    Search for technicians

    {% for i in profile_list %}
  • Name: {{ i.user.username }}
  • +
  • Rating: {{ i.rating_avg }} Stars
  • Bio: {{ i.bio }}
  • Location: {{ i.location }}
  • View Profile
  • diff --git a/myapp/urls.py b/myapp/urls.py index 78b1439..b2a787b 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -34,6 +34,7 @@ path('profile/become_technician',views.become_technician), path('viewtechnicians.html',views.view_technicians), path('viewprofile/',views.view_profile), + path('editreview/',views.edit_review), path('login/', auth_views.LoginView.as_view()), path('register/', views.register), path('logout/', views.logoff) diff --git a/myapp/views.py b/myapp/views.py index 2c8f7ef..c46b779 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -224,41 +224,81 @@ def view_profile(request,user_id): view_user = models.Profile.objects.get(user__id__exact=user_id) except ObjectDoesNotExist: return redirect("/viewtechnicians.html") - context = { - "title": "ODIT - {}".format(view_user.user.username), - "user_name": view_user.user.username, - "bio": view_user.bio, - "location": view_user.location, - "email": view_user.user.email, - "is_technician": this_user.user_type, - } - return render(request, "viewprofile.html", context=context) + if request.method == "POST": + form_instance = forms.AddReviewForm(request.POST) + if form_instance.is_valid(): + form_instance.save(this_user.user.id,view_user.user.id) + return redirect("/viewprofile/{}".format(view_user.id)) + else: + if this_user != view_user and (not models.Review.objects.filter(writer=this_user.user).filter(subject=view_user.user).exists()) and models.Issue_Model.objects.filter(affected_user=this_user.user).filter(assigned_user=view_user.user).exists(): + form = forms.AddReviewForm() + else: + form = False + context = { + "title": "ODIT - {}".format(view_user.user.username), + "user_name": view_user.user.username, + "bio": view_user.bio, + "location": view_user.location, + "email": view_user.user.email, + "form": form, + "reviews_list": models.Review.objects.filter(subject=view_user.user), + "rating": view_user.rating_avg, + "is_technician": this_user.user_type, + } + print(list(context['reviews_list'])) + return render(request, "viewprofile.html", context=context) @login_required def viewmysubmittedissues(request): - issues_list = models.Issue_Model.objects.filter(affected_user=request.user) - if request.method == "POST": - form = forms.IssueFilter(request.POST) - if form.is_valid(): - if (form.cleaned_data['keyword']): - issues_list = issues_list.filter( - Q(title__contains=form.cleaned_data['keyword']) | - Q(description__contains=form.cleaned_data['keyword']) | - Q(affected_user__username__contains=form.cleaned_data['keyword']) - ) - if (form.cleaned_data['issue_type']): - issues_list = issues_list.filter( - Q(issue_type__exact=form.cleaned_data['issue_type']) - ) - else: - form = forms.IssueFilter() - else: - form = forms.IssueFilter() + issues_list = models.Issue_Model.objects.filter(affected_user=request.user) + if request.method == "POST": + form = forms.IssueFilter(request.POST) + if form.is_valid(): + if (form.cleaned_data['keyword']): + issues_list = issues_list.filter( + Q(title__contains=form.cleaned_data['keyword']) | + Q(description__contains=form.cleaned_data['keyword']) | + Q(affected_user__username__contains=form.cleaned_data['keyword']) + ) + if (form.cleaned_data['issue_type']): + issues_list = issues_list.filter( + Q(issue_type__exact=form.cleaned_data['issue_type']) + ) + else: + form = forms.IssueFilter() + else: + form = forms.IssueFilter() + + context = { + "title":"ODIT - Your Submitted Issues", + "issues_list":issues_list, + "form":form, + "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, + } + return render(request, "viewmysubmittedissues.html", context=context) - context = { - "title":"ODIT - Your Submitted Issues", - "issues_list":issues_list, - "form":form, - "is_technician": models.Profile.objects.get(user__exact=request.user).user_type, - } - return render(request, "viewmysubmittedissues.html", context=context) \ No newline at end of file +@login_required +def edit_review(request,id): + this_user = models.Profile.objects.get(user__exact=request.user) + try: + this_review = models.Review.objects.get(id__exact=id) + view_user = models.Profile.objects.get(user__exact=this_review.subject) + except ObjectDoesNotExist: + return redirect("/viewtechnicians.html") + if request.method == "POST": + form_instance = forms.EditReviewForm(request.POST) + if form_instance.is_valid(): + form_instance.save(id) + return redirect("/viewprofile/{}".format(view_user.user.id)) + else: + if this_user == models.Review.objects.get(id__exact=id).writer.profile: + form = forms.EditReviewForm(initial={'rating':this_review.rating,'review':this_review.review}) + context = { + "title": "ODIT - Edit Review for {}".format(view_user.user.username), + "form": form, + "id": view_user.user.id, + "is_technician": this_user.user_type, + } + return render(request, "editreview.html", context=context) + else: + return redirect("/viewprofile/{}".format(view_user.user.id)) \ No newline at end of file From ff482d4f3cedfd0c7ee21e2c4af98192bcc7a2c6 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Tue, 28 Apr 2020 21:29:37 -0700 Subject: [PATCH 26/35] Closes #42. Closes #41. Adds ability to edit tickets and to resolve & add resolution notes. Minor front-end modificaitons added. --- myapp/forms.py | 81 +++++++++++++++++++-- myapp/migrations/0001_initial.py | 57 +++++++++++++++ myapp/migrations/0002_auto_20200428_2145.py | 18 +++++ myapp/models.py | 2 +- myapp/templates/base.html | 4 +- myapp/templates/editticket.html | 21 ++++++ myapp/templates/viewissues.html | 15 +--- myapp/templates/viewmyissues.html | 8 +- myapp/templates/viewmysubmittedissues.html | 1 + myapp/urls.py | 3 +- myapp/views.py | 49 ++++++++++++- 11 files changed, 233 insertions(+), 26 deletions(-) create mode 100644 myapp/migrations/0001_initial.py create mode 100644 myapp/migrations/0002_auto_20200428_2145.py create mode 100644 myapp/templates/editticket.html diff --git a/myapp/forms.py b/myapp/forms.py index 5a87e27..91234c2 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -11,12 +11,27 @@ def must_be_unique_email(value): if len(user) > 0: raise forms.ValidationError("A user with that email already exists.") -# validator to ensure email addresses are unique +# validator to ensure usernames are unique def must_be_unique_user(value): user = User.objects.filter(username=value) if len(user) > 0: raise forms.ValidationError("A user with that username already exists.") + +ISSUE_CHOICES = [ + ('Desktop', 'Desktop'), + ('Laptop', 'Laptop'), + ('Tablet', 'Tablet'), + ('Phone', 'Phone'), + ('Server', 'Server'), + ('Networking', 'Networking'), + ('Application', 'Application'), + ('Operating System', 'Operating System'), + ('Email', 'Email'), + ('Account Management', 'Account Management'), + ('Lost Password', 'Lost Password'), + ('Other', 'Other') +] class IssueForm(forms.Form): title = forms.CharField( widget = forms.TextInput( @@ -36,11 +51,9 @@ class IssueForm(forms.Form): max_length=240 ) - issue_type = forms.IntegerField( - widget = forms.TextInput( - attrs={'class': 'form-control'} - ), + issue_type = forms.CharField( label='Issue Type', + widget=forms.Select(choices=ISSUE_CHOICES), required=True ) @@ -67,7 +80,7 @@ class IssueFilter(forms.Form): max_length=100 ) - issue_type = forms.IntegerField( + issue_type = forms.CharField( widget = forms.TextInput( attrs={ 'class': 'form-control', @@ -288,4 +301,58 @@ def save(self, id): subject_instance.rating_avg = round(subject_instance.rating_sum / subject_instance.rating_count,1) subject_instance.save() review_instance.save() - return review_instance \ No newline at end of file + return review_instance + +class ResolveIssueForm(forms.Form): + resolution = forms.CharField( + widget=forms.Textarea( + attrs={'class': 'form-control'} + ), + label='Resolution', + required=False, + max_length=720 + ) + + def save(self, id): + this_ticket = models.Issue_Model.objects.get(id__exact=id) + this_ticket.is_solved = 1 + if self.cleaned_data['resolution']: + this_ticket.resolution = self.cleaned_data["resolution"] + this_ticket.save() + return this_ticket + +class EditIssueForm(forms.Form): + title = forms.CharField( + widget = forms.TextInput( + attrs={'class': 'form-control'} + ), + label='Title', + required=True, + max_length=100 + ) + + description = forms.CharField( + label='Description', + widget=forms.Textarea( + attrs={'class': 'form-control'} + ), + required=False, + max_length=240 + ) + + issue_type = forms.CharField( + label='Issue Type', + widget=forms.Select(choices=ISSUE_CHOICES), + required=True + ) + + def save(self, id): + this_ticket = models.Issue_Model.objects.get(id__exact=id) + if self.cleaned_data['title']: + this_ticket.title = self.cleaned_data["title"] + if self.cleaned_data['description']: + this_ticket.description = self.cleaned_data["description"] + if self.cleaned_data['issue_type']: + this_ticket.issue_type = self.cleaned_data["issue_type"] + this_ticket.save() + return this_ticket diff --git a/myapp/migrations/0001_initial.py b/myapp/migrations/0001_initial.py new file mode 100644 index 0000000..3b045c8 --- /dev/null +++ b/myapp/migrations/0001_initial.py @@ -0,0 +1,57 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:07 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_created', models.DateField(auto_now_add=True)), + ('rating', models.IntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(5)])), + ('review', models.CharField(max_length=240, null=True)), + ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subject', to=settings.AUTH_USER_MODEL)), + ('writer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='writer', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bio', models.TextField(blank=True, max_length=500, null=True)), + ('location', models.CharField(max_length=200, null=True)), + ('user_type', models.BooleanField(null=True)), + ('birth_date', models.DateField(blank=True, null=True)), + ('rating_sum', models.IntegerField(default=0)), + ('rating_count', models.IntegerField(default=0)), + ('rating_avg', models.FloatField(default=0)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Issue_Model', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('description', models.CharField(max_length=240, null=True)), + ('issue_type', models.IntegerField()), + ('date_created', models.DateField(auto_now_add=True)), + ('is_solved', models.BooleanField(null=True)), + ('resolution', models.CharField(max_length=240, null=True)), + ('affected_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='affected_user', to=settings.AUTH_USER_MODEL)), + ('assigned_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_user', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/myapp/migrations/0002_auto_20200428_2145.py b/myapp/migrations/0002_auto_20200428_2145.py new file mode 100644 index 0000000..5fdc832 --- /dev/null +++ b/myapp/migrations/0002_auto_20200428_2145.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('myapp', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='issue_model', + name='issue_type', + field=models.CharField(max_length=240), + ), + ] diff --git a/myapp/models.py b/myapp/models.py index 68f835d..600a393 100644 --- a/myapp/models.py +++ b/myapp/models.py @@ -8,7 +8,7 @@ class Issue_Model(models.Model): title = models.CharField(max_length=100) description = models.CharField(max_length=240, null=True) - issue_type = models.IntegerField() + issue_type = models.CharField(max_length=240) date_created = models.DateField(auto_now_add=True) assigned_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='assigned_user') affected_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='affected_user') diff --git a/myapp/templates/base.html b/myapp/templates/base.html index a705854..e912a15 100644 --- a/myapp/templates/base.html +++ b/myapp/templates/base.html @@ -15,9 +15,9 @@ {% if user.is_authenticated %} + {% if is_technician %} - - + {% endif %} {% endif %} diff --git a/myapp/templates/editticket.html b/myapp/templates/editticket.html new file mode 100644 index 0000000..46a5832 --- /dev/null +++ b/myapp/templates/editticket.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% block content %} + +{% load static %} +
    +
    +
    +
    +
    +
    + {% csrf_token %} + {{ form.as_table }}

    + + Cancel +
    +
    +
    +
    +
    + +{% endblock %} diff --git a/myapp/templates/viewissues.html b/myapp/templates/viewissues.html index a1abb7e..ab31291 100644 --- a/myapp/templates/viewissues.html +++ b/myapp/templates/viewissues.html @@ -2,7 +2,7 @@ {% block content %}
    -

    Search for posted issues:

    +

    Search for Requests:

    @@ -13,14 +13,7 @@

    Search for posted issues:


    - {% comment %} {% endcomment %} - - {% comment %} {% endcomment %} + Clear
    @@ -42,8 +35,8 @@

    Search for posted issues:

    Assigned user: {{ i.assigned_user }} {% if i.assigned_user %}View Profile{% endif %}

    Affected user: {{ i.affected_user }} {% if i.affected_user %}View Profile{% endif %}

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    - {% if is_technician and user != i.assigned_user and user != i.affected_user %} - Assign Myself + {% if is_technician and user != i.assigned_user and user != i.affected_user and i.is_solved == False %} + Assign Issue {% endif %}
    diff --git a/myapp/templates/viewmyissues.html b/myapp/templates/viewmyissues.html index e6608f4..48195b1 100644 --- a/myapp/templates/viewmyissues.html +++ b/myapp/templates/viewmyissues.html @@ -2,7 +2,7 @@ {% block content %}
    -

    My Assigned Issues:

    +

    My Assigned Requests:

    @@ -26,7 +26,7 @@

    My Assigned Issues:

    {% for i in issues_list %}
    - Ticket #{{ i.id }}: {{ i.title|title }} + Issue #{{ i.id }}: {{ i.title|title }}

    Description: {{ i.description }}

    @@ -35,7 +35,9 @@

    My Assigned Issues:

    Affected user: {{ i.affected_user }} {% if i.affected_user %}View Profile{% endif %}

    Issue solved?: {% if i.is_solved == True %} Yes {% else %} No {% endif %}

    {% if i.is_solved == False %} - Resolve? + Resolve? + {% else %} +

    Resolution: {{ i.resolution }}

    {% endif %}
    diff --git a/myapp/templates/viewmysubmittedissues.html b/myapp/templates/viewmysubmittedissues.html index efe33c7..0735e47 100644 --- a/myapp/templates/viewmysubmittedissues.html +++ b/myapp/templates/viewmysubmittedissues.html @@ -40,6 +40,7 @@

    Issue Type: {{ issue.issue_type }}

    Assigned Technician: {{ issue.assigned_user }} {% if issue.assigned_user %}View Profile{% endif %}

    Issue solved?: {% if issue.is_solved == True %} Yes {% else %} No {% endif %}

    + Edit Issue
    {% endfor %} diff --git a/myapp/urls.py b/myapp/urls.py index b2a787b..2d288d8 100644 --- a/myapp/urls.py +++ b/myapp/urls.py @@ -27,7 +27,8 @@ path('viewmyissues.html', views.viewmyissues), path('viewmysubmittedissues.html', views.viewmysubmittedissues), path('viewissues/assign/', views.self_assign), - #path('viewmyissues/resolve/', views.resolve_ticket), + path('resolve/', views.resolve_ticket), + path('editticket/', views.edit_ticket), path('aboutodit.html', views.about), path('profile.html',views.profile_page), path('profile/edit.html',views.edit_profile), diff --git a/myapp/views.py b/myapp/views.py index c46b779..e0e24cf 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -301,4 +301,51 @@ def edit_review(request,id): } return render(request, "editreview.html", context=context) else: - return redirect("/viewprofile/{}".format(view_user.user.id)) \ No newline at end of file + return redirect("/viewprofile/{}".format(view_user.user.id)) + +@login_required +def resolve_ticket(request, id): + try: + this_ticket = models.Issue_Model.objects.get(id__exact=id) + except ObjectDoesNotExist: + return redirect("/viewmyissues.html") + if request.method == "POST": + form_instance = forms.ResolveIssueForm(request.POST) + if form_instance.is_valid(): + form_instance.save(id) + return redirect("/viewmyissues.html") + else: + if this_ticket == models.Issue_Model.objects.get(id__exact=id): + form = forms.ResolveIssueForm(initial={'Resolved?':this_ticket.is_solved,'Resolution':this_ticket.resolution}) + context = { + "title": "ODIT - Resolve Ticket", + "form": form, + "id": this_ticket, + } + return render(request, "editticket.html", context=context) + else: + return redirect("/viewmyissues") + +@login_required +def edit_ticket(request, id): + try: + this_ticket = models.Issue_Model.objects.get(id__exact=id) + except ObjectDoesNotExist: + return redirect("/viewmysubmittedissues.html") + if request.method == "POST": + form_instance = forms.EditIssueForm(request.POST) + if form_instance.is_valid(): + form_instance.save(id) + return redirect("/viewmysubmittedissues.html") + else: + if this_ticket == models.Issue_Model.objects.get(id__exact=id): + form = forms.EditIssueForm(initial={'title':this_ticket.title,'description':this_ticket.description,'issue_type':this_ticket.issue_type}) + context = { + "title": "ODIT - Edit Ticket", + "form": form, + "id": this_ticket, + } + return render(request, "editticket.html", context=context) + else: + return redirect("/viewmyissues") + \ No newline at end of file From 29bc3aad6483af83da88e7c5c8daaba7c31f3db5 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Tue, 28 Apr 2020 21:31:14 -0700 Subject: [PATCH 27/35] Delete 0001_initial.py --- myapp/migrations/0001_initial.py | 57 -------------------------------- 1 file changed, 57 deletions(-) delete mode 100644 myapp/migrations/0001_initial.py diff --git a/myapp/migrations/0001_initial.py b/myapp/migrations/0001_initial.py deleted file mode 100644 index 3b045c8..0000000 --- a/myapp/migrations/0001_initial.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:07 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Review', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_created', models.DateField(auto_now_add=True)), - ('rating', models.IntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(5)])), - ('review', models.CharField(max_length=240, null=True)), - ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subject', to=settings.AUTH_USER_MODEL)), - ('writer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='writer', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('bio', models.TextField(blank=True, max_length=500, null=True)), - ('location', models.CharField(max_length=200, null=True)), - ('user_type', models.BooleanField(null=True)), - ('birth_date', models.DateField(blank=True, null=True)), - ('rating_sum', models.IntegerField(default=0)), - ('rating_count', models.IntegerField(default=0)), - ('rating_avg', models.FloatField(default=0)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Issue_Model', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('description', models.CharField(max_length=240, null=True)), - ('issue_type', models.IntegerField()), - ('date_created', models.DateField(auto_now_add=True)), - ('is_solved', models.BooleanField(null=True)), - ('resolution', models.CharField(max_length=240, null=True)), - ('affected_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='affected_user', to=settings.AUTH_USER_MODEL)), - ('assigned_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_user', to=settings.AUTH_USER_MODEL)), - ], - ), - ] From 737edae147c71599851e3a0e1ad611d74123f668 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Tue, 28 Apr 2020 21:31:25 -0700 Subject: [PATCH 28/35] Delete 0002_auto_20200428_2145.py --- myapp/migrations/0002_auto_20200428_2145.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 myapp/migrations/0002_auto_20200428_2145.py diff --git a/myapp/migrations/0002_auto_20200428_2145.py b/myapp/migrations/0002_auto_20200428_2145.py deleted file mode 100644 index 5fdc832..0000000 --- a/myapp/migrations/0002_auto_20200428_2145.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('myapp', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='issue_model', - name='issue_type', - field=models.CharField(max_length=240), - ), - ] From 92f8f422d841620e3522dfff0889b8aa5da0afc5 Mon Sep 17 00:00:00 2001 From: John Higdon Date: Tue, 28 Apr 2020 22:15:10 -0700 Subject: [PATCH 29/35] Closes #58. Re-opens #51. Need an alternative solution for validation. --- myapp/forms.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/myapp/forms.py b/myapp/forms.py index 91234c2..41431a8 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -17,7 +17,6 @@ def must_be_unique_user(value): if len(user) > 0: raise forms.ValidationError("A user with that username already exists.") - ISSUE_CHOICES = [ ('Desktop', 'Desktop'), ('Laptop', 'Laptop'), @@ -121,6 +120,7 @@ def save(self, commit=True): return user class ProfileForm(forms.Form): + """ user_name = forms.CharField( widget = forms.TextInput( attrs={'class': 'form-control'} @@ -130,11 +130,12 @@ class ProfileForm(forms.Form): validators=[must_be_unique_user], max_length=150 ) - + """ + email = forms.EmailField( label="Email", - required=False, - validators=[must_be_unique_email] + required=False + #validators=[must_be_unique_email] ) bio = forms.CharField( @@ -159,8 +160,8 @@ def save(self,id): this_user = User.objects.get(id__exact=id) if self.cleaned_data["email"] and self.cleaned_data["email"] != this_user.email: this_user.email = self.cleaned_data["email"] - if self.cleaned_data['user_name']: - this_user.username = self.cleaned_data["user_name"] + #if self.cleaned_data['user_name']: + # this_user.username = self.cleaned_data["user_name"] if self.cleaned_data['bio']: this_user.profile.bio = self.cleaned_data["bio"] if self.cleaned_data['location']: @@ -169,6 +170,7 @@ def save(self,id): return this_user class ProfileFormNontech(forms.Form): + """ user_name = forms.CharField( widget = forms.TextInput( attrs={'class': 'form-control'} @@ -178,10 +180,11 @@ class ProfileFormNontech(forms.Form): validators=[must_be_unique_user], max_length=150 ) + """ email = forms.EmailField( label="Email", - validators=[must_be_unique_email], + #validators=[must_be_unique_email], required=False ) @@ -189,8 +192,8 @@ def save(self,id): this_user = User.objects.get(id__exact=id) if self.cleaned_data["email"] and self.cleaned_data["email"] != this_user.email: this_user.email = self.cleaned_data["email"] - if self.cleaned_data['user_name']: - this_user.username = self.cleaned_data["user_name"] + #if self.cleaned_data['user_name']: + # this_user.username = self.cleaned_data["user_name"] this_user.save() return this_user From af278ff128984145bb4ef30323cc96f46f81351d Mon Sep 17 00:00:00 2001 From: John Higdon Date: Tue, 28 Apr 2020 22:18:03 -0700 Subject: [PATCH 30/35] Closes #58. Re-opens #51. Need an alternative solution for validation. --- myapp/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myapp/forms.py b/myapp/forms.py index 41431a8..f21dba5 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -181,7 +181,7 @@ class ProfileFormNontech(forms.Form): max_length=150 ) """ - + email = forms.EmailField( label="Email", #validators=[must_be_unique_email], From c0be93e1c3e6537c3028baef226472673b908212 Mon Sep 17 00:00:00 2001 From: Cody Evans <1123code@gmail.com> Date: Wed, 29 Apr 2020 14:27:54 -0700 Subject: [PATCH 31/35] Updated db.sqlite3 --- db.sqlite3 | Bin 241664 -> 221184 bytes myapp/migrations/0005_auto_20200401_1323.py | 19 ------------------ myapp/migrations/__init__.py | 0 .../0005_auto_20200401_1323.cpython-37.pyc | Bin 708 -> 0 bytes 4 files changed, 19 deletions(-) delete mode 100644 myapp/migrations/0005_auto_20200401_1323.py delete mode 100644 myapp/migrations/__init__.py delete mode 100644 myapp/migrations/__pycache__/0005_auto_20200401_1323.cpython-37.pyc diff --git a/db.sqlite3 b/db.sqlite3 index 1f7cfbca7fc27f1bf443702e138f96ff594ed197..538edf5c562730170cd22a95a416f9bb168b62a8 100644 GIT binary patch delta 4706 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 delta 11140 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 T-`d`2q+dOTAC$_U!tMV7h*d$% diff --git a/myapp/migrations/0005_auto_20200401_1323.py b/myapp/migrations/0005_auto_20200401_1323.py deleted file mode 100644 index a38a12f..0000000 --- a/myapp/migrations/0005_auto_20200401_1323.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.4 on 2020-04-01 20:23 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('myapp', '0004_auto_20200330_0044'), - ] - - operations = [ - migrations.AlterField( - model_name='issue_model', - name='affected_user', - field=models.ForeignKey(max_length=50, null=True, on_delete=django.db.models.deletion.PROTECT, to='myapp.Profile'), - ), - ] diff --git a/myapp/migrations/__init__.py b/myapp/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/myapp/migrations/__pycache__/0005_auto_20200401_1323.cpython-37.pyc b/myapp/migrations/__pycache__/0005_auto_20200401_1323.cpython-37.pyc deleted file mode 100644 index 470c1268d49181708b56ed42aaabb30cb01cf12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmYjPOK;Rb44ynUNgIh12*H7CE>XI>Tq=Z0SqccTt>~Vjh*7$BmW0WJJS3JYz4nLj zm*&c;{{V5qlVvH6#ns-- zm_#N0$^}-N{*yGTK?v#A6(>g6qtyF4FepVaISNEQ zT23xLoUdNJTuHBP@bB<{u=Ww%9@XzRr^m?xyU%^yB#W`algoa{vgCa6c9o30le>3I zXogS!o8de<;zzUTENr%|+K~yJPOXt+*ruuJ^o{YrmhKK;2v;MS9f61cg5ho Date: Sun, 3 May 2020 21:34:38 -0700 Subject: [PATCH 32/35] Don't delete the database file --- db.sqlite3 | Bin 221184 -> 258048 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/db.sqlite3 b/db.sqlite3 index 538edf5c562730170cd22a95a416f9bb168b62a8..0a6db7572cf09d62b2f50b345f0831119557e7f4 100644 GIT binary patch delta 7009 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 bz?uQOIjCAcJ+A+E%@czKs;sN#Jo$eB_b4Yd delta 2871 zcmb_eYitzP6`phN?94vAo?ZMHjIq6bf*-p(`$is+2%_$4;ns z`=kBQmF98Jcg~!1&pqcmJ90}Jxne(@>#X27F7(9(>^T&x3iv8GPtavzDit?dq3JJAmpXf}e@ogdgH;9kf!d9rSe314OSAC#>v4awEHC z<-Izw%$gZ=`)gc&-wMCFLJfHW!C-Y*)obHQ3gB0j>TpPZK3Tpp1M?60TP=aB@NBMMN5}-Q3zjiK^xVLAwU-2t$CD|enVoB6X&R66n%l!%qO7&9{ms{GXAByLs zc=9PMHq}c^To&`RZ}_SI=14J$E2O`5zSO_aQ@~T>Hxg!-UgWHjlau}^U6pPqf zRd~kyYACX&zjyE6-a%QQ0oc*kGq7v0d;8$PaAaV(d-&O*h?K!ow^_g9ZFuzpugvl- zq65T)^D6zDbZUe+E{zbI1FT5`-jU#k;IqLa6MUT$ra7r3{kmOCTW9^NRj_O}zbyV* z{Hk!lbcw&md&pICkg4=@AF!Af{%p5}Z{a^%p^9e|xgFCxAOMB9r4w?ovjaY6B(!!5 zYz7x9o0#bG7U&Q*h1F+K(*z|vHnR|4ND&)kJHiTmSI{u8|TG|ns&GbRCBrTBSS0KXon6{fgpFN4;!JJ z6j^7Xg|-;o>oP56*~m2-_7iDxtI@#Vl8nxC7&oqfT}$Ut*1rk<3SkW|&G+}@R@b-# z1pY%#`jAo14XJDi@LX|mslQAr|x9w$}obgqrlVmv%a1ViA&ozp}yZx-cen;qF1VdHSmw%vGVjQy=-0a@@n$5|{@^9lLn zD7E8z$LU?zgunbgU4a)TNeQ}Nq3;OlBZB;B@xx|a%$Fw Date: Sun, 3 May 2020 22:27:59 -0700 Subject: [PATCH 33/35] Finalized google log in --- myapp/forms.py | 4 ---- myapp/views.py | 5 ++--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/myapp/forms.py b/myapp/forms.py index 1bb2ec1..983ad2b 100644 --- a/myapp/forms.py +++ b/myapp/forms.py @@ -33,10 +33,6 @@ def must_be_unique_user(value): ] class IssueForm(forms.Form): - def __init__(self, *args, **kwargs): - self.request = kwargs.pop("request") - super(IssueForm, self).__init__(*args, **kwargs) - title = forms.CharField( widget = forms.TextInput( attrs={'class': 'form-control'} diff --git a/myapp/views.py b/myapp/views.py index db095dd..30bf3b5 100644 --- a/myapp/views.py +++ b/myapp/views.py @@ -25,12 +25,12 @@ def index(request, page=0): @login_required def submit(request): if request.method == "POST": - form = forms.IssueForm(data=request.POST, request=request) + form = forms.IssueForm(request.POST) if form.is_valid(): form.save(request.user) #pass in user for foreign key relationship form = forms.IssueForm() else: - form = forms.IssueForm(request=request) + form = forms.IssueForm() context = { "title":"ODIT - Submit Request", @@ -348,4 +348,3 @@ def edit_ticket(request, id): return render(request, "editticket.html", context=context) else: return redirect("/viewmyissues") - \ No newline at end of file From 80a1eb6f0e86877901f48020d9dea37b4b6d44f9 Mon Sep 17 00:00:00 2001 From: Cody <1123code@gmail.com> Date: Mon, 4 May 2020 13:12:42 -0700 Subject: [PATCH 34/35] Removed database file --- db.sqlite3 | Bin 258048 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 db.sqlite3 diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index 0a6db7572cf09d62b2f50b345f0831119557e7f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258048 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 Y1V8`;KmY_l00ck)1V8`;ezFAqKZ5Wt1^@s6 From e301f92cf245b070426c6a39be1269c09e3987d7 Mon Sep 17 00:00:00 2001 From: Cody Evans <1123code@gmail.com> Date: Mon, 4 May 2020 13:25:52 -0700 Subject: [PATCH 35/35] Added sqlite to gitignore and added comment to login.html --- .gitignore | 2 ++ db.sqlite3 | Bin 258048 -> 258048 bytes myapp/templates/registration/login.html | 1 + 3 files changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 9903a07..cec5a83 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,5 @@ venv.bak/ !.vscode/launch.json !.vscode/extensions.json .history +db.sqlite3 +*.sqlite3 diff --git a/db.sqlite3 b/db.sqlite3 index 0a6db7572cf09d62b2f50b345f0831119557e7f4..d84e825a40e576e4242f6ed054a1790634ce8417 100644 GIT binary patch delta 7692 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 in Google Registration +

    My Google Login Project

    {% if user.is_authenticated %}

    Welcome, {{ user.username }} !