diff --git a/HerramientaCASA/Components/Pages/HerramientaCASAS.razor b/HerramientaCASA/Components/Pages/HerramientaCASAS.razor index 99de229..48632f7 100644 --- a/HerramientaCASA/Components/Pages/HerramientaCASAS.razor +++ b/HerramientaCASA/Components/Pages/HerramientaCASAS.razor @@ -48,7 +48,7 @@ Nombre de la simulación: - + diff --git a/HerramientaCASA/Components/Pages/HerramientaCASATabs/CostesProduccionComponents/HorasCostes.razor b/HerramientaCASA/Components/Pages/HerramientaCASATabs/CostesProduccionComponents/HorasCostes.razor index bdadb01..bda0d5b 100644 --- a/HerramientaCASA/Components/Pages/HerramientaCASATabs/CostesProduccionComponents/HorasCostes.razor +++ b/HerramientaCASA/Components/Pages/HerramientaCASATabs/CostesProduccionComponents/HorasCostes.razor @@ -12,7 +12,7 @@ @bind-Value="objetoCASA.CostesProduccion.PlazoPresentacionDocumentos" step="any" @oninput="e => controlarMeses(e.Value?.ToString())" - class="inputForm formatoMoneda inputTabla text-end" /> + class="inputForm formatoMoneda inputTabla text-end" /> meses @@ -113,8 +113,7 @@ - HORAS TRABAJO PROFESIONAL - @objetoCASA.TrabajoProfesional.HorasTPE.MilesYDecimales() h + Horas trabajo profesional @objetoCASA.TrabajoProfesional.TotalHorasTPE.MilesYDecimales() h diff --git a/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesional.razor b/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesional.razor index a9aa833..9c49b9c 100644 --- a/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesional.razor +++ b/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesional.razor @@ -86,8 +86,8 @@ public async void calcularModificarHora() { - ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion; - ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion; + // ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion; + // ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion; objetoCASA.CalcularHorasTPEManual(objetoCASA.TrabajoProfesional.HorasTPEDocumentacion, objetoCASA.TrabajoProfesional.HorasTPEDireccion); horasTPEOriginal = objetoCASA.TrabajoProfesional.HorasTPE; @@ -98,7 +98,7 @@ public void restablecerHoras() { objetoCASA.TrabajoProfesional.HorasTPEDocumentacion= ultimaHoraDocumentacion; - objetoCASA.TrabajoProfesional.HorasTPEDireccion = ultimaHoraObra; + objetoCASA.TrabajoProfesional.HorasTPEDireccion = ultimaHoraObra; objetoCASA.CalcularHorasTPEManual(objetoCASA.TrabajoProfesional.HorasTPEDocumentacion, objetoCASA.TrabajoProfesional.HorasTPEDireccion); horasTPEOriginal = objetoCASA.TrabajoProfesional.HorasTPE; diff --git a/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesionalComponents/FasesTrabajoProfesionalGrid.razor b/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesionalComponents/FasesTrabajoProfesionalGrid.razor index bd75dd7..40aa57d 100644 --- a/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesionalComponents/FasesTrabajoProfesionalGrid.razor +++ b/HerramientaCASA/Components/Pages/HerramientaCASATabs/TrabajoProfesionalComponents/FasesTrabajoProfesionalGrid.razor @@ -111,6 +111,7 @@ else { objetoCASA.ActualizarFaseCalculo(_Parent.horasTPEOriginal); + _Parent.calcularModificarHora(); } await InvokeAsync(StateHasChanged); @@ -167,6 +168,7 @@ // if (objetoCASA.TrabajoProfesional.HorasTPE != 0 && objetoCASA.TrabajoProfesional.HorasTPEDocumentacion != 0 && objetoCASA.TrabajoProfesional.HorasTPEDireccion != 0) // { // } + // _Parent.calcularModificarHora(); _Parent.restablecerHoras(); } diff --git a/HerramientaCASA/Components/Pages/HerramientaURBAN.razor b/HerramientaCASA/Components/Pages/HerramientaURBAN.razor index b7f324e..54cd1b9 100644 --- a/HerramientaCASA/Components/Pages/HerramientaURBAN.razor +++ b/HerramientaCASA/Components/Pages/HerramientaURBAN.razor @@ -7,7 +7,9 @@ @using bdHerramientaCACOA.HerramientaURBAN @using bdHerramientaCACOA.db @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage +@using PuppeteerSharp @inject ProtectedLocalStorage ProtectedLocalStore +@inject IJSRuntime JS @rendermode InteractiveServer @inject NavigationManager Navigation @@ -48,7 +50,7 @@ Nombre de la simulación: - + @@ -76,6 +78,9 @@ +
+ +
@code { [Parameter] public string? idSimulador { get; set; } = ""; @@ -90,6 +95,7 @@ List mensajes = new List(); string nombreOriginal = ""; + private string pdfUrl; private int idUser = 0; @@ -250,4 +256,67 @@ { await popupGuardar.HideAsync(); } + 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 diff --git a/HerramientaCASA/Components/Pages/HerramientaURBANTabs/TrabajoProfURBAN/DocumentosURBAN.razor b/HerramientaCASA/Components/Pages/HerramientaURBANTabs/TrabajoProfURBAN/DocumentosURBAN.razor index 97166d0..5ef30e3 100644 --- a/HerramientaCASA/Components/Pages/HerramientaURBANTabs/TrabajoProfURBAN/DocumentosURBAN.razor +++ b/HerramientaCASA/Components/Pages/HerramientaURBANTabs/TrabajoProfURBAN/DocumentosURBAN.razor @@ -26,6 +26,7 @@ +
diff --git a/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor b/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor new file mode 100644 index 0000000..7ae5702 --- /dev/null +++ b/HerramientaCASA/Components/Pages/Imprimir/HerramientaURBANImprimir.razor @@ -0,0 +1,382 @@ +@using System.Globalization +@using bdHerramientaCACOA.HerramientaURBAN +
+ @* DESPACHO URBAN*@ +
+
+ +
+
+
+ Coste hora Despacho Profesional +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tipo de costesCoste/hora
Costes directos@objetoURBAN.DespachoProfesional.CostesDirectos.MilesYDecimales() €/hora
Costes indirectos@objetoURBAN.DespachoProfesional.TasaCostesIndirectos.MilesYDecimales() €/hora
Costes variables@objetoURBAN.CostesProduccion.CostesVariables.MilesYDecimales() €/hora
+
+ Total Coste hora Despacho Profesional: @objetoURBAN.CostesProduccion.TotalCostes.MilesYDecimales() €/hora +
+
+
+ +
+
+ +
+ Coste hora Externalización +
+
+ + + + + + + + + + + + + + + + + + +
ExternalizaciónPorcentaje
Incremento por externalización + + @objetoURBAN.CostesProduccion.CoeficienteCostesExternalizacion % + +
+ Coste hora Externalización: @objetoURBAN.CostesProduccion.CosteHoraExternalizacion.MilesYDecimales() €/hora +
+
+ +
+
+ @* TRABAJAO PROFESIONAL *@ +
+
+ +
+
+
+ + +
+
+ + @if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0) + { + + } +
+
+ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ +
+ @* TABLA DE DATOS MINIMOS *@ + +
+ Documentación Mínima: +
+
+ + + + + + + + @foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionMinima) + { + + + + } + +
Descripción
@item.Descripcion
+
+ + @* TABLA DE DATOS OPCIONALES *@ + +
+ Documentación Opcional: +
+
+ + + + + + + + + @foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionOpcional) + { + + + + + } + +
DescripciónAñadida
@item.Descripcion@item.Checkeada
+
+
+ @* TABLA DE DATOS NECESARIOS *@ +
+
+ Datos Necesarios: +
+
+ + + + + + + + + @foreach (var item in objetoURBAN.TrabajoProfesional.DatosNecesarios) + { + + + + + } + +
DescripciónValor
@item.Descripcion@item.ValorNecesario
+
+
+
+
+ Datos Necesarios: +
+
+ + + + + + + + + @foreach (var item in objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional) + { + + + + + } + + + + + + + +
Descripción
@item.Denominacion@item.Porcentaje %
+ +
+
+ @if (objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) != 100) + { +
+ Trabajo en misión parcial: @objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) % +
+ } + else + { +
+ Total: @objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) % +
+ } +
+
+ +
+
+
+ +
+ + @* INNOVACIÓN INSTRUMENTOS*@ +
+
+
Innovacion de los instrumentos
+

+ +

+ + @foreach (var enu in objetoURBAN.Enumerados.ListaInstrumentos) + { +
+ @if (enu.Seleccionado) + { + poner circlo relleno + } + else + { + poner circlo vacio + + } + +
+ } + + + + + +
HORAS TRABAJO PROFESIONAL URBANISMO: @objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h
+ +
+ + +
+ + @* PLAZOS Y HORAS *@ +
+
+
+ + + + + +
Plazo de presentación de la documentación: +
+ @objetoURBAN.CostesProduccion.PlazoPresentacionDocumentosmeses +
+
+ +
+
+
+ Trabajo profesional +
+ + + + + + + + + + + + + + + + + + + + + + + +
TrabajosHoras
Horas en despacho profesional@objetoURBAN.CostesProduccion.HorasEnPlazo.MilesYDecimales() h
Horas mediante externalización@objetoURBAN.CostesProduccion.NumHorasMinimoExt.MilesYDecimales() h
+ Total horas del trabajo profesional: @((objetoURBAN.CostesProduccion.HorasEnPlazo + objetoURBAN.CostesProduccion.NumHorasMinimoExt).MilesYDecimales()) h +
+
+
+ +
+ + @* COSTE DE PRODUCCIÓN *@ +
+
+ +
+
+
+ Costes Asociados a los Servicios de Arquitectura +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Concepto
COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL @objetoURBAN.CostesProduccion.CostesProduccionTrabProf.MilesYDecimales() €
Beneficio (antes de impuestos) +
+ % +
+
+ Precio del trabajo profesional: @objetoURBAN.CostesProduccion.PrecioTrabajoProfesional.MilesYDecimales() € +
+
+
+ + +
+ + + +@code { + + [Parameter] + public URBAN objetoURBAN { get; set; } = new URBAN(); + + public tsHerramientasCACOA bd; + + protected override async Task OnInitializedAsync() + { + bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); + } + public void RefreshState() + { + this.StateHasChanged(); + } + +} diff --git a/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor index 8c01fb3..77012bf 100644 --- a/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor +++ b/HerramientaCASA/Components/Pages/Imprimir/LicitacionesCASAImprimir.razor @@ -1,49 +1,49 @@ 
-
-
- +
+
+ +
+
+
+ Usos/Tipologías
-
-
- Usos/Tipologías -
-
+
- - - - - - - - - - +
SuperficieUsosTipologíaIntervención
+ + + + + + + + + - @foreach (var uso in objetoLicitaciones.Usos) - { - - - - - - - } - - - - - - -
SuperficieUsosTipologíaIntervención
@uso.superficie.MilesYDecimales()@objetoLicitaciones.Enumerados.GruposTipologias?.FirstOrDefault(x => x.idEnumeracion == uso.idGrupoTipologia)?.ValorAlfabetico1@objetoLicitaciones.Enumerados.Tipologias?.FirstOrDefault(x => x.idTipologia == uso.idTipologia)?.Descripcion@objetoLicitaciones.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1
-
- Total superficie: @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales() -
-
-
+ @foreach (var uso in objetoLicitaciones.Usos) + { + + @uso.superficie.MilesYDecimales() + @objetoLicitaciones.Enumerados.GruposTipologias?.FirstOrDefault(x => x.idEnumeracion == uso.idGrupoTipologia)?.ValorAlfabetico1 + @objetoLicitaciones.Enumerados.Tipologias?.FirstOrDefault(x => x.idTipologia == uso.idTipologia)?.Descripcion + @objetoLicitaciones.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1 + + } + + + + +
+ Total superficie: @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales() +
+ + + + +
-
+
Fases @@ -63,13 +63,13 @@ @foreach (var fase in objetoLicitaciones.FasesTrabajo) { - @fase.Denominacion + @fase.Denominacion
@fase.Porcentaje @if (fase.Seleccionado) { - poner tick + poner check }
@@ -82,8 +82,8 @@
@if (objetoLicitaciones.FasesTrabajo - .Where(f => f.Seleccionado) - .Sum(f => f.Porcentaje) != 100) + .Where(f => f.Seleccionado) + .Sum(f => f.Porcentaje) != 100) {
Trabajo en misión parcial: @@ -108,7 +108,64 @@
+
+
+ Costes de producción +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concepto
Plazo de presentación de la documentación@objetoLicitaciones.PlazoPresentacionDocumentos
Coste hora de producción@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h
Horas trabajo profesional@objetoLicitaciones.horasProduccion.MilesYDecimales() h
COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() €
+ G.G. + B.I. + (40/19 Junta Consultiva de Contratación Pública del Estado) + +
+ @objetoLicitaciones.Beneficio % +
+
+ Precio del trabajo profesional: @objetoLicitaciones.PrecioTrabProf.MilesYDecimales() € +
+
+ +
diff --git a/HerramientaCASA/Components/Pages/LicitacionUrban/CostesLicitacionUrban.razor b/HerramientaCASA/Components/Pages/LicitacionUrban/CostesLicitacionUrban.razor index 9d19168..1f6fb86 100644 --- a/HerramientaCASA/Components/Pages/LicitacionUrban/CostesLicitacionUrban.razor +++ b/HerramientaCASA/Components/Pages/LicitacionUrban/CostesLicitacionUrban.razor @@ -27,16 +27,16 @@ - Coste de producción del Trabajo Profesional + COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() € - + G.G. + B.I.
(40/19 Junta Consultiva de Contratación Pública del Estado) - +
@objetoLicitaciones.Beneficio %
diff --git a/HerramientaCASA/Components/Pages/Licitaciones.razor b/HerramientaCASA/Components/Pages/Licitaciones.razor index 223b512..43cb591 100644 --- a/HerramientaCASA/Components/Pages/Licitaciones.razor +++ b/HerramientaCASA/Components/Pages/Licitaciones.razor @@ -51,7 +51,7 @@ Nombre de la simulación: - +
@@ -406,6 +406,7 @@ + {contenidoHtml} @@ -464,6 +465,7 @@ objetoLicitaciones.EsPorUsos = true; objetoLicitaciones.horasProduccion = 0; objetoLicitaciones.CalcularHorasSuperficie(); + objetoLicitaciones.PrecioDelEncargo = objetoLicitaciones.OtrosTrabajos.Sum(x => x.Coste) + objetoLicitaciones.PrecioTrabProf; await InvokeAsync(StateHasChanged); } private async void modificarHorasChanged(bool res) @@ -472,11 +474,11 @@ // ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion; // ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion; - modificarHoras = res; modificarTabla = !res; objetoLicitaciones.EsPorUsos = false; objetoLicitaciones.CalcularHorasSuperficie(); + objetoLicitaciones.PrecioDelEncargo = objetoLicitaciones.OtrosTrabajos.Sum(x => x.Coste) + objetoLicitaciones.PrecioTrabProf; await InvokeAsync(StateHasChanged); } diff --git a/HerramientaCASA/Components/Pages/LicitacionesGrids/CostesProLicitaciones.razor b/HerramientaCASA/Components/Pages/LicitacionesGrids/CostesProLicitaciones.razor index 366543c..a87a208 100644 --- a/HerramientaCASA/Components/Pages/LicitacionesGrids/CostesProLicitaciones.razor +++ b/HerramientaCASA/Components/Pages/LicitacionesGrids/CostesProLicitaciones.razor @@ -9,13 +9,13 @@ - Concepto + Concepto - + Plazo de presentación de la documentación: @if (objetoLicitaciones.IncrementoUrgencia > 0) { @@ -34,13 +34,13 @@ - Coste hora de producción - @objetoLicitaciones.costeHoraProduccion.MilesYDecimales() h + Coste hora de producción + @objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h - Horas Trabajo profesional + Horas Trabajo profesional @if (objetoLicitaciones.EsPorUsos) { @@ -58,16 +58,16 @@ - Coste de producción del Trabajo Profesional + COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() € - - G.G. + B.I.
+ + G.G. + B.I. (40/19 Junta Consultiva de Contratación Pública del Estado) - +
@objetoLicitaciones.Beneficio %
diff --git a/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor b/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor index 0c99a98..b045445 100644 --- a/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor +++ b/HerramientaCASA/Components/Pages/LicitacionesURBAN.razor @@ -67,7 +67,7 @@
- +
@if (modificarTabla) diff --git a/bdHerramientaCACOA/CASA.cs b/bdHerramientaCACOA/CASA.cs index 5d87184..bc10f5a 100644 --- a/bdHerramientaCACOA/CASA.cs +++ b/bdHerramientaCACOA/CASA.cs @@ -457,6 +457,7 @@ namespace bdHerramientaCACOA TrabajoProfesional.HorasTPEDocumentacion = horasDocu; TrabajoProfesional.HorasTPEDireccion = horasDireccion; TrabajoProfesional.HorasTPE = horasDocu + horasDireccion; + TrabajoProfesional.TotalHorasTPE = horasDocu + horasDireccion; CalcularCostesProduccion(); } public double CalcularHorasTrabajoProfesionalEdificacion() @@ -529,6 +530,7 @@ namespace bdHerramientaCACOA TrabajoProfesional.HorasTPEDocumentacion = CalcularHorasTPEDocumentacion(); TrabajoProfesional.HorasTPEDireccion = CalcularHorasTPEDireccion(); TrabajoProfesional.HorasTPE = TrabajoProfesional.HorasTPEDocumentacion + TrabajoProfesional.HorasTPEDireccion; + TrabajoProfesional.TotalHorasTPE = TrabajoProfesional.HorasTPEDocumentacion + TrabajoProfesional.HorasTPEDireccion; } public double CalcularSuperficieTotal() diff --git a/bdHerramientaCACOA/LICITACIONES.cs b/bdHerramientaCACOA/LICITACIONES.cs index 5456cbb..2d22044 100644 --- a/bdHerramientaCACOA/LICITACIONES.cs +++ b/bdHerramientaCACOA/LICITACIONES.cs @@ -236,11 +236,16 @@ namespace bdHerramientaCACOA { horasProduccion = Math.Round((superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (fasesEncargadas / 100)), 2, MidpointRounding.AwayFromZero); // calcular horas elaboracion documentacion - horasPorcentaje = FasesTrabajo.Where(x => x.Codigo.Contains("ESTPREVIO") || x.Codigo.Contains("ANTEPROYECTO") || x.Codigo.Contains("PROYBASICO") || x.Codigo.Contains("PROYEJEC")).Sum(x => x.Porcentaje); + //horasPorcentaje = FasesTrabajo.Where(x => (x.Codigo.Contains("ESTPREVIO") || x.Codigo.Contains("ANTEPROYECTO") || x.Codigo.Contains("PROYBASICO") || x.Codigo.Contains("PROYEJEC"))).Sum(x => x.Porcentaje); + + // COMPROBAR SI ESTO ESTÁ BIEN, SINO EL COSTE HORA DE PRODUCCIÓN NO CAMBIA + horasPorcentaje = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x => x.Porcentaje); horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (horasPorcentaje / 100), 2, MidpointRounding.AwayFromZero); } else { - horasDocumentacion = horasProduccion; + + // COMPROBAR SI ESTO ESTÁ BIEN, SINO EL COSTE HORA DE PRODUCCIÓN NO CAMBIA Y TAMBIÉN VER SI DEBE CAMBIAR HORAS TRABAJO PROFESIONAL + horasDocumentacion = Math.Round(horasProduccion * (fasesEncargadas / 100), 2, MidpointRounding.AwayFromZero); ; }