160 lines
5.6 KiB
Plaintext
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();
|
|
}
|
|
}
|