Compare commits

...

59 Commits

Author SHA1 Message Date
8255115560 prueba 2025-10-01 17:08:45 +02:00
6349a50151 adas 2025-09-30 10:33:33 +02:00
702c097c32 adasd 2025-09-30 10:00:01 +02:00
71a7f453ee arreglado los pdfs de herramienta y licitacion casa, y herramienta urban, falta licitacion urban 2025-09-30 09:12:05 +02:00
61e55497e3 comentados botones imprimir y descomentado comprobar que solo funcione de la url de cacoa 2025-09-26 12:40:11 +02:00
fe101a5554 qutiado puppeter y probando otra cosa 2025-09-26 11:31:35 +02:00
f740b95a1c Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-25 14:19:50 +02:00
6abb41f398 prueba pdf 2025-09-25 14:19:44 +02:00
f670b16eb6 arreglo login firefox 2025-09-25 14:13:55 +02:00
e5ff734014 estilos 2025-09-25 13:44:35 +02:00
a285563f6c cambios login 2025-09-25 13:35:26 +02:00
c17d8c4cc8 arreglado el reponsive de costes de herramienta casa 2025-09-25 13:29:09 +02:00
9d78928892 check y arreglo main 2025-09-25 13:16:44 +02:00
bb393c803d Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-25 13:13:48 +02:00
a983f7f45e cambiso de la tabla costes de despachos 2025-09-25 13:13:47 +02:00
317c8c1112 arreglo responsive barra guardado 2025-09-25 13:11:02 +02:00
36b5b4c30c cambios menu 2025-09-25 13:01:25 +02:00
8f7b606be0 cambios para el responsive de las tablas documentos en urban 2025-09-25 12:47:42 +02:00
e1d6e4d7c3 arreglado navbar 2025-09-25 12:27:31 +02:00
5f655b6f37 cambios en imprimrir 2025-09-25 11:10:38 +02:00
41d201c3aa Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-25 09:57:35 +02:00
ae43080975 comentado lo que peta 2025-09-25 09:57:27 +02:00
ca50f76e02 cambio check 2025-09-25 09:51:54 +02:00
b5efdb3e9c agregado chromium para el pdf 2025-09-25 09:31:35 +02:00
454e4a317c el check del login funciona 2025-09-25 08:10:08 +02:00
7f33a1ddd8 comentado lo de la url de dodne viene 2025-09-25 08:09:40 +02:00
bc74e0c376 Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-24 14:50:57 +02:00
ddfe628977 agregado comprobar url cacoa (segurametne haya que cambiarlo) 2025-09-24 14:50:55 +02:00
46257d0de4 Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-24 14:28:54 +02:00
09b451624a cambios sergio pre subida 2025-09-24 14:28:29 +02:00
a2dbe693ce cambio user admin 2025-09-24 14:03:06 +02:00
31de59ed81 agregado modificar textos en configuracion 2025-09-24 13:31:59 +02:00
9a562b3373 cambios bd 2025-09-24 11:35:08 +02:00
4b864df8a0 previo acabar 2025-09-24 11:23:21 +02:00
4a98c36b1a termninado dividir los excels 2025-09-23 12:01:02 +02:00
0706572833 puesto las horas en semanas, falta cambiar los excel 2025-09-22 14:34:58 +02:00
4d11042fb1 cambios casi terminados. Falta pasar horas a semanas y poner los excels separados 2025-09-22 13:42:07 +02:00
c9d929c57d acabado la parte de configuracion 2025-09-17 14:31:40 +02:00
d80d2e2dc8 Acabado excel, queda la parte de cofiguracion 2025-09-17 12:09:19 +02:00
029498c540 cambiado por "ultima vez" el módulo de impresión 2025-09-10 10:35:52 +02:00
692d880529 cambiado textos de "ultimas correciones" 2025-09-09 13:33:40 +02:00
8a329314d9 acabado la primera versión de agregar las estadisticas 2025-09-09 13:18:33 +02:00
c1cc98993f agregado puntos de informacion
agregado tabla estadisticas
2025-09-08 14:12:02 +02:00
08f9560b11 agregado puntos info en HerramientaURBAN 2025-09-04 14:56:00 +02:00
2c22dbbbc1 acabado los puntos de informacion de licitacion CASA 2025-09-04 14:32:23 +02:00
bab4e591a1 añadida la nueva tabla y terminado HerramientaCASA de puntos info 2025-09-04 14:21:45 +02:00
be2f55153a Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-04 11:44:47 +02:00
bb5fa8658d arreglado ultimas correciones 2025-09-04 11:44:45 +02:00
70dbd2d3f6 Creacion de funcion tooltip 2025-09-04 11:38:40 +02:00
8f6352b70e agregado CostesVariablesURBAN en conf 2025-09-03 13:57:52 +02:00
666ea2caad Acabado cambios de estética del módulo de
impresión
2025-09-03 13:46:01 +02:00
9e4c01309b cambios en como se ve las horas en herramietna casa y agregado en conf fases urban y arreglado que se duplica 2025-09-02 14:30:29 +02:00
1a8813c65b ultimos cambios pequeños de diseños 2025-09-02 12:23:05 +02:00
bba6d0a741 completado revision de los nombres de las simulaciones 2025-09-02 11:39:18 +02:00
a6b7d1551e completado revisión 13 2025-09-02 11:23:07 +02:00
a3a771108e Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-01 11:55:19 +02:00
74a7bbbe62 Cambios de pdf de imprimir 2025-09-01 11:54:40 +02:00
c02530587a Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-09-01 10:36:03 +02:00
f4559362a3 imprimir arreglado 2025-09-01 10:35:23 +02:00
94 changed files with 6749 additions and 986 deletions

View File

@@ -0,0 +1,23 @@
using System.Reflection;
using System.Runtime.Loader;
namespace HerramientaCASA
{
public class AssemnlyLoadwkhtmltox : AssemblyLoadContext
{
public IntPtr LoadUnmanagedLibrary(string absolutePath)
{
return LoadUnmanagedDll(absolutePath);
}
protected override IntPtr LoadUnmanagedDll(string unmanagedDllPath)
{
return LoadUnmanagedDllFromPath(unmanagedDllPath);
}
protected override Assembly Load(AssemblyName assemblyName)
{
return null;
}
}
}

View File

@@ -18,8 +18,8 @@
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script> <script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
<script src="_framework/blazor.web.js"></script>
<script src="Scripts/Util.js"></script> <script src="Scripts/Util.js"></script>
<script src="_framework/blazor.web.js"></script>
</body> </body>
</html> </html>

View File

@@ -2,9 +2,12 @@
@using BlazorBootstrap; @using BlazorBootstrap;
@using HerramientaCASA.Model @using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<head> <head>
@@ -67,11 +70,17 @@
<NavLink class="nav-link" href="ConvenioColectivo">Convenio Colectivo</NavLink> <NavLink class="nav-link" href="ConvenioColectivo">Convenio Colectivo</NavLink>
</li> </li>
<li id="liMS" class="nav-item"> <li id="liMS" class="nav-item">
<NavLink class="nav-link" href="DocumentosUrban">Documentos URBAN</NavLink> <NavLink class="nav-link" href="DocumentosUrban">Documentos Urbanismo</NavLink>
</li> </li>
<li id="liMS" class="nav-item"> <li id="liMS" class="nav-item">
<NavLink class="nav-link" href="CalculoCDCI">Calculo CD+CI</NavLink> <NavLink class="nav-link" href="CalculoCDCI">Calculo CD+CI</NavLink>
</li> </li>
<li id="liMS" class="nav-item">
<NavLink class="nav-link" href="PuntosInfo">Puntos de información</NavLink>
</li>
<li id="liMS" class="nav-item">
<NavLink class="nav-link" href="Estadisticas">Estadisticas</NavLink>
</li>
<li id="liMS" class="nav-item"> <li id="liMS" class="nav-item">
<NavLink class="nav-link" href="Manuales">Manuales</NavLink> <NavLink class="nav-link" href="Manuales">Manuales</NavLink>
</li> </li>
@@ -99,14 +108,55 @@
@code { @code {
protected override async Task OnInitializedAsync() // protected override async Task OnInitializedAsync()
// {
// // Redirigir al home si no hay token y la ruta no es pública
// if (userState.idUser == 0)
// {
// Navigation.NavigateTo("/", true);
// }
// }
string? urlAnterior = "";
bool urlVaida = true;
string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
var obtenerDatoAdmin = await ProtectedLocalStore.GetAsync<bool>("EsAdmin"); if (firstRender)
var obtenerDatoId = await ProtectedLocalStore.GetAsync<int>("idUsuario"); {
// Redirigir al home si no hay token y la ruta no es pública urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (obtenerDatoId.Value == 0 || !obtenerDatoAdmin.Value)
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es"))
{
Navigation.NavigateTo("/Denegado", true);
}
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
if (userState.idUser == 0)
{ {
Navigation.NavigateTo("/", true); Navigation.NavigateTo("/", true);
} }
StateHasChanged();
}
} }
} }

View File

@@ -3,6 +3,9 @@
@using HerramientaCASA.Model @using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web
@inject UserState UserState @inject UserState UserState
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation
@inject IJSRuntime JS
<head> <head>
@@ -10,7 +13,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.5" rel="stylesheet" /> <link href="Content/Site.css?v=0.62" rel="stylesheet" />
<link href="Content/all.min.css" rel="stylesheet" /> <link href="Content/all.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="Scripts/jquery.min.js"></script> <script src="Scripts/jquery.min.js"></script>
@@ -28,7 +31,7 @@
</head> </head>
<div class="main"> <div class="main" style="position: absolute;width: 100%;top: 0px;">
<div class=""> <div class="">
@Body @Body
</div> </div>
@@ -37,4 +40,43 @@
@code{ @code{
string? urlAnterior = "";
bool urlVaida = true;
string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es") )
{
Navigation.NavigateTo("/Denegado", true);
} }
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
StateHasChanged();
}
}
}

View File

@@ -2,9 +2,12 @@
@using HerramientaCASA.Model @using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web
@inherits LayoutComponentBase @inherits LayoutComponentBase
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<head> <head>
@@ -12,7 +15,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.45" rel="stylesheet" /> <link href="Content/Site.css?v=0.64" rel="stylesheet" />
<link href="Content/all.min.css" rel="stylesheet" /> <link href="Content/all.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="Scripts/jquery.min.js"></script> <script src="Scripts/jquery.min.js"></script>
@@ -31,13 +34,13 @@
<div class="page"> <div class="page">
<main style="height: 100%;"> <main style="height: 100%;">
<header class="d-none d-md-block"> <header class="">
<div class="pa-header-t1"> <div class="pa-header-t1">
<div class="pa-header-row1"> <div class="pa-header-row1">
<nav class="navbar navbar-expand-lg navbar-light fixed-top bg-light navCACOA"> <nav class="navbar navbar-expand-lg navbar-light fixed-top bg-light navCACOA">
<div class="container-fluid"> <div class="container-fluid">
<div> <div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#topMenu" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <button class="navbar-toggler" type="button" onclick="cambiar()">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<a class="navbar-brand" href="https://www.cacoa.es/"> <a class="navbar-brand" href="https://www.cacoa.es/">
@@ -48,19 +51,19 @@
@if (!MostrarExtra) @if (!MostrarExtra)
{ {
<ul class="navbar-nav mr-auto ulMenu"> <ul class="navbar-nav mr-auto ulMenu">
<li id="liPC" class="nav-item"> <li id="liPC" class="nav-item" onclick="cambiar()">
<NavLink class="nav-link headNav" href="PanelControl"><i class="fa-solid fa-house"></i> Menú</NavLink> <NavLink class="nav-link headNav" href="PanelControl"><i class="fa-solid fa-house"></i> Menú</NavLink>
</li> </li>
<li id="liCC" class="nav-item"> <li id="liCC" class="nav-item" onclick="cambiar()">
<NavLink class="@IsActive("HerramientaCASASimulaciones", "herramientacasas")" href="HerramientaCASASimulaciones">CASA Edificación</NavLink> <NavLink class="@IsActive("HerramientaCASASimulaciones", "herramientacasas")" href="HerramientaCASASimulaciones">CASA Edificación</NavLink>
</li> </li>
<li id="liCS" class="nav-item"> <li id="liCS" class="nav-item" onclick="cambiar()">
<NavLink class="@IsActive("LicitacionCASASimulaciones", "LicitacionCASA")" href="LicitacionCASASimulaciones">Licitaciones Edificación</NavLink> <NavLink class="@IsActive("LicitacionCASASimulaciones", "LicitacionCASA")" href="LicitacionCASASimulaciones">Licitaciones Edificación</NavLink>
</li> </li>
<li id="liCS" class="nav-item"> <li id="liCS" class="nav-item" onclick="cambiar()">
<NavLink class="@IsActive("HerramientaURBANSimulaciones", "HerramientaURBAN")" href="HerramientaURBANSimulaciones">CASA Urbanismo</NavLink> <NavLink class="@IsActive("HerramientaURBANSimulaciones", "HerramientaURBAN")" href="HerramientaURBANSimulaciones">CASA Urbanismo</NavLink>
</li> </li>
<li id="liCS" class="nav-item"> <li id="liCS" class="nav-item" onclick="cambiar()">
<NavLink class="@IsActive("LicitacionUrbanSimulaciones", "LicitacionesUrban")" href="LicitacionUrbanSimulaciones">Licitaciones Urbanismo</NavLink> <NavLink class="@IsActive("LicitacionUrbanSimulaciones", "LicitacionesUrban")" href="LicitacionUrbanSimulaciones">Licitaciones Urbanismo</NavLink>
</li> </li>
@* <li id="liCB" class="nav-item"> @* <li id="liCB" class="nav-item">
@@ -77,6 +80,7 @@
<label class="headNav" style="color: #078b98 !important; font-size: large; font-weight: bold;">Costes Asociados a los Servicios de Arquitectura - CASA</label> <label class="headNav" style="color: #078b98 !important; font-size: large; font-weight: bold;">Costes Asociados a los Servicios de Arquitectura - CASA</label>
</div> </div>
} }
</div> </div>
<div class="ml-auto"> <div class="ml-auto">
<ul class="navbar-nav mr-auto ulMenu"> <ul class="navbar-nav mr-auto ulMenu">
@@ -95,20 +99,68 @@
</div> </div>
</main> </main>
</div> </div>
<script>
const navbarCollapse = document.getElementById('topMenu');
const bsCollapse = new bootstrap.Collapse(navbarCollapse, {
toggle: false // No lo colapsa automáticamente al inicializar
});
function cambiar(){
bsCollapse.toggle()
}
</script>
@code { @code {
private bool MostrarExtra => Navigation.Uri.Contains("PanelControl", StringComparison.OrdinalIgnoreCase); private bool MostrarExtra => Navigation.Uri.Contains("PanelControl", StringComparison.OrdinalIgnoreCase);
protected override async Task OnInitializedAsync()
string? urlAnterior = "";
bool urlVaida = true;
string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
var obtenerDatoAdmin = await ProtectedLocalStore.GetAsync<bool>("EsAdmin"); if (firstRender)
var obtenerDatoId = await ProtectedLocalStore.GetAsync<int>("idUsuario"); {
// Redirigir al home si no hay token y la ruta no es pública urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (obtenerDatoId.Value == 0 || obtenerDatoAdmin.Value)
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es"))
{
Navigation.NavigateTo("/Denegado", true);
}
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
if (userState.idUser == 0 )
{ {
Navigation.NavigateTo("/", true); Navigation.NavigateTo("/", true);
} }
StateHasChanged();
}
}
protected override async Task OnInitializedAsync()
{
// Redirigir al home si no hay token y la ruta no es pública
} }
@@ -121,4 +173,22 @@
? "nav-link headNav active" ? "nav-link headNav active"
: "nav-link headNav"; : "nav-link headNav";
} }
// protected override void OnAfterRender(bool firstRender)
// {
// if (firstRender)
// {
// string? urlAnterior = HttpContextAccessor.HttpContext?.Request.Headers["Referer"].ToString();
// string rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
// if (rutaActual != "Denegado")
// {
// if (string.IsNullOrEmpty(urlAnterior) || urlAnterior.Contains("cacoa.es"))
// {
// Navigation.NavigateTo("/Denegado", true);
// }
// }
// }
// }
} }

View File

@@ -58,7 +58,27 @@
<div class="mt-3"> <div class="mt-3">
<div style="height: 24px;"> <div style="height: 24px;">
<div class="puntoInfo">
@if (_HerramientaCASAPadre != null)
{
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 30).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 30).Descripcion)
}
<b>Otros trabajos incluidos en el Encargo </b> <b>Otros trabajos incluidos en el Encargo </b>
}
else
{
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 36).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 36).Descripcion)
}
<b>Otros trabajos incluidos en la Licitación </b>
}
</div>
</div> </div>
<div style="position:relative;margin-bottom: 15px;"> <div style="position:relative;margin-bottom: 15px;">
<Grid TItem="CASA.OtrosTrabajos" <Grid TItem="CASA.OtrosTrabajos"

View File

@@ -38,15 +38,21 @@
</Content> </Content>
</Tab> </Tab>
<Tab Title="Fases" Name="tabFases"> <Tab Title="Fases CASA" Name="tabFases">
<Content> <Content>
<div class="CajaTab p-2"> <div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesConf> <HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesConf>
</div> </div>
</Content> </Content>
</Tab> </Tab>
<Tab Title="Fases URBAN" Name="tabFases">
<Tab Title="Costes Variables" Name="tabCosteVariable"> <Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesURBANConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.FasesURBANConf>
</div>
</Content>
</Tab>
<Tab Title="Costes Variables CASA" Name="tabCosteVariable">
<Content> <Content>
<div class="CajaTab p-2"> <div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesConf> <HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesConf>
@@ -54,6 +60,14 @@
</Content> </Content>
</Tab> </Tab>
<Tab Title="Costes Variables URBAN" Name="tabCosteVariable">
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesURBANConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.CostesVariablesURBANConf>
</div>
</Content>
</Tab>
<Tab Title="Otros Trabajos" Name="tabOtrosTrabajos"> <Tab Title="Otros Trabajos" Name="tabOtrosTrabajos">
<Content> <Content>
<div class="CajaTab p-2"> <div class="CajaTab p-2">
@@ -76,6 +90,14 @@
</div> </div>
</Content> </Content>
</Tab> </Tab>
<Tab Title="Textos PDF" Name="tabFactRend">
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.TextosPDFConf></HerramientaCASA.Components.Pages.ConfiguracionPages.EnumeracionesTabs.TextosPDFConf>
</div>
</Content>
</Tab>
</Tabs> </Tabs>
</div> </div>

View File

@@ -0,0 +1,307 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@using BlazorBootstrap
@using System.Globalization
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="col-12 formatoCampos">
¿Estás seguro que desea eliminarlo?
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
<Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
</FooterTemplate>
</Modal>
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="puestoTrabForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<InputText MaxLength="40" @bind-Value="descripcionItem" @oninput="e => ValidarYActualizar(e, nameof(descripcionItem))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(descripcionItem))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Orden:</label>
<InputNumber TValue="int?" @bind-Value="ordenItem"
step="any"
class="inputForm" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(nuevoElemento ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<div class="d-flex justify-content-end mt-3">
<p><b class="Fuente2"></b> </p>
<button @onclick="@(() => abrirPopupGestionDatos(new enumeraciones(), true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i> Nuevo coste variable</button>
</div>
<Grid TItem="enumeraciones"
Class="tablaCACOA table"
Data="listadoCostesVariables"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="enumeraciones" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.ValorAlfabetico1</span>
</GridColumn>
<GridColumn TItem="enumeraciones" Class="columna10Ancho text-end" HeaderTextAlignment="Alignment.Center" HeaderText="Orden">
<span>@context.Orden</span>
</GridColumn>
<GridColumn TItem="enumeraciones" Class="botonesTabla" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
<span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-trash"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<enumeraciones> listadoCostesVariables { get; set; } = new List<enumeraciones>();
[SupplyParameterFromForm]
private enumeraciones itemSeleccionado { get; set; } = new enumeraciones();
private string tituloPopup = "";
private Modal popupGestionDatos = default!;
private Modal popupConfirmarBorrado = default!;
private bool nuevoElemento;
private string descripcionItem = "";
private int? ordenItem = 0;
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private string codigoEnumeracion = "CVURB";
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoCostesVariables = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
}
private async Task abrirPopupGestionDatos(enumeraciones objeto, bool esNuevo)
{
itemSeleccionado = objeto;
if (esNuevo)
{
nuevoElemento = true;
descripcionItem = "";
ordenItem = 0;
}
else
{
nuevoElemento = false;
descripcionItem = objeto.ValorAlfabetico1;
ordenItem = objeto.Orden;
}
if (!nuevoElemento)
{
tituloPopup = "Modificar coste variable";
}
else
{
tituloPopup = "Nuevo coste variable";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(descripcionItem):
if (!string.IsNullOrEmpty(value))
{
descripcionItem = value;
}
else
{
descripcionItem = "";
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(descripcionItem) && descripcionItem == "")
{
messageStore?.Add(field, "La descripción no puede estar vacía.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = descripcionItem }, nameof(descripcionItem));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
var enumObtenido = bd.enumeraciones.Where(x => x.idEnumeracion == itemSeleccionado.idEnumeracion).FirstOrDefault();
itemSeleccionado.ValorAlfabetico1 = descripcionItem;
itemSeleccionado.Orden = ordenItem;
switch (accion)
{
case "update":
UtilidadesCASA.guardarEnumeracion(bd, itemSeleccionado, codigoEnumeracion, nuevoElemento, enumObtenido);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
case "create":
UtilidadesCASA.guardarEnumeracion(bd, itemSeleccionado, codigoEnumeracion, nuevoElemento);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Guardado correctamente.",
});
break;
case "delete":
UtilidadesCASA.eliminarEnumeracion(bd, enumObtenido);
await cerrarPopupConfirmarBorrado();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Eliminado correctamente.",
});
break;
}
bd.SaveChanges();
listadoCostesVariables = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
await InvokeAsync(StateHasChanged);
}
private async Task BorrarItem()
{
await GestionarDatos("delete");
}
//////// PopUp eliminar registro
private async Task abrirPopupConfirmarBorrado(enumeraciones objeto)
{
itemSeleccionado = objeto;
await popupConfirmarBorrado.ShowAsync();
}
private async Task cerrarPopupConfirmarBorrado()
{
await popupConfirmarBorrado.HideAsync();
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = nuevoElemento ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(descripcionItem) })
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
}

View File

@@ -0,0 +1,425 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@using BlazorBootstrap
@using System.Globalization
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="col-12 formatoCampos">
¿Estás seguro que desea eliminarlo?
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
<Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
</FooterTemplate>
</Modal>
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="PeriodosForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<InputText MaxLength="40" @bind-Value="descripcionItem" @oninput="e => ValidarYActualizar(e, nameof(descripcionItem))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(descripcionItem))</div>
</div>
<div class="row">
<div class="col-6 formatoCampos pt-2">
<label class="tituloLbl">Valor numérico:</label>
<InputNumber TValue="double?" @bind-Value="valorNumericoItem"
step="any"
@oninput="e => ValidarYActualizar(e, nameof(valorNumericoItem))"
class="inputForm" />
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(valorNumericoItem))</div>
<div class="col-6 formatoCampos pt-2">
<label class="tituloLbl">Plazos:</label>
<InputNumber TValue="double?" @bind-Value="plazosItem"
step="any"
@oninput="e => ValidarYActualizar(e, nameof(plazosItem))"
class="inputForm" />
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(plazosItem))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Orden:</label>
<InputNumber TValue="int?" @bind-Value="ordenItem"
step="any"
class="inputForm" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(nuevoElemento ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<div class="d-flex justify-content-between mt-3">
<p><b class="Fuente2"></b> </p>
<button @onclick="@(() => abrirPopupGestionDatos(new enumeraciones(), true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i> Nueva fase</button>
</div>
<Grid TItem="enumeraciones"
Class="tablaCACOA table"
Data="listadoFases"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="enumeraciones" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.ValorAlfabetico1</span>
</GridColumn>
<GridColumn TItem="enumeraciones" HeaderTextAlignment="Alignment.Center" Class="columna20Ancho text-end" HeaderText="Valor Numérico">
<span>@context.ValorNumerico1</span>
</GridColumn>
<GridColumn TItem="enumeraciones" Class="columna10Ancho text-end" HeaderTextAlignment="Alignment.Center" HeaderText="Plazos">
<span>@context.ValorNumerico2</span>
</GridColumn>
<GridColumn TItem="enumeraciones" HeaderTextAlignment="Alignment.Center" Class="columna10Ancho text-end" HeaderText="Orden">
<span>@context.Orden</span>
</GridColumn>
<GridColumn TItem="enumeraciones" Class="botonesTabla" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
<span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-trash"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<enumeraciones> listadoFases { get; set; } = new List<enumeraciones>();
[SupplyParameterFromForm]
private enumeraciones itemSeleccionado { get; set; } = new enumeraciones();
private string tituloPopup = "";
private Modal popupGestionDatos = default!;
private Modal popupConfirmarBorrado = default!;
private double? valorNumericoOriginal;
private bool nuevoElemento;
private string descripcionItem = "";
private int? ordenItem = 0;
private double? valorNumericoItem = 0;
private double? plazosItem = 0;
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private string codigoEnumeracion = "FASURB";
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoFases = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
}
private async Task abrirPopupGestionDatos(enumeraciones objeto, bool esNuevo)
{
valorNumericoOriginal = objeto.ValorNumerico1;
itemSeleccionado = objeto;
if (esNuevo)
{
nuevoElemento = true;
descripcionItem = "";
ordenItem = 0;
valorNumericoItem = 0;
plazosItem = 0;
}
else
{
nuevoElemento = false;
descripcionItem = objeto.ValorAlfabetico1;
ordenItem = objeto.Orden;
valorNumericoItem = objeto.ValorNumerico1;
plazosItem = objeto.ValorNumerico2;
}
if (!nuevoElemento)
{
tituloPopup = "Modificar fase";
}
else
{
tituloPopup = "Nueva fase";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(descripcionItem):
if (!string.IsNullOrEmpty(value))
{
descripcionItem = value;
}
else
{
descripcionItem = "";
}
break;
case nameof(valorNumericoItem):
if (!string.IsNullOrEmpty(value))
{
string parseado = value.Replace(",", ".");
valorNumericoItem = double.Parse(parseado, CultureInfo.InvariantCulture);
}
break;
case nameof(plazosItem):
if (!string.IsNullOrEmpty(value))
{
string parseado = value.Replace(",", ".");
plazosItem = double.Parse(parseado, CultureInfo.InvariantCulture);
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(descripcionItem) && descripcionItem == "")
{
messageStore?.Add(field, "La descripción no puede estar vacía.");
}
if (fieldName == nameof(valorNumericoItem) && valorNumericoItem == null)
{
messageStore?.Add(field, "El valor numérico no puede estar vacío.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = descripcionItem }, nameof(descripcionItem));
ValidarYActualizar(new ChangeEventArgs { Value = valorNumericoItem }, nameof(valorNumericoItem));
ValidarYActualizar(new ChangeEventArgs { Value = plazosItem }, nameof(plazosItem));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
var enumObtenido = bd.enumeraciones.Where(x => x.idEnumeracion == itemSeleccionado.idEnumeracion).FirstOrDefault();
itemSeleccionado.ValorAlfabetico1 = descripcionItem;
itemSeleccionado.Orden = ordenItem;
itemSeleccionado.ValorNumerico1 = valorNumericoItem;
itemSeleccionado.ValorNumerico2 = plazosItem;
switch (accion)
{
case "update":
UtilidadesCASA.guardarEnumeracion(bd, itemSeleccionado, codigoEnumeracion, nuevoElemento, enumObtenido);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
case "create":
UtilidadesCASA.guardarEnumeracion(bd, itemSeleccionado, codigoEnumeracion, nuevoElemento);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Guardado correctamente.",
});
break;
case "delete":
UtilidadesCASA.eliminarEnumeracion(bd, enumObtenido);
await cerrarPopupConfirmarBorrado();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Eliminado correctamente.",
});
break;
}
bd.SaveChanges();
listadoFases = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
await InvokeAsync(StateHasChanged);
}
private async Task BorrarItem()
{
await GestionarDatos("delete");
}
//////// PopUp eliminar registro
private async Task abrirPopupConfirmarBorrado(enumeraciones objeto)
{
itemSeleccionado = objeto;
await popupConfirmarBorrado.ShowAsync();
}
private async Task cerrarPopupConfirmarBorrado()
{
await popupConfirmarBorrado.HideAsync();
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = nuevoElemento ? "create" : "update";
bool porcentajeMenosCien = comprobarPorcentaje();
if (porcentajeMenosCien)
{
await GestionarDatos(accion);
}
else
{
await cerrarPopupGestionDatos();
itemSeleccionado.ValorNumerico1 = valorNumericoOriginal;
await InvokeAsync(StateHasChanged);
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"El porcentaje total no puede ser mayor de 100.",
});
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(descripcionItem), nameof(valorNumericoItem) })
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
private bool comprobarPorcentaje()
{
bool menorCien = false;
var porcentajeTotal = listadoFases.Sum(x => x.ValorNumerico1);
if (!nuevoElemento)
{
if (porcentajeTotal <= 100)
{
menorCien = true;
}
}
else
{
if (porcentajeTotal + valorNumericoItem <= 100)
{
menorCien = true;
}
}
return menorCien;
}
}

