package com.rjconsultores.ventaboletos.dao.hibernate; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.transform.AliasToBeanResultTransformer; import org.hibernate.type.BooleanType; import org.hibernate.type.LongType; import org.hibernate.type.StringType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.ArquivoRemessa; import com.rjconsultores.ventaboletos.ArquivoRemessaItem; import com.rjconsultores.ventaboletos.ArquivoRemessaItemInteface; import com.rjconsultores.ventaboletos.blocos.DetalheObrigatorio; import com.rjconsultores.ventaboletos.blocos.DetalheRetorno; import com.rjconsultores.ventaboletos.blocos.RodapeRemessaPadrao; import com.rjconsultores.ventaboletos.blocos.bancobrasil.ArquivoRemessaBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.CabecalhoLoteRemessaBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.CabecalhoRemessaBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.DetalheObrigatorioDadosPagadorBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.DetalheObrigatorioDadosTitulosBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.RodapeRemessaBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bancobrasil.RodapeRemessaLoteBancoBrasil; import com.rjconsultores.ventaboletos.blocos.bradesco.ArquivoRemessaBradesco; import com.rjconsultores.ventaboletos.blocos.bradesco.CabecalhoRemessaBradesco; import com.rjconsultores.ventaboletos.blocos.bradesco.DetalheObrigatorioBradesco; import com.rjconsultores.ventaboletos.blocos.caixa.ArquivoRemessaCaixa; import com.rjconsultores.ventaboletos.blocos.caixa.CabecalhoRemessaCaixa; import com.rjconsultores.ventaboletos.blocos.caixa.DetalheObrigatorioCaixa; import com.rjconsultores.ventaboletos.blocos.itau.ArquivoRemessaItau; import com.rjconsultores.ventaboletos.blocos.itau.CabecalhoRemessaItau; 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.santander.ArquivoRemessaSantander; import com.rjconsultores.ventaboletos.blocos.santander.CabecalhoRemessaSantander; import com.rjconsultores.ventaboletos.blocos.santander.DetalheObrigatorioSantander; import com.rjconsultores.ventaboletos.blocos.sicoob.ArquivoRemessaSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.CabecalhoLoteRemessaSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.CabecalhoRemessaSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.DetalheObrigatorioDadosPagadorSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.DetalheObrigatorioSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.RodapeRemessaLoteSicoob; import com.rjconsultores.ventaboletos.blocos.sicoob.RodapeRemessaSicoob; import com.rjconsultores.ventaboletos.dao.RemessaCNABBancosDAO; 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.BancoLayout; import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador; import com.rjconsultores.ventaboletos.exception.ValidacaoRemessaException; import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties; import com.rjconsultores.ventaboletos.utilerias.CustomEnum; @Repository("remessaCNABBancosDAO") @SuppressWarnings({"unchecked"}) public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO implements RemessaCNABBancosDAO{ private static final String DATA_ATE = "dataAte"; private static final String DATA_DE = "dataDe"; private static final String EMPRESA_ID = "empresaId"; private static final String ZERO_ESQUERDA = "00000000"; private static Logger log = Logger.getLogger(RemessaCNABBancosHibernateDAO.class); @Autowired public RemessaCNABBancosHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } public String findBanco(Empresa empresa){ StringBuilder sb = new StringBuilder(); sb.append("SELECT DISTINCT fp.BOLETO_BANCO_COD "); sb.append("FROM "); sb.append("FECHAMENTO_PARAMGERAL fp "); sb.append("WHERE fp.activo = 1 AND "); sb.append("fp.EMPRESA_ID = " + empresa.getEmpresaId()); Query query = getSession().createSQLQuery(sb.toString()); return (String) query.list().get(0); } public ArquivoRemessa remessaBradesco(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("fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", "); 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("fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); sb.append("fb.NOSSONUMERO AS \"nossoNumero\", "); sb.append("fb.FECVENCIMENTO AS \"vencimento\", "); sb.append("fb.VALORDOCUMENTO AS \"valor\", "); sb.append("'01' AS \"especieTitulo\", "); sb.append("fb.FECDOCUMENTO AS \"dataEmissao\", "); sb.append("'00' AS \"instrucao1\", "); sb.append("'00' AS \"instrucao2\", "); sb.append("fb.MORA AS \"valorAtraso\", "); sb.append("fb.DESCONTOS AS \"valorDesconto\", "); sb.append("fb.DEDUCOES AS \"valorAbatimento\", "); sb.append("'cnpj' as \"tipoInscricaoPagador\", "); sb.append("pv.NUMDOCPUNTOVENTA AS \"numeroInscricaoPagador\", "); sb.append("pv.NOMBPUNTOVENTA AS \"nomePagador\", "); sb.append("pv.DIRECCIONCALLE || ', ' || pv.DIRECCIONNUMERO || ', ' || pl.NOMBPLAZA || ', ' || ci.NOMBCIUDAD || ', ' || es.NOMBESTADO AS \"enderecoCompletoPagador\", "); sb.append("pv.CODPOSTAL AS \"cepPagador\", "); sb.append("nvl(fb.porc_mora, 0) AS \"porcentagemMora\", "); sb.append("nvl(fb.porc_multa, 0) AS \"porcentagemMulta\" "); 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.BRADESCO_400_Envio); String nomeArquivo = "CB" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaBradesco cabecalhoRemessaBradesco = null; boolean constanteValidacao = ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.IS_VALIDAR_CONSTANTE_REMESSA.getDescricao()); for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = tupla[2] != null ? tupla[2].toString() : "0"; String nomeEmpresa = tupla[3].toString(); if(!tupla[8].toString().contains("-")){ log.error("NossoNumero não está no formato correto: " + tupla[8].toString() + ". Ignorando o registro FechamentoBoletoId = " + tupla[0].toString()); continue; } if(cabecalhoRemessaBradesco == null){ cabecalhoRemessaBradesco = new CabecalhoRemessaBradesco(); cabecalhoRemessaBradesco.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaBradesco.setDataGravacao(new Date()); cabecalhoRemessaBradesco.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaBradesco.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaBradesco(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaBradesco); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); }else if(!cabecalhoRemessaBradesco.getCodigoEmpresa().equals(codEmpresaBanco)){ cabecalhoRemessaBradesco = new CabecalhoRemessaBradesco(); cabecalhoRemessaBradesco.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaBradesco.setDataGravacao(new Date()); cabecalhoRemessaBradesco.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaBradesco.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaBradesco(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaBradesco); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); } DetalheObrigatorioBradesco detalhe = new DetalheObrigatorioBradesco(); String []doc = tupla[8].toString().split("-"); detalhe.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); detalhe.setCarteira(tupla[7].toString()); detalhe.setAgencia(tupla[4].toString()); detalhe.setContacorrente(tupla[5].toString()); detalhe.setDvConta(tupla[6].toString()); detalhe.setNumeroControleDoParticipante(tupla[0].toString()); detalhe.setNossoNumeroComDigito(doc[0] + doc[1]); detalhe.setCodigoDeOcorrencia(0); detalhe.setDataOcorrencia(null); detalhe.setNumeroDoDocumento(StringUtils.right(doc[0], 10)); detalhe.setVencimento((Date) tupla[9]); detalhe.setValor(new BigDecimal(tupla[10].toString().replace(",", "."))); detalhe.setEmissao((Date) tupla[12]); detalhe.setPercentualMulta( (BigDecimal) tupla[24] ); if (!constanteValidacao) { detalhe.setEspecieDeTitulo("01"); detalhe.setInstrucao1("00"); detalhe.setInstrucao2("00"); }else { detalhe.setEspecieDeTitulo(tupla[11].toString()); detalhe.setInstrucao1(tupla[13].toString()); detalhe.setInstrucao2(tupla[14].toString()); } detalhe.setDataLimiteDesconto(null); detalhe.setValorIOF(BigDecimal.ZERO); detalhe.setTipoInscricaoPagador(TipoInscricaoPagador.CNPJ); detalhe.setNomePagador(tupla[20].toString()); detalhe.setSacador_Avalista_Mensagem2(""); detalhe.setMensagem1(""); try{ if( tupla[15] != null ) { detalhe.setValorAtraso(new BigDecimal(tupla[15].toString().replace(",", "."))); }else if( tupla[23] != null ) { detalhe.setValorAtraso( calculaValorMora( (BigDecimal) tupla[23], new BigDecimal(tupla[10].toString().replaceAll(",", ".") )) ); }else { detalhe.setValorAtraso( BigDecimal.ZERO ); } }catch(Exception e){ throw new ValidacaoRemessaException("Erro ao setar o valor de atraso do boleto "+tupla[0]+", favor entrar em contato com o suporte! "); } try{ detalhe.setValorDesconto(new BigDecimal(tupla[16].toString().replace(",", "."))); }catch(Exception e){ } try{ detalhe.setValorAbatimentoConcedido(new BigDecimal(tupla[17].toString().replace(",", "."))); }catch(Exception e){ } try{ detalhe.setNumeroInscricaoPagador(tupla[19].toString().replaceAll("[^0-9]+", "")); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setEnderecoCompletoPagador(tupla[21].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Endereço do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ String cep = tupla[22].toString(); detalhe.setCEP_Prefixo(cep.substring(0,5)); detalhe.setCEP_Sufixo(cep.substring(5)); }catch(Exception e){ throw new ValidacaoRemessaException("O CEP do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } arquivoRemessaItem.addTitulo(detalhe); arquivoRemessaItem.getRodapeRemessa().setNumeroSequencialRegistro(arquivoRemessa.getItens().size()); } 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(); sb.append("SELECT "); sb.append(" fb.FECHAMENTOBOLETO_ID AS \"id\", "); //0 sb.append(" (NVL(fp.COUNT_REMESSA, 0) + 1) AS \"idRemessa\", "); //1 sb.append(" fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); //2 sb.append(" emp.NOMBEMPRESA AS \"nomeEmpresa\", "); //3 sb.append(" fp.BOLETO_BANCO_AGENCIA AS \"agencia\", "); //4 sb.append(" fp.BOLETO_BANCO_CONTA AS \"conta\", "); //5 sb.append(" fp.BOLETO_BANCO_CONTA_DIGITO AS \"dac\", "); //6 sb.append(" fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); //7 sb.append(" fb.NOSSONUMERO AS \"nossoNumero\", "); //8 sb.append(" fb.FECVENCIMENTO AS \"vencimento\", "); //9 sb.append(" fb.VALORDOCUMENTO AS \"valor\", "); //10 sb.append(" '01' AS \"especieTitulo\", "); //11 sb.append(" fb.FECDOCUMENTO AS \"dataEmissao\", ");//12 sb.append(" '00' AS \"instrucao1\", ");//13 sb.append(" '00' AS \"instrucao2\", ");//14 sb.append(" fb.MORA AS \"valorAtraso\", ");//15 sb.append(" fb.DESCONTOS AS \"valorDesconto\", ");//16 sb.append(" fb.DEDUCOES AS \"valorAbatimento\", ");//17 sb.append(" 'cnpj' as \"tipoInscricaoPagador\", ");//18 sb.append(" pv.NUMDOCPUNTOVENTA AS \"numeroInscricaoPagador\", ");//19 sb.append(" pv.NOMBPUNTOVENTA AS \"nomePagador\", ");//20 sb.append(" pv.DIRECCIONCALLE || ', ' || pv.DIRECCIONNUMERO as endereco,");//21 sb.append(" pl.NOMBPLAZA as bairro, ");//22 sb.append(" ci.NOMBCIUDAD AS cidade, ");//23 sb.append(" es.CVEESTADO AS estado, ");//24 sb.append(" pv.CODPOSTAL AS \"cepPagador\", "); //25 sb.append(" ecb.NUMINTEGRACION AS \"codigoTransmissao\", "); //26 sb.append(" fp.BOLETO_BANCO_AGENCIA_DIGITO AS \"agenciaDigito\", "); //27 sb.append(" emp.CNPJ AS \"numeroInscricaoSacado\", "); //28 sb.append("nvl(fb.porc_mora, 0) AS \"porcentagemMora\", ");//29 sb.append("nvl(fb.porc_multa, 0) AS \"porcentagemMulta\" ");//30 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.SANTANDER_400_Envio); String nomeArquivo = "CB" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaSantander cabecalhoRemessaSantander = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = tupla[2] != null ? tupla[2].toString() : "0"; String nomeEmpresa = tupla[3].toString(); Integer codigoTransmissao = tupla[26] != null ? Integer.valueOf(tupla[26].toString()) : 0; if(!tupla[8].toString().contains("-")){ log.error("NossoNumero não está no formato correto: " + tupla[8].toString() + ". Ignorando o registro FechamentoBoletoId = " + tupla[0].toString()); continue; } if(cabecalhoRemessaSantander == null){ cabecalhoRemessaSantander = new CabecalhoRemessaSantander(); cabecalhoRemessaSantander.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaSantander.setCodigoTransmissao(gerarCodigoTransmissao(tupla[4].toString(), tupla[27].toString(), codEmpresaBanco, tupla[5].toString(), tupla[6].toString())); cabecalhoRemessaSantander.setDataGravacao(new Date()); cabecalhoRemessaSantander.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaSantander.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaSantander(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaSantander); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); }else if(!cabecalhoRemessaSantander.getCodigoEmpresa().equals(codEmpresaBanco)){ cabecalhoRemessaSantander = new CabecalhoRemessaSantander(); cabecalhoRemessaSantander.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaSantander.setDataGravacao(new Date()); cabecalhoRemessaSantander.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaSantander.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaSantander(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaSantander); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); } DetalheObrigatorioSantander detalhe = new DetalheObrigatorioSantander(); String []doc = tupla[8].toString().split("-"); detalhe.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); detalhe.setTipoInscricao(TipoInscricaoPagador.CNPJ); detalhe.setCodigoTransmissao(codigoTransmissao.toString()); detalhe.setCarteira(tupla[7].toString()); detalhe.setAgencia(tupla[4].toString()); detalhe.setAgenciaCobradora(tupla[4].toString()); detalhe.setContacorrente(tupla[5].toString()); detalhe.setDvConta(tupla[6].toString()); detalhe.setNumControleDoParticipante(tupla[0].toString()); detalhe.setNossoNumeroComDigito(doc[0] + doc[1]); detalhe.setCodigoDeOcorrencia(0); detalhe.setDataOcorrencia(null); detalhe.setNumeroDoDocumento(doc[0] + doc[1]); detalhe.setVencimento((Date) tupla[9]); detalhe.setValor(new BigDecimal(tupla[10].toString().replaceAll(",", "."))); detalhe.setEspecieDeTitulo("01"); detalhe.setEmissao((Date) tupla[12]); detalhe.setInstrucao1("00"); detalhe.setInstrucao2("00"); detalhe.setDataLimiteDesconto(null); detalhe.setDvAgencia(tupla[27].toString()); detalhe.setCodigoEmpresa(codEmpresaBanco); detalhe.setCodigoTransmissao(gerarCodigoTransmissao(tupla[4].toString(), tupla[27].toString(), codEmpresaBanco, tupla[5].toString(), tupla[6].toString())); detalhe.setValorIOF(BigDecimal.ZERO); detalhe.setNomeSacado(tupla[20].toString()); detalhe.setMensagem1(""); detalhe.setSacadorAvalista(""); detalhe.setPercentualMulta( (BigDecimal) tupla[30] ); try{ if( tupla[15] != null ) { detalhe.setValorAtraso(new BigDecimal(tupla[15].toString().replaceAll(",", "."))); }else if( tupla[29] != null ) { detalhe.setValorAtraso( calculaValorMora( (BigDecimal) tupla[29], new BigDecimal(tupla[10].toString().replaceAll(",", ".") )) ); }else { detalhe.setValorAtraso( BigDecimal.ZERO ); } }catch(Exception e){ throw new ValidacaoRemessaException("Erro ao setar o valor de atraso do boleto "+tupla[0]+", favor entrar em contato com o suporte! "); } try{ detalhe.setValorDesconto(new BigDecimal(tupla[16].toString().replaceAll(",", "."))); }catch(Exception e){} try{ detalhe.setValorAbatimentoConcedido(new BigDecimal(tupla[17].toString().replaceAll(",", "."))); }catch(Exception e){} try{ detalhe.setNumeroInscricao(tupla[19].toString().replaceAll("[^0-9]+", "")); }catch(Exception e){ throw new ValidacaoRemessaException("A inscrição do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setNumeroInscricaoSacado(tupla[28].toString().replaceAll("[^0-9]+", "")); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setEnderecoSacado(tupla[21].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Endereco do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setBairroSacado(tupla[22].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setCidade(tupla[23].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("A Cidade do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setEstado(tupla[24].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ String cep = tupla[25].toString(); detalhe.setCepSacado(cep.substring(0,5)); detalhe.setComplementoCepSacado(cep.substring(5)); }catch(Exception e){ throw new ValidacaoRemessaException("O CEP do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } arquivoRemessaItem.addTitulo(detalhe); arquivoRemessaItem.getRodapeRemessa().setNumeroSequencialRegistro(arquivoRemessa.getItens().size()); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } public ArquivoRemessa remessaMercantil(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(" fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append(" emp.NOMBEMPRESA AS \"nomeEmpresa\", "); 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(" fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); sb.append(" fb.NOSSONUMERO AS \"nossoNumero\", "); sb.append(" fb.FECVENCIMENTO AS \"vencimento\", "); sb.append(" fb.VALORDOCUMENTO AS \"valor\", "); sb.append(" '01' AS \"especieTitulo\", "); sb.append(" fb.FECDOCUMENTO AS \"dataEmissao\", "); sb.append(" '00' AS \"instrucao1\", "); sb.append(" '00' AS \"instrucao2\", "); sb.append(" fb.MORA AS \"valorAtraso\", "); sb.append(" fb.DESCONTOS AS \"valorDesconto\", "); sb.append(" fb.DEDUCOES AS \"valorAbatimento\", "); sb.append(" 'cnpj' as \"tipoInscricaoPagador\", "); sb.append(" pv.NUMDOCPUNTOVENTA AS \"numeroInscricaoPagador\", "); sb.append(" pv.NOMBPUNTOVENTA AS \"nomePagador\", "); sb.append(" pv.DIRECCIONCALLE || ', ' || pv.DIRECCIONNUMERO as endereco,"); sb.append(" pl.NOMBPLAZA as bairro, "); sb.append(" ci.NOMBCIUDAD AS cidade, "); sb.append(" es.CVEESTADO AS estado, "); sb.append(" pv.CODPOSTAL AS \"cepPagador\", "); sb.append(" ecb.NUMINTEGRACION AS \"numeroContrato\" "); 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.MERCANTIL_400_Envio); String nomeArquivo = "CB" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaMercantil cabecalhoRemessaMercantil = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = tupla[2] != null ? tupla[2].toString() : "0"; String nomeEmpresa = tupla[3].toString(); if(!tupla[8].toString().contains("-")){ log.error("NossoNumero não está no formato correto: " + tupla[8].toString() + ". Ignorando o registro FechamentoBoletoId = " + tupla[0].toString()); continue; } if(cabecalhoRemessaMercantil == null){ cabecalhoRemessaMercantil = new CabecalhoRemessaMercantil(); cabecalhoRemessaMercantil.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaMercantil.setAgenciaOrigem(tupla[4].toString()); cabecalhoRemessaMercantil.setCnpj(Long.valueOf(tupla[19].toString().replaceAll("[^0-9]+", ""))); cabecalhoRemessaMercantil.setDataGravacao(new Date()); cabecalhoRemessaMercantil.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaMercantil.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaMercantil(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaMercantil); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); }else if(!cabecalhoRemessaMercantil.getCodigoEmpresa().equals(codEmpresaBanco)){ cabecalhoRemessaMercantil = new CabecalhoRemessaMercantil(); cabecalhoRemessaMercantil.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaMercantil.setDataGravacao(new Date()); cabecalhoRemessaMercantil.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaMercantil.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaMercantil(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaMercantil); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); } DetalheObrigatorioMercantil detalhe = new DetalheObrigatorioMercantil(); String []doc = tupla[8].toString().split("-"); detalhe.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); detalhe.setNumeroContrato(Integer.valueOf(tupla[26].toString())); detalhe.setAgenciaOrigem(tupla[4].toString()); detalhe.setSeuNumero(Integer.valueOf(tupla[0].toString())); detalhe.setNossoNumero(doc[0]); detalhe.setDigitoVerificador(doc[1]); detalhe.setCodigoDeOcorrencia(0); detalhe.setDataOcorrencia(null); detalhe.setNumeroDoDocumento(StringUtils.right(doc[0], 10)); detalhe.setVencimento((Date) tupla[9]); detalhe.setValorTitulo(new BigDecimal(tupla[10].toString().replaceAll(",", "."))); detalhe.setEspecieDeTitulo(tupla[11].toString()); detalhe.setEmissao((Date) tupla[12]); detalhe.setInstrucao1(tupla[13].toString()); detalhe.setInstrucao2(tupla[14].toString()); detalhe.setDataLimiteDesconto(null); detalhe.setMensagem1(""); detalhe.setSacadorAvalistaMensagem2(""); detalhe.setValorIOF(BigDecimal.ZERO); detalhe.setNomePagador(tupla[20].toString()); try{ detalhe.setValorAtraso(new BigDecimal(tupla[15].toString().replaceAll(",", "."))); }catch(Exception e){} try{ detalhe.setValorDesconto(new BigDecimal(tupla[16].toString().replaceAll(",", "."))); }catch(Exception e){} try{ detalhe.setValorAbatimentoConcedido(new BigDecimal(tupla[17].toString().replaceAll(",", "."))); }catch(Exception e){} try{ detalhe.setEnderecoCompletoPagador(tupla[21].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Endereço do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setBairro(tupla[22].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setCidade(tupla[23].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setEstado(tupla[24].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ detalhe.setCnpj(Long.valueOf(tupla[19].toString().replaceAll("[^0-9]+", ""))); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ String cep = tupla[25].toString(); detalhe.setCepPrefixo(cep.substring(0,5)); detalhe.setCepSufixo(cep.substring(5)); }catch(Exception e){ throw new ValidacaoRemessaException("O CEP do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } arquivoRemessaItem.addTitulo(detalhe); arquivoRemessaItem.getRodapeRemessa().setNumeroSequencialRegistro(arquivoRemessa.getItens().size()); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } @Override public ArquivoRemessa remessaItau(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("fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append("emp.CNPJ AS \"cnpj\", "); sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", "); 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("fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); sb.append("fb.NOSSONUMERO AS \"nossoNumero\", "); sb.append("fb.FECVENCIMENTO AS \"vencimento\", "); sb.append("fb.VALORDOCUMENTO AS \"valor\", "); sb.append("99 AS \"especieTitulo\", "); sb.append("fb.FECDOCUMENTO AS \"dataEmissao\", "); sb.append("' ' AS \"instrucao1\", "); sb.append("' ' AS \"instrucao2\", "); sb.append("fb.MORA AS \"valorAtraso\", "); sb.append("fb.DESCONTOS AS \"valorDesconto\", "); sb.append("fb.DEDUCOES AS \"valorAbatimento\", "); sb.append("'cnpj' as \"tipoInscricaoPagador\", "); 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.ITAU_400_Envio); String nomeArquivo = "RE" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; int contador = 1; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaItau cabecalhoRemessaItau = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; Integer codEmpresaBanco = Integer.valueOf(tupla[5].toString() + tupla[6].toString()); String nomeEmpresa = tupla[4].toString(); if(cabecalhoRemessaItau == null){ cabecalhoRemessaItau = new CabecalhoRemessaItau(); cabecalhoRemessaItau.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaItau.setNumeroSequencialRegistro(contador); cabecalhoRemessaItau.setDataGeracao(new Date()); cabecalhoRemessaItau.setAgencia(Integer.valueOf(tupla[5].toString())); cabecalhoRemessaItau.setConta(Integer.valueOf(tupla[6].toString())); cabecalhoRemessaItau.setDacConta(Integer.valueOf(tupla[7].toString())); cabecalhoRemessaItau.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaItau(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaItau); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); }else if(!(cabecalhoRemessaItau.getAgencia().toString() + cabecalhoRemessaItau.getConta().toString()).equals(codEmpresaBanco.toString())){ cabecalhoRemessaItau = new CabecalhoRemessaItau(); cabecalhoRemessaItau.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaItau.setNumeroSequencialRegistro(contador); cabecalhoRemessaItau.setDataGeracao(new Date()); cabecalhoRemessaItau.setAgencia(Integer.valueOf(tupla[5].toString())); cabecalhoRemessaItau.setConta(Integer.valueOf(tupla[6].toString())); cabecalhoRemessaItau.setDacConta(Integer.valueOf(tupla[7].toString())); cabecalhoRemessaItau.setNomeEmpresa(nomeEmpresa); arquivoRemessaItem = new ArquivoRemessaItau(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaItau); arquivoRemessaItem.setRodapeRemessa(new RodapeRemessaPadrao()); arquivoRemessa.addItem(arquivoRemessaItem); } DetalheObrigatorioItau detalhe = new DetalheObrigatorioItau(); String []doc = tupla[9].toString().split("-"); detalhe.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); detalhe.setNumeroInscricao(codEmpresaBanco); detalhe.setAgencia(Integer.valueOf(tupla[5].toString())); detalhe.setConta(Integer.valueOf(tupla[6].toString())); detalhe.setDacConta(Integer.valueOf(tupla[7].toString())); detalhe.setInstrucaoAlegacao(0000); detalhe.setNossoNumero(Integer.valueOf(doc[0])); detalhe.setNumCpfCnpj(tupla[3].toString()); detalhe.setQtdMoeda(BigDecimal.ZERO); detalhe.setNrCarteira(Integer.valueOf(tupla[8].toString())); detalhe.setCodigoDeOcorrencia(01); detalhe.setNumeroDoDocumento(tupla[0].toString()); detalhe.setVencimento((Date) tupla[10]); detalhe.setValor(new BigDecimal(tupla[11].toString().replaceAll(",", "."))); detalhe.setAgenciaCobradora(0); detalhe.setEspecieDeTitulo("99"); detalhe.setAceite("A"); detalhe.setEmissao((Date) tupla[13]); detalhe.setInstrucao1("05"); detalhe.setInstrucao1("00"); detalhe.setDataDesconto(null); detalhe.setIOF_Devido(BigDecimal.ZERO); detalhe.setNomeSacado(tupla[21].toString()); detalhe.setTipoInscricaoSacado(TipoInscricaoPagador.CNPJ); detalhe.setDataDeMora(null); detalhe.setPrazo(00); detalhe.setNumeroSequencialRegistro(++contador); detalhe.setSacadorAvalista(tupla[21].toString()); try{ detalhe.setJurosDeMora(new BigDecimal(tupla[16].toString().replaceAll(",", "."))); }catch(Exception e){ detalhe.setJurosDeMora(BigDecimal.ZERO); } try{ detalhe.setDescontoConcedido(new BigDecimal(tupla[17].toString().replaceAll(",", "."))); }catch(Exception e){ detalhe.setDescontoConcedido(BigDecimal.ZERO); } try{ detalhe.setAbatimentoConcedido(new BigDecimal(tupla[18].toString().replaceAll(",", "."))); }catch(Exception e){ detalhe.setAbatimentoConcedido(BigDecimal.ZERO); } try{ detalhe.setNumeroInscricaoSacado(Long.valueOf(tupla[20].toString())); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } try{ detalhe.setLogradouroSacado(tupla[22].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } try{ detalhe.setBairroSacado(tupla[23].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } try{ detalhe.setCepSacado(tupla[24].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O CEP do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } try{ detalhe.setCidade(tupla[25].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } try{ detalhe.setEstado(tupla[26].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[21]+" está fora do padrão, favor corrigir"); } arquivoRemessaItem.addTitulo(detalhe); arquivoRemessaItem.getRodapeRemessa().setNumeroSequencialRegistro(contador); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } @Override public ArquivoRemessa remessaBancoBrasil(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("fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append("emp.CNPJ AS \"cnpj\", "); sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", "); 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("fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); sb.append("fb.NOSSONUMERO AS \"nossoNumero\", "); sb.append("fb.FECVENCIMENTO AS \"vencimento\", "); sb.append("fb.VALORDOCUMENTO AS \"valor\", "); sb.append("99 AS \"especieTitulo\", "); sb.append("fb.FECDOCUMENTO AS \"dataEmissao\", "); sb.append("' ' AS \"instrucao1\", "); sb.append("' ' AS \"instrucao2\", "); sb.append("fb.MORA AS \"valorAtraso\", "); sb.append("fb.DESCONTOS AS \"valorDesconto\", "); sb.append("fb.DEDUCOES AS \"valorAbatimento\", "); sb.append("'cnpj' as \"tipoInscricaoPagador\", "); 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.NOMBESTADO AS \"estadoPagador\", "); sb.append("fp.BOLETO_BANCO_AGENCIA_DIGITO AS \"digitoAgencia\", "); sb.append("fp.BOLETO_BANCO_CARTEIRA_VARIAVEL AS \"variavelCarteira\" "); 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.BB_240_Envio); String nomeArquivo = "BB" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaBancoBrasil cabecalhoRemessaBancoBrasil = null; CabecalhoLoteRemessaBancoBrasil cabecalhoLoteRemessaBancoBrasil = null; RodapeRemessaLoteBancoBrasil rodapeRemessaLoteBancoBrasil = null; RodapeRemessaBancoBrasil rodapeRemessaBancoBrasil = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = ((BigDecimal) tupla[2]).toString(); codEmpresaBanco = StringUtils.right("000000000" + codEmpresaBanco, 9); String nomeEmpresa = tupla[4].toString(); DateFormat df = new SimpleDateFormat("HHmmss"); if(cabecalhoRemessaBancoBrasil == null || !(cabecalhoRemessaBancoBrasil.getNumConvenio()).equals(codEmpresaBanco)){ cabecalhoRemessaBancoBrasil = new CabecalhoRemessaBancoBrasil(); cabecalhoRemessaBancoBrasil.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaBancoBrasil.setDataGeracao(new Date()); cabecalhoRemessaBancoBrasil.setHoraGeracao(Integer.parseInt(df.format(new Date()))); cabecalhoRemessaBancoBrasil.setCpfCnpj(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); cabecalhoRemessaBancoBrasil.setNumCpfCnpj(tupla[3].toString()); cabecalhoRemessaBancoBrasil.setDensidadeArquivo("00000"); cabecalhoRemessaBancoBrasil.setNumAgencia(tupla[5].toString()); cabecalhoRemessaBancoBrasil.setDigAgencia(((BigDecimal) tupla[27]).toString()); cabecalhoRemessaBancoBrasil.setDigAgenciaConta(" "); cabecalhoRemessaBancoBrasil.setNumContaCorrente(tupla[6].toString()); cabecalhoRemessaBancoBrasil.setDigContaCorrente(tupla[7].toString()); cabecalhoRemessaBancoBrasil.setNumCarteira(tupla[8].toString()); cabecalhoRemessaBancoBrasil.setNomeEmpresa(nomeEmpresa); cabecalhoRemessaBancoBrasil.setNumConvenio(codEmpresaBanco); cabecalhoLoteRemessaBancoBrasil = new CabecalhoLoteRemessaBancoBrasil(); cabecalhoLoteRemessaBancoBrasil.setCpfCnpj(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); cabecalhoLoteRemessaBancoBrasil.setNumCpfCnpj(tupla[3].toString()); cabecalhoLoteRemessaBancoBrasil.setNumAgencia(tupla[5].toString()); cabecalhoLoteRemessaBancoBrasil.setDigAgencia(((BigDecimal) tupla[27]).toString()); cabecalhoLoteRemessaBancoBrasil.setDigAgenciaConta(" "); cabecalhoLoteRemessaBancoBrasil.setNumContaCorrente(tupla[6].toString()); cabecalhoLoteRemessaBancoBrasil.setDigContaCorrente(tupla[7].toString()); cabecalhoLoteRemessaBancoBrasil.setNumCarteira(tupla[8].toString()); cabecalhoLoteRemessaBancoBrasil.setNomeEmpresa(nomeEmpresa); cabecalhoLoteRemessaBancoBrasil.setNumConvenio(codEmpresaBanco); cabecalhoLoteRemessaBancoBrasil.setDataGeracao(new Date()); cabecalhoLoteRemessaBancoBrasil.setNumeroRemessa(idRemessa); try{ cabecalhoRemessaBancoBrasil.setNumVarCarteira(((BigDecimal) tupla[28]).toString()); cabecalhoLoteRemessaBancoBrasil.setNumVarCarteira(((BigDecimal) tupla[28]).toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "A Variação Carteira da empresa %s está fora do padrão, favor corrigir", nomeEmpresa) ); } cabecalhoRemessaBancoBrasil.setCabecalhoLoteRemessaBancoBrasil(cabecalhoLoteRemessaBancoBrasil); arquivoRemessaItem = new ArquivoRemessaBancoBrasil(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaBancoBrasil); arquivoRemessa.addItem(arquivoRemessaItem); } String []doc = tupla[9].toString().split("-"); DetalheObrigatorioDadosTitulosBancoBrasil titulosBancoBrasil = new DetalheObrigatorioDadosTitulosBancoBrasil(); titulosBancoBrasil.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); titulosBancoBrasil.setNumAgencia(tupla[5].toString()); titulosBancoBrasil.setDigAgencia(((BigDecimal) tupla[27]).toString()); titulosBancoBrasil.setNumContaCorrente(tupla[6].toString()); titulosBancoBrasil.setDigContaCorrente(tupla[7].toString()); titulosBancoBrasil.setDigAgenciaConta(" "); titulosBancoBrasil.setNossoNumeroBB(doc[0]); titulosBancoBrasil.setCodCarteira(7); titulosBancoBrasil.setFormaCadTituloBanco(" "); titulosBancoBrasil.setTipoDocumento(" "); titulosBancoBrasil.setIdentEmissaoBloqueto(" "); titulosBancoBrasil.setIdentDistribuicao(" "); titulosBancoBrasil.setNumeroDoDocumento(tupla[0].toString()); titulosBancoBrasil.setVencimento((Date) tupla[10]); titulosBancoBrasil.setValor(new BigDecimal(tupla[11].toString().replace(",", "."))); titulosBancoBrasil.setAgenciaCobradora(null); titulosBancoBrasil.setDigAgenciaCobradora(null); titulosBancoBrasil.setAceite(AceiteBB.NAO_ACEITE); titulosBancoBrasil.setEmissao((Date) tupla[13]); try{ titulosBancoBrasil.setCodMora(1); titulosBancoBrasil.setJurosDeMora(new BigDecimal(tupla[16].toString().replace(",", "."))); titulosBancoBrasil.setDataMora((Date) tupla[10]); }catch(NullPointerException e){ titulosBancoBrasil.setCodMora(1); titulosBancoBrasil.setDataMora((Date) tupla[10]); titulosBancoBrasil.setJurosDeMora(BigDecimal.ZERO); } try{ BigDecimal desconto = new BigDecimal(tupla[17].toString().replace(",", ".")); if(desconto.equals(BigDecimal.ZERO)) { zerarDesconto(titulosBancoBrasil); } titulosBancoBrasil.setCodigoDesconto(1); titulosBancoBrasil.setDataDesconto((Date) tupla[10]); titulosBancoBrasil.setDescontoConcedido(desconto); }catch(NullPointerException e){ zerarDesconto(titulosBancoBrasil); } titulosBancoBrasil.setIOF_Devido(BigDecimal.ZERO); try{ titulosBancoBrasil.setAbatimentoConcedido(new BigDecimal(tupla[18].toString().replace(",", "."))); }catch(NullPointerException e){ titulosBancoBrasil.setAbatimentoConcedido(BigDecimal.ZERO); } titulosBancoBrasil.setCodigoProtesto(3); titulosBancoBrasil.setDiasProtesto(0); titulosBancoBrasil.setCodigoBaixa(2); titulosBancoBrasil.setDiasBaixa(0); DetalheObrigatorioDadosPagadorBancoBrasil pagadorBancoBrasil = new DetalheObrigatorioDadosPagadorBancoBrasil(); pagadorBancoBrasil.setTipoInscricaoSacado(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); String ptoVenda = tupla[21].toString(); pagadorBancoBrasil.setNomeSacado(ptoVenda.toString()); String cep = ""; try{ cep = StringUtils.right(ZERO_ESQUERDA + tupla[24].toString(), 8); }catch(Exception e){ cep = ZERO_ESQUERDA; } int cepPrefix = Integer.parseInt(cep.substring(0, 5)); int cepSufix = Integer.parseInt(cep.substring(5)); pagadorBancoBrasil.setCepSacado(cepPrefix); pagadorBancoBrasil.setSufixoCep(cepSufix); pagadorBancoBrasil.setNossoNumeroNoBancoCorresp(""); try{ pagadorBancoBrasil.setNumeroInscricaoSacado(tupla[20].toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "O CNPJ do ponto de venda %s está fora do padrão, favor corrigir", ptoVenda) ); } try{ pagadorBancoBrasil.setLogradouroSacado(tupla[22].toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "O Logradouro do ponto de venda %s está fora do padrão, favor corrigir", ptoVenda) ); } try{ pagadorBancoBrasil.setBairroSacado(tupla[23].toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "O Bairro do ponto de venda %s está fora do padrão, favor corrigir", ptoVenda) ); } try{ pagadorBancoBrasil.setCidade(tupla[25].toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "A cidade do ponto de venda %s está fora do padrão, favor corrigir", ptoVenda) ); } try{ pagadorBancoBrasil.setEstado(tupla[26].toString()); }catch(Exception e){ throw new ValidacaoRemessaException( String.format( "O Estado do ponto de venda %s está fora do padrão, favor corrigir", ptoVenda) ); } titulosBancoBrasil.setDetalheObrigatorioDadosPagadorBancoBrasil(pagadorBancoBrasil); arquivoRemessaItem.addTitulo(titulosBancoBrasil); } if(true && arquivoRemessaItem != null){ rodapeRemessaLoteBancoBrasil = new RodapeRemessaLoteBancoBrasil(); //rodapeRemessaLoteBancoBrasil.setLoteServico(loteCount); rodapeRemessaBancoBrasil = new RodapeRemessaBancoBrasil(); //rodapeRemessaBancoBrasil.setLoteServico(9999); rodapeRemessaBancoBrasil.setQtdContas(0); rodapeRemessaBancoBrasil.setRodapeRemessaLoteBancoBrasil(rodapeRemessaLoteBancoBrasil); arquivoRemessaItem.setRodapeRemessa(rodapeRemessaBancoBrasil); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } @Override public ArquivoRemessa remessaSicoob(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("fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append("emp.CNPJ AS \"cnpj\", "); sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", "); 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("fp.BOLETO_BANCO_CARTEIRA AS \"carteira\", "); sb.append("fb.NOSSONUMERO AS \"nossoNumero\", "); sb.append("fb.FECVENCIMENTO AS \"vencimento\", "); sb.append("fb.VALORDOCUMENTO AS \"valor\", "); sb.append("99 AS \"especieTitulo\", "); sb.append("fb.FECDOCUMENTO AS \"dataEmissao\", "); sb.append("' ' AS \"instrucao1\", "); sb.append("' ' AS \"instrucao2\", "); sb.append("fb.MORA AS \"valorAtraso\", "); sb.append("fb.DESCONTOS AS \"valorDesconto\", "); sb.append("fb.DEDUCOES AS \"valorAbatimento\", "); sb.append("'cnpj' as \"tipoInscricaoPagador\", "); 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.NOMBESTADO AS \"estadoPagador\", "); sb.append("fp.BOLETO_BANCO_AGENCIA_DIGITO AS \"digitoAgencia\", "); sb.append("fp.BOLETO_BANCO_CARTEIRA_VARIAVEL AS \"variavelCarteira\" "); 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.SICOOB_240_Envio); String nomeArquivo = "Sicoob" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; int seqRegistro = 0; int qtdeTitulos = 0; BigDecimal valorTitulos = BigDecimal.ZERO; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaSicoob cabecalhoRemessaSicoob = null; CabecalhoLoteRemessaSicoob cabecalhoLoteRemessaSicoob = null; RodapeRemessaLoteSicoob rodapeRemessaLoteSicoob = null; RodapeRemessaSicoob rodapeRemessaSicoob = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = tupla[2] == null ? "" : ((BigDecimal) tupla[2]).toString(); codEmpresaBanco = StringUtils.right("000000000" + codEmpresaBanco, 9); String nomeEmpresa = tupla[4].toString(); BigDecimal valor = new BigDecimal(tupla[11].toString().replaceAll(",", ".")); qtdeTitulos++; valorTitulos.add( valor ); if(cabecalhoRemessaSicoob == null ){ cabecalhoRemessaSicoob = new CabecalhoRemessaSicoob(); cabecalhoRemessaSicoob.setCpfCnpj(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); cabecalhoRemessaSicoob.setNumCpfCnpj(tupla[3].toString()); cabecalhoRemessaSicoob.setNumAgencia(tupla[5].toString()); cabecalhoRemessaSicoob.setDigAgencia(((BigDecimal) tupla[27]).toString()); cabecalhoRemessaSicoob.setNumContaCorrente(tupla[6].toString()); cabecalhoRemessaSicoob.setDigContaCorrente(tupla[7].toString()); cabecalhoRemessaSicoob.setNomeEmpresa(nomeEmpresa); cabecalhoRemessaSicoob.setNumRemessa(idRemessa); cabecalhoRemessaSicoob.setDataGravacao(new Date()); cabecalhoRemessaSicoob.setNumConvenio(codEmpresaBanco); cabecalhoLoteRemessaSicoob = new CabecalhoLoteRemessaSicoob(); cabecalhoLoteRemessaSicoob.setCpfCnpj(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); cabecalhoLoteRemessaSicoob.setNumCpfCnpj(tupla[3].toString()); cabecalhoLoteRemessaSicoob.setNumAgencia(tupla[5].toString()); cabecalhoLoteRemessaSicoob.setDigAgencia(((BigDecimal) tupla[27]).toString()); cabecalhoLoteRemessaSicoob.setNumContaCorrente(tupla[6].toString()); cabecalhoLoteRemessaSicoob.setDigContaCorrente(tupla[7].toString()); cabecalhoLoteRemessaSicoob.setNomeEmpresa(nomeEmpresa); cabecalhoLoteRemessaSicoob.setNumeroRemessa(idRemessa); cabecalhoLoteRemessaSicoob.setDataGeracao(new Date()); cabecalhoRemessaSicoob.setCabecalhoLoteRemessaSicoob(cabecalhoLoteRemessaSicoob); arquivoRemessaItem = new ArquivoRemessaSicoob(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaSicoob); arquivoRemessa.addItem(arquivoRemessaItem); }else { try{ if( !(cabecalhoRemessaSicoob.getNumConvenio()).equals(codEmpresaBanco)) { throw new ValidacaoRemessaException("O codigo de convênio não confere com o codigo do banco \r\n favor entrar em contato com o suporte! "); } }catch(Exception e){ throw new ValidacaoRemessaException("Houve um erro na montagem do cabeçalho do arquivo de remessa \r\n favor entrar em contato com o suporte! "); } } String []doc = tupla[9].toString().split("-"); DetalheObrigatorioSicoob titulosSicoob = new DetalheObrigatorioSicoob(); titulosSicoob.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); titulosSicoob.setNumSeqRegistro( seqRegistro++ ); titulosSicoob.setNumAgencia(tupla[5].toString()); titulosSicoob.setDigAgencia(((BigDecimal) tupla[27]).toString()); titulosSicoob.setNumContaCorrente(tupla[6].toString()); titulosSicoob.setDigContaCorrente(tupla[7].toString()); titulosSicoob.setNossoNumero(doc[0]); titulosSicoob.setNumeroDoDocumento(tupla[0].toString()); titulosSicoob.setVencimento((Date) tupla[10]); titulosSicoob.setValor( valor ); titulosSicoob.setEmissao((Date) tupla[13]); try{ titulosSicoob.setCodMora(1); titulosSicoob.setJurosDeMora(new BigDecimal(tupla[16].toString().replaceAll(",", "."))); titulosSicoob.setDataMora((Date) tupla[10]); }catch(NullPointerException e){ titulosSicoob.setCodMora(1); titulosSicoob.setDataMora((Date) tupla[10]); titulosSicoob.setJurosDeMora(BigDecimal.ZERO); } try{ titulosSicoob.setCodigoDesconto(1); titulosSicoob.setDataDesconto((Date) tupla[10]); titulosSicoob.setDescontoConcedido(new BigDecimal(tupla[17].toString().replaceAll(",", "."))); }catch(NullPointerException e){ titulosSicoob.setCodigoDesconto(1); titulosSicoob.setDataDesconto((Date) tupla[10]); titulosSicoob.setDescontoConcedido(BigDecimal.ZERO); } titulosSicoob.setIofDevido(BigDecimal.ZERO); try{ titulosSicoob.setAbatimentoConcedido(new BigDecimal(tupla[18].toString().replaceAll(",", "."))); }catch(NullPointerException e){ titulosSicoob.setAbatimentoConcedido(BigDecimal.ZERO); } titulosSicoob.setNossoNumeroEmp(tupla[0].toString()); titulosSicoob.setCodigoProtesto(3); titulosSicoob.setDiasProtesto(0); titulosSicoob.setCodigoBaixa(2); titulosSicoob.setDiasBaixa(0); titulosSicoob.setNumeroContrato(Integer.parseInt(tupla[0].toString())); DetalheObrigatorioDadosPagadorSicoob pagadorSicoob = new DetalheObrigatorioDadosPagadorSicoob(); pagadorSicoob.setNumeroSequencialRegistro( seqRegistro++ ); pagadorSicoob.setTipoInscricaoSacado(Integer.parseInt(TipoInscricaoPagador.CNPJ.getId())); pagadorSicoob.setNomeSacado(tupla[21].toString()); String cep = ""; try{ cep = StringUtils.right(ZERO_ESQUERDA + tupla[24].toString(), 8); }catch(Exception e){ cep = ZERO_ESQUERDA; } int cepPrefix = Integer.parseInt(cep.substring(0, 5)); int cepSufix = Integer.parseInt(cep.substring(5)); pagadorSicoob.setCepSacado(cepPrefix); pagadorSicoob.setSufixoCep(cepSufix); pagadorSicoob.setCodBancoCorresp(0); pagadorSicoob.setNossoNumeroNoBancoCorresp(""); try{ pagadorSicoob.setNumeroInscricaoSacado(tupla[20].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ pagadorSicoob.setLogradouroSacado(tupla[22].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ pagadorSicoob.setBairroSacado(tupla[23].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ pagadorSicoob.setCidade(tupla[25].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } try{ pagadorSicoob.setEstado(tupla[26].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" está fora do padrão, favor corrigir"); } titulosSicoob.setDetalheObrigatorioDadosPagadorSicoob(pagadorSicoob); arquivoRemessaItem.addTitulo(titulosSicoob); } if(arquivoRemessaItem != null){ rodapeRemessaLoteSicoob = new RodapeRemessaLoteSicoob(); rodapeRemessaLoteSicoob.setNumeroSequencialRegistro(qtdeTitulos); rodapeRemessaLoteSicoob.setValorRegistros( valorTitulos ); rodapeRemessaSicoob = new RodapeRemessaSicoob(); rodapeRemessaSicoob.setQtdLotes(1); rodapeRemessaSicoob.setQtdArquivos(qtdeTitulos); rodapeRemessaSicoob.setQtdContas(0); rodapeRemessaSicoob.setRodapeRemessaLoteSicoob(rodapeRemessaLoteSicoob); arquivoRemessaItem.setRodapeRemessa(rodapeRemessaSicoob); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } @Override public ArquivoRemessa remessaCaixa(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("fp.COD_EMP_BANCO AS \"codEmpresaBanco\", "); sb.append("emp.CNPJ AS \"cnpj\", "); sb.append("emp.NOMBEMPRESA AS \"nomeEmpresa\", "); sb.append("fp.BOLETO_BANCO_AGENCIA AS \"agencia\", "); 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("(nvl(fb.porc_mora, 0)) AS \"porcMora\", "); sb.append("fb.DESCONTOS AS \"valorDesconto\", "); sb.append("fb.DEDUCOES AS \"valorAbatimento\", "); sb.append("'cnpj' as \"tipoInscricaoPagador\", "); 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.NOMBESTADO 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 list = query.list(); ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.CAIXA_400_Envio); String nomeArquivo = "CEF" + new SimpleDateFormat("ddMM").format(new Date()); int variavel = 0; int seqRegistro = 0; int qtdeTitulos = 0; ArquivoRemessaItem arquivoRemessaItem = null; CabecalhoRemessaCaixa cabecalhoRemessaCaixa = null; RodapeRemessaPadrao rodape = null; for(Object[] tupla : list){ Integer idRemessa = Integer.valueOf(tupla[1].toString()); variavel = idRemessa; String codEmpresaBanco = tupla[2] == null ? "" : ((BigDecimal) tupla[2]).toString(); String versao = codEmpresaBanco.length() >6 ?"007":""; codEmpresaBanco = StringUtils.right("0000000" + codEmpresaBanco, 7); String nomeEmpresa = tupla[4].toString(); BigDecimal valor = new BigDecimal(tupla[8].toString().replaceAll(",", ".")); qtdeTitulos++; if(cabecalhoRemessaCaixa == null ){ cabecalhoRemessaCaixa = new CabecalhoRemessaCaixa(); cabecalhoRemessaCaixa.setAgenciaBeneficiario(tupla[5].toString()); cabecalhoRemessaCaixa.setCodigoEmpresa(codEmpresaBanco); cabecalhoRemessaCaixa.setNomeEmpresa(nomeEmpresa); cabecalhoRemessaCaixa.setDataGravacao(new Date()); cabecalhoRemessaCaixa.setNumeroSequencialRemessa(idRemessa); cabecalhoRemessaCaixa.setVersaoLayout(versao); arquivoRemessaItem = new ArquivoRemessaCaixa(); arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessaCaixa); arquivoRemessa.addItem(arquivoRemessaItem); } DetalheObrigatorioCaixa titulosCaixa = new DetalheObrigatorioCaixa(); titulosCaixa.setIdBoletoFechamento(Integer.valueOf(tupla[0].toString())); titulosCaixa.setNumeroSequencialRegistro( seqRegistro++ ); titulosCaixa.setNossoNumero(tupla[6].toString()); titulosCaixa.setNumeroDoDocumento(tupla[0].toString()); titulosCaixa.setVencimento((Date) tupla[7]); titulosCaixa.setValor( valor ); titulosCaixa.setEmissao((Date) tupla[9]); try{ titulosCaixa.setValorAtraso( calculaValorMora( new BigDecimal(tupla[10].toString().replaceAll(",", ".") ), valor )); }catch(NullPointerException e){ titulosCaixa.setValorAtraso(BigDecimal.ZERO); } try{ titulosCaixa.setDataLimiteDesconto((Date) tupla[7]); titulosCaixa.setValorDesconto(new BigDecimal(tupla[11].toString().replaceAll(",", "."))); }catch(NullPointerException e){ titulosCaixa.setDataLimiteDesconto((Date) tupla[7]); titulosCaixa.setValorDesconto(BigDecimal.ZERO); } titulosCaixa.setValorIOF(BigDecimal.ZERO); try{ titulosCaixa.setValorAbatimentoConcedido(new BigDecimal(tupla[12].toString().replaceAll(",", "."))); }catch(NullPointerException e){ titulosCaixa.setValorAbatimentoConcedido(BigDecimal.ZERO); } titulosCaixa.setNomeSacado(tupla[15].toString()); titulosCaixa.setTipoInscricaoPagador(TipoInscricaoPagador.CNPJ); try{ titulosCaixa.setNumeroInscricao(tupla[3].toString().replaceAll("[^0-9]+", "")); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } String cep = ""; try{ cep = StringUtils.right(ZERO_ESQUERDA + tupla[18].toString(), 8); }catch(Exception e){ cep = ZERO_ESQUERDA; } titulosCaixa.setCepSacado(cep); try{ titulosCaixa.setNumeroInscricaoSacado(tupla[14].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O CNPJ do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } try{ titulosCaixa.setEnderecoSacado(tupla[16].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } try{ titulosCaixa.setBairroSacado(tupla[17].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } try{ titulosCaixa.setCidade(tupla[19].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } try{ titulosCaixa.setEstado(tupla[20].toString()); }catch(Exception e){ throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[15]+" está fora do padrão, favor corrigir"); } titulosCaixa.setSacadorAvalista(""); arquivoRemessaItem.addTitulo(titulosCaixa); } if(rodape == null){ rodape = new RodapeRemessaPadrao(); rodape.setNumeroSequencialRegistro(qtdeTitulos); arquivoRemessaItem.setRodapeRemessa(rodape); } nomeArquivo = nomeArquivo + new DecimalFormat("##").format(variavel) + ".REM"; arquivoRemessa.setNomeArquivo(nomeArquivo); return arquivoRemessa; } private void writeFROMClause(StringBuilder sb, boolean hasDate, Boolean reenviar) { sb.append(" FROM "); sb.append(" FECHAMENTO_BOLETO fb "); sb.append(" INNER JOIN FECHAMENTO_CNTCORRENTE fc on fb.FECHAMENTOCNTCORRENTE_ID = fc.FECHAMENTOCNTCORRENTE_ID AND fc.ACTIVO = 1 "); sb.append(" INNER JOIN PUNTO_VENTA pv on pv.PUNTOVENTA_ID = fc.PUNTOVENTA_ID AND pv.ACTIVO = 1 "); sb.append(" INNER JOIN EMPRESA emp on emp.EMPRESA_ID = fc.EMPRESA_ID AND emp.ACTIVO = 1 "); sb.append(" INNER JOIN FECHAMENTO_PARAMGERAL fp on fp.EMPRESA_ID = emp.EMPRESA_ID AND fp.ACTIVO = 1 "); sb.append(" INNER JOIN FECHAMENTO_PARAMPTOVTA fppv on fppv.EMPRESA_ID = emp.EMPRESA_ID AND fppv.ACTIVO = 1 and pv.PUNTOVENTA_ID = fppv.PUNTOVENTA_ID AND fppv.TIPOPAGAMENTO = 'B' "); sb.append(" LEFT JOIN INSTI_FINANCEIRA ifi ON ifi.CODIGO = fp.BOLETO_BANCO_COD "); sb.append(" LEFT JOIN PARADA pa on pa.PARADA_ID = pv.PARADA_ID AND pa.ACTIVO = 1 "); sb.append(" LEFT JOIN CIUDAD ci on ci.CIUDAD_ID = pa.CIUDAD_ID AND ci.ACTIVO = 1 "); sb.append(" LEFT JOIN PLAZA pl on pl.PLAZA_ID = ci.PLAZA_ID AND pl.ACTIVO = 1 "); sb.append(" LEFT JOIN ESTADO es on es.ESTADO_ID = ci.ESTADO_ID AND es.ACTIVO = 1 "); sb.append(" LEFT JOIN EMPRESA_CONTABANCARIA ecb ON emp.EMPRESA_ID = ecb.EMPRESA_ID AND ifi.INSTIFINANCEIRA_ID = ecb.INSTIFINANCEIRA_ID AND ecb.ACTIVO = 1 "); sb.append(" WHERE fb.activo = 1 "); if(!reenviar){ sb.append(" AND fb.REMESSA_ID IS NULL "); } sb.append(" AND fp.EMPRESA_ID = :empresaId "); if(hasDate){ sb.append(" AND fb.FECDOCUMENTO BETWEEN :dataDe AND :dataAte "); } sb.append(" ORDER BY "); sb.append(" fb.FECMODIF, fb.FECDOCUMENTO "); } @Override public List obtenerTodosParaRemessa(Empresa empresa, Date dataDe, Date dataAte, Boolean reenviar) { StringBuilder sb = new StringBuilder(); sb.append(" SELECT "); sb.append(" fb.FECHAMENTOBOLETO_ID AS fechamentoboletoId, "); sb.append(" fb.nossonumero, "); sb.append(" fb.FECDOCUMENTO, "); sb.append(" fb.FECVENCIMENTO, "); sb.append(" fb.VALORDOCUMENTO, "); sb.append(" fb.STATUS, "); sb.append(" fb.REMESSA_ID as remessaId, "); sb.append(" fc.FECHAMENTOCNTCORRENTE_ID as fcId, "); sb.append(" emp.NOMBEMPRESA, "); sb.append(" pv.NOMBPUNTOVENTA, "); sb.append(" emp.EMPRESA_ID AS codEmpresaBanco, "); sb.append(" pv.PUNTOVENTA_ID "); 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 list = query.list(); List retorno = new ArrayList(); for(Object[] tupla : list){ FechamentoBoleto fb = new FechamentoBoleto(); fb.setFechamentoboletoId( Long.valueOf(tupla[0].toString())); fb.setNossonumero( tupla[1].toString()); fb.setFecdocumento( (Date)tupla[2]); fb.setFecvencimento( (Date)tupla[3]); fb.setValordocumento( (BigDecimal)tupla[4]); fb.setStatus( tupla[5].toString() ); fb.setRemessaId( tupla[6]==null?null:Long.valueOf(tupla[6].toString()) ); FechamentoCntcorrente fcc = new FechamentoCntcorrente(); fcc.setFechamentocntcorrenteId( Long.valueOf(tupla[7].toString())); Integer codEmpresaBanco = tupla[10] != null ? Integer.valueOf(tupla[10].toString()) : 0; fcc.setEmpresa( new Empresa(codEmpresaBanco, tupla[8].toString())); Integer codPuntoVenta = tupla[11] != null ? Integer.valueOf(tupla[11].toString()) : 0; fcc.setPuntoventa( new PuntoVenta(codPuntoVenta, tupla[9].toString())); fb.setFechamentoCntcorrente(fcc); retorno.add(fb); } return retorno; } @Override public Boolean atualizaRemessa(Empresa empresa, ArquivoRemessa arquivoRemessa) throws Exception { if(arquivoRemessa == null || arquivoRemessa.getItens() == null) { return false; } String ids = ""; int count = 0; int seqRemessa = 0; @SuppressWarnings("deprecation") Connection con = getSession().connection(); Statement stmt = con.createStatement(); con.setAutoCommit(false); for(ArquivoRemessaItemInteface ar : arquivoRemessa.getItens()){ for(DetalheObrigatorio boleto : ar.getTitulos()){ if(count == 50){ ids = ids.substring(1); stmt.addBatch("UPDATE FECHAMENTO_BOLETO SET REMESSA_ID = " + seqRemessa + " WHERE FECHAMENTOBOLETO_ID IN ( " + ids + " )"); count = 0; ids = ""; } ids += "," + boleto.getIdBoletoFechamento(); seqRemessa = ar.getCabecalhoRemessa().getNumeroSequencialRemessa(); count++; } } if(count < 50){ ids = ids.substring(1); stmt.addBatch("UPDATE FECHAMENTO_BOLETO SET REMESSA_ID = " + seqRemessa + " WHERE FECHAMENTOBOLETO_ID IN ( " + ids + " )"); count = 0; ids = ""; } stmt.addBatch("UPDATE FECHAMENTO_PARAMGERAL SET COUNT_REMESSA = " + seqRemessa + " WHERE EMPRESA_ID = " + empresa.getEmpresaId()); stmt.executeBatch(); con.commit(); stmt.close(); return Boolean.TRUE; } public String buscarConstante(String nombre) { StringBuilder HQL = new StringBuilder(); HQL.append(" select "); HQL.append(" valorconstante "); HQL.append(" from "); HQL.append(" Constante "); HQL.append(" where "); HQL.append(" nombconstante = :nombre "); HQL.append(" and activo = 1 "); Query query = getSession().createQuery(HQL.toString()); query.setParameter("nombre", nombre); return (String) query.uniqueResult(); } @Override public List getEmpresas() { Query query = getSession().createQuery("SELECT param.empresa FROM FechamentoParamgeral param WHERE param.activo = 1 AND param.empresa.activo = 1"); return (List) query.list(); } private String gerarCodigoTransmissao(String agencia, String agenciaDigito, String numeroConvenio, String numeroConta, String contaDigito) { StringBuilder sb = new StringBuilder(); sb.append(StringUtils.leftPad(agencia, 4, '0')); sb.append(StringUtils.leftPad(numeroConvenio, 8, '0')); sb.append(StringUtils.leftPad(numeroConta.substring(0,numeroConta.length()-1), 8,'0')); // 2271 01152386 01300052 return sb.toString(); } private BigDecimal calculaValorMora( BigDecimal mora, BigDecimal valor ) { if( mora != null && mora.compareTo(BigDecimal.ZERO) > 0 ) { BigDecimal valorMora = (valor.multiply(mora)).divide( new BigDecimal("100")); return valorMora.setScale(2, RoundingMode.HALF_UP); }else { return BigDecimal.ZERO; } } @Override public FechamentoBoleto obtenerFechamentoBoletoPorNossoNumero(String nossoNumero, Integer empresaId) { StringBuilder sb = new StringBuilder(); sb.append(" SELECT "); sb.append(" fb.FECHAMENTOBOLETO_ID AS fechamentoboletoId, "); sb.append(" fb.nossonumero, "); sb.append(" fb.FECDOCUMENTO, "); sb.append(" fb.FECVENCIMENTO, "); sb.append(" fb.VALORDOCUMENTO, "); sb.append(" fb.STATUS as status, "); sb.append(" fb.REMESSA_ID as remessaid, "); sb.append(" fb.indboletoquitado as indBoletoQuitado "); sb.append(" FROM "); sb.append(" FECHAMENTO_BOLETO fb "); sb.append(" INNER JOIN FECHAMENTO_CNTCORRENTE fc on fb.FECHAMENTOCNTCORRENTE_ID = fc.FECHAMENTOCNTCORRENTE_ID AND fc.ACTIVO = 1 "); sb.append(" WHERE fb.activo = 1 "); sb.append(" AND fb.nossonumero = :nossoNumero "); sb.append(" AND fc.EMPRESA_ID = :empresaId "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("fechamentoboletoId", LongType.INSTANCE) .addScalar("nossonumero", StringType.INSTANCE) .addScalar("status", StringType.INSTANCE) .addScalar("remessaId", LongType.INSTANCE) .addScalar("indBoletoQuitado", BooleanType.INSTANCE) .setResultTransformer(new AliasToBeanResultTransformer(FechamentoBoleto.class)); query.setString("nossoNumero", nossoNumero); query.setInteger(EMPRESA_ID, empresaId); FechamentoBoleto retorno = (FechamentoBoleto)query.uniqueResult(); return retorno; } @Override public boolean quitarFechamentoBoleto(Long fechamentoboletoId, Integer usuarioId, DetalheRetorno detalhe) throws SQLException { @SuppressWarnings("deprecation") Connection con = getSession().connection(); Statement stmt = con.createStatement(); con.setAutoCommit(false); StringBuilder qry = new StringBuilder(); qry.append(" update FECHAMENTO_BOLETO set INDBOLETOQUITADO = 1, "); qry.append(" FECMODIF = SYSDATE, "); qry.append(" USUARIO_ID_QUITA = ").append(usuarioId); qry.append(" , FECBAIXA = TO_DATE('"); qry.append( detalhe.getDataBaixa()); qry.append("', 'DDMMYY')"); if( detalhe.getValorJuros() != null) { qry.append(" , VALOR_JUROS = ").append(detalhe.getValorJuros()); }else { qry.append(" , VALOR_JUROS = 0 "); } qry.append(" where FECHAMENTOBOLETO_ID = ").append(fechamentoboletoId); qry.append(" AND ACTIVO = 1 "); int qtd = stmt.executeUpdate(qry.toString()); con.commit(); stmt.close(); con.close(); return qtd==1; } private void zerarDesconto(DetalheObrigatorioDadosTitulosBancoBrasil titulo) { titulo.setCodigoDesconto(0); titulo.setDataDesconto(null); titulo.setDescontoConcedido(BigDecimal.ZERO); } }