< Summary

Information
Class: FAU.API.Controllers.TablaPermanenciaController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TablaPermanenciaController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 68
Coverable lines: 68
Total lines: 186
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 24
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetTablaPermanencia()100%210%
GetById()0%620%
Create()0%7280%
Update()0%156120%
Delete()0%620%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TablaPermanenciaController.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/tabla-permanencia")]
 11[Authorize]
 12[Produces("application/json")]
 13public class TablaPermanenciaController : ControllerBase
 14{
 15    private readonly ITablaPermanenciaService _service;
 16    private readonly ILogger<TablaPermanenciaController> _logger;
 17
 018    public TablaPermanenciaController(
 019        ITablaPermanenciaService service,
 020        ILogger<TablaPermanenciaController> logger)
 21    {
 022        _service = service;
 023        _logger = logger;
 024    }
 25
 26    /// <summary>
 27    /// Listar rangos de permanencia (paginado, filtrable por escalafón y grado).
 28    /// GET /api/tabla-permanencia?page=1&amp;pageSize=10&amp;escalafonId=1&amp;gradoId=2
 29    /// </summary>
 30    [HttpGet]
 31    [ProducesResponseType(typeof(ApiResponse<PagedResult<TablaPermanenciaDto>>), StatusCodes.Status200OK)]
 32    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 33    public async Task<IActionResult> GetTablaPermanencia(
 34        [FromQuery] int page = 1,
 35        [FromQuery] int pageSize = 10,
 36        [FromQuery] long? escalafonId = null,
 37        [FromQuery] long? gradoId = null)
 38    {
 39        try
 40        {
 041            var result = await _service.GetPagedAsync(page, pageSize, escalafonId, gradoId);
 042            return Ok(ApiResponse<PagedResult<TablaPermanenciaDto>>.SuccessResult(result));
 43        }
 044        catch (Exception ex)
 45        {
 046            _logger.LogError(ex, "Error al obtener tabla de permanencia");
 047            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 48        }
 049    }
 50
 51    /// <summary>
 52    /// Obtener un rango de permanencia por ID.
 53    /// GET /api/tabla-permanencia/{id}
 54    /// </summary>
 55    [HttpGet("{id}")]
 56    [ProducesResponseType(typeof(ApiResponse<TablaPermanenciaDto>), StatusCodes.Status200OK)]
 57    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 58    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 59    public async Task<IActionResult> GetById(long id)
 60    {
 61        try
 62        {
 063            var item = await _service.GetByIdAsync(id);
 064            if (item == null)
 065                return NotFound(ApiResponse<string>.ErrorResult("Rango de permanencia no encontrado"));
 66
 067            var dto = new TablaPermanenciaDto
 068            {
 069                Id = item.Id,
 070                EscalafonId = item.EscalafonId,
 071                GradoId = item.GradoId,
 072                MesesDesde = item.MesesDesde,
 073                MesesHasta = item.MesesHasta,
 074                MontoFijo = item.MontoFijo,
 075                Porcentaje = item.Porcentaje,
 076                AplicaRiesgoVuelo = item.AplicaRiesgoVuelo,
 077                VigenteDesde = item.VigenteDesde,
 078                VigenteHasta = item.VigenteHasta,
 079                Activo = item.Activo
 080            };
 081            return Ok(ApiResponse<TablaPermanenciaDto>.SuccessResult(dto));
 82        }
 083        catch (Exception ex)
 84        {
 085            _logger.LogError(ex, "Error al obtener tabla de permanencia {Id}", id);
 086            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 87        }
 088    }
 89
 90    /// <summary>
 91    /// Crear un nuevo rango de permanencia.
 92    /// POST /api/tabla-permanencia
 93    /// </summary>
 94    [HttpPost]
 95    [Authorize(Roles = "Administrador")]
 96    [ProducesResponseType(typeof(ApiResponse<TablaPermanenciaDto>), StatusCodes.Status201Created)]
 97    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 98    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status409Conflict)]
 99    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 100    public async Task<IActionResult> Create([FromBody] CrearTablaPermanenciaRequest request)
 101    {
 102        try
 103        {
 0104            var (exito, resultado, error) = await _service.CreateAsync(request);
 105
 0106            if (!exito)
 107            {
 0108                if (error?.Contains("solapado", StringComparison.OrdinalIgnoreCase) == true)
 0109                    return Conflict(ApiResponse<string>.ErrorResult(error));
 0110                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear rango de permanencia"));
 111            }
 112
 0113            return CreatedAtAction(
 0114                nameof(GetById),
 0115                new { id = resultado!.Id },
 0116                ApiResponse<TablaPermanenciaDto>.SuccessResult(null!, "Rango de permanencia creado exitosamente"));
 117        }
 0118        catch (Exception ex)
 119        {
 0120            _logger.LogError(ex, "Error al crear rango de permanencia");
 0121            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 122        }
 0123    }
 124
 125    /// <summary>
 126    /// Actualizar un rango de permanencia existente.
 127    /// PUT /api/tabla-permanencia/{id}
 128    /// </summary>
 129    [HttpPut("{id}")]
 130    [Authorize(Roles = "Administrador")]
 131    [ProducesResponseType(typeof(ApiResponse<TablaPermanenciaDto>), StatusCodes.Status200OK)]
 132    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 133    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 134    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status409Conflict)]
 135    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 136    public async Task<IActionResult> Update(long id, [FromBody] ActualizarTablaPermanenciaRequest request)
 137    {
 138        try
 139        {
 0140            var (exito, resultado, error) = await _service.UpdateAsync(id, request);
 141
 0142            if (!exito)
 143            {
 0144                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 0145                    return NotFound(ApiResponse<string>.ErrorResult(error));
 0146                if (error?.Contains("solapado", StringComparison.OrdinalIgnoreCase) == true)
 0147                    return Conflict(ApiResponse<string>.ErrorResult(error));
 0148                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar rango de permanencia"));
 149            }
 150
 0151            return Ok(ApiResponse<TablaPermanenciaDto>.SuccessResult(null!, "Rango de permanencia actualizado exitosamen
 152        }
 0153        catch (Exception ex)
 154        {
 0155            _logger.LogError(ex, "Error al actualizar rango de permanencia {Id}", id);
 0156            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 157        }
 0158    }
 159
 160    /// <summary>
 161    /// Eliminar (soft delete) un rango de permanencia.
 162    /// DELETE /api/tabla-permanencia/{id}
 163    /// </summary>
 164    [HttpDelete("{id}")]
 165    [Authorize(Roles = "Administrador")]
 166    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status200OK)]
 167    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 168    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 169    public async Task<IActionResult> Delete(long id)
 170    {
 171        try
 172        {
 0173            var existe = await _service.GetByIdAsync(id);
 0174            if (existe == null)
 0175                return NotFound(ApiResponse<string>.ErrorResult("Rango de permanencia no encontrado"));
 176
 0177            await _service.DeleteAsync(id);
 0178            return Ok(ApiResponse<string>.SuccessResult("Rango de permanencia eliminado exitosamente"));
 179        }
 0180        catch (Exception ex)
 181        {
 0182            _logger.LogError(ex, "Error al eliminar rango de permanencia {Id}", id);
 0183            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 184        }
 0185    }
 186}