Archived
Cleaned up models alot
This commit is contained in:
1 parent
b64bf4fdd0
commit
29d40fe189
2 files changed
+69
-107
No files matched your search
@@ -9,3 +9,8 @@ Installation
|
||||
* . venv/bin/activate
|
||||
* pip install -r requirements.txt
|
||||
|
||||
Database Diagram Generation
|
||||
===========================
|
||||
* sudo apt-get install graphviz libgraphviz-dev
|
||||
* pip install pygraphviz django-extensions
|
||||
* python manage.py graph_models -o diagramfile.png main
|
||||
+64
-107
@@ -1,137 +1,94 @@
|
||||
# FIXME
|
||||
# - Reduce the database more?
|
||||
# - ExpiresformanytomanymembershipDuration
|
||||
# - Institution
|
||||
# - Member has place of study?
|
||||
# - Subgroups
|
||||
# - Positions
|
||||
# - Only one type of adress? YES
|
||||
# - ExtendedMemberdetail?
|
||||
# - Legacy_id as extended member detail?
|
||||
|
||||
# TODO
|
||||
# - autofields created, updated
|
||||
|
||||
from django.db import models
|
||||
|
||||
class Country(models.Model):
|
||||
country_id = models.IntegerField(primary_key=True)
|
||||
name = models.CharField(max_length=50, unique=True)
|
||||
class Meta:
|
||||
db_table = u'country'
|
||||
|
||||
class Address(models.Model):
|
||||
address_id = models.IntegerField(primary_key=True)
|
||||
addressline1 = models.CharField(max_length=255)
|
||||
addressline2 = models.CharField(max_length=255)
|
||||
placename = models.CharField(max_length=100)
|
||||
country_id = models.ForeignKey(Country, db_column='country_id')
|
||||
postalcode = models.CharField(max_length=10)
|
||||
class Meta:
|
||||
db_table = u'address'
|
||||
street_address = models.CharField(max_length=255)
|
||||
city = models.CharField(max_length=100)
|
||||
country = models.ForeignKey(Country)
|
||||
postal_code = models.CharField(max_length=10)
|
||||
|
||||
class Institution(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
|
||||
class PlaceOfStudy(models.Model):
|
||||
from_date = models.DateField()
|
||||
institution = models.ForeignKey(Institution)
|
||||
|
||||
class Member(models.Model):
|
||||
member_id = models.IntegerField(primary_key=True)
|
||||
email = models.CharField(max_length=150, unique=True)
|
||||
username = models.CharField(max_length=40, unique=True)
|
||||
phonenumber = models.IntegerField(unique=True, null=True, blank=True)
|
||||
givenname = models.CharField(max_length=200, blank=True)
|
||||
dateofbirth = models.DateField(null=True, blank=True)
|
||||
surname = models.CharField(max_length=200, blank=True)
|
||||
address_id = models.ForeignKey(Address, null=True, db_column='address_id', blank=True)
|
||||
class Meta:
|
||||
db_table = u'member'
|
||||
password = models.CharField(max_length=255)
|
||||
username = models.CharField(max_length=40, unique=True, null=True, blank=True)
|
||||
phone_number = models.IntegerField(unique=True, null=True, blank=True)
|
||||
first_name = models.CharField(max_length=200, blank=True, null=True)
|
||||
last_name= models.CharField(max_length=200, blank=True, null=True)
|
||||
date_of_birth = models.DateField(blank=True, null=True)
|
||||
legacy_id = models.IntegerField(unique=True, null=True, blank=True)
|
||||
address = models.ForeignKey(Address, null=True, blank=True)
|
||||
place_of_study = models.ManyToManyField(PlaceOfStudy, null=True, blank=True)
|
||||
|
||||
class FacebookAuth(models.Model):
|
||||
token = models.CharField(max_length=255, unique=True, null=True, blank=True)
|
||||
token_expires = models.DateTimeField(null=True, blank=True)
|
||||
member = models.OneToOneField(Member, null=True, blank=True)
|
||||
|
||||
class GoogleAuth(models.Model):
|
||||
token = models.CharField(max_length=255, unique=True, null=True, blank=True)
|
||||
token_expires = models.DateTimeField(null=True, blank=True)
|
||||
member = models.OneToOneField(Member, null=True, blank=True)
|
||||
|
||||
class ExtendedMemberDetail(models.Model):
|
||||
member_id = models.ForeignKey(Member, primary_key=True, db_column='member_id')
|
||||
class Meta:
|
||||
db_table = u'extended_member_details'
|
||||
pass
|
||||
|
||||
class PaymentForMembership(models.Model):
|
||||
payment_for_membership_id = models.IntegerField(primary_key=True)
|
||||
# Note: More like tokens?
|
||||
sms_payment_id = models.IntegerField(unique=True, null=True, blank=True)
|
||||
webshop_payment_id = models.IntegerField(unique=True, null=True, blank=True)
|
||||
voucher_id = models.IntegerField(unique=True, null=True, blank=True)
|
||||
class Meta:
|
||||
db_table = u'payment_for_membership'
|
||||
|
||||
class MembershipDuration(models.Model):
|
||||
membership_duration_id = models.IntegerField(primary_key=True)
|
||||
'''
|
||||
TODO: should validate end_day_of_month and end_month (use datetime exceptions)
|
||||
'''
|
||||
class MembershipType(models.Model):
|
||||
name = models.CharField(max_length=50, unique=True)
|
||||
minimum_duration = models.CharField(max_length=30)
|
||||
class Meta:
|
||||
db_table = u'membership_duration'
|
||||
duration_months = models.IntegerField(default=12)
|
||||
end_day_of_month = models.IntegerField(default=31)
|
||||
end_month = models.IntegerField(default=7)
|
||||
|
||||
def end_date(self):
|
||||
import datetime
|
||||
now = datetime.datetime.now()
|
||||
year = now.year + (now.month - 1 + self.duration_months) / 12
|
||||
month = (now.month - 1 + self.duration_months) % 12 + 1
|
||||
|
||||
end1 = datetime.datetime(year, month, now.day, 0, 0, 0)
|
||||
end2 = None
|
||||
# closest date which fullfills the day, month and duration specified
|
||||
if now.month < self.end_month or (now.month == self.end_month and now.day < self.end_day_of_month):
|
||||
end2 = datetime.datetime(now.year, self.end_month, self.end_day_of_month)
|
||||
else:
|
||||
end2 = datetime.datetime(now.year+1, self.end_month, self.end_day_of_month)
|
||||
|
||||
return min(end1, end2)
|
||||
|
||||
class Membership(models.Model):
|
||||
membership_id = models.IntegerField(primary_key=True)
|
||||
start_date = models.DateField()
|
||||
member_id = models.ForeignKey(Member, db_column='member_id')
|
||||
membership_duration_id = models.ForeignKey(MembershipDuration, db_column='membership_duration_id')
|
||||
payment_for_membership_id = models.ForeignKey(PaymentForMembership, unique=True, null=True, db_column='payment_for_membership_id', blank=True)
|
||||
class Meta:
|
||||
db_table = u'membership'
|
||||
mtype = models.ForeignKey(MembershipType, db_column='type')
|
||||
payment = models.ForeignKey(PaymentForMembership, unique=True, null=True, blank=True)
|
||||
member = models.ForeignKey(Member)
|
||||
|
||||
def expires(self):
|
||||
return self.mtype.end_date()
|
||||
|
||||
class Group(models.Model):
|
||||
group_id = models.IntegerField(primary_key=True)
|
||||
name = models.CharField(max_length=50, unique=True)
|
||||
class Meta:
|
||||
db_table = u'group'
|
||||
|
||||
class Expires(models.Model):
|
||||
expires_id = models.IntegerField(primary_key=True)
|
||||
monthofyear = models.IntegerField()
|
||||
dayofmonth = models.IntegerField()
|
||||
class Meta:
|
||||
db_table = u'expires'
|
||||
|
||||
class ExpiresformanytomanymembershipDuration(models.Model):
|
||||
expires_id = models.ForeignKey(Expires, db_column='expires_id')
|
||||
membership_duration_id = models.ForeignKey(MembershipDuration, db_column='membership_duration_id')
|
||||
class Meta:
|
||||
db_table = u'expiresformanytomanymembership_duration'
|
||||
|
||||
class Legacy(models.Model):
|
||||
legacy_id = models.IntegerField(primary_key=True)
|
||||
member_id = models.ForeignKey(Member, unique=True, null=True, db_column='member_id', blank=True)
|
||||
class Meta:
|
||||
db_table = u'legacy'
|
||||
|
||||
class Institution(models.Model):
|
||||
institution_name = models.CharField(max_length=255, primary_key=True)
|
||||
class Meta:
|
||||
db_table = u'institution'
|
||||
|
||||
class Subgroup(models.Model):
|
||||
subgroup_id = models.IntegerField(primary_key=True)
|
||||
name = models.CharField(max_length=50)
|
||||
group_id = models.ForeignKey(Group, db_column='group_id')
|
||||
class Meta:
|
||||
db_table = u'subgroup'
|
||||
posix_name = models.CharField(max_length=255, unique=True)
|
||||
|
||||
class GroupMembership(models.Model):
|
||||
group_membership_id = models.IntegerField(primary_key=True)
|
||||
start_date = models.DateField()
|
||||
member_id = models.ForeignKey(Member, db_column='member_id')
|
||||
group_id = models.ForeignKey(Group, db_column='group_id')
|
||||
membership_duration_id = models.ForeignKey(MembershipDuration, db_column='membership_duration_id')
|
||||
|
||||
class Position(models.Model):
|
||||
position_id = models.IntegerField(primary_key=True)
|
||||
name = models.CharField(max_length=50)
|
||||
subgroup_id = models.ForeignKey(Subgroup, db_column='subgroup_id')
|
||||
is_static = models.NullBooleanField(null=True, blank=True)
|
||||
class Meta:
|
||||
db_table = u'position'
|
||||
|
||||
class PlaceOfStudy(models.Model):
|
||||
place_of_study_id = models.IntegerField(primary_key=True)
|
||||
from_date = models.DateField()
|
||||
institution_name = models.ForeignKey(Institution, db_column='institution_name')
|
||||
class Meta:
|
||||
db_table = u'place_of_study'
|
||||
|
||||
class MemberhasplaceOfStudy(models.Model):
|
||||
member_id = models.ForeignKey(Member, db_column='member_id')
|
||||
place_of_study_id = models.ForeignKey(PlaceOfStudy, db_column='place_of_study_id')
|
||||
class Meta:
|
||||
db_table = u'membershasplace_of_study'
|
||||
member = models.ForeignKey(Member)
|
||||
group = models.ForeignKey(Group)
|
||||
Reference in new issue
Block a user