Implementação do banco SAFRA feat bug#AL-3376' (!131) from AL-3376 into master

Reviewed-on: adm/ModelWeb#131
Reviewed-by: Valdir Cordeiro <valdir.cordeiro@totvs.com.br>
master
fabio 2023-12-26 12:26:26 +00:00
commit 912c7f078e
4 changed files with 213 additions and 6 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId> <groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId> <artifactId>ModelWeb</artifactId>
<version>1.27.1</version> <version>1.28.0</version>
<distributionManagement> <distributionManagement>
<repository> <repository>
@ -176,7 +176,7 @@
<dependency> <dependency>
<groupId>br.com.rjconsultores</groupId> <groupId>br.com.rjconsultores</groupId>
<artifactId>GeneradorBoletosCNAB</artifactId> <artifactId>GeneradorBoletosCNAB</artifactId>
<version>1.4.0</version> <version>1.5.0</version>
</dependency> </dependency>
<dependency> <dependency>
@ -203,6 +203,7 @@
<version>3.1.0</version> <version>3.1.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.nimbusds</groupId> <groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId> <artifactId>nimbus-jose-jwt</artifactId>

View File

@ -26,6 +26,8 @@ public interface RemessaCNABBancosDAO extends GenericDAO<FechamentoBoleto, Long>
public ArquivoRemessa remessaItau(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception; 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 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<FechamentoBoleto> obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar); public List<FechamentoBoleto> obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar);

View File

