Added signal for traveller updates

Added contact emails to family inline
This commit is contained in:
st01765
2026-03-10 14:44:28 +11:00
parent 8640d178bf
commit 4f5842f21f
4 changed files with 73 additions and 28 deletions
+23 -28
View File
@@ -86,11 +86,6 @@ class Traveller(models.Model):
def __str__(self):
return f"{self.first_name} {self.last_name}"
def save(self, *args, **kwargs):
self._update_active_status()
self._repopulate_address()
super(Traveller, self).save(*args, **kwargs)
def _is_active(self, date=None):
if date is None:
today = datetime.today()
@@ -104,22 +99,23 @@ class Traveller(models.Model):
end_date = datetime(self.travel_end_date.year, self.travel_end_date.month, self.travel_end_date.day)
return end_date >= date
def _update_active_status(self):
new_start_date = None
new_end_date = None
def recalculate_travel_dates(self):
routes = TravellerRoute.objects.filter(traveller=self)
for travellerRoute in TravellerRoute.objects.filter(traveller=self.id):
route_start = travellerRoute.travel_start_date
route_end = travellerRoute.travel_end_date
if route_start is not None:
if new_start_date is None or new_start_date > route_start:
new_start_date = route_start
if route_end is not None:
if new_end_date is None or new_end_date < route_end:
new_end_date = route_end
new_start = None
new_end = None
self.travel_start_date = new_start_date
self.travel_end_date = new_end_date
for route in routes:
if route.travel_start_date:
if new_start is None or route.travel_start_date < new_start:
new_start = route.travel_start_date
if route.travel_end_date:
if new_end is None or route.travel_end_date > new_end:
new_end = route.travel_end_date
self.travel_start_date = new_start
self.travel_end_date = new_end
self.is_active = self._is_active()
def fare_paying(self):
@@ -139,15 +135,14 @@ class Traveller(models.Model):
stops = 1
return f"${round(cost*stops)}"
def _repopulate_address(self):
families = self.get_families()
if families.count() == 0:
self.address = ""
elif families.count() == 1:
family = families.first()
self.address = f"{family.residential_address} {family.residential_suburb}"
else:
self.address = "Multiple"
def update_address_from_families(self):
addresses = {
str(f.location)
for f in self.get_families()
if f.location
}
self.address = " | ".join(sorted(addresses)) if addresses else ""
def get_families(self):
return Family.objects.filter(traveller__id__exact=self.id)