Moved SMS function out of admin.py
This commit is contained in:
@@ -13,12 +13,14 @@ from django.utils.translation import gettext_lazy
|
|||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
from rangefilter.filters import DateRangeFilterBuilder
|
from rangefilter.filters import DateRangeFilterBuilder
|
||||||
|
|
||||||
|
from mail_templates.admin import TemplateMixin
|
||||||
from .adminClone import CloneModelAdmin
|
from .adminClone import CloneModelAdmin
|
||||||
from .context_helpers import bus_roll_context, emergency_contacts_context, traveller_roll_context, \
|
from .context_helpers import bus_roll_context, emergency_contacts_context, traveller_roll_context, \
|
||||||
traveller_route_context, school_roll_context, confirmation_letter_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 .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll
|
||||||
from .form import SMSForm
|
from .form import SMSForm
|
||||||
from .models import *
|
from .models import *
|
||||||
|
from .utils.send_sms import send_sms
|
||||||
|
|
||||||
|
|
||||||
class BusRollMixin:
|
class BusRollMixin:
|
||||||
@@ -80,28 +82,7 @@ class TravellerRollMixin:
|
|||||||
return render_to_pdf('mail/confirmation_letter.html', confirmation_letter_context(queryset))
|
return render_to_pdf('mail/confirmation_letter.html', confirmation_letter_context(queryset))
|
||||||
|
|
||||||
def send_sms(self, request, queryset):
|
def send_sms(self, request, queryset):
|
||||||
if 'send' in request.POST:
|
return send_sms(self, request, queryset)
|
||||||
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})
|
|
||||||
|
|
||||||
def export_to_csv(self, request, queryset):
|
def export_to_csv(self, request, queryset):
|
||||||
traveller_list = traveller_roll_context(queryset)
|
traveller_list = traveller_roll_context(queryset)
|
||||||
@@ -212,7 +193,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, TemplateMixin):
|
||||||
list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"]
|
list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"]
|
||||||
list_filter = [
|
list_filter = [
|
||||||
"school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb",
|
"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"]
|
"emergency_contact_B_phone", "emergency_contact_B_relation"]
|
||||||
inlines = [TravellerRouteInline]
|
inlines = [TravellerRouteInline]
|
||||||
readonly_fields = ["fare_paying", "created_on", "last_edit", "is_archived"]
|
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 = [
|
fieldsets = [
|
||||||
(None, {
|
(None, {
|
||||||
'fields': [
|
'fields': [
|
||||||
|
|||||||
@@ -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)
|
|
||||||
@@ -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})
|
||||||
Reference in New Issue
Block a user