< 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: 112
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%
GetDeficitPorPersonaCsv()0%620%
GetDeficitPorAcreedor()0%620%
GetDeficitPorAcreedorCsv()0%620%

File(s)

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

#LineLine coverage
 1using FAU.API.Security;
 2using FAU.Entidades;
 3using FAU.Logica.DTOs;
 4using FAU.Logica.Services;
 5using Microsoft.AspNetCore.Authorization;
 6using Microsoft.AspNetCore.Mvc;
 7
 8namespace FAU.API.Controllers;
 9
 10[ApiController]
 11[Route("api/liquidacion/reportes-deficit")]
 12[Authorize]
 13public class ReporteDeficitController : ControllerBase
 14{
 15    private readonly IReporteDeficitService _service;
 16    private readonly IPeriodoService _periodoService;
 17    private readonly ILogger<ReporteDeficitController> _logger;
 18
 019    public ReporteDeficitController(
 020        IReporteDeficitService service,
 021        IPeriodoService periodoService,
 022        ILogger<ReporteDeficitController> logger)
 23    {
 024        _service       = service;
 025        _periodoService = periodoService;
 026        _logger        = logger;
 027    }
 28
 29    // ─── Déficit por Persona ─────────────────────────────────────────────────
 30
 31    [HttpGet("{periodoId}/por-persona")]
 32    [RequirePermission(PermisoEnum.VerReportesControl)]
 33    public async Task<IActionResult> GetDeficitPorPersona(long periodoId, CancellationToken ct)
 34    {
 35        try
 36        {
 037            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 038            if (periodo == null)
 039                return NotFound(ApiResponse<string>.ErrorResult("Período no encontrado"));
 40
 041            var result = await _service.ObtenerDeficitPorPersonaAsync(periodoId, ct);
 042            return Ok(ApiResponse<ReporteDeficitPorPersonaDto>.SuccessResult(result));
 43        }
 044        catch (Exception ex)
 45        {
 046            _logger.LogError(ex, "Error al obtener déficit por persona del período {PeriodoId}", periodoId);
 047            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 48        }
 049    }
 50
 51    [HttpGet("{periodoId}/por-persona/csv")]
 52    [RequirePermission(PermisoEnum.VerReportesControl)]
 53    public async Task<IActionResult> GetDeficitPorPersonaCsv(long periodoId, CancellationToken ct)
 54    {
 55        try
 56        {
 057            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 058            if (periodo == null)
 059                return NotFound(ApiResponse<string>.ErrorResult("Período no encontrado"));
 60
 061            var bytes = await _service.GenerarCsvDeficitPorPersonaAsync(periodoId, ct);
 062            return File(bytes, "text/csv", $"deficit-por-persona-{periodoId}.csv");
 63        }
 064        catch (Exception ex)
 65        {
 066            _logger.LogError(ex, "Error al generar CSV déficit por persona del período {PeriodoId}", periodoId);
 067            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 68        }
 069    }
 70
 71    // ─── Déficit por Acreedor ────────────────────────────────────────────────
 72
 73    [HttpGet("{periodoId}/por-acreedor")]
 74    [RequirePermission(PermisoEnum.VerReportesControl)]
 75    public async Task<IActionResult> GetDeficitPorAcreedor(long periodoId, CancellationToken ct)
 76    {
 77        try
 78        {
 079            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 080            if (periodo == null)
 081                return NotFound(ApiResponse<string>.ErrorResult("Período no encontrado"));
 82
 083            var result = await _service.ObtenerDeficitPorAcreedorAsync(periodoId, ct);
 084            return Ok(ApiResponse<ReporteDeficitPorAcreedorDto>.SuccessResult(result));
 85        }
 086        catch (Exception ex)
 87        {
 088            _logger.LogError(ex, "Error al obtener déficit por acreedor del período {PeriodoId}", periodoId);
 089            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 90        }
 091    }
 92
 93    [HttpGet("{periodoId}/por-acreedor/csv")]
 94    [RequirePermission(PermisoEnum.VerReportesControl)]
 95    public async Task<IActionResult> GetDeficitPorAcreedorCsv(long periodoId, CancellationToken ct)
 96    {
 97        try
 98        {
 099            var periodo = await _periodoService.ObtenerPorIdAsync(periodoId);
 0100            if (periodo == null)
 0101                return NotFound(ApiResponse<string>.ErrorResult("Período no encontrado"));
 102
 0103            var bytes = await _service.GenerarCsvDeficitPorAcreedorAsync(periodoId, ct);
 0104            return File(bytes, "text/csv", $"deficit-por-acreedor-{periodoId}.csv");
 105        }
 0106        catch (Exception ex)
 107        {
 0108            _logger.LogError(ex, "Error al generar CSV déficit por acreedor del período {PeriodoId}", periodoId);
 0109            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 110        }
 0111    }
 112}