Compare commits

..

46 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
85 changed files with 5484 additions and 756 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"
crossorigin="anonymous"></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="_framework/blazor.web.js"></script>
</body>
</html>

View File

@@ -2,9 +2,12 @@
@using BlazorBootstrap;
@using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Web
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<head>
@@ -67,11 +70,17 @@
<NavLink class="nav-link" href="ConvenioColectivo">Convenio Colectivo</NavLink>
</li>
<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 id="liMS" class="nav-item">
<NavLink class="nav-link" href="CalculoCDCI">Calculo CD+CI</NavLink>
</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">
<NavLink class="nav-link" href="Manuales">Manuales</NavLink>
</li>
@@ -99,14 +108,55 @@
@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");
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)
if (firstRender)
{
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 Microsoft.AspNetCore.Components.Web
@inject UserState UserState
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation
@inject IJSRuntime JS
<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-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.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.5" 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">
<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>
<!-- 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>
<!-- 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>
<!-- 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="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
<script src="Scripts/popper.min.js"></script>
<script src="Scripts/all.min.js"></script>
<script src="Scripts/Util.js"></script>
<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="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.62" 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">
<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>
<!-- 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>
<!-- 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>
<!-- 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="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
<script src="Scripts/popper.min.js"></script>
<script src="Scripts/all.min.js"></script>
<script src="Scripts/Util.js"></script>
</head>
<div class="main">
<div class="main" style="position: absolute;width: 100%;top: 0px;">
<div class="">
@Body
</div>
@@ -37,4 +40,43 @@
@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 Microsoft.AspNetCore.Components.Web
@inherits LayoutComponentBase
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<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="_content/Blazor.Bootstrap/blazor.bootstrap.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 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>
@@ -31,13 +34,13 @@
<div class="page">
<main style="height: 100%;">
<header class="d-none d-md-block">
<header class="">
<div class="pa-header-t1">
<div class="pa-header-row1">
<nav class="navbar navbar-expand-lg navbar-light fixed-top bg-light navCACOA">
<div class="container-fluid">
<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>
</button>
<a class="navbar-brand" href="https://www.cacoa.es/">
@@ -48,19 +51,19 @@
@if (!MostrarExtra)
{
<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>
</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>
</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>
</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>
</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>
</li>
@* <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>
</div>
}
</div>
<div class="ml-auto">
<ul class="navbar-nav mr-auto ulMenu">
@@ -95,20 +99,68 @@
</div>
</main>
</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 {
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");
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)
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);
}
if (userState.idUser == 0 )
{
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";
}
// 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 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 style="position:relative;margin-bottom: 15px;">
<Grid TItem="CASA.OtrosTrabajos"

View File

@@ -90,6 +90,14 @@
</div>
</Content>
</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>
</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>
</a>
</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>

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="col-md-6 mt-3" style="width:47%;">
<div style="height: 24px;margin-bottom: 10px;">
<!--style="width:47%;"-->
<div class="col-md-6 mt-3" >
<div style="margin-bottom: 10px;">
<b>Costes Asociados a los Servicios de Arquitectura</b>
</div>
<table class="tablaAlter" style="width:100%">
@@ -16,7 +17,16 @@
</td>
</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">
<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> %

View File

@@ -53,7 +53,15 @@
<div class="row">
<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="d-flex">
@@ -129,7 +137,14 @@
</div>
<div class="col-md-4" style="align-items: flex-end;">
<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 class="table-responsive">
@@ -173,8 +188,15 @@
<div class="col-md-4">
<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>
</div>
</div>
<div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead>

View File

@@ -5,7 +5,16 @@
<div class="col-md-6 row">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<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">
<div class="d-flex" style="gap:3px;">
<InputNumber TValue="double"

View File

@@ -25,7 +25,7 @@
<TrabajadorGrid objetoCASA="objetoCASA"></TrabajadorGrid>
</CascadingValue>
</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">
<table class="tablaAlter">
<tr>

View File

@@ -21,8 +21,16 @@ Height="100"
Responsive="true">
<GridColumns>
<GridColumn TItem="CASA.CosteIndirecto" HeaderText="Concepto" HeaderTextAlignment="Alignment.Center" PropertyName="Concepto" Class="colorFilasIntro">
@context.Concepto
<GridColumn TItem="CASA.CosteIndirecto" HeaderText="Concepto" HeaderTextAlignment="Alignment.Center" PropertyName="Concepto" Class="colorFilasIntro columna30Ancho">
<div class="puntoInfo">
@if (context.idPuntoInformacion != 0 && !string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
}
@context.Concepto
</div>
</GridColumn>
<GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe">
<div class="d-flex separadorMoneda">

View File

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

View File

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

View File

@@ -22,7 +22,15 @@
<GridColumns>
<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
</div>
</GridColumn>
<GridColumn TItem="CASA.CoeficientesCorrectores" HeaderText="">
<InputSelect Value="@context.idCorrecion" class="inputForm selectTabla" ValueExpression="() => context.idCorrecion" TValue="int" ValueChanged="(value) => valorFCCambiado(value,context)">
@@ -55,7 +63,14 @@
<GridColumns>
<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 TItem="CASA.CoeficientesCorrectores" HeaderText="" >
<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" />
<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 style="position:relative;margin-bottom: 15px;">

View File

