diff --git a/people/migrations/0049_relationship_latest_by_timestamp.py b/people/migrations/0049_relationship_latest_by_timestamp.py new file mode 100644 index 0000000..b2a2e0b --- /dev/null +++ b/people/migrations/0049_relationship_latest_by_timestamp.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.10 on 2021-03-19 10:50 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('people', '0048_disciplines_and_organisations'), + ] + + operations = [ + migrations.AlterModelOptions( + name='organisationanswerset', + options={'get_latest_by': 'timestamp', 'ordering': ['timestamp']}, + ), + migrations.AlterModelOptions( + name='organisationrelationship', + options={'get_latest_by': 'created'}, + ), + migrations.AlterModelOptions( + name='organisationrelationshipanswerset', + options={'get_latest_by': 'timestamp', 'ordering': ['timestamp']}, + ), + migrations.AlterModelOptions( + name='personanswerset', + options={'get_latest_by': 'timestamp', 'ordering': ['timestamp']}, + ), + migrations.AlterModelOptions( + name='relationship', + options={'get_latest_by': 'created'}, + ), + migrations.AlterModelOptions( + name='relationshipanswerset', + options={'get_latest_by': 'timestamp', 'ordering': ['timestamp']}, + ), + ] diff --git a/people/migrations/0050_relationship_remove_timestamps.py b/people/migrations/0050_relationship_remove_timestamps.py new file mode 100644 index 0000000..f8ded05 --- /dev/null +++ b/people/migrations/0050_relationship_remove_timestamps.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.10 on 2021-03-19 11:09 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('people', '0049_relationship_latest_by_timestamp'), + ] + + operations = [ + migrations.AlterModelOptions( + name='organisationrelationship', + options={}, + ), + migrations.RemoveField( + model_name='organisationrelationship', + name='created', + ), + migrations.RemoveField( + model_name='organisationrelationship', + name='expired', + ), + migrations.AlterModelOptions( + name='relationship', + options={}, + ), + migrations.RemoveField( + model_name='relationship', + name='created', + ), + migrations.RemoveField( + model_name='relationship', + name='expired', + ), + ] diff --git a/people/models/question.py b/people/models/question.py index b8df075..4a5fe1a 100644 --- a/people/models/question.py +++ b/people/models/question.py @@ -124,6 +124,7 @@ class AnswerSet(models.Model): ordering = [ 'timestamp', ] + get_latest_by = 'timestamp' #: Entity to which this answer set belongs #: This foreign key must be added to each concrete subclass @@ -145,6 +146,10 @@ class AnswerSet(models.Model): null=True, editable=False) + @property + def is_current(self) -> bool: + return self.replaced_timestamp is None + def as_dict(self, answers: typing.Optional[typing.Dict[str, typing.Any]] = None): """Get the answers from this set as a dictionary for use in Form.initial.""" if answers is None: diff --git a/people/models/relationship.py b/people/models/relationship.py index 8b41553..5123764 100644 --- a/people/models/relationship.py +++ b/people/models/relationship.py @@ -1,6 +1,6 @@ -""" -Models describing relationships between people. -""" +"""Models describing relationships between people.""" + +import typing from django.db import models from django.urls import reverse @@ -59,15 +59,17 @@ class Relationship(models.Model): blank=False, null=False) - #: When was this relationship defined? - created = models.DateTimeField(auto_now_add=True) + @property + def current_answers(self) -> typing.Optional['RelationshipAnswerSet']: + answer_set = self.answer_sets.latest() + if answer_set.is_current: + return answer_set - #: When was this marked as expired? Default None means it has not expired - expired = models.DateTimeField(blank=True, null=True) + return None @property - def current_answers(self) -> 'RelationshipAnswerSet': - return self.answer_sets.last() + def is_current(self) -> bool: + return self.current_answers is not None def get_absolute_url(self): return reverse('people:relationship.detail', kwargs={'pk': self.pk}) @@ -141,15 +143,17 @@ class OrganisationRelationship(models.Model): blank=False, null=False) - #: When was this relationship defined? - created = models.DateTimeField(auto_now_add=True) + @property + def current_answers(self) -> typing.Optional['OrganisationRelationshipAnswerSet']: + answer_set = self.answer_sets.latest() + if answer_set.is_current: + return answer_set - #: When was this marked as expired? Default None means it has not expired - expired = models.DateTimeField(blank=True, null=True) + return None @property - def current_answers(self) -> 'OrganisationRelationshipAnswerSet': - return self.answer_sets.last() + def is_current(self) -> bool: + return self.current_answers is not None def get_absolute_url(self): return reverse('people:organisation.relationship.detail', diff --git a/people/templates/people/person/detail_full.html b/people/templates/people/person/detail_full.html index 39651b0..494e610 100644 --- a/people/templates/people/person/detail_full.html +++ b/people/templates/people/person/detail_full.html @@ -37,6 +37,14 @@ {% endif %} + + {% if relationship %} +
+ {% endif %}