Files
Antifraude.Net/Antifraude.Net/GestionPersonalWeb/Components/Pages/InfoPersComponents/RetencionesJudicialesGrid.razor
Alejandro 8fd141abaa - Edición de todas las tablas y campos dentro de infoPers
- Controladores varios para poder hacer estas ediciones
2026-09-17 09:16:33 +02:00

275 lines
9.5 KiB
Plaintext

@using Newtonsoft.Json
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IHttpClientFactory HttpClientFactory
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Retención Judicial" @onclick="@(() => abrirPopupModificacion(new RETENCIONJUDICIAL(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="RETENCIONJUDICIAL"
Class="table tablaRegPers"
Data="itmList"
AllowFiltering="false"
PageSize="10"
AllowPaging="true"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="100"
PageSizeSelectorVisible="false"
PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="RETENCIONJUDICIAL"
HeaderText="Editar"
FilterButtonCSSClass="hidden">
<button type="button"
class="btnOAAFAzul"
@onclick="() => abrirPopupModificacion(context, false)">
Editar
</button>
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Fecha Inicio">
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Fecha Fin">
@context.FECHAFIN?.ToString("dd/MM/yyyy")
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Saldo Inicio">
@context.SALDOINICIO
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Saldo Restante">
@context.SALDORESTANTE
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Descripción">
@context.DESCRIPCION
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Juzgado">
@context.JUZGADO
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="I.B.A.N.">
@context.IBAN
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Referencia Fichero">
@context.REFERENCIAFICHERO
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Plantilla">
@context.IDPLANTILLANavigation?.DESCRIPCION
</GridColumn>
</GridColumns>
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos"
IsVerticallyCentered="true"
UseStaticBackdrop="true"
CloseOnEscape="false">
<BodyTemplate>
<fieldset disabled="@guardando">
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Inicio</label>
<input class="form-control"
type="date"
@bind-value="ItemEnEdicion.FECHAINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Fin</label>
<input class="form-control"
type="date"
@bind-value="ItemEnEdicion.FECHAFIN" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Saldo Inicio</label>
<input class="form-control"
type="number"
step="any"
@bind-value="ItemEnEdicion.SALDOINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Saldo Restante</label>
<input class="form-control"
type="number"
step="any"
@bind-value="ItemEnEdicion.SALDORESTANTE" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Descripción</label>
<textarea class="form-control"
rows="3"
@bind="ItemEnEdicion.DESCRIPCION"></textarea>
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Juzgado</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.JUZGADO" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">I.B.A.N.</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.IBAN" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Referencia Fichero</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.REFERENCIAFICHERO" />
</div>
</div>
</fieldset>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary"
Disabled="@guardando"
@onclick="cerrarPopupModificacion">
Cerrar
</Button>
<Button Color="ButtonColor.Primary" Disabled="@guardando" @onclick="@(() => GestionarDatos(ItemEnEdicion.IDRETENCIONJUDICIAL == 0))">
@(ItemEnEdicion.IDRETENCIONJUDICIAL == 0 ? "Crear" : "Modificar")
</Button>
</FooterTemplate>
</Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private Modal popupGestionDatos = default!;
private HttpClient cliente = default!;
private List<RETENCIONJUDICIAL> itmList = new();
private RETENCIONJUDICIAL ItemEnEdicion { get; set; } = new();
private RETENCIONJUDICIAL? itemOriginal;
private bool guardando;
private string? mensajeError;
protected override void OnInitialized()
{
cliente = Utilidades.ObtenerCliente(
UserState.Token,
HttpClientFactory);
}
protected override void OnParametersSet()
{
CargarListas();
}
private void CargarListas()
{
itmList = Persona.RETENCIONJUDICIAL?.ToList()
?? new List<RETENCIONJUDICIAL>();
}
private async Task abrirPopupModificacion(RETENCIONJUDICIAL objeto, bool esNuevo)
{
mensajeError = null;
itemOriginal = objeto;
// Copia independiente: cerrar el modal no modifica la fila.
var json = JsonConvert.SerializeObject(
objeto,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
ItemEnEdicion =
JsonConvert.DeserializeObject<RETENCIONJUDICIAL>(json)
?? throw new InvalidOperationException(
"No se ha podido preparar la retención para editar.");
if (esNuevo)
ItemEnEdicion.IDPERSONA = Persona.IDPERSONA;
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
if (guardando)
return;
await popupGestionDatos.HideAsync();
mensajeError = null;
itemOriginal = null;
}
private async Task GestionarDatos(bool esNuevo)
{
if (guardando || (!esNuevo && itemOriginal is null))
return;
mensajeError = null;
if (ItemEnEdicion.FECHAINICIO.HasValue
&& ItemEnEdicion.FECHAFIN.HasValue
&& ItemEnEdicion.FECHAFIN.Value < ItemEnEdicion.FECHAINICIO.Value)
{
mensajeError =
"La fecha fin no puede ser anterior a la fecha inicio.";
return;
}
guardando = true;
try
{
if (esNuevo)
await Utilidades.NuevoObjeto(cliente, "/api/RETENCIONJUDICIAL/", ItemEnEdicion);
else
await Utilidades.ActualizarObjeto(cliente, "/api/RETENCIONJUDICIAL/" + ItemEnEdicion.IDRETENCIONJUDICIAL, ItemEnEdicion);
// Actualiza la fila y la colección de Persona tras guardar.
if (!esNuevo)
{
itemOriginal!.FECHAINICIO = ItemEnEdicion.FECHAINICIO;
itemOriginal.FECHAFIN = ItemEnEdicion.FECHAFIN;
itemOriginal.SALDOINICIO = ItemEnEdicion.SALDOINICIO;
itemOriginal.SALDORESTANTE = ItemEnEdicion.SALDORESTANTE;
itemOriginal.DESCRIPCION = ItemEnEdicion.DESCRIPCION;
itemOriginal.JUZGADO = ItemEnEdicion.JUZGADO;
itemOriginal.IBAN = ItemEnEdicion.IBAN;
itemOriginal.REFERENCIAFICHERO = ItemEnEdicion.REFERENCIAFICHERO;
}
CargarListas();
}
catch (Exception)
{
mensajeError =
"No se ha podido guardar la retención judicial.";
return;
}
finally
{
guardando = false;
}
await cerrarPopupModificacion();
await OnPersonaActualizada.InvokeAsync();
}
}