Files
HerramientaCASA/HerramientaCASA/Components/Pages/HerramientaCASATabs/DespachoProfesionalComponents/TrabajadorGrid.razor
2025-09-24 11:23:21 +02:00

360 lines
15 KiB
Plaintext

@using BlazorBootstrap
@using System.Text.RegularExpressions
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="col-12 formatoCampos">
¿Estás seguro que desea eliminarlo?
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
<Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
</FooterTemplate>
</Modal>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-12 formatoCampos">
<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">
@foreach (var grupo in grupos)
{
<option value="@grupo" />
}
</datalist>
</div>
</div>
<div class="row">
<div class="col-6 formatoCampos">
<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">
@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>
</div>
</div>
<div class="row">
<div class="col-6 formatoCampos">
<label class="tituloLbl">
@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;">
<NumberInput TValue="double" Step="1" Min="0" @oninput="EvitarDecimalesPorcentaje" @bind-Value:format="F0" @bind-Value="itemSeleccionadoTemporal.PorcentajeProduccion" class="inputForm derecha"></NumberInput> %
</div>
</div>
<div class="col-6 formatoCampos">
<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>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
@if (!nuevoElemento)
{
<Button @onclick="@(() => GestionarDatos("update"))" Color="ButtonColor.Primary">Modificar</Button>
}
else
{
<Button @onclick="@(() => GestionarDatos("create"))" Color="ButtonColor.Primary">Añadir</Button>
}
</FooterTemplate>
</Modal>
<div class="d-flex justify-content-between mt-3 alturaTitulosTabla">
<div><b>Costes Directos Anuales del Personal</b></div>
</div>
<div style="position:relative;margin-bottom: 45px;">
<Grid TItem="CASA.Trabajador"
Class="tablaCACOA table"
Data="Trabajadores"
AllowFiltering="false"
PageSize="10"
EmptyText="No hay registros."
PageSizeSelectorVisible="false"
Responsive="true">
<GridColumns>
<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 align-content-center" HeaderText="Coste anual" PropertyName="CosteAnual">
<span>@context.CosteAnual.MilesYDecimales() €</span>
</GridColumn>
<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 align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion">
@context.PorcentajeProduccion %
</GridColumn>
<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 align-content-center" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Coste Anual" PropertyName="CosteAnualTotal">
@context.CosteAnualTotal.MilesYDecimales() €
</GridColumn>
<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 align-content-center" HeaderText="">
<div class="btnTablasEspaciado">
<span @onclick="@(() => abrirPopupGestionDatos(@context,false))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-edit"></Icon>
</span>
<span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" class="btnBorrarGuardar">
<Icon CustomIconName="fas fa-trash"></Icon>
</span>
</div>
</GridColumn>
</GridColumns>
</Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-60px;">
<tfoot>
<tr>
<td colspan="2" class="text-end fw-bold colorC TotalesTabla">
<div class="d-flex justify-content-between">
<div class="mt-1">
<button @onclick="@(() => abrirPopupGestionDatos(new CASA.Trabajador(),true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i>Nuevo Grupo de Trabajador</button>
</div>
<div>
<span>Total Coste Anual: @objetoCASA.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br />
<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>
</td>
</tr>
</tfoot>
</table>
</div>
@code {
[Parameter]
public CASA objetoCASA { get; set; } = new CASA();
public List<CASA.Trabajador> Trabajadores { get; set; } = new List<CASA.Trabajador>();
private CASA.Trabajador itemSeleccionado = new CASA.Trabajador();
private CASA.Trabajador itemSeleccionadoTemporal = new CASA.Trabajador();
private List<string> grupos = new()
{
"Arquitecto/a",
"Arquitecto/a técnico/a",
"Delineante",
"Administrativo/a"
};
private string tituloPopup = "";
private Modal popupGestionDatos = default!;
private Modal popupConfirmarBorrado = default!;
private string tituloInfo = "";
private bool nuevoElemento;
List<ToastMessage> mensajes = new List<ToastMessage>();
[CascadingParameter]
public DespachoProfesional _Parent { get; set; }
protected override async Task OnInitializedAsync()
{
tituloInfo = "Es el porcentaje de tiempo que el empleado destina a la producción del trabajo profesional concreto, dedicando el resto del tiempo a otras tareas del despacho.";
}
protected override void OnParametersSet()
{
Trabajadores = objetoCASA.DespachoProfesional.Trabajadores;
StateHasChanged();
}
private void EvitarDecimalesPorcentaje(ChangeEventArgs e)
{
var input = e?.Value?.ToString();
if (double.TryParse(input, out var valor))
{
itemSeleccionadoTemporal.PorcentajeProduccion = Math.Round(valor, 0, MidpointRounding.AwayFromZero);
}
}
private void EvitarDecimalesTrabajores(ChangeEventArgs e)
{
var input = e?.Value?.ToString();
if (double.TryParse(input, out var valor))
{
itemSeleccionadoTemporal.NumTrabajadores = Math.Round(valor, 0, MidpointRounding.AwayFromZero);
}
}
private async Task GestionarDatos(string accion)
{
rellenarItem();
switch (accion)
{
case "update":
objetoCASA.ActualizarTrabajador(itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Actualizado correctamente.",
});
break;
case "create":
objetoCASA.InsertarTrabajador(itemSeleccionado);
await cerrarPopupGestionDatos();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Guardado correctamente.",
});
break;
case "delete":
objetoCASA.EliminarTrabajador(itemSeleccionado);
await cerrarPopupConfirmarBorrado();
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Eliminado correctamente.",
});
break;
}
Trabajadores = objetoCASA.DespachoProfesional.Trabajadores.ToList();
await InvokeAsync(StateHasChanged);
_Parent.RefreshState();
}
private async Task BorrarItem()
{
await GestionarDatos("delete");
}
private async Task abrirPopupGestionDatos(CASA.Trabajador objeto, bool esNuevo)
{
itemSeleccionado = objeto;
if (esNuevo)
{
nuevoElemento = true;
}
else
{
nuevoElemento = false;
itemSeleccionadoTemporal = new CASA.Trabajador()
{
CosteAnual = objeto.CosteAnual,
CosteAnualTotal = objeto.CosteAnualTotal,
HorasProduccion = objeto.HorasProduccion,
IdTrabajador = objeto.IdTrabajador,
JornadaLaboral = objeto.JornadaLaboral,
Nombre = objeto.Nombre,
NumTrabajadores = objeto.NumTrabajadores,
PorcentajeProduccion = objeto.PorcentajeProduccion
};
}
if (!nuevoElemento)
{
tituloPopup = "Modificar grupo de trabajadores";
}
else
{
itemSeleccionadoTemporal = new CASA.Trabajador();
tituloPopup = "Nuevo grupo de trabajadores";
itemSeleccionadoTemporal.Nombre = "Arquitecto";
itemSeleccionadoTemporal.JornadaLaboral = 40;
itemSeleccionadoTemporal.PorcentajeProduccion = 80;
itemSeleccionadoTemporal.NumTrabajadores = 1;
}
StateHasChanged();
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupGestionDatos()
{
await popupGestionDatos.HideAsync();
}
//////// PopUp eliminar registro
private async Task abrirPopupConfirmarBorrado(CASA.Trabajador objeto)
{
itemSeleccionado = objeto;
await popupConfirmarBorrado.ShowAsync();
}
private async Task cerrarPopupConfirmarBorrado()
{
await popupConfirmarBorrado.HideAsync();
}
private void rellenarItem()
{
itemSeleccionado.CosteAnual = itemSeleccionadoTemporal.CosteAnual;
itemSeleccionado.CosteAnualTotal = itemSeleccionadoTemporal.CosteAnualTotal;
itemSeleccionado.HorasProduccion = itemSeleccionadoTemporal.HorasProduccion;
itemSeleccionado.IdTrabajador = itemSeleccionadoTemporal.IdTrabajador;
itemSeleccionado.JornadaLaboral = itemSeleccionadoTemporal.JornadaLaboral;
itemSeleccionado.Nombre = itemSeleccionadoTemporal.Nombre;
itemSeleccionado.NumTrabajadores = itemSeleccionadoTemporal.NumTrabajadores;
itemSeleccionado.PorcentajeProduccion = itemSeleccionadoTemporal.PorcentajeProduccion;
}
}