Skip to content

Commit

Permalink
feat(core): added main Member model
Browse files Browse the repository at this point in the history
- also Gender, MemberStatus
- added signal to assign default status
  • Loading branch information
iarp committed Mar 13, 2022
1 parent b7faead commit 2b1b470
Show file tree
Hide file tree
Showing 14 changed files with 5,427 additions and 1,998 deletions.
2,872 changes: 2,872 additions & 0 deletions core/fixtures/test_fixtures.json

Large diffs are not rendered by default.

152 changes: 150 additions & 2 deletions core/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Generated by Django 4.0.3 on 2022-03-12 20:43
# Generated by Django 4.0.3 on 2022-03-13 16:02

import core.models
from django.conf import settings
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import phonenumber_field.modelfields
import positions.fields


Expand Down Expand Up @@ -173,6 +173,36 @@ class Migration(migrations.Migration):
"ordering": ["league", "weight"],
},
),
migrations.CreateModel(
name="Gender",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"old_sk_id",
models.PositiveIntegerField(
blank=True,
help_text="The old primary id for the entry",
null=True,
unique=True,
),
),
("inserted", models.DateTimeField(default=django.utils.timezone.now)),
("updated", models.DateTimeField(default=django.utils.timezone.now)),
("name", models.CharField(max_length=255)),
],
options={
"verbose_name": "Gender",
"verbose_name_plural": "Genders",
},
),
migrations.CreateModel(
name="League",
fields=[
Expand Down Expand Up @@ -219,6 +249,124 @@ class Migration(migrations.Migration):
"ordering": ["season", "weight"],
},
),
migrations.CreateModel(
name="Member",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"old_sk_id",
models.PositiveIntegerField(
blank=True,
help_text="The old primary id for the entry",
null=True,
unique=True,
),
),
("inserted", models.DateTimeField(default=django.utils.timezone.now)),
("updated", models.DateTimeField(default=django.utils.timezone.now)),
(
"hockey_canada_id",
models.PositiveBigIntegerField(
blank=True, help_text="HcID Value", null=True, unique=True
),
),
(
"hockey_canada_system_id",
models.CharField(
blank=True,
help_text="*_id value for api, not meant to be editable or seen by users. Backend only.",
max_length=255,
null=True,
unique=True,
),
),
("first_name", models.CharField(max_length=255)),
("last_name", models.CharField(max_length=255)),
("date_of_birth", models.DateField(null=True)),
("comments", models.TextField(blank=True)),
("address1", models.CharField(blank=True, max_length=255)),
("address2", models.CharField(blank=True, max_length=255)),
("city", models.CharField(blank=True, max_length=255)),
("province", models.CharField(blank=True, max_length=255)),
("postal_code", models.CharField(blank=True, max_length=10)),
(
"phone_home",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None
),
),
(
"phone_work",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None
),
),
(
"phone_cell",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None
),
),
(
"phone_fax",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None
),
),
("email", models.EmailField(blank=True, max_length=254)),
("sportsmanager_id", models.IntegerField(blank=True, null=True)),
],
options={
"verbose_name": "Member",
"verbose_name_plural": "Members",
},
),
migrations.CreateModel(
name="MemberStatus",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"old_sk_id",
models.PositiveIntegerField(
blank=True,
help_text="The old primary id for the entry",
null=True,
unique=True,
),
),
("inserted", models.DateTimeField(default=django.utils.timezone.now)),
("updated", models.DateTimeField(default=django.utils.timezone.now)),
("name", models.CharField(max_length=255)),
("weight", positions.fields.PositionField(default=-1)),
(
"default",
models.BooleanField(
blank=True, default=None, null=True, unique=True
),
),
],
options={
"verbose_name": "Member Status",
"verbose_name_plural": "Member Statuses",
"ordering": ["weight"],
},
),
migrations.CreateModel(
name="Season",
fields=[
Expand Down
97 changes: 96 additions & 1 deletion core/migrations/0002_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 4.0.3 on 2022-03-12 20:43
# Generated by Django 4.0.3 on 2022-03-13 16:02

from django.conf import settings
from django.db import migrations, models
Expand Down Expand Up @@ -49,6 +49,66 @@ class Migration(migrations.Migration):
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="memberstatus",
name="inserted_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_inserted",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="memberstatus",
name="updated_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_updated",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="member",
name="gender",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="core.gender"
),
),
migrations.AddField(
model_name="member",
name="inserted_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_inserted",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="member",
name="status",
field=models.ForeignKey(
blank=True,
on_delete=django.db.models.deletion.PROTECT,
to="core.memberstatus",
),
),
migrations.AddField(
model_name="member",
name="updated_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_updated",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="league",
name="inserted_by",
Expand Down Expand Up @@ -80,6 +140,28 @@ class Migration(migrations.Migration):
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="gender",
name="inserted_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_inserted",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="gender",
name="updated_by",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_updated",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="division",
name="inserted_by",
Expand Down Expand Up @@ -189,6 +271,13 @@ class Migration(migrations.Migration):
django.db.models.functions.text.Lower("name"), name="season_name_unique"
),
),
migrations.AddConstraint(
model_name="memberstatus",
constraint=models.UniqueConstraint(
django.db.models.functions.text.Lower("name"),
name="memberstatus_name_unique",
),
),
migrations.AddConstraint(
model_name="league",
constraint=models.UniqueConstraint(
Expand All @@ -197,6 +286,12 @@ class Migration(migrations.Migration):
name="season_league_name_unique",
),
),
migrations.AddConstraint(
model_name="gender",
constraint=models.UniqueConstraint(
django.db.models.functions.text.Lower("name"), name="gender_name_unique"
),
),
migrations.AddConstraint(
model_name="division",
constraint=models.UniqueConstraint(
Expand Down
72 changes: 72 additions & 0 deletions core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from django.utils.translation import gettext, gettext_lazy
from iarp_django_utils.models import BaseSetting
from loguru import logger
from phonenumber_field.modelfields import PhoneNumberField
from positions.fields import PositionField

from . import managers
Expand Down Expand Up @@ -243,3 +244,74 @@ class PermissionOverrides(_BasePermissions):

class Setting(BaseSetting):
pass


class Gender(_BaseModel):
class Meta:
verbose_name = gettext_lazy("Gender")
verbose_name_plural = gettext_lazy("Genders")
constraints = [
models.UniqueConstraint(Lower("name"), name="gender_name_unique"),
]

name = models.CharField(max_length=255)


class MemberStatus(_BaseModel):
class Meta:
verbose_name = gettext_lazy("Member Status")
verbose_name_plural = gettext_lazy("Member Statuses")
ordering = ["weight"]
constraints = [
models.UniqueConstraint(Lower("name"), name="memberstatus_name_unique"),
]

name = models.CharField(max_length=255)

weight = PositionField()

default = models.BooleanField(null=True, blank=True, default=None, unique=True)

def save(self, *args, **kwargs):
if self.default is False:
self.default = None
return super().save(*args, **kwargs)


class Member(_BaseModelWithCommonIDs):
# TODO: Do we need any UniqueContraint's?
# Previously was Person table.
class Meta:
verbose_name = gettext_lazy("Member")
verbose_name_plural = gettext_lazy("Members")

first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)

date_of_birth = models.DateField(null=True)

status = models.ForeignKey(MemberStatus, on_delete=models.PROTECT, blank=True)

comments = models.TextField(blank=True)

address1 = models.CharField(max_length=255, blank=True)
address2 = models.CharField(max_length=255, blank=True)
city = models.CharField(max_length=255, blank=True)
province = models.CharField(max_length=255, blank=True)
postal_code = models.CharField(max_length=10, blank=True)

phone_home = PhoneNumberField(blank=True)
phone_work = PhoneNumberField(blank=True)
phone_cell = PhoneNumberField(blank=True)
phone_fax = PhoneNumberField(blank=True)

email = models.EmailField(blank=True)

sportsmanager_id = models.IntegerField(null=True, blank=True)
gender = models.ForeignKey(Gender, on_delete=models.PROTECT)

def __str__(self):
return self.full_name()

def full_name(self):
return f"{self.first_name} {self.last_name}"

0 comments on commit 2b1b470

Please sign in to comment.