Compare commits

..

48 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
87 changed files with 5491 additions and 763 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
if (obtenerDatoId.Value == 0 || !obtenerDatoAdmin.Value)
{ {
Navigation.NavigateTo("/", true); 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);
}
if (userState.idUser == 0)
{
Navigation.NavigateTo("/", true);
}
StateHasChanged();
} }
} }
} }

View File

@@ -3,32 +3,35 @@
@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>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<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>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<!-- Add chart.js reference if chart components are used in your application. --> <!-- Add chart.js reference if chart components are used in your application. -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.0.1/chart.umd.js" integrity="sha512-gQhCDsnnnUfaRzD8k1L5llCCV6O9HN09zClIzzeJ8OJ9MpGmIlCxm+pdCkqTwqJ4JcjbojFr79rl2F1mzcoLMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.0.1/chart.umd.js" integrity="sha512-gQhCDsnnnUfaRzD8k1L5llCCV6O9HN09zClIzzeJ8OJ9MpGmIlCxm+pdCkqTwqJ4JcjbojFr79rl2F1mzcoLMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- Add chartjs-plugin-datalabels.min.js reference if chart components with data label feature is used in your application. --> <!-- Add chartjs-plugin-datalabels.min.js reference if chart components with data label feature is used in your application. -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js" integrity="sha512-JPcRR8yFa8mmCsfrw4TNte1ZvF1e3+1SdGMslZvmrzDYxS69J7J49vkFL8u6u8PlPJK+H3voElBtUCzaXj+6ig==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js" integrity="sha512-JPcRR8yFa8mmCsfrw4TNte1ZvF1e3+1SdGMslZvmrzDYxS69J7J49vkFL8u6u8PlPJK+H3voElBtUCzaXj+6ig==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- Add sortable.js reference if SortableList component is used in your application. --> <!-- Add sortable.js reference if SortableList component is used in your application. -->
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script> <script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
<script src="Scripts/popper.min.js"></script> <script src="Scripts/popper.min.js"></script>
<script src="Scripts/all.min.js"></script> <script src="Scripts/all.min.js"></script>
<script src="Scripts/Util.js"></script> <script src="Scripts/Util.js"></script>
</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.49" 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;">
<b>Otros trabajos incluidos en el Encargo</b> <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>
}
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