View File

@@ -0,0 +1,179 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@using BlazorBootstrap
@using System.Globalization
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" FormName="puestoTrabForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Texto:</label>
<TextAreaInput Style="height:220px; max-height:220px" MaxLength="2000" @bind-Value="@textoItem" Rows="3" TextAlignment="Alignment.Start" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(nuevoElemento ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<Grid TItem="enumeraciones"
Class="tablaCACOA table"
Data="listadoTextosPDF"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="enumeraciones" Class="columna20Ancho" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.Descripcion</span>
</GridColumn>
<GridColumn TItem="enumeraciones" HeaderTextAlignment="Alignment.Center" HeaderText="Texto">
<span>@context.ValorAlfabeticoLargo</span>
</GridColumn>
<GridColumn TItem="enumeraciones" Class="botonesTabla" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<enumeraciones> listadoTextosPDF { get; set; } = new List<enumeraciones>();
[SupplyParameterFromForm]
private enumeraciones itemSeleccionado { get; set; } = new enumeraciones();
private string tituloPopup = "";
private Modal popupGestionDatos = default!;
private Modal popupConfirmarBorrado = default!;
private bool nuevoElemento;
private string textoItem = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private string codigoEnumeracion = "VARPDF";
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoTextosPDF = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
}
private async Task abrirPopupGestionDatos(enumeraciones objeto, bool esNuevo)
{
itemSeleccionado = objeto;
nuevoElemento = false;
textoItem = objeto.ValorAlfabeticoLargo;
tituloPopup = "Modificar texto";
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private async Task GestionarDatos(string accion)
{
var enumObtenido = bd.enumeraciones.Where(x => x.idEnumeracion == itemSeleccionado.idEnumeracion).FirstOrDefault();
itemSeleccionado.ValorAlfabeticoLargo = textoItem;
switch (accion)
{
case "update":
UtilidadesCASA.guardarEnumeracion(bd, itemSeleccionado, codigoEnumeracion, nuevoElemento, enumObtenido);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
}
bd.SaveChanges();
listadoTextosPDF = UtilidadesCASA.devolverListadoOrdenadoEnumeracion(bd, codigoEnumeracion);
await InvokeAsync(StateHasChanged);
}
private async Task cerrarPopupConfirmarBorrado()
{
await popupConfirmarBorrado.HideAsync();
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
if (!editContext!.GetValidationMessages().Any())
{
string accion = nuevoElemento ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
}

View File

@@ -0,0 +1,301 @@
@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();
}
}

View File

@@ -0,0 +1,214 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using ClosedXML.Excel
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
@inject IJSRuntime JS
@using ClosedXML.Excel
<div>
@if (totalProyectosTipo != 0)
{
<div class="col-12 text-end">
<button @onclick="ExportarExcelCasa" class="btnBlue col-1 " style="background-color: #65b7c3 !important;"> <i class="fas fa-print pe-2"></i>Generar Excel</button>
</div>
<div class="mt-2" style="padding:50px;">
<div class="mb-4">
<label class="fw-bold">Total simulaciones herramienta CASA: <span>@totalProyectosTipo</span> </label>
</div>
<div class="row">
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Nº total trabajadores:</label>
<label class="tituloLbl">@estadisticasTotales.numeroTrabajadores.MilesYDecimales()</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste anual total:</label>
<label class="tituloLbl">@estadisticasTotales.costeAnualTotal.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas de producción:</label>
<label class="tituloLbl">@estadisticasTotales.horasProduccion.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes directos:</label>
<label class="tituloLbl">@estadisticasTotales.costesDirectos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes indirectos:</label>
<label class="tituloLbl">@estadisticasTotales.costesIndirectos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes variables:</label>
<label class="tituloLbl">@estadisticasTotales.costesVariables.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes despacho:</label>
<label class="tituloLbl">@estadisticasTotales.costeDespacho.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Total superficie:</label>
<label class="tituloLbl">@estadisticasTotales.totalSuperficie.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% fases:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeFases %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas documentación:</label>
<label class="tituloLbl">@estadisticasTotales.horasDocumentacion.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas dirección obra:</label>
<label class="tituloLbl">@estadisticasTotales.horasDireccionObra.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.horasTrabajo.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% externalización:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeExternalizacion %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste externalización:</label>
<label class="tituloLbl">@estadisticasTotales.costeExternalizacion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Plazo presentación:</label>
<label class="tituloLbl">@estadisticasTotales.plazoPresentacion</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste de producción:</label>
<label class="tituloLbl">@estadisticasTotales.costeProduccion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Beneficio:</label>
<label class="tituloLbl">@estadisticasTotales.beneficio.MilesYDecimales() %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.precioTrabajo.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Total otros trabajos:</label>
<label class="tituloLbl">@estadisticasTotales.totalOtrosTrabajos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio encargo:</label>
<label class="tituloLbl">@estadisticasTotales.precioEncargo.MilesYDecimales() €</label>
</div>
</div>
</div>
}
else
{
<div class="mt-5">
<label class="tituloLbl">No hay datos entre esas fechas.</label>
</div>
}
</div>
@code {
[Parameter]
public List<estadisticas> ListadoHerraCASA { get; set; } = new List<estadisticas>();
[Parameter]
public List<estadisticasfactores> ListadoFactoresCASA { get; set; } = new List<estadisticasfactores>();
[Parameter]
public List<estadisticasusos> ListadoUsosCASA { get; set; } = new List<estadisticasusos>();
private int totalProyectosTipo = 0;
public EstadistiaHerraCasaVM estadisticasTotales = new EstadistiaHerraCasaVM();
[CascadingParameter]
public ConfiguracionPages.EstadisticasConf _Parent { get; set; }
public tsHerramientasCACOA bd;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
}
protected override void OnParametersSet()
{
inicializarListado();
}
private void hacerCalculos(List<bdHerramientaCACOA.db.estadisticas> listadoEstadistica)
{
estadisticasTotales.numeroTrabajadores = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.numeroTrabajadores), totalProyectosTipo);
estadisticasTotales.costeAnualTotal = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalCosteAnual), totalProyectosTipo);
estadisticasTotales.horasProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasProduccion), totalProyectosTipo);
estadisticasTotales.costesDirectos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeDirecto), totalProyectosTipo);
estadisticasTotales.costesIndirectos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeIndirecto), totalProyectosTipo);
estadisticasTotales.costesVariables = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeVariable), totalProyectosTipo);
estadisticasTotales.costeDespacho = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraDespachoProf), totalProyectosTipo);
estadisticasTotales.totalSuperficie= UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalSupeficie), totalProyectosTipo);
estadisticasTotales.porcentajeFases = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalFases), totalProyectosTipo);
estadisticasTotales.horasDocumentacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPEDocumentacion), totalProyectosTipo);
estadisticasTotales.horasDireccionObra = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPEDireccionObra), totalProyectosTipo);
estadisticasTotales.horasTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPE), totalProyectosTipo);
estadisticasTotales.porcentajeExternalizacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.porcentajeExternalizacion), totalProyectosTipo);
estadisticasTotales.costeExternalizacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraExternalizacion), totalProyectosTipo);
estadisticasTotales.plazoPresentacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.plazoPresentacion), totalProyectosTipo);
estadisticasTotales.costeProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeProduccion), totalProyectosTipo);
estadisticasTotales.beneficio = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.porcentajeBeneficio), totalProyectosTipo);
estadisticasTotales.precioTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioTrabajo), totalProyectosTipo);
estadisticasTotales.totalOtrosTrabajos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalOtrosTrabajos), totalProyectosTipo);
estadisticasTotales.precioEncargo= UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioEncargo), totalProyectosTipo);
}
private void inicializarListado()
{
totalProyectosTipo = ListadoHerraCASA.Count();
hacerCalculos(ListadoHerraCASA);
}
private async Task ExportarExcelCasa()
{
var bytes = UtilidadesCASA.GenerarExcelCasa(bd,ListadoHerraCASA, ListadoUsosCASA, ListadoFactoresCASA);
_Parent.generarExcel(bytes);
}
}

View File

@@ -0,0 +1,256 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<div>
@if (totalProyectosTipo != 0)
{
<div class="col-12 text-end">
<button @onclick="generarTablaUrban" class="btnBlue col-1 " style="background-color: #65b7c3 !important;"> <i class="fas fa-print pe-2"></i>Generar Excel</button>
</div>
<div class="mt-2" style="padding:50px;">
<div class="mb-4">
<label class="fw-bold">Total simulaciones herramienta URBAN: <span>@totalProyectosTipo</span> </label>
</div>
<div class="row">
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Nº total trabajadores:</label>
<label class="tituloLbl">@estadisticasTotales.numeroTrabajadores.MilesYDecimales()</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste anual total:</label>
<label class="tituloLbl">@estadisticasTotales.costeAnualTotal.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas de producción:</label>
<label class="tituloLbl">@estadisticasTotales.horasProduccion.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes directos:</label>
<label class="tituloLbl">@estadisticasTotales.costesDirectos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes indirectos:</label>
<label class="tituloLbl">@estadisticasTotales.costesIndirectos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes variables:</label>
<label class="tituloLbl">@estadisticasTotales.costesVariables.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes despacho:</label>
<label class="tituloLbl">@estadisticasTotales.costeDespacho.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% fases:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeFases %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Innovación:</label>
<label class="tituloLbl">@estadisticasTotales.innovacion.MilesYDecimales() %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.horasTrabajo.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% externalización:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeExternalizacion %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste externalización:</label>
<label class="tituloLbl">@estadisticasTotales.costeExternalizacion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Plazo presentación:</label>
<label class="tituloLbl">@estadisticasTotales.plazoPresentacion</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste de producción:</label>
<label class="tituloLbl">@estadisticasTotales.costeProduccion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Beneficio:</label>
<label class="tituloLbl">@estadisticasTotales.beneficio.MilesYDecimales() %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.precioTrabajo.MilesYDecimales() €</label>
</div>
</div>
</div>
}
else
{
<div class="mt-5">
<label class="tituloLbl">No hay datos entre esas fechas.</label>
</div>
}
@*
<Grid TItem="estadisticas"
Class="tablaCACOA table"
Data="ListadoHerraURBAN"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes directos">
<span>@context.costeDirecto</span>
</GridColumn>
<GridColumn TItem="estadisticas" Class="text-end" HeaderTextAlignment="Alignment.Center" HeaderText="Total costes indirectos">
<span>@context.costeIndirecto</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes Variables">
<span>@context.costeVariable</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total coste hora despacho profesional">
<span>@context.costeHoraDespachoProf</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total superficie">
<span></span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total fases">
<span>@context.totalFases</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas documentación">
<span>@context.horasTPEDocumentacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas dirección de obra">
<span>@context.horasTPEDireccionObra</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas trabajo profesional">
<span>@context.horasTPE</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje externalización">
<span>@context.porcentajeExternalizacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total plazos">
<span>@context.plazoPresentacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes de producción">
<span>@context.costeProduccion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total otros trabajos">
<span>@context.totalOtrosTrabajos</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje externalización">
<span>@context.porcentajeExternalizacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje beneficio">
<span>@context.porcentajeBeneficio</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total número trabajadores">
<span>@context.numeroTrabajadores</span>
</GridColumn>
</GridColumns>
</Grid>
*@
</div>
@code {
[Parameter]
public List<estadisticas> ListadoHerraURBAN { get; set; } = new List<estadisticas>();
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<bdHerramientaCACOA.db.estadisticas> listadoEstadistica)
{
estadisticasTotales.numeroTrabajadores = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.numeroTrabajadores), totalProyectosTipo);
estadisticasTotales.costeAnualTotal = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalCosteAnual), totalProyectosTipo);
estadisticasTotales.horasProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasProduccion), totalProyectosTipo);
estadisticasTotales.costesDirectos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeDirecto), totalProyectosTipo);
estadisticasTotales.costesIndirectos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeIndirecto), totalProyectosTipo);
estadisticasTotales.costesVariables = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeVariable), totalProyectosTipo);
estadisticasTotales.costeDespacho = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraDespachoProf), totalProyectosTipo);
estadisticasTotales.porcentajeFases = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalFases), totalProyectosTipo);
estadisticasTotales.innovacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.innovacion), totalProyectosTipo);
estadisticasTotales.horasTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPE), totalProyectosTipo);
estadisticasTotales.porcentajeExternalizacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.porcentajeExternalizacion), totalProyectosTipo);
estadisticasTotales.costeExternalizacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraExternalizacion), totalProyectosTipo);
estadisticasTotales.plazoPresentacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.plazoPresentacion), totalProyectosTipo);
estadisticasTotales.costeProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeProduccion), totalProyectosTipo);
estadisticasTotales.beneficio = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.porcentajeBeneficio), totalProyectosTipo);
estadisticasTotales.precioTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioTrabajo), totalProyectosTipo);
}
protected override void OnParametersSet()
{
inicializarListado();
}
private void inicializarListado()
{
totalProyectosTipo = ListadoHerraURBAN.Count();
hacerCalculos(ListadoHerraURBAN);
}
private async Task generarTablaUrban()
{
var bytes = UtilidadesCASA.GenerarExcelURBAN(bd, ListadoHerraURBAN, "Herramienta URBAN");
_Parent.generarExcel(bytes);
}
}

View File

@@ -0,0 +1,170 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<div>
@if (totalProyectosTipo != 0)
{
<div class="col-12 text-end">
<button @onclick="ExportarExcelCasa" class="btnBlue col-1 " style="background-color: #65b7c3 !important;"> <i class="fas fa-print pe-2"></i>Generar Excel</button>
</div>
<div class="mt-2" style="padding:50px;">
<div class="mb-4">
<label class="fw-bold">Total simulaciones licitación CASA: <span>@totalProyectosTipo</span> </label>
</div>
<div class="row">
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes despacho:</label>
<label class="tituloLbl">@estadisticasTotales.costeDespacho.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Total superficie:</label>
<label class="tituloLbl">@estadisticasTotales.totalSuperficie.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% fases:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeFases %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.horasTrabajo.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Plazo presentación:</label>
<label class="tituloLbl">@estadisticasTotales.plazoPresentacion</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste de producción:</label>
<label class="tituloLbl">@estadisticasTotales.costeProduccion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.precioTrabajo.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Total otros trabajos:</label>
<label class="tituloLbl">@estadisticasTotales.totalOtrosTrabajos.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio encargo:</label>
<label class="tituloLbl">@estadisticasTotales.precioEncargo.MilesYDecimales() €</label>
</div>
</div>
</div>
}
else
{
<div class="mt-5">
<label class="tituloLbl">No hay datos entre esas fechas.</label>
</div>
}
@* <Grid TItem="estadisticas"
Class="tablaCACOA table"
Data="ListadoLiciCASA"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total coste hora despacho profesional">
<span>@context.costeHoraDespachoProf</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total fases">
<span>@context.totalFases</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas trabajo profesional">
<span>@context.horasTPE</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total plazos">
<span>@context.plazoPresentacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes de producción">
<span>@context.costeProduccion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total otros trabajos">
<span>@context.totalOtrosTrabajos</span>
</GridColumn>
</GridColumns>
</Grid> *@
</div>
@code {
[Parameter]
public List<estadisticas> ListadoLiciCASA { get; set; } = new List<estadisticas>();
[Parameter]
public List<estadisticasusos> ListadoUsosLicitacion { get; set; } = new List<estadisticasusos>();
public EstadistiaHerraCasaVM estadisticasTotales = new EstadistiaHerraCasaVM();
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<bdHerramientaCACOA.db.estadisticas> listadoEstadistica)
{
estadisticasTotales.costeDespacho = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraDespachoProf), totalProyectosTipo);
estadisticasTotales.totalSuperficie = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalSupeficie), totalProyectosTipo);
estadisticasTotales.porcentajeFases = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalFases), totalProyectosTipo);
estadisticasTotales.horasTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPE), totalProyectosTipo);
estadisticasTotales.plazoPresentacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.plazoPresentacion), totalProyectosTipo);
estadisticasTotales.costeProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeProduccion), totalProyectosTipo);
estadisticasTotales.precioTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioTrabajo), totalProyectosTipo);
estadisticasTotales.totalOtrosTrabajos = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalOtrosTrabajos), totalProyectosTipo);
estadisticasTotales.precioEncargo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioEncargo), totalProyectosTipo);
}
protected override void OnParametersSet()
{
inicializarListado();
}
private void inicializarListado()
{
totalProyectosTipo = ListadoLiciCASA.Count();
hacerCalculos(ListadoLiciCASA);
}
private async Task ExportarExcelCasa()
{
var bytes = UtilidadesCASA.GenerarExcelCasa(bd, ListadoLiciCASA, ListadoUsosLicitacion, null);
_Parent.generarExcel(bytes);
}
}

View File

@@ -0,0 +1,202 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<div>
@if (totalProyectosTipo != 0)
{
<div class="col-12 text-end">
<button @onclick="generarTablaUrban" class="btnBlue col-1 " style="background-color: #65b7c3 !important;"> <i class="fas fa-print pe-2"></i>Generar Excel</button>
</div>
<div class="mt-2" style="padding:50px;">
<div class="mb-4">
<label class="fw-bold">Total simulaciones licitación URBAN: <span>@totalProyectosTipo</span> </label>
</div>
<div class="row">
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Costes despacho:</label>
<label class="tituloLbl">@estadisticasTotales.costeDespacho.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">% fases:</label>
<label class="tituloLbl">@estadisticasTotales.porcentajeFases %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Innovación:</label>
<label class="tituloLbl">@estadisticasTotales.innovacion.MilesYDecimales() %</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Horas trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.horasTrabajo.MilesYDecimales() h</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Plazo presentación:</label>
<label class="tituloLbl">@estadisticasTotales.plazoPresentacion</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Coste de producción:</label>
<label class="tituloLbl">@estadisticasTotales.costeProduccion.MilesYDecimales() €</label>
</div>
<div class="col-2 formatoCampos pt-2">
<label class="tituloLbl">Precio trabajo:</label>
<label class="tituloLbl">@estadisticasTotales.precioTrabajo.MilesYDecimales() €</label>
</div>
</div>
</div>
}
else
{
<div class="mt-5">
<label class="tituloLbl">No hay datos entre esas fechas.</label>
</div>
}
@*
<Grid TItem="estadisticas"
Class="tablaCACOA table"
Data="ListadoLiciURBAN"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes directos">
<span>@context.costeDirecto</span>
</GridColumn>
<GridColumn TItem="estadisticas" Class="text-end" HeaderTextAlignment="Alignment.Center" HeaderText="Total costes indirectos">
<span>@context.costeIndirecto</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes Variables">
<span>@context.costeVariable</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total coste hora despacho profesional">
<span>@context.costeHoraDespachoProf</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total superficie">
<span></span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total fases">
<span>@context.totalFases</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas documentación">
<span>@context.horasTPEDocumentacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas dirección de obra">
<span>@context.horasTPEDireccionObra</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total horas trabajo profesional">
<span>@context.horasTPE</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje externalización">
<span>@context.porcentajeExternalizacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total plazos">
<span>@context.plazoPresentacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total costes de producción">
<span>@context.costeProduccion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total otros trabajos">
<span>@context.totalOtrosTrabajos</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje externalización">
<span>@context.porcentajeExternalizacion</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total porcentaje beneficio">
<span>@context.porcentajeBeneficio</span>
</GridColumn>
<GridColumn TItem="estadisticas" HeaderTextAlignment="Alignment.Center" Class="text-end" HeaderText="Total número trabajadores">
<span>@context.numeroTrabajadores</span>
</GridColumn>
</GridColumns>
</Grid>
*@
</div>
@code {
[Parameter]
public List<estadisticas> ListadoLiciURBAN { get; set; } = new List<estadisticas>();
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<bdHerramientaCACOA.db.estadisticas> listadoEstadistica)
{
estadisticasTotales.costeDespacho = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeHoraDespachoProf), totalProyectosTipo);
estadisticasTotales.porcentajeFases = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.totalFases), totalProyectosTipo);
estadisticasTotales.innovacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.innovacion), totalProyectosTipo);
estadisticasTotales.horasTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.horasTPE), totalProyectosTipo);
estadisticasTotales.plazoPresentacion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.plazoPresentacion), totalProyectosTipo);
estadisticasTotales.costeProduccion = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.costeProduccion), totalProyectosTipo);
estadisticasTotales.precioTrabajo = UtilidadesCASA.comprobarNull(listadoEstadistica.Sum(x => x.precioTrabajo), totalProyectosTipo);
}
protected override void OnParametersSet()
{
inicializarListado();
}
private void inicializarListado()
{
totalProyectosTipo = ListadoLiciURBAN.Count();
hacerCalculos(ListadoLiciURBAN);
}
private async Task generarTablaUrban()
{
var bytes = UtilidadesCASA.GenerarExcelURBAN(bd, ListadoLiciURBAN, "Licitación URBAN");
_Parent.generarExcel(bytes);
}
}

View File

@@ -67,6 +67,23 @@
</div> </div>
</a> </a>
</div> </div>
<div class="col-6 d-flex align-items-center justify-content-center colorEMenu dive">
<a href="PuntosInfo">
<div>
<h4 class="text-center">Puntos de información</h4>
@* <p style="text-align: center;">Revise sus simulaciones creadas anteriormente</p> *@
</div>
</a>
</div>
<div class="col-6 d-flex align-items-center justify-content-center colorAMenu dive">
<a href="Estadisticas">
<div>
<h4 class="text-center">Estadisticas</h4>
</div>
</a>
</div>
</div> </div>

View File

@@ -0,0 +1,50 @@
@page "/PuntosInfo"
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@using BlazorBootstrap
@using System.Globalization
@using bdHerramientaCACOA.db
<div class="container-fluid pt-3">
<Tabs>
<Tab Title="Información Herramienta CASA" Active>
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosHerraCASAConf></HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosHerraCASAConf>
</div>
</Content>
</Tab>
<Tab Title="Información Licitación CASA">
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosLicitacionCASAConf></HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosLicitacionCASAConf>
</div>
</Content>
</Tab>
<Tab Title="Información Herramienta URBAN">
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosHerraURBANConf></HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosHerraURBANConf>
</div>
</Content>
</Tab>
<Tab Title="Información Licitación URBAN">
<Content>
<div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosLicitacionURBANConf></HerramientaCASA.Components.Pages.ConfiguracionPages.PuntosInfoTabs.PuntosLicitacionURBANConf>
</div>
</Content>
</Tab>
</Tabs>
</div>
@code {
}

View File

