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