package gcom.financeiro;
import gcom.cadastro.ControladorCadastroLocal;
import gcom.cadastro.ControladorCadastroLocalHome;
import gcom.cadastro.EnvioEmail;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.Localidade;
import gcom.financeiro.bean.GerarIntegracaoContabilidadeHelper;
import gcom.financeiro.lancamento.LancamentoOrigem;
import gcom.util.ConstantesJNDI;
import gcom.util.ControladorException;
import gcom.util.ErroRepositorioException;
import gcom.util.ServiceLocator;
import gcom.util.ServiceLocatorException;
import gcom.util.SistemaException;
import gcom.util.Util;
import gcom.util.ZipUtil;
import gcom.util.email.ServicosEmail;
import gcom.util.filtro.ParametroSimples;
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.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.zip.ZipOutputStream;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
/**
* Controlador Financeiro Juazeiro
*
* @author Rafael Corr�a
* @date 30/06/2009
*/
public class ControladorFinanceiroCOSAMASEJB extends ControladorFinanceiro implements SessionBean {
private static final long serialVersionUID = 1L;
//==============================================================================================================
// M�TODOS EXCLUSIVOS DA COSAMA
//==============================================================================================================
/**
* Retorna o controladorCadastro
*
* @author Tiago Moreno
* @date 28/06/2011
*
*/
private ControladorCadastroLocal getControladorCadastro() {
ControladorCadastroLocalHome localHome = null;
ControladorCadastroLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorCadastroLocalHome) locator
.getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_CADASTRO_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
/**
* este caso de uso gera a integra��o para a contabilidade
*
* [UC0469] Gerar Integra��o para a Contabilidade
*
* @author Tiago Moreno
* @date 28/06/2011
*
* @param idLancamentoOrigem
* @param anoMes
* @param data
* @throws ControladorException
*/
public void gerarIntegracaoContabilidade(String idLancamentoOrigem, String anoMes, String data) throws ControladorException{
/*
* Gera o arquivo texto de integra��o com a contabilidade. LAYOUT:
*
* 1 - Regional - Num 2
* 2 - Localidade - Num 3
* 3 - Conta - Num 6
* 4 - Centro de Custo - Char 3 - - Preencher com " "
* 5 - C�digo da An�lise - Char 3 - Preencher com " "
* 6 - C�digo de Terceiros - Char 3 - Preencher com " "
* 7 - Referencia - Char 8 - Preencher com " "
* 8 - Digito - Char 1 - Preencher com " "
* 9 - Valor do Lancamento - Num 15
* 10 - Indicador de Debito ou Cr�dito - Char 1
* 11 - Data de Lancamento - Char 8 - DDMMAAAA
* 12 - C�digo do Lancamento - Char 3 - Caso LCOR = FATURAMENTO = 33
* 13 - Mes/Ano do Lancamento - Char 6 - MMAAAA
* 14 - N�mero da P�gina - Char 3 - Fixo 001
*/
Collection colecaoDadosGerarIntegracao = (Collection) this.pesquisarGerarIntegracaoContabilidade(idLancamentoOrigem, anoMes);
/** defini��o das vari�veis */
StringBuilder gerarIntegracaoTxt = new StringBuilder();
String dataFormatada = data.replace("/","");
String diaMes = dataFormatada.substring(0,4);
String ano = dataFormatada.substring(4 ,8);
dataFormatada = diaMes + ano;
/*
* Caso a cole��o dos dados n�o esteja vazia
*/
if(colecaoDadosGerarIntegracao != null && !colecaoDadosGerarIntegracao.isEmpty()){
/*
* Determina se o arquivo � de faturamento ou arrecada��o
* para concatenar no nome do arquivo .zip
*/
//Determinando o tipo de lancamento e setando o c�digo de lancamento para o Campo 11 - Faturamento = 033 e Arrecadacao = 007
String codigoLancamento = "";
String descricaoLancamento = "";
if(idLancamentoOrigem.equals(LancamentoOrigem.FATURAMENTO + "")){
codigoLancamento = "033";
descricaoLancamento = "FATURAMENTO";
}else if(idLancamentoOrigem.equals(LancamentoOrigem.ARRECADACAO + "")){
codigoLancamento = "007";
descricaoLancamento = "ARRECADACAO";
}
/*
* La�o para gerar o txt
*/
Iterator iterator = colecaoDadosGerarIntegracao.iterator();
while (iterator.hasNext()){
GerarIntegracaoContabilidadeHelper gerarIntegracaoContabilidadeHelper = (GerarIntegracaoContabilidadeHelper)iterator.next();
// Campo 1 - Ger�ncia Regional a partir da localidade do lancamento
String localidadeLancamento = "";
/*
* Para uso da localidade, usar o prefixo contabil de Conta contabil do Lancamento Contabil Item.
* Caso ele seja nulo, usar a localidade do Lancamento Cont�bil
*/
String prefixoContabil = gerarIntegracaoContabilidadeHelper.getNumeroPrefixoContabil();
if (prefixoContabil != null && !prefixoContabil.equalsIgnoreCase("")) {
localidadeLancamento = prefixoContabil;
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumeroTruncando(2, prefixoContabil+""));
} else {
localidadeLancamento = gerarIntegracaoContabilidadeHelper.getIdLocalidade()+"";
//Recupernaod a gerencia comerciail a partir da localidade.
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, localidadeLancamento));
filtroLocalidade.adicionarCaminhoParaCarregamentoEntidade("gerenciaRegional");
Collection colLocalidades = getControladorUtil().pesquisar(filtroLocalidade, Localidade.class.getName());
Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(colLocalidades);
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(2, localidade.getGerenciaRegional().getId()+""));
}
// Campo 2 - Localidade
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(3, localidadeLancamento));
//Campo 3 - Numero da conta
//Caso o indicador de debito credito seja = 1 pegar conta tipo debito, sen�o pegar conta tipo credito.
//Aproveitando para setar os valores do Campo 10 - Indicador de Debito ou Cr�dito (D = Debito, C = Credito)
String indicadorDebitoCredito = " ";
if (gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(new Integer("2"))){
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(5, gerarIntegracaoContabilidadeHelper.getNumeroContaDebito()));
indicadorDebitoCredito = "D";
} else {
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(5, gerarIntegracaoContabilidadeHelper.getNumeroContaCredito()));
indicadorDebitoCredito = "C";
}
// Camp 4 - Centro de Custo - N�o Preencher
gerarIntegracaoTxt.append(Util.completaString(" ", 3));
// Campo 5 - C�digo da An�lise - N�o Preencher
gerarIntegracaoTxt.append(Util.completaString(" ", 3));
// Campo 6 - C�digo de Terceiros - N�o Preencher
gerarIntegracaoTxt.append(Util.completaString(" ", 15));
// Campo 7 - Referencia - N�o Preencher
gerarIntegracaoTxt.append(Util.completaString(" ", 8));
// Campo 8 - Digito - N�o Preencher
gerarIntegracaoTxt.append(Util.completaString(" ", 1));
// Campo 9 - Valor do lancamento (sem pontos, sem virgulas)
gerarIntegracaoTxt.append(
Util.adicionarZerosEsquedaNumero(15,
gerarIntegracaoContabilidadeHelper.getValorLancamento().toString().replace(".", "")));
// Campo 10 - Indicador de Debito ou Cr�dito (D = Debito, C = Credito)
gerarIntegracaoTxt.append(Util.completaString(indicadorDebitoCredito, 1));
// Campo 11 - Data do lancamento (DDMMAAAA)
gerarIntegracaoTxt.append(Util.completaString(dataFormatada, 8));
// Campo 12 - C�digo do Lancamento - FATURAMENTO = 033 e ARRECADACAO = 007
gerarIntegracaoTxt.append(Util.completaString(codigoLancamento, 3));
// Campo 13 - M�s e Ano do Lancamento (MMAAAA)
String mesAno = Util.formatarAnoMesParaMesAnoSemBarra(new Integer(anoMes).intValue());
gerarIntegracaoTxt.append(Util.completaString(mesAno, 6));
// Campo 14 - N�mero da P�gina - Fixo em "001"
gerarIntegracaoTxt.append(Util.completaString("001", 3));
// Quebra da linha
gerarIntegracaoTxt.append(System.getProperty("line.separator"));
}
/*
* 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");
/*
* Caso oarquivo txt n�o esteja vazio
* adiciona o txt ao arquivo zip.
*/
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) {
throw new ControladorException("erro.sistema", ex);
}
try {
// Envia de Arquivo por email
EnvioEmail envioEmail = this.getControladorCadastro()
.pesquisarEnvioEmail(
EnvioEmail.GERAR_INTEGRACAO_PARA_CONTABILIDADE);
String emailRemetente = envioEmail.getEmailRemetente();
String tituloMensagem = envioEmail.getTituloMensagem();
String corpoMensagem = envioEmail.getCorpoMensagem();
String emailReceptor = envioEmail.getEmailReceptor();
ServicosEmail.enviarMensagemArquivoAnexado(
emailReceptor,emailRemetente, tituloMensagem, corpoMensagem,
compactadoTipo);
} catch (Exception e) {
System.out.println("Erro ao enviar email.");
}
}
//caso n�o exista informa��o para os dados informados
}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 Faturamento");
}
}
}
/**
* Este metodo � utilizado para pesquisar os registros q ser�o
* usados para contru��o do txt do caso de uso 469
*
* [UC0469] Gerar Integra��o para a Contabilidade
*
* @author Tiago Moreno
* @date 28/06/2011
*
* @param idLancamentoOrigem
* @param anoMes
* @return
* @throws ControladorException
*/
public Collection pesquisarGerarIntegracaoContabilidade(String idLancamentoOrigem, String anoMes)
throws ControladorException{
Collection colecaoObjetoGerar = null;
Collection colecaoGerarIntegracaoContabilidade = null;
try {
colecaoObjetoGerar = repositorioFinanceiro.pesquisarGerarIntegracaoContabilidadeCosama(idLancamentoOrigem, anoMes);
if(!colecaoObjetoGerar.isEmpty()){
Iterator iteratorPesquisa = colecaoObjetoGerar.iterator();
colecaoGerarIntegracaoContabilidade = new ArrayList();
GerarIntegracaoContabilidadeHelper gerarIntegracaoContabilidadeHelper = null;
Object[] objetoGerar = null;
while(iteratorPesquisa.hasNext()){
gerarIntegracaoContabilidadeHelper = new GerarIntegracaoContabilidadeHelper();
objetoGerar = (Object[]) iteratorPesquisa.next();
//indicador debito credito
if(objetoGerar[10] != null){
gerarIntegracaoContabilidadeHelper.setIndicadorDebitoConta(new Integer((Short) objetoGerar[10]));
}
//numero cartao
if (gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(1)){
gerarIntegracaoContabilidadeHelper.setNumeroCartao(new Integer((Short) objetoGerar[0]).shortValue());
} else if (gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(2)){
gerarIntegracaoContabilidadeHelper.setNumeroCartao(new Integer((Short) objetoGerar[0]).shortValue());
} else if (gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(3)) {
gerarIntegracaoContabilidadeHelper.setNumeroCartao(new Integer((Short) objetoGerar[0]).shortValue());
}
//lancamento tipo
if(objetoGerar[1] != null){
gerarIntegracaoContabilidadeHelper.setIdTipoLancamento(new Integer((Short) objetoGerar[1]));
}
//folha
if(objetoGerar[2] != null){
gerarIntegracaoContabilidadeHelper.setFolha(new Integer((Short) objetoGerar[2]));
}
//linha
if(objetoGerar[3] != null){
gerarIntegracaoContabilidadeHelper.setIndicadorLinha(new Integer((Short)objetoGerar[3]));
}
//prefixo contabil
if(objetoGerar[4] != null){
gerarIntegracaoContabilidadeHelper.setNumeroPrefixoContabil((String) objetoGerar[4]);
}
// numero da conta
if(objetoGerar[5] != null && gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(1)){
String numero = ((String) objetoGerar[5]).trim();
gerarIntegracaoContabilidadeHelper.setNumeroContaCredito(numero);
gerarIntegracaoContabilidadeHelper.setNumeroContaDebito("0");
}else {
String numero = ((String) objetoGerar[5]).trim();
gerarIntegracaoContabilidadeHelper.setNumeroContaDebito(numero);
gerarIntegracaoContabilidadeHelper.setNumeroContaCredito("0");
}
//digito
if(objetoGerar[6] != null){
gerarIntegracaoContabilidadeHelper.setDigito(new Integer(((String) objetoGerar[6]).trim()));
}
//terceiros
if(objetoGerar[7] != null){
gerarIntegracaoContabilidadeHelper.setTerceiros(new Integer(((String) objetoGerar[7]).trim()));
}
//referencia
if(objetoGerar[8] != null){
gerarIntegracaoContabilidadeHelper.setReferencial(new Integer(((String) objetoGerar[8]).trim()));
}
//valor lancamento
if(objetoGerar[9] != null){
gerarIntegracaoContabilidadeHelper.setValorLancamento((BigDecimal)objetoGerar[9]);
}
//Cartao2
if(objetoGerar[11] != null){
gerarIntegracaoContabilidadeHelper.setCartao2(new Integer((Short) objetoGerar[11]));
}
//Versao
if(objetoGerar[12] != null){
gerarIntegracaoContabilidadeHelper.setVersao(new Integer((Short) objetoGerar[12]));
}
//id localidade
if(objetoGerar[13] != null){
gerarIntegracaoContabilidadeHelper.setIdLocalidade((Integer)objetoGerar[13]);
}
//codigo centro custo
if(objetoGerar[14] != null && gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(1)){
gerarIntegracaoContabilidadeHelper.setCodigoCentroCustoCredito(new Integer(((String) objetoGerar[14]).trim()));
gerarIntegracaoContabilidadeHelper.setCodigoCentroCustoDebito(new Integer(0));
}else if(objetoGerar[14] != null && gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(2)){
gerarIntegracaoContabilidadeHelper.setCodigoCentroCustoDebito(new Integer(((String) objetoGerar[14]).trim()));
gerarIntegracaoContabilidadeHelper.setCodigoCentroCustoCredito(new Integer(0));
}
colecaoGerarIntegracaoContabilidade.add(gerarIntegracaoContabilidadeHelper);
//Indicador Centro de Custo
if ( objetoGerar[15] != null && (((Short)objetoGerar[15]).intValue() == 1) ){
gerarIntegracaoContabilidadeHelper.setIndicadorCentroCusto( "" + objetoGerar[15] );
}
//Numero Hitorico Debito
if ( objetoGerar[16] != null && (((Short) objetoGerar[10]).intValue() == 1 ) ) {
gerarIntegracaoContabilidadeHelper.setNumeroHistoricoCreditoOuCredito("" + objetoGerar[16] );
}
//Numero Hitorico Credito
if ( objetoGerar[17] != null && (((Short) objetoGerar[10]).intValue() == 2 ) ) {
gerarIntegracaoContabilidadeHelper.setNumeroHistoricoCreditoOuCredito("" + objetoGerar[17] );
}
}
}
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
return colecaoGerarIntegracaoContabilidade;
}
}