Skip to content

Commit 2b69426

Browse files
committed
Eval director can delete co-ops now
1 parent 146a6e7 commit 2b69426

File tree

5 files changed

+98
-2
lines changed

5 files changed

+98
-2
lines changed

conditional/blueprints/co_op.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
from conditional.util.flask import render_template
77

8+
from conditional.util.ldap import ldap_get_member, ldap_is_eval_director
9+
810
from conditional.models.models import CurrentCoops
911

1012
from conditional import db, start_of_year
@@ -52,3 +54,24 @@ def submit_co_op_form():
5254
db.session.commit()
5355

5456
return jsonify({"success": True}), 200
57+
58+
59+
@co_op_bp.route('/co_op/<uid>', methods=['DELETE'])
60+
def delete_co_op(uid):
61+
log = logger.new(user_name=request.headers.get("x-webauth-user"),
62+
request_id=str(uuid.uuid4()))
63+
64+
username = request.headers.get('x-webauth-user')
65+
account = ldap_get_member(username)
66+
67+
if not ldap_is_eval_director(account):
68+
return "must be eval director", 403
69+
70+
log.info('api', action="Delete %s's Co-Op" % uid)
71+
72+
CurrentCoops.query.filter(CurrentCoops.uid == uid, CurrentCoops.date_created > start_of_year()).delete()
73+
74+
db.session.flush()
75+
db.session.commit()
76+
77+
return jsonify({"success": True}), 200

conditional/blueprints/member_management.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from conditional.models.models import EvalSettings
2121
from conditional.models.models import OnFloorStatusAssigned
2222
from conditional.models.models import SpringEval
23+
from conditional.models.models import CurrentCoops
2324

2425
from conditional.blueprints.cache_management import clear_members_cache
2526
from conditional.blueprints.intro_evals import display_intro_evals
@@ -42,7 +43,7 @@
4243
from conditional.models.models import attendance_enum
4344
from conditional.util.member import get_members_info, get_onfloor_members
4445

45-
from conditional import db
46+
from conditional import db, start_of_year
4647

4748
logger = structlog.get_logger()
4849

@@ -64,6 +65,11 @@ def display_member_management():
6465
member_list = get_members_info()
6566
onfloor_list = get_onfloor_members()
6667

68+
co_op_list = [(ldap_get_member(member.uid).displayName, member.semester, member.uid) \
69+
for member in CurrentCoops.query.filter(
70+
CurrentCoops.date_created > start_of_year(),
71+
CurrentCoops.semester != "Neither")]
72+
6773
freshmen = FreshmanAccount.query
6874
freshmen_list = []
6975

@@ -92,6 +98,7 @@ def display_member_management():
9298
num_fresh=len(freshmen_list),
9399
num_onfloor=len(onfloor_list),
94100
freshmen=freshmen_list,
101+
co_op=co_op_list,
95102
site_lockdown=lockdown,
96103
intro_form=intro_form)
97104

conditional/templates/member_management.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,43 @@ <h3 class="panel-title">Administration</h3>
3838
</div>
3939
</div>
4040
</div>
41+
{% if co_op and is_eval_director%}
42+
<div class="panel panel-default">
43+
<div class="panel-heading">
44+
<h3 class="panel-title">Co-Op Management</h3>
45+
</div>
46+
<div class="panel-body table-fill">
47+
<div class="table-responsive">
48+
<table class="table table-striped no-bottom-margin" data-module="table" data-searchable="false" data-sort-column="1" data-sort-order="asc" data-length-changable="true" data-paginated="false">
49+
<thead>
50+
<tr>
51+
<th>Name</th>
52+
<th>Semester</th>
53+
<th>Delete</th>
54+
</tr>
55+
</thead>
56+
<tbody>
57+
{% for c in co_op %}
58+
<tr id="coop-{{c[2]}}">
59+
<td>
60+
<img class="table-img mobile-hide" src="https://profiles.csh.rit.edu/image/{{c[2]}}"> {{c[0]}}
61+
</td>
62+
<td>
63+
{{c[1]}}
64+
</td>
65+
<td width=100px>
66+
<a href="#" data-module="coopDelete" data-uid="{{c[2]}}">
67+
<span class="glyphicon glyphicon-trash red align-center" style="width: 100%"></span>
68+
</a>
69+
</td>
70+
</tr>
71+
{% endfor %}
72+
</tbody>
73+
</table>
74+
</div>
75+
</div>
76+
</div>
77+
{% endif %}
4178

4279
{% if is_eval_director %}
4380
<div class="panel panel-default">
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import FetchUtil from "../utils/fetchUtil";
2+
3+
export default class coopDelete {
4+
constructor(link) {
5+
this.link = link;
6+
this.uid = this.link.dataset.uid;
7+
this.endpoint = '/co_op/' + this.uid;
8+
this.render();
9+
}
10+
11+
render() {
12+
this.link.addEventListener('click', e => this._delete(e));
13+
}
14+
15+
_delete(e) {
16+
e.preventDefault();
17+
18+
FetchUtil.fetchWithWarning(this.endpoint, {
19+
method: 'DELETE',
20+
warningText: "This co-op entry will be deleted and the user will no" +
21+
" longer be excluded from attendance and vote counts.",
22+
successText: "Co-op has been deleted."
23+
}, () => {
24+
document.getElementById('coop-' + this.uid).remove();
25+
});
26+
}
27+
}

frontend/stylesheets/pages/_co-op.scss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
padding-left: 10px;
1111
}
1212

13-
.radio-inline input[type='radio'], .radio input[type='radio'], input[type='radio'] {
13+
.radio-inline input[type='radio'],
14+
.radio input[type='radio'],
15+
input[type='radio'] {
1416
position: fixed;
1517
margin-top: 20px;
1618
}

0 commit comments

Comments
 (0)