360 lines
15 KiB
Plaintext
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;
|
|
}
|
|
}
|