@@ -0,0 +1,228 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="PuntoInfoForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Título:</label>
<InputText MaxLength="60" @bind-Value="TituloPunto" @oninput="e => ValidarYActualizar(e, nameof(TituloPunto))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(TituloPunto))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<TextAreaInput Style="height:220px; max-height:220px" MaxLength="400" @bind-Value="@DescripcionPunto" Rows="3" TextAlignment="Alignment.Start" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@("Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<Grid TItem="puntosinformacion"
Class="tablaCACOA table"
Data="listadoPuntosInfo"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" Class="columna20Ancho" HeaderText="Título">
<span>@context.Titulo</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.Descripcion</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" Class="botonesTabla columna3Ancho" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<puntosinformacion> listadoPuntosInfo { get; set; } = new List<puntosinformacion>();
[SupplyParameterFromForm]
private puntosinformacion itemSeleccionado { get; set; } = new puntosinformacion();
private string tituloPopup = "";
public string Filter { get; set; } = "";
private Modal popupGestionDatos = default!;
private string TituloPunto = "";
private string DescripcionPunto = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private int idHerramienta = 31;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
}
private async Task abrirPopupGestionDatos(puntosinformacion objeto, bool esNuevo)
{
itemSeleccionado = objeto;
TituloPunto = objeto.Titulo;
DescripcionPunto = objeto.Descripcion;
tituloPopup = "Modificar punto información";
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(TituloPunto):
if (!string.IsNullOrEmpty(value))
{
TituloPunto = value;
}
else
{
TituloPunto = "";
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(TituloPunto) && TituloPunto == "")
{
messageStore?.Add(field, "El título no puede estar vacío.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = TituloPunto }, nameof(TituloPunto));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
switch (accion)
{
case "update":
var puntoObtenido = bd.puntosinformacion.Where(x => x.idPuntosInformacion == itemSeleccionado.idPuntosInformacion).FirstOrDefault();
itemSeleccionado.Descripcion = DescripcionPunto;
itemSeleccionado.Titulo = TituloPunto;
UtilidadesCASA.actualizarPuntoInformacion(bd, puntoObtenido, itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
}
bd.SaveChanges();
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
await InvokeAsync(StateHasChanged);
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(TituloPunto)})
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(puntosinformacion).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
}

View File

@@ -0,0 +1,228 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="PuntoInfoForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Título:</label>
<InputText MaxLength="60" @bind-Value="TituloPunto" @oninput="e => ValidarYActualizar(e, nameof(TituloPunto))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(TituloPunto))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<TextAreaInput Style="height:220px; max-height:220px" MaxLength="400" @bind-Value="@DescripcionPunto" Rows="3" TextAlignment="Alignment.Start" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@("Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<Grid TItem="puntosinformacion"
Class="tablaCACOA table"
Data="listadoPuntosInfo"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" Class="columna20Ancho" HeaderText="Título">
<span>@context.Titulo</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.Descripcion</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" Class="botonesTabla columna3Ancho" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<puntosinformacion> listadoPuntosInfo { get; set; } = new List<puntosinformacion>();
[SupplyParameterFromForm]
private puntosinformacion itemSeleccionado { get; set; } = new puntosinformacion();
private string tituloPopup = "";
public string Filter { get; set; } = "";
private Modal popupGestionDatos = default!;
private string TituloPunto = "";
private string DescripcionPunto = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private int idHerramienta = 34;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
}
private async Task abrirPopupGestionDatos(puntosinformacion objeto, bool esNuevo)
{
itemSeleccionado = objeto;
TituloPunto = objeto.Titulo;
DescripcionPunto = objeto.Descripcion;
tituloPopup = "Modificar punto información";
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(TituloPunto):
if (!string.IsNullOrEmpty(value))
{
TituloPunto = value;
}
else
{
TituloPunto = "";
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(TituloPunto) && TituloPunto == "")
{
messageStore?.Add(field, "El título no puede estar vacío.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = TituloPunto }, nameof(TituloPunto));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
switch (accion)
{
case "update":
var puntoObtenido = bd.puntosinformacion.Where(x => x.idPuntosInformacion == itemSeleccionado.idPuntosInformacion).FirstOrDefault();
itemSeleccionado.Descripcion = DescripcionPunto;
itemSeleccionado.Titulo = TituloPunto;
UtilidadesCASA.actualizarPuntoInformacion(bd, puntoObtenido, itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
}
bd.SaveChanges();
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
await InvokeAsync(StateHasChanged);
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(TituloPunto) })
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(puntosinformacion).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
}

View File

@@ -0,0 +1,226 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="PuntoInfoForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Título:</label>
<InputText MaxLength="60" @bind-Value="TituloPunto" @oninput="e => ValidarYActualizar(e, nameof(TituloPunto))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(TituloPunto))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<TextAreaInput Style="height:220px; max-height:220px" MaxLength="400" @bind-Value="@DescripcionPunto" Rows="3" TextAlignment="Alignment.Start" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@("Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<Grid TItem="puntosinformacion"
Class="tablaCACOA table"
Data="listadoPuntosInfo"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" Class="columna20Ancho" HeaderText="Título">
<span>@context.Titulo</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.Descripcion</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" Class="botonesTabla columna3Ancho" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<puntosinformacion> listadoPuntosInfo { get; set; } = new List<puntosinformacion>();
[SupplyParameterFromForm]
private puntosinformacion itemSeleccionado { get; set; } = new puntosinformacion();
private string tituloPopup = "";
public string Filter { get; set; } = "";
private Modal popupGestionDatos = default!;
private string TituloPunto = "";
private string DescripcionPunto = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private int idHerramienta = 32;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
}
private async Task abrirPopupGestionDatos(puntosinformacion objeto, bool esNuevo)
{
itemSeleccionado = objeto;
TituloPunto = objeto.Titulo;
DescripcionPunto = objeto.Descripcion;
tituloPopup = "Modificar punto información";
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(TituloPunto):
if (!string.IsNullOrEmpty(value))
{
TituloPunto = value;
}
else
{
TituloPunto = "";
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(TituloPunto) && TituloPunto == "")
{
messageStore?.Add(field, "El título no puede estar vacío.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = TituloPunto }, nameof(TituloPunto));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
switch (accion)
{
case "update":
var puntoObtenido = bd.puntosinformacion.Where(x => x.idPuntosInformacion == itemSeleccionado.idPuntosInformacion).FirstOrDefault();
itemSeleccionado.Descripcion = DescripcionPunto;
itemSeleccionado.Titulo = TituloPunto;
UtilidadesCASA.actualizarPuntoInformacion(bd, puntoObtenido, itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
}
bd.SaveChanges();
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
await InvokeAsync(StateHasChanged);
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(TituloPunto) })
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(puntosinformacion).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
}

View File

@@ -0,0 +1,226 @@
@inject NavigationManager Navigation
@layout ConfiguracionLayout
@rendermode InteractiveServer
@using BlazorBootstrap
@using System.Globalization
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA.db
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="PuntoInfoForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Título:</label>
<InputText MaxLength="60" @bind-Value="TituloPunto" @oninput="e => ValidarYActualizar(e, nameof(TituloPunto))" class="inputForm"></InputText>
</div>
<div class="validation-message">@GetExternalValidationMessage(nameof(TituloPunto))</div>
</div>
<div class="row">
<div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Descripción:</label>
<TextAreaInput Style="height:220px; max-height:220px" MaxLength="400" @bind-Value="@DescripcionPunto" Rows="3" TextAlignment="Alignment.Start" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@("Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
<div>
<Grid TItem="puntosinformacion"
Class="tablaCACOA table"
Data="listadoPuntosInfo"
AllowFiltering="false"
PageSize="10"
FixedHeader="true"
Height="750"
Unit="Unit.Px"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" Class="columna20Ancho" HeaderText="Título">
<span>@context.Titulo</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción">
<span>@context.Descripcion</span>
</GridColumn>
<GridColumn TItem="puntosinformacion" Class="botonesTabla columna3Ancho" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context, false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
</div>
@code {
public List<puntosinformacion> listadoPuntosInfo { get; set; } = new List<puntosinformacion>();
[SupplyParameterFromForm]
private puntosinformacion itemSeleccionado { get; set; } = new puntosinformacion();
private string tituloPopup = "";
public string Filter { get; set; } = "";
private Modal popupGestionDatos = default!;
private string TituloPunto = "";
private string DescripcionPunto = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private ValidationMessageStore? messageStore;
public tsHerramientasCACOA bd;
private int idHerramienta = 35;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
editContext = new EditContext(itemSeleccionado);
messageStore = new ValidationMessageStore(editContext);
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
}
private async Task abrirPopupGestionDatos(puntosinformacion objeto, bool esNuevo)
{
itemSeleccionado = objeto;
TituloPunto = objeto.Titulo;
DescripcionPunto = objeto.Descripcion;
tituloPopup = "Modificar punto información";
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
{
var value = e.Value?.ToString();
var field = new FieldIdentifier(itemSeleccionado, fieldName);
switch (fieldName)
{
case nameof(TituloPunto):
if (!string.IsNullOrEmpty(value))
{
TituloPunto = value;
}
else
{
TituloPunto = "";
}
break;
}
messageStore?.Clear(field);
if (fieldName == nameof(TituloPunto) && TituloPunto == "")
{
messageStore?.Add(field, "El título no puede estar vacío.");
}
editContext?.NotifyValidationStateChanged();
}
private void ValidarTodo()
{
ValidarYActualizar(new ChangeEventArgs { Value = TituloPunto }, nameof(TituloPunto));
}
private string GetExternalValidationMessage(string fieldName)
{
var field = new FieldIdentifier(itemSeleccionado, fieldName);
return messageStore?[field].FirstOrDefault() ?? string.Empty;
}
private async Task GestionarDatos(string accion)
{
switch (accion)
{
case "update":
var puntoObtenido = bd.puntosinformacion.Where(x => x.idPuntosInformacion == itemSeleccionado.idPuntosInformacion).FirstOrDefault();
itemSeleccionado.Descripcion = DescripcionPunto;
itemSeleccionado.Titulo = TituloPunto;
UtilidadesCASA.actualizarPuntoInformacion(bd, puntoObtenido, itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
}
bd.SaveChanges();
listadoPuntosInfo = bd.puntosinformacion.Where(x => x.idTipoHerramienta == idHerramienta).ToList();
await InvokeAsync(StateHasChanged);
}
// GUARDAR
private async Task guardarFormulario()
{
try
{
ValidarTodo();
if (!editContext!.GetValidationMessages().Any())
{
string accion = "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private void MostrarErrores()
{
messageStore?.Clear();
foreach (var field in new[] { nameof(TituloPunto) })
{
ValidarYActualizar(new ChangeEventArgs { Value = typeof(puntosinformacion).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -3,8 +3,9 @@
<div class="row"> <div class="row">
<!--style="width:47%;"-->
<div class="col-md-6 mt-3" > <div class="col-md-6 mt-3" >
<div style="height: 24px;margin-bottom: 10px;"> <div style="margin-bottom: 10px;">
<b>Costes Asociados a los Servicios de Arquitectura</b> <b>Costes Asociados a los Servicios de Arquitectura</b>
</div> </div>
<table class="tablaAlter" style="width:100%"> <table class="tablaAlter" style="width:100%">
@@ -16,7 +17,16 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla"><b>Beneficio</b> (antes de impuestos) </td> <td class="TotalesTabla">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 29).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 29).Descripcion)
}
<b>Beneficio</b> (antes de impuestos)
</div></td>
<td class="tdAlineadoDerecha TotalesTabla"> <td class="tdAlineadoDerecha TotalesTabla">
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<InputNumber TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoCASA.CostesProduccion.Beneficio" ValueExpression="() => objetoCASA.CostesProduccion.Beneficio" ValueChanged="(value) => BeneficioCambiado(value)"></InputNumber> % <InputNumber TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoCASA.CostesProduccion.Beneficio" ValueExpression="() => objetoCASA.CostesProduccion.Beneficio" ValueChanged="(value) => BeneficioCambiado(value)"></InputNumber> %
@@ -43,7 +53,7 @@
<table class="table tablaCACOA tablaCACOA2 mb-0" style="width: 100%;"> <table class="table tablaCACOA tablaCACOA2 mb-0" style="width: 100%;">
<tfoot> <tfoot>
<tr> <tr>
<td colspan="2" class="text-end fw-bold TotalesTabla"> <td colspan="2" class="text-end fw-bold TotalesTabla" style="font-size:14px;">
Precio del encargo: <span>@objetoCASA.CostesProduccion.PrecioDelEncargo.MilesYDecimales() € </span> Precio del encargo: <span>@objetoCASA.CostesProduccion.PrecioDelEncargo.MilesYDecimales() € </span>
</td> </td>
</tr> </tr>

View File

@@ -53,7 +53,15 @@
<div class="row"> <div class="row">
<div class="col-md-4 mb-3"> <div class="col-md-4 mb-3">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 25).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 25).Descripcion)
}
<b>Costes variables</b> <b>Costes variables</b>
</div>
<div class="pt-1 col-md-12 d-flex" style="gap: 40px; height:25px;"> <div class="pt-1 col-md-12 d-flex" style="gap: 40px; height:25px;">
<div class="d-flex"> <div class="d-flex">
@@ -129,7 +137,14 @@
</div> </div>
<div class="col-md-4" style="align-items: flex-end;"> <div class="col-md-4" style="align-items: flex-end;">
<div style="height: 49px;"> <div style="height: 49px;">
<b>Coste hora Despacho Profesional</b> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 26).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 26).Descripcion)
}
<b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
@@ -173,8 +188,15 @@
<div class="col-md-4"> <div class="col-md-4">
<div style="height: 49px;"> <div style="height: 49px;">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 27).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 27).Descripcion)
}
<b>Coste hora Externalización</b> <b>Coste hora Externalización</b>
</div> </div>
</div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>

View File

@@ -5,7 +5,16 @@
<div class="col-md-6 row"> <div class="col-md-6 row">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<tr> <tr>
<td class="colorFilasIntro fw-bold w4">Plazo de presentación de la documentación:</td> <td class="colorFilasIntro fw-bold w4" style="width:43%;">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 28).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 28).Descripcion)
}
Plazo de presentación de la documentación:
</div></td>
<td class="text-end"> <td class="text-end">
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<InputNumber TValue="double" <InputNumber TValue="double"
@@ -83,24 +92,37 @@
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Trabajos</th> <th class="colorB fw-bold" style="width:80%">Trabajos</th>
<th class="colorB fw-bold">Horas</th> <th class="colorB fw-bold">Horas</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="colorB fw-bold">Horas elaboración documentación</td> <td class="colorB fw-bold">Horas elaboración documentación</td>
<td class="text-start">@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h</td> <td class="text-end">@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h</td>
</tr> </tr>
<tr> <tr>
<td class="colorB text-end">Horas de documentación en Despacho Profesional</td> <td class="colorB text-end">Horas de documentación en Despacho Profesional</td>
<td class="text-start">@objetoCASA.CostesProduccion.HorasProduccionDespachoElabDocumentacion.MilesYDecimales() h</td> <td class="text-start">
<div class="text-end" style="width:70px;">
<span>
@objetoCASA.CostesProduccion.HorasProduccionDespachoElabDocumentacion.MilesYDecimales()
</span>
<span>
h
</span>
</div>
</td>
</tr> </tr>
<tr> <tr>
<td class="colorB text-end">Horas de documentación mediante externalización</td> <td class="colorB text-end">Horas de documentación mediante externalización</td>
<td class="text-start">@objetoCASA.CostesProduccion.NumHorasMinimoExt.MilesYDecimales() h</td> <td class="text-start">
<div style="max-width:70px;" class="text-end">
@objetoCASA.CostesProduccion.NumHorasMinimoExt.MilesYDecimales() h
</div>
</td>
</tr> </tr>
<tr> <tr>

View File

@@ -25,7 +25,7 @@
<TrabajadorGrid objetoCASA="objetoCASA"></TrabajadorGrid> <TrabajadorGrid objetoCASA="objetoCASA"></TrabajadorGrid>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="row mt-auto"> <div class="row mt-auto" style="padding-top: 40px;">
<div class="col-md-12 d-flex justify-content-end"> <div class="col-md-12 d-flex justify-content-end">
<table class="tablaAlter"> <table class="tablaAlter">
<tr> <tr>

View File

@@ -21,15 +21,23 @@ Height="100"
Responsive="true"> Responsive="true">
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.CosteIndirecto" HeaderText="Concepto" HeaderTextAlignment="Alignment.Center" PropertyName="Concepto" Class="colorFilasIntro"> <GridColumn TItem="CASA.CosteIndirecto" HeaderText="Concepto" HeaderTextAlignment="Alignment.Center" PropertyName="Concepto" Class="colorFilasIntro columna30Ancho">
<div class="puntoInfo">
@if (context.idPuntoInformacion != 0 && !string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
}
@context.Concepto @context.Concepto
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe"> <GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe">
<div class="d-flex separadorMoneda"> <div class="d-flex separadorMoneda">
<CurrencyInput HideCurrencySymbol="true" TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@context.importe" ValueExpression="() => context.importe" ValueChanged="(value) => valorCambiado(value,context)"></CurrencyInput> € <CurrencyInput HideCurrencySymbol="true" TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@context.importe" ValueExpression="() => context.importe" ValueChanged="(value) => valorCambiado(value,context)"></CurrencyInput> €
</div> </div>
</GridColumn> </GridColumn>
<GridColumn Class="text-end columna20Ancho" TItem="CASA.CosteIndirecto" HeaderText="Periocidad"> <GridColumn Class="text-end columna20Ancho" TItem="CASA.CosteIndirecto" HeaderText="Periodicidad">
@* @if (context != itemSeleccionado) @* @if (context != itemSeleccionado)
{ {
<span>@listadoPeriodos.FirstOrDefault(p => p.idEnumeracion == context.idPeriodicidad)?.ValorAlfabetico1</span> <span>@listadoPeriodos.FirstOrDefault(p => p.idEnumeracion == context.idPeriodicidad)?.ValorAlfabetico1</span>

View File

@@ -18,7 +18,12 @@
<BodyTemplate> <BodyTemplate>
<div class="row"> <div class="row">
<div class="col-12 formatoCampos"> <div class="col-12 formatoCampos">
<label class="tituloLbl">Denominación grupo:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 1).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 1).Descripcion)
}
Denominación grupo:</label>
<InputText @bind-Value="itemSeleccionadoTemporal.Nombre" class="inputForm" list="sugerenciasGrupo"></InputText> <InputText @bind-Value="itemSeleccionadoTemporal.Nombre" class="inputForm" list="sugerenciasGrupo"></InputText>
<datalist id="sugerenciasGrupo"> <datalist id="sugerenciasGrupo">
@@ -31,14 +36,24 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Coste anual:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 2).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 2).Descripcion)
}
Coste anual:</label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> € <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> €
</div> </div>
</div> </div>
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Jornada laboral:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 3).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 3).Descripcion)
}
Jornada laboral:</label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.JornadaLaboral" class="inputForm derecha"></NumberInput> h/sem <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.JornadaLaboral" class="inputForm derecha"></NumberInput> h/sem
</div> </div>
@@ -48,9 +63,10 @@
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl"> <label class="tituloLbl">
<Tooltip Title=@tituloInfo class="custom-tooltip" role="button"> @if (!string.IsNullOrEmpty( objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 4).Descripcion))
<Icon Name="IconName.InfoCircleFill" Class="text-primary"></Icon> {
</Tooltip> @UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 4).Descripcion)
}
Porcentaje producción: Porcentaje producción:
</label> </label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
@@ -60,7 +76,12 @@
</div> </div>
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Nº de trabajadores:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 5).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 5).Descripcion)
}
Nº de trabajadores:</label>
<NumberInput TValue="double" Step="1" @oninput="EvitarDecimalesTrabajores" Min="0" @bind-Value="itemSeleccionadoTemporal.NumTrabajadores" class="inputForm derecha"></NumberInput> <NumberInput TValue="double" Step="1" @oninput="EvitarDecimalesTrabajores" Min="0" @bind-Value="itemSeleccionadoTemporal.NumTrabajadores" class="inputForm derecha"></NumberInput>
</div> </div>
@@ -93,28 +114,33 @@
Responsive="true"> Responsive="true">
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Denominación del grupo" PropertyName="Nombre" Class="colorA"> <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Denominación del grupo" PropertyName="Nombre" Class="colorA align-content-center">
@context.Nombre @context.Nombre
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda text-end" HeaderText="Coste anual" PropertyName="CosteAnual"> <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda text-end align-content-center" HeaderText="Coste anual" PropertyName="CosteAnual">
<span>@context.CosteAnual.MilesYDecimales() €</span> <span>@context.CosteAnual.MilesYDecimales() €</span>
</GridColumn> </GridColumn>
<GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Jornada laboral" PropertyName="JornadaLaboral"> <GridColumn Class="text-end align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Jornada laboral" PropertyName="JornadaLaboral">
@context.JornadaLaboral.MilesYDecimales() h @context.JornadaLaboral.MilesYDecimales() h
</GridColumn> </GridColumn>
<GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion"> <GridColumn Class="text-end align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion">
@context.PorcentajeProduccion % @context.PorcentajeProduccion %
</GridColumn> </GridColumn>
<GridColumn Class="text-end" TItem="CASA.Trabajador"HeaderTextAlignment="Alignment.Center" HeaderText="Nº de trabajadores" PropertyName="NumTrabajadores"> <GridColumn Class="text-end align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Nº de trabajadores" PropertyName="NumTrabajadores">
@context.NumTrabajadores @context.NumTrabajadores
</GridColumn> </GridColumn>
<GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Coste Anual" PropertyName="CosteAnualTotal"> <GridColumn Class="text-end align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Coste Anual" PropertyName="CosteAnualTotal">
@context.CosteAnualTotal.MilesYDecimales() € @context.CosteAnualTotal.MilesYDecimales() €
</GridColumn> </GridColumn>
<GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Horas Producción" PropertyName="HorasProduccion"> <GridColumn Class="text-end align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Horas Producción" PropertyName="HorasProduccion">
<div class="d-flex flex-column">
@context.HorasProduccion.MilesYDecimales() h @context.HorasProduccion.MilesYDecimales() h
<span>@UtilidadesCASA.pasarHorasASemana(context.HorasProduccion).MilesYDecimales() semanas</span>
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.Trabajador" Class="botonesTabla" HeaderText=""> <GridColumn TItem="CASA.Trabajador" Class="botonesTabla align-content-center" HeaderText="">
<div class="btnTablasEspaciado"> <div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context,false))" class="btnBorrarGuardar"> <span @onclick="@(() => abrirPopupGestionDatos(@context,false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon> <Icon CustomIconName="fas fa-edit"></Icon>
@@ -127,7 +153,7 @@
</GridColumn> </GridColumn>
</GridColumns> </GridColumns>
</Grid> </Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-50px;"> <table class="table tablaCACOA mb-0" style="position:absolute;bottom:-60px;">
<tfoot> <tfoot>
<tr> <tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla"> <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
@@ -137,7 +163,8 @@
</div> </div>
<div> <div>
<span>Total Coste Anual: @objetoCASA.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br /> <span>Total Coste Anual: @objetoCASA.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br />
<span>Total Horas Producción: @objetoCASA.DespachoProfesional.HorasTotalesProduccion.MilesYDecimales() h</span> <span>Total Horas Producción: @objetoCASA.DespachoProfesional.HorasTotalesProduccion.MilesYDecimales() h</span><br />
@* <span>Total semanas Producción: @UtilidadesCASA.pasarHorasASemana(objetoCASA.DespachoProfesional.HorasTotalesProduccion).MilesYDecimales() semanas</span> *@
</div> </div>
</div> </div>

View File

@@ -16,27 +16,26 @@
<UsosTipologiaGrid objetoCASA="objetoCASA"></UsosTipologiaGrid> <UsosTipologiaGrid objetoCASA="objetoCASA"></UsosTipologiaGrid>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="col-md-3"> <div class="col-md-4">
<CascadingValue Value="this"> <CascadingValue Value="this">
<FasesTrabajoProfesionalGrid objetoCASA="objetoCASA"></FasesTrabajoProfesionalGrid> <FasesTrabajoProfesionalGrid objetoCASA="objetoCASA"></FasesTrabajoProfesionalGrid>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="col-md-9"> <div class="col-md-8">
<CascadingValue Value="this"> <CascadingValue Value="this">
<CoeficientesCorrectoresGrid objetoCASA="objetoCASA"></CoeficientesCorrectoresGrid> <CoeficientesCorrectoresGrid objetoCASA="objetoCASA"></CoeficientesCorrectoresGrid>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="col-md-3 col-0"> <div class="col-md-4 ">
</div>
<div class="col-md-9 col-12">
<div class="row">
<div class="col-md-6 col-12">
<CascadingValue Value="this"> <CascadingValue Value="this">
<TablaHorasGrid objetoCASA="objetoCASA"></TablaHorasGrid> <TablaHorasGrid inputsEditables="false" objetoCASA="objetoCASA"></TablaHorasGrid>
</CascadingValue> </CascadingValue>
</div> </div>
</div> <div class="col-md-4 ">
<CascadingValue Value="this">
<TablaHorasGrid inputsEditables="true" objetoCASA="objetoCASA"></TablaHorasGrid>
</CascadingValue>
</div> </div>
} }
@if (modificarHoras) @if (modificarHoras)
@@ -48,7 +47,7 @@
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
<CascadingValue Value="this"> <CascadingValue Value="this">
<TablaHorasGrid objetoCASA="objetoCASA"></TablaHorasGrid> <TablaHorasGrid inputsEditables="true" objetoCASA="objetoCASA"></TablaHorasGrid>
</CascadingValue> </CascadingValue>
</div> </div>
} }

View File

@@ -22,7 +22,15 @@
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.CoeficientesCorrectores" HeaderTextAlignment="Alignment.Center" HeaderText="Factores de Complejidad" PropertyName="Factores" Class="colorFilasIntro"> <GridColumn TItem="CASA.CoeficientesCorrectores" HeaderTextAlignment="Alignment.Center" HeaderText="Factores de Complejidad" PropertyName="Factores" Class="colorFilasIntro">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
}
@context.Nombre @context.Nombre
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.CoeficientesCorrectores" HeaderText=""> <GridColumn TItem="CASA.CoeficientesCorrectores" HeaderText="">
<InputSelect Value="@context.idCorrecion" class="inputForm selectTabla" ValueExpression="() => context.idCorrecion" TValue="int" ValueChanged="(value) => valorFCCambiado(value,context)"> <InputSelect Value="@context.idCorrecion" class="inputForm selectTabla" ValueExpression="() => context.idCorrecion" TValue="int" ValueChanged="(value) => valorFCCambiado(value,context)">
@@ -55,7 +63,14 @@
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.CoeficientesCorrectores" HeaderTextAlignment="Alignment.Center" HeaderText="Factores de Rendimiento" PropertyName="Factores" Class="colorFilasIntro"> <GridColumn TItem="CASA.CoeficientesCorrectores" HeaderTextAlignment="Alignment.Center" HeaderText="Factores de Rendimiento" PropertyName="Factores" Class="colorFilasIntro">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
}
@context.Nombre @context.Nombre
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.CoeficientesCorrectores" HeaderText="" > <GridColumn TItem="CASA.CoeficientesCorrectores" HeaderText="" >
<InputSelect Value="@context.idCorrecion" class="inputForm selectTabla" ValueExpression="() => context.idCorrecion" TValue="int" ValueChanged="(value) => valorFRCambiado(value,context)"> <InputSelect Value="@context.idCorrecion" class="inputForm selectTabla" ValueExpression="() => context.idCorrecion" TValue="int" ValueChanged="(value) => valorFRCambiado(value,context)">

View File

@@ -4,7 +4,12 @@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" /> <Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="d-flex justify-content-between mt-3"> <div class="d-flex justify-content-between mt-3">
<div><b>Fases</b></div> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 12).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 12).Descripcion)
}
<b>Fases</b></div>
</div> </div>
<div style="position:relative;margin-bottom: 15px;"> <div style="position:relative;margin-bottom: 15px;">

View File

@@ -1,14 +1,17 @@
<div class="row"> <div class="row">
<div class="col-md-6" style="margin-top:50px; width: 100%; display: flex;"> <div class="col-md-6" style="margin-top:50px; width:100%;">
<div class="d-flex justify-content-between mt-3 mb-2">
<div><b>@tituloTabla</b></div>
</div>
<table class="tablaAlter" style="width:100%"> <table class="tablaAlter" style="width:100%">
<tr> <tr>
<td class="tdAlter TotalesTabla"> HORAS TRABAJO PROFESIONAL EDIFICACIÓN: </td> <td class="@estiloTabla TotalesTabla"> HORAS TRABAJO PROFESIONAL EDIFICACIÓN: </td>
<td class="tdAlter TotalesTabla tdAlineadoDerecha" style="width: 30%; font-weight:bold;"> <td class="@estiloTabla TotalesTabla tdAlineadoDerecha" style="width: 30%; font-weight:bold;">
@if (!_Parent.modificarHoras) @if (!inputsEditables)
{ {
<span> <span>
@objetoCASA.TrabajoProfesional.TotalHorasTPE.MilesYDecimales() h @objetoCASA.TrabajoProfesional.HorasTPEEstimacion.MilesYDecimales() h
</span> </span>
} }
else else
@@ -20,13 +23,13 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla">Horas TPE Documentacion </td> <td class="TotalesTabla">Horas TPE Documentacion <span style="margin-left:60px;">@UtilidadesCASA.pasarHorasASemana(!inputsEditables ? objetoCASA.TrabajoProfesional.HorasTPEDocumentacionEstimacion : objetoCASA.TrabajoProfesional.HorasTPEDocumentacion).MilesYDecimales() semanas</span> </td>
<td class="tdAlineadoDerecha TotalesTabla"> <td class="tdAlineadoDerecha TotalesTabla">
@if (!_Parent.modificarHoras) @if (!inputsEditables)
{ {
<span> <span>
@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h @objetoCASA.TrabajoProfesional.HorasTPEDocumentacionEstimacion.MilesYDecimales() h
</span> </span>
} }
else else
@@ -41,10 +44,10 @@
<td class="TotalesTabla">Horas TPE Dirección de obra </td> <td class="TotalesTabla">Horas TPE Dirección de obra </td>
<td class="tdAlineadoDerecha TotalesTabla"> <td class="tdAlineadoDerecha TotalesTabla">
@if (!_Parent.modificarHoras) @if (!inputsEditables)
{ {
<span> <span>
@objetoCASA.TrabajoProfesional.HorasTPEDireccion.MilesYDecimales() h @objetoCASA.TrabajoProfesional.HorasTPEDireccionEstimacion.MilesYDecimales() h
</span> </span>
} }
else else
@@ -63,9 +66,13 @@
@code { @code {
[CascadingParameter] [CascadingParameter]
public TrabajoProfesional _Parent { get; set; } public TrabajoProfesional _Parent { get; set; }
[Parameter]
public bool inputsEditables { get; set; }
[Parameter] [Parameter]
public CASA objetoCASA { get; set; } = new CASA(); public CASA objetoCASA { get; set; } = new CASA();
// private string estiloTabla => _Parent.modificarHoras == true ? "" : ""; private string estiloTabla => inputsEditables == true ? "tdAlter" : "";
private string tituloTabla => inputsEditables == true ? "Horas trabajo profesional Edificación" : "Estimación de horas necesarias";
} }

View File

@@ -19,7 +19,13 @@
<BodyTemplate> <BodyTemplate>
<div class="row"> <div class="row">
<div class="col-12 formatoCampos pt-2"> <div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Superficie:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 10).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 10).Descripcion)
}
Superficie:</label>
<InputNumber TValue="double" @bind-Value="itemSeleccionadoTemporal.superficie" <InputNumber TValue="double" @bind-Value="itemSeleccionadoTemporal.superficie"
step="any" step="any"
@oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))" @oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))"
@@ -51,7 +57,12 @@
</div> </div>
<div class="col-12 formatoCampos pt2"> <div class="col-12 formatoCampos pt2">
<label class="tituloLbl">Intervención:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 11).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 11).Descripcion)
}
Intervención:</label>
<InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipoIntervencion" class="inputForm"> <InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipoIntervencion" class="inputForm">
@foreach (var intervencion in intervencionesAux) @foreach (var intervencion in intervencionesAux)
{ {

File diff suppressed because one or more lines are too long

View File

@@ -54,7 +54,14 @@
<div class="row"> <div class="row">
<div class="col-md-4 mb-3"> <div class="col-md-4 mb-3">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 50).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 50).Descripcion)
}
<b>Costes variables</b> <b>Costes variables</b>
</div>
<div class="pt-1 col-md-12 d-flex" style="gap: 40px; height:25px;"> <div class="pt-1 col-md-12 d-flex" style="gap: 40px; height:25px;">
<div class="d-flex"> <div class="d-flex">
@@ -132,7 +139,13 @@
</div> </div>
<div class="col-md-4" style="align-items: flex-end;"> <div class="col-md-4" style="align-items: flex-end;">
<div style="height: 49px;"> <div style="height: 49px;">
<b>Coste hora Despacho Profesional</b> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 51).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 51).Descripcion)
}
<b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
@@ -174,8 +187,14 @@
<div class="col-md-4"> <div class="col-md-4">
<div style="height: 49px;"> <div style="height: 49px;">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 52).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 52).Descripcion)
}
<b>Coste hora Externalización</b> <b>Coste hora Externalización</b>
</div> </div>
</div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>

