Compare commits

..

3 Commits

Author SHA1 Message Date
eaf6fe5f0f - Poner un fondo a la opción en la que estoy cuando entro en trabajadores
- Imitar la forma de mostrar los años  y demás opciones del programa de gestión por ejemplo el "+" cuando tenga contenido + Año Nómina: 2025,
- Dentro de cada Año Nómina ordenar por mes decreciente
- Mostrar el contenido de la nómina sin necesidad de entrar en ella, estilo el programa de gestíon, ordenando los conceptos por el campo orden de Conceptos Generales y poner en rojo los conceptos que son deducciones.
2026-09-18 13:06:47 +02:00
8fd141abaa - Edición de todas las tablas y campos dentro de infoPers
- Controladores varios para poder hacer estas ediciones
2026-09-17 09:16:33 +02:00
280680f11c Cambios GestionPersonalWeb 2026-09-17 09:16:33 +02:00
49 changed files with 2307 additions and 448 deletions

2
.serena/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/cache
/project.local.yml

169
.serena/project.yml Normal file
View File

@@ -0,0 +1,169 @@
# the name by which the project can be referenced within Serena/when chatting with the LLM.
project_name: "ANTIFRAUDE.NET"
# list of language servers to start when using the LSP backend; choose from:
# ada al angular ansible bash
# bsl clojure cpp cpp_ccls crystal
# csharp csharp_omnisharp cue dart deno
# elixir elm erlang fortran fsharp
# gdscript gleam go groovy haskell
# haxe hlsl html java json
# julia kotlin latex lean4 lua
# luau markdown matlab msl nextflow
# nix ocaml pascal perl php
# php_phpactor php_phpantom powershell python python_basedpyright
# python_jedi python_pyrefly python_ty qml r
# rego ruby ruby_solargraph rust scala
# scss solidity svelte swift systemverilog
# terraform toml typescript typescript_vts vue
# wolfram yaml zig
# (This list may be outdated; generated with scripts/print_language_list.py;
# For the current list, see values of the LanguageServerId enum here:
# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py)
# For some languages, there are several alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.)
# Note:
# - For C, use cpp
# - For JavaScript, use typescript
# - For Angular projects, use angular (subsumes typescript+html; requires `npm install` in the project root)
# - For Svelte projects, use svelte (subsumes typescript/javascript for .svelte projects; requires npm)
# - For Deno projects, use deno (serves the same .ts/.js files as typescript; requires the deno CLI on PATH)
# - For SCSS / Sass / plain CSS, use scss (some-sass-language-server handles all three)
# - For Free Pascal/Lazarus, use pascal
# Special requirements:
# Some language servers require additional setup/installations.
# See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers
# When using multiple language servers, the first language server that supports a given file will be used for that file.
# The first language server is the default language and the respective language server will be used as a fallback.
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
language_servers:
- csharp
# the encoding used by text files in the project
# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
encoding: "utf-8"
# optional shell command to run before the language backend (LSP or JetBrains) is initialised.
# the command runs in the project root directory and is only executed if the project is trusted
# (see trusted_project_path_patterns in the global configuration).
# serena waits for the command to exit: a non-zero exit code is logged as an error but does not
# abort activation. a per-project timeout (activation_command_timeout, default 180s) is the safety
# backstop for non-terminating commands; on expiry the process is killed and activation continues.
# example: activation_command: "npx nx run-many -t build"
activation_command:
# maximum time in seconds to wait for activation_command to complete before killing it (default 180s).
# must be a positive number.
activation_command_timeout: 180.0
# line ending convention to use when writing source files.
# Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
# This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
line_ending:
# The language backend to use for this project.
# If not set, the global setting from serena_config.yml is used.
# Valid values: LSP, JetBrains
# Note: the backend is fixed at startup. If a project with a different backend
# is activated post-init, an error will be returned.
language_backend:
# whether to use project's .gitignore files to ignore files
ignore_all_files_in_gitignore: true
# advanced configuration option allowing to configure language server-specific options.
# Maps the language key to the options.
# The settings are considered only if the project is trusted (see global configuration to define trusted projects).
# See https://oraios.github.io/serena/02-usage/050_configuration.html#language-server-specific-settings
ls_specific_settings: {}
# list of workspace folder paths (LSP backend only).
# These folders will be used to build up Serena's symbol index.
# Paths must be within the project root and should thus be relative to the project root.
# Furthermore, the paths should not be filtered by ignore settings.
# Default setting: The entire project root folder (".") is considered.
# In (large) monorepos, this can be used to index only subfolders of the project root, e.g.
# ls_workspace_folders:
# - "./subproject1"
# - "./subproject2"
ls_workspace_folders:
- "."
# list of additional workspace folder paths for cross-package reference support.
# Paths can be absolute or relative to the project root.
# Each folder is registered as an LSP workspace folder, enabling language servers to discover
# symbols and references across package boundaries, but these folders are not indexed by Serena,
# i.e. the respective symbols will not be found using Serena's symbol search tools.
# Example:
# additional_workspace_folders:
# - ../sibling-package
# - ../shared-lib
ls_additional_workspace_folders: []
# list of additional paths to ignore in this project.
# Same syntax as gitignore, so you can use * and **.
# Important: quote patterns that start with `*`, otherwise YAML treats them as aliases.
# Example:
# ignored_paths:
# - "examples/**"
# - ".worktrees/**"
# - "**/bin/**"
# - "**/obj/**"
# Note: global ignored_paths from serena_config.yml are also applied additively.
ignored_paths: []
# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
# Added on 2025-04-18
read_only: false
# list of tool names to exclude.
# This extends the existing exclusions (e.g. from the global configuration)
# Find the list of tools here: https://oraios.github.io/serena/01-about/035_tools.html
excluded_tools: []
# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default).
# This extends the existing inclusions (e.g. from the global configuration).
# Find the list of tools here: https://oraios.github.io/serena/01-about/035_tools.html
included_optional_tools: []
# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools.
# This cannot be combined with non-empty excluded_tools or included_optional_tools.
# Find the list of tools here: https://oraios.github.io/serena/01-about/035_tools.html
fixed_tools: []
# list of mode names that are to be activated by default, overriding the setting in the global configuration.
# The full set of modes to be activated is base_modes (from global config) + default_modes + added_modes.
# If the setting is undefined/empty, the default_modes from the global configuration (serena_config.yml) apply.
# Otherwise, this overrides the setting from the global configuration (serena_config.yml).
# Therefore, you can set this to [] if you do not want the default modes defined in the global config to apply
# for this project.
# This setting can, in turn, be overridden by CLI parameters (--mode).
# See https://oraios.github.io/serena/02-usage/050_configuration.html#modes
default_modes:
# list of mode names to be activated additionally for this project, e.g. ["query-projects"]
# The full set of modes to be activated is base_modes (from global config) + default_modes + added_modes.
# See https://oraios.github.io/serena/02-usage/050_configuration.html#modes
added_modes:
# initial prompt for the project. It will always be given to the LLM upon activating the project
# (contrary to the memories, which are loaded on demand).
initial_prompt: ""
# time budget (seconds) per tool call for the retrieval of additional symbol information
# such as docstrings or parameter information.
# This overrides the corresponding setting in the global configuration; see the documentation there.
# If null or missing, use the setting from the global configuration.
symbol_info_budget:
# list of regex patterns which, when matched, mark a memory entry as readonly.
# Extends the list from the global configuration, merging the two lists.
read_only_memory_patterns: []
# list of regex patterns for memories to completely ignore.
# Matching memories will not appear in list_memories or activate_project output
# and cannot be accessed via read_memory or write_memory.
# To access ignored memory files, use the read_file tool on the raw file path.
# Extends the list from the global configuration, merging the two lists.
# Example: ["_archive/.*", "_episodes/.*"]
ignored_memory_patterns: []

View File

