society-self-service/ssmembership/models.py

77 lines
2.3 KiB
Python

# 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 <https://www.gnu.org/licenses/>.
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