Files
HerramientaCASA/HerramientaCASA/Components/Pages/ConfiguracionPages/EstadisticasConf.razor
2025-09-23 12:01:02 +02:00

302 lines
11 KiB
Plaintext

@page "/Estadisticas"
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@using Microsoft.AspNetCore.WebUtilities
@using BlazorBootstrap
@using System.Globalization
@using bdHerramientaCACOA.db
@rendermode InteractiveServer
@inject IJSRuntime JS
@using ClosedXML.Excel
@using Microsoft.EntityFrameworkCore
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="row container-fluid mt-4" style="justify-content:space-between">
<div class="form-group mt-4 col-6">
<label>Fecha inicio:</label>
<InputDate TValue="DateTime?"
Value="fechaInicio"
ValueChanged="OnFechaInicioChanged"
ValueExpression="@(() => fechaInicio)" />
<label>Fecha final:</label>
<InputDate TValue="DateTime?"
Value="fechaFinal"
ValueChanged="OnFechaFinalChanged"
ValueExpression="@(() => fechaFinal)" />
</div>
<div class="mt-2">
@if (!string.IsNullOrEmpty(mensajeError))
{
<label class="text-danger fw-semibold">
@mensajeError
</label>
}
</div>
</div>
<div class="container-fluid pt-3">
<Tabs>
<Tab Title="Estadisticas CASA - Edificación" Active>
<Content>
<div class="CajaTab p-2">
<CascadingValue Value="this">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaHerraCASATab ListadoHerraCASA="@listadoHerramientaEstadistica" ListadoFactoresCASA="listadoHerramientaEstadisticaFactores" ListadoUsosCASA="listadoHerramientaEstadisticaUsos"></HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaHerraCASATab>
</CascadingValue>
</div>
</Content>
</Tab>
<Tab Title="Estadisticas Licitaciones Edificación">
<Content>
<div class="CajaTab p-2">
<CascadingValue Value="this">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaLiciCASATab ListadoLiciCASA="@listadoLicitacionesEstadistica" ListadoUsosLicitacion="listadoLicitacionUsos"></HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaLiciCASATab>
</CascadingValue>
</div>
</Content>
</Tab>
<Tab Title="Estadisticas CASA - Urbanismo">
<Content>
<div class="CajaTab p-2">
<CascadingValue Value="this">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaHerraURBANTab ListadoHerraURBAN="@listadoHerramientaEstadisticaUrban"></HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaHerraURBANTab>
</CascadingValue>
</div>
</Content>
</Tab>
<Tab Title="Estadisticas Licitación Urbanismo">
<Content>
<div class="CajaTab p-2">
<CascadingValue Value="this">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaLiciURBANTab ListadoLiciURBAN="@listadoLicitacionesEstadisticaUrban"></HerramientaCASA.Components.Pages.ConfiguracionPages.EstadisticasTabs.EstadisticaLiciURBANTab>
</CascadingValue>
</div>
</Content>
</Tab>
</Tabs>
</div>
@code {
public List<estadisticas> listadoHerramientaEstadistica { get; set; } = new List<estadisticas>();
public List<estadisticas> listadoLicitacionesEstadistica { get; set; } = new List<estadisticas>();
public List<estadisticas> listadoHerramientaEstadisticaUrban { get; set; } = new List<estadisticas>();
public List<estadisticas> listadoLicitacionesEstadisticaUrban { get; set; } = new List<estadisticas>();
public List<estadisticasusos> listadoHerramientaEstadisticaUsos { get; set; } = new List<estadisticasusos>();
public List<estadisticasusos> listadoLicitacionUsos { get; set; } = new List<estadisticasusos>();
public List<estadisticasfactores> listadoHerramientaEstadisticaFactores { get; set; } = new List<estadisticasfactores>();
public DateTime? fechaInicio { get; set; } = null;
public DateTime? fechaFinal { get; set; } = null;
public EstadistiaHerraCasaVM estadisticasTotales = new EstadistiaHerraCasaVM();
private int totalProyectosTipo = 0;
private string mensajeError = "";
public tsHerramientasCACOA bd;
List<ToastMessage> mensajes = new List<ToastMessage>();
private async Task OnFechaInicioChanged(DateTime? value)
{
fechaInicio = value;
if (UtilidadesCASA.comprobarFechasNulas(fechaInicio, fechaFinal))
{
if (UtilidadesCASA.comprobarFechas((DateTime)fechaInicio, (DateTime)fechaFinal))
{
inicializarListado();
mensajeError = "";
}
else
{
mensajeError = "La fecha final no puede ser menor que la fecha inicial.";
}
}
else
{
inicializarListado();
mensajeError = "";
}
}
public bool IsVisible(bdHerramientaCACOA.db.estadisticas listado)
{
DateTime? ultimaFecha;
if (listado.idSimulacionNavigation.FechaModificacion != null)
{
ultimaFecha = listado.idSimulacionNavigation.FechaModificacion;
}
else
{
ultimaFecha = listado.idSimulacionNavigation.FechaCreacion;
}
if (fechaFinal != null && listado.idSimulacionNavigation.FechaCreacion.Date >= fechaInicio?.Date && ultimaFecha?.Date <= fechaFinal?.Date)
{
return true;
}
return false;
}
private async Task OnFechaFinalChanged(DateTime? value)
{
fechaFinal = value;
if (UtilidadesCASA.comprobarFechasNulas(fechaInicio, fechaFinal))
{
if (UtilidadesCASA.comprobarFechas((DateTime)fechaInicio, (DateTime)fechaFinal))
{
inicializarListado();
mensajeError = "";
}
else
{
mensajeError = "La fecha final no puede ser menor que la fecha inicial.";
}
}
else
{
inicializarListado();
mensajeError = "";
}
}
public async Task generarExcel(byte[] arrayListados)
{
try
{
bool fechaValida = false;
string nombreExcel = "";
if ((fechaInicio == null && fechaFinal == null) || (UtilidadesCASA.comprobarFechasNulas(fechaInicio, fechaFinal) && UtilidadesCASA.comprobarFechas((DateTime)fechaInicio, (DateTime)fechaFinal)))
{
fechaValida = true;
}
if (fechaValida)
{
if (UtilidadesCASA.comprobarFechasNulas(fechaInicio, fechaFinal))
{
nombreExcel = "Simulaciones_" + (fechaInicio ?? DateTime.Now).Date.ToString() + (fechaFinal ?? DateTime.Now).Date.ToString() + ".xlsx";
}
else
{
nombreExcel = "SimulacionesTotales_" + DateTime.Now.ToString() + ".xlsx";
}
var wb = new XLWorkbook();
wb.Properties.Author = "Tecnosis";
wb.Properties.Title = "Datos entre fechas";
wb.Properties.Subject = "";
var ws = wb.Worksheets.Add("Total datos");
var bytes = arrayListados;
await JS.InvokeVoidAsync("descargarExcel", nombreExcel, Convert.ToBase64String(bytes));
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Descarga completada.",
});
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Fechas incorrectas.",
});
}
}
catch (Exception ex)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al generar el excel.",
});
throw new Exception("Ocurrió un error en la descarga del excel -> " + ex.Message);
}
}
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
inicializarListado();
}
private void inicializarListado()
{
if (fechaInicio == null)
{
listadoHerramientaEstadistica = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 31).ToList();
listadoLicitacionesEstadistica = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 32).ToList();
listadoHerramientaEstadisticaUrban = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 34).ToList();
listadoLicitacionesEstadisticaUrban = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 35).ToList();
}
else
{
var listadoHerraCASA = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 31).ToList();
var listadoLicitacionCASA = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 32).ToList();
listadoHerramientaEstadistica = listadoHerraCASA.Where(x => (x.idSimulacionNavigation.FechaCreacion >= fechaInicio) && (x.idSimulacionNavigation.FechaModificacion ?? x.idSimulacionNavigation.FechaCreacion).Date <= fechaFinal).ToList();
listadoLicitacionesEstadistica = listadoHerraCASA.Where(x => (x.idSimulacionNavigation.FechaCreacion >= fechaInicio) && (x.idSimulacionNavigation.FechaModificacion ?? x.idSimulacionNavigation.FechaCreacion).Date <= fechaFinal).ToList();
var listadoPorTipoURBAN = bd.estadisticas.Include(x => x.idSimulacionNavigation).Where(x => x.idSimulacionNavigation.idTipoSimulacion == 34 || x.idSimulacionNavigation.idTipoSimulacion == 35).ToList();
listadoHerramientaEstadisticaUrban = listadoPorTipoURBAN.Where(x => (x.idSimulacionNavigation.FechaCreacion >= fechaInicio) && (x.idSimulacionNavigation.FechaModificacion ?? x.idSimulacionNavigation.FechaCreacion).Date <= fechaFinal).ToList();
}
listadoHerramientaEstadisticaUsos = bd.estadisticasusos.AsEnumerable().Where(x => listadoHerramientaEstadistica.Any(y => y.idSimulacion == x.idSimulacion)).ToList();
listadoLicitacionUsos = bd.estadisticasusos.AsEnumerable().Where(x => listadoLicitacionesEstadistica.Any(y => y.idSimulacion == x.idSimulacion)).ToList();
listadoHerramientaEstadisticaFactores = bd.estadisticasfactores.AsEnumerable().Where(x => listadoHerramientaEstadistica.Any(y => y.idSimulacion == x.idsimulacion)).ToList();
}
}