- La generación de nominas la lista de personas viene vacía y de error. YA NO DA ERROR PERO NO TENGO CLARO SI DEBE DEVOLVER ALGO O APLICA CAMBIOS A OTRAS COSAS - Por regla general salvo lo que necesite mostrar hora, la fecha se muestra sin la hora, por el ejemplo en el grid de personas cuando muestras Ver todos, la fecha baja viene con la hora. - Las cantidades por defecto con punto de miles y coma de decimales. - Lo bolean, que sean una caja de check .
828 lines
42 KiB
Plaintext
828 lines
42 KiB
Plaintext
@page "/NomPers"
|
|
@* @page "/NomPers/{cl}" *@
|
|
@using System.Net.Http.Headers
|
|
@using System.Linq.Expressions
|
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
|
@using Microsoft.AspNetCore.WebUtilities
|
|
@using Newtonsoft.Json
|
|
@using System.Text
|
|
@using Serialize.Linq.Serializers
|
|
@using GestionPersonalWeb.Models
|
|
@using BlazorBootstrap
|
|
@using bdAntifraude.db
|
|
@using Microsoft.AspNetCore.Components
|
|
@rendermode InteractiveServer
|
|
@inject IJSRuntime JS
|
|
@inject NavigationManager NavigationManager
|
|
@inject IHttpClientFactory HttpClientFactory
|
|
@inject IHttpContextAccessor HttpContextAccessor
|
|
@inject ProtectedSessionStorage ProtectedSessionStore
|
|
@inject UserState UserState
|
|
|
|
@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>
|
|
<input class="form-control" readonly="readonly" id="txtApellidos" @bind-value="@Persona.APELLIDOS" />
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label for="txtNombre" class="fw-bold widthLabel li-height50">Nombre: </label>
|
|
<input class="form-control" readonly="readonly" id="txtNombre" @bind-value="@Persona.NOMBRE" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">DNI: </label>
|
|
<input class="form-control" readonly="readonly" id="txtNIF" @bind-value="@Persona.NIF" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="txtsexo" class="fw-bold widthLabel li-height50">Sexo: </label>
|
|
<InputSelect readonly="readonly" @bind-Value="Persona.IDSEXO" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lSexo != null)
|
|
{
|
|
@foreach (var enumera in lSexo)
|
|
{
|
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="txtTiCont" class="fw-bold widthLabel li-height50">Tipo Contrato: </label>
|
|
<InputSelect readonly="readonly" @bind-Value="Persona.IDCONTRATO" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lTipoContra != null)
|
|
{
|
|
@foreach (var enumera in lTipoContra)
|
|
{
|
|
<option value="@enumera.IDCONTRATO"> @enumera.CODIGO - @enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
@* <input class="form-control" id="txtTiCont" value="@persona.IDCONTRATONavigation?.DESCRIPCION" /> *@
|
|
</div>
|
|
</div>
|
|
<input type="button" value="Guardar Nómina" class="btnOAAFAzul" @onclick="GuardarNomina" />
|
|
|
|
<Modal @ref="popupConfirmacion" Title="Confirmar Guardar persona" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
|
|
<BodyTemplate>
|
|
<p>Se van a dar de alta o modificar datos de la persona seleccionada ¿desea continuar?</p>
|
|
</BodyTemplate>
|
|
<FooterTemplate>
|
|
<Button Color="ButtonColor.Secondary" @onclick="CerrarConfirmacion">Cancelar</Button>
|
|
|
|
<Button @onclick="GuardarNomina" Color="ButtonColor.Primary">Aceptar</Button>
|
|
|
|
</FooterTemplate>
|
|
</Modal>
|
|
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
|
|
<div>
|
|
<Tabs @ref=tabsDtsPer style="margin-top:25px; font-size:12px; gap:0;" OnShown="@(args => OnTabShownAsync(args))">
|
|
<Tab Title="Nómina" Name="tabNomina">
|
|
<Content>
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<label for="txtCodigo" class="fw-bold widthLabel li-height50">Código: </label>
|
|
@if (Nomina.IDNOMINANavigation != null)
|
|
{
|
|
<input class="form-control" id="txtCodigo" @bind-value="@Nomina.IDNOMINANavigation.DESCRIPCION" />
|
|
}
|
|
else
|
|
{
|
|
<input class="form-control" id="txtCodigo" />
|
|
}
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Fecha: </label>
|
|
<input type="date" class="form-control" id="txtFecha" @bind-value="@Nomina.FECHA" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Nº Pluriempleo: </label>
|
|
<input class="form-control" id="txtFecha" @bind-value="@Nomina.NUMEROPLURIEMPLEO" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Grupo: </label>
|
|
@if (Nomina.IDGRUPOFUNCIONARIONavigation != null)
|
|
{
|
|
<input class="form-control" id="txtFecha" @bind-value="@Nomina.IDGRUPOFUNCIONARIONavigation.DESCRIPCION" />
|
|
}
|
|
else
|
|
{
|
|
<input class="form-control" id="txtFecha" />
|
|
}
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Nivel: </label>
|
|
<input class="form-control" id="txtFecha" @bind-value="@Nomina.NIVEL" />
|
|
</div>
|
|
@* <div class="col-md-4"></div> *@
|
|
<div class="col-md-11">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Observaciones: </label>
|
|
<input class="form-control" id="txtFecha" @bind-value="@Nomina.OBSERVACIONES" />
|
|
</div>
|
|
<div class="col-md-1 d-flex gap-2 align-items-end">
|
|
<label for="txtFecha" class="fw-bold widthLabel align-content-end">Acumulada: </label>
|
|
<input type="checkbox" class="" id="txtFecha" @bind-value="@Nomina.ACUMULADA" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Sindicato 1: </label>
|
|
<InputSelect @bind-Value="Nomina.IDSINDICATO1" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lSindicato != null)
|
|
{
|
|
@foreach (var enumera in lSindicato)
|
|
{
|
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 1: </label>
|
|
@if (Nomina.IDSINDICATO1Navigation != null)
|
|
{
|
|
<input class="form-control" id="txtFecha" readonly="readonly" @bind-value="@Nomina.IDSINDICATO1Navigation.VALORNUMERICO1" />
|
|
}
|
|
else
|
|
{
|
|
<input class="form-control" />
|
|
}
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Sindicato 2: </label>
|
|
<InputSelect @bind-Value="Nomina.IDSINDICATO2" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lSindicato != null)
|
|
{
|
|
@foreach (var enumera in lSindicato)
|
|
{
|
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtFecha" class="fw-bold widthLabel li-height50">Valor Sindicato 2: </label>
|
|
@if (Nomina.IDSINDICATO2Navigation != null)
|
|
{
|
|
<input class="form-control" id="txtFecha" readonly="readonly" @bind-value="@Nomina.IDSINDICATO2Navigation.VALORNUMERICO1" />
|
|
}
|
|
else
|
|
{
|
|
<input class="form-control" />
|
|
}
|
|
</div>
|
|
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Porcentajes" Name="tabPorcentajes">
|
|
<Content>
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Pluriempleo: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.PLURIEMPLEO" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Reducción Jornada: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.REDUCCIONJORNADA" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Trabajo Tiempo Parcial: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TRABAJOTIEMPOPARCIAL" />
|
|
</div>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Totales" Name="tabTotales">
|
|
<Content>
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total devengado: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALDEVENGADO" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total liquido: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALLIQUIDO" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total Seguridad Social: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALSEGURIDADSOCIAL" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total haberes: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALHABERES" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total pago en especie: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALPAGOESPECIE" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total deducciones: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALDEDUCCIONES" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Otras deducciones: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.OTRASDEDUCCIONES" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total IRPF: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALIRPF" />
|
|
</div>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Días" Name="tabDias">
|
|
<Content>
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días efectivos: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASEFECTIVOS" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días enfermos: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASENFERMOS" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días accidentes: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASACCIDENTES" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días permisos sin retribuir: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASPERMISOSSINRETRIBUIR" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días maternidad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASMATERNIDAD" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días base pago directo: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASBASEPAGODIRECTO" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días falta: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASFALTA" />
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días de paga liquidados: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASDEPAGALIQUIDADOS" />
|
|
</div>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Seguridad Social" Name="tabSeguridadSocial">
|
|
<Content>
|
|
<div class="row">
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Concepto: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALSEGURIDADSOCIALCONCEPTO" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Prorrata paga extra: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.PRORRATAPAGAEXTRA" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Prorrata productividad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.PRORRATAPRODUCTIVIDAD" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base CC activo: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASECCACTI" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base días permiso no retribuido: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEDPNR" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
</div>
|
|
@* --------------------------------- *@
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Total seguridad social pago en especie: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALSEGURIDADSOCIALPAGOENESPECIE" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Epigrafe 126: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALEPIGRAFE126" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Maternidad/Paternidad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALMATERNIDADPATERNIDAD" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base D y FP activo: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEDYFPACTI" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Permisos sin retribuir: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.TOTALPERMISOSINRETRIBUIR" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
</div>
|
|
@* --------------------------------- *@
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días accidentes: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASACCIDENTES" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base accidentes: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEACCIDENTES" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base pago directo: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEPAGODIRECTO" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base CC enfermedad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASECCENF" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
</div>
|
|
@* --------------------------------- *@
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días enfermedad al 60: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASENFERMEDADAL60" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base enfermedad al 60: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEENFERMEDADAL60" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base S.S. 100%: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASESEGURIDADSOCIAL100X100" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base D y FP enfermedad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEDYFPENF" />
|
|
</div>
|
|
<div class="col-md-4">
|
|
</div>
|
|
@* --------------------------------- *@
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días enfermedad al 75: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASENFERMEDADAL75" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Días enfermedad al 75: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.DIASENFERMEDADAL75" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Base maternidad: </label>
|
|
<input class="form-control" id="txtNIF" @bind-value="@Nomina.BASEMATE" />
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Mutua: </label>
|
|
<InputSelect @bind-Value="Nomina.IDMUTUA" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lMutua != null)
|
|
{
|
|
@foreach (var enumera in lMutua)
|
|
{
|
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label for="txtNIF" class="fw-bold widthLabel li-height50">Mutua 2: </label>
|
|
<InputSelect @bind-Value="Nomina.IDMUTUA2" class="form-select">
|
|
<option value="">Seleccionar</option>
|
|
@if (lMutua != null)
|
|
{
|
|
@foreach (var enumera in lMutua)
|
|
{
|
|
<option value="@enumera.IDENUMERACION">@enumera.DESCRIPCION</option>
|
|
}
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-2">
|
|
</div>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
</Tabs>
|
|
</div>
|
|
<div>
|
|
<Tabs @ref=tabsDtsNom style="margin-top:25px; font-size:12px; gap:0;" OnShown="@(args => OnTabShownAsync(args))">
|
|
<Tab Title="Conceptos" Name="tabConceptos">
|
|
<Content>
|
|
<div>
|
|
<Grid TItem="NOMINATRABAJADORLINEA"
|
|
Class="table tablaRegPers"
|
|
Data="lConceptos"
|
|
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="NOMINATRABAJADORLINEA" HeaderText="Descripción concepto">
|
|
@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>
|
|
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Concepto al 100">
|
|
@context.CONCEPTOAL100
|
|
</GridColumn>
|
|
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Aplicacion presupuestaria">
|
|
@context.APLICACIONPRESUPUESTARIA
|
|
</GridColumn>
|
|
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Reducción jornada">
|
|
@if (context.REDUCCIONJORNADA == 1)
|
|
{
|
|
<i class="fa-regular fa-square-check"></i>
|
|
}
|
|
else { }
|
|
</GridColumn>
|
|
<GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Trabajo a tiempo parcial">
|
|
@if (context.TRABAJOATIEMPOPARCIAL == 1)
|
|
{
|
|
<i class="fa-regular fa-square-check"></i>
|
|
}
|
|
else { }
|
|
</GridColumn>
|
|
</GridColumns>
|
|
|
|
</Grid>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Pagos en especie" Name="tabPagosEspecie">
|
|
<Content>
|
|
<div>
|
|
<Grid TItem="NOMINATRABAJADORPAGOESPECIE"
|
|
Class="table tablaRegPers"
|
|
Data="lPagoEspecie"
|
|
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="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">
|
|
@if (context.SEGURIDADSOCIAL == true)
|
|
{
|
|
<i class="fa-regular fa-square-check"></i>
|
|
}
|
|
else { }
|
|
</GridColumn>
|
|
</GridColumns>
|
|
|
|
</Grid>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Incidencias" Name="tabIncidencias">
|
|
<Content>
|
|
<div>
|
|
<Grid TItem="INCIDENCIAS"
|
|
Class="table tablaRegPers"
|
|
Data="lIncidencias"
|
|
AllowFiltering="false"
|
|
PageSize="10"
|
|
AllowPaging="true"
|
|
AllowSorting="true"
|
|
EmptyText="No se han encontrado datos"
|
|
Height="100"
|
|
PageSizeSelectorVisible="false"
|
|
PageSizeSelectorItems="@(new int[] { 5, 10, 20, 50 })"
|
|
Responsive="true"
|
|
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
|
|
|
|
<GridColumns>
|
|
<GridColumn TItem="INCIDENCIAS" HeaderText="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>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
<Tab Title="Periodos SILTRA" Name="tabSiltra">
|
|
<Content>
|
|
<input type="button" value="Nuevo Periodo SILTRA" class="btnOAAFAzul mt-2" onclick='location.replace("@HashRed("0")")' />
|
|
|
|
<div>
|
|
<Grid TItem="PERIODOSSILTRA"
|
|
Class="table tablaRegPers"
|
|
Data="lSiltra"
|
|
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="PERIODOSSILTRA" HeaderText="Fecha inicio">
|
|
<NavLink class="btn btn-link" href="@HashRed(context.IDPERIODOSILTRA.ToString())">@context.FECHAINICIO?.ToString("dd/MM/yyyy")</NavLink>
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Fecha fin">
|
|
@context.FECHAFIN?.ToString("dd/MM/yyyy")
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Días">
|
|
@context.DIAS
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Contrato">
|
|
@context.IDCONTRATONavigation?.DESCRIPCION
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Grupo tarifa">
|
|
@context.GRUPOTARIFA
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="CNAE">
|
|
@context.CNAE
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Reducción jornada">
|
|
@context.REDUCCIONJORNADA
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Tipo periodo tramo">
|
|
@context.TIPOPERIODOSTRAMOS
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Tipo liquidación">
|
|
@context.TIPOLIQUIDACION
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Nº días IRPF">
|
|
@context.NUMERODIASIRPF
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Importe IRPF">
|
|
@context.IMPORTEIRPF
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Estado">
|
|
@context.IDESTADONavigation?.DESCRIPCION
|
|
</GridColumn>
|
|
<GridColumn TItem="PERIODOSSILTRA" HeaderText="Número liquidación">
|
|
@context.NUMEROLIQUIDACION
|
|
</GridColumn>
|
|
</GridColumns>
|
|
|
|
</Grid>
|
|
</div>
|
|
</Content>
|
|
</Tab>
|
|
</Tabs>
|
|
</div>
|
|
|
|
|
|
|
|
@code {
|
|
[Parameter]
|
|
public PERSONAS Persona { get; set; } = new PERSONAS();
|
|
public NOMINATRABAJADORCABECERA Nomina { get; set; } = new NOMINATRABAJADORCABECERA();
|
|
private HttpClient cliente = new HttpClient();
|
|
[Parameter]
|
|
public EventCallback OnPersonaActualizada { get; set; }
|
|
private List<ENUMERACIONES> lSexo = new List<ENUMERACIONES>();
|
|
private List<CONTRATOS> lTipoContra = new List<CONTRATOS>();
|
|
private List<ENUMERACIONES> lSindicato = new List<ENUMERACIONES>();
|
|
private List<ENUMERACIONES> lMutua = new List<ENUMERACIONES>();
|
|
private List<NOMINATRABAJADORLINEA> lConceptos = new List<NOMINATRABAJADORLINEA>();
|
|
private List<NOMINATRABAJADORPAGOESPECIE> lPagoEspecie= new List<NOMINATRABAJADORPAGOESPECIE>();
|
|
private List<INCIDENCIAS> lIncidencias= new List<INCIDENCIAS>();
|
|
private List<PERIODOSSILTRA> lSiltra= new List<PERIODOSSILTRA>();
|
|
private ValidationMessageStore? messageStore;
|
|
private string errorMessage = "";
|
|
public string nifDesencriptado { get; set; }
|
|
public int NominaDesencriptada { get; set; }
|
|
public string? cl { get; set; } = "";
|
|
public string? cn { get; set; } = "";
|
|
private Tabs tabsDtsPer { get; set; } = new Tabs();
|
|
private Tabs tabsDtsNom { get; set; } = new Tabs();
|
|
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)
|
|
{
|
|
Nomina = nuevo;
|
|
editContext = new EditContext(Nomina);
|
|
messageStore = new ValidationMessageStore(editContext);
|
|
listaIdentificadores.Clear();
|
|
}
|
|
private async Task abrirGuardar()
|
|
{
|
|
await popupConfirmacion.ShowAsync();
|
|
}
|
|
private async Task CerrarConfirmacion()
|
|
{
|
|
await popupConfirmacion.HideAsync();
|
|
}
|
|
private async Task OnTabShownAsync(TabsEventArgs args)
|
|
{
|
|
var panelActivo = args.ActiveTabName;
|
|
|
|
await ProtectedSessionStore.SetAsync("ultiTabNom", panelActivo);
|
|
|
|
}
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
EstablecerEditContext(new NOMINATRABAJADORCABECERA());
|
|
try
|
|
{
|
|
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
|
|
|
|
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue))
|
|
{
|
|
cl = clValue;
|
|
}
|
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
|
|
|
string clDesencriptado = tsUtilidades.crypt.FEncS(cl,
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
-875421649);
|
|
|
|
var clCn = clDesencriptado.Split("-");
|
|
nifDesencriptado = clCn[0];
|
|
NominaDesencriptada = Int32.Parse(clCn[1]);
|
|
var response = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
throw new Exception($"Error al obtener los datos de la persona. Código: {response.StatusCode}");
|
|
}
|
|
|
|
var resultContent = await response.Content.ReadAsStringAsync();
|
|
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContent) ?? throw new Exception("Error al deserializar los datos de la persona.");
|
|
var Nomi = Persona.NOMINATRABAJADORCABECERA?.FirstOrDefault(x => x.IDNOMINA == NominaDesencriptada);
|
|
EstablecerEditContext(Nomi);
|
|
lConceptos = new List<NOMINATRABAJADORLINEA>();
|
|
foreach (var lin in Nomina.NOMINATRABAJADORLINEA){lConceptos.Add(lin);}
|
|
lPagoEspecie = new List<NOMINATRABAJADORPAGOESPECIE>();
|
|
foreach(var pag in Nomina.NOMINATRABAJADORPAGOESPECIE){lPagoEspecie.Add(pag);}
|
|
lIncidencias = new List<INCIDENCIAS>();
|
|
foreach (var pag in Nomina.INCIDENCIAS) { lIncidencias.Add(pag); }
|
|
lSiltra = new List<PERIODOSSILTRA>();
|
|
foreach (var pag in Nomina.PERIODOSSILTRA) { lSiltra.Add(pag); }
|
|
// lblNombre = persona.NOMBRE + " " + Persona.APELLIDOS;
|
|
|
|
|
|
|
|
await CargarSelects();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
errorMessage = ex.Message;
|
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
cargando = false;
|
|
}
|
|
}
|
|
private string HashRed(string id)
|
|
{
|
|
string idper = Persona.IDPERSONA.ToString();
|
|
string idNom = Nomina.IDNOMINATRABAJADOR.ToString();
|
|
string link = "/PeriodoSiltra?cl=" + tsUtilidades.crypt.FEncS(
|
|
id,
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
875421649) + "&idp=" +
|
|
tsUtilidades.crypt.FEncS(
|
|
idper,
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
875421649) + "&idn=" +
|
|
tsUtilidades.crypt.FEncS(
|
|
idNom,
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*",
|
|
875421649);
|
|
return link;
|
|
}
|
|
private async Task CargarSelects()
|
|
{
|
|
try
|
|
{
|
|
|
|
lSexo = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SEXO");
|
|
lSindicato = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/SIND");
|
|
lMutua = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/EnumeracionesGrupo/MUT");
|
|
// lTipoContra = await Utilidades.ObtenerObjeto<List<CONTRATOS>>(cliente, "/api/CONTRATOS");
|
|
var responseTipCon = await cliente.GetAsync("/api/CONTRATOS/");
|
|
if (responseTipCon.IsSuccessStatusCode) { lTipoContra = JsonConvert.DeserializeObject<List<CONTRATOS>>(await responseTipCon.Content.ReadAsStringAsync()); }
|
|
|
|
StateHasChanged();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
errorMessage = ex.Message;
|
|
Console.WriteLine($"Error durante la inicialización: {ex.Message}");
|
|
}
|
|
|
|
}
|
|
private async Task GuardarNomina()
|
|
{
|
|
CerrarConfirmacion();
|
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
|
// ValidarTodos();
|
|
if (!editContext.GetValidationMessages().Any())
|
|
|
|
{
|
|
if (Nomina.IDNOMINATRABAJADOR== 0)//Nuevo
|
|
{
|
|
|
|
var response = await Utilidades.NuevoObjeto(cliente, "/api/NOMINATRABAJADORCABECERA", Nomina);
|
|
string link = "/NomPers?cl=" + tsUtilidades.crypt.FEncS(response.IDNOMINATRABAJADOR.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
|
|
NavigationManager.NavigateTo(link, forceLoad: true);
|
|
|
|
}
|
|
else//Actualizar
|
|
{
|
|
// Nomina.IMPORTESEGURO = null;
|
|
var responsea = await Utilidades.ActualizarObjeto(cliente, "/api/NOMINATRABAJADORCABECERA/" + Nomina.IDNOMINATRABAJADOR, Nomina);
|
|
var url = NavigationManager.ToAbsoluteUri(NavigationManager.Uri);
|
|
if (QueryHelpers.ParseQuery(url.Query).TryGetValue("cl", out var clValue)) { cl = clValue; }
|
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
|
var responsePers = await cliente.GetAsync($"/api/PERSONAS/PersonaNominaNif/{nifDesencriptado}");
|
|
if (!responsePers.IsSuccessStatusCode)
|
|
{
|
|
throw new Exception($"Error al obtener los datos de la persona. Código: {responsePers.StatusCode}");
|
|
}
|
|
|
|
var resultContentPers = await responsePers.Content.ReadAsStringAsync();
|
|
Persona = JsonConvert.DeserializeObject<PERSONAS>(resultContentPers) ?? throw new Exception("Error al deserializar los datos de la persona.");
|
|
Nomina = Persona.NOMINATRABAJADORCABECERA?.FirstOrDefault(x => x.IDNOMINA == NominaDesencriptada);
|
|
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Guardado correctamente.",
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var html = "";
|
|
html += "Revise los errores antes de guardar:";
|
|
foreach (string m in editContext.GetValidationMessages())
|
|
{
|
|
html += "\n" + m + ". ";
|
|
}
|
|
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Danger,
|
|
|
|
Message = html,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|