package gcom.financeiro;
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 gcom.cadastro.ControladorCadastroLocal;
import gcom.cadastro.ControladorCadastroLocalHome;
import gcom.cadastro.EnvioEmail;
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 javax.ejb.CreateException;
import javax.ejb.SessionBean;
/**
* Controlador Financeiro CAEMA
*
* @author S�vio Luiz
* @date 28/04/2008
*/
public class ControladorFinanceiroCAEMASEJB extends ControladorFinanceiro implements SessionBean {
private static final long serialVersionUID = 1L;
//==============================================================================================================
// M�TODOS EXCLUSIVOS DA CAEMA
//==============================================================================================================
/**
* Retorna o controladorCadastro
*
* @author Thiago Ten�rio
* @date 18/08/2006
*
*/
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 Arthur Carvalho
* @date 18/02/2009
*
* @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 - n�mero do cart�o
* 1 - c�digo tipo
* 2 - n�mero folha
* 3 - indicador linha
* 4 - prefixo cont�bil
* 5 - n�mero conta
* 6 - n�mero d�gito
* 7 - n�mero terceiros
* 8 - c�digo refer�ncia
* 9 - valor lan�amento
* 10 - indicador d�bito cr�dito
* 11 - n�mero cart�o 2
* 12 - n�mero vers�o
* 13 - id da localidade
* 14 - c�digo centro custo
*
*/
Collection<Object[]> colecaoDadosGerarIntegracao = null;
colecaoDadosGerarIntegracao = this.pesquisarGerarIntegracaoContabilidade/*Caern*/(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(6 ,8);
dataFormatada = diaMes + ano;
/*
* Caso a cole��o dos dados n�o esteja vazia
*/
if(colecaoDadosGerarIntegracao != null && !colecaoDadosGerarIntegracao.isEmpty()){
/** defini��o das vari�veis */
Short numeroCartao = null;
BigDecimal valorLancamento = null;
Integer numeroSequencial = 0;
String indicadorCentroCusto = null;
/*
* La�o para gerar o txt
*/
Iterator iterator = colecaoDadosGerarIntegracao.iterator();
while (iterator.hasNext()){
GerarIntegracaoContabilidadeHelper gerarIntegracaoContabilidadeHelper = (GerarIntegracaoContabilidadeHelper)iterator.next();
//n�mero do cart�o
numeroCartao = gerarIntegracaoContabilidadeHelper.getNumeroCartao();
//valor do lan�amento
valorLancamento = (BigDecimal) gerarIntegracaoContabilidadeHelper.getValorLancamento();
//Indicador Centro Custo
indicadorCentroCusto = gerarIntegracaoContabilidadeHelper.getIndicadorCentroCusto();
//Numero Historico Debito ou Credito
/*
* Inicio da gera��o do txt
*/
//Cartao
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(2,numeroCartao + ""));
//Sequencial
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumeroTruncando(3, numeroSequencial + ""));
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//data completa
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(6,dataFormatada));
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//Conta Debito
gerarIntegracaoTxt.append(gerarIntegracaoContabilidadeHelper.getNumeroContaDebito()+"");
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//Conta Credito
gerarIntegracaoTxt.append(gerarIntegracaoContabilidadeHelper.getNumeroContaCredito()+"");
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//Valor Lancamento
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(13 , (valorLancamento + "")));
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//Numero Historico de Credito ou Debito
gerarIntegracaoTxt.append(gerarIntegracaoContabilidadeHelper.getNumeroHistoricoCreditoOuCredito());
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//MesAno
gerarIntegracaoTxt.append("\"" + Util.completaString(Util.formatarAnoMesParaMesAno(Integer.parseInt(anoMes)) , 7 )+"\"");
//Quebra de Linha
gerarIntegracaoTxt.append(System.getProperty("line.separator"));
if (indicadorCentroCusto != null && indicadorCentroCusto.equals("1")){
//Exibir codigo de credito ou debito
if(gerarIntegracaoContabilidadeHelper.getCodigoCentroCustoCredito() != 0){
//Codigo Custo Credito
gerarIntegracaoTxt.append(gerarIntegracaoContabilidadeHelper.getCodigoCentroCustoCredito()+"");
} else {
//Codigo Custo Debito
gerarIntegracaoTxt.append(gerarIntegracaoContabilidadeHelper.getCodigoCentroCustoDebito()+"");
}
//Separar o Campo com virgula
gerarIntegracaoTxt.append(",");
//Valor Lancamento do centro de custo
gerarIntegracaoTxt.append(Util.adicionarZerosEsquedaNumero(13 , (valorLancamento + "")));
//Quebra de Linha
gerarIntegracaoTxt.append(System.getProperty("line.separator"));
}
numeroSequencial = numeroSequencial +1;
}
/*
* Determina se o arquivo � de faturamento ou arrecada��o
* para concatenar no nome do arquivo .zip
*/
String descricaoLancamento = "";
if(idLancamentoOrigem.equals(LancamentoOrigem.FATURAMENTO + "")){
descricaoLancamento = "FATURAMENTO";
}else if(idLancamentoOrigem.equals(LancamentoOrigem.ARRECADACAO + "")){
descricaoLancamento = "ARRECADACAO";
}
/*
* 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
*
* [UC0469] Gerar Integra��o para a Contabilidade
*
* @author Arthur Carvalho
* @date 18/02/2009
*
* @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.pesquisarGerarIntegracaoContabilidadeCaema(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 if(objetoGerar[5] != null && gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta() != null
&& gerarIntegracaoContabilidadeHelper.getIndicadorDebitoConta().equals(2)){
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;
}
}