This commit is contained in:
2026-04-30 08:55:22 +02:00
25 changed files with 3407 additions and 172 deletions

View File

@@ -92,7 +92,7 @@
<nav class="navbar navbar-expand navbar-dark justify-content-between " style="margin-inline: 20px;"> <nav class="navbar navbar-expand navbar-dark justify-content-between " style="margin-inline: 20px;">
<div> <div>
<a class="navbar-brand" href="/RPT"> <a class="navbar-brand" href="/trabajadores">
<img style="margin-inline: auto; padding: 15px; padding-right: 40px; padding-left: 40px; height: 100px;" src="/Content/imagenes/2-oaaf-logo-negativoBN.png" alt="Logo Oficina Andaluza Antifraude"> <img style="margin-inline: auto; padding: 15px; padding-right: 40px; padding-left: 40px; height: 100px;" src="/Content/imagenes/2-oaaf-logo-negativoBN.png" alt="Logo Oficina Andaluza Antifraude">
</a> </a>
</div> </div>

View File

@@ -8,26 +8,26 @@
@using BlazorBootstrap @using BlazorBootstrap
@using bdAntifraude.db @using bdAntifraude.db
@using Microsoft.AspNetCore.Components @using Microsoft.AspNetCore.Components
@rendermode InteractiveServer @rendermode InteractiveServer
@inject IJSRuntime JS @inject IJSRuntime JS
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory @inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState @inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina"> <div class="pagina">
<div class="Cabecera"> <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Bancos</b></small></h6> <h6><small><i class="fas fa-user"></i><b> Bancos</b></small></h6>
<button @onclick="@(() => abrirPopupModificacion(new BANCOS(), true))" class="btnOAAFAzul">Nuevo </button>
</div> </div>
@if (lPuestos == null) @if (lBancos == null)
{ {
<div id="cargando" class="loadingFrame"> <div id="cargando" class="loadingFrame">
<div class="loadingImg"></div> <div class="loadingImg"></div>
</div> </div>
} }
else if (!lPuestos.Any()) else if (!lBancos.Any())
{ {
<p>No se encontraron datos para mostrar.</p> <p>No se encontraron datos para mostrar.</p>
} }
@@ -44,7 +44,7 @@
<div style="overflow-x:auto;" class="tablaDesk"> <div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="BANCOS" <Grid TItem="BANCOS"
Class="table tablaRegPers" Class="table tablaRegPers"
Data="@lPuestos" Data="@lBancos"
AllowFiltering="false" AllowFiltering="false"
AllowPaging="false" AllowPaging="false"
AllowSorting="true" AllowSorting="true"
@@ -54,13 +54,16 @@
Responsive="true" Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos"> PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns> <GridColumns>
<GridColumn TItem="BANCOS" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(@context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="BANCOS" HeaderText="Código" PropertyName="CODIGO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CODIGO"> <GridColumn TItem="BANCOS" HeaderText="Código" PropertyName="CODIGO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CODIGO">
@context.CODIGO @context.CODIGO
</GridColumn> </GridColumn>
<GridColumn TItem="BANCOS" HeaderText="Nombre" PropertyName="NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NOMBRE"> <GridColumn TItem="BANCOS" HeaderText="Nombre" PropertyName="NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NOMBRE">
@context.NOMBRE @context.NOMBRE
</GridColumn> </GridColumn>
<GridColumn TItem="BANCOS" HeaderText="BIC" PropertyName="BIC" FilterButtonCSSClass="hidden" SortKeySelector="item => item.BIC"> <GridColumn TItem="BANCOS" HeaderText="BIC" PropertyName="BIC" FilterButtonCSSClass="hidden" SortKeySelector="item => item.BIC">
@context.BIC @context.BIC
</GridColumn> </GridColumn>
<GridColumn TItem="BANCOS" HeaderText="Obsoleto" PropertyName="OBSOLETO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.OBSOLETO"> <GridColumn TItem="BANCOS" HeaderText="Obsoleto" PropertyName="OBSOLETO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.OBSOLETO">
@@ -69,24 +72,24 @@
<i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i>
} }
</GridColumn> </GridColumn>
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Tipo" PropertyName="IDTIPOPERSONANavigation.DESCRIPCION" FilterButtonCSSClass="hidden"> @*<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Tipo" PropertyName="IDTIPOPERSONANavigation.DESCRIPCION" FilterButtonCSSClass="hidden">
@context.IDTIPOPERSONANavigation.DESCRIPCION @context.IDTIPOPERSONANavigation.DESCRIPCION
</GridColumn> </GridColumn>
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Fecha baja" PropertyName="FECHABAJA" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJA"> <GridColumn TItem="BANCOS" HeaderText="Fecha baja" PropertyName="FECHABAJA" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJA">
@if (context.FECHABAJA != null) @if (context.FECHABAJA != null)
{ {
@context.FECHABAJA @context.FECHABAJA
} }
</GridColumn> </GridColumn> *@
</GridColumns> </GridColumns>
</Grid> </Grid>
</div> </div>
<!-- Vista móvil --> <!-- Vista móvil -->
<div class="tablaMov"> <div class="tablaMov">
@foreach (var itm in lPuestos) @foreach (var itm in lBancos)
{ {
var collapseId = $"collapse{itm.IDBANCO}"; var collapseId = $"collapse{itm.IDBANCO}";
<div class="card collapse-card Aceptada"> <div class="card collapse-card Aceptada">
@@ -104,10 +107,19 @@
<dd class="col-sm-9">@itm.BIC</dd> <dd class="col-sm-9">@itm.BIC</dd>
<dt class="col-sm-3">Obsoleto</dt> <dt class="col-sm-3">Obsoleto</dt>
<dd class="col-sm-9"> <dd class="col-sm-9">
@if(@itm.OBSOLETO) @itm.OBSOLETO
@* @if(itm.OBSOLETO)
{ {
<i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i>
} }
else
{
<i class="fa-regular fa-square-uncheck"></i>
} *@
</dd>
<dd class="col-sm-12">
<button @onclick="@(() => abrirPopupModificacion(@itm, true))" class="btnOAAFAzul">Editar </button>
</dd> </dd>
</dl> </dl>
</div> </div>
@@ -117,10 +129,48 @@
</div> </div>
} }
</div> </div>
<EditForm EditContext="@editContext" OnValidSubmit="GuardarCambiosPopup" OnInvalidSubmit="@MostrarErroresPopup" FormName="costeIndiForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Codigo: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.CODIGO" />
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Nombre: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.NOMBRE" />
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">BIC: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.BIC" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Obsoleto: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.OBSOLETO" @bind-value="@ItemEnEdicion.OBSOLETO" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(EsItemNuevo ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
@code { @code {
private List<BANCOS> lPuestos = new List<BANCOS>(); private List<BANCOS> lBancos = new List<BANCOS>();
private List<BANCOS> Puestos = new List<BANCOS>(); private List<BANCOS> banco = new List<BANCOS>();
private string tituloPopup = "";
private Modal popupGestionDatos = default;
private bool EsItemNuevo = false;
private BANCOS ItemEnEdicion { get; set; } = new BANCOS();
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private string _filter = ""; private string _filter = "";
public string Filter public string Filter
{ {
@@ -136,7 +186,7 @@
} }
private void AplicarFiltros() private void AplicarFiltros()
{ {
lPuestos = Puestos.Where(per => lBancos = banco.Where(per =>
string.IsNullOrEmpty(Filter) || string.IsNullOrEmpty(Filter) ||
Utilidades.RemoveDiacritics(per.CODIGO).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) || Utilidades.RemoveDiacritics(per.CODIGO).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
Utilidades.RemoveDiacritics(per.NOMBRE.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) || Utilidades.RemoveDiacritics(per.NOMBRE.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
@@ -144,57 +194,6 @@
).ToList(); ).ToList();
UserState.CurrentPage = 1; UserState.CurrentPage = 1;
} }
// Tamaño de página
// private int pageSize = 6;
// Calcula el total de páginas basado en la lista filtrada
// private int TotalPaginas => (int)Math.Ceiling((double)lPuestos.Count / pageSize);
// Índice inicial y final de elementos para la página actual
// private int FromElement => lPuestos.Count == 0 ? 0 : (UserState.CurrentPage - 1) * pageSize + 1;
// private int ToElement
// {
// get
// {
// if (lPuestos.Count == 0)
// {
// return 0;
// }
// int last = FromElement + pageSize - 1;
// return last > lPuestos.Count ? lPuestos.Count : last;
// }
// }
// Sublista de datos para la página actual basada en la lista filtrada
// private List<TIPOSPUESTOSTRABAJO> lPuestosPaginada =>
// lPuestos.Skip((UserState.CurrentPage - 1) * pageSize).Take(pageSize).ToList();
// private void PaginaAnterior()
// {
// if (UserState.CurrentPage > 1)
// {
// UserState.CurrentPage--;
// }
// }
// private void PaginaSiguiente()
// {
// if (UserState.CurrentPage < TotalPaginas)
// {
// UserState.CurrentPage++;
// }
// }
// private void PrimeraPagina() => UserState.CurrentPage = 1;
// private void UltimaPagina() => UserState.CurrentPage = TotalPaginas;
// private void NuevaPersona()
// {
// NavigationManager.NavigateTo("/InfoPersonas", forceLoad: true);
// }
private string HashRed(string id)
{
string link = "/infoPers?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
// Bandera que indica si se está en modo "Ver Todos" // Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false; private bool verTodosActive = false;
@@ -211,7 +210,7 @@
var resultPersonas = await client.GetAsync("/BANCOS"); var resultPersonas = await client.GetAsync("/BANCOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
Puestos = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent) banco = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent)
?? new List<BANCOS>(); ?? new List<BANCOS>();
} }
else else
@@ -225,15 +224,15 @@
var resultPersonas = await client.GetAsync("/api/BANCOS"); var resultPersonas = await client.GetAsync("/api/BANCOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
Puestos = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent) banco = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent)
?? new List<BANCOS>(); ?? new List<BANCOS>();
} }
Puestos = Puestos banco = banco
.OrderBy(x => x.CODIGO) .OrderBy(x => x.CODIGO)
.ToList(); .ToList();
lPuestos = Puestos; lBancos = banco;
UserState.CurrentPage = 1; UserState.CurrentPage = 1;
Filter = ""; Filter = "";
} }
@@ -242,21 +241,111 @@
{ {
verTodosActive = false; verTodosActive = false;
var token = UserState.Token; var token = UserState.Token;
var client = HttpClientFactory.CreateClient(); var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
client.BaseAddress = new Uri(Utilidades.urlSwagger()); editContext = new EditContext(lBancos);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var resultPersonas = await cliente.GetAsync("/api/BANCOS");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/api/BANCOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
Puestos = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent) banco = JsonConvert.DeserializeObject<List<BANCOS>>(resultContent)
?? new List<BANCOS>(); ?? new List<BANCOS>();
Puestos = Puestos.OrderBy(x => x.CODIGO) banco = banco.OrderBy(x => x.CODIGO)
.ToList(); .ToList();
lPuestos = Puestos; lBancos = banco;
}
private async Task abrirPopupModificacion(BANCOS objeto, bool esNuevo)
{
ItemEnEdicion = Utilidades.ClonarObjeto(objeto);
EsItemNuevo = esNuevo;
if (!EsItemNuevo)
{
tituloPopup = "Modificando Banco";
}
else
{
tituloPopup = "Nuevo Banco";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
} }
// GUARDAR
private async Task GuardarCambiosPopup()
{
try
{
ValidarDatos();
if (!editContext!.GetValidationMessages().Any())
{
string accion = EsItemNuevo ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private async Task GestionarDatos(string accion)
{
var copia = new List<BANCOS>(lBancos);
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
switch (accion)
{
case "update":
int indice = copia.FindIndex(x => x.IDBANCO == ItemEnEdicion.IDBANCO);
if (indice > -1)
{
copia[indice] = ItemEnEdicion;
}
var response = await Utilidades.ActualizarObjeto(cliente, "/api/BANCOS/" + ItemEnEdicion.IDBANCO, ItemEnEdicion, mensajes);
break;
case "create":
copia.Add(ItemEnEdicion);
var responsec = await Utilidades.NuevoObjeto(cliente, "/api/BANCOS/", ItemEnEdicion, mensajes);
break;
case "delete":
break;
}
cerrarPopupModificacion();
lBancos = copia.OrderBy(x => x.CODIGO).ToList();
await InvokeAsync(StateHasChanged);
}
private void ValidarDatos()
{
}
private void MostrarErroresPopup()
{
// messageStore?.Clear();
// foreach (var field in new[] { nameof(descripcionItem) })
// {
// ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
// }
}
} }

View File

@@ -0,0 +1,291 @@
@page "/ConceptoGeneral"
@page "/ConceptoGeneral/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@* <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
</div> *@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
<div>
<div>
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar Concepto General" @onclick="GuardarPuestoTrabajo" /></div>
<div class="" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Concepto </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Nombre: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.NOMBRE" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.DESCRIPCION" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="" class="fw-bold">Interviene en pago directo: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.INTERVIENEENPAGODIRECTO" @bind-value="@Concepto.INTERVIENEENPAGODIRECTO" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Retribuciones: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.RETRIBUCIONES" @bind-value="@Concepto.RETRIBUCIONES" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Concepto de Nomina: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.PERTENECENOMINA" @bind-value="@Concepto.PERTENECENOMINA" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="" class="fw-bold">Cotiza Seguridad Social: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.COTIZASEGURIDADSOCIAL" @bind-value="@Concepto.COTIZASEGURIDADSOCIAL" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Deducciones: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.DEDUCCIONES" @bind-value="@Concepto.DEDUCCIONES" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Concepto de Liquidación: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.PERTENECELIQUIDACIONES" @bind-value="@Concepto.PERTENECELIQUIDACIONES" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="" class="fw-bold">Cotiza IRPF: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.COTIZAIRPF" @bind-value="@Concepto.COTIZAIRPF" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Extra: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@Concepto.EXTRA" @bind-value="@Concepto.EXTRA" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Aplicaciones Presupuestarias </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Nombre: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.CONCEPTOAPLPRES" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Eventual: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESEVENTUAL" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Altos Cargos: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESALTOSCARGOS" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Laboral: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESLABORAL" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Funcionario </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOA1" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOA2" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOB" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOC1" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOC2" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.APLPRESFUNCIONARIOE" />
</div>
</div>
</div>
</div>
<div class="mt-3 mb-5" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Varios </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Tipo: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.TIPO" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Orden: </label>
<input class="form-control" id="txtdni" @bind-value="@Concepto.ORDEN" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
[Parameter]
public string? cl { get; set; } = "";
private static bdAntifraude.db.CONCEPTOSGENERALES Concepto = new CONCEPTOSGENERALES();
private EditContext editContext = new EditContext(Concepto);
private HttpClient cliente = new HttpClient();
private ValidationMessageStore? messageStore;
private string errorMessage = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
public bool mostrar { get; set; } = true;
public bool mostrarBtn { get; set; } = false;
protected override async Task OnInitializedAsync()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
if (string.IsNullOrEmpty(cl))
{
Concepto = new CONCEPTOSGENERALES();
mostrarBtn = true;
}
else
{
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
string idDesencriptado = Utilidades.Desencriptar(cl);
int id = int.Parse(idDesencriptado);
var response = await cliente.GetAsync($"/api/CONCEPTOSGENERALES/{id}");
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos del Tipo de Trabajo. Código: {response.StatusCode}");
}
var resultContent = await response.Content.ReadAsStringAsync();
Concepto = JsonConvert.DeserializeObject<CONCEPTOSGENERALES>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
}
editContext = new EditContext(Concepto);
messageStore = new ValidationMessageStore(editContext);
mostrar = false;
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
finally
{
mostrar = false;
}
}
private async Task GuardarPuestoTrabajo()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (!editContext.GetValidationMessages().Any())
{
if (Concepto.IDCONCEPTOSGENERALES == 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/CONCEPTOSGENERALES", Concepto, mensajes);
if (response != null)
{
Concepto = response;
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
await InvokeAsync(StateHasChanged);
}
else//Guardar
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/CONCEPTOSGENERALES/" + Concepto.IDCONCEPTOSGENERALES, Concepto, mensajes);
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
});
}
}
}

