< Summary

Information
Class: FAU.API.Controllers.ReporteDeficitController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/ReporteDeficitController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 44
Coverable lines: 44
Total lines: 123
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
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%
GetDeficitPorPersona()0%620%
GetDeficitPorPersonaTxt()0%620%
GetDeficitPorAcreedor()0%620%
GetDeficitPorAcreedorTxt()0%620%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 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/liquidacion/reportes-deficit")]
 12[Authorize]
 13[Produces("application/json")]
 14public class ReporteDeficitController : ControllerBase
 15{
 16    private readonly IReporteDeficitService _service;
 17    private readonly IPeriodoService _periodoService;
 18    private readonly ILogger<ReporteDeficitController> _logger;
 19
 020    public ReporteDeficitController(
 021        IReporteDeficitService service,
 022        IPeriodoService periodoService,
 023        ILogger<ReporteDeficitController> logger)
 24    {
 025        _service = service;
 026        _periodoService = periodoService;
 027        _logger = logger;
 028    }
 29
 30    [HttpGet("{periodoId}/por-persona")]
 31    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 32    [ProducesResponseType(typeof(ApiResponse<ReporteDeficitPorPersonaDto>), StatusCodes.Status200OK)]
 33    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 34    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 35    public async Task<IActionResult> GetDeficitPorPersona(long periodoId, CancellationToken ct)
 36    {
 37        try
 38        {
 039            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 040            if (periodo == null)
 041                return NotFound(ApiResponse<string>.ErrorResult("Periodo no encontrado"));
 42
 043            var result = await _service.ObtenerDeficitPorPersonaAsync(periodoId, ct);
 044            return Ok(ApiResponse<ReporteDeficitPorPersonaDto>.SuccessResult(result));
 45        }
 046        catch (Exception ex)
 47        {
 048            _logger.LogError(ex, "Error al obtener deficit por persona del periodo {PeriodoId}", periodoId);
 049            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 50        }
 051    }
 52
 53    [HttpGet("{periodoId}/por-persona/txt")]
 54    [HttpGet("{periodoId}/por-persona/csv")]
 55    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 56    [ProducesResponseType(typeof(FileResult), StatusCodes.Status200OK)]
 57    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 58    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 59    public async Task<IActionResult> GetDeficitPorPersonaTxt(long periodoId, CancellationToken ct)
 60    {
 61        try
 62        {
 063            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 064            if (periodo == null)
 065                return NotFound(ApiResponse<string>.ErrorResult("Periodo no encontrado"));
 66
 067            var bytes = await _service.GenerarTxtDeficitPorPersonaAsync(periodoId, periodo.Anio, periodo.Mes, ct);
 068            return File(bytes, "text/plain; charset=ibm850", $"deficit-por-persona-{periodoId}.txt");
 69        }
 070        catch (Exception ex)
 71        {
 072            _logger.LogError(ex, "Error al generar TXT deficit por persona del periodo {PeriodoId}", periodoId);
 073            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 74        }
 075    }
 76
 77    [HttpGet("{periodoId}/por-acreedor")]
 78    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 79    [ProducesResponseType(typeof(ApiResponse<ReporteDeficitPorAcreedorDto>), StatusCodes.Status200OK)]
 80    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 81    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 82    public async Task<IActionResult> GetDeficitPorAcreedor(long periodoId, CancellationToken ct)
 83    {
 84        try
 85        {
 086            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 087            if (periodo == null)
 088                return NotFound(ApiResponse<string>.ErrorResult("Periodo no encontrado"));
 89
 090            var result = await _service.ObtenerDeficitPorAcreedorAsync(periodoId, ct);
 091            return Ok(ApiResponse<ReporteDeficitPorAcreedorDto>.SuccessResult(result));
 92        }
 093        catch (Exception ex)
 94        {
 095            _logger.LogError(ex, "Error al obtener deficit por acreedor del periodo {PeriodoId}", periodoId);
 096            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 97        }
 098    }
 99
 100    [HttpGet("{periodoId}/por-acreedor/txt")]
 101    [HttpGet("{periodoId}/por-acreedor/csv")]
 102    [Authorize(Roles = "Administrador,Supervisor,Usuario")]
 103    [ProducesResponseType(typeof(FileResult), StatusCodes.Status200OK)]
 104    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 105    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 106    public async Task<IActionResult> GetDeficitPorAcreedorTxt(long periodoId, CancellationToken ct)
 107    {
 108        try
 109        {
 0110            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 0111            if (periodo == null)
 0112                return NotFound(ApiResponse<string>.ErrorResult("Periodo no encontrado"));
 113
 0114            var bytes = await _service.GenerarTxtDeficitPorAcreedorAsync(periodoId, periodo.Anio, periodo.Mes, ct);
 0115            return File(bytes, "text/plain; charset=ibm850", $"deficit-por-acreedor-{periodoId}.txt");
 116        }
 0117        catch (Exception ex)
 118        {
 0119            _logger.LogError(ex, "Error al generar TXT deficit por acreedor del periodo {PeriodoId}", periodoId);
 0120            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 121        }
 0122    }
 123}