feat: store and update last_visit in person model
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user