< Summary

Information
Class: FAU.API.Controllers.LiquidacionesController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/LiquidacionesController.cs
Line coverage
100%
Covered lines: 40
Uncovered lines: 0
Coverable lines: 40
Total lines: 130
Line coverage: 100%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.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%
GenerarLiquidacion()83.33%66100%
ObtenerEstados()100%11100%
ObtenerItems()100%11100%
ObtenerResumenes()100%11100%
ObtenerVersiones()100%11100%
get_PeriodoId()100%11100%
get_Version()100%11100%

File(s)

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

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Http;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9[ApiController]
 10[Route("api/liquidacion/[controller]")]
 11[Authorize]
 12[Produces("application/json")]
 13public class LiquidacionesController : ControllerBase
 14{
 15    private readonly ILiquidacionService _liquidacionService;
 16    private readonly ILogger<LiquidacionesController> _logger;
 17
 1418    public LiquidacionesController(ILiquidacionService liquidacionService, ILogger<LiquidacionesController> logger)
 19    {
 1420        _liquidacionService = liquidacionService;
 1421        _logger = logger;
 1422    }
 23
 24    [HttpPost("generar")]
 25    [Authorize(Roles = "Administrador,Usuario")]
 26    [ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
 27    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 28    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 29    public async Task<IActionResult> GenerarLiquidacion([FromBody] GenerarLiquidacionRequest request)
 30    {
 31        try
 32        {
 433            if (!ModelState.IsValid)
 34            {
 135                return BadRequest(ApiResponse<string>.ErrorResult("Solicitud de generación inválida"));
 36            }
 37
 338            var (success, error, version) = await _liquidacionService.GenerarLiquidacionAsync(request.PeriodoId);
 239            if (!success)
 40            {
 141                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al generar la liquidación"));
 42            }
 43
 144            return Ok(ApiResponse<object>.SuccessResult(new { request.PeriodoId, Version = version }, "Liquidación gener
 45        }
 146        catch (Exception ex)
 47        {
 148            _logger.LogError(ex, "Error al generar liquidación para periodo {PeriodoId} version {Version}", request.Peri
 149            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 50        }
 451    }
 52
 53    [HttpGet("estados")]
 54    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 55    [ProducesResponseType(typeof(ApiResponse<IEnumerable<CalculoEstadoDto>>), StatusCodes.Status200OK)]
 56    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 57    public async Task<IActionResult> ObtenerEstados([FromQuery] long periodoId, [FromQuery] int? version = null)
 58    {
 59        try
 60        {
 361            var estados = await _liquidacionService.ObtenerEstadosAsync(periodoId, version);
 262            return Ok(ApiResponse<IEnumerable<CalculoEstadoDto>>.SuccessResult(estados, "Estados de liquidación obtenido
 63        }
 164        catch (Exception ex)
 65        {
 166            _logger.LogError(ex, "Error al obtener estados de liquidación para periodo {PeriodoId} version {Version}", p
 167            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 68        }
 369    }
 70
 71    [HttpGet("items")]
 72    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 73    [ProducesResponseType(typeof(ApiResponse<IEnumerable<CalculoItemDto>>), StatusCodes.Status200OK)]
 74    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 75    public async Task<IActionResult> ObtenerItems([FromQuery] long periodoId, [FromQuery] int? version = null, [FromQuer
 76    {
 77        try
 78        {
 379            var items = await _liquidacionService.ObtenerItemsAsync(periodoId, version, cedula);
 280            return Ok(ApiResponse<IEnumerable<CalculoItemDto>>.SuccessResult(items, "Items de liquidación obtenidos"));
 81        }
 182        catch (Exception ex)
 83        {
 184            _logger.LogError(ex, "Error al obtener items de liquidación para periodo {PeriodoId} version {Version}", per
 185            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 86        }
 387    }
 88
 89    [HttpGet("resumenes")]
 90    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 91    [ProducesResponseType(typeof(ApiResponse<IEnumerable<LiquidacionResumenDto>>), StatusCodes.Status200OK)]
 92    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 93    public async Task<IActionResult> ObtenerResumenes([FromQuery] long periodoId, [FromQuery] int? version = null)
 94    {
 95        try
 96        {
 297            var resumenes = await _liquidacionService.ObtenerResumenAsync(periodoId, version);
 198            return Ok(ApiResponse<IEnumerable<LiquidacionResumenDto>>.SuccessResult(resumenes, "Resumen de liquidación o
 99        }
 1100        catch (Exception ex)
 101        {
 1102            _logger.LogError(ex, "Error al obtener resumen de liquidación para periodo {PeriodoId} version {Version}", p
 1103            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 104        }
 2105    }
 106
 107    [HttpGet("versiones")]
 108    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 109    [ProducesResponseType(typeof(ApiResponse<IEnumerable<int>>), StatusCodes.Status200OK)]
 110    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 111    public async Task<IActionResult> ObtenerVersiones([FromQuery] long periodoId)
 112    {
 113        try
 114        {
 2115            var versiones = await _liquidacionService.ObtenerVersionesAsync(periodoId);
 1116            return Ok(ApiResponse<IEnumerable<int>>.SuccessResult(versiones, "Versiones de liquidación obtenidas"));
 117        }
 1118        catch (Exception ex)
 119        {
 1120            _logger.LogError(ex, "Error al obtener versiones de liquidación para periodo {PeriodoId}", periodoId);
 1121            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 122        }
 2123    }
 124
 125    public class GenerarLiquidacionRequest
 126    {
 9127        public long PeriodoId { get; set; }
 5128        public int Version { get; set; }
 129    }
 130}