Files
HerramientaCASA/HerramientaCASA/Components/Pages/LicitacionUrban/FasesLicitacionesUrban.razor
2025-07-25 12:56:07 +02:00

160 lines
5.6 KiB
Plaintext

@using BlazorBootstrap
@using System.Text.Json
@using bdHerramientaCACOA.HerramientaURBAN
@using bdHerramientaCACOA.db
<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>
<div style="position:relative;margin-bottom: 35px;">
<Grid TItem="URBAN.FasesURBAN"
Class="tablaCACOA table"
Data="listadoFases"
AllowFiltering="false"
PageSize="10"
Height="100"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<GridColumn TItem="URBAN.FasesURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Fases" PropertyName="Denominacion" Class="colorA">
@context.Denominacion
</GridColumn>
<GridColumn TItem="URBAN.FasesURBAN" HeaderText="">
<div class="d-flex">
<InputNumber Min="0" class="inputForm inputTabla tdAlineadoDerecha pe-0 me-1" Value=@context.Porcentaje TValue="double" ValueExpression="() => context.Porcentaje" ValueChanged="(value) => porcentajeCambiado(value,context)"></InputNumber> %
</div>
</GridColumn>
</GridColumns>
</Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-33px;">
<tfoot>
<tr>
<td colspan="2" class="text-end fw-bold colorC">
<div class="d-flex justify-content-between">
<div class="mt-1">
<button @onclick="@(() => restablecerValores())" class="btnBlue d-flex align-items-center"> <i class="fas fa-undo pe-1"></i> Restablecer </button>
</div>
<div style="align-self: center;">
@if (totalPorcentaje != 100)
{
<div>
Trabajo en misión parcial: <span> @totalPorcentaje %</span>
</div>
}
else
{
<div>
Total: <span> @totalPorcentaje %</span>
</div>
}
</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
@code {
[CascadingParameter]
public HerramientaCASA.Components.Pages.LicitacionesURBAN _Parent { get; set; }
[Parameter]
public bdHerramientaCACOA.LicitacionesURBAN objetoLicitacionUrban { get; set; } = new bdHerramientaCACOA.LicitacionesURBAN();
private double totalPorcentaje = 0;
public List<URBAN.FasesURBAN> listadoFases { get; set; } = new List<URBAN.FasesURBAN>();
private string tituloPopup = "";
private Modal popupGestionDatos = default!;
private Modal popupConfirmarBorrado = default!;
private CASA.FasesTrabajo itemSeleccionado = new CASA.FasesTrabajo();
List<ToastMessage> mensajes = new List<ToastMessage>();
protected override async Task OnInitializedAsync()
{
listadoFases = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.ToList();
totalPorcentaje = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
}
private async Task OnRowClick(GridRowEventArgs<CASA.FasesTrabajo> objeto)
{
itemSeleccionado = objeto.Item;
}
private async void porcentajeCambiado(double e, URBAN.FasesURBAN objeto)
{
double porcentajeTotal = calcularPorcentaje(e, objeto);
if (porcentajeTotal <= 100)
{
objeto.Porcentaje = (double)e;
objetoLicitacionUrban.ActualizarFase(objeto);
await InvokeAsync(StateHasChanged);
_Parent.RefreshState();
}
else
{
objeto.Porcentaje = 0;
objetoLicitacionUrban.ActualizarFase(objeto);
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"La suma de los porcentajes no puede ser mayor de 100.",
});
}
totalPorcentaje = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
}
private double calcularPorcentaje(double e, URBAN.FasesURBAN objeto)
{
double porcentajeTotal = 0;
objeto.Porcentaje = e;
int indice = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional
.FindIndex(x => x.idFase == objeto.idFase);
if (indice >= 0)
{
objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional[indice] = objeto;
}
porcentajeTotal = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
return porcentajeTotal;
}
private async void restablecerValores()
{
var lista = JsonSerializer.Deserialize<List<URBAN.FasesURBAN>>(JsonSerializer.Serialize(objetoLicitacionUrban.Enumerados.FasesTrabajo));
objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional = lista;
listadoFases = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.ToList();
totalPorcentaje = objetoLicitacionUrban.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
objetoLicitacionUrban.CalcularHorasTrabajoProfesional();
await InvokeAsync(StateHasChanged);
_Parent.RefreshState();
}
}