Resumen
Remate del Hito B de honestidad en Digital Signage (s95): desde mayo el backend distingue marcas que aceptan despliegue real (push_implemented) vs solo monitorización (SNMP, control de display). Esta versión expone esa verdad en la UI: cada pantalla del listado de la página Signage muestra una etiqueta junto a su marca.
- “Push” (verde): la marca tiene adapter con API real de despliegue (SpinetiX, BrightSign, Samsung, LG, Yodeck, Signagelive, IAdea).
- “Monitor only” (gris): solo control SNMP/display, sin API de contenido (Crestron, Philips, Barco, Christie, NEC/Sharp).
Renderizado server-side con la misma lógica que usa el deploy (resolve_signage_adapter + supports_real_push), no una heurística paralela en JS.
Cambios funcionales
Backend: resolve_signage_adapter() mejorada
- Nuevo parámetro opcional
adapterspara pasar lista de adapters enabled precargada. - Evita N queries en el listado de pantallas (antes resolvía un adapter por dispositivo).
- Comportamiento sin parámetro idéntico: intacto para callers existentes (5 tests verdes).
- Ubicación:
monitoring/services/signage_service.py:97.
Vista signage_view()
- Carga una sola vez
SignageVendorAdapter.objects.filter(enabled=True)→ pasa a todos los resolver. - Por cada dispositivo:
adapter = resolve_signage_adapter(profile, adapters=enabled_adapters). - Calcula
push_state:"push"sisupports_real_push(adapter.slug),"monitor"en caso contrario,""si sin adapter. - Añade campo
push_stateal dictdevices[]en contexto de template. - Ubicación:
monitoring/views.py:418–464.
Template y CSS
- HTML (
templates/monitoring/signage.html): Badge inline junto avendor-badge, contitle(tooltip) descriptivo.{% if dev.push_state == "push" %} <span class="push-badge push-real" title="{% trans '...' %}">{% trans "Push" %}</span> {% elif dev.push_state == "monitor" %} <span class="push-badge push-monitor" title="{% trans '...' %}">{% trans "Monitor only" %}</span> {% endif %} - CSS (
static/css/pages/signage.css):.push-badge+.push-real(verde, #22c55e) y.push-monitor(gris, #6b7280), tipografía 10px/bold, padding 1px 5px.
i18n
Añadidos 4 strings al catálogo ES (locale/es/LC_MESSAGES/django.po):
"Push"→"Push"(sin traducción — badge label)."Monitor only"→"Solo monitorización"."This brand supports real content deployment from CreaRack"→ tooltip push."Monitoring and display control only — this brand exposes no content deployment API"→ tooltip monitor.
Compilado y verificado en Docker; po_dup_check limpio.
Límites de la feature
- Ubicación: etiqueta solo en el listado lateral de la página Signage; header de detalle de dispositivo no la repite (misma info a 1 clic).
- Sin consumidor frontend directo de
/signage/adapters: la vista resuelve server-side, evitando duplicar matching logic en JS. - Adapter resuelto vacío → sin badge: no se adivina; el usuario ve la marca pero sin capacidad hint.
Trazabilidad
| Aspecto | Valor |
|---|---|
| Versión | 1.64.0 (bumped en config/settings/base.py + README.md) |
| Hito | B — honestidad en signage (s95, referencia anterior: c711907d) |
| Task | #132, acta anotada (s244) |
| Files | 9 cambios: servicio, vista, template, CSS, i18n (.po), docs (CHANGELOG, RELEASE_NOTES, README) |
| LOC | ~50 nuevas (lógica + UI + CSS) |
Véase también
- [[entity—monitoring—service—resolve-signage-adapter]]
- [[entity—monitoring—view—signage-view]]
- [[entity—signage—model—signage-vendor-adapter]]
- [[concept—signage—honestidad-marca-ui]]
- [[feature—signage—hito-b-honestidad]]