@@ -1,14 +1,17 @@
<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%">
<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;">
@if (!_Parent.modificarHoras)
<td class="@estiloTabla TotalesTabla tdAlineadoDerecha" style="width: 30%; font-weight:bold;">
@if (!inputsEditables)
{
<span>
@objetoCASA.TrabajoProfesional.TotalHorasTPE.MilesYDecimales() h
@objetoCASA.TrabajoProfesional.HorasTPEEstimacion.MilesYDecimales() h
</span>
}
else
@@ -20,13 +23,13 @@
</td>
</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">
@if (!_Parent.modificarHoras)
@if (!inputsEditables)
{
<span>
@objetoCASA.TrabajoProfesional.HorasTPEDocumentacion.MilesYDecimales() h
@objetoCASA.TrabajoProfesional.HorasTPEDocumentacionEstimacion.MilesYDecimales() h
</span>
}
else
@@ -41,10 +44,10 @@
<td class="TotalesTabla">Horas TPE Dirección de obra </td>
<td class="tdAlineadoDerecha TotalesTabla">
@if (!_Parent.modificarHoras)
@if (!inputsEditables)
{
<span>
@objetoCASA.TrabajoProfesional.HorasTPEDireccion.MilesYDecimales() h
@objetoCASA.TrabajoProfesional.HorasTPEDireccionEstimacion.MilesYDecimales() h
</span>
}
else
@@ -63,9 +66,13 @@
@code {
[CascadingParameter]
public TrabajoProfesional _Parent { get; set; }
[Parameter]
public bool inputsEditables { get; set; }
[Parameter]
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>
<div class="row">
<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"
step="any"
@oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))"
@@ -51,7 +57,12 @@
</div>
<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">
@foreach (var intervencion in intervencionesAux)
{
@@ -85,7 +96,7 @@
Style="table-layout:fixed !important"
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn Class="columna20Ancho text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Superficie">
<span>

File diff suppressed because one or more lines are too long

View File

@@ -54,7 +54,14 @@
<div class="row">
<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="d-flex">
@@ -132,7 +139,13 @@
</div>
<div class="col-md-4" style="align-items: flex-end;">
<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 class="table-responsive">
@@ -174,8 +187,14 @@
<div class="col-md-4">
<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>
</div>
</div>
<div class="table-responsive">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<thead>

View File

@@ -5,7 +5,7 @@
<div class="row justify-content-center">
<div class="col-md-6 mt-3">
<div style="height: 24px;">
<div>
<b>Costes Asociados a los Servicios de Arquitectura</b>
</div>
<table class="table tablaCACOA tablaCACOA2 mb-0">
@@ -16,7 +16,15 @@
</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">
<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> %

View File

@@ -6,7 +6,15 @@
<div class="col-md-6 row">
<table class="table tablaCACOA tablaCACOA2 mb-0">
<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">
<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 *@

View File

@@ -21,8 +21,14 @@
Responsive="true">
<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
</div>
</GridColumn>
<GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe">
<div class="d-flex separadorMoneda">

View File

@@ -19,7 +19,12 @@
<BodyTemplate>
<div class="row">
<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>
<datalist id="sugerenciasGrupo">
@@ -32,7 +37,12 @@
</div>
<div class="row">
<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;">
<NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> €
</div>
@@ -40,7 +50,10 @@
<div class="col-6 formatoCampos">
<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:
</label>
<div class="d-flex" style="gap:3px;">
@@ -52,9 +65,10 @@
<div class="col-6 formatoCampos">
<label class="tituloLbl">
<Tooltip Title=@tituloInfo class="custom-tooltip" role="button">
<Icon Name="IconName.InfoCircleFill" Class="text-primary"></Icon>
</Tooltip>
@if (!string.IsNullOrEmpty(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 40).Descripcion))
{
@UtilidadesCASA.CreateTooltip(objetoURBAN.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 40).Descripcion)
}
Porcentaje producción:
</label>
<div class="d-flex" style="gap:3px;">
@@ -64,7 +78,12 @@
</div>
<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>
</div>
@@ -97,26 +116,31 @@
Responsive="true">
<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
</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>
</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
</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 %
</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
</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() €
</GridColumn>
<GridColumn Class="text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Horas Producción" PropertyName="HorasProduccion">
@context.HorasProduccion.MilesYDecimales() h
<GridColumn Class="text-end align-content-center" HeaderTextAlignment="Alignment.Center" TItem="CASA.Trabajador" HeaderText="Horas Producción" PropertyName="HorasProduccion">
<div class="d-flex flex-column">
@context.HorasProduccion.MilesYDecimales() h
<span>@UtilidadesCASA.pasarHorasASemana(context.HorasProduccion).MilesYDecimales() semanas</span>
</div>
</GridColumn>
<GridColumn TItem="CASA.Trabajador" Class="botonesTabla" HeaderText="">
<div class="btnTablasEspaciado">
@@ -131,7 +155,7 @@
</GridColumn>
</GridColumns>
</Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-50px;">
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-60px;">
<tfoot>
<tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla">
@@ -142,6 +166,7 @@
<div>
<span>Total Coste Anual: @objetoURBAN.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br />
<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>

View File

@@ -24,7 +24,7 @@
<HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN objetoURBAN="objetoURBAN"></HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfURBAN.TrabajadorGridURBAN>
</CascadingValue>
</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">
<table class="tablaAlter">
<tr>

View File

