Added Send SMS function to traveller contacts. The send command is commented out.

This commit is contained in:
John Mullins
2023-09-07 15:42:11 +10:00
parent 49dae4892b
commit 43c23498bf
5 changed files with 103 additions and 2 deletions
+17 -2
View File
@@ -4,7 +4,8 @@ from datetime import date
from django.contrib.admin import DateFieldListFilter, BooleanFieldListFilter
from django.forms import widgets
from django.contrib import admin
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.utils.html import format_html
from django.utils.http import urlencode
@@ -15,6 +16,7 @@ from .adminClone import CloneModelAdmin
from .context_helpers import bus_roll_context, emergency_contacts_context, traveller_roll_context, \
traveller_route_context, school_roll_context
from .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll
from .form import SMSForm
from .models import *
@@ -60,6 +62,19 @@ class SchoolRollMixin:
class TravellerRollMixin:
def send_sms(self, request, queryset):
if 'send' in request.POST:
message = request.POST["message"]
total = 0
for traveller in queryset:
total += traveller.send_sms(message, parents=True)
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):
traveller_list = traveller_roll_context(queryset)
response = HttpResponse(content_type="text/csv")
@@ -182,7 +197,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", "yearly_rollover"]
actions = ["export_to_csv", "send_sms", "yearly_rollover"]
fieldsets = [
(None, {
'fields': [
+8
View File
@@ -0,0 +1,8 @@
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)
message = forms.CharField(label="Message", max_length=320, widget=forms.Textarea)
+24
View File
@@ -1,6 +1,9 @@
from datetime import datetime
import phonenumbers
from django.conf import settings
from django.db import models
from twilio.rest import Client
class Setting(models.Model):
@@ -261,6 +264,27 @@ 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
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
class TravellerRoute(models.Model):
traveller = models.ForeignKey(Traveller, on_delete=models.CASCADE)
@@ -0,0 +1,36 @@
{% extends "admin/base_site.html" %}
{% block content %}
<table>
<tr>
<th>Traveller</th>
<th>Parent A</th>
<th>Parent B</th>
<th>Emergency A</th>
<th>Emergency B</th>
</tr>
{% for item in items %}
<tr>
<td>{{ item }}</td>
<td>{{ item.parent_A_phone }}</td>
<td>{{ item.parent_B_phone }}</td>
<td>{{ item.emergency_contact_A_phone }}</td>
<td>{{ item.emergency_contact_B_phone }}</td>
</tr>
{% endfor %}
</table>
<br>
<hr style="height:4px">
<br>
<form action="" method="post">
{% csrf_token %}
<input type="hidden" name="action" value="send_sms">
<table>
{{ form.as_table }}
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="send" value="Send"></td>
</tr>
</table>
</form>
{% endblock %}
+18
View File
@@ -1,8 +1,10 @@
from django.contrib.admin.views.decorators import staff_member_required
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .context_helpers import *
from .email_helpers import render_to_pdf
from .form import SMSForm
@staff_member_required
@@ -18,3 +20,19 @@ def emergency_contacts(request):
@staff_member_required
def bus_roll(request):
return render_to_pdf('reports/bus_roll.html', bus_roll_context())
def sms_message(request, queryset):
if request.method == 'POST':
form = SMSForm(request.POST)
if form.is_valid():
print("Hello world")
HttpResponseRedirect(request.get_full_path())
else:
print("Form not valid")
else:
print("Hello new world")
form = SMSForm()
return render(request, 'admin/sms_form.html', context={'form': form, 'travellers': queryset})