View File

@@ -17,8 +17,13 @@
@inject UserState UserState @inject UserState UserState
<div class="pagina"> <div class="pagina">
<div class="Cabecera"> <div class="d-flex">
<h6><small><i class="fas fa-user"></i><b> Conceptos Generales</b></small></h6> <div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Conceptos Generales</b>
</h6>
</div>
<a href="/ConceptoGeneral" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
</div> </div>
@if (lConceptos == null) @if (lConceptos == null)
@@ -113,7 +118,7 @@
private string HashRed(string id) private string HashRed(string id)
{ {
string link = "/infoPers?cl=" + tsUtilidades.crypt.FEncS( string link = "/ConceptoGeneral?cl=" + tsUtilidades.crypt.FEncS(
id, id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",

View File

@@ -0,0 +1,304 @@
@page "/Contrato"
@page "/Contrato/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@* <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
</div> *@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
<div>
<div>
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar Contrato" @onclick="GuardarPuestoTrabajo" /></div>
<div class="" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Contrato </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Codigo: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iContrato.CODIGO" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtDescripcion" @bind-value="@iContrato.DESCRIPCION" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Contigencias Comunes </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.CONTCOMUNPORCENTEMPR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.CONTCOMUNIMPORTEEMPR" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.CONTCOMUNPORCENTTRAB" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.CONTCOMUNIMPORTEEMPR" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Formación Profesional </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FORMACIONPROFPORCENTEMPR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FORMACIONPROFIMPORTEEMPR" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FORMACIONPROFPORCENTTRAB" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FORMACIONPROFIMPORTETRAB" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Desempleo </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.DESEMPLEOPORCENTAJEEMPRESA" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.DESEMPLEOIMPORTEEMPRESA" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.DESEMPLEOPORCENTAJETRABAJADOR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.DESEMPLEOIMPORTETRABAJADOR" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> FOGASA </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FOGASAPORCENTAJEEMPRESA" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FOGASAIMPORTEEMPRESA" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FOGASAPORCENTAJETRABAJADOR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.FOGASAIMPORTETRABAJADOR" />
</div>
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> MEI </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.MEIPORCENTAJEEMPRESA" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.MEIIMPORTEEMPRESA" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">% Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.MEIPORCENTAJETRABAJADOR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Importe Empresa: </label>
<input class="form-control" id="txtdni" @bind-value="@iContrato.MEIIMPORTETRABAJADOR" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
[Parameter]
public string? cl { get; set; } = "";
private static bdAntifraude.db.CONTRATOS iContrato = new CONTRATOS();
private EditContext editContext = new EditContext(iContrato);
private HttpClient cliente = new HttpClient();
private ValidationMessageStore? messageStore;
private string errorMessage = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
public bool mostrar { get; set; } = true;
public bool mostrarBtn { get; set; } = false;
protected override async Task OnInitializedAsync()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
if (string.IsNullOrEmpty(cl))
{
iContrato = new CONTRATOS();
mostrarBtn = true;
}
else
{
string idDesencriptado = Utilidades.Desencriptar(cl);
int id = int.Parse(idDesencriptado);
var response = await cliente.GetAsync($"/api/CONTRATOS/{id}");
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos del Contrato. Código: {response.StatusCode}");
}
var resultContent = await response.Content.ReadAsStringAsync();
iContrato = JsonConvert.DeserializeObject<CONTRATOS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
}
editContext = new EditContext(iContrato);
messageStore = new ValidationMessageStore(editContext);
mostrar = false;
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
finally
{
mostrar = false;
}
}
private async Task GuardarPuestoTrabajo()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (!editContext.GetValidationMessages().Any())
{
if (iContrato.IDCONTRATO == 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/CONTRATOS", iContrato, mensajes);
if (response != null)
{
iContrato = response;
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
await InvokeAsync(StateHasChanged);
}
else//Guardar
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/CONTRATOS/" + iContrato.IDCONTRATO, iContrato, mensajes);
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
});
}
}
}

View File

