package gcom.financeiro;
import gcom.financeiro.lancamento.LancamentoOrigem;
import gcom.util.ConstantesSistema;
import gcom.util.ControladorException;
import gcom.util.ErroRepositorioException;
import gcom.util.Util;
import gcom.util.ZipUtil;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.zip.ZipOutputStream;
import javax.ejb.SessionBean;
/**
* Controlador Financeiro COSANPA
*
* @author Raphael Rossiter
* @date 24/04/2009
*/
public class ControladorFinanceiroCOSANPASEJB extends ControladorFinanceiro implements SessionBean {
private static final long serialVersionUID = 1L;
//==============================================================================================================
// M�TODOS EXCLUSIVOS DA COSANPA
//==============================================================================================================
/**
* este caso de uso gera a integra��o para a contabilidade
*
* [UC0469] Gerar Integra��o para a Contabilidade
*
* @author Pedro Alexandre
* @date 28/05/2007
*
* @param idLancamentoOrigem
* @param anoMes
* @param data
* @throws ControladorException
*/
public void gerarIntegracaoContabilidade(
String idLancamentoOrigem, String anoMes, String data) throws ControladorException {
/*
* Pesquisa os dados para gerar a integra��o para a contabilidade.
*
* 0 - cnct_nnconta
* 1 - loca_cdcentrocusto
* 2 - lcti_icdebitocredito
* 3 - lcti_vllancamento
* 4 - lcor_cdreferencia
*/
Collection<Object[]> colecaoDadosGerarIntegracao = null;
try {
colecaoDadosGerarIntegracao = repositorioFinanceiro.pesquisarGerarIntegracaoContabilidadeCOSANPA(
idLancamentoOrigem, anoMes);
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
StringBuilder gerarIntegracaoTxt = new StringBuilder();
Date dataInformada = Util.converteStringParaDate(data);
if(colecaoDadosGerarIntegracao != null && !colecaoDadosGerarIntegracao.isEmpty()){
int sequencialLancamento = 1;
String numeroConta = "";
String codigoCentroCusto = "";
Short indicadorDebitoCredito = null;
BigDecimal valorLancamento = new BigDecimal("0.00");
String prefixoContabil = "";
String nomeConta = "";
String nomeLote = "";
String descricaoLancamento = "";
Date dataLancamento = null;
String descricaoHistorico = "";
Integer codigoTerceiro = null;
Short indicadorCentroCusto = null;
// Determina se o arquivo � de faturamento ou arrecada��o
int mesLancamento = 0;
Integer anoMesInteger = Integer.valueOf(anoMes);
if (idLancamentoOrigem.equals(LancamentoOrigem.FATURAMENTO + "")) {
descricaoLancamento = "FATURAMENTO";
nomeLote = "FT" + Util.formatarAnoMesParaMesAnoCom2Digitos(anoMesInteger);
mesLancamento = Util.obterMes(anoMesInteger);
} else if (idLancamentoOrigem.equals(LancamentoOrigem.ARRECADACAO + "")) {
nomeLote = "AD" + Util.formatarAnoMesParaMesAnoCom2Digitos(anoMesInteger);
descricaoLancamento = "ARRECADACAO";
mesLancamento = Util.obterMes(anoMesInteger);
} else if(idLancamentoOrigem.equals(LancamentoOrigem.AVISO_BANCARIO + "")) {
nomeLote = "AB" + Util.formatarAnoMesParaMesAnoCom2Digitos(anoMesInteger);
descricaoLancamento = "AVISO_BANCARIO";
mesLancamento = Util.obterMes(anoMesInteger);
}
// La�o para gerar o txt
for(Object[] dadosGerarIntegracao : colecaoDadosGerarIntegracao) {
//CONTA CONTABIL - NUMERO CONTA
if (dadosGerarIntegracao[0] != null) {
numeroConta = (String) dadosGerarIntegracao[0];
} else {
numeroConta = "";
}
// LOCALIDADE - CODIGO DO CENTRO DE CUSTO
if (dadosGerarIntegracao[1] != null) {
codigoCentroCusto = (String) dadosGerarIntegracao[1];
} else {
codigoCentroCusto = "";
}
// LANCAMENTO CONTABIL ITEM - INDICADOR DEBITO CREDTIO
if (dadosGerarIntegracao[2] != null) {
indicadorDebitoCredito = (Short) dadosGerarIntegracao[2];
}
// LANCAMENTO CONTABIL ITEM - VALOR LANCAMENTO
if (dadosGerarIntegracao[4] != null) {
valorLancamento = (BigDecimal) dadosGerarIntegracao[4];
} else {
valorLancamento = new BigDecimal("0.00");
}
// CONTA CONTABIL - PREFIXO CONTABIL
if (dadosGerarIntegracao[5] != null) {
prefixoContabil = (String) dadosGerarIntegracao[5];
} else {
prefixoContabil = "";
}
// CONTA CONTABIL - NOME CONTA
if (dadosGerarIntegracao[6] != null) {
nomeConta = (String) dadosGerarIntegracao[6];
} else {
nomeConta = "";
}
// DATA CONTABILIZA��O - DATA DO LAN�AMENTO
if (dadosGerarIntegracao[7] != null) {
dataLancamento = (Date) dadosGerarIntegracao[7];
} else {
dataLancamento = null;
}
// DESCRITIVO DO HISTORICO PADRAO 2 - DESCRI��O HISTORICO
if (dadosGerarIntegracao[8] != null) {
descricaoHistorico = (String) dadosGerarIntegracao[8];
} else {
descricaoHistorico = "";
}
// SUBCONTA - C�DIGO TERCEIRO
if (dadosGerarIntegracao[9] != null) {
codigoTerceiro = (Integer) dadosGerarIntegracao[9];
} else {
codigoTerceiro = null;
}
// CONTA CONTABIL - INDICADOR CENTRO DE CUSTO
if (dadosGerarIntegracao[10] != null) {
indicadorCentroCusto = (Short) dadosGerarIntegracao[10];
} else {
indicadorCentroCusto = null;
}
// 1 - C�DIGO COMPANHIA
gerarIntegracaoTxt.append("140");
// 2 - PLANO DE CONTAS
gerarIntegracaoTxt.append(" ");
/*
* 3 - NOME DO LOTE
*
* Caso a origem do lan�amento (LCOR_ID) corresponda a
* FATURAMENTO, concatenar FT com o m�s e ano do faturamento no
* formato MMAA (PARM_AMREFERENCIAFATURAMENTO da tabela
* SISTEMA_PARAMETROS.
*
* Caso a origem do lan�amento (LCOR_ID) corresponda a
* ARRECADACAO, concatenar AD com o m�s e ano da arrecada��o no
* formato MMAA (PARM_AMREFERENCIAARRECADACAO da tabela
* SISTEMA_PARAMETROS.
*/
gerarIntegracaoTxt.append(nomeLote);
// 4 - SEQU�NCIA DO LAN�AMENTO
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(6, "" + sequencialLancamento));
/*
* 5 - M�S DO LAN�AMENTO Preencher com o m�s (MM) do campo 3
*/
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(2, "" + mesLancamento));
// 6 - ORIGEM TRANSA��O
gerarIntegracaoTxt.append("02");
/*
* 7 - DATA DA CONTABILIZA��O
*
* Preencher com LCTI_DTLANCAMENTO da tabela
* LANCAMENTO_CONTABIL_ITEM caso seja diferente de nulo, caso
* contr�rio preencher com a Data do Lan�amento informada no
* in�cio do caso de uso no formato AAAAMMDD.
*/
if (dataLancamento != null) {
gerarIntegracaoTxt.append(Util.formatarDataAAAAMMDD(dataLancamento));
} else {
gerarIntegracaoTxt.append(Util.formatarDataAAAAMMDD(dataInformada));
}
/*
* 8 - PER�ODO DA TRANSA��O Preencher com o m�s (MM) do campo 3
*/
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(2, "" + mesLancamento));
// 9 - C�DIGO DA COMPANHIA DA TRANSA��O
gerarIntegracaoTxt.append("140");
// 10 - PLANO DE CONTAS DA TRANSA��O
gerarIntegracaoTxt.append(" ");
/*
* 11 - CONTA CONT�BIL
*
* CNCT_NNCONTA da tabela CONTA_CONTABIL para CNCT_ID = CNCT_ID
* da tabela LANCAMENTO_CONTABIL_ITEM
*/
if (numeroConta.length() >= 9) {
gerarIntegracaoTxt.append(Util.completaString(numeroConta.substring(0, 9), 16));
} else {
gerarIntegracaoTxt.append(Util.completaString(numeroConta, 16));
}
/*
* 12 - UNIDADE DE NEG�CIO
*
* Caso CNCT_ICCUSTO da tabela CONTA_CONTABIL para CNCT_ID =
* CNCT_ID da tabela LANCAMENTO_CONTABIL_ITEM corresponda a n�o
* (2) preencher fixo 10000, caso contr�rio, cinco primeiros
* caracteres da coluna LOCA_CDCENTROCUSTO da tabela LOCALIDADE
* para LOCA_ID = LOCA_ID da tabela LANCAMENTO_CONTABIL
*/
if (indicadorCentroCusto != null && indicadorCentroCusto.equals(ConstantesSistema.NAO)) {
gerarIntegracaoTxt.append("10000");
} else if (codigoCentroCusto.length() >= 5) {
gerarIntegracaoTxt.append(codigoCentroCusto.substring(0, 5));
} else {
gerarIntegracaoTxt.append(Util.completaString("", 5));
}
/*
* 13 - CENTRO DE RESPONSABILIDADE
*
* Caso CNCT_ICCUSTO da tabela CONTA_CONTABIL para CNCT_ID =
* CNCT_ID da tabela LANCAMENTO_CONTABIL_ITEM corresponda a n�o
* (2) preencher fixo 0000, caso contr�rio, quatro caracteres a
* partir da sexta posi��o da coluna LOCA_CDCENTROCUSTO da
* tabela LOCALIDADE para LOCA_ID = LOCA_ID da tabela
* LANCAMENTO_CONTABIL
*/
if (indicadorCentroCusto != null && indicadorCentroCusto.equals(ConstantesSistema.NAO)) {
gerarIntegracaoTxt.append("0000");
} else if (codigoCentroCusto.length() >= 9) {
gerarIntegracaoTxt.append(codigoCentroCusto.substring(5, 9));
} else {
gerarIntegracaoTxt.append(Util.completaString("", 4));
}
// 14 - PRODUTO E SERVI�O
gerarIntegracaoTxt.append(Util.completaString(prefixoContabil, 3));
/*
*15 - INDICADOR DEB/CRED
*/
if (indicadorDebitoCredito.equals(ConstantesSistema.SIM)) {
gerarIntegracaoTxt.append("C");
} else {
gerarIntegracaoTxt.append("D");
}
/*
*16 - HISTORICO PADR�O
*
* LCOR_CDREFERENCIA da tabela LANCAMENTO_ORIGEM
*/
gerarIntegracaoTxt.append(Util.completaString("", 3));
/*
* 17 - DESCRITIVO DO HISTORICO PADRAO 1
*
* Caso a origem do lan�amento (LCOR_ID) corresponda a AVISO BANC�RIO, LCTI_DSHISTORICO da tabela
* LANCAMENTO_CONTABIL_ITEM, caso contr�rio CNCT_NMCONTA da tabela CONTA_CONTABIL para
* CNCT_ID = CNCT_ID da tabela
*/
if (idLancamentoOrigem.equals(LancamentoOrigem.AVISO_BANCARIO + "")) {
gerarIntegracaoTxt.append(Util.completaString(descricaoHistorico, 50));
} else {
gerarIntegracaoTxt.append(Util.completaString(nomeConta, 50));
}
/*
* 18 - DESCRITIVO DO HISTORICO PADRAO 2
*
* N�O PREENCHER
*/
gerarIntegracaoTxt.append(Util.completaString("", 50));
/*
*19 - VALOR DO LANCAMENTO
*
* LCTI_VLLANCAMENTO da tabela LANCAMENTO_CONTABIL_ITEM, completar com zeros a esquerda
*/
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(15,(valorLancamento + "").replace(".","")));
//20 - CLASSE DE VALOR
gerarIntegracaoTxt.append("SAC");
//21 - C�DIGO DE LAN�AMENTO DA FATURA
gerarIntegracaoTxt.append(Util.completaString(prefixoContabil, 6));
/*
*22 - GRUPO DE SUBCONTA
*
* Dois caracteres a partir da d�cima posi��o da coluna CNCT_NNCONTA da tabela
* CONTA_CONTABIL para CNCT_ID = CNCT_ID da tabela
*/
if (numeroConta.length() >= 11) {
gerarIntegracaoTxt.append(numeroConta.substring(9, 11));
} else {
gerarIntegracaoTxt.append(Util.completaString("", 2));
}
/*
*23 - SUBCONTA
*
* Caso a origem do lan�amento (LCOR_ID) corresponda a AVISO BANC�RIO LCTI_NNCODIGOTERCEIRO
* da tabela LANCAMENTO_CONTABIL_ITEM, caso contr�rio seis caracteres a partir da d�cima segunda
* posi��o da coluna CNCT_NNCONTA da tabela CONTA_CONTABIL para CNCT_ID = CNCT_ID da tabela
* LANCAMENTO_CONTABIL_ITEM
*/
if (idLancamentoOrigem.equals(LancamentoOrigem.AVISO_BANCARIO + "")) {
if (codigoTerceiro != null) {
gerarIntegracaoTxt.append(Util.completaString(codigoTerceiro.toString(), 12));
} else {
gerarIntegracaoTxt.append(Util.completaString("", 12));
}
} else if (numeroConta.length() >= 17) {
gerarIntegracaoTxt.append(Util.completaString(numeroConta.substring(11, 17), 12));
} else {
gerarIntegracaoTxt.append(Util.completaString("", 12));
}
//24 - CRIT�RIO DE RATEIO
gerarIntegracaoTxt.append(Util.completaString("", 3));
//25 - VALOR RATEIO
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(15, ""));
//26 - CLASSE RATEIO
gerarIntegracaoTxt.append(Util.completaString("", 3));
//27 - CAMPO DE USUARIO
gerarIntegracaoTxt.append(Util.completaString("", 20));
//28 - SENHA DE PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 8));
//29 - INDICADOR DE VALIDA��O
gerarIntegracaoTxt.append("1");
//30 - INDICADOR DE TOTAL DE LOTE
gerarIntegracaoTxt.append("1");
//31 - TIPO DE ENTRADA
gerarIntegracaoTxt.append(" ");
//32 - C�DIGO DO SISTEMA
gerarIntegracaoTxt.append(Util.completaString("", 8));
//33 - DATA DE INCLUS�O-ALTERA��O
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(8, ""));
//34 - HORA DE INCLUS�O-ALTERA��O
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(7, ""));
//35 - COMPANHIA CONTRA PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 3));
//36 - PLANO DE CONTAS CONTRA PARTIDA
gerarIntegracaoTxt.append(" ");
//37 - CONTA CONT�BIL CONTRA PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 16));
//38 - CENTRO CONT�BIL CONTRA PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 12));
//39 - GRUPO DE SUBCONTA CONTRA PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 2));
//40 - SUBCONTA CONTRA PARTIDA
gerarIntegracaoTxt.append(Util.completaString("", 12));
//41 - SENHA DA CONTA
gerarIntegracaoTxt.append(Util.completaString("", 8));
//42 - INDICADOR DE INTERRUP��O
gerarIntegracaoTxt.append(" ");
//43 - INDICADOR DE STATUS DE REGISTRO
gerarIntegracaoTxt.append("0");
//44 - INDICADOR DE ENTRADA DUPLICADA
gerarIntegracaoTxt.append(" ");
//45 - DATA DE REVERS�O 1
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(8, ""));
//46 - DATA DE REVERS�O 2
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(8, ""));
//47 - INDICADOR DE REVERS�O
gerarIntegracaoTxt.append("0");
//48 - SINAL DE TRANSA��O 1
gerarIntegracaoTxt.append(" ");
//49 - SINAL DE TRANSA��O 2
gerarIntegracaoTxt.append(" ");
//50 - INDICADOR DE CONVERS�O DE TRANSA��O
gerarIntegracaoTxt.append(" ");
gerarIntegracaoTxt.append(System.getProperty("line.separator"));
//Iniciar com o valor 1 e incrementar com 1 a cada registro gerado.
sequencialLancamento++;
}
//Gerando o arquivo zip
String nomeZip = "CONTABILIDADE_" + descricaoLancamento + "_" + (data.replace("/","_"));
BufferedWriter out = null;
ZipOutputStream zos = null;
File compactadoTipo = new File(nomeZip + ".zip");
File leituraTipo = new File(nomeZip + ".txt");
if (gerarIntegracaoTxt != null && gerarIntegracaoTxt.length() != 0) {
try {
System.out.println("CRIANDO ZIP");
zos = new ZipOutputStream(new FileOutputStream(compactadoTipo));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(leituraTipo.getAbsolutePath())));
out.write(gerarIntegracaoTxt.toString());
out.flush();
ZipUtil.adicionarArquivo(zos, leituraTipo);
zos.close();
leituraTipo.delete();
out.close();
} catch (IOException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
} catch (Exception e) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", e);
}
}
} else{
if (idLancamentoOrigem.equals(LancamentoOrigem.FATURAMENTO + "")) {
throw new ControladorException("atencao.pesquisa.nenhum_registro_tabela", null, "Resumo Faturamento");
} else if (idLancamentoOrigem.equals(LancamentoOrigem.ARRECADACAO + "")) {
throw new ControladorException("atencao.pesquisa.nenhum_registro_tabela", null, "Resumo Arrecada��o");
}
}
}
}