< Summary

Information
Class: FAU.API.Controllers.ParametrosLiquidacionController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/ParametrosLiquidacionController.cs
Line coverage
63%
Covered lines: 26
Uncovered lines: 15
Coverable lines: 41
Total lines: 116
Line coverage: 63.4%
Branch coverage
62%
Covered branches: 10
Total branches: 16
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetActual()100%2262.5%
Guardar()62.5%11863.63%
GetFranjas()50%3250%
GuardarFranjas()50%6450%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/ParametrosLiquidacionController.cs

#LineLine coverage
 1using System.Security.Claims;
 2using FAU.Logica.DTOs;
 3using FAU.Logica.Services;
 4using Microsoft.AspNetCore.Authorization;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9[ApiController]
 10[Route("api/parametros-liquidacion")]
 11[Authorize(Roles = "Administrador")]
 12public class ParametrosLiquidacionController : ControllerBase
 13{
 14    private readonly IParametroLiquidacionService _service;
 15    private readonly ILogger<ParametrosLiquidacionController> _logger;
 16
 617    public ParametrosLiquidacionController(
 618        IParametroLiquidacionService service,
 619        ILogger<ParametrosLiquidacionController> logger)
 20    {
 621        _service = service;
 622        _logger = logger;
 623    }
 24
 25    /// <summary>
 26    /// Obtener parámetros de liquidación actuales
 27    /// GET /api/parametros-liquidacion
 28    /// </summary>
 29    [HttpGet]
 30    public async Task<IActionResult> GetActual()
 31    {
 32        try
 33        {
 234            var parametro = await _service.ObtenerActualAsync();
 235            if (parametro == null)
 136                return NotFound(ApiResponse<string>.ErrorResult("No existe configuración de parámetros"));
 37
 138            return Ok(ApiResponse<object>.SuccessResult(parametro));
 39        }
 040        catch (Exception ex)
 41        {
 042            _logger.LogError(ex, "Error al obtener parámetros de liquidación");
 043            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 44        }
 245    }
 46
 47    /// <summary>
 48    /// Guardar parámetros de liquidación (crear o actualizar)
 49    /// PUT /api/parametros-liquidacion
 50    /// </summary>
 51    [HttpPut]
 52    public async Task<IActionResult> Guardar([FromBody] ConfigurarParametrosLiquidacionRequest request)
 53    {
 54        try
 55        {
 256            var usuarioIdStr = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
 257            if (!long.TryParse(usuarioIdStr, out var usuarioId))
 058                return Unauthorized(ApiResponse<string>.ErrorResult("No se pudo identificar al usuario"));
 59
 260            var (success, parametro, error) = await _service.GuardarAsync(usuarioId, request);
 261            if (!success)
 162                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al guardar parámetros"));
 63
 164            return Ok(ApiResponse<object>.SuccessResult(parametro, "Parámetros de liquidación guardados exitosamente"));
 65        }
 066        catch (Exception ex)
 67        {
 068            _logger.LogError(ex, "Error al guardar parámetros de liquidación");
 069            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 70        }
 271    }
 72
 73    /// <summary>
 74    /// Obtener franjas IRPF actuales
 75    /// GET /api/parametros-liquidacion/franjas-irpf
 76    /// </summary>
 77    [HttpGet("franjas-irpf")]
 78    public async Task<IActionResult> GetFranjas()
 79    {
 80        try
 81        {
 182            var configuracion = await _service.ObtenerFranjasAsync();
 183            if (configuracion == null)
 084                return NotFound(ApiResponse<string>.ErrorResult("No existen franjas IRPF configuradas"));
 85
 186            return Ok(ApiResponse<object>.SuccessResult(configuracion));
 87        }
 088        catch (Exception ex)
 89        {
 090            _logger.LogError(ex, "Error al obtener franjas IRPF");
 091            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 92        }
 193    }
 94
 95    /// <summary>
 96    /// Guardar franjas IRPF (reemplaza todas las existentes)
 97    /// PUT /api/parametros-liquidacion/franjas-irpf
 98    /// </summary>
 99    [HttpPut("franjas-irpf")]
 100    public async Task<IActionResult> GuardarFranjas([FromBody] ConfigurarFranjasIrpfRequest request)
 101    {
 102        try
 103        {
 1104            var (success, configuracion, error) = await _service.GuardarFranjasAsync(request);
 1105            if (!success)
 1106                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al guardar franjas IRPF"));
 107
 0108            return Ok(ApiResponse<object>.SuccessResult(configuracion, "Franjas IRPF guardadas exitosamente"));
 109        }
 0110        catch (Exception ex)
 111        {
 0112            _logger.LogError(ex, "Error al guardar franjas IRPF");
 0113            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 114        }
 1115    }
 116}