feat: store and update last_visit in person model

This commit is contained in:
relikd
2023-06-08 13:26:46 +02:00
parent 06a09bafd9
commit cb13906c8a
5 changed files with 141 additions and 28 deletions

View File

@@ -33,3 +33,39 @@ class CourseVisit(models.Model):
def get_absolute_url(self):
return reverse('course-visit:detail', kwargs={'pk': self.pk})
def save(self, *args, **kwargs):
# update last_visit time of all involved persons
old_date: 'date|None' = None
old_list: 'list[Person]' = []
if self.pk:
prev = CourseVisit.objects.get(pk=self.pk)
old_date = prev.date
old_list.append(prev.participant)
if prev.teacher:
old_list.append(prev.teacher)
rv = super().save(*args, **kwargs)
new_date = self.date
new_list: 'list[Person]' = [self.participant]
if self.teacher:
new_list.append(self.teacher)
for person in old_list:
if person not in new_list:
person.update_last_visit(None)
for person in new_list:
if person not in old_list or old_date != new_date:
person.update_last_visit(new_date)
return rv
def delete(self, *args, **kwargs):
rv = super().delete(*args, **kwargs)
# update last_visit time of all involved persons
self.participant.update_last_visit(None)
if self.teacher:
self.teacher.update_last_visit(None)
return rv