View File

@@ -5,17 +5,10 @@
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-6 mt-3"> <div class="col-md-6 mt-3">
<div style="height: 24px;"> <div>
<b>Costes Asociados a los Servicios de Arquitectura</b> <b>Costes Asociados a los Servicios de Arquitectura</b>
</div> </div>
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<thead>
<tr>
<th class="colorB fw-bold">Concepto</th>
<th class="colorB fw-bold text-end"></th>
</tr>
</thead>
<tbody> <tbody>
<tr> <tr>
<td class="tdAlter TotalesTabla fw-bold ">COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td> <td class="tdAlter TotalesTabla fw-bold ">COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td>
@@ -23,7 +16,15 @@
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla colorFilasIntro "><b>Beneficio</b> (antes de impuestos)</td> <td class="TotalesTabla colorFilasIntro ">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 54).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 54).Descripcion)
}
<b>Beneficio</b> (antes de impuestos)
</div></td>
<td class="TotalesTabla text-end"> <td class="TotalesTabla text-end">
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<InputNumber TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoURBAN.CostesProduccion.Beneficio" ValueExpression="() => objetoURBAN.CostesProduccion.Beneficio" ValueChanged="(value) => BeneficioCambiado(value)"></InputNumber> % <InputNumber TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoURBAN.CostesProduccion.Beneficio" ValueExpression="() => objetoURBAN.CostesProduccion.Beneficio" ValueChanged="(value) => BeneficioCambiado(value)"></InputNumber> %

View File

@@ -6,7 +6,15 @@
<div class="col-md-6 row"> <div class="col-md-6 row">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="table tablaCACOA tablaCACOA2 mb-0">
<tr> <tr>
<td class="colorFilasIntro fw-bold w4">Plazo de presentación de la documentación:</td> <td class="colorFilasIntro fw-bold w4">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 53).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 53).Descripcion)
}
Plazo de presentación de la documentación:
</div></td>
<td class="text-end"> <td class="text-end">
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
@* <InputNumber TValue="int" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos" ValueExpression="() => objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos" ValueChanged="(value) => PlazoPresentacionDocumentosCambiado(value)"></InputNumber> meses *@ @* <InputNumber TValue="int" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos" ValueExpression="() => objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos" ValueChanged="(value) => PlazoPresentacionDocumentosCambiado(value)"></InputNumber> meses *@

View File

@@ -21,15 +21,21 @@
Responsive="true"> Responsive="true">
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" HeaderText="Concepto" PropertyName="Concepto" Class="colorFilasIntro"> <GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" HeaderText="Concepto" PropertyName="Concepto" Class="colorFilasIntro columna30Ancho">
<div class="puntoInfo">
@if (context.idPuntoInformacion != 0 && !string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
}
@context.Concepto @context.Concepto
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe"> <GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe">
<div class="d-flex separadorMoneda"> <div class="d-flex separadorMoneda">
<CurrencyInput HideCurrencySymbol="true" TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@context.importe" ValueExpression="() => context.importe" ValueChanged="(value) => valorCambiado(value,context)"></CurrencyInput> € <CurrencyInput HideCurrencySymbol="true" TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@context.importe" ValueExpression="() => context.importe" ValueChanged="(value) => valorCambiado(value,context)"></CurrencyInput> €
</div> </div>
</GridColumn> </GridColumn>
<GridColumn Class="text-end columna20Ancho" HeaderTextAlignment="Alignment.Center" TItem="CASA.CosteIndirecto" HeaderText="Periocidad"> <GridColumn Class="text-end columna20Ancho" HeaderTextAlignment="Alignment.Center" TItem="CASA.CosteIndirecto" HeaderText="Periodicidad">
@* @if (context != itemSeleccionado) @* @if (context != itemSeleccionado)
{ {
<span>@listadoPeriodos.FirstOrDefault(p => p.idEnumeracion == context.idPeriodicidad)?.ValorAlfabetico1</span> <span>@listadoPeriodos.FirstOrDefault(p => p.idEnumeracion == context.idPeriodicidad)?.ValorAlfabetico1</span>

View File

@@ -19,7 +19,12 @@
<BodyTemplate> <BodyTemplate>
<div class="row"> <div class="row">
<div class="col-12 formatoCampos"> <div class="col-12 formatoCampos">
<label class="tituloLbl">Denominación grupo:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 37).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 37).Descripcion)
}
Denominación grupo:</label>
<InputText @bind-Value="itemSeleccionadoTemporal.Nombre" class="inputForm" list="sugerenciasGrupo"></InputText> <InputText @bind-Value="itemSeleccionadoTemporal.Nombre" class="inputForm" list="sugerenciasGrupo"></InputText>
<datalist id="sugerenciasGrupo"> <datalist id="sugerenciasGrupo">
@@ -32,14 +37,25 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Coste anual:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 38).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 38).Descripcion)
}
Coste anual:</label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> € <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> €
</div> </div>
</div> </div>
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Jornada laboral:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 39).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 39).Descripcion)
}
Jornada laboral:
</label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
<NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.JornadaLaboral" class="inputForm derecha"></NumberInput> h/sem <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.JornadaLaboral" class="inputForm derecha"></NumberInput> h/sem
</div> </div>
@@ -49,9 +65,10 @@
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl"> <label class="tituloLbl">
<Tooltip Title=@tituloInfo class="custom-tooltip" role="button"> @if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 40).Descripcion))
<Icon Name="IconName.InfoCircleFill" Class="text-primary"></Icon> {
</Tooltip> @UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 40).Descripcion)
}
Porcentaje producción: Porcentaje producción:
</label> </label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
@@ -61,7 +78,12 @@
</div> </div>
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl">Nº de trabajadores:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 41).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 41).Descripcion)
}
Nº de trabajadores:</label>
<NumberInput TValue="double" Step="1" @oninput="EvitarDecimalesTrabajores" Min="0" @bind-Value="itemSeleccionadoTemporal.NumTrabajadores" class="inputForm derecha"></NumberInput> <NumberInput TValue="double" Step="1" @oninput="EvitarDecimalesTrabajores" Min="0" @bind-Value="itemSeleccionadoTemporal.NumTrabajadores" class="inputForm derecha"></NumberInput>
</div> </div>
@@ -94,26 +116,31 @@
Responsive="true"> Responsive="true">
<GridColumns> <GridColumns>
<GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Denominación del grupo" PropertyName="Nombre" Class="colorA"> <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Denominación del grupo" PropertyName="Nombre" Class="colorA align-content-center">
@context.Nombre @context.Nombre
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda text-end" HeaderText="Coste anual" PropertyName="CosteAnual"> <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda text-end align-content-center" HeaderText="Coste anual" PropertyName="CosteAnual">
<span>@context.CosteAnual.MilesYDecimales() €</span> <span>@context.CosteAnual.MilesYDecimales() €</span>
</GridColumn> </GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Jornada laboral" PropertyName="JornadaLaboral"> <GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Jornada laboral" PropertyName="JornadaLaboral">
@context.JornadaLaboral.MilesYDecimales() h @context.JornadaLaboral.MilesYDecimales() h
</GridColumn> </GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion"> <GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion">
@context.PorcentajeProduccion % @context.PorcentajeProduccion %
</GridColumn> </GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Nº de trabajadores" PropertyName="NumTrabajadores"> <GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Nº de trabajadores" PropertyName="NumTrabajadores">
@context.NumTrabajadores @context.NumTrabajadores
</GridColumn> </GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Coste Anual" PropertyName="CosteAnualTotal"> <GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Coste Anual" PropertyName="CosteAnualTotal">
@context.CosteAnualTotal.MilesYDecimales() € @context.CosteAnualTotal.MilesYDecimales() €
</GridColumn> </GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Horas Producción" PropertyName="HorasProduccion"> <GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Horas Producción" PropertyName="HorasProduccion">
<div class="d-flex flex-column">
@context.HorasProduccion.MilesYDecimales() h @context.HorasProduccion.MilesYDecimales() h
<span>@UtilidadesCASA.pasarHorasASemana(context.HorasProduccion).MilesYDecimales() semanas</span>
</div>
</GridColumn> </GridColumn>
<GridColumn TItem="CASA.Trabajador" Class="botonesTabla" HeaderText=""> <GridColumn TItem="CASA.Trabajador" Class="botonesTabla" HeaderText="">
<div class="btnTablasEspaciado"> <div class="btnTablasEspaciado">
@@ -128,7 +155,7 @@
</GridColumn> </GridColumn>
</GridColumns> </GridColumns>
</Grid> </Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-50px;"> <table class="table tablaCACOA mb-0" style="position:absolute;bottom:-60px;">
<tfoot> <tfoot>
<tr> <tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla"> <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
@@ -139,6 +166,7 @@
<div> <div>
<span>Total Coste Anual: @objetoURBAN.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br /> <span>Total Coste Anual: @objetoURBAN.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br />
<span>Total Horas Producción: @objetoURBAN.DespachoProfesional.HorasTotalesProduccion.MilesYDecimales() h</span> <span>Total Horas Producción: @objetoURBAN.DespachoProfesional.HorasTotalesProduccion.MilesYDecimales() h</span>
@* <span>Total semanas Producción: @UtilidadesCASA.pasarHorasASemana(objetoURBAN.DespachoProfesional.HorasTotalesProduccion).MilesYDecimales() semanas</span> *@
</div> </div>
</div> </div>

View File

@@ -24,7 +24,7 @@
<HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN objetoURBAN="objetoURBAN"></HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN> <HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN objetoURBAN="objetoURBAN"></HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="row mt-auto"> <div class="row mt-auto" style="padding-top: 40px;">
<div class="col-md-12 d-flex justify-content-end"> <div class="col-md-12 d-flex justify-content-end">
<table class="tablaAlter"> <table class="tablaAlter">
<tr> <tr>

View File

@@ -4,13 +4,13 @@
@using HerramientaCASA.Components.Pages.HerramientaURBANTabs.TrabajoProfURBAN @using HerramientaCASA.Components.Pages.HerramientaURBANTabs.TrabajoProfURBAN
@using bdHerramientaCACOA.HerramientaURBAN @using bdHerramientaCACOA.HerramientaURBAN
<div class="col-md-12 d-flex mt-3" style="gap: 40px;"> <div class="col-md-12 d-flex mt-3" style="gap: 40px;">
<RadioInput style="margin-right: 10px;" Label="Cálculo completo" Value="modificarTabla" ValueExpression="() => modificarTabla" ValueChanged="(value) => modificarTablaChanged(value)" /> <RadioInput style="margin-right: 10px;" Label="Cálculo por tipo de documento" Value="modificarTabla" ValueExpression="() => modificarTabla" ValueChanged="(value) => modificarTablaChanged(value)" />
<RadioInput style="margin-right: 10px;" Label="Cálculo por tiempo" Value="modificarHoras" ValueExpression="() => modificarHoras" ValueChanged="(value) => modificarHorasChanged(value)" /> <RadioInput style="margin-right: 10px;" Label="Cálculo por tiempo" Value="modificarHoras" ValueExpression="() => modificarHoras" ValueChanged="(value) => modificarHorasChanged(value)" />
</div> </div>
@if (modificarTabla) @if (modificarTabla)
{ {
<div class="row p-0 m-0"> <div class="row p-0 m-0">
<div class="col-md-12 mt-3 mb-3"> <div class="col-md-12 mt-4 mb-3">
<CascadingValue Value="this"> <CascadingValue Value="this">
<DocumentosURBAN objetoURBAN="objetoURBAN"></DocumentosURBAN> <DocumentosURBAN objetoURBAN="objetoURBAN"></DocumentosURBAN>
</CascadingValue> </CascadingValue>
@@ -23,10 +23,12 @@
<FasesURBAN @ref=fasesRef objetoURBAN="objetoURBAN"></FasesURBAN> <FasesURBAN @ref=fasesRef objetoURBAN="objetoURBAN"></FasesURBAN>
</CascadingValue> </CascadingValue>
</div> </div>
<div class="col-md-5"> <div class="col-md-4">
<CascadingValue Value="this"> <CascadingValue Value="this">
<InstrumentosURBAN objetoURBAN="objetoURBAN"></InstrumentosURBAN> <InstrumentosURBAN objetoURBAN="objetoURBAN"></InstrumentosURBAN>
</CascadingValue> </CascadingValue>
</div> </div>
</div> </div>
} }
@@ -124,7 +126,7 @@ else
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }
private async void CalcularWea() public async void CalcularWea()
{ {
objetoURBAN.CalcularCostesProduccion(); objetoURBAN.CalcularCostesProduccion();
} }

View File

@@ -28,8 +28,13 @@
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Documentación Mínima:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 46).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 46).Descripcion)
}
Documentación Mínima:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoURBAN.TrabajoProfesional.DocumentacionMinima" Data="objetoURBAN.TrabajoProfesional.DocumentacionMinima"
@@ -47,8 +52,13 @@
</GridColumns> </GridColumns>
</Grid> </Grid>
</div> </div>
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Documentación Opcional:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 63).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 63).Descripcion)
}
Documentación Opcional:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoURBAN.TrabajoProfesional.DocumentacionOpcional" Data="objetoURBAN.TrabajoProfesional.DocumentacionOpcional"
@@ -72,8 +82,13 @@
</Grid> </Grid>
</div> </div>
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Datos Necesarios:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 47).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 47).Descripcion)
}
Datos Necesarios:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoURBAN.TrabajoProfesional.DatosNecesarios" Data="objetoURBAN.TrabajoProfesional.DatosNecesarios"

View File

@@ -6,7 +6,12 @@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" /> <Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="d-flex justify-content-between mt-3"> <div class="d-flex justify-content-between mt-3">
<div><b>Fases</b></div> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 48).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 48).Descripcion)
}
<b>Fases</b></div>
</div> </div>
<div style="position:relative;margin-bottom: 35px;"> <div style="position:relative;margin-bottom: 35px;">

View File

@@ -9,8 +9,13 @@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" /> <Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div> <div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div> <div class="mt-3 mb-3 puntoInfo">
<p class="col-6"> @if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 49).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 49).Descripcion)
}
<b>Innovacion de los instrumentos</b></div>
<p class="mt-2">
@* @if (!nuevaRedaccion) @* @if (!nuevaRedaccion)
{ *@ { *@
<InputNumber TValue="double" Value="@objetoURBAN.TrabajoProfesional.valorInstrumentos" <InputNumber TValue="double" Value="@objetoURBAN.TrabajoProfesional.valorInstrumentos"
@@ -36,11 +41,28 @@
} }
<table class="tablaAlter mt-4" style="width: 100%;"> <table class="tablaAlter mt-4" style="width: 100%;">
<tr> <tr>
<td class="tdAlter TotalesTabla" style="width: 320px;">HORAS TRABAJO PROFESIONAL URBANISMO: </td> <td class=" TotalesTabla" style="width: 70%;">Estimación de horas necesarias: </td>
<td class="tdAlter TotalesTabla tdAlineadoDerecha">@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</td> <td class=" TotalesTabla tdAlineadoDerecha">@objetoURBAN.TrabajoProfesional.horasTrabProfesionalEstimacion.MilesYDecimales() h</td>
</tr>
<tr>
<td class="TotalesTabla tdAlter" style="width:50%;">Horas del trabajo profesional Urbanismo: </td>
<td class="TotalesTabla tdAlineadoDerecha">
<div class=" d-flex">
<InputNumber TValue="double" @onblur="_Parent.CalcularWea" @bind-Value="@objetoURBAN.TrabajoProfesional.horasTrabProfesional" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
</td>
</tr>
<tr>
<td class="TotalesTabla" style="width:50%;"></td>
<td class="TotalesTabla tdAlineadoDerecha">
<div class="text-end">
<span>@UtilidadesCASA.pasarHorasASemana(objetoURBAN.TrabajoProfesional.horasTrabProfesional).MilesYDecimales() semanas</span>
</div>
</td>
</tr> </tr>
</table> </table>
</div> </div>
<div style="position:relative;margin-bottom: 15px;"> <div style="position:relative;margin-bottom: 15px;">

View File