@@ -56,6 +56,12 @@
</FooterTemplate>
</Modal>
@if (cargando)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
<div class="datos-personales-container mt-3">
<div>
<div>
@@ -309,45 +315,45 @@
</div>
</div>
<div class="row">
<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))">
<Tabs @ref=tabsDtsPer NavStyle="NavStyle.VerticalUnderline" Class="col-md-2 navInfoPers" 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>
<NominaGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></NominaGrid>
</Content>
</Tab>
<Tab Title="Incidencias" Name="tabIncidencias">
<Content>
<IncidenciaGrid Persona="persona"></IncidenciaGrid>
<IncidenciaGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></IncidenciaGrid>
</Content>
</Tab>
<Tab Title="Enfermedades" Name="tabEnfermedades">
<Content>
<EnfermedadesGrid Persona="persona"></EnfermedadesGrid>
<EnfermedadesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></EnfermedadesGrid>
</Content>
</Tab>
<Tab Title="Maternidades/Riesgo Embarazo" Name="tabMaternidades">
<Content>
<MaternidadesGrid Persona="persona"></MaternidadesGrid>
<MaternidadesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></MaternidadesGrid>
</Content>
</Tab>
<Tab Title="Diferencia Pago Delegado" Name="tabDiferencia">
<Content>
<DiferenciaGrid Persona="persona"></DiferenciaGrid>
<DiferenciaGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></DiferenciaGrid>
</Content>
</Tab>
<Tab Title="Permisos sin Retribución" Name="tabPermSinRet">
<Content>
<PermisosSinRetriGrid Persona="persona"></PermisosSinRetriGrid>
<PermisosSinRetriGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></PermisosSinRetriGrid>
</Content>
</Tab>
<Tab Title="Huelgas" Name="tabHuelgas">
<Content>
<HuelgasGrid Persona="persona"></HuelgasGrid>
<HuelgasGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></HuelgasGrid>
</Content>
</Tab>
<Tab Title="Puestos Trabajo" Name="tabPuestos">
<Content>
<PuestosTrabajoGrid Persona="persona"></PuestosTrabajoGrid>
<PuestosTrabajoGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></PuestosTrabajoGrid>
</Content>
</Tab>
<Tab Title="Otros Datos" Name="tabOtrosDatos">
@@ -357,57 +363,57 @@
</Tab>
<Tab Title="Reducciones Jornada" Name="tabRedJorn">
<Content>
<ReduccionesJornadaGrid Persona="persona"></ReduccionesJornadaGrid>
<ReduccionesJornadaGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></ReduccionesJornadaGrid>
</Content>
</Tab>
<Tab Title="Trabajadores a Tiempo Parcial" Name="tabTrabTiempoPar">
<Content>
<TrabajadoresTiempoParcialGrid Persona="persona"></TrabajadoresTiempoParcialGrid>
<TrabajadoresTiempoParcialGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></TrabajadoresTiempoParcialGrid>
</Content>
</Tab>
<Tab Title="Sexenios y Quintenios" Name="tabSexeQuinte">
<Content>
<SexeniosQuinqueniosGrid Persona="persona"></SexeniosQuinqueniosGrid>
<SexeniosQuinqueniosGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></SexeniosQuinqueniosGrid>
</Content>
</Tab>
<Tab Title="Trienios y C. Carrera" Name="tabTriCar">
<Content>
<TrieniosCarreraGrid Persona="persona"></TrieniosCarreraGrid>
<TrieniosCarreraGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></TrieniosCarreraGrid>
</Content>
</Tab>
<Tab Title="Diferencia de Trienios" Name="tabDifTri">
<Content>
<DiferenciaTrieniosGrid Persona="persona"></DiferenciaTrieniosGrid>
<DiferenciaTrieniosGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></DiferenciaTrieniosGrid>
</Content>
</Tab>
<Tab Title="Préstamos" Name="tabPrestamos">
<Content>
<PrestamosGrid Persona="persona"></PrestamosGrid>
<PrestamosGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></PrestamosGrid>
</Content>
</Tab>
<Tab Title="Retenciones Judiciales" Name="tabRetJudiciales">
<Content>
<RetencionesJudicialesGrid Persona="persona"></RetencionesJudicialesGrid>
<RetencionesJudicialesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></RetencionesJudicialesGrid>
</Content>
</Tab>
<Tab Title="Productividad" Name="tabProductividad">
<Content>
<ProductividadGrid Persona="persona"></ProductividadGrid>
<ProductividadGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></ProductividadGrid>
</Content>
</Tab>
<Tab Title="Hijos" Name="tabHijos">
<Content>
<HijosGrid Persona="persona"></HijosGrid>
<HijosGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></HijosGrid>
</Content>
</Tab>
<Tab Title="Ascendientes" Name="tabAscendientes">
<Content>
<AscendientesGrid Persona="persona"></AscendientesGrid>
<AscendientesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></AscendientesGrid>
</Content>
</Tab>
<Tab Title="Otras Retribuciones" Name="tabOtrasRet">
<Content>
<OtrasRetribucionesGrid Persona="persona"></OtrasRetribucionesGrid>
<OtrasRetribucionesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></OtrasRetribucionesGrid>
</Content>
</Tab>
<Tab Title="IRPF (Situación actual)" Name="tabIRPFAct">
@@ -417,17 +423,17 @@
</Tab>
<Tab Title="IRPF (Historial Regularizaciones)" Name="tabIRPFhist">
<Content>
<IRPFHistGrid Persona="persona"></IRPFHistGrid>
<IRPFHistGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></IRPFHistGrid>
</Content>
</Tab>
<Tab Title="Expedientes" Name="tabExpedientes">
<Content>
<ExpedientesGrid Persona="persona"></ExpedientesGrid>
<ExpedientesGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></ExpedientesGrid>
</Content>
</Tab>
<Tab Title="Permisos" Name="tabPermisos">
<Content>
<PermisosGrid Persona="persona"></PermisosGrid>
<PermisosGrid Persona="persona" OnPersonaActualizada="ActualizarPersonaDesdeHijo"></PermisosGrid>
</Content>
</Tab>
</Tabs>
@@ -440,6 +446,7 @@
[Parameter]
public string? cl { get; set; } = "";
public bool mostrar { get; set; } = true;
private bool cargando = true;
public bool mostrarBtn { get; set; } = false;
List<ENUMERACIONES> ListaSexos = new List<ENUMERACIONES>();
List<ENUMERACIONES> ListaTipos = new List<ENUMERACIONES>();
@@ -771,6 +778,30 @@
}
}
private async Task ActualizarPersonaDesdeHijo()
{
try
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
var nifDesencriptado = tsUtilidades.crypt.FEncS(cl,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
-875421649);
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
if (response.IsSuccessStatusCode)
{
var contenido = await response.Content.ReadAsStringAsync();
persona = JsonConvert.DeserializeObject<PERSONAS>(contenido)
?? throw new InvalidOperationException("No se pudo actualizar la persona.");
await InvokeAsync(StateHasChanged);
}
}
catch (Exception ex)
{
Console.WriteLine($"Error al actualizar la persona después de guardar: {ex.Message}");
}
}
private async Task CerrarConfirmacion()
{
await popupConfirmacion.HideAsync();
@@ -867,6 +898,7 @@
finally
{
mostrar = false;
cargando = false;
}
}
protected void volver() { Navigation.NavigateTo("/ListTrabajadores", forceLoad: true); }

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nuevo Ascendiente" @onclick="@(() => abrirPopupModificacion(new ASCENDIENTES(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="ASCENDIENTES"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="ASCENDIENTES" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopupModificacion(context, false))">Editar</button></GridColumn>
<GridColumn TItem="ASCENDIENTES" HeaderText="Nombre">
@context.NOMBRE
</GridColumn>
@@ -54,6 +56,13 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false"><BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Nombre</label><input class="form-control" @bind-value="ItemEnEdicion.NOMBRE" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Nacimiento</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHANACIMIENTO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Convivencia</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.CONVIVENCIA" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Discapacidad (ID)</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.IDDISCAPACIDAD" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Movilidad Reducida</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.MOVILIDADREDUCIDA" /></div>
</div></BodyTemplate><FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(ItemEnEdicion.IDASCENDIENTES == 0))">@(ItemEnEdicion.IDASCENDIENTES == 0 ? "Crear" : "Modificar")</Button></FooterTemplate></Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -61,16 +70,25 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<ASCENDIENTES> itmList = new List<ASCENDIENTES>();
private Modal popupGestionDatos = default!;
private ASCENDIENTES ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet()
{
itmList = Persona.ASCENDIENTES?.ToList() ?? new List<ASCENDIENTES>();
}
private async Task abrirPopupModificacion(ASCENDIENTES objeto, bool esNuevo) { ItemEnEdicion = objeto; if (esNuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popupGestionDatos.ShowAsync(); }
private async Task cerrarPopupModificacion() => await popupGestionDatos.HideAsync();
private async Task GestionarDatos(bool esNuevo) { if (esNuevo) { ItemEnEdicion.IDASCENDIENTES = 0; ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/ASCENDIENTES/", ItemEnEdicion); } else await Utilidades.ActualizarObjeto(cliente, "/api/ASCENDIENTES/" + ItemEnEdicion.IDASCENDIENTES, ItemEnEdicion); await cerrarPopupModificacion(); await OnPersonaActualizada.InvokeAsync(); }
}

View File

@@ -0,0 +1,301 @@
@page "/ConceptosPuestoTrabajo"
@using System.Net.Http.Headers
@using System.Linq.Expressions
@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 UserState UserState
@if (Puesto != null){
<div class="row" style="width:calc(100% - 100px); margin-inline:auto; margin-top:50px">
<div class="col-md-3">
<label for="txtLuNac" class="fw-bold">Fecha Inicio: </label>
<input class="form-control" type="date" id="txtLuNac" @bind-value="@Puesto.FECHAINICIO" />
</div>
<div class="col-md-3">
<label for="txtLuNac" class="fw-bold">Fecha Fin: </label>
<input class="form-control" type="date" id="txtLuNac" @bind-value="@Puesto.FECHAFIN" />
</div>
<div class="col-md-6">
<label for="txtLuNac" class="fw-bold">Descripcíón: </label>
<input list="listDes" id="selCon" @bind-value="@itmDescripPuesto" type="text" style="width:100%" class="form-control" placeholder="Descripción" />
<datalist id="listDes">
@foreach (TIPOSPUESTOSTRABAJO con in lPuestos)
{
<option data-value="@con.IDTIPOPUESTO">@con.DESCRIPCION</option>
}
</datalist>
@* <input class="form-control" id="txtLuNac" @bind-value="@Puesto.IDTIPOPUESTOTRABAJONavigation.DESCRIPCION" /> *@
</div>
<div class="col-md-2">
<label for="txtLuNac" class="fw-bold">Grupo: </label>
<input list="listGrupo" id="selCon" @bind-value="@itmGrupPuesto" type="text" style="width:100%" class="form-control" placeholder="Grupo" />
<datalist id="listGrupo">
@foreach (ENUMERACIONES con in lGrupo)
{
<option data-value="@con.IDENUMERACION">@con.DESCRIPCION</option>
}
</datalist>
</div>
<div class="col-md-3">
<label for="txtLuNac" class="fw-bold">Nivel: </label>
<input class="form-control" type="text" id="txtLuNac" @bind-value="@Puesto.NIVEL" />
</div>
<div class="col-md-3">
<label for="txtLuNac" class="fw-bold">Epigrafe: </label>
<input class="form-control" type="text" id="txtLuNac" @bind-value="@Puesto.EPIGRAFE" />
</div>
<div class="col-md-2">
<label for="txtLuNac" class="fw-bold">Grupo tarifa: </label>
<input class="form-control" type="text" id="txtLuNac" @bind-value="@Puesto.GRUPOTARIFA" />
</div>
<div class="col-md-2 d-flex" style="gap:15px">
<label for="txtLuNac" class="fw-bold" style="line-height:5">Liquida paga: </label>
<input class="" type="checkbox" checked="@chbLiquida" id="chbLiquida" />
</div>
</div>
<div>
@* <input type="button" value="" @onclick="@(() => abrirPopupModificacion(new ENFERMEDADES(), true))" class="mb-2 btnOAAFBlack" /> *@
<Grid TItem="CONCEPTOSPUESTOSDETRABAJO"
Class="table tablaRegPers"
Data="@lConceptosPuestos"
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="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Editar" PropertyName="NOMBRE" FilterButtonCSSClass="hidden">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Nombre" PropertyName="NOMBRE" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NOMBRE">
@context.NOMBRE
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Descripción" PropertyName="DESCRIPCION" SortKeySelector="item => item.DESCRIPCION">
@context.DESCRIPCION
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Importe" PropertyName="IMPORTE" SortKeySelector="item => item.IMPORTE">
@context.IMPORTE
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Concep. Apl. Presupuest." PropertyName="CONCEPTOAPLPRES" SortKeySelector="item => item.CONCEPTOAPLPRES">
@context.CONCEPTOAPLPRES
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Apl. Presupuestaria" PropertyName="APLICACIONPRESUPUESTARIA" SortKeySelector="item => item.APLICACIONPRESUPUESTARIA">
@context.APLICACIONPRESUPUESTARIA
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Retribuciones" PropertyName="RETRIBUCIONES" SortKeySelector="item => item.RETRIBUCIONES">
@if (context.RETRIBUCIONES == true)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Deduccion" PropertyName="DEDUCCIONES" FilterButtonCSSClass="hidden" SortKeySelector="item => item.DEDUCCIONES">
@if (context.DEDUCCIONES == true)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Cotiza S.S." PropertyName="COTIZASEGURIDADSOCIAL" FilterButtonCSSClass="hidden" SortKeySelector="item => item.COTIZASEGURIDADSOCIAL">
@if (context.COTIZASEGURIDADSOCIAL == true)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Cotiza IRPF" PropertyName="COTIZAIRPF" FilterButtonCSSClass="hidden" SortKeySelector="item => item.COTIZAIRPF">
@if (context.COTIZAIRPF == true)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
<GridColumn TItem="CONCEPTOSPUESTOSDETRABAJO" HeaderText="Extra" PropertyName="EXTRA" FilterButtonCSSClass="hidden" SortKeySelector="item => item.EXTRA">
@if (context.EXTRA == true)
{
<i class="fa-regular fa-square-check"></i>
}
</GridColumn>
</GridColumns>
</Grid>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Nombre</label>
<input class="form-control" type="text" @bind-value="ItemEnEdicion.NOMBRE" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Descripción</label>
<input class="form-control" type="text" @bind-value="ItemEnEdicion.DESCRIPCION" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Importe</label>
<input class="form-control" type="number" @bind-value="@ItemEnEdicion.IMPORTE" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Concep. Apl. Presupuest.</label>
<input class="form-control" type="number" @bind-value="@ItemEnEdicion.CONCEPTOAPLPRES" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Apl. Presupuestaria</label>
<input class="form-control" type="number" @bind-value="@ItemEnEdicion.APLICACIONPRESUPUESTARIA" />
</div>
<div class="col-md-12" style="display:flex; justify-content:space-between">
<label for="txtEDesc" class="fw-bold">Retribuciones</label>
<input class="" type="checkbox" id="chbRetribuciones" checked="@ItemEnEdicion.RETRIBUCIONES" />
<label for="txtEDesc" class="fw-bold">Deducción</label>
<input class="" type="checkbox" id="chbDeduccion" checked="@ItemEnEdicion.DEDUCCIONES" />
</div>
<div class="col-md-12" style="display:flex; justify-content:space-between">
<label for="txtEDesc" class="fw-bold">Cotiza S.S.</label>
<input class="" type="checkbox" id="chbCotizaSS" checked="@ItemEnEdicion.COTIZASEGURIDADSOCIAL" />
<label for="txtEDesc" class="fw-bold">Cotiza IRPF</label>
<input class="" type="checkbox" id="chbCotizaIRPF" checked="@ItemEnEdicion.COTIZAIRPF" />
<label for="txtEDesc" class="fw-bold">Extra</label>
<input class="" type="checkbox" id="chbExtra" checked="@ItemEnEdicion.EXTRA" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
@if (ItemEnEdicion.IDCONCEPTOSPUESTOSDETRABAJO != 0)
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(false))">Modificar</Button>
}
else
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
}
</FooterTemplate>
</Modal>
}
@code {
[Parameter]
public string? cl { get; set; } = "";
private Modal popupGestionDatos = default;
private CONCEPTOSPUESTOSDETRABAJO ItemEnEdicion { get; set; } = new CONCEPTOSPUESTOSDETRABAJO();
private PUESTOSTRABAJO Puesto { get; set; } = new PUESTOSTRABAJO();
private List<TIPOSPUESTOSTRABAJO> lPuestos = new List<TIPOSPUESTOSTRABAJO>();
private List<ENUMERACIONES> lGrupo = new List<ENUMERACIONES>();
private List<CONCEPTOSPUESTOSDETRABAJO> lConceptosPuestos = new List<CONCEPTOSPUESTOSDETRABAJO>();
private string itmDescripPuesto { get; set; }
private string itmGrupPuesto { get; set; }
private bool chbRetribuciones { get; set; }
private bool chbDeduccion { get; set; }
private bool chbCotizaSS { get; set; }
private bool chbCotizaIRPF { get; set; }
private bool chbExtra { get; set; }
private bool chbLiquida { get; set; }
private HttpClient cliente = new HttpClient();
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
private async Task abrirPopupModificacion(CONCEPTOSPUESTOSDETRABAJO objeto, bool esNuevo)
{
ItemEnEdicion = objeto;
chbRetribuciones = ItemEnEdicion.RETRIBUCIONES;
chbDeduccion= ItemEnEdicion.DEDUCCIONES;
chbCotizaSS= ItemEnEdicion.COTIZASEGURIDADSOCIAL;
chbCotizaIRPF= ItemEnEdicion.COTIZAIRPF;
chbExtra= ItemEnEdicion.EXTRA;
await popupGestionDatos.ShowAsync();
}
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
}
private async Task CargarListas()
{
try
{
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
{
cl = clValue;
}
var idPuesto = Utilidades.Desencriptar(cl);
Puesto = await Utilidades.ObtenerObjeto<PUESTOSTRABAJO>(cliente, "/api/PUESTOSTRABAJO/" + idPuesto);
itmDescripPuesto = Puesto.IDTIPOPUESTOTRABAJONavigation.DESCRIPCION;
lPuestos = await Utilidades.ObtenerObjeto<List<TIPOSPUESTOSTRABAJO>>(cliente, "/api/TIPOSPUESTOSTRABAJO/");
foreach(CONCEPTOSPUESTOSDETRABAJO pues in Puesto.CONCEPTOSPUESTOSDETRABAJO)
{
lConceptosPuestos.Add(pues);
}
chbLiquida = Puesto.LIQUIDAPAGA;
StateHasChanged();
}
catch (Exception e)
{
Console.WriteLine($"Error al obtener los datos: {e.Message}");
}
}
private async Task GestionarDatos(bool tipo)
{
var inci = ItemEnEdicion;
if (tipo == true)
{
inci.IDCONCEPTOSPUESTOSDETRABAJO = 0;
}
inci.IDPUESTOSDETRABAJO = Puesto.IDPUESTOSTRABAJO;
string chbRetri = "chbRetribuciones";
inci.RETRIBUCIONES = await JS.InvokeAsync<bool>("obtenerCheck", chbRetri);
string chbDeduc = "chbDeduccion";
inci.DEDUCCIONES = await JS.InvokeAsync<bool>("obtenerCheck", chbDeduc);
string chbCotizaSS = "chbCotizaSS";
inci.COTIZASEGURIDADSOCIAL = await JS.InvokeAsync<bool>("obtenerCheck", chbCotizaSS);
string chbCotizaIRPF = "chbCotizaIRPF";
inci.COTIZAIRPF = await JS.InvokeAsync<bool>("obtenerCheck", chbCotizaIRPF);
string chbExtra = "chbExtra";
inci.EXTRA = await JS.InvokeAsync<bool>("obtenerCheck", chbExtra);
if (inci.IDCONCEPTOSPUESTOSDETRABAJO != 0)
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/CONCEPTOSPUESTOSDETRABAJO/" + inci.IDCONCEPTOSPUESTOSDETRABAJO, inci);
}
else
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/CONCEPTOSPUESTOSDETRABAJO/", inci);
}
await cerrarPopupModificacion();
await CargarListas();
}
}
<script>
function obtenerCheck(id){
return $("#"+id)[0].checked
}
</script>

