From bee85bf92aab84087798ffa9f3f16336acef2fce Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Thu, 19 Mar 2026 18:56:34 +0100 Subject: Basic backoffice for alert management --- src/Enmarcha.Backend/Views/Alerts/Delete.cshtml | 41 ++ src/Enmarcha.Backend/Views/Alerts/Edit.cshtml | 446 +++++++++++++++++++++ src/Enmarcha.Backend/Views/Alerts/Index.cshtml | 81 ++++ src/Enmarcha.Backend/Views/Backoffice/Index.cshtml | 27 ++ .../Views/Shared/_BackofficeLayout.cshtml | 50 +++ src/Enmarcha.Backend/Views/_ViewImports.cshtml | 5 + src/Enmarcha.Backend/Views/_ViewStart.cshtml | 3 + 7 files changed, 653 insertions(+) create mode 100644 src/Enmarcha.Backend/Views/Alerts/Delete.cshtml create mode 100644 src/Enmarcha.Backend/Views/Alerts/Edit.cshtml create mode 100644 src/Enmarcha.Backend/Views/Alerts/Index.cshtml create mode 100644 src/Enmarcha.Backend/Views/Backoffice/Index.cshtml create mode 100644 src/Enmarcha.Backend/Views/Shared/_BackofficeLayout.cshtml create mode 100644 src/Enmarcha.Backend/Views/_ViewImports.cshtml create mode 100644 src/Enmarcha.Backend/Views/_ViewStart.cshtml (limited to 'src/Enmarcha.Backend/Views') diff --git a/src/Enmarcha.Backend/Views/Alerts/Delete.cshtml b/src/Enmarcha.Backend/Views/Alerts/Delete.cshtml new file mode 100644 index 0000000..0c24b88 --- /dev/null +++ b/src/Enmarcha.Backend/Views/Alerts/Delete.cshtml @@ -0,0 +1,41 @@ +@model Enmarcha.Backend.Data.Models.ServiceAlert +@{ + ViewData["Title"] = "Eliminar alerta"; +} + +
+
+
+
+ Confirmar eliminación +
+
+

¿Estás seguro de que quieres eliminar la siguiente alerta?

+
+
ID
+
@Model.Id
+
Título
+
@Model.Header.Get("es")
+
Evento
+
+ @Model.EventStartDate.ToString("dd/MM/yyyy HH:mm") + → @Model.EventEndDate.ToString("dd/MM/yyyy HH:mm") +
+
+

+ + Esta acción no se puede deshacer. +

+
+
+ @Html.AntiForgeryToken() + +
+ Cancelar +
+
+
+
+
diff --git a/src/Enmarcha.Backend/Views/Alerts/Edit.cshtml b/src/Enmarcha.Backend/Views/Alerts/Edit.cshtml new file mode 100644 index 0000000..57e853d --- /dev/null +++ b/src/Enmarcha.Backend/Views/Alerts/Edit.cshtml @@ -0,0 +1,446 @@ +@model Enmarcha.Backend.ViewModels.AlertFormViewModel +@using Enmarcha.Backend.Data.Models +@using Enmarcha.Backend.Helpers +@{ + var isCreate = Model.Id is null; + ViewData["Title"] = isCreate ? "Nueva alerta" : "Editar alerta"; + var formAction = isCreate + ? "/backoffice/alerts/create" + : $"/backoffice/alerts/{Model.Id}/edit"; +} + +@section Head { + + + +} + +
+

@ViewData["Title"]