@@ -1,5 +1,233 @@
<h3>Contratos</h3> @page "/Contratos"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina">
<div class="d-flex">
<div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Contratos</b>
</h6>
</div>
<a href="/Contrato" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
</div>
@if (lContratos == null)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
else if (!lContratos.Any())
{
<p>No se encontraron datos para mostrar.</p>
}
else
{
<div class="botonera col-12 gap-1" style="display:flex;" role="group">
</div>
<div style="display:flex; justify-content:start; gap:15px;width:100%"></div>
<div class="form-group mt-4 mb-4">
<input class="form-control" type="text" placeholder="Filtrar..."
@bind-value="Filter" @bind-value:event="oninput" />
</div>
<div style="overflow-x:auto;" class="">
<Grid TItem="CONTRATOS"
Class="table tablaRegPers"
Data="@lContratos"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="CONTRATOS" HeaderText="Descripción" PropertyName="CODIGO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
<NavLink class="btn btn-link" href="@HashRed(context.IDCONTRATO.ToString())">@context.CODIGO</NavLink>
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESCRIPCION
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Empresa" PropertyName="CONTCOMUNPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.CONTCOMUNPORCENTEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Trabajador" PropertyName="CONTCOMUNPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.CONTCOMUNPORCENTTRAB
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Empresa" PropertyName="CONTCOMUNIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.CONTCOMUNIMPORTEEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Contigencias Comunes Trabajador" PropertyName="CONTCOMUNIMPORTETRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.CONTCOMUNIMPORTETRAB
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Formación Profesional Empresa" PropertyName="FORMACIONPROFPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FORMACIONPROFPORCENTEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Formación Profesional Trabajador" PropertyName="FORMACIONPROFPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FORMACIONPROFPORCENTTRAB
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Formación Profesional Empresa" PropertyName="FORMACIONPROFIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FORMACIONPROFIMPORTEEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Formacion Profesional Trabajador" PropertyName="FORMACIONPROFIMPORTETRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FORMACIONPROFIMPORTETRAB
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Accidentes IT-IMS CNAE Empresa" PropertyName="ACCITIMSCNAEPORCENTEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.ACCITIMSCNAEPORCENTEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Accidentes IT-IMS CNAE Trabajador" PropertyName="ACCITIMSCNAEPORCENTTRAB" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.ACCITIMSCNAEPORCENTTRAB
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Accidentes IT-IMS CNAE Empresa" PropertyName="ACCITIMSCNAEIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.ACCITIMSCNAEIMPORTEEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Accidentes IT-IMS CNAE Trabajador" PropertyName="ACCITIMSCNAEIMPORTEEMPR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.ACCITIMSCNAEIMPORTEEMPR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Desempleo Empresa" PropertyName="DESEMPLEOPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESEMPLEOPORCENTAJEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% Desempleo Trabajador" PropertyName="DESEMPLEOPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESEMPLEOPORCENTAJETRABAJADOR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Desempleo Empresa" PropertyName="DESEMPLEOIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESEMPLEOIMPORTEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe Desempleo Trabajador" PropertyName="DESEMPLEOIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESEMPLEOIMPORTETRABAJADOR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% FOGASA Empresa" PropertyName="FOGASAPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FOGASAPORCENTAJEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% FOGASA Trabajador" PropertyName="FOGASAPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FOGASAPORCENTAJETRABAJADOR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe FOGASA Empresa" PropertyName="FOGASAIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FOGASAIMPORTEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe FOGASA Trabajador" PropertyName="FOGASAIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.FOGASAIMPORTETRABAJADOR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% MEI Empresa" PropertyName="MEIPORCENTAJEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.MEIPORCENTAJEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="% MEI Trabajador" PropertyName="MEIPORCENTAJETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.MEIPORCENTAJETRABAJADOR
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe MEI Empresa" PropertyName="MEIIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.MEIIMPORTEEMPRESA
</GridColumn>
<GridColumn TItem="CONTRATOS" HeaderText="Importe MEI Trabajador" PropertyName="MEIIMPORTETRABAJADOR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.MEIIMPORTETRABAJADOR
</GridColumn>
</GridColumns>
</Grid>
</div>
<!-- Vista móvil -->
}
</div>
@code { @code {
List<CONTRATOS> lContratos = new List<CONTRATOS>();
private List<CONTRATOS> contratos = new List<CONTRATOS>();
private string _filter = "";
public string Filter
{
get => _filter;
set
{
if (_filter != value)
{
_filter = value;
AplicarFiltros();
}
}
}
private void AplicarFiltros()
{
lContratos = contratos.Where(per =>
string.IsNullOrEmpty(Filter) ||
Utilidades.RemoveDiacritics(per.DESCRIPCION).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase)
).ToList();
UserState.CurrentPage = 1;
}
// Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false;
List<ToastMessage> mensajes = new List<ToastMessage>();
private async Task ToggleVerTodos()
{
if (!verTodosActive)
{
verTodosActive = true;
var token = UserState.Token;
var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var resultPersonas = await client.GetAsync("/CONTRATOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
contratos = JsonConvert.DeserializeObject<List<CONTRATOS>>(resultContent)
?? new List<CONTRATOS>();
}
else
{
verTodosActive = false;
var token = UserState.Token;
var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var resultPersonas = await client.GetAsync("/api/CONTRATOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
contratos = JsonConvert.DeserializeObject<List<CONTRATOS>>(resultContent)
?? new List<CONTRATOS>();
}
contratos = contratos.ToList();
lContratos = contratos;
UserState.CurrentPage = 1;
Filter = "";
}
protected override async Task OnInitializedAsync()
{
verTodosActive = false;
var token = UserState.Token;
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var resultPersonas = await cliente.GetAsync("/api/CONTRATOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
contratos = JsonConvert.DeserializeObject<List<CONTRATOS>>(resultContent) ?? new List<CONTRATOS>();
contratos = contratos.ToList();
lContratos = contratos;
}
private string HashRed(string id)
{
string link = "/Contrato?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
} }

View File

@@ -0,0 +1,297 @@
@page "/CuentaCotizacion"
@page "/CuentaCotizacion/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@* <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
</div> *@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
<div>
<div>
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar Cuenta Cotización" @onclick="GuardarPuestoTrabajo" /></div>
<div class="" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Cuenta Cotizacion Patronal</b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Codigo: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.CODIGO" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtDescripcion" @bind-value="@iCuentaContizacion.REGIMEN" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtDescripcion" @bind-value="@iCuentaContizacion.AUTORIZADO" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-2">
<label for="" class="fw-bold">Funcionario: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.FUNCIONARIO" @bind-value="@iCuentaContizacion.FUNCIONARIO" />
</div>
<div class="col-md-2">
<label for="" class="fw-bold">Laboral: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.LABORAL" @bind-value="@iCuentaContizacion.LABORAL" />
</div>
<div class="col-md-2">
<label for="" class="fw-bold">Obsoleto: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.EVENTUAL" @bind-value="@iCuentaContizacion.EVENTUAL" />
</div>
<div class="col-md-2">
<label for="" class="fw-bold">Interino: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.INTERINO" @bind-value="@iCuentaContizacion.INTERINO" />
</div>
<div class="col-md-2">
<label for="" class="fw-bold">Alto Cargo: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.ALTOCARGO" @bind-value="@iCuentaContizacion.ALTOCARGO" />
</div>
<div class="col-md-2">
<label for="" class="fw-bold">Diputado en asignación: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@iCuentaContizacion.DIPUTADOSENASIGNACION" @bind-value="@iCuentaContizacion.DIPUTADOSENASIGNACION" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Nombre: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.NOMBRE" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.DESCRIPCION" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Entidad y ATyEP: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.ENTIDAD" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">IPF: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IPF" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">IBAN Liquidaciones Deudoras: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IBANLIQUIDACIONESDEUDORAS" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">IBAN Liquidaciones Acreedoras: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IBANLIQUIDACIONESACREEDORAS" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Letra Identificación Fichero: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.LETRAIDENTIFICACIONFICHERO" />
</div>
</div>
</div>
<div class="mt-3" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Coeficientes Reductores, Contigencias Excluidas </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Coeficiente Reductor Empresa: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTOREMPRESA" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Coeficiente Reductor Trabajador: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTORTRABAJADOR" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Coeficiente Reductor Total: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.COEFICIENTEREDUCTORTOTAL" />
</div>
</div>
</div>
</div>
</div>
<div class="mt-3 mb-5" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-12 mb-3">
<h6><b> Datos del titular </b></h6>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Tipo IPF: </label>
<InputSelect @bind-Value="@iCuentaContizacion.IDTITULARTIPOIPF" class="form-select">
<option value="">Seleccionar</option>
@if (lTipoIPF != null)
{
@foreach (var enumera in lTipoIPF)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">IPF: </label>
<input class="form-control" id="txtCodigo" @bind-value="@iCuentaContizacion.IPF" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Nombre: </label>
<input class="form-control" id="txtdni" @bind-value="@iCuentaContizacion.TITULARNOMBRE" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Fecha Alta: </label>
<input type="date" class="form-control" id="txtEFecha" @bind-value="@iCuentaContizacion.FECHAALTA" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Fecha Baja: </label>
<input type="date" class="form-control" id="txtEFecha" @bind-value="@iCuentaContizacion.FECHABAJA" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
[Parameter]
public string? cl { get; set; } = "";
private static bdAntifraude.db.CUENTASCOTIZACIONPATRONAL iCuentaContizacion = new CUENTASCOTIZACIONPATRONAL();
private EditContext editContext = new EditContext(iCuentaContizacion);
private HttpClient cliente = new HttpClient();
private ValidationMessageStore? messageStore;
private string errorMessage = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
public bool mostrar { get; set; } = true;
public bool mostrarBtn { get; set; } = false;
private List<ENUMERACIONES> lTipoIPF = new List<ENUMERACIONES>();
protected override async Task OnInitializedAsync()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
if (string.IsNullOrEmpty(cl))
{
iCuentaContizacion = new CUENTASCOTIZACIONPATRONAL();
mostrarBtn = true;
}
else
{
string idDesencriptado = Utilidades.Desencriptar(cl);
int id = int.Parse(idDesencriptado);
var response = await cliente.GetAsync($"/api/CUENTASCOTIZACIONPATRONAL/{id}");
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos. Código: {response.StatusCode}");
}
var resultContent = await response.Content.ReadAsStringAsync();
iCuentaContizacion = JsonConvert.DeserializeObject<CUENTASCOTIZACIONPATRONAL>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
}
editContext = new EditContext(iCuentaContizacion);
messageStore = new ValidationMessageStore(editContext);
mostrar = false;
lTipoIPF = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPIPF");
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
finally
{
mostrar = false;
}
}
private async Task GuardarPuestoTrabajo()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (!editContext.GetValidationMessages().Any())
{
if (iCuentaContizacion.IDCUENTACOTIZACIONPATRONAL == 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/CUENTASCOTIZACIONPATRONAL", iCuentaContizacion, mensajes);
if (response != null)
{
iCuentaContizacion = response;
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
await InvokeAsync(StateHasChanged);
}
else//Guardar
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/CUENTASCOTIZACIONPATRONAL/" + iCuentaContizacion.IDCUENTACOTIZACIONPATRONAL, iCuentaContizacion, mensajes);
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
});
}
}
}

View File

@@ -1,5 +1,129 @@
<h3>CuentasCotizacion</h3> @page "/CuentasCotizacion"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina">
<div class="d-flex">
<div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Cuentas Cotización</b>
</h6>
</div>
<a href="/CuentaCotizacion" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
</div>
@if (lCuentasCotizacion == null)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
else if (!lCuentasCotizacion.Any())
{
<p>No se encontraron datos para mostrar.</p>
}
else
{
<div class="botonera col-12 gap-1" style="display:flex;" role="group">
</div>
<div style="display:flex; justify-content:start; gap:15px;width:100%"></div>
<div class="form-group mt-4 mb-4">
<input class="form-control" type="text" placeholder="Filtrar..."
@bind-value="Filter" @bind-value:event="oninput" />
</div>
<div style="overflow-x:auto;" class="">
<Grid TItem="CUENTASCOTIZACIONPATRONAL"
Class="table tablaRegPers"
Data="@lCuentasCotizacion"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="CUENTASCOTIZACIONPATRONAL" HeaderText="Descripción" PropertyName="NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
<NavLink class="btn btn-link" href="@HashRed(context.IDCUENTACOTIZACIONPATRONAL.ToString())">@context.NOMBRE</NavLink>
</GridColumn>
<GridColumn TItem="CUENTASCOTIZACIONPATRONAL" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESCRIPCION
</GridColumn>
</GridColumns>
</Grid>
</div>
<!-- Vista móvil -->
}
</div>
@code { @code {
List<CUENTASCOTIZACIONPATRONAL> lCuentasCotizacion = new List<CUENTASCOTIZACIONPATRONAL>();
private List<CUENTASCOTIZACIONPATRONAL> cuentasCoti = new List<CUENTASCOTIZACIONPATRONAL>();
private string _filter = "";
public string Filter
{
get => _filter;
set
{
if (_filter != value)
{
_filter = value;
AplicarFiltros();
}
}
}
private void AplicarFiltros()
{
lCuentasCotizacion = cuentasCoti.Where(per =>
string.IsNullOrEmpty(Filter) ||
Utilidades.RemoveDiacritics(per.DESCRIPCION).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase)
).ToList();
UserState.CurrentPage = 1;
}
// Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false;
List<ToastMessage> mensajes = new List<ToastMessage>();
protected override async Task OnInitializedAsync()
{
verTodosActive = false;
var token = UserState.Token;
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var resultPersonas = await cliente.GetAsync("/api/CUENTASCOTIZACIONPATRONAL");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
cuentasCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(resultContent) ?? new List<CUENTASCOTIZACIONPATRONAL>();
cuentasCoti = cuentasCoti.ToList();
lCuentasCotizacion = cuentasCoti;
}
private string HashRed(string id)
{
string link = "/CuentaCotizacion?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
} }

View File