View File

@@ -101,6 +101,7 @@
private DIFERENCIAPAGODELEGADO ItemEnEdicion { get; set; } = new DIFERENCIAPAGODELEGADO();
// private List<int?> meses = new List<int?>();
private List<DIFERENCIAPAGODELEGADO> itmList = new List<DIFERENCIAPAGODELEGADO>();
protected override void OnParametersSet() => itmList = Persona.DIFERENCIAPAGODELEGADO?.ToList() ?? new();
protected override async Task OnInitializedAsync()
@@ -115,7 +116,6 @@
try
{
var listnom = Persona.DIFERENCIAPAGODELEGADO;
foreach (DIFERENCIAPAGODELEGADO i in listnom) { itmList.Add(i); }
}
catch (Exception e)
{
@@ -153,6 +153,7 @@
var resultContent = await response1.Content.ReadAsStringAsync();
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}

View File

@@ -15,6 +15,8 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Diferencia de Trienios" @onclick="@(() => abrirPopupModificacion(new DIFERENCIATRIENIOS(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="DIFERENCIATRIENIOS"
Class="table tablaRegPers"
@@ -31,6 +33,11 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Editar" FilterButtonCSSClass="hidden">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="DIFERENCIATRIENIOS" HeaderText="Número Trienios">
@context.NUMEROTRIENIOS
</GridColumn>
@@ -51,23 +58,109 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Número Trienios</label>
<input class="form-control" type="number" @bind-value="ItemEnEdicion.NUMEROTRIENIOS" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Descripción</label>
<input class="form-control" type="text" @bind-value="ItemEnEdicion.DESCRIPCION" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Tipo</label>
<input class="form-control" type="text" @bind-value="@ItemEnEdicion.TIPO" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Fecha Alta</label>
<input class="form-control" type="date" @bind-value="@ItemEnEdicion.FECHAALTA" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">Fecha Baja</label>
<input class="form-control" type="date" @bind-value="@ItemEnEdicion.FECHABAJA" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
@if (ItemEnEdicion.IDDIFERENCIASTRIENIOS != 0)
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(false))">Modificar</Button>
}
else
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
}
</FooterTemplate>
</Modal>
@code {
private Modal popupGestionDatos = default;
private DIFERENCIATRIENIOS ItemEnEdicion { get; set; } = new DIFERENCIATRIENIOS();
[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 void OnParametersSet() => itmList = Persona.DIFERENCIATRIENIOS?.ToList() ?? new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
}
private async Task CargarListas()
{
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}");
}
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
private async Task abrirPopupModificacion(DIFERENCIATRIENIOS objeto, bool esNuevo)
{
ItemEnEdicion = objeto;
await popupGestionDatos.ShowAsync();
}
private async Task GestionarDatos(bool tipo)
{
var inci = ItemEnEdicion;
if (tipo == true)
{
inci.IDDIFERENCIASTRIENIOS= 0;
inci.IDPERSONA = Persona.IDPERSONA;
}
if (inci.IDDIFERENCIASTRIENIOS != 0)
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/DIFERENCIATRIENIOS/" + inci.IDDIFERENCIASTRIENIOS, inci);
}
else
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/DIFERENCIATRIENIOS/", inci);
}
await cerrarPopupModificacion();
await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -132,6 +132,7 @@
public EventCallback OnPersonaActualizada { get; set; }
private string itmTipo { get; set; }
private List<ENFERMEDADES> itmList = new List<ENFERMEDADES>();
protected override void OnParametersSet() => itmList = Persona.ENFERMEDADES?.ToList() ?? new();
private List<ENUMERACIONES> lTipo = new List<ENUMERACIONES>();
private ENFERMEDADES ItemEnEdicion { get; set; } = new ENFERMEDADES();
@@ -223,7 +224,8 @@
var resultContent = await response1.Content.ReadAsStringAsync();
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nuevo Expediente" @onclick="@(() => abrirPopup(new EXPEDIENTESPERSONAS(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="EXPEDIENTESPERSONAS"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="EXPEDIENTESPERSONAS" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopup(context, false))">Editar</button></GridColumn>
<GridColumn TItem="EXPEDIENTESPERSONAS" HeaderText="Fecha Cálculo">
@context.FECHA?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -46,6 +48,11 @@
</Grid>
</div>
</div>
<Modal @ref="popup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false"><BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Cálculo</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHA" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Tipo (ID)</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.TIPO" /></div>
<div class="col-md-12 mb-2"><label class="fw-bold">Descripción</label><textarea class="form-control" @bind="ItemEnEdicion.DESCRIPCION"></textarea></div>
</div></BodyTemplate><FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopup">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="Guardar">@(ItemEnEdicion.IDEXPEDIENTESPERSONAS == 0 ? "Crear" : "Modificar")</Button></FooterTemplate></Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -53,16 +60,22 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<EXPEDIENTESPERSONAS> itmList = new List<EXPEDIENTESPERSONAS>();
private Modal popup = default!;
private EXPEDIENTESPERSONAS ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet() => itmList = Persona.EXPEDIENTESPERSONAS?.ToList() ?? new();
private async Task abrirPopup(EXPEDIENTESPERSONAS item, bool nuevo) { ItemEnEdicion = item; if (nuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popup.ShowAsync(); }
private async Task cerrarPopup() => await popup.HideAsync();
private async Task Guardar() { if (ItemEnEdicion.IDEXPEDIENTESPERSONAS == 0) { ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/EXPEDIENTESPERSONAS/", ItemEnEdicion); } else await Utilidades.ActualizarObjeto(cliente, "/api/EXPEDIENTESPERSONAS/" + ItemEnEdicion.IDEXPEDIENTESPERSONAS, ItemEnEdicion); await cerrarPopup(); await OnPersonaActualizada.InvokeAsync(); }
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nuevo Hijo" @onclick="@(() => abrirPopupModificacion(new HIJOS(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="HIJOS"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="HIJOS" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopupModificacion(context, false))">Editar</button></GridColumn>
<GridColumn TItem="HIJOS" HeaderText="Nombre">
@context.NOMBRE
</GridColumn>
@@ -63,6 +65,15 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false"><BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Nombre</label><input class="form-control" @bind-value="ItemEnEdicion.NOMBRE" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Sexo</label><input class="form-control" @bind-value="ItemEnEdicion.SEXO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Nacimiento</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHANACIMIENTO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Adopción</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAADOPCION" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Discapacidad (ID)</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.IDDISCAPACIDAD" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Entero IRPF</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.ENTEROIRPF" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Movilidad Reducida</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.MOVILIDADREDUCIDA" /></div>
</div></BodyTemplate><FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(ItemEnEdicion.IDHIJO == 0))">@(ItemEnEdicion.IDHIJO == 0 ? "Crear" : "Modificar")</Button></FooterTemplate></Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -70,16 +81,25 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<HIJOS> itmList = new List<HIJOS>();
private Modal popupGestionDatos = default!;
private HIJOS ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet()
{
itmList = Persona.HIJOS?.ToList() ?? new List<HIJOS>();
}
private async Task abrirPopupModificacion(HIJOS objeto, bool esNuevo) { ItemEnEdicion = objeto; if (esNuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popupGestionDatos.ShowAsync(); }
private async Task cerrarPopupModificacion() => await popupGestionDatos.HideAsync();
private async Task GestionarDatos(bool esNuevo) { if (esNuevo) { ItemEnEdicion.IDHIJO = 0; ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/HIJOS/", ItemEnEdicion); } else await Utilidades.ActualizarObjeto(cliente, "/api/HIJOS/" + ItemEnEdicion.IDHIJO, ItemEnEdicion); await cerrarPopupModificacion(); await OnPersonaActualizada.InvokeAsync(); }
}

View File

@@ -32,6 +32,9 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="HUELGAS" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="HUELGAS" HeaderText="Fecha Inicio">
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -137,12 +140,14 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<HUELGAS> itmList = new List<HUELGAS>();
protected override void OnParametersSet() => itmList = Persona.HUELGAS?.ToList() ?? new();
private List<NOMINAS> lNominas = new List<NOMINAS>();
private HUELGAS ItemEnEdicion { get; set; } = new HUELGAS();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
private async Task CargarListas()
@@ -151,7 +156,6 @@
try
{
var listnom = Persona.HUELGAS;
foreach (HUELGAS i in listnom) { itmList.Add(i); }
var lNomi = await Utilidades.ObtenerObjeto<List<NOMINAS>>(cliente, "/api/NOMINAS");
lNominas = lNomi.OrderBy(x => x.FECHAINICIO).ToList();
}

View File

@@ -15,14 +15,15 @@
@inject UserState UserState
<div class="col-md-10" style="margin-inline:auto;">
<div class="mb-2"><button type="button" class="btnOAAFAzul" @onclick="Guardar">Guardar IRPF actual</button></div>
<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>
<label for="txtPorDis" class="fw-bold widthLabel" style="height:auto">% Discapacidad: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null && @Persona.IDSITUACIONACTUALIRPFNavigation.IDDISCAPACIDADNavigation != null){
<input class="form-control" disabled id="txtPorDis" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDDISCAPACIDADNavigation.DESCRIPCION" />
<input class="form-control" type="number" id="txtPorDis" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDDISCAPACIDAD" />
}
else
{
@@ -31,10 +32,10 @@
</div>
@* Necesita Ayuda 3º Persona *@
<div class="col-md-3 d-flex divLabelInp">
<label for="txtAyuda" class="fw-bold widthLabel">Ingreso Administración : </label>
<label for="txtAyuda" class="fw-bold widthLabel" style="height:auto">Ingreso Administración : </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input type="checkbox" class="form-control" disabled id="txtAyuda" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.NECEAYUDATERCPERSOMOVILRED" />
<input type="checkbox" class="form-check" id="txtAyuda" @bind="Persona.IDSITUACIONACTUALIRPFNavigation.NECEAYUDATERCPERSOMOVILRED" />
}
else
{
@@ -48,10 +49,10 @@
<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>
<label for="txtIngrAdmin" class="fw-bold widthLabel" style="height:auto">Situación: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input class="form-control" disabled id="txtIngrAdmin" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONFAMILIARNavigation.DESCRIPCION" />
<input class="form-control" type="number" id="txtIngrAdmin" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONFAMILIAR" />
}
else
{
@@ -60,10 +61,10 @@
</div>
@* Ingreso Administración Estado *@
<div class="col-md-3 d-flex divLabelInp">
<label for="txtIngrAdminEst" class="fw-bold widthLabel">: </label>
<label for="txtIngrAdminEst" class="fw-bold widthLabel" style="height:auto">NIF conyuge: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input type="checkbox" class="form-control" disabled id="txtIngrAdminEst" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.NIFCONYUGE" />
<input class="form-control" id="txtIngrAdminEst" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.NIFCONYUGE" />
}
else { <input type="checkbox" class="form-control" disabled id="txtIngrAdminEst" /> }
@@ -82,10 +83,10 @@
<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>
<label for="txtSLSitu" class="fw-bold widthLabel" style="height:auto">Situación: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input class="form-control" disabled id="txtSLSitu" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONLABORALNavigation.DESCRIPCION" />
<input class="form-control" type="number" id="txtSLSitu" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONLABORAL" />
}
else
{
@@ -93,10 +94,10 @@
}
</div>
<div class="col-md-3 d-flex divLabelInp">
<label for="txtCLCR" class="fw-bold widthLabel">Contrato o Relación: </label>
<label for="txtCLCR" class="fw-bold widthLabel" style="height:auto">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" />
<input class="form-control" type="number" id="txtSLCR" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.IDCONTRATOORELACION" />
}
else
{
@@ -104,10 +105,10 @@
}
</div>
<div class="col-md-3 d-flex divLabelInp">
<label for="txtSLSitu" class="fw-bold widthLabel">Movilidad Geografica: </label>
<label for="txtSLSitu" class="fw-bold widthLabel" style="height:auto">Movilidad Geografica: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input type="checkbox" class="form-control" disabled id="txtSLSitu" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.MOVILIDADGEOGRAFICA" />
<input type="checkbox" class="form-check" id="txtSLSitu" @bind="Persona.IDSITUACIONACTUALIRPFNavigation.MOVILIDADGEOGRAFICA" />
}
else
{
@@ -116,10 +117,10 @@
</div>
<div class="col-md-3 d-flex divLabelInp">
<label for="chbProVL" class="fw-bold widthLabel">Prolongación Vida Laboral: </label>
<label for="chbProVL" class="fw-bold widthLabel" style="height:auto">Prolongación Vida Laboral: </label>
@if (Persona.IDSITUACIONACTUALIRPFNavigation != null)
{
<input type="checkbox" class="form-control" disabled id="chbProVL" @bind-value="@Persona.IDSITUACIONACTUALIRPFNavigation.PROLONGACTLABORAL" />
<input type="checkbox" class="form-check" id="chbProVL" @bind="Persona.IDSITUACIONACTUALIRPFNavigation.PROLONGACTLABORAL" />
}
else
{
@@ -137,4 +138,12 @@
private HttpClient cliente = new HttpClient();
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private async Task Guardar()
{
if (Persona.IDSITUACIONACTUALIRPFNavigation is null)
return;
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await Utilidades.ActualizarObjeto(cliente, "/api/SITUACIONACTUALIRPF/" + Persona.IDSITUACIONACTUALIRPFNavigation.IDSITUACIONACTUALIRPF, Persona.IDSITUACIONACTUALIRPFNavigation);
await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nuevo Histórico IRPF" @onclick="@(() => abrirPopup(new HISTORICOIRPF(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="HISTORICOIRPF"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="HISTORICOIRPF" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopup(context, false))">Editar</button></GridColumn>
<GridColumn TItem="HISTORICOIRPF" HeaderText="Fecha Cálculo">
@context.FECHACALCULO?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -46,6 +48,14 @@
</Grid>
</div>
</div>
<Modal @ref="popup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false"><BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Cálculo</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHACALCULO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Año</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.ANNO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Tipo Retención Calculado</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.TIPODERETENCIONCALCULADO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Tipo Retención a Aplicar</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.TIPODERETENCIONAAPLICAR" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe Anual Retenciones</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTEANUALRETENCIONES" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Conservar Tipo</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.CONSERVATIPO" /></div>
</div></BodyTemplate><FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopup">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="Guardar">@(ItemEnEdicion.IDHISTORICOIRPF == 0 ? "Crear" : "Modificar")</Button></FooterTemplate></Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -53,16 +63,22 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<HISTORICOIRPF> itmList = new List<HISTORICOIRPF>();
private Modal popup = default!;
private HISTORICOIRPF ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet() => itmList = Persona.HISTORICOIRPF?.ToList() ?? new();
private async Task abrirPopup(HISTORICOIRPF item, bool nuevo) { ItemEnEdicion = item; if (nuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popup.ShowAsync(); }
private async Task cerrarPopup() => await popup.HideAsync();
private async Task Guardar() { if (ItemEnEdicion.IDHISTORICOIRPF == 0) { ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/HISTORICOIRPF/", ItemEnEdicion); } else await Utilidades.ActualizarObjeto(cliente, "/api/HISTORICOIRPF/" + ItemEnEdicion.IDHISTORICOIRPF, ItemEnEdicion); await cerrarPopup(); await OnPersonaActualizada.InvokeAsync(); }
}

View File

@@ -60,7 +60,6 @@
PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="INCIDENCIAS" HeaderText="">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
@@ -242,6 +241,7 @@
private List<int?> annos = new List<int?>();
// private List<int?> meses = new List<int?>();
private List<INCIDENCIAS> itmList = new List<INCIDENCIAS>();
protected override void OnParametersSet() => itmList = Persona.INCIDENCIAS?.Where(x => !x.ESDELIQUIDACION).ToList() ?? new();
private List<String> nombMeses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
private List<NOMINAS> lNom = new List<NOMINAS>();
private List<CONCEPTOSGENERALES> lConceptos = new List<CONCEPTOSGENERALES>();
@@ -278,11 +278,11 @@
{
try
{
itmList.Clear();
itmList = Persona.INCIDENCIAS?
.Where(x => !x.ESDELIQUIDACION)
.ToList()
?? new List<INCIDENCIAS>();
annos.Clear();
var listnom = Persona.INCIDENCIAS.Where(x => x.ESDELIQUIDACION == false).ToList();
var nominaIncidenciadelcarajo = listnom.FirstOrDefault(x => x.IDINCIDENCIA == 56543);
foreach (INCIDENCIAS i in listnom){ itmList.Add(i); }
for (var i = 0; i < itmList.Count; i++)
{
int? year = itmList[i].AÑONOMINA;
@@ -354,6 +354,7 @@
var resultContent = await response1.Content.ReadAsStringAsync();
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -128,10 +128,12 @@
private MATERNIDADES ItemEnEdicion { get; set; } = new MATERNIDADES();
// private List<int?> meses = new List<int?>();
private List<MATERNIDADES> itmList = new List<MATERNIDADES>();
protected override void OnParametersSet() => itmList = Persona.MATERNIDADES?.ToList() ?? new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
private async Task CargarListas()
{

View File

@@ -0,0 +1,145 @@
@using BlazorBootstrap
@using bdAntifraude.db
<div class="table-responsive mb-3">
<table class="table table-sm tablaRegPers nomina-resumen-detalle">
<thead>
<tr>
<th>Nómina</th><th>Total devengado</th><th>Total líquido</th><th>Grupo</th><th>Nivel</th>
<th>Días efectivos</th><th>Días enfermo</th><th>Días accidentes</th><th>Días falta</th>
<th>Días permisos sin retribuir</th><th>Días maternidad</th><th>Acumulada</th><th>Protegida</th>
<th>Pluriempleo</th><th>Nº pluriempleo</th><th>Total Seguridad Social</th><th>Prorrata paga extra</th>
<th>Prorrata productividad</th><th>Total deducciones</th><th>Total haberes</th><th>Otras deducciones</th>
<th>SS pago en especie</th><th>Total epígrafe 126</th><th>Total maternidad/paternidad</th>
<th>Total permiso sin retribuir</th><th>Sindicato</th><th>Reducción jornada</th>
<th>Trabajo tiempo parcial</th><th>Mutua</th><th>Días enfermedad al 60</th><th>Base enfermedad al 60</th>
<th>Días enfermedad al 75</th><th>Base accidentes</th><th>Días base pago directo</th><th>Base pago directo</th>
<th>Visible</th><th>Modificable</th><th>Mes nómina</th>
</tr>
</thead>
<tbody>
<tr>
<td>@Nomina.IDNOMINANavigation?.DESCRIPCION</td><td>@Nomina.TOTALDEVENGADO</td><td>@Nomina.TOTALLIQUIDO</td>
<td>@Nomina.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION</td><td>@Nomina.NIVEL</td><td>@Nomina.DIASEFECTIVOS</td>
<td>@Nomina.DIASENFERMOS</td><td>@Nomina.DIASACCIDENTES</td><td>@Nomina.DIASFALTA</td>
<td>@Nomina.DIASPERMISOSSINRETRIBUIR</td><td>@Nomina.DIASMATERNIDAD</td><td>@(Nomina.ACUMULADA == true ? "Sí" : "No")</td>
<td>@(Nomina.PROTEGIDA == true ? "Sí" : "No")</td><td>@Nomina.PLURIEMPLEO</td><td>@Nomina.NUMEROPLURIEMPLEO</td>
<td>@Nomina.TOTALSEGURIDADSOCIAL</td><td>@Nomina.PRORRATAPAGAEXTRA</td><td>@Nomina.PRORRATAPRODUCTIVIDAD</td>
<td>@Nomina.TOTALDEDUCCIONES</td><td>@Nomina.TOTALHABERES</td><td>@Nomina.OTRASDEDUCCIONES</td>
<td>@Nomina.TOTALSEGURIDADSOCIALPAGOENESPECIE</td><td>@Nomina.TOTALEPIGRAFE126</td><td>@Nomina.TOTALMATERNIDADPATERNIDAD</td>
<td>@Nomina.TOTALPERMISOSINRETRIBUIR</td><td>@Nomina.SINDICATO1</td><td>@Nomina.REDUCCIONJORNADA</td>
<td>@Nomina.TRABAJOTIEMPOPARCIAL</td><td>@Nomina.MUTUA</td><td>@Nomina.DIASENFERMEDADAL60</td>
<td>@Nomina.BASEENFERMEDADAL60</td><td>@Nomina.DIASENFERMEDADAL75</td><td>@Nomina.BASEACCIDENTES</td>
<td>@Nomina.DIASBASEPAGODIRECTO</td><td>@Nomina.BASEPAGODIRECTO</td><td>@(Nomina.VISIBLE == true ? "Sí" : "No")</td>
<td>@(Nomina.MODIFICABLE == true ? "Sí" : "No")</td><td>@Nomina.MESNOMINA</td>
</tr>
</tbody>
</table>
</div>
<Tabs style="font-size:12px; gap:0;">
<Tab Title="Conceptos">
<Content>
<Grid TItem="NOMINATRABAJADORLINEA" Class="table tablaDetalle" Data="Nomina.NOMINATRABAJADORLINEA.OrderBy(x => x.IDCONCEPTOGENERALNavigation.ORDEN)"
AllowPaging="false" AllowSorting="true" Responsive="true" EmptyText="No se han encontrado datos"
RowClass="@(x => x.IDCONCEPTOGENERALNavigation.DEDUCCIONES ? "concepto-deduccion" : "")">
<GridColumns>
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Descripción">@context.DESCRIPCIONCONCEPTO</GridColumn>
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Cantidad">@context.CANTIDAD</GridColumn>
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Importe">@context.IMPORTE</GridColumn>
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Retribuciones">@context.TOTALRETRIBUCIONES</GridColumn>
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Deducciones">@context.TOTALDEDUCCIONES</GridColumn>
</GridColumns>
</Grid>
</Content>
</Tab>
<Tab Title="Pagos en especie">
<Content>
<Grid TItem="NOMINATRABAJADORPAGOESPECIE" Class="table tablaDetalle" Data="Nomina.NOMINATRABAJADORPAGOESPECIE" AllowPaging="false" AllowSorting="true" Responsive="true" EmptyText="No se han encontrado datos">
<GridColumns>
<GridColumn TItem="NOMINATRABAJADORPAGOESPECIE" HeaderText="Descripción">@context.DESCRIPCION</GridColumn>
<GridColumn TItem="NOMINATRABAJADORPAGOESPECIE" HeaderText="Importe">@context.IMPORTE</GridColumn>
<GridColumn TItem="NOMINATRABAJADORPAGOESPECIE" HeaderText="Cuota">@context.CUOTA</GridColumn>
<GridColumn TItem="NOMINATRABAJADORPAGOESPECIE" HeaderText="Seguridad Social">@context.SEGURIDADSOCIAL</GridColumn>
</GridColumns>
</Grid>
</Content>
</Tab>
<Tab Title="Incidencias">
<Content>
<Grid TItem="INCIDENCIAS" Class="table tablaDetalle" Data="Nomina.INCIDENCIAS" AllowPaging="false" AllowSorting="true" Responsive="true" EmptyText="No se han encontrado datos">
<GridColumns>
<GridColumn TItem="INCIDENCIAS" HeaderText="Concepto">@context.IDCONCEPTONOMINANavigation?.DESCRIPCION</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>
</GridColumns>
</Grid>
</Content>
</Tab>
<Tab Title="Periodos SILTRA">
<Content>
<div class="table-responsive">
@if (!Nomina.PERIODOSSILTRA.Any())
{
<p class="text-muted">No se han encontrado datos</p>
}
@foreach (var periodo in Nomina.PERIODOSSILTRA.OrderByDescending(x=>x.FECHAINICIO))
{
<details class="mb-2 border rounded">
<summary class="p-2 fw-bold">
<NavLink class="btn btn-link p-0" href="@PeriodoSiltraUrl(periodo)">
@periodo.FECHAINICIO?.ToString("dd/MM/yyyy") - @periodo.FECHAFIN?.ToString("dd/MM/yyyy")
</NavLink>
· @periodo.DIAS días · @periodo.IDTIPOPERIODOTRAMONavigation?.DESCRIPCION
</summary>
<div class="p-2">
<table class="table table-sm tablaDetalle mb-0">
<thead><tr><th>Tipo de tramo</th><th>Importe</th><th>% empresa</th><th>Importe empresa</th><th>% trabajador</th><th>Importe trabajador</th><th>Importe global</th></tr></thead>
<tbody>
@foreach (var tramo in periodo.TRAMOSSILTRA.OrderBy(x=>x.IDTIPOTRAMONavigation.CODIGO))
{
<tr>
<td>
@if (tramo.IDTIPOTRAMONavigation?.MODIFICABLE == false && tramo.IDTIPOTRAMONavigation?.SOLICITADOALUSUARIO == false)
{
<p style="color:red; font-weight:bold">@tramo.IDTIPOTRAMONavigation?.CODIGO - @tramo.IDTIPOTRAMONavigation?.DESCRIPCION</p>
}
@if (tramo.IDTIPOTRAMONavigation?.SOLICITADOALUSUARIO == true && tramo.IDTIPOTRAMONavigation?.MODIFICABLE == true)
{
<p style="color:blue; font-weight:bold">@tramo.IDTIPOTRAMONavigation?.CODIGO - @tramo.IDTIPOTRAMONavigation?.DESCRIPCION</p>
}
@if (tramo.IDTIPOTRAMONavigation?.SOLICITADOALUSUARIO == false && tramo.IDTIPOTRAMONavigation?.MODIFICABLE == true)
{
<p>@tramo.IDTIPOTRAMONavigation?.CODIGO - @tramo.IDTIPOTRAMONavigation?.DESCRIPCION</p>
}
</td>
<td>@tramo.IMPORTE</td><td>@tramo.PORCENTAJEEMPRESA</td><td>@tramo.IMPORTEEMPRESA</td>
<td>@tramo.PORCENTAJETRABAJADOR</td><td>@tramo.IMPORTETRABAJADOR</td><td>@tramo.IMPORTEGLOBAL</td>
</tr>
}
</tbody>
</table>
</div>
</details>
}
</div>
</Content>
</Tab>
</Tabs>
@code {
[Parameter] public NOMINATRABAJADORCABECERA Nomina { get; set; } = new();
private string PeriodoSiltraUrl(PERIODOSSILTRA periodo)
{
const string caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*";
var idPeriodo = tsUtilidades.crypt.FEncS(periodo.IDPERIODOSILTRA.ToString(), caracteres, caracteres, 875421649);
var idPersona = tsUtilidades.crypt.FEncS(Nomina.IDPERSONA.ToString(), caracteres, caracteres, 875421649);
var idNomina = tsUtilidades.crypt.FEncS(Nomina.IDNOMINATRABAJADOR.ToString(), caracteres, caracteres, 875421649);
return $"/PeriodoSiltra?cl={idPeriodo}&idp={idPersona}&idn={idNomina}";
}
}

View File

@@ -1,184 +1,29 @@
@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="tablaTabLateral">
<Accordion>
@for (var y = 0; y <= annos.Count - 1; y++)
@foreach (var anno in annos)
{
var listado = itmList.Where(x => x.IDNOMINANavigation.AÑO == annos[y]).ToList();
titulo = "Año Nómina: "+annos[y].ToString();
<AccordionItem Title="@titulo">
<AccordionItem Title="@($"Año Nómina: {anno}")">
<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 class="nominas-lista">
@foreach (var nomina in itmList.Where(x => x.IDNOMINANavigation?.AÑO == anno).OrderByDescending(x => x.MESNOMINA))
{
<details class="nomina-acordeon">
<summary class="nomina-resumen">
<span class="nomina-expandir" aria-hidden="true">⌄</span>
<span class="nomina-dato nomina-titulo"><span class="nomina-etiqueta">Nómina</span><NavLink class="btn btn-link p-0" href="@HashRed(nomina)">@nomina.IDNOMINANavigation?.DESCRIPCION</NavLink></span>
<span class="nomina-dato"><span class="nomina-etiqueta">Total devengado</span>@nomina.TOTALDEVENGADO</span>
<span class="nomina-dato"><span class="nomina-etiqueta">Total líquido</span>@nomina.TOTALLIQUIDO</span>
<span class="nomina-dato"><span class="nomina-etiqueta">Grupo</span>@nomina.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION</span>
<span class="nomina-dato"><span class="nomina-etiqueta">Nivel</span>@nomina.NIVEL</span>
</summary>
<div class="nomina-detalle mt-2 p-2 border rounded bg-light"><NominaDetalle Nomina="nomina" /></div>
</details>
}
</div>
</Content>
</AccordionItem>
@@ -187,57 +32,19 @@
</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()
[Parameter] public PERSONAS Persona { get; set; } = new();
[Parameter] public EventCallback OnPersonaActualizada { get; set; }
private readonly List<int> annos = new();
private readonly List<NOMINATRABAJADORCABECERA> itmList = new();
protected override void OnInitialized()
{
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}");
}
itmList.AddRange(Persona.NOMINATRABAJADORCABECERA);
annos.AddRange(itmList.Where(x => x.IDNOMINANavigation != null).Select(x => x.IDNOMINANavigation!.AÑO).Distinct().OrderDescending());
}
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;
return "/NomPers?cl=" + tsUtilidades.crypt.FEncS(Persona.NIF + "-" + nom.IDNOMINA, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
}
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Otra Retribución" @onclick="@(() => abrirPopup(new OTRASRETRIBUCIONES(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="OTRASRETRIBUCIONES"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopup(context, false))">Editar</button></GridColumn>
<GridColumn TItem="OTRASRETRIBUCIONES" HeaderText="Mes">
@context.MES
</GridColumn>
@@ -62,6 +64,15 @@
</Grid>
</div>
</div>
<Modal @ref="popup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false"><BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Mes</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.MES" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Año</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.AÑO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTE" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">CRA</label><input class="form-control" @bind-value="ItemEnEdicion.CRA" /></div>
<div class="col-md-12 mb-2"><label class="fw-bold">Descripción</label><input class="form-control" @bind-value="ItemEnEdicion.DESCRIPCION" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Seguridad Social</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.SEGURIDADSOCIAL" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">IRPF</label><input type="checkbox" class="form-check" @bind="ItemEnEdicion.IRPF" /></div>
</div></BodyTemplate><FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopup">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="Guardar">@(ItemEnEdicion.IDOTRASRETRIBUCIONES == 0 ? "Crear" : "Modificar")</Button></FooterTemplate></Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -69,16 +80,22 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<OTRASRETRIBUCIONES> itmList = new List<OTRASRETRIBUCIONES>();
private Modal popup = default!;
private OTRASRETRIBUCIONES ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet() => itmList = Persona.OTRASRETRIBUCIONES?.ToList() ?? new();
private async Task abrirPopup(OTRASRETRIBUCIONES item, bool nuevo) { ItemEnEdicion = item; if (nuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popup.ShowAsync(); }
private async Task cerrarPopup() => await popup.HideAsync();
private async Task Guardar() { if (ItemEnEdicion.IDOTRASRETRIBUCIONES == 0) { ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/OTRASRETRIBUCIONES/", ItemEnEdicion); } else await Utilidades.ActualizarObjeto(cliente, "/api/OTRASRETRIBUCIONES/" + ItemEnEdicion.IDOTRASRETRIBUCIONES, ItemEnEdicion); await cerrarPopup(); await OnPersonaActualizada.InvokeAsync(); }
}

View File

@@ -15,36 +15,58 @@
@inject UserState UserState
<div class="col-md-10" style="margin-inline:auto;">
<input type="button" value="Guardar" @onclick="GestionarDatos" class="mb-2 btnOAAFBlack" />
<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" />
}
@*Meter combo Mutuas*@
<InputSelect @bind-Value="@Persona.IDMUTUA" class="form-select">
<option value="">Seleccionar</option>
@if (lMutuas != null)
{
@foreach (var enumera in lMutuas)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
</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" />
}
<InputSelect @bind-Value="@Persona.IDMUTUA2" class="form-select">
<option value="">Seleccionar</option>
@if (lMutuas != null)
{
@foreach (var enumera in lMutuas)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
@*Meter combo Mutuas*@
</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)
@*Meter combo puestoTrabajoOposicion*@
<InputSelect @bind-Value="@Persona.IDPUESTOTRABAJOOPOSICION" class="form-select">
<option value="">Seleccionar</option>
@if (lPuestosTrabajo != null)
{
@foreach (var enumera in lPuestosTrabajo)
{
<option value="@enumera.IDTIPOPUESTO">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
@* @if (Persona.IDPUESTOTRABAJOOPOSICIONNavigation != null)
{
<input class="form-control" disabled id="txtPuestOp" @bind-value="@Persona.IDPUESTOTRABAJOOPOSICIONNavigation.DESCRIPCION" />
}
@@ -52,117 +74,125 @@
{
<input class="form-control" disabled id="txtPuestOp" />
}
</div>
*@ </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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" id="txtBaseMesAnterior" @bind-value="@Persona.BASEMESANTERIOR" />
</div>
@* Fecha Alta *@
@* 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" />
<input type="date" class="form-control" 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" />
<input class="form-control" 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)
@*Meter Combo CausaBaja*@
<InputSelect @bind-Value="@Persona.IDCAUSADEBAJA" class="form-select">
<option value="">Seleccionar</option>
@if (lCausaBaja != null)
{
@foreach (var enumera in lCausaBaja)
{
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
}
}
</InputSelect>
@* @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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input type="checkbox" class="" 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" />
<input type="checkbox" class="" 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" />
<input type="checkbox" class="" 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" />
<input type="checkbox" class="" id="chkPensionistas" @bind-value="@Persona.PENSIONISTAS" />
</div>
</div>
<p class="tituloCaja">Ingresos</p>
@@ -170,17 +200,17 @@
@* 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" id="txtIngrAdminLoc" @bind-value="@Persona.INGRESOADMINISTRACIONLOCAL" />
</div>
</div>
<p class="tituloCaja">Sindicatos</p>
@@ -188,20 +218,20 @@
@* 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" 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" />
<input class="form-control" id="CuotaSindical2" @bind-value="@Persona.CUOTASINDICAL2" />
</div>
</div>
</div>
@@ -212,4 +242,39 @@
private HttpClient cliente = new HttpClient();
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
public List<ENUMERACIONES> lMutuas = new List<ENUMERACIONES>();
public List<TIPOSPUESTOSTRABAJO> lPuestosTrabajo = new List<TIPOSPUESTOSTRABAJO>();
public List<ENUMERACIONES> lCausaBaja = new List<ENUMERACIONES>();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
}
private async Task CargarListas()
{
lMutuas = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/MUT");
lPuestosTrabajo = await Utilidades.ObtenerObjeto<List<TIPOSPUESTOSTRABAJO>>(cliente, "/api/TIPOSPUESTOSTRABAJO/");
lCausaBaja = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/CAUBAJ");
}
private async Task GestionarDatos()
{
var personaGuardar = Persona;
personaGuardar.NOMINATRABAJADORCABECERA = null;
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + personaGuardar.IDPERSONA, personaGuardar);
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{Persona.NIF}");
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.");
CargarListas();
}
}
}

View File

@@ -15,36 +15,38 @@
@inject UserState UserState
<div class="col-md-10" style="margin-inline:auto;">
<div class="mb-2"><button type="button" class="btnOAAFAzul" @onclick="GuardarPersona">Guardar permisos</button></div>
<p class="tituloCaja" style="margin-top:15px">Permisos</p>
<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" />
<label for="chbsupTodo" class="fw-bold widthLabel" style="height:auto">Supervisor de todo: </label>
<input type="checkbox" class="form-check" id="chbsubTodo" @bind="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" />
<label for="chbAdmCH" class="fw-bold widthLabel" style="height:auto">Administrador Control Horario: </label>
<input type="checkbox" class="form-check" id="chbAdmCH" @bind="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" />
<label for="chbDelP" class="fw-bold widthLabel" style="height:auto">Delegado Permisos: </label>
<input type="checkbox" class="form-check" id="chbDelP" @bind="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" />
<label for="chbSupDep" class="fw-bold widthLabel" style="height:auto">Supervisor Departamento: </label>
<input type="checkbox" class="form-check" id="chbSupDep" @bind="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" />
<label for="chbAdmTot" class="fw-bold widthLabel" style="height:auto">Administrador Total: </label>
<input type="checkbox" class="form-check" id="chbAdmTot" @bind="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" />
<label for="chbDel" class="fw-bold widthLabel" style="height:auto">Delegado: </label>
<input type="checkbox" class="form-check" id="chbDel" @bind="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" />
<label for="chbAdmRPT" class="fw-bold widthLabel" style="height:auto">Administrador RPT y Registro: </label>
<input type="checkbox" class="form-check" id="chbAdmRPT" @bind="Persona.ADMINISTRARPTYREGISTRO" />
</div>
</div>
@@ -110,6 +112,7 @@
private List<EXCEPCIONESPERMISOS> itmList = new List<EXCEPCIONESPERMISOS>();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
try
{
var listnom = Persona.EXCEPCIONESPERMISOSIDPERSONANavigation;
@@ -121,5 +124,11 @@
}
}
private async Task GuardarPersona()
{
await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + Persona.IDPERSONA, Persona);
await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -139,11 +139,13 @@
public EventCallback OnPersonaActualizada { get; set; }
private PERMISOSSINRETRIBUCION ItemEnEdicion { get; set; } = new PERMISOSSINRETRIBUCION();
private List<PERMISOSSINRETRIBUCION> itmList = new List<PERMISOSSINRETRIBUCION>();
protected override void OnParametersSet() => itmList = Persona.PERMISOSSINRETRIBUCION?.ToList() ?? new();
private List<NOMINAS> lNominas = new List<NOMINAS>();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
private async Task CargarListas()
@@ -152,7 +154,6 @@
try
{
var listnom = Persona.PERMISOSSINRETRIBUCION;
foreach (PERMISOSSINRETRIBUCION i in listnom) { itmList.Add(i); }
var lNomi = await Utilidades.ObtenerObjeto<List<NOMINAS>>(cliente, "/api/NOMINAS");
lNominas = lNomi.OrderBy(x => x.FECHAINICIO).ToList();
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nuevo Préstamo" @onclick="@(() => abrirPopupModificacion(new PRESTAMOS(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="PRESTAMOS"
Class="table tablaRegPers"
@@ -31,8 +32,11 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="PRESTAMOS" HeaderText="Editar" FilterButtonCSSClass="hidden">
<button type="button" @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="PRESTAMOS" HeaderText="Nómina Incio Amortización">
@context.IDNOMINAINICIONavigation.DESCRIPCION
@context.IDNOMINAINICIONavigation?.DESCRIPCION
</GridColumn>
<GridColumn TItem="PRESTAMOS" HeaderText="Fecha Inicio">
@context.FECHAINICIO.ToString("dd/MM/yyyy")
@@ -53,13 +57,47 @@
@context.SALDO
</GridColumn>
<GridColumn TItem="PRESTAMOS" HeaderText="EDITAR">
<input type="button" value="Generar Amortizaciones" />
<input type="button" class="btnOAAFAzul" value="Generar Amortizaciones" @onclick="() => GenerarAmortizacion(context)" />
</GridColumn>
</GridColumns>
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-12 mb-2">
<label class="fw-bold">Nómina Inicio Amortización</label>
<select class="form-select" @bind="ItemEnEdicion.IDNOMINAINICIO">
<option value="">Seleccione una nómina</option>
@foreach (var nomina in lNominas)
{
<option value="@nomina.IDNOMINAS">@nomina.DESCRIPCION</option>
}
</select>
</div>
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Inicio</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAINICIO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Fecha Fin</label><input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAFIN" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTE" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Meses</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.MESES" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Amortización</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.AMORTIZACION" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Saldo</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.SALDO" /></div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
@if (ItemEnEdicion.IDPRESTAMO != 0)
{
<Button Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(false))">Modificar</Button>
}
else
{
<Button Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
}
</FooterTemplate>
</Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -67,16 +105,169 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<PRESTAMOS> itmList = new List<PRESTAMOS>();
private List<NOMINAS> lNominas = new List<NOMINAS>();
private Modal popupGestionDatos = default!;
private PRESTAMOS ItemEnEdicion { get; set; } = new PRESTAMOS();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
try
{
var listnom = Persona.PRESTAMOS;
foreach (PRESTAMOS i in listnom) { itmList.Add(i); }
lNominas = await Utilidades.ObtenerObjeto<List<NOMINAS>>(cliente, "/api/NOMINAS") ?? new List<NOMINAS>();
}
catch (Exception e)
{
Console.WriteLine($"Error al obtener los datos: {e.Message}");
}
}
protected override void OnParametersSet()
{
itmList = Persona.PRESTAMOS?.ToList() ?? new List<PRESTAMOS>();
}
private async Task abrirPopupModificacion(PRESTAMOS objeto, bool esNuevo)
{
ItemEnEdicion = objeto;
if (esNuevo)
{
ItemEnEdicion.IDPERSONA = Persona.IDPERSONA;
ItemEnEdicion.FECHAINICIO = DateTime.Today;
ItemEnEdicion.FECHAFIN = DateTime.Today;
ItemEnEdicion.SALDO = ItemEnEdicion.IMPORTE;
}
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion() => await popupGestionDatos.HideAsync();
private async Task GestionarDatos(bool tipo)
{
if (tipo)
{
ItemEnEdicion.IDPRESTAMO = 0;
ItemEnEdicion.IDPERSONA = Persona.IDPERSONA;
}
if (ItemEnEdicion.IDPRESTAMO != 0)
await Utilidades.ActualizarObjeto(cliente, "/api/PRESTAMOS/" + ItemEnEdicion.IDPRESTAMO, ItemEnEdicion);
else
{
await Utilidades.NuevoObjeto(cliente, "/api/PRESTAMOS/", ItemEnEdicion);
}
await cerrarPopupModificacion();
await OnPersonaActualizada.InvokeAsync();
}
private async Task GenerarAmortizacion(PRESTAMOS pr)
{
try
{
// const string mensaje =
// "¿Está seguro de querer eliminar las amortizaciones existentes y recalcularlas de nuevo?";
// if (DXMessageBox.Show(mensaje, "Atención", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
// return;
// gcPrestamos.View.CommitEditing(true);
var enumPibe = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/NOM.PIBE");
var pibe = enumPibe.FirstOrDefault().VALORNUMERICO1;
if (pibe == null)
throw new InvalidOperationException("No se ha encontrado la enumeración NOM.PIBE.");
var nomina = new NOMINAS();
var response = await cliente.GetAsync("/api/NOMINAS/" + pr.IDNOMINAINICIO.ToString());
var ResponseContent = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
nomina = JsonConvert.DeserializeObject<NOMINAS>(ResponseContent) ?? new NOMINAS();
}
else
{
nomina = new NOMINAS();
}
if (nomina == null)
throw new InvalidOperationException(
$"No se ha encontrado la nómina {pr.IDNOMINAINICIO}.");
var saldoRestante = pr.SALDO;
var añoAmortizacion = nomina.AÑO;
var mesAmortizacion = nomina.MES;
// Eliminar las amortizaciones existentes
foreach (var amortizacion in pr.AMORTIZACIONESPRESTAMOS.ToList())
{
var responsed = await cliente.DeleteAsync("/api/AMORTIZACIONESPRESTAMOS/" + amortizacion.IDAMORTIZACIONESPRESTAMOS);
// AMORTIZACIONESPRESTAMOS.DeleteObject(amortizacion);
}
pr.AMORTIZACIONESPRESTAMOS.Clear();
// Generar las nuevas amortizaciones
for (var plazo = 1; plazo <= pr.MESES; plazo++)
{
var cantidadAmortizada = Math.Round(
pr.IMPORTE / pr.MESES,
2,
MidpointRounding.AwayFromZero);
// Ajustar la última cuota para evitar diferencias de redondeo
if (plazo == pr.MESES)
{
cantidadAmortizada = Math.Round(
saldoRestante,
2,
MidpointRounding.AwayFromZero);
}
var importePagoEspecie = Math.Round(
saldoRestante * pibe.Value / 100 / 12,
2,
MidpointRounding.AwayFromZero);
saldoRestante = Math.Round(
Math.Max(0, saldoRestante - cantidadAmortizada),
2,
MidpointRounding.AwayFromZero);
var amortizacion = new AMORTIZACIONESPRESTAMOS
{
AMORTIZADO = false,
AÑO = añoAmortizacion,
MES = mesAmortizacion,
INTERESBANCOESPAÑA = pibe.Value,
CANTIDADAMORTIZADA = cantidadAmortizada,
IMPORTEPAGOESPECIE = importePagoEspecie,
SALDORESTANTE = saldoRestante
};
pr.AMORTIZACIONESPRESTAMOS.Add(amortizacion);
// Pasar al siguiente mes
mesAmortizacion++;
if (mesAmortizacion > 12)
{
mesAmortizacion = 1;
añoAmortizacion++;
}
}
}
catch (Exception ex)
{
// Gestionar el error
}
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Productividad" @onclick="@(() => abrirPopupModificacion(new PRODUCTIVIDAD(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="PRODUCTIVIDAD"
Class="table tablaRegPers"
@@ -31,6 +32,7 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Editar" FilterButtonCSSClass="hidden"><button class="btnOAAFAzul" @onclick="@(() => abrirPopupModificacion(context, false))">Editar</button></GridColumn>
<GridColumn TItem="PRODUCTIVIDAD" HeaderText="Año">
@context.AÑO
</GridColumn>
@@ -51,6 +53,16 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate><div class="row">
<div class="col-md-6 mb-2"><label class="fw-bold">Año</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.AÑO" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Mes</label><input class="form-control" type="number" @bind-value="ItemEnEdicion.MES" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe Total</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTETOTAL" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe Mes</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTEMES" /></div>
<div class="col-md-6 mb-2"><label class="fw-bold">Importe Pagado</label><input class="form-control" type="number" step="any" @bind-value="ItemEnEdicion.IMPORTEPAGADO" /></div>
</div></BodyTemplate>
<FooterTemplate><Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button><Button Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(ItemEnEdicion.IDPRODUCTIVIDAD == 0))">@(ItemEnEdicion.IDPRODUCTIVIDAD == 0 ? "Crear" : "Modificar")</Button></FooterTemplate>
</Modal>
@code {
[Parameter]
public PERSONAS Persona { get; set; } = new PERSONAS();
@@ -58,16 +70,30 @@
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
private List<PRODUCTIVIDAD> itmList = new List<PRODUCTIVIDAD>();
private Modal popupGestionDatos = default!;
private PRODUCTIVIDAD ItemEnEdicion { get; set; } = new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
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}");
}
}
protected override void OnParametersSet()
{
itmList = Persona.PRODUCTIVIDAD?.ToList() ?? new List<PRODUCTIVIDAD>();
}
private async Task abrirPopupModificacion(PRODUCTIVIDAD objeto, bool esNuevo) { ItemEnEdicion = objeto; if (esNuevo) ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await popupGestionDatos.ShowAsync(); }
private async Task cerrarPopupModificacion() => await popupGestionDatos.HideAsync();
private async Task GestionarDatos(bool esNuevo)
{
if (esNuevo) { ItemEnEdicion.IDPRODUCTIVIDAD = 0; ItemEnEdicion.IDPERSONA = Persona.IDPERSONA; await Utilidades.NuevoObjeto(cliente, "/api/PRODUCTIVIDAD/", ItemEnEdicion); }
else await Utilidades.ActualizarObjeto(cliente, "/api/PRODUCTIVIDAD/" + ItemEnEdicion.IDPRODUCTIVIDAD, ItemEnEdicion);
await cerrarPopupModificacion(); await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -16,6 +16,7 @@
<div class="tablaTabLateral">
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="PUESTOSTRABAJO"
Class="table tablaRegPers"
Data="itmList"
@@ -31,15 +32,15 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Descripción">
<NavLink class="btn btn-link" href="@HashRed(context.IDPUESTOSTRABAJO.ToString())">@context.IDTIPOPUESTOTRABAJONavigation.DESCRIPCION</NavLink>
</GridColumn>
<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>
<GridColumn TItem="PUESTOSTRABAJO" HeaderText="Grupo">
@context.IDGRUPOFUNCIONARIONavigation?.DESCRIPCION
</GridColumn>
@@ -83,4 +84,13 @@
Console.WriteLine($"Error al obtener los datos: {e.Message}");
}
}
private string HashRed(string id)
{
string link = "/ConceptosPuestoTrabajo?cl=" + tsUtilidades.crypt.FEncS(
id,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
875421649);
return link;
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Reducción de Jornada" @onclick="@(() => abrirPopupModificacion(new REDUCCIONDEJORNADA(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="REDUCCIONDEJORNADA"
Class="table tablaRegPers"
@@ -31,6 +32,11 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="REDUCCIONDEJORNADA" HeaderText="Editar" PropertyName="NOMBRE" FilterButtonCSSClass="hidden">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="REDUCCIONDEJORNADA" HeaderText="Fecha Inicio">
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -44,23 +50,101 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Inicio</label>
<input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Fin</label>
<input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAFIN" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">% Reducción de Jornada</label>
<input class="form-control" type="number" @bind-value="@ItemEnEdicion.PORCENTAJEDEREDUCCION" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
@if (ItemEnEdicion.IDREDUCCIONDEJORNADA != 0)
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(false))">Modificar</Button>
}
else
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
}
</FooterTemplate>
</Modal>
@code {
private Modal popupGestionDatos = default;
private REDUCCIONDEJORNADA ItemEnEdicion { get; set; } = new REDUCCIONDEJORNADA();
[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 void OnParametersSet() => itmList = Persona.REDUCCIONDEJORNADA?.ToList() ?? new();
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
private async Task abrirPopupModificacion(REDUCCIONDEJORNADA objeto, bool esNuevo)
{
ItemEnEdicion = objeto;
await popupGestionDatos.ShowAsync();
}
private async Task CargarListas()
{
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}");
}
}
private async Task GestionarDatos(bool tipo)
{
var inci = ItemEnEdicion;
if (tipo == true)
{
inci.IDREDUCCIONDEJORNADA = 0;
inci.IDPERSONA = Persona.IDPERSONA;
}
if (inci.IDREDUCCIONDEJORNADA != 0)
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/REDUCCIONDEJORNADA/" + inci.IDREDUCCIONDEJORNADA, inci);
}
else
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/REDUCCIONDEJORNADA/", inci);
}
await cerrarPopupModificacion();
await CargarListas();
}
}

View File

@@ -1,20 +1,14 @@
@using System.Net.Http.Headers
@using System.Linq.Expressions
@using Newtonsoft.Json
@using System.Text
@using Serialize.Linq.Serializers
@using Newtonsoft.Json
@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">
<input type="button" value="Nueva Retención Judicial" @onclick="@(() => abrirPopupModificacion(new RETENCIONJUDICIAL(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="RETENCIONJUDICIAL"
Class="table tablaRegPers"
@@ -30,7 +24,17 @@
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumns>
<GridColumn TItem="RETENCIONJUDICIAL"
HeaderText="Editar"
FilterButtonCSSClass="hidden">
<button type="button"
class="btnOAAFAzul"
@onclick="() => abrirPopupModificacion(context, false)">
Editar
</button>
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Fecha Inicio">
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -56,30 +60,215 @@
@context.REFERENCIAFICHERO
</GridColumn>
<GridColumn TItem="RETENCIONJUDICIAL" HeaderText="Plantilla">
@context.IDPLANTILLANavigation.DESCRIPCION
@context.IDPLANTILLANavigation?.DESCRIPCION
</GridColumn>
</GridColumns>
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos"
IsVerticallyCentered="true"
UseStaticBackdrop="true"
CloseOnEscape="false">
<BodyTemplate>
<fieldset disabled="@guardando">
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Inicio</label>
<input class="form-control"
type="date"
@bind-value="ItemEnEdicion.FECHAINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Fin</label>
<input class="form-control"
type="date"
@bind-value="ItemEnEdicion.FECHAFIN" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Saldo Inicio</label>
<input class="form-control"
type="number"
step="any"
@bind-value="ItemEnEdicion.SALDOINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Saldo Restante</label>
<input class="form-control"
type="number"
step="any"
@bind-value="ItemEnEdicion.SALDORESTANTE" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Descripción</label>
<textarea class="form-control"
rows="3"
@bind="ItemEnEdicion.DESCRIPCION"></textarea>
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Juzgado</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.JUZGADO" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">I.B.A.N.</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.IBAN" />
</div>
<div class="col-md-12 mb-2">
<label class="fw-bold">Referencia Fichero</label>
<input class="form-control"
type="text"
@bind="ItemEnEdicion.REFERENCIAFICHERO" />
</div>
</div>
</fieldset>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary"
Disabled="@guardando"
@onclick="cerrarPopupModificacion">
Cerrar
</Button>
<Button Color="ButtonColor.Primary" Disabled="@guardando" @onclick="@(() => GestionarDatos(ItemEnEdicion.IDRETENCIONJUDICIAL == 0))">
@(ItemEnEdicion.IDRETENCIONJUDICIAL == 0 ? "Crear" : "Modificar")
</Button>
</FooterTemplate>
</Modal>
@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()
private Modal popupGestionDatos = default!;
private HttpClient cliente = default!;
private List<RETENCIONJUDICIAL> itmList = new();
private RETENCIONJUDICIAL ItemEnEdicion { get; set; } = new();
private RETENCIONJUDICIAL? itemOriginal;
private bool guardando;
private string? mensajeError;
protected override void OnInitialized()
{
cliente = Utilidades.ObtenerCliente(
UserState.Token,
HttpClientFactory);
}
protected override void OnParametersSet()
{
CargarListas();
}
private void CargarListas()
{
itmList = Persona.RETENCIONJUDICIAL?.ToList()
?? new List<RETENCIONJUDICIAL>();
}
private async Task abrirPopupModificacion(RETENCIONJUDICIAL objeto, bool esNuevo)
{
mensajeError = null;
itemOriginal = objeto;
// Copia independiente: cerrar el modal no modifica la fila.
var json = JsonConvert.SerializeObject(
objeto,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
ItemEnEdicion =
JsonConvert.DeserializeObject<RETENCIONJUDICIAL>(json)
?? throw new InvalidOperationException(
"No se ha podido preparar la retención para editar.");
if (esNuevo)
ItemEnEdicion.IDPERSONA = Persona.IDPERSONA;
await popupGestionDatos.ShowAsync();
}
private async Task cerrarPopupModificacion()
{
if (guardando)
return;
await popupGestionDatos.HideAsync();
mensajeError = null;
itemOriginal = null;
}
private async Task GestionarDatos(bool esNuevo)
{
if (guardando || (!esNuevo && itemOriginal is null))
return;
mensajeError = null;
if (ItemEnEdicion.FECHAINICIO.HasValue
&& ItemEnEdicion.FECHAFIN.HasValue
&& ItemEnEdicion.FECHAFIN.Value < ItemEnEdicion.FECHAINICIO.Value)
{
mensajeError =
"La fecha fin no puede ser anterior a la fecha inicio.";
return;
}
guardando = true;
try
{
var listnom = Persona.RETENCIONJUDICIAL;
foreach (RETENCIONJUDICIAL i in listnom) { itmList.Add(i); }
if (esNuevo)
await Utilidades.NuevoObjeto(cliente, "/api/RETENCIONJUDICIAL/", ItemEnEdicion);
else
await Utilidades.ActualizarObjeto(cliente, "/api/RETENCIONJUDICIAL/" + ItemEnEdicion.IDRETENCIONJUDICIAL, ItemEnEdicion);
// Actualiza la fila y la colección de Persona tras guardar.
if (!esNuevo)
{
itemOriginal!.FECHAINICIO = ItemEnEdicion.FECHAINICIO;
itemOriginal.FECHAFIN = ItemEnEdicion.FECHAFIN;
itemOriginal.SALDOINICIO = ItemEnEdicion.SALDOINICIO;
itemOriginal.SALDORESTANTE = ItemEnEdicion.SALDORESTANTE;
itemOriginal.DESCRIPCION = ItemEnEdicion.DESCRIPCION;
itemOriginal.JUZGADO = ItemEnEdicion.JUZGADO;
itemOriginal.IBAN = ItemEnEdicion.IBAN;
itemOriginal.REFERENCIAFICHERO = ItemEnEdicion.REFERENCIAFICHERO;
}
CargarListas();
}
catch (Exception e)
catch (Exception)
{
Console.WriteLine($"Error al obtener los datos: {e.Message}");
mensajeError =
"No se ha podido guardar la retención judicial.";
return;
}
finally
{
guardando = false;
}
await cerrarPopupModificacion();
await OnPersonaActualizada.InvokeAsync();
}
}

View File

@@ -15,33 +15,34 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Guardar" @onclick="GestionarDatos" class="mb-2 btnOAAFBlack" />
<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" />
<input type="number" class="form-control" 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" />
<input type="number" class="form-control" 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" />
<input type="number" class="form-control" 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" />
<input type="number" class="form-control" 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" />
<input class="form-control" id="txtQEx" step="00" @bind-value="@Persona.QUINQUENIOEXTRA" />
</div>
</div>
</div>
@@ -54,14 +55,25 @@
// 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}");
// }
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
}
private async Task GestionarDatos()
{
var personaGuardar = Persona;
personaGuardar.NOMINATRABAJADORCABECERA = null;
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + personaGuardar.IDPERSONA, personaGuardar);
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{Persona.NIF}");
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.");
}
}

View File

@@ -15,6 +15,7 @@
@inject UserState UserState
<div class="tablaTabLateral">
<input type="button" value="Nueva Reducción de Jornada" @onclick="@(() => abrirPopupModificacion(new TRABAJADORTIEMPOPARCIAL(), true))" class="mb-2 btnOAAFBlack" />
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="TRABAJADORTIEMPOPARCIAL"
Class="table tablaRegPers"
@@ -31,6 +32,11 @@
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="TRABAJADORTIEMPOPARCIAL" HeaderText="Editar" FilterButtonCSSClass="hidden">
<button @onclick="@(() => abrirPopupModificacion(context, false))" class="btnOAAFAzul">Editar</button>
</GridColumn>
<GridColumn TItem="TRABAJADORTIEMPOPARCIAL" HeaderText="Fecha Inicio">
@context.FECHAINICIO?.ToString("dd/MM/yyyy")
</GridColumn>
@@ -44,23 +50,98 @@
</Grid>
</div>
</div>
<Modal @ref="popupGestionDatos" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
<BodyTemplate>
<div class="row">
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Inicio</label>
<input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAINICIO" />
</div>
<div class="col-md-6 mb-2">
<label class="fw-bold">Fecha Fin</label>
<input class="form-control" type="date" @bind-value="ItemEnEdicion.FECHAFIN" />
</div>
<div class="col-md-12 mb-2">
<label for="txtEDesc" class="fw-bold">% Parcialidad</label>
<input class="form-control" type="number" @bind-value="@ItemEnEdicion.PORCENTAJEPARCIALIDAD" />
</div>
</div>
</BodyTemplate>
<FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupModificacion">Cerrar</Button>
@if (ItemEnEdicion.IDTRABAJADORTIEMPOPARCIAL != 0)
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(false))">Modificar</Button>
}
else
{
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary" @onclick="@(() => GestionarDatos(true))">Crear</Button>
}
</FooterTemplate>
</Modal>
@code {
private Modal popupGestionDatos = default;
private TRABAJADORTIEMPOPARCIAL ItemEnEdicion { get; set; } = new TRABAJADORTIEMPOPARCIAL();
[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 void OnParametersSet() => itmList = Persona.TRABAJADORTIEMPOPARCIAL?.ToList() ?? new();
protected override async Task OnInitializedAsync()
{
try
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
await CargarListas();
await OnPersonaActualizada.InvokeAsync();
}
private async Task CargarListas()
{
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}");
}
}
private async Task cerrarPopupModificacion()
{
await popupGestionDatos.HideAsync();
}
private async Task abrirPopupModificacion(TRABAJADORTIEMPOPARCIAL objeto, bool esNuevo)
{
ItemEnEdicion = objeto;
await popupGestionDatos.ShowAsync();
}
private async Task GestionarDatos(bool tipo)
{
var inci = ItemEnEdicion;
if (tipo == true)
{
inci.IDTRABAJADORTIEMPOPARCIAL = 0;
inci.IDPERSONA = Persona.IDPERSONA;
}
if (inci.IDTRABAJADORTIEMPOPARCIAL != 0)
{
var response = await Utilidades.ActualizarObjeto(cliente, "/api/TRABAJADORTIEMPOPARCIAL/" + inci.IDTRABAJADORTIEMPOPARCIAL, inci);
}
else
{
var response = await Utilidades.NuevoObjeto(cliente, "/api/TRABAJADORTIEMPOPARCIAL/", inci);
}
await cerrarPopupModificacion();
}
}

View File

@@ -15,136 +15,137 @@
@inject UserState UserState
<div class="col-md-10" style="margin-inline:auto;">
<input type="button" value="Guardar" @onclick="GestionarDatos" class="mb-2 btnOAAFBlack" />
<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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input type="date" class="form-control" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input class="form-control" type="number" 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" />
<input type="date" class="form-control" id="CCOAImporte" @bind-value="@Persona.FECHACUMPLIMIENTOCARRERA" />
</div>
</div>
</div>
@@ -155,4 +156,28 @@
private HttpClient cliente = new HttpClient();
[Parameter]
public EventCallback OnPersonaActualizada { get; set; }
protected override async Task OnInitializedAsync()
{
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
}
private async Task GestionarDatos()
{
var personaGuardar = Persona;
personaGuardar.NOMINATRABAJADORCABECERA = null;
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/PERSONAS/" + personaGuardar.IDPERSONA, personaGuardar);
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{Persona.NIF}");
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.");
}
}

View File

@@ -21,7 +21,7 @@
<h6><small><i class="fas fa-user"></i><b> Personas</b></small></h6>
</div>
@if (personas == null)
@if (cargando)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
@@ -258,6 +258,7 @@
@code {
private List<PERSONAS> listPersonas = new List<PERSONAS>();
private List<PERSONAS> personas = new List<PERSONAS>();
private bool cargando = true;
private string textBtnTodos { get; set; }
private string _filter = "";
public string Filter
@@ -443,6 +444,7 @@
.ToList();
listPersonas = personas.Where(x => x.FECHABAJA == null).ToList();
cargando = false;
}
private async Task btnExportarPDF()
{
@@ -521,4 +523,4 @@
link.click();
document.body.removeChild(link);
};
</script>
</script>

View File

@@ -19,6 +19,13 @@
@inject ProtectedSessionStorage ProtectedSessionStore
@inject UserState UserState
@if (cargando)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
<div class="row mb-3 mt-4" style=" padding: 20px;border:solid 1px grey">
<div class="col-md-6">
<label for="txtApellidos" class="fw-bold widthLabel li-height50">Apellidos: </label>
@@ -630,6 +637,7 @@
private Modal popupConfirmacion = default!;
List<ToastMessage> mensajes = new List<ToastMessage>();
private EditContext editContext = default!;
private bool cargando = true;
List<FieldIdentifier> listaIdentificadores = new List<FieldIdentifier>();
private void EstablecerEditContext(NOMINATRABAJADORCABECERA nuevo)
{
@@ -638,10 +646,6 @@
messageStore = new ValidationMessageStore(editContext);
listaIdentificadores.Clear();
}
private async Task abrirGuardar()
{
await popupConfirmacion.ShowAsync();
@@ -707,6 +711,10 @@
errorMessage = ex.Message;
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
}
finally
{
cargando = false;
}
}
private string HashRed(string id)
{

View File

@@ -18,20 +18,18 @@
@inject UserState UserState
<div class="pagina">
@if (cargando)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
<div class="Cabecera">
<h6><small><i class="fas fa-user"></i><b> Periodo Siltra</b></small></h6>
</div>
<div>
<input type="button" @onclick="GuardarPeriodoSILTRA" class="btnOAAFAzul mb-2" value="Guardar" />
</div>
@if (PeriodoSiltra == null)
{
<div id="cargando" class="loadingFrame">
<div class="loadingImg"></div>
</div>
}
else
{
<div class="row" style="border:solid 1px black; padding:10px">
<div class="col-md-2">
<label for="txtNIF" class="fw-bold widthLabel li-height50">Fecha inicio <span style="color:red">*</span>: </label>
@@ -185,11 +183,11 @@
</div>
}
}
</div>
@code {
private PERIODOSSILTRA PeriodoSiltra = new PERIODOSSILTRA();
private bool cargando = true;
public EventCallback<string> OnValidationStateChanged { get; set; }
private List<int> annos = new List<int>();
private string cl { get; set; }
@@ -260,6 +258,7 @@
lCuentaCoti = JsonConvert.DeserializeObject<List<CUENTASCOTIZACIONPATRONAL>>(rcCuentaCoti) ?? throw new Exception("Error al deserializar los datos.");
lEstados = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(client, "/api/ENUMERACIONES/EnumeracionesGrupo/MUT");
lTipPeriodo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(client, "/api/ENUMERACIONES/EnumeracionesGrupo/TIPPERTRAM");
cargando = false;
}
private string _filter = "";
public string Filter
@@ -359,4 +358,4 @@
OnValidationStateChanged.InvokeAsync(fieldName);
}
}
}

View File

@@ -217,7 +217,7 @@ body {
text-align:end;
}
.Cabecera {
margin-bottom: 3rem;
margin-bottom: 1.5rem;
}
.btnGris {
background-color: #eeeeee;
@@ -371,6 +371,18 @@ body {
font-weight:bold;
color:var(--AzulMuyOscuro)
}
.navInfoPers .nav-link {
color:var(--AzulOAAF);
padding: 5px
}
.navInfoPers .nav-link:hover {
background-color: var(--AzulOscuro);
color: white !important;
}
.navInfoPers .nav-link.active {
background-color: var(--AzulOscuro);
color: white !important
}
.navBar {
position:fixed;
left:0;
@@ -496,7 +508,7 @@ body {
color: white !important;
text-decoration: none !important;
padding: 20px;
padding-inline: 20px;
padding-inline: 10px;
overflow-inline: visible;
border-inline: solid 1px white;
width: auto;
@@ -513,18 +525,109 @@ body {
.tablaRegPers th a:hover {
opacity: 0.6;
}
.tablaRegPers td.text-start {
text-align: inherit !important;
}
.tablaRegPers td {
padding: 15px !important;
padding-inline: 30px !important;
padding: 5px !important;
padding-inline: 10px !important;
border: solid 1px black;
font-size: 14px !important;
font-size: 12px !important;
vertical-align: middle !important;
}
.tablaRegPers td a {
font-size:14px;
font-size:12px;
}
.tablaRegPers th {
text-align: center;
background-color: var(--AzulOscuro);
color: white !important;
text-decoration: none !important;
padding: 20px;
padding-inline: 10px;
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.text-start {
text-align: inherit !important;
}
.tablaRegPers td {
padding: 5px !important;
padding-inline: 10px !important;
border: solid 1px black;
font-size: 12px !important;
vertical-align: middle !important;
}
.tablaRegPers td a {
font-size:12px;
}
/********/
.tablaDetalle th {
text-align: center;
background-color: var(--AzulOAAF);
color: white !important;
text-decoration: none !important;
padding: 20px;
padding-inline: 10px;
overflow-inline: visible;
border-inline: solid 1px white;
width: auto;
white-space: nowrap;
font-size: 14px;
}
.tablaDetalle th .btn-link {
color: white;
}
.tablaDetalle th a {
color: white !important;
text-decoration: none !important;
}
.tablaDetalle th a:hover {
opacity: 0.6;
}
.tablaDetalle td.text-start {
text-align: inherit !important;
}
.tablaDetalle td {
padding: 5px !important;
padding-inline: 10px !important;
border: solid 1px black;
font-size: 12px !important;
vertical-align: middle !important;
}
.tablaDetalle td a {
font-size: 12px;
}
/********/
.accordion-button:not(.collapsed){
background-color:var(--AzulOAAF);
color:white;
}
.linkNavActivo {
background-color: var(--AzulMuyOscuro) !important;
}
background-color: var(--AzulMuyOscuro) !important;
}
.table .card {
border: none !important;
}
@@ -675,8 +778,11 @@ body {
color: white;
font-size: 26px;
}
.page-link{
font-size:15px !important;
.tablaDetalle tr th {
background-color:var(--AzulOAAF) !important;
}
.page-link {
font-size: 15px !important;
}
.bb-grid-pagination-text {
display:none !important;
@@ -761,4 +867,63 @@ body {
}
}
.tablaRegPers td {
vertical-align: top;
}
.nomina-detalle {
display: block;
}
.nomina-acordeon {
border-bottom: 1px solid #b8b8b8;
}
.nomina-resumen {
display: grid;
grid-template-columns: 32px minmax(260px, 2fr) repeat(4, minmax(130px, 1fr));
align-items: center;
gap: 12px;
padding: 10px 8px;
cursor: pointer;
list-style: none;
}
.nomina-resumen::-webkit-details-marker {
display: none;
}
.nomina-expandir {
color: #0d6efd;
font-size: 22px;
text-align: center;
/*transition: transform .15s ease-in-out;*/
}
.nomina-acordeon[open] .nomina-expandir {
transform: rotate(180deg);
}
.concepto-deduccion{
color:red
}
.nomina-dato {
display: flex;
flex-direction: column;
min-width: 0;
}
.nomina-dato a {
text-align: start !important;
}
.nomina-etiqueta {
color: #666;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
margin-bottom: 2px;
}
.nomina-detalle {
/*margin-left: 32px;*/
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -114,6 +114,10 @@ namespace SwaggerAntifraude.Controllers
.Include(n => n.NOMINATRABAJADORCABECERA)
.ThenInclude(pr => pr.PERIODOSSILTRA)
.ThenInclude(y => y.IDESTADONavigation)
.Include(n => n.NOMINATRABAJADORCABECERA)
.ThenInclude(pr => pr.PERIODOSSILTRA)
.ThenInclude(y => y.TRAMOSSILTRA)
.ThenInclude(y => y.IDTIPOTRAMONavigation)
.Include(n => n.NOMINATRABAJADORCABECERA)
.ThenInclude(y => y.IDSINDICATO1Navigation)
.Include(n => n.NOMINATRABAJADORCABECERA)

View File

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

View File

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

View File

@@ -0,0 +1,113 @@
using bdAntifraude.db;
using bdAntifraude.dbcontext;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.EntityFrameworkCore;
using Serialize.Linq.Serializers;
using System.Linq.Expressions;
using SwaggerAntifraude.Controllers;
namespace SwaggerAntifraude.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PUESTOSTRABAJOController : GenericoController<PUESTOSTRABAJO, int>
{
public PUESTOSTRABAJOController()
: base()
{
}
[HttpGet]
public override async Task<IActionResult> GetAll()
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
var entities = await context.PUESTOSTRABAJO
.Include(x => x.IDTIPOPUESTOTRABAJONavigation)
.Include(x => x.CONCEPTOSPUESTOSDETRABAJO)
.AsNoTracking()
.ToListAsync();
//.Include(v => v.IDSERVICIOADSCRITONavigation)
//.Include(v => v.IDUNIDADADMINISTRATIVANavigation)
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
[Authorize(Policy = "LecturaPolicy")]
[HttpGet("{id}")]
public override IActionResult GetById(int id)
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
//var dbSet = context.Set<VIDA_ADMINISTRATIVA>();
var entities = context.PUESTOSTRABAJO
.Include(x => x.IDTIPOPUESTOTRABAJONavigation)
.Include(x => x.CONCEPTOSPUESTOSDETRABAJO)
.AsNoTracking()
.FirstOrDefault(v => v.IDPUESTOSTRABAJO == id);
if (entities == null)
return NotFound();
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
[Authorize(Policy = "LecturaPolicy")]
[HttpPost("filtrar")] // Cambié a POST ya que estás usando [FromBody]
public override async Task<IActionResult> Filtrar([FromBody] ExpressionWrapper request)
{
try
{
using (var context = tsGestionAntifraude.NuevoContexto(SoloLectura: true, UseLazyLoadingProxies: false))
{
// Crear el deserializador
var serializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
// Deserializar la expresión
var deserializedExpression = serializer.DeserializeText(request.Expression) as Expression<Func<PUESTOSTRABAJO, bool>>;
if (deserializedExpression == null)
{
return BadRequest("La expresión deserializada es nula o incorrecta.");
}
var entities = await context.PUESTOSTRABAJO.Where(deserializedExpression)
.Include(x => x.IDTIPOPUESTOTRABAJONavigation)
.Include(x => x.CONCEPTOSPUESTOSDETRABAJO)
.AsNoTracking()
.ToListAsync();
// Verificar si el resultado es vacío
if (entities.Count == 0)
{
Console.WriteLine("La consulta no devolvió resultados.");
}
return Ok(entities);
}
}
catch (Exception ex)
{
return StatusCode(500, $"Error interno del servidor: {ex.Message}");
}
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,15 +5,15 @@
"Audience": "TuDominio.com",
"ExpiresInMinutes": 60
},
//"ConnectionStrings": {
// "WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO",
// "ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO"
//},
//PRODUCCION
"ConnectionStrings": {
"WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE",
"ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE"
"WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO",
"ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDEDESARROLLO"
},
//PRODUCCION
//"ConnectionStrings": {
// "WriteConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE",
// "ReadOnlyConnection": "DATA SOURCE=192.168.41.203:21521/XE;PASSWORD=antifraude2022;PERSIST SECURITY INFO=True;USER ID=ANTIFRAUDE"
//},
"Logging": {
"LogLevel": {
"Default": "Information",