From d0233d0f094e5e1c290644d340f3d19bcabbfbe7 Mon Sep 17 00:00:00 2001
From: Allie Bopp <aebopp@umich.edu>
Date: Tue, 14 Jul 2020 17:26:00 -0400
Subject: [PATCH] when someone joins an org late, their pending points requests
 are sent to the new student org leader

---
 .../views/__pycache__/accounts.cpython-36.pyc | Bin 13536 -> 13968 bytes
 servicePoints/views/accounts.py               |  51 +++++++++++-------
 var/servicePoints.sqlite3                     | Bin 32768 -> 32768 bytes
 3 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/servicePoints/views/__pycache__/accounts.cpython-36.pyc b/servicePoints/views/__pycache__/accounts.cpython-36.pyc
index 395b717c44002cd785339b56c3476f82f7ed0503..9f728b0a7d16dbe1209a926485c7d9974f50d743 100644
GIT binary patch
delta 3384
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
DNGu0k

delta 2908
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

diff --git a/servicePoints/views/accounts.py b/servicePoints/views/accounts.py
index 25843ff..15a067e 100644
--- a/servicePoints/views/accounts.py
+++ b/servicePoints/views/accounts.py
@@ -63,7 +63,7 @@ def create():
         to_add = (name,)
         to_join = (orgName,)
         cursor.execute('SELECT * FROM users WHERE username=?', to_add)
-        if cursor.fetchone() is not None:
+        if cursor.fetchone() is not None or name == "pending":
             return flask.redirect(flask.url_for('duplicateUsername', prev='create'))
 
         cursor.execute('SELECT * FROM orgs WHERE orgName=?', to_join)
@@ -121,6 +121,8 @@ def createOrg():
         to_add = (name,)
         to_addOrg = (orgName,)
         if orgName == "NONE":
+            return flask.redirect(flask.url_for('duplicateOrgName', prev='createOrg'))
+        if name == "pending":
             return flask.redirect(flask.url_for('duplicateUsername', prev='createOrg'))
         cursor.execute('SELECT * FROM users WHERE username=?', to_add)
         if cursor.fetchone() is not None:
@@ -341,10 +343,17 @@ def profile():
 
     if flask.request.method == 'POST':
         orgName = str(flask.request.form['orgName'])
-
+        username = str(flask.session['username'])
         cur = servicePoints.model.get_db()
         cur.execute('UPDATE users SET orgName = ? WHERE username = ?',
-                                    (orgName, flask.session['username']))
+                                    (orgName, username,))
+        cur.execute('DELETE from orgs WHERE username = ?',
+                                    (username,))
+        leadercur = cur.execute('SELECT username from orgs WHERE orgName = ?',
+                                    (orgName,))
+        leader = leadercur.fetchone()                            
+        cur.execute('UPDATE requests SET leader = ? WHERE member = ?',
+                                    (leader["username"], username,))                            
         return flask.redirect(flask.url_for('index'))
 
     cursor = servicePoints.model.get_db()
@@ -428,11 +437,14 @@ def submitPoints():
                         {"who": username})
         results = studentOrgCur.fetchone()
         orgName = results["orgName"]
-        studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE '
-                        'orgName =:who',
-                        {"who": orgName})
-        results = studentOrgLeader.fetchone()
-        leader = results["username"]
+        if orgName == "NONE":
+            leader = "pending"
+        else:
+            studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE '
+                            'orgName =:who',
+                            {"who": orgName})
+            results = studentOrgLeader.fetchone()
+            leader = results["username"]
         cursor.execute('INSERT INTO requests(member, leader, service, filename) VALUES '
             '(:one,:two,:three,:four)', {"one": username, "two": leader, "three": serviceType, "four": hash_filename_basename})
         return flask.redirect(flask.url_for('confirmSubmission'))
@@ -456,16 +468,19 @@ def confirmSubmission():
                         {"who": username})
     results = studentOrgCur.fetchone()
     orgName = results["orgName"]
-    studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE '
-                    'orgName =:who',
-                    {"who": orgName})
-    results = studentOrgLeader.fetchone()
-    leader = results["username"]
-    studentOrgLeaderFull = cursor.execute('SELECT fullname FROM users WHERE '
-                    'username =:who',
-                    {"who": leader})
-    results = studentOrgLeaderFull.fetchone()
-    context = {"leader": results["fullname"]}
+    if orgName == "NONE":
+        context = {"leader": "[when you join a student org, your request will be sent to the student org leader]"}
+    else:
+        studentOrgLeader = cursor.execute('SELECT username FROM orgs WHERE '
+                        'orgName =:who',
+                        {"who": orgName})
+        results = studentOrgLeader.fetchone()
+        leader = results["username"]
+        studentOrgLeaderFull = cursor.execute('SELECT fullname FROM users WHERE '
+                        'username =:who',
+                        {"who": leader})
+        results = studentOrgLeaderFull.fetchone()
+        context = {"leader": results["fullname"]}
     return render_template('confirmSubmission.html', **context)
 
 
diff --git a/var/servicePoints.sqlite3 b/var/servicePoints.sqlite3
index 9599fb8a735dd76dc6574171b10ce6a4cf28966f..2464e2f347f64a8f0b2bbd3fcfb11d062973c0a2 100644
GIT binary patch
delta 829
zcmZuvJ8RTI5WmZX<e!IG;|X#kMNSS|cW2)qM6?l7q_MCGxR04=<0D3bAlzL(fgztD
zWx(b*?NV3@A*}{MEK*C*MoTvua*fNdO!1qY-(!2dv0iWN%|d-)XYp=*VeoK|U7LPg
ztE$r)^K+Y*_GZ7#HfL^Cr&EJL|8v#tFHcs@X0x@uHuVIzF6!yV`in<F3+TASjo{Hr
z<3UBtK{=BGNQ){eW3dxS3nNVqToN}bSwr4%&p{@gQ5XzFRvAyId9cB8Op-tvu9D2%
z@&+f9m9v~=%p@X`(2-lg6DcyrP;%U%<HkFOf?FR8T0@3{PdcjDzgJbQa<<p1!oM&d
z-FV)gYe_k}WTI11M5P6K-_2!Ra-NG!I*Cq@8n}}RQ93K4$kyn;`b8oNoMILbqys=t
z8GM;SM><=y#T??=k<3vlLI~DTBv9a#*M=w+D>U*H6_}(l6%SpsS6${@aOB+k;z6{v
zTJ6J5|DfByKT);Y?K4r&w{T<g)yv0EpZ%{ZVplK1($WR+89_#&NPx34dn*GJLIR@f
zc%cch##oG0pgG16N)S*`U=vBFF?#}dfRweh7!($=C^2O(lo3!w*i25wB1cJWI4>y}
z?Q~GW#w5!pD2b<3Qq~ADDuo<_Fd!9#nBuUx_@i;9V*54riTz^l*gpHl4%xx*^3pE5
zKHX^5|D{(=HkxPc<Xod&AL*XhJ-q2>$Js%R{bXO+Q5l@)Z`nK>Z?syY+&9*DkCtu0
o9oN`zcEY~1<Kg`6k8EbNV0?J8dSj`v!d8aur8}(tey2b91DLw@=l}o!

delta 124
zcmV-?0E7R4fC7Mk0+1U450M;00S~cYp$`!N000FH695l64s;En4B8A6vmqb>46_p)
z@dFM856b`#)(`g&-w(?V?z0g<xet@eFF6VW56u7%@(<k)&9f0ezYmkmKQ{^k590t2
e_z&X`?XwY3)ep1dPbMG%qq7k(oDTtAk%3vT@+Y<c

-- 
GitLab