< Summary

Information
Class: FAU.Logica.Services.SituacionService
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/SituacionService.cs
Line coverage
80%
Covered lines: 58
Uncovered lines: 14
Coverable lines: 72
Total lines: 123
Line coverage: 80.5%
Branch coverage
73%
Covered branches: 22
Total branches: 30
Branch coverage: 73.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ObtenerTodosAsync()100%210%
CrearAsync()80%101093.1%
ActualizarAsync()70%272074.28%

File(s)

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

#LineLine coverage
 1using FAU.DataAccess.Repositories;
 2using FAU.Entidades;
 3using FAU.Logica.DTOs;
 4
 5namespace FAU.Logica.Services;
 6
 7public class SituacionService : ISituacionService
 8{
 9    private readonly ISituacionRepository _situacionRepository;
 10    private readonly IAuditoriaService _auditoriaService;
 11    private readonly ICurrentUserContext _currentUser;
 12
 713    public SituacionService(ISituacionRepository situacionRepository, IAuditoriaService auditoriaService, ICurrentUserCo
 14    {
 715        _situacionRepository = situacionRepository;
 716        _auditoriaService = auditoriaService;
 717        _currentUser = currentUser;
 718    }
 19
 20    public async Task<IEnumerable<SituacionDto>> ObtenerTodosAsync()
 21    {
 022        var situaciones = await _situacionRepository.ObtenerTodosAsync();
 023        return situaciones.Select(s => new SituacionDto { Id = s.Id, Codigo = s.Codigo, Denominacion = s.Denominacion })
 024    }
 25
 26    public async Task<(bool Exito, SituacionDto? Resultado, string? Error)> CrearAsync(CrearSituacionRequest request)
 27    {
 28        try
 29        {
 430            if (string.IsNullOrWhiteSpace(request.Codigo))
 131                return (false, null, "El código es requerido");
 32
 333            if (string.IsNullOrWhiteSpace(request.Denominacion))
 134                return (false, null, "La denominación es requerida");
 35
 236            if (await _situacionRepository.ExisteCodigoAsync(request.Codigo.Trim()))
 137                return (false, null, "Ya existe una situación con ese código");
 38
 139            var nueva = new Situacion
 140            {
 141                Codigo = request.Codigo.Trim(),
 142                Denominacion = request.Denominacion.Trim(),
 143                Descripcion = request.Descripcion?.Trim(),
 144                SistemaSalud = request.SistemaSalud,
 145                Calculador = request.Calculador?.Trim(),
 146                AfectaCobro = request.AfectaCobro,
 147                Vigente = request.Vigente
 148            };
 49
 150            var creada = await _situacionRepository.CrearAsync(nueva);
 51
 152            await _auditoriaService.LogAuditoriaAsync(
 153                usuarioId: _currentUser.UserId ?? 0,
 154                AccionEnum.CrearPersonal,
 155                ContextoEnum.Personal,
 156                host: _currentUser.Host,
 157                entidad: nameof(Situacion),
 158                entidadId: creada.Id,
 159                detalle: new { operacion = "crear", id = creada.Id, codigo = creada.Codigo });
 60
 161            return (true, new SituacionDto { Id = creada.Id, Codigo = creada.Codigo, Denominacion = creada.Denominacion 
 62        }
 063        catch (Exception ex)
 64        {
 065            return (false, null, $"Error al crear situación: {ex.Message}");
 66        }
 467    }
 68
 69    public async Task<(bool Exito, SituacionDto? Resultado, string? Error)> ActualizarAsync(long id, ActualizarSituacion
 70    {
 71        try
 72        {
 373            var situacion = await _situacionRepository.ObtenerPorIdAsync(id);
 374            if (situacion == null)
 175                return (false, null, "Situación no encontrada");
 76
 277            var snapshotAntes = new { id = situacion.Id, codigo = situacion.Codigo };
 78
 279            if (!string.IsNullOrWhiteSpace(request.Codigo))
 80            {
 181                var codigoNormalizado = request.Codigo.Trim();
 182                if (!string.Equals(situacion.Codigo, codigoNormalizado, StringComparison.Ordinal) && await _situacionRep
 183                    return (false, null, "Ya existe una situación con ese código");
 084                situacion.Codigo = codigoNormalizado;
 085            }
 86
 187            if (!string.IsNullOrWhiteSpace(request.Denominacion))
 188                situacion.Denominacion = request.Denominacion.Trim();
 89
 190            if (request.Descripcion != null)
 091                situacion.Descripcion = request.Descripcion.Trim();
 92
 193            if (!string.IsNullOrWhiteSpace(request.SistemaSalud))
 094                situacion.SistemaSalud = request.SistemaSalud;
 95
 196            if (request.Calculador != null)
 097                situacion.Calculador = request.Calculador.Trim();
 98
 199            if (request.AfectaCobro.HasValue)
 0100                situacion.AfectaCobro = request.AfectaCobro.Value;
 101
 1102            if (request.Vigente.HasValue)
 0103                situacion.Vigente = request.Vigente.Value;
 104
 1105            var actualizada = await _situacionRepository.ActualizarAsync(situacion);
 106
 1107            await _auditoriaService.LogAuditoriaAsync(
 1108                usuarioId: _currentUser.UserId ?? 0,
 1109                AccionEnum.ActualizarPersonal,
 1110                ContextoEnum.Personal,
 1111                host: _currentUser.Host,
 1112                entidad: nameof(Situacion),
 1113                entidadId: actualizada.Id,
 1114                detalle: new { operacion = "actualizar", antes = snapshotAntes, despues = new { id = actualizada.Id, cod
 115
 1116            return (true, new SituacionDto { Id = actualizada.Id, Codigo = actualizada.Codigo, Denominacion = actualizad
 117        }
 0118        catch (Exception ex)
 119        {
 0120            return (false, null, $"Error al actualizar situación: {ex.Message}");
 121        }
 3122    }
 123}