@@ -8,7 +8,6 @@
@using BlazorBootstrap @using BlazorBootstrap
@using bdAntifraude.db @using bdAntifraude.db
@using Microsoft.AspNetCore.Components @using Microsoft.AspNetCore.Components
@rendermode InteractiveServer @rendermode InteractiveServer
@inject IJSRuntime JS @inject IJSRuntime JS
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@@ -16,9 +15,15 @@
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState @inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina"> <div class="pagina">
<div class="Cabecera"> <div class="d-flex">
<h6><small><i class="fas fa-user"></i><b>Fiestas</b></small></h6> <div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Fiestas</b>
</h6>
</div>
<button @onclick="@(() => abrirPopupModificacion(new FIESTAS(), true))" class="btnOAAFAzul">Nuevo </button>
</div> </div>
@if (lFiestas == null) @if (lFiestas == null)
@@ -54,6 +59,9 @@
Responsive="true" Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos"> PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns> <GridColumns>
<GridColumn TItem="FIESTAS" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(@context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="FIESTAS" Style="width:10%" HeaderText="Fecha" PropertyName="FECHA" FilterTextboxWidth="50" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHA"> <GridColumn TItem="FIESTAS" Style="width:10%" HeaderText="Fecha" PropertyName="FECHA" FilterTextboxWidth="50" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHA">
@context.FECHA.Value.ToString().Substring(0,10) @context.FECHA.Value.ToString().Substring(0,10)
</GridColumn> </GridColumn>
@@ -70,11 +78,40 @@
} }
</div> </div>
<!--Popup de edicion-->
<EditForm EditContext="@editContext" OnValidSubmit="GuardarCambiosPopup" OnInvalidSubmit="@MostrarErroresPopup" FormName="fiestasForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Fecha: </label>
<input type="date" class="form-control" id="txtEFecha" @bind-value="@ItemEnEdicion.FECHA" />
</div>
<div class="col-md-12">
<label for="txtEDescripcion" class="fw-bold">Descripcion: </label>
<input class="form-control" id="txtEDescripcion" @bind-value="@ItemEnEdicion.DESCRIPCION" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(EsItemNuevo ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
@code { @code {
private List<FIESTAS> lFiestas = new List<FIESTAS>(); List<FIESTAS> lFiestas = new List<FIESTAS>();
private List<FIESTAS> fiestas = new List<FIESTAS>(); private List<FIESTAS> fiestas = new List<FIESTAS>();
private string _filter = ""; private string _filter = "";
private string tituloPopup = "";
private Modal popupGestionDatos = default;
private bool EsItemNuevo = false;
private FIESTAS ItemEnEdicion { get; set; } = new FIESTAS();
private EditContext? editContext;
public string Filter public string Filter
{ {
get => _filter; get => _filter;
@@ -95,18 +132,9 @@
).ToList(); ).ToList();
UserState.CurrentPage = 1; UserState.CurrentPage = 1;
} }
private string HashRed(string id)
{
string link = "/infoPers?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
// Bandera que indica si se está en modo "Ver Todos" // Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false; private bool verTodosActive = false;
List<ToastMessage> mensajes = new List<ToastMessage>();
private async Task ToggleVerTodos() private async Task ToggleVerTodos()
{ {
@@ -114,10 +142,7 @@
{ {
verTodosActive = true; verTodosActive = true;
var token = UserState.Token; var token = UserState.Token;
var client = HttpClientFactory.CreateClient(); var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/FIESTAS"); var resultPersonas = await client.GetAsync("/FIESTAS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
@@ -128,10 +153,7 @@
{ {
verTodosActive = false; verTodosActive = false;
var token = UserState.Token; var token = UserState.Token;
var client = HttpClientFactory.CreateClient(); var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/api/FIESTAS"); var resultPersonas = await client.GetAsync("/api/FIESTAS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
@@ -152,12 +174,10 @@
{ {
verTodosActive = false; verTodosActive = false;
var token = UserState.Token; var token = UserState.Token;
var client = HttpClientFactory.CreateClient(); var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
client.BaseAddress = new Uri(Utilidades.urlSwagger()); editContext = new EditContext(lFiestas);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/api/FIESTAS"); var resultPersonas = await cliente.GetAsync("/api/FIESTAS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync(); var resultContent = await resultPersonas.Content.ReadAsStringAsync();
fiestas = JsonConvert.DeserializeObject<List<FIESTAS>>(resultContent) fiestas = JsonConvert.DeserializeObject<List<FIESTAS>>(resultContent)
?? new List<FIESTAS>(); ?? new List<FIESTAS>();
@@ -169,5 +189,96 @@
lFiestas = fiestas; lFiestas = fiestas;
} }
private async Task abrirPopupModificacion(FIESTAS objeto, bool esNuevo)
{
ItemEnEdicion = Utilidades.ClonarObjeto(objeto);
EsItemNuevo = esNuevo;
if (!EsItemNuevo)
{
tituloPopup = "Modificando Fiesta";
}
else
{
tituloPopup = "Nueva Fiesta";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
private async Task GuardarCambiosPopup()
{
try
{
ValidarDatos();
if (!editContext!.GetValidationMessages().Any())
{
string accion = EsItemNuevo ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private async Task GestionarDatos(string accion)
{
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var copia = new List<FIESTAS>(lFiestas);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
switch (accion)
{
case "update":
int indice = copia.FindIndex(x => x.IDFIESTA == ItemEnEdicion.IDFIESTA);
if (indice > -1)
{
copia[indice] = ItemEnEdicion;
}
var response = await Utilidades.ActualizarObjeto(cliente, "/api/FIESTAS/" + ItemEnEdicion.IDFIESTA, ItemEnEdicion, mensajes);
break;
case "create":
copia.Add(ItemEnEdicion);
var responsec = await Utilidades.NuevoObjeto(cliente, "/api/FIESTAS/", ItemEnEdicion, mensajes);
break;
case "delete":
break;
}
cerrarPopupModificacion();
lFiestas = copia.ToList();
await InvokeAsync(StateHasChanged);
}
private void ValidarDatos()
{
}
private void MostrarErroresPopup()
{
// messageStore?.Clear();
// foreach (var field in new[] { nameof(descripcionItem) })
// {
// ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
// }
}
} }

View File

@@ -0,0 +1,234 @@
@page "/TipoPuestoTrabajo"
@page "/TipoPuestoTrabajo/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@* <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
</div> *@
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
<div>
<div>
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar Puesto Trabajo" @onclick="GuardarPuestoTrabajo" /></div>
<div class="">
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Descripción: </label>
<input class="form-control" id="txtdni" @bind-value="@puestoTrabajo.DESCRIPCION" />
</div>
<div class="col-md-4">
<label for="txtsexo" class="fw-bold">Grupo: </label>
<InputSelect @bind-Value="puestoTrabajo.IDGRUPOFUNCIONARIO" class="form-select">
<option value="">Seleccionar</option>
@if (lGrupos != null)
{
@foreach (var enumera in lGrupos)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Grupo Tarifa: </label>
<input class="form-control" id="txtdni" @bind-value="@puestoTrabajo.GRUPOTARIFA" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtsexo" class="fw-bold">TipoPersonal: </label>
<InputSelect @bind-Value="puestoTrabajo.IDTIPOPERSONA" class="form-select">
<option value="">Seleccionar</option>
@if (lTipoPersonal != null)
{
@foreach (var enumera in lTipoPersonal)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Nivel: </label>
<input class="form-control" id="txtdni" @bind-value="@puestoTrabajo.NIVEL" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Código Antiguo: </label>
<input class="form-control" id="txtdni" @bind-value="@puestoTrabajo.CODIGOANTIGUO" />
</div>
</div>
</div>
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Epigrafe: </label>
<input class="form-control" id="txtdni" @bind-value="@puestoTrabajo.EPIGRAFE" />
</div>
</div>
</div>
</div>
</div>
<div>
@if (puestoTrabajo.IDTIPOPUESTO != 0)
{
<ConceptosTipoTrabajoGrid PuestoTrabajo="puestoTrabajo"></ConceptosTipoTrabajoGrid>
}
</div>
</div>
</div>
@code {
[Parameter]
public string? cl { get; set; } = "";
private static bdAntifraude.db.TIPOSPUESTOSTRABAJO puestoTrabajo = new TIPOSPUESTOSTRABAJO();
private List<ENUMERACIONES> lGrupos = new List<ENUMERACIONES>();
private List<ENUMERACIONES> lTipoPersonal = new List<ENUMERACIONES>();
private EditContext editContext = new EditContext(puestoTrabajo);
private Tabs tabsPuesTrab { get; set; } = new Tabs();
private HttpClient cliente = new HttpClient();
private ValidationMessageStore? messageStore;
private string errorMessage = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
public bool mostrar { get; set; } = true;
public bool mostrarBtn { get; set; } = false;
protected override async Task OnInitializedAsync()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
if (string.IsNullOrEmpty(cl))
{
puestoTrabajo = new TIPOSPUESTOSTRABAJO();
mostrarBtn = true;
}
else
{
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
string idDesencriptado = Utilidades.Desencriptar(cl);
int id = int.Parse(idDesencriptado);
var response = await cliente.GetAsync($"/api/TIPOSPUESTOSTRABAJO/{id}");
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos del Tipo de Trabajo. Código: {response.StatusCode}");
}
var resultContent = await response.Content.ReadAsStringAsync();
puestoTrabajo = JsonConvert.DeserializeObject<TIPOSPUESTOSTRABAJO>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
}
editContext = new EditContext(puestoTrabajo);
messageStore = new ValidationMessageStore(editContext);
mostrar = false;
await CargarSelects();
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
finally
{
mostrar = false;
}
}
private async Task GuardarPuestoTrabajo()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (!editContext.GetValidationMessages().Any())
{
if (puestoTrabajo.IDTIPOPUESTO == 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/TIPOSPUESTOSTRABAJO", puestoTrabajo,mensajes);
if (response != null)
{
puestoTrabajo = response;
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
await InvokeAsync(StateHasChanged);
}
else//Guardar
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/TIPOSPUESTOSTRABAJO/" + puestoTrabajo.IDTIPOPUESTO, puestoTrabajo,mensajes);
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
});
}
}
private async Task CargarSelects()
{
try
{
lTipoPersonal = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPPER");
lGrupos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/GRUPOFUNCIONARIO");
StateHasChanged();
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
}
}

View File

@@ -0,0 +1,297 @@
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
<!--Tabla de datos-->
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="">
<div class="d-flex">
<div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Conceptos Tipos Puestos de Trabajo</b>
</h6>
</div>
<button @onclick="@(() => abrirPopupModificacion(new CONCEPTOSTIPOSPUESTOSTRABAJO(), true))" class="btnOAAFAzul">Nuevo </button>
</div>
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="CONCEPTOSTIPOSPUESTOSTRABAJO"
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="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(@context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Concepto General">
@lConceptosGenerales.First(x => x.IDCONCEPTOSGENERALES == context.IDCONCEPTOGENERAL).DESCRIPCION
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Descripcion">
@context.DESCRIPCION
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Importe">
@context.IMPORTE
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Concepto aplicación presupuestaria">
@context.CONCEPTOAPLPRES
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Aplicación presupuestaria">
@context.APLICACIONPRESUPUESTARIA
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Cotiza seguridad social" TextAlignment="Alignment.Center">
@if (context.COTIZASEGURIDADSOCIAL)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Cotiza IRPF" TextAlignment="Alignment.Center">
@if (context.COTIZAIRPF)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Retribuciones" TextAlignment="Alignment.Center">
@if (context.RETRIBUCIONES)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Deducciones" TextAlignment="Alignment.Center">
@if (context.DEDUCCIONES)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSTIPOSPUESTOSTRABAJO" HeaderText="Extra" TextAlignment="Alignment.Center">
@if (context.EXTRA)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
</GridColumns>
</Grid>
</div>
</div>
<!--Popup de edicion-->
<EditForm EditContext="@editContext" OnValidSubmit="GuardarCambiosPopup" OnInvalidSubmit="@MostrarErroresPopup" FormName="costeIndiForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-6">
<label for="" class="fw-bold">Concepto General: </label>
<InputSelect @bind-Value="ItemEnEdicion.IDCONCEPTOGENERAL" class="form-select">
<option value="">Seleccionar</option>
@if (lConceptosGenerales != null)
{
@foreach (var concepto in lConceptosGenerales)
{
<option value="@concepto.IDCONCEPTOSGENERALES">@concepto.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-6">
<label for="txtEDesc" class="fw-bold">Descripción: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.DESCRIPCION" />
</div>
</div>
<div class="row mt-3">
<div class="col-md-4" style="display: flex;
flex-direction: column;
justify-content: flex-end;">
<label for="txtEImporte" class="fw-bold" >Importe: </label>
<input class="form-control" id="txtEImporte" @bind-value="@ItemEnEdicion.IMPORTE" />
</div>
<div class="col-md-4">
<label for="txtEConceptoAP" class="fw-bold">Concepto Apl. Pres.: </label>
<input class="form-control" id="txtEConceptoAP" @bind-value="@ItemEnEdicion.CONCEPTOAPLPRES" />
</div>
<div class="col-md-4">
<label for="txtEAP" class="fw-bold">Aplicación Presupuestaria: </label>
<input class="form-control" id="txtEAP" @bind-value="@ItemEnEdicion.APLICACIONPRESUPUESTARIA" />
</div>
</div>
<div class="row mt-3">
<div class="col-md-4">
<label for="" class="fw-bold">Cotiza Seg. Social: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" @bind-value="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Cotiza IRPF: </label>
<input type="checkbox" class="form-check" id="chkECotizaIRPF" checked="@ItemEnEdicion.COTIZAIRPF" @bind-value="@ItemEnEdicion.COTIZAIRPF" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Extra: </label>
<input type="checkbox" class="form-check" id="chkEEXtra" checked="@ItemEnEdicion.EXTRA" @bind-value="@ItemEnEdicion.EXTRA" />
</div>
</div>
<div class="row">
<div class="col-md-4">
<label for="" class="fw-bold">Retribuciones: </label>
<input type="checkbox" class="form-check" id="chkERetribuciones" checked="@ItemEnEdicion.RETRIBUCIONES" @bind-value="@ItemEnEdicion.RETRIBUCIONES" />
</div>
<div class="col-md-4">
<label for="" class="fw-bold">Deducciones: </label>
<input type="checkbox" class="form-check" id="chkEDeducciones" checked="@ItemEnEdicion.DEDUCCIONES" @bind-value="@ItemEnEdicion.DEDUCCIONES" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(EsItemNuevo ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
@code {
[Parameter]
public TIPOSPUESTOSTRABAJO PuestoTrabajo { get; set; } = new TIPOSPUESTOSTRABAJO();
private HttpClient cliente = new HttpClient();
private List<CONCEPTOSTIPOSPUESTOSTRABAJO> itmList = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>();
private List<CONCEPTOSGENERALES> lConceptosGenerales = new List<CONCEPTOSGENERALES>();
private string tituloPopup = "";
private Modal popupGestionDatos = default;
private bool EsItemNuevo = false;
private CONCEPTOSTIPOSPUESTOSTRABAJO ItemEnEdicion { get; set; } = new CONCEPTOSTIPOSPUESTOSTRABAJO();
private EditContext? editContext;
List<CONCEPTOSTIPOSPUESTOSTRABAJO> listnom = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>();
List<ToastMessage> mensajes = new List<ToastMessage>();
protected override async Task OnInitializedAsync()
{
try
{
listnom= PuestoTrabajo.CONCEPTOSTIPOSPUESTOSTRABAJO.ToList();
foreach (CONCEPTOSTIPOSPUESTOSTRABAJO i in listnom) { itmList.Add(i); }
editContext=new EditContext(listnom);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
lConceptosGenerales = await Utilidades.ObtenerObjeto<List<CONCEPTOSGENERALES>>(cliente, "/api/CONCEPTOSGENERALES/");
}
catch (Exception e)
{
Console.WriteLine($"Error al obtener los datos: {e.Message}");
}
}
private async Task abrirPopupModificacion( CONCEPTOSTIPOSPUESTOSTRABAJO objeto, bool esNuevo)
{
ItemEnEdicion = Utilidades.ClonarObjeto(objeto);
EsItemNuevo = esNuevo;
if (!EsItemNuevo)
{
tituloPopup = "Modificando Concepto Tipo Trabajo";
}
else
{
tituloPopup = "Nuevo Concepto Tipo Trabajo";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
// GUARDAR
private async Task GuardarCambiosPopup()
{
try
{
ValidarDatos();
if (!editContext!.GetValidationMessages().Any())
{
string accion = EsItemNuevo ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private async Task GestionarDatos(string accion)
{
var copia = new List<CONCEPTOSTIPOSPUESTOSTRABAJO>(itmList);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
switch (accion)
{
case "update":
int indice = copia.FindIndex(x => x.IDCONCEPTOSTIPOSPUESTOTRABAJO == ItemEnEdicion.IDCONCEPTOSTIPOSPUESTOTRABAJO);
if (indice > -1)
{
copia[indice] = ItemEnEdicion;
}
var response = await Utilidades.ActualizarObjeto(cliente, "/api/CONCEPTOSTIPOSPUESTOSTRABAJO/" + ItemEnEdicion.IDCONCEPTOSTIPOSPUESTOTRABAJO, ItemEnEdicion, mensajes);
break;
case "create":
ItemEnEdicion.IDTIPOPUESTOSTRABAJO = PuestoTrabajo.IDTIPOPUESTO;
copia.Add(ItemEnEdicion);
var responsec = await Utilidades.NuevoObjeto(cliente, "/api/CONCEPTOSTIPOSPUESTOSTRABAJO/", ItemEnEdicion,mensajes);
break;
case "delete":
break;
}
cerrarPopupModificacion();
itmList = copia.ToList();
await InvokeAsync(StateHasChanged);
}
private void ValidarDatos()
{
}
private void MostrarErroresPopup()
{
// messageStore?.Clear();
// foreach (var field in new[] { nameof(descripcionItem) })
// {
// ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
// }
}
}

View File

@@ -17,8 +17,13 @@
@inject UserState UserState @inject UserState UserState
<div class="pagina"> <div class="pagina">
<div class="Cabecera"> <div class="d-flex">
<h6><small><i class="fas fa-user"></i><b> Tipos puesto de trabajo</b></small></h6> <div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Conceptos Tipos Puestos de Trabajo</b>
</h6>
</div>
<a href="/TipoPuestoTrabajo" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
</div> </div>
@if (lPuestos == null) @if (lPuestos == null)
@@ -54,6 +59,9 @@
Responsive="true" Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos"> PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns> <GridColumns>
@* <GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="IdTipoPuesto" PropertyName="IDTIPOPUESTO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NIVEL">
@context.IDTIPOPUESTO
</GridColumn> *@
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION"> <GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
<NavLink class="btn btn-link" href="@HashRed(context.IDTIPOPUESTO.ToString())">@context.DESCRIPCION</NavLink> <NavLink class="btn btn-link" href="@HashRed(context.IDTIPOPUESTO.ToString())">@context.DESCRIPCION</NavLink>
</GridColumn> </GridColumn>
@@ -186,7 +194,7 @@
// } // }
private string HashRed(string id) private string HashRed(string id)
{ {
string link = "/infoPers?cl=" + tsUtilidades.crypt.FEncS( string link = "/TipoPuestoTrabajo?cl=" + tsUtilidades.crypt.FEncS(
id, id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",

View File

@@ -0,0 +1,476 @@
@page "/TiposTramosSiltra"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina">
<div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipos tramos SILTRA</b></small></h6>
<button @onclick="@(() => abrirPopupModificacion(new TIPOSTRAMOS(), true))" class="btnOAAFAzul">Nuevo </button>
</div>
@if (lTiposTramoSiltra == null)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
else if (!lTiposTramoSiltra.Any())
{
<p>No se encontraron datos para mostrar.</p>
}
else
{
<div class="botonera col-12 gap-1" style="display:flex;" role="group">
</div>
<div style="display:flex; justify-content:start; gap:15px;width:100%"></div>
<div class="form-group mt-4 mb-4">
<input class="form-control" type="text" placeholder="Filtrar..."
@bind-value="Filter" @bind-value:event="oninput" />
</div>
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="TIPOSTRAMOS"
Class="table tablaRegPers"
Data="@lTiposTramoSiltra"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(@context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Código" PropertyName="CODIGO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CODIGO">
@context.CODIGO
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DESCRIPCION">
@context.DESCRIPCION
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Código Tramo Acumulado" PropertyName="IDCODIGOTRAMOACUMULA" FilterButtonCSSClass="hidden">
@if (@context.IDCODIGOTRAMOACUMULA != null)
{
lTiposTramoSiltra.First(x => x.IDCODIGOTRAMOACUMULA == @context.IDCODIGOTRAMOACUMULA);
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Solicitado Al Usuario" PropertyName="SOLICITADOALUSUARIO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.SOLICITADOALUSUARIO">
@if (context.SOLICITADOALUSUARIO)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Regimen Aplicación" PropertyName="IDREGIMENAPLICACION" FilterButtonCSSClass="hidden" >
@if (@context.IDREGIMENAPLICACION != null)
{
lRegimenAplicacion.First(x => x.IDENUMERACION == @context.IDREGIMENAPLICACION);
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Tipo Fichero XML" PropertyName="IDTIPOTRAMOFICHEROXML" FilterButtonCSSClass="hidden">
@if (@context.IDTIPOTRAMOFICHEROXML != null)
{
lTipoFicheroXml.First(x => x.IDENUMERACION == @context.IDTIPOTRAMOFICHEROXML);
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Solicitado Al Usuario" PropertyName="SEMANDAIMPORTEEMPRESA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.SEMANDAIMPORTEEMPRESA">
@if (context.SEMANDAIMPORTEEMPRESA)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Solicitado Al Usuario" PropertyName="MODIFICABLE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.MODIFICABLE">
@if (context.MODIFICABLE)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="TIPOSTRAMOS" HeaderText="Solicitado Al Usuario" PropertyName="RESTAENACUMULADO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.RESTAENACUMULADO">
@if (context.RESTAENACUMULADO)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
</GridColumns>
</Grid>
</div>
<!-- Vista móvil -->
<div class="tablaMov">
@foreach (var itm in lTiposTramoSiltra)
{
var collapseId = $"collapse{itm.IDTIPOTRAMOS}";
<div class="card collapse-card Aceptada">
<div class="card-header mb-1" data-bs-toggle="collapse" data-bs-target="#@collapseId" aria-expanded="false" aria-controls="@collapseId">
<h5 class="mb-0">@itm.DESCRIPCION</h5>
</div>
<div id="@collapseId" class="collapse">
<div class="card-body">
<dl class="row">
<dt class="col-sm-3">Código</dt>
<dd class="col-sm-9">@itm.CODIGO</dd>
<dt class="col-sm-3">Descripcion</dt>
<dd class="col-sm-9">@itm.DESCRIPCION</dd>
<dt class="col-sm-3">Código Tramo Acumulado</dt>
<dd class="col-sm-9">
@if (@itm.IDCODIGOTRAMOACUMULANavigation != null)
{
@itm.IDCODIGOTRAMOACUMULANavigation.CODIGO
}
</dd>
<dt class="col-sm-3">Solicitado al usuario</dt>
<dd class="col-sm-9">
@itm.SOLICITADOALUSUARIO
@* @if(itm.OBSOLETO)
{
<i class="fa-regular fa-square-check"></i>
}
else
{
<i class="fa-regular fa-square-uncheck"></i>
} *@
</dd>
<dt class="col-sm-3">Regimen Aplicación</dt>
<dd class="col-sm-9">@itm.IDREGIMENAPLICACIONNavigation</dd>
<dt class="col-sm-3">Tipo Fichero XML</dt>
<dd class="col-sm-9">
@if (@itm.IDTIPOTRAMOFICHEROXMLNavigation != null)
{
@itm.IDTIPOTRAMOFICHEROXMLNavigation.DESCRIPCION
}
</dd>
<dt class="col-sm-3">Se Manda Importe a Empresa</dt>
<dd class="col-sm-9">
@itm.SEMANDAIMPORTEEMPRESA
@* @if(itm.OBSOLETO)
{
<i class="fa-regular fa-square-check"></i>
}
else
{
<i class="fa-regular fa-square-uncheck"></i>
} *@
</dd>
<dt class="col-sm-3">Modificable</dt>
<dd class="col-sm-9">
@itm.MODIFICABLE
@* @if(itm.OBSOLETO)
{
<i class="fa-regular fa-square-check"></i>
}
else
{
<i class="fa-regular fa-square-uncheck"></i>
} *@
</dd>
<dt class="col-sm-3">Resta en Acumulado</dt>
<dd class="col-sm-9">
@itm.RESTAENACUMULADO
@* @if(itm.OBSOLETO)
{
<i class="fa-regular fa-square-check"></i>
}
else
{
<i class="fa-regular fa-square-uncheck"></i>
} *@
</dd>
<dd class="col-sm-12">
<button @onclick="@(() => abrirPopupModificacion(@itm, true))" class="btnOAAFAzul">Editar </button>
</dd>
</dl>
</div>
</div>
</div>
}
</div>
}
</div>
<EditForm EditContext="@editContext" OnValidSubmit="GuardarCambiosPopup" OnInvalidSubmit="@MostrarErroresPopup" FormName="TiposTramoSiltraForm">
<DataAnnotationsValidator></DataAnnotationsValidator>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Codigo: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.CODIGO" />
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Descripción: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.DESCRIPCION" />
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Codigo Tramo Acumulado: </label>
<InputSelect @bind-Value="@ItemEnEdicion.IDCODIGOTRAMOACUMULA" class="form-select">
<option value="">Seleccionar</option>
@if (lTiposTramoSiltra != null)
{
@foreach (var enumera in lTiposTramoSiltra)
{
<option value="@enumera.IDTIPOTRAMOS">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Regimen Aplicación: </label>
<InputSelect @bind-Value="ItemEnEdicion.IDREGIMENAPLICACION" class="form-select">
<option value="">Seleccionar</option>
@if (lRegimenAplicacion != null)
{
@foreach (var enumera in lRegimenAplicacion)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-12">
<label for="txtEDesc" class="fw-bold">Tipo Fichero XML: </label>
<InputSelect @bind-Value="ItemEnEdicion.IDTIPOTRAMOFICHEROXML" class="form-select">
<option value="">Seleccionar</option>
@if (lTipoFicheroXml != null)
{
@foreach (var enumera in lTipoFicheroXml)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</div>
<div class="col-md-6">
<label for="" class="fw-bold">Se Manda Importe a Empresa: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.SEMANDAIMPORTEEMPRESA" @bind-value="@ItemEnEdicion.SEMANDAIMPORTEEMPRESA" />
</div>
<div class="col-md-6">
<label for="" class="fw-bold">Modificable: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.MODIFICABLE" @bind-value="@ItemEnEdicion.MODIFICABLE" />
</div>
<div class="col-md-6">
<label for="" class="fw-bold">Resta en Acumulado: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.RESTAENACUMULADO" @bind-value="@ItemEnEdicion.RESTAENACUMULADO" />
</div>
<div class="col-md-6">
<label for="" class="fw-bold">Solicitado Al Usuario: </label>
<input type="checkbox" class="form-check" id="chkECotizaSS" checked="@ItemEnEdicion.SOLICITADOALUSUARIO" @bind-value="@ItemEnEdicion.SOLICITADOALUSUARIO" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(EsItemNuevo ? "Añadir" : "Modificar")</Button>
</FooterTemplate>
</Modal>
</EditForm>
@code {
private List<TIPOSTRAMOS> lTiposTramoSiltra = new List<TIPOSTRAMOS>();
private List<TIPOSTRAMOS> banco = new List<TIPOSTRAMOS>();
private string tituloPopup = "";
private Modal popupGestionDatos = default;
private bool EsItemNuevo = false;
private TIPOSTRAMOS ItemEnEdicion { get; set; } = new TIPOSTRAMOS();
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext? editContext;
private List<ENUMERACIONES> lTipoFicheroXml = new List<ENUMERACIONES>();
private List<ENUMERACIONES> lRegimenAplicacion = new List<ENUMERACIONES>();
private string _filter = "";
public string Filter
{
get => _filter;
set
{
if (_filter != value)
{
_filter = value;
AplicarFiltros();
}
}
}
private void AplicarFiltros()
{
lTiposTramoSiltra = banco.Where(per =>
string.IsNullOrEmpty(Filter) ||
Utilidades.RemoveDiacritics(per.CODIGO).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
Utilidades.RemoveDiacritics(per.DESCRIPCION.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase)
).ToList();
UserState.CurrentPage = 1;
}
// Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false;
private async Task ToggleVerTodos()
{
if (!verTodosActive)
{
verTodosActive = true;
var token = UserState.Token;
var client = HttpClientFactory.CreateClient();
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/TIPOSTRAMOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
banco = JsonConvert.DeserializeObject<List<TIPOSTRAMOS>>(resultContent)
?? new List<TIPOSTRAMOS>();
}
else
{
verTodosActive = false;
var token = UserState.Token;
var client = HttpClientFactory.CreateClient();
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/api/TIPOSTRAMOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
banco = JsonConvert.DeserializeObject<List<TIPOSTRAMOS>>(resultContent)
?? new List<TIPOSTRAMOS>();
}
banco = banco
.OrderBy(x => x.CODIGO)
.ToList();
lTiposTramoSiltra = banco;
UserState.CurrentPage = 1;
Filter = "";
}
protected override async Task OnInitializedAsync()
{
verTodosActive = false;
var token = UserState.Token;
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
editContext = new EditContext(lTiposTramoSiltra);
var resultPersonas = await cliente.GetAsync("/api/TIPOSTRAMOS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
banco = JsonConvert.DeserializeObject<List<TIPOSTRAMOS>>(resultContent)
?? new List<TIPOSTRAMOS>();
banco = banco.OrderBy(x => x.CODIGO)
.ToList();
lTiposTramoSiltra = banco;
lTipoFicheroXml = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPTRAXML");
lRegimenAplicacion = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/REGAPL");
}
private async Task abrirPopupModificacion(TIPOSTRAMOS objeto, bool esNuevo)
{
ItemEnEdicion = Utilidades.ClonarObjeto(objeto);
EsItemNuevo = esNuevo;
if (!EsItemNuevo)
{
tituloPopup = "Modificando Tipo Tramo Siltra";
}
else
{
tituloPopup = "Nuevo Tipo Tramo Siltra";
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
// GUARDAR
private async Task GuardarCambiosPopup()
{
try
{
ValidarDatos();
if (!editContext!.GetValidationMessages().Any())
{
string accion = EsItemNuevo ? "create" : "update";
await GestionarDatos(accion);
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Warning,
Message = $"Debe rellenar los campos obligatorios.",
});
}
}
catch (Exception)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"Error al guardar.",
});
}
}
private async Task GestionarDatos(string accion)
{
var copia = new List<TIPOSTRAMOS>(lTiposTramoSiltra);
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
switch (accion)
{
case "update":
int indice = copia.FindIndex(x => x.IDTIPOTRAMOS == ItemEnEdicion.IDTIPOTRAMOS);
if (indice > -1)
{
copia[indice] = ItemEnEdicion;
}
var response = await Utilidades.ActualizarObjeto(cliente, "/api/TIPOSTRAMOS/" + ItemEnEdicion.IDTIPOTRAMOS, ItemEnEdicion, mensajes);
break;
case "create":
copia.Add(ItemEnEdicion);
var responsec = await Utilidades.NuevoObjeto(cliente, "/api/TIPOSTRAMOS/", ItemEnEdicion, mensajes);
break;
case "delete":
break;
}
cerrarPopupModificacion();
lTiposTramoSiltra = copia.OrderBy(x => x.CODIGO).ToList();
await InvokeAsync(StateHasChanged);
}
private void ValidarDatos()
{
}
private void MostrarErroresPopup()
{
// messageStore?.Clear();
// foreach (var field in new[] { nameof(descripcionItem) })
// {
// ValidarYActualizar(new ChangeEventArgs { Value = typeof(enumeraciones).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
// }
}
}

View File

@@ -0,0 +1,363 @@
@page "/ValorNomina"
@page "/ValorNomina/{cl}"
@using BlazorBootstrap
@using GestionPersonalWeb.Components.Pages.FicherosMaestros.TipoPuestoTrabajoComponents
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@* <div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipo puesto de trabajo: @puestoTrabajo.DESCRIPCION </b></small></h6>
</div> *@
<style>
.caj {
padding: 20px;
border: solid 1px grey
}
.caja {
padding: 20px;
border: solid 1px grey;
margin:5px;
}
</style>
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="datos-personales-container mt-3">
<div>
<div>
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar" @onclick="GuardarPuestoTrabajo" /></div>
<div class="caj">
<div class="col-md-12">
<div class="row mb-3">
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Fecha Inicio: </label>
<input class="form-control" type="date" id="txtdni" @bind-value="@oValorNomina.FECHAINCIO" />
</div>
<div class="col-md-4">
<label for="txtdni" class="fw-bold">Fecha Fin: </label>
<input class="form-control" type="date" id="txtdni" @bind-value="@oValorNomina.FECHAFIN" />
</div>
</div>
</div>
</div>
<div class="mt-3 mb-5" style="">
<div class="col-md-12 mb-3">
<h6><b> Valor Nomina </b></h6>
</div>
<div class="row">
<div class="col-md-2">
<div class="caja">
<h6><b> Sueldos </b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOA1" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOA2" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOB" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOC1" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOC2" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOE" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Sueldos Extra</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOA1X" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOA2X" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOBX" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOC1X" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOC2X" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.SUELDOEX" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Trienio Administración</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMA1" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMA2" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMB" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMC1" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMC2" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADME" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Trienio Administración Extra</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMA1X" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMA2X" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMBX" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMC1X" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMC2X" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIADMEX" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Trienio Oficina Antifraude</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARA1" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARA2" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARB" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARC1" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARC2" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARE" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Trienio Oficina Antifraude Extra</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARA1X" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARA2X" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARBX" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARC1X" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPARC2X" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.TRIPAREX" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Complemento Carrera Tramo I</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA1" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA2" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRB" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC1" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC2" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRE" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Complemento Carrera Tramo II</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA1II" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA2II" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRBII" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC1II" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC2II" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARREII" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Complemento Carrera Tramo III</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA1III" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA2III" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRBIII" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC1III" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC2III" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARREIII" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Complemento Carrera Tramo IV</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA1IV" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA2IV" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRBIV" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC1IV" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC2IV" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARREIV" />
</div>
</div>
<div class="col-md-2">
<div class="caja">
<h6><b>Complemento Carrera Tramo V</b></h6>
<label for="txtdni" class="fw-bold">A1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA1V" />
<label for="txtdni" class="fw-bold">A2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRA2V" />
<label for="txtdni" class="fw-bold">B: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRBV" />
<label for="txtdni" class="fw-bold">C1: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC1V" />
<label for="txtdni" class="fw-bold">C2: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARRC2V" />
<label for="txtdni" class="fw-bold">E: </label>
<input class="form-control" id="txtdni" @bind-value="@oValorNomina.COMCARREV" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
[Parameter]
public string? cl { get; set; } = "";
private static bdAntifraude.db.VALORESNOMINA oValorNomina = new VALORESNOMINA();
private EditContext editContext = new EditContext(oValorNomina);
private HttpClient cliente = new HttpClient();
private ValidationMessageStore? messageStore;
private string errorMessage = "";
List<ToastMessage> mensajes = new List<ToastMessage>();
public bool mostrar { get; set; } = true;
public bool mostrarBtn { get; set; } = false;
protected override async Task OnInitializedAsync()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
if (string.IsNullOrEmpty(cl))
{
oValorNomina = new VALORESNOMINA();
mostrarBtn = true;
}
else
{
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
string idDesencriptado = Utilidades.Desencriptar(cl);
int id = int.Parse(idDesencriptado);
var response = await cliente.GetAsync($"/api/VALORESNOMINA/{id}");
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos del Tipo de Trabajo. Código: {response.StatusCode}");
}
var resultContent = await response.Content.ReadAsStringAsync();
oValorNomina = JsonConvert.DeserializeObject<VALORESNOMINA>(resultContent) ?? throw new Exception("Error al deserializar los datos.");
}
editContext = new EditContext(oValorNomina);
messageStore = new ValidationMessageStore(editContext);
mostrar = false;
}
catch (Exception ex)
{
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
mostrar = false;
}
finally
{
mostrar = false;
}
}
private async Task GuardarPuestoTrabajo()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
if (!editContext.GetValidationMessages().Any())
{
if (oValorNomina.IDVALNOMINA == 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/VALORESNOMINA", oValorNomina, mensajes);
if (response != null)
{
oValorNomina = response;
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
await InvokeAsync(StateHasChanged);
}
else//Guardar
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/VALORESNOMINA/" + oValorNomina.IDVALNOMINA, oValorNomina, mensajes);
}
}
else
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = Utilidades.ListaErroresHtml(editContext.GetValidationMessages()),
});
}
}
}

View File

@@ -1,5 +1,104 @@
<h3>ValoresNomina</h3> @page "/ValoresNomina"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using GestionPersonalWeb.Models
@using BlazorBootstrap
@using bdAntifraude.db
@using Microsoft.AspNetCore.Components
@rendermode InteractiveServer
@inject IJSRuntime JS
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div class="pagina">
<div class="d-flex">
<div class="cabecera">
<h6 style="padding-top: 13px;padding-right: 15px;">
<b>Valores Nomina</b>
</h6>
</div>
<a href="/ValorNomina" class="btnOAAFAzul" style="text-decoration:none">Nuevo </a>
</div>
@if (lValoresNomina == null)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
else if (!lValoresNomina.Any())
{
<p>No se encontraron datos para mostrar.</p>
}
else
{
<div class="botonera col-12 gap-1" style="display:flex;" role="group">
</div>
<div style="display:flex; justify-content:start; gap:15px;width:100%"></div>
<div style="overflow-x:auto;" class="">
<Grid TItem="VALORESNOMINA"
Class="table tablaRegPers"
Data="@lValoresNomina"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="VALORESNOMINA" HeaderText="Fecha Inicio" PropertyName="FECHAINCIO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHAINCIO">
<NavLink class="btn btn-link" href="@HashRed(context.IDVALNOMINA.ToString())">@context.FECHAINCIO</NavLink>
</GridColumn>
<GridColumn TItem="VALORESNOMINA" HeaderText="Fecha Fin" PropertyName="FECHAFIN" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHAFIN">
@context.FECHAFIN
</GridColumn>
</GridColumns>
</Grid>
</div>
<!-- Vista móvil -->
}
</div>
@code { @code {
List<VALORESNOMINA> lValoresNomina = new List<VALORESNOMINA>();
private List<VALORESNOMINA> cuentasCoti = new List<VALORESNOMINA>();
// Bandera que indica si se está en modo "Ver Todos"
private bool verTodosActive = false;
List<ToastMessage> mensajes = new List<ToastMessage>();
protected override async Task OnInitializedAsync()
{
verTodosActive = false;
var token = UserState.Token;
var cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var resultPersonas = await cliente.GetAsync("/api/VALORESNOMINA");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
cuentasCoti = JsonConvert.DeserializeObject<List<VALORESNOMINA>>(resultContent) ?? new List<VALORESNOMINA>();
cuentasCoti = cuentasCoti.ToList();
lValoresNomina = cuentasCoti;
}
private string HashRed(string id)
{
string link = "/ValorNomina?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
} }

View File

@@ -383,7 +383,7 @@
if (persona.IDFICHEROFOTO != null) if (persona.IDFICHEROFOTO != null)
{ {
var responsef = await Utilidades.ActualizarObjeto(cliente, "/api/FICHEROS/" + fi.IDFICHERO, fi); var responsef = await Utilidades.ActualizarObjeto(cliente, "/api/FICHEROS/" + fi.IDFICHERO, fi);
persona.IDFICHEROFOTO = responsef.IDFICHERO; //persona.IDFICHEROFOTO = responsef.IDFICHERO;
} }
else else
@@ -404,7 +404,9 @@
} }
else//Actualizar else//Actualizar
{ {
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + persona.IDPERSONA, persona); var personaGuardar = persona;
personaGuardar.NOMINATRABAJADORCABECERA = null;
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + personaGuardar.IDPERSONA, personaGuardar);
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri); var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue)) { cl = clValue; } if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue)) { cl = clValue; }
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory); cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);

View File

@@ -22,19 +22,19 @@
<div class="row mb-3 mt-4" style=" padding: 20px;border:solid 1px grey"> <div class="row mb-3 mt-4" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-6"> <div class="col-md-6">
<label for="txtApellidos" class="fw-bold widthLabel li-height50">Apellidos: </label> <label for="txtApellidos" class="fw-bold widthLabel li-height50">Apellidos: </label>
<input class="form-control" id="txtApellidos" @bind-value="@Persona.APELLIDOS" /> <input class="form-control" readonly="readonly" id="txtApellidos" @bind-value="@Persona.APELLIDOS" />
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="txtNombre" class="fw-bold widthLabel li-height50">Nombre: </label> <label for="txtNombre" class="fw-bold widthLabel li-height50">Nombre: </label>
<input class="form-control" id="txtNombre" @bind-value="@Persona.NOMBRE" /> <input class="form-control" readonly="readonly" id="txtNombre" @bind-value="@Persona.NOMBRE" />
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="txtNIF" class="fw-bold widthLabel li-height50">DNI: </label> <label for="txtNIF" class="fw-bold widthLabel li-height50">DNI: </label>
<input class="form-control" id="txtNIF" @bind-value="@Persona.NIF" /> <input class="form-control" readonly="readonly" id="txtNIF" @bind-value="@Persona.NIF" />
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="txtsexo" class="fw-bold widthLabel li-height50">Sexo: </label> <label for="txtsexo" class="fw-bold widthLabel li-height50">Sexo: </label>
<InputSelect @bind-Value="Persona.IDSEXO" class="form-select"> <InputSelect readonly="readonly" @bind-Value="Persona.IDSEXO" class="form-select">
<option value="">Seleccionar</option> <option value="">Seleccionar</option>
@if (lSexo != null) @if (lSexo != null)
{ {
@@ -47,7 +47,7 @@
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="txtTiCont" class="fw-bold widthLabel li-height50">Tipo Contrato: </label> <label for="txtTiCont" class="fw-bold widthLabel li-height50">Tipo Contrato: </label>
<InputSelect @bind-Value="Persona.IDCONTRATO" class="form-select"> <InputSelect readonly="readonly" @bind-Value="Persona.IDCONTRATO" class="form-select">
<option value="">Seleccionar</option> <option value="">Seleccionar</option>
@if (lTipoContra != null) @if (lTipoContra != null)
{ {
@@ -60,6 +60,20 @@
@* <input class="form-control" id="txtTiCont" value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@ @* <input class="form-control" id="txtTiCont" value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@
</div> </div>
</div> </div>
<input type="button" value="Guardar Nómina" class="btnOAAFAzul" @onclick="GuardarNomina" />
<Modal @ref="popupConfirmacion" Title="Confirmar Guardar persona" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<p>Se van a dar de alta o modificar datos de la persona seleccionada ¿desea continuar?</p>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="CerrarConfirmacion">Cancelar</Button>
<Button @onclick="GuardarNomina" Color="ButtonColor.Primary">Aceptar</Button>
</FooterTemplate>
</Modal>
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<div> <div>
<Tabs @ref=tabsDtsPer style="margin-top:25px; font-size:12px; gap:0;" OnShown="@(args => OnTabShownAsync(args))"> <Tabs @ref=tabsDtsPer style="margin-top:25px; font-size:12px; gap:0;" OnShown="@(args => OnTabShownAsync(args))">
<Tab Title="Nómina" Name="tabNomina"> <Tab Title="Nómina" Name="tabNomina">
@@ -125,11 +139,11 @@
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 1: </label> <label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 1: </label>
@if (Nomina.IDSINDICATO1Navigation != null) @if (Nomina.IDSINDICATO1Navigation != null)
{ {
<input class="form-control" id="txtFecha" @bind-value="@Nomina.IDSINDICATO1Navigation.VALORNUMERICO1" /> <input class="form-control" id="txtFecha" readonly="readonly" @bind-value="@Nomina.IDSINDICATO1Navigation.VALORNUMERICO1" />
} }
else else
{ {
<input class="form-control" /> <input class="form-control" />
} }
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
@@ -149,7 +163,7 @@
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 2: </label> <label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 2: </label>
@if (Nomina.IDSINDICATO2Navigation != null) @if (Nomina.IDSINDICATO2Navigation != null)
{ {
<input class="form-control" id="txtFecha" @bind-value="@Nomina.IDSINDICATO2Navigation.VALORNUMERICO1" /> <input class="form-control" id="txtFecha" readonly="readonly" @bind-value="@Nomina.IDSINDICATO2Navigation.VALORNUMERICO1" />
} }
else else
{ {
@@ -591,7 +605,7 @@
@code { @code {
[Parameter] [Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS(); public PERSONAS Persona { get; set; } = new PERSONAS();
public NOMINATRABAJADORCABECERA Nomina { get; set; } = new NOMINATRABAJADORCABECERA(); public static NOMINATRABAJADORCABECERA Nomina { get; set; } = new NOMINATRABAJADORCABECERA();
private HttpClient cliente = new HttpClient(); private HttpClient cliente = new HttpClient();
[Parameter] [Parameter]
public EventCallback OnPersonaActualizada { get; set; } public EventCallback OnPersonaActualizada { get; set; }
@@ -605,10 +619,23 @@
private List<PERIODOSSILTRA> lSiltra= new List<PERIODOSSILTRA>(); private List<PERIODOSSILTRA> lSiltra= new List<PERIODOSSILTRA>();
private ValidationMessageStore? messageStore; private ValidationMessageStore? messageStore;
private string errorMessage = ""; private string errorMessage = "";
public string nifDesencriptado { get; set; }
public int NominaDesencriptada { get; set; }
public string? cl { get; set; } = ""; public string? cl { get; set; } = "";
public string? cn { get; set; } = ""; public string? cn { get; set; } = "";
private Tabs tabsDtsPer { get; set; } = new Tabs(); private Tabs tabsDtsPer { get; set; } = new Tabs();
private Tabs tabsDtsNom { get; set; } = new Tabs(); private Tabs tabsDtsNom { get; set; } = new Tabs();
private Modal popupConfirmacion = default!;
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext editContext = new EditContext(Nomina);
private async Task abrirGuardar()
{
await popupConfirmacion.ShowAsync();
}
private async Task CerrarConfirmacion()
{
await popupConfirmacion.HideAsync();
}
private async Task OnTabShownAsync(TabsEventArgs args) private async Task OnTabShownAsync(TabsEventArgs args)
{ {
var panelActivo = args.ActiveTabName; var panelActivo = args.ActiveTabName;
@@ -626,21 +653,16 @@
{ {
cl = clValue; cl = clValue;
} }
// if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cn", out var cnValue))
// {
// cn = cnValue;
// }
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory); cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
string clDesencriptado = tsUtilidades.crypt.FEncS(cl, string clDesencriptado = tsUtilidades.crypt.FEncS(cl,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
-875421649); -875421649);
var clCn = clDesencriptado.Split("-"); var clCn = clDesencriptado.Split("-");
var nifDesencriptado = clCn[0]; nifDesencriptado = clCn[0];
var NominaDesencriptada = Int32.Parse(clCn[1]); NominaDesencriptada = Int32.Parse(clCn[1]);
// int NominaDesencriptada = Int32.Parse(tsUtilidades.crypt.FEncS(cn, // int NominaDesencriptada = Int32.Parse(tsUtilidades.crypt.FEncS(cn,
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", // "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", // "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
@@ -678,8 +700,6 @@
Console.WriteLine($"Error durante la inicialización: {ex.Message}"); Console.WriteLine($"Error durante la inicialización: {ex.Message}");
} }
} }
private string HashRed(string id) private string HashRed(string id)
{ {
string link = "/PeriodoSiltra?cl=" + tsUtilidades.crypt.FEncS( string link = "/PeriodoSiltra?cl=" + tsUtilidades.crypt.FEncS(
@@ -689,8 +709,6 @@
875421649); 875421649);
return link; return link;
} }
private async Task CargarSelects() private async Task CargarSelects()
{ {
try try
@@ -712,6 +730,66 @@
} }
} }
private async Task GuardarNomina()
{
CerrarConfirmacion();
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
// ValidarTodos();
if (!editContext.GetValidationMessages().Any())
{
if (Nomina.IDNOMINATRABAJADOR== 0)//Nuevo
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/NOMINATRABAJADORCABECERA", Nomina);
string link = "/NomPers?cl=" + tsUtilidades.crypt.FEncS(response.IDNOMINATRABAJADOR.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
NavigationManager.NavigateTo(link, forceLoad: true);
}
else//Actualizar
{
// Nomina.IMPORTESEGURO = null;
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/NOMINATRABAJADORCABECERA/" + Nomina.IDNOMINATRABAJADOR, Nomina);
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue)) { cl = clValue; }
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var responsePers = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
if (!responsePers.IsSuccessStatusCode)
{
throw new Exception($"Error al obtener los datos de la persona. Código: {responsePers.StatusCode}");
}
var resultContentPers = await responsePers.Content.ReadAsStringAsync();
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContentPers) ?? throw new Exception("Error al deserializar los datos de la persona.");
Nomina = Persona.NOMINATRABAJADORCABECERA?.FirstOrDefault(x => x.IDNOMINA == NominaDesencriptada);
mensajes.Add(new ToastMessage
{
Type = ToastType.Primary,
Message = $"Guardado correctamente.",
});
}
}
else
{
var html = "";
html += "Revise los errores antes de guardar:";
foreach (string m in editContext.GetValidationMessages())
{
html += "\n" + m + ". ";
}
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = html,
});
}
}
} }

View File

@@ -1,15 +1,18 @@
using System.Net.Http.Headers; using BlazorBootstrap;
using Newtonsoft.Json;
using System.Linq.Expressions;
using Serialize.Linq.Serializers;
using System.Text;
using System.Globalization;
using tsDocumentos;
using Microsoft.JSInterop;
using ClosedXML.Excel; using ClosedXML.Excel;
//using System.Drawing; //using System.Drawing;
using ClosedXML.Excel; using ClosedXML.Excel;
using DevExpress.DataAccess.Native.Web;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.JSInterop;
using MigraDocCore.DocumentObjectModel; using MigraDocCore.DocumentObjectModel;
using Newtonsoft.Json;
using Serialize.Linq.Serializers;
using System.Globalization;
using System.Linq.Expressions;
using System.Net.Http.Headers;
using System.Text;
using tsDocumentos;
namespace GestionPersonalWeb.Models namespace GestionPersonalWeb.Models
@@ -111,7 +114,7 @@ namespace GestionPersonalWeb.Models
return default(T); return default(T);
} }
} }
public static async Task<T> NuevoObjeto<T>(HttpClient cliente, String uri, T objeto) public static async Task<T> NuevoObjeto<T>(HttpClient cliente, String uri, T objeto, List<ToastMessage> mensajes = null)
{ {
try try
{ {
@@ -122,25 +125,80 @@ namespace GestionPersonalWeb.Models
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
var resultContent = await response.Content.ReadAsStringAsync(); var resultContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(resultContent); return JsonConvert.DeserializeObject<T>(resultContent);
} }
else else
{ {
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"{response}",
AutoHide = false
});
}
return default(T); return default(T);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
var mess = ex.ToString(); var mess = ex.ToString();
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"{mess}",
AutoHide = false
});
}
return default(T); return default(T);
} }
} }
public static async Task<T> ActualizarObjeto<T>(HttpClient cliente, String uri, T objeto) //public static async Task<T> ActualizarObjeto<T>(HttpClient cliente, String uri, T objeto)
//{
// try
// {
// // Limpiar propiedades de navegación
// VaciarPropiedadesDeNavegacion(objeto);
// // Realizar la solicitud PUT
// var response = await cliente.PutAsJsonAsync(uri, objeto);
// if (response.IsSuccessStatusCode)
// {
// var resultContent = await response.Content.ReadAsStringAsync();
// return JsonConvert.DeserializeObject<T>(resultContent);
// }
// else
// {
// Console.WriteLine($"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}");
// return default(T);
// }
// }
// catch (Exception ex)
// {
// var mess = ex.ToString();
// return default(T);
// }
//}
public static async Task<String> ActualizarObjeto<T>(HttpClient cliente, String uri, T objeto, List<ToastMessage> mensajes = null)
{ {
try try
{ {
// Limpiar propiedades de navegación // Limpiar propiedades de navegación
VaciarPropiedadesDeNavegacion(objeto); VaciarPropiedadesDeNavegacion(objeto);
@@ -149,19 +207,40 @@ namespace GestionPersonalWeb.Models
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
var resultContent = await response.Content.ReadAsStringAsync(); //var resultContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(resultContent); //return JsonConvert.DeserializeObject<T>(resultContent);
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
return "Ok";
} }
else else
{ {
Console.WriteLine($"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}"); //Console.WriteLine($"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}");
return default(T); //return default(T);
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"{response}",
AutoHide = false
});
}
return $"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}";
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
var mess = ex.ToString(); var mess = ex.ToString();
return default(T); return mess;
} }
} }
public static async Task ExportarExcelEnBrowser<T>(IJSRuntime js, IEnumerable<T> datos, byte[] logoBytes, XLColor headerColor, string nombreFichero) public static async Task ExportarExcelEnBrowser<T>(IJSRuntime js, IEnumerable<T> datos, byte[] logoBytes, XLColor headerColor, string nombreFichero)
@@ -201,6 +280,35 @@ namespace GestionPersonalWeb.Models
} }
} }
public static string Encriptar(object valor) {
return tsUtilidades.crypt.FEncS(valor.ToString(),
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
}
public static string Desencriptar(object valor) {
return tsUtilidades.crypt.FEncS(valor.ToString(),
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
-875421649);
}
public static string ListaErroresHtml(IEnumerable<String> lista) {
var html = "";
html += "Revise los errores antes de guardar:";
foreach (string m in lista)
{
html += "\n" + m + ". ";
}
return html;
}
public static T ClonarObjeto<T>(T objeto)
{
var json = System.Text.Json.JsonSerializer.Serialize(objeto);
return System.Text.Json.JsonSerializer.Deserialize<T>(json);
}
} }
} }

