proteger para que toque el pedro
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
|
||||
<div class="menuMovil" style="height: 100vh;background-color:#000000c2;" id="navMov">
|
||||
<a Class="btnNavMov" onclick="openCollapse()">Personal</a>
|
||||
<a Class="btnNavMov" onclick="openCollapse()">FicherosMaestros</a>
|
||||
<Collapse Id="CollapseFich" Class="show" @ref="collapse1" Horizontal="true">
|
||||
<Card Style="width:100%;">
|
||||
<CardBody Style="flex-direction: column;display: flex;text-align: center;padding:0;">
|
||||
@@ -52,6 +53,15 @@
|
||||
</CardBody>
|
||||
</Card>
|
||||
</Collapse>
|
||||
<Collapse Id="CollapseFich" Class="show" @ref="collapse2" Horizontal="true">
|
||||
<Card Style="width:100%;">
|
||||
<CardBody Style="flex-direction: column;display: flex;text-align: center;padding:0;">
|
||||
<a class="btnGrisNav" href="/FicherosMaestros/Adscripciones">Trabajadores</a>
|
||||
<a class="btnGrisNav" href="/FicherosMaestros/CausasAlta">Generar Nóminas</a>
|
||||
<a class="btnGrisNav" href="/FicherosMaestros/CausasBaja">Nóminas</a>
|
||||
</CardBody>
|
||||
</Card>
|
||||
</Collapse>
|
||||
@* <a Class="btnNavMov" href="/RPT">RPT</a>
|
||||
<a class="btnNavMov" onclick="openCollapse()">Ficheros Maestros</a> *@
|
||||
|
||||
@@ -90,35 +100,27 @@
|
||||
<div>
|
||||
<ul id="pa-main-menu" class="navbar-nav align-self-end">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" style="font-family:'Satoshi'; color:white" href="#" id="navbarDropdownMenuLink" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">PERSONAL</a>
|
||||
<div class="dropdown-menu" id="dropdownNavegador" style="font-family: 'Satoshi';" aria-labelledby="navbarDropdownMenuLink">
|
||||
<a class="nav-link dropdown-toggle" style="font-family:'Satoshi'; color:white" href="#" id="tabPersonal" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">PERSONAL</a>
|
||||
<div class="dropdown-menu" id="dropPersonal" style="font-family: 'Satoshi';" aria-labelledby="dropPersonal">
|
||||
<a class="dropdown-item" href="/trabajadores">Trabajadores</a>
|
||||
<a class="dropdown-item" href="/GenNominas">Generar Nóminas</a>
|
||||
<a class="dropdown-item" href="/Nominas">Nóminas</a>
|
||||
</div>
|
||||
</li>
|
||||
@* <li class="nav-item active">
|
||||
<a class="nav-link" style="font-family:'Satoshi'; color:black" href="/RPT">RPT</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" style="font-family:'Satoshi'; color:black" href="#" id="navbarDropdownMenuLink" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Ficheros maestros</a>
|
||||
<div class="dropdown-menu" id="dropdownNavegador" style="font-family: 'Satoshi';" aria-labelledby="navbarDropdownMenuLink">
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Adscripciones">Adscripciones</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/CausasAlta">Causas de alta</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/CausasBaja">Causas de baja</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/ClasesPersonal">Clases de personal</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Cuerpos">Cuerpos</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Departamentos">Departamentos</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Dotacion">Dotación</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Grupos">Grupos</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/MotivosAdministrativos">Motivos administrativos</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Nivel">Nivel</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Ocupacion">Ocupación</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/Provision">Provisión</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/TiposAptosAdministrativos">Tipos de actos administrativos</a>
|
||||
<a class="dropdown-item" href="/FicherosMaestros/TiposDocencia">Tipos de docencia</a>
|
||||
<a class="nav-link dropdown-toggle" style="font-family:'Satoshi'; color:white" href="#" id="tabFichMaestros" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">FICHEROS MAESTROS</a>
|
||||
<div class="dropdown-menu" id="dropFicherosMaestros" style="font-family: 'Satoshi';" aria-labelledby="dropFicherosMaestros">
|
||||
<a class="dropdown-item" href="/trabajadores">Tipos puestos trabajo</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Conceptos generales</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Fiestas</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Bancos</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Concratos</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Tipos tramos SILTRA</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Cuentas cotización</a>
|
||||
<a class="dropdown-item" href="/trabajadores">Valores nómina</a>
|
||||
|
||||
</div>
|
||||
</li> *@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -175,15 +177,18 @@
|
||||
navegador.css("display", "none")
|
||||
}
|
||||
}
|
||||
function openCollapse() {
|
||||
$("#CollapseFich")[0].classList.toggle("show")
|
||||
function openCollapse(num) {
|
||||
|
||||
$("#CollapseFich"+ num)[0].classList.toggle("show")
|
||||
}
|
||||
</script>
|
||||
|
||||
@code {
|
||||
private bool MNM { get; set; } = false;
|
||||
Collapse collapse1 = default!;
|
||||
Collapse collapse2 = default!;
|
||||
private async Task ToggleContentAsync() => await collapse1.ToggleAsync();
|
||||
private async Task ToggleContentAsync2() => await collapse2.ToggleAsync();
|
||||
|
||||
public void MostrarNavMob()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,465 @@
|
||||
@page "/TiposPuestosTrabajo"
|
||||
@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
|
||||
|
||||
<div class="pagina">
|
||||
<div class="Cabecera">
|
||||
<h6><small><i class="fas fa-user"></i><b> Tipos puesto de trabajo</b></small></h6>
|
||||
</div>
|
||||
|
||||
@if (lPuestos == null)
|
||||
{
|
||||
<div id="cargando" class="loadingFrame">
|
||||
<div class="loadingImg"></div>
|
||||
</div>
|
||||
}
|
||||
else if (!lPuestos.Any())
|
||||
{
|
||||
<p>No se encontraron datos para mostrar.</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="botonera col-12 gap-1" style="display:flex;" role="group">
|
||||
@* <button type="button" class="btnOAAFBlack" id="btnNuevaPers" title="Añadir nueva persona" @onclick="NuevaPersona">
|
||||
<i class="fa-solid fa-user-plus"></i>
|
||||
</button> *@
|
||||
@* <button type="button" class="btnOAAFBlack" @onclick="btnExportarExcel" id="btnExportarExcel" title="Exportar excel">
|
||||
<i class="fa-solid fa-file-export"></i>
|
||||
</button>
|
||||
<!-- Botón "Ver Todos" con toggle: se asigna btnOAAFAzul cuando está activo -->
|
||||
<button type="button" id="btnVerTodos" @onclick="ToggleVerTodos" title="alternar entre ver Puestos activas y todas" class="@(verTodosActive ? "btnOAAFAzul" : "btnOAAFBlack")">
|
||||
<i class="fa-solid fa-eye"></i> Ver Todos
|
||||
</button> *@
|
||||
@* <button type="button" class="btnOAAFBlack" title="listado de Puestos que cumplen trienio" id="btnCumplimientoTrienios" onclick="window.location.href='/cumplimientoTrienios'">
|
||||
<i class="fa-solid fa-hourglass-end"></i> Cumplimiento Trienios
|
||||
</button> *@
|
||||
</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>
|
||||
|
||||
<!-- Grid con paginación manual: se muestran los datos de la página actual -->
|
||||
<div style="overflow-x:auto;" class="tablaDesk">
|
||||
<Grid TItem="TIPOSPUESTOSTRABAJO"
|
||||
Class="table tablaRegPers"
|
||||
Data="@lPuestos"
|
||||
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="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>
|
||||
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Nivel" PropertyName="NIVEL" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NIVEL">
|
||||
@context.NIVEL
|
||||
</GridColumn>
|
||||
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Epigrafe" PropertyName="EPIGRAFE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.EPIGRAFE">
|
||||
@context.EPIGRAFE
|
||||
</GridColumn>
|
||||
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Grupo tarifa" PropertyName="GRUPOTARIFA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.GRUPOTARIFA">
|
||||
@context.GRUPOTARIFA
|
||||
</GridColumn>
|
||||
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Tipo" PropertyName="CONCEPTOSTIPOSPUESTOSTRABAJO" FilterButtonCSSClass="hidden">
|
||||
@context.CONCEPTOSTIPOSPUESTOSTRABAJO
|
||||
</GridColumn>
|
||||
<GridColumn TItem="TIPOSPUESTOSTRABAJO" HeaderText="Fecha baja" PropertyName="FECHABAJA" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJA">
|
||||
@if(context.FECHABAJA != null){
|
||||
@context.FECHABAJA
|
||||
}
|
||||
|
||||
</GridColumn>
|
||||
|
||||
</GridColumns>
|
||||
</Grid>
|
||||
</div>
|
||||
|
||||
<!-- Vista móvil -->
|
||||
<div class="tablaMov">
|
||||
@foreach (var itm in lPuestos)
|
||||
{
|
||||
var collapseId = $"collapse{itm.IDTIPOPUESTO}";
|
||||
<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">Descripción</dt>
|
||||
<dd class="col-sm-9"><a href="@HashRed(itm.IDTIPOPUESTO.ToString())">@itm.DESCRIPCION</a></dd>
|
||||
<dt class="col-sm-3">Nivel</dt>
|
||||
<dd class="col-sm-9">@itm.NIVEL</dd>
|
||||
<dt class="col-sm-3">Epigrafe</dt>
|
||||
<dd class="col-sm-9">@itm.EPIGRAFE</dd>
|
||||
<dt class="col-sm-3">Grupo tarifa</dt>
|
||||
<dd class="col-sm-9">@itm.GRUPOTARIFA</dd>
|
||||
<dt class="col-sm-3">Tipo</dt>
|
||||
<dd class="col-sm-9">@itm.CONCEPTOSTIPOSPUESTOSTRABAJO</dd>
|
||||
<dt class="col-sm-3">Fecha baja</dt>
|
||||
<dd class="col-sm-9">@itm.FECHABAJA</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- Controles de paginación + texto de elementos en la misma fila -->
|
||||
@* <div class="d-flex justify-content-between mt-2 align-items-center">
|
||||
<!-- Paginación a la izquierda -->
|
||||
<div class="custom-pagination">
|
||||
<ul>
|
||||
<!-- Botón para ir a la primera página -->
|
||||
<li>
|
||||
<button class="page-button page-link"
|
||||
@onclick="PrimeraPagina"
|
||||
disabled="@(UserState.CurrentPage == 1)">
|
||||
<i id="AR1LR16N3BVAJ" class="bi bi-chevron-double-left"></i>
|
||||
</button>
|
||||
</li>
|
||||
<!-- Botón para ir a la página anterior -->
|
||||
<li>
|
||||
<button class="page-button page-link"
|
||||
@onclick="PaginaAnterior"
|
||||
disabled="@(UserState.CurrentPage == 1)">
|
||||
<i id="AR1LR16N3BVAK" class="bi bi-chevron-left"></i>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<!-- Si el primer número a mostrar es mayor que 1, se muestra "1" y puntos -->
|
||||
@if (PageNumbersToDisplay().Any() && PageNumbersToDisplay().First() > 1)
|
||||
{
|
||||
<li>
|
||||
<button class="page-button" @onclick="() => UserState.CurrentPage = 1">
|
||||
1
|
||||
</button>
|
||||
</li>
|
||||
<li><span class="ellipsis">...</span></li>
|
||||
}
|
||||
|
||||
<!-- Botones de página dinámica -->
|
||||
@foreach (var pageNum in PageNumbersToDisplay())
|
||||
{
|
||||
<li>
|
||||
<button class="page-button page-link @(pageNum == UserState.CurrentPage ? "active" : null)"
|
||||
@onclick="() => UserState.CurrentPage = pageNum">
|
||||
@pageNum
|
||||
</button>
|
||||
</li>
|
||||
}
|
||||
|
||||
<!-- Si el último número mostrado es menor que TotalPaginas, se muestran puntos y la última página -->
|
||||
@if (PageNumbersToDisplay().Any() && PageNumbersToDisplay().Last() < TotalPaginas)
|
||||
{
|
||||
<li><button class="page-button page-link" disabled>...</button></li>
|
||||
<li>
|
||||
<button class="page-button" @onclick="() => UserState.CurrentPage = TotalPaginas">
|
||||
@TotalPaginas
|
||||
</button>
|
||||
</li>
|
||||
}
|
||||
|
||||
<!-- Botón para ir a la página siguiente -->
|
||||
<li>
|
||||
<button class="page-button page-link"
|
||||
@onclick="PaginaSiguiente"
|
||||
disabled="@(UserState.CurrentPage == TotalPaginas)">
|
||||
<i id="AR1LR16N3BVAM" class="bi bi-chevron-right"></i>
|
||||
</button>
|
||||
</li>
|
||||
<!-- Botón para ir a la última página -->
|
||||
<li>
|
||||
<button class="page-button page-link"
|
||||
@onclick="UltimaPagina"
|
||||
disabled="@(UserState.CurrentPage == TotalPaginas)">
|
||||
<i id="AR1LR16N3BVAN" class="bi bi-chevron-double-right"></i>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Texto de elementos a la derecha -->
|
||||
<div style="margin-right: 20px;">
|
||||
@FromElement - @ToElement de @lPuestos.Count elementos
|
||||
</div>
|
||||
</div> *@
|
||||
}
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private List<TIPOSPUESTOSTRABAJO> lPuestos = new List<TIPOSPUESTOSTRABAJO>();
|
||||
private List<TIPOSPUESTOSTRABAJO> Puestos = new List<TIPOSPUESTOSTRABAJO>();
|
||||
private string _filter = "";
|
||||
public string Filter
|
||||
{
|
||||
get => _filter;
|
||||
set
|
||||
{
|
||||
if (_filter != value)
|
||||
{
|
||||
_filter = value;
|
||||
// AplicarFiltros();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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"
|
||||
private bool verTodosActive = false;
|
||||
/// <summary>
|
||||
/// Método toggle que cambia entre mostrar todos los registros y solo activos.
|
||||
/// </summary>
|
||||
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("/TIPOSPUESTOSTRABAJO");
|
||||
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||
Puestos = JsonConvert.DeserializeObject<List<TIPOSPUESTOSTRABAJO>>(resultContent)
|
||||
?? new List<TIPOSPUESTOSTRABAJO>();
|
||||
}
|
||||
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/TIPOSPUESTOSTRABAJO");
|
||||
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||
Puestos = JsonConvert.DeserializeObject<List<TIPOSPUESTOSTRABAJO>>(resultContent)
|
||||
?? new List<TIPOSPUESTOSTRABAJO>();
|
||||
}
|
||||
|
||||
Puestos = Puestos.Where(x => x.FECHABAJA == null)
|
||||
.OrderBy(x => x.DESCRIPCION)
|
||||
.ThenByDescending(x => x.FECHABAJA)
|
||||
.ToList();
|
||||
|
||||
lPuestos = Puestos;
|
||||
UserState.CurrentPage = 1;
|
||||
Filter = "";
|
||||
}
|
||||
// private void AplicarFiltros()
|
||||
// {
|
||||
// lPuestos = Puestos.Where(per =>
|
||||
// string.IsNullOrEmpty(Filter) ||
|
||||
// Utilidades.RemoveDiacritics(per.NIF).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||
// Utilidades.RemoveDiacritics(per.APELLIDOS).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||
// Utilidades.RemoveDiacritics(per.NOMBRE).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase)
|
||||
// ).ToList();
|
||||
// UserState.CurrentPage = 1;
|
||||
// }
|
||||
/// <summary>
|
||||
/// Retorna un subconjunto de páginas alrededor de la página actual (±2 páginas).
|
||||
/// </summary>
|
||||
// private IEnumerable<int> PageNumbersToDisplay()
|
||||
// {
|
||||
// int range = 2;
|
||||
// int startPage = Math.Max(1, UserState.CurrentPage - range);
|
||||
// int endPage = Math.Min(TotalPaginas, UserState.CurrentPage + range);
|
||||
|
||||
// for (int i = startPage; i <= endPage; i++)
|
||||
// {
|
||||
// yield return i;
|
||||
// }
|
||||
// }
|
||||
/// <summary>
|
||||
/// Formatea el nombre de la persona insertando un salto de línea después de la segunda palabra.
|
||||
/// </summary>
|
||||
/// <param name="nombre">Nombre a formatear</param>
|
||||
/// <returns>MarkupString con el nombre formateado</returns>
|
||||
private MarkupString FormatearNombre(string nombre)
|
||||
{
|
||||
if (string.IsNullOrEmpty(nombre))
|
||||
{
|
||||
return new MarkupString(string.Empty);
|
||||
}
|
||||
var palabras = nombre.Split(' ');
|
||||
if (palabras.Length > 2)
|
||||
{
|
||||
string primeraParte = string.Join(" ", palabras.Take(2));
|
||||
string resto = string.Join(" ", palabras.Skip(2));
|
||||
return new MarkupString($"{primeraParte}<br/>{resto}");
|
||||
}
|
||||
return new MarkupString(nombre);
|
||||
}
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
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/TIPOSPUESTOSTRABAJO");
|
||||
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||
Puestos = JsonConvert.DeserializeObject<List<TIPOSPUESTOSTRABAJO>>(resultContent)
|
||||
?? new List<TIPOSPUESTOSTRABAJO>();
|
||||
|
||||
Puestos = Puestos.Where(x => x.FECHABAJA == null)
|
||||
.OrderBy(x => x.DESCRIPCION)
|
||||
.ThenByDescending(x => x.FECHABAJA)
|
||||
.ToList();
|
||||
|
||||
lPuestos = Puestos;
|
||||
}
|
||||
// private async Task btnExportarPDF()
|
||||
// {
|
||||
// var itm = lPuestos
|
||||
// .Select(f => new
|
||||
// {
|
||||
// NIF = f.NIF,
|
||||
// Apellidos = f.APELLIDOS,
|
||||
// Nombre = f.NOMBRE,
|
||||
// Correo_Electrónico = f.CORREOELECTRONICO,
|
||||
// Cuerpo = f.IDCUERPORPTNavigation.DESCRIPCION,
|
||||
// Nivel_Puesto = f.IDNIVELRPTNavigation.DESCRIPCION,
|
||||
// Caracter_Ocupación = f.CARGOULTIMOPUESTO,
|
||||
// Departamento = f.DEPARTAMENTOACTUAL,
|
||||
// Puesto_Actual = f.PUESTOACTUAL,
|
||||
// Situación = f.IDSITUACIONENRPTNavigation.DESCRIPCION
|
||||
|
||||
// })
|
||||
// .ToList();
|
||||
// var logoBytes = await File.ReadAllBytesAsync("wwwroot/Content/imagenes/1oaaflogo.png");
|
||||
|
||||
// // Color de cabecera para PDF
|
||||
// var pdfHeaderColor = new MigraDocCore.DocumentObjectModel.Color(0, 85, 135);
|
||||
|
||||
// await Utilidades.ExportarPdfEnBrowser(
|
||||
// JS,
|
||||
// itm,
|
||||
// logoBytes,
|
||||
// pdfHeaderColor,
|
||||
// $"Personas.pdf");
|
||||
// }
|
||||
// private async Task btnExportarExcel()
|
||||
// {
|
||||
// var itm = lPuestos
|
||||
// .Select(f => new
|
||||
// {
|
||||
// NIF = f.NIF,
|
||||
// Apellidos = f.APELLIDOS,
|
||||
// Nombre = f.NOMBRE,
|
||||
// Correo_Electrónico = f.CORREOELECTRONICO,
|
||||
// Cuerpo = f.IDCUERPORPTNavigation.DESCRIPCION,
|
||||
// Nivel_Puesto = f.IDNIVELRPTNavigation.DESCRIPCION,
|
||||
// Caracter_Ocupación = f.CARGOULTIMOPUESTO,
|
||||
// Departamento = f.DEPARTAMENTOACTUAL,
|
||||
// Puesto_Actual = f.PUESTOACTUAL,
|
||||
// Situación = f.IDSITUACIONENRPTNavigation.DESCRIPCION
|
||||
|
||||
// })
|
||||
// .ToList();
|
||||
// // 2) Carga tu logo (por ejemplo desde wwwroot/images/logo.png)
|
||||
// var logoBytes = await File.ReadAllBytesAsync("wwwroot/Content/imagenes/1oaaflogo.png");
|
||||
|
||||
// // 3) Define el color de cabecera para Excel
|
||||
// var excelHeaderColor = ClosedXML.Excel.XLColor.FromArgb(0, 85, 135);
|
||||
|
||||
// // 4) Llama a tu helper pasando logo y color
|
||||
// await Utilidades.ExportarExcelEnBrowser(
|
||||
// JS,
|
||||
// itm,
|
||||
// logoBytes,
|
||||
// excelHeaderColor,
|
||||
// $"Personas.xlsx");
|
||||
|
||||
// // await Utilidades.ExportarExcelEnBrowser(JS, itm, $"Puestos_{Persona.APELLIDOS}_{Persona.NOMBRE}.xlsx");
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
@* Helper para descargar archivos desde base64 *@
|
||||
<script>
|
||||
window.saveAsFile = (filename, bytesBase64) => {
|
||||
const link = document.createElement('a');
|
||||
link.download = filename;
|
||||
link.href = 'data:application/octet-stream;base64,' + bytesBase64;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
};
|
||||
</script>
|
||||
@@ -137,10 +137,16 @@
|
||||
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
|
||||
<GridColumns>
|
||||
<GridColumn TItem="TRAMOSSILTRA" HeaderText="Tipo tramo" PropertyName="IDTIPOTRAMONavigation?.DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDTIPOTRAMONavigation.DESCRIPCION">
|
||||
@if (lTraSil.Any(x => x.IDTIPOTRAMO == context.IDTIPOTRAMONavigation?.IDCODIGOTRAMOACUMULA)){
|
||||
|
||||
@if (context.IDTIPOTRAMONavigation.MODIFICABLE == false && context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == false)
|
||||
{
|
||||
<p style="color:red; font-weight:bold"> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
|
||||
}
|
||||
else
|
||||
@if (context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == true && context.IDTIPOTRAMONavigation.MODIFICABLE == true)
|
||||
{
|
||||
<p style="color:blue; font-weight:bold"> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
|
||||
}
|
||||
@if (context.IDTIPOTRAMONavigation.SOLICITADOALUSUARIO == false && context.IDTIPOTRAMONavigation.MODIFICABLE == true)
|
||||
{
|
||||
<p> @context.IDTIPOTRAMONavigation?.CODIGO - @context.IDTIPOTRAMONavigation?.DESCRIPCION </p>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using bdAntifraude.db;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace SwaggerAntifraude.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
public class TIPOSPUESTOSTRABAJOController : GenericoController<TIPOSPUESTOSTRABAJO, int>
|
||||
{
|
||||
public TIPOSPUESTOSTRABAJOController()
|
||||
: base()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,15 +5,15 @@
|
||||
"Audience": "TuDominio.com",
|
||||
"ExpiresInMinutes": 60
|
||||
},
|
||||
//"ConnectionStrings": {
|
||||
// "WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO",
|
||||
// "ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO"
|
||||
//},
|
||||
//PRODUCCION
|
||||
"ConnectionStrings": {
|
||||
"WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE",
|
||||
"ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE"
|
||||
"WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO",
|
||||
"ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO"
|
||||
},
|
||||
//PRODUCCION
|
||||
//"ConnectionStrings": {
|
||||
// "WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE",
|
||||
// "ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE"
|
||||
//},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
|
||||
Reference in New Issue
Block a user