@@ -1,21 +1,33 @@
<div id="DespachoImprimir" class="d-flex flex-column align-items-center"> <div id="DespachoImprimir" class="pagePrincipal d-flex flex-column align-items-center">
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto mb-5">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex"> @* ENCABEZADO DE LA PAGINA *@
<label style="color: #078b98 !important"><b>Despacho Profesional</b></label> <div class="EncabezadoImprimir">
<p>
@msTextoEncabezado
</p>
<div class="mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoCASA.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
<div class="col-8 mx-auto" style="align-items: flex-end;">
<div style="height: 49px;">
<b>Coste hora Despacho Profesional</b>
</div> </div>
<div class="table-responsive"> @* TABLA COSTE HORA DESPACHO PROFESIONAL *@
<table class="table tablaCACOA tablaCACOA2 mb-0"> <div class="col-8 mx-auto" style="align-items: flex-end; margin-bottom:30px;">
<div class="TituloTablaImprimir">
<b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div>
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Tipo de costes</th> <th>Tipo de costes</th>
<th class="colorB fw-bold">Coste/hora</th> <th>Coste/hora</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -37,7 +49,7 @@
<tr> <tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla"> <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
<div style="height:28px; align-content:center;"> <div style="height:28px; align-content:center;">
Total Coste hora Despacho Profesional: <span> @objetoCASA.CostesProduccion.TotalCostes.MilesYDecimales() €/hora</span> Coste hora Despacho Profesional: <span> @objetoCASA.CostesProduccion.TotalCostes.MilesYDecimales() €/hora</span>
</div> </div>
</td> </td>
</tr> </tr>
@@ -46,17 +58,20 @@
</div> </div>
</div> </div>
@* TABLA COSTE HORA EXTERNALIZACION *@
<div class="col-8 mx-auto"> <div class="col-8 mx-auto">
<div style="height: 49px;"> <div class="TituloTablaImprimir">
<b>Coste hora Externalización</b> <b>Coste hora Externalización</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Externalización</th> <th width="75%">Externalización</th>
<th class="colorB fw-bold">Porcentaje</th> <th>Porcentaje</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -81,32 +96,31 @@
</div> </div>
</div> </div>
<div class="col-12 mx-auto mb-5">
<div class="mb-4 col-11 mx-auto justify-content-center d-flex">
<label style="color: #078b98 !important"><b>Trabajo Profesional</b></label>
</div>
@if (objetoCASA.TrabajoProfesional.Usos.Count != 0) <div class="col-12 mx-auto mb-5">
{
@* TABLA USOS/TIPOLOGIAS *@
<div class="col-11 mx-auto" style="align-items: flex-end;"> <div class="col-11 mx-auto" style="align-items: flex-end;">
<div style="height: 49px;"> <div class="TituloTablaImprimir">
<b>Usos/Tipologías</b> <b>Usos/Tipologías</b>
</div> </div>
<div class="table-responsive espacioTablas">
<div class="table-responsive"> <table class="TablaImprimir mb-0" style="width:100%;">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Superficie</th> <th width="15%">Superficie (m²)</th>
<th class="colorB fw-bold">Usos</th> <th width="20%">Usos</th>
<th class="colorB fw-bold">Tipología</th> <th width="35%">Tipología</th>
<th class="colorB fw-bold">Intervención</th> <th width="30%">Intervención</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (totalUsos != 0)
@foreach(var uso in objetoCASA.TrabajoProfesional.Usos){ {
@foreach (var uso in objetoCASA.TrabajoProfesional.Usos)
{
<tr> <tr>
<td class="text-end">@uso.superficie.MilesYDecimales()</td> <td class="text-end">@uso.superficie.MilesYDecimales()</td>
<td>@objetoCASA.Enumerados.GruposTipologias?.FirstOrDefault(x => x.idEnumeracion == uso.idGrupoTipologia)?.ValorAlfabetico1</td> <td>@objetoCASA.Enumerados.GruposTipologias?.FirstOrDefault(x => x.idEnumeracion == uso.idGrupoTipologia)?.ValorAlfabetico1</td>
@@ -114,80 +128,74 @@
<td>@objetoCASA.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1</td> <td>@objetoCASA.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1</td>
</tr> </tr>
} }
}
else
{
<tr>
<td colspan="4" class="text-center">No hay registros</td>
</tr>
}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="4" class="text-end fw-bold colorC TotalesTabla"> <td colspan="4" class="fw-bold colorC TotalesTabla">
<div style="height:28px; align-content:center;"> <div style="height:28px;">
Total superficie: <span> @objetoCASA.TrabajoProfesional.Usos.Sum(x=>x.superficie).MilesYDecimales()</span> Total superficie: <span> @objetoCASA.TrabajoProfesional.Usos.Sum(x => x.superficie).MilesYDecimales()</span>
</div> </div>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
</div> </div>
</div> </div>
} <div class="col-10 mx-auto d-flex justify-content-center" style="@estiloTrabajos">
<div class="col-md-10 row ">
<div class="TituloTablaImprimir">
<b>Trabajo profesional</b>
</div>
<div class="col-10 mx-auto" style="align-items: flex-end;"> @* PLAZO DE PRESENTACION *@
<div class="d-flex justify-content-center"> <div style="font-size:9pt;" class="fw-bold">
<div class="col-md-10"> <label>Plazo de presentación de la documentación: <span>@objetoCASA.CostesProduccion.PlazoPresentacionDocumentos meses</span></label>
<table class="table tablaCACOA tablaCACOA2 mb-0"> </div>
<tr>
<td class="colorFilasIntro fw-bold">Plazo de presentación de la documentación:</td>
<td class="text-end">
<span class="inputForm formatoMoneda text-end">@objetoCASA.CostesProduccion.PlazoPresentacionDocumentos meses</span>
</td>
</tr>
</table>
<div class="mb-3" style="height:20px;"> <div class="mb-3" style="height:20px;">
@if (objetoCASA.CostesProduccion.IncrementoUrgencia > 0) @if (objetoCASA.CostesProduccion.IncrementoUrgencia > 0)
{ {
<label style="font-size:10px;">Incremento del @objetoCASA.CostesProduccion.IncrementoUrgencia% en los costes de producción de la documentación por plazo de presentación reducido</label> <label style="font-size:10px;">Incremento del @objetoCASA.CostesProduccion.IncrementoUrgencia% en los costes de producción de la documentación por plazo de presentación reducido</label>
} }
</div> </div>
</div>
</div>
</div> @* TABLA TRABAJO/HORA *@
<div class="col-10 mx-auto d-flex justify-content-center" style="align-items: flex-end;">
<div class="col-md-10 row "> <table class="TablaImprimir mb-0">
<div style="height: 49px;">
<b>Trabajo profesional</b>
</div>
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Trabajos</th> <th>Trabajos</th>
<th class="colorB fw-bold">Horas</th> <th>Horas</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="colorB fw-bold">Horas elaboración documentación</td> <td>Horas elaboración documentación</td>
<td class="text-start">@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h</td> <td class="text-end">@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h</td>
</tr> </tr>
<tr> <tr>
<td class="colorB text-end">Horas de documentación en Despacho Profesional</td> <td class="text-end">Horas de documentación en Despacho Profesional</td>
<td class="text-start">@objetoCASA.CostesProduccion.HorasProduccionDespachoElabDocumentacion.MilesYDecimales() h</td> <td class="text-start">@objetoCASA.CostesProduccion.HorasProduccionDespachoElabDocumentacion.MilesYDecimales() h</td>
</tr> </tr>
<tr> <tr>
<td class="colorB text-end">Horas de documentación mediante externalización</td> <td class="text-end">Horas de documentación mediante externalización</td>
<td class="text-start">@objetoCASA.CostesProduccion.NumHorasMinimoExt.MilesYDecimales() h</td> <td class="text-start">@objetoCASA.CostesProduccion.NumHorasMinimoExt.MilesYDecimales() h</td>
</tr> </tr>
<tr> <tr>
<td class="colorB fw-bold">Horas de dirección de obra</td> <td>Horas de dirección de obra</td>
<td class="text-end">@objetoCASA.TrabajoProfesional.HorasTPEDireccion.MilesYDecimales() h</td> <td class="text-end">@objetoCASA.TrabajoProfesional.HorasTPEDireccion.MilesYDecimales() h</td>
</tr> </tr>
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="2" class="TotalesTabla text-end fw-bold">Horas trabajo profesional @objetoCASA.TrabajoProfesional.TotalHorasTPE.MilesYDecimales() h</td> <td colspan="2" class="TotalesTabla text-end fw-bold">Horas trabajo profesional @objetoCASA.TrabajoProfesional.TotalHorasTPE.MilesYDecimales() h</td>
@@ -200,57 +208,64 @@
</div> </div>
</div> </div>
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto" >
<div class="mb-4 col-8 mx-auto justify-content-center d-flex"> @* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@
<label style="color: #078b98 !important"><b>Costes de Producción</b></label>
<div class="col-8 mx-auto" style=" margin-top:70px;">
<div class="TituloTablaImprimir">
</div> </div>
<div class="col-8 mx-auto mb-4"> <div class="TituloTablaImprimir" style=" margin-top:70px;">
<p>
<div style="height: 49px;">
<b>Costes Asociados a los Servicios de Arquitectura</b> <b>Costes Asociados a los Servicios de Arquitectura</b>
</p>
</div> </div>
<table class="tablaAlter" style="width:100%"> <table class="tablaAlter" style="width:100%;">
<tbody style="font-size:9pt;">
<tr> <tr>
<td class="tdAlter TotalesTabla" style="font-size:12px;"> COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td> <td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td>
<td class="tdAlter TotalesTabla tdAlineadoDerecha" style="width: 30%; font-weight:bold;font-size:12px;"> <td class=" TotalesTabla tdAlineadoDerecha" style="width: 30%;">
@objetoCASA.CostesProduccion.CostesProduccionTrabProf.MilesYDecimales() € @objetoCASA.CostesProduccion.CostesProduccionTrabProf.MilesYDecimales() €
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla" style="font-size:12px;"><b>Beneficio</b> (antes de impuestos) </td> <td class="TotalesTabla">Beneficio <span style="font-size:7pt;">(antes de impuestos)</span> </td>
<td class="tdAlineadoDerecha TotalesTabla" style="font-size:12px;"> <td class="tdAlineadoDerecha TotalesTabla">
<div class="justify-content-end" style="gap:3px;"> <div class="justify-content-end" style="gap:3px;">
<span>@objetoCASA.CostesProduccion.Beneficio %</span> <span>@objetoCASA.CostesProduccion.Beneficio %</span>
</div> </div>
</td> </td>
</tr> </tr>
</tbody>
<tfoot style=" border-top: 1px solid black;">
<tr> <tr>
<td colspan="2" class="text-end fw-bold TotalesTabla tablaCACOA"> <td colspan="2" class="text-end fw-bold TotalesTabla tablaCACOA">
Precio del trabajo profesional: <span>@objetoCASA.CostesProduccion.PrecioTrabProf.MilesYDecimales() € </span> Precio del trabajo profesional: <span>@objetoCASA.CostesProduccion.PrecioTrabProf.MilesYDecimales() € </span>
</td> </td>
</tr> </tr>
</tfoot>
</table> </table>
</div> </div>
@* TABLA OTROS TRABAJOS INCLUIDOS EN EL ENCARGO *@
@if (objetoCASA.CostesProduccion.OtrosTrabajos.Count != 0) @if (objetoCASA.CostesProduccion.OtrosTrabajos.Count != 0)
{ {
<div class="col-8 mx-auto"> <div class="col-8 mx-auto">
<div style="height: 49px;"> <div class="TituloTablaImprimir" >
<b>Otros trabajos incluidos en el Encargo</b> <b>Otros trabajos incluidos en el Encargo</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Encargo</th> <th>Encargo</th>
<th class="colorB fw-bold">Precio</th> <th >Precio</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -263,7 +278,7 @@
</tr> </tr>
} }
</tbody> </tbody>
<tfoot> <tfoot style=" border-top: 1px solid black;">
<tr> <tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla"> <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
@@ -276,8 +291,8 @@
</td> </td>
</tr> </tr>
<tr> <tr style=" border-bottom: 1px solid black;">
<td colspan="2" class="text-end fw-bold TotalesTabla"> <td colspan="2" style="font-size:10pt;" class="text-end fw-bold TotalesTabla">
Precio del encargo: <span>@objetoCASA.CostesProduccion.PrecioDelEncargo.MilesYDecimales() € </span> Precio del encargo: <span>@objetoCASA.CostesProduccion.PrecioDelEncargo.MilesYDecimales() € </span>
</td> </td>
</tr> </tr>
@@ -289,6 +304,18 @@
</div> </div>
} }
</div> </div>
<div class="FooterImprimir">
<p>
@mspie1
</p>
<p>
@mspie2
</p>
</div>
</div> </div>
@@ -298,11 +325,32 @@
[Parameter] [Parameter]
public bdHerramientaCACOA.CASA objetoCASA { get; set; } = new bdHerramientaCACOA.CASA(); public bdHerramientaCACOA.CASA objetoCASA { get; set; } = new bdHerramientaCACOA.CASA();
public int totalUsos = 0;
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
public string estiloTrabajos = "";
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
MarkupString mspie1 => (MarkupString)pie1;
MarkupString mspie2 => (MarkupString)pie2;
string textoEncabezado = "";
string pie1 = "";
string pie2 = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
totalUsos = objetoCASA.TrabajoProfesional.Usos.Count;
estiloTrabajos = objetoCASA.TrabajoProfesional.Usos.Count != 0 ? "align-items: flex-end; margin-top:50px;" : "align-items: flex-end; margin-top:150px;";
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFCASA")).ValorAlfabeticoLargo;
pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo;
pie2 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE2")).ValorAlfabeticoLargo;
} }
public void RefreshState() public void RefreshState()
{ {

View File

@@ -1,24 +1,36 @@
@using System.Globalization @using System.Globalization
@using bdHerramientaCACOA.HerramientaURBAN @using bdHerramientaCACOA.HerramientaURBAN
<div id="DespachoURBANImprimir" class="d-flex flex-column align-items-center"> <div id="DespachoURBANImprimir" class="d-flex flex-column align-items-center pagePrincipal">
@* DESPACHO URBAN*@ @* DESPACHO URBAN*@
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto mb-5">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex"> @* ENCABEZADO DE LA PAGINA *@
<label style="color: #078b98 !important"><b>Despacho Profesional</b></label> <div class="EncabezadoImprimir">
<p>
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoURBAN.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div>
@* COSTE HORA DE LOS TRABAJOS *@
<div class="col-8 mx-auto" style="align-items: flex-end;"> <div class="col-8 mx-auto" style="align-items: flex-end;">
<div style="height: 49px;"> <div class="TituloTablaImprimir">
<b>Coste hora Despacho Profesional</b> <b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Tipo de costes</th> <th>Tipo de costes</th>
<th class="colorB fw-bold">Coste/hora</th> <th>Coste/hora</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -49,13 +61,14 @@
</div> </div>
</div> </div>
<div class="col-8 mx-auto"> @* COSTE HORA EXTERNALIZACION *@
<div class="col-8 mx-auto" style="margin-top:50px;">
<div style="height: 49px;"> <div class="TituloTablaImprimir" >
<b>Coste hora Externalización</b> <b>Coste hora Externalización</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Externalización</th> <th class="colorB fw-bold">Externalización</th>
@@ -86,60 +99,115 @@
</div> </div>
@* TRABAJAO PROFESIONAL *@ @* TRABAJAO PROFESIONAL *@
<div class="col-12 mx-auto mb-5"> <div class="@separacionTabla">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex"> <div class="col-8 mx-auto" style="margin-top:50px;">
<label style="color: #078b98 !important"><b>Trabajo Profesional</b></label>
</div> <div class="table-responsive espacioTablas">
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> @* <div class="formatoCampos pt-2" style="font-size:9pt;">
<div class="formatoCampos pt-2">
<label class="tituloLbl">Tipo de Documento:</label> <label class="tituloLbl">Tipo de Documento:</label>
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoURBAN.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoURBAN.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label> <label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoURBAN.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoURBAN.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
} }
else
{
<label>No Seleccionado</label>
}
</div> </div>
<div class="formatoCampos pt-2"> <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Documento:</label> <label class="tituloLbl">Documento:</label>
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
<label>@objetoURBAN.Enumerados.ProyectosPorTipo(objetoURBAN.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoURBAN.TrabajoProfesional.idTipoProyecto).Descripcion</label> <label>@objetoURBAN.Enumerados.ProyectosPorTipo(objetoURBAN.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoURBAN.TrabajoProfesional.idTipoProyecto).Descripcion</label>
} }
else
{
<label>No Seleccionado</label>
}
</div> *@
<table class="mb-0" style="width:100%;">
<thead>
<tr>
<th >Tipo de Documento:</th>
<th>Documento:</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-end">
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoURBAN.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoURBAN.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
<td class="text-end">
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@objetoURBAN.Enumerados.ProyectosPorTipo(objetoURBAN.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoURBAN.TrabajoProfesional.idTipoProyecto).Descripcion</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
@* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto" style="margin-top:50px;">
@* TABLA DE DATOS MINIMOS *@ @* TABLA DE DATOS MINIMOS *@
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Documentación Mínima:</b> <b>Documentación Mínima:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoURBAN.TrabajoProfesional.DocumentacionMinima.Count > 0)
{
@foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionMinima) @foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionMinima)
{ {
<tr> <tr>
<td class="colorB w4">@item.Descripcion</td> <td class="colorB w4">@item.Descripcion</td>
</tr> </tr>
} }
}
else
{
<tr>
<td class="colorB w4 text-center">No hay registros</td>
</tr>
}
</tbody> </tbody>
</table> </table>
</div> </div>
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:80px;">
</div>
<div class="TituloTablaImprimir" style="margin-top:80px;">
<b>Documentación Opcional:</b> <b>Documentación Opcional:</b>
</div> </div>
@if (objetoURBAN.TrabajoProfesional.DocumentacionOpcional.Count != 0) <div class="table-responsive espacioTablas">
{ <table class="TablaImprimir mb-0" style="width:100%;">
<div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
@@ -147,6 +215,9 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoURBAN.TrabajoProfesional.DocumentacionOpcional.Count != 0)
{
@foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionOpcional) @foreach (var item in objetoURBAN.TrabajoProfesional.DocumentacionOpcional)
{ {
<tr> <tr>
@@ -170,22 +241,24 @@
</td> </td>
</tr> </tr>
} }
</tbody>
</table>
</div>
} }
else else
{ {
<label>Sin documentación</label> <tr>
<td colspan="2" class="colorB text-center">No hay registros</td>
</tr>
} }
</tbody>
</table>
</div>
</div> </div>
@* TABLA DE DATOS NECESARIOS *@ @* TABLA DE DATOS NECESARIOS *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Datos Necesarios:</b> <b>Datos Necesarios:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
@@ -193,6 +266,8 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoURBAN.TrabajoProfesional.DatosNecesarios.Count != 0)
{
@foreach (var item in objetoURBAN.TrabajoProfesional.DatosNecesarios) @foreach (var item in objetoURBAN.TrabajoProfesional.DatosNecesarios)
{ {
<tr> <tr>
@@ -200,16 +275,26 @@
<td class="colorB w4 text-end">@item.ValorNecesario</td> <td class="colorB w4 text-end">@item.ValorNecesario</td>
</tr> </tr>
} }
}
else
{
<tr>
<td colspan="2" class="colorB text-center">No hay registros</td>
</tr>
}
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
@* TABLA FASES *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Datos Necesarios:</b> <b>Fases:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
@@ -259,14 +344,17 @@
@* INNOVACIÓN INSTRUMENTOS*@ @* INNOVACIÓN INSTRUMENTOS*@
<div class="col-11 mx-auto mb-5"> <div class="col-11 mx-auto mb-5">
<div> <div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div> <div class="TituloTablaImprimir" style="margin-top:80px;">
<p class="col-6"> </div>
<div class="mb-3 TituloTablaImprimir" style="margin-top:80px;"><b>Innovacion de los instrumentos</b></div>
<p style="font-size:9pt;" class="col-6">
<label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label> <label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label>
</p> </p>
@foreach (var enu in objetoURBAN.Enumerados.ListaInstrumentos) @foreach (var enu in objetoURBAN.Enumerados.ListaInstrumentos)
{ {
<div class="form-check" style="gap:10px;"> <div class="form-check" style="gap:10px; font-size:9pt;">
@if (enu.Seleccionado) @if (enu.Seleccionado)
{ {
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-fill" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-fill" viewBox="0 0 16 16">
@@ -283,13 +371,10 @@
<label style="margin-left:10px;" class="form-check-label" for="@enu.idEnumeracion">@enu.Descripcion</label> <label style="margin-left:10px;" class="form-check-label" for="@enu.idEnumeracion">@enu.Descripcion</label>
</div> </div>
} }
<table class="tablaAlter mt-4" style="width: 100%;">
<tr>
<td class="tdAlter TotalesTabla" style="width: 320px;">HORAS TRABAJO PROFESIONAL URBANISMO: </td>
<td class="tdAlter TotalesTabla tdAlineadoDerecha">@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</td>
</tr>
</table>
<div style="font-size:9pt;" class="fw-bold mt-2">
<label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label>
</div>
</div> </div>
@@ -298,24 +383,22 @@
@* PLAZOS Y HORAS *@ @* PLAZOS Y HORAS *@
<div class="col-11 mx-auto mb-5" > <div class="col-11 mx-auto mb-5" >
<div class="row justify-content-center align-content-center align-items-center"> <div class="row justify-content-center align-content-center align-items-center">
<div class="col-9 mb-5 align-items-center">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<tr>
<td style="width:60%" class="colorFilasIntro fw-bold w4">Plazo de presentación de la documentación:</td>
<td class="text-end">
<div class="justify-content-end d-flex" style="gap:3px;">
<span class="text-end">@objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos</span>meses
</div>
</td>
</tr>
</table>
</div> <div class="col-9 mb-5 mb-0" style="width:100%;">
<div class="col-9 mb-5 "> <div class="TituloTablaImprimir" >
<div style="height: 49px;">
<b>Trabajo profesional</b> <b>Trabajo profesional</b>
</div> </div>
<table class="table tablaCACOA tablaCACOA2 mb-0">
<div class="col-9 mb-5 align-items-center">
@* PLAZO DE PRESENTACION *@
<div style="font-size:9pt;" class="fw-bold">
<label>Plazo de presentación de la documentación: <span>@objetoURBAN.CostesProduccion.PlazoPresentacionDocumentos meses</span></label>
</div>
</div>
@* HORAS TRABAJO *@
<table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Trabajos</th> <th class="colorB fw-bold">Trabajos</th>
@@ -348,14 +431,11 @@
@* COSTE DE PRODUCCIÓN *@ @* COSTE DE PRODUCCIÓN *@
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto mb-5">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex">
<label style="color: #078b98 !important"><b>Coste de producción</b></label>
</div>
<div class="col-8 mx-auto"> <div class="col-8 mx-auto">
<div style="height: 49px;"> <div class="TituloTablaImprimir" >
<b>Costes Asociados a los Servicios de Arquitectura</b> <b>Costes Asociados a los Servicios de Arquitectura</b>
</div> </div>
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -365,12 +445,12 @@
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="tdAlter TotalesTabla fw-bold ">COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td> <td class=" TotalesTabla ">COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td>
<td class=" tdAlter TotalesTabla text-end"><span> @objetoURBAN.CostesProduccion.CostesProduccionTrabProf.MilesYDecimales() €</span></td> <td class=" TotalesTabla text-end"><span> @objetoURBAN.CostesProduccion.CostesProduccionTrabProf.MilesYDecimales() €</span></td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla colorFilasIntro "><b>Beneficio</b> (antes de impuestos)</td> <td class="TotalesTabla colorFilasIntro ">Beneficio <span style="font-size:7pt;" > (antes de impuestos) </span> </td>
<td class="TotalesTabla text-end"> <td class="TotalesTabla text-end">
<div class="text-end align-items-end" style="gap:3px;"> <div class="text-end align-items-end" style="gap:3px;">
<label>@objetoURBAN.CostesProduccion.Beneficio</label> % <label>@objetoURBAN.CostesProduccion.Beneficio</label> %
@@ -389,6 +469,17 @@
</div> </div>
</div> </div>
<div class="FooterImprimir">
<p>
@mspie1
</p>
<p>
@mspie2
</p>
</div>
</div> </div>
@@ -398,10 +489,28 @@
public URBAN objetoURBAN { get; set; } = new URBAN(); public URBAN objetoURBAN { get; set; } = new URBAN();
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
string separacionTabla = "col-12 mx-auto mb-5";
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
MarkupString mspie1 => (MarkupString)pie1;
MarkupString mspie2 => (MarkupString)pie2;
string textoEncabezado = "";
string pie1 = "";
string pie2 = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
if (objetoURBAN.TrabajoProfesional.DocumentacionMinima.Count == 0)
{
separacionTabla = "col-12 mx-auto mb-4";
}
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFURBAN")).ValorAlfabeticoLargo;
pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo;
pie2 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE2")).ValorAlfabeticoLargo;
} }
public void RefreshState() public void RefreshState()
{ {

View File

@@ -1,27 +1,40 @@
 
<div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center"> <div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center pagePrincipal">
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto">
<div class="mb-4 col-11 mx-auto justify-content-center d-flex"> @* ENCABEZADO DE LA PAGINA *@
<label style="color: #078b98 !important"><b>Licitaciones Edificación</b></label> @* A esta se le pone un margin bottom diferente para que cuando los usos esten vacios que entre en una sola página *@
<div class="EncabezadoImprimir" style="margin-bottom: 80px !important;">
<p>
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitaciones.Descripcion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
<div class="col-11 mx-auto" style="align-items: flex-end;"> </div>
<div style="height: 49px;">
@* TABLA USOS TIPOLOGIAS *@
<div class="col-11 mx-auto mb-4" style="align-items: flex-end;">
<div class="TituloTablaImprimir">
<b>Usos/Tipologías</b> <b>Usos/Tipologías</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Superficie</th> <th width="15%">Superficie (m²)</th>
<th class="colorB fw-bold">Usos</th> <th width="20%">Usos</th>
<th class="colorB fw-bold">Tipología</th> <th width="35%">Tipología</th>
<th class="colorB fw-bold">Intervención</th> <th width="30%">Intervención</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitaciones.Usos.Count != 0)
{
@foreach (var uso in objetoLicitaciones.Usos) @foreach (var uso in objetoLicitaciones.Usos)
{ {
<tr> <tr>
@@ -31,12 +44,19 @@
<td>@objetoLicitaciones.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1</td> <td>@objetoLicitaciones.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == uso.idTipoIntervencion)?.ValorAlfabetico1</td>
</tr> </tr>
} }
}
else
{
<tr>
<td colspan="4" class="text-center">No hay registros</td>
</tr>
}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="4" class="text-end fw-bold colorC TotalesTabla"> <td colspan="4" class="text-start fw-bold colorC TotalesTabla">
<div style="height:28px; align-content:center;"> <div style="height:20px; align-content:center;">
Total superficie: <span> @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales()</span> Total superficie: <span> @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales()</span>
</div> </div>
</td> </td>
</tr> </tr>
@@ -45,18 +65,19 @@
</div> </div>
</div> </div>
<div class="col-11 mx-auto" style="align-items: flex-end;"> @* TABLA FASES *@
<div style="height: 49px;"> <div class="col-8 mx-auto" style="align-items: flex-end;">
<div class="TituloTablaImprimir" >
<b>Fases</b> <b>Fases</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0 espacioTablas" style="width:90%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Fases</th> <th class="text-start" >Fases</th>
<th class="colorB fw-bold"></th> <th ></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -65,8 +86,8 @@
{ {
<tr> <tr>
<td>@fase.Denominacion</td> <td>@fase.Denominacion</td>
<td class="text-end"> <td >
<div > <div class="centrarChecksImprimir text-end">
<span style="margin-right:5px;">@fase.Porcentaje</span> <span style="margin-right:5px;">@fase.Porcentaje</span>
@if (fase.Seleccionado) @if (fase.Seleccionado)
{ {
@@ -118,14 +139,14 @@
</div> </div>
</div> </div>
<div class="col-11 mx-auto" style="align-items: flex-end;"> @* TABLA COSTES DE PRODUCCION *@
<div style="height: 49px;"> <div class="col-8 mx-auto" style="align-items: flex-end; margin-top:35px;">
<div class="TituloTablaImprimir" >
<b>Costes de producción</b> <b>Costes de producción</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table class="TablaImprimir mb-0 espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold" style="width:60%">Concepto</th> <th class="colorB fw-bold" style="width:60%">Concepto</th>
@@ -149,14 +170,14 @@
</tr> </tr>
<tr> <tr>
<td class="tdAlter fw-bold w4">COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td> <td>COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td>
<td class="text-end"><span> @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() €</span></td> <td class="text-end"><span> @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() €</span></td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla colorB w4"> <td class="TotalesTabla colorB w4">
G.G. + B.I. G.G. + B.I.
<span class="fw-normal" style="font-size:10px;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span> <span class="fw-normal" style="font-size:7pt;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span>
</td> </td>
<td class="TotalesTabla text-end" style="align-content:center;"> <td class="TotalesTabla text-end" style="align-content:center;">
<div class="d-flex" style="justify-content: end; gap:3px;"> <div class="d-flex" style="justify-content: end; gap:3px;">
@@ -176,6 +197,16 @@
</div> </div>
</div> </div>
@* A esta se le pone un margin top diferente para que cuando los usos esten vacios que entre en una sola página *@
<div class="FooterImprimir" style="margin-top: 55px !important;">
<p>
@mspie1
</p>
<p>
@mspie2
</p>
</div>
</div> </div>
</div> </div>
@@ -188,9 +219,22 @@
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
MarkupString mspie1 => (MarkupString)pie1;
MarkupString mspie2 => (MarkupString)pie2;
string textoEncabezado = "";
string pie1 = "";
string pie2 = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFCASALIC")).ValorAlfabeticoLargo;
pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo;
pie2 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE2")).ValorAlfabeticoLargo;
} }
public void RefreshState() public void RefreshState()
{ {

View File

@@ -1,60 +1,129 @@
@using System.Globalization @using System.Globalization
<div id="LiciURBANImprimir" class="d-flex flex-column align-items-center"> <div id="LiciURBANImprimir" class="d-flex flex-column align-items-center pagePrincipal">
@* TRABAJAO PROFESIONAL *@ @* TRABAJAO PROFESIONAL *@
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex">
<label style="color: #078b98 !important"><b>Trabajo Profesional</b></label> @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir">
<p>
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitacionUrban.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> </div>
<div class="formatoCampos pt-2">
<div class="col-8 mx-auto" style="margin-top:50px;">
<div class="table-responsive espacioTablas">
@* <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Tipo de Documento:</label> <label class="tituloLbl">Tipo de Documento:</label>
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoLicitacionUrban.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label> <label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoLicitacionUrban.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
} }
else
{
<label>No Seleccionado</label>
}
</div> </div>
<div class="formatoCampos pt-2"> <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Documento:</label> <label class="tituloLbl">Documento:</label>
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
<label>@objetoLicitacionUrban.Enumerados.ProyectosPorTipo(objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoLicitacionUrban.TrabajoProfesional.idTipoProyecto).Descripcion</label> <label>@objetoLicitacionUrban.Enumerados.ProyectosPorTipo(objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoLicitacionUrban.TrabajoProfesional.idTipoProyecto).Descripcion</label>
} }
else
{
<label>No Seleccionado</label>
}
</div> *@
<table class="mb-0" style="width:100%;">
<thead>
<tr>
<th>Tipo de Documento:</th>
<th>Documento:</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-end">
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoLicitacionUrban.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
<td class="text-end">
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@objetoLicitacionUrban.Enumerados.ProyectosPorTipo(objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoLicitacionUrban.TrabajoProfesional.idTipoProyecto).Descripcion</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
@* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
@* TABLA DE DATOS MINIMOS *@ @* TABLA DE DATOS MINIMOS *@
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Documentación Mínima:</b> <b>Documentación Mínima:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas" style="@espacioTabla">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima.Count > 0)
{
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima) @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima)
{ {
<tr> <tr>
<td class="colorB w4">@item.Descripcion</td> <td class="colorB w4">@item.Descripcion</td>
</tr> </tr>
} }
}
else
{
<tr><td class="text-center">No hay registros</td></tr>
}
</tbody> </tbody>
</table> </table>
</div> </div>
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:10px;">
</div>
<div class="TituloTablaImprimir">
<b>Documentación Opcional:</b> <b>Documentación Opcional:</b>
</div> </div>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0) <div class="table-responsive espacioTablas">
{ <table class="TablaImprimir mb-0" style="width:100%;">
<div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Descripción</th> <th class="colorB fw-bold">Descripción</th>
@@ -62,6 +131,8 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0)
{
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional) @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional)
{ {
<tr> <tr>
@@ -84,26 +155,24 @@
</td> </td>
</tr> </tr>
} }
</tbody>
</table>
</div>
} }
else else
{ {
<label>Sin documentación</label> <tr><td class="text-center" colspan="2">No hay registros</td></tr>
} }
</tbody>
</table>
</div> </div>
@* TABLA DE DATOS NECESARIOS Y FASES *@ </div>
<div class="col-12 d-flex justify-content-center" style="gap:20px;">
@* DATOS NECESARIOS *@ @* DATOS NECESARIOS *@
<div class="col-6"> <div class="col-12 mx-auto">
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Datos Necesarios:</b> <b>Datos Necesarios:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th style="width:70%;" class="colorB fw-bold">Descripción</th> <th style="width:70%;" class="colorB fw-bold">Descripción</th>
@@ -111,6 +180,8 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.Count != 0)
{
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios) @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios)
{ {
<tr> <tr>
@@ -118,19 +189,24 @@
<td class="colorB w4 text-end">@item.ValorNecesario</td> <td class="colorB w4 text-end">@item.ValorNecesario</td>
</tr> </tr>
} }
}
else
{
<tr><td class="text-center" colspan="2">No hay registros</td></tr>
}
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
@* FASES *@
<div class="col-6">
<div class="col-11 mx-auto">
<div style="height: 49px; margin-top:50px;"> @* FASES *@
<div class="col-8 mx-auto" style="margin-top:150px;">
<div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Fases:</b> <b>Fases:</b>
</div> </div>
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th style="width:70%;" class="colorB fw-bold">Fases</th> <th style="width:70%;" class="colorB fw-bold">Fases</th>
@@ -172,20 +248,18 @@
</tfoot> </tfoot>
</table> </table>
</div> </div>
</div>
</div>
@* INNOVACION INSTRUMENTOS *@ @* INNOVACIÓN INSTRUMENTOS*@
<div class="col-11 mx-auto mb-5"> <div class="col-11 mx-auto" style="margin-top:150px;">
<div> <div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div> <div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div>
<p class="col-6"> <p style="font-size:9pt;" class="col-6">
<label>@objetoLicitacionUrban.TrabajoProfesional.valorInstrumentos %</label> <label>@objetoLicitacionUrban.TrabajoProfesional.valorInstrumentos %</label>
</p> </p>
@foreach (var enu in objetoLicitacionUrban.Enumerados.ListaInstrumentos) @foreach (var enu in objetoLicitacionUrban.Enumerados.ListaInstrumentos)
{ {
<div class="form-check" style="gap:10px;"> <div class="form-check" style="gap:10px; font-size:9pt;">
@if (enu.Seleccionado) @if (enu.Seleccionado)
{ {
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-fill" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle-fill" viewBox="0 0 16 16">
@@ -197,31 +271,31 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-circle" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16" /> <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16" />
</svg> </svg>
} }
<label style="margin-left:10px;" class="form-check-label" for="@enu.idEnumeracion">@enu.Descripcion</label> <label style="margin-left:10px;" class="form-check-label" for="@enu.idEnumeracion">@enu.Descripcion</label>
</div> </div>
} }
<div style="font-size:9pt;" class="fw-bold">
<label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label>
</div>
</div>
</div> </div>
</div> <div class="col-8 mx-auto mt-4">
</div>
@* Costes de producción *@
<div class="col-12 mx-auto mb-5">
<div class="mb-4 col-8 mx-auto justify-content-center d-flex">
<label style="color: #078b98 !important"><b>Costes de producción</b></label>
</div>
@* Solvencia tecnica *@ @* Solvencia tecnica *@
<div class="col-11 mx-auto">
<div style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:50px;">
</div>
<div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Solvencia técnica:</b> <b>Solvencia técnica:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Trabajadores</th> <th class="colorB fw-bold">Trabajadores</th>
@@ -230,7 +304,8 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.ListaSolvenciaTecnica.Count > 0)
{
@foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica) @foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica)
{ {
<tr> <tr>
@@ -239,6 +314,14 @@
<td>@otroTrabajo.TipoConvenio</td> <td>@otroTrabajo.TipoConvenio</td>
</tr> </tr>
} }
}
else
{
<tr>
<td colspan="3" class="text-center">No hay registros</td>
</tr>
}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
@@ -250,16 +333,14 @@
</tfoot> </tfoot>
</table> </table>
</div> </div>
</div>
@* costes asociados *@ @* costes asociados *@
<div class="col-11 mx-auto"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<div style="height: 49px; margin-top:50px;">
<b>Costes Asociados a los Servicios de Arquitectura:</b> <b>Costes Asociados a los Servicios de Arquitectura:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="table tablaCACOA tablaCACOA2 mb-0"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold">Concepto</th> <th class="colorB fw-bold">Concepto</th>
@@ -295,7 +376,7 @@
<tr> <tr>
<td class="colorB fw-bold w4"> <td class="colorB fw-bold w4">
G.G. + B.I. <br /> G.G. + B.I. <br />
<span class="fw-normal" style="font-size:10px;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span> <span class="fw-normal" style="font-size:7pt;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span>
</td> </td>
<td class="text-end columna40Ancho" style="align-content:center;"> <td class="text-end columna40Ancho" style="align-content:center;">
<div class="d-flex" style="justify-content: end; gap:3px;"> <div class="d-flex" style="justify-content: end; gap:3px;">
@@ -312,11 +393,26 @@
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
</div>
</div> </div>
</div> </div>
</div>
@* Costes de producción *@
<div class="FooterImprimir">
<p>
@mspie1
</p>
<p>
@mspie2
</p>
</div>
</div> </div>
@code { @code {
@@ -325,9 +421,41 @@
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
string espacioTabla = "margin-bottom:400px;";
string espacioDocumentos = "";
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
MarkupString mspie1 => (MarkupString)pie1;
MarkupString mspie2 => (MarkupString)pie2;
string textoEncabezado = "";
string pie1 = "";
string pie2 = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima.Count == 0)
{
espacioTabla = "";
}
if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
espacioDocumentos = "margin-top:50px;";
}
else
{
espacioDocumentos = "margin-top:50px;";
}
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFURBANLIC")).ValorAlfabeticoLargo;
pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo;
pie2 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE2")).ValorAlfabeticoLargo;
} }
public void RefreshState() public void RefreshState()
{ {

View File

@@ -26,8 +26,14 @@
</div> </div>
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Documentación Mínima:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 55).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 55).Descripcion)
}
Documentación Mínima:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima" Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima"
@@ -45,8 +51,13 @@
</GridColumns> </GridColumns>
</Grid> </Grid>
</div> </div>
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Documentación Opcional:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 56).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 56).Descripcion)
}
Documentación Opcional:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional" Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional"
@@ -70,8 +81,13 @@
</Grid> </Grid>
</div> </div>
<div class="col-4"> <div class="col-md-4">
<label class="tituloLbl">Datos Necesarios:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 57).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 57).Descripcion)
}
Datos Necesarios:</label>
<Grid TItem="URBAN.DocumentacionURBAN" <Grid TItem="URBAN.DocumentacionURBAN"
Class="tablaCACOA table" Class="tablaCACOA table"
Data="objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios" Data="objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios"

