< Summary

Information
Class: FAU.DataAccess.Repositories.TablaPermanenciaRepository
Assembly: FAU.DataAccess
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/Repositories/TablaPermanenciaRepository.cs
Line coverage
81%
Covered lines: 65
Uncovered lines: 15
Coverable lines: 80
Total lines: 140
Line coverage: 81.2%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetByIdAsync()100%11100%
GetPagedAsync()75%4495.23%
GetAllAsync()100%11100%
GetAllWithIncludesAsync()100%210%
CreateAsync()100%11100%
UpdateAsync()50%2285.71%
DeleteAsync()100%22100%
ExistsOverlapAsync()100%22100%
ExistsByIdAsync()100%210%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/Repositories/TablaPermanenciaRepository.cs

#LineLine coverage
 1using FAU.Entidades;
 2using Microsoft.EntityFrameworkCore;
 3
 4namespace FAU.DataAccess.Repositories;
 5
 6public class TablaPermanenciaRepository : ITablaPermanenciaRepository
 7{
 8    private readonly ApplicationDbContext _context;
 9
 1010    public TablaPermanenciaRepository(ApplicationDbContext context)
 11    {
 1012        _context = context;
 1013    }
 14
 15    public async Task<TablaPermanencia?> GetByIdAsync(long id)
 16    {
 517        return await _context.TablaPermanencias
 518            .AsNoTracking()
 519            .Include(t => t.Escalafon)
 520            .Include(t => t.Grado)
 521            .FirstOrDefaultAsync(t => t.Id == id && t.Activo);
 522    }
 23
 24    public async Task<(IEnumerable<TablaPermanencia> Items, int TotalCount)> GetPagedAsync(
 25        int page,
 26        int pageSize,
 27        long? escalafonId = null,
 28        long? gradoId = null)
 29    {
 130        var query = _context.TablaPermanencias
 131            .AsNoTracking()
 132            .Where(t => t.Activo)
 133            .Include(t => t.Escalafon)
 134            .Include(t => t.Grado)
 135            .AsQueryable();
 36
 137        if (escalafonId.HasValue)
 138            query = query.Where(t => t.EscalafonId == escalafonId.Value);
 39
 140        if (gradoId.HasValue)
 041            query = query.Where(t => t.GradoId == gradoId.Value);
 42
 143        var totalCount = await query.CountAsync();
 44
 145        var items = await query
 146            .OrderBy(t => t.EscalafonId)
 147            .ThenBy(t => t.GradoId)
 148            .ThenBy(t => t.AplicaRiesgoVuelo)
 149            .ThenBy(t => t.MesesDesde)
 150            .Skip((page - 1) * pageSize)
 151            .Take(pageSize)
 152            .ToListAsync();
 53
 154        return (items, totalCount);
 155    }
 56
 57    public async Task<IEnumerable<TablaPermanencia>> GetAllAsync()
 58    {
 259        return await _context.TablaPermanencias
 260            .AsNoTracking()
 261            .Where(t => t.Activo)
 262            .OrderBy(t => t.EscalafonId)
 263            .ThenBy(t => t.GradoId)
 264            .ThenBy(t => t.AplicaRiesgoVuelo)
 265            .ThenBy(t => t.MesesDesde)
 266            .ToListAsync();
 267    }
 68
 69    public async Task<IEnumerable<TablaPermanencia>> GetAllWithIncludesAsync()
 70    {
 071        return await _context.TablaPermanencias
 072            .AsNoTracking()
 073            .Where(t => t.Activo)
 074            .Include(t => t.Escalafon)
 075            .Include(t => t.Grado)
 076            .OrderBy(t => t.EscalafonId)
 077            .ThenBy(t => t.GradoId)
 078            .ThenBy(t => t.AplicaRiesgoVuelo)
 079            .ThenBy(t => t.MesesDesde)
 080            .ToListAsync();
 081    }
 82
 83    public async Task<TablaPermanencia> CreateAsync(TablaPermanencia tablaPermanencia)
 84    {
 1185        _context.TablaPermanencias.Add(tablaPermanencia);
 1186        await _context.SaveChangesAsync();
 1187        return tablaPermanencia;
 1188    }
 89
 90    public async Task<TablaPermanencia> UpdateAsync(TablaPermanencia tablaPermanencia)
 91    {
 92        // Si ya existe una instancia trackeada con el mismo Id, actualizamos sus valores
 93        // en vez de intentar añadir una nueva (evita IdentityConflict).
 194        var tracked = _context.ChangeTracker.Entries<TablaPermanencia>()
 295            .FirstOrDefault(e => e.Entity.Id == tablaPermanencia.Id);
 196        if (tracked is not null)
 197            tracked.CurrentValues.SetValues(tablaPermanencia);
 98        else
 099            _context.TablaPermanencias.Update(tablaPermanencia);
 1100        await _context.SaveChangesAsync();
 1101        return tablaPermanencia;
 1102    }
 103
 104    public async Task DeleteAsync(long id)
 105    {
 3106        var entidad = await _context.TablaPermanencias.FindAsync(id);
 3107        if (entidad != null)
 108        {
 3109            entidad.Activo = false;
 3110            await _context.SaveChangesAsync();
 111        }
 3112    }
 113
 114    public async Task<bool> ExistsOverlapAsync(
 115        long escalafonId,
 116        long gradoId,
 117        short mesesDesde,
 118        short mesesHasta,
 119        bool aplicaRiesgoVuelo,
 120        long? excludingId = null)
 121    {
 6122        var query = _context.TablaPermanencias
 6123            .Where(t => t.Activo &&
 6124                        t.EscalafonId == escalafonId &&
 6125                        t.GradoId == gradoId &&
 6126                        t.AplicaRiesgoVuelo == aplicaRiesgoVuelo &&
 6127                        t.MesesDesde <= mesesHasta &&
 6128                        t.MesesHasta >= mesesDesde);
 129
 6130        if (excludingId.HasValue)
 1131            query = query.Where(t => t.Id != excludingId.Value);
 132
 6133        return await query.AnyAsync();
 6134    }
 135
 136    public async Task<bool> ExistsByIdAsync(long id)
 137    {
 0138        return await _context.TablaPermanencias.AnyAsync(t => t.Id == id && t.Activo);
 0139    }
 140}