From 8cf1a551615f486ddd1ecd28c7b51c5dfbc702ef Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 6 May 2026 09:47:47 +0200 Subject: [PATCH] Add user ban functionality with email notification --- templates/jinja2/emails/ban.html | 27 +++++++++++++++++++ tienda/admin.py | 27 ++++++++++++++++++- tienda/tasks.py | 10 +++++++ .../admin/tienda/user/submit_line.html | 5 ++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 templates/jinja2/emails/ban.html create mode 100644 tienda/templates/admin/tienda/user/submit_line.html diff --git a/templates/jinja2/emails/ban.html b/templates/jinja2/emails/ban.html new file mode 100644 index 0000000..1ee10b0 --- /dev/null +++ b/templates/jinja2/emails/ban.html @@ -0,0 +1,27 @@ + + + + +
+ + + + + + + + + + +
+

Su cuenta ha sido bloqueada

+
+ alert alert +
+

Lamentamos informarle de que el equipo de moderación ha tomado acciones en su cuenta

+

Su cuenta ha sido bloqueada indefinidamente y sus productos han sido eliminados de la tienda.

+

Si desea apelar, por favor, contacte con Soporte Técnico

+

+

Este email ha sido enviado automaticamente, no responda a este correo.

+
+
\ No newline at end of file diff --git a/tienda/admin.py b/tienda/admin.py index 17ada62..4d45963 100644 --- a/tienda/admin.py +++ b/tienda/admin.py @@ -1,12 +1,37 @@ from django.contrib import admin from .models import Category, Image, Product, Cart, CartItem, Order, OrderItem, OrderMessage, StockReservation, StockReservationItem, User, VerificationCode, SavedPaymentMethod # Register your models here. +from django.shortcuts import redirect +from django.urls import path +from . import tasks admin.site.register(Category) admin.site.register(Image) -admin.site.register(User) admin.site.register(VerificationCode) +@admin.register(User) +class UserAdmin(admin.ModelAdmin): + search_fields = ('username',) + + def has_change_permission(self, request, obj = ...): + return super().has_change_permission(request, obj) + + def get_urls(self): + urls = super().get_urls() + my_urls = [ + path("/ban/", self.admin_site.admin_view(self.ban_view)), + ] + return my_urls + urls + + def ban_view(self, request, pk): + user = User.objects.get(pk=pk) + + user.is_active = False # Desactivar cuenta de usuario + user.save() # Guardar datos + + tasks.banear_usuario.delay(user.email) + return redirect("admin") + @admin.register(Product) class ProductAdmin(admin.ModelAdmin): diff --git a/tienda/tasks.py b/tienda/tasks.py index 13eca94..2b7dfba 100644 --- a/tienda/tasks.py +++ b/tienda/tasks.py @@ -20,6 +20,16 @@ def enviar_correo_bienvenida(email_usuario: str, nombre_usuario: str): send_hemail(email_usuario, "Inicio de Sesión correcto", html_content, "Has iniciado sesión...") @shared_task +def banear_usuario(email_usuario: str): + html_content = render_to_string( + 'emails/ban.html', + { + }, + using='jinja2' + ) + + send_hemail(email_usuario, "Cuenta Bloqueada", html_content, "Tu cuenta ha sido bloqueada...") +@shared_task def enviar_correo_confirmacion(id: int): usuario = User.objects.get(id=id) code = VerificationCode.objects.create( diff --git a/tienda/templates/admin/tienda/user/submit_line.html b/tienda/templates/admin/tienda/user/submit_line.html new file mode 100644 index 0000000..647d6d6 --- /dev/null +++ b/tienda/templates/admin/tienda/user/submit_line.html @@ -0,0 +1,5 @@ +{% extends "admin/submit_line.html" %} +{% load i18n admin_urls %} +{% block submit-row %} + BAN USER +{% endblock %} \ No newline at end of file