@@ -90,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,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">
<div class="col-md-6 mt-3" style="width:47%;"> <!--style="width:47%;"-->
<div style="height: 24px;margin-bottom: 10px;"> <div class="col-md-6 mt-3" >
<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> %

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">
<b>Costes variables</b> <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>
</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" style="width:43%;">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"

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,8 +21,16 @@ 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">
@context.Concepto
<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
</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">

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">
@context.HorasProduccion.MilesYDecimales() h <div class="d-flex flex-column">
@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">
@context.Nombre <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
</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)
{ {
@@ -85,7 +96,7 @@
Style="table-layout:fixed !important" Style="table-layout:fixed !important"
PageSizeSelectorVisible="false" PageSizeSelectorVisible="false"
Responsive="true"> Responsive="true">
<GridColumns> <GridColumns>
<GridColumn Class="columna20Ancho text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Superficie"> <GridColumn Class="columna20Ancho text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Superficie">
<span> <span>

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">
<b>Costes variables</b> <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>
</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,7 +5,7 @@
<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">
@@ -16,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,8 +21,14 @@
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">

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,7 +37,12 @@
</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>
@@ -40,7 +50,10 @@
<div class="col-6 formatoCampos"> <div class="col-6 formatoCampos">
<label class="tituloLbl"> <label class="tituloLbl">
@UtilidadesCASA.CreateTooltip("Texto del tooltip") @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: Jornada laboral:
</label> </label>
<div class="d-flex" style="gap:3px;"> <div class="d-flex" style="gap:3px;">
@@ -52,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;">
@@ -64,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>
@@ -97,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">
@context.HorasProduccion.MilesYDecimales() h <div class="d-flex flex-column">
@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">
@@ -131,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">
@@ -142,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>
@@ -27,6 +27,8 @@
<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: 70%;">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,26 +1,26 @@
<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">
@* ENCABEZADO DE LA PAGINA *@ @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir"> <div class="EncabezadoImprimir">
<p> <p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y @msTextoEncabezado
estimación de Costes de Producción resultado de la simulación.
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoCASA.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoCASA.NombreSimulacion</span></label>
<label>Fecha de creación: <span class="NombreSimulacionImprimir">poner aqui la fecha de creacion</span></label> <br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
@* TABLA COSTE HORA DESPACHO PROFESIONAL *@ @* TABLA COSTE HORA DESPACHO PROFESIONAL *@
<div class="col-8 mx-auto" style="align-items: flex-end; margin-bottom:30px;"> <div class="col-8 mx-auto" style="align-items: flex-end; margin-bottom:30px;">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
@@ -63,10 +63,10 @@
<div class="col-8 mx-auto"> <div class="col-8 mx-auto">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -102,10 +102,10 @@
@* TABLA USOS/TIPOLOGIAS *@ @* 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 class="TituloTablaImprimir" style="height: 49px;"> <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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
@@ -117,7 +117,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoCASA.TrabajoProfesional.Usos.Count != 0) @if (totalUsos != 0)
{ {
@foreach (var uso in objetoCASA.TrabajoProfesional.Usos) @foreach (var uso in objetoCASA.TrabajoProfesional.Usos)
{ {
@@ -149,9 +149,9 @@
</div> </div>
</div> </div>
<div class="col-10 mx-auto d-flex justify-content-center" style="align-items: flex-end; margin-top:100px;"> <div class="col-10 mx-auto d-flex justify-content-center" style="@estiloTrabajos">
<div class="col-md-10 row "> <div class="col-md-10 row ">
<div class="TituloTablaImprimir" style="height: 49px;"> <div class="TituloTablaImprimir">
<b>Trabajo profesional</b> <b>Trabajo profesional</b>
</div> </div>
@@ -208,15 +208,20 @@
</div> </div>
</div> </div>
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto" >
@* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@ @* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@
<div class="col-8 mx-auto mb-4"> <div class="col-8 mx-auto" style=" margin-top:70px;">
<div class="TituloTablaImprimir" style="height: 49px;"> <div class="TituloTablaImprimir">
<b>Costes Asociados a los Servicios de Arquitectura</b>
</div> </div>
<table class="tablaAlter" style="width:100%"> <div class="TituloTablaImprimir" style=" margin-top:70px;">
<p>
<b>Costes Asociados a los Servicios de Arquitectura</b>
</p>
</div>
<table class="tablaAlter" style="width:100%;">
<tbody style="font-size:9pt;"> <tbody style="font-size:9pt;">
<tr> <tr>
<td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td> <td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td>
@@ -251,10 +256,10 @@
{ {
<div class="col-8 mx-auto"> <div class="col-8 mx-auto">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
@@ -304,16 +309,10 @@
<div class="FooterImprimir"> <div class="FooterImprimir">
<p> <p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo @mspie1
profesional, que siempre estará supeditado a su determinación concreta por parte del autor de este estudio económico,
teniendo presente factores propios de eficiencia como la estandarización de procesos, eficiencia en el trabajo,
aprovechamiento de estudios y trabajos anteriores y mejoras en la productividad de su propio despacho profesional.
</p> </p>
<p> <p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la @mspie2
aplicación en función de los datos que posee y que el usuario ha introducido. En nigún caso tiene por qué corresponder
con la realidad ni el CACOA garantiza la veracidad de los mismos, pro lo que no es responsable de su veracidad en sí ni
sobre terceros.
</p> </p>
</div> </div>
@@ -326,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,27 +1,29 @@
@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">
@* ENCABEZADO DE LA PAGINA *@ @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir"> <div class="EncabezadoImprimir">
<p> <p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y @msTextoEncabezado
estimación de Costes de Producción resultado de la simulación.
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoURBAN.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoURBAN.NombreSimulacion</span></label>
<label>Fecha de creación: <span class="NombreSimulacionImprimir">poner aqui la fecha de creacion</span></label> <br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </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 class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
@@ -59,12 +61,13 @@
</div> </div>
</div> </div>
@* COSTE HORA EXTERNALIZACION *@
<div class="col-8 mx-auto" style="margin-top:50px;"> <div class="col-8 mx-auto" style="margin-top:50px;">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -96,9 +99,11 @@
</div> </div>
@* TRABAJAO PROFESIONAL *@ @* TRABAJAO PROFESIONAL *@
<div class="col-12 mx-auto mb-5"> <div class="@separacionTabla">
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> <div class="col-8 mx-auto" style="margin-top:50px;">
<div class="formatoCampos pt-2" style="font-size:9pt;">
<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 (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
@@ -119,16 +124,53 @@
{ {
<label>No Seleccionado</label> <label>No Seleccionado</label>
} }
</div> </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>
@* 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 class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -158,10 +200,13 @@
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div class="TituloTablaImprimir" 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>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -209,10 +254,10 @@
</div> </div>
@* TABLA DE DATOS NECESARIOS *@ @* TABLA DE DATOS NECESARIOS *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -245,10 +290,10 @@
@* TABLA FASES *@ @* TABLA FASES *@
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Fases:</b> <b>Fases:</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -299,7 +344,10 @@
@* 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 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div> <div class="TituloTablaImprimir" style="margin-top:80px;">
</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"> <p style="font-size:9pt;" class="col-6">
<label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label> <label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label>
</p> </p>
@@ -324,7 +372,7 @@
</div> </div>
} }
<div style="font-size:9pt;" class="fw-bold"> <div style="font-size:9pt;" class="fw-bold mt-2">
<label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label> <label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label>
</div> </div>
</div> </div>
@@ -333,11 +381,11 @@
</div> </div>
@* PLAZOS Y HORAS *@ @* PLAZOS Y HORAS *@
<div class="col-11 mx-auto mb-5" style="margin-top:250px;"> <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 "> <div class="col-9 mb-5 mb-0" style="width:100%;">
<div class="TituloTablaImprimir" style="height: 49px;"> <div class="TituloTablaImprimir" >
<b>Trabajo profesional</b> <b>Trabajo profesional</b>
</div> </div>
@@ -384,7 +432,7 @@
@* 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="col-8 mx-auto"> <div class="col-8 mx-auto">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
@@ -425,16 +473,10 @@
<div class="FooterImprimir"> <div class="FooterImprimir">
<p> <p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo @mspie1
profesional, que siempre estará supeditado a su determinación concreta por parte del autor de este estudio económico,
teniendo presente factores propios de eficiencia como la estandarización de procesos, eficiencia en el trabajo,
aprovechamiento de estudios y trabajos anteriores y mejoras en la productividad de su propio despacho profesional.
</p> </p>
<p> <p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la @mspie2
aplicación en función de los datos que posee y que el usuario ha introducido. En nigún caso tiene por qué corresponder
con la realidad ni el CACOA garantiza la veracidad de los mismos, pro lo que no es responsable de su veracidad en sí ni
sobre terceros.
</p> </p>
</div> </div>
@@ -447,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,26 +1,27 @@
 
<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">
@* ENCABEZADO DE LA PAGINA *@ @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir"> @* 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> <p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y @msTextoEncabezado
estimación de Costes de Producción resultado de la simulación.
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitaciones.Descripcion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitaciones.Descripcion</span></label>
<label>Fecha de creación: <span class="NombreSimulacionImprimir">poner aqui la fecha de creacion</span></label> <br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
@* TABLA USOS TIPOLOGIAS *@ @* TABLA USOS TIPOLOGIAS *@
<div class="col-11 mx-auto mb-5" style="align-items: flex-end;"> <div class="col-11 mx-auto mb-4" style="align-items: flex-end;">
<div class="TituloTablaImprimir" style="height: 49px;"> <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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
@@ -54,7 +55,7 @@
<tfoot> <tfoot>
<tr> <tr>
<td colspan="4" class="text-start 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() m²</span> Total superficie: <span> @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales() m²</span>
</div> </div>
</td> </td>
@@ -66,13 +67,13 @@
</div> </div>
@* TABLA FASES *@ @* TABLA FASES *@
<div class="col-8 mx-auto" style="align-items: flex-end;"> <div class="col-8 mx-auto" style="align-items: flex-end;">
<div class="TituloTablaImprimir" style="height: 49px;"> <div class="TituloTablaImprimir" >
<b>Fases</b> <b>Fases</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table class="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0 espacioTablas" style="width:90%;">
<thead> <thead>
<tr> <tr>
<th class="text-start" >Fases</th> <th class="text-start" >Fases</th>
@@ -85,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)
{ {
@@ -139,13 +140,13 @@
</div> </div>
@* TABLA COSTES DE PRODUCCION *@ @* TABLA COSTES DE PRODUCCION *@
<div class="col-8 mx-auto" style="align-items: flex-end; margin-top:200px;"> <div class="col-8 mx-auto" style="align-items: flex-end; margin-top:35px;">
<div class="TituloTablaImprimir" style="height: 49px;"> <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"> <table class="TablaImprimir mb-0 espacioTablas">
<thead> <thead>
<tr> <tr>
<th class="colorB fw-bold" style="width:60%">Concepto</th> <th class="colorB fw-bold" style="width:60%">Concepto</th>
@@ -197,18 +198,13 @@
</div> </div>
<div class="FooterImprimir"> @* 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> <p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo @mspie1
profesional, que siempre estará supeditado a su determinación concreta por parte del autor de este estudio económico,
teniendo presente factores propios de eficiencia como la estandarización de procesos, eficiencia en el trabajo,
aprovechamiento de estudios y trabajos anteriores y mejoras en la productividad de su propio despacho profesional.
</p> </p>
<p> <p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la @mspie2
aplicación en función de los datos que posee y que el usuario ha introducido. En nigún caso tiene por qué corresponder
con la realidad ni el CACOA garantiza la veracidad de los mismos, pro lo que no es responsable de su veracidad en sí ni
sobre terceros.
</p> </p>
</div> </div>
</div> </div>
@@ -223,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,24 +1,26 @@
@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">
@* ENCABEZADO DE LA PAGINA *@ @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir"> <div class="EncabezadoImprimir">
<p> <p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y @msTextoEncabezado
estimación de Costes de Producción resultado de la simulación.
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitacionUrban.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitacionUrban.NombreSimulacion</span></label>
<label>Fecha de creación: <span class="NombreSimulacionImprimir">poner aqui la fecha de creacion</span></label> <br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
<div class="col-8 mx-auto" style="margin-top:50px;">
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> <div class="table-responsive espacioTablas">
<div class="formatoCampos pt-2" style="font-size:9pt;">
@* <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)
{ {
@@ -39,16 +41,53 @@
{ {
<label>No Seleccionado</label> <label>No Seleccionado</label>
} }
</div> </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>
@* 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 class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
@@ -64,7 +103,8 @@
<td class="colorB w4">@item.Descripcion</td> <td class="colorB w4">@item.Descripcion</td>
</tr> </tr>
} }
} else }
else
{ {
<tr><td class="text-center">No hay registros</td></tr> <tr><td class="text-center">No hay registros</td></tr>
} }
@@ -76,20 +116,23 @@
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div class="TituloTablaImprimir" 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>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;"> <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>
<th class="colorB fw-bold">Añadida</th> <th class="colorB fw-bold">Añadida</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0) @if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0)
{ {
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional) @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional)
{ {
<tr> <tr>
@@ -118,96 +161,96 @@
<tr><td class="text-center" colspan="2">No hay registros</td></tr> <tr><td class="text-center" colspan="2">No hay registros</td></tr>
} }
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
@* DATOS NECESARIOS *@ @* DATOS NECESARIOS *@
<div class="col-8 mx-auto" > <div class="col-12 mx-auto">
<div class="col-11 mx-auto"> <div class="col-11 mx-auto">
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <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>
<th class="colorB fw-bold">Valor</th> <th class="colorB fw-bold">Valor</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.Count != 0) @if (objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.Count != 0)
{ {
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios) @foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios)
{ {
<tr> <tr>
<td class="colorB w4">@item.Descripcion</td> <td class="colorB w4">@item.Descripcion</td>
<td class="colorB w4 text-end">@item.ValorNecesario</td> <td class="colorB w4 text-end">@item.ValorNecesario</td>
</tr> </tr>
}
} }
else }
{ else
<tr><td class="text-center" colspan="2">No hay registros</td></tr>
}
</tbody>
</table>
</div>
</div>
</div>
@* FASES *@
<div class="col-8 mx-auto" style="margin-top:250px;" >
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;">
<b>Fases:</b>
</div>
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th style="width:70%;" class="colorB fw-bold">Fases</th>
<th class="colorB fw-bold"></th>
</tr>
</thead>
<tbody>
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional)
{ {
<tr> <tr><td class="text-center" colspan="2">No hay registros</td></tr>
<td class="colorB w4">@item.Denominacion</td>
<td class="colorB w4 text-end">@item.Porcentaje %</td>
</tr>
} }
</tbody> </tbody>
<tfoot>
<tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla">
<div class="d-flex justify-content-end">
<div style="align-self: center;">
@if (objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) != 100)
{
<div>
Trabajo en misión parcial: <span> @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) %</span>
</div>
}
else
{
<div>
Total: <span> @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) %</span>
</div>
}
</div>
</div>
</td>
</tr>
</tfoot>
</table> </table>
</div>
</div> </div>
</div>
@* FASES *@
<div class="col-8 mx-auto" style="margin-top:150px;">
<div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Fases:</b>
</div>
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th style="width:70%;" class="colorB fw-bold">Fases</th>
<th class="colorB fw-bold"></th>
</tr>
</thead>
<tbody>
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional)
{
<tr>
<td class="colorB w4">@item.Denominacion</td>
<td class="colorB w4 text-end">@item.Porcentaje %</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla">
<div class="d-flex justify-content-end">
<div style="align-self: center;">
@if (objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) != 100)
{
<div>
Trabajo en misión parcial: <span> @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) %</span>
</div>
}
else
{
<div>
Total: <span> @objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje) %</span>
</div>
}
</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
@* INNOVACION INSTRUMENTOS *@
@* INNOVACIÓN 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 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div> <div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div>
<p style="font-size:9pt;" class="col-6"> <p style="font-size:9pt;" class="col-6">
@@ -240,16 +283,17 @@
</div> </div>
</div> </div>
</div>
@* Costes de producción *@ <div class="col-8 mx-auto mt-4">
<div class="col-8 mx-auto mb-5"> @* Solvencia tecnica *@
@* Solvencia tecnica *@
<div class="TituloTablaImprimir" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
@@ -260,7 +304,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@if (objetoLicitacionUrban.ListaSolvenciaTecnica.Count>0) @if (objetoLicitacionUrban.ListaSolvenciaTecnica.Count > 0)
{ {
@foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica) @foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica)
{ {
@@ -270,7 +314,8 @@
<td>@otroTrabajo.TipoConvenio</td> <td>@otroTrabajo.TipoConvenio</td>
</tr> </tr>
} }
} else }
else
{ {
<tr> <tr>
<td colspan="3" class="text-center">No hay registros</td> <td colspan="3" class="text-center">No hay registros</td>
@@ -281,19 +326,19 @@
<tfoot> <tfoot>
<tr> <tr>
<td colspan="3" class="text-end fw-bold colorC TotalesTabla"> <td colspan="3" class="text-end fw-bold colorC TotalesTabla">
Total trabajadores: Total trabajadores:
<span> @objetoLicitacionUrban.ListaSolvenciaTecnica.Sum(x => x.Cantidad)</span> <span> @objetoLicitacionUrban.ListaSolvenciaTecnica.Sum(x => x.Cantidad)</span>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
</div> </div>
@* costes asociados *@ @* costes asociados *@
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;"> <div class="TituloTablaImprimir" style=" 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="TablaImprimir mb-0" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
@@ -318,9 +363,9 @@
<tr> <tr>
<td style="width:50%;">Horas Trabajo Profesional </td> <td style="width:50%;">Horas Trabajo Profesional </td>
<td class="tdAlineadoDerecha"> <td class="tdAlineadoDerecha">
<span> <span>
@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h @objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h
</span> </span>
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -348,24 +393,22 @@
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
</div>
</div> </div>
</div> </div>
@* Costes de producción *@
<div class="FooterImprimir"> <div class="FooterImprimir">
<p> <p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo @mspie1
profesional, que siempre estará supeditado a su determinación concreta por parte del autor de este estudio económico,
teniendo presente factores propios de eficiencia como la estandarización de procesos, eficiencia en el trabajo,
aprovechamiento de estudios y trabajos anteriores y mejoras en la productividad de su propio despacho profesional.
</p> </p>
<p> <p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la @mspie2
aplicación en función de los datos que posee y que el usuario ha introducido. En nigún caso tiene por qué corresponder
con la realidad ni el CACOA garantiza la veracidad de los mismos, pro lo que no es responsable de su veracidad en sí ni
sobre terceros.
</p> </p>
</div> </div>
@@ -378,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">
Plazo de presentación de la documentación: <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:
</div>
@if (objetoLicitaciones.IncrementoUrgencia > 0) @if (objetoLicitaciones.IncrementoUrgencia > 0)
{ {
<br /> <br />
@@ -33,27 +40,34 @@
</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> <tr>
<td class="colorB w4">Coste hora de producción</td> <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"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span> <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> </td>
</tr> </tr>
<tr> <tr>
<td class="colorB w4">Horas Trabajo profesional</td> <td class="colorB w4">Coste hora de producción</td>
<td class="text-end"> <td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span>
@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> </td>
</tr> </tr>
@@ -64,8 +78,16 @@
<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,76 +7,99 @@
@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>
<hr /> <hr />
<EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder" > <EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder">
<DataAnnotationsValidator></DataAnnotationsValidator> <DataAnnotationsValidator></DataAnnotationsValidator>
<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>
<ValidationMessage For="() => login.password" />
</div>
<div class="form-group d-flex">
@* <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>
</div>
<div class="form-group">
<small class="form-text text-muted">Si es la primera vez que utiliza la herramienta, <a href="NuevoAcceso" class="mt-2">cree una nueva clave de acceso</a></small>
</div> </div>
<ValidationMessage For="() => login.password" />
</div>
<div class="form-check" style="gap:10px;">
<input type="checkbox" class="form-check-input" id="Recuerdame" />
<label class="form-check-label" for="Recuerdame">Recordarme</label>
</div>
<div class="form-group">
<small class="form-text text-muted">Si es la primera vez que utiliza la herramienta, <a href="NuevoAcceso" class="mt-2">cree una nueva clave de acceso</a></small>
</div>
<div class="form-group"> <div class="form-group">
<p class="form-text text-muted" style="color:red !important">@mensajeError</p> <p class="form-text text-muted" style="color:red !important">@mensajeError</p>
</div> </div>
<button type="submit" class="btnBlue"> Acceder </button> <button type="submit" class="btnBlue"> Acceder </button>
</EditForm> </EditForm>
</div>
</div> </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

@@ -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

@@ -1,11 +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 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
@@ -155,6 +162,7 @@ namespace HerramientaCASA
} }
} }
public static void crearFactorCorrecion(tsHerramientasCACOA bd, factorescorreccion factorCorrecc) public static void crearFactorCorrecion(tsHerramientasCACOA bd, factorescorreccion factorCorrecc)
{ {
try try
@@ -198,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)
//{ //{
@@ -622,5 +648,844 @@ namespace HerramientaCASA
__builder.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;
@@ -798,7 +830,7 @@ div.content {
.TablaImprimir table { .TablaImprimir table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
font-size: 9pt; font-size: 984pt;
} }
.TablaImprimir thead tr th { .TablaImprimir thead tr th {
@@ -830,6 +862,7 @@ div.content {
.TituloTablaImprimir { .TituloTablaImprimir {
color: #078b98 !important; color: #078b98 !important;
font-size: 11pt; font-size: 11pt;
height:25px;
} }
.NombreSimulacionImprimir{ .NombreSimulacionImprimir{
@@ -848,4 +881,23 @@ div.content {
padding-right: 20px; padding-right: 20px;
margin-top: 100px; margin-top: 100px;
font-size: 9pt; 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

@@ -16,4 +16,29 @@ window.obtenerPDFImprimir = function (paginaImprimir) {
let html = DespachoImprimir.outerHTML; 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>();
@@ -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
@@ -811,8 +823,10 @@ namespace bdHerramientaCACOA
public double HorasTPEDocumentacion { get; set; } = 0; public double HorasTPEDocumentacion { get; set; } = 0;
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

@@ -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;
@@ -159,6 +162,8 @@ namespace bdHerramientaCACOA
checkListFasesURBAN(listaFases); 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));
} }
@@ -183,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)
@@ -248,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