Primer push
70
Antifraude.Net/Antifraude.Net.sln
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.11.35431.28
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "bdAntifraude", "bdAntifraude\bdAntifraude.csproj", "{B8C0C071-81ED-4265-86F0-169CB5A0C82E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwaggerAntifraude", "SwaggerAntifraude\SwaggerAntifraude.csproj", "{ED8F423B-D059-4A55-AA8F-0122201E4E1A}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RegistroPersonalAN", "RegistroPersonalAN\RegistroPersonalAN.csproj", "{690BFF6A-F3FC-4D94-9E32-C689FBB69455}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GestionaDenunciasAN", "GestionaDenunciasAN\GestionaDenunciasAN.csproj", "{27476EF0-284B-402C-ADBF-70A42220725F}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GestionPersonalWeb", "GestionPersonalWeb\GestionPersonalWeb.csproj", "{063515F3-D202-45DD-91DA-A494FBD005AD}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{B8C0C071-81ED-4265-86F0-169CB5A0C82E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B8C0C071-81ED-4265-86F0-169CB5A0C82E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B8C0C071-81ED-4265-86F0-169CB5A0C82E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B8C0C071-81ED-4265-86F0-169CB5A0C82E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{ED8F423B-D059-4A55-AA8F-0122201E4E1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{ED8F423B-D059-4A55-AA8F-0122201E4E1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{ED8F423B-D059-4A55-AA8F-0122201E4E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{ED8F423B-D059-4A55-AA8F-0122201E4E1A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{690BFF6A-F3FC-4D94-9E32-C689FBB69455}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{690BFF6A-F3FC-4D94-9E32-C689FBB69455}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{690BFF6A-F3FC-4D94-9E32-C689FBB69455}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{690BFF6A-F3FC-4D94-9E32-C689FBB69455}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{27476EF0-284B-402C-ADBF-70A42220725F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{27476EF0-284B-402C-ADBF-70A42220725F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{27476EF0-284B-402C-ADBF-70A42220725F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{27476EF0-284B-402C-ADBF-70A42220725F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{063515F3-D202-45DD-91DA-A494FBD005AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{063515F3-D202-45DD-91DA-A494FBD005AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{063515F3-D202-45DD-91DA-A494FBD005AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{063515F3-D202-45DD-91DA-A494FBD005AD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {43CD0232-BD99-4567-84A1-B141DEFC2B80}
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(TeamFoundationVersionControl) = preSolution
|
||||||
|
SccNumberOfProjects = 6
|
||||||
|
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
|
||||||
|
SccTeamFoundationServer = http://ts-devopss:81/tecnosiscollection
|
||||||
|
SccLocalPath0 = .
|
||||||
|
SccProjectUniqueName1 = bdAntifraude\\bdAntifraude.csproj
|
||||||
|
SccProjectName1 = bdAntifraude
|
||||||
|
SccLocalPath1 = bdAntifraude
|
||||||
|
SccProjectUniqueName2 = RegistroPersonalAN\\RegistroPersonalAN.csproj
|
||||||
|
SccProjectName2 = RegistroPersonalAN
|
||||||
|
SccLocalPath2 = RegistroPersonalAN
|
||||||
|
SccProjectUniqueName3 = SwaggerAntifraude\\SwaggerAntifraude.csproj
|
||||||
|
SccProjectName3 = SwaggerAntifraude
|
||||||
|
SccLocalPath3 = SwaggerAntifraude
|
||||||
|
SccProjectUniqueName4 = GestionaDenunciasAN\\GestionaDenunciasAN.csproj
|
||||||
|
SccProjectName4 = GestionaDenunciasAN
|
||||||
|
SccLocalPath4 = GestionaDenunciasAN
|
||||||
|
SccProjectUniqueName5 = GestionPersonalWeb\\GestionPersonalWeb.csproj
|
||||||
|
SccProjectName5 = GestionPersonalWeb
|
||||||
|
SccLocalPath5 = GestionPersonalWeb
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
25
Antifraude.Net/GestionPersonalWeb/Components/App.razor
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<base href="/" />
|
||||||
|
<link rel="stylesheet" href="bootstrap/bootstrap.min.css" />
|
||||||
|
<link rel="stylesheet" href="app.css" />
|
||||||
|
<link rel="stylesheet" href="GestionPersonalWeb.styles.css" />
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" />
|
||||||
|
<HeadOutlet />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<Routes />
|
||||||
|
<script src="/_framework/blazor.web.js" autostart="false"></script>
|
||||||
|
<script>
|
||||||
|
Blazor.start({
|
||||||
|
ssr: { disableDomPreservation: true }
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<div class="">
|
||||||
|
@Body
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
@using GestionPersonalWeb.Models
|
||||||
|
@using BlazorBootstrap;
|
||||||
|
@using Microsoft.AspNetCore.Components.Web
|
||||||
|
|
||||||
|
@inherits LayoutComponentBase
|
||||||
|
@inject UserState UserState
|
||||||
|
@inject NavigationManager NavigationManager
|
||||||
|
@inject NavigationManager Navigation
|
||||||
|
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
|
||||||
|
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
|
||||||
|
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="Content/imagenes/faviconParlamento.ico" />
|
||||||
|
<link href="Content/Site.css?v=0.4" rel="stylesheet" />
|
||||||
|
<link href="Content/all.min.css" rel="stylesheet" />
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||||
|
<script src="Scripts/jquery.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
|
||||||
|
<!-- Add chart.js reference if chart components are used in your application. -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.0.1/chart.umd.js" integrity="sha512-gQhCDsnnnUfaRzD8k1L5llCCV6O9HN09zClIzzeJ8OJ9MpGmIlCxm+pdCkqTwqJ4JcjbojFr79rl2F1mzcoLMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
<!-- Add chartjs-plugin-datalabels.min.js reference if chart components with data label feature is used in your application. -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js" integrity="sha512-JPcRR8yFa8mmCsfrw4TNte1ZvF1e3+1SdGMslZvmrzDYxS69J7J49vkFL8u6u8PlPJK+H3voElBtUCzaXj+6ig==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
<!-- Add sortable.js reference if SortableList component is used in your application. -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
|
||||||
|
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
|
||||||
|
<script src="Scripts/popper.min.js"></script>
|
||||||
|
<script src="Scripts/all.min.js"></script>
|
||||||
|
<script src="Scripts/Util.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
@if (UserState.Mostrar == true)
|
||||||
|
{
|
||||||
|
<div id="cargando" class="loadingFrame">
|
||||||
|
<div class="loadingDiv">
|
||||||
|
<div class="loadingImg"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="menuMovil" style="height: 100vh;background-color:#000000c2;" id="navMov">
|
||||||
|
<a Class="btnNavMov" onclick="openCollapse()">Personal</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;">
|
||||||
|
<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> *@
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div id="mensajeDiv">
|
||||||
|
<div id="mensajeCuerpo">
|
||||||
|
<p id="mensajeError"></p>
|
||||||
|
<div style="display:flex; justify-content:end">
|
||||||
|
<button class="btnOAAFAzul" onclick="toggleMensaje()">Continuar</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="loadingDiv">
|
||||||
|
<div id="loading" class="fa-beat"></div>
|
||||||
|
</div>
|
||||||
|
<div id="estadoProduccion" style="position:fixed; bottom:0; left:0;z-index:99;padding-inline:20px;padding-top:5px; background-color:var(--AzulOscuro);display:none;"><p style="color:white; font-weight:bold; font-size:15px;margin-bottom:5px">PREPRODUCCIÓN</p></div>
|
||||||
|
|
||||||
|
|
||||||
|
<header class="d-none d-md-block">
|
||||||
|
<div class="pa-header-t1">
|
||||||
|
<div class="pa-header-row1 bg-secondary" style="background-color: black !important;">
|
||||||
|
<nav class="navbar navbar-expand navbar-dark justify-content-between " style="margin-inline: 20px;">
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a class="navbar-brand" href="/RPT">
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<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="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>
|
||||||
|
</div>
|
||||||
|
</li> *@
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item">
|
||||||
|
<p id="nombreCompleto" style="font-family:'SatoshiB'; margin:7.5px 0px 0px 0px; color: white;">@UserState.NombreUsu</p>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/">
|
||||||
|
<img src="/Content/icon/person-fill.svg" style="width: 20px; height: 20px; filter:invert(1)" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="pa-header-row2">
|
||||||
|
<nav class="navbar navbar-light navbar-expand justify-content-between " style="padding-top: 0px !important; padding-bottom: 0px !important;">
|
||||||
|
<div style="background-color: var(--indigo-parlamento);">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<header class="navMov justify-content-between" style="padding:15px;">
|
||||||
|
<img src="Content/imagenes/1oaaflogo.png" height="40px" />
|
||||||
|
|
||||||
|
<div role="button" onclick="MNM()" class="menuhamb">
|
||||||
|
<img src="Content/imagenes/list.svg" @onclick="@MostrarNavMob" style="width: 40px; height: 40px; align-items: center;">
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<article class="">
|
||||||
|
@Body
|
||||||
|
</article>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="blazor-error-ui">
|
||||||
|
An unhandled error has occurred.
|
||||||
|
<a href="" class="reload">Reload</a>
|
||||||
|
<a class="dismiss">🗙</a>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function MNM() {
|
||||||
|
var navegador = $("#navMov")
|
||||||
|
if (navegador.css("display") == "none") {
|
||||||
|
navegador.css("display", "flex")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
navegador.css("display", "none")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function openCollapse() {
|
||||||
|
$("#CollapseFich")[0].classList.toggle("show")
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private bool MNM { get; set; } = false;
|
||||||
|
Collapse collapse1 = default!;
|
||||||
|
private async Task ToggleContentAsync() => await collapse1.ToggleAsync();
|
||||||
|
|
||||||
|
public void MostrarNavMob()
|
||||||
|
{
|
||||||
|
if (MNM)
|
||||||
|
{
|
||||||
|
MNM = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MNM = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
.page {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-bottom: 1px solid #d6d5d5;
|
||||||
|
justify-content: flex-end;
|
||||||
|
height: 3.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a:first-child {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640.98px) {
|
||||||
|
.top-row {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 641px) {
|
||||||
|
.page {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 250px;
|
||||||
|
height: 100vh;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row.auth ::deep a:first-child {
|
||||||
|
flex: 1;
|
||||||
|
text-align: right;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row, article {
|
||||||
|
padding-left: 2rem !important;
|
||||||
|
padding-right: 1.5rem !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#blazor-error-ui {
|
||||||
|
background: lightyellow;
|
||||||
|
bottom: 0;
|
||||||
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
display: none;
|
||||||
|
left: 0;
|
||||||
|
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#blazor-error-ui .dismiss {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
right: 0.75rem;
|
||||||
|
top: 0.5rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<div class="top-row ps-3 navbar navbar-dark">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="">GestionPersonalWeb</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
|
||||||
|
|
||||||
|
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
|
||||||
|
<nav class="flex-column">
|
||||||
|
<div class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||||
|
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link" href="counter">
|
||||||
|
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link" href="weather">
|
||||||
|
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
.navbar-toggler {
|
||||||
|
appearance: none;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 3.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
color: white;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.5rem;
|
||||||
|
right: 1rem;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggler:checked {
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
height: 3.5rem;
|
||||||
|
background-color: rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 1.25rem;
|
||||||
|
height: 1.25rem;
|
||||||
|
margin-right: 0.75rem;
|
||||||
|
top: -1px;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-house-door-fill-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-plus-square-fill-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-list-nested-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:first-of-type {
|
||||||
|
padding-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:last-of-type {
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep .nav-link {
|
||||||
|
color: #d7d7d7;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
height: 3rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
line-height: 3rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep a.active {
|
||||||
|
background-color: rgba(255,255,255,0.37);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep .nav-link:hover {
|
||||||
|
background-color: rgba(255,255,255,0.1);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-scrollable {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggler:checked ~ .nav-scrollable {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 641px) {
|
||||||
|
.navbar-toggler {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-scrollable {
|
||||||
|
/* Never collapse the sidebar for wide screens */
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
/* Allow sidebar to scroll for tall menus */
|
||||||
|
height: calc(100vh - 3.5rem);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
@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
|
||||||
|
|
||||||
|
|
||||||
|
<Grid TItem="ENFERMEDADES"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listEnf"
|
||||||
|
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="ENFERMEDADES" HeaderText="Nombre">
|
||||||
|
@context.IDPERSONANavigation?.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Base">
|
||||||
|
@context.BASE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Tipo">
|
||||||
|
@context.IDTIPONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Continuidad">
|
||||||
|
@if (context.CONTINUIDAD == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL== true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public NOMINAS Nomina { get; set; } = new NOMINAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
|
||||||
|
private List<ENFERMEDADES> listEnf = new List<ENFERMEDADES>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
if (Nomina?.IDNOMINAS != null && Nomina.IDNOMINAS > 0)
|
||||||
|
{
|
||||||
|
await ObtListaNom();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Persona no está completamente cargada.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task ObtListaNom()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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"));
|
||||||
|
idNom = Nomina.IDNOMINAS;
|
||||||
|
Expression<Func<ENFERMEDADES, bool>> filtro = x => (Nomina.FECHAFIN >= x.FECHAINICIO && x.FECHAFIN.HasValue == false) || (x.FECHAINICIO <= Nomina.FECHAFIN && x.FECHAFIN >= Nomina.FECHAINICIO);
|
||||||
|
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
var TDExpression = serializer.SerializeText(filtro);
|
||||||
|
var TDjsonContent = JsonConvert.SerializeObject(new { Expression = TDExpression });
|
||||||
|
var TDcontent = new StringContent(TDjsonContent, Encoding.UTF8, "application/json");
|
||||||
|
var TDresponse = await client.PostAsync("/api/OTRASRETRIBUCIONES/filtrar", TDcontent);
|
||||||
|
var TDCont = await TDresponse.Content.ReadAsStringAsync();
|
||||||
|
listEnf = JsonConvert.DeserializeObject<List<ENFERMEDADES>>(TDCont) ?? new List<ENFERMEDADES>();
|
||||||
|
|
||||||
|
// listOR = listOR
|
||||||
|
// .
|
||||||
|
// .ToList();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
string errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// listPersonas = personas;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
@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
|
||||||
|
|
||||||
|
|
||||||
|
<Grid TItem="INCIDENCIAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listINC"
|
||||||
|
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="INCIDENCIAS" HeaderText="Persona">
|
||||||
|
@context.IDPERSONANavigation?.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Concepto">
|
||||||
|
@context.IDCONCEPTONOMINANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="NIF">
|
||||||
|
@context.IDPERSONANavigation?.NIF
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Fecha Baja">
|
||||||
|
@context.IDPERSONANavigation?.FECHABAJA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Fecha Baja">
|
||||||
|
@context.IDPERSONANavigation?.FECHABAJA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Sustituye Concepto">
|
||||||
|
@if (context.SUSTITUYECONCEPTO == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Cotiza Seguridad Social">
|
||||||
|
@if (context.COTIZASEGURIDADSOCIAL == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Texto">
|
||||||
|
@context.TEXTO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Cantidad">
|
||||||
|
@context.CANTIDAD
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Importe">
|
||||||
|
@context.IMPORTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="IRPF">
|
||||||
|
@context.IRPF
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="IRPF Ficha">
|
||||||
|
@if (context.IRPFFICHA == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="No Para IRPF">
|
||||||
|
@if (context.NOPARAIRPF == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public NOMINAS Nomina { get; set; } = new NOMINAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
|
||||||
|
private List<INCIDENCIAS> listINC = new List<INCIDENCIAS>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
if (Nomina?.IDNOMINAS != null && Nomina.IDNOMINAS > 0)
|
||||||
|
{
|
||||||
|
await ObtListaNom();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Persona no está completamente cargada.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task ObtListaNom()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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"));
|
||||||
|
idNom = Nomina.IDNOMINAS;
|
||||||
|
Expression<Func<INCIDENCIAS, bool>> filtro = x => x.IDNOMINA == idNom;
|
||||||
|
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
var TDExpression = serializer.SerializeText(filtro);
|
||||||
|
var TDjsonContent = JsonConvert.SerializeObject(new { Expression = TDExpression });
|
||||||
|
var TDcontent = new StringContent(TDjsonContent, Encoding.UTF8, "application/json");
|
||||||
|
var TDresponse = await client.PostAsync("/api/INCIDENCIAS/filtrar", TDcontent);
|
||||||
|
var TDCont = await TDresponse.Content.ReadAsStringAsync();
|
||||||
|
List<INCIDENCIAS> listINC = JsonConvert.DeserializeObject<List<INCIDENCIAS>>(TDCont) ?? new List<INCIDENCIAS>();
|
||||||
|
|
||||||
|
listINC = listINC
|
||||||
|
.OrderByDescending(x => x.FECHAINICIO)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
string errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// listPersonas = personas;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
@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
|
||||||
|
|
||||||
|
|
||||||
|
<Grid TItem="OTRASRETRIBUCIONES"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listOR"
|
||||||
|
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="OTRASRETRIBUCIONES" HeaderText="Persona">
|
||||||
|
@context.IDPERSONANavigation?.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Mes">
|
||||||
|
@context.MES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Año">
|
||||||
|
@context.AÑO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Importe">
|
||||||
|
@context.IMPORTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Seguridad Social">
|
||||||
|
@if (context.SEGURIDADSOCIAL == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="IRPF">
|
||||||
|
@if (context.IRPF == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="CRA">
|
||||||
|
@context.CRA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Descripción">
|
||||||
|
@context.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public NOMINAS Nomina { get; set; } = new NOMINAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
|
||||||
|
private List<OTRASRETRIBUCIONES> listOR = new List<OTRASRETRIBUCIONES>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
if (Nomina?.IDNOMINAS != null && Nomina.IDNOMINAS > 0)
|
||||||
|
{
|
||||||
|
await ObtListaNom();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Persona no está completamente cargada.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task ObtListaNom()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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"));
|
||||||
|
idNom = Nomina.IDNOMINAS;
|
||||||
|
Expression<Func<OTRASRETRIBUCIONES, bool>> filtro = x => x.AÑO == Nomina.AÑO && x.MES == Nomina.MES;
|
||||||
|
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
var TDExpression = serializer.SerializeText(filtro);
|
||||||
|
var TDjsonContent = JsonConvert.SerializeObject(new { Expression = TDExpression });
|
||||||
|
var TDcontent = new StringContent(TDjsonContent, Encoding.UTF8, "application/json");
|
||||||
|
var TDresponse = await client.PostAsync("/api/OTRASRETRIBUCIONES/filtrar", TDcontent);
|
||||||
|
var TDCont = await TDresponse.Content.ReadAsStringAsync();
|
||||||
|
listOR = JsonConvert.DeserializeObject<List<OTRASRETRIBUCIONES>>(TDCont) ?? new List<OTRASRETRIBUCIONES>();
|
||||||
|
|
||||||
|
// listOR = listOR
|
||||||
|
// .
|
||||||
|
// .ToList();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
string errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// listPersonas = personas;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
|
||||||
|
@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
|
||||||
|
|
||||||
|
<Grid TItem="PERSONAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listPers"
|
||||||
|
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="PERSONAS" HeaderText="Nombre">
|
||||||
|
@context.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="NIF">
|
||||||
|
@context.NIF
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Tipo Persona">
|
||||||
|
@context.IDTIPONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Total Devengado">
|
||||||
|
@context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.TOTALDEVENGADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Total Liquido">
|
||||||
|
@context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.TOTALLIQUIDO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Persona">
|
||||||
|
@context.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Observaciones">
|
||||||
|
@context.NOMINATRABAJADORCABECERA.FirstOrDefault(x => x.IDNOMINATRABAJADOR == idNom)?.OBSERVACIONES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Nivel">
|
||||||
|
@context.IDNIVELRPTNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public NOMINAS Nomina { get; set; } = new NOMINAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
|
||||||
|
private List<PERSONAS> listPers = new List<PERSONAS>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
if (Nomina?.IDNOMINAS!= null && Nomina.IDNOMINAS> 0)
|
||||||
|
{
|
||||||
|
await ObtListaPers();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Persona no está completamente cargada.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task ObtListaPers()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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"));
|
||||||
|
idNom = Nomina.IDNOMINAS;
|
||||||
|
Expression<Func<NOMINATRABAJADORCABECERA, bool>> filtro = x => x.IDNOMINA == idNom;
|
||||||
|
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
var TDExpression = serializer.SerializeText(filtro);
|
||||||
|
var TDjsonContent = JsonConvert.SerializeObject(new { Expression = TDExpression });
|
||||||
|
var TDcontent = new StringContent(TDjsonContent, Encoding.UTF8, "application/json");
|
||||||
|
var TDresponse = await client.PostAsync("/api/NOMINATRABAJADORCABECERA/filtrar", TDcontent);
|
||||||
|
var TDCont = await TDresponse.Content.ReadAsStringAsync();
|
||||||
|
List<NOMINATRABAJADORCABECERA> LISTNOTRCA = JsonConvert.DeserializeObject<List<NOMINATRABAJADORCABECERA>>(TDCont) ?? new List<NOMINATRABAJADORCABECERA>();
|
||||||
|
// List<NOMINATRABAJADORCABECERA> LISTNOTRCA = await Utilidades.ObtenerObjeto<List<NOMINATRABAJADORCABECERA>>(client, "/api/NOMINATRABAJADORCABECERA/filtrar", filtro);
|
||||||
|
if (LISTNOTRCA.Count > 0)
|
||||||
|
{
|
||||||
|
int idNOTRCA = LISTNOTRCA.FirstOrDefault().IDNOMINATRABAJADOR;
|
||||||
|
Expression<Func<PERSONAS, bool>> filtro2 = x => x.NOMINATRABAJADORCABECERA.Any(y => y.IDNOMINATRABAJADOR == idNOTRCA);
|
||||||
|
listPers = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtro2);
|
||||||
|
// personas = JsonConvert.DeserializeObject<List<PERSONAS>>(resultContent)
|
||||||
|
// ?? new List<PERSONAS>();
|
||||||
|
|
||||||
|
listPers = listPers
|
||||||
|
.OrderBy(x => x.APELLIDOS)
|
||||||
|
.ThenBy(x => x.NOMBRE)
|
||||||
|
.ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
// listPers = Nomina.NOMINATRABAJADORCABECERA
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
string errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// listPersonas = personas;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
@page "/counter"
|
||||||
|
@rendermode InteractiveServer
|
||||||
|
|
||||||
|
<PageTitle>Counter</PageTitle>
|
||||||
|
|
||||||
|
<h1>Counter</h1>
|
||||||
|
|
||||||
|
<p role="status">Current count: @currentCount</p>
|
||||||
|
|
||||||
|
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private int currentCount = 0;
|
||||||
|
|
||||||
|
private void IncrementCount()
|
||||||
|
{
|
||||||
|
currentCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
@page "/Error"
|
||||||
|
@using System.Diagnostics
|
||||||
|
|
||||||
|
<PageTitle>Error</PageTitle>
|
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1>
|
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||||
|
|
||||||
|
@if (ShowRequestId)
|
||||||
|
{
|
||||||
|
<p>
|
||||||
|
<strong>Request ID:</strong> <code>@RequestId</code>
|
||||||
|
</p>
|
||||||
|
}
|
||||||
|
|
||||||
|
<h3>Development Mode</h3>
|
||||||
|
<p>
|
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||||
|
It can result in displaying sensitive information from exceptions to end users.
|
||||||
|
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||||
|
and restarting the app.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
[CascadingParameter]
|
||||||
|
private HttpContext? HttpContext { get; set; }
|
||||||
|
|
||||||
|
private string? RequestId { get; set; }
|
||||||
|
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
|
|
||||||
|
protected override void OnInitialized() =>
|
||||||
|
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
|
||||||
|
}
|
||||||
@@ -0,0 +1,258 @@
|
|||||||
|
@page "/GenNominas"
|
||||||
|
|
||||||
|
@using BlazorBootstrap
|
||||||
|
@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="mt-3">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label class="fw-bold">Mes a Generar: </label>
|
||||||
|
<InputSelect @bind-Value="IDNOMINASEL" @bind-Value:after="CargarPersonas">
|
||||||
|
<option value="0">-</option>
|
||||||
|
@foreach (var nom in listNoms)
|
||||||
|
{
|
||||||
|
<option value="@nom.IDNOMINAS">@nom.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2"></div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<input type="button" value="Generar Nómina" onclick="@GenerarNomina" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style=" max-height:400px;overflow-y:auto">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="PERSONAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listPersonas"
|
||||||
|
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="PERSONAS" HeaderText="Generar" FilterButtonCSSClass="hidden">
|
||||||
|
<input class="chbGenNom" value="@context.IDPERSONA" type="checkbox" checked="@Seleccionados.Contains(context.IDPERSONA)"
|
||||||
|
@onchange="e => Toggle(context.IDPERSONA, (bool)e.Value!)" />
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="N.I.F." PropertyName="NIF" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NIF">
|
||||||
|
@context.NIF
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Nombre Completo" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.APELLIDOSNOMBRE">
|
||||||
|
@context.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Tipo" PropertyName="Cuerpo" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDCUERPORPTNavigation.DESCRIPCION">
|
||||||
|
@context.IDCUERPORPTNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Fecha Alta" PropertyName="FechaAltaPAR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHAALTAPAR">
|
||||||
|
@context.FECHAALTAPAR
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Fecha Baja" PropertyName="FechaBajaPAR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJAPAR">
|
||||||
|
@context.FECHABAJAPAR
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style=" max-height:400px;overflow-y:auto">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="NOMINATRABAJADORCABECERA"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listNomGen"
|
||||||
|
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="NOMINATRABAJADORCABECERA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDPERSONANavigation.APELLIDOSNOMBRE">
|
||||||
|
@context.IDPERSONANavigation.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.">
|
||||||
|
@context.IDPERSONANavigation.APELLIDOSNOMBRE
|
||||||
|
</GridColumn> *@
|
||||||
|
@* <GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.tramo">
|
||||||
|
@context.CODIGO
|
||||||
|
</GridColumn> *@
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
|
||||||
|
List<int> Seleccionados = new();
|
||||||
|
|
||||||
|
private List<NOMINAS> listNoms = new List<NOMINAS>();
|
||||||
|
private int IDNOMINASEL { get; set; }
|
||||||
|
private List<int> listaUsus = new List<int>();
|
||||||
|
private List<PERSONAS> listPersonas = new List<PERSONAS>();
|
||||||
|
private List<NOMINATRABAJADORCABECERA> listNomGen = new List<NOMINATRABAJADORCABECERA>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
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/NOMINAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
var nominas = JsonConvert.DeserializeObject<List<NOMINAS>>(resultContent)
|
||||||
|
?? new List<NOMINAS>();
|
||||||
|
|
||||||
|
nominas = nominas.OrderByDescending(x => x.FECHAINICIO)
|
||||||
|
.ThenBy(x => x.DESCRIPCION)
|
||||||
|
// .ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
listNoms = nominas;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Toggle(int id, bool value)
|
||||||
|
{
|
||||||
|
if (value) Seleccionados.Add(id);
|
||||||
|
else Seleccionados.Remove(id);
|
||||||
|
Console.WriteLine(id);
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected async void CargarPersonas()
|
||||||
|
{
|
||||||
|
Seleccionados.Clear();
|
||||||
|
var idnom = IDNOMINASEL;
|
||||||
|
NOMINAS nomAct = listNoms.FirstOrDefault(x => x.IDNOMINAS == IDNOMINASEL);
|
||||||
|
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"));
|
||||||
|
List<PERSONAS> persi = new List<PERSONAS>();
|
||||||
|
Expression < Func<PERSONAS, bool> > filtroPers3 = x => x.FECHABAJA.HasValue == false && x.FECHAALTA.HasValue;
|
||||||
|
persi = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers3);
|
||||||
|
Expression<Func<INCIDENCIAS, bool>> filtroPersi = x => (x.ESDELIQUIDACION == false && x.IDNOMINA == idnom) || (x.MESNOMINA == nomAct.MES && x.AÑONOMINA == nomAct.AÑO && x.NOMINASEGURIDADSOCIAL == true && x.ESDELIQUIDACION == false && nomAct.IDTIPONavigation.DESCRIPCION.Trim() == "SEGURIDAD SOCIAL");
|
||||||
|
List<INCIDENCIAS> Incipersi = await Utilidades.ObtenerObjeto<List<INCIDENCIAS>>(client, "/api/INCIDENCIAS/filtrar", filtroPersi);
|
||||||
|
|
||||||
|
if (Incipersi != null && Incipersi.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (INCIDENCIAS inci in Incipersi)
|
||||||
|
{
|
||||||
|
if (persi.Any(x=>x.IDPERSONA == inci.IDPERSONANavigation.IDPERSONA)==false){
|
||||||
|
persi.Add(inci.IDPERSONANavigation);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Expression<Func<PERSONAS, bool>> filtroPers = x => x.FECHABAJA.HasValue && (x.FECHABAJA >= nomAct.FECHAINICIO && x.FECHABAJA <= nomAct.FECHAFIN);
|
||||||
|
List<PERSONAS> pers = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers);
|
||||||
|
if (pers != null && pers.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (PERSONAS inci in pers)
|
||||||
|
{
|
||||||
|
if (persi.Any(x => x.IDPERSONA == inci.IDPERSONA) == false)
|
||||||
|
{
|
||||||
|
persi.Add(inci);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var fechaFin = nomAct.FECHAINICIO.Value.AddDays(-1);
|
||||||
|
Expression<Func<PERSONAS, bool>> filtroPers2 = x => x.FECHABAJA.HasValue && (x.FECHABAJA == fechaFin);
|
||||||
|
List<PERSONAS> DipFinLeg = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers2);
|
||||||
|
|
||||||
|
|
||||||
|
if (DipFinLeg != null && DipFinLeg.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (PERSONAS inci in DipFinLeg)
|
||||||
|
{
|
||||||
|
if (persi.Any(x => x.IDPERSONA == inci.IDPERSONA) == false)
|
||||||
|
{
|
||||||
|
persi.Add(inci);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
listPersonas = persi;
|
||||||
|
|
||||||
|
|
||||||
|
listPersonas = listPersonas
|
||||||
|
.OrderBy(x => x.APELLIDOS)
|
||||||
|
.ThenBy(x => x.NOMBRE)
|
||||||
|
.ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
protected async void GenerarNomina()
|
||||||
|
{
|
||||||
|
DatGenNom objetoConsulta = new DatGenNom();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Seleccionados.Count > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
objetoConsulta.Personas = Seleccionados;
|
||||||
|
objetoConsulta.Idnomina = IDNOMINASEL;
|
||||||
|
|
||||||
|
var token = UserState.Token;
|
||||||
|
var client = HttpClientFactory.CreateClient();
|
||||||
|
client.BaseAddress = new Uri(Utilidades.urlSwagger2());
|
||||||
|
// client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||||
|
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
|
||||||
|
var response = await client.PostAsJsonAsync("/api/GeneraNominas", objetoConsulta);
|
||||||
|
|
||||||
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
var resultado = JsonConvert.DeserializeObject<ResultadoGenerarNomina>(content);
|
||||||
|
if(resultado.Resultado == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine(resultado.NumNomGen);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
198
Antifraude.Net/GestionPersonalWeb/Components/Pages/Home.razor
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
@using BlazorBootstrap
|
||||||
|
@using Layout
|
||||||
|
@using Microsoft.AspNetCore.Mvc
|
||||||
|
@using Newtonsoft.Json
|
||||||
|
@using Newtonsoft.Json.Linq
|
||||||
|
@using GestionPersonalWeb.Models
|
||||||
|
@using System.Net.Http.Headers
|
||||||
|
@using System.Text
|
||||||
|
@using System.Linq.Expressions
|
||||||
|
@using Serialize.Linq.Serializers
|
||||||
|
@using System.Security.Cryptography.X509Certificates
|
||||||
|
@using System.Security.Cryptography
|
||||||
|
@using bdAntifraude.db
|
||||||
|
|
||||||
|
@rendermode InteractiveServer
|
||||||
|
@layout EmptyLayout
|
||||||
|
@page "/"
|
||||||
|
@inject IHttpClientFactory HttpClientFactory
|
||||||
|
@inject IHttpContextAccessor HttpContextAccessor
|
||||||
|
@inject NavigationManager Navigation
|
||||||
|
@inject UserState UserState
|
||||||
|
@inject IJSRuntime JSRuntime
|
||||||
|
|
||||||
|
<PageTitle>Registro de personal Oficina Antifraude de Andalucía</PageTitle>
|
||||||
|
<head>
|
||||||
|
<link href="Content/Site.css?v=0.3" rel="stylesheet" />
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
<link rel="icon" type="image/x-icon" href="faviconParlamento.ico" />
|
||||||
|
<link href="~/bootstrap/bootstrap.min.css" rel="stylesheet" />
|
||||||
|
<link href="Content/Site.css" rel="stylesheet" />
|
||||||
|
|
||||||
|
<div style="margin:0;padding:0;">
|
||||||
|
@if (mostrar)
|
||||||
|
{
|
||||||
|
<div id="cargando" class="loadingFrame">
|
||||||
|
<div class="loadingDiv">
|
||||||
|
<div class="loadingImg"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<div id="pagina" style="background-image:url(../Content/imagenes/fondoOAAFBN.png); background-position-x:right; background-position-y:bottom; background-size:cover; background-repeat:no-repeat; display:flex; align-items:center; min-height:100vh; padding-top:200px; flex-direction:column;">
|
||||||
|
<div style="width:100%">
|
||||||
|
<p id="tituloLogin">Gestión de Personal</p>
|
||||||
|
</div>
|
||||||
|
<div id="cajaLogIn" style="display:flex; flex-direction:column; max-width:600px; background-color:white; padding:40px; border-radius:5px;">
|
||||||
|
@* <img class="loginImg" src="Content/imagenes/1oaaflogo.png" style="width:200px; height:auto; margin-inline:auto; margin-bottom:20px;" /> *@
|
||||||
|
<p id="mensajeError" style="color: red; margin-bottom:20px;">@mensaje</p>
|
||||||
|
<p style="margin:0">Usuario</p>
|
||||||
|
<input id="Usu" type="text" @bind="Usu" class="inputlogin" />
|
||||||
|
<p style="margin:0">Contraseña</p>
|
||||||
|
<input id="Contrasena" type="password" @bind="pass" class="inputlogin" />
|
||||||
|
<button class="btnOAAFAzul" type="button" @onclick="LogIn">ENTRAR</button>
|
||||||
|
<!-- Botón que inicia la autenticación vía certificado -->
|
||||||
|
<button class="btnOAAFBlack mt-3" type="button" @onclick="IniciarSesionConCertificado">INICIAR SESIÓN CON CERTIFICADO</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!-- Iframe oculto para la autenticación con certificado -->
|
||||||
|
<iframe id="authCertIframe" style="display:none;"></iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
public string? Usu { get; set; }
|
||||||
|
public string? pass { get; set; }
|
||||||
|
private string? mensaje { get; set; }
|
||||||
|
public bool mostrar { get; set; } = false;
|
||||||
|
private DotNetObjectReference<Home>? dotNetRef;
|
||||||
|
|
||||||
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
|
{
|
||||||
|
if (firstRender)
|
||||||
|
{
|
||||||
|
// Se crea una referencia a este componente para que JS pueda invocar SetToken
|
||||||
|
dotNetRef = DotNetObjectReference.Create(this);
|
||||||
|
await JSRuntime.InvokeVoidAsync("registerTokenReceiver", dotNetRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
LimpiarEstadoUsuario();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LimpiarEstadoUsuario()
|
||||||
|
{
|
||||||
|
UserState.Token = "";
|
||||||
|
UserState.NombreUsu = "";
|
||||||
|
HttpContextAccessor?.HttpContext?.Session?.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task LogIn()
|
||||||
|
{
|
||||||
|
mostrar = true;
|
||||||
|
await Task.Delay(1);
|
||||||
|
if (string.IsNullOrWhiteSpace(Usu) || string.IsNullOrWhiteSpace(pass))
|
||||||
|
{
|
||||||
|
mostrar = false;
|
||||||
|
mensaje = "Por favor, ingrese su usuario y contraseña.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var client = HttpClientFactory.CreateClient();
|
||||||
|
client.BaseAddress = new Uri(Utilidades.urlSwagger());
|
||||||
|
var loginPayload = new { NombreUsuario = Usu, Contraseña = pass, Origen = "Registro" };
|
||||||
|
var loginContent = new StringContent(JsonConvert.SerializeObject(loginPayload), Encoding.UTF8, "application/json");
|
||||||
|
var loginResponse = await client.PostAsync("Auth/login", loginContent);
|
||||||
|
await ProcesarRespuesta(loginResponse);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
mostrar = false;
|
||||||
|
mensaje = $"Error inesperado: {ex.Message}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task IniciarSesionConCertificado()
|
||||||
|
{
|
||||||
|
mostrar = true;
|
||||||
|
|
||||||
|
var url = Utilidades.urlSwagger() + "Auth/login-cert?iframe=true";
|
||||||
|
await JSRuntime.InvokeVoidAsync("iniciarSesionConCertificado", url);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ProcesarRespuesta(HttpResponseMessage response)
|
||||||
|
{
|
||||||
|
var responseContent = await response.Content.ReadAsStringAsync();
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var parsedJson = JObject.Parse(responseContent);
|
||||||
|
UserState.Token = parsedJson["token"]?.ToString() ?? "";
|
||||||
|
// Actualizamos el nombre del usuario (formateado como "APELLIDOS, NOMBRE")
|
||||||
|
UserState.NombreUsu = $"{parsedJson["user"]?["apellidos"]?.ToString()}, {parsedJson["user"]?["nombre"]?.ToString()}";
|
||||||
|
Navigation.NavigateTo("/Trabajadores", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mostrar = false;
|
||||||
|
mensaje = "Error de autenticación. Verifique sus credenciales o el certificado.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[JSInvokable]
|
||||||
|
public Task SetToken(string token, string userJson)
|
||||||
|
{
|
||||||
|
// Actualizamos el token en UserState
|
||||||
|
UserState.Token = token;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var userObj = JObject.Parse(userJson);
|
||||||
|
|
||||||
|
UserState.NombreUsu = $"{userObj["APELLIDOS"]?.ToString()}, {userObj["NOMBRE"]?.ToString()}";
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
UserState.NombreUsu = "";
|
||||||
|
}
|
||||||
|
Navigation.NavigateTo("/Trabajadores", true);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
<!-- Bloque de script inline para definir funciones de autenticación -->
|
||||||
|
<script>
|
||||||
|
function registerTokenReceiver(dotnetRef) {
|
||||||
|
window.dotnetTokenReceiver = dotnetRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.iniciarSesionConCertificado = function (url) {
|
||||||
|
console.log("Se llamó iniciarSesionConCertificado con URL:", url);
|
||||||
|
var iframe = document.getElementById("authCertIframe");
|
||||||
|
if (iframe) {
|
||||||
|
iframe.src = url;
|
||||||
|
} else {
|
||||||
|
console.error("No se encontró el iframe con id 'authCertIframe'");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("message", function (event) {
|
||||||
|
var data = event.data;
|
||||||
|
if (data && data.token) {
|
||||||
|
console.log("Mensaje recibido con token:", data.token);
|
||||||
|
if (window.dotnetTokenReceiver) {
|
||||||
|
window.dotnetTokenReceiver.invokeMethodAsync("SetToken", data.token, JSON.stringify(data.user));
|
||||||
|
} else {
|
||||||
|
localStorage.setItem("token", data.token);
|
||||||
|
localStorage.setItem("user", JSON.stringify(data.user));
|
||||||
|
window.location.href = "/cumplimientoTrienios";
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,434 @@
|
|||||||
|
@page "/InfoNominas"
|
||||||
|
@using System.Net.Http.Headers
|
||||||
|
@using System.Linq.Expressions
|
||||||
|
@using Layout
|
||||||
|
@using Microsoft.AspNetCore.WebUtilities
|
||||||
|
@using Newtonsoft.Json
|
||||||
|
@using System.Text
|
||||||
|
@using GestionPersonalWeb.Components
|
||||||
|
@using Serialize.Linq.Serializers
|
||||||
|
@using GestionPersonalWeb.Models
|
||||||
|
@using BlazorBootstrap
|
||||||
|
@using bdAntifraude.db
|
||||||
|
@using System.Globalization
|
||||||
|
@using Microsoft.JSInterop
|
||||||
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
|
@using GestionPersonalWeb.Components.Pages.ComponentesInfoNomina
|
||||||
|
@inject IJSRuntime JSRuntime
|
||||||
|
@rendermode InteractiveServer
|
||||||
|
@layout MainLayout
|
||||||
|
@inject IHttpClientFactory HttpClientFactory
|
||||||
|
@inject IHttpContextAccessor HttpContextAccessor
|
||||||
|
@inject UserState UserState
|
||||||
|
@inject NavigationManager Navigation
|
||||||
|
@inject ProtectedSessionStorage ProtectedSessionStore
|
||||||
|
|
||||||
|
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="messages" Placement="ToastsPlacement.BottomCenter" />
|
||||||
|
|
||||||
|
|
||||||
|
<div class="pagina">
|
||||||
|
<div class="Cabecera">
|
||||||
|
@* <h6><small><i class="fas fa-briefcase"></i><b>Puestos de Trabajo (<a href="@HashRed()" id="lblNombre"> @lblNombre</a> )</b></small></h6> *@
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<EditForm FormName="FormNomina" EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" class="formDtosAdmin">
|
||||||
|
<DataAnnotationsValidator />
|
||||||
|
|
||||||
|
<div class="botonera col-12" style="display:flex; gap:5px">
|
||||||
|
<Button Class="btnOAAFAzul" @onclick="volver"><Icon CustomIconName="fas fa-long-arrow-alt-left"></Icon> </Button>
|
||||||
|
<Button Class="btnOAAFAzul" Type="ButtonType.Submit"> <Icon CustomIconName="fas fa-save"></Icon> </Button>
|
||||||
|
<Button Class="btnOAAFAzul" hidden=@ocultarBtnBrr> <Icon CustomIconName="fas fa-trash"></Icon> </Button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<Tabs Style="padding-top:50px; width:100%;" EnableFadeEffect="true">
|
||||||
|
<Tab Title="@descNom" Active="true">
|
||||||
|
<Content>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="camposficha row">
|
||||||
|
<div class="col-6 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Descripción:</label>
|
||||||
|
<InputText @bind-Value="Nomina.DESCRIPCION" class="inputForm"></InputText>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-1 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Año:</label>
|
||||||
|
<InputNumber @bind-Value="Nomina.AÑO" class="inputForm"></InputNumber>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-1 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Mes:</label>
|
||||||
|
<InputNumber @bind-Value="Nomina.MES" class="inputForm"></InputNumber>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-4 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Año:</label>
|
||||||
|
<InputSelect @bind-Value="Nomina!.IDTIPO" class="inputForm">
|
||||||
|
<option value="0">-- Seleccione un tipo -- </option>
|
||||||
|
@if (listadoTipo.Count > 0)
|
||||||
|
{
|
||||||
|
@foreach (var tip in listadoTipo)
|
||||||
|
{
|
||||||
|
<option value="@tip.IDENUMERACION">@tip.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</InputSelect>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-3 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Fecha Inicio:</label>
|
||||||
|
<InputDate @bind-Value="Nomina.FECHAINICIO" class="inputForm"></InputDate>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Fecha Fin:</label>
|
||||||
|
<InputDate @bind-Value="Nomina.FECHAFIN" class="inputForm"></InputDate>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Fecha Inicio Liquidación Dieta:</label>
|
||||||
|
<InputDate @bind-Value="Nomina.FECHAFINLIQUIDACIONDIETA" class="inputForm"></InputDate>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Fecha Fin Liquidación Dieta:</label>
|
||||||
|
<InputDate @bind-Value="Nomina.FECHAFINLIQUIDACIONDIETA" class="inputForm"></InputDate>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mb-2 formatoCampos">
|
||||||
|
<label class="tituloLbl">Situación:</label>
|
||||||
|
<InputSelect @bind-Value="Nomina!.IDSITUACIONNOMINA" class="inputForm">
|
||||||
|
<option value="0">-- Seleccione una situación -- </option>
|
||||||
|
@if (listadoSituacion.Count > 0)
|
||||||
|
{
|
||||||
|
@foreach (var tip in listadoSituacion)
|
||||||
|
{
|
||||||
|
<option value="@tip.IDENUMERACION">@tip.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mb-2" style="display:flex; gap:30px; align-items:end">
|
||||||
|
<div style="display:flex;gap:5px;align-items:center;">
|
||||||
|
<p style="margin-bottom:0">Paga Extra: </p>
|
||||||
|
<InputCheckbox @bind-Value="Nomina.PAGAEXTRA"></InputCheckbox>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:5px;align-items:center;">
|
||||||
|
<p style="margin-bottom:0">General Recibo Nómina: </p>
|
||||||
|
<InputCheckbox @bind-Value="Nomina.GENERANOMINILLA"></InputCheckbox>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:5px;align-items:center;">
|
||||||
|
<p style="margin-bottom:0">Visible Intranet: </p>
|
||||||
|
<InputCheckbox @bind-Value="Nomina.VISIBLEINTRANET"></InputCheckbox>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
<Tabs @ref=tabsDtsNom style="margin-top:25px" OnShown="@(args => OnTabShownAsync(args))">
|
||||||
|
<Tab Title="Nóminas" Name="tabNominas">
|
||||||
|
<Content>
|
||||||
|
<NominasPers Nomina="Nomina"></NominasPers>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Incidencias" Name="tabIncidencias">
|
||||||
|
<Content>
|
||||||
|
<NominasIncidencias Nomina="Nomina"></NominasIncidencias>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Otras Retribuciones" Name="tabRetri">
|
||||||
|
<Content>
|
||||||
|
<NominasOtrasRet Nomina="Nomina"></NominasOtrasRet>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Enférmedades" Name="tabEnfermedades">
|
||||||
|
<Content>
|
||||||
|
<NominasEnfermedades Nomina="Nomina"></NominasEnfermedades>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
</EditForm>
|
||||||
|
|
||||||
|
@if (!string.IsNullOrEmpty(idNom))
|
||||||
|
{
|
||||||
|
@* <Tabs Style="padding-top:50px; width:100%;" EnableFadeEffect="true">
|
||||||
|
<Tab Title="Descripción RPT" Active="true">
|
||||||
|
<Content>
|
||||||
|
<div style="display:block;gap:10px; margin-bottom:20px;" class="mt-4">
|
||||||
|
<Button class="btnOAAFAzul"> Nuevo puesto </Button>
|
||||||
|
<Grid TItem="bdAntifraude.db.PUESTOS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="Nomina"
|
||||||
|
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="bdAntifraude.db.PUESTOS" HeaderText="Código" Class="col-1" PropertyName="CODIGO" SortKeySelector="item => item.CODIGO">
|
||||||
|
@context.CODIGO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Estado" Class="col-1" PropertyName="ESTADO" SortKeySelector="item => item.ESTADO">
|
||||||
|
@context.ESTADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Dotación" PropertyName="IDDOTACIONNavigation">
|
||||||
|
@context.IDDOTACIONNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Persona" PropertyName="IDPERSONALNavigation">
|
||||||
|
@context.IDPERSONALNavigation?.NOMBRE @context.IDPERSONALNavigation?.APELLIDOS
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Ocupación" PropertyName="IDOCUPACIONNavigation">
|
||||||
|
@context.IDOCUPACIONNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Titular" PropertyName="TITULARNavigation">
|
||||||
|
@context.TITULARNavigation?.NOMBRE @context.TITULARNavigation?.APELLIDOS
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Adscripción al servicio" PropertyName="IDRPTNavigation?.IDSITUACIONNavigation">
|
||||||
|
@context.IDSERVICIOADSCRITONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
|
||||||
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" Class="col-1" HeaderText="">
|
||||||
|
<span @onclick="@(() => abrirPopupPuestos(@context))" style="cursor: pointer;">
|
||||||
|
<Icon CustomIconName="fas fa-edit"></Icon>
|
||||||
|
</span>
|
||||||
|
<span @onclick="@(() => abrirPopupConfirmacion(@context))" style="cursor: pointer;">
|
||||||
|
<Icon CustomIconName="fas fa-trash"></Icon>
|
||||||
|
</span>
|
||||||
|
</GridColumn> *@
|
||||||
|
|
||||||
|
@* </GridColumns> *@
|
||||||
|
@* </Grid> *@
|
||||||
|
@*
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</Content> *@
|
||||||
|
@* </Tab>
|
||||||
|
</Tabs> *@
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
/// ATRIBUTOS
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public string? cl { get; set; } = "";
|
||||||
|
[Parameter]
|
||||||
|
public string? np { get; set; } = "";
|
||||||
|
public bool ocultarBtnBrr { get; set; }
|
||||||
|
private bool desactivarPlaza { get; set; }
|
||||||
|
public string idNom { get; set; } = "";
|
||||||
|
private Tabs tabsDtsNom { get; set; } = new Tabs();
|
||||||
|
List<ToastMessage> messages = new List<ToastMessage>();
|
||||||
|
private static NOMINAS Nomina { get; set; } = new NOMINAS();
|
||||||
|
private List<ENUMERACIONES> listadoTipo = new List<ENUMERACIONES>();
|
||||||
|
private List<ENUMERACIONES> listadoSituacion = new List<ENUMERACIONES>();
|
||||||
|
private string tituloPopup = "";
|
||||||
|
private Modal popupNewPuesto = default!;
|
||||||
|
private Modal popupConfirmacion = default!;
|
||||||
|
public bool borrarPuesto { get; set; }
|
||||||
|
private EditContext? editContext;
|
||||||
|
private string descNom { get; set; }
|
||||||
|
private HttpClient client { get; set; } = new HttpClient();
|
||||||
|
private ExpressionSerializer? serializer { get; set; }
|
||||||
|
|
||||||
|
private async Task CargarCliente()
|
||||||
|
{
|
||||||
|
var token = UserState.Token;
|
||||||
|
client = HttpClientFactory.CreateClient();
|
||||||
|
client.BaseAddress = new Uri(Utilidades.urlSwagger());
|
||||||
|
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||||
|
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
}
|
||||||
|
private async Task OnTabShownAsync(TabsEventArgs args)
|
||||||
|
{
|
||||||
|
var panelActivo = args.ActiveTabName;
|
||||||
|
|
||||||
|
await ProtectedSessionStore.SetAsync("ultiTabNom", panelActivo);
|
||||||
|
|
||||||
|
}
|
||||||
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
|
{
|
||||||
|
if (firstRender)
|
||||||
|
{
|
||||||
|
var nombreTabsActivo = await ProtectedSessionStore.GetAsync<string>("ultiTabNom");
|
||||||
|
|
||||||
|
if (nombreTabsActivo.Value != null && tabsDtsNom != null)
|
||||||
|
{
|
||||||
|
await tabsDtsNom.ShowTabByNameAsync(nombreTabsActivo.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await CargarCliente();
|
||||||
|
editContext = new EditContext(Nomina);
|
||||||
|
messageStore = new ValidationMessageStore(editContext);
|
||||||
|
|
||||||
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
||||||
|
|
||||||
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("cl", out var clValue))
|
||||||
|
{
|
||||||
|
cl = clValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("np", out var clValueNp))
|
||||||
|
{
|
||||||
|
np = clValueNp;
|
||||||
|
// idRPT = tsUtilidades.crypt.FEncS(np, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", -875421649);
|
||||||
|
}
|
||||||
|
|
||||||
|
idNom = tsUtilidades.crypt.FEncS(cl, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", -875421649);
|
||||||
|
|
||||||
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
||||||
|
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(idNom))
|
||||||
|
{
|
||||||
|
ocultarBtnBrr = true;
|
||||||
|
descNom = "NUEVA NOMINA";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ocultarBtnBrr = false;
|
||||||
|
desactivarPlaza = true;
|
||||||
|
var response = await client.GetAsync("/api/NOMINAS/" + idNom.ToString());
|
||||||
|
var ResponseContent = await response.Content.ReadAsStringAsync();
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Nomina = JsonConvert.DeserializeObject<NOMINAS>(ResponseContent) ?? new NOMINAS();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Nomina = new NOMINAS();
|
||||||
|
}
|
||||||
|
descNom = Nomina.DESCRIPCION;
|
||||||
|
// lblNombre = Model?.IDRPTNavigation?.DESCRIPCION ?? "";
|
||||||
|
await obtListadoSituacion();
|
||||||
|
await obtListadoTipo();
|
||||||
|
|
||||||
|
var culture = new CultureInfo("es-ES");
|
||||||
|
CultureInfo.DefaultThreadCurrentCulture = culture;
|
||||||
|
CultureInfo.DefaultThreadCurrentUICulture = culture;
|
||||||
|
}
|
||||||
|
|
||||||
|
linkVolver = "/Nominas";
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private string HashRed(string id)
|
||||||
|
{
|
||||||
|
string link = "/InfoNominas?cl=" + tsUtilidades.crypt.FEncS(
|
||||||
|
id,
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
875421649);
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
protected void volver() { Navigation.NavigateTo(linkVolver, forceLoad: true); }
|
||||||
|
// LISTADOS PARA COMBOBOX
|
||||||
|
private void MostrarErrores()
|
||||||
|
{
|
||||||
|
// messageStore?.Clear();
|
||||||
|
// foreach (var field in new[] { nameof(Model.GRUPO1), nameof(Model.PLAZAS) })
|
||||||
|
// {
|
||||||
|
// ValidarYActualizar(new ChangeEventArgs { Value = typeof(DesgloseRPTVM).GetProperty(field)?.GetValue(Model) }, field);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
private async Task guardarFormulario()
|
||||||
|
{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
|
||||||
|
// ValidarTodo();
|
||||||
|
// if (!editContext!.GetValidationMessages().Any())
|
||||||
|
// {
|
||||||
|
// await guardarRPTForm();
|
||||||
|
|
||||||
|
// messages.Add(new ToastMessage
|
||||||
|
// {
|
||||||
|
// Type = ToastType.Primary,
|
||||||
|
// Message = $"Guardado correctamente.",
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// messages.Add(new ToastMessage
|
||||||
|
// {
|
||||||
|
// Type = ToastType.Warning,
|
||||||
|
// Message = $"Debe rellenar los campos obligatorios.",
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
||||||
|
// catch (Exception)
|
||||||
|
// {
|
||||||
|
// messages.Add(new ToastMessage
|
||||||
|
// {
|
||||||
|
// Type = ToastType.Danger,
|
||||||
|
// Message = $"Error al guardar.",
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task obtListadoTipo()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Expression<Func<ENUMERACIONES, bool>> filtro = x => x.IDGRUPOENUMERACIONNavigation!.GRUPO! == "TIPONOM";
|
||||||
|
List<ENUMERACIONES> enumsEncontrado = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/filtrar", filtro);
|
||||||
|
|
||||||
|
listadoTipo = enumsEncontrado;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task obtListadoSituacion(){
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Expression<Func<ENUMERACIONES, bool>> filtro = x => x.IDGRUPOENUMERACIONNavigation!.GRUPO! == "SITNOM";
|
||||||
|
|
||||||
|
List<ENUMERACIONES> enumsEncontrado = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/filtrar", filtro);
|
||||||
|
|
||||||
|
listadoSituacion = enumsEncontrado;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private bool showDropdown { get; set; }
|
||||||
|
private bool showDropdowntit { get; set; }
|
||||||
|
private string filterText { get; set; } = "";
|
||||||
|
private string filterTextTit { get; set; } = "";
|
||||||
|
private string linkVolver { get; set; } = "";
|
||||||
|
|
||||||
|
//LIST GRID PUESTOS
|
||||||
|
private NOMINAS Nominas { get; set; }
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
|
||||||
|
private ValidationMessageStore? messageStore;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,532 @@
|
|||||||
|
@page "/InfoPers"
|
||||||
|
@page "/InfoPers/{cl}"
|
||||||
|
@using BlazorBootstrap
|
||||||
|
@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
|
||||||
|
|
||||||
|
@* <EditForm EditContext="@editContext">
|
||||||
|
<DataAnnotationsValidator /> *@
|
||||||
|
|
||||||
|
<div class="datos-personales-container mt-3">
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<div><input type="button" class="btnOAAFAzul mb-2" value="Guardar persona" @onclick="GuardarPersona" /></div>
|
||||||
|
<div class="row flex-grow-1 mb-4">
|
||||||
|
<!-- Imagen -->
|
||||||
|
<div class="col-xl-2 flex-column">
|
||||||
|
<div class="bin-img-emp-place-holder bin-img-text-panel position-relative imgInfoPersona d-flex justify-content-center">
|
||||||
|
@if (!string.IsNullOrEmpty(FotoBase64))
|
||||||
|
{
|
||||||
|
<img src="data:image/jpeg;base64,@FotoBase64" alt="Foto de la persona" style="width:auto; height: 100%; overflow:hidden; object-fit: cover;" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="bin-img-tbl d-flex justify-content-center align-items-center h-100">
|
||||||
|
<div>No hay imagen</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<!-- Input "oculto" que ocupa el espacio del contenedor -->
|
||||||
|
<InputFile OnChange="@(args => ProcesarImagen(args))" accept="image/*" style="opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; cursor: pointer;" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<!-- Otros campos del formulario -->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtdni" class="fw-bold">D.N.I.: </label>
|
||||||
|
<input class="form-control" id="txtdni" @bind-value="@persona.NIF" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtsexo" class="fw-bold">Sexo: </label>
|
||||||
|
<InputSelect @bind-Value="persona.IDSEXO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lSexo != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lSexo)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtTipPer" class="fw-bold">Tipo Personal: </label>
|
||||||
|
|
||||||
|
<InputSelect @bind-Value="persona.IDTIPO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lTiposPers != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lTiposPers)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
|
||||||
|
@* <input class="form-control" id="txtTipPer" value="@persona.IDTIPONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtFeNac" class="fw-bold">Fecha Nacimiento: </label>
|
||||||
|
<input type="date" class="form-control" id="txtFeNac" @bind-value="@persona.FECHANACIMIENTO" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtLuNac" class="fw-bold">Lugar Nacimiento: </label>
|
||||||
|
<input class="form-control" id="txtLuNac" @bind-value="@persona.LUGARNACIMIENTO" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtCodigoAnt" class="fw-bold">Código Antiguo: </label>
|
||||||
|
<input class="form-control" id="txtCodigoAnt" @bind-value="@persona.CODIGOANTIGUODIPUTADO" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtApellidos" class="fw-bold">Apellidos: </label>
|
||||||
|
<input class="form-control" id="txtApellidos" @bind-value="@persona.APELLIDOS" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNombre" class="fw-bold">Nombre: </label>
|
||||||
|
<input class="form-control" id="txtNombre" @bind-value="@persona.NOMBRE" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNivel" class="fw-bold">Nivel: </label>
|
||||||
|
<input class="form-control" id="txtNivel" @bind-value="@persona.NIVEL" />
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtTiCont" class="fw-bold">Tipo Contrato: </label>
|
||||||
|
<InputSelect @bind-Value="persona.IDCONTRATO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lTipoContra != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lTipoContra)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDCONTRATO"> @enumera.CODIGO - @enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
@* <input class="form-control" id="txtTiCont" disabled value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtGrupo" class="fw-bold">Grupo: </label>
|
||||||
|
|
||||||
|
<InputSelect @bind-Value="persona.IDGRUPOFUNCIONARIO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lGrupo != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lGrupo)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
|
||||||
|
@* <input class="form-control" id="txtGrupo" disabled value="@persona.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtCuentaCotizacion" class="fw-bold">Cuenta Cotización: </label>
|
||||||
|
<InputSelect @bind-Value="persona.IDCUENTACOTIZACIONPATRONAL" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lCuentaCoti != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lCuentaCoti)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDCUENTACOTIZACIONPATRONAL">@enumera.CODIGO - @enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
@* <input class="form-control" id="txtNivel" disabled value="@persona.IDCUENTACOTIZACIONPATRONALNavigation?.CUENTANOMBRE" /> *@
|
||||||
|
</div>
|
||||||
|
<!---->
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtDepartamento" class="fw-bold">Departamento: </label>
|
||||||
|
<InputSelect @bind-Value="persona.IDDEPARTAMENTO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lDepartamento != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lDepartamento)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
@* <input class="form-control" id="txtDepartamento" disabled value="@persona.IDDEPARTAMENTONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtDepartamento" class="fw-bold">Ocupación: </label>
|
||||||
|
<InputSelect @bind-Value="persona.IDOCUPACION" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lOcupacion != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lOcupacion)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
@* <input class="form-control" id="txtDepartamento" disabled value="@persona.IDDEPARTAMENTONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="max-height:415px; overflow-y:auto; overflow-x:hidden">
|
||||||
|
<Tabs @ref=tabsDtsPer NavStyle="NavStyle.VerticalUnderline" Class="col-md-2" style="margin-top:25px; font-size:12px; gap:0; width:165px; overflow-y:auto" OnShown="@(args => OnTabShownAsync(args))">
|
||||||
|
<Tab Title="Nóminas" Name="tabNominas">
|
||||||
|
<Content>
|
||||||
|
<NominaGrid Persona="persona"></NominaGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Incidencias" Name="tabIncidencias">
|
||||||
|
<Content>
|
||||||
|
<IncidenciaGrid Persona="persona"></IncidenciaGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Enfermedades" Name="tabEnfermedades">
|
||||||
|
<Content>
|
||||||
|
<EnfermedadesGrid Persona="persona"></EnfermedadesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Maternidades/Riesgo Embarazo" Name="tabMaternidades">
|
||||||
|
<Content>
|
||||||
|
<MaternidadesGrid Persona="persona"></MaternidadesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Diferencia Pago Delegado" Name="tabDiferencia">
|
||||||
|
<Content>
|
||||||
|
<MaternidadesGrid Persona="persona"></MaternidadesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Permisos sin Retribución" Name="tabPermSinRet">
|
||||||
|
<Content>
|
||||||
|
<PermisosSinRetriGrid Persona="persona"></PermisosSinRetriGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Huelgas" Name="tabHuelgas">
|
||||||
|
<Content>
|
||||||
|
<HuelgasGrid Persona="persona"></HuelgasGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Puestos Trabajo" Name="tabPuestos">
|
||||||
|
<Content>
|
||||||
|
<PuestosTrabajoGrid Persona="persona"></PuestosTrabajoGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Otros Datos" Name="tabOtrosDatos">
|
||||||
|
<Content>
|
||||||
|
<OtrosDatosGrid Persona="persona"></OtrosDatosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Reducciones Jornada" Name="tabRedJorn">
|
||||||
|
<Content>
|
||||||
|
<ReduccionesJornadaGrid Persona="persona"></ReduccionesJornadaGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Trabajadores a Tiempo Parcial" Name="tabTrabTiempoPar">
|
||||||
|
<Content>
|
||||||
|
<TrabajadoresTiempoParcialGrid Persona="persona"></TrabajadoresTiempoParcialGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Sexenios y Quintenios" Name="tabSexeQuinte">
|
||||||
|
<Content>
|
||||||
|
<SexeniosQuinqueniosGrid Persona="persona"></SexeniosQuinqueniosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Trienios y C. Carrera" Name="tabTriCar">
|
||||||
|
<Content>
|
||||||
|
<TrieniosCarreraGrid Persona="persona"></TrieniosCarreraGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Diferencia de Trienios" Name="tabDifTri">
|
||||||
|
<Content>
|
||||||
|
<DiferenciaTrieniosGrid Persona="persona"></DiferenciaTrieniosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Préstamos" Name="tabPrestamos">
|
||||||
|
<Content>
|
||||||
|
<PrestamosGrid Persona="persona"></PrestamosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Retenciones Judiciales" Name="tabRetJudiciales">
|
||||||
|
<Content>
|
||||||
|
<RetencionesJudicialesGrid Persona="persona"></RetencionesJudicialesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Productividad" Name="tabProductividad">
|
||||||
|
<Content>
|
||||||
|
<ProductividadGrid Persona="persona"></ProductividadGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Hijos" Name="tabHijos">
|
||||||
|
<Content>
|
||||||
|
<HijosGrid Persona="persona"></HijosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Ascendientes" Name="tabAscendientes">
|
||||||
|
<Content>
|
||||||
|
<AscendientesGrid Persona="persona"></AscendientesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Otras Retribuciones" Name="tabOtrasRet">
|
||||||
|
<Content>
|
||||||
|
<OtrasRetribucionesGrid Persona="persona"></OtrasRetribucionesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="IRPF (Situación actual)" Name="tabIRPFAct">
|
||||||
|
<Content>
|
||||||
|
<IRPFActGrid Persona="persona"></IRPFActGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="IRPF (Historial Regularizaciones)" Name="tabIRPFhist">
|
||||||
|
<Content>
|
||||||
|
<IRPFHistGrid Persona="persona"></IRPFHistGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Expedientes" Name="tabExpedientes">
|
||||||
|
<Content>
|
||||||
|
<ExpedientesGrid Persona="persona"></ExpedientesGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Permisos" Name="tabPermisos">
|
||||||
|
<Content>
|
||||||
|
<PermisosGrid Persona="persona"></PermisosGrid>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public string? cl { get; set; } = "";
|
||||||
|
public bool mostrar { get; set; } = true;
|
||||||
|
public bool mostrarBtn { get; set; } = false;
|
||||||
|
List<ENUMERACIONES> ListaSexos = new List<ENUMERACIONES>();
|
||||||
|
List<ENUMERACIONES> ListaTipos = new List<ENUMERACIONES>();
|
||||||
|
private Modal popupCodigosPostales = default!;
|
||||||
|
List<MUNICIPIOS> listaCodigosRepes = new List<MUNICIPIOS>();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
private static PERSONAS persona = new PERSONAS();
|
||||||
|
FICHEROS ficheroFoto = new FICHEROS();
|
||||||
|
public string FotoBase64 { get; set; } = "";
|
||||||
|
public byte[]? FotoBytes { get; set; } // Parámetro para la foto
|
||||||
|
private string lblNombre = "";
|
||||||
|
private EditContext editContext = new EditContext(persona);
|
||||||
|
private ValidationMessageStore? messageStore;
|
||||||
|
private string errorMessage = "";
|
||||||
|
|
||||||
|
private List<ENUMERACIONES> lTiposPers = new List<ENUMERACIONES>();
|
||||||
|
private List<CONTRATOS> lTipoContra = new List<CONTRATOS>();
|
||||||
|
private List<ENUMERACIONES> lGrupo = new List<ENUMERACIONES>();
|
||||||
|
private List<CUENTASCOTIZACIONPATRONAL> lCuentaCoti = new List<CUENTASCOTIZACIONPATRONAL>();
|
||||||
|
private List<ENUMERACIONES> lDepartamento = new List<ENUMERACIONES>();
|
||||||
|
private List<ENUMERACIONES> lOcupacion = new List<ENUMERACIONES>();
|
||||||
|
private List<ENUMERACIONES> lSexo = new List<ENUMERACIONES>();
|
||||||
|
private Tabs tabsDtsPer { get; set; } = new Tabs();
|
||||||
|
|
||||||
|
private async Task GuardarPersona()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
private async Task OnTabShownAsync(TabsEventArgs args)
|
||||||
|
{
|
||||||
|
var panelActivo = args.ActiveTabName;
|
||||||
|
|
||||||
|
await ProtectedSessionStore.SetAsync("ultiTabNom", panelActivo);
|
||||||
|
|
||||||
|
}
|
||||||
|
private async Task CargarSelects()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
lTiposPers = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPPER");
|
||||||
|
lGrupo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/GRUPOFUNCIONARIO");
|
||||||
|
lDepartamento = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/DEP");
|
||||||
|
lOcupacion = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/OCUP");
|
||||||
|
lSexo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
|
||||||
|
// lTipoContra = await Utilidades.ObtenerObjeto<List<CONTRATOS>>(cliente, "/api/CONTRATOS");
|
||||||
|
var responseTipCon = await cliente.GetAsync("/api/CONTRATOS/");
|
||||||
|
if (responseTipCon.IsSuccessStatusCode) { lTipoContra = JsonConvert.DeserializeObject<List<CONTRATOS>>(await responseTipCon.Content.ReadAsStringAsync()); }
|
||||||
|
var responseCoti = await cliente.GetAsync("/api/CUENTASCOTIZACIONPATRONAL");
|
||||||
|
if (responseCoti.IsSuccessStatusCode) { lCuentaCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(await responseCoti.Content.ReadAsStringAsync()); }
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
mostrar = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
protected async override Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
await ObtenerFoto();
|
||||||
|
}
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
|
||||||
|
|
||||||
|
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
|
||||||
|
{
|
||||||
|
cl = clValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(cl))
|
||||||
|
{
|
||||||
|
persona = new PERSONAS();
|
||||||
|
mostrarBtn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
||||||
|
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
|
||||||
|
string nifDesencriptado = tsUtilidades.crypt.FEncS(cl,
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
-875421649);
|
||||||
|
|
||||||
|
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
|
||||||
|
}
|
||||||
|
|
||||||
|
var resultContent = await response.Content.ReadAsStringAsync();
|
||||||
|
persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
|
||||||
|
lblNombre = persona.NOMBRE + " " + persona.APELLIDOS;
|
||||||
|
editContext = new EditContext(persona);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected void volver() { Navigation.NavigateTo("/ListTrabajadores", forceLoad: true); }
|
||||||
|
private async Task ObtenerFoto()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (persona.IDFICHEROFOTO.HasValue)
|
||||||
|
{
|
||||||
|
// Crear el cliente utilizando la utilidad
|
||||||
|
var client = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
||||||
|
|
||||||
|
// Construir la URI para el endpoint del fichero
|
||||||
|
string baseUri = Utilidades.urlSwagger();
|
||||||
|
string uri = $"{baseUri}FICHEROS/{persona.IDFICHEROFOTO}";
|
||||||
|
|
||||||
|
// Usar la utilidad para obtener el fichero
|
||||||
|
ficheroFoto = await Utilidades.ObtenerObjeto<FICHEROS>(client, uri);
|
||||||
|
|
||||||
|
if (ficheroFoto?.FICHERO != null)
|
||||||
|
{
|
||||||
|
FotoBase64 = Convert.ToBase64String(ficheroFoto.FICHERO);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FotoBase64 = "";
|
||||||
|
Console.WriteLine("No se encontró una foto asociada al ID.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("La persona no tiene un ID de foto asociado.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al cargar la foto: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task ProcesarImagen(InputFileChangeEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Obtén el archivo seleccionado
|
||||||
|
IBrowserFile archivo = e.File;
|
||||||
|
|
||||||
|
if (archivo != null)
|
||||||
|
{
|
||||||
|
// Define el tamaño máximo permitido (por ejemplo, 10 MB)
|
||||||
|
const long maxFileSize = 10 * 1024 * 1024;
|
||||||
|
|
||||||
|
// Lee el archivo como un stream
|
||||||
|
using var stream = archivo.OpenReadStream(maxFileSize);
|
||||||
|
using var memoryStream = new MemoryStream();
|
||||||
|
await stream.CopyToAsync(memoryStream);
|
||||||
|
|
||||||
|
// Convierte el archivo a Base64
|
||||||
|
//FotoBase64 = Convert.ToBase64String(memoryStream.ToArray());
|
||||||
|
FotoBytes = memoryStream.ToArray();
|
||||||
|
|
||||||
|
if (FotoBytes != null)
|
||||||
|
{
|
||||||
|
FICHEROS fichero = new FICHEROS();
|
||||||
|
if (ficheroFoto != null)
|
||||||
|
{
|
||||||
|
fichero = ficheroFoto;
|
||||||
|
}
|
||||||
|
|
||||||
|
fichero.DESCRIPCION = "FOTO PERSONA";
|
||||||
|
fichero.FECHA = DateTime.Now;
|
||||||
|
fichero.NOMBREFICHERO = "foto.png";
|
||||||
|
fichero.FICHERO = FotoBytes;
|
||||||
|
|
||||||
|
persona.IDFICHEROFOTONavigation = fichero;
|
||||||
|
FotoBase64 = Convert.ToBase64String(FotoBytes);
|
||||||
|
}
|
||||||
|
// Forza la actualización del componente
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al procesar la imagen: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="ASCENDIENTES"
|
||||||
|
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="ASCENDIENTES" HeaderText="Nombre">
|
||||||
|
@context.NOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ASCENDIENTES" HeaderText="Fecha Nacimiento">
|
||||||
|
@context.FECHANACIMIENTO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ASCENDIENTES" HeaderText="convivencia">
|
||||||
|
@context.CONVIVENCIA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ASCENDIENTES" HeaderText="Discapacidad">
|
||||||
|
@context.IDDISCAPACIDADNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ASCENDIENTES" HeaderText="Movilidad Reducida">
|
||||||
|
@if (context.MOVILIDADREDUCIDA)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<ASCENDIENTES> itmList = new List<ASCENDIENTES>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.ASCENDIENTES;
|
||||||
|
foreach (ASCENDIENTES i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="DIFERENCIAPAGODELEGADO"
|
||||||
|
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="DIFERENCIAPAGODELEGADO" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIAPAGODELEGADO" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIAPAGODELEGADO" HeaderText="Base Diaria Seguridad Social">
|
||||||
|
@context.BASEDIARIASEGURIDADSOCIAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIAPAGODELEGADO" HeaderText="Base Pago Directo">
|
||||||
|
@context.BASEPAGODIRECTO
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
// private List<int?> meses = new List<int?>();
|
||||||
|
private List<DIFERENCIAPAGODELEGADO> itmList = new List<DIFERENCIAPAGODELEGADO>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.DIFERENCIAPAGODELEGADO;
|
||||||
|
foreach (DIFERENCIAPAGODELEGADO i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="DIFERENCIATRIENIOS"
|
||||||
|
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="DIFERENCIATRIENIOS" HeaderText="Número Trienios">
|
||||||
|
@context.NUMEROTRIENIOS
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Descripción">
|
||||||
|
@context.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Tipo">
|
||||||
|
@context.TIPO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Fecha Alta">
|
||||||
|
@context.FECHAALTA?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Fecha Baja">
|
||||||
|
@context.FECHABAJA?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<DIFERENCIATRIENIOS> itmList = new List<DIFERENCIATRIENIOS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.DIFERENCIATRIENIOS;
|
||||||
|
foreach (DIFERENCIATRIENIOS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="ENFERMEDADES"
|
||||||
|
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="ENFERMEDADES" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Base">
|
||||||
|
@context.BASE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Tipo">
|
||||||
|
@context.IDTIPONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Continuidad">
|
||||||
|
@if (context.CONTINUIDAD)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="ENFERMEDADES" HeaderText="Nómina Seguridad social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<ENFERMEDADES> itmList = new List<ENFERMEDADES>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (ENFERMEDADES enf in Persona.ENFERMEDADES)
|
||||||
|
|
||||||
|
{
|
||||||
|
itmList.Add(enf);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="EXPEDIENTESPERSONAS"
|
||||||
|
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="EXPEDIENTESPERSONAS" HeaderText="Fecha Cálculo">
|
||||||
|
@context.FECHA?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXPEDIENTESPERSONAS" HeaderText="Año">
|
||||||
|
@context.TIPONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXPEDIENTESPERSONAS" HeaderText="Tipo Retención Calculado">
|
||||||
|
@context.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<EXPEDIENTESPERSONAS> itmList = new List<EXPEDIENTESPERSONAS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.EXPEDIENTESPERSONAS;
|
||||||
|
foreach (EXPEDIENTESPERSONAS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="HIJOS"
|
||||||
|
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="HIJOS" HeaderText="Nombre">
|
||||||
|
@context.NOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Fecha Nacimiento">
|
||||||
|
@context.FECHANACIMIENTO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Discapacidad">
|
||||||
|
@context.IDDISCAPACIDADNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Entero IRPF">
|
||||||
|
@if (context.ENTEROIRPF)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Sexo">
|
||||||
|
@context.SEXO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Fecha Adopción">
|
||||||
|
@context.FECHAADOPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HIJOS" HeaderText="Movilidad Reducida">
|
||||||
|
@if (context.MOVILIDADREDUCIDA)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<HIJOS> itmList = new List<HIJOS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.HIJOS;
|
||||||
|
foreach (HIJOS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="HUELGAS"
|
||||||
|
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="HUELGAS" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Horas">
|
||||||
|
@context.HORAS
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Nómina Origen de Datos">
|
||||||
|
@context.IDNOMINAORIGENDATOSNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Nómina Aplicación">
|
||||||
|
@context.IDNOMINAAPLICACIONNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Observaciones">
|
||||||
|
@context.OBSERVACIONES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HUELGAS" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<HUELGAS> itmList = new List<HUELGAS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.HUELGAS;
|
||||||
|
foreach (HUELGAS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
@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="col-md-10" style="margin-inline:auto;">
|
||||||
|
|
||||||
|
<p class="tituloCaja">Discapacidad</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* % Discapacidad *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtPorDis" class="fw-bold widthLabel">% Discapacidad: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null && @Persona.IDSITUACIONACTUALIRPFNavigation.IDDISCAPACIDADNavigation != null){
|
||||||
|
<input class="form-control" disabled id="txtPorDis" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDDISCAPACIDADNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtPorDis" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@* Necesita Ayuda 3º Persona *@
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="txtAyuda" class="fw-bold widthLabel">Ingreso Administración : </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="txtAyuda" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.NECEAYUDATERCPERSOMOVILRED" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="txtAyuda" />
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja">Situación Familiar</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Situación *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtIngrAdmin" class="fw-bold widthLabel">Situación: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtIngrAdmin" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONFAMILIARNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtIngrAdmin" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@* Ingreso Administración Estado *@
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="txtIngrAdminEst" class="fw-bold widthLabel">: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="txtIngrAdminEst" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.NIFCONYUGE" />
|
||||||
|
}
|
||||||
|
else { <input type="checkbox" class="form-control" disabled id="txtIngrAdminEst" /> }
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 d-flex">
|
||||||
|
<p>
|
||||||
|
<b>*Situación 1:</b> Solter/a, viudo/a, divorciado/a legalmente, con hijos solteros menores de 18 años o incapacitados judicialmente que convivan exclusivamente con el perceptor, sin convivir también con el otro progenitor, siempre que proceda consignar al menos un hijo o descendiente en los apartados "Descendientes" e "Hijos".
|
||||||
|
<br>
|
||||||
|
<b>*Situación 2:</b> Perceptor casado y no separado legalmente cuyo cónyuge no obtenga rentas superiores a 1.500 euros anuales, excluidas las exentas.
|
||||||
|
<br>
|
||||||
|
<b>*Situación 3:</b> Perceptor cuya situación familiar es distinta de las dos anteriores.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja">Situación Laboral</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Situación *@
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="txtSLSitu" class="fw-bold widthLabel">Situación: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtSLSitu" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONLABORALNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtSLSitu" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="txtCLCR" class="fw-bold widthLabel">Contrato o Relación: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null && Persona.IDSITUACIONACTUALIRPFNavigation.IDCONTRATOORELACIONNavigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtSLCR" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDCONTRATOORELACIONNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtSLCR"/>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="txtSLSitu" class="fw-bold widthLabel">Movilidad Geografica: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="txtSLSitu" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.MOVILIDADGEOGRAFICA" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="txtSLSitu" />
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="chbProVL" class="fw-bold widthLabel">Prolongación Vida Laboral: </label>
|
||||||
|
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="chbProVL" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.PROLONGACTLABORAL" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input type="checkbox" class="form-control" disabled id="chbProVL" />
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="HISTORICOIRPF"
|
||||||
|
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="HISTORICOIRPF" HeaderText="Fecha Cálculo">
|
||||||
|
@context.FECHACALCULO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HISTORICOIRPF" HeaderText="Año">
|
||||||
|
@context.ANNO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="HISTORICOIRPF" HeaderText="Tipo Retención Calculado">
|
||||||
|
@context.TIPODERETENCIONCALCULADO
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<HISTORICOIRPF> itmList = new List<HISTORICOIRPF>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.HISTORICOIRPF;
|
||||||
|
foreach (HISTORICOIRPF i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
|
||||||
|
<Accordion>
|
||||||
|
@foreach (var año in annos.Take(annos.Count))
|
||||||
|
{
|
||||||
|
// 1) Filtramos todas las incidencias de ese año
|
||||||
|
var listadoAño = itmList
|
||||||
|
.Where(x => x.AÑONOMINA == año)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// 2) Sacamos los meses distintos, ordenados desc.
|
||||||
|
var meses = listadoAño
|
||||||
|
.Where(x => x.MESNOMINA.HasValue)
|
||||||
|
.Select(x => x.MESNOMINA.Value)
|
||||||
|
.Distinct()
|
||||||
|
.OrderByDescending(m => m)
|
||||||
|
.ToList();
|
||||||
|
var titulo = "Año Nómina: " + @año;
|
||||||
|
<AccordionItem Title="@titulo">
|
||||||
|
<Content>
|
||||||
|
<Accordion>
|
||||||
|
@foreach (var mes in meses)
|
||||||
|
{
|
||||||
|
// Listado filtrado por mes y año
|
||||||
|
var listadoMes = listadoAño
|
||||||
|
.Where(x => x.MESNOMINA == mes)
|
||||||
|
.ToList();
|
||||||
|
var nombreMes = nombMeses[mes - 1];
|
||||||
|
var tituloMes = $"{mes}-{nombreMes}";
|
||||||
|
|
||||||
|
<AccordionItem Title="@tituloMes">
|
||||||
|
<Content>
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="INCIDENCIAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listadoMes"
|
||||||
|
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="INCIDENCIAS" HeaderText="Nómina">
|
||||||
|
@context.IDNOMINANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Concepto">
|
||||||
|
@context.IDCONCEPTONOMINANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Sustituye Concepto">
|
||||||
|
@if (context.SUSTITUYECONCEPTO)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Cotiza Seguridad Social">
|
||||||
|
@if (context.COTIZASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Texto">
|
||||||
|
@context.TEXTO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Cantidad">
|
||||||
|
@context.CANTIDAD
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Importe">
|
||||||
|
@context.IMPORTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="IRPF">
|
||||||
|
@context.IRPF
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="IRPF Ficha">
|
||||||
|
@if (context.IRPFFICHA)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="No para IRPF">
|
||||||
|
@if (context.NOPARAIRPF)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Nómina Origen">
|
||||||
|
@context.IDNOMINANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="INCIDENCIAS" HeaderText="Apl. Presupuestaria">
|
||||||
|
@context.APLICACIONPRESUPUESTARIA
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</AccordionItem>
|
||||||
|
}
|
||||||
|
</Accordion>
|
||||||
|
</Content>
|
||||||
|
</AccordionItem>
|
||||||
|
}
|
||||||
|
</Accordion>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
private string titulo { get; set; }
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<int?> annos = new List<int?>();
|
||||||
|
// private List<int?> meses = new List<int?>();
|
||||||
|
private List<INCIDENCIAS> itmList = new List<INCIDENCIAS>();
|
||||||
|
private List<String> nombMeses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
// cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
||||||
|
// Expression<Func<INCIDENCIAS, bool>> filtro = x => x.IDPERSONA == Persona.IDPERSONA;
|
||||||
|
// itmList = await Utilidades.ObtenerObjeto<List<INCIDENCIAS>>(cliente, "/api/INCIDENCIAS/filtrar", filtro);
|
||||||
|
|
||||||
|
|
||||||
|
var listnom = Persona.INCIDENCIAS.Where(x => x.ESDELIQUIDACION == false).ToList();
|
||||||
|
foreach (INCIDENCIAS i in listnom)
|
||||||
|
{
|
||||||
|
itmList.Add(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (var i = 0; i < itmList.Count; i++)
|
||||||
|
{
|
||||||
|
int? year = itmList[i].AÑONOMINA;
|
||||||
|
if (year.HasValue)
|
||||||
|
{
|
||||||
|
if (annos.Contains(year) == false)
|
||||||
|
{
|
||||||
|
annos.Add(year);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
annos = annos.OrderDescending().ToList();
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="MATERNIDADES"
|
||||||
|
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="MATERNIDADES" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Base Cotización Seguridad Social">
|
||||||
|
@context.BASECOTIZACIONSEGURIDADSOCIAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Porcentaje Reducción Jornada">
|
||||||
|
@context.PORCENTAJEREDUCCIONJORNADA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Riesgo Embarazo">
|
||||||
|
@if (context.RIESGOEMBARAZO)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="MATERNIDADES" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
// private List<int?> meses = new List<int?>();
|
||||||
|
private List<MATERNIDADES> itmList = new List<MATERNIDADES>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.MATERNIDADES;
|
||||||
|
foreach (MATERNIDADES i in listnom){itmList.Add(i);}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,243 @@
|
|||||||
|
@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= "tablaTabLateral">
|
||||||
|
|
||||||
|
|
||||||
|
<Accordion>
|
||||||
|
@for (var y = 0; y <= annos.Count - 1; y++)
|
||||||
|
{
|
||||||
|
var listado = itmList.Where(x => x.IDNOMINANavigation.AÑO == annos[y]).ToList();
|
||||||
|
titulo = "Año Nómina: "+annos[y].ToString();
|
||||||
|
<AccordionItem Title="@titulo">
|
||||||
|
<Content>
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="NOMINATRABAJADORCABECERA"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="listado"
|
||||||
|
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="NOMINATRABAJADORCABECERA" HeaderText="Nómina">
|
||||||
|
|
||||||
|
<NavLink class="btn btn-link" href="@HashRed(context)">@context.IDNOMINANavigation?.DESCRIPCION</NavLink>
|
||||||
|
|
||||||
|
@* @context.IDNOMINANavigation?.DESCRIPCION *@
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Devengado">
|
||||||
|
@context.TOTALDEVENGADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Liquido">
|
||||||
|
@context.TOTALLIQUIDO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Grupo">
|
||||||
|
@context.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Nivel">
|
||||||
|
@context.NIVEL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Efectivos">
|
||||||
|
@context.DIASEFECTIVOS
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Enfermo">
|
||||||
|
@context.DIASENFERMOS
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Accidentes">
|
||||||
|
@context.DIASACCIDENTES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Falta">
|
||||||
|
@context.DIASFALTA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Permisos Sin Retribuir">
|
||||||
|
@context.DIASPERMISOSSINRETRIBUIR
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Maternidad">
|
||||||
|
@context.DIASMATERNIDAD
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Acumulada">
|
||||||
|
@if (context.ACUMULADA == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Protegida">
|
||||||
|
@if (context.PROTEGIDA == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Pluriempleo">
|
||||||
|
@context.PLURIEMPLEO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Nº Pluriempleo">
|
||||||
|
@context.NUMEROPLURIEMPLEO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Seguridad Social">
|
||||||
|
@context.TOTALSEGURIDADSOCIAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Prorrata Paga Extra">
|
||||||
|
@context.PRORRATAPAGAEXTRA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Prorrata Productividad">
|
||||||
|
@context.PRORRATAPRODUCTIVIDAD
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Deducciones">
|
||||||
|
@context.TOTALDEDUCCIONES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Haberes">
|
||||||
|
@context.TOTALHABERES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Otras Deducciones">
|
||||||
|
@context.OTRASDEDUCCIONES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Seguridad social Pago en Especie">
|
||||||
|
@context.TOTALSEGURIDADSOCIALPAGOENESPECIE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Epigrafe 126">
|
||||||
|
@context.TOTALEPIGRAFE126
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Maternidad Paternidad">
|
||||||
|
@context.TOTALMATERNIDADPATERNIDAD
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Total Permiso Sin Retribuir">
|
||||||
|
@context.TOTALPERMISOSINRETRIBUIR
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="SINDICATO">
|
||||||
|
@context.SINDICATO1
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Reducción Jornada">
|
||||||
|
@context.REDUCCIONJORNADA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Trabajo Tiempo Parcial">
|
||||||
|
@context.TRABAJOTIEMPOPARCIAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Mutua">
|
||||||
|
@context.MUTUA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Enfermedad al 60">
|
||||||
|
@context.DIASENFERMEDADAL60
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Base Enfermedad al 60">
|
||||||
|
@context.BASEENFERMEDADAL60
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Enfermadad al 75">
|
||||||
|
@context.DIASENFERMEDADAL75
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Accidentes">
|
||||||
|
@context.DIASACCIDENTES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Base Accidentes">
|
||||||
|
@context.BASEACCIDENTES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Días Base Pago Directo">
|
||||||
|
@context.DIASBASEPAGODIRECTO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Base Pago Directo">
|
||||||
|
@context.BASEPAGODIRECTO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Visible">
|
||||||
|
@if (context.VISIBLE == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Modificable">
|
||||||
|
@if (context.MODIFICABLE == true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Mes Nomina">
|
||||||
|
@context.MESNOMINA
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</AccordionItem>
|
||||||
|
}
|
||||||
|
</Accordion>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona{ get; set; } = new PERSONAS();
|
||||||
|
public int? idNom { get; set; }
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<int> annos = new List<int>();
|
||||||
|
private string titulo { get; set; }
|
||||||
|
private List<NOMINATRABAJADORCABECERA> itmList = new List<NOMINATRABAJADORCABECERA>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.NOMINATRABAJADORCABECERA;
|
||||||
|
foreach (NOMINATRABAJADORCABECERA i in listnom)
|
||||||
|
{
|
||||||
|
itmList.Add(i);
|
||||||
|
}
|
||||||
|
for (var i = 0; i < itmList.Count; i++)
|
||||||
|
{
|
||||||
|
if (annos.Contains(itmList[i].IDNOMINANavigation.AÑO) == false)
|
||||||
|
{
|
||||||
|
annos.Add(itmList[i].IDNOMINANavigation.AÑO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
annos = annos.OrderDescending().ToList();
|
||||||
|
// for (var i = 0; i < Persona.NOMINATRABAJADORCABECERA.Count; i++)
|
||||||
|
// {
|
||||||
|
// NOMINATRABAJADORCABECERA nom = new NOMINATRABAJADORCABECERA();
|
||||||
|
// // nom = Persona.NOMINATRABAJADORCABECERA;
|
||||||
|
|
||||||
|
|
||||||
|
// // itmList.Add(Persona.NOMINATRABAJADORCABECERA[i])
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private string HashRed(NOMINATRABAJADORCABECERA nom)
|
||||||
|
{
|
||||||
|
string link = "/NomPers?cl=" + tsUtilidades.crypt.FEncS(
|
||||||
|
Persona.NIF + "-" + nom.IDNOMINA.ToString(),
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
875421649);
|
||||||
|
// + "&cn=" + tsUtilidades.crypt.FEncS(nom.IDNOMINA.ToString(),
|
||||||
|
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
// 875421649);
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="OTRASRETRIBUCIONES"
|
||||||
|
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="OTRASRETRIBUCIONES" HeaderText="Mes">
|
||||||
|
@context.MES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Año">
|
||||||
|
@context.AÑO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Importe">
|
||||||
|
@context.IMPORTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Seguridad Social">
|
||||||
|
@if (context.SEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="IRPF">
|
||||||
|
@if (context.IRPF)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Cra">
|
||||||
|
@context.CRA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Descripción">
|
||||||
|
@context.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<OTRASRETRIBUCIONES> itmList = new List<OTRASRETRIBUCIONES>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.OTRASRETRIBUCIONES;
|
||||||
|
foreach (OTRASRETRIBUCIONES i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
@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="col-md-10" style="margin-inline:auto;">
|
||||||
|
<p class="tituloCaja">Varios</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Mutua *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtMutua" class="fw-bold widthLabel li-height50">Mutua: </label>
|
||||||
|
@if (Persona.IDMUTUANavigation != null){
|
||||||
|
<input class="form-control" disabled id="txtMutua" @bind-value="@Persona.IDMUTUANavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtMutua" />
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
@* Mutua2 *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtMutua2" class="fw-bold widthLabel li-height50">Mutua 2: </label>
|
||||||
|
@if (Persona.IDMUTUA2Navigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtMutua2" @bind-value="@Persona.IDMUTUA2Navigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtMutua2" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@* Puesto Trabajo Oposición *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtPuestOp" class="fw-bold widthLabel">Puesto Trabajo Oposición: </label>
|
||||||
|
@if (Persona.IDPUESTOTRABAJOOPOSICIONNavigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtPuestOp" @bind-value="@Persona.IDPUESTOTRABAJOOPOSICIONNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtPuestOp" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@* Nº Afiliación *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtNuAfi" class="fw-bold widthLabel li-height50">Nº Afiliciación: </label>
|
||||||
|
<input class="form-control" disabled id="txtNuAfi" @bind-value="@Persona.NUMEROAFILIACIONMUTUA" />
|
||||||
|
</div>
|
||||||
|
@* Nº Afiliación 2 *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtNuAfi2" class="fw-bold widthLabel li-height50">Nº Afiliciación 2: </label>
|
||||||
|
<input class="form-control" disabled id="txtNuAfi2" @bind-value="@Persona.NUMEROAFILIACIONMUTUA2" />
|
||||||
|
</div>
|
||||||
|
@* Tratamiento *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtTratamiento" class="fw-bold widthLabel li-height50">Tratamiento: </label>
|
||||||
|
<input class="form-control" disabled id="txtTratamiento" @bind-value="@Persona.TRATAMIENTO" />
|
||||||
|
</div>
|
||||||
|
@* Importe Seguro Accidentes *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtImpSeguro" class="fw-bold widthLabel">Importe Seguro Accidentes: </label>
|
||||||
|
<input class="form-control" disabled id="txtImpSeguro" @bind-value="@Persona.SEGUROACCIDENTE" />
|
||||||
|
</div>
|
||||||
|
@* Cuenta Bancaria *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtCuentaBancaria" class="fw-bold widthLabel li-height50">Cuenta Bancaria: </label>
|
||||||
|
<input class="form-control" disabled id="txtCuentaBancaria" @bind-value="@Persona.CUENTABANCARIA" />
|
||||||
|
</div>
|
||||||
|
@* Nº Pluriempleo*@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtPluriempleo" class="fw-bold widthLabel li-height50">Nº Pluriempleo: </label>
|
||||||
|
<input class="form-control" disabled id="txtPluriempleo" @bind-value="@Persona.PLURIEMPLEO" />
|
||||||
|
</div>
|
||||||
|
@* Base Seguridad Social Junio 2010 *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtBaSeSo2010" class="fw-bold widthLabel">Base Seguridad Social Junio 2010: </label>
|
||||||
|
<input class="form-control" disabled id="txtBaSeSo2010" @bind-value="@Persona.BASESSJUN2010" />
|
||||||
|
</div>
|
||||||
|
@* Formación Academica *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtFormacion" class="fw-bold widthLabel li-height50">Formación Academica: </label>
|
||||||
|
<input class="form-control" disabled id="txtFormacion" @bind-value="@Persona.FORMACIONACADEMICA" />
|
||||||
|
</div>
|
||||||
|
@* Base Mes Anterior *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtBaseMesAnterior" class="fw-bold widthLabel li-height50">Base Mes Anterior: </label>
|
||||||
|
<input class="form-control" disabled id="txtBaseMesAnterior" @bind-value="@Persona.BASEMESANTERIOR" />
|
||||||
|
</div>
|
||||||
|
@* Fecha Alta *@
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtFechaAlta" class="fw-bold widthLabel li-height50">Fecha Alta: </label>
|
||||||
|
<input type="date" class="form-control" disabled id="txtFechaAlta" @bind-value="@Persona.FECHAALTA" />
|
||||||
|
</div>
|
||||||
|
@* Porcentaje de Pluriempleo *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtPorcentajePluriempleo" class="fw-bold widthLabel">Porcentaje de Pluriempleo: </label>
|
||||||
|
<input class="form-control" disabled id="txtPorcentajePluriempleo" @bind-value="@Persona.NUMEROPLURIEMPLEO" />
|
||||||
|
</div>
|
||||||
|
@* Causa Baja *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtCausaBaja" class="fw-bold widthLabel li-height50">Causa Baja: </label>
|
||||||
|
|
||||||
|
@if (Persona.IDCAUSABAJAPARNavigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtCausaBaja" @bind-value="@Persona.IDCAUSABAJAPARNavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtCausaBaja" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
@* Base Anterior a la Baja *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtBaseAnteriorBaja" class="fw-bold widthLabel li-height50">Base Anterior a la Baja: </label>
|
||||||
|
<input class="form-control" disabled id="txtBaseAnteriorBaja" @bind-value="@Persona.BASEANTERIORALABAJA" />
|
||||||
|
</div>
|
||||||
|
@* Fecha Baja *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtFechaBaja" class="fw-bold widthLabel li-height50">Fecha Baja: </label>
|
||||||
|
<input class="form-control" disabled id="txtFechaBaja" @bind-value="@Persona.FECHABAJA" />
|
||||||
|
</div>
|
||||||
|
@* Premio Jubilación Mensual *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtPremioJubi" class="fw-bold widthLabel">Premio Jubilación Mensual: </label>
|
||||||
|
<input class="form-control" disabled id="txtPremioJubi" @bind-value="@Persona.PREMIOJUBILACIONMENSUAL" />
|
||||||
|
</div>
|
||||||
|
@* Fecha Baja Seguridad Social *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtFechaBajaSS" class="fw-bold widthLabel">Fecha Baja Seguridad Social: </label>
|
||||||
|
<input class="form-control" disabled id="txtFechaBajaSS" @bind-value="@Persona.FECHABAJASEGURIDADSOCIAL" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8"></div>
|
||||||
|
@* Movilidad *@
|
||||||
|
<div class="col-md-3 mt-3" style="display:flex;gap:5px; align-items:center">
|
||||||
|
<p class="fw-bold m-0">Movilidad: </p>
|
||||||
|
<input type="checkbox" class="" disabled id="chkMovilidad" @bind-value="@Persona.MOVILIDADREDUCIDA" />
|
||||||
|
</div>
|
||||||
|
@* No Cotizas Desempleo *@
|
||||||
|
<div class="col-md-3 mt-3" style="display:flex;gap:5px; align-items:center">
|
||||||
|
<p class="fw-bold m-0">No Cotiza Desempleo: </p>
|
||||||
|
<input type="checkbox" class="" disabled id="chkCotizaDes" @bind-value="@Persona.NOCOTIZADESEMPLEO" />
|
||||||
|
</div>
|
||||||
|
@* Ceuta/Melilla *@
|
||||||
|
<div class="col-md-3 mt-3" style="display:flex;gap:5px; align-items:center">
|
||||||
|
<p class="fw-bold m-0">Ceuta / Melilla: </p>
|
||||||
|
<input type="checkbox" class="" disabled id="chkCM" @bind-value="@Persona.CEUTAMELILLA" />
|
||||||
|
</div>
|
||||||
|
@* Pensionistas *@
|
||||||
|
<div class="col-md-3 mt-3" style="display:flex;gap:5px; align-items:center">
|
||||||
|
<p class="fw-bold m-0">Pensionistas: </p>
|
||||||
|
<input type="checkbox" class="" disabled id="chkPensionistas" @bind-value="@Persona.PENSIONISTAS" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja">Ingresos</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Ingreso Administración Autonómica *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtIngrAdmin" class="fw-bold widthLabel">Ingreso Administración Autonómica: </label>
|
||||||
|
<input class="form-control" disabled id="txtIngrAdmin" @bind-value="@Persona.INGRADMNAUTO" />
|
||||||
|
</div>
|
||||||
|
@* Ingreso Administración Estado *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtIngrAdminEst" class="fw-bold widthLabel">Ingreso Administración Estado: </label>
|
||||||
|
<input class="form-control" disabled id="txtIngrAdminEst" @bind-value="@Persona.INGRESOADMINISTRACIONESTADO" />
|
||||||
|
</div>
|
||||||
|
@* Ingreso Administración Local *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtIngrAdminLoc" class="fw-bold widthLabel">Ingreso Administración Local: </label>
|
||||||
|
<input class="form-control" disabled id="txtIngrAdminLoc" @bind-value="@Persona.INGRESOADMINISTRACIONLOCAL" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja">Sindicatos</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Sindicato 1 *@
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="selSindicato1" class="fw-bold widthLabel">Sindicato 1: </label>
|
||||||
|
<input class="form-control" disabled id="SelSindicato1" @bind-value="@Persona.IDSINDICATO1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="CuotaSindical1" class="fw-bold widthLabel">Cuota Sindical 1: </label>
|
||||||
|
<input class="form-control" disabled id="CuotaSindical1" @bind-value="@Persona.CUOTASINDICAL1" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="selSindicato2" class="fw-bold widthLabel">Sindicato 2: </label>
|
||||||
|
<input class="form-control" disabled id="SelSindicato2" @bind-value="@Persona.IDSINDICATO2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="CuotaSindical2" class="fw-bold widthLabel">Cuota Sindical 2: </label>
|
||||||
|
<input class="form-control" disabled id="CuotaSindical2" @bind-value="@Persona.CUOTASINDICAL2" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
@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="col-md-10" style="margin-inline:auto;">
|
||||||
|
|
||||||
|
<p class="tituloCaja">Permisos</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbsupTodo" class="fw-bold widthLabel">Supervisor de todo: </label>
|
||||||
|
<input class="form-control" disabled id="chbsubTodo" @bind-value="@Persona.SUPERVISORDETODO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbAdmCH" class="fw-bold widthLabel">Administrador Control Horario: </label>
|
||||||
|
<input class="form-control" disabled id="chbAdmCH" @bind-value="@Persona.ADMINISTRADORCONTROLHORARIO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbDelP" class="fw-bold widthLabel">Delegado Permisos: </label>
|
||||||
|
<input class="form-control" disabled id="chbDelP" @bind-value="@Persona.DELEGADOINFORMES" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbSupDep" class="fw-bold widthLabel">Supervisor Departamento: </label>
|
||||||
|
<input class="form-control" disabled id="chbSupDep" @bind-value="@Persona.SUPERVISORDEPARTAMENTO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbAdmTot" class="fw-bold widthLabel">Administrador Total: </label>
|
||||||
|
<input class="form-control" disabled id="chbAdmTot" @bind-value="@Persona.ADMINISTRADORTOTAL" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbDel" class="fw-bold widthLabel">Delegado: </label>
|
||||||
|
<input class="form-control" disabled id="chbDel" @bind-value="@Persona.DELEGADO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="chbAdmRPT" class="fw-bold widthLabel">Administrador RPT y Registro: </label>
|
||||||
|
<input class="form-control" disabled id="chbAdmRPT" @bind-value="@Persona.ADMINISTRARPTYREGISTRO" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="tituloCaja">Excepciones permisos</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="EXCEPCIONESPERMISOS"
|
||||||
|
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="EXCEPCIONESPERMISOS" HeaderText="Departamento">
|
||||||
|
@context.IDDEPARTAMENTONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Persona Permiso">
|
||||||
|
@context.IDPERSONAPERMISONavigation.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Supervisor de Todo">
|
||||||
|
@context.SUPERVISORDETODO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Supervisor Departamento">
|
||||||
|
@context.SUPERVISORDEPARTAMENTO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Delegado">
|
||||||
|
@context.DELEGADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Administrador Control Horario">
|
||||||
|
@context.ADMINISTRADORCONTROLHORARIO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Administrador total">
|
||||||
|
@context.ADMINISTRADORTOTAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Administrar RPT y Registro">
|
||||||
|
@context.ADMINISTRARPTYREGISTRO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="EXCEPCIONESPERMISOS" HeaderText="Delegado Permisos">
|
||||||
|
@context.DELEGADOINFORMES
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<EXCEPCIONESPERMISOS> itmList = new List<EXCEPCIONESPERMISOS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.EXCEPCIONESPERMISOSIDPERSONANavigation;
|
||||||
|
foreach (EXCEPCIONESPERMISOS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="PERMISOSSINRETRIBUCION"
|
||||||
|
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="PERMISOSSINRETRIBUCION" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Nómina Origen de Datos">
|
||||||
|
@context.IDNOMINAORIGENDEDATOSNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Nómina Aplicación">
|
||||||
|
@context.IDNOMINAAPLICACIONNavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Observaciones">
|
||||||
|
@context.OBSERVACIONES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Nómina Normal">
|
||||||
|
@if (context.NOMINANORMAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERMISOSSINRETRIBUCION" HeaderText="Nómina Seguridad Social">
|
||||||
|
@if (context.NOMINASEGURIDADSOCIAL)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<PERMISOSSINRETRIBUCION> itmList = new List<PERMISOSSINRETRIBUCION>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.PERMISOSSINRETRIBUCION;
|
||||||
|
foreach (PERMISOSSINRETRIBUCION i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="PRESTAMOS"
|
||||||
|
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="PRESTAMOS" HeaderText="Nómina Incio Amortización">
|
||||||
|
@context.IDNOMINAINICIONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Importe">
|
||||||
|
@context.IMPORTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Meses">
|
||||||
|
@context.MESES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Amortización">
|
||||||
|
@context.AMORTIZACION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="Saldo">
|
||||||
|
@context.SALDO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRESTAMOS" HeaderText="EDITAR">
|
||||||
|
<input type="button" value="Generar Amortizaciones" />
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<PRESTAMOS> itmList = new List<PRESTAMOS>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.PRESTAMOS;
|
||||||
|
foreach (PRESTAMOS i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="PRODUCTIVIDAD"
|
||||||
|
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="PRODUCTIVIDAD" HeaderText="Año">
|
||||||
|
@context.AÑO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Mes">
|
||||||
|
@context.MES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Importe Pagado">
|
||||||
|
@context.IMPORTEPAGADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Importe Total">
|
||||||
|
@context.IMPORTETOTAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Importe Mes">
|
||||||
|
@context.IMPORTEMES
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<PRODUCTIVIDAD> itmList = new List<PRODUCTIVIDAD>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.PRODUCTIVIDAD;
|
||||||
|
foreach (PRODUCTIVIDAD i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="PUESTOSTRABAJO"
|
||||||
|
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="PUESTOSTRABAJO" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Descripción">
|
||||||
|
@context.IDTIPOPUESTOTRABAJONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Grupo">
|
||||||
|
@context.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Nivel">
|
||||||
|
@context.NIVEL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Epigrafe">
|
||||||
|
@context.EPIGRAFE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Grupo Tarifa">
|
||||||
|
@context.GRUPOTARIFA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Liquida Paga">
|
||||||
|
@if (context.LIQUIDAPAGA)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<PUESTOSTRABAJO> itmList = new List<PUESTOSTRABAJO>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.PUESTOSTRABAJO.OrderByDescending(x => x.FECHAINICIO);
|
||||||
|
|
||||||
|
foreach (PUESTOSTRABAJO i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="REDUCCIONDEJORNADA"
|
||||||
|
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="REDUCCIONDEJORNADA" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="REDUCCIONDEJORNADA" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="REDUCCIONDEJORNADA" HeaderText="% Reducción de Jornada">
|
||||||
|
@context.PORCENTAJEDEREDUCCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<REDUCCIONDEJORNADA> itmList = new List<REDUCCIONDEJORNADA>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.REDUCCIONDEJORNADA;
|
||||||
|
foreach (REDUCCIONDEJORNADA i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="RETENCIONJUDICIAL"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="itmList"
|
||||||
|
AllowFiltering="false"
|
||||||
|
PageSize="10"
|
||||||
|
AllowPaging="true"
|
||||||
|
AllowSorting="true"
|
||||||
|
EmptyText="No se han encontrado datos"
|
||||||
|
Height="100"
|
||||||
|
PageSizeSelectorVisible="false"
|
||||||
|
PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
|
||||||
|
Responsive="true"
|
||||||
|
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
|
||||||
|
|
||||||
|
<GridColumns>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Saldo Inicio">
|
||||||
|
@context.SALDOINICIO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Saldo Restante">
|
||||||
|
@context.SALDORESTANTE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Descripción">
|
||||||
|
@context.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Juzgado">
|
||||||
|
@context.JUZGADO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="I.B.A.N.">
|
||||||
|
@context.IBAN
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Referencia Fichero">
|
||||||
|
@context.REFERENCIAFICHERO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Plantilla">
|
||||||
|
@context.IDPLANTILLANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<RETENCIONJUDICIAL> itmList = new List<RETENCIONJUDICIAL>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.RETENCIONJUDICIAL;
|
||||||
|
foreach (RETENCIONJUDICIAL i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
@* Numero Sexenio *@
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="txtNuSex" class="fw-bold widthLabel">Número Sexenio: </label>
|
||||||
|
<input type="number" class="form-control" disabled id="txtNuSex" @bind-value="@Persona.NUMEROSEXENIO" />
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
@* Sexenio *@
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="txtSex" class="fw-bold widthLabel li-height50">Sexenio: </label>
|
||||||
|
<input type="number" class="form-control" disabled id="txtSex" @bind-value="@Persona.SEXENIOS" />
|
||||||
|
</div>
|
||||||
|
@* Numero Quinquenio *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtNuQ" class="fw-bold widthLabel li-height50">Número Quinquenio: </label>
|
||||||
|
<input type="number" class="form-control" disabled id="txtNuQ" @bind-value="@Persona.NUMEROQUINQUENIO" />
|
||||||
|
</div>
|
||||||
|
@* Quinquenio *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtQ" class="fw-bold widthLabel li-height50">Quinquenio: </label>
|
||||||
|
<input type="number" class="form-control" disabled id="txtQ" @bind-value="@Persona.QUINQUENIO" />
|
||||||
|
</div>
|
||||||
|
@* Quinquenio extra *@
|
||||||
|
<div class="col-md-4 d-flex divLabelInp">
|
||||||
|
<label for="txtQEx" class="fw-bold widthLabel li-height50">Quinquenio Extra: </label>
|
||||||
|
<input class="form-control" disabled id="txtQEx" step="00" @bind-value="@Persona.QUINQUENIOEXTRA" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
// private List<TRABAJADORTIEMPOPARCIAL> itmList = new List<>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// var listnom = Persona.TRABAJADORTIEMPOPARCIAL;
|
||||||
|
// foreach (TRABAJADORTIEMPOPARCIAL i in listnom) { itmList.Add(i); }
|
||||||
|
// }
|
||||||
|
// catch (Exception e)
|
||||||
|
// {
|
||||||
|
// Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
@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="tablaTabLateral">
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="TRABAJADORTIEMPOPARCIAL"
|
||||||
|
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="TRABAJADORTIEMPOPARCIAL" HeaderText="Fecha Inicio">
|
||||||
|
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="TRABAJADORTIEMPOPARCIAL" HeaderText="Fecha Fin">
|
||||||
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="TRABAJADORTIEMPOPARCIAL" HeaderText="% Parcialidad">
|
||||||
|
@context.PORCENTAJEPARCIALIDAD
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<TRABAJADORTIEMPOPARCIAL> itmList = new List<TRABAJADORTIEMPOPARCIAL>();
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var listnom = Persona.TRABAJADORTIEMPOPARCIAL;
|
||||||
|
foreach (TRABAJADORTIEMPOPARCIAL i in listnom) { itmList.Add(i); }
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
@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="col-md-10" style="margin-inline:auto;">
|
||||||
|
<p class="tituloCaja" style="width:500px">Trienios cumplidos en la Administración Económicamente</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEA1" class="fw-bold widthLabel li-height50">A1: </label>
|
||||||
|
<input class="form-control" disabled id="AEA1" @bind-value="@Persona.TRIENIOSADMINISTRACIONA1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEA2" class="fw-bold widthLabel li-height50">A2: </label>
|
||||||
|
<input class="form-control" disabled id="AEA2" @bind-value="@Persona.TRIENIOSADMINISTRACIONA2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEB" class="fw-bold widthLabel li-height50">B: </label>
|
||||||
|
<input class="form-control" disabled id="AEB" @bind-value="@Persona.TRIENIOSADMINISTRACIONB" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEC1" class="fw-bold widthLabel li-height50">C1: </label>
|
||||||
|
<input class="form-control" disabled id="AEC1" @bind-value="@Persona.TRIENIOSADMINISTRACIONC1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEC2" class="fw-bold widthLabel li-height50">C2: </label>
|
||||||
|
<input class="form-control" disabled id="AEC2" @bind-value="@Persona.TRIENIOSADMINISTRACIONC2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AEE" class="fw-bold widthLabel li-height50">E: </label>
|
||||||
|
<input class="form-control" disabled id="AEE" @bind-value="@Persona.TRIENIOSADMINISTRACIONE" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="AEImporte" class="fw-bold widthLabel li-height50">Importe: </label>
|
||||||
|
<input class="form-control" disabled id="AEImporte" @bind-value="@Persona.IMPORTETRIENIOADMINISTRACION" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="AEImpPE" class="fw-bold widthLabel li-height50">Importe Paga Extra: </label>
|
||||||
|
<input class="form-control" disabled id="AEImpPE" @bind-value="@Persona.IMPTRIADMPAGAEXTRA" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja" style="width:500px">Trienios cumplidos en la Administración Administrativamente</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAA1" class="fw-bold widthLabel li-height50">A1: </label>
|
||||||
|
<input class="form-control" disabled id="AAA1" @bind-value="@Persona.TRIENIOSADMINISTRACIONA1A" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAA2" class="fw-bold widthLabel li-height50">A2: </label>
|
||||||
|
<input class="form-control" disabled id="AAA2" @bind-value="@Persona.TRIENIOSADMINISTRACIONA2A" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAB" class="fw-bold widthLabel li-height50">B: </label>
|
||||||
|
<input class="form-control" disabled id="AAB" @bind-value="@Persona.TRIENIOSADMINISTRACIONBA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAC1" class="fw-bold widthLabel li-height50">C1: </label>
|
||||||
|
<input class="form-control" disabled id="AAC1" @bind-value="@Persona.TRIENIOSADMINISTRACIONC1A" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAC2" class="fw-bold widthLabel li-height50">C2: </label>
|
||||||
|
<input class="form-control" disabled id="AAC2" @bind-value="@Persona.TRIENIOSADMINISTRACIONC2A" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="AAE" class="fw-bold widthLabel li-height50">E: </label>
|
||||||
|
<input class="form-control" disabled id="AAE" @bind-value="@Persona.TRIENIOSADMINISTRACIONEA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="AAImporte" class="fw-bold widthLabel li-height50">Importe: </label>
|
||||||
|
<input class="form-control" disabled id="AAImporte" @bind-value="@Persona.IMPORTETRIENIOADMINISTRACIONA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 d-flex divLabelInp">
|
||||||
|
<label for="AAImpPE" class="fw-bold widthLabel li-height50">Importe Paga Extra: </label>
|
||||||
|
<input class="form-control" disabled id="AAImpPE" @bind-value="@Persona.IMPTRIADMPAGAEXTRAA" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja" style="width:500px">Trienios cumplidos en la OficinaAntifraude</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAA1" class="fw-bold widthLabel li-height50">A1: </label>
|
||||||
|
<input class="form-control" disabled id="OAA1" @bind-value="@Persona.TRIENIOSPARLAMENTOA1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAA2" class="fw-bold widthLabel li-height50">A2: </label>
|
||||||
|
<input class="form-control" disabled id="OAA2" @bind-value="@Persona.TRIENIOSPARLAMENTOA2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAB" class="fw-bold widthLabel li-height50">B: </label>
|
||||||
|
<input class="form-control" disabled id="OAB" @bind-value="@Persona.TRIENIOSPARLAMENTOB" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAC1" class="fw-bold widthLabel li-height50">C1: </label>
|
||||||
|
<input class="form-control" disabled id="OAC1" @bind-value="@Persona.TRIENIOSPARLAMENTOC1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAC2" class="fw-bold widthLabel li-height50">C2: </label>
|
||||||
|
<input class="form-control" disabled id="OAC2" @bind-value="@Persona.TRIENIOSPARLAMENTOC2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="OAE" class="fw-bold widthLabel li-height50">E: </label>
|
||||||
|
<input class="form-control" disabled id="OAE" @bind-value="@Persona.TRIENIOSPARLAMENTOE" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="OAImporte" class="fw-bold widthLabel">Fecha Próximo Cumplimiento: </label>
|
||||||
|
<input type="date" class="form-control" disabled id="OAImporte" @bind-value="@Persona.FECHACUMPLIMIENTOPROXTRIENIO" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="tituloCaja" style="width:500px">Complementos de Carrera cumplidos en la OficinaAntifraude</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAA1" class="fw-bold widthLabel li-height50">A1: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAA1" @bind-value="@Persona.COMPLEMENTOCARRERAA1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAA2" class="fw-bold widthLabel li-height50">A2: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAA2" @bind-value="@Persona.COMPLEMENTOCARRERAA2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAB" class="fw-bold widthLabel li-height50">B: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAB" @bind-value="@Persona.COMPLEMENTOCARRERAB" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAC1" class="fw-bold widthLabel li-height50">C1: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAC1" @bind-value="@Persona.COMPLEMENTOCARRERAC1" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAC2" class="fw-bold widthLabel li-height50">C2: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAC2" @bind-value="@Persona.COMPLEMENTOCARRERAC2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex divLabelInp">
|
||||||
|
<label for="CCOAE" class="fw-bold widthLabel li-height50">E: </label>
|
||||||
|
<input class="form-control" disabled id="CCOAE" @bind-value="@Persona.COMPLEMENTOCARRERAE" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 d-flex divLabelInp">
|
||||||
|
<label for="CCOAImporte" class="fw-bold widthLabel">Fecha Próximo Cumplimiento: </label>
|
||||||
|
<input type="date" class="form-control" disabled id="CCOAImporte" @bind-value="@Persona.FECHACUMPLIMIENTOCARRERA" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,512 @@
|
|||||||
|
@page "/Trabajadores"
|
||||||
|
@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> Personas</b></small></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (personas == null)
|
||||||
|
{
|
||||||
|
<div id="cargando" class="loadingFrame">
|
||||||
|
<div class="loadingImg"></div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else if (!personas.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 personas 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 personas 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="PERSONAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="@listPersonasPaginada"
|
||||||
|
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="PERSONAS" HeaderText="NIF" PropertyName="NIF" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NIF">
|
||||||
|
<NavLink class="btn btn-link" href="@HashRed(context.NIF)">@context.NIF</NavLink>
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Nombre" PropertyName="APELLIDOSNOMBRE" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.APELLIDOSNOMBRE">
|
||||||
|
@context.APELLIDOSNOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
@* <GridColumn TItem="PERSONAS" HeaderText="Nombre" PropertyName="Nombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.Nombre">
|
||||||
|
@FormatearNombre(context.Nombre)
|
||||||
|
</GridColumn> *@
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Tipo" PropertyName="IDTIPONavigation" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDTIPONavigation.DESCRIPCION">
|
||||||
|
@context.IDTIPONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Departamento" PropertyName="IDDEPARTAMENTONavigation.DESCRIPCION" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDDEPARTAMENTONavigation.DESCRIPCION">
|
||||||
|
@context.IDDEPARTAMENTONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="% IRPF" PropertyName="IDSITUACIONACTUALIRPFNavigation.TIPODERETENCIONAAPLICAR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDSITUACIONACTUALIRPFNavigation.TIPODERETENCIONAAPLICAR">
|
||||||
|
@context.IDSITUACIONACTUALIRPFNavigation?.TIPODERETENCIONAAPLICAR
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Fecha alta" PropertyName="FECHAALTA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHAALTA">
|
||||||
|
@context.FECHAALTA.ToString().Substring(0,10)
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Fecha baja" PropertyName="FECHABAJA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJA">
|
||||||
|
@context.FECHABAJA
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Domicilio" PropertyName="DOMICILIO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DOMICILIO">
|
||||||
|
@context.DOMICILIO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Código postal" PropertyName="CODIGOPOSTAL" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CODIGOPOSTAL">
|
||||||
|
@context.CODIGOPOSTAL
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Municipio" PropertyName="CODIGOMUNICIPIONavigation.NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CODIGOMUNICIPIONavigation.NOMBRE">
|
||||||
|
@context.CODIGOMUNICIPIONavigation?.NOMBRE
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Provincia" PropertyName="NombreProvincia" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NombreProvincia">
|
||||||
|
@context.NombreProvincia
|
||||||
|
</GridColumn>
|
||||||
|
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Correo electrónico" PropertyName="CORREOELECTRONICO" FilterButtonCSSClass="hidden" SortKeySelector="item => item.CORREOELECTRONICO">
|
||||||
|
@context.CORREOELECTRONICO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Telefono1" PropertyName="TELEFONO1" FilterButtonCSSClass="hidden" SortKeySelector="item => item.TELEFONO1">
|
||||||
|
@context.TELEFONO1
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Telefono2" PropertyName="TELEFONO2" FilterButtonCSSClass="hidden" SortKeySelector="item => item.TELEFONO2">
|
||||||
|
@context.TELEFONO2
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="PERSONAS" HeaderText="Sexo" PropertyName="NombreProvincia" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDSEXONavigation.DESCRIPCION">
|
||||||
|
@context.IDSEXONavigation?.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Vista móvil -->
|
||||||
|
<div class="tablaMov">
|
||||||
|
@foreach (var itm in listPersonasPaginada)
|
||||||
|
{
|
||||||
|
var collapseId = $"collapse{itm.IDPERSONA}";
|
||||||
|
<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.NIF - @itm.APELLIDOSNOMBRE</h5>
|
||||||
|
</div>
|
||||||
|
<div id="@collapseId" class="collapse">
|
||||||
|
<div class="card-body">
|
||||||
|
<dl class="row">
|
||||||
|
<dt class="col-sm-3">NIF</dt>
|
||||||
|
<dd class="col-sm-9"><a href="@HashRed(itm.NIF)">@itm.NIF</a></dd>
|
||||||
|
<dt class="col-sm-3">Nombre</dt>
|
||||||
|
<dd class="col-sm-9">@itm.APELLIDOSNOMBRE</dd>
|
||||||
|
@* <dt class="col-sm-3">Nombre</dt>
|
||||||
|
<dd class="col-sm-9">@FormatearNombre(itm.Nombre)</dd> *@
|
||||||
|
<dt class="col-sm-3">Tipo</dt>
|
||||||
|
<dd class="col-sm-9">@itm.IDTIPONavigation?.DESCRIPCION</dd>
|
||||||
|
<dt class="col-sm-3">Departamento</dt>
|
||||||
|
<dd class="col-sm-9">@itm.DEPARTAMENTOACTUAL</dd>
|
||||||
|
<dt class="col-sm-3">% IRPF</dt>
|
||||||
|
<dd class="col-sm-9">@itm.IDSITUACIONACTUALIRPFNavigation?.TIPODERETENCIONAAPLICAR</dd>
|
||||||
|
<dt class="col-sm-3">Fecha alta</dt>
|
||||||
|
<dd class="col-sm-9">@itm.FECHAALTA</dd>
|
||||||
|
<dt class="col-sm-3">Fecha baja</dt>
|
||||||
|
<dd class="col-sm-9">@itm.FECHABAJA</dd>
|
||||||
|
<dt class="col-sm-3">Domicilio</dt>
|
||||||
|
<dd class="col-sm-9">@itm.DOMICILIO</dd>
|
||||||
|
<dt class="col-sm-3">Código postal</dt>
|
||||||
|
<dd class="col-sm-9">@itm.CODIGOPOSTAL</dd>
|
||||||
|
<dt class="col-sm-3">Municipio</dt>
|
||||||
|
<dd class="col-sm-9">@itm.CODIGOMUNICIPIONavigation?.NOMBRE</dd>
|
||||||
|
<dt class="col-sm-3">Provincia</dt>
|
||||||
|
<dd class="col-sm-9">@itm.NombreProvincia</dd>
|
||||||
|
<dt class="col-sm-3">Correo electrónico</dt>
|
||||||
|
<dd class="col-sm-9">@itm.CORREOELECTRONICO</dd>
|
||||||
|
<dt class="col-sm-3">Telefono1</dt>
|
||||||
|
<dd class="col-sm-9">@itm.TELEFONO1</dd>
|
||||||
|
<dt class="col-sm-3">Telefono2</dt>
|
||||||
|
<dd class="col-sm-9">@itm.TELEFONO2</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 @listPersonas.Count elementos
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private List<PERSONAS> listPersonas = new List<PERSONAS>();
|
||||||
|
private List<PERSONAS> personas = new List<PERSONAS>();
|
||||||
|
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)listPersonas.Count / pageSize);
|
||||||
|
// Índice inicial y final de elementos para la página actual
|
||||||
|
private int FromElement => listPersonas.Count == 0 ? 0 : (UserState.CurrentPage - 1) * pageSize + 1;
|
||||||
|
private int ToElement
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (listPersonas.Count == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int last = FromElement + pageSize - 1;
|
||||||
|
return last > listPersonas.Count ? listPersonas.Count : last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sublista de datos para la página actual basada en la lista filtrada
|
||||||
|
private List<PERSONAS> listPersonasPaginada =>
|
||||||
|
listPersonas.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("/PERSONAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
personas = JsonConvert.DeserializeObject<List<PERSONAS>>(resultContent)
|
||||||
|
?? new List<PERSONAS>();
|
||||||
|
}
|
||||||
|
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/PERSONAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
personas = JsonConvert.DeserializeObject<List<PERSONAS>>(resultContent)
|
||||||
|
?? new List<PERSONAS>();
|
||||||
|
}
|
||||||
|
|
||||||
|
personas = personas
|
||||||
|
.OrderBy(x => x.APELLIDOS)
|
||||||
|
.ThenBy(x => x.NOMBRE)
|
||||||
|
.ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
listPersonas = personas;
|
||||||
|
UserState.CurrentPage = 1;
|
||||||
|
Filter = "";
|
||||||
|
}
|
||||||
|
private void AplicarFiltros()
|
||||||
|
{
|
||||||
|
listPersonas = personas.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/PERSONAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
personas = JsonConvert.DeserializeObject<List<PERSONAS>>(resultContent)
|
||||||
|
?? new List<PERSONAS>();
|
||||||
|
|
||||||
|
personas = personas
|
||||||
|
.OrderBy(x => x.APELLIDOS)
|
||||||
|
.ThenBy(x => x.NOMBRE)
|
||||||
|
.ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
listPersonas = personas;
|
||||||
|
}
|
||||||
|
private async Task btnExportarPDF()
|
||||||
|
{
|
||||||
|
var itm = listPersonas
|
||||||
|
.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 = listPersonas
|
||||||
|
.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>
|
||||||
@@ -0,0 +1,302 @@
|
|||||||
|
@page "/NomPers"
|
||||||
|
@* @page "/NomPers/{cl}" *@
|
||||||
|
@using System.Net.Http.Headers
|
||||||
|
@using System.Linq.Expressions
|
||||||
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
|
@using Microsoft.AspNetCore.WebUtilities
|
||||||
|
@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 ProtectedSessionStorage ProtectedSessionStore
|
||||||
|
@inject UserState UserState
|
||||||
|
<p class="tituloCaja">Varios</p>
|
||||||
|
<div class="row mb-3" style=" padding: 20px;border:solid 1px grey">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtApellidos" class="fw-bold widthLabel li-height50">Apellidos: </label>
|
||||||
|
<input class="form-control" disabled id="txtApellidos" @bind-value="@Persona.APELLIDOS" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtNombre" class="fw-bold widthLabel li-height50">Nombre: </label>
|
||||||
|
<input class="form-control" disabled id="txtNombre" @bind-value="@Persona.NOMBRE" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">DNI: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Persona.NIF" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtsexo" class="fw-bold widthLabel li-height50">Sexo: </label>
|
||||||
|
<InputSelect @bind-Value="Persona.IDSEXO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lSexo != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lSexo)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtTiCont" class="fw-bold widthLabel li-height50">Tipo Contrato: </label>
|
||||||
|
<InputSelect @bind-Value="Persona.IDCONTRATO" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lTipoContra != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lTipoContra)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDCONTRATO"> @enumera.CODIGO - @enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
@* <input class="form-control" id="txtTiCont" disabled value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Tabs @ref=tabsDtsPer style="margin-top:25px; font-size:12px; gap:0;" OnShown="@(args => OnTabShownAsync(args))">
|
||||||
|
<Tab Title="Nómina" Name="tabNomina">
|
||||||
|
<Content>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtCodigo" class="fw-bold widthLabel li-height50">Código: </label>
|
||||||
|
@if (Nomina.IDNOMINANavigation != null){
|
||||||
|
<input class="form-control" disabled id="txtCodigo" @bind-value="@Nomina.IDNOMINANavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtCodigo" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Fecha: </label>
|
||||||
|
<input type="date" class="form-control" disabled id="txtFecha" @bind-value="@Nomina.FECHA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Nº Pluriempleo: </label>
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.NUMEROPLURIEMPLEO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Grupo: </label>
|
||||||
|
@if(Nomina.IDGRUPOFUNCIONARIONavigation != null){
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.IDGRUPOFUNCIONARIONavigation.DESCRIPCION" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtFecha" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Nivel: </label>
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.NIVEL" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
<div class="col-md-11">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Observaciones: </label>
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.OBSERVACIONES" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 d-flex gap-2 align-items-end">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel align-content-end">Acumulada: </label>
|
||||||
|
<input type="checkbox" class="" disabled id="txtFecha" @bind-value="@Nomina.ACUMULADA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Sindicato 1: </label>
|
||||||
|
<InputSelect @bind-Value="Nomina.IDSINDICATO1" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lSindicato != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lSindicato)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 1: </label>
|
||||||
|
@if(Nomina.IDSINDICATO1Navigation != null){
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.IDSINDICATO1Navigation.VALORNUMERICO1" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Sindicato 2: </label>
|
||||||
|
<InputSelect @bind-Value="Nomina.IDSINDICATO2" class="form-select">
|
||||||
|
<option value="">Seleccionar</option>
|
||||||
|
@if (lSindicato != null)
|
||||||
|
{
|
||||||
|
@foreach (var enumera in lSindicato)
|
||||||
|
{
|
||||||
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</InputSelect>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 2: </label>
|
||||||
|
@if (Nomina.IDSINDICATO2Navigation != null)
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled id="txtFecha" @bind-value="@Nomina.IDSINDICATO2Navigation.VALORNUMERICO1" />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input class="form-control" disabled />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="Porcentajes" Name="tabPorcentajes">
|
||||||
|
<Content>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Pluriempleo: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.PLURIEMPLEO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Reducción Jornada: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.REDUCCIONJORNADA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Trabajo Tiempo Parcial: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.TRABAJOTIEMPOPARCIAL" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
<Tab Title="" Name="tabPorcentajes">
|
||||||
|
<Content>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Pluriempleo: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.PLURIEMPLEO" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Reducción Jornada: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.REDUCCIONJORNADA" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Trabajo Tiempo Parcial: </label>
|
||||||
|
<input class="form-control" disabled id="txtNIF" @bind-value="@Nomina.TRABAJOTIEMPOPARCIAL" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
||||||
|
public NOMINATRABAJADORCABECERA Nomina { get; set; } = new NOMINATRABAJADORCABECERA();
|
||||||
|
private HttpClient cliente = new HttpClient();
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback OnPersonaActualizada { get; set; }
|
||||||
|
private List<ENUMERACIONES> lSexo = new List<ENUMERACIONES>();
|
||||||
|
private List<CONTRATOS> lTipoContra = new List<CONTRATOS>();
|
||||||
|
private List<ENUMERACIONES> lSindicato= new List<ENUMERACIONES>();
|
||||||
|
|
||||||
|
private ValidationMessageStore? messageStore;
|
||||||
|
private string errorMessage = "";
|
||||||
|
public string? cl { get; set; } = "";
|
||||||
|
public string? cn { get; set; } = "";
|
||||||
|
private Tabs tabsDtsPer { get; set; } = new Tabs();
|
||||||
|
private async Task OnTabShownAsync(TabsEventArgs args)
|
||||||
|
{
|
||||||
|
var panelActivo = args.ActiveTabName;
|
||||||
|
|
||||||
|
await ProtectedSessionStore.SetAsync("ultiTabNom", panelActivo);
|
||||||
|
|
||||||
|
}
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
|
||||||
|
|
||||||
|
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
|
||||||
|
{
|
||||||
|
cl = clValue;
|
||||||
|
}
|
||||||
|
// if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cn", out var cnValue))
|
||||||
|
// {
|
||||||
|
// cn = cnValue;
|
||||||
|
// }
|
||||||
|
|
||||||
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
||||||
|
// ListaSexos = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
|
||||||
|
string clDesencriptado = tsUtilidades.crypt.FEncS(cl,
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
-875421649);
|
||||||
|
|
||||||
|
var clCn = clDesencriptado.Split("-");
|
||||||
|
var nifDesencriptado = clCn[0];
|
||||||
|
var NominaDesencriptada = Int32.Parse(clCn[1]);
|
||||||
|
// int NominaDesencriptada = Int32.Parse(tsUtilidades.crypt.FEncS(cn,
|
||||||
|
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
// "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
||||||
|
// -875421649));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
|
||||||
|
}
|
||||||
|
|
||||||
|
var resultContent = await response.Content.ReadAsStringAsync();
|
||||||
|
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
|
||||||
|
Nomina = Persona.NOMINATRABAJADORCABECERA?.FirstOrDefault(x => x.IDNOMINA == NominaDesencriptada);
|
||||||
|
// lblNombre = persona.NOMBRE + " " + Persona.APELLIDOS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
await CargarSelects();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task CargarSelects()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
lSexo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
|
||||||
|
lSindicato = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SIND");
|
||||||
|
// lTipoContra = await Utilidades.ObtenerObjeto<List<CONTRATOS>>(cliente, "/api/CONTRATOS");
|
||||||
|
var responseTipCon = await cliente.GetAsync("/api/CONTRATOS/");
|
||||||
|
if (responseTipCon.IsSuccessStatusCode) { lTipoContra = JsonConvert.DeserializeObject<List<CONTRATOS>>(await responseTipCon.Content.ReadAsStringAsync()); }
|
||||||
|
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
errorMessage = ex.Message;
|
||||||
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
354
Antifraude.Net/GestionPersonalWeb/Components/Pages/Nominas.razor
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
@page "/Nominas"
|
||||||
|
@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> Nóminas</b></small></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (nominas == null)
|
||||||
|
{
|
||||||
|
<div id="cargando" class="loadingFrame">
|
||||||
|
<div class="loadingImg"></div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else if (!nominas.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 personas 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 personas 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 -->
|
||||||
|
|
||||||
|
<Accordion>
|
||||||
|
@for(var y=0; y <= annos.Count-1; y++)
|
||||||
|
{
|
||||||
|
var listado = listnominas.Where(x => x.AÑO == annos[y]).ToList();
|
||||||
|
<AccordionItem Title="@annos[y].ToString()">
|
||||||
|
<Content>
|
||||||
|
<div style="overflow-x:auto;" class="tablaDesk">
|
||||||
|
<Grid TItem="NOMINAS"
|
||||||
|
Class="table tablaRegPers"
|
||||||
|
Data="@listado"
|
||||||
|
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="NOMINAS" HeaderText="Descripción" PropertyName="DESCRIPCION" FilterButtonCSSClass="hidden">
|
||||||
|
<NavLink class="btn btn-link" href="@HashRed(context.IDNOMINAS.ToString())">@context.DESCRIPCION</NavLink>
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Año" PropertyName="AÑO" FilterButtonCSSClass="hidden">
|
||||||
|
@context.AÑO
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Mes" PropertyName="MES" FilterButtonCSSClass="hidden">
|
||||||
|
@context.MES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Tipo" PropertyName="IDTIPONavigation.DESCRIPCION" FilterButtonCSSClass="hidden">
|
||||||
|
@context.IDTIPONavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Fecha Inicio" PropertyName="FECHAINICIO" FilterButtonCSSClass="hidden">
|
||||||
|
@context.FECHAINICIO?.ToShortDateString()
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Fecha Pago" PropertyName="FECHAPAGO" FilterButtonCSSClass="hidden">
|
||||||
|
@context.FECHAPAGO?.ToShortDateString()
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Número Días Laborales" PropertyName="NUMERODIASLABORALES" FilterButtonCSSClass="hidden">
|
||||||
|
@context.NUMERODIASLABORABLES
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Número Días Festivos" PropertyName="NUMERODIASFESTIVOS" FilterButtonCSSClass="hidden">
|
||||||
|
@context.NUMERODIASFESTIVOS
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Paga Extra" PropertyName="PAGAEXTRA" FilterButtonCSSClass="hidden">
|
||||||
|
@if (context.PAGAEXTRA== true)
|
||||||
|
{
|
||||||
|
<i class="fa-regular fa-square-check"></i>
|
||||||
|
}
|
||||||
|
else { }
|
||||||
|
</GridColumn>
|
||||||
|
<GridColumn TItem="NOMINAS" HeaderText="Situación" PropertyName="IDSITUACIONNOMINANavigation.DESCRIPCION" FilterButtonCSSClass="hidden">
|
||||||
|
@context.IDSITUACIONNOMINANavigation.DESCRIPCION
|
||||||
|
</GridColumn>
|
||||||
|
</GridColumns>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
</Content>
|
||||||
|
</AccordionItem>
|
||||||
|
}
|
||||||
|
</Accordion>
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private List<NOMINAS> listnominas = new List<NOMINAS>();
|
||||||
|
private List<NOMINAS> nominas = new List<NOMINAS>();
|
||||||
|
private List<int> annos = new List<int>();
|
||||||
|
private string _filter = "";
|
||||||
|
public string Filter
|
||||||
|
{
|
||||||
|
get => _filter;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_filter != value)
|
||||||
|
{
|
||||||
|
_filter = value;
|
||||||
|
AplicarFiltros();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private string HashRed(string id)
|
||||||
|
{
|
||||||
|
string link = "/InfoNominas?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("/PERSONAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
nominas = JsonConvert.DeserializeObject<List<NOMINAS>>(resultContent)
|
||||||
|
?? new List<NOMINAS>();
|
||||||
|
}
|
||||||
|
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/PERSONAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
nominas = JsonConvert.DeserializeObject<List<NOMINAS>>(resultContent)
|
||||||
|
?? new List<NOMINAS>();
|
||||||
|
}
|
||||||
|
|
||||||
|
nominas = nominas
|
||||||
|
.OrderByDescending(x => x.FECHAINICIO)
|
||||||
|
.ThenBy(x => x.DESCRIPCION)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
listnominas = nominas;
|
||||||
|
UserState.CurrentPage = 1;
|
||||||
|
Filter = "";
|
||||||
|
}
|
||||||
|
private void AplicarFiltros()
|
||||||
|
{
|
||||||
|
listnominas = nominas.Where(per =>
|
||||||
|
string.IsNullOrEmpty(Filter) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.DESCRIPCION).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.AÑO.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.MES.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.IDTIPONavigation.DESCRIPCION).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.FECHAINICIO.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.FECHAPAGO.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.NUMERODIASLABORABLES.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.NUMERODIASFESTIVOS.ToString()).Contains(Utilidades.RemoveDiacritics(Filter), StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
Utilidades.RemoveDiacritics(per.IDSITUACIONNOMINANavigation.DESCRIPCION).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/NOMINAS");
|
||||||
|
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
|
||||||
|
nominas = JsonConvert.DeserializeObject<List<NOMINAS>>(resultContent)
|
||||||
|
?? new List<NOMINAS>();
|
||||||
|
|
||||||
|
nominas = nominas
|
||||||
|
.OrderByDescending(x => x.FECHAINICIO)
|
||||||
|
.ThenBy(x => x.DESCRIPCION)
|
||||||
|
// .ThenByDescending(x => x.FECHAALTA)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
listnominas = nominas;
|
||||||
|
|
||||||
|
for (var i = 0; i < nominas.Count; i++)
|
||||||
|
{
|
||||||
|
if (annos.Contains(nominas[i].AÑO) == false)
|
||||||
|
{
|
||||||
|
annos.Add(nominas[i].AÑO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
private async Task btnExportarPDF()
|
||||||
|
{
|
||||||
|
var itm = listnominas
|
||||||
|
.Select(f => new
|
||||||
|
{
|
||||||
|
Descripción = f.DESCRIPCION,
|
||||||
|
Año = f.AÑO,
|
||||||
|
Mes = f.MES,
|
||||||
|
Tipo = f.IDTIPONavigation.DESCRIPCION,
|
||||||
|
Fecha_Inicio = f.FECHAINICIO,
|
||||||
|
Fecha_Pago = f.FECHAPAGO,
|
||||||
|
Número_Días_Laborales = f.NUMERODIASLABORABLES,
|
||||||
|
Número_Días_Festivos = f.NUMERODIASFESTIVOS,
|
||||||
|
Paga_Extra = f.PAGAEXTRA,
|
||||||
|
Situación = f.IDSITUACIONNOMINANavigation.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 = listnominas
|
||||||
|
.Select(f => new
|
||||||
|
{
|
||||||
|
Descripción = f.DESCRIPCION,
|
||||||
|
Año = f.AÑO,
|
||||||
|
Mes = f.MES,
|
||||||
|
Tipo = f.IDTIPONavigation.DESCRIPCION,
|
||||||
|
Fecha_Inicio = f.FECHAINICIO,
|
||||||
|
Fecha_Pago = f.FECHAPAGO,
|
||||||
|
Número_Días_Laborales = f.NUMERODIASLABORABLES,
|
||||||
|
Número_Días_Festivos = f.NUMERODIASFESTIVOS,
|
||||||
|
Paga_Extra = f.PAGAEXTRA,
|
||||||
|
Situación = f.IDSITUACIONNOMINANavigation.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>
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
@page "/weather"
|
||||||
|
@attribute [StreamRendering]
|
||||||
|
|
||||||
|
<PageTitle>Weather</PageTitle>
|
||||||
|
|
||||||
|
<h1>Weather</h1>
|
||||||
|
|
||||||
|
<p>This component demonstrates showing data.</p>
|
||||||
|
|
||||||
|
@if (forecasts == null)
|
||||||
|
{
|
||||||
|
<p><em>Loading...</em></p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>Temp. (C)</th>
|
||||||
|
<th>Temp. (F)</th>
|
||||||
|
<th>Summary</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var forecast in forecasts)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@forecast.Date.ToShortDateString()</td>
|
||||||
|
<td>@forecast.TemperatureC</td>
|
||||||
|
<td>@forecast.TemperatureF</td>
|
||||||
|
<td>@forecast.Summary</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
}
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private WeatherForecast[]? forecasts;
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
// Simulate asynchronous loading to demonstrate streaming rendering
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
var startDate = DateOnly.FromDateTime(DateTime.Now);
|
||||||
|
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
|
||||||
|
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||||
|
{
|
||||||
|
Date = startDate.AddDays(index),
|
||||||
|
TemperatureC = Random.Shared.Next(-20, 55),
|
||||||
|
Summary = summaries[Random.Shared.Next(summaries.Length)]
|
||||||
|
}).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class WeatherForecast
|
||||||
|
{
|
||||||
|
public DateOnly Date { get; set; }
|
||||||
|
public int TemperatureC { get; set; }
|
||||||
|
public string? Summary { get; set; }
|
||||||
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<Router AppAssembly="typeof(Program).Assembly">
|
||||||
|
<Found Context="routeData">
|
||||||
|
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
|
||||||
|
<FocusOnNavigate RouteData="routeData" Selector="h1" />
|
||||||
|
</Found>
|
||||||
|
</Router>
|
||||||
10
Antifraude.Net/GestionPersonalWeb/Components/_Imports.razor
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
@using System.Net.Http
|
||||||
|
@using System.Net.Http.Json
|
||||||
|
@using Microsoft.AspNetCore.Components.Forms
|
||||||
|
@using Microsoft.AspNetCore.Components.Routing
|
||||||
|
@using Microsoft.AspNetCore.Components.Web
|
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||||
|
@using Microsoft.JSInterop
|
||||||
|
@using GestionPersonalWeb
|
||||||
|
@using GestionPersonalWeb.Components
|
||||||
124
Antifraude.Net/GestionPersonalWeb/GestionPersonalWeb.csproj
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<SccProjectName>SAK</SccProjectName>
|
||||||
|
<SccProvider>SAK</SccProvider>
|
||||||
|
<SccAuxPath>SAK</SccAuxPath>
|
||||||
|
<SccLocalPath>SAK</SccLocalPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\all.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Black.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-BlackItalic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Bold.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-BoldItalic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Italic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Light.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-LightItalic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Medium.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-MediumItalic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Regular.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-Thin.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Roboto-ThinItalic.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Satoshi-Black.otf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\FUENTES\Satoshi-Regular.otf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\facebook.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\instagram.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\linkedin.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\list.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\person-fill.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\rss.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\search.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\twitter.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\universal-access-circle.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\icon\youtube.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\1oaaflogo.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\404.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\cargaOAAF.gif" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\dropParlamento.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\faviconParlamento.ico" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\faviconParlamento.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\hercules.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\list.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-datosabiertos-secondary.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento-blanco.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento-blanco.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento-blanco@2x.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento-movil.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-parlamento@2x.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-subportal-blanco.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-subportal-movil.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-subportal-secondary.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-subportal.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logo-transparencia.svg" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logoParlamento.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\logoParlamentoW.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\mid-logo-list.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\mid-logo-list@2x.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\mid-logo-modal.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\imagenes\mid-logo-modal@2x.png" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\Site.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\webfonts\fa-brands-400.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\webfonts\fa-regular-400.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\webfonts\fa-solid-900.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Content\webfonts\fa-v4compatibility.ttf" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\all.min.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\bootstrap.bundle.min.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\bootstrap.min.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\jquery.min.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\modernizr-2.8.3.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\popper.min.js" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\Scripts\Util.js" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Blazor.Bootstrap" Version="3.3.1" />
|
||||||
|
<PackageReference Include="ClosedXML" Version="0.105.0-rc" />
|
||||||
|
<PackageReference Include="MigraDocCore.DocumentObjectModel" Version="1.3.67" />
|
||||||
|
<PackageReference Include="MigraDocCore.Rendering" Version="1.3.67" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
|
<PackageReference Include="Serialize.Linq" Version="4.0.167" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\bdAntifraude\bdAntifraude.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="tsDocumentos">
|
||||||
|
<HintPath>..\..\..\..\Comun\tsDocumentos\bin\Debug\net8.0\tsDocumentos.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="tsUtilidades">
|
||||||
|
<HintPath>..\..\..\..\Comun\tsUtilidades\bin\Debug\net8.0\tsUtilidades.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Update="wwwroot\app.css">
|
||||||
|
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\favicon.png">
|
||||||
|
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Update="wwwroot\faviconParlamento.png">
|
||||||
|
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||||
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Components\ViewModels\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
1
Antifraude.Net/GestionPersonalWeb/Models/Scripts.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
70
Antifraude.Net/GestionPersonalWeb/Models/UserState.cs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
namespace GestionPersonalWeb.Models
|
||||||
|
{
|
||||||
|
public class UserState
|
||||||
|
{
|
||||||
|
private readonly object _lock = new object();
|
||||||
|
private string _token;
|
||||||
|
private string _NombreUsu;
|
||||||
|
private bool _Mostrar;
|
||||||
|
private int _currentPage = 1;
|
||||||
|
|
||||||
|
|
||||||
|
public string Token
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
return _token;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_token = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string NombreUsu
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
return _NombreUsu;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_NombreUsu = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public bool Mostrar
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
return _Mostrar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_Mostrar = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int CurrentPage
|
||||||
|
{
|
||||||
|
get { lock (_lock) { return _currentPage; } }
|
||||||
|
set { lock (_lock) { _currentPage = value; } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
206
Antifraude.Net/GestionPersonalWeb/Models/Utilidades.cs
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
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 ClosedXML.Excel;
|
||||||
|
//using System.Drawing;
|
||||||
|
using ClosedXML.Excel;
|
||||||
|
using MigraDocCore.DocumentObjectModel;
|
||||||
|
|
||||||
|
|
||||||
|
namespace GestionPersonalWeb.Models
|
||||||
|
{
|
||||||
|
public class Utilidades
|
||||||
|
{
|
||||||
|
private static IConfiguration Conf { get; set; }
|
||||||
|
public static string RemoveDiacritics(string text)
|
||||||
|
{
|
||||||
|
var normalizedString = text.Normalize(NormalizationForm.FormD);
|
||||||
|
var stringBuilder = new StringBuilder(capacity: normalizedString.Length);
|
||||||
|
|
||||||
|
for (int i = 0; i < normalizedString.Length; i++)
|
||||||
|
{
|
||||||
|
char c = normalizedString[i];
|
||||||
|
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
|
||||||
|
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
|
||||||
|
{
|
||||||
|
stringBuilder.Append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stringBuilder
|
||||||
|
.ToString()
|
||||||
|
.Normalize(NormalizationForm.FormC);
|
||||||
|
}
|
||||||
|
public static string urlSwagger()
|
||||||
|
{
|
||||||
|
Conf = new ConfigurationBuilder()
|
||||||
|
.AddJsonFile("appsettings.json")
|
||||||
|
.Build();
|
||||||
|
string swagger = Conf.GetSection("SwaggerCC").Value;
|
||||||
|
return swagger;
|
||||||
|
}
|
||||||
|
public static string urlSwagger2()
|
||||||
|
{
|
||||||
|
Conf = new ConfigurationBuilder()
|
||||||
|
.AddJsonFile("appsettings.json")
|
||||||
|
.Build();
|
||||||
|
string swagger = Conf.GetSection("SwaggerVB").Value;
|
||||||
|
return swagger;
|
||||||
|
}
|
||||||
|
public static HttpClient ObtenerCliente(String token, IHttpClientFactory clientFactory)
|
||||||
|
{
|
||||||
|
var client = clientFactory.CreateClient();
|
||||||
|
client.BaseAddress = new Uri(Utilidades.urlSwagger());
|
||||||
|
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||||
|
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
public string NullDatetoString(string date)
|
||||||
|
{
|
||||||
|
if (date == "01/01/0001")
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static async Task<T> ObtenerObjeto<T>(HttpClient cliente, String uri)
|
||||||
|
{
|
||||||
|
var response = await cliente.GetAsync(uri);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var resultContent = await response.Content.ReadAsStringAsync();
|
||||||
|
return JsonConvert.DeserializeObject<T>(resultContent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static async Task<T> ObtenerObjeto<T>(HttpClient cliente, String uri, Expression filtro)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
|
||||||
|
var serializedExpression = serializer.SerializeText(filtro);
|
||||||
|
|
||||||
|
var jsonContent = JsonConvert.SerializeObject(new { Expression = serializedExpression });
|
||||||
|
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
|
||||||
|
var response = await cliente.PostAsync(uri, content);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var resultContent = await response.Content.ReadAsStringAsync();
|
||||||
|
return JsonConvert.DeserializeObject<T>(resultContent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var mess = ex.ToString();
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static async Task<T> NuevoObjeto<T>(HttpClient cliente, String uri, T objeto)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Limpiar propiedades de navegación
|
||||||
|
VaciarPropiedadesDeNavegacion(objeto);
|
||||||
|
|
||||||
|
var response = await cliente.PostAsJsonAsync(uri, objeto);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var resultContent = await response.Content.ReadAsStringAsync();
|
||||||
|
return JsonConvert.DeserializeObject<T>(resultContent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var mess = ex.ToString();
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
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 ExportarExcelEnBrowser<T>(IJSRuntime js, IEnumerable<T> datos, byte[] logoBytes, XLColor headerColor, string nombreFichero)
|
||||||
|
{
|
||||||
|
using var ms = tsDocumentos.TablaExportador
|
||||||
|
.GenerarExcelEnMemoria(datos, logoBytes, headerColor);
|
||||||
|
var bytes = ms.ToArray();
|
||||||
|
var b64 = Convert.ToBase64String(bytes);
|
||||||
|
await js.InvokeVoidAsync("saveAsFile", nombreFichero, b64);
|
||||||
|
}
|
||||||
|
public static async Task ExportarPdfEnBrowser<T>(IJSRuntime js, IEnumerable<T> datos, byte[] logoBytes, Color headerColor, string nombreFichero)
|
||||||
|
{
|
||||||
|
using var ms = tsDocumentos.TablaExportador
|
||||||
|
.GenerarPdfEnMemoria(datos, logoBytes, headerColor);
|
||||||
|
var bytes = ms.ToArray();
|
||||||
|
var b64 = Convert.ToBase64String(bytes);
|
||||||
|
await js.InvokeVoidAsync("saveAsFile", nombreFichero, b64);
|
||||||
|
}
|
||||||
|
// Método para limpiar las propiedades de navegación
|
||||||
|
private static void VaciarPropiedadesDeNavegacion<T>(T objeto)
|
||||||
|
{
|
||||||
|
// Obtener todas las propiedades del objeto
|
||||||
|
var propiedades = typeof(T).GetProperties();
|
||||||
|
|
||||||
|
foreach (var propiedad in propiedades)
|
||||||
|
{
|
||||||
|
// Verificar si la propiedad es de tipo de navegación
|
||||||
|
if (propiedad.PropertyType.IsClass && propiedad.PropertyType != typeof(string))
|
||||||
|
{
|
||||||
|
// Vaciar la propiedad estableciéndola en null
|
||||||
|
if (propiedad.CanWrite)
|
||||||
|
{
|
||||||
|
propiedad.SetValue(objeto, null);
|
||||||
|
Console.WriteLine($"Propiedad de navegación '{propiedad.Name}' vaciada.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
108
Antifraude.Net/GestionPersonalWeb/Program.cs
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
|
||||||
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
|
using GestionPersonalWeb.Components;
|
||||||
|
using GestionPersonalWeb.Models;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
|
||||||
|
// Configurar servicios
|
||||||
|
builder.Services.AddRazorComponents()
|
||||||
|
.AddInteractiveServerComponents();
|
||||||
|
builder.Services.AddHttpClient("DefaultClient", client =>
|
||||||
|
{
|
||||||
|
client.BaseAddress = new Uri(Utilidades.urlSwagger());
|
||||||
|
});
|
||||||
|
builder.Services.AddAuthentication(options =>
|
||||||
|
{
|
||||||
|
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
|
||||||
|
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
|
||||||
|
})
|
||||||
|
.AddCookie(options =>
|
||||||
|
{
|
||||||
|
options.LoginPath = "/home";
|
||||||
|
options.AccessDeniedPath = "/AccessDenied";
|
||||||
|
});
|
||||||
|
// Necesario para ver porqu<71> est<73> fallando ciertas cosas que dan el error Circuit
|
||||||
|
builder.Services.AddServerSideBlazor().AddCircuitOptions(option => { option.DetailedErrors = true; });
|
||||||
|
builder.Services.AddHttpContextAccessor();
|
||||||
|
builder.Services.AddDistributedMemoryCache();
|
||||||
|
builder.Services.AddSession(options =>
|
||||||
|
{
|
||||||
|
options.IdleTimeout = TimeSpan.FromHours(1);
|
||||||
|
options.Cookie.HttpOnly = true;
|
||||||
|
options.Cookie.IsEssential = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddHttpClient("CertClient").ConfigurePrimaryHttpMessageHandler(() =>
|
||||||
|
{
|
||||||
|
return new HttpClientHandler
|
||||||
|
{
|
||||||
|
ClientCertificateOptions = ClientCertificateOption.Manual // Forzar la selecci<63>n del certificado
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
builder.Services.AddBlazorBootstrap();
|
||||||
|
builder.Services.AddAntiforgery();
|
||||||
|
builder.Services.AddSingleton<UserState>();
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
if (!app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Error");
|
||||||
|
app.UseHsts();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
app.UseStaticFiles();
|
||||||
|
app.UseSession();
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
|
||||||
|
app.UseAntiforgery();
|
||||||
|
|
||||||
|
app.Use(async (context, next) =>
|
||||||
|
{
|
||||||
|
var userState = context.RequestServices.GetService<UserState>();
|
||||||
|
var path = context.Request.Path;
|
||||||
|
|
||||||
|
// Permitir solicitudes internas y recursos necesarios
|
||||||
|
if (path == "/" ||
|
||||||
|
path.StartsWithSegments("/_blazor") ||
|
||||||
|
path.StartsWithSegments("/Content") ||
|
||||||
|
path.StartsWithSegments("/Scripts") ||
|
||||||
|
path.StartsWithSegments("/js") ||
|
||||||
|
path.StartsWithSegments("/favicon.ico") ||
|
||||||
|
path.StartsWithSegments("/_framework"))
|
||||||
|
{
|
||||||
|
await next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirigir al home si no hay token y la ruta no es p<>blica
|
||||||
|
if (userState?.Token == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Redirigiendo al home desde: {path}");
|
||||||
|
context.Response.Redirect("/");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continuar con la solicitud
|
||||||
|
await next();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
app.MapRazorComponents<App>()
|
||||||
|
.AddInteractiveServerRenderMode();
|
||||||
|
|
||||||
|
app.Run();
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:63299",
|
||||||
|
"sslPort": 44366
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"http": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "http://localhost:5168",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "https://localhost:7107;http://localhost:5168",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
Antifraude.Net/GestionPersonalWeb/appsettings.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*",
|
||||||
|
//SWAGGER DESARROLLO
|
||||||
|
"SwaggerCC": "https://localhost:7135/api/",
|
||||||
|
"SwaggerVB": "https://localhost:44300/"
|
||||||
|
//SWAGGER PUBLICADO
|
||||||
|
//"SwaggerCC": "https://localhost:103/api/"
|
||||||
|
//PRODUCCION
|
||||||
|
//"SwaggerCC": "https://sw-antifraude.tecnosis.net/api/",
|
||||||
|
//"SwaggerVB": "http://localhost:888/"
|
||||||
|
}
|
||||||
764
Antifraude.Net/GestionPersonalWeb/wwwroot/Content/Site.css
Normal file
@@ -0,0 +1,764 @@
|
|||||||
|
:root {
|
||||||
|
--AzulMuyOscuro: rgb(0, 45, 72);
|
||||||
|
--AzulOscuro: rgb(85, 85, 85);
|
||||||
|
--AzulOAAF: #6c757d;
|
||||||
|
--GrisOscuroOAAF: #343334;
|
||||||
|
--AzulClaroOAAF: #6fafd3;
|
||||||
|
--GrisClaroOAAF: #a4a3a4;
|
||||||
|
--GrisNeutro: #e9e9e9 --blue: #007bff;
|
||||||
|
--indigo: #6610f2;
|
||||||
|
--purple: #6f42c1;
|
||||||
|
--pink: #e83e8c;
|
||||||
|
--red: #dc3545;
|
||||||
|
--orange: #fd7e14;
|
||||||
|
--yellow: #ffc107;
|
||||||
|
--green: #28a745;
|
||||||
|
--teal: #20c997;
|
||||||
|
--cyan: #17a2b8;
|
||||||
|
--white: #fff;
|
||||||
|
--gray: #6c757d;
|
||||||
|
--gray-dark: #343a40;
|
||||||
|
--primary: #172073;
|
||||||
|
--secondary: #5BA1BA;
|
||||||
|
--success: #70A360;
|
||||||
|
--info: #5BA1BA;
|
||||||
|
--warning: #ffc107;
|
||||||
|
--danger: #dc3545;
|
||||||
|
--light: #f8f9fa;
|
||||||
|
--dark: #343a40;
|
||||||
|
--gray: #e9ecef;
|
||||||
|
--gray400: #ced4da;
|
||||||
|
--gray500: #adb5bd;
|
||||||
|
--gray600: #6c757d;
|
||||||
|
--breakpoint-xs: 0;
|
||||||
|
--breakpoint-sm: 576px;
|
||||||
|
--breakpoint-md: 768px;
|
||||||
|
--breakpoint-lg: 992px;
|
||||||
|
--breakpoint-xl: 1200px;
|
||||||
|
--font-family-sans-serif: "Open Sans", sans-serif;
|
||||||
|
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||||
|
}
|
||||||
|
.li-height50{
|
||||||
|
line-height:50px
|
||||||
|
}
|
||||||
|
.tituloCaja {
|
||||||
|
padding-inline: 25px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 0;
|
||||||
|
color: #ffffff;
|
||||||
|
width: 125px;
|
||||||
|
background-color: grey;
|
||||||
|
border-top-left-radius: 15px;
|
||||||
|
border-top-right-radius: 15px;
|
||||||
|
}
|
||||||
|
.divLabelInp {
|
||||||
|
height: 50px;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.widthLabel {
|
||||||
|
width: 300px !important;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablaTabLateral {
|
||||||
|
width: calc(100vw - 200px);
|
||||||
|
margin-inline: auto;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding-inline: 40px;
|
||||||
|
}
|
||||||
|
.custom-pagination {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-pagination ul {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-pagination .page-button {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 32px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #007bff;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 500;
|
||||||
|
margin: 0;
|
||||||
|
/*padding: 0 8px;*/
|
||||||
|
aspect-ratio: 1/1;
|
||||||
|
padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Botón activo (página seleccionada) */
|
||||||
|
.custom-pagination .page-button.active {
|
||||||
|
background-color: var(--AzulOAAF);
|
||||||
|
color: #fff;
|
||||||
|
border-color: #007bff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Estado deshabilitado en gris más oscuro */
|
||||||
|
.custom-pagination .page-button:disabled {
|
||||||
|
background-color: #e2e3e5; /* Gris algo más oscuro */
|
||||||
|
color: #6c757d; /* Texto gris */
|
||||||
|
border-color: #d1d1d1; /* Borde gris */
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
.custom-pagination .page-button:hover {
|
||||||
|
z-index: 2;
|
||||||
|
color: #0a58ca;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-color: #dee2e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redondeo en las esquinas exteriores de la paginación */
|
||||||
|
.custom-pagination ul li:first-child .page-button {
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-pagination ul li:last-child .page-button {
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Puntos suspensivos */
|
||||||
|
.custom-pagination .ellipsis {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 32px;
|
||||||
|
height: 40px;
|
||||||
|
color: #999;
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.gestionPropia {
|
||||||
|
--AzulOAAF: #2291d0;
|
||||||
|
--GrisOscuroOAAF: #343334;
|
||||||
|
--AzulClaroOAAF: #6fafd3;
|
||||||
|
--GrisClaroOAAF: #a4a3a4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gestionPersonal {
|
||||||
|
--AzulOAAF: #343334;
|
||||||
|
--AzulClaroOAAD: #a4a3a4;
|
||||||
|
--GrisOscuroOAAF: #2291d0;
|
||||||
|
--GrisClaroOAAF: #6fafd3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'RobotoB';
|
||||||
|
src: url('FUENTES/Roboto-Bold.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'RobotoI';
|
||||||
|
src: url('FUENTES/Roboto-Italic.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
src: url('FUENTES/Roboto-Regular.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'SatoshiB';
|
||||||
|
src: url('FUENTES/Satoshi-Black.otf') format('opentype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Satoshi';
|
||||||
|
src: url('FUENTES/Satoshi-Regular.otf') format('opentype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablaMov{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imgInfoPersona {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
max-width: 230px;
|
||||||
|
width:100%;
|
||||||
|
margin-bottom:15px;
|
||||||
|
aspect-ratio: 1/1
|
||||||
|
}
|
||||||
|
.inputlogin {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
min-width: 300px;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: 'Satoshi';
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus {
|
||||||
|
box-shadow:none !important;
|
||||||
|
}
|
||||||
|
.falsoImput {
|
||||||
|
border: 1px solid black;
|
||||||
|
padding: 7px;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: #efefef;
|
||||||
|
}
|
||||||
|
.hidden {
|
||||||
|
display:none !important
|
||||||
|
}
|
||||||
|
.text-right {
|
||||||
|
text-align:end;
|
||||||
|
}
|
||||||
|
.Cabecera {
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
}
|
||||||
|
.btnGris {
|
||||||
|
background-color: #eeeeee;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.btnGris:hover{
|
||||||
|
background-color: #bfbfbf;
|
||||||
|
}
|
||||||
|
#dropdownNavegador {
|
||||||
|
/*left:-30px*/
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
.lblinputRP {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.inputRP {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.dropdown-item:hover {
|
||||||
|
color: white !important;
|
||||||
|
background-color: var(--AzulMuyOscuro);
|
||||||
|
}
|
||||||
|
.tituloLbl {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.inputForm {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
.navMov{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.tablaPicadas {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
max-height: 540px;
|
||||||
|
/*overflow-y: scroll;*/
|
||||||
|
/*overflow-x: hidden;*/
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 95%;
|
||||||
|
background-color: #fafafa;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
.tablaPicadas table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.tablaPicadas td {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
width: auto;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
.tablaPicadas th {
|
||||||
|
position: sticky;
|
||||||
|
top: -1px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
background-color: var(--AzulOAAF);
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
border-collapse: collapse;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.table-striped > tbody > tr:nth-child(odd) > td,
|
||||||
|
.table-striped > tbody > tr:nth-child(odd) > th {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
.popupRP{
|
||||||
|
width:100%;
|
||||||
|
height:100vh;
|
||||||
|
position:fixed;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
background-color:#00000098;
|
||||||
|
justify-content:center;
|
||||||
|
align-items:center;
|
||||||
|
z-index:20;
|
||||||
|
}
|
||||||
|
.popupRPCard{
|
||||||
|
max-width:800px;
|
||||||
|
padding:10px;
|
||||||
|
background-color:white;
|
||||||
|
}
|
||||||
|
.menuMovil{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.iconBtn {
|
||||||
|
background-color: #172073;
|
||||||
|
color: white;
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
.iconBtn:hover {
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
.dxbs-pager, .dxbs-gridview .dxbs-pager{
|
||||||
|
gap:15px;
|
||||||
|
}
|
||||||
|
.dxbs-pager .page-size.form-inline{
|
||||||
|
display:flex;
|
||||||
|
}
|
||||||
|
#mensajeDiv {
|
||||||
|
z-index: 100;
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: #000000b2;
|
||||||
|
display: none;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
#mensajeCuerpo{
|
||||||
|
background-color:white;
|
||||||
|
padding:15px;
|
||||||
|
min-width:300px;
|
||||||
|
max-width:650px;
|
||||||
|
min-height:150px;
|
||||||
|
}
|
||||||
|
#loadingDiv {
|
||||||
|
z-index:100;
|
||||||
|
position:fixed;
|
||||||
|
width:100%;
|
||||||
|
height:100vh;
|
||||||
|
background-color:#000000b2;
|
||||||
|
display:none;
|
||||||
|
justify-content:center;
|
||||||
|
align-items:center;
|
||||||
|
}
|
||||||
|
#loading {
|
||||||
|
background-image: url('imagenes/logo-parlamento-blanco@2x.png');
|
||||||
|
height:50px;
|
||||||
|
width:200px;
|
||||||
|
background-position:center;
|
||||||
|
background-size:cover;
|
||||||
|
}
|
||||||
|
.btnOAAFAzul:hover {
|
||||||
|
opacity:1 !important;
|
||||||
|
}
|
||||||
|
.pagina {
|
||||||
|
padding: 50px;
|
||||||
|
}
|
||||||
|
.tituloSeccion {
|
||||||
|
font-size:30px;
|
||||||
|
font-weight:bold;
|
||||||
|
color:var(--AzulMuyOscuro)
|
||||||
|
}
|
||||||
|
.navBar {
|
||||||
|
position:fixed;
|
||||||
|
left:0;
|
||||||
|
width:300px;
|
||||||
|
height:100vh;
|
||||||
|
display:flex;
|
||||||
|
flex-direction:column;
|
||||||
|
background-color:var(--AzulOscuro) ;
|
||||||
|
border-collapse:collapse
|
||||||
|
}
|
||||||
|
.nav-link {
|
||||||
|
cursor:pointer;
|
||||||
|
color: var(--AzulClaroOAAF)
|
||||||
|
}
|
||||||
|
.nav-link:hover{
|
||||||
|
color: var(--AzulOAAF)
|
||||||
|
}
|
||||||
|
.inputRegPers {
|
||||||
|
border-radius: 5px;
|
||||||
|
height: 50px;
|
||||||
|
padding:10px;
|
||||||
|
border: solid 1px var(--AzulMuyOscuro);
|
||||||
|
}
|
||||||
|
.cbdxbt input {
|
||||||
|
border-radius: 5px;
|
||||||
|
height: 50px;
|
||||||
|
padding: 10px;
|
||||||
|
border: solid 1px var(--AzulMuyOscuro);
|
||||||
|
}
|
||||||
|
.btnOAAFAzul {
|
||||||
|
user-select: none;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.6;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
background-color: var(--AzulOAAF);
|
||||||
|
border-radius: 5px;
|
||||||
|
font-family: 'Satoshi';
|
||||||
|
border: none;
|
||||||
|
color: white !important;
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
min-width:40px;
|
||||||
|
}
|
||||||
|
.btnOAAFBlack {
|
||||||
|
user-select: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: var(--GrisOscuroOAAF);
|
||||||
|
border-radius: 5px;
|
||||||
|
font-family: 'Satoshi';
|
||||||
|
border: none;
|
||||||
|
color: white !important;
|
||||||
|
min-width:40px;
|
||||||
|
}
|
||||||
|
.btnOAAFBlack:hover {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
.cbdxbt .input-group-append {
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
height: 50px;
|
||||||
|
padding: 10px;
|
||||||
|
border: solid 1px var(--AzulMuyOscuro);
|
||||||
|
background-color: var(--AzulOscuro)
|
||||||
|
}
|
||||||
|
.cbdxbt .input-group-append::before {
|
||||||
|
content: "";
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
display:flex;
|
||||||
|
background-image: url('imagenes/dropParlamento.svg');
|
||||||
|
background-size:80% 80%;
|
||||||
|
background-position:center;
|
||||||
|
background-repeat:no-repeat;
|
||||||
|
}
|
||||||
|
.cbdxbt .input-group-append:hover {
|
||||||
|
background-color: var(--AzulMuyOscuro)
|
||||||
|
}
|
||||||
|
.tabsRegPers {
|
||||||
|
margin-top:50px !important;
|
||||||
|
display:flex;
|
||||||
|
gap:30px;
|
||||||
|
}
|
||||||
|
.tabsRegPers li a {
|
||||||
|
text-decoration: none !important;
|
||||||
|
color: var(--AzulOscuro) !important;
|
||||||
|
}
|
||||||
|
.tabsRegPers li .active a {
|
||||||
|
font-weight:bold !important;
|
||||||
|
}
|
||||||
|
.btnRegPers {
|
||||||
|
background-color: var(--AzulOscuro);
|
||||||
|
border-radius: 5px;
|
||||||
|
min-width: 100%;
|
||||||
|
color: white;
|
||||||
|
transition: all 0.2s
|
||||||
|
}
|
||||||
|
.btnRegPers:hover {
|
||||||
|
color: white !important;
|
||||||
|
background-color: var(--AzulMuyOscuro);
|
||||||
|
}
|
||||||
|
.filaInvisible {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.tablaRegPers {
|
||||||
|
margin-top:50px;
|
||||||
|
width:100%;
|
||||||
|
border-collapse:collapse;
|
||||||
|
|
||||||
|
}
|
||||||
|
.camposficha {
|
||||||
|
padding-left: 15px;
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
.formatoCampos {
|
||||||
|
flex-direction: column;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.tablaRegPers th {
|
||||||
|
text-align: center;
|
||||||
|
background-color: var(--AzulOscuro);
|
||||||
|
color: white !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
padding: 20px;
|
||||||
|
padding-inline: 20px;
|
||||||
|
overflow-inline: visible;
|
||||||
|
border-inline: solid 1px white;
|
||||||
|
width: auto;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.tablaRegPers th .btn-link {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
.tablaRegPers th a {
|
||||||
|
color: white !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
}
|
||||||
|
.tablaRegPers th a:hover {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
.tablaRegPers td {
|
||||||
|
padding: 15px !important;
|
||||||
|
padding-inline: 30px !important;
|
||||||
|
border: solid 1px black;
|
||||||
|
font-size: 14px !important;
|
||||||
|
}
|
||||||
|
.tablaRegPers td a {
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
.linkNavActivo {
|
||||||
|
background-color: var(--AzulMuyOscuro) !important;
|
||||||
|
}
|
||||||
|
.table .card {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.table thead {
|
||||||
|
text-align: left;
|
||||||
|
color: var(--AzulOscuro);
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.table th {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.table td {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.table a {
|
||||||
|
color: var(--AzulOscuro) !important;
|
||||||
|
}
|
||||||
|
.table a:hover {
|
||||||
|
color: var(--AzulMuyOscuro) !important;
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
border:none !important;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-collapse: collapse !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
.table-bordered > :not(caption) > * {
|
||||||
|
border-width: 0px 0px !important;
|
||||||
|
}
|
||||||
|
.table > tbody > tr > td {
|
||||||
|
|
||||||
|
border-bottom: 1px solid gray !important;
|
||||||
|
}
|
||||||
|
.table > tbody > tr {
|
||||||
|
border-bottom: 1px solid gray !important;
|
||||||
|
}
|
||||||
|
.table > thead > tr {
|
||||||
|
border-bottom: 1px solid gray !important;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-collapse: unset;
|
||||||
|
}
|
||||||
|
.marTop {
|
||||||
|
margin-top:25px !important;
|
||||||
|
}
|
||||||
|
.nuevaRPT p {
|
||||||
|
margin-bottom:0;
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
.lblInput {
|
||||||
|
margin:0;
|
||||||
|
font-size:12px;
|
||||||
|
font-weight:bold;
|
||||||
|
margin-top:10px;
|
||||||
|
}
|
||||||
|
.barraArribaHeader {
|
||||||
|
background-color: var(--azul-parlamento) !important;
|
||||||
|
padding-top: 0px !important;
|
||||||
|
padding-bottom: 0px !important;
|
||||||
|
padding-inline: 10px !important;
|
||||||
|
}
|
||||||
|
.barraArribaHeader .nav-link {
|
||||||
|
padding: 5px !important;
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
.barraArribaHeader .nav-link :hover {
|
||||||
|
filter: brightness(5);
|
||||||
|
}
|
||||||
|
#pa-main-menu {
|
||||||
|
align-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pa-main-menu .nav-item {
|
||||||
|
padding-left: 30px !important;
|
||||||
|
padding-right: 30px !important;
|
||||||
|
border-bottom: 3px solid white !important;
|
||||||
|
}
|
||||||
|
#pa-main-menu .nav-item:hover {
|
||||||
|
color: var(--AzulMuyOscuro) !important;
|
||||||
|
border-bottom: 3px solid var(--AzulMuyOscuro) !important;
|
||||||
|
}
|
||||||
|
.loadingFrame {
|
||||||
|
display: flex;
|
||||||
|
background-color: #000000e5;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: 10;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
.loadingDiv{
|
||||||
|
padding:20px;
|
||||||
|
border-radius:5px;
|
||||||
|
background-color:white;
|
||||||
|
display:flex;
|
||||||
|
justify-content:center;
|
||||||
|
align-items:center;
|
||||||
|
}
|
||||||
|
.loadingImg {
|
||||||
|
background-image: url(imagenes/cargaOAAF.gif);
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
#loginImg {
|
||||||
|
height: 80px;
|
||||||
|
margin-inline: auto;
|
||||||
|
margin-bottom: 30px
|
||||||
|
}
|
||||||
|
#tituloLogin {
|
||||||
|
text-align: center;
|
||||||
|
color: white;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
|
||||||
|
|
||||||
|
.Cabecera {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.pagina {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablaRegPers {
|
||||||
|
font-size: 10px;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cajaLogIn {
|
||||||
|
padding: 25px !important;
|
||||||
|
margin-inline:20px;
|
||||||
|
}
|
||||||
|
.inputlogin {
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
.loginImg {
|
||||||
|
height: 65px;
|
||||||
|
}
|
||||||
|
#tituloLogin {
|
||||||
|
text-align: center;
|
||||||
|
color: white;
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
.page-link{
|
||||||
|
font-size:15px !important;
|
||||||
|
}
|
||||||
|
.bb-grid-pagination-text {
|
||||||
|
display:none !important;
|
||||||
|
}
|
||||||
|
.btnOAAFAzul{
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
#btnCumplimientoTrienios, #btnVerTodos{
|
||||||
|
font-size:11px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.tablaDesk {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablaMov {
|
||||||
|
display: block
|
||||||
|
}
|
||||||
|
.navMov {
|
||||||
|
display: flex;
|
||||||
|
position:fixed;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
width:100%;
|
||||||
|
z-index:100;
|
||||||
|
background-color: white !important;
|
||||||
|
}
|
||||||
|
.page {
|
||||||
|
margin-top:60px !important;
|
||||||
|
}
|
||||||
|
.menuMovil {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-top: 11px;
|
||||||
|
z-index: 100;
|
||||||
|
background-color:white;
|
||||||
|
}
|
||||||
|
.btnNavMov {
|
||||||
|
border-radius: 0;
|
||||||
|
background-color: #172073;
|
||||||
|
padding: 15px;
|
||||||
|
padding-block: 5px;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
text-decoration:none;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.btnGrisNav {
|
||||||
|
border-radius: 0;
|
||||||
|
background-color: #eeeeee;
|
||||||
|
padding: 15px;
|
||||||
|
border-top: solid 1px darkgray;
|
||||||
|
border-bottom: solid 1px darkgray;
|
||||||
|
padding-block: 7px;
|
||||||
|
color: black;
|
||||||
|
border: none;
|
||||||
|
text-decoration: none;
|
||||||
|
text-align: center;
|
||||||
|
margin-block: 1px;
|
||||||
|
}
|
||||||
|
.nav-tabs .nav-link {
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
|
||||||
|
0% {
|
||||||
|
transform: scale(0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
70% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: scale(0.95);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
9
Antifraude.Net/GestionPersonalWeb/wwwroot/Content/all.min.css
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-facebook" viewBox="0 0 16 16">
|
||||||
|
<path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 436 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-instagram" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.917 3.917 0 0 0-1.417.923A3.927 3.927 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.916 3.916 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.926 3.926 0 0 0-.923-1.417A3.911 3.911 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0h.003zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599.28.28.453.546.598.92.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.47 2.47 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.478 2.478 0 0 1-.92-.598 2.48 2.48 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233 0-2.136.008-2.388.046-3.231.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92.28-.28.546-.453.92-.598.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045v.002zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92zm-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217zm0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-linkedin" viewBox="0 0 16 16">
|
||||||
|
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 711 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16">
|
||||||
|
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 344 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-fill" viewBox="0 0 16 16">
|
||||||
|
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 225 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-rss" viewBox="0 0 16 16">
|
||||||
|
<path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/>
|
||||||
|
<path d="M5.5 12a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-3-8.5a1 1 0 0 1 1-1c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1-1-1zm0 4a1 1 0 0 1 1-1 6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1-1-1z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16">
|
||||||
|
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 331 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-twitter" viewBox="0 0 16 16">
|
||||||
|
<path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 640 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-universal-access-circle" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 4.143A1.071 1.071 0 1 0 8 2a1.071 1.071 0 0 0 0 2.143Zm-4.668 1.47 3.24.316v2.5l-.323 4.585A.383.383 0 0 0 7 13.14l.826-4.017c.045-.18.301-.18.346 0L9 13.139a.383.383 0 0 0 .752-.125L9.43 8.43v-2.5l3.239-.316a.38.38 0 0 0-.047-.756H3.379a.38.38 0 0 0-.047.756Z"/>
|
||||||
|
<path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0ZM1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 509 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-youtube" viewBox="0 0 16 16">
|
||||||
|
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 924 B |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 335.1 121.8" style="enable-background:new 0 0 335.1 121.8;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#FFFFFF;}
|
||||||
|
</style>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M29.7,115c-3.7,0-6.2-2.8-6.2-6.8c0-3.9,2.5-6.8,6.2-6.8s6.2,2.8,6.2,6.8S33.4,115,29.7,115z M29.7,102.8
|
||||||
|
c-2.9,0-4.9,2.2-4.9,5.5s2,5.5,4.9,5.5c2.9,0,4.9-2.2,4.9-5.5S32.6,102.8,29.7,102.8z"/>
|
||||||
|
<path class="st0" d="M39.7,109v5.8h-1.3v-13.1h7.7v1.2h-6.4v4.9h5.4v1.2L39.7,109L39.7,109z"/>
|
||||||
|
<path class="st0" d="M49.6,114.8h-1.3v-13.1h1.3V114.8z"/>
|
||||||
|
<path class="st0" d="M51.9,108.2c0-4.1,2.6-6.8,6.2-6.8c2.8,0,5,1.7,5.5,4.3h-1.4c-0.6-1.9-2.2-3-4.1-3c-2.9,0-4.8,2.2-4.8,5.5
|
||||||
|
c0,3.3,2,5.4,4.8,5.4c2.1,0,3.7-1.2,4.3-2.8h1.4c-0.6,2.5-2.9,4.1-5.7,4.1C54.5,115,51.9,112.3,51.9,108.2z"/>
|
||||||
|
<path class="st0" d="M67.4,114.8h-1.3v-13.1h1.3V114.8z"/>
|
||||||
|
<path class="st0" d="M70.5,114.8v-13.1h1.3l7.2,10.9v-10.9h1.3v13.1H79l-7.2-10.9v10.9H70.5z"/>
|
||||||
|
<path class="st0" d="M82.2,114.8l4.8-13.1h1.6l4.8,13.1H92l-1.2-3.5h-6l-1.3,3.5H82.2z M85.2,110.2h5.2l-2.4-6.6
|
||||||
|
c0-0.2-0.1-0.4-0.2-0.5c0,0.1-0.1,0.4-0.2,0.5L85.2,110.2z"/>
|
||||||
|
<path class="st0" d="M98.9,114.8l4.8-13.5h2.9l4.8,13.5h-3.1l-0.9-2.8h-4.4l-1,2.8H98.9z M103.8,109.4h2.7l-1-2.9
|
||||||
|
c-0.2-0.5-0.3-1-0.4-1.3c0,0.3-0.2,0.9-0.3,1.3L103.8,109.4z"/>
|
||||||
|
<path class="st0" d="M112.9,114.8v-13.5h2.9l5.7,8.8v-8.8h2.9v13.5h-2.9l-5.7-8.8v8.8H112.9z"/>
|
||||||
|
<path class="st0" d="M127.3,114.8v-13.5h5.3c3.8,0,6.5,2.8,6.5,6.8c0,3.9-2.7,6.7-6.5,6.7H127.3z M130.2,104v8h2
|
||||||
|
c2.3,0,3.7-1.6,3.7-4c0-2.4-1.4-4-3.7-4L130.2,104L130.2,104z"/>
|
||||||
|
<path class="st0" d="M139.2,114.8l4.8-13.5h2.9l4.8,13.5h-3.1l-0.9-2.8h-4.4l-1,2.8H139.2z M144.1,109.4h2.7l-1-2.9
|
||||||
|
c-0.2-0.5-0.3-1-0.4-1.3c0,0.3-0.2,0.9-0.4,1.3L144.1,109.4z"/>
|
||||||
|
<path class="st0" d="M156.2,112.1h5.3v2.7h-8.3v-13.5h3V112.1z"/>
|
||||||
|
<path class="st0" d="M163.3,101.3h3v8.3c0,1.6,1.1,2.6,2.7,2.6c1.6,0,2.7-1.1,2.7-2.6v-8.3h2.9v8.4c0,3.4-2.6,5.3-5.7,5.3
|
||||||
|
s-5.6-2-5.6-5.3V101.3z"/>
|
||||||
|
<path class="st0" d="M176.5,114.8V112l6.1-7.9l-6.1,0v-2.9h9.6v2.6l-6.1,8h6v2.8H176.5z"/>
|
||||||
|
<path class="st0" d="M187.1,114.8l4.8-13.5h2.9l4.8,13.5h-3.1l-0.9-2.8h-4.4l-1,2.8H187.1z M192.1,109.4h2.7l-1-2.9
|
||||||
|
c-0.2-0.5-0.3-1-0.4-1.3c0,0.3-0.2,0.9-0.4,1.3L192.1,109.4z"/>
|
||||||
|
<path class="st0" d="M204.9,114.8l4.8-13.1h1.6l4.8,13.1h-1.4l-1.2-3.5h-6l-1.3,3.5H204.9z M207.9,110.2h5.2l-2.4-6.6
|
||||||
|
c0-0.2-0.1-0.4-0.2-0.5c0,0.1-0.1,0.4-0.1,0.5L207.9,110.2z"/>
|
||||||
|
<path class="st0" d="M218,114.8v-13.1h1.3l7.2,10.9v-10.9h1.3v13.1h-1.3l-7.2-10.9v10.9H218z"/>
|
||||||
|
<path class="st0" d="M229.6,101.7h9.5v1.2H235v11.8h-1.3v-11.8h-4.1L229.6,101.7L229.6,101.7z"/>
|
||||||
|
<path class="st0" d="M242.3,114.8h-1.3v-13.1h1.3V114.8z"/>
|
||||||
|
<path class="st0" d="M246.8,109v5.8h-1.3v-13.1h7.7v1.2h-6.4v4.9h5.4v1.2L246.8,109L246.8,109z"/>
|
||||||
|
<path class="st0" d="M255.4,114.8v-13.1h5c2.7,0,4.3,1.4,4.3,3.8c0,1.9-1,3.3-2.7,3.7l2.7,5.6h-1.5l-2.5-5.4h-3.9v5.4L255.4,114.8
|
||||||
|
L255.4,114.8z M256.7,108.1h3.7c1.9,0,2.9-1,2.9-2.6c0-1.7-1.1-2.6-2.9-2.6h-3.7L256.7,108.1L256.7,108.1z"/>
|
||||||
|
<path class="st0" d="M265.7,114.8l4.8-13.1h1.6l4.8,13.1h-1.4l-1.2-3.5h-6l-1.3,3.5H265.7z M268.7,110.2h5.2l-2.4-6.6
|
||||||
|
c0-0.2-0.1-0.4-0.2-0.5c0,0.1-0.1,0.4-0.1,0.5L268.7,110.2z"/>
|
||||||
|
<path class="st0" d="M278,101.7h1.3v8.6c0,2.7,1.9,3.4,3.6,3.4c1.8,0,3.6-1,3.6-3.4v-8.6h1.3v8.6c0,3.3-2.4,4.7-4.9,4.7
|
||||||
|
c-2.4,0-4.9-1.3-4.9-4.7L278,101.7L278,101.7z"/>
|
||||||
|
<path class="st0" d="M290.9,114.8v-13.1h4c3.9,0,6.5,2.6,6.5,6.5s-2.6,6.5-6.5,6.5H290.9z M292.2,103v10.6h2.6
|
||||||
|
c3.1,0,5.2-2.1,5.2-5.3c0-3.2-2.1-5.3-5.2-5.3H292.2z"/>
|
||||||
|
<path class="st0" d="M303.8,114.8v-13.1h7.8v1.3H305v4.7h5.9v1.2H305v4.7h6.5v1.2L303.8,114.8L303.8,114.8z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M98.4,37.5C93.1,15.8,71.1,2.6,49.4,8S14.5,35.3,19.9,57S47.2,92,68.9,86.6C90.6,81.2,103.8,59.2,98.4,37.5z
|
||||||
|
M45.7,62.9c-8.1,2-16.2-2.9-18.3-11c-2-8.1,2.9-16.2,11-18.3c8.1-2,16.2,2.9,18.3,11C58.7,52.8,53.8,60.9,45.7,62.9z"/>
|
||||||
|
<g>
|
||||||
|
<polygon class="st0" points="100.2,87.8 119.3,87.8 127.2,64.6 150.4,64.6 158.2,87.8 177.6,87.8 163.4,47.7 114.5,47.7 "/>
|
||||||
|
<polygon class="st0" points="129.1,6.8 118.2,37.3 158.3,33.6 148.8,6.8 "/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<polygon class="st0" points="180.7,87.8 199.8,87.8 207.6,64.6 230.9,64.6 238.6,87.8 258,87.8 243.8,47.8 195,47.7 "/>
|
||||||
|
<polygon class="st0" points="209.6,6.8 201.5,29.5 236.2,26.3 229.3,6.8 "/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<polygon class="st0" points="262.5,87.8 281,87.8 281,64.6 310.6,64.6 310.6,47.8 262.5,47.8 "/>
|
||||||
|
<polygon class="st0" points="262.5,6.8 262.5,23.8 316.4,18.7 316.4,6.8 "/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="201" height="176" viewBox="0 0 201 176">
|
||||||
|
<g id="Grupo_579" data-name="Grupo 579" transform="translate(-347.5 -588)">
|
||||||
|
<path id="Trazado_526" data-name="Trazado 526" d="M181.25-162.5H18.75A18.755,18.755,0,0,0,0-143.75V-6.25A18.755,18.755,0,0,0,18.75,12.5h162.5A18.755,18.755,0,0,0,200-6.25v-137.5A18.755,18.755,0,0,0,181.25-162.5ZM12.5-143.75A6.268,6.268,0,0,1,18.75-150H37.5v25h-25Zm175,137.5A6.268,6.268,0,0,1,181.25,0H18.75A6.268,6.268,0,0,1,12.5-6.25V-112.5h175Zm0-118.75H50v-25H181.25a6.268,6.268,0,0,1,6.25,6.25Z" transform="translate(348 751)" fill="#172073" stroke="rgba(0,0,0,0)" stroke-width="1"/>
|
||||||
|
<path id="Trazado_525" data-name="Trazado 525" d="M12.239,10.473V19.35l-1.611.615L10.53,21H21.312l.293-3.535-1.211-.146L19.2,19.525H15.013V15.512h2.119l.322,1.65,1.357-.225.332-4.141-1.406.264-.43,1.26H15.013v-4.18h3.975l.605,2.129,1.26.186.3-3.6H10.569l-.146,1.074Zm16.494,9.365-1.611-.576V16.137h1.211l1.211,2.246a6.46,6.46,0,0,0,1.67,2.109,3.668,3.668,0,0,0,2.334.742A5.345,5.345,0,0,0,35.2,21l.225-.977-.352-.1a3.412,3.412,0,0,1-1.118-.508,4.82,4.82,0,0,1-.874-.8q-.391-.454-1-1.274l-1.475-2.012a4.463,4.463,0,0,0,1.362-.767,4.051,4.051,0,0,0,1.006-1.2,2.9,2.9,0,0,0,.376-1.416A2.585,2.585,0,0,0,32,9.491a8.46,8.46,0,0,0-3.965-.737q-1.025,0-2.6.146t-2.734.332L22.6,10.395l1.768.371V19.35l-1.738.615L22.483,21h6.143Zm-1.611-9.766q.039,0,.249-.015t.493-.015a2.721,2.721,0,0,1,1.343.317,2.181,2.181,0,0,1,.874.869,2.525,2.525,0,0,1,.3,1.235,2.146,2.146,0,0,1-.425,1.357,2.794,2.794,0,0,1-1.128.85H27.122Zm15.469,9.766-1.611-.576V16.137H42.19L43.4,18.383a6.46,6.46,0,0,0,1.67,2.109,3.668,3.668,0,0,0,2.334.742A5.345,5.345,0,0,0,49.056,21l.225-.977-.352-.1a3.412,3.412,0,0,1-1.118-.508,4.82,4.82,0,0,1-.874-.8q-.391-.454-1-1.274l-1.475-2.012a4.463,4.463,0,0,0,1.362-.767,4.051,4.051,0,0,0,1.006-1.2,2.9,2.9,0,0,0,.376-1.416,2.585,2.585,0,0,0-1.348-2.466A8.46,8.46,0,0,0,41.9,8.754q-1.025,0-2.6.146t-2.734.332l-.107,1.162,1.768.371V19.35l-1.738.615L36.341,21h6.143Zm-1.611-9.766q.039,0,.249-.015t.493-.015a2.721,2.721,0,0,1,1.343.317,2.181,2.181,0,0,1,.874.869,2.525,2.525,0,0,1,.3,1.235,2.146,2.146,0,0,1-.425,1.357,2.794,2.794,0,0,1-1.128.85H40.979Zm15.2,11.191a7.692,7.692,0,0,0,3.574-.791,5.688,5.688,0,0,0,2.363-2.212,6.375,6.375,0,0,0,.83-3.276,7.549,7.549,0,0,0-.728-3.447,5.016,5.016,0,0,0-2.1-2.187A6.678,6.678,0,0,0,56.858,8.6a7.535,7.535,0,0,0-3.579.8A5.418,5.418,0,0,0,51,11.63a6.865,6.865,0,0,0-.781,3.325,7.619,7.619,0,0,0,.669,3.271A5.043,5.043,0,0,0,52.9,20.458,6.26,6.26,0,0,0,56.175,21.264ZM56.39,9.916a2.5,2.5,0,0,1,1.982.879,5.208,5.208,0,0,1,1.089,2.134,9.785,9.785,0,0,1,.327,2.476q0,4.414-3.115,4.414a2.5,2.5,0,0,1-1.958-.85,5,5,0,0,1-1.084-2.09,9.617,9.617,0,0,1-.327-2.461,6.54,6.54,0,0,1,.7-3.306A2.539,2.539,0,0,1,56.39,9.916Zm13.7,9.922-1.611-.576V16.137H69.69L70.9,18.383a6.46,6.46,0,0,0,1.67,2.109,3.668,3.668,0,0,0,2.334.742A5.345,5.345,0,0,0,76.556,21l.225-.977-.352-.1a3.412,3.412,0,0,1-1.118-.508,4.82,4.82,0,0,1-.874-.8q-.391-.454-1-1.274l-1.475-2.012a4.463,4.463,0,0,0,1.362-.767,4.051,4.051,0,0,0,1.006-1.2,2.9,2.9,0,0,0,.376-1.416,2.585,2.585,0,0,0-1.348-2.466A8.46,8.46,0,0,0,69.4,8.754q-1.025,0-2.6.146t-2.734.332l-.107,1.162,1.768.371V19.35l-1.738.615L63.841,21h6.143Zm-1.611-9.766q.039,0,.249-.015t.493-.015a2.721,2.721,0,0,1,1.343.317,2.181,2.181,0,0,1,.874.869,2.525,2.525,0,0,1,.3,1.235,2.146,2.146,0,0,1-.425,1.357,2.794,2.794,0,0,1-1.128.85H68.479ZM87.8,17.738v1.8l-2.363.586-.049.889h6.9l.1-1.006-2.109-.439v-1.8H92.61l.156-1.611h-2.49V14.34q0-1.289.029-2.686t.078-2.3l-.928-.244-6.777,7.52.234,1.113Zm-.02-5.176v3.594H85.12Zm10.322,8.7a4.07,4.07,0,0,0,2.095-.576,4.223,4.223,0,0,0,1.616-1.914,8.152,8.152,0,0,0,.635-3.477,7.393,7.393,0,0,0-1.157-4.619,3.738,3.738,0,0,0-3.071-1.445,4.065,4.065,0,0,0-2.163.62,4.455,4.455,0,0,0-1.65,1.982,8.158,8.158,0,0,0-.64,3.462q0,3.3,1.216,4.634A4.033,4.033,0,0,0,98.1,21.264ZM98.06,10.629a.97.97,0,0,1,.859.459,3.536,3.536,0,0,1,.43,1.45,22.388,22.388,0,0,1,.127,2.7,24.843,24.843,0,0,1-.117,2.71,4.145,4.145,0,0,1-.4,1.519.867.867,0,0,1-.781.5,1,1,0,0,1-.9-.488,3.6,3.6,0,0,1-.43-1.484,24.607,24.607,0,0,1-.117-2.725,24.491,24.491,0,0,1,.117-2.715,3.69,3.69,0,0,1,.405-1.46A.9.9,0,0,1,98.06,10.629ZM108.6,17.738v1.8l-2.363.586-.049.889h6.9l.1-1.006-2.109-.439v-1.8h2.334l.156-1.611h-2.49V14.34q0-1.289.029-2.686t.078-2.3l-.928-.244-6.777,7.52.234,1.113Zm-.02-5.176v3.594h-2.656Z" transform="translate(386 682)" fill="#172073" stroke="rgba(0,0,0,0)" stroke-width="1"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><defs><style>.b{fill:#fff;}</style></defs><polygon class="b" points="125 160.99 25.74 61.72 -.08 61.72 -1.22 62.86 124.2 188.28 125.8 188.28 251.22 62.86 250.08 61.72 224.26 61.72 125 160.99"/></svg>
|
||||||
|
After Width: | Height: | Size: 306 B |
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
|
||||||
|
<image id="Capa_1" data-name="Capa 1" width="32" height="32" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAKjElEQVRYhYWXWYxcx3WGv7v27XV69o0cznCGqyhySC2MGFomJVHW5sQSlTjWg4AgNhIbSBC92M5TaDgBbCCA/WLAsGzAgCEZBiQ/2DJBKFZoS6QtMlyGQ5Oz70vP1jO99+3b994K6vbMkFoCV6MG3TVVp07V+c//n1KEEHxa84WP57loqoaqanJGDHgeOA30Az1A3ebSLDAFDCC4iMJvgMKWWd/3URQl6J9o0oH7u+d52JUKdrXCm+9cZGxypq9YzL8uhCiI/6fZti3mFlKiWqkIx6mIzblyTZ+0OTO/iOtWA/vSGdm39tTOnTv3EZ+kk0MTM7z5m0vW5duT/7GQWv1Za3PdI031SVP99BNwc2ic779xHoRHsi6CpiqmUJVjmqr+EyjxqbmFS7dGp9xcvkC+VKapPnlvv/tDIL/LaxocGu399k9+9Vbe8frrI2HqIxb/8soZ9vf1fGL/6cUUP/zFbxmcXaIlEaUtGSNsGpi6yj9+8WkECq+/dXHg6sjk3xze0TL+/BPHqDgejck69u/uQv3o6RVuDU8c+8W7Vy431sX7G2NhXCEoOw53JuYQwv+EA5apoeEiHZ1PZxG+R8V1iUciTM6l+MEb7zAyu9hvu/6l6fX8sdd/+T7f+el5btwZCzCmf+z0ff9z5faFy3dnmuNRi+Z4mPpEiGTUYjmdYXk9Q1tjw9YKiuUSP/v1JcpVwcGuFnaWEghfYKgqLz93AtepMr+cYzWTxwgZrelC6QKCE7qujW8UylQc554DoISnFhbfWt3IN+9oTlKwq1RcD73qcmdmKTCsfRQt/HFgiNGZFD4KhqYRDptcH5mnszGBXXHo7mjny2dP88GNYa6PzlD1RXNnU/Ltr7x46i82svmy74t7IbAr9rlS2T7ywuNH2bujCQWfguMyv5Gn6vmMzK6QKdr3o4+HH+hjT1c7G/kS+ZLNaqbAod52VrIFfn/1NqVyiUePHCAUMlnNlbFMg3K5cvjq7Ylzf3nsIFbI3HagN2Sarz3Qt5tjB3ejCoFTdTEVCKkajfEI+7qaGRqb+cgN3Bye4rfXhjB1jWg4FIz2dNRzdO9OcnaVkGlSKpWYnF/BsgwypTLPnjhCImK9ZlecPsO458A3VVU1AlBZER4+1EdI1yh4PgJBMmLx16eP0rerFddztzHz0IE9/NurzwdGBqZSjCym+eD6BKeO7eGzx/bLDCUSifDVL54hoqkUSg6p9SxnP3fSME3rm9KOXBsHvnR/dNubk3S31iOqnsxpcoUKXR2dHOzbjaaq2xmTiMf4zCMHOHmkjwd3d9KZjHLiaC9NyShdbY3oeg1ipqbh+D5RXaOjsUaemqr+ndxbzngOiNZwUKFYtjm0p5vdO4ZZTmfJuz4PHezC1M3Nje9lrgQmQuGlpx/jzugsmUyGZ04fD8adanV73s7OFr701KNcvz3Ors6mrWG553O6U608KeNdKNt8eOMuiVgUQ9d4+cxjNMQj5IolXnzqMcIhlWKpuAk/gakbzK+kuXF7jJeffZy1dIaQqaKpOp5wMU2DYqkQYEVVVPZ1twfkND2/TDQSpqOpHk1Tn1RW1tIf/mlk6nhWItlx0BQVz3WDK7QdN/gtycaTAZVULESQctMr67x/awzHqdLX0cyJw72UbZeIFdq8KelmjaqFUFhYTaNqKvLSNBRaGxK0tjRc0ZsbG3pPn2hgI5Pn5sg4y2s5jh7o5dC+3Z9gva2WLxZ5f/ACY3OrqIYepOsXnniEg59C1VttYnqOG6MzJCIhDvXtorOtJcg+ZX5ptfLHW6OmjJmqqsQjYdLZHNFwGKEqBC5vNqliXe1NzC4u8/N3P6QuauErCpWqS0d9gleePcHscoaPK7wEcr5YCsLruh4lx8EyTHo6Gh29oS7Gge42kokYpmWytWc2U5D4Ih6LYWhKEMtCsYiiwYXLA8hkzNkeru8HKTu+tBEQVv++ruAQuqbh4eNWfbKFInWxCJau4yk+nq+QzRVJxCOoYcvKFW2HpoYEG7kCl64NBSdVdRXL0DF0+ODaHVKra+TLNtNzS5imTtXx6W1v4rH9PQERodSUdGRyHtPQuHxzmPGZRVoaEoGIJeNh7k7NceXWOJGQEeDKNMycTMMJIUST77sMj89yc2SGlqYErY3JIOXWNvKMzi2jGRqTCyusprO0tdSTdRz+9sxxHnlwL//6Xz+lsuYyl0rz60sDNDQkmEytsl4s0L+/houy7TAytxyc/Mi+boQiASkmZFIPSlazrBDLmQIX/ncYu+IGmq5pGsJX+NUfBplcWMYyNCZS6/xpfJGYYRDESxKNrgVrrtweRwqMrAEkRd8ZWyQcigSYCIfCDAzP8O7Vu8HB1BqhDcq/78kYKhgIRcERsn7TAhYzDR1d/k+mkqZwqG8nK9ki82vZQKJ/+d8f8p8/ept0Jh+k2OD0Mp3NSVobE1Tde7WDDInskkHkqKZr6IaBrinv6Svp9fOT8yvFtVwxurGeY19HC8NTC5TLZVQE6VyRXW1NlHIVVtN5djbVY+g1Nlxcz+Ot5QkZGm3JOE7MDwA4MrFIW0NdANx3L98IpHlsZomQptPZWB9gKmTopV1tTeeVudQS7/zu2o+TsfA/RC0rkM5iuUK2WEKCPx4OEwlb+L7HnakU790cxbS2ygglUExNgC18XF/QGIvw0uP9AVPKDCmXKxQqFcKGRjwWRVelKNnkCqWf7Onp+LLe2dbEg3t3fuehB/a8mi/Yxq3hCb5w5jijM4sYqkbPzg5+f3WAw/t6KTkeVSm/GEHuy64FSa8ExcjWpT95op+749PUxWPs7d7J4MgE+3p3Mb+QYm0jx+cef7g6OZv6bjwRkzDS0FV9XNe172UKJS5eG6phQFMDEMrUev/mCLmSg6LLN4ISUPVnDnTzzy+d4msvneIrnz9JzDJRfD+Is24aXB+aZnYpU9MCVQ24Yjq1wY0RWVMo3xeaOiZt6zVxgarnnetsaXjm71984jDb74XaiV594bO0N9ZzzZ0IrtWt+EHh8szJhzZrA5/3rg2zmi3WbFWq/NWpR7FMcxuITtXj6P7dUpQGgXO1Xak5IMsORVHK4bB1tq+r8w9As0ylrUndO9rZcorNt4OsfLda2a5ul/TyI6d1tGzLruSowFpDMr7aQPwsUKpxq4JecSqBcq1nc1i6PQ7iGQXtvOM4ra6ispHJIfBQFT0o02rXJt27ry6Qvzc5QapnplDErTps6iGe8NnI5ZcNTX1OIMZl2G27QjRkohdKZXRFI7W4vmXvhg8nNYW3QTk8WVysnULTgnJMEhSe5P/7HFAI6FXXFKIhnaWVNVRRc0iiQlWVwdnFlbOKYHxrTN6YtKVLpQqHzOARunXlICcqx0F8C3gNZAmgB9qfLZXl/thVb9sBQ9fJ5EpBPZDOl4NixFRldIUsi74H/LssuO5XSKk3hiSjbMlhIrWGrt33RKg1ueAbwI+Br2uK8ooriBzp6QxAlykUuHpnLCg4ZDrKOjIWtYiGTWaW0mVd0d8E8V2hKGMfNxw44Hp0egJlvVDCDWL7adPuNSGIGar6QsjQTwtEv111e3zPD16ZQiETNvUpVVEHhBAXy477jlTvP2OPkKnzf5j6I1ZEb0RoAAAAAElFTkSuQmCC"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="119.171" height="98.159" viewBox="0 0 119.171 98.159">
|
||||||
|
<g id="Grupo_359" data-name="Grupo 359" transform="translate(-161.825 -3302.735)">
|
||||||
|
<path id="Trazado_484" data-name="Trazado 484" d="M227.116,633.766a3.893,3.893,0,0,1-1.967,3c-.437.229-.791.609-1.22.856a6.77,6.77,0,0,0-2.549,2.928,1.79,1.79,0,0,1-.9.708,8.232,8.232,0,0,1-5.509.156,6.662,6.662,0,0,0-3.574-.1A2.684,2.684,0,0,1,208.6,640.1a9.072,9.072,0,0,1,1.476-.477,6.258,6.258,0,0,1,1.67-.006c1.914.256,3.364-.726,4.657-1.872a5.711,5.711,0,0,0,1.092-2.159,4.258,4.258,0,0,0,.407-1.675,1.831,1.831,0,0,0-.611-1.323,24.918,24.918,0,0,0-3.456-1.846,15,15,0,0,1-5.356-3.263,1.588,1.588,0,0,0-.917-.416,6.372,6.372,0,0,1-4.372-2.134,21.663,21.663,0,0,0-1.949-1.9.648.648,0,0,0-.529-.152c-1.487.506-3.1.79-4.237,1.994a2.2,2.2,0,0,0-.567,1.262c-.114,1.707.393,3.454-.339,5.122-.4.908-.874,1.786-1.214,2.715a8.194,8.194,0,0,0-.192,4.747,5.4,5.4,0,0,1,.076,2.084,1.308,1.308,0,0,1-.916.833c-2.368.185-4.743.3-7.118.377-1.489.047-2.982-.007-4.472-.036a1.668,1.668,0,0,1-.674-.182,8.2,8.2,0,0,0-3.042-1c-.239-.016-.463-.29-.694-.445l.044-.329a5.914,5.914,0,0,1,1.62-.394c3.452.166,6.122-1.432,8.352-3.812a4.436,4.436,0,0,0,.958-3.639c-.313-2.467-.712-4.925-.942-7.4a5.152,5.152,0,0,1,1.175-3.6c2.4-3.116,4.835-6.2,7.331-9.389-.957-1.242-2.1-2.542-3.025-3.984a33.289,33.289,0,0,1-2.024-4.053c-.341-.739-.478-1.61-1.709-1.739.177,1.609-1.17,2.4-1.944,3.529a15.345,15.345,0,0,1-2.3,2.747,3.025,3.025,0,0,1-1.822.373,12.087,12.087,0,0,1-7.85-2.835c-.778-.62-1.476-1.339-2.223-2a4.663,4.663,0,0,0-1.941-1.372c-.537-.139-.916-.921-1.346-1.43a8.408,8.408,0,0,1-.543-.883c-5.579,11.646-11.12,23.036-15.142,34.933a11.441,11.441,0,0,1,2.174,1.787c.5.675.757,1.5,1.58,1.956a1.255,1.255,0,0,1,.381,1.011c-.076,1.048-.234,2.092-.407,3.13a1.918,1.918,0,0,1-1.613,1.536,29.4,29.4,0,0,1-9.073.8,21.073,21.073,0,0,1-6.695-1.295c-.246-.1-.488-.2-.733-.295-1.177-.46-1.955-1.171-1.682-2.584a4.753,4.753,0,0,0,.008-.88c0-1.324.184-1.584,1.461-2.047a2.964,2.964,0,0,1,.588-.176,2.608,2.608,0,0,0,1.993-1.233,5.435,5.435,0,0,1,2.549-1.546,16.784,16.784,0,0,1,2.92-.554c-.18-.134-.319-.246-.466-.345-1.093-.737-2.175-1.489-3.285-2.2-.525-.337-.562-.694-.331-1.247,2.16-5.153,4.079-10.42,6.484-15.455C154.7,605.3,159.8,595.265,164.818,585.2c2.563-5.139,5.218-10.233,7.772-15.377,1.209-2.436,2.286-4.939,3.407-7.418.562-1.241.545-1.235,1.89-.907a14.77,14.77,0,0,1,5.72,2.667c.825-1.656-.26-3.043-.444-4.513a2.071,2.071,0,0,0,.239-.114c1.208-.794,1.736.2,2.207.949,1.009,1.6,2.1,3.212,1.972,5.228-.044.714-.361,1.407-.466,2.122a2.242,2.242,0,0,0,.106,1.289,23.081,23.081,0,0,0,1.765,2.835,15.57,15.57,0,0,1,2.514,6.2,1.27,1.27,0,0,0,.526.613c1.138.826,2.327,1.584,3.433,2.451a5.62,5.62,0,0,1,2.011,3.7,1.764,1.764,0,0,0,.879,1.4,7.179,7.179,0,0,1,3.2,4.05,5.788,5.788,0,0,0,.589,1.173,8.69,8.69,0,0,1,.955,7.819,6.021,6.021,0,0,0,.524,5.606,17.706,17.706,0,0,0,3.614,4.709,3.6,3.6,0,0,1,.949,2.165,20.7,20.7,0,0,1-.078,2.968,1,1,0,0,0,.3.667,9.168,9.168,0,0,1,2.805,5.164,1.991,1.991,0,0,0,1.811,1.808c.488.074.952.294,1.438.386a8.435,8.435,0,0,1,5.034,3.41,19.733,19.733,0,0,0,4.947,4.573,16.836,16.836,0,0,1,2.679,2.592Zm-54.276-39.787a7.108,7.108,0,0,0,.793,4.2,4.729,4.729,0,0,0,4.032,2.769,7.529,7.529,0,0,1,3.6,1.169c.848.563,1.2.408,1.47-.619.307-1.148.531-2.32.873-3.456.259-.862.668-1.676.969-2.527a2.287,2.287,0,0,0,.058-2.125,11.762,11.762,0,0,1-1.426-.212,10.624,10.624,0,0,1-1.319-.522,2.983,2.983,0,0,1-.929-.454c-.735-.721-1.446-1.471-2.109-2.259a1.692,1.692,0,0,0-2.511-.191c-1,.9-1.125.887-1.788-.23l-.159-.271.568-1.165-.318-.218c-.823.359-.812,1.394-1.166,2.062a41.166,41.166,0,0,0-1.625,3.952Zm5.467-10.473c.637-.23,1.434-.57,2.26-.8a11.248,11.248,0,0,1,3.264-.722c1.058.033,2.368.12,2.816,1.524a.347.347,0,0,0,.2.168,3.572,3.572,0,0,1,2.245,2.407c.059.194.331.323.5.481a1.822,1.822,0,0,0-.107-1c-.485-1.346-.934-2.706-1.487-4.023a4.118,4.118,0,0,0-1.085-1.586,5.683,5.683,0,0,1-2.263-3.426c-.366-2.04-.782-4.077-1.006-6.134-.1-.933-.748-1.293-1.274-2.08l-7.466,18.329.251.143Z" transform="translate(53.879 2755.093)" fill="#5ba1ba"/>
|
||||||
|
<path id="Trazado_485" data-name="Trazado 485" d="M101,639.823c.6-1.2,1.286-2.287,2.631-2.464.1-.724-.034-1.571.329-1.979s1.226-.4,2.02-.618c.1-.858.252-1.833.3-2.812.2-3.781.366-7.564.552-11.346.279-5.686.552-11.372.854-17.056.225-4.248.511-8.493.736-12.74.315-5.949.561-11.9.905-17.848.3-5.124.688-10.243,1.042-15.363a3.173,3.173,0,0,1,.117-.6c.112-.417.011-.7-.459-.75-.854-.1-1.214-.773-1.784-1.29-1.241-1.125-1.043-2.442-1.07-3.779-.018-.873-.418-1.8.32-2.6a.505.505,0,0,0-.027-.487c-1.023-.671-.479-1.753-.749-2.536,1.754,0,3.477-.038,5.2.009,2.876.078,5.749.225,8.625.307a1.089,1.089,0,0,1,1.058.577c.4.683.868,1.325,1.306,1.985a1.439,1.439,0,0,1-.285,2.133.892.892,0,0,0-.347,1.182,3.477,3.477,0,0,1-.139,2.391,20.262,20.262,0,0,0-.591,2.411,6.619,6.619,0,0,0-.876.061c-2.095.418-2.071.423-2.062,2.58.017,3.992-.022,7.984.01,11.975.089,11.1.239,22.2.285,33.3.013,3.166-.213,6.333-.39,9.5-.163,2.927-.445,5.847-.606,8.774-.165,3.017-.246,6.04-.369,9.059a2.636,2.636,0,0,1-.106.6c-.14.5-.049.822.5,1.01a2.2,2.2,0,0,1,1.567,2.115,1.668,1.668,0,0,0,1.475,1.6c.952.218,1.988.48,1.981,1.633-.006,1.265.171,2.8-1.419,3.383-1.107.4-2.312.53-3.458.838-.657.178-1.283.472-1.924.714h-8.638c-.807-.067-1.612-.164-2.42-.2a3.657,3.657,0,0,1-3.73-2.586c-.1-.257-.248-.5-.373-.744Z" transform="translate(60.825 2757.192)" fill="#5ba1ba"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16">
|
||||||
|
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 344 B |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
@@ -0,0 +1,33 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="152.104" height="40.848" viewBox="0 0 152.104 40.848">
|
||||||
|
<g id="Grupo_311" data-name="Grupo 311" transform="translate(-34.577 42.54)">
|
||||||
|
<g id="Grupo_307" data-name="Grupo 307" transform="translate(34.577 -42.54)">
|
||||||
|
<path id="Trazado_427" data-name="Trazado 427" d="M18.806-33.319V-27.9a5.064,5.064,0,0,0,.156,1.448,1,1,0,0,0,.6.642,3.936,3.936,0,0,0,1.346.174v.431H14.577v-.431a3.7,3.7,0,0,0,1.3-.164.943.943,0,0,0,.578-.628,5.074,5.074,0,0,0,.153-1.472V-39.588A4.4,4.4,0,0,0,16.433-41a1.072,1.072,0,0,0-.6-.656,3.405,3.405,0,0,0-1.261-.177v-.419h6.27A6.8,6.8,0,0,1,23-41.924a4.884,4.884,0,0,1,1.7.978,4.311,4.311,0,0,1,1.1,1.51,4.794,4.794,0,0,1,.384,1.9,4.948,4.948,0,0,1-.618,2.455,4.428,4.428,0,0,1-1.707,1.69,4.97,4.97,0,0,1-2.438.608,6.94,6.94,0,0,1-2.614-.533m0-7.79v6.93a4.315,4.315,0,0,0,1.656.427,2.939,2.939,0,0,0,1.618-.445,2.881,2.881,0,0,0,1.1-1.251,4.269,4.269,0,0,0,.373-1.856,5.211,5.211,0,0,0-.775-2.789,2.8,2.8,0,0,0-2.59-1.289,3.643,3.643,0,0,0-1.384.272" transform="translate(-14.577 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_428" data-name="Trazado 428" d="M26.388-30.561l-.907,3.284-.116.752a.833.833,0,0,0,.344.734,2.211,2.211,0,0,0,1.19.232v.431H22.57v-.431a1.663,1.663,0,0,0,1.285-.476,4.907,4.907,0,0,0,.8-1.86l4.1-14.645h.368l4.4,14.645a8.927,8.927,0,0,0,.606,1.614,1.22,1.22,0,0,0,.567.606,2.88,2.88,0,0,0,.945.116v.431H30.175v-.431a1.983,1.983,0,0,0,1.047-.215.844.844,0,0,0,.3-.751,4.733,4.733,0,0,0-.221-1.13l-.887-2.906Zm3.743-.959L28.34-37.6h-.055L26.64-31.52Z" transform="translate(-12.401 42.54)" fill="#fff"/>
|
||||||
|
<path id="Trazado_429" data-name="Trazado 429" d="M37.771-33.319V-27.9a5.846,5.846,0,0,0,.146,1.448,1,1,0,0,0,.571.642,3.759,3.759,0,0,0,1.34.174v.431H33.487v-.431a3.886,3.886,0,0,0,1.342-.174.95.95,0,0,0,.585-.649,4.81,4.81,0,0,0,.15-1.441V-39.555A4.68,4.68,0,0,0,35.4-41a.993.993,0,0,0-.592-.656,3.785,3.785,0,0,0-1.326-.174v-.421h6.548a5.389,5.389,0,0,1,2.553.578,4,4,0,0,1,1.649,1.567,4.066,4.066,0,0,1,.575,2.122,4.129,4.129,0,0,1-1.037,2.808A4.956,4.956,0,0,1,40.956-33.6L44.741-27a3.966,3.966,0,0,0,.822,1.085,1.518,1.518,0,0,0,.98.279v.431h-3.06l-4.627-8.112Zm0-.789h.857a3.432,3.432,0,0,0,2.608-1,3.639,3.639,0,0,0,.954-2.611,5.327,5.327,0,0,0-.2-1.513,3.813,3.813,0,0,0-.588-1.14,2.629,2.629,0,0,0-.915-.734,2.724,2.724,0,0,0-1.211-.272,3.237,3.237,0,0,0-1.5.354Z" transform="translate(-9.429 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_430" data-name="Trazado 430" d="M44.511-42.251h6.368v.421a3.746,3.746,0,0,0-1.322.174.991.991,0,0,0-.6.659,4.942,4.942,0,0,0-.16,1.441v12.061a1.787,1.787,0,0,0,.214,1.078,1.267,1.267,0,0,0,.949.262h1.665a7.226,7.226,0,0,0,1.616-.15,2.376,2.376,0,0,0,1.051-.537,3.382,3.382,0,0,0,.775-1.109,12.639,12.639,0,0,0,.669-1.879l.378.118-1.139,4.5H44.511v-.431a4.594,4.594,0,0,0,1.1-.106,1.137,1.137,0,0,0,.63-.35l.275-.654a7.743,7.743,0,0,0,.069-1.135V-39.555a4.687,4.687,0,0,0-.167-1.438,1.1,1.1,0,0,0-.6-.663,3.706,3.706,0,0,0-1.312-.174Z" transform="translate(-6.428 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_431" data-name="Trazado 431" d="M58.231-30.561l-.926,3.284-.115.752a.815.815,0,0,0,.354.734,2.229,2.229,0,0,0,1.2.232v.431H54.412v-.431a1.625,1.625,0,0,0,1.266-.476,4.933,4.933,0,0,0,.805-1.86l4.1-14.645h.378L65.351-27.9a9.864,9.864,0,0,0,.6,1.614,1.194,1.194,0,0,0,.571.606,2.906,2.906,0,0,0,.938.116v.431H62v-.431a1.986,1.986,0,0,0,1.051-.215.847.847,0,0,0,.309-.751,5.167,5.167,0,0,0-.221-1.13l-.9-2.906Zm3.729-.959L60.169-37.6h-.051L58.472-31.52Z" transform="translate(-3.732 42.54)" fill="#fff"/>
|
||||||
|
<path id="Trazado_432" data-name="Trazado 432" d="M65.375-42.251h4.07L73.7-29.688h.059l4.257-12.563h3.889v.421a2.62,2.62,0,0,0-1.053.181,1.056,1.056,0,0,0-.5.663,5.068,5.068,0,0,0-.146,1.4V-27.9a5.777,5.777,0,0,0,.146,1.417,1.033,1.033,0,0,0,.52.67,2.446,2.446,0,0,0,1.033.177v.431H76.02v-.431a3.514,3.514,0,0,0,1.248-.167.98.98,0,0,0,.581-.65,4.587,4.587,0,0,0,.167-1.448V-39.381h-.045L73.2-25.207h-.3L68.189-39.079h-.051V-27.9a4.91,4.91,0,0,0,.16,1.478.9.9,0,0,0,.557.634,3.481,3.481,0,0,0,1.224.153v.431h-4.7v-.431a3.132,3.132,0,0,0,1.173-.167.985.985,0,0,0,.553-.65,5.441,5.441,0,0,0,.146-1.448V-39.586a5.068,5.068,0,0,0-.146-1.4,1,1,0,0,0-.553-.663,3.2,3.2,0,0,0-1.173-.181Z" transform="translate(-0.748 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_433" data-name="Trazado 433" d="M89.363-42.251l.232,3.7h-.422a5.357,5.357,0,0,0-.435-1.791,1.507,1.507,0,0,0-.854-.768,4.558,4.558,0,0,0-1.523-.191h-3.23v6.678H85.67a2.256,2.256,0,0,0,1.776-.548,3.167,3.167,0,0,0,.455-2h.4v5.948h-.4a3.282,3.282,0,0,0-.394-1.921,1.717,1.717,0,0,0-1.429-.52H83.131v6.083a2.111,2.111,0,0,0,.207,1.165,1.16,1.16,0,0,0,.922.27h2.284a3.266,3.266,0,0,0,2.285-.766,6.125,6.125,0,0,0,1.419-2.649l.4.113-1.216,4.249H78.908v-.431a3.819,3.819,0,0,0,1.3-.167,1.02,1.02,0,0,0,.575-.63,4.949,4.949,0,0,0,.16-1.468V-39.586a5.491,5.491,0,0,0-.136-1.387,1.046,1.046,0,0,0-.581-.66,3.488,3.488,0,0,0-1.313-.2v-.421Z" transform="translate(2.936 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_434" data-name="Trazado 434" d="M88.8-42.251h3.467l8.089,12.3h.045v-9.632a4.47,4.47,0,0,0-.167-1.4,1.03,1.03,0,0,0-.606-.669,3.763,3.763,0,0,0-1.309-.174v-.421h4.614v.421a1.683,1.683,0,0,0-1.268.4,1.988,1.988,0,0,0-.38,1.38v15.127h-.323L91.892-38.752h-.051V-27.9a6.8,6.8,0,0,0,.084,1.167l.31.665.584.344a4.272,4.272,0,0,0,.943.089h.323v.431H89.142v-.431a1.946,1.946,0,0,0,1.438-.425,2.209,2.209,0,0,0,.371-1.462V-40.133l-.654-.941a1.643,1.643,0,0,0-.614-.6,2.051,2.051,0,0,0-.88-.156Z" transform="translate(5.63 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_435" data-name="Trazado 435" d="M107.81-41.306v13.4a4.307,4.307,0,0,0,.177,1.478.9.9,0,0,0,.574.634,4.243,4.243,0,0,0,1.34.153v.431h-6.375v-.431a3.81,3.81,0,0,0,1.327-.164.972.972,0,0,0,.6-.639,5.161,5.161,0,0,0,.163-1.462v-13.4H103.95a3.756,3.756,0,0,0-1.55.279,1.687,1.687,0,0,0-.851.935,4.486,4.486,0,0,0-.281,1.718h-.384v-3.877h11.657v3.877h-.38a3.419,3.419,0,0,0-.628-2.279,2.689,2.689,0,0,0-2.033-.653Z" transform="translate(8.919 42.619)" fill="#fff"/>
|
||||||
|
<path id="Trazado_436" data-name="Trazado 436" d="M110.943-33.648a13.222,13.222,0,0,1,.714-4.336,7.539,7.539,0,0,1,2.153-3.3,5.058,5.058,0,0,1,3.46-1.252,5.037,5.037,0,0,1,3.448,1.252,7.646,7.646,0,0,1,2.156,3.3,13.354,13.354,0,0,1,.71,4.336,13.328,13.328,0,0,1-.4,3.305,10.368,10.368,0,0,1-1.179,2.838,6.187,6.187,0,0,1-1.992,2.013,5.133,5.133,0,0,1-2.744.742,5.1,5.1,0,0,1-3.4-1.224,7.63,7.63,0,0,1-2.186-3.258,12.961,12.961,0,0,1-.738-4.416m2.625,0a22.372,22.372,0,0,0,.388,4.56,5.314,5.314,0,0,0,1.2,2.628,2.834,2.834,0,0,0,2.114.826,2.733,2.733,0,0,0,2.218-.955,5.583,5.583,0,0,0,1.149-2.683,23.633,23.633,0,0,0,.337-4.375,21.647,21.647,0,0,0-.394-4.572,5.309,5.309,0,0,0-1.191-2.622,2.839,2.839,0,0,0-2.118-.836,2.914,2.914,0,0,0-1.716.509,3.5,3.5,0,0,0-1.14,1.514,9.6,9.6,0,0,0-.645,2.488,26.925,26.925,0,0,0-.2,3.519" transform="translate(11.657 42.54)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<g id="Grupo_310" data-name="Grupo 310" transform="translate(34.577 -24.983)">
|
||||||
|
<g id="Grupo_308" data-name="Grupo 308" transform="translate(0 6.247)">
|
||||||
|
<path id="Trazado_437" data-name="Trazado 437" d="M14.577-23.83h6.107a8.255,8.255,0,0,1,3.518.684,6.554,6.554,0,0,1,2.462,1.893A8.2,8.2,0,0,1,28.115-18.5a11.24,11.24,0,0,1,.466,3.262,10.216,10.216,0,0,1-.588,3.511,7.953,7.953,0,0,1-1.686,2.669,7.115,7.115,0,0,1-2.49,1.683,7.7,7.7,0,0,1-3.015.584H14.577v-.431a3.813,3.813,0,0,0,1.305-.163.925.925,0,0,0,.575-.628,5.084,5.084,0,0,0,.153-1.473V-21.163a3,3,0,0,0-.37-1.823,2.315,2.315,0,0,0-1.663-.421Zm4.243,1.207V-7.986a4.331,4.331,0,0,0,2.016.429A4.417,4.417,0,0,0,23.6-8.445a5.529,5.529,0,0,0,1.754-2.617,12.455,12.455,0,0,0,.594-4.1,14.445,14.445,0,0,0-.336-3.247,7.806,7.806,0,0,0-1.057-2.468,4.733,4.733,0,0,0-1.693-1.551,4.583,4.583,0,0,0-2.224-.531,5.475,5.475,0,0,0-.935.071,5.976,5.976,0,0,0-.88.262" transform="translate(-14.577 23.83)" fill="#fff"/>
|
||||||
|
<path id="Trazado_438" data-name="Trazado 438" d="M36.854-23.83l.234,3.7h-.425a5.424,5.424,0,0,0-.439-1.791,1.516,1.516,0,0,0-.842-.768,4.637,4.637,0,0,0-1.527-.191h-3.23v6.678h2.537a2.221,2.221,0,0,0,1.767-.547,3.159,3.159,0,0,0,.469-2h.4v5.946h-.4a3.179,3.179,0,0,0-.415-1.921,1.666,1.666,0,0,0-1.415-.52H30.626v6.083A2.246,2.246,0,0,0,30.823-8a1.189,1.189,0,0,0,.931.268h2.279A3.275,3.275,0,0,0,36.316-8.5a6,6,0,0,0,1.419-2.649l.4.112-1.22,4.249H26.389v-.431a3.772,3.772,0,0,0,1.3-.167.966.966,0,0,0,.571-.628,4.736,4.736,0,0,0,.163-1.469V-21.163a5.159,5.159,0,0,0-.136-1.388,1.022,1.022,0,0,0-.585-.659,3.414,3.414,0,0,0-1.312-.2v-.422Z" transform="translate(-11.361 23.83)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<g id="Grupo_309" data-name="Grupo 309" transform="translate(33.55)">
|
||||||
|
<path id="Trazado_439" data-name="Trazado 439" d="M44.851-12.479,43.92-9.125l-.115.767a.844.844,0,0,0,.351.751,2.268,2.268,0,0,0,1.219.235v.441H40.948v-.441a1.676,1.676,0,0,0,1.313-.486,5.239,5.239,0,0,0,.816-1.9L47.263-24.71h.375l4.5,14.953a8.906,8.906,0,0,0,.608,1.65,1.208,1.208,0,0,0,.583.617,2.9,2.9,0,0,0,.958.118v.441H48.715v-.441a2,2,0,0,0,1.066-.219.856.856,0,0,0,.316-.767,5.243,5.243,0,0,0-.226-1.153l-.906-2.968Zm3.826-.978-1.837-6.2h-.052l-1.677,6.2Z" transform="translate(-40.948 29.837)" fill="#fff"/>
|
||||||
|
<path id="Trazado_440" data-name="Trazado 440" d="M51.981-24.415h3.544l8.256,12.557h.06v-9.836a4.5,4.5,0,0,0-.181-1.43,1.036,1.036,0,0,0-.611-.683,3.884,3.884,0,0,0-1.345-.178v-.43h4.719v.43a1.769,1.769,0,0,0-1.305.41,2.069,2.069,0,0,0-.378,1.41V-6.719H64.4L55.144-20.843h-.052V-9.764a7.305,7.305,0,0,0,.087,1.191l.323.681.59.35a4.349,4.349,0,0,0,.962.09h.323v.441H52.332v-.441A1.981,1.981,0,0,0,53.8-7.886a2.233,2.233,0,0,0,.389-1.492V-22.252l-.67-.962a1.643,1.643,0,0,0-.639-.611,2.036,2.036,0,0,0-.9-.16Z" transform="translate(-37.944 29.917)" fill="#fff"/>
|
||||||
|
<path id="Trazado_441" data-name="Trazado 441" d="M64.266-24.415h6.229a8.4,8.4,0,0,1,3.6.7,6.775,6.775,0,0,1,2.52,1.933,8.2,8.2,0,0,1,1.473,2.817,11.516,11.516,0,0,1,.475,3.329,9.8,9.8,0,0,1-.611,3.586A7.708,7.708,0,0,1,76.24-9.326a7.289,7.289,0,0,1-2.532,1.718,7.892,7.892,0,0,1-3.083.6h-6.36v-.441A3.807,3.807,0,0,0,65.6-7.619a.938.938,0,0,0,.59-.642,4.981,4.981,0,0,0,.163-1.5v-11.93a3.008,3.008,0,0,0-.392-1.86,2.331,2.331,0,0,0-1.691-.431ZM68.6-23.182V-8.237a4.479,4.479,0,0,0,2.055.438,4.489,4.489,0,0,0,2.823-.906,5.7,5.7,0,0,0,1.794-2.673,12.755,12.755,0,0,0,.612-4.184,13.97,13.97,0,0,0-.358-3.314A7.654,7.654,0,0,0,74.449-21.4a4.865,4.865,0,0,0-1.715-1.583,4.722,4.722,0,0,0-2.277-.542,5.3,5.3,0,0,0-.955.074,5.757,5.757,0,0,0-.9.267" transform="translate(-34.6 29.917)" fill="#fff"/>
|
||||||
|
<path id="Trazado_442" data-name="Trazado 442" d="M79.245-12.479l-.934,3.354-.115.767a.85.85,0,0,0,.347.751,2.274,2.274,0,0,0,1.223.235v.441H75.351v-.441a1.666,1.666,0,0,0,1.3-.486,5.185,5.185,0,0,0,.819-1.9L81.665-24.71h.371L86.523-9.757a10.06,10.06,0,0,0,.621,1.65,1.236,1.236,0,0,0,.576.617,2.975,2.975,0,0,0,.972.118v.441H83.109v-.441a1.991,1.991,0,0,0,1.07-.219.858.858,0,0,0,.319-.767,5.375,5.375,0,0,0-.229-1.153l-.917-2.968Zm3.815-.978-1.829-6.2h-.045l-1.691,6.2Z" transform="translate(-31.582 29.837)" fill="#fff"/>
|
||||||
|
<path id="Trazado_443" data-name="Trazado 443" d="M86.585-24.415h6.5v.43a3.817,3.817,0,0,0-1.347.178,1.044,1.044,0,0,0-.612.673,5.368,5.368,0,0,0-.163,1.472V-9.348a1.8,1.8,0,0,0,.226,1.1,1.281,1.281,0,0,0,.964.267h1.7a7.519,7.519,0,0,0,1.656-.153,2.39,2.39,0,0,0,1.066-.548,3.506,3.506,0,0,0,.791-1.132,14.318,14.318,0,0,0,.695-1.92l.378.122-1.155,4.6h-10.7v-.441A4.78,4.78,0,0,0,87.72-7.56l.646-.357.274-.667A8.627,8.627,0,0,0,88.7-9.744V-21.662a4.422,4.422,0,0,0-.174-1.468,1.069,1.069,0,0,0-.611-.677,3.772,3.772,0,0,0-1.333-.178Z" transform="translate(-28.524 29.917)" fill="#fff"/>
|
||||||
|
<path id="Trazado_444" data-name="Trazado 444" d="M95.885-24.415h5.95v.43a3.057,3.057,0,0,0-1.149.184,1.074,1.074,0,0,0-.536.67A4.779,4.779,0,0,0,100-21.694v9.783a4.507,4.507,0,0,0,1.058,3.337,3.52,3.52,0,0,0,2.6,1.045,3.662,3.662,0,0,0,2.938-1.291,5.323,5.323,0,0,0,1.111-3.572v-9.3a5.038,5.038,0,0,0-.156-1.44.978.978,0,0,0-.559-.673,3.054,3.054,0,0,0-1.187-.178v-.43h4.593v.43a2.763,2.763,0,0,0-1.09.184,1.12,1.12,0,0,0-.542.691,4.819,4.819,0,0,0-.163,1.416v9.4a6.6,6.6,0,0,1-.667,3.121,4.252,4.252,0,0,1-1.857,1.912,5.89,5.89,0,0,1-2.822.639A5.982,5.982,0,0,1,99.4-7.932c-1.093-.878-1.649-2.392-1.649-4.537v-9.225a4.707,4.707,0,0,0-.156-1.43,1.022,1.022,0,0,0-.541-.683,2.9,2.9,0,0,0-1.167-.178Z" transform="translate(-25.992 29.917)" fill="#fff"/>
|
||||||
|
<path id="Trazado_445" data-name="Trazado 445" d="M119.411-24.71l.271,5.739h-.413a7.162,7.162,0,0,0-.653-2.579,4.105,4.105,0,0,0-1.43-1.715,3.5,3.5,0,0,0-2.02-.612,3.484,3.484,0,0,0-3.287,2.226,15.243,15.243,0,0,0-1.094,6.565,14.286,14.286,0,0,0,.552,4.34,5.052,5.052,0,0,0,1.614,2.51,4.083,4.083,0,0,0,2.51.788,3.913,3.913,0,0,0,1.7-.347,4.145,4.145,0,0,0,1.364-1.125,9.035,9.035,0,0,0,1.156-1.916l.389.209c-1.136,2.725-2.885,4.081-5.284,4.081a5.867,5.867,0,0,1-3.253-1,7.008,7.008,0,0,1-2.5-2.964,10.73,10.73,0,0,1-.948-4.639,13.159,13.159,0,0,1,.9-4.888,8.294,8.294,0,0,1,2.464-3.44,5.529,5.529,0,0,1,3.506-1.237,4.522,4.522,0,0,1,1.466.209,9.157,9.157,0,0,1,1.209.532,2.1,2.1,0,0,0,.818.333l.347-.247a2.7,2.7,0,0,0,.2-.827Z" transform="translate(-22.669 29.837)" fill="#fff"/>
|
||||||
|
<path id="Trazado_446" data-name="Trazado 446" d="M118.1-23.238h6.259v.43a3.361,3.361,0,0,0-1.249.178,1.087,1.087,0,0,0-.587.677,4.526,4.526,0,0,0-.173,1.436v11.93a4.583,4.583,0,0,0,.183,1.527,1,1,0,0,0,.594.642,4.008,4.008,0,0,0,1.232.142v.441H118.1v-.441a3.137,3.137,0,0,0,1.275-.195,1.067,1.067,0,0,0,.576-.669,4.956,4.956,0,0,0,.159-1.448v-11.93a5.034,5.034,0,0,0-.163-1.471.967.967,0,0,0-.58-.65,3.506,3.506,0,0,0-1.267-.17Zm2.4-1.2.885-4.3h2.312l-2.815,4.3Z" transform="translate(-19.943 28.74)" fill="#fff"/>
|
||||||
|
<path id="Trazado_447" data-name="Trazado 447" d="M127.542-12.479l-.936,3.354-.114.767a.836.836,0,0,0,.356.751,2.3,2.3,0,0,0,1.223.235v.441h-4.42v-.441a1.653,1.653,0,0,0,1.3-.486,5.057,5.057,0,0,0,.819-1.9l4.189-14.953h.379l4.486,14.953a9.457,9.457,0,0,0,.617,1.65,1.236,1.236,0,0,0,.58.617,2.964,2.964,0,0,0,.968.118v.441h-5.571v-.441a2.016,2.016,0,0,0,1.062-.219.875.875,0,0,0,.316-.767,5.112,5.112,0,0,0-.239-1.153l-.9-2.968Zm3.819-.978-1.833-6.2h-.042l-1.677,6.2Z" transform="translate(-18.434 29.837)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 8.4 KiB |