|
|
|
|
@ -1,11 +1,44 @@
|
|
|
|
|
from django import forms
|
|
|
|
|
from django.contrib import admin
|
|
|
|
|
from django.contrib import admin, messages
|
|
|
|
|
import main.models as MainDB
|
|
|
|
|
from datetime import date, datetime
|
|
|
|
|
from django.utils.html import format_html
|
|
|
|
|
from import_export import resources
|
|
|
|
|
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):
|
|
|
|
|
|
|
|
|
|
@ -25,6 +58,25 @@ class MainDB_contributorsAdmin(ExportMixin, ImportMixin, admin.ModelAdmin):
|
|
|
|
|
list_filter = ('gender', 'roles', 'deparment', 'da_approval', 'actual')
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
|
return obj.congregation
|
|
|
|
|
|