Módulo logros para desbloquear insignias según acciones del usuario (por ejemplo, haber comprado en ciertos eventos). La UI vive en Mi Fuego; la evaluación corre al confirmar pagos y al visitar la pantalla de logros.
| Modelo | Rol |
|---|---|
Achievement |
Definición: slug, nombre, imagen estática (img/logros/… en tickets/static/, sube a S3 con collectstatic), descripción, condition_type, condition_config (JSON), is_active, sort_order. |
UserAchievement |
Logro desbloqueado por usuario; celebration_shown indica si ya vio el modal de celebración. |
Implementadas en logros/conditions.py:
| Tipo | Config | Regla |
|---|---|---|
purchased_events |
{"event_ids": [9, 10, 17]} |
El usuario tiene al menos una orden CONFIRMED en cada evento listado (match por Order.user o Order.email case-insensitive). |
Para agregar condiciones nuevas: implementar checker en CONDITION_CHECKERS y agregar choice en Achievement.ConditionType.
- Post-pago online: en
payment_callbacky plantillapayment_callback.html—check_and_unlock_for_user+ modal si hay celebraciones pendientes. - Pantalla Mis logros:
/mi-fuego/mis-bonos/logros/— re-evalúa al cargar (mis_logros_view). - Admin Django:
logros/admin.pypara ABM de definiciones.
| Ruta | Nombre | Descripción |
|---|---|---|
/mi-fuego/mis-bonos/logros/ |
mis_logros |
Galería de logros (desbloqueados y bloqueados) |
/mi-fuego/mis-bonos/logros/celebracion-vista/ |
logros_mark_celebration_shown |
POST JSON { "slugs": ["…"] } — marca modal como visto |
mis_logros.html: grid de logros con estado bloqueado/desbloqueado.logro_unlocked_modal.html: modal de celebración; también incluido enbarbu_base.htmly callback de pago.- Enlace desde
my_tickets/index.html.
La migración 0002_seed_tres_fiestas_oscuras crea:
- Slug:
3-fiestas-oscuras - Nombre: “3 Fiestas oscuras”
- Condición: compras confirmadas en eventos
9,10,17 - Imagen:
img/logros/3-oscuras.jpg→https://faticketera-zappa-prod.s3.amazonaws.com/img/logros/3-oscuras.jpgtras deploy +collectstatic
Servicios (logros/services.py)
get_achievements_for_user(user)— lista con flagunlocked.check_and_unlock_for_user(user)— persiste nuevosUserAchievement; retorna recién desbloqueados.get_pending_celebrations(user)— logros sin modal mostrado.mark_celebrations_shown(user, slugs=None)— actualizacelebration_shown.
Ver casos-de-uso, funcionalidades, glosario.