diff --git a/ssmembership/jinja2/ssmembership/index.html b/ssmembership/jinja2/ssmembership/index.html
index d7e8fd5..f6125b3 100644
--- a/ssmembership/jinja2/ssmembership/index.html
+++ b/ssmembership/jinja2/ssmembership/index.html
@@ -23,6 +23,79 @@
No membership records
This email address is not associated with a current membership.
{% else %}
- Membership details
+ Membership details
+
+
+ {% endif %}
+{% endblock %}
+
+{% block script %}
+ {{ super() }}
+ {% if member %}
+
{% endif %}
{% endblock %}
diff --git a/ssmembership/models.py b/ssmembership/models.py
index 8d79202..72f4c0f 100644
--- a/ssmembership/models.py
+++ b/ssmembership/models.py
@@ -16,6 +16,8 @@
from django.db import models
+import re
+
class Member(models.Model):
email = models.CharField(max_length=100)
@@ -25,20 +27,44 @@ class Member(models.Model):
student_id = models.CharField(max_length=8)
is_msa = models.BooleanField()
- year = models.IntegerField(
- choices = (
- (0, 'Year A'),
- (1, 'Year 1'),
- (2, 'Year 2'),
- (3, 'Year 3B'),
- (4, 'Year 4C'),
- (5, 'Year 5D'),
- (97, 'BMedSc(Hons)'),
- (98, 'PhD'),
- (99, 'Intermission'),
- )
+ YEARS = (
+ (0, 'Year A'),
+ (1, 'Year 1'),
+ (2, 'Year 2'),
+ (3, 'Year 3B'),
+ (4, 'Year 4C'),
+ (5, 'Year 5D'),
+ (97, 'BMedSc(Hons)'),
+ (98, 'PhD'),
+ (99, 'Intermission'),
)
+ year = models.IntegerField(choices=YEARS)
phone = models.CharField(max_length=20)
expires = models.DateField()
+
+ def validation_problems(self):
+ result = []
+
+ if not self.email.strip():
+ result.append('Email is required')
+ if not self.first_name.strip():
+ result.append('First name is required')
+ if not self.last_name.strip():
+ result.append('Last name is required')
+ if not self.student_id.strip():
+ result.append('Student ID is required')
+ if not any(x[0] == self.year for x in Member.YEARS):
+ result.append('A valid year is required')
+ if not self.phone.strip():
+ result.append('Phone number is required')
+
+ if not self.email.strip().endswith('@student.monash.edu'):
+ result.append('Email must be a Monash student email address')
+ if not re.match(r'^[0-9]{8}$', self.student_id.strip()):
+ result.append('Student ID must be an 8 digit number')
+ if not re.match(r'^[0-9+ ]+$', self.phone.strip()):
+ result.append('Phone number must contain only numbers and +')
+
+ return result
diff --git a/ssmembership/views.py b/ssmembership/views.py
index 573f8bb..8e198f8 100644
--- a/ssmembership/views.py
+++ b/ssmembership/views.py
@@ -16,7 +16,11 @@
from django.contrib.auth.decorators import login_required
-from django.shortcuts import render
+from django.conf import settings
+from django.db import transaction
+from django.http import HttpResponse
+from django.shortcuts import render, redirect
+from django.urls import reverse
from . import models
@@ -26,5 +30,28 @@ def index(request):
member = models.Member.objects.get(email=request.user.email)
except models.Member.DoesNotExist:
member = None
+ return render(request, 'ssmembership/index.html', {'member': member, 'years': models.Member.YEARS})
+
+ if request.method != 'POST':
+ return render(request, 'ssmembership/index.html', {'member': member, 'years': models.Member.YEARS})
+
+ # Update membership
+ member.student_id = request.POST['student_id']
+ member.first_name = request.POST['first_name']
+ member.last_name = request.POST['last_name']
+ member.phone = request.POST['phone']
+ member.year = int(request.POST['year'])
+ member.is_msa = True if request.POST['is_msa'] == '1' else '0'
+
+ errors = member.validation_problems()
+ if not member or len(errors) > 0:
+ return render(request, 'ssmembership/index.html', {
+ 'member': member,
+ 'years': models.Member.YEARS,
+ 'errors': errors
+ })
+
+ member.save()
+ return render(request, 'ssmembership/index.html', {'member': member, 'years': models.Member.YEARS})
return render(request, 'ssmembership/index.html', {'member': member})