+ + Volver + +
+ +
+ @Html.AntiForgeryToken() + @if (!isCreate) + { + + } + +
+ @* Textos *@ +
+
+
+ Textos +
+
+
+ + + +
+
+ + +
+
+
+
+ + @* Causa / Efecto *@ +
+ + +
+
+ + +
+ + @* Fechas *@ +
+
+
+ Fechas +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + @* Selectores *@ +
+ + + +
+
+ Seleccionados: +
+ Ninguno +
+
+
+ +
+ + +
+
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+ +
+ También puedes escribir directamente: stop#feedId:stopId · + route#feedId:routeId · agency#feedId +
+
+ + @* URLs *@ +
+ + +
Una URL por línea
+
+
+ +
+ + Cancelar +
+
+ + + diff --git a/src/Enmarcha.Backend/Views/Alerts/Index.cshtml b/src/Enmarcha.Backend/Views/Alerts/Index.cshtml new file mode 100644 index 0000000..d541ccc --- /dev/null +++ b/src/Enmarcha.Backend/Views/Alerts/Index.cshtml @@ -0,0 +1,81 @@ +@model List +@using Enmarcha.Backend.Data.Models +@using Enmarcha.Backend.Helpers +@{ + ViewData["Title"] = "Alertas de servicio"; +} + +
+

+ Alertas de servicio +

+ + Nueva alerta + +
+ +@if (!Model.Any()) +{ +
+ + No hay alertas registradas. +
+} +else +{ +
+
+ + + + + + + + + + + + + @foreach (var alert in Model) + { + var phase = alert.GetPhase(); + var (badgeClass, phaseLabel) = phase switch + { + AlertPhase.Draft => ("bg-secondary", "Borrador"), + AlertPhase.PreNotice => ("bg-info text-dark", "Pre-aviso"), + AlertPhase.Active => ("bg-success", "Activa"), + AlertPhase.Finished => ("bg-warning text-dark", "Finalizada"), + _ => ("bg-dark", "Archivada") + }; + + + + + + + + + } + +
TítuloFaseCausaEfectoEvento
+
@alert.Header.Get("es")
+
@alert.Id[..Math.Min(8, alert.Id.Length)]…
+
@phaseLabel@alert.Cause.GetDescription()@alert.Effect.GetDescription() + @alert.EventStartDate.ToString("dd/MM/yy HH:mm")
+ → @alert.EventEndDate.ToString("dd/MM/yy HH:mm") +
+ + + + + + +
+
+
+} diff --git a/src/Enmarcha.Backend/Views/Backoffice/Index.cshtml b/src/Enmarcha.Backend/Views/Backoffice/Index.cshtml new file mode 100644 index 0000000..fc31fb4 --- /dev/null +++ b/src/Enmarcha.Backend/Views/Backoffice/Index.cshtml @@ -0,0 +1,27 @@ +@{ + ViewData["Title"] = "Dashboard"; + var name = User.Identity!.Name ?? User.FindFirst("name")?.Value ?? "Usuario"; + var alertCount = (int)(ViewData["AlertCount"] ?? 0); +} + +

Hola, @name 👋

+ +
+
+
+
+
+
+
Alertas de servicio
+

@alertCount

+
+ +
+ + Gestionar + +
+
+
+
+ diff --git a/src/Enmarcha.Backend/Views/Shared/_BackofficeLayout.cshtml b/src/Enmarcha.Backend/Views/Shared/_BackofficeLayout.cshtml new file mode 100644 index 0000000..382499e --- /dev/null +++ b/src/Enmarcha.Backend/Views/Shared/_BackofficeLayout.cshtml @@ -0,0 +1,50 @@ + + + + + + @ViewData["Title"] — Backoffice + + + @RenderSection("Head", required: false) + + + + +
+ @RenderBody() +
+ + + + diff --git a/src/Enmarcha.Backend/Views/_ViewImports.cshtml b/src/Enmarcha.Backend/Views/_ViewImports.cshtml new file mode 100644 index 0000000..cea4231 --- /dev/null +++ b/src/Enmarcha.Backend/Views/_ViewImports.cshtml @@ -0,0 +1,5 @@ +@using Enmarcha.Backend +@using Enmarcha.Backend.Data.Models +@using Enmarcha.Backend.Helpers +@using Enmarcha.Backend.ViewModels +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/src/Enmarcha.Backend/Views/_ViewStart.cshtml b/src/Enmarcha.Backend/Views/_ViewStart.cshtml new file mode 100644 index 0000000..06a5d00 --- /dev/null +++ b/src/Enmarcha.Backend/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_BackofficeLayout"; +} -- cgit v1.3