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