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">
|
<div class="menuMovil" style="height: 100vh;background-color:#000000c2;" id="navMov">
|
||||||
<a Class="btnNavMov" onclick="openCollapse()">Personal</a>
|
<a Class="btnNavMov" onclick="openCollapse()">Personal</a>
|
||||||
|
<a Class="btnNavMov" onclick="openCollapse()">FicherosMaestros</a>
|
||||||
<Collapse Id="CollapseFich" Class="show" @ref="collapse1" Horizontal="true">
|
<Collapse Id="CollapseFich" Class="show" @ref="collapse1" Horizontal="true">
|
||||||
<Card Style="width:100%;">
|
<Card Style="width:100%;">
|
||||||
<CardBody Style="flex-direction: column;display: flex;text-align: center;padding:0;">
|
<CardBody Style="flex-direction: column;display: flex;text-align: center;padding:0;">
|
||||||
@@ -52,6 +53,15 @@
|
|||||||
</CardBody>
|
</CardBody>
|
||||||
</Card>
|
</Card>
|
||||||
</Collapse>
|
</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" href="/RPT">RPT</a>
|
||||||
<a class="btnNavMov" onclick="openCollapse()">Ficheros Maestros</a> *@
|
<a class="btnNavMov" onclick="openCollapse()">Ficheros Maestros</a> *@
|
||||||
|
|
||||||
@@ -90,35 +100,27 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul id="pa-main-menu" class="navbar-nav align-self-end">
|
<ul id="pa-main-menu" class="navbar-nav align-self-end">
|
||||||
<li class="nav-item dropdown">
|
<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>
|
<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="dropdownNavegador" style="font-family: 'Satoshi';" aria-labelledby="navbarDropdownMenuLink">
|
<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="/trabajadores">Trabajadores</a>
|
||||||
<a class="dropdown-item" href="/GenNominas">Generar Nóminas</a>
|
<a class="dropdown-item" href="/GenNominas">Generar Nóminas</a>
|
||||||
<a class="dropdown-item" href="/Nominas">Nóminas</a>
|
<a class="dropdown-item" href="/Nominas">Nóminas</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</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">
|
<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>
|
<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="dropdownNavegador" style="font-family: 'Satoshi';" aria-labelledby="navbarDropdownMenuLink">
|
<div class="dropdown-menu" id="dropFicherosMaestros" style="font-family: 'Satoshi';" aria-labelledby="dropFicherosMaestros">
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/Adscripciones">Adscripciones</a>
|
<a class="dropdown-item" href="/trabajadores">Tipos puestos trabajo</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/CausasAlta">Causas de alta</a>
|
<a class="dropdown-item" href="/trabajadores">Conceptos generales</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/CausasBaja">Causas de baja</a>
|
<a class="dropdown-item" href="/trabajadores">Fiestas</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/ClasesPersonal">Clases de personal</a>
|
<a class="dropdown-item" href="/trabajadores">Bancos</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/Cuerpos">Cuerpos</a>
|
<a class="dropdown-item" href="/trabajadores">Concratos</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/Departamentos">Departamentos</a>
|
<a class="dropdown-item" href="/trabajadores">Tipos tramos SILTRA</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/Dotacion">Dotación</a>
|
<a class="dropdown-item" href="/trabajadores">Cuentas cotización</a>
|
||||||
<a class="dropdown-item" href="/FicherosMaestros/Grupos">Grupos</a>
|
<a class="dropdown-item" href="/trabajadores">Valores nómina</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>
|
|
||||||
</div>
|
</div>
|
||||||
</li> *@
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -175,15 +177,18 @@
|
|||||||
navegador.css("display", "none")
|
navegador.css("display", "none")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function openCollapse() {
|
function openCollapse(num) {
|
||||||
$("#CollapseFich")[0].classList.toggle("show")
|
|
||||||
|
$("#CollapseFich"+ num)[0].classList.toggle("show")
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool MNM { get; set; } = false;
|
private bool MNM { get; set; } = false;
|
||||||
Collapse collapse1 = default!;
|
Collapse collapse1 = default!;
|
||||||
|
Collapse collapse2 = default!;
|
||||||
private async Task ToggleContentAsync() => await collapse1.ToggleAsync();
|
private async Task ToggleContentAsync() => await collapse1.ToggleAsync();
|
||||||
|
private async Task ToggleContentAsync2() => await collapse2.ToggleAsync();
|
||||||
|
|
||||||
public void MostrarNavMob()
|
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">
|
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
|
||||||
<GridColumns>
|
<GridColumns>
|
||||||
<GridColumn TItem="TRAMOSSILTRA" HeaderText="Tipo tramo" PropertyName="IDTIPOTRAMONavigation?.DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDTIPOTRAMONavigation.DESCRIPCION">
|
<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>
|
<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>
|
<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",
|
"Audience": "TuDominio.com",
|
||||||
"ExpiresInMinutes": 60
|
"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": {
|
"ConnectionStrings": {
|
||||||
"WriteConnection": "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=ANTIFRAUDE"
|
"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": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
|
|||||||
Reference in New Issue
Block a user