Files
Antifraude.Net/Antifraude.Net/GestionPersonalWeb/Components/Pages/GenerarNominas.razor
Alejandro f802842c1f - En el listado de nominas por año, dejar Total Devengado y Total liquido y meter un desplegable de acciones. COMENTAR COMO TRASLADAR ALGUNAS DE LAS FUNCIONES
- 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 .
2026-09-21 12:38:10 +02:00

259 lines
11 KiB
Plaintext

@page "/GenNominas"
@using BlazorBootstrap
@using Newtonsoft.Json
@using GestionPersonalWeb.Components.Layout
@using Microsoft.AspNetCore.WebUtilities
@using GestionPersonalWeb.Components.Pages.InfoPersComponents
@using GestionPersonalWeb.Models
@using System.Linq.Expressions
@using Serialize.Linq.Serializers
@using System.Net.Http.Headers
@using bdAntifraude.clases
@using bdAntifraude.db
@using System.Reflection
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JSRuntime
@inject IJSRuntime JS
@rendermode InteractiveServer
@inject NavigationManager NavigationManager
@inject IHttpClientFactory HttpClientFactory
@inject IHttpContextAccessor HttpContextAccessor
@inject UserState UserState
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
<div class="mt-3">
<div class="row">
<div class="col-md-6">
<label class="fw-bold">Mes a Generar: </label>
<InputSelect @bind-Value="IDNOMINASEL" @bind-Value:after="CargarPersonas">
<option value="0">-</option>
@foreach (var nom in listNoms)
{
<option value="@nom.IDNOMINAS">@nom.DESCRIPCION</option>
}
</InputSelect>
</div>
<div class="col-md-2"></div>
<div class="col-md-4">
<input type="button" value="Generar Nómina" onclick="@GenerarNomina" />
</div>
</div>
<div style=" max-height:400px;overflow-y:auto">
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="PERSONAS"
Class="table tablaRegPers"
Data="listPersonas"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
<GridColumn TItem="PERSONAS" HeaderText="Generar" FilterButtonCSSClass="hidden">
<input class="chbGenNom" value="@context.IDPERSONA" type="checkbox" checked="@Seleccionados.Contains(context.IDPERSONA)"
@onchange="e => Toggle(context.IDPERSONA, (bool)e.Value!)" />
</GridColumn>
<GridColumn TItem="PERSONAS" HeaderText="N.I.F." PropertyName="NIF" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.NIF">
@context.NIF
</GridColumn>
<GridColumn TItem="PERSONAS" HeaderText="Nombre Completo" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.APELLIDOSNOMBRE">
@context.APELLIDOSNOMBRE
</GridColumn>
<GridColumn TItem="PERSONAS" HeaderText="Tipo" PropertyName="Cuerpo" TextNoWrap="true" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDCUERPORPTNavigation.DESCRIPCION">
@context.IDCUERPORPTNavigation?.DESCRIPCION
</GridColumn>
<GridColumn TItem="PERSONAS" HeaderText="Fecha Alta" PropertyName="FechaAltaPAR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHAALTAPAR">
@context.FECHAALTAPAR?.ToString("dd/MM/yyyy")
</GridColumn>
<GridColumn TItem="PERSONAS" HeaderText="Fecha Baja" PropertyName="FechaBajaPAR" FilterButtonCSSClass="hidden" SortKeySelector="item => item.FECHABAJAPAR">
@context.FECHABAJAPAR?.ToString("dd/MM/yyyy")
</GridColumn>
</GridColumns>
</Grid>
</div>
</div>
<div style=" max-height:400px;overflow-y:auto">
<div style="overflow-x:auto;" class="tablaDesk">
<Grid TItem="NOMINATRABAJADORCABECERA"
Class="table tablaRegPers"
Data="listNomGen"
AllowFiltering="false"
AllowPaging="false"
AllowSorting="true"
EmptyText="No se han encontrado datos"
Height="80"
PageSizeSelectorVisible="false"
Responsive="true"
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
<GridColumns>
@*
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.IDPERSONANavigation.APELLIDOSNOMBRE">
@context.IDPERSONANavigation.APELLIDOSNOMBRE
</GridColumn>
<GridColumn TItem="NOMINATRABAJADORCABECERA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.">
@context.IDPERSONANavigation.APELLIDOSNOMBRE
</GridColumn> *@
@* <GridColumn TItem="NOMINATRABAJADORLINEA" HeaderText="Nombre" PropertyName="ApellidosNombre" FilterButtonCSSClass="hidden" SortKeySelector="item => item.tramo">
@context.CODIGO
</GridColumn> *@
</GridColumns>
</Grid>
</div>
</div>
</div>
@code {
// pruebaagu
List<int> Seleccionados = new();
private List<NOMINAS> listNoms = new List<NOMINAS>();
private int IDNOMINASEL { get; set; }
private List<int> listaUsus = new List<int>();
private List<PERSONAS> listPersonas = new List<PERSONAS>();
private List<NOMINATRABAJADORCABECERA> listNomGen = new List<NOMINATRABAJADORCABECERA>();
protected override async Task OnInitializedAsync()
{
var token = UserState.Token;
var client = HttpClientFactory.CreateClient();
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var resultPersonas = await client.GetAsync("/api/NOMINAS");
var resultContent = await resultPersonas.Content.ReadAsStringAsync();
var nominas = JsonConvert.DeserializeObject<List<NOMINAS>>(resultContent)
?? new List<NOMINAS>();
nominas = nominas.OrderByDescending(x => x.FECHAINICIO)
.ThenBy(x => x.DESCRIPCION)
// .ThenByDescending(x => x.FECHAALTA)
.ToList();
listNoms = nominas;
}
void Toggle(int id, bool value)
{
if (value) Seleccionados.Add(id);
else Seleccionados.Remove(id);
Console.WriteLine(id);
StateHasChanged();
}
protected async void CargarPersonas()
{
Seleccionados.Clear();
var idnom = IDNOMINASEL;
NOMINAS nomAct = listNoms.FirstOrDefault(x => x.IDNOMINAS == IDNOMINASEL);
var token = UserState.Token;
var client = HttpClientFactory.CreateClient();
client.BaseAddress = new Uri(Utilidades.urlSwagger());
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
List<PERSONAS> persi = new List<PERSONAS>();
Expression < Func<PERSONAS, bool> > filtroPers3 = x => x.FECHABAJA.HasValue == false && x.FECHAALTA.HasValue;
persi = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers3);
Expression<Func<INCIDENCIAS, bool>> filtroPersi = x => (x.ESDELIQUIDACION == false && x.IDNOMINA == idnom) || (x.MESNOMINA == nomAct.MES && x.AÑONOMINA == nomAct.AÑO && x.NOMINASEGURIDADSOCIAL == true && x.ESDELIQUIDACION == false && nomAct.IDTIPONavigation.DESCRIPCION.Trim() == "SEGURIDAD SOCIAL");
List<INCIDENCIAS> Incipersi = await Utilidades.ObtenerObjeto<List<INCIDENCIAS>>(client, "/api/INCIDENCIAS/filtrar", filtroPersi);
if (Incipersi != null && Incipersi.Count > 0)
{
foreach (INCIDENCIAS inci in Incipersi)
{
if (persi.Any(x=>x.IDPERSONA == inci.IDPERSONANavigation.IDPERSONA)==false){
persi.Add(inci.IDPERSONANavigation);
}
};
}
Expression<Func<PERSONAS, bool>> filtroPers = x => x.FECHABAJA.HasValue && (x.FECHABAJA >= nomAct.FECHAINICIO && x.FECHABAJA <= nomAct.FECHAFIN);
List<PERSONAS> pers = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers);
if (pers != null && pers.Count > 0)
{
foreach (PERSONAS inci in pers)
{
if (persi.Any(x => x.IDPERSONA == inci.IDPERSONA) == false)
{
persi.Add(inci);
}
};
}
var fechaFin = nomAct.FECHAINICIO.Value.AddDays(-1);
Expression<Func<PERSONAS, bool>> filtroPers2 = x => x.FECHABAJA.HasValue && (x.FECHABAJA == fechaFin);
List<PERSONAS> DipFinLeg = await Utilidades.ObtenerObjeto<List<PERSONAS>>(client, "/api/PERSONAS/filtrar", filtroPers2);
if (DipFinLeg != null && DipFinLeg.Count > 0)
{
foreach (PERSONAS inci in DipFinLeg)
{
if (persi.Any(x => x.IDPERSONA == inci.IDPERSONA) == false)
{
persi.Add(inci);
}
};
}
listPersonas = persi;
listPersonas = listPersonas
.OrderBy(x => x.APELLIDOS)
.ThenBy(x => x.NOMBRE)
.ThenByDescending(x => x.FECHAALTA)
.ToList();
StateHasChanged();
}
protected async void GenerarNomina()
{
DatGenNom objetoConsulta = new DatGenNom();
try
{
if (Seleccionados.Count > 0)
{
objetoConsulta.Personas = Seleccionados;
objetoConsulta.Idnomina = IDNOMINASEL;
var token = UserState.Token;
var client = HttpClientFactory.CreateClient();
client.BaseAddress = new Uri(Utilidades.urlSwagger2());
// client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("/api/GeneraNominas", objetoConsulta);
var content = await response.Content.ReadAsStringAsync();
var resultado = JsonConvert.DeserializeObject<ResultadoGenerarNomina>(content);
if(resultado.Resultado == 0)
{
Console.WriteLine(resultado.NumNomGen);
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error al obtener los datos: {e.Message}");
}
}
}