AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateD...

1789 lines
74 KiB
Java
Raw Blame History

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<FechamentoBoleto, Long> 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<Object[]> 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<73> 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<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setEnderecoCompletoPagador(tupla[21].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Endere<72>o do ponto de venda "+tupla[20]+" est<73> fora do padr<64>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<73> fora do padr<64>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<Object[]> 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<73> 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<72><69>o do ponto de venda "+tupla[20]+" est<73> fora do padr<64>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<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setEnderecoSacado(tupla[21].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Endereco do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setBairroSacado(tupla[22].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setCidade(tupla[23].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("A Cidade do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setEstado(tupla[24].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" est<73> fora do padr<64>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<73> fora do padr<64>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<Object[]> 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<73> 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<72>o do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setBairro(tupla[22].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setCidade(tupla[23].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setEstado(tupla[24].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" est<73> fora do padr<64>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<73> fora do padr<64>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<73> fora do padr<64>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<Object[]> 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<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setLogradouroSacado(tupla[22].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[21]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setBairroSacado(tupla[23].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[21]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setCepSacado(tupla[24].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O CEP do ponto de venda "+tupla[21]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setCidade(tupla[25].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[21]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
detalhe.setEstado(tupla[26].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[21]+" est<73> fora do padr<64>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<Object[]> 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);
cabecalhoLoteRemessaBancoBrasil.setRemessaTesteID("TS");
try{
cabecalhoRemessaBancoBrasil.setNumVarCarteira(((BigDecimal) tupla[28]).toString());
cabecalhoLoteRemessaBancoBrasil.setNumVarCarteira(((BigDecimal) tupla[28]).toString());
}catch(Exception e){
throw new ValidacaoRemessaException(
String.format(
"A Varia<69><61>o Carteira da empresa %s est<73> fora do padr<64>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{
titulosBancoBrasil.setCodigoDesconto(1);
titulosBancoBrasil.setDataDesconto((Date) tupla[10]);
titulosBancoBrasil.setDescontoConcedido(new BigDecimal(tupla[17].toString().replace(",", ".")));
}catch(NullPointerException e){
titulosBancoBrasil.setCodigoDesconto(0);
titulosBancoBrasil.setDataDesconto((Date) tupla[10]);
titulosBancoBrasil.setDescontoConcedido(BigDecimal.ZERO);
}
titulosBancoBrasil.setIOF_Devido(BigDecimal.ZERO);
try{
titulosBancoBrasil.setAbatimentoConcedido(new BigDecimal(tupla[18].toString().replace(",", ".")));
}catch(NullPointerException e){
titulosBancoBrasil.setAbatimentoConcedido(BigDecimal.ZERO);
}
titulosBancoBrasil.setNossoNumeroEmp(tupla[0].toString());
titulosBancoBrasil.setCodigoProtesto(3);
titulosBancoBrasil.setDiasProtesto(0);
titulosBancoBrasil.setCodigoBaixa(2);
titulosBancoBrasil.setDiasBaixa(0);
titulosBancoBrasil.setNumeroContrato(Integer.parseInt(tupla[0].toString()));
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<73> fora do padr<64>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<73> fora do padr<64>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<73> fora do padr<64>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<73> fora do padr<64>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<73> fora do padr<64>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<Object[]> 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<6E>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<62>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<73> fora do padr<64>o, favor corrigir");
}
try{
pagadorSicoob.setLogradouroSacado(tupla[22].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
pagadorSicoob.setBairroSacado(tupla[23].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
pagadorSicoob.setCidade(tupla[25].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[20]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
pagadorSicoob.setEstado(tupla[26].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[20]+" est<73> fora do padr<64>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<Object[]> 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<73> fora do padr<64>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<73> fora do padr<64>o, favor corrigir");
}
try{
titulosCaixa.setEnderecoSacado(tupla[16].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Logradouro do ponto de venda "+tupla[15]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
titulosCaixa.setBairroSacado(tupla[17].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Bairro do ponto de venda "+tupla[15]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
titulosCaixa.setCidade(tupla[19].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("A cidade do ponto de venda "+tupla[15]+" est<73> fora do padr<64>o, favor corrigir");
}
try{
titulosCaixa.setEstado(tupla[20].toString());
}catch(Exception e){
throw new ValidacaoRemessaException("O Estado do ponto de venda "+tupla[15]+" est<73> fora do padr<64>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<FechamentoBoleto> 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<Object[]> list = query.list();
List<FechamentoBoleto> retorno = new ArrayList<FechamentoBoleto>();
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<Empresa> getEmpresas() {
Query query = getSession().createQuery("SELECT param.empresa FROM FechamentoParamgeral param WHERE param.activo = 1 AND param.empresa.activo = 1");
return (List<Empresa>) 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;
}
}