# Society Self-Service # Copyright © 2018-2019 Yingtong Li (RunasSudo) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from django.db import models import re class Member(models.Model): email = models.CharField(max_length=100) first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) student_id = models.CharField(max_length=8) is_msa = models.BooleanField() 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() class Meta: ordering = ['id'] def __str__(self): return self.first_name + ' ' + self.last_name 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