|
@@ -1,15 +1,29 @@
|
|
|
from django.contrib import admin
|
|
from django.contrib import admin
|
|
|
-from django.utils.html import format_html
|
|
|
|
|
|
|
+from django import forms
|
|
|
|
|
+from django.core.mail import send_mail
|
|
|
|
|
+from django.conf import settings
|
|
|
|
|
+from django.template.loader import render_to_string
|
|
|
|
|
+from django.urls import path
|
|
|
|
|
+from django.shortcuts import render
|
|
|
from .models import InvitationCode
|
|
from .models import InvitationCode
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+class EmailForm(forms.Form):
|
|
|
|
|
+ email = forms.EmailField(label='Email del invitado')
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@admin.register(InvitationCode)
|
|
@admin.register(InvitationCode)
|
|
|
class InvitationCodeAdmin(admin.ModelAdmin):
|
|
class InvitationCodeAdmin(admin.ModelAdmin):
|
|
|
list_display = ['code', 'created_at', 'expires_at', 'is_used', 'used_by']
|
|
list_display = ['code', 'created_at', 'expires_at', 'is_used', 'used_by']
|
|
|
list_filter = ['is_used', 'created_at']
|
|
list_filter = ['is_used', 'created_at']
|
|
|
search_fields = ['code']
|
|
search_fields = ['code']
|
|
|
readonly_fields = ['code', 'created_at']
|
|
readonly_fields = ['code', 'created_at']
|
|
|
- actions = ['create_invitations']
|
|
|
|
|
|
|
+ actions = ['create_invitations', 'send_invitation_emails']
|
|
|
|
|
+
|
|
|
|
|
+ def get_urls(self):
|
|
|
|
|
+ urls = super().get_urls()
|
|
|
|
|
+ urls.insert(0, path('send_invitation/', self.admin_site.admin_view(self.send_invitation_view), name='send_invitation'))
|
|
|
|
|
+ return urls
|
|
|
|
|
|
|
|
def create_invitations(self, request, queryset):
|
|
def create_invitations(self, request, queryset):
|
|
|
for _ in range(5):
|
|
for _ in range(5):
|
|
@@ -17,6 +31,37 @@ class InvitationCodeAdmin(admin.ModelAdmin):
|
|
|
self.message_user(request, 'Se crearon 5 códigos de invitación.')
|
|
self.message_user(request, 'Se crearon 5 códigos de invitación.')
|
|
|
create_invitations.short_description = 'Crear 5 códigos de invitación'
|
|
create_invitations.short_description = 'Crear 5 códigos de invitación'
|
|
|
|
|
|
|
|
|
|
+ def send_invitation_emails(self, request, queryset):
|
|
|
|
|
+ if 'apply' in request.POST:
|
|
|
|
|
+ form = EmailForm(request.POST)
|
|
|
|
|
+ if form.is_valid():
|
|
|
|
|
+ email = form.cleaned_data['email']
|
|
|
|
|
+ invitation = InvitationCode.create_invitation(created_by=request.user)
|
|
|
|
|
+ domain = settings.ALLOWED_HOSTS[0].replace('.','')
|
|
|
|
|
+ signup_url = f"https://jugaralpadel.es/accounts/signup/?code={invitation.code}"
|
|
|
|
|
+ context = {'invitation_code': invitation.code, 'signup_url': signup_url}
|
|
|
|
|
+ html_message = render_to_string('emails/invitacion.html', context)
|
|
|
|
|
+ send_mail(
|
|
|
|
|
+ 'Invitación a Jugar al Pádel',
|
|
|
|
|
+ '',
|
|
|
|
|
+ settings.DEFAULT_FROM_EMAIL,
|
|
|
|
|
+ [email],
|
|
|
|
|
+ html_message=html_message
|
|
|
|
|
+ )
|
|
|
|
|
+ self.message_user(request, f'Invitación enviada a {email}.')
|
|
|
|
|
+ return None
|
|
|
|
|
+ else:
|
|
|
|
|
+ form = EmailForm()
|
|
|
|
|
+ return render(request, 'admin/send_invitation.html', {
|
|
|
|
|
+ 'items': queryset,
|
|
|
|
|
+ 'form': form,
|
|
|
|
|
+ 'title': 'Enviar invitación por email'
|
|
|
|
|
+ })
|
|
|
|
|
+ send_invitation_emails.short_description = 'Enviar invitación por email'
|
|
|
|
|
+
|
|
|
|
|
+ def send_invitation_view(self, request):
|
|
|
|
|
+ return self.send_invitation_emails(request, InvitationCode.objects.none())
|
|
|
|
|
+
|
|
|
def get_queryset(self, request):
|
|
def get_queryset(self, request):
|
|
|
qs = super().get_queryset(request)
|
|
qs = super().get_queryset(request)
|
|
|
qs = qs.select_related('used_by', 'created_by')
|
|
qs = qs.select_related('used_by', 'created_by')
|