< 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
86%
Covered lines: 40
Uncovered lines: 6
Coverable lines: 46
Total lines: 148
Line coverage: 86.9%
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%
ObtenerResumen()100%210%
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
 1618    public LiquidacionesController(ILiquidacionService liquidacionService, ILogger<LiquidacionesController> logger)
 19    {
 1620        _liquidacionService = liquidacionService;
 1621        _logger = logger;
 1622    }
 23
 24    [HttpPost("generar")]
 25    [Authorize(Roles = "Administrador,Supervisor,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, [FromQu
 58    {
 59        try
 60        {
 561            var estados = await _liquidacionService.ObtenerEstadosAsync(periodoId, version, page, pageSize, cedula, esta
 462            return Ok(ApiResponse<object>.SuccessResult(estados, "Estados de liquidación obtenidos"));
 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        }
 569    }
 70
 71    [HttpGet("resumen")]
 72    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 73    [ProducesResponseType(typeof(ApiResponse<EstadosResumenDto>), StatusCodes.Status200OK)]
 74    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 75    public async Task<IActionResult> ObtenerResumen([FromQuery] long periodoId, [FromQuery] int? version = null)
 76    {
 77        try
 78        {
 079            var resumen = await _liquidacionService.ObtenerEstadosResumenAsync(periodoId, version);
 080            return Ok(ApiResponse<EstadosResumenDto>.SuccessResult(resumen));
 81        }
 082        catch (Exception ex)
 83        {
 084            _logger.LogError(ex, "Error al obtener resumen de estados para periodo {PeriodoId}", periodoId);
 085            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 86        }
 087    }
 88
 89    [HttpGet("items")]
 90    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 91    [ProducesResponseType(typeof(ApiResponse<IEnumerable<CalculoItemDto>>), StatusCodes.Status200OK)]
 92    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 93    public async Task<IActionResult> ObtenerItems([FromQuery] long periodoId, [FromQuery] int? version = null, [FromQuer
 94    {
 95        try
 96        {
 397            var items = await _liquidacionService.ObtenerItemsAsync(periodoId, version, cedula);
 298            return Ok(ApiResponse<IEnumerable<CalculoItemDto>>.SuccessResult(items, "Items de liquidación obtenidos"));
 99        }
 1100        catch (Exception ex)
 101        {
 1102            _logger.LogError(ex, "Error al obtener items de liquidación para periodo {PeriodoId} version {Version}", per
 1103            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 104        }
 3105    }
 106
 107    [HttpGet("resumenes")]
 108    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 109    [ProducesResponseType(typeof(ApiResponse<IEnumerable<LiquidacionResumenDto>>), StatusCodes.Status200OK)]
 110    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 111    public async Task<IActionResult> ObtenerResumenes([FromQuery] long periodoId, [FromQuery] int? version = null)
 112    {
 113        try
 114        {
 2115            var resumenes = await _liquidacionService.ObtenerResumenAsync(periodoId, version);
 1116            return Ok(ApiResponse<IEnumerable<LiquidacionResumenDto>>.SuccessResult(resumenes, "Resumen de liquidación o
 117        }
 1118        catch (Exception ex)
 119        {
 1120            _logger.LogError(ex, "Error al obtener resumen de liquidación para periodo {PeriodoId} version {Version}", p
 1121            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 122        }
 2123    }
 124
 125    [HttpGet("versiones")]
 126    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 127    [ProducesResponseType(typeof(ApiResponse<IEnumerable<int>>), StatusCodes.Status200OK)]
 128    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 129    public async Task<IActionResult> ObtenerVersiones([FromQuery] long periodoId)
 130    {
 131        try
 132        {
 2133            var versiones = await _liquidacionService.ObtenerVersionesAsync(periodoId);
 1134            return Ok(ApiResponse<IEnumerable<int>>.SuccessResult(versiones, "Versiones de liquidación obtenidas"));
 135        }
 1136        catch (Exception ex)
 137        {
 1138            _logger.LogError(ex, "Error al obtener versiones de liquidación para periodo {PeriodoId}", periodoId);
 1139            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 140        }
 2141    }
 142
 143    public class GenerarLiquidacionRequest
 144    {
 9145        public long PeriodoId { get; set; }
 5146        public int Version { get; set; }
 147    }
 148}