From eea0aca07cfbcb9ba54ca10f90f49b4943740e69 Mon Sep 17 00:00:00 2001 From: Tait Hoyem Date: Fri, 4 Dec 2020 14:54:11 -0700 Subject: [PATCH] Edit admin interface --- download/admin.py | 13 ++++++++ download/migrations/0013_bccemail_ccemail.py | 35 ++++++++++++++++++++ download/models.py | 23 ++++++++++++- download/views.py | 11 ++++-- quote_pdf/urls.py | 2 ++ 5 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 download/migrations/0013_bccemail_ccemail.py diff --git a/download/admin.py b/download/admin.py index 8c38f3f..d2017af 100644 --- a/download/admin.py +++ b/download/admin.py @@ -1,3 +1,16 @@ from django.contrib import admin +from . import models + # Register your models here. +@admin.register(models.BCCEmail) +class BCCEmailAdmin(admin.ModelAdmin): + pass + +@admin.register(models.CCEmail) +class CCEmailAdmin(admin.ModelAdmin): + pass + +@admin.register(models.PDF) +class PDFAdmin(admin.ModelAdmin): + list_display = ['address', 'upload_date'] \ No newline at end of file diff --git a/download/migrations/0013_bccemail_ccemail.py b/download/migrations/0013_bccemail_ccemail.py new file mode 100644 index 0000000..6fc2746 --- /dev/null +++ b/download/migrations/0013_bccemail_ccemail.py @@ -0,0 +1,35 @@ +# Generated by Django 3.1.4 on 2020-12-04 21:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('download', '0012_auto_20201109_2106'), + ] + + operations = [ + migrations.CreateModel( + name='BCCEmail', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.CharField(max_length=64)), + ('active', models.BooleanField(default=False)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='CCEmail', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.CharField(max_length=64)), + ('active', models.BooleanField(default=False)), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/download/models.py b/download/models.py index eb1ca93..a7142f2 100644 --- a/download/models.py +++ b/download/models.py @@ -13,6 +13,9 @@ class Address(models.Model): 'id': self.id } + def __str__(self): + return self.address + class PDF(models.Model): path = models.CharField(max_length=64) code = models.CharField(max_length=8) @@ -21,6 +24,9 @@ class PDF(models.Model): upload_date = models.DateTimeField(auto_now_add=True, editable=False, null=False, blank=False) valid = models.BooleanField() + def __str__(self): + return self.address.address + class EmailSent(models.Model): timestamp = models.DateTimeField(auto_now_add=True, editable=False, null=False, blank=False) user = models.ForeignKey(QuoteUser, on_delete=models.CASCADE) @@ -34,4 +40,19 @@ class DownloadAttempt(models.Model): code_correct = models.BooleanField(default=False) pdf = models.ForeignKey(PDF, on_delete=models.CASCADE, related_name='attempts') ip = models.GenericIPAddressField() - geolocation = models.CharField(max_length=64) \ No newline at end of file + geolocation = models.CharField(max_length=64) + +class AbstractEmail(models.Model): + email = models.CharField(max_length=64) + active = models.BooleanField(default=False) + class Meta: + abstract = True + + def __str__(self): + return self.email + +class CCEmail(AbstractEmail): + pass + +class BCCEmail(AbstractEmail): + pass diff --git a/download/views.py b/download/views.py index f62a37e..6d0695d 100644 --- a/download/views.py +++ b/download/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render, HttpResponse from django.http import FileResponse from django.core.mail import EmailMultiAlternatives -from .models import Address, PDF, EmailSent, DownloadAttempt +from .models import Address, PDF, EmailSent, DownloadAttempt, CCEmail, BCCEmail from .forms import CodeForm from core.models import QuoteUser from django.template.loader import render_to_string @@ -14,6 +14,12 @@ import os IPINFO_HANDLER = ipinfo.getHandler() +def get_cc_emails(): + return [x.email for x in CCEmail.objects.filter(active=True)] + +def get_bcc_emails(): + return [x.email for x in BCCEmail.objects.filter(active=True)] + # https://stackoverflow.com/a/4581997 def get_client_ip(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') @@ -56,7 +62,8 @@ def send_email(to, addr, pdf, dt_date): 'address': addr.address, 'datetime': dt_date.strftime("%d/%m/%Y %H:%M:%S") } - email.bcc = [settings.REQUEST_BCC] + email.bcc = get_bcc_emails() + email.cc = get_cc_emails() email.body = render_to_string('download/email/quote.txt', context) email.attach_alternative(render_to_string('download/email/quote.html', context), 'text/html') with open(str(pdf.upload_file), 'rb') as f: diff --git a/quote_pdf/urls.py b/quote_pdf/urls.py index 4c12dc3..4bb0760 100644 --- a/quote_pdf/urls.py +++ b/quote_pdf/urls.py @@ -18,6 +18,8 @@ from django.urls import path, include from django.conf import settings from django.conf.urls.static import static +admin.site.site_header = 'Bahn Projects Quote System Administration' + urlpatterns = [ path('admin/', admin.site.urls), path('download/', include('download.urls')),