소스 검색

Los correos con la invitación ya se envían

Tino 3 달 전
부모
커밋
d2b56970c0
4개의 변경된 파일41개의 추가작업 그리고 41개의 파일을 삭제
  1. 1 1
      K8S/.current_version
  2. 1 1
      K8S/.version
  3. 28 39
      src/accounts/admin.py
  4. 11 0
      src/templates/admin/enviar_invitacion.html

+ 1 - 1
K8S/.current_version

@@ -1 +1 @@
-alpine-1
+alpine-4

+ 1 - 1
K8S/.version

@@ -1 +1 @@
-alpine-2
+alpine-5

+ 28 - 39
src/accounts/admin.py

@@ -1,33 +1,23 @@
 from django.contrib import admin
-from django import forms
-from django.core.mail import send_mail
 from django.core.mail import EmailMultiAlternatives
 from django.conf import settings
 from django.template.loader import render_to_string
-from django.urls import path
-from django.shortcuts import render
+from django.urls import reverse
+from django.shortcuts import render, redirect
+from django.contrib import messages
 from .models import InvitationCode
 import logging
 
 logger = logging.getLogger(__name__)
 
 
-class EmailForm(forms.Form):
-    email = forms.EmailField(label='Email del invitado')
-
-
 @admin.register(InvitationCode)
 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', 'enviar_link']
     list_filter = ['is_used', 'created_at']
     search_fields = ['code']
     readonly_fields = ['code', 'created_at']
-    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
+    actions = ['create_invitations']
 
     def create_invitations(self, request, queryset):
         for _ in range(5):
@@ -35,18 +25,26 @@ class InvitationCodeAdmin(admin.ModelAdmin):
         self.message_user(request, 'Se crearon 5 códigos de invitación.')
     create_invitations.short_description = 'Crear 5 códigos de invitación'
 
-    def send_invitation_emails(self, request, queryset):
-        logger.info(f"Iniciando envio de invitacion, query={queryset}")
-        if 'apply' in request.POST:
-            form = EmailForm(request.POST)
-            logger.info(f"Form data: {request.POST}")
-            if form.is_valid():
-                email = form.cleaned_data['email']
-                logger.info(f"Email valido: {email}")
+    def enviar_link(self, obj):
+        from django.utils.html import format_html
+        url = reverse('admin:send_invitation_email')
+        return format_html('<a href="{}?code={}">Enviar</a>', url, obj.code)
+    enviar_link.short_description = 'Enviar'
+
+    def get_urls(self):
+        from django.urls import path
+        urls = super().get_urls()
+        urls.insert(0, path('send-invitation/', self.admin_site.admin_view(self.send_invitation_view), name='send_invitation_email'))
+        return urls
+
+    def send_invitation_view(self, request):
+        email = request.GET.get('email') or request.POST.get('email')
+        logger.info(f"Email recibido: {email}")
+        if request.method == 'POST' or email:
+            if email:
                 invitation = InvitationCode.create_invitation(created_by=request.user)
                 logger.info(f"Created invitation code: {invitation.code}")
                 signup_url = f"https://jugaralpadel.es/accounts/signup/?code={invitation.code}"
-                logger.info(f"Signup URL: {signup_url}")
                 context = {'invitation_code': invitation.code, 'signup_url': signup_url}
                 html_content = render_to_string('emails/invitacion.html', context)
                 texto = f'Has recibido una invitación para registrarte en Jugar al Pádel Entre Amigos.\n\nTu código de invitación: {invitation.code}\n\nEnlace: {signup_url}\n\nEste código caduca en 24 horas.'
@@ -60,22 +58,13 @@ class InvitationCodeAdmin(admin.ModelAdmin):
                 msg.attach_alternative(html_content, "text/html")
                 msg.send()
                 logger.info(f"Email enviado a {email}")
-                self.message_user(request, f'Invitación enviada a {email}.')
-                return None
+                self.message_user(request, f'Invitación enviada a {email}.', messages.SUCCESS)
+                return redirect('admin:accounts_invitationcode_changelist')
             else:
-                logger.info(f"Form errors: {form.errors}")
-        else:
-            form = EmailForm()
-            logger.info("Mostrando formulario de invitacion")
-        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())
+                self.message_user(request, 'Se requiere un email.', messages.ERROR)
+        if email:
+            return render(request, 'admin/enviar_invitacion.html', {'email': email})
+        return render(request, 'admin/enviar_invitacion.html', {'email': ''})
 
     def get_queryset(self, request):
         qs = super().get_queryset(request)

+ 11 - 0
src/templates/admin/enviar_invitacion.html

@@ -0,0 +1,11 @@
+{% extends "admin/base_site.html" %}
+{% block content %}
+<h1>Enviar invitación por email</h1>
+<form method="get">
+    <div style="margin-bottom: 10px;">
+        <label for="email">Email del invitado:</label><br>
+        <input type="email" name="email" id="email" value="{{ email }}" required style="width: 300px;">
+    </div>
+    <button type="submit" class="button">Enviar invitación</button>
+</form>
+{% endblock %}