Creacion del Fichero Maestro "Tipos puestos trabajo" y sus ventanas

This commit is contained in:
2026-04-23 14:22:49 +02:00
parent 3b77fc827d
commit a3d9768a4d
7 changed files with 741 additions and 24 deletions

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">
<button @onclick="@(() => abrirPopupModificacion(new CONCEPTOSTIPOSPUESTOSTRABAJO(), true))" class="btnOAAFAzul">Nuevo </button>
<div class="cabecera">
<h6 style="padding-top: 13px;padding-left: 15px;">
<b>Conceptos Tipos Puestos de Trabajo</b>
</h6>
</div>
</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="" class="fw-bold">Descripción: </label>
<input class="form-control" id="txtEDesc" @bind-value="@ItemEnEdicion.DESCRIPCION" />
</div>
</div>
<div class="row">
<div class="col-md-4">
<label for="" class="fw-bold">Importe: </label>
<input class="form-control" id="txtEImporte" @bind-value="@ItemEnEdicion.IMPORTE" />
</div>
<div class="col-md-4">
<label for="" 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="" class="fw-bold">Aplicación Presupuestaria: </label>
<input class="form-control" id="txtEAP" @bind-value="@ItemEnEdicion.APLICACIONPRESUPUESTARIA" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<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-6">
<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>
<div class="row">
<div class="col-md-6">
<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-6">
<label for="" class="fw-bold">Deducciones: </label>
<input type="checkbox" class="form-check" id="chkEDeducciones" checked="@ItemEnEdicion.DEDUCCIONES" @bind-value="@ItemEnEdicion.DEDUCCIONES" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="" class="fw-bold">Extra: </label>
<input type="checkbox" class="form-check" id="chkEEXtra" checked="@ItemEnEdicion.EXTRA" @bind-value="@ItemEnEdicion.EXTRA" />
</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
<div class="pagina">
<div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Tipos puesto de trabajo</b></small></h6>
<div class="d-flex">
<a href="/TipoPuestoTrabajo" class="btnOAAFAzul">Nuevo </a>
<div class="cabecera">
<h6 style="padding-top: 13px;padding-left: 15px;">
<b>Conceptos Tipos Puestos de Trabajo</b>
</h6>
</div>
</div>
@if (lPuestos == null)
@@ -54,6 +59,9 @@
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<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">
<NavLink class="btn btn-link" href="@HashRed(context.IDTIPOPUESTO.ToString())">@context.DESCRIPCION</NavLink>
</GridColumn>
@@ -186,7 +194,7 @@
// }
private string HashRed(string id)
{
string link = "/infoPers?cl=" + tsUtilidades.crypt.FEncS(
string link = "/TipoPuestoTrabajo?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",

View File

@@ -383,7 +383,7 @@
if (persona.IDFICHEROFOTO != null)
{
var responsef = await Utilidades.ActualizarObjeto(cliente, "/api/FICHEROS/" + fi.IDFICHERO, fi);
persona.IDFICHEROFOTO = responsef.IDFICHERO;
//persona.IDFICHEROFOTO = responsef.IDFICHERO;
}
else

View File

@@ -1,15 +1,18 @@
using System.Net.Http.Headers;
using Newtonsoft.Json;
using System.Linq.Expressions;
using Serialize.Linq.Serializers;
using System.Text;
using System.Globalization;
using tsDocumentos;
using Microsoft.JSInterop;
using BlazorBootstrap;
using ClosedXML.Excel;
//using System.Drawing;
using ClosedXML.Excel;
using DevExpress.DataAccess.Native.Web;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.JSInterop;
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
@@ -111,7 +114,7 @@ namespace GestionPersonalWeb.Models
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
{
@@ -122,22 +125,77 @@ namespace GestionPersonalWeb.Models
if (response.IsSuccessStatusCode)
{
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
var resultContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(resultContent);
}
else
{
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Danger,
Message = $"{response}",
AutoHide = false
});
}
return default(T);
}
}
catch (Exception ex)
{
var mess = ex.ToString();
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"{mess}",
AutoHide = false
});
}
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
{
@@ -149,19 +207,40 @@ namespace GestionPersonalWeb.Models
if (response.IsSuccessStatusCode)
{
var resultContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(resultContent);
//var resultContent = await response.Content.ReadAsStringAsync();
//return JsonConvert.DeserializeObject<T>(resultContent);
if (mensajes != null)
{
mensajes.Add(new ToastMessage
{
Type = ToastType.Success,
Message = $"Guardado Correctamente.",
});
}
return "Ok";
}
else
{
Console.WriteLine($"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}");
return default(T);
//Console.WriteLine($"Error al actualizar: {response.StatusCode}, {await response.Content.ReadAsStringAsync()}");
//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)
{
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)
@@ -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

@@ -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

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