View File

@@ -1,4 +1,4 @@
@page "/ListadoPersonas"  @page "/ListadoPersonas"
@using System.Net.Http.Headers @using System.Net.Http.Headers
@using System.Linq.Expressions @using System.Linq.Expressions
@using Newtonsoft.Json @using Newtonsoft.Json

View File

@@ -0,0 +1,70 @@
using bdAntifraude.db;
using bdAntifraude.dbcontext;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.EntityFrameworkCore;
using Serialize.Linq.Serializers;
using System.Linq.Expressions;
using SwaggerAntifraude.Controllers;
namespace SwaggerAntifraude.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class CONCEPTOSTIPOSPUESTOSTRABAJOController : GenericoController<CONCEPTOSTIPOSPUESTOSTRABAJO, int>
{
public CONCEPTOSTIPOSPUESTOSTRABAJOController()
: base()
{
}
[HttpGet]
public override async Task<IActionResult> GetAll()
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
var entities = await context.CONCEPTOSTIPOSPUESTOSTRABAJO
//.Include(x => x.IDTIPOPERSONANavigation)
.AsNoTracking()
.ToListAsync();
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
[Authorize(Policy = "LecturaPolicy")]
[HttpGet("{id}")]
public override IActionResult GetById(int id)
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
//var dbSet = context.Set<VIDA_ADMINISTRATIVA>();
var entities = context.CONCEPTOSTIPOSPUESTOSTRABAJO
.AsNoTracking()
.FirstOrDefault(v => v.IDCONCEPTOSTIPOSPUESTOTRABAJO == id);
if (entities == null)
return NotFound();
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
}
}

