diff --git a/busManager/coord/admin.py b/busManager/coord/admin.py index 165749b..7696730 100644 --- a/busManager/coord/admin.py +++ b/busManager/coord/admin.py @@ -13,12 +13,14 @@ from django.utils.translation import gettext_lazy from import_export.admin import ImportExportModelAdmin from rangefilter.filters import DateRangeFilterBuilder +from mail_templates.admin import TemplateMixin from .adminClone import CloneModelAdmin from .context_helpers import bus_roll_context, emergency_contacts_context, traveller_roll_context, \ traveller_route_context, school_roll_context, confirmation_letter_context from .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll from .form import SMSForm from .models import * +from .utils.send_sms import send_sms class BusRollMixin: @@ -80,28 +82,7 @@ class TravellerRollMixin: return render_to_pdf('mail/confirmation_letter.html', confirmation_letter_context(queryset)) def send_sms(self, request, queryset): - if 'send' in request.POST: - message = request.POST["message"] - send_to_parents = False - if request.POST.get("send_to_parents"): - send_to_parents = True - send_to_emergency_contacts = False - if request.POST.get("send_to_emergency_contacts"): - send_to_emergency_contacts = True - only_include_active_travellers = False - if request.POST.get("only_include_active_travellers"): - only_include_active_travellers = True - total = 0 - for traveller in queryset: - if only_include_active_travellers and not traveller.is_active(): - continue - total += traveller.send_sms(message, parents=send_to_parents, emergency=send_to_emergency_contacts) - self.message_user(request, f"SMS has been sent to {total} recipients") - return HttpResponseRedirect(request.get_full_path()) - - form = SMSForm(initial={'_selected_action': queryset.values_list('id', flat=True)}) - - return render(request, 'admin/sms_form.html', context={'form': form, 'items': queryset}) + return send_sms(self, request, queryset) def export_to_csv(self, request, queryset): traveller_list = traveller_roll_context(queryset) @@ -212,7 +193,7 @@ class TravellerRouteInline(admin.TabularInline): @admin.register(Traveller) -class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin): +class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin, TemplateMixin): list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"] list_filter = [ "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb", @@ -234,7 +215,7 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin "emergency_contact_B_phone", "emergency_contact_B_relation"] inlines = [TravellerRouteInline] readonly_fields = ["fare_paying", "created_on", "last_edit", "is_archived"] - actions = ["export_to_csv", "send_sms", "confirmation_letter", "yearly_rollover"] + actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator", "yearly_rollover"] fieldsets = [ (None, { 'fields': [ diff --git a/busManager/coord/form.py b/busManager/coord/form.py deleted file mode 100644 index e251765..0000000 --- a/busManager/coord/form.py +++ /dev/null @@ -1,9 +0,0 @@ -from django import forms - - -class SMSForm(forms.Form): - _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) - send_to_parents = forms.BooleanField(required=False) - send_to_emergency_contacts = forms.BooleanField(required=False) - only_include_active_travellers = forms.BooleanField(initial=True, required=False) - message = forms.CharField(label="Message", max_length=320, widget=forms.Textarea) diff --git a/busManager/coord/utils/send_sms.py b/busManager/coord/utils/send_sms.py new file mode 100644 index 0000000..1952cc4 --- /dev/null +++ b/busManager/coord/utils/send_sms.py @@ -0,0 +1,39 @@ +from django.http import HttpResponseRedirect +from django import forms +from django.shortcuts import render + + +class SMSForm(forms.Form): + _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) + send_to_parents = forms.BooleanField(required=False) + send_to_emergency_contacts = forms.BooleanField(required=False) + only_include_active_travellers = forms.BooleanField(initial=True, required=False) + message = forms.CharField(label="Message", max_length=320, widget=forms.Textarea) + + +def send_sms(send_sms_mixin, request, queryset): + if 'send' in request.POST: + message = request.POST["message"] + send_to_parents = False + if request.POST.get("send_to_parents"): + send_to_parents = True + send_to_emergency_contacts = False + if request.POST.get("send_to_emergency_contacts"): + send_to_emergency_contacts = True + only_include_active_travellers = False + if request.POST.get("only_include_active_travellers"): + only_include_active_travellers = True + total = 0 + numbers = [] + for traveller in queryset: + if only_include_active_travellers and not traveller.is_active(): + continue + numbers.append(traveller.get_parsed_numbers(parents=send_to_parents, emergency=send_to_emergency_contacts)) + + len(numbers) + send_sms_mixin.message_user(request, f"SMS has been sent to {total} recipients") + return HttpResponseRedirect(request.get_full_path()) + + form = SMSForm(initial={'_selected_action': queryset.values_list('id', flat=True)}) + + return render(request, 'admin/sms_form.html', context={'form': form, 'items': queryset})