From 43a042e1731d1c4d1659764428ba612c1a7d7d00 Mon Sep 17 00:00:00 2001 From: Perea Date: Thu, 21 Aug 2025 14:48:41 +0200 Subject: [PATCH] =?UTF-8?q?TERMINADO=20LA=20PARTE=20DE=20IMPRESI=C3=93N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Imprimir/HerramientaURBANImprimir.razor | 17 +- .../Imprimir/LicitacionesCASAImprimir.razor | 2 +- .../Imprimir/LicitacionesURBANImprimir.razor | 317 ++++++++++++++++++ .../DocumentosLicitacion.razor | 1 - .../Components/Pages/LicitacionesURBAN.razor | 124 +++++-- 5 files changed, 425 insertions(+), 36 deletions(-) create mode 100644 HerramientaCASA/Components/Pages/Imprimir/LicitacionesURBANImprimir.razor diff --git a/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor b/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor index 7ae5702..3966b49 100644 --- a/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor +++ b/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor @@ -84,6 +84,7 @@ + @* TRABAJAO PROFESIONAL *@
@@ -132,6 +133,8 @@
Documentación Opcional:
+ @if (objetoURBAN.TrabajoProfesional.DocumentacionOpcional.Count != 0) + {
@@ -150,7 +153,12 @@ }
-
+
+ } + else + { + + }
@* TABLA DE DATOS NECESARIOS *@
@@ -281,7 +289,7 @@
-
+
Trabajo profesional
@@ -321,7 +329,7 @@
-
+
Costes Asociados a los Servicios de Arquitectura
@@ -358,13 +366,11 @@ - @code { - [Parameter] public URBAN objetoURBAN { get; set; } = new URBAN(); @@ -378,5 +384,4 @@ { this.StateHasChanged(); } - } diff --git a/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor index 77012bf..9109913 100644 --- a/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor +++ b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor @@ -125,7 +125,7 @@ - + diff --git a/HerramientaCASA/Components/Pages/Imprimir/LicitacionesURBANImprimir.razor b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesURBANImprimir.razor new file mode 100644 index 0000000..1a965ef --- /dev/null +++ b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesURBANImprimir.razor @@ -0,0 +1,317 @@ +@using System.Globalization +
+ @* TRABAJAO PROFESIONAL *@ +
+
+ +
+
+
+ + +
+
+ + @if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0) + { + + } +
+
+ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ +
+ @* TABLA DE DATOS MINIMOS *@ + +
+ Documentación Mínima: +
+
+
Plazo de presentación de la documentación@objetoLicitaciones.PlazoPresentacionDocumentos@objetoLicitaciones.PlazoPresentacionDocumentos meses
+ + + + + + + @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima) + { + + + + } + +
Descripción
@item.Descripcion
+
+ + @* TABLA DE DATOS OPCIONALES *@ + +
+ Documentación Opcional: +
+ @if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0) + { +
+ + + + + + + + + @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional) + { + + + + + } + +
DescripciónAñadida
@item.Descripcion@item.Checkeada
+
+ } + else + { + + } + +
+ @* TABLA DE DATOS NECESARIOS *@ +
+
+
+
+ Datos Necesarios: +
+
+ + + + + + + + + @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios) + { + + + + + } + +
DescripciónValor
@item.Descripcion@item.ValorNecesario
+
+
+
+
+
+ +
+ Fases: +
+ + + + + + + + + @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional) + { + + + + + } + + + + + + +
Fases
@item.Denominacion@item.Porcentaje %
+ +
+
+ @if (objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) != 100) + { +
+ Trabajo en misión parcial: @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) % +
+ } + else + { +
+ Total: @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) % +
+ } +
+
+ +
+
+
+
+ + @* INNOVACION INSTRUMENTOS *@ +
+
+
Innovacion de los instrumentos
+

+ +

