@@ -152,6 +157,18 @@
public EstadisticasUrbanVM estadisticasTotales = new EstadisticasUrbanVM();
private int totalProyectosTipo = 0;
+
+ [CascadingParameter]
+ public ConfiguracionPages.EstadisticasConf _Parent { get; set; }
+
+ public tsHerramientasCACOA bd;
+
+
+ protected override async Task OnInitializedAsync()
+ {
+ bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
+ }
+
private void hacerCalculos(List listadoEstadistica)
{
estadisticasTotales.costeDespacho = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraDespachoProf), totalProyectosTipo);
@@ -175,4 +192,11 @@
hacerCalculos(ListadoLiciURBAN);
}
+
+ private async Task generarTablaUrban()
+ {
+ var bytes = UtilidadesCASA.GenerarExcelURBAN(bd, ListadoLiciURBAN, "Licitación URBAN");
+
+ _Parent.generarExcel(bytes);
+ }
}
\ No newline at end of file
diff --git a/HerramientaCASA/UtilidadesCASA.cs b/HerramientaCASA/UtilidadesCASA.cs
index a9f683e..3b1d1bc 100644
--- a/HerramientaCASA/UtilidadesCASA.cs
+++ b/HerramientaCASA/UtilidadesCASA.cs
@@ -3,6 +3,7 @@ using bdHerramientaCACOA.db;
using bdHerramientaCACOA.dbcontext;
using bdHerramientaCACOA.HerramientaURBAN;
using BlazorBootstrap;
+using ClosedXML.Excel;
using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle;
using HerramientaCASA.Components.Pages;
using HerramientaCASA.Components.Pages.HerramientaCASATabs;
@@ -1067,7 +1068,7 @@ namespace HerramientaCASA
return listadoEstadisticaFactoresExcel;
}
- public static List rellenarListadoURBAN(tsHerramientasCACOA bd, List listadoEstadisticaUrban)
+ public static List rellenarListadoURBAN(List listadoEstadisticaUrban)
{
List listadoEstadisticasUrbanExcel = new List();
@@ -1113,5 +1114,378 @@ namespace HerramientaCASA
return semanas;
}
+
+
+ public static byte[] GenerarExcelCasa(
+ tsHerramientasCACOA bd,
+ List listadoHerramientaEstadistica,
+ List listadoHerramientaEstadisticaUsos,
+ List listadoHerramientaEstadisticaFactores)
+ {
+ using var wb = new XLWorkbook();
+ IXLWorksheet ws ;
+ string tituloExcel = "Herramienta CASA";
+
+ if (listadoHerramientaEstadisticaFactores == null)
+ {
+ tituloExcel = "Licitación CASA";
+ ws = wb.Worksheets.Add("Licitación CASA");
+ }
+ else
+ {
+ ws = wb.Worksheets.Add("Herramienta CASA");
+ }
+
+ var tablaPrincipal = generarTablaPrincipal(ws, listadoHerramientaEstadistica, tituloExcel);
+
+ int filaSiguiente = tablaPrincipal.RangeAddress.LastAddress.RowNumber + 5;
+
+ int ultimaFilaUso = generarTablaUsos(bd,ws, filaSiguiente, listadoHerramientaEstadisticaUsos);
+ ultimaFilaUso += 5;
+
+ if (listadoHerramientaEstadisticaFactores != null)
+ {
+ generarTablaFactores(bd, ws, ultimaFilaUso, listadoHerramientaEstadisticaFactores);
+ }
+
+ using var ms = new MemoryStream();
+ wb.SaveAs(ms);
+ return ms.ToArray();
+ }
+
+ private static IXLTable? generarTablaPrincipal(IXLWorksheet? ws, List listadoHerramientaEstadistica, string tituloExcel)
+ {
+ var datos = UtilidadesCASA.rellenarListadoCASA(listadoHerramientaEstadistica);
+
+ // INTRODUCIR DATOS PARA LA TABLA
+ var table = ws.Cell("B4").InsertTable(datos);
+
+ // OBTENER TAMAÑO DE LA TABLA
+ var firstCol = table.RangeAddress.FirstAddress.ColumnNumber;
+ var lastCol = table.RangeAddress.LastAddress.ColumnNumber;
+ var firstRow = table.RangeAddress.FirstAddress.RowNumber;
+ var lastRow = table.RangeAddress.LastAddress.RowNumber;
+
+ // AUMENTAMOS EL TAMAÑO DEL HEADER UN POCO
+ int filaHeader = table.HeadersRow().RowNumber();
+ ws.Row(filaHeader).Height += 20;
+
+ // OBTENER PRIMERA FILA DE LA TABLA PARA PONER EL TITULO ARRIBA
+ int filaTabla = table.FirstRow().RowNumber();
+
+ // PONER EL TITULO EN LA FILA DE ARRIBA
+ int filaTitulo = filaTabla - 1;
+
+ // SE ESCRIBE EL TITULO
+ ws.Cell(filaTitulo, 2).Value = tituloExcel;
+
+ // SE UNE LAS COLUMNAS
+ ws.Range(filaTitulo, 2, filaTitulo, table.ColumnCount()).Merge();
+
+ // SE LE PONE UN FORMATO
+ var rangoTitulo = ws.Range(filaTitulo, 2, filaTitulo, table.ColumnCount());
+ rangoTitulo.Merge();
+ rangoTitulo.Style.Font.Bold = true;
+ rangoTitulo.Style.Font.FontSize = 14;
+ rangoTitulo.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ ws.Row(filaTitulo).Height = 25;
+
+
+ // LE PONEMOS FORMATO AL HEADER
+ var headerRange = ws.Range(filaHeader, firstCol, filaHeader, lastCol);
+ headerRange.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ headerRange.Style.Font.Bold = true;
+ headerRange.Style.Font.FontColor = XLColor.White;
+ headerRange.Style.Fill.BackgroundColor = XLColor.FromHtml("#156082");
+
+ // CENTRAR LOS DATOS
+ var dataRange = ws.Range(firstRow, firstCol, lastRow, lastCol);
+ dataRange.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+
+ // AJUSTAMOS LA TABLA
+ ws.Columns(firstCol, lastCol).AdjustToContents();
+
+ // SE PONE EL TITULO DE LOS HEADERS
+ table.Field(nameof(EstadistiaHerraCasaVM.idSimulacion)).Name = "Id Simulación";
+ table.Field(nameof(EstadistiaHerraCasaVM.numeroTrabajadores)).Name = "Total trabajadores";
+ table.Field(nameof(EstadistiaHerraCasaVM.costeAnualTotal)).Name = "Coste anual total";
+ table.Field(nameof(EstadistiaHerraCasaVM.horasProduccion)).Name = "Horas de producción";
+ table.Field(nameof(EstadistiaHerraCasaVM.costesDirectos)).Name = "Costes directos";
+ table.Field(nameof(EstadistiaHerraCasaVM.costesIndirectos)).Name = "Coste indirectos";
+ table.Field(nameof(EstadistiaHerraCasaVM.costesVariables)).Name = "Coste variables";
+ table.Field(nameof(EstadistiaHerraCasaVM.costeDespacho)).Name = "Coste despacho";
+ table.Field(nameof(EstadistiaHerraCasaVM.totalSuperficie)).Name = "Total superficie";
+ table.Field(nameof(EstadistiaHerraCasaVM.porcentajeFases)).Name = "% fases";
+
+ table.Field(nameof(EstadistiaHerraCasaVM.horasDocumentacion)).Name = "Horas documentación";
+ table.Field(nameof(EstadistiaHerraCasaVM.horasDireccionObra)).Name = "Horas dirección obra";
+ table.Field(nameof(EstadistiaHerraCasaVM.horasTrabajo)).Name = "Horas trabajo";
+ table.Field(nameof(EstadistiaHerraCasaVM.porcentajeExternalizacion)).Name = "% external.";
+ table.Field(nameof(EstadistiaHerraCasaVM.plazoPresentacion)).Name = "Plazo presentación";
+ table.Field(nameof(EstadistiaHerraCasaVM.costeProduccion)).Name = "Coste de producción";
+ table.Field(nameof(EstadistiaHerraCasaVM.beneficio)).Name = "Beneficio";
+ table.Field(nameof(EstadistiaHerraCasaVM.precioTrabajo)).Name = "Precio trabajo";
+ table.Field(nameof(EstadistiaHerraCasaVM.totalOtrosTrabajos)).Name = "Total otros trabajos";
+ table.Field(nameof(EstadistiaHerraCasaVM.precioEncargo)).Name = "Precio encargo";
+
+ return table;
+ }
+
+ private static int generarTablaUsos(tsHerramientasCACOA bd, IXLWorksheet ws, int filaValida, List listadoHerramientaEstadisticaUsos)
+ {
+ var listaUsos = UtilidadesCASA.rellenarListadoUsos(bd, listadoHerramientaEstadisticaUsos);
+
+ // SE AGRUPA POR IDSIMULACION PARA SEPARAR LOS DATOS POR SIMULACION
+ var simulacion = listaUsos.GroupBy(x => x.idSimulacion);
+
+ int fila = filaValida;
+
+ ws.Cell(fila, 2).Value = "Id Simulación";
+ ws.Cell(fila, 3).Value = "Superficie";
+ ws.Cell(fila, 4).Value = "Uso";
+ ws.Cell(fila, 5).Value = "Tipología";
+ ws.Cell(fila, 6).Value = "Intervención";
+
+
+ // SE PONE EL FORMATO DEL HEADER
+ var headerRange = ws.Range(fila, 2, fila, 6);
+
+ headerRange.Style.Fill.BackgroundColor = XLColor.FromHtml("#156082");
+ headerRange.Style.Font.Bold = true;
+ headerRange.Style.Font.FontColor = XLColor.White;
+
+ headerRange.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+ headerRange.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+
+ ws.Row(fila).Height += 20;
+
+
+
+ // SE PONE EL TITULO ARRIBA DE LA TABLA
+ int filaTitulo = filaValida - 1;
+
+ ws.Cell(filaTitulo, 2).Value = "Usos";
+ var rangoTitulo = ws.Range(filaTitulo, 2, filaTitulo, 6);
+ rangoTitulo.Merge();
+ rangoTitulo.Style.Font.Bold = true;
+ rangoTitulo.Style.Font.FontSize = 14;
+ rangoTitulo.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ ws.Row(filaTitulo).Height = 25;
+
+
+ fila++;
+
+ // SE CREA LA TABLA RECORRIENDO EL LISTADO
+ foreach (var grupo in simulacion)
+ {
+ // SE PONE CADA COLUMNA
+ foreach (var item in grupo)
+ {
+ ws.Cell(fila, 2).Value = item.idSimulacion;
+ ws.Cell(fila, 3).Value = item.superficie;
+ ws.Cell(fila, 4).Value = item.uso;
+ ws.Cell(fila, 5).Value = item.tipologia;
+ ws.Cell(fila, 6).Value = item.intervencion;
+
+ // SE CENTRA LOS DATOS
+ ws.Range(fila, 2, fila, 6).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+ ws.Range(fila, 2, fila, 6).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+
+ fila++;
+ }
+
+ // FILA DE TOTALES POR CADA SIMULACION
+ ws.Cell(fila, 2).Value = $"Total superficie de simulación: {grupo.Key}";
+
+ // SE SUMA EL TOTAL DE SUPERFICIE Y SE PONE UN FORMATO
+ ws.Cell(fila, 3).Value = grupo.Sum(x => x.superficie);
+ ws.Range(fila, 2, fila, 6).Style.Font.Bold = true;
+ ws.Range(fila, 2, fila, 6).Style.Fill.BackgroundColor = XLColor.LightGray;
+
+ fila++;
+ }
+
+ // AJSUTAR COLUMNAS
+ ws.Columns().AdjustToContents();
+
+ return fila;
+ }
+
+ private static int generarTablaFactores(tsHerramientasCACOA bd, IXLWorksheet ws, int filaValida, List listadoHerramientaEstadisticaFactores)
+ {
+ var listaUsos = UtilidadesCASA.rellenarListadoFactores(bd, listadoHerramientaEstadisticaFactores);
+
+ // SE AGRUPA POR EL IDSIMULACION PARA DIVIDIR POR SIMULACION
+ var simulacion = listaUsos.GroupBy(x => x.idSimulacion);
+
+ int fila = filaValida;
+
+ ws.Cell(fila, 2).Value = "Id Simulación";
+ ws.Cell(fila, 3).Value = "Nombre";
+ ws.Cell(fila, 4).Value = "Coeficiente";
+ ws.Cell(fila, 5).Value = "Tipo";
+
+
+ // SE PONE UN FORMATO PARA EL HEADER
+ var headerRange = ws.Range(fila, 2, fila, 5);
+
+ headerRange.Style.Fill.BackgroundColor = XLColor.FromHtml("#156082");
+ headerRange.Style.Font.Bold = true;
+ headerRange.Style.Font.FontColor = XLColor.White;
+
+ headerRange.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+ headerRange.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+
+ ws.Row(fila).Height += 20;
+
+
+ // SE PONE EL TITULO
+
+ int filaTitulo = filaValida - 1;
+
+ ws.Cell(filaTitulo, 2).Value = "Factores";
+ var rangoTitulo = ws.Range(filaTitulo, 2, filaTitulo, 5);
+ rangoTitulo.Merge();
+ rangoTitulo.Style.Font.Bold = true;
+ rangoTitulo.Style.Font.FontSize = 14;
+ rangoTitulo.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ ws.Row(filaTitulo).Height = 25;
+
+ fila++;
+
+ // RECORREMOS EL LISTADO
+ foreach (var grupo in simulacion)
+ {
+ // SE AGREGA LAS COLUMNAS
+ foreach (var item in grupo)
+ {
+ ws.Cell(fila, 2).Value = item.idSimulacion;
+ ws.Cell(fila, 3).Value = item.nombre;
+ ws.Cell(fila, 4).Value = item.coeficiente;
+ ws.Cell(fila, 5).Value = item.tipo;
+
+ ws.Range(fila, 2, fila, 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+ ws.Range(fila, 2, fila, 5).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+
+ fila++;
+ }
+
+ // FILA TOTAL PARA DIVIDIR
+ ws.Cell(fila, 2).Value = $"";
+ ws.Range(fila, 2, fila, 5).Style.Font.Bold = true;
+ ws.Range(fila, 2, fila, 5).Style.Fill.BackgroundColor = XLColor.LightGray;
+
+ fila++;
+ }
+
+ // AJUSTAMOS COLUMNAS
+ ws.Columns().AdjustToContents();
+
+ return fila;
+ }
+
+
+
+
+
+
+
+ public static byte[] GenerarExcelURBAN(tsHerramientasCACOA bd, List listadoUrbanEstadistica, string tipoHerramienta)
+ {
+ using var wb = new XLWorkbook();
+ IXLWorksheet ws;
+ string tituloExcel = tipoHerramienta;
+ ws = wb.Worksheets.Add(tipoHerramienta);
+
+ crearTablaURBAN( ws,listadoUrbanEstadistica, tipoHerramienta);
+
+ using var ms = new MemoryStream();
+ wb.SaveAs(ms);
+ return ms.ToArray();
+ }
+
+
+
+
+
+ private static IXLTable? crearTablaURBAN(IXLWorksheet? ws, List listadoHerramientaEstadisticaUrban, string tituloExcel)
+ {
+ var datos = UtilidadesCASA.rellenarListadoURBAN(listadoHerramientaEstadisticaUrban);
+
+ // INTRODUCIR DATOS PARA LA TABLA
+ var table = ws.Cell("B4").InsertTable(datos);
+
+ // OBTENER TAMAÑO DE LA TABLA
+ var firstCol = table.RangeAddress.FirstAddress.ColumnNumber;
+ var lastCol = table.RangeAddress.LastAddress.ColumnNumber;
+ var firstRow = table.RangeAddress.FirstAddress.RowNumber;
+ var lastRow = table.RangeAddress.LastAddress.RowNumber;
+
+ // AUMENTAMOS EL TAMAÑO DEL HEADER UN POCO
+ int filaHeader = table.HeadersRow().RowNumber();
+ ws.Row(filaHeader).Height += 20;
+
+ // OBTENER PRIMERA FILA DE LA TABLA PARA PONER EL TITULO ARRIBA
+ int filaTabla = table.FirstRow().RowNumber();
+
+ // PONER EL TITULO EN LA FILA DE ARRIBA
+ int filaTitulo = filaTabla - 1;
+
+ // SE ESCRIBE EL TITULO
+ ws.Cell(filaTitulo, 2).Value = tituloExcel;
+
+ // SE UNE LAS COLUMNAS
+ ws.Range(filaTitulo, 2, filaTitulo, table.ColumnCount()).Merge();
+
+ // SE LE PONE UN FORMATO
+ var rangoTitulo = ws.Range(filaTitulo, 2, filaTitulo, table.ColumnCount());
+ rangoTitulo.Merge();
+ rangoTitulo.Style.Font.Bold = true;
+ rangoTitulo.Style.Font.FontSize = 14;
+ rangoTitulo.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ ws.Row(filaTitulo).Height = 25;
+
+
+ // LE PONEMOS FORMATO AL HEADER
+ var headerRange = ws.Range(filaHeader, firstCol, filaHeader, lastCol);
+ headerRange.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+ headerRange.Style.Font.Bold = true;
+ headerRange.Style.Font.FontColor = XLColor.White;
+ headerRange.Style.Fill.BackgroundColor = XLColor.FromHtml("#156082");
+
+ // CENTRAR LOS DATOS
+ var dataRange = ws.Range(firstRow, firstCol, lastRow, lastCol);
+ dataRange.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
+
+ // AJUSTAMOS LA TABLA
+ ws.Columns(firstCol, lastCol).AdjustToContents();
+
+ // SE PONE EL NOMBRE AL HEADER
+ table.Field(nameof(EstadisticasUrbanVM.idSimulacion)).Name = "Id Simulación";
+ table.Field(nameof(EstadisticasUrbanVM.numeroTrabajadores)).Name = "Total trabajadores";
+ table.Field(nameof(EstadisticasUrbanVM.costeAnualTotal)).Name = "Coste anual total";
+ table.Field(nameof(EstadisticasUrbanVM.horasProduccion)).Name = "Horas de producción";
+ table.Field(nameof(EstadisticasUrbanVM.costesDirectos)).Name = "Costes directos";
+ table.Field(nameof(EstadisticasUrbanVM.costesIndirectos)).Name = "Coste indirectos";
+ table.Field(nameof(EstadisticasUrbanVM.costesVariables)).Name = "Coste variables";
+ table.Field(nameof(EstadisticasUrbanVM.costeDespacho)).Name = "Coste despacho";
+ table.Field(nameof(EstadisticasUrbanVM.tipoDocumento)).Name = "Tipo de documento";
+ table.Field(nameof(EstadisticasUrbanVM.documento)).Name = "Documento";
+ table.Field(nameof(EstadisticasUrbanVM.dato1)).Name = "Dato 1";
+ table.Field(nameof(EstadisticasUrbanVM.dato2)).Name = "Dato 2";
+ table.Field(nameof(EstadisticasUrbanVM.dato3)).Name = "Dato 3";
+ table.Field(nameof(EstadisticasUrbanVM.porcentajeFases)).Name = "Fases";
+ table.Field(nameof(EstadisticasUrbanVM.innovacion)).Name = "Innovación";
+ table.Field(nameof(EstadisticasUrbanVM.horasTrabajo)).Name = "Horas trabajo";
+ table.Field(nameof(EstadisticasUrbanVM.porcentajeExternalizacion)).Name = "% external.";
+ table.Field(nameof(EstadisticasUrbanVM.costeExternalizacion)).Name = "Coste externalización";
+ table.Field(nameof(EstadisticasUrbanVM.plazoPresentacion)).Name = "Plazo presentación";
+ table.Field(nameof(EstadisticasUrbanVM.costeProduccion)).Name = "Coste de producción";
+ table.Field(nameof(EstadisticasUrbanVM.beneficio)).Name = "Beneficio";
+ table.Field(nameof(EstadisticasUrbanVM.precioTrabajo)).Name = "Precio trabajo";
+
+ return table;
+ }
+
}
}