Frontend updates to use new backend
parent
93c043fb56
commit
1914dd5388
|
@ -45,10 +45,22 @@ class Member(db.Model):
|
|||
username = db.Column(db.String(64), unique=True)
|
||||
type = db.Column(db.Enum("starving", "fatty", name="member_types"))
|
||||
transfers = db.relationship("MemberTransfer",order_by=[db.asc(MemberTransfer.year), db.asc(MemberTransfer.month)])
|
||||
# old field
|
||||
active = db.Column(db.Boolean)
|
||||
api_keys = db.relationship("APIKey")
|
||||
join_year = db.Column(db.Integer)
|
||||
join_month = db.Column(db.Integer)
|
||||
ldap_username = db.Column(db.String(64), unique=True)
|
||||
# Normal - standard 3 months grace period
|
||||
# Extended Grace Perioud - do not shut off account after grace period
|
||||
# Potato - do not ever shut off account, report falsified payment status
|
||||
# Disabled - manual disable override, regardless of payment extra
|
||||
payment_policy = db.Column(db.Enum('Normal',
|
||||
'Extended Grace Period',
|
||||
'Potato',
|
||||
'Disabled',
|
||||
name='payment_policy_types'))
|
||||
preferred_email = db.Column(db.String(64))
|
||||
|
||||
@classmethod
|
||||
def get_members(kls, deep=False):
|
||||
|
@ -80,9 +92,10 @@ class Member(db.Model):
|
|||
del now_date
|
||||
|
||||
status = {}
|
||||
status['ldap_username'] = self.get_ldap_username()
|
||||
status['ldap_username'] = self.ldap_username
|
||||
status['username'] = self.username
|
||||
status['type'] = self.type
|
||||
status['payment_policy'] = self.payment_policy
|
||||
# First check - did we actually get any transfers?
|
||||
if not self.transfers or self.transfers[0].transfer.uid == app.config['DUMMY_TRANSFER_UID']:
|
||||
status['payment_status'] = PaymentStatus.never_paid
|
||||
|
@ -94,6 +107,7 @@ class Member(db.Model):
|
|||
else:
|
||||
status['joined'] = (None, None)
|
||||
status['next_unpaid'] = (None, None)
|
||||
self._apply_judgement(status)
|
||||
return status
|
||||
|
||||
# Use the join date from SQL, if available
|
||||
|
@ -128,7 +142,7 @@ class Member(db.Model):
|
|||
# Is this the first transfer? See if it was done on time
|
||||
if previous_uid is None:
|
||||
unpaid_months += (this_scalar - joined_scalar)
|
||||
|
||||
|
||||
# Apply any missing payments
|
||||
if active_payment and previous_uid is not None:
|
||||
unpaid_months += (this_scalar - previous_scalar) - 1
|
||||
|
@ -139,10 +153,15 @@ class Member(db.Model):
|
|||
most_recent_transfer = this_transfer
|
||||
|
||||
active_payment = True
|
||||
|
||||
|
||||
previous_transfer = this_transfer
|
||||
previous_uid = this_uid
|
||||
|
||||
|
||||
# Apply missing payments from now
|
||||
if active_payment:
|
||||
previous_scalar = self._yearmonth_scalar(previous_transfer)
|
||||
unpaid_months += (now - previous_scalar)
|
||||
|
||||
status['months_due'] = unpaid_months
|
||||
status['payment_status'] = PaymentStatus.okay if unpaid_months < 4 else PaymentStatus.unpaid
|
||||
|
@ -153,6 +172,7 @@ class Member(db.Model):
|
|||
else:
|
||||
status['next_unpaid'] = self._yearmonth_increment(status['last_paid'])
|
||||
|
||||
self._apply_judgement(status)
|
||||
return status
|
||||
|
||||
|
||||
|
@ -168,6 +188,22 @@ class Member(db.Model):
|
|||
mc.set(cache_key, json.dumps(cache_data))
|
||||
return cache_data
|
||||
|
||||
def _apply_judgement(self, status):
|
||||
"""Check your priviledge, you cisnormative shitlord!"""
|
||||
policy = status['payment_policy']
|
||||
if policy == 'Normal':
|
||||
if status['payment_status'] == PaymentStatus.okay:
|
||||
status['judgement'] = True
|
||||
else:
|
||||
status['judgement'] = False
|
||||
elif policy == 'Extended Grace Period':
|
||||
status['judgement'] = True
|
||||
elif policy == 'Potato':
|
||||
status['judgement'] = True
|
||||
status['months_due'] = 0
|
||||
else:
|
||||
status['judgement'] = False
|
||||
|
||||
def get_months_due(self):
|
||||
status = self.get_status()
|
||||
return status['months_due']
|
||||
|
@ -190,6 +226,7 @@ class Member(db.Model):
|
|||
self.join_year = now_date.year
|
||||
self.join_month = now_date.month
|
||||
|
||||
|
||||
class Transfer(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
uid = db.Column(db.String(128))
|
||||
|
@ -227,7 +264,7 @@ class Transfer(db.Model):
|
|||
member = Member.query.filter_by(username=member_name).first()
|
||||
if not member:
|
||||
return self.MATCH_NO_USER, member_name
|
||||
|
||||
|
||||
if (title[1] == 'starving' and self.amount > 50) or (title[1] == 'fatty' and self.amount > 100):
|
||||
return self.MATCH_WRONG_TYPE, member
|
||||
|
||||
|
|
|
@ -22,10 +22,10 @@
|
|||
<ol>
|
||||
{% for member in group.list %}
|
||||
<li>
|
||||
<a style="color: #{{ member.color }};" href="/member/{{ member.username }}">{{ member.username }}</a> ({{ member.months_due() }} months due)
|
||||
<a style="color: #{{ member.color }};" href="/member/{{ member.username }}">{{ member.username }}</a> ({{ member.months_due }} months due)
|
||||
| <a href="/member/{{ member.username }}/edit">edit</a>
|
||||
| <a href="/member/{{ member.username }}/deactivate">deactivate</a>
|
||||
{% if member.months_due() > 2 %}
|
||||
{% if member.months_due > 2 %}
|
||||
| <a href="/member/{{ member.username }}/warn">warn</a>
|
||||
{% else %}
|
||||
| <a href="/member/{{ member.username }}/remind">remind</a>
|
||||
|
@ -40,7 +40,7 @@
|
|||
<ol>
|
||||
{% for member in inactive_members %}
|
||||
<li>
|
||||
<a style="color: #{{ member.color }};" href="/member/{{ member.username }}">{{ member.username }}</a> ({{ member.months_due() }} months due)
|
||||
<a style="color: #{{ member.color }};" href="/member/{{ member.username }}">{{ member.username }}</a> ({{ member.months_due }} months due)
|
||||
| <a href="/member/{{ member.username }}/edit">edit</a>
|
||||
| <a href="/member/{{ member.username }}/activate">activate</a>
|
||||
</li>
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
<table class="table">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Memberhsip type</th>
|
||||
<th>Membership type</th>
|
||||
<th>Member since</th>
|
||||
</tr>
|
||||
{% for member in active_members %}
|
||||
<tr>
|
||||
<td>{{member['username']}}</td>
|
||||
<td>{{member['ldap_username']}}</td>
|
||||
<td>{{member['type']}}</td>
|
||||
<td>{{member['joined'][0]}}/{{member['joined'][1]}}</td>
|
||||
</tr>
|
||||
|
|
|
@ -38,24 +38,18 @@ def memberlist():
|
|||
@app.route("/admin")
|
||||
@login_required
|
||||
def index():
|
||||
inactive_members = models.Member.get_members(True).filter_by(active=False)
|
||||
active_members = models.Member.get_members(True).filter_by(active=True)
|
||||
for member in active_members:
|
||||
due = member.months_due()
|
||||
members = [m.get_status() for m in models.Member.get_members(True)]
|
||||
for member in members:
|
||||
due = member['months_due']
|
||||
if due < 1:
|
||||
member.color = "00FF00"
|
||||
member['color'] = "00FF00"
|
||||
elif due < 3:
|
||||
member.color = "E0941B"
|
||||
member['color'] = "E0941B"
|
||||
else:
|
||||
member.color = "FF0000"
|
||||
for member in inactive_members:
|
||||
due = member.months_due()
|
||||
if due < 1:
|
||||
member.color = "00FF00"
|
||||
elif due < 3:
|
||||
member.color = "E0941B"
|
||||
else:
|
||||
member.color = "FF0000"
|
||||
member['color'] = "FF0000"
|
||||
|
||||
active_members = filter(lambda m: m['judgement'], members)
|
||||
inactive_members = filter(lambda m: not m['judgement'], members)
|
||||
|
||||
return render_template("admin_index.html",
|
||||
active_members=active_members,
|
||||
|
|
Loading…
Reference in New Issue