+ + @foreach (var enu in objetoLicitacionUrban.Enumerados.ListaInstrumentos) + { +
+ @if (enu.Seleccionado) + { + poner circlo relleno + } + else + { + poner circlo vacio + + } + +
+ } +
+ + +
+ + + + @* Costes de producción *@ +
+
+ +
+ @* Solvencia tecnica *@ +
+
+ Solvencia técnica: +
+ +
+ + + + + + + + + + + + @foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica) + { + + + + + + } + + + + + + +
TrabajadoresNº TrabajadoresCategoría Profesional
@otroTrabajo.Descripcion@otroTrabajo.Cantidad@otroTrabajo.TipoConvenio
+
+
+ Total trabajadores: + @objetoLicitacionUrban.ListaSolvenciaTecnica.Sum(x => x.Cantidad) +
+
+
+
+
+ @* costes asociados *@ +
+
+ Costes Asociados a los Servicios de Arquitectura: +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concepto
Plazo de presentación de la documentación: +
+ meses +
+
Coste hora de producción @objetoLicitacionUrban.CosteHP.MilesYDecimales() €/hora
Horas Trabajo Profesional + + @objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h + +
Coste de producción del Trabajo Profesional @objetoLicitacionUrban.CostesProduccionTrabProf.MilesYDecimales() €
+ G.G. + B.I.
+ (40/19 Junta Consultiva de Contratación Pública del Estado) +
+
+ @objetoLicitacionUrban.Beneficio % +
+
+ Precio del trabajo profesional: @objetoLicitacionUrban.PrecioDelTrabajo.MilesYDecimales() € +
+ +
+
+ +
+ + +@code { + [Parameter] + public bdHerramientaCACOA.LicitacionesURBAN objetoLicitacionUrban { get; set; } = new bdHerramientaCACOA.LicitacionesURBAN(); + + public tsHerramientasCACOA bd; + + protected override async Task OnInitializedAsync() + { + bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); + } + public void RefreshState() + { + this.StateHasChanged(); + } +} diff --git a/HerramientaCASA/Components/Pages/LicitacionUrban/DocumentosLicitacion.razor b/HerramientaCASA/Components/Pages/LicitacionUrban/DocumentosLicitacion.razor index 5526927..bfed109 100644 --- a/HerramientaCASA/Components/Pages/LicitacionUrban/DocumentosLicitacion.razor +++ b/HerramientaCASA/Components/Pages/LicitacionUrban/DocumentosLicitacion.razor @@ -105,7 +105,6 @@ @* *@ - diff --git a/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor b/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor index b045445..83718c6 100644 --- a/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor +++ b/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor @@ -1,5 +1,4 @@ - -@page "/LicitacionesUrban" +@page "/LicitacionesUrban" @rendermode InteractiveServer @using HerramientaCASA.Components.Pages.LicitacionUrban @using HerramientaCASA.Model @@ -8,6 +7,9 @@ @using bdHerramientaCACOA.HerramientaURBAN @using bdHerramientaCACOA.db @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage +@using PuppeteerSharp +@inject IJSRuntime JS + @inject ProtectedLocalStorage ProtectedLocalStore @inject NavigationManager Navigation @@ -48,7 +50,7 @@ Nombre de la simulación: - +
@@ -74,11 +76,11 @@ {
- - - + + + +
-
}
@@ -125,7 +127,7 @@ @objetoLicitacionUrban.CosteHP.MilesYDecimales() €/hora - Horas Trabajo Profesional + Horas Trabajo Profesional @if (objetoLicitacionUrban.EsPorUsos) { @@ -160,7 +162,7 @@ - + Precio del trabajo profesional: @objetoLicitacionUrban.PrecioDelTrabajo.MilesYDecimales() € @@ -216,6 +218,9 @@
+
+ +
@code { [Parameter] @@ -224,6 +229,7 @@ public string TituloBoton = "Guardar"; private Modal popupGuardar = default!; public bool actualizado = true; + private string pdfUrl; public tsHerramientasCACOA bd; private bdHerramientaCACOA.LicitacionesURBAN objetoLicitacionUrban; @@ -249,7 +255,7 @@ idSimulador = clValue; } - + if (string.IsNullOrEmpty(idSimulador)) { @@ -317,10 +323,10 @@ if (bd.simulaciones.Any(x => x.Descripcion == objetoLicitacionUrban.NombreSimulacion && x.idTipoSimulacion == idtipoSimulacion)) { mensajes.Add(new ToastMessage - { - Type = ToastType.Danger, - Message = $"Ya existe una simulación con el mismo nombre.", - }); + { + Type = ToastType.Danger, + Message = $"Ya existe una simulación con el mismo nombre.", + }); cerrarPopupGuardar(); } else @@ -335,15 +341,15 @@ if (listadoSimulacionesExistentes.Any(x => x.Descripcion == objetoLicitacionUrban.NombreSimulacion)) { mensajes.Add(new ToastMessage - { - Type = ToastType.Danger, - Message = $"Ya existe una simulación con el mismo nombre.", - }); + { + Type = ToastType.Danger, + Message = $"Ya existe una simulación con el mismo nombre.", + }); cerrarPopupGuardar(); } else { - actualizarSimulacion(jsonObjeto); + actualizarSimulacion(jsonObjeto); } } @@ -353,10 +359,10 @@ int idSimulacionCreada = UtilidadesCASA.crearObjeto(bd, HerramientaCASA.UtilidadesCASA.TiposSimulaciones.URBANDSIMP, jsonObjeto, objetoLicitacionUrban.NombreSimulacion, "licitacionesUrban.json", idUser); string link = "/LicitacionesURBAN?idSimulador=" + tsUtilidades.crypt.FEncS(idSimulacionCreada.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); mensajes.Add(new ToastMessage - { - Type = ToastType.Primary, - Message = $"Licitación creada correctamente.", - }); + { + Type = ToastType.Primary, + Message = $"Licitación creada correctamente.", + }); Navigation.NavigateTo(link, true); } @@ -365,10 +371,10 @@ UtilidadesCASA.actualziarObjeto(bd, jsonObjeto, objetoLicitacionUrban.NombreSimulacion, idSimulador); cerrarPopupGuardar(); mensajes.Add(new ToastMessage - { - Type = ToastType.Primary, - Message = $"Licitación actualizada correctamente.", - }); + { + Type = ToastType.Primary, + Message = $"Licitación actualizada correctamente.", + }); } private void clonarUrban() @@ -397,7 +403,7 @@ this.StateHasChanged(); } - + private async void PlazoPresentacionDocumentosCambiado(double e) { objetoLicitacionUrban.PlazoPresentacionDocumentos = e; @@ -459,5 +465,67 @@ // objetoLicitacionUrban.CalcularHorasSuperficie(); await InvokeAsync(StateHasChanged); } + private async Task imprimir() + { + var cssPath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Content", "Site.css"); + var cssContent = await File.ReadAllTextAsync(cssPath); + + var contenidoHtml = await JS.InvokeAsync("obtenerContenidoHtml"); + var fullHtml = $@" + + + + + + + {contenidoHtml} + + "; + + var fileName = $"factura_{DateTime.Now:yyyyMMddHHmmss}.pdf"; + var filePath = Path.Combine("wwwroot", fileName); + + var browserFetcher = new BrowserFetcher(); + await browserFetcher.DownloadAsync(); + + using var browser = await Puppeteer.LaunchAsync(new LaunchOptions + { + Headless = true, + Args = new[] { "--ignore-certificate-errors" } + }); + + using var page = await browser.NewPageAsync(); + + await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 800 }); + + await page.SetContentAsync(fullHtml); + + await page.PdfAsync(filePath, new PdfOptions + { + PrintBackground = true, + Format = PuppeteerSharp.Media.PaperFormat.A4, + MarginOptions = new PuppeteerSharp.Media.MarginOptions + { + Top = "20mm", + Bottom = "20mm" + } + }); + + pdfUrl = "/" + fileName; + + Navigation.NavigateTo(pdfUrl, true); + } + } + + + \ No newline at end of file