< Summary

Information
Class: FAU.Logica.Services.InsumosPeriodoLoader
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/InsumosPeriodoLoader.cs
Line coverage
97%
Covered lines: 74
Uncovered lines: 2
Coverable lines: 76
Total lines: 113
Line coverage: 97.3%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CargarAsync()50%4496.77%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/InsumosPeriodoLoader.cs

#LineLine coverage
 1using FAU.DataAccess;
 2using FAU.Entidades;
 3using FAU.Logica.DTOs;
 4using Microsoft.EntityFrameworkCore;
 5
 6namespace FAU.Logica.Services;
 7
 8public class InsumosPeriodoLoader : IInsumosPeriodoLoader
 9{
 10    private readonly ApplicationDbContext _context;
 11
 112    public InsumosPeriodoLoader(ApplicationDbContext context)
 13    {
 114        _context = context;
 115    }
 16
 17    public async Task<InsumosPeriodo> CargarAsync(long periodoId)
 18    {
 119        var periodo = await _context.PeriodosLiquidacion
 120            .AsNoTracking()
 121            .FirstOrDefaultAsync(p => p.Id == periodoId && p.Activo);
 22
 123        if (periodo is null)
 24        {
 025            throw new InvalidOperationException($"Periodo de liquidación {periodoId} no encontrado o no está activo.");
 26        }
 27
 128        var periodoDate = new DateTime(periodo.Anio, periodo.Mes, 1);
 29
 130        var parametros = await _context.ParametrosPeriodo
 131            .AsNoTracking()
 132            .FirstOrDefaultAsync(pp => pp.Anio == periodo.Anio && pp.Mes == periodo.Mes);
 33
 134        if (parametros is null)
 35        {
 036            throw new InvalidOperationException($"Parámetros de período para {periodo.Anio}/{periodo.Mes} no encontrados
 37        }
 38
 139        var catalogoItems = await _context.CatalogoItems
 140            .AsNoTracking()
 141            .ToListAsync();
 42
 143        var remuneraciones = await _context.RemuneracionesGrado
 144            .AsNoTracking()
 145            .Include(r => r.Item)
 146            .Where(r => r.VigenteDesde <= periodoDate && (r.VigenteHasta == null || r.VigenteHasta >= periodoDate))
 147            .ToListAsync();
 48
 149        var permanencias = await _context.Set<TablaPermanencia>()
 150            .AsNoTracking()
 151            .Where(t => t.VigenteDesde <= periodoDate && (t.VigenteHasta == null || t.VigenteHasta >= periodoDate))
 152            .ToListAsync();
 53
 154        var franjasIrpf = await _context.FranjasIrpf
 155            .AsNoTracking()
 156            .Where(f => f.VigenteDesde <= periodoDate && (f.VigenteHasta == null || f.VigenteHasta >= periodoDate))
 157            .OrderBy(f => f.NumeroFranja)
 158            .ToListAsync();
 59
 160        var beneficios = await _context.BeneficiosSociales
 161            .AsNoTracking()
 162            .Where(b => b.Estado == "activo" && b.VigenteDesde <= periodoDate && (b.VigenteHasta == null || b.VigenteHas
 163            .ToListAsync();
 64
 165        var compensaciones = await _context.ItemsLoteCompensacion
 166            .AsNoTracking()
 167            .Include(i => i.LoteCompensacion)
 168            .Where(i => i.LoteCompensacion.Estado == "aprobado"
 169                        && i.LoteCompensacion.Periodo.Year == periodo.Anio
 170                        && i.LoteCompensacion.Periodo.Month == periodo.Mes)
 171            .ToListAsync();
 72
 173        var novedadesConfirmadas = await _context.NovedadesPeriodo
 174            .AsNoTracking()
 175            .Where(n => n.PeriodoId == periodoId && n.Estado == "confirmada")
 176            .ToListAsync();
 77
 178        var remuneracionesPorGrado = remuneraciones
 179            .GroupBy(r => r.GradoId)
 180            .ToDictionary(
 181                g => g.Key,
 282                g => (IReadOnlyDictionary<int, RemuneracionGrado>)g
 483                    .ToDictionary(r => r.Item.Codigo, r => r));
 84
 185        var permanenciasPorEscalafon = permanencias
 186            .GroupBy(t => t.EscalafonId)
 487            .ToDictionary(g => g.Key, g => (IReadOnlyList<TablaPermanencia>)g.OrderBy(t => t.AniosDesde).ToList());
 88
 189        var beneficiosPorPersona = beneficios
 190            .GroupBy(b => b.PersonaId)
 391            .ToDictionary(g => g.Key, g => (IReadOnlyList<BeneficioSocial>)g.ToList());
 92
 193        var compensacionesPorPersona = compensaciones
 194            .GroupBy(i => i.PersonaId)
 395            .ToDictionary(g => g.Key, g => (IReadOnlyList<ItemLoteCompensacion>)g.ToList());
 96
 197        var novedadesPorPersona = novedadesConfirmadas
 398            .ToDictionary(n => n.PersonaId, n => (NovedadPeriodo?)n);
 99
 1100        return new InsumosPeriodo
 1101        {
 1102            PeriodoId = periodoId,
 1103            ParametroPeriodo = parametros,
 1104            CatalogoItems = catalogoItems,
 1105            RemuneracionesPorGrado = remuneracionesPorGrado,
 1106            PermanenciasPorEscalafon = permanenciasPorEscalafon,
 1107            FranjasIrpf = franjasIrpf,
 1108            BeneficiosPorPersona = beneficiosPorPersona,
 1109            CompensacionesPorPersona = compensacionesPorPersona,
 1110            NovedadesPorPersona = novedadesPorPersona
 1111        };
 1112    }
 113}