From 92ee2910169b306d12e7b7349c11219223b8b2c6 Mon Sep 17 00:00:00 2001 From: Adam Drake <drakeadam02@gmail.com> Date: Thu, 2 May 2024 03:19:00 +0100 Subject: [PATCH] Admin dashboard with working ai account approval --- .../__pycache__/views.cpython-310.pyc | Bin 6918 -> 7281 bytes .../prediction_service/home-Admin.html | 54 ++++++++++++++++++ prediction_service/views.py | 26 ++++++++- 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 prediction_service/templates/prediction_service/home-Admin.html diff --git a/prediction_service/__pycache__/views.cpython-310.pyc b/prediction_service/__pycache__/views.cpython-310.pyc index e773b4cf329949ded3792bd435c8f73da9ce5895..e0c1dfb4935d4d1280f68d0091410579733f81cb 100644 GIT binary patch delta 1867 zcmZoO`)I+J&&$ijz`(#T<GWE>pUOr)DJErh1_lN;1_lOa1_p*=2}TBn8ip)}EXJbn z8ip*U6vk|(qVUPyOiA@MOj&GM>?xetOhthu99b+`d?{Qh+`WvoEHx}Oj43=e3?;lZ z3@N-djLpo!5H>r64K=U>Y#?7YQxS;8zd#^`e<5QnYYnRlL#%Wy8`w<F8nzVHUdCGH z6oDG%c&-}e1%eA17#T{q7pM!>Fw`(-F=R2!W=Ij7%e0V*k)bf7L^wsLnK785L?lHR zL~DvnKFoAj=N7MHN^WLeW^qYTVo83Hn<nEe-pu0o#L|+C{G!aN)RbH71*v%{nR)3| zN|PsY2?u24=cej{_2^}k<mTLB3GfdNxh0rbP*9X#mYNcun4FwnnpaXBQYEPX6I4hn zR&exGaLr54%u7uzQvAi`>*MGctP3)0avQT1qv+&=%wg_DLJSNHMXU@A47XTQi;D7# zikLubwzSNglGLIi5fFzxJ+&k!v$*6IOL1aZ>Mi!-(&XgS;^HD^kX9B31_n*`$#yK_ zHn+GFGviaC7Dfp|{Qws!E)r#6V2EOex^^W)kvand!!HH>#DW5SkUu9kvk03RFfcF( zF>x^QF|jf6FbgoTG4g;Q6AvRF3kNd~GY_*6BM&1)o`Xq(iGzuQsYrA37M5%m6_9&C zW`Yea(g3-gH8Cl_w8RCJdO#i%U@X!GIhgqtcW7~HQ9x0CT4qk_Eq2$u6cE2ic5*W7 z3t5P_IZBIDi}Dh4Q;TFkT9}FiK<3L#&SX<y6q?+{mRK(V65s$4;Bex|ERHWr%*jkC zQUY1clbn;9n3tLopORRTSR@BhrUN1*L6U6AMX8A;sYSXV5m^ucii09$5DOfxAlGWL z6@mR^2oeR`t_Na)oO6q(v{)szD82yV1Bj2oeg}J-qbM~!v$!O+$Y=6oc5Ozp$@|%5 z8D%HmW$#r1IkgC6&Ml6D#Ny)e{Gt?1Ca^$}CCGF!1_p-7Q#lmaKrvAz3yzp`9K7*h z&w@3By<!ehYXKs_&IP+(9>fJZoCV@=kTnof!LA3p4@`g^$qi1C@j3bFnRz*rtvF>F zttLls9%U4nEXQTXC^k8kE219cbxnaHu;tbu<H0U40<l1W433jqY>=!|Bn=XVgidC0 zd~s<(Y7r<7!O0sbXl+5t5N>6LxD{m6EtZ1(;u5656oNPu5?S#e$@<A|+^UR@n{&7q zGBS#6=Hs2u$mlv*QB-;IMZVU_mjxUqPvB*pJe%JN#%6!H9b{k7WJQ5G#-Pay1oYTE zAOeBB_B=1e85kH|K8Fa%3mP*9O%CLBVDp9u%oH?ci-Rx&c?~8r35l`=fz(G&4&)V| zY#<^Imlbm0&H>5%0jc(fN&94j#QuVaw;<v?NVXVG6oOb_1Al>JKY+NAAXYz!l?q~k zLi6QI5VvIVLS7@)m*pVQjUa(4OyXq{NGxh{Ag>J1%QO%hWO`A+<b}M&>@Qb>1t#;0 zRI=4Vn0+FZjJ1<FMC-UA0wA*!CNJbILGX)w5&Q;_E(pH~!~`4eJ2{Y7X|jPh4`cIW zTk%>(iOIXg!+D%QnT#dBAT_T@X|kMzo(d?}fivMP=Hil~TWmRrm8nI=;L=W$50V0G zCl^TgGqz1WAR#FNPNiT1lmd!oGB7aAp8QrKm2u|eV9B+ynjq^zB}oxDOCxfz8OUDY zl&r+O^nAVK{JfH)%p^Tf@+?AR7%PxwaAI}@sb<PAF6sf5jI4R3xdoL)os(mw<PEyP oBDn=QDaN;$13Z0-Kt3v(0MZI_3{o0}xN`CuDQ!mM$v33*03ox-i~s-t delta 1499 zcmexp(PqY%&&$ijz`($e`q(IKz5GT#DJEqW1_lNYc4lB;DDGfjV5nipV#s1Fa;Ra* zVoG7mW-4-+?9G%UR>E7ukiuTW*vuTvP{NnO*~}Qspvg5knECMJr7TvA{F5KBgsI=+ z%`A>jEG@~%FUqV+O(|k!U|_h#np#wpUsS}zz`#%hvPqL=axJU4U=(*^W_)U1dS+f~ zYSBuDBH78uSPkSP7#J9Ym^hgDnAn(jm<5>F7<oXDiHDhkxk!Gp4qLXmG{_)XI3WkN zBQYtzv_uEw2ar7ij75r*_p!+^ich}H_CoF!OMriH$Ssc2;?$zN#N5;(F$M+(O{O9N zkRf7|AFwMhN=|0vNURqE32=Z26_BYMnZ@yCi8+}mw^)i3%TjOgB<G|i=B1{@rzDmn z7J-~vqy$nd3{uRNT$Gwvl3Jt;5)lUxVBfPBmnJ8t78e&WgM>hi(_||GdqD#v0Cs{Z zh$Y6rpve%$19D@0K~a8MW=?7mnlCwuQqwbwOHzwWCbM#CGwMw?<dkI;pX|@ss||8* z5y+fd90iHR#pU@$DVj`Rfg(c&28Lf;zCMnQ!MYjwxv7)56d2VfD{`qqybIO|_KQBq z83rH%>{gKTi=;qYu&Y@ht_IlwHWCtgXfEUiTN9s?pPrc)0*Vb01_lN$Pz*BiF>)|* zF>)~SFmo_+F%=mzFibwmb(m3QawoSPqtWCO+!6Jl5YZGU0>^?0$YQYDG(jva5CICT zTWpZ@RU`@$0Y&63p3LI-;?jcDB2d_Y(_E1*ND}M|GY|{m3ucHfKsMcCDabD_K?-9b za8lxi#A7^2GJWz!9#uxG&DVJrGBT=cuH>7~$Y?iNP(*pMjX*1-%VbAE*U9XHmSC0_ zqxa+<!8$f?1_p+g7Lz9mYA_W!PTnivGPzEO8zL$@d7_{u<NV2c1zZJOK<)yoy#dl7 z0MQUWd9Q%!<XmA<h=%CNg8X`H;b5hc_Xs<1r-Ib}0r5RRQa&jl{$CLB7DSu}$>hL^ zED#H9$1jlV2M{+1#OepJ;y^4J5b+Yk&7IsRVk=b)Vxkf+lR#p@lRxsya;JfqAQOu` zCpU^1O*Rm7<axOgCit=wD(J*r1{bqL5qtR`WMLeNSP{s;mkF3+MQ*5Kl^{bAV$~on zNN<tb<b!-llV?ltFxE_7AyLaHG+9kDoW~lJEm`slQuB(mCU;8ev4Qewk;LS^k`ip- z9B4NAwxmB}{bX$^NfFe9Tr`P+fuVVFgj6cyq{;iF*2c<%>{0{~;2e+0<a!`Wgj2E- z^V0M6lJoOQiZYY*KuNR+k)4b|`b<EC6-YHxesNJN0|P@8YhGz?L1j_X<P*~J1}$Kb o+=84G<6F!Do<2n&=NEN?bb%a$lup4;m76Rsqs=Hi*;z&p033f-8UO$Q diff --git a/prediction_service/templates/prediction_service/home-Admin.html b/prediction_service/templates/prediction_service/home-Admin.html new file mode 100644 index 0000000..2d5671c --- /dev/null +++ b/prediction_service/templates/prediction_service/home-Admin.html @@ -0,0 +1,54 @@ +{% include "prediction_service/base.html" %} +{% include "prediction_service/navbar.html" %} + +{% block content %} + + <br> + + <div class="container"> + <h1>Admin Dashboard!</h1> + <div class="row col-sm-12"> + {% for post in posts %} + <div class="card" style="width: 18rem; margin-right: 15px;"> + <div class="card-body"> + <h5 class="card-title">{{post.title}} ID: {{post.mlmodel.id}}</h5> + <h6 class="card-subtitle mb-2 text-muted">By {{ post.author }} on {{ post.date_posted }}</h6> + <p class="card-text">{{ post.content }}</p> + <a href="/mlmodel/{{post.mlmodel.id}}" class="card-link">Ml-Model</a> + <a href="#" class="card-link">Inspect Model</a> + </div> + </div> + {% endfor %} + + <form method="POST" action="/home/"> + {% csrf_token %} + {% for account in pending %} + <div class="card" style="width: 18rem; margin-right: 15px;"> + <div class="card-body"> + <h5 class="card-title">Username: {{ account.user.user }}</h5> + <h6 class="card-subtitle mb-2 text-muted">AI Engineer Request</h6> + <label class="checkbox-label" for="approve-checkbox-{{ account.user }}">Approve</label> + <input type="checkbox" id="{{ account.user }}" name="approved_accounts" value="{{ account.user.id }}"> + </div> + </div> + {% endfor %} + <button type="submit" class="btn btn-primary">Submit</button> + </form> + + + </div> + + + </div> + + <!-- Square plus button --> + <div style="position: fixed; bottom: 20px; right: 20px;"> + <a href="{% url 'MLAAS-create_post' %}"> + <button style="width: 50px; height: 50px; border-radius: 50%; background-color: #007bff; color: white; font-size: 24px; border: none;">+</button> + </a> + </div> + + + + +{% endblock content %} \ No newline at end of file diff --git a/prediction_service/views.py b/prediction_service/views.py index 53d04fa..0e636cb 100644 --- a/prediction_service/views.py +++ b/prediction_service/views.py @@ -32,10 +32,34 @@ def home(request): return render(request, 'prediction_service/home.html',context) else: return render(request, 'prediction_service/home-AI.html',context) + elif user.userprofile.role == "Administrator": + # to do: + # 1. we need to get all AI Engineer table data + # 2. filter all the rows that have approved as false + pending_engineers = AIEngineer.objects.filter(is_authorized=False) + # 3. pass them into the context of the page + # 3.1 - use html majix to list them out (Like how posts are) + context['pending'] = pending_engineers + # 4. we need a form for them to submit with the approved selections + # 4.1 - therefore we need a view for handaling the process for changing the status to approved + return render(request, 'prediction_service/home-Admin.html',context) else: # if the account is not an AI Engineer return render(request, 'prediction_service/home.html',context) - + elif request.user.is_authenticated and request.method == "POST": + approved_accounts = request.POST.getlist('approved_accounts') + + for account in approved_accounts: + # Process each approved account ID + ai_engineer = AIEngineer.objects.get(user=account) + + ai_engineer.is_authorized = True + + ai_engineer.save() + + messages.success(request, f'{ai_engineer.user.user} approved as AI Engineer!') + + return redirect('MLAAS-home') else: return HttpResponse("<h1> you are not authenticated but are logged in? </h1>") -- GitLab