@@ -4,13 +4,13 @@
@using HerramientaCASA.Components.Pages.HerramientaURBANTabs.TrabajoProfURBAN
@using bdHerramientaCACOA.HerramientaURBAN
<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)" />
</div>
@if (modificarTabla)
{
<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">
<DocumentosURBAN objetoURBAN="objetoURBAN"></DocumentosURBAN>
</CascadingValue>
@@ -27,6 +27,8 @@
<CascadingValue Value="this">
<InstrumentosURBAN objetoURBAN="objetoURBAN"></InstrumentosURBAN>
</CascadingValue>
</div>
</div>
}
@@ -124,7 +126,7 @@ else
await InvokeAsync(StateHasChanged);
}
private async void CalcularWea()
public async void CalcularWea()
{
objetoURBAN.CalcularCostesProduccion();
}

View File

@@ -28,8 +28,13 @@
</div>
<div class="row mt-3">
<div class="col-4">
<label class="tituloLbl">Documentación Mínima:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
Data="objetoURBAN.TrabajoProfesional.DocumentacionMinima"
@@ -47,8 +52,13 @@
</GridColumns>
</Grid>
</div>
<div class="col-4">
<label class="tituloLbl">Documentación Opcional:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
Data="objetoURBAN.TrabajoProfesional.DocumentacionOpcional"
@@ -72,8 +82,13 @@
</Grid>
</div>
<div class="col-4">
<label class="tituloLbl">Datos Necesarios:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
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" />
<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 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" />
<div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div>
<p class="col-6">
<div class="mt-3 mb-3 puntoInfo">
@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)
{ *@
<InputNumber TValue="double" Value="@objetoURBAN.TrabajoProfesional.valorInstrumentos"
@@ -36,11 +41,28 @@
}
<table class="tablaAlter mt-4" style="width: 100%;">
<tr>
<td class="tdAlter TotalesTabla" style="width: 70%;">HORAS TRABAJO PROFESIONAL URBANISMO: </td>
<td class="tdAlter TotalesTabla tdAlineadoDerecha">@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</td>
<td class=" TotalesTabla" style="width: 70%;">Estimación de horas necesarias: </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>
</table>
</div>
<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">
@* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir">
<p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y
estimación de Costes de Producción resultado de la simulación.
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<div class="mt-3">
<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>
@* TABLA COSTE HORA DESPACHO PROFESIONAL *@
<div class="col-8 mx-auto" style="align-items: flex-end; margin-bottom:30px;">
<div class="TituloTablaImprimir" style="height: 49px;">
<b>Coste hora Despacho Profesional</b>
<div class="TituloTablaImprimir">
<b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
@@ -63,10 +63,10 @@
<div class="col-8 mx-auto">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="TituloTablaImprimir">
<b>Coste hora Externalización</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -102,10 +102,10 @@
@* TABLA USOS/TIPOLOGIAS *@
<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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
@@ -117,7 +117,7 @@
</tr>
</thead>
<tbody>
@if (objetoCASA.TrabajoProfesional.Usos.Count != 0)
@if (totalUsos != 0)
{
@foreach (var uso in objetoCASA.TrabajoProfesional.Usos)
{
@@ -149,9 +149,9 @@
</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="TituloTablaImprimir" style="height: 49px;">
<div class="TituloTablaImprimir">
<b>Trabajo profesional</b>
</div>
@@ -208,15 +208,20 @@
</div>
</div>
<div class="col-12 mx-auto mb-5">
<div class="col-12 mx-auto" >
@* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@
<div class="col-8 mx-auto mb-4">
<div class="TituloTablaImprimir" style="height: 49px;">
<b>Costes Asociados a los Servicios de Arquitectura</b>
<div class="col-8 mx-auto" style=" margin-top:70px;">
<div class="TituloTablaImprimir">
</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;">
<tr>
<td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td>
@@ -251,10 +256,10 @@
{
<div class="col-8 mx-auto">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="TituloTablaImprimir" >
<b>Otros trabajos incluidos en el Encargo</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
@@ -304,16 +309,10 @@
<div class="FooterImprimir">
<p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo
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.
@mspie1
</p>
<p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la
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.
@mspie2
</p>
</div>
@@ -326,11 +325,32 @@
[Parameter]
public bdHerramientaCACOA.CASA objetoCASA { get; set; } = new bdHerramientaCACOA.CASA();
public int totalUsos = 0;
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()
{
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()
{

View File

@@ -1,27 +1,29 @@
@using System.Globalization
@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*@
<div class="col-12 mx-auto mb-5">
@* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir">
<p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y
estimación de Costes de Producción resultado de la simulación.
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<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>
@* COSTE HORA DE LOS TRABAJOS *@
<div class="col-8 mx-auto" style="align-items: flex-end;">
<div class="TituloTablaImprimir" style="height: 49px;">
<b>Coste hora Despacho Profesional</b>
<div class="TituloTablaImprimir">
<b>Coste hora de los trabajos realizados por el despacho profesional</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
@@ -59,12 +61,13 @@
</div>
</div>
@* COSTE HORA EXTERNALIZACION *@
<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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -96,9 +99,11 @@
</div>
@* TRABAJAO PROFESIONAL *@
<div class="col-12 mx-auto mb-5">
<div class="col-12 d-flex justify-content-center" style="gap:20px;">
<div class="formatoCampos pt-2" style="font-size:9pt;">
<div class="@separacionTabla">
<div class="col-8 mx-auto" style="margin-top:50px;">
<div class="table-responsive espacioTablas">
@* <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Tipo de Documento:</label>
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{
@@ -119,16 +124,53 @@
{
<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>
@* 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 *@
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;">
<div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Documentación Mínima:</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -158,10 +200,13 @@
@* 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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -209,10 +254,10 @@
</div>
@* TABLA DE DATOS NECESARIOS *@
<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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -245,10 +290,10 @@
@* TABLA FASES *@
<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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -299,7 +344,10 @@
@* INNOVACIÓN INSTRUMENTOS*@
<div class="col-11 mx-auto mb-5">
<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">
<label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label>
</p>
@@ -324,7 +372,7 @@
</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>
</div>
</div>
@@ -333,11 +381,11 @@
</div>
@* 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="col-9 mb-5 ">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="col-9 mb-5 mb-0" style="width:100%;">
<div class="TituloTablaImprimir" >
<b>Trabajo profesional</b>
</div>
@@ -384,7 +432,7 @@
@* COSTE DE PRODUCCIÓN *@
<div class="col-12 mx-auto mb-5">
<div class="col-8 mx-auto">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="TituloTablaImprimir" >
<b>Costes Asociados a los Servicios de Arquitectura</b>
</div>
<table class="TablaImprimir mb-0" style="width:100%;">
@@ -425,16 +473,10 @@
<div class="FooterImprimir">
<p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo
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.
@mspie1
</p>
<p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la
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.
@mspie2
</p>
</div>
@@ -447,10 +489,28 @@
public URBAN objetoURBAN { get; set; } = new URBAN();
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()
{
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()
{

View File

@@ -1,26 +1,27 @@

<div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center">
<div class="col-12 mx-auto mb-5">
<div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center pagePrincipal">
<div class="col-12 mx-auto">
@* 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>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y
estimación de Costes de Producción resultado de la simulación.
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<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>
@* TABLA USOS TIPOLOGIAS *@
<div class="col-11 mx-auto mb-5" style="align-items: flex-end;">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="col-11 mx-auto mb-4" style="align-items: flex-end;">
<div class="TituloTablaImprimir">
<b>Usos/Tipologías</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
@@ -54,7 +55,7 @@
<tfoot>
<tr>
<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>
</div>
</td>
@@ -66,13 +67,13 @@
</div>
@* TABLA FASES *@
<div class="col-8 mx-auto" style="align-items: flex-end;">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="TituloTablaImprimir" >
<b>Fases</b>
</div>
<div class="table-responsive">
<table class="TablaImprimir mb-0" style="width:100%;">
<table class="TablaImprimir mb-0 espacioTablas" style="width:90%;">
<thead>
<tr>
<th class="text-start" >Fases</th>
@@ -85,8 +86,8 @@
{
<tr>
<td>@fase.Denominacion</td>
<td class="text-end">
<div>
<td >
<div class="centrarChecksImprimir text-end">
<span style="margin-right:5px;">@fase.Porcentaje</span>
@if (fase.Seleccionado)
{
@@ -139,13 +140,13 @@
</div>
@* TABLA COSTES DE PRODUCCION *@
<div class="col-8 mx-auto" style="align-items: flex-end; margin-top:200px;">
<div class="TituloTablaImprimir" style="height: 49px;">
<div class="col-8 mx-auto" style="align-items: flex-end; margin-top:35px;">
<div class="TituloTablaImprimir" >
<b>Costes de producción</b>
</div>
<div class="table-responsive">
<table class="TablaImprimir mb-0">
<table class="TablaImprimir mb-0 espacioTablas">
<thead>
<tr>
<th class="colorB fw-bold" style="width:60%">Concepto</th>
@@ -197,18 +198,13 @@
</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>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo
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.
@mspie1
</p>
<p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la
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.
@mspie2
</p>
</div>
</div>
@@ -223,9 +219,22 @@
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()
{
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()
{

View File

@@ -1,24 +1,26 @@
@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 *@
<div class="col-12 mx-auto mb-5">
<div class="col-12 mx-auto">
@* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir">
<p>
Documento impreso del módulo de Servicios de Arquitectura Edificación con los datos y
estimación de Costes de Producción resultado de la simulación.
@msTextoEncabezado
</p>
<div class="d-flex flex-column mt-3">
<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 class="col-8 mx-auto" style="margin-top:50px;">
<div class="col-12 d-flex justify-content-center" style="gap:20px;">
<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>
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
@@ -39,16 +41,53 @@
{
<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>
@* TABLAS DE DATOS MINIMOS Y OPCIONALES *@
<div class="col-11 mx-auto">
@* 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>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas" style="@espacioTabla">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
@@ -64,7 +103,8 @@
<td class="colorB w4">@item.Descripcion</td>
</tr>
}
} else
}
else
{
<tr><td class="text-center">No hay registros</td></tr>
}
@@ -76,20 +116,23 @@
@* 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>
</div>
<div class="table-responsive">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th class="colorB fw-bold">Descripción</th>
<th class="colorB fw-bold">Añadida</th>
</tr>
</thead>
<tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0)
{
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th class="colorB fw-bold">Descripción</th>
<th class="colorB fw-bold">Añadida</th>
</tr>
</thead>
<tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional.Count != 0)
{
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional)
{
<tr>
@@ -118,96 +161,96 @@
<tr><td class="text-center" colspan="2">No hay registros</td></tr>
}
</tbody>
</table>
</div>
</table>
</div>
</div>
@* DATOS NECESARIOS *@
<div class="col-8 mx-auto" >
<div class="col-11 mx-auto">
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;">
<b>Datos Necesarios:</b>
</div>
<div class="table-responsive">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th style="width:70%;" class="colorB fw-bold">Descripción</th>
<th class="colorB fw-bold">Valor</th>
</tr>
</thead>
<tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.Count != 0)
{
@* DATOS NECESARIOS *@
<div class="col-12 mx-auto">
<div class="col-11 mx-auto">
<div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Datos Necesarios:</b>
</div>
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
<tr>
<th style="width:70%;" class="colorB fw-bold">Descripción</th>
<th class="colorB fw-bold">Valor</th>
</tr>
</thead>
<tbody>
@if (objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.Count != 0)
{
@foreach (var item in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios)
{
<tr>
<td class="colorB w4">@item.Descripcion</td>
<td class="colorB w4 text-end">@item.ValorNecesario</td>
</tr>
}
}
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)
}
else
{
<tr>
<td class="colorB w4">@item.Denominacion</td>
<td class="colorB w4 text-end">@item.Porcentaje %</td>
</tr>
<tr><td class="text-center" colspan="2">No hay registros</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>
</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*@
<div class="col-11 mx-auto mb-5">
<div class="col-11 mx-auto" style="margin-top:150px;">
<div>
<div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div>
<p style="font-size:9pt;" class="col-6">
@@ -240,16 +283,17 @@
</div>
</div>
</div>
@* Costes de producción *@
<div class="col-8 mx-auto mb-5">
@* Solvencia tecnica *@
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;">
<div class="col-8 mx-auto mt-4">
@* Solvencia tecnica *@
<div class="TituloTablaImprimir" style="margin-top:50px;">
</div>
<div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Solvencia técnica:</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
@@ -260,7 +304,7 @@
</tr>
</thead>
<tbody>
@if (objetoLicitacionUrban.ListaSolvenciaTecnica.Count>0)
@if (objetoLicitacionUrban.ListaSolvenciaTecnica.Count > 0)
{
@foreach (var otroTrabajo in objetoLicitacionUrban.ListaSolvenciaTecnica)
{
@@ -270,7 +314,8 @@
<td>@otroTrabajo.TipoConvenio</td>
</tr>
}
} else
}
else
{
<tr>
<td colspan="3" class="text-center">No hay registros</td>
@@ -281,19 +326,19 @@
<tfoot>
<tr>
<td colspan="3" class="text-end fw-bold colorC TotalesTabla">
Total trabajadores:
<span> @objetoLicitacionUrban.ListaSolvenciaTecnica.Sum(x => x.Cantidad)</span>
Total trabajadores:
<span> @objetoLicitacionUrban.ListaSolvenciaTecnica.Sum(x => x.Cantidad)</span>
</td>
</tr>
</tfoot>
</table>
</div>
@* costes asociados *@
<div class="TituloTablaImprimir" style="height: 49px; margin-top:50px;">
</div>
@* costes asociados *@
<div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Costes Asociados a los Servicios de Arquitectura:</b>
</div>
<div class="table-responsive">
<div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0" style="width:100%;">
<thead>
@@ -318,9 +363,9 @@
<tr>
<td style="width:50%;">Horas Trabajo Profesional </td>
<td class="tdAlineadoDerecha">
<span>
@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h
</span>
<span>
@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h
</span>
</td>
</tr>
<tr>
@@ -348,24 +393,22 @@
</tr>
</tfoot>
</table>
</div>
</div>
</div>
@* Costes de producción *@
<div class="FooterImprimir">
<p>
Los resultados de esta simulación son una mera estimación del tiempo necesario en la realización del trabajo
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.
@mspie1
</p>
<p>
El presente documento no tiene validez contractual. Los datos obtenidos son meramente estimativos y generados por la
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.
@mspie2
</p>
</div>
@@ -378,9 +421,41 @@
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()
{
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()
{

View File

@@ -26,8 +26,14 @@
</div>
</div>
<div class="row mt-3">
<div class="col-4">
<label class="tituloLbl">Documentación Mínima:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionMinima"
@@ -45,8 +51,13 @@
</GridColumns>
</Grid>
</div>
<div class="col-4">
<label class="tituloLbl">Documentación Opcional:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
Data="objetoLicitacionUrban.TrabajoProfesional.DocumentacionOpcional"
@@ -70,8 +81,13 @@
</Grid>
</div>
<div class="col-4">
<label class="tituloLbl">Datos Necesarios:</label>
<div class="col-md-4">
<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"
Class="tablaCACOA table"
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" />
<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 style="position:relative;margin-bottom: 35px;">

View File

@@ -10,8 +10,15 @@
<div style="height:100%">
<div>
<div class="mt-3 mb-3"><b>Innovacion de los instrumentos</b></div>
<p class="col-6">
<div class="mt-3 mb-3 puntoInfo">
@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)
{ *@
<InputNumber TValue="double" Value="@objetoLicitacionUrban.TrabajoProfesional.valorInstrumentos"

View File

@@ -65,7 +65,12 @@
<div>
<div style="position:relative;margin-bottom: 45px;">
<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>
<Grid TItem="LicitacionesURBAN.SolvenciaTecnica"
Class="tablaCACOA table"

File diff suppressed because one or more lines are too long

View File

@@ -16,7 +16,14 @@
<tbody>
<tr>
<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)
{
<br />
@@ -33,27 +40,34 @@
</div>
</td>
</tr>
@if (objetoLicitaciones.EsPorUsos == true)
{
<tr>
<td class="colorB w4">Estimación de horas necesarias</td>
<td class="text-end">
<span>
@objetoLicitaciones.horasProduccionEstimacion.MilesYDecimales() h
</span>
</td>
</tr>
}
<tr>
<td class="colorB w4">Coste hora de producción</td>
<td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span>
<td class="colorB w4">Horas del trabajo profesional Edificación <span style="margin-left:60px;">@UtilidadesCASA.pasarHorasASemana(objetoLicitaciones.horasProduccion).MilesYDecimales() semanas</span></td>
<td class="text-end">
<div class="d-flex" style="gap: 3px;">
<InputNumber TValue="double" @onblur="calcularHoras" @bind-Value="@objetoLicitaciones.horasProduccion" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
</td>
</tr>
<tr>
<td class="colorB w4">Horas Trabajo profesional</td>
<td class="text-end">
@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 class="colorB w4">Coste hora de producción</td>
<td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() €/h</span>
</td>
</tr>
@@ -64,8 +78,16 @@
<tr>
<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.
<span class="fw-normal" style="font-size:10px;">(40/19 Junta Consultiva de Contratación Pública del Estado)</span>
</div>
</td>
<td class="TotalesTabla text-end" style="align-content:center;">
<div class="d-flex" style="justify-content: end; gap:3px;">
@@ -129,4 +151,18 @@
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><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 class="col-md-12">

View File

@@ -22,7 +22,13 @@
<BodyTemplate>
<div class="row">
<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"
step="any"
@oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))"
@@ -53,7 +59,12 @@
</div>
<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">
@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 NavigationManager Navigation
@inject UserState UserState
@inject IJSRuntime JS
<div class="fondo">
<div class="back">
<div class="div-center">
<div class="content">
<img src="Content/Imagenes/CACOA-6.png" height="49" />
<h4 class="mt-2">Acceso a la Herramienta</h4>
<hr />
<EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder" >
<DataAnnotationsValidator></DataAnnotationsValidator>
<div class="back">
<div class="div-center arealogin">
<div class="content">
<img src="Content/Imagenes/CACOA-6.png" height="49" />
<h4 class="mt-2">Acceso a la Herramienta</h4>
<hr />
<EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder">
<DataAnnotationsValidator></DataAnnotationsValidator>
<div class="form-group">
<label for="exampleInputEmail1">Clave de acceso</label>
<input type="number" class="form-control" @bind-value="@login.codigo" placeholder="0000000000000" />
<ValidationMessage For="() => login.codigo" />
</div>
<div class="form-group">
<label>Password</label>
<div class="input-group">
<PasswordInput Class="form-control" @bind-Value="@login.password" />
<div class="form-group">
<label for="exampleInputEmail1">Clave de acceso</label>
<input type="number" class="form-control" @bind-value="@login.codigo" placeholder="0000000000000" id="clave" />
<ValidationMessage For="() => login.codigo" />
</div>
<div class="form-group">
<label>Password</label>
<div class="input-group">
<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>
<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">
<p class="form-text text-muted" style="color:red !important">@mensajeError</p>
</div>
<button type="submit" class="btnBlue"> Acceder </button>
</EditForm>
<div class="form-group">
<p class="form-text text-muted" style="color:red !important">@mensajeError</p>
</div>
<button type="submit" class="btnBlue"> Acceder </button>
</EditForm>
</div>
</div>
</div>
</div>
</div>
@code {
public tsHerramientasCACOA bd;
private LoginVM login = new LoginVM();
private string mensajeError = "";
private bool recuerda = false;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
await ProtectedLocalStore.SetAsync("idUsuario", 0);
await ProtectedLocalStore.SetAsync("EsAdmin", false);
// Limpiar almacenamiento local o sesión si se está utilizando
// if (HttpContextAccessor?.HttpContext?.Session != null)
// {
// HttpContextAccessor.HttpContext.Session.Clear();
// }
}
if (HttpContextAccessor?.HttpContext?.Session != null)
{
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()
{
//if (login.codigo == -534610 && login.password == "sRg1406.")
if (login.codigo == -1 && login.password == "-1")
if (login.codigo == -534610 && login.password == "sRg1406.")
// if (login.codigo == -1 && login.password == "-1")
{
await ProtectedLocalStore.SetAsync("idUsuario", -1);
await ProtectedLocalStore.SetAsync("EsAdmin", true);
UserState.idUser = -1;
UserState.PuedeAcceder =true;
Navigation.NavigateTo("/PanelControlConf", forceLoad: true);
}
else
@@ -93,6 +116,21 @@
await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario);
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);
}

View File

@@ -13,9 +13,25 @@
<ImplicitUsings>enable</ImplicitUsings>
</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>
<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>
@@ -27,4 +43,10 @@
<ProjectReference Include="..\bdHerramientaCACOA\bdHerramientaCACOA.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\Content\Site.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

View File

@@ -5,6 +5,7 @@
private readonly object _lock = new object();
private int _idUser;
private bool _esAdmin;
private bool _puedeAcceder;
public int idUser
{
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 DinkToPdf;
using DinkToPdf.Contracts;
using HerramientaCASA;
using HerramientaCASA.Components;
using HerramientaCASA.Model;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using System.Globalization;
using System.Runtime.InteropServices;
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.
builder.Services.AddRazorComponents()
.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.db;
using bdHerramientaCACOA.dbcontext;
using bdHerramientaCACOA.HerramientaURBAN;
using BlazorBootstrap;
using ClosedXML.Excel;
using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle;
using HerramientaCASA.Components.Pages;
using HerramientaCASA.Components.Pages.HerramientaCASATabs;
using HerramientaCASA.Model;
using HerramientaCASA.ViewModel;
using IbanNet;
using Microsoft.AspNetCore.Components;
using System.Text;
using static bdHerramientaCACOA.CASA;
using static HerramientaCASA.Components.Pages.ConfiguracionPages.ConvenioColectivo;
namespace HerramientaCASA
@@ -155,6 +162,7 @@ namespace HerramientaCASA
}
}
public static void crearFactorCorrecion(tsHerramientasCACOA bd, factorescorreccion factorCorrecc)
{
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)
//{
@@ -622,5 +648,844 @@ namespace HerramientaCASA
__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": {
//"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-;",
"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;
}
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
color: white;
text-align: center;
}
.logoCacoa {
border-radius: 10px !important;
}
@@ -484,7 +493,30 @@ li.nav-item.active {
font-weight: bold;
}
.guardarNombre {
width:100%;
display:flex;
}
.impriManual {
}
@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: 6px;
right: 52px;
@@ -597,8 +629,10 @@ button.btn.btn-link.dxbs-button {
}
.div-center {
width: 400px;
height: 400px;
max-width: 400px;
max-height: 400px;
width:100%;
height:100%;
background-color: #fff;
position: absolute;
left: 0;
@@ -606,8 +640,6 @@ button.btn.btn-link.dxbs-button {
top: 0;
bottom: 0;
margin: auto;
max-width: 100%;
max-height: 100%;
overflow: auto;
padding: 1em 2em;
border-bottom: 2px solid #ccc;
@@ -798,7 +830,7 @@ div.content {
.TablaImprimir table {
border-collapse: collapse;
width: 100%;
font-size: 9pt;
font-size: 984pt;
}
.TablaImprimir thead tr th {
@@ -830,6 +862,7 @@ div.content {
.TituloTablaImprimir {
color: #078b98 !important;
font-size: 11pt;
height:25px;
}
.NombreSimulacionImprimir{
@@ -848,4 +881,23 @@ div.content {
padding-right: 20px;
margin-top: 100px;
font-size: 9pt;
}
.puntoInfo{
display:flex;
gap:5px;
}
.pagePrincipal{
margin:30px;
}
.espacioTablas {
margin: 20px;
}
.centrarChecksImprimir {
align-items: center;
justify-content: flex-end;
display: flex;
}

File diff suppressed because one or more lines are too long

View File

@@ -16,4 +16,29 @@ window.obtenerPDFImprimir = function (paginaImprimir) {
let html = DespachoImprimir.outerHTML;
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 class EnumeradosCASA {
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> GruposTipologias { 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.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1;
ci.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
DespachoProfesional.CostesIndirectos.Add(ci);
}
}
@@ -105,6 +107,9 @@ namespace bdHerramientaCACOA
checkListCostIndirectos(listaCosteIndirectos);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x=>x.idTipoHerramienta == 31).ToList();
Enumerados.ListaFactoresCorrecion = ListaFactoresCorreccionCASA(bd.factorescorreccion.ToList());
//Cargamos los coeficientes correctores
//Complejidad
@@ -118,6 +123,7 @@ namespace bdHerramientaCACOA
fc.idTipoFactor = enu.idEnumeracion;
fc.Nombre = enu.ValorAlfabetico1;
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);
}
@@ -134,7 +140,7 @@ namespace bdHerramientaCACOA
fc.idTipoFactor = enu.idEnumeracion;
fc.Nombre = enu.ValorAlfabetico1;
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);
}
}
@@ -450,6 +456,11 @@ namespace bdHerramientaCACOA
double totalHorasTPEDireccion = CalcularHorasTPEDireccion();
TrabajoProfesional.HorasTPEDireccion = double.IsNaN(totalHorasTPEDireccion) ? 0 : totalHorasTPEDireccion;
TrabajoProfesional.TotalHorasTPE = totalHorasTPEDocu + totalHorasTPEDireccion;
TrabajoProfesional.HorasTPEEstimacion = TrabajoProfesional.HorasTPE;
TrabajoProfesional.HorasTPEDocumentacionEstimacion = TrabajoProfesional.HorasTPEDocumentacion;
TrabajoProfesional.HorasTPEDireccionEstimacion = TrabajoProfesional.HorasTPEDireccion;
CalcularCostesProduccion();
}
public void CalcularHorasTPEManual(double horasDocu, double horasDireccion)
@@ -757,6 +768,7 @@ namespace bdHerramientaCACOA
public double importe { get; set; } = 0;
public int idPeriodicidad { get; set; } = 0;
public double valorPeriodo { get; set; } = 0;
public int idPuntoInformacion { get; set; } = 0;
public double coste { get; set; } = 0;
}
public class CostesPersonal
@@ -811,8 +823,10 @@ namespace bdHerramientaCACOA
public double HorasTPEDocumentacion { 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
{
@@ -831,6 +845,7 @@ namespace bdHerramientaCACOA
public string Nombre { get; set; } = "";
public int idCorrecion { get; set; } = 0;
public double coeficiente { get; set; } = 0;
public int idPuntoInformacion { get; set; } = 0;
}
public class FasesTrabajo
{
@@ -907,6 +922,7 @@ namespace bdHerramientaCACOA
Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2,
idPuntoInformacion = string.IsNullOrEmpty( enu.ValorAlfabetico4) ? null : int.Parse(enu.ValorAlfabetico4),
ValorNumerico1 = enu.ValorNumerico1
};
}
@@ -923,7 +939,7 @@ namespace bdHerramientaCACOA
public string? ValorAlfabetico1 { get; set; }
public string? ValorAlfabetico2 { get; set; }
public int? idPuntoInformacion { get; set; }
public double? ValorNumerico1 { get; set; }
public bool Seleccionado { get; set; } = false!;

View File

@@ -14,6 +14,8 @@ namespace bdHerramientaCACOA.HerramientaURBAN
public partial class URBAN {
public class EnumeradosURBAN
{
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>();
public List<enumeracionesCASA> ListaInstrumentos { 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.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1;
ci.idPuntoInformacion = string.IsNullOrEmpty(enu.ValorAlfabetico4) ? 0 : int.Parse(enu.ValorAlfabetico4);
DespachoProfesional.CostesIndirectos.Add(ci);
}
}
checkListCostIndirectos(listaCosteIndirectos);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 34 || x.idTipoHerramienta == 31).ToList();
//Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
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);
CostesProduccion.HorasTrabajoProfesional = (TrabajoProfesional.horasTrabProfesional * (totalEncargo / 100)).DosDecimales();
}
/*
CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales();
if (CostesProduccion.HorasEnPlazo >= CostesProduccion.HorasTrabajoProfesional)
{
CostesProduccion.NumHorasMinimoExt = 0;
@@ -98,8 +97,15 @@ namespace bdHerramientaCACOA.HerramientaURBAN
else
{
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)

View File

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

View File

@@ -25,6 +25,8 @@ namespace bdHerramientaCACOA
public string Descripcion { get; set; } = "Licitación Edificación " + DateTime.Now;
public class EnumeradosLICITACIONES
{
public List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Intervenciones { 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 double CostesProduccionTrabProf { get; set; } = 0;
double _beneficio = 19;
public double Beneficio
{
get
{
return _beneficio;
}
//set
//{
// _beneficio = value;
// CalcularHorasSuperficie();
//}
}
public double Beneficio { get; set; } = 19;
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.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;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
@@ -109,6 +101,10 @@ namespace bdHerramientaCACOA
checkListCostIndirectos(listaFases);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 32).ToList();
//Cargamos la lista de otros costes de trabajo
var grupoOtrosTrab = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "OTROSTRAB");
Enumerados.ListaOtrosTrabajos = ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoOtrosTrab.idGrupoEnumeracion).ToList());
@@ -195,6 +191,7 @@ namespace bdHerramientaCACOA
public double coefIntervencionTotal { get; set; } = 0;
public double fasesEncargadas { get; set; } = 0;
public double horasProduccion { get; set; } = 0;
public double horasProduccionEstimacion { get; set; } = 0;
public double horasPorcentaje { get; set; } = 0;
public double horasDocumentacion { 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
horasPorcentaje = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x => x.Porcentaje);
horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (horasPorcentaje / 100), 2, MidpointRounding.AwayFromZero);
horasProduccionEstimacion = horasProduccion;
}
else {
@@ -333,7 +332,7 @@ namespace bdHerramientaCACOA
CostesProduccionTrabProf = Math.Round(CostesProduccionTrabProf, 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 List<puntosinformacion> PuntosInformacion { get; set; } = new List<puntosinformacion>();
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
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.HorasProduccionMedia = (int) bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").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;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
@@ -159,6 +162,8 @@ namespace bdHerramientaCACOA
checkListFasesURBAN(listaFases);
Enumerados.PuntosInformacion = bd.puntosinformacion.Where(x => x.idTipoHerramienta == 35).ToList();
Enumerados.FasesTrabajo = JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional));
}
@@ -183,8 +188,8 @@ namespace bdHerramientaCACOA
CosteHP = ((CD+CI)*(1+CV)).DosDecimales();
CostesProduccionTrabProf = (TrabajoProfesional.horasTrabProfesional*CosteHP).DosDecimales();
Beneficio = 0.19;
PrecioDelTrabajo = (CostesProduccionTrabProf*(1+Beneficio)).DosDecimales();
//Beneficio = 0.19;
PrecioDelTrabajo = (CostesProduccionTrabProf*(1+(Beneficio/100))).DosDecimales();
}
private double ObtenerCDTabla(double horas)
@@ -248,6 +253,7 @@ namespace bdHerramientaCACOA
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
TrabajoProfesional.horasTrabProfesionalEstimacion = TrabajoProfesional.horasTrabProfesional;
}
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 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 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<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<ficheros> ficheros { get; set; }
@@ -36,6 +42,8 @@ public partial class herramientascacoaContext : DbContext
public virtual DbSet<provincias> provincias { get; set; }
public virtual DbSet<puntosinformacion> puntosinformacion { get; set; }
public virtual DbSet<simulaciones> simulaciones { 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.ValorAlfabetico3).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.HasOne(d => d.idGrupoEnumeracionNavigation).WithMany(p => p.enumeraciones)
@@ -154,6 +162,61 @@ public partial class herramientascacoaContext : DbContext
.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 =>
{
entity.HasKey(e => e.idFactorCorreccion).HasName("PRIMARY");
@@ -232,6 +295,16 @@ public partial class herramientascacoaContext : DbContext
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 =>
{
entity.HasKey(e => e.idSimulacion).HasName("PRIMARY");

View File

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