< Summary

Information
Class: FAU.Logica.Services.ArchivoOrganismoService
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/ArchivoOrganismoService.cs
Line coverage
91%
Covered lines: 73
Uncovered lines: 7
Coverable lines: 80
Total lines: 132
Line coverage: 91.2%
Branch coverage
42%
Covered branches: 18
Total branches: 42
Branch coverage: 42.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ObtenerPreviewBrouAsync()100%44100%
GenerarCsvBrouAsync()100%22100%
ObtenerResumenSiifAsync()100%66100%
AplicarClasificacion(...)20%4533022.22%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/ArchivoOrganismoService.cs

#LineLine coverage
 1using System.Text;
 2using FAU.DataAccess.Repositories;
 3using FAU.Entidades;
 4
 5namespace FAU.Logica.Services;
 6
 7public class ArchivoOrganismoService : IArchivoOrganismoService
 8{
 9    private readonly IArchivoOrganismoRepository _repo;
 10
 711    public ArchivoOrganismoService(IArchivoOrganismoRepository repo)
 12    {
 713        _repo = repo;
 714    }
 15
 16    public async Task<BrouPreviewDto> ObtenerPreviewBrouAsync(long periodoId)
 17    {
 418        var version = await _repo.ObtenerVersionMaximaAsync(periodoId);
 419        var datos = await _repo.ObtenerDatosBrouAsync(periodoId, version);
 20
 421        var filas = new List<BrouFilaDto>();
 422        var excepciones = new List<BrouExcepcionDto>();
 23
 2424        foreach (var d in datos)
 25        {
 826            if (!string.IsNullOrWhiteSpace(d.NumeroCuenta))
 27            {
 628                filas.Add(new BrouFilaDto
 629                {
 630                    Cedula       = d.Cedula,
 631                    NumeroCuenta = d.NumeroCuenta!,
 632                    Liquido      = d.Liquido,
 633                    Regimen      = d.Regimen
 634                });
 35            }
 36            else
 37            {
 238                excepciones.Add(new BrouExcepcionDto
 239                {
 240                    Cedula  = d.Cedula,
 241                    Nombre  = d.NombreCompleto,
 242                    Liquido = d.Liquido,
 243                    Motivo  = "Sin cuenta bancaria registrada"
 244                });
 45            }
 46        }
 47
 448        return new BrouPreviewDto
 449        {
 450            Filas              = filas,
 451            Excepciones        = excepciones,
 652            TotalLiquido       = filas.Sum(f => f.Liquido),
 453            CantidadRegistros  = filas.Count
 454        };
 455    }
 56
 57    public async Task<byte[]> GenerarCsvBrouAsync(long periodoId)
 58    {
 159        var preview = await ObtenerPreviewBrouAsync(periodoId);
 60
 161        var sb = new StringBuilder();
 662        foreach (var fila in preview.Filas)
 63        {
 264            sb.AppendLine(
 265                $"{fila.Cedula};{fila.NumeroCuenta};{fila.Liquido.ToString("F2", System.Globalization.CultureInfo.Invari
 66        }
 67
 168        return Encoding.UTF8.GetBytes(sb.ToString());
 169    }
 70
 71    public async Task<SiifResumenDto> ObtenerResumenSiifAsync(long periodoId)
 72    {
 373        var version = await _repo.ObtenerVersionMaximaAsync(periodoId);
 374        var items = await _repo.ObtenerItemsSiifAsync(periodoId, version);
 75
 376        var filas = new List<SiifFilaProgramaDto>();
 377        var totalesGenerales    = new SiifSubtotalesDto();
 378        var totalesGeneralesSin083 = new SiifSubtotalesDto();
 79
 380        var grupos = items
 781            .Where(i => i.ClasificacionSiif != null)
 982            .GroupBy(i => (i.ProgramaId, i.ProgramaNombre, i.RegimenId, i.RegimenNombre));
 83
 1484        foreach (var grupo in grupos)
 85        {
 486            var conRubro083 = new SiifSubtotalesDto();
 487            var sinRubro083 = new SiifSubtotalesDto();
 88
 2089            foreach (var item in grupo)
 90            {
 691                AplicarClasificacion(conRubro083, item.ClasificacionSiif!, item.Importe);
 692                if (!item.Rubro083)
 593                    AplicarClasificacion(sinRubro083, item.ClasificacionSiif!, item.Importe);
 94            }
 95
 496            totalesGenerales.Acumular(conRubro083);
 497            totalesGeneralesSin083.Acumular(sinRubro083);
 98
 499            filas.Add(new SiifFilaProgramaDto
 4100            {
 4101                Programa   = grupo.Key.ProgramaNombre,
 4102                ProgramaId = grupo.Key.ProgramaId ?? 0,
 4103                Regimen    = grupo.Key.RegimenNombre,
 4104                RegimenId  = grupo.Key.RegimenId ?? 0,
 4105                ConRubro083 = conRubro083,
 4106                SinRubro083 = sinRubro083
 4107            });
 108        }
 109
 3110        return new SiifResumenDto
 3111        {
 3112            Filas                    = filas,
 3113            TotalesGenerales         = totalesGenerales,
 3114            TotalesGeneralesSin083   = totalesGeneralesSin083
 3115        };
 3116    }
 117
 118    private static void AplicarClasificacion(SiifSubtotalesDto dto, string clasificacion, decimal importe)
 119    {
 120        switch (clasificacion)
 121        {
 18122            case "HabNorGrab": dto.HabNorGrab += importe; break;
 0123            case "HabsAnGrab": dto.HabsAnGrab += importe; break;
 0124            case "HabsNoGrab": dto.HabsNoGrab += importe; break;
 0125            case "BenSocGrab": dto.BenSocGrab += importe; break;
 0126            case "BenSocNoGr": dto.BenSocNoGr += importe; break;
 4127            case "DtoLegGrab": dto.DtoLegGrab += importe; break;
 0128            case "DtoLegNoGr": dto.DtoLegNoGr += importe; break;
 0129            case "DtoPerGrab": dto.DtoPerGrab += importe; break;
 130        }
 0131    }
 132}