@ -51,6 +51,10 @@ import com.rjconsultores.ventaboletos.blocos.itau.DetalheObrigatorioItau;
import com.rjconsultores.ventaboletos.blocos.mercantil.ArquivoRemessaMercantil; import com.rjconsultores.ventaboletos.blocos.mercantil.ArquivoRemessaMercantil;
import com.rjconsultores.ventaboletos.blocos.mercantil.CabecalhoRemessaMercantil; import com.rjconsultores.ventaboletos.blocos.mercantil.CabecalhoRemessaMercantil;
import com.rjconsultores.ventaboletos.blocos.mercantil.DetalheObrigatorioMercantil; 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.ArquivoRemessaSantander;
import com.rjconsultores.ventaboletos.blocos.santander.CabecalhoRemessaSantander; import com.rjconsultores.ventaboletos.blocos.santander.CabecalhoRemessaSantander;
import com.rjconsultores.ventaboletos.blocos.santander.DetalheObrigatorioSantander; 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.FechamentoBoleto;
import com.rjconsultores.ventaboletos.entidad.FechamentoCntcorrente; import com.rjconsultores.ventaboletos.entidad.FechamentoCntcorrente;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta; 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.BancoLayout;
import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador; import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador;
import com.rjconsultores.ventaboletos.exception.ValidacaoRemessaException; import com.rjconsultores.ventaboletos.exception.ValidacaoRemessaException;
@ -164,7 +168,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO<Fechament
String nomeEmpresa = tupla[3].toString(); String nomeEmpresa = tupla[3].toString();
if(!tupla[8].toString().contains("-")){ if(!tupla[8].toString().contains("-")){
log.error("NossoNumero não está no formato correto: " + tupla[8].toString() + ". Ignorando o registro FechamentoBoletoId = " + tupla[0].toString()); log.error( String.format( "NossoNumero não está no formato correto: %s1 . Ignorando o registro FechamentoBoletoId = %s2 " , tupla[0].toString()));
continue; continue;
} }
@ -274,6 +278,204 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO<Fechament
} }
public ArquivoRemessa remessaSafra(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception{
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append("fb.FECHAMENTOBOLETO_ID AS \"id\", ");
sb.append("(NVL(fp.COUNT_REMESSA, 0) + 1) AS \"idRemessa\", ");
sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", ");
sb.append("emp.CNPJ AS \"cnpj\", ");
sb.append("fp.BOLETO_BANCO_AGENCIA AS \"agencia\", ");
sb.append("fp.BOLETO_BANCO_CONTA AS \"conta\", ");
sb.append("fp.BOLETO_BANCO_CONTA_DIGITO AS \"dac\", ");
sb.append("fb.NOSSONUMERO AS \"nossoNumero\", ");
sb.append("fb.FECVENCIMENTO AS \"vencimento\", ");
sb.append("fb.VALORDOCUMENTO AS \"valor\", ");
sb.append("fb.FECDOCUMENTO AS \"dataEmissao\", ");
sb.append("'01' AS \"instrucao1\", ");
sb.append("'01' AS \"instrucao2\", ");
sb.append("nvl(fb.porc_multa, 0) AS \"porcentagemMulta\", ");
sb.append("nvl(fb.porc_mora, 0) AS \"porcentagemMora\", ");
sb.append("fb.MORA AS \"valorAtraso\", ");
sb.append("fb.DESCONTOS AS \"valorDesconto\", ");
sb.append("fb.DEDUCOES AS \"valorAbatimento\", ");
sb.append("pv.NUMDOCPUNTOVENTA AS \"numeroInscricaoPagador\", ");
sb.append("pv.NOMBPUNTOVENTA AS \"nomePagador\", ");
sb.append("pv.DIRECCIONCALLE || ', ' || pv.DIRECCIONNUMERO AS \"logradouroPagador\", ");
sb.append("pl.NOMBPLAZA AS \"bairroPagador\", ");
sb.append("pv.CODPOSTAL AS \"cepPagador\", ");
sb.append("ci.NOMBCIUDAD AS \"cidadePagador\", ");
sb.append("es.CVEESTADO AS \"estadoPagador\" ");
writeFROMClause(sb, dataDe != null && dataAte != null, reenviar);
Query query = getSession().createSQLQuery(sb.toString());
query.setInteger(EMPRESA_ID, empresa.getEmpresaId());
if(dataDe != null && dataAte != null){
query.setDate(DATA_DE, dataDe);
query.setDate(DATA_ATE, dataAte);
}
List<Object[]> 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{ public ArquivoRemessa remessaSantander(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) throws Exception{
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -989,7 +1191,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO<Fechament
titulosBancoBrasil.setValor(new BigDecimal(tupla[11].toString().replace(",", "."))); titulosBancoBrasil.setValor(new BigDecimal(tupla[11].toString().replace(",", ".")));
titulosBancoBrasil.setAgenciaCobradora(null); titulosBancoBrasil.setAgenciaCobradora(null);
titulosBancoBrasil.setDigAgenciaCobradora(null); titulosBancoBrasil.setDigAgenciaCobradora(null);
titulosBancoBrasil.setAceite(AceiteBB.NAO_ACEITE); titulosBancoBrasil.setAceite(Aceite.NAO_ACEITE);
titulosBancoBrasil.setEmissao((Date) tupla[13]); titulosBancoBrasil.setEmissao((Date) tupla[13]);
try{ try{
titulosBancoBrasil.setCodMora(1); titulosBancoBrasil.setCodMora(1);
@ -1185,7 +1387,7 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO<Fechament
String codEmpresaBanco = tupla[2] == null ? "" : ((BigDecimal) tupla[2]).toString(); String codEmpresaBanco = tupla[2] == null ? "" : ((BigDecimal) tupla[2]).toString();
codEmpresaBanco = StringUtils.right("000000000" + codEmpresaBanco, 9); codEmpresaBanco = StringUtils.right("000000000" + codEmpresaBanco, 9);
String nomeEmpresa = tupla[4].toString(); String nomeEmpresa = tupla[4].toString();
BigDecimal valor = new BigDecimal(tupla[11].toString().replaceAll(",", ".")); BigDecimal valor = new BigDecimal(tupla[11].toString().replace(",", "."));
qtdeTitulos++; qtdeTitulos++;
valorTitulos.add( valor ); valorTitulos.add( valor );

View File

@ -78,6 +78,8 @@ public class ArquivoRemessaCNABImpl implements ArquivoRemessaCNAB {
return remessaCNABBancosDAO.remessaBancoBrasil(empresa, dataDe, dataAte, reenviar); return remessaCNABBancosDAO.remessaBancoBrasil(empresa, dataDe, dataAte, reenviar);
}else if(BancoLayout.SICOOB_240_Envio.equals(banco)){ }else if(BancoLayout.SICOOB_240_Envio.equals(banco)){
return remessaCNABBancosDAO.remessaSicoob(empresa, dataDe, dataAte, reenviar); return remessaCNABBancosDAO.remessaSicoob(empresa, dataDe, dataAte, reenviar);
}else if(BancoLayout.SAFRA_400_Envio.equals(banco)){
return remessaCNABBancosDAO.remessaSafra(empresa, dataDe, dataAte, reenviar);
}else if(BancoLayout.CAIXA_400_Envio.equals(banco)){ }else if(BancoLayout.CAIXA_400_Envio.equals(banco)){
return remessaCNABBancosDAO.remessaCaixa(empresa, dataDe, dataAte, reenviar); return remessaCNABBancosDAO.remessaCaixa(empresa, dataDe, dataAte, reenviar);
} }