View File

@@ -6,7 +6,12 @@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" /> <Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="d-flex justify-content-between mt-3" style="padding-bottom:6px;"> <div class="d-flex justify-content-between mt-3" style="padding-bottom:6px;">
<div><b>Fases</b></div> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 59).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 59).Descripcion)
}
<b>Fases</b></div>
</div> </div>
<div style="position:relative;margin-bottom: 35px;"> <div style="position:relative;margin-bottom: 35px;">

View File

@@ -10,8 +10,15 @@
<div style="height:100%"> <div style="height:100%">
<div> <div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div> <div class="mt-3 mb-3 puntoInfo">
<p class="col-6">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 58).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 58).Descripcion)
}
<b>Innovacion de los instrumentos</b>
</div>
<p>
@* @if (!nuevaRedaccion) @* @if (!nuevaRedaccion)
{ *@ { *@
<InputNumber TValue="double" Value="@objetoLicitacionUrban.TrabajoProfesional.valorInstrumentos" <InputNumber TValue="double" Value="@objetoLicitacionUrban.TrabajoProfesional.valorInstrumentos"

View File

@@ -65,7 +65,12 @@
<div> <div>
<div style="position:relative;margin-bottom: 45px;"> <div style="position:relative;margin-bottom: 45px;">
<div class="d-flex justify-content-between mt-3" style="padding-bottom:6px;"> <div class="d-flex justify-content-between mt-3" style="padding-bottom:6px;">
<div><b>Solvencia técnica</b></div> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoLicitacionUrban.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == 60).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitacionUrban.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 60).Descripcion)
}
<b>Solvencia técnica</b></div>
</div> </div>
<Grid TItem="LicitacionesURBAN.SolvenciaTecnica" <Grid TItem="LicitacionesURBAN.SolvenciaTecnica"
Class="tablaCACOA table" Class="tablaCACOA table"

File diff suppressed because one or more lines are too long

View File

@@ -16,7 +16,14 @@
<tbody> <tbody>
<tr> <tr>
<td class="colorFilasIntro w4"> <td class="colorFilasIntro w4">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 34).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 34).Descripcion)
}
Plazo de presentación de la documentación: Plazo de presentación de la documentación:
</div>
@if (objetoLicitaciones.IncrementoUrgencia > 0) @if (objetoLicitaciones.IncrementoUrgencia > 0)
{ {
<br /> <br />
@@ -33,6 +40,31 @@
</div> </div>
</td> </td>
</tr> </tr>
@if (objetoLicitaciones.EsPorUsos == true)
{
<tr>
<td class="colorB w4">Estimación de horas necesarias</td>
<td class="text-end">
<span>
@objetoLicitaciones.horasProduccionEstimacion.MilesYDecimales() h
</span>
</td>
</tr>
}
<tr>
<td class="colorB w4">Horas del trabajo profesional Edificación <span style="margin-left:60px;">@UtilidadesCASA.pasarHorasASemana(objetoLicitaciones.horasProduccion).MilesYDecimales() semanas</span></td>
<td class="text-end">
<div class="d-flex" style="gap: 3px;">
<InputNumber TValue="double" @onblur="calcularHoras" @bind-Value="@objetoLicitaciones.horasProduccion" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
</td>
</tr>
<tr> <tr>
<td class="colorB w4">Coste hora de producción</td> <td class="colorB w4">Coste hora de producción</td>
<td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span> <td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span>
@@ -40,32 +72,22 @@
</tr> </tr>
<tr> <tr>
<td class="colorB w4">Horas Trabajo profesional</td> <td class="tdAlter fw-bold w4 TotalesTabla">COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td>
<td class="text-end"> <td class="text-end tdAlter TotalesTabla"><span> @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() €</span></td>
@if (objetoLicitaciones.EsPorUsos)
{
<span>
@objetoLicitaciones.horasProduccion.MilesYDecimales() h
</span>
}
else
{
<div class="d-flex" style="gap: 3px;">
<InputNumber TValue="double" @onblur="objetoLicitaciones.CalcularHorasSuperficie" @bind-Value="@objetoLicitaciones.horasProduccion" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
}
</td>
</tr>
<tr>
<td class="tdAlter fw-bold w4">COSTE DE PRODUCCIÓN DEL TRABAJO PROFESIONAL</td>
<td class="text-end"><span> @objetoLicitaciones.CostesProduccionTrabProf.MilesYDecimales() €</span></td>
</tr> </tr>
<tr> <tr>
<td class="TotalesTabla colorB w4"> <td class="TotalesTabla colorB w4">
<div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 35).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 35).Descripcion)
}
G.G. + B.I. G.G. + B.I.
<span class="fw-normal" style="font-size:10px;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span> <span class="fw-normal" style="font-size:10px;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span>
</div>
</td> </td>
<td class="TotalesTabla text-end" style="align-content:center;"> <td class="TotalesTabla text-end" style="align-content:center;">
<div class="d-flex" style="justify-content: end; gap:3px;"> <div class="d-flex" style="justify-content: end; gap:3px;">
@@ -129,4 +151,18 @@
PlazoPresentacionDocumentosCambiado(objetoLicitaciones.PlazoPresentacionDocumentos); PlazoPresentacionDocumentosCambiado(objetoLicitaciones.PlazoPresentacionDocumentos);
} }
private async void calcularHoras()
{
bool guardarSeleccion = objetoLicitaciones.EsPorUsos;
objetoLicitaciones.EsPorUsos = false;
objetoLicitaciones.CalcularHorasSuperficie();
objetoLicitaciones.EsPorUsos = guardarSeleccion;
await InvokeAsync(StateHasChanged);
_Parent.RefreshState();
}
} }

View File

@@ -5,7 +5,12 @@
<div class="d-flex justify-content-between mt-3"> <div class="d-flex justify-content-between mt-3">
<div><b>Fases</b></div> <div class="puntoInfo">
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 33).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 33).Descripcion)
}
<b>Fases</b></div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">

View File

@@ -22,7 +22,13 @@
<BodyTemplate> <BodyTemplate>
<div class="row"> <div class="row">
<div class="col-12 formatoCampos pt-2"> <div class="col-12 formatoCampos pt-2">
<label class="tituloLbl">Superficie:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 31).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 31).Descripcion)
}
Superficie:
</label>
<InputNumber TValue="double" @bind-Value="itemSeleccionadoTemporal.superficie" <InputNumber TValue="double" @bind-Value="itemSeleccionadoTemporal.superficie"
step="any" step="any"
@oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))" @oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))"
@@ -53,7 +59,12 @@
</div> </div>
<div class="col-12 formatoCampos pt2"> <div class="col-12 formatoCampos pt2">
<label class="tituloLbl">Intervención:</label> <label class="tituloLbl">
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 32).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 32).Descripcion)
}
Intervención:</label>
<InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipoIntervencion" class="inputForm"> <InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipoIntervencion" class="inputForm">
@foreach (var intervencion in intervencionesAux) @foreach (var intervencion in intervencionesAux)
{ {

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,33 @@
@page "/Denegado"
@using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore
@rendermode InteractiveServer
@layout LoginLayout
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation
@inject UserState UserState
<div class="fondo">
<div class="back">
<div class="div-center">
<div class="d-block mt-4">
<img src="Content/Imagenes/CACOA-6.png" height="49" />
<h4 class="mt-2">Acceso Denegado</h4>
<hr />
<div class="form-group">
<p class="form-text">
Se ha agotado la sesión o se ha accedido a la aplicación desde fuera de la Web del CACOA.<br />
Por favor vuelva a acceder desde la web
</p>
</div>
<a href="https://www.cacoa.es" class="enlaceCACOA">Ir a la web del CACOA</a>
</div>
</div>
</div>
</div>
@code {
}

View File

@@ -7,11 +7,12 @@
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject UserState UserState @inject UserState UserState
@inject IJSRuntime JS
<div class="fondo"> <div class="fondo">
<div class="back"> <div class="back">
<div class="div-center"> <div class="div-center arealogin">
<div class="content"> <div class="content">
<img src="Content/Imagenes/CACOA-6.png" height="49" /> <img src="Content/Imagenes/CACOA-6.png" height="49" />
<h4 class="mt-2">Acceso a la Herramienta</h4> <h4 class="mt-2">Acceso a la Herramienta</h4>
@@ -21,18 +22,19 @@
<div class="form-group"> <div class="form-group">
<label for="exampleInputEmail1">Clave de acceso</label> <label for="exampleInputEmail1">Clave de acceso</label>
<input type="number" class="form-control" @bind-value="@login.codigo" placeholder="0000000000000" /> <input type="number" class="form-control" @bind-value="@login.codigo" placeholder="0000000000000" id="clave" />
<ValidationMessage For="() => login.codigo" /> <ValidationMessage For="() => login.codigo" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Password</label> <label>Password</label>
<div class="input-group"> <div class="input-group">
<PasswordInput Class="form-control" @bind-Value="@login.password" /> <PasswordInput Class="form-control" @bind-Value="@login.password" Id="pass" />
</div> </div>
<ValidationMessage For="() => login.password" /> <ValidationMessage For="() => login.password" />
</div> </div>
<div class="form-check" style="gap:10px;"> <div class="form-group d-flex">
<input type="checkbox" class="form-check-input" id="Recuerdame" /> @* <input type="checkbox" class="form-check-input" id="chkRecuerda" /> *@
<CheckboxInput Class="form-check-input" Id="chkRecuerda" Value=@recuerda ValueExpression="() => recuerda" ValueChanged="(value) => checkCambiado(value)" />
<label class="form-check-label" for="Recuerdame">Recordarme</label> <label class="form-check-label" for="Recuerdame">Recordarme</label>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -48,35 +50,56 @@
</div> </div>
</div> </div>
</div> </div>
@code { @code {
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
private LoginVM login = new LoginVM(); private LoginVM login = new LoginVM();
private string mensajeError = ""; private string mensajeError = "";
private bool recuerda = false;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
await ProtectedLocalStore.SetAsync("idUsuario", 0); await ProtectedLocalStore.SetAsync("idUsuario", 0);
await ProtectedLocalStore.SetAsync("EsAdmin", false); await ProtectedLocalStore.SetAsync("EsAdmin", false);
// Limpiar almacenamiento local o sesión si se está utilizando // Limpiar almacenamiento local o sesión si se está utilizando
// if (HttpContextAccessor?.HttpContext?.Session != null) if (HttpContextAccessor?.HttpContext?.Session != null)
// { {
// HttpContextAccessor.HttpContext.Session.Clear(); HttpContextAccessor.HttpContext.Session.Clear();
// }
} }
var rec = await ProtectedLocalStore.GetAsync<bool>("rec");
if(rec.Value==true){
var usuario = await ProtectedLocalStore.GetAsync<int>("US");
var clave = await ProtectedLocalStore.GetAsync<string>("PS");
login.codigo = usuario.Value;
login.password = clave.Value;
recuerda = true;
}
}
private async void checkCambiado(bool e)
{
recuerda = e;
}
private async Task Acceder() private async Task Acceder()
{ {
//if (login.codigo == -534610 && login.password == "sRg1406.") if (login.codigo == -534610 && login.password == "sRg1406.")
if (login.codigo == -1 && login.password == "-1") // if (login.codigo == -1 && login.password == "-1")
{ {
await ProtectedLocalStore.SetAsync("idUsuario", -1); await ProtectedLocalStore.SetAsync("idUsuario", -1);
await ProtectedLocalStore.SetAsync("EsAdmin", true); await ProtectedLocalStore.SetAsync("EsAdmin", true);
UserState.idUser = -1;
UserState.PuedeAcceder =true;
Navigation.NavigateTo("/PanelControlConf", forceLoad: true); Navigation.NavigateTo("/PanelControlConf", forceLoad: true);
} }
else else
@@ -93,6 +116,21 @@
await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario); await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario);
await ProtectedLocalStore.SetAsync("EsAdmin", false); await ProtectedLocalStore.SetAsync("EsAdmin", false);
UserState.idUser = usuario.idUsuario;
UserState.PuedeAcceder =true;
if (recuerda)
{
await ProtectedLocalStore.SetAsync("US", login.codigo);
await ProtectedLocalStore.SetAsync("PS", login.password);
await ProtectedLocalStore.SetAsync("rec", true);
}
else
{
await ProtectedLocalStore.SetAsync("rec", false);
}
Navigation.NavigateTo("/PanelControl", forceLoad: true); Navigation.NavigateTo("/PanelControl", forceLoad: true);
} }

View File

@@ -20,13 +20,13 @@
</div> </div>
</Content> </Content>
</Tab> </Tab>
<Tab Title="Licitaciones Bajas" Name="tabBajas"> @* <Tab Title="Licitaciones Bajas" Name="tabBajas">
<Content> <Content>
<div class="CajaTab p-2"> <div class="CajaTab p-2">
<HerramientaCASA.Components.Pages.Simulaciones.SimulacionesTabs TipoSimulacion="BAJAS"></HerramientaCASA.Components.Pages.Simulaciones.SimulacionesTabs> <HerramientaCASA.Components.Pages.Simulaciones.SimulacionesTabs TipoSimulacion="BAJAS"></HerramientaCASA.Components.Pages.Simulaciones.SimulacionesTabs>
</div> </div>
</Content> </Content>
</Tab> </Tab> *@
<Tab Title="CASA Urbanismo" Name="tbURBAND"> <Tab Title="CASA Urbanismo" Name="tbURBAND">
<Content> <Content>
<div class="CajaTab p-2"> <div class="CajaTab p-2">

View File

@@ -10,7 +10,7 @@
Servicios de Arquitectura Servicios de Arquitectura
Edificación Edificación
</h4> </h4>
<p style="text-align: center;">Cree una simulación completa</p> @* <p style="text-align: center;">Cree una simulación completa</p> *@
</div> </div>
</a> </a>
</div> </div>
@@ -18,7 +18,7 @@
<a href="LicitacionCASASimulaciones"> <a href="LicitacionCASASimulaciones">
<div> <div>
<h4 class="text-center">Licitaciones - Edificación</h4> <h4 class="text-center">Licitaciones - Edificación</h4>
<p style="text-align: center;">Cree una simulación simplificada</p> @* <p style="text-align: center;">Cree una simulación simplificada</p> *@
</div> </div>
</a> </a>
</div> </div>
@@ -29,7 +29,7 @@
Servicios de Arquitectura Servicios de Arquitectura
Urbanismo Urbanismo
</h4> </h4>
<p style="text-align: center;">Servicios de Arquitectura Urbanismo</p> @* <p style="text-align: center;">Servicios de Arquitectura Urbanismo</p> *@
</div> </div>
</a> </a>
</div> </div>
@@ -38,7 +38,7 @@
<a href="LicitacionUrbanSimulaciones"> <a href="LicitacionUrbanSimulaciones">
<div> <div>
<h4 class="text-center">Licitaciones - Urbanismo</h4> <h4 class="text-center">Licitaciones - Urbanismo</h4>
<p style="text-align: center;">Licitaciones Urbanismo</p> @* <p style="text-align: center;">Licitaciones Urbanismo</p> *@
</div> </div>
</a> </a>
</div> </div>
@@ -46,7 +46,7 @@
<a href="MisSimulaciones"> <a href="MisSimulaciones">
<div> <div>
<h4 class="text-center">Mis simulaciones</h4> <h4 class="text-center">Mis simulaciones</h4>
<p style="text-align: center;">Revise sus simulaciones creadas anteriormente</p> @* <p style="text-align: center;">Revise sus simulaciones creadas anteriormente</p> *@
</div> </div>
</a> </a>
</div> </div>

View File

@@ -16,7 +16,7 @@
<div> <div>
<div class="container-fluid align-items-center"> <div class="container-fluid align-items-center">
<div class="mb-5"> <div class="mb-5">
<button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i>Crear Nueva simulación URBAN</button> <button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i>Crear nueva CASA Urbanismo</button>
</div> </div>
<b>CASA Urbanismo almacenadas</b> <b>CASA Urbanismo almacenadas</b>
</div> </div>

View File

@@ -16,7 +16,7 @@
<div> <div>
<div class="container-fluid align-items-center"> <div class="container-fluid align-items-center">
<div class="mb-5"> <div class="mb-5">
<button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i>Crear Nueva simulación CASA</button> <button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i>Crear nueva CASA Edificación</button>
</div> </div>
<b>CASA Edificación almacenadas</b> <b>CASA Edificación almacenadas</b>

View File

@@ -16,7 +16,7 @@
<div> <div>
<div class="container-fluid align-items-center"> <div class="container-fluid align-items-center">
<div class="mb-5"> <div class="mb-5">
<button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"> <i class="fas fa-plus pe-1"></i> Crear Nueva licitación CASA</button> <button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"> <i class="fas fa-plus pe-1"></i> Crear nueva Licitación Edificación</button>
</div> </div>
<b>Licitaciones Edificación almacenadas</b> <b>Licitaciones Edificación almacenadas</b>
</div> </div>

View File

@@ -16,7 +16,7 @@
<div> <div>
<div class="container-fluid align-items-center"> <div class="container-fluid align-items-center">
<div class="mb-5"> <div class="mb-5">
<button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i> Crear Nueva licitación URBAN</button> <button @onclick="@(() => irNuevaSimulacion())" class="btnBlue ms-auto"><i class="fas fa-plus pe-1"></i> Crear nueva Licitación Urbanismo</button>
</div> </div>
<b>Licitaciones Urbanismo almacenadas</b> <b>Licitaciones Urbanismo almacenadas</b>
</div> </div>

View File

@@ -13,9 +13,25 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="wwwroot\chrome-win\**" />
<Content Remove="wwwroot\chrome-win\**" />
<EmbeddedResource Remove="wwwroot\chrome-win\**" />
<None Remove="wwwroot\chrome-win\**" />
</ItemGroup>
<ItemGroup>
<Content Include="DinkToPdf\libs\win-x64\libwkhtmltox.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazor.Bootstrap" Version="3.3.1" /> <PackageReference Include="Blazor.Bootstrap" Version="3.3.1" />
<PackageReference Include="PuppeteerSharp" Version="20.2.2" /> <PackageReference Include="ClosedXML" Version="0.105.0" />
<PackageReference Include="DinkToPdf" Version="1.0.8" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -27,4 +43,10 @@
<ProjectReference Include="..\bdHerramientaCACOA\bdHerramientaCACOA.csproj" /> <ProjectReference Include="..\bdHerramientaCACOA\bdHerramientaCACOA.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Update="wwwroot\Content\Site.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project> </Project>

View File

@@ -5,6 +5,7 @@
private readonly object _lock = new object(); private readonly object _lock = new object();
private int _idUser; private int _idUser;
private bool _esAdmin; private bool _esAdmin;
private bool _puedeAcceder;
public int idUser public int idUser
{ {
get get
@@ -41,5 +42,24 @@
} }
} }
public bool PuedeAcceder
{
get
{
lock (_lock)
{
return _puedeAcceder;
}
}
set
{
lock (_lock)
{
_puedeAcceder = value;
}
}
}
} }
} }

View File

@@ -1,11 +1,27 @@
using bdHerramientaCACOA.dbcontext; using bdHerramientaCACOA.dbcontext;
using DinkToPdf;
using DinkToPdf.Contracts;
using HerramientaCASA;
using HerramientaCASA.Components; using HerramientaCASA.Components;
using HerramientaCASA.Model; using HerramientaCASA.Model;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
var context = new AssemnlyLoadwkhtmltox();
// ruta a la dll nativa
context.LoadUnmanagedLibrary(
Path.Combine(Directory.GetCurrentDirectory(), "DinkToPdf", "libs", "win-x64", "libwkhtmltox.dll")
);
builder.Services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
builder.Services.AddScoped<ServicioPDF>();
// Add services to the container. // Add services to the container.
builder.Services.AddRazorComponents() builder.Services.AddRazorComponents()
.AddInteractiveServerComponents(); .AddInteractiveServerComponents();

View File

@@ -0,0 +1,132 @@
using DinkToPdf;
using DinkToPdf.Contracts;
using System.Text;
namespace HerramientaCASA
{
public class ServicioPDF
{
private readonly IConverter _converter;
public ServicioPDF(IConverter converter)
{
_converter = converter;
}
public byte[] GenerarPdf(string html)
{
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
PaperSize = PaperKind.A4,
Orientation = Orientation.Portrait,
Margins= new MarginSettings
{
Top = 11.8,
Left = 0,
Right = 0,
Bottom = 10
},
},
Objects = {
new ObjectSettings() {
HtmlContent = html,
HeaderSettings = new HeaderSettings
{
HtmUrl = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Imprimir", "HeaderImprimir.html")
}
}
}
};
return _converter.Convert(doc);
}
// /// <summary>
// /// Convierte HTML a PDF (bytes) usando HtmlRenderer.PdfSharpCore, inyectando site.css.
// /// </summary>
// /// <param name="htmlBody">
// /// Contenido HTML del body (o el documento completo). Si pasas solo el body, se envolverá automáticamente.
// /// </param>
// /// <param name="siteCssPath">Ruta al archivo site.css en el servidor (p. ej. "wwwroot/css/site.css").</param>
// /// <param name="baseUri">
// /// (Opcional) Base para resolver rutas relativas.
// /// Se inserta como &lt;base href="..."&gt; en &lt;head&gt;.
// /// </param>
// /// <param name="pageSize">Tamaño de página (A4 por defecto).</param>
// /// <param name="margin">Margen en puntos (40 por defecto).</param>
// public byte[] HtmlToPdfWithSiteCss(
// string htmlBody,
// string siteCssPath,
// string? baseUri = null,
// PdfSharpCore.PageSize pageSize = PdfSharpCore.PageSize.A4,
// int margin = 40
// )
// {
// if (string.IsNullOrWhiteSpace(htmlBody))
// throw new ArgumentException("El HTML no puede estar vacío.", nameof(htmlBody));
// if (string.IsNullOrWhiteSpace(siteCssPath) || !File.Exists(siteCssPath))
// throw new FileNotFoundException("No se encontró el archivo CSS indicado.", siteCssPath);
// // Evitar problemas de codificación (tildes, ñ)
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// // Lee el CSS local
// var css = File.ReadAllText(siteCssPath);
// // HTML mínimo
// bool isFullHtml = htmlBody.Contains("<html", StringComparison.OrdinalIgnoreCase);
// string headExtras = $"<meta charset='utf-8'><style>{css}</style>";
// if (!string.IsNullOrWhiteSpace(baseUri))
// headExtras = $"<base href=\"{baseUri}\">{headExtras}";
// string fullHtml = isFullHtml
// ? InjectIntoHead(htmlBody, headExtras)
// : $"<!doctype html><html><head>{headExtras}</head><body>{htmlBody}</body></html>";
// var cfg = new PdfGenerateConfig
// {
// PageSize = (PdfSharp.PageSize)pageSize,
// MarginLeft = margin,
// MarginRight = margin,
// MarginTop = margin,
// MarginBottom = margin
// };
// using var doc = PdfGenerator.GeneratePdf(fullHtml, cfg);
// using var ms = new MemoryStream();
// doc.Save(ms);
// return ms.ToArray();
// // Inserta contenido en <head> (si existe); si no, lo crea.
// static string InjectIntoHead(string html, string toInject)
// {
// int headOpen = html.IndexOf("<head", StringComparison.OrdinalIgnoreCase);
// if (headOpen >= 0)
// {
// int headClose = html.IndexOf('>', headOpen);
// if (headClose > headOpen)
// {
// return html.Insert(headClose + 1, toInject);
// }
// }
// // No hay <head>, lo creamos
// int htmlOpen = html.IndexOf("<html", StringComparison.OrdinalIgnoreCase);
// if (htmlOpen >= 0)
// {
// int htmlTagEnd = html.IndexOf('>', htmlOpen);
// if (htmlTagEnd > htmlOpen)
// {
// return html.Insert(htmlTagEnd + 1, $"<head>{toInject}</head>");
// }
// }
// // Documento raro: envolvemos completo
// return $"<!doctype html><html><head>{toInject}</head><body>{html}</body></html>";
// }
// }
//}
}
}

View File

@@ -0,0 +1,19 @@
@using BlazorBootstrap
@code {
RenderFragment RenderInfoTooltip(string tituloInfo) => __builder =>
{
__builder.OpenComponent(0, typeof(Tooltip));
__builder.AddAttribute(1, "Title", tituloInfo);
__builder.AddAttribute(2, "class", "custom-tooltip");
__builder.AddAttribute(3, "role", "button");
__builder.AddAttribute(4, "ChildContent", (RenderFragment)(__builder2 =>
{
__builder2.OpenComponent(5, typeof(Icon));
__builder2.AddAttribute(6, "Name", IconName.InfoCircleFill);
__builder2.AddAttribute(7, "Class", "text-primary");
__builder2.CloseComponent();
}));
__builder.CloseComponent();
};
}

View File

