Skip to content

Commit

Permalink
[Cob] Consulta de movimentações
Browse files Browse the repository at this point in the history
  • Loading branch information
RafaelEstevamReis committed Dec 15, 2023
1 parent fb5d4fe commit fde17e4
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 11 deletions.
25 changes: 25 additions & 0 deletions Sicoob.Cobranca/Helpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace Sicoob.Cobranca;

using Sicoob.Cobranca.Models;
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.IO;

public static class Helpers
{
public static IEnumerable<MovimentacoesArquivo> ProcessarArquivoMovimentacao(string zipBase64)
{
var bytes = Convert.FromBase64String(zipBase64);
Stream data = new MemoryStream(bytes);

ZipArchive archive = new ZipArchive(data);
foreach (ZipArchiveEntry entry in archive.Entries)
{
using var sr = new StreamReader(entry.Open());
var registros = Newtonsoft.Json.JsonConvert.DeserializeObject<MovimentacoesArquivo[]>(sr.ReadToEnd());
if (registros == null) continue;
foreach (var r in registros) yield return r;
}
}
}
29 changes: 29 additions & 0 deletions Sicoob.Cobranca/Models/Movimentacoes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,32 @@ public class RetornoArquivoMovimentacao
public string arquivo { get; set; }

Check warning on line 34 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'arquivo' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public string nomeArquivo { get; set; }

Check warning on line 35 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'nomeArquivo' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
}


public class MovimentacoesArquivo
{
public string siglaMovimento { get; set; }

Check warning on line 41 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'siglaMovimento' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public DateTime dataInicioMovimento { get; set; }
public DateTime dataFimMovimento { get; set; }
public int numeroCliente { get; set; }
public int numeroContrato { get; set; }
public int modalidade { get; set; }
public int numeroTitulo { get; set; }
public string seuNumero { get; set; }

Check warning on line 48 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'seuNumero' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public DateTime dataVencimentoTitulo { get; set; }
public decimal valorTitulo { get; set; }
public string codigoBarras { get; set; }

Check warning on line 51 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'codigoBarras' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public int numeroContaCorrente { get; set; }
public decimal valorTarifaMovimento { get; set; }
public decimal valorAbatimento { get; set; }
public DateTime dataMovimentoLiquidacao { get; set; }
public DateTime dataLiquidacao { get; set; }
public DateTime dataPrevisaoCredito { get; set; }
public int numeroBancoRecebedor { get; set; }
public int numeroAgenciaRecebedora { get; set; }
public int idTipoOpFinanceira { get; set; }
public string tipoOpFinanceira { get; set; }

Check warning on line 61 in Sicoob.Cobranca/Models/Movimentacoes.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'tipoOpFinanceira' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public decimal valorDesconto { get; set; }
public decimal valorMora { get; set; }
public decimal valorLiquido { get; set; }
}
42 changes: 31 additions & 11 deletions Sicoob.Cobranca/SicoobCobranca.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace Sicoob.Cobranca;
using Sicoob.Shared.Models.Acesso;
using Simple.API;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;

Expand Down Expand Up @@ -63,7 +65,7 @@ protected override void atualizaClients(TokenResponse token)
linhaDigitavel = linhaDigitavel,
codigoBarras = codigoBarras
};
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletoResponse?>("/cobranca-bancaria/v2/boletos", consulta));
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletoResponse?>("/cobranca-bancaria/v2/cobranca-bancaria/v2/boletos", consulta));
}

/// <summary>
Expand All @@ -75,7 +77,7 @@ protected override void atualizaClients(TokenResponse token)
/// <param name="dataVencimentoInicio">Data de Vencimento Inicial</param>
/// <param name="dataVencimentoFim">Data de Vencimento Final</param>
/// <returns>Boletos do Pagador</returns>
public async Task<ConsultaBoletosPagadorResponse> ConsultarBoletosPagador(int numeroContrato, string numeroCpfCnpj,int? codigoSituacao = null, DateTime? dataVencimentoInicio = null, DateTime? dataVencimentoFim = null)
public async Task<ConsultaBoletosPagadorResponse> ConsultarBoletosPagador(int numeroContrato, string numeroCpfCnpj, int? codigoSituacao = null, DateTime? dataVencimentoInicio = null, DateTime? dataVencimentoFim = null)
{
var consulta = new ConsultaBoletosPagadorRequest()
{
Expand All @@ -84,7 +86,7 @@ public async Task<ConsultaBoletosPagadorResponse> ConsultarBoletosPagador(int nu
dataInicio = dataVencimentoInicio?.ToString("yyyy-MM-dd"),
dataFim = dataVencimentoFim?.ToString("yyyy-MM-dd")
};
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletosPagadorResponse>("/cobranca-bancaria/v2/boletos/pagadores/" + numeroCpfCnpj, consulta));
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletosPagadorResponse>("/cobranca-bancaria/v2/cobranca-bancaria/v2/boletos/pagadores/" + numeroCpfCnpj, consulta));
}

public async Task<ConsultaBoletoResponse?> ConsultarSegundaViaBoleto(int numeroContrato, int modalidade, int? nossoNumero = null, string? linhaDigitavel = null, string? codigoBarras = null, bool gerarPdf = false)
Expand All @@ -98,29 +100,47 @@ public async Task<ConsultaBoletosPagadorResponse> ConsultarBoletosPagador(int nu
codigoBarras = codigoBarras,
gerarPdf = gerarPdf
};
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletoResponse?>("/cobranca-bancaria/v2/boletos/segunda-via", consulta));
return await ExecutaChamadaAsync(() => clientApi.GetAsync<ConsultaBoletoResponse?>("/cobranca-bancaria/v2/cobranca-bancaria/v2/boletos/segunda-via", consulta));
}

public async Task<IncluirBoletosResponse?> IncluirBoletos(IncluirBoletosRequest[] boletos)
{
return await ExecutaChamadaAsync(() => clientApi.PostAsync<IncluirBoletosResponse?>("/cobranca-bancaria/v2/boletos", boletos));
return await ExecutaChamadaAsync(() => clientApi.PostAsync<IncluirBoletosResponse?>("/cobranca-bancaria/v2/cobranca-bancaria/v2/boletos", boletos));
}

/* Movimentação */
public async Task<RetornoSolicitacaoMovimentacoesCarteira> SolicitarMovimentacao(SolicitacaoMovimentacoesCarteira solicitacao)
public async Task<RetornoSolicitacaoMovimentacoesCarteira> SolicitarMovimentacao(int numeroContrato, int tipoMovimento, DateTime data)
{
var retorno = await ExecutaChamadaAsync(() => clientApi.PostAsync<ResponseMovimentacao<RetornoSolicitacaoMovimentacoesCarteira>>("/boletos/solicitacoes/movimentacao", solicitacao));
var di = data.Date;
var df = data.Date.AddDays(1).AddSeconds(-1);
return await SolicitarMovimentacao(numeroContrato, tipoMovimento, di, df);
}
public async Task<RetornoSolicitacaoMovimentacoesCarteira> SolicitarMovimentacao(int numeroContrato, int tipoMovimento, DateTime dataInicial, DateTime dataFinal)
=> await SolicitarMovimentacao(new SolicitacaoMovimentacoesCarteira() { numeroContrato = numeroContrato, tipoMovimento = tipoMovimento, dataInicial = dataInicial, dataFinal = dataFinal });
private async Task<RetornoSolicitacaoMovimentacoesCarteira> SolicitarMovimentacao(SolicitacaoMovimentacoesCarteira solicitacao)
{
var retorno = await ExecutaChamadaAsync(() => clientApi.PostAsync<ResponseMovimentacao<RetornoSolicitacaoMovimentacoesCarteira>>("/cobranca-bancaria/v2/boletos/solicitacoes/movimentacao", solicitacao));
return retorno.resultado;
}
public async Task<RetornoConsultaMovimentacoes> ConsultarSituacaoSolicitacao(int numeroContrato, int codigoSolicitacao)
{
var retorno = await ExecutaChamadaAsync(() => clientApi.PostAsync<ResponseMovimentacao<RetornoConsultaMovimentacoes>>("/boletos/solicitacoes/movimentacao", new { numeroContrato, codigoSolicitacao }));
var retorno = await ExecutaChamadaAsync(() => clientApi.GetAsync<ResponseMovimentacao<RetornoConsultaMovimentacoes>>("/cobranca-bancaria/v2/boletos/solicitacoes/movimentacao", new { numeroContrato, codigoSolicitacao }));
return retorno.resultado;
}
public async Task<RetornoArquivoMovimentacao> DownloadMovimentacao(int numeroContrato, int codigoSolicitacao, int idArquivo)
internal async Task<RetornoArquivoMovimentacao> DownloadArquivoMovimentacao(int numeroContrato, int codigoSolicitacao, int idArquivo)
{
var retorno = await ExecutaChamadaAsync(() => clientApi.PostAsync<ResponseMovimentacao<RetornoArquivoMovimentacao>>("/boletos/movimentacao-download", new { numeroContrato, codigoSolicitacao, idArquivo }));
var retorno = await ExecutaChamadaAsync(() => clientApi.GetAsync<ResponseMovimentacao<RetornoArquivoMovimentacao>>("/cobranca-bancaria/v2/boletos/movimentacao-download", new { numeroContrato, codigoSolicitacao, idArquivo }));
return retorno.resultado;
}

public async Task<MovimentacoesArquivo[]> BaixarMovimentacoes(int numeroContrato, int codigoSolicitacao, int[] arquivos)
{
var lst = new List<MovimentacoesArquivo>();
foreach (var idArquivo in arquivos)
{
var retorno = await DownloadArquivoMovimentacao(numeroContrato, codigoSolicitacao, idArquivo);
var registros = Helpers.ProcessarArquivoMovimentacao(retorno.arquivo);
lst.AddRange(registros);
}
return lst.ToArray();
}
}

0 comments on commit fde17e4

Please sign in to comment.