membershipViewer: Add basic front desk web page thingy

This commit is contained in:
Adam Goldsmith 2018-06-21 15:50:01 -04:00
parent c0d7ef4f86
commit 6048990ea9
2 changed files with 100 additions and 0 deletions

56
membershipViewer.py Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env python3
import re
from flask import Flask, render_template
app = Flask(__name__)
from common import *
def parse_list(member, regex):
data_list = []
for key, value in member.items():
match = re.match(regex, key)
if match is not None and value != '':
data_list.append(match.group(1))
return ", ".join(data_list)
def parse_members(members):
data = []
for member in members:
props = {
'Name': member['Account Name'],
'Renewal Date': member['Renewal Date'],
'Card Number': member['Access Card Facility Code'] + '-' \
+ member['Access Card Number'],
'Account on Hold': "Yes" if member['Account on Hold'] != '' else "No" }
certifications = []
access = []
levels = []
props['Certifications'] = parse_list(member, 'Certified: (.*)')
props['Door Access'] = parse_list(member, 'Access (.*)\?')
props['Memebership Level'] = parse_list(member, 'CMS (.*)')
data.append(props)
return data
@app.route("/")
def main():
# maybe not now: membership agreement signed
# TODO: renewal date
members = getMembershipworksData(
"lvl,xws,xms,xsc,xas,xfd,xac,phn,eml,lbl,xcf,nam,end")
data = parse_members(members)
headers = ['Name', 'Certifications', 'Door Access', 'Memebership Level',
'Card Number', 'Renewal Date', 'Account on Hold']
return render_template("members.html", headers=headers, members=data)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')

44
templates/members.html Normal file
View File

@ -0,0 +1,44 @@
<html>
<head>
<title> CMS Members </title>
<style>
table {
border-collapse: collapse;
}
td, th{
border: 1px solid black;
}
td {
padding: 3px;
}
tr:nth-child(even) {
background-color: #ccc;
}
tr[onHold=Yes] {
background-color: #f66;
}
</style>
</head>
<body>
<h1>Members</h1>
<table>
<tr>
{% for header in headers %}
<th> {{ header }} </th>
{% endfor %}
</tr>
{% for member in members %}
<tr onHold ="{{ member['Account on Hold'] }}">
{% for header in headers %}
<td> {{ member[header] }} </td>
{% endfor %}
</tr>
{% endfor %}
</div>
</table>
</body>
</html>