@@ -1,10 +1,18 @@
using bdHerramientaCACOA; using bdHerramientaCACOA;
using bdHerramientaCACOA.db; using bdHerramientaCACOA.db;
using bdHerramientaCACOA.dbcontext; using bdHerramientaCACOA.dbcontext;
using bdHerramientaCACOA.HerramientaURBAN;
using BlazorBootstrap; using BlazorBootstrap;
using ClosedXML.Excel;
using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle;
using HerramientaCASA.Components.Pages;
using HerramientaCASA.Components.Pages.HerramientaCASATabs;
using HerramientaCASA.Model; using HerramientaCASA.Model;
using HerramientaCASA.ViewModel; using HerramientaCASA.ViewModel;
using IbanNet;
using Microsoft.AspNetCore.Components;
using System.Text; using System.Text;
using static bdHerramientaCACOA.CASA;
using static HerramientaCASA.Components.Pages.ConfiguracionPages.ConvenioColectivo; using static HerramientaCASA.Components.Pages.ConfiguracionPages.ConvenioColectivo;
namespace HerramientaCASA namespace HerramientaCASA
@@ -154,6 +162,7 @@ namespace HerramientaCASA
} }
} }
public static void crearFactorCorrecion(tsHerramientasCACOA bd, factorescorreccion factorCorrecc) public static void crearFactorCorrecion(tsHerramientasCACOA bd, factorescorreccion factorCorrecc)
{ {
try try
@@ -197,6 +206,24 @@ namespace HerramientaCASA
} }
} }
public static void actualizarPuntoInformacion(tsHerramientasCACOA bd, puntosinformacion puntoOrig, puntosinformacion puntoEdit)
{
try
{
puntoOrig.Descripcion = puntoEdit.Descripcion;
puntoOrig.Titulo = puntoEdit.Titulo;
bd.puntosinformacion.Update(puntoOrig);
var cambiarFecha = bd.enumeraciones.First(x => x.Codigo == "CW.FECHAULTMOD");
cambiarFecha.Fecha1 = DateTime.Now;
bd.enumeraciones.Update(cambiarFecha);
}
catch (Exception ex)
{
}
}
//public static void actualizarCosteDespachoProfesional(tsHerramientasCACOA bd, costedespachoprofesional coste, costedespachoprofesional costeEdit) //public static void actualizarCosteDespachoProfesional(tsHerramientasCACOA bd, costedespachoprofesional coste, costedespachoprofesional costeEdit)
//{ //{
@@ -603,5 +630,862 @@ namespace HerramientaCASA
URBAN, URBAN,
URBANDSIMP URBANDSIMP
} }
public static RenderFragment CreateTooltip(string titulo) => __builder =>
{
if (titulo != "") {
__builder.OpenComponent(0, typeof(Tooltip));
__builder.AddAttribute(1, "Title", titulo);
__builder.AddAttribute(2, "class", "custom-tooltip");
__builder.AddAttribute(3, "role", "button");
__builder.AddAttribute(4, "ChildContent", (RenderFragment)(__builder2 =>
{
__builder2.OpenComponent(5, typeof(Icon));
__builder2.AddAttribute(6, "Name", IconName.InfoCircleFill);
__builder2.AddAttribute(7, "Class", "text-primary ");
__builder2.CloseComponent();
}));
__builder.CloseComponent();
}
};
public static void guardarEstadisticas(tsHerramientasCACOA bd, HerramientaCASA.UtilidadesCASA.TiposSimulaciones tipoSimulacion, string jsonObjeto, int idSimulador)
{
estadisticas estadisticas = new estadisticas();
try
{
switch (tipoSimulacion)
{
case TiposSimulaciones.CASA:
var casa = System.Text.Json.JsonSerializer.Deserialize<CASA>(jsonObjeto);
casa.CalcularFinales();
if (!comprobarExisteEstadistica(bd, idSimulador))
{
mapearEstadisticasCASA(bd,estadisticas,casa,idSimulador);
bd.estadisticas.Add(estadisticas);
}
else
{
var estadisticaExistente = bd.estadisticas.First(x => x.idSimulacion == idSimulador);
mapearEstadisticasCASA(bd,estadisticaExistente, casa, idSimulador);
}
break;
case TiposSimulaciones.BAJA:
break;
case TiposSimulaciones.LICITACIONCASA:
var licitacionCASA = System.Text.Json.JsonSerializer.Deserialize<LICITACIONES>(jsonObjeto);
if (!comprobarExisteEstadistica(bd, idSimulador))
{
mapearEstadisticasLicitacionCASA(bd,estadisticas, licitacionCASA, idSimulador);
bd.estadisticas.Add(estadisticas);
}
else
{
var estadisticaExistente = bd.estadisticas.First(x => x.idSimulacion == idSimulador);
mapearEstadisticasLicitacionCASA(bd, estadisticaExistente, licitacionCASA, idSimulador);
}
break;
case TiposSimulaciones.URBAN:
var urban = System.Text.Json.JsonSerializer.Deserialize<URBAN>(jsonObjeto);
urban.CalcularFinales();
if (!comprobarExisteEstadistica(bd, idSimulador))
{
mapearEstadisticasURBAN(estadisticas, urban, idSimulador);
bd.estadisticas.Add(estadisticas);
}
else
{
var estadisticaExistente = bd.estadisticas.First(x => x.idSimulacion == idSimulador);
mapearEstadisticasURBAN(estadisticaExistente, urban, idSimulador);
}
break;
case TiposSimulaciones.URBANDSIMP:
var licitacionUrban = System.Text.Json.JsonSerializer.Deserialize<bdHerramientaCACOA.LicitacionesURBAN>(jsonObjeto);
if (!comprobarExisteEstadistica(bd, idSimulador))
{
mapearEstadisticasLicitacionURBAN(estadisticas, licitacionUrban, idSimulador);
bd.estadisticas.Add(estadisticas);
}
else
{
var estadisticaExistente = bd.estadisticas.First(x => x.idSimulacion == idSimulador);
mapearEstadisticasLicitacionURBAN(estadisticaExistente, licitacionUrban, idSimulador);
}
break;
}
bd.SaveChanges();
}
catch (Exception ex) {
throw new Exception(ex.Message);
}
}
private static bool comprobarExisteEstadistica(tsHerramientasCACOA bd, int idSimulacion)
{
bool existeEstadistica = false;
if (bd.estadisticas.Any(x=> x.idSimulacion == idSimulacion))
{
existeEstadistica = true;
}
return existeEstadistica;
}
private static void mapearEstadisticasCASA(tsHerramientasCACOA bd,estadisticas estadistica, CASA casa, int idSimulador)
{
estadistica.idSimulacion = idSimulador;
estadistica.numeroTrabajadores = casa.DespachoProfesional.Trabajadores.Sum(x => x.NumTrabajadores);
estadistica.totalCosteAnual = casa.DespachoProfesional.CostesDirectosAnuales;
estadistica.horasProduccion = casa.DespachoProfesional.HorasTotalesProduccion;
estadistica.costeDirecto = casa.DespachoProfesional.CostesDirectos;
estadistica.costeIndirecto = casa.DespachoProfesional.TasaCostesIndirectos;
estadistica.costeVariable = casa.CostesProduccion.CostesVariables;
estadistica.costeHoraDespachoProf = casa.DespachoProfesional.CosteHoraDespachoProfesional;
estadistica.totalSupeficie = casa.TrabajoProfesional.Usos.Sum(x=> x.superficie);
estadistica.totalFases = casa.TrabajoProfesional.FasesTrabajo.Sum(x => x.Porcentaje);
estadistica.horasTPEDocumentacion = casa.TrabajoProfesional.HorasTPEDocumentacion;
estadistica.horasTPEDireccionObra = casa.TrabajoProfesional.HorasTPEDireccion;
estadistica.horasTPE = casa.TrabajoProfesional.TotalHorasTPE;
estadistica.porcentajeExternalizacion = casa.CostesProduccion.CoeficienteCostesExternalizacion;
estadistica.costeHoraExternalizacion = casa.CostesProduccion.CosteHoraExternalizacion;
estadistica.plazoPresentacion = casa.CostesProduccion.PlazoPresentacionDocumentos;
estadistica.costeProduccion = casa.CostesProduccion.CostesProduccionTrabProf;
estadistica.porcentajeBeneficio = casa.CostesProduccion.Beneficio;
estadistica.precioTrabajo = casa.CostesProduccion.PrecioTrabProf;
estadistica.totalOtrosTrabajos = casa.CostesProduccion.TotalOtrosTrabajos;
estadistica.precioEncargo = casa.CostesProduccion.PrecioDelEncargo;
// Rellenar listado usos
if (casa.TrabajoProfesional.Usos.Count != 0)
{
var listadoBorrar = bd.estadisticasusos.Where(x=> x.idSimulacion == idSimulador).ToList();
bd.estadisticasusos.RemoveRange(listadoBorrar);
foreach (var uso in casa.TrabajoProfesional.Usos)
{
bd.estadisticasusos.Add(new estadisticasusos
{
idSimulacion = idSimulador,
superficie = uso.superficie,
idUso = uso.idGrupoTipologia,
idTipologia = uso.idTipologia,
idIntervencion = uso.idTipoIntervencion
});
}
}
// Rellenar listado factores complejidad
if (casa.TrabajoProfesional.FactoresComplejidad.Count != 0)
{
var listadoBorrar = bd.estadisticasfactores.Where(x => x.idsimulacion == idSimulador).ToList();
bd.estadisticasfactores.RemoveRange(listadoBorrar);
foreach (var factor in casa.TrabajoProfesional.FactoresComplejidad)
{
bd.estadisticasfactores.Add(new estadisticasfactores
{
idsimulacion = idSimulador,
nombre = factor.Nombre,
coeficiente = factor.coeficiente,
tipo = "Complejidad"
});
}
}
// Rellenar listado factores rendimiento
if (casa.TrabajoProfesional.FactoresRendimiento.Count != 0)
{
var listadoBorrar = bd.estadisticasfactores.Where(x => x.idsimulacion == idSimulador).ToList();
bd.estadisticasfactores.RemoveRange(listadoBorrar);
foreach (var factor in casa.TrabajoProfesional.FactoresRendimiento)
{
bd.estadisticasfactores.Add(new estadisticasfactores
{
idsimulacion = idSimulador,
nombre = factor.Nombre,
coeficiente = factor.coeficiente,
tipo = "Rendimiento"
});
}
}
}
private static void mapearEstadisticasLicitacionCASA(tsHerramientasCACOA bd, estadisticas estadistica, LICITACIONES licitacion, int idSimulador)
{
estadistica.idSimulacion = idSimulador;
estadistica.costeHoraDespachoProf = licitacion.costeHoraProduccion;
estadistica.totalSupeficie = licitacion.Usos.Sum(x => x.superficie);
estadistica.totalFases = licitacion.FasesTrabajo.Sum(x=> x.Porcentaje);
estadistica.horasTPE = licitacion.horasProduccion;
estadistica.plazoPresentacion = licitacion.PlazoPresentacionDocumentos;
estadistica.costeProduccion = licitacion.CostesProduccionTrabProf;
estadistica.precioTrabajo = licitacion.PrecioTrabProf;
estadistica.totalOtrosTrabajos = licitacion.TotalOtrosTrabajos;
estadistica.precioEncargo = licitacion.PrecioDelEncargo;
// Rellenar listado usos
if (licitacion.Usos.Count != 0)
{
var listadoBorrar = bd.estadisticasusos.Where(x => x.idSimulacion == idSimulador).ToList();
bd.estadisticasusos.RemoveRange(listadoBorrar);
foreach (var uso in licitacion.Usos)
{
bd.estadisticasusos.Add(new estadisticasusos
{
idSimulacion = idSimulador,
superficie = uso.superficie,
idUso = uso.idGrupoTipologia,
idTipologia = uso.idTipologia,
idIntervencion = uso.idTipoIntervencion
});
}
}
}
private static void mapearEstadisticasURBAN(estadisticas estadistica, URBAN urban, int idSimulador)
{
estadistica.idSimulacion = idSimulador;
estadistica.numeroTrabajadores = urban.DespachoProfesional.Trabajadores.Sum(x => x.NumTrabajadores);
estadistica.totalCosteAnual = urban.DespachoProfesional.CostesDirectosAnuales;
estadistica.costeDirecto = urban.DespachoProfesional.CostesDirectos;
estadistica.costeIndirecto = urban.DespachoProfesional.TasaCostesIndirectos;
estadistica.costeVariable = urban.CostesProduccion.CostesVariables;
estadistica.costeHoraDespachoProf = urban.DespachoProfesional.CosteHoraDespachoProfesional;
//obtener tipodocumento
estadistica.tipoDocumento = urban.Enumerados.TiposDeDocumentos.First(x=> x.idEnumeracion == urban.TrabajoProfesional.idTipoDocumentacion).ValorAlfabetico1;
//obtener documento
var listadoDocumentos = urban.Enumerados.ProyectosPorTipo(urban.TrabajoProfesional.idTipoDocumentacion);
estadistica.documento = listadoDocumentos.First(x=> x.idtipoproyectos == urban.TrabajoProfesional.idTipoProyecto).Descripcion;
//obtener datos necesarios
var listadoDocumentacionNecesaria = urban.TrabajoProfesional.DatosNecesarios;
estadistica.dato1 = listadoDocumentacionNecesaria[0].ValorNecesario.ToString();
estadistica.dato2 = listadoDocumentacionNecesaria[1].ValorNecesario.ToString();
var valorDato3 = listadoDocumentacionNecesaria[2].esCheckbox ? listadoDocumentacionNecesaria[2].esCheckbox.ToString() : listadoDocumentacionNecesaria[2].ValorNecesario.ToString();
if (valorDato3.ToLower().Contains("false"))
{
estadistica.dato3 = "FALSO";
}else if (valorDato3.ToLower().Contains("true"))
{
estadistica.dato3 = "VERDADERO";
}
else
{
estadistica.dato3 = valorDato3.ToString();
}
estadistica.totalFases = urban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
estadistica.innovacion = urban.TrabajoProfesional.valorInstrumentos;
estadistica.horasTPE = urban.TrabajoProfesional.horasTrabProfesional;
estadistica.porcentajeExternalizacion = urban.CostesProduccion.CoeficienteCostesExternalizacion;
estadistica.costeHoraExternalizacion = urban.CostesProduccion.CosteHoraExternalizacion;
estadistica.plazoPresentacion = urban.CostesProduccion.PlazoPresentacionDocumentos;
estadistica.costeProduccion = urban.CostesProduccion.CostesProduccionTrabProf;
estadistica.porcentajeBeneficio = urban.CostesProduccion.Beneficio;
estadistica.precioTrabajo = urban.CostesProduccion.PrecioTrabajoProfesional;
}
private static void mapearEstadisticasLicitacionURBAN(estadisticas estadistica, bdHerramientaCACOA.LicitacionesURBAN licitacionUrban, int idSimulador)
{
estadistica.idSimulacion = idSimulador;
estadistica.costeHoraDespachoProf = licitacionUrban.CosteHP;
//obtener tipodocumento
estadistica.tipoDocumento = licitacionUrban.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == licitacionUrban.TrabajoProfesional.idTipoDocumentacion).ValorAlfabetico1;
//obtener documento
var listadoDocumentos = licitacionUrban.Enumerados.ProyectosPorTipo(licitacionUrban.TrabajoProfesional.idTipoDocumentacion);
estadistica.documento = listadoDocumentos.First(x => x.idtipoproyectos == licitacionUrban.TrabajoProfesional.idTipoProyecto).Descripcion;
//obtener datos necesarios
var listadoDocumentacionNecesaria = licitacionUrban.TrabajoProfesional.DatosNecesarios;
estadistica.dato1 = listadoDocumentacionNecesaria[0].ValorNecesario.ToString();
estadistica.dato2 = listadoDocumentacionNecesaria[1].ValorNecesario.ToString();
var valorDato3 = listadoDocumentacionNecesaria[2].esCheckbox ? listadoDocumentacionNecesaria[2].esCheckbox.ToString() : listadoDocumentacionNecesaria[2].ValorNecesario.ToString();
if (valorDato3.ToLower().Contains("false"))
{
estadistica.dato3 = "FALSO";
}
else if (valorDato3.ToLower().Contains("true"))
{
estadistica.dato3 = "VERDADERO";
}
else
{
estadistica.dato3 = valorDato3.ToString();
}
estadistica.totalFases = licitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
estadistica.innovacion = licitacionUrban.TrabajoProfesional.valorInstrumentos;
estadistica.horasTPE = licitacionUrban.TrabajoProfesional.horasTrabProfesional;
estadistica.plazoPresentacion = licitacionUrban.PlazoPresentacionDocumentos;
estadistica.costeProduccion = licitacionUrban.CostesProduccionTrabProf;
estadistica.precioTrabajo = licitacionUrban.PrecioDelTrabajo;
}
public static double? comprobarNull(double? dato, int cantidadProyecto)
{
double? datoFinal = null;
if (dato != null)
{
datoFinal = dato / cantidadProyecto;
}
return datoFinal;
}
public static bool comprobarFechas(DateTime fechaInicio, DateTime fechaFinal)
{
bool fechaValida = false;
if (fechaFinal.Date >= fechaInicio.Date)
{
fechaValida = true;
}
return fechaValida;
}
public static bool comprobarFechasNulas(DateTime? fechaInicio, DateTime? fechaFinal)
{
bool fechaValida = false;
if (fechaFinal != null && fechaInicio != null)
{
fechaValida = true;
}
return fechaValida;
}
public static List<EstadistiaHerraCasaVM> rellenarListadoCASA(List<bdHerramientaCACOA.db.estadisticas> listadoEstadistica)
{
List<EstadistiaHerraCasaVM> listadoEstadisticasExcel = new List<EstadistiaHerraCasaVM> ();
foreach (estadisticas estadistica in listadoEstadistica)
{
listadoEstadisticasExcel.Add(new EstadistiaHerraCasaVM
{
idSimulacion = estadistica.idSimulacionNavigation?.Descripcion,
numeroTrabajadores = estadistica.numeroTrabajadores,
costeAnualTotal = estadistica.totalCosteAnual,
horasProduccion = estadistica.horasProduccion,
costesDirectos = estadistica.costeDirecto,
costesIndirectos = estadistica.costeIndirecto,
costesVariables = estadistica.costeVariable,
costeDespacho = estadistica.costeHoraDespachoProf,
totalSuperficie = estadistica.totalSupeficie,
porcentajeFases = estadistica.totalFases,
horasDocumentacion = estadistica.horasTPEDocumentacion,
horasDireccionObra = estadistica.horasTPEDireccionObra,
horasTrabajo = estadistica.horasTPE,
porcentajeExternalizacion = estadistica.porcentajeExternalizacion,
costeExternalizacion = estadistica.costeHoraExternalizacion,
plazoPresentacion = estadistica.plazoPresentacion,
costeProduccion = estadistica.costeProduccion,
beneficio = estadistica.porcentajeBeneficio,
precioTrabajo = estadistica.precioTrabajo,
totalOtrosTrabajos = estadistica.totalOtrosTrabajos,
precioEncargo = estadistica.precioEncargo
});
}
return listadoEstadisticasExcel;
}
public static List<EstadisticaUsosVM> rellenarListadoUsos(tsHerramientasCACOA bd, List<bdHerramientaCACOA.db.estadisticasusos> listadoEstadisticaUsos)
{
List<EstadisticaUsosVM> listadoEstadisticasUsosExcel = new List<EstadisticaUsosVM>();
foreach (estadisticasusos estadistica in listadoEstadisticaUsos)
{
listadoEstadisticasUsosExcel.Add(new EstadisticaUsosVM
{
idSimulacion = estadistica.idSimulacionNavigation?.Descripcion,
superficie = estadistica.superficie,
uso = bd.enumeraciones.First(x=> x.idEnumeracion == estadistica.idUso).ValorAlfabetico1,
tipologia = bd.tipologias.First(x=> x.idtipologia == estadistica.idTipologia).Descripcion,
intervencion = bd.enumeraciones.First(x=> x.idEnumeracion == estadistica.idIntervencion).ValorAlfabetico1,
});
}
return listadoEstadisticasUsosExcel;
}
public static List<EstadisticasFactoresVM> rellenarListadoFactores(tsHerramientasCACOA bd, List<bdHerramientaCACOA.db.estadisticasfactores> listadoEstadisticaFactores)
{
List<EstadisticasFactoresVM> listadoEstadisticaFactoresExcel = new List<EstadisticasFactoresVM>();
foreach (estadisticasfactores estadistica in listadoEstadisticaFactores)
{
listadoEstadisticaFactoresExcel.Add(new EstadisticasFactoresVM
{
idSimulacion = estadistica.idsimulacionNavigation?.Descripcion,
nombre = estadistica.nombre,
coeficiente =estadistica.coeficiente,
tipo = estadistica.tipo
});
}
return listadoEstadisticaFactoresExcel;
}
public static List<EstadisticasUrbanVM> rellenarListadoURBAN(List<bdHerramientaCACOA.db.estadisticas> listadoEstadisticaUrban)
{
List<EstadisticasUrbanVM> listadoEstadisticasUrbanExcel = new List<EstadisticasUrbanVM>();
foreach (estadisticas estadistica in listadoEstadisticaUrban)
{
listadoEstadisticasUrbanExcel.Add(new EstadisticasUrbanVM
{
idSimulacion = estadistica.idSimulacionNavigation?.Descripcion,
numeroTrabajadores = estadistica.numeroTrabajadores,
costeAnualTotal = estadistica.totalCosteAnual,
horasProduccion = estadistica.horasProduccion,
costesDirectos = estadistica.costeDirecto,
costesIndirectos = estadistica.costeIndirecto,
costesVariables = estadistica.costeVariable,
costeDespacho = estadistica.costeHoraDespachoProf,
tipoDocumento = estadistica.tipoDocumento,
documento = estadistica.documento,
dato1 = estadistica.dato1,
dato2 = estadistica.dato2,
dato3 = estadistica.dato3,
porcentajeFases = estadistica.totalFases,
innovacion = estadistica.innovacion,
horasTrabajo = estadistica.horasTPE,
porcentajeExternalizacion = estadistica.porcentajeExternalizacion,
costeExternalizacion = estadistica.costeHoraExternalizacion,
plazoPresentacion = estadistica.plazoPresentacion,
costeProduccion = estadistica.costeProduccion,
beneficio = estadistica.porcentajeBeneficio,
precioTrabajo = estadistica.precioTrabajo,
});
}
return listadoEstadisticasUrbanExcel;
}
public static double pasarHorasASemana(double horas)
{
double semanas = 0;
double horasSemanales = 7 * 24;
semanas = horas / horasSemanales;
return semanas;
}
public static byte[] GenerarExcelCasa(
tsHerramientasCACOA bd,
List<estadisticas> listadoHerramientaEstadistica,
List<estadisticasusos> listadoHerramientaEstadisticaUsos,
List<estadisticasfactores> 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<estadisticas> 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<estadisticasusos> 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<estadisticasfactores> 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<estadisticas> 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<estadisticas> 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;
}
} }
} }

View File

@@ -0,0 +1,28 @@
namespace HerramientaCASA.ViewModel
{
public class EstadistiaHerraCasaVM
{
public string? idSimulacion { get; set; }
public double? numeroTrabajadores { get; set; }
public double? costeAnualTotal { get; set; }
public double? horasProduccion { get; set; }
public double? costesDirectos { get; set; }
public double? costesIndirectos { get; set; }
public double? costesVariables { get; set; }
public double? costeDespacho { get; set; }
public double? totalSuperficie { get; set; }
public double? porcentajeFases { get; set; }
public double? horasDocumentacion { get; set; }
public double? horasDireccionObra { get; set; }
public double? horasTrabajo { get; set; }
public double? porcentajeExternalizacion { get; set; }
public double? costeExternalizacion { get; set; }
public double? plazoPresentacion { get; set; }
public double? costeProduccion { get; set; }
public double? beneficio { get; set; }
public double? precioTrabajo { get; set; }
public double? totalOtrosTrabajos { get; set; }
public double? precioEncargo { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
namespace HerramientaCASA.ViewModel
{
public class EstadisticaUsosVM
{
public string? idSimulacion { get; set; }
public double? superficie { get;set; }
public string? uso { get; set; }
public string? tipologia { get; set; }
public string? intervencion { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
namespace HerramientaCASA.ViewModel
{
public class EstadisticasFactoresVM
{
public string? idSimulacion { get; set; }
public string? nombre { get; set; }
public double? coeficiente { get; set; }
public string? tipo { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace HerramientaCASA.ViewModel
{
public class EstadisticasUrbanVM
{
public string? idSimulacion { get; set; }
public double? numeroTrabajadores { get; set; }
public double? costeAnualTotal { get; set; }
public double? horasProduccion { get; set; }
public double? costesDirectos { get; set; }
public double? costesIndirectos { get; set; }
public double? costesVariables { get; set; }
public double? costeDespacho { get; set; }
public string? tipoDocumento { get; set; }
public string? documento { get; set; }
public string? dato1 { get; set; }
public string? dato2 { get; set; }
public string? dato3 { get; set; }
public double? porcentajeFases { get; set; }
public double? innovacion { get; set; }
public double? horasTrabajo { get; set; }
public double? porcentajeExternalizacion { get; set; }
public double? costeExternalizacion { get; set; }
public double? plazoPresentacion { get; set; }
public double? costeProduccion { get; set; }
public double? beneficio { get; set; }
public double? precioTrabajo { get; set; }
}
}

View File

@@ -6,6 +6,8 @@
} }
}, },
"ConnectionStrings": { "ConnectionStrings": {
//"WriteConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
//"ReadOnlyConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
"WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;", "WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
"ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;" "ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
}, },

View File

@@ -4,6 +4,15 @@ body {
padding-bottom: 0px; padding-bottom: 0px;
} }
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
color: white;
text-align: center;
}
.logoCacoa { .logoCacoa {
border-radius: 10px !important; border-radius: 10px !important;
} }
@@ -484,7 +493,30 @@ li.nav-item.active {
font-weight: bold; font-weight: bold;
} }
.guardarNombre {
width:100%;
display:flex;
}
.impriManual {
}
@media (max-width: 767px) { @media (max-width: 767px) {
.arealogin {
margin-left: 20px !important;
margin-right: 20px !important;
}
.guardarNombre {
display:block;
}
.impriManual {
height: 36px;
position:absolute;
right:0px;
}
.tituloSim {
margin-top:8px;
}
.top-menu { .top-menu {
top: 6px; top: 6px;
right: 52px; right: 52px;
@@ -597,8 +629,10 @@ button.btn.btn-link.dxbs-button {
} }
.div-center { .div-center {
width: 400px; max-width: 400px;
height: 400px; max-height: 400px;
width:100%;
height:100%;
background-color: #fff; background-color: #fff;
position: absolute; position: absolute;
left: 0; left: 0;
@@ -606,8 +640,6 @@ button.btn.btn-link.dxbs-button {
top: 0; top: 0;
bottom: 0; bottom: 0;
margin: auto; margin: auto;
max-width: 100%;
max-height: 100%;
overflow: auto; overflow: auto;
padding: 1em 2em; padding: 1em 2em;
border-bottom: 2px solid #ccc; border-bottom: 2px solid #ccc;
@@ -794,3 +826,78 @@ div.content {
.TotalesTabla{ .TotalesTabla{
border:0px !important; border:0px !important;
} }
.TablaImprimir table {
border-collapse: collapse;
width: 100%;
font-size: 984pt;
}
.TablaImprimir thead tr th {
text-align: center;
font-style: normal;
font-size: 9pt;
}
.TablaImprimir tbody {
border-top: 1px solid black;
border-bottom: 1px solid black;
font-size: 9pt;
}
.TablaImprimir tbody tr {
border: none;
}
.TablaImprimir td, th {
padding: 8px;
text-align: left;
}
.TablaImprimir tfoot {
font-size: 9pt;
}
.TituloTablaImprimir {
color: #078b98 !important;
font-size: 11pt;
height:25px;
}
.NombreSimulacionImprimir{
font-style:italic;
}
.EncabezadoImprimir{
padding-left:20px;
padding-right:20px;
margin-bottom:100px;
font-size:11pt;
}
.FooterImprimir {
padding-left: 20px;
padding-right: 20px;
margin-top: 100px;
font-size: 9pt;
}
.puntoInfo{
display:flex;
gap:5px;
}
.pagePrincipal{
margin:30px;
}
.espacioTablas {
margin: 20px;
}
.centrarChecksImprimir {
align-items: center;
justify-content: flex-end;
display: flex;
}

File diff suppressed because one or more lines are too long

View File

@@ -14,7 +14,31 @@ window.mostrarPdf = function (base64Data) {
window.obtenerPDFImprimir = function (paginaImprimir) { window.obtenerPDFImprimir = function (paginaImprimir) {
let DespachoImprimir = document.getElementById(paginaImprimir); let DespachoImprimir = document.getElementById(paginaImprimir);
let html = DespachoImprimir.outerHTML + "<br>"; let html = DespachoImprimir.outerHTML;
return html; return html;
}; };
window.descargarExcel = function (fileName, base64Data) {
const link = document.createElement('a');
link.href = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + base64Data;
link.download = fileName;
link.click();
};
window.descargarPdf = function (fileName, base64Data) {
const link = document.createElement('a');
link.href = 'data:application/pdf;base64,' + base64Data;
link.download = fileName;
link.click();
};
window.verRutaReferrer = function () {
try {
return window.parent.location.href;
} catch (e) {
return document.referrer;
}
};

View File

@@ -34,6 +34,7 @@ namespace bdHerramientaCACOA
public double OtrosCostes { get; set; } = 0.03; public double OtrosCostes { get; set; } = 0.03;
} }
public class EnumeradosCASA { public class EnumeradosCASA {
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Intervenciones { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> Intervenciones { get; set; } = new List<enumeracionesCASA>();
@@ -53,7 +54,7 @@ namespace bdHerramientaCACOA
} }
public string NombreSimulacion { get; set; } = "Simulacion CASA " + DateTime.Now; public string NombreSimulacion { get; set; } = "CASA Edificación " + DateTime.Now;
private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional(); private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional();
public CASADespachoProfesional DespachoProfesional { public CASADespachoProfesional DespachoProfesional {
@@ -98,6 +99,7 @@ namespace bdHerramientaCACOA
ci.Concepto = enu.ValorAlfabetico1; ci.Concepto = enu.ValorAlfabetico1;
ci.idPeriodicidad = perMensual.idEnumeracion; ci.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1; ci.valorPeriodo = (double)perMensual.ValorNumerico1;
ci.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
DespachoProfesional.CostesIndirectos.Add(ci); DespachoProfesional.CostesIndirectos.Add(ci);
} }
} }
@@ -105,6 +107,9 @@ namespace bdHerramientaCACOA
checkListCostIndirectos(listaCosteIndirectos); checkListCostIndirectos(listaCosteIndirectos);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x=>x.idTipoHerramienta == 31).ToList();
Enumerados.ListaFactoresCorrecion = ListaFactoresCorreccionCASA(bd.factorescorreccion.ToList()); Enumerados.ListaFactoresCorrecion = ListaFactoresCorreccionCASA(bd.factorescorreccion.ToList());
//Cargamos los coeficientes correctores //Cargamos los coeficientes correctores
//Complejidad //Complejidad
@@ -118,6 +123,7 @@ namespace bdHerramientaCACOA
fc.idTipoFactor = enu.idEnumeracion; fc.idTipoFactor = enu.idEnumeracion;
fc.Nombre = enu.ValorAlfabetico1; fc.Nombre = enu.ValorAlfabetico1;
fc.idCorrecion = Enumerados.FactoresCorreccionPorGrupo(fc.idTipoFactor).First(x => x.Coeficiente == 0).idFactorCorreccion; fc.idCorrecion = Enumerados.FactoresCorreccionPorGrupo(fc.idTipoFactor).First(x => x.Coeficiente == 0).idFactorCorreccion;
fc.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
TrabajoProfesional.FactoresComplejidad.Add(fc); TrabajoProfesional.FactoresComplejidad.Add(fc);
} }
@@ -134,7 +140,7 @@ namespace bdHerramientaCACOA
fc.idTipoFactor = enu.idEnumeracion; fc.idTipoFactor = enu.idEnumeracion;
fc.Nombre = enu.ValorAlfabetico1; fc.Nombre = enu.ValorAlfabetico1;
fc.idCorrecion = Enumerados.FactoresCorreccionPorGrupo(fc.idTipoFactor).First(x => x.Coeficiente == 0).idFactorCorreccion; fc.idCorrecion = Enumerados.FactoresCorreccionPorGrupo(fc.idTipoFactor).First(x => x.Coeficiente == 0).idFactorCorreccion;
fc.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
TrabajoProfesional.FactoresRendimiento.Add(fc); TrabajoProfesional.FactoresRendimiento.Add(fc);
} }
} }
@@ -450,6 +456,11 @@ namespace bdHerramientaCACOA
double totalHorasTPEDireccion = CalcularHorasTPEDireccion(); double totalHorasTPEDireccion = CalcularHorasTPEDireccion();
TrabajoProfesional.HorasTPEDireccion = double.IsNaN(totalHorasTPEDireccion) ? 0 : totalHorasTPEDireccion; TrabajoProfesional.HorasTPEDireccion = double.IsNaN(totalHorasTPEDireccion) ? 0 : totalHorasTPEDireccion;
TrabajoProfesional.TotalHorasTPE = totalHorasTPEDocu + totalHorasTPEDireccion; TrabajoProfesional.TotalHorasTPE = totalHorasTPEDocu + totalHorasTPEDireccion;
TrabajoProfesional.HorasTPEEstimacion = TrabajoProfesional.HorasTPE;
TrabajoProfesional.HorasTPEDocumentacionEstimacion = TrabajoProfesional.HorasTPEDocumentacion;
TrabajoProfesional.HorasTPEDireccionEstimacion = TrabajoProfesional.HorasTPEDireccion;
CalcularCostesProduccion(); CalcularCostesProduccion();
} }
public void CalcularHorasTPEManual(double horasDocu, double horasDireccion) public void CalcularHorasTPEManual(double horasDocu, double horasDireccion)
@@ -757,6 +768,7 @@ namespace bdHerramientaCACOA
public double importe { get; set; } = 0; public double importe { get; set; } = 0;
public int idPeriodicidad { get; set; } = 0; public int idPeriodicidad { get; set; } = 0;
public double valorPeriodo { get; set; } = 0; public double valorPeriodo { get; set; } = 0;
public int idPuntoInformacion { get; set; } = 0;
public double coste { get; set; } = 0; public double coste { get; set; } = 0;
} }
public class CostesPersonal public class CostesPersonal
@@ -812,7 +824,9 @@ namespace bdHerramientaCACOA
public double HorasTPEDireccion { get; set; } = 0; public double HorasTPEDireccion { get; set; } = 0;
public double HorasTPEEstimacion { get; set; } = 0;
public double HorasTPEDocumentacionEstimacion { get; set; } = 0;
public double HorasTPEDireccionEstimacion { get; set; } = 0;
} }
public class UsosTipologia public class UsosTipologia
{ {
@@ -831,6 +845,7 @@ namespace bdHerramientaCACOA
public string Nombre { get; set; } = ""; public string Nombre { get; set; } = "";
public int idCorrecion { get; set; } = 0; public int idCorrecion { get; set; } = 0;
public double coeficiente { get; set; } = 0; public double coeficiente { get; set; } = 0;
public int idPuntoInformacion { get; set; } = 0;
} }
public class FasesTrabajo public class FasesTrabajo
{ {
@@ -907,6 +922,7 @@ namespace bdHerramientaCACOA
Descripcion = enu.Descripcion, Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1, ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2, ValorAlfabetico2 = enu.ValorAlfabetico2,
idPuntoInformacion = string.IsNullOrEmpty( enu.ValorAlfabetico4) ? null : int.Parse(enu.ValorAlfabetico4),
ValorNumerico1 = enu.ValorNumerico1 ValorNumerico1 = enu.ValorNumerico1
}; };
} }
@@ -923,7 +939,7 @@ namespace bdHerramientaCACOA
public string? ValorAlfabetico1 { get; set; } public string? ValorAlfabetico1 { get; set; }
public string? ValorAlfabetico2 { get; set; } public string? ValorAlfabetico2 { get; set; }
public int? idPuntoInformacion { get; set; }
public double? ValorNumerico1 { get; set; } public double? ValorNumerico1 { get; set; }
public bool Seleccionado { get; set; } = false!; public bool Seleccionado { get; set; } = false!;

