Adding Family Model
This commit is contained in:
@@ -162,6 +162,12 @@ class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
|||||||
list_filter = ["state"]
|
list_filter = ["state"]
|
||||||
|
|
||||||
|
|
||||||
|
class FamilyInline(admin.StackedInline):
|
||||||
|
model = Family
|
||||||
|
classes = ['collapse']
|
||||||
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
class TravellerRouteInline(admin.TabularInline):
|
class TravellerRouteInline(admin.TabularInline):
|
||||||
model = TravellerRoute
|
model = TravellerRoute
|
||||||
extra = 0
|
extra = 0
|
||||||
@@ -169,7 +175,7 @@ class TravellerRouteInline(admin.TabularInline):
|
|||||||
|
|
||||||
@admin.register(Traveller)
|
@admin.register(Traveller)
|
||||||
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin):
|
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 = [
|
list_filter = [
|
||||||
"is_active", "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb",
|
"is_active", "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb",
|
||||||
("travel_start_date", DateRangeFilterBuilder(
|
("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_firstname", "emergency_contact_A_lastname", "emergency_contact_A_phone",
|
||||||
"emergency_contact_A_relation", "emergency_contact_B_firstname", "emergency_contact_B_lastname",
|
"emergency_contact_A_relation", "emergency_contact_B_firstname", "emergency_contact_B_lastname",
|
||||||
"emergency_contact_B_phone", "emergency_contact_B_relation"]
|
"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"]
|
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"]
|
actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator"]
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
@@ -255,9 +261,6 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin
|
|||||||
]
|
]
|
||||||
# list_display_links = None
|
# list_display_links = None
|
||||||
|
|
||||||
def yearly_rollover(self, request, queryset):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def stop_route(self, obj):
|
def stop_route(self, obj):
|
||||||
stops = BusStop.objects.filter(traveller__id__exact=obj.id)
|
stops = BusStop.objects.filter(traveller__id__exact=obj.id)
|
||||||
if stops.count() == 0:
|
if stops.count() == 0:
|
||||||
@@ -266,10 +269,19 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin
|
|||||||
return stops.first()
|
return stops.first()
|
||||||
return "Multiple"
|
return "Multiple"
|
||||||
|
|
||||||
def save_model(self, request, obj, form, change):
|
def address(self, obj):
|
||||||
if obj.is_archived and obj.travel_end_date is None:
|
families = Family.objects.filter(traveller__id__exact=obj.id)
|
||||||
obj.is_archived = False
|
if families.count() == 0:
|
||||||
super().save_model(request, obj, form, change)
|
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)
|
# @admin.register(TravellerRoute)
|
||||||
|
|||||||
+65
-11
@@ -294,26 +294,80 @@ class Traveller(models.Model):
|
|||||||
stops = 1
|
stops = 1
|
||||||
return f"${str(cost * stops)}"
|
return f"${str(cost * stops)}"
|
||||||
|
|
||||||
def send_sms(self, message, parents=False, emergency=False):
|
|
||||||
|
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 = []
|
numbers = []
|
||||||
if parents and self.parent_A_phone:
|
if parents:
|
||||||
|
if self.parent_A_phone:
|
||||||
numbers.append(self.parent_A_phone)
|
numbers.append(self.parent_A_phone)
|
||||||
if parents and self.parent_B_phone:
|
if self.parent_B_phone:
|
||||||
numbers.append(self.parent_B_phone)
|
numbers.append(self.parent_B_phone)
|
||||||
if emergency and self.emergency_contact_A_phone:
|
if emergency:
|
||||||
|
if self.emergency_contact_A_phone:
|
||||||
numbers.append(self.emergency_contact_A_phone)
|
numbers.append(self.emergency_contact_A_phone)
|
||||||
if emergency and self.emergency_contact_B_phone:
|
if self.emergency_contact_B_phone:
|
||||||
numbers.append(self.emergency_contact_B_phone)
|
numbers.append(self.emergency_contact_B_phone)
|
||||||
|
|
||||||
count = 0
|
valid_numbers = []
|
||||||
for number in numbers:
|
for number in numbers:
|
||||||
num = phonenumbers.parse(number, "AU")
|
num = phonenumbers.parse(number, "AU")
|
||||||
if phonenumbers.is_valid_number(num):
|
if phonenumbers.is_valid_number(num):
|
||||||
count += 1
|
valid_numbers.append(num.national_number)
|
||||||
# num = f"+{num.country_code}{num.national_number}"
|
return valid_numbers
|
||||||
# client = Client(settings.TWILIO['ACCOUNT_SID'], settings.TWILIO['AUTH_TOKEN'])
|
|
||||||
# client.messages.create(num, from_=settings.TWILIO['SENDER'], body=message)
|
|
||||||
return count
|
|
||||||
|
|
||||||
|
|
||||||
class TravellerRoute(models.Model):
|
class TravellerRoute(models.Model):
|
||||||
|
|||||||
Reference in New Issue
Block a user