View File

@@ -26,10 +26,10 @@ namespace SwaggerAntifraude.Controllers
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false)) using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{ {
//var dbSet = context.Set<VIDA_ADMINISTRATIVA>(); //var dbSet = context.Set<VIDA_ADMINISTRATIVA>();
var entities = context.PERIODOSSILTRA var entities = context.NOMINATRABAJADORCABECERA
.Include(x => x.TRAMOSSILTRA) .Include(x => x.IDPERSONANavigation)
.AsNoTracking() .AsNoTracking()
.FirstOrDefault(v => v.IDPERIODOSILTRA == id); .FirstOrDefault(v => v.IDNOMINATRABAJADOR == id);

View File

@@ -27,6 +27,7 @@ namespace SwaggerAntifraude.Controllers
{ {
var entities = await context.TIPOSPUESTOSTRABAJO var entities = await context.TIPOSPUESTOSTRABAJO
.Include(x => x.IDTIPOPERSONANavigation) .Include(x => x.IDTIPOPERSONANavigation)
.Include(x=> x.CONCEPTOSTIPOSPUESTOSTRABAJO).ThenInclude(x=> x.IDCONCEPTOGENERALNavigation)
.AsNoTracking() .AsNoTracking()
.ToListAsync(); .ToListAsync();
return Ok(entities); return Ok(entities);
@@ -47,13 +48,12 @@ namespace SwaggerAntifraude.Controllers
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false)) using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{ {
//var dbSet = context.Set<VIDA_ADMINISTRATIVA>(); //var dbSet = context.Set<VIDA_ADMINISTRATIVA>();
var entities = context.NOMINAS var entities = context.TIPOSPUESTOSTRABAJO
.Include(x => x.IDTIPONavigation) .Include(x => x.IDTIPOPERSONANavigation)
.Include(x => x.IDSITUACIONNOMINANavigation) .Include(x => x.CONCEPTOSTIPOSPUESTOSTRABAJO).ThenInclude(x => x.IDCONCEPTOGENERALNavigation)
//.Include(x => x.NOMINATRABAJADORCABECERA)
//.ThenInclude(pr => pr.IDPERSONANavigation) //.ThenInclude(pr => pr.IDPERSONANavigation)
.AsNoTracking() .AsNoTracking()
.FirstOrDefault(v => v.IDNOMINAS == id); .FirstOrDefault(v => v.IDTIPOPUESTO == id);

View File

@@ -1,5 +1,8 @@
using bdAntifraude.db; using bdAntifraude.db;
using bdAntifraude.dbcontext;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace SwaggerAntifraude.Controllers namespace SwaggerAntifraude.Controllers
{ {
@@ -11,5 +14,30 @@ namespace SwaggerAntifraude.Controllers
: base() : base()
{ {
} }
[HttpGet]
public override async Task<IActionResult> GetAll()
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
var entities = await context.TIPOSTRAMOS
.Include(x => x.IDTIPOTRAMOFICHEROXMLNavigation)
.Include(x => x.IDCODIGOTRAMOACUMULANavigation)
.Include(x => x.IDREGIMENAPLICACIONNavigation)
.AsNoTracking()
.ToListAsync();
//.Include(v => v.IDSERVICIOADSCRITONavigation)
//.Include(v => v.IDUNIDADADMINISTRATIVANavigation)
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
} }
} }

View File

@@ -0,0 +1,15 @@
using bdAntifraude.db;
using Microsoft.AspNetCore.Mvc;
namespace SwaggerAntifraude.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class VALORESNOMINAController : GenericoController<VALORESNOMINA, int>
{
public VALORESNOMINAController()
: base()
{
}
}
}

View File

@@ -1631,11 +1631,19 @@ namespace bdAntifraude.db
} }
} }
[NotMapped] [NotMapped]
public double IMPORTESEGURO public double? IMPORTESEGURO
{ {
get get
{ {
return (double)(this.IDPERSONANavigation.SEGUROACCIDENTE); if (this.IDPERSONANavigation != null)
{
return (double)(this.IDPERSONANavigation.SEGUROACCIDENTE);
}
else
{
return 0;
}
} }
} }