View File

@@ -14,6 +14,8 @@ namespace bdHerramientaCACOA.HerramientaURBAN
public partial class URBAN { public partial class URBAN {
public class EnumeradosURBAN public class EnumeradosURBAN
{ {
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>(); public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>();
public List<enumeracionesCASA> ListaInstrumentos { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> ListaInstrumentos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>();

View File

@@ -13,7 +13,7 @@ namespace bdHerramientaCACOA.HerramientaURBAN
{ {
public partial class URBAN public partial class URBAN
{ {
public string NombreSimulacion { get; set; } = "Simulación Urbanismo "+ DateTime.Now; public string NombreSimulacion { get; set; } = "CASA Urbanismo " + DateTime.Now;
private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional(); private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional();
public CASADespachoProfesional DespachoProfesional public CASADespachoProfesional DespachoProfesional
@@ -75,12 +75,14 @@ namespace bdHerramientaCACOA.HerramientaURBAN
ci.Concepto = enu.ValorAlfabetico1; ci.Concepto = enu.ValorAlfabetico1;
ci.idPeriodicidad = perMensual.idEnumeracion; ci.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1; ci.valorPeriodo = (double)perMensual.ValorNumerico1;
ci.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
DespachoProfesional.CostesIndirectos.Add(ci); DespachoProfesional.CostesIndirectos.Add(ci);
} }
} }
checkListCostIndirectos(listaCosteIndirectos); checkListCostIndirectos(listaCosteIndirectos);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 34 || x.idTipoHerramienta == 31).ToList();
//Cargamos las Fases //Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB"); var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList(); var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList();

View File

@@ -88,9 +88,8 @@ namespace bdHerramientaCACOA.HerramientaURBAN
double totalEncargo = TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje); double totalEncargo = TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
CostesProduccion.HorasTrabajoProfesional = (TrabajoProfesional.horasTrabProfesional * (totalEncargo / 100)).DosDecimales(); CostesProduccion.HorasTrabajoProfesional = (TrabajoProfesional.horasTrabProfesional * (totalEncargo / 100)).DosDecimales();
} }
/*
CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales(); CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales();
if (CostesProduccion.HorasEnPlazo >= CostesProduccion.HorasTrabajoProfesional) if (CostesProduccion.HorasEnPlazo >= CostesProduccion.HorasTrabajoProfesional)
{ {
CostesProduccion.NumHorasMinimoExt = 0; CostesProduccion.NumHorasMinimoExt = 0;
@@ -98,8 +97,15 @@ namespace bdHerramientaCACOA.HerramientaURBAN
else else
{ {
CostesProduccion.NumHorasMinimoExt = (CostesProduccion.HorasTrabajoProfesional - CostesProduccion.HorasEnPlazo).DosDecimales(); CostesProduccion.NumHorasMinimoExt = (CostesProduccion.HorasTrabajoProfesional - CostesProduccion.HorasEnPlazo).DosDecimales();
} }*/
CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales();
if (CostesProduccion.HorasEnPlazo > TrabajoProfesional.horasTrabProfesional) {
CostesProduccion.HorasEnPlazo = TrabajoProfesional.horasTrabProfesional;
}
CostesProduccion.NumHorasMinimoExt = (CostesProduccion.HorasEnPlazo >= TrabajoProfesional.horasTrabProfesional) ?
0 :
Math.Round(TrabajoProfesional.horasTrabProfesional - CostesProduccion.HorasEnPlazo, 2, MidpointRounding.AwayFromZero);
//€ //€
if (CostesProduccion.NumHorasMinimoExt == 0) if (CostesProduccion.NumHorasMinimoExt == 0)

View File

@@ -21,6 +21,7 @@ namespace bdHerramientaCACOA.HerramientaURBAN
public double valorInstrumentos { get; set; } = 0; public double valorInstrumentos { get; set; } = 0;
public double horasTrabProfesional { get; set; } = 0; public double horasTrabProfesional { get; set; } = 0;
public double horasTrabProfesionalEstimacion { get; set; } = 0;
public bool EsPorUsos { get; set; } = true; public bool EsPorUsos { get; set; } = true;
@@ -56,6 +57,7 @@ namespace bdHerramientaCACOA.HerramientaURBAN
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos; double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales(); TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
TrabajoProfesional.horasTrabProfesionalEstimacion = TrabajoProfesional.horasTrabProfesional;
CalcularCostesProduccion(); CalcularCostesProduccion();
} }

View File

@@ -25,6 +25,8 @@ namespace bdHerramientaCACOA
public string Descripcion { get; set; } = "Licitación Edificación " + DateTime.Now; public string Descripcion { get; set; } = "Licitación Edificación " + DateTime.Now;
public class EnumeradosLICITACIONES public class EnumeradosLICITACIONES
{ {
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Intervenciones { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> Intervenciones { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> ListaOtrosTrabajos { get; set; } = new List<enumeracionesCASA>(); public List<enumeracionesCASA> ListaOtrosTrabajos { get; set; } = new List<enumeracionesCASA>();
@@ -55,19 +57,7 @@ namespace bdHerramientaCACOA
public bool EsPorUsos { get; set; } = true; public bool EsPorUsos { get; set; } = true;
public double CostesProduccionTrabProf { get; set; } = 0; public double CostesProduccionTrabProf { get; set; } = 0;
double _beneficio = 19; public double Beneficio { get; set; } = 19;
public double Beneficio
{
get
{
return _beneficio;
}
//set
//{
// _beneficio = value;
// CalcularHorasSuperficie();
//}
}
public double PrecioTrabProf { get; set; } = 0; public double PrecioTrabProf { get; set; } = 0;
@@ -84,6 +74,8 @@ namespace bdHerramientaCACOA
Variables.HorasProduccionMedia = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1; Variables.HorasProduccionMedia = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.IPCCosteIndirecto = (double) bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1; Variables.IPCCosteIndirecto = (double) bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1;
Beneficio = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.GG+BI").ValorNumerico1;
idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion; idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion; idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
@@ -109,6 +101,10 @@ namespace bdHerramientaCACOA
checkListCostIndirectos(listaFases); checkListCostIndirectos(listaFases);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 32).ToList();
//Cargamos la lista de otros costes de trabajo //Cargamos la lista de otros costes de trabajo
var grupoOtrosTrab = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "OTROSTRAB"); var grupoOtrosTrab = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "OTROSTRAB");
Enumerados.ListaOtrosTrabajos = ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoOtrosTrab.idGrupoEnumeracion).ToList()); Enumerados.ListaOtrosTrabajos = ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoOtrosTrab.idGrupoEnumeracion).ToList());
@@ -195,6 +191,7 @@ namespace bdHerramientaCACOA
public double coefIntervencionTotal { get; set; } = 0; public double coefIntervencionTotal { get; set; } = 0;
public double fasesEncargadas { get; set; } = 0; public double fasesEncargadas { get; set; } = 0;
public double horasProduccion { get; set; } = 0; public double horasProduccion { get; set; } = 0;
public double horasProduccionEstimacion { get; set; } = 0;
public double horasPorcentaje { get; set; } = 0; public double horasPorcentaje { get; set; } = 0;
public double horasDocumentacion { get; set; } = 0; public double horasDocumentacion { get; set; } = 0;
public double plazoMedio { get; set; } = 0; public double plazoMedio { get; set; } = 0;
@@ -241,6 +238,8 @@ namespace bdHerramientaCACOA
// COMPROBAR SI ESTO ESTÁ BIEN, SINO EL COSTE HORA DE PRODUCCIÓN NO CAMBIA // COMPROBAR SI ESTO ESTÁ BIEN, SINO EL COSTE HORA DE PRODUCCIÓN NO CAMBIA
horasPorcentaje = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x => x.Porcentaje); horasPorcentaje = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x => x.Porcentaje);
horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (horasPorcentaje / 100), 2, MidpointRounding.AwayFromZero); horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (horasPorcentaje / 100), 2, MidpointRounding.AwayFromZero);
horasProduccionEstimacion = horasProduccion;
} }
else { else {
@@ -333,7 +332,7 @@ namespace bdHerramientaCACOA
CostesProduccionTrabProf = Math.Round(CostesProduccionTrabProf, 2, MidpointRounding.AwayFromZero); CostesProduccionTrabProf = Math.Round(CostesProduccionTrabProf, 2, MidpointRounding.AwayFromZero);
PrecioTrabProf = Math.Round(PrecioTrabProf, 2, MidpointRounding.AwayFromZero); PrecioTrabProf = Math.Round(PrecioTrabProf, 2, MidpointRounding.AwayFromZero);
PrecioDelEncargo = PrecioTrabProf; PrecioDelEncargo = PrecioTrabProf + TotalOtrosTrabajos;
} }

View File

@@ -46,6 +46,8 @@ namespace bdHerramientaCACOA
public class EnumeradosLicitacionesURBAN public class EnumeradosLicitacionesURBAN
{ {
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>(); public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
public List<CosteDirectoIndirecto> ListaCDCI { get; set; } = new List<CosteDirectoIndirecto>(); public List<CosteDirectoIndirecto> ListaCDCI { get; set; } = new List<CosteDirectoIndirecto>();
@@ -80,6 +82,7 @@ namespace bdHerramientaCACOA
Variables.JornadaLaboral = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1; Variables.JornadaLaboral = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (int) bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1; Variables.HorasProduccionMedia = (int) bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.IPCCosteIndirecto = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1; Variables.IPCCosteIndirecto = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1;
Beneficio = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.GG+BI").ValorNumerico1;
idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion; idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion; idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
@@ -144,6 +147,8 @@ namespace bdHerramientaCACOA
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB"); var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList(); var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList();
foreach (enumeraciones enu in listaFases) foreach (enumeraciones enu in listaFases)
{
if (!TrabajoProfesional.FasesTrabajoProfesional.Any(x => x.idFase == enu.idEnumeracion))
{ {
FasesURBAN ft = new FasesURBAN(); FasesURBAN ft = new FasesURBAN();
ft.idFase = enu.idEnumeracion; ft.idFase = enu.idEnumeracion;
@@ -153,9 +158,28 @@ namespace bdHerramientaCACOA
TrabajoProfesional.FasesTrabajoProfesional.Add(ft); TrabajoProfesional.FasesTrabajoProfesional.Add(ft);
} }
}
checkListFasesURBAN(listaFases);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 35).ToList();
Enumerados.FasesTrabajo = JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional)); Enumerados.FasesTrabajo = JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional));
} }
private void checkListFasesURBAN(List<enumeraciones> listaFases)
{
var itemsAEliminar = TrabajoProfesional.FasesTrabajoProfesional
.Where(item => !listaFases.Any(x => x.idEnumeracion == item.idFase))
.ToList();
foreach (var item in itemsAEliminar)
{
TrabajoProfesional.FasesTrabajoProfesional.Remove(item);
}
}
public void CalcularLicitacion() { public void CalcularLicitacion() {
var horasAnualesDes = Math.Round(TrabajoProfesional.horasTrabProfesional * 12 / PlazoPresentacionDocumentos,2,MidpointRounding.AwayFromZero); var horasAnualesDes = Math.Round(TrabajoProfesional.horasTrabProfesional * 12 / PlazoPresentacionDocumentos,2,MidpointRounding.AwayFromZero);
var CD = ObtenerCDTabla(horasAnualesDes); var CD = ObtenerCDTabla(horasAnualesDes);
@@ -164,8 +188,8 @@ namespace bdHerramientaCACOA
CosteHP = ((CD+CI)*(1+CV)).DosDecimales(); CosteHP = ((CD+CI)*(1+CV)).DosDecimales();
CostesProduccionTrabProf = (TrabajoProfesional.horasTrabProfesional*CosteHP).DosDecimales(); CostesProduccionTrabProf = (TrabajoProfesional.horasTrabProfesional*CosteHP).DosDecimales();
Beneficio = 0.19; //Beneficio = 0.19;
PrecioDelTrabajo = (CostesProduccionTrabProf*(1+Beneficio)).DosDecimales(); PrecioDelTrabajo = (CostesProduccionTrabProf*(1+(Beneficio/100))).DosDecimales();
} }
private double ObtenerCDTabla(double horas) private double ObtenerCDTabla(double horas)
@@ -229,6 +253,7 @@ namespace bdHerramientaCACOA
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos; double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales(); TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
TrabajoProfesional.horasTrabProfesionalEstimacion = TrabajoProfesional.horasTrabProfesional;
} }
else { else {

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class estadisticas
{
public int idEstadistica { get; set; }
public int? idSimulacion { get; set; }
public double? costeDirecto { get; set; }
public double? costeIndirecto { get; set; }
public double? costeVariable { get; set; }
public double? costeHoraDespachoProf { get; set; }
public double? totalFases { get; set; }
public double? horasTPEDocumentacion { get; set; }
public double? horasTPEDireccionObra { get; set; }
public double? horasTPE { get; set; }
public double? porcentajeExternalizacion { get; set; }
public double? plazoPresentacion { get; set; }
public double? costeProduccion { get; set; }
public double? totalOtrosTrabajos { get; set; }
public double? porcentajeBeneficio { get; set; }
public double? numeroTrabajadores { get; set; }
public double? totalCosteAnual { get; set; }
public double? horasProduccion { get; set; }
public double? totalSupeficie { get; set; }
public double? costeHoraExternalizacion { get; set; }
public double? precioEncargo { get; set; }
public double? precioTrabajo { get; set; }
public string? tipoDocumento { get; set; }
public string? documento { get; set; }
public string? dato1 { get; set; }
public string? dato2 { get; set; }
public string? dato3 { get; set; }
public double? innovacion { get; set; }
public virtual simulaciones? idSimulacionNavigation { get; set; }
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class estadisticasfactores
{
public int idestadisticasFactores { get; set; }
public int? idsimulacion { get; set; }
public string? nombre { get; set; }
public double? coeficiente { get; set; }
public string? tipo { get; set; }
public virtual simulaciones? idsimulacionNavigation { get; set; }
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class estadisticasusos
{
public int idestadisticaUsos { get; set; }
public int? idSimulacion { get; set; }
public double? superficie { get; set; }
public int? idUso { get; set; }
public int? idTipologia { get; set; }
public int? idIntervencion { get; set; }
public virtual simulaciones? idSimulacionNavigation { get; set; }
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class puntosinformacion
{
public int idPuntosInformacion { get; set; }
public string? Titulo { get; set; }
public string? Descripcion { get; set; }
public int? idTipoHerramienta { get; set; }
}

View File

@@ -27,6 +27,12 @@ public partial class simulaciones
public double? CostesVariables { get; set; } public double? CostesVariables { get; set; }
public virtual ICollection<estadisticas> estadisticas { get; set; } = new List<estadisticas>();
public virtual ICollection<estadisticasfactores> estadisticasfactores { get; set; } = new List<estadisticasfactores>();
public virtual ICollection<estadisticasusos> estadisticasusos { get; set; } = new List<estadisticasusos>();
public virtual usuarios idCodigoNavigation { get; set; } = null!; public virtual usuarios idCodigoNavigation { get; set; } = null!;
public virtual ficheros idFicheroJSONNavigation { get; set; } = null!; public virtual ficheros idFicheroJSONNavigation { get; set; } = null!;

View File

@@ -26,6 +26,12 @@ public partial class herramientascacoaContext : DbContext
public virtual DbSet<enumeraciones> enumeraciones { get; set; } public virtual DbSet<enumeraciones> enumeraciones { get; set; }
public virtual DbSet<estadisticas> estadisticas { get; set; }
public virtual DbSet<estadisticasfactores> estadisticasfactores { get; set; }
public virtual DbSet<estadisticasusos> estadisticasusos { get; set; }
public virtual DbSet<factorescorreccion> factorescorreccion { get; set; } public virtual DbSet<factorescorreccion> factorescorreccion { get; set; }
public virtual DbSet<ficheros> ficheros { get; set; } public virtual DbSet<ficheros> ficheros { get; set; }
@@ -36,6 +42,8 @@ public partial class herramientascacoaContext : DbContext
public virtual DbSet<provincias> provincias { get; set; } public virtual DbSet<provincias> provincias { get; set; }
public virtual DbSet<puntosinformacion> puntosinformacion { get; set; }
public virtual DbSet<simulaciones> simulaciones { get; set; } public virtual DbSet<simulaciones> simulaciones { get; set; }
public virtual DbSet<tipologias> tipologias { get; set; } public virtual DbSet<tipologias> tipologias { get; set; }
@@ -146,7 +154,7 @@ public partial class herramientascacoaContext : DbContext
entity.Property(e => e.ValorAlfabetico2).HasMaxLength(40); entity.Property(e => e.ValorAlfabetico2).HasMaxLength(40);
entity.Property(e => e.ValorAlfabetico3).HasMaxLength(40); entity.Property(e => e.ValorAlfabetico3).HasMaxLength(40);
entity.Property(e => e.ValorAlfabetico4).HasMaxLength(40); entity.Property(e => e.ValorAlfabetico4).HasMaxLength(40);
entity.Property(e => e.ValorAlfabeticoLargo).HasMaxLength(255); entity.Property(e => e.ValorAlfabeticoLargo).HasMaxLength(2000);
entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)"); entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)");
entity.HasOne(d => d.idGrupoEnumeracionNavigation).WithMany(p => p.enumeraciones) entity.HasOne(d => d.idGrupoEnumeracionNavigation).WithMany(p => p.enumeraciones)
@@ -154,6 +162,61 @@ public partial class herramientascacoaContext : DbContext
.HasConstraintName("FK_enumeraciones_gruposenumeracion"); .HasConstraintName("FK_enumeraciones_gruposenumeracion");
}); });
modelBuilder.Entity<estadisticas>(entity =>
{
entity.HasKey(e => e.idEstadistica).HasName("PRIMARY");
entity.HasIndex(e => e.idSimulacion, "FK_estadisticas_simulaciones_idx");
entity.Property(e => e.idEstadistica).HasColumnType("int(11)");
entity.Property(e => e.dato1).HasMaxLength(45);
entity.Property(e => e.dato2).HasMaxLength(45);
entity.Property(e => e.dato3).HasMaxLength(45);
entity.Property(e => e.documento).HasMaxLength(50);
entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
entity.Property(e => e.tipoDocumento).HasMaxLength(50);
entity.HasOne(d => d.idSimulacionNavigation).WithMany(p => p.estadisticas)
.HasForeignKey(d => d.idSimulacion)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_estadisticas_simulaciones");
});
modelBuilder.Entity<estadisticasfactores>(entity =>
{
entity.HasKey(e => e.idestadisticasFactores).HasName("PRIMARY");
entity.HasIndex(e => e.idsimulacion, "FK_estadisticasfactores_simulaciones_idx");
entity.Property(e => e.idestadisticasFactores).HasColumnType("int(11)");
entity.Property(e => e.idsimulacion).HasColumnType("int(11)");
entity.Property(e => e.nombre).HasMaxLength(45);
entity.Property(e => e.tipo).HasMaxLength(45);
entity.HasOne(d => d.idsimulacionNavigation).WithMany(p => p.estadisticasfactores)
.HasForeignKey(d => d.idsimulacion)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_estadisticasfactores_simulaciones");
});
modelBuilder.Entity<estadisticasusos>(entity =>
{
entity.HasKey(e => e.idestadisticaUsos).HasName("PRIMARY");
entity.HasIndex(e => e.idSimulacion, "FK_estadisticasusos_simulaciones_idx");
entity.Property(e => e.idestadisticaUsos).HasColumnType("int(11)");
entity.Property(e => e.idIntervencion).HasColumnType("int(11)");
entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
entity.Property(e => e.idTipologia).HasColumnType("int(11)");
entity.Property(e => e.idUso).HasColumnType("int(11)");
entity.HasOne(d => d.idSimulacionNavigation).WithMany(p => p.estadisticasusos)
.HasForeignKey(d => d.idSimulacion)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_estadisticasusos_simulaciones");
});
modelBuilder.Entity<factorescorreccion>(entity => modelBuilder.Entity<factorescorreccion>(entity =>
{ {
entity.HasKey(e => e.idFactorCorreccion).HasName("PRIMARY"); entity.HasKey(e => e.idFactorCorreccion).HasName("PRIMARY");
@@ -232,6 +295,16 @@ public partial class herramientascacoaContext : DbContext
entity.Property(e => e.Nombre).HasMaxLength(80); entity.Property(e => e.Nombre).HasMaxLength(80);
}); });
modelBuilder.Entity<puntosinformacion>(entity =>
{
entity.HasKey(e => e.idPuntosInformacion).HasName("PRIMARY");
entity.Property(e => e.idPuntosInformacion).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(400);
entity.Property(e => e.Titulo).HasMaxLength(60);
entity.Property(e => e.idTipoHerramienta).HasColumnType("int(11)");
});
modelBuilder.Entity<simulaciones>(entity => modelBuilder.Entity<simulaciones>(entity =>
{ {
entity.HasKey(e => e.idSimulacion).HasName("PRIMARY"); entity.HasKey(e => e.idSimulacion).HasName("PRIMARY");

View File

@@ -4,6 +4,7 @@
"ContextNamespace": null, "ContextNamespace": null,
"FilterSchemas": false, "FilterSchemas": false,
"IncludeConnectionString": false, "IncludeConnectionString": false,
"MinimumProductVersion": "2.6.1080",
"ModelNamespace": null, "ModelNamespace": null,
"OutputContextPath": "dbcontext", "OutputContextPath": "dbcontext",
"OutputPath": "db", "OutputPath": "db",
@@ -42,6 +43,18 @@
"Name": "enumeraciones", "Name": "enumeraciones",
"ObjectType": 0 "ObjectType": 0
}, },
{
"Name": "estadisticas",
"ObjectType": 0
},
{
"Name": "estadisticasfactores",
"ObjectType": 0
},
{
"Name": "estadisticasusos",
"ObjectType": 0
},
{ {
"Name": "factorescorreccion", "Name": "factorescorreccion",
"ObjectType": 0 "ObjectType": 0
@@ -62,6 +75,10 @@
"Name": "provincias", "Name": "provincias",
"ObjectType": 0 "ObjectType": 0
}, },
{
"Name": "puntosinformacion",
"ObjectType": 0
},
{ {
"Name": "simulaciones", "Name": "simulaciones",
"ObjectType": 0 "ObjectType": 0