E-Mail senden ermögliche und Felder anpassen

main
Samuel Zielke 8 months ago
parent 59c0e9faa4
commit 26c54fe1f7

@ -1,11 +1,44 @@
from django import forms from django import forms
from django.contrib import admin from django.contrib import admin, messages
import main.models as MainDB import main.models as MainDB
from datetime import date, datetime from datetime import date, datetime
from django.utils.html import format_html from django.utils.html import format_html
from import_export import resources from import_export import resources
from import_export.admin import ExportMixin, ImportMixin, ImportExportModelAdmin from import_export.admin import ExportMixin, ImportMixin, ImportExportModelAdmin
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.utils.timezone import now
from django.shortcuts import redirect
from django.urls import path
from .models import contributors
# Admin-Action für den Versand der E-Mail
def send_custom_email(modeladmin, request, queryset):
for obj in queryset:
subject = "Helfer - Regionalkongress 2025 "
myVar = [role.name for role in obj.roles.all()]
myVar = myVar[0] if len(myVar) > 0 else "Leer"
html_message = render_to_string("main/email_invite.html", {"firstname": obj.firstname,
"year": obj.birthday.year if obj.birthday != None else "Leer",
"congr": obj.congregation.title if obj.congregation != None else "Leer",
"role": myVar})
plain_message = strip_tags(html_message)
from_email = '"Samuel Zielke" <rk-orga@samuelzielke.de>'
recipient_list = [obj.email]
try:
send_mail(subject, plain_message, from_email, recipient_list, html_message=html_message)
obj.email_sent_at = now()
obj.save()
messages.success(request, f"E-Mail an {obj.email} gesendet.")
except Exception as e:
messages.error(request, f"Fehler beim Senden der E-Mail an {obj.email}: {e}")
send_custom_email.short_description = "Einladungs E-Mail senden"
class contributorsResource(resources.ModelResource): class contributorsResource(resources.ModelResource):
@ -25,6 +58,25 @@ class MainDB_contributorsAdmin(ExportMixin, ImportMixin, admin.ModelAdmin):
list_filter = ('gender', 'roles', 'deparment', 'da_approval', 'actual') list_filter = ('gender', 'roles', 'deparment', 'da_approval', 'actual')
search_fields = ('name', 'firstname', 'congregation__title', 'deparment__title', 'mobilnumber', 'email', 'jwpub') search_fields = ('name', 'firstname', 'congregation__title', 'deparment__title', 'mobilnumber', 'email', 'jwpub')
actions = [send_custom_email]
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('<path:object_id>/send_email/', self.admin_site.admin_view(self.send_email_view), name='send_email')
]
return custom_urls + urls
def send_email_view(self, request, object_id):
obj = self.get_object(request, object_id)
send_custom_email(self, request, [obj])
return redirect(request.META.get('HTTP_REFERER', 'admin:index'))
def email_button(self, obj):
return f'<a class="button" href="send_email/">E-Mail senden</a>'
email_button.allow_tags = True
email_button.short_description = "E-Mail senden"
def get_congregation(self, obj): def get_congregation(self, obj):
return obj.congregation return obj.congregation

@ -68,7 +68,7 @@ class contributors(models.Model):
firstname = models.CharField(("vorname"), max_length=50) firstname = models.CharField(("vorname"), max_length=50)
birthday = models.DateField(("geburtstag"), auto_now=False, auto_now_add=False, blank=True, null=True) birthday = models.DateField(("geburtstag"), auto_now=False, auto_now_add=False, blank=True, null=True)
congregation = models.ForeignKey("main.congregation", verbose_name=("Versammlung"), on_delete=models.SET_NULL, null=True, blank=True) congregation = models.ForeignKey("main.congregation", verbose_name=("Versammlung"), on_delete=models.SET_NULL, null=True, blank=True)
roles = models.ManyToManyField("main.role", verbose_name=("role"), null=True, blank=True) roles = models.ManyToManyField("main.role", verbose_name=("Vorrecht"), null=True, blank=True)
pioneer = models.BooleanField(("pionier"), default=False) pioneer = models.BooleanField(("pionier"), default=False)
svd = models.BooleanField(("s.v.d."), default=False) svd = models.BooleanField(("s.v.d."), default=False)
gender = models.CharField("Geschlecht",max_length=20, choices=[("M", "Männlich"), ("W", "Weiblich")]) gender = models.CharField("Geschlecht",max_length=20, choices=[("M", "Männlich"), ("W", "Weiblich")])
@ -82,6 +82,7 @@ class contributors(models.Model):
jwpub = models.EmailField(("JWPUB"), max_length=254, null=True, blank=True) jwpub = models.EmailField(("JWPUB"), max_length=254, null=True, blank=True)
notes = models.CharField(("Bemerkung"), max_length=255, null=True, blank=True) notes = models.CharField(("Bemerkung"), max_length=255, null=True, blank=True)
actual = models.BooleanField(("Aktuell"), default=False) actual = models.BooleanField(("Aktuell"), default=False)
email_sent_at = models.DateTimeField(("E-Mail versende"), null=True, blank=True)
class Meta: class Meta:
verbose_name = ("Helfer") verbose_name = ("Helfer")

Loading…
Cancel
Save

Powered by TurnKey Linux.