< 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: 131
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.Http;
 6using Microsoft.AspNetCore.Mvc;
 7
 8namespace FAU.API.Controllers;
 9
 10[ApiController]
 11[Route("api/parametros-liquidacion")]
 12[Authorize(Roles = "Administrador")]
 13[Produces("application/json")]
 14public class ParametrosLiquidacionController : ControllerBase
 15{
 16    private readonly IParametroLiquidacionService _service;
 17    private readonly ILogger<ParametrosLiquidacionController> _logger;
 18
 619    public ParametrosLiquidacionController(
 620        IParametroLiquidacionService service,
 621        ILogger<ParametrosLiquidacionController> logger)
 22    {
 623        _service = service;
 624        _logger = logger;
 625    }
 26
 27    /// <summary>
 28    /// Obtener parámetros de liquidación actuales
 29    /// GET /api/parametros-liquidacion
 30    /// </summary>
 31    [HttpGet]
 32    [ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
 33    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 34    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 35    public async Task<IActionResult> GetActual()
 36    {
 37        try
 38        {
 239            var parametro = await _service.ObtenerActualAsync();
 240            if (parametro == null)
 141                return NotFound(ApiResponse<string>.ErrorResult("No existe configuración de parámetros"));
 42
 143            return Ok(ApiResponse<object>.SuccessResult(parametro));
 44        }
 045        catch (Exception ex)
 46        {
 047            _logger.LogError(ex, "Error al obtener parámetros de liquidación");
 048            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 49        }
 250    }
 51
 52    /// <summary>
 53    /// Guardar parámetros de liquidación (crear o actualizar)
 54    /// PUT /api/parametros-liquidacion
 55    /// </summary>
 56    [HttpPut]
 57    [ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
 58    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 59    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status401Unauthorized)]
 60    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 61    public async Task<IActionResult> Guardar([FromBody] ConfigurarParametrosLiquidacionRequest request)
 62    {
 63        try
 64        {
 265            var usuarioIdStr = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
 266            if (!long.TryParse(usuarioIdStr, out var usuarioId))
 067                return Unauthorized(ApiResponse<string>.ErrorResult("No se pudo identificar al usuario"));
 68
 269            var (success, parametro, error) = await _service.GuardarAsync(usuarioId, request);
 270            if (!success)
 171                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al guardar parámetros"));
 72
 173            return Ok(ApiResponse<object>.SuccessResult(parametro!, "Parámetros de liquidación guardados exitosamente"))
 74        }
 075        catch (Exception ex)
 76        {
 077            _logger.LogError(ex, "Error al guardar parámetros de liquidación");
 078            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 79        }
 280    }
 81
 82    /// <summary>
 83    /// Obtener franjas IRPF actuales
 84    /// GET /api/parametros-liquidacion/franjas-irpf
 85    /// </summary>
 86    [HttpGet("franjas-irpf")]
 87    [ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
 88    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 89    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 90    public async Task<IActionResult> GetFranjas()
 91    {
 92        try
 93        {
 194            var configuracion = await _service.ObtenerFranjasAsync();
 195            if (configuracion == null)
 096                return NotFound(ApiResponse<string>.ErrorResult("No existen franjas IRPF configuradas"));
 97
 198            return Ok(ApiResponse<object>.SuccessResult(configuracion!));
 99        }
 0100        catch (Exception ex)
 101        {
 0102            _logger.LogError(ex, "Error al obtener franjas IRPF");
 0103            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 104        }
 1105    }
 106
 107    /// <summary>
 108    /// Guardar franjas IRPF (reemplaza todas las existentes)
 109    /// PUT /api/parametros-liquidacion/franjas-irpf
 110    /// </summary>
 111    [HttpPut("franjas-irpf")]
 112    [ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
 113    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 114    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 115    public async Task<IActionResult> GuardarFranjas([FromBody] ConfigurarFranjasIrpfRequest request)
 116    {
 117        try
 118        {
 1119            var (success, configuracion, error) = await _service.GuardarFranjasAsync(request);
 1120            if (!success)
 1121                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al guardar franjas IRPF"));
 122
 0123            return Ok(ApiResponse<object>.SuccessResult(configuracion!, "Franjas IRPF guardadas exitosamente"));
 124        }
 0125        catch (Exception ex)
 126        {
 0127            _logger.LogError(ex, "Error al guardar franjas IRPF");
 0128            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 129        }
 1130    }
 131}