Skip to content

Commit

Permalink
feat(team): move signals into model saves
Browse files Browse the repository at this point in the history
  • Loading branch information
iarp committed Mar 13, 2022
1 parent eda9ebf commit 77f6ed5
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 129 deletions.
16 changes: 8 additions & 8 deletions core/fixtures/test_fixtures.json
Original file line number Diff line number Diff line change
Expand Up @@ -2786,9 +2786,9 @@
"pk": 1,
"fields": {
"old_sk_id": null,
"inserted": "2022-03-13T16:40:06.028Z",
"inserted": "2022-01-01T05:00:00Z",
"inserted_by": null,
"updated": "2022-03-13T16:40:06.028Z",
"updated": "2022-01-01T05:00:00Z",
"updated_by": null,
"name": "Male"
}
Expand All @@ -2798,9 +2798,9 @@
"pk": 2,
"fields": {
"old_sk_id": null,
"inserted": "2022-03-13T16:40:06.031Z",
"inserted": "2022-01-01T05:00:00Z",
"inserted_by": null,
"updated": "2022-03-13T16:40:06.031Z",
"updated": "2022-01-01T05:00:00Z",
"updated_by": null,
"name": "Female"
}
Expand All @@ -2810,9 +2810,9 @@
"pk": 1,
"fields": {
"old_sk_id": null,
"inserted": "2022-03-13T16:40:06.033Z",
"inserted": "2022-01-01T05:00:00Z",
"inserted_by": null,
"updated": "2022-03-13T16:40:06.033Z",
"updated": "2022-01-01T05:00:00Z",
"updated_by": null,
"name": "Approved",
"weight": 0,
Expand All @@ -2824,9 +2824,9 @@
"pk": 2,
"fields": {
"old_sk_id": null,
"inserted": "2022-03-13T16:40:06.037Z",
"inserted": "2022-01-01T05:00:00Z",
"inserted_by": null,
"updated": "2022-03-13T16:40:06.037Z",
"updated": "2022-01-01T05:00:00Z",
"updated_by": null,
"name": "Denied",
"weight": 1,
Expand Down
24 changes: 20 additions & 4 deletions generate_test_fixture_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,12 +337,28 @@
)

GENDERS = {
"male": Gender.objects.create(name="Male"),
"female": Gender.objects.create(name="Female"),
"male": Gender.objects.create(
name="Male",
inserted=timestamp,
updated=timestamp,
),
"female": Gender.objects.create(
name="Female",
inserted=timestamp,
updated=timestamp,
),
}
MEMBER_STATUS = {
"approved": MemberStatus.objects.create(name="Approved"),
"denied": MemberStatus.objects.create(name="Denied"),
"approved": MemberStatus.objects.create(
name="Approved",
inserted=timestamp,
updated=timestamp,
),
"denied": MemberStatus.objects.create(
name="Denied",
inserted=timestamp,
updated=timestamp,
),
}


Expand Down
4 changes: 2 additions & 2 deletions team/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ class TeamConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "team"

def ready(self) -> None:
from . import signals # noqa
# def ready(self) -> None:
# from . import signals # noqa
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@
class Migration(migrations.Migration):

dependencies = [
('team', '0001_initial'),
("team", "0001_initial"),
]

operations = [
migrations.AddConstraint(
model_name='teamstatusreason',
constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), django.db.models.expressions.F('status'), name='teamstatusreason_name_status_uniqueness'),
model_name="teamstatusreason",
constraint=models.UniqueConstraint(
django.db.models.functions.text.Lower("name"),
django.db.models.expressions.F("status"),
name="teamstatusreason_name_status_uniqueness",
),
),
]
79 changes: 79 additions & 0 deletions team/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,46 @@ def can_vote(self, target_user):
def is_approved(self):
return self.hockey_canada_id and self.status.considered_approved

def save(self, *args, **kwargs):

# Reset status_reason on status change.
if self.pk:
original_instance = Team.objects.get(pk=self.pk)

if self.status_id != original_instance.status_id:

if any([self.staff_has_changed_flag, self.players_has_changed_flag]):

if self.status.clear_changed_staff_players_flag:
self.players_has_changed_flag = False
self.staff_has_changed_flag = False

# status has changed, now we need to ensure the
# status_reason is a reason of the newly assigned status.
if not self.status.reasons.filter(pk=self.status_reason.pk).exists():
self.status_reason = None

if (self.status_id != original_instance.status_id) or (
self.status_reason_id != original_instance.status_reason_id
):
TeamStatusLog.objects.create(
team=self,
old_status=original_instance.status,
old_status_reason=original_instance.status_reason,
new_status=self.status,
new_status_reason=self.status_reason,
)

# On new objects or those without a status_reason,
# assign the default reason for the specific status.
if not self.status_reason_id or (not self.status_reason_id and not self.pk):
try:
self.status_reason = self.status.reasons.get(default=True)
except TeamStatusReason.DoesNotExist:
self.status_reason = None

return super().save(*args, **kwargs)


class TeamStatus(_BaseModel):
class Meta:
Expand Down Expand Up @@ -303,3 +343,42 @@ def permissions_add_override(self, obj, permission_name, value, assigned_by=None
return add_override_permission(
self, obj, permission_name, value, assigned_by=assigned_by
)

def save(self, *args, **kwargs):

if not self.pk:
if self.team_id:
if not all(
[
self.season_id,
self.league_id,
self.division_id,
self.subdivision_id,
]
):
self.season = self.team.season
self.league = self.team.league
self.division = self.team.division
self.subdivision = self.team.subdivision

elif self.subdivision_id:
if not all([self.season_id, self.league_id, self.division_id]):
self.season = self.subdivision.season
self.league = self.subdivision.league
self.division = self.subdivision.division

elif self.division_id:
if not all([self.season_id, self.league_id]):
self.season = self.division.season
self.league = self.division.league

elif self.league_id:
if not self.season_id:
self.season = self.league.season

# TODO: Add same same to Player model whenever that is in place.
if self.team_id and self.type.change_causes_staff_flag_on_team_to_enable:
self.team.staff_has_changed_flag = True
self.team.save()

return super().save(*args, **kwargs)
112 changes: 0 additions & 112 deletions team/signals.py

This file was deleted.

0 comments on commit 77f6ed5

Please sign in to comment.