Compare commits

...

4 Commits

Author SHA1 Message Date
44098efd88 Fusion de cosas en licitaciones 2025-07-30 09:14:11 +02:00
d180046348 cambios pre vacaciones perea pa subir 2025-07-30 08:47:10 +02:00
d75634b07e Merge branch 'master' of https://gitea.tecnosis.net/CACOA/HerramientaCASA 2025-07-28 13:24:07 +02:00
811b8fc0c0 pa obtener 2025-07-28 13:23:27 +02:00
9 changed files with 290 additions and 102 deletions

View File

@@ -53,7 +53,7 @@
<tfoot>
<tr>
<td colspan="2" class="text-end colorC fw-bold w4 TotalesTabla">
Total horas del trabajo profesional: <span>@objetoURBAN.CostesProduccion.HorasTrabajoProfesional.MilesYDecimales() h </span>
Total horas del trabajo profesional: <span>@((objetoURBAN.CostesProduccion.HorasEnPlazo + objetoURBAN.CostesProduccion.NumHorasMinimoExt).MilesYDecimales()) h </span>
</td>
</tr>
</tfoot>

View File

@@ -3,7 +3,12 @@
@inject NavigationManager Navigation
@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 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">
<CascadingValue Value="this">
@@ -24,13 +29,35 @@
</CascadingValue>
</div>
</div>
}
else
{
<div class="row p-0 m-0">
<div class="col-md-4">
<CascadingValue Value="this">
<FasesURBAN objetoURBAN="objetoURBAN"></FasesURBAN>
</CascadingValue>
<table class="tablaAlter mt-4" style="width: 100%;">
<tr>
<td class="tdAlter" style="width:50%;">HORAS TRABAJO PROFESIONAL URBANISMO: </td>
<td class="tdAlineadoDerecha">
<div class=" d-flex">
<InputNumber TValue="double" @onblur="CalcularWea" @bind-Value="@objetoURBAN.TrabajoProfesional.horasTrabProfesional" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
</td>
</tr>
</table>
</div>
</div>
}
@code {
[Parameter]
public URBAN objetoURBAN { get; set; } = new URBAN();
public tsHerramientasCACOA bd;
public bool modificarTabla = true;
public bool modificarHoras = false;
protected override async Task OnInitializedAsync()
{
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
@@ -39,4 +66,40 @@
{
this.StateHasChanged();
}
private async void modificarTablaChanged(bool res)
{
// objetoCASA.TrabajoProfesional.HorasTPE = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDocumentacion = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDireccion = 0;
// if (objetoCASA.TrabajoProfesional.Usos.ToList().Count() != 0)
// {
// objetoCASA.CalcularHorasTPE();
// }
modificarTabla = res;
modificarHoras = !res;
objetoURBAN.TrabajoProfesional.EsPorUsos = true;
//objetoLicitaciones.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
private async void modificarHorasChanged(bool res)
{
// horasTPEOriginal = objetoCASA.TrabajoProfesional.HorasTPE;
// ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion;
// ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion;
modificarHoras = res;
modificarTabla = !res;
objetoURBAN.TrabajoProfesional.EsPorUsos = false;
//objetoLicitaciones.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
private async void CalcularWea()
{
objetoURBAN.CalcularCostesProduccion();
}
}

View File

@@ -58,7 +58,7 @@
<div class="row">
<div class="col-md-6 mt-3 mb-2">
<div><b>Convenio Colectivo:</b></div>
<InputSelect @bind-Value="@objetoLicitaciones.idProvincia" class="inputForm" @oninput="e => CalcularTabla(e.Value.ToString())">
<InputSelect @bind-Value="@objetoLicitaciones.idProvincia" class="inputForm" @oninput="e => CalcularTabla(e.Value.ToString())" style="width: 225px;">
<option value="">Estatal</option>
<option value="04">Almería</option>
<option value="11">Cádiz</option>
@@ -69,15 +69,21 @@
<option value="41">Sevilla</option>
</InputSelect>
</div>
<div class="col-md-12 d-flex mt-3" style="gap: 40px;">
<RadioInput style="margin-right: 10px;" Label="Cálculo por superficie y uso" 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="col-md-12 mt-3 mb-5">
<CascadingValue Value="this">
<TrabajoProfLicitacionesGrid objetoLicitaciones="objetoLicitaciones"></TrabajoProfLicitacionesGrid>
</CascadingValue>
</div>
}
</div>
<div class="row">
<div class="col-md-3">
<CascadingValue Value="this">
<FasesTrabajoLicitaciones objetoLicitaciones="objetoLicitaciones"></FasesTrabajoLicitaciones>
@@ -122,7 +128,7 @@
</table>
</div>
</div> *@
<div class="pt-5" style="margin-top:2000px;">
<div class="pt-5 d-none" style="margin-top:2000px;">
<p><b>Datos configuración para revisión de datos</b></p>
<b>superficie</b> @objetoLicitaciones.superficie;<br />
<b>Coef sup total</b> @objetoLicitaciones.coefSupTotal; (sin redondeo:@objetoLicitaciones.coefsinredondeo)<br />
@@ -143,7 +149,7 @@
<b>tasa costes var</b> @objetoLicitaciones.tasaCostesVariables;<br />
<b>coste hora prod</b> @objetoLicitaciones.costeHoraProduccion;
</div>
<div class="pt-5">
<div class="pt-5 d-none">
<b>Tabla CD+CI para visualizacion de datos, se quitara cuando se vea que los calculos son correctos</b><br />
<b>IPC Coste Indirecto:</b>@objetoLicitaciones.Variables.IPCCosteIndirecto;<br />
<Grid TItem="CosteDirectoIndirecto"
@@ -210,6 +216,9 @@
private int idUser = 0;
public bool modificarTabla = true;
public bool modificarHoras = false;
public Licitaciones()
{
}
@@ -435,6 +444,40 @@
Navigation.NavigateTo(pdfUrl, true);
}
private async void modificarTablaChanged(bool res)
{
// objetoCASA.TrabajoProfesional.HorasTPE = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDocumentacion = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDireccion = 0;
// if (objetoCASA.TrabajoProfesional.Usos.ToList().Count() != 0)
// {
// objetoCASA.CalcularHorasTPE();
// }
modificarTabla = res;
modificarHoras = !res;
objetoLicitaciones.EsPorUsos = true;
objetoLicitaciones.horasProduccion = 0;
objetoLicitaciones.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
private async void modificarHorasChanged(bool res)
{
// horasTPEOriginal = objetoCASA.TrabajoProfesional.HorasTPE;
// ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion;
// ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion;
modificarHoras = res;
modificarTabla = !res;
objetoLicitaciones.EsPorUsos = false;
objetoLicitaciones.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
}

View File

@@ -33,15 +33,28 @@
</div>
</td>
</tr>
<tr>
<td class="colorB fw-bold w4">Coste hora de producción</td>
<td class="text-end"><span> @objetoLicitaciones.costeHoraProduccion.MilesYDecimales() </span></td>
<td class="text-end"><span>@objetoLicitaciones.costeHoraProduccion.MilesYDecimales() h</span>
</td>
</tr>
<tr>
<td class="colorB fw-bold w4">Horas Trabajo profesional</td>
<td class="text-end"><span> @objetoLicitaciones.horasProduccion.MilesYDecimales() €</span></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>
</tr>
<tr>

View File

@@ -52,7 +52,7 @@
<div class="row">
<div class="col-md-6 mt-3 mb-2">
<div><b>Convenio Colectivo:</b></div>
<InputSelect @bind-Value="@objetoLicitacionUrban.idProvincia" class="inputForm" @oninput="e => CalcularTabla(e.Value.ToString())">
<InputSelect @bind-Value="@objetoLicitacionUrban.idProvincia" class="inputForm" @oninput="e => CalcularTabla(e.Value.ToString())" style="width: 225px;">
<option value="">Estatal</option>
<option value="04">Almería</option>
<option value="11">Cádiz</option>
@@ -64,17 +64,21 @@
</InputSelect>
</div>
</div>
<div class="row p-0 m-0">
<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 tiempo" Value="modificarHoras" ValueExpression="() => modificarHoras" ValueChanged="(value) => modificarHorasChanged(value)" />
</div>
@if (modificarTabla)
{
<div class="row">
<div class="col-md-12 mt-3 mb-3">
<CascadingValue Value="this">
<DocumentosLicitacion objetoLicitacionUrban="objetoLicitacionUrban"></DocumentosLicitacion>
</CascadingValue>
</div>
</div>
<div class="row p-0 m-0">
}
<div class="row">
<div class="col-md-3">
<CascadingValue Value="this">
<FasesLicitacionesUrban objetoLicitacionUrban="objetoLicitacionUrban"></FasesLicitacionesUrban>
@@ -120,7 +124,20 @@
</tr>
<tr>
<td class="tdAlter" style="width:50%;">Horas Trabajo Profesional </td>
<td class="tdAlineadoDerecha">@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</td>
<td class="tdAlineadoDerecha">
@if (objetoLicitacionUrban.EsPorUsos)
{
<span>
@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h
</span>
}
else
{
<div class="d-flex" style="gap: 3px;">
<InputNumber TValue="double" @onblur="objetoLicitacionUrban.CalcularHorasTrabajoProfesional" @bind-Value="@objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional" Min="0" class="inputForm inputTabla tdAlineadoDerecha" />h
</div>
}
</td>
</tr>
<tr>
<td class="colorB fw-bold w4">Coste de producción del Trabajo Profesional</td>
@@ -150,7 +167,7 @@
</div>
<div class="pt-5" style="margin-top:2000px;">
<div class="pt-5 d-none" style="margin-top:2000px;">
<b>Tabla CD+CI para visualizacion de datos, se quitara cuando se vea que los calculos son correctos</b><br />
<b>IPC Coste Indirecto:</b>@objetoLicitacionUrban.Variables.IPCCosteIndirecto;<br />
<Grid TItem="CosteDirectoIndirecto"
@@ -214,6 +231,9 @@
private int idUser = 0;
public bool modificarTabla = true;
public bool modificarHoras = false;
protected override async Task OnInitializedAsync()
{
try
@@ -405,5 +425,37 @@
{
await popupGuardar.HideAsync();
}
private async void modificarTablaChanged(bool res)
{
// objetoCASA.TrabajoProfesional.HorasTPE = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDocumentacion = 0;
// objetoCASA.TrabajoProfesional.HorasTPEDireccion = 0;
// if (objetoCASA.TrabajoProfesional.Usos.ToList().Count() != 0)
// {
// objetoCASA.CalcularHorasTPE();
// }
modificarTabla = res;
modificarHoras = !res;
objetoLicitacionUrban.EsPorUsos = true;
objetoLicitacionUrban.TrabajoProfesional.horasTrabProfesional = 0;
// objetoLicitacionUrban.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
private async void modificarHorasChanged(bool res)
{
// horasTPEOriginal = objetoCASA.TrabajoProfesional.HorasTPE;
// ultimaHoraDocumentacion = objetoCASA.TrabajoProfesional.HorasTPEDocumentacion;
// ultimaHoraObra = objetoCASA.TrabajoProfesional.HorasTPEDireccion;
modificarHoras = res;
modificarTabla = !res;
objetoLicitacionUrban.EsPorUsos = false;
// objetoLicitacionUrban.CalcularHorasSuperficie();
await InvokeAsync(StateHasChanged);
}
}

View File

@@ -22,6 +22,8 @@ namespace bdHerramientaCACOA.HerramientaURBAN
public double horasTrabProfesional { get; set; } = 0;
public bool EsPorUsos { get; set; } = true;
public List<DocumentacionURBAN> DocumentacionMinima { get; set; } = new List<DocumentacionURBAN>();
public List<DocumentacionURBAN> DocumentacionOpcional { get; set; } = new List<DocumentacionURBAN>();
@@ -54,6 +56,7 @@ namespace bdHerramientaCACOA.HerramientaURBAN
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
CalcularCostesProduccion();
}
public double ObtenerHoraTipoDocumento()

View File

@@ -52,7 +52,7 @@ namespace bdHerramientaCACOA
public double IncrementoUrgencia { get; set; } = 0;
public double PlazoPresentacionDocumentos { get; set; } = 0;
public bool EsPorUsos { get; set; } = true;
public double CostesProduccionTrabProf { get; set; } = 0;
double _beneficio = 19;
@@ -208,7 +208,7 @@ namespace bdHerramientaCACOA
public void CalcularHorasSuperficie() {
// calcular superficie total
superficie = Usos.Sum(x => x.superficie);
if (superficie > 0) {
if (superficie > 0 || !EsPorUsos) {
// calcular coef superficie total
coefsinredondeo = -0.1375 * Math.Log(superficie) + 2.4;
coefSupTotal = Math.Round( coefsinredondeo,2, MidpointRounding.AwayFromZero);
@@ -232,11 +232,17 @@ namespace bdHerramientaCACOA
fasesEncargadas = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x=> x.Porcentaje);
// calcular horas produccion trabajo profesional
horasProduccion = Math.Round((superficie*coefSupTotal*coefTipoTotal*coefIntervencionTotal*(fasesEncargadas/100)), 2, MidpointRounding.AwayFromZero); ;
if (EsPorUsos)
{
horasProduccion = Math.Round((superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (fasesEncargadas / 100)), 2, MidpointRounding.AwayFromZero);
// calcular horas elaboracion documentacion
horasPorcentaje = FasesTrabajo.Where(x => x.Codigo.Contains("ESTPREVIO") || x.Codigo.Contains("ANTEPROYECTO") || x.Codigo.Contains("PROYBASICO") || x.Codigo.Contains("PROYEJEC")).Sum(x => x.Porcentaje);
horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal * (horasPorcentaje / 100), 2, MidpointRounding.AwayFromZero);
}
else {
horasDocumentacion = horasProduccion;
}
// calcular plazo medio(meses) esto hay que preguntarlo
plazoMedio = 3;

View File

@@ -32,6 +32,8 @@ namespace bdHerramientaCACOA
public double Beneficio { get; set; } = 19;
public double PrecioDelTrabajo { get; set; } = 0;
public bool EsPorUsos { get; set; } = true;
private URBANTrabajoProfesional _TrabajoProfesional = new URBANTrabajoProfesional();
public URBANTrabajoProfesional TrabajoProfesional
{
@@ -219,12 +221,18 @@ namespace bdHerramientaCACOA
CalcularHorasTrabajoProfesional();
}
public void CalcularHorasTrabajoProfesional()
{
if (EsPorUsos)
{
double valorhoras = ObtenerHoraTipoDocumento();
double totalEncargo = TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
}
else {
}
CalcularLicitacion();
}
public double ObtenerHoraTipoDocumento()