| @ -1,7 +1,12 @@ | |||||
| from django.conf import settings | from django.conf import settings | ||||
| from datetime import date | |||||
| def app_version(request): | def app_version(request): | ||||
| return { | return { | ||||
| 'APP_VERSION': settings.APP_VERSION | 'APP_VERSION': settings.APP_VERSION | ||||
| } | } | ||||
| def base_context(request): | |||||
| return {'year': date.today().year} | |||||
| @ -0,0 +1,11 @@ | |||||
| from django.core.management.base import BaseCommand | |||||
| from reymotausers.models import ReyMotaUser | |||||
| class Command(BaseCommand): | |||||
| help = "Desactivar usuarios antiguos antes de la política de privacidad" | |||||
| def handle(self, *args, **kwargs): | |||||
| usuarios_actualizados = ReyMotaUser.objects.filter(is_active=True, is_staff=False).update(is_active=False) | |||||
| self.stdout.write(self.style.SUCCESS(f"Usuarios desactivados: {usuarios_actualizados}")) | |||||
| @ -0,0 +1,14 @@ | |||||
| from django.core.management.base import BaseCommand | |||||
| from reymotausers.models import ReyMotaUser | |||||
| from reymotausers.utils import enviar_correo_reactivacion | |||||
| class Command(BaseCommand): | |||||
| help = "Enviar correos a usuarios desactivados para aceptar la política de privacidad" | |||||
| def handle(self, *args, **kwargs): | |||||
| usuarios = ReyMotaUser.objects.filter(is_active=False) | |||||
| for usuario in usuarios: | |||||
| enviar_correo_reactivacion(usuario) | |||||
| self.stdout.write(self.style.SUCCESS(f"Correos enviados a {usuarios.count()} usuarios.")) | |||||
| @ -0,0 +1,11 @@ | |||||
| from django.core.management.base import BaseCommand | |||||
| from reymotausers.models import ReyMotaUser | |||||
| class Command(BaseCommand): | |||||
| help = "Reactivar usuarios" | |||||
| def handle(self, *args, **kwargs): | |||||
| usuarios_actualizados = ReyMotaUser.objects.filter(is_active=False, is_staff=False).update(is_active=True) | |||||
| self.stdout.write(self.style.SUCCESS(f"Usuarios reactivados: {usuarios_actualizados}")) | |||||
| @ -0,0 +1,11 @@ | |||||
| from django.db.models.signals import post_save | |||||
| from django.dispatch import receiver | |||||
| from django.conf import settings | |||||
| from .models import PerfilUsuario, ReyMotaUser | |||||
| @receiver(post_save, sender=settings.AUTH_USER_MODEL) | |||||
| def crear_perfil(sender, instance, created, **kwargs): | |||||
| if created: | |||||
| PerfilUsuario.objects.create(usuario=instance) | |||||
| @ -1,9 +1,10 @@ | |||||
| from django.urls import path | from django.urls import path | ||||
| from . import views | from . import views | ||||
| from .views import api_lista_usuarios, api_detalle_usuario | |||||
| from .views import api_lista_usuarios, api_detalle_usuario, reactivar_cuenta | |||||
| urlpatterns = [ | urlpatterns = [ | ||||
| path('api/usuarios/', api_lista_usuarios, name='api_lista_usuarios'), | path('api/usuarios/', api_lista_usuarios, name='api_lista_usuarios'), | ||||
| path('api/usuarios/<int:usuario_id>/', api_detalle_usuario, name='api_detalle_usuario'), | path('api/usuarios/<int:usuario_id>/', api_detalle_usuario, name='api_detalle_usuario'), | ||||
| path("reactivar/<uuid:token>/", reactivar_cuenta, name="reactivar_cuenta"), | |||||
| ] | ] | ||||
| @ -0,0 +1,31 @@ | |||||
| from django.core.mail import send_mail | |||||
| from django.conf import settings | |||||
| from django.urls import reverse | |||||
| def enviar_correo_reactivacion(usuario): | |||||
| perfil = usuario.perfilusuario | |||||
| perfil.generar_nuevo_token() # Generar un nuevo token | |||||
| enlace = f"{settings.SITE_URL}{reverse('reactivar_cuenta', args=[perfil.token_activacion])}" | |||||
| asunto = "Reactivación de tu cuenta - Política de Privacidad" | |||||
| mensaje = f""" | |||||
| Hola {usuario.nombre}, | |||||
| Para cumplir con la nueva normativa de privacidad, hemos desactivado temporalmente tu cuenta. | |||||
| Por favor, acepta la política de privacidad en el siguiente enlace para volver a activarla: | |||||
| {enlace} | |||||
| Saludos, | |||||
| El equipo de soporte | |||||
| """ | |||||
| send_mail( | |||||
| asunto, | |||||
| mensaje, | |||||
| settings.DEFAULT_FROM_EMAIL, | |||||
| [usuario.email] | |||||
| ) | |||||
| @ -0,0 +1,57 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block content %} | |||||
| <div class="container mt-4"> | |||||
| <h2>Política de Privacidad</h2> | |||||
| <p>Última actualización: {{ fecha_actual }}</p> | |||||
| <h3>1. Responsable del tratamiento</h3> | |||||
| <p>El responsable del tratamiento de los datos personales es <strong>[Nombre de la Organización]</strong>, con dirección en <strong>[Dirección]</strong> y correo electrónico <strong>[Email de contacto]</strong>.</p> | |||||
| <h3>2. Datos que recopilamos</h3> | |||||
| <p>Recopilamos los siguientes datos personales cuando te registras en nuestra plataforma y reservas eventos:</p> | |||||
| <ul> | |||||
| <li>Nombre y apellidos</li> | |||||
| <li>Correo electrónico</li> | |||||
| <li>Información sobre las reservas realizadas</li> | |||||
| </ul> | |||||
| <h3>3. Finalidad del tratamiento</h3> | |||||
| <p>Utilizamos tus datos personales para:</p> | |||||
| <ul> | |||||
| <li>Gestionar las reservas en eventos</li> | |||||
| <li>Enviarte confirmaciones y actualizaciones sobre los eventos</li> | |||||
| <li>Enviar información relevante sobre la plataforma (solo si has dado tu consentimiento)</li> | |||||
| </ul> | |||||
| <h3>4. Base legal del tratamiento</h3> | |||||
| <p>El tratamiento de tus datos se basa en:</p> | |||||
| <ul> | |||||
| <li>Tu consentimiento, que puedes retirar en cualquier momento</li> | |||||
| <li>La necesidad de procesar datos para la ejecución de un contrato (gestión de eventos y reservas)</li> | |||||
| <li>Obligaciones legales aplicables</li> | |||||
| </ul> | |||||
| <h3>5. ¿Cuánto tiempo guardamos los datos?</h3> | |||||
| <p>Conservamos tus datos mientras tengas una cuenta en nuestra plataforma o hasta que solicites su eliminación.</p> | |||||
| <h3>6. Derechos del usuario</h3> | |||||
| <p>De acuerdo con el RGPD, tienes derecho a:</p> | |||||
| <ul> | |||||
| <li>Acceder a tus datos personales</li> | |||||
| <li>Rectificar datos inexactos</li> | |||||
| <li>Solicitar la eliminación de tus datos</li> | |||||
| <li>Oponerte al tratamiento de datos para ciertos fines</li> | |||||
| <li>Solicitar la portabilidad de tus datos</li> | |||||
| </ul> | |||||
| <p>Para ejercer estos derechos, contacta con nosotros en <strong>[Email de contacto]</strong>.</p> | |||||
| <h3>7. Seguridad de los datos</h3> | |||||
| <p>Aplicamos medidas de seguridad para proteger los datos contra accesos no autorizados, pérdidas o alteraciones.</p> | |||||
| <h3>8. Contacto</h3> | |||||
| <p>Si tienes preguntas sobre esta política, puedes contactarnos en <strong>[Email de contacto]</strong>.</p> | |||||
| </div> | |||||
| {% endblock %} | |||||
| @ -0,0 +1,19 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block content %} | |||||
| <div class="container"> | |||||
| <h2>Reactivar cuenta</h2> | |||||
| <p>Hola, {{ usuario.nombre }}. Para continuar usando nuestra plataforma, debes aceptar la política de privacidad.</p> | |||||
| <form method="post"> | |||||
| {% csrf_token %} | |||||
| <label> | |||||
| <input type="checkbox" name="aceptar_politica" required> | |||||
| Acepto la <a href="{% url 'politica_privacidad' %}" target="_blank">Política de Privacidad</a> | |||||
| </label> | |||||
| <br><br> | |||||
| <button type="submit" class="btn btn-success">Aceptar y Reactivar</button> | |||||
| </form> | |||||
| </div> | |||||
| {% endblock %} | |||||