diff --git a/busManager/coord/admin.py b/busManager/coord/admin.py index 96c881a..3ddcf2c 100644 --- a/busManager/coord/admin.py +++ b/busManager/coord/admin.py @@ -162,6 +162,12 @@ class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin): list_filter = ["state"] +class FamilyInline(admin.StackedInline): + model = Family + classes = ['collapse'] + extra = 0 + + class TravellerRouteInline(admin.TabularInline): model = TravellerRoute extra = 0 @@ -169,7 +175,7 @@ class TravellerRouteInline(admin.TabularInline): @admin.register(Traveller) class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin): - list_display = ["first_name", "last_name", "school", "year_level", "is_active", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"] + list_display = ["first_name", "last_name", "school", "year_level", "is_active", "address", "stop_route", "shuttle", "travel_start_date", "travel_end_date"] list_filter = [ "is_active", "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb", ("travel_start_date", DateRangeFilterBuilder( @@ -187,7 +193,7 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin "emergency_contact_A_firstname", "emergency_contact_A_lastname", "emergency_contact_A_phone", "emergency_contact_A_relation", "emergency_contact_B_firstname", "emergency_contact_B_lastname", "emergency_contact_B_phone", "emergency_contact_B_relation"] - inlines = [TravellerRouteInline] + inlines = [FamilyInline, TravellerRouteInline] readonly_fields = ["travel_start_date", "travel_end_date", "fare_paying", "created_on", "last_edit", "is_active"] actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator"] fieldsets = [ @@ -255,9 +261,6 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin ] # list_display_links = None - def yearly_rollover(self, request, queryset): - pass - def stop_route(self, obj): stops = BusStop.objects.filter(traveller__id__exact=obj.id) if stops.count() == 0: @@ -266,10 +269,19 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin return stops.first() return "Multiple" - def save_model(self, request, obj, form, change): - if obj.is_archived and obj.travel_end_date is None: - obj.is_archived = False - super().save_model(request, obj, form, change) + def address(self, obj): + families = Family.objects.filter(traveller__id__exact=obj.id) + if families.count() == 0: + return "" + if families.count() == 1: + family = families.first() + return f"{family.residential_address} {family.residential_suburb}" + return "Multiple" + + # def save_model(self, request, obj, form, change): + # if obj.is_archived and obj.travel_end_date is None: + # obj.is_archived = False + # super().save_model(request, obj, form, change) # @admin.register(TravellerRoute) diff --git a/busManager/coord/models.py b/busManager/coord/models.py index ef0e08d..f99254c 100644 --- a/busManager/coord/models.py +++ b/busManager/coord/models.py @@ -294,26 +294,80 @@ class Traveller(models.Model): stops = 1 return f"${str(cost * stops)}" - def send_sms(self, message, parents=False, emergency=False): - numbers = [] - if parents and self.parent_A_phone: - numbers.append(self.parent_A_phone) - if parents and self.parent_B_phone: - numbers.append(self.parent_B_phone) - if emergency and self.emergency_contact_A_phone: - numbers.append(self.emergency_contact_A_phone) - if emergency and self.emergency_contact_B_phone: - numbers.append(self.emergency_contact_B_phone) - count = 0 + def get_parsed_numbers(self, parents=False, emergency=False): + return [] # Moved to family model. To remove from traveller model + + +class Family(models.Model): + RELATIONS = [ + ("1", "Parent"), + ("2", "Step-Parent"), + ("3", "Foster Parent"), + ("4", "Host Family"), + ("5", "Sibling"), + ("6", "Grandparent"), + ("7", "Aunt/Uncle"), + ("8", "Cousin"), + ("9", "Carer"), + ("10", "Case Worker"), + ("11", "Friend/Other"), + ] + + traveller = models.ForeignKey(Traveller, on_delete=models.CASCADE) + residential_address = models.CharField(max_length=50, blank=True) + residential_suburb = models.ForeignKey(Suburb, on_delete=models.PROTECT, blank=True, null=True, + related_name='family_residential_suburb') + postal_address = models.CharField(max_length=50, blank=True) + postal_suburb = models.ForeignKey(Suburb, on_delete=models.PROTECT, blank=True, null=True, + related_name='family_postal_suburb') + parent_A_firstname = models.CharField(max_length=50, blank=True) + parent_A_lastname = models.CharField(max_length=50, blank=True) + parent_A_phone = models.CharField(max_length=15, blank=True) + parent_A_email = models.CharField(max_length=50, blank=True) + parent_B_firstname = models.CharField(max_length=50, blank=True) + parent_B_lastname = models.CharField(max_length=50, blank=True) + parent_B_phone = models.CharField(max_length=15, blank=True) + parent_B_email = models.CharField(max_length=50, blank=True) + emergency_contact_A_firstname = models.CharField(max_length=50, blank=True) + emergency_contact_A_lastname = models.CharField(max_length=50, blank=True) + emergency_contact_A_phone = models.CharField(max_length=15, blank=True) + emergency_contact_A_relation = models.CharField(max_length=50, choices=RELATIONS, blank=True) + emergency_contact_B_firstname = models.CharField(max_length=50, blank=True) + emergency_contact_B_lastname = models.CharField(max_length=50, blank=True) + emergency_contact_B_phone = models.CharField(max_length=15, blank=True) + emergency_contact_B_relation = models.CharField(max_length=50, choices=RELATIONS, blank=True) + + def parent_names(self): + a_name = self.parent_A_firstname + b_name = self.parent_B_firstname + if a_name: + if b_name: + return f"{a_name} and {b_name}" + return a_name + elif b_name: + return b_name + return None + + def get_parsed_numbers(self, parents=False, emergency=False): + numbers = [] + if parents: + if self.parent_A_phone: + numbers.append(self.parent_A_phone) + if self.parent_B_phone: + numbers.append(self.parent_B_phone) + if emergency: + if self.emergency_contact_A_phone: + numbers.append(self.emergency_contact_A_phone) + if self.emergency_contact_B_phone: + numbers.append(self.emergency_contact_B_phone) + + valid_numbers = [] for number in numbers: num = phonenumbers.parse(number, "AU") if phonenumbers.is_valid_number(num): - count += 1 - # num = f"+{num.country_code}{num.national_number}" - # client = Client(settings.TWILIO['ACCOUNT_SID'], settings.TWILIO['AUTH_TOKEN']) - # client.messages.create(num, from_=settings.TWILIO['SENDER'], body=message) - return count + valid_numbers.append(num.national_number) + return valid_numbers class TravellerRoute(models.Model):