diff --git a/pom.xml b/pom.xml index d9d7fa9d2..9fcab2850 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 br.com.rjconsultores ModelWeb - 1.27.1 + 1.28.0 @@ -176,7 +176,7 @@ br.com.rjconsultores GeneradorBoletosCNAB - 1.4.0 + 1.5.0 @@ -203,6 +203,7 @@ 3.1.0 provided + com.nimbusds nimbus-jose-jwt diff --git a/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java b/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java index de7b65349..ddc2ce1e9 100644 --- a/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java @@ -26,6 +26,8 @@ public interface RemessaCNABBancosDAO extends GenericDAO public ArquivoRemessa remessaItau(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception; public ArquivoRemessa remessaBancoBrasil(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception; + + public ArquivoRemessa remessaSafra(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception; public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar); diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java index af734beda..f02e88bd8 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java @@ -51,6 +51,10 @@ import com.rjconsultores.ventaboletos.blocos.itau.DetalheObrigatorioItau; import com.rjconsultores.ventaboletos.blocos.mercantil.ArquivoRemessaMercantil; import com.rjconsultores.ventaboletos.blocos.mercantil.CabecalhoRemessaMercantil; import com.rjconsultores.ventaboletos.blocos.mercantil.DetalheObrigatorioMercantil; +import com.rjconsultores.ventaboletos.blocos.safra.ArquivoRemessaSafra; +import com.rjconsultores.ventaboletos.blocos.safra.CabecalhoRemessaSafra; +import com.rjconsultores.ventaboletos.blocos.safra.DetalheObrigatorioSafra; +import com.rjconsultores.ventaboletos.blocos.safra.RodapeRemessaSafra; import com.rjconsultores.ventaboletos.blocos.santander.ArquivoRemessaSantander; import com.rjconsultores.ventaboletos.blocos.santander.CabecalhoRemessaSantander; import com.rjconsultores.ventaboletos.blocos.santander.DetalheObrigatorioSantander; @@ -66,7 +70,7 @@ import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.FechamentoBoleto; import com.rjconsultores.ventaboletos.entidad.FechamentoCntcorrente; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; -import com.rjconsultores.ventaboletos.enuns.AceiteBB; +import com.rjconsultores.ventaboletos.enuns.Aceite; import com.rjconsultores.ventaboletos.enuns.BancoLayout; import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador; import com.rjconsultores.ventaboletos.exception.ValidacaoRemessaException; @@ -164,7 +168,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO list = query.list(); + + ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.SAFRA_400_Envio); + + String nomeArquivo = "CB" + new SimpleDateFormat("ddMM").format(new Date()); + + int variavel = 0; + int seqRegistro = 0; + int qtdeTitulos = 0; + + BigDecimal valorTitulos = BigDecimal.ZERO; + ArquivoRemessaItem arquivoRemessaItem = null; + CabecalhoRemessaSafra cabecalho = null; + + for(Object[] tupla : list){ + + Integer idRemessa = Integer.valueOf(tupla[1].toString()); + BigDecimal valor = new BigDecimal(tupla[9].toString().replace(",", ".")); + + qtdeTitulos++; + valorTitulos = valorTitulos.add( valor ); + String nomeEmpresa = tupla[2].toString(); + String agencia = tupla[4].toString(); + String conta = tupla[5].toString(); + String digiConta = tupla[6].toString(); + Date vencimento = (Date) tupla[8]; + + if(!tupla[7].toString().contains("-")){ + log.error(String.format( "NossoNumero não está no formato correto: %s1 . Ignorando o registro FechamentoBoletoId = %s2 " , tupla[7], tupla[0])); + continue; + } + + if(cabecalho == null ){ + variavel = idRemessa; + + cabecalho = new CabecalhoRemessaSafra(); + cabecalho.setNumAgencia(agencia); + cabecalho.setNumContaCorrente(conta); + cabecalho.setDigContaCorrente(digiConta); + cabecalho.setNomeEmpresa(nomeEmpresa); + cabecalho.setDataGravacao(new Date()); + cabecalho.setNumeroSequencialRemessa(idRemessa); + cabecalho.setNumeroSequencialRegistro(++seqRegistro); + + arquivoRemessaItem = new ArquivoRemessaSafra(); + arquivoRemessaItem.setCabecalhoRemessa(cabecalho); + + arquivoRemessa.addItem(arquivoRemessaItem); + } + + DetalheObrigatorioSafra detalhe = new DetalheObrigatorioSafra(); + + detalhe.setCpfCnpj(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); + detalhe.setNumCpfCnpj(tupla[3].toString()); + detalhe.setNumAgencia(agencia); + detalhe.setNumContaCorrente(conta); + detalhe.setDigContaCorrente(digiConta); + detalhe.setNossoNumero(tupla[7].toString()); + detalhe.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); + detalhe.setVencimento(vencimento); + detalhe.setValor(valor); + detalhe.setAceite(Aceite.ACEITE); + detalhe.setDataEmissao((Date) tupla[10]); + detalhe.setInstrucao1(tupla[11].toString()); + detalhe.setInstrucao2(tupla[12].toString()); + try{ + detalhe.setPercMulta( new BigDecimal(tupla[13].toString().replace(",", ".") ) ); + if( tupla[15] != null ) { + detalhe.setJurosDeMora(new BigDecimal(tupla[15].toString().replace(",", "."))); + }else { + detalhe.setJurosDeMora( calculaValorMora( (BigDecimal) tupla[14], valor )); + } + detalhe.setDataMulta(vencimento); + }catch(NullPointerException e){ + detalhe.setPercMulta(BigDecimal.ZERO); + detalhe.setDataMulta(vencimento); + detalhe.setJurosDeMora(BigDecimal.ZERO); + } + + try{ + detalhe.setDataLimiteDesconto(vencimento); + detalhe.setValorDesconto(new BigDecimal(tupla[16].toString().replace(",", "."))); + }catch(NullPointerException e){ + detalhe.setDataLimiteDesconto(vencimento); + detalhe.setValorDesconto(BigDecimal.ZERO); + } + + detalhe.setValorIOF(BigDecimal.ZERO); + + try{ + detalhe.setValorAbatimentoConcedido(new BigDecimal(tupla[17].toString().replace(",", "."))); + }catch(NullPointerException e){ + detalhe.setValorAbatimentoConcedido(BigDecimal.ZERO); + } + + detalhe.setTipoInscricaoPagador(TipoInscricaoPagador.CNPJ); + + try{ + detalhe.setNumeroInscricaoPagador(tupla[18].toString()); + }catch(Exception e){ + throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[18]+" está fora do padrão, favor corrigir"); + } + + detalhe.setNomePagador(tupla[19].toString()); + + try{ + detalhe.setEnderecoPagador(tupla[20].toString()); + }catch(Exception e){ + throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[18]+" está fora do padrão, favor corrigir"); + } + + try{ + detalhe.setBairroPagador(tupla[21].toString()); + }catch(Exception e){ + throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[18]+" está fora do padrão, favor corrigir"); + } + + detalhe.setCepPagador(tupla[22].toString()); + + try{ + detalhe.setCidadePagador(tupla[23].toString()); + }catch(Exception e){ + throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[18]+" está fora do padrão, favor corrigir"); + } + + try{ + detalhe.setEstadoPagador(tupla[24].toString()); + }catch(Exception e){ + throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[18]+" está fora do padrão, favor corrigir"); + } + + detalhe.setSacadorAvalista(""); + detalhe.setNumeroSequencialRemessa(idRemessa); + detalhe.setNumeroSequencialRegistro(++seqRegistro); + + arquivoRemessaItem.addTitulo(detalhe); + + } + + if(arquivoRemessaItem != null){ + + RodapeRemessaSafra rodape = new RodapeRemessaSafra(); + rodape.setQtdTitulos(qtdeTitulos); + rodape.setValorTotalTitulos(valorTitulos); + + rodape.setNumeroSequencialRemessa(variavel); + rodape.setNumeroSequencialRegistro(++seqRegistro); + + arquivoRemessaItem.setRodapeRemessa(rodape); + } + + nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; + arquivoRemessa.setNomeArquivo(nomeArquivo); + + return arquivoRemessa; + + } + public ArquivoRemessa remessaSantander(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception{ StringBuilder sb = new StringBuilder(); @@ -989,7 +1191,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO