Package mygoodmoney

Source Code of mygoodmoney.Main

/*
* Copyright (C) 2014 Ricardo
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package mygoodmoney;

import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class Main {
  private Tela frame;
  private Date perDataIni;
  private Date perDataFim;
  private char transacaoConta;
  private char transacaoCaixa;
  private char transacaoLancamento;
  private CaixaDAO caixaDAO;
  private ContaDAO contaDAO;
  private LancamentoDAO lancamentoDAO;
  private Caixa caixaAtual;
  private Conta contaAtual;
  private Lancamento lancamentoAtual;
 
  public Main() {
    try {
      SwingUtilities.invokeAndWait( new Runnable() {
        @Override
        public void run(){
          frame = new Tela( "My Good Money - Controle Financeiro - Versão 3.2 (23/07/2014)" );
        }
      });
    }
    catch( InterruptedException ex ) {
      System.out.println( "InterruptedException: " + ex.getMessage() );
    }
    catch( InvocationTargetException ex ) {
      System.out.println( "InvocationTargetException: " );
      ex.printStackTrace();
    }
  }
  public void exec() {
    iniciar();
    processar();
  }
  private void iniciar() {
    this.transacaoConta = 'C';
    this.transacaoCaixa = 'C';
    this.transacaoLancamento = 'C';
    this.caixaDAO = new CaixaDAO();
    this.contaDAO = new ContaDAO();
    this.lancamentoDAO = new LancamentoDAO();
    this.caixaAtual = null;
    this.contaAtual = null;
    this.lancamentoAtual = null;
    this.frame.mudarEstado( "", "NAVEGACAO" );

    setarPeriodoHome();
    recarregarDoBancoDeDados( "Contas" );
    recarregarDoBancoDeDados( "Caixas" );
    recarregarDoBancoDeDados( "Lancamentos" );
  }
  private void setarPeriodoHome() {
    Date dataIni, dataFim;
   
    try {
      dataIni = DateTools.getPrimeiraDataMesAtual();
      dataFim = DateTools.getUltimaDataMesAtual();
    }
    catch( ParseException pe ) {
      System.out.println( "ParseException: " + pe.getLocalizedMessage() );
      dataIni = new Date();
      dataFim = new Date();
    }

    this.frame.setDtcPeriodoIni( dataIni );
    this.frame.setDtcPeriodoFim( dataFim );
    this.perDataIni = dataIni;
    this.perDataFim = dataFim;

  }
  private void processar() {
    do {
      this.frame.acessar();

      if( this.frame.getComandoTela().equals( "ALTERAR_CAIXA" ) ) {
        alterar( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "ALTERAR_CONTA" ) ) {
        alterar( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "ALTERAR_LANCAMENTO" ) ) {
        alterar( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "ALTERAR_TRANSFERENCIA" ) ) {
        alterar( "Transferencia" );
      }
      if( this.frame.getComandoTela().equals( "ATUALIZAR_PERIODO" ) ) {
        atualizarPeriodo();
      }
      if( this.frame.getComandoTela().equals( "CANCELAR_CAIXA" ) ) {
        cancelar( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "CANCELAR_CONTA" ) ) {
        cancelar( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "CANCELAR_LANCAMENTO_SELECIONADO" ) ) {
        cancelar( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "CANCELAR_TRANSFERENCIA" ) ) {
        cancelar( "Transferencia" );
      }
      if( this.frame.getComandoTela().equals( "CARREGAR_CAIXA_SELECIONADO" ) ) {
        carregarSelecao( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "CARREGAR_CONTA_SELECIONADA" ) ) {
        carregarSelecao( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "CARREGAR_LANCAMENTO_SELECIONADO" ) ) {
        carregarSelecao( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "CONFIRMAR_LANCAMENTO" ) ) {
        confirmar( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "CONFIRMAR_CAIXA" ) ) {
        confirmar( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "CONFIRMAR_CONTA" ) ) {
        confirmar( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "CONFIRMAR_TRANSFERENCIA" ) ) {
        confirmar( "Transferencia" );
      }
      if( this.frame.getComandoTela().equals( "EXCLUIR_CAIXA" ) ) {
        excluir( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "EXCLUIR_CONTA" ) ) {
        excluir( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "EXCLUIR_LANCAMENTO" ) ) {
        excluir( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "INCLUIR_CAIXA" ) ) {
        incluir( "Caixa" );
      }
      if( this.frame.getComandoTela().equals( "INCLUIR_CONTA" ) ) {
        incluir( "Conta" );
      }
      if( this.frame.getComandoTela().equals( "INCLUIR_TRANSFERENCIA" ) ) {
        incluir( "Transferencia" );
      }
      if( this.frame.getComandoTela().equals( "INCLUIR_LANCAMENTO" ) ) {
        incluir( "Lancamento" );
      }
      if( this.frame.getComandoTela().equals( "PERIODO_MENOS" ) ) {
        mudarPeriodo( '-' );
      }
      if( this.frame.getComandoTela().equals( "PERIODO_MAIS" ) ) {
        mudarPeriodo( '+' );
      }
      if( this.frame.getComandoTela().equals( "RESUMO_CAIXA" ) ) {
        solicitarResumoCaixa();
      }
      if( this.frame.getComandoTela().equals( "RESUMO_CONTA" ) ) {
        solicitarResumoConta();
      }
      if( this.frame.getComandoTela().equals( "SOLICITAR_EXTRATO" ) ) {
        solicitarExtrato();
      }
    }
    while( !this.frame.getComandoTela().equals( "SAIR" ) );
  }
  private void atualizarPeriodo() {
    if( this.frame.getDtcPeriodoIni() == null || this.frame.getDtcPeriodoFim() == null ) {
      return;
    }
    this.perDataIni = this.frame.getDtcPeriodoIni();
    this.perDataFim = this.frame.getDtcPeriodoFim();
    recarregarDoBancoDeDados("Lancamentos" );
  }
  private void confirmarIncluirConta() {
    if( !validarCamposConta() ) {
      return;
    }

    Conta conta = this.frame.getContaTela();

    this.contaDAO.inserir( conta );
    this.frame.limparCamposConta();
    this.frame.mudarEstado( "Conta", "NAVEGACAO" );
    recarregarDoBancoDeDados("Contas" );

    Mensagem.info( "Conta incluída com sucesso.", this.frame );
  }
  private void recarregarDoBancoDeDados( String pObjeto) {
    if( pObjeto.equals( "Contas" ) ) {
      ArrayList<Conta> contasList = this.contaDAO.selectListaTodosRegistros();
      this.frame.limparContasGeral( contasList );
      this.frame.addContaHomeTODOS();
    }
    else if( pObjeto.equals( "Caixas" ) ) {
      ArrayList<Caixa> caixasList = this.caixaDAO.selectListaTodosRegistros();
      this.frame.limparCaixasGeral( caixasList );
      this.frame.addCaixaHomeTODOS();
    }
    else if( pObjeto.equals( "Lancamentos" ) ) {
      ArrayList<Lancamento> lancamentosList = this.lancamentoDAO.selectListaRegistrosPeriodo(
        DateTools.parseDateToInteger( this.perDataIni ),
        DateTools.parseDateToInteger( this.perDataFim )
      );

      this.frame.setLancamentos( lancamentosList );
    }
  }
  private void confirmarAlterarConta() {
    if( !validarCamposConta() ) {
      return;
    }
   
    if( !Mensagem.confirmacao( "Confirma alterar a conta?", this.frame ) ) {
      return;
    }

    this.contaAtual.setNome( this.frame.getTxfNomeConta() );
    this.contaDAO.alterar( this.contaAtual );
    recarregarDoBancoDeDados("Contas" );
    this.frame.mudarEstado( "Conta", "NAVEGACAO" );
    this.transacaoConta = 'C';
  }
  private boolean validarCamposConta() {
    boolean contaValida = true;
    String mensagemErro = "";

    if( frame.getTxfNomeConta().isEmpty() ) {
      contaValida = false;
      mensagemErro += ">> Nome inválido.\n";
    }

    if( frame.getCbxTipoConta() == null ) {
      contaValida = false;
      mensagemErro += ">> Tipo inválido.\n";
    }

    if( !contaValida ) {
      Mensagem.info( "Erro ao inserir conta:\n" + mensagemErro, this.frame );
    }

    return( contaValida );
  }
  private void confirmarIncluirLancamento() {
    if( !validarCamposLancamento() ) {
      return;
    }
   
    Lancamento lancamento = this.frame.getLancamentoTela();

    // tratar recorrencia
    if( this.frame.getMovRecorrencia() == 'S' ) {
      ArrayList<Integer> datasVencimento = DateTools.calcularVencimentos(
        lancamento.getDataVencimento(),
        this.frame.getItfNumVezes(),
        (this.frame.getItfNumPeriodo()*this.frame.getCbxPeriodo().getIDias())
      );
     
      for( Integer data : datasVencimento ) {
        Lancamento provisao = new Lancamento();

        provisao.setDataEmissao( lancamento.getDataEmissao() );
        provisao.setDataVencimento( data );

        if( lancamento.getDataQuitacao() > 0 ) {
          provisao.setDataQuitacao( data );
        }
        else {
          provisao.setDataQuitacao( 0 );
        }

        provisao.setDescricao( lancamento.getDescricao() );
        provisao.setValor( lancamento.getValor() );
        provisao.setConta( lancamento.getConta() );
        provisao.setCaixa( lancamento.getCaixa() );

        this.lancamentoDAO.inserir( provisao );

        if( provisao.getDataQuitacao() > 0 ) {
          if( lancamento.getConta().getTipo() == 'D' ) {
            this.caixaDAO.subtrairDoSaldo( lancamento.getCaixa().getCodCaixa(), lancamento.getValor() );
          }
          else {
            this.caixaDAO.adicionarAoSaldo( lancamento.getCaixa().getCodCaixa(), lancamento.getValor() );
          }
        }
      }
    }
    else {
      this.lancamentoDAO.inserir( lancamento );

      if( lancamento.getDataQuitacao() > 0 ) {
        if( lancamento.getConta().getTipo() == 'D' ) {
          this.caixaDAO.subtrairDoSaldo( lancamento.getCaixa().getCodCaixa(), lancamento.getValor() );
        }
        else {
          this.caixaDAO.adicionarAoSaldo( lancamento.getCaixa().getCodCaixa(), lancamento.getValor() );
        }
      }
    }

    this.frame.mudarEstado( "Lancamento", "NAVEGACAO" );
    recarregarDoBancoDeDados( "Lancamentos" );
    recarregarDoBancoDeDados( "Caixas" );

    Mensagem.info( "Lançamento incluído com sucesso!" , this.frame);
  }
  private boolean validarCamposLancamento() {
    boolean lancamentoValido = true;
    String msg = "";

    if( this.frame.getTxfMovDescricao().isEmpty() ) {
      lancamentoValido = false;
      msg += ">> Descrição inválida.\n";
    }

    if( this.frame.getDtcMovData() == null ) {
      lancamentoValido = false;
      msg += ">> Data inválida.\n";
    }

    if( this.frame.getDbfMovValor() == 0.0 ) {
      lancamentoValido = false;
      msg += ">> Valor inválido.\n";
    }

    if( this.frame.getCbxMovConta() == null ) {
      lancamentoValido = false;
      msg += ">> Conta inválida.\n";
    }

    if( this.frame.getCbxMovCaixa() == null ) {
      lancamentoValido = false;
      msg += ">> Caixa inválida.\n";
    }

    if( this.frame.getDtcMovData() != null  && this.frame.getCbxMovConta() != null && this.frame.getCbxMovCaixa() != null && this.transacaoLancamento == 'I' ) {
      Lancamento lanc = this.frame.getLancamentoTela();
      if( lanc.getCodLancamento() != 0 ) {
        Mensagem.info( "Já existe um lançamento para este vencimento, valor, conta e caixa.", this.frame );
        return( false );
      }
    }

    if( !lancamentoValido ) {
      Mensagem.info( "Erro ao inserir lançamento:\n" + msg, this.frame );
    }

    return( lancamentoValido );
  }
  private void confirmarIncluirCaixa() {
    if( !validarCamposCaixa() ) {
      return;
    }
   
    Caixa caixa = this.frame.getCaixaTela();

    this.caixaDAO.inserir( caixa );
    this.frame.limparCamposCaixa();
    this.frame.mudarEstado( "Caixa", "NAVEGACAO" );
    recarregarDoBancoDeDados("Caixas" );
   
    Mensagem.info( "Caixa incluído com sucesso.", this.frame );
  }
  private boolean validarCamposCaixa() {
    boolean caixaValido = true;
    String mensagemErro = "";

    if( this.frame.getTxfNomeCaixa().isEmpty() ) {
      caixaValido = false;
      mensagemErro += ">> Nome inválido.\n";
    }

    if( !caixaValido ) {
      Mensagem.info( "Erro ao inserir caixa:\n" + mensagemErro, this.frame );
    }

    return( caixaValido );
  }
  private void confirmarAlterarCaixa() {
    if( !validarCamposCaixa() ) {
      return;
    }
   
    if( !Mensagem.confirmacao( "Confirma alterar o caixa?", this.frame ) ) {
      return;
    }

    this.caixaAtual.setNome( this.frame.getTxfNomeCaixa() );
    this.caixaAtual.setValorLimite( this.frame.getDbfValorLimite() );
    //this.caixaAtual.setSaldo( this.frame.getDbfSaldoInicialCaixa() );
   
    this.caixaDAO.alterar( this.caixaAtual );
    recarregarDoBancoDeDados("Caixas" );
    this.frame.mudarEstado( "Caixa", "NAVEGACAO" );
    this.transacaoCaixa = 'C';
  }
  private void excluir( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      if( this.caixaAtual == null ) {
        Mensagem.info( "Selecione um caixa para excluir.", this.frame );
        return;
      }
     
      if( this.caixaDAO.existeRegistro( this.caixaAtual ) ) {
        Mensagem.info( "Não é possível excluir.\nCaixa com movimentação.", this.frame );
        return;
      }

      if( !Mensagem.confirmacao( "Confirma exclusão do Caixa?", this.frame ) ) {
        return;
      }
     
      this.caixaDAO.excluir( this.caixaAtual );
      recarregarDoBancoDeDados("Caixas" );
      this.frame.limparCamposCaixa();
      this.transacaoCaixa = 'C';
      this.caixaAtual = null;
    }
    else if( pObjeto.equals( "Conta" ) ) {
      if( this.contaAtual == null ) {
        Mensagem.info( "Selecione uma conta para excluir.", this.frame );
        return;
      }
     
      if( this.contaDAO.existeRegistro( this.contaAtual ) ) {
        Mensagem.info( "Não é possível excluir.\nConta com movimentação.", this.frame );
        return;
      }

      if( !Mensagem.confirmacao( "Confirma exclusão da conta?", this.frame ) ) {
        return;
      }
     
      this.contaDAO.excluir( this.contaAtual );
      recarregarDoBancoDeDados("Contas" );
      this.frame.limparCamposConta();
      this.transacaoConta = 'C';
      this.contaAtual = null;
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      if( this.lancamentoAtual == null ) {
        Mensagem.info( "Selecione um lançamento para excluir.", this.frame );
        return;
      }

      if( !Mensagem.confirmacao( "Confirma exclusão do lançamento?", this.frame ) ) {
        return;
      }
     
      this.lancamentoDAO.excluir( this.lancamentoAtual );
     
      if( this.lancamentoAtual.getPago() == 'S' ) {
        if( this.lancamentoAtual.getConta().getTipo() == 'D' ) {
           this.caixaDAO.adicionarAoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
        }
        else {
          this.caixaDAO.subtrairDoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
        }
      }
      recarregarDoBancoDeDados( "Lancamentos" );
      recarregarDoBancoDeDados( "Caixas" );
      this.frame.limparCamposLancamento();
      this.transacaoLancamento = 'C';
      this.lancamentoAtual = null;
    }
   
    this.frame.mudarEstado( pObjeto, "NAVEGACAO" );
  }
  private void cancelar( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      if( this.transacaoCaixa == 'I' ) {
        this.frame.limparCamposCaixa();
        this.caixaAtual = null;
      }
      else {
        this.frame.atualizarCampos( this.caixaAtual );
      }
      this.transacaoCaixa = 'C';
    }
    else if( pObjeto.equals( "Conta" ) ) {
      if( this.transacaoConta == 'I' ) {
        this.frame.limparCamposConta();
        this.contaAtual = null;
      }
      else {
        this.frame.atualizarCampos( this.contaAtual );
      }
      this.transacaoConta = 'C';
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      if( this.transacaoLancamento == 'I' ) {
        this.frame.limparCamposLancamento();
        this.lancamentoAtual = null;
      }
      else {
        this.frame.atualizarCampos( this.lancamentoAtual );
      }
      this.transacaoLancamento = 'C';
      this.frame.habilitarComponentesRecorrencia( true );
    }
    else if( pObjeto.equals( "Transferencia" ) ) {
      this.frame.limparCamposTransferencia();
    }
   
    this.frame.mudarEstado( pObjeto, "NAVEGACAO" );
    this.frame.lostFocus();
  }
  private void carregarSelecao( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      Caixa caixa = this.frame.getCaixaSelecionado();

      this.caixaAtual = caixa;
      this.transacaoCaixa = 'A';
      this.frame.atualizarCampos( caixa );
    }
    else if( pObjeto.equals( "Conta" ) ) {
      Conta conta = this.frame.getContaSelecionada();

      this.contaAtual = conta;
      this.transacaoConta = 'A';
      this.frame.atualizarCampos( conta );
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      Lancamento lancamento = this.frame.getLancamentoSelecionado();
      if( this.transacaoLancamento != 'I' ) {
        this.lancamentoAtual = lancamento;
        this.transacaoLancamento = 'A';
      }
     
      this.frame.habilitarComponentesRecorrencia( this.transacaoLancamento == 'I' );
      this.frame.atualizarCampos( lancamento );
    }
  }
  private void solicitarResumoCaixa() {
    Caixa caixaSelecionado = this.frame.getCbxResCaixa();
   
    if( caixaSelecionado == null ) {
      return;
    }
   
    // saldo do caixa
    Double saldoSelecionado = this.caixaDAO.selectSaldo( caixaSelecionado.getCodCaixa() );
    this.frame.setTxfResValorSaldoCaixa( saldoSelecionado );
   
    if( caixaSelecionado.getLimite().equals( 'S' ) || caixaSelecionado.getNome().equals( "TODOS" ) ) {
      double limitesTotais = this.caixaDAO.selectLimite( caixaSelecionado.getCodCaixa() );
      this.frame.setTxfResSaldoCaixaLimite( saldoSelecionado + limitesTotais );
    }
    else {
      this.frame.setCaixaResumoSemLimite();
    }
   
    // total de entradas
    double totalEntradas = this.caixaDAO.selectTotalEntrada(
      caixaSelecionado.getCodCaixa(),
      DateTools.parseDateToInteger( this.perDataIni ),
      DateTools.parseDateToInteger( this.perDataFim ),
      this.frame.getCkbResumoCaixa()
    );

    this.frame.setTxfResValTotEntrCaixa( totalEntradas );

    // total de saidas
    double totalSaidas = this.caixaDAO.selectTotalSaida(
      caixaSelecionado.getCodCaixa(),
      DateTools.parseDateToInteger( this.perDataIni ),
      DateTools.parseDateToInteger( this.perDataFim ),
      this.frame.getCkbResumoCaixa()
    );
   
    this.frame.setTxfResValTotSaidaCaixa( totalSaidas );
   
    // tratar saldo provisionado
    /* se marcado provisao, obter os creditos e debitos provisionados */
    if( this.frame.getCkbResumoCaixa() ) {
      Double entradaProvisionada = this.caixaDAO.selectTotalEntradaProvisionada(
        caixaSelecionado.getCodCaixa(),
        DateTools.parseDateToInteger( this.perDataIni ),
        DateTools.parseDateToInteger( this.perDataFim )
      );
     
      if( entradaProvisionada.equals( Double.NaN ) ) {
        entradaProvisionada = 0.0;
      }

      Double saidaProvisionada = this.caixaDAO.selectTotalSaidaProvisionada(
        caixaSelecionado.getCodCaixa(),
        DateTools.parseDateToInteger( this.perDataIni ),
        DateTools.parseDateToInteger( this.perDataFim )
      );
     
      if( saidaProvisionada.equals( Double.NaN ) ) {
        saidaProvisionada = 0.0;
      }

      saldoSelecionado = saldoSelecionado + entradaProvisionada - saidaProvisionada;
      this.frame.setTxfResValorSaldoCaixa( saldoSelecionado );
    }

    carregarGrafico();
  }
  private void solicitarResumoConta() {
    Conta contaSelecionada = this.frame.getCbxResConta();

    if( contaSelecionada == null ){
      return;
    }

    // total de saida/entrada
    double totalMovPeriodo = this.lancamentoDAO.selectTotalMovimentoPeriodo(
      contaSelecionada,
      DateTools.parseDateToInteger( this.perDataIni ),
      DateTools.parseDateToInteger( this.perDataFim ),
      this.frame.getCkbResumoConta()
    );

    double totalContaPeriodo = this.contaDAO.selectTotalPeriodo(
      contaSelecionada,
      DateTools.parseDateToInteger( this.perDataIni ),
      DateTools.parseDateToInteger( this.perDataFim ),
      this.frame.getCkbResumoConta()
    );

    // valor do periodo
    this.frame.setTxfResValorMovContaRs( totalContaPeriodo );
     
    // porcentagem do periodo
    if( totalMovPeriodo > 0 ) {
      BigDecimal porcentagem = new BigDecimal( totalContaPeriodo ).divide( new BigDecimal( totalMovPeriodo ), 4, BigDecimal.ROUND_HALF_UP );
      Double porcentagemFinal = porcentagem.doubleValue() * 100;

      this.frame.setTxfResValorMovContaPc( porcentagemFinal );
    }
    else {
      this.frame.setTxfResValorMovContaPc( 0.0 );
    }

    // total do ano
    String inicioAno = DateTools.getSAnoAtual() + "0101";
    String fimAno    = DateTools.getSAnoAtual() + "1231";

    int inicioAnoInt = Integer.parseInt( inicioAno );
    int fimAnoInt = Integer.parseInt( fimAno );

    double totalAnual = this.contaDAO.selectTotalPeriodo( contaSelecionada, inicioAnoInt, fimAnoInt, this.frame.getCkbResumoConta() );

    this.frame.setTxfResValorMovContaAno( totalAnual );
  }
  private void mudarPeriodo( char pOpcao ) {
    Date dataIni = DateTools.somarSubtrairUmMes( this.perDataIni, pOpcao );
    Date dataFim = DateTools.somarSubtrairUmMes( this.perDataFim, pOpcao );
   
    this.perDataIni = dataIni;
    this.perDataFim = dataFim;
   
    this.frame.setDtcPeriodoIni( dataIni );
    this.frame.setDtcPeriodoFim( dataFim );
   
    recarregarDoBancoDeDados( "Lancamentos" );
  }
  private boolean validarCamposExtrato() {
    boolean valido = true;
    String mensagem = "";

    if( this.frame.getCbxExtratoConta() == null ) {
      valido = false;
      mensagem += ">> Conta inválida.\n";
    }
    if( this.frame.getDtcExtratoIni() == null ) {
      valido = false;
      mensagem += ">> Data inicial inválida.\n";
    }
    if( this.frame.getDtcExtratoFim() == null ) {
      valido = false;
      mensagem += ">> Data final inválida.\n";
    }

    if( !valido ) {
      Mensagem.aviso( "Erro ao solicitar extrato:\n" + mensagem, this.frame );
    }

    return( valido );
  }
  private void solicitarExtrato() {
    if( !validarCamposExtrato() ) {
      return;
    }
   
    Conta conta = this.frame.getCbxExtratoConta();
   
    ArrayList<String[]> extratoList = this.contaDAO.selectListaExtratoPeriodo(
      conta,                                                         // conta
      DateTools.parseDateToInteger( this.frame.getDtcExtratoIni() )// data inicial
      DateTools.parseDateToInteger( this.frame.getDtcExtratoFim() )// data final
      this.frame.getCkbExtratoProvisao()                              // provisao
     );
   
    if( extratoList.isEmpty() ) {
      this.frame.setTxtExtrato( "Nenhum lançamento para o período." );
      return;
    }

    String dtEmissao  = "Data Vcto";
    String dtQuitacao = "Data Quitação";
    String descricao  = "Descrição";
    String valor      = "Valor";
    String caixa      = "Caixa";

    dtEmissao  = String.format( "%1$-" + 15 + "s", dtEmissao );
    dtQuitacao = String.format( "%1$-" + 15 + "s", dtQuitacao );
    descricao  = String.format( "%1$-" + 25 + "s", descricao );
    valor      = String.format( "%1$-" + 15 + "s", valor );
    caixa      = String.format( "%1$-" + 15 + "s", caixa );

    String cabecalho = dtEmissao + dtQuitacao + descricao + valor + caixa;

    this.frame.setTxtExtrato( cabecalho );

    Double totalGeral = new Double( 0.0 );

    for( String[] linha : extratoList ) {
      String dtEmi = String.format( "%1$-" + 15 + "s", linha[0] );
      String dtQui = String.format( "%1$-" + 15 + "s", linha[1] );
      String descr = String.format( "%1$-" + 25 + "s", linha[2] );
      String val   = String.format( "%1$-" + 15 + "s", linha[3] );
      String cai   = String.format( "%1$-" + 15 + "s", linha[4] );

      // trata descricao para ter no maximo 15 caracteres
      if( descr.length() > 25 ) {
        descr = descr.substring( 0, 24 ) + " ";
      }

      totalGeral += ValueTools.unformat( val );
      String linhaFinal = dtEmi + dtQui + descr + val + cai;
      this.frame.setTxtExtrato( this.frame.getTxtExtrato() + "\n" + linhaFinal );
    }
   
    // linha do total
    String divisor = "----------------------------------------------------------------------------------------";
    String ultimaLinha =
      String.format( "%1$-" + 15 + "s", " " ) +
      String.format( "%1$-" + 15 + "s", " " ) +
      String.format( "%1$-" + 15 + "s", " " ) +
      String.format( "%1$-" + 10 + "s", "TOTAL:" ) +
      //String.format( "%1$-" + 15 + "s", ValueTools.format( totalGeral ) );
      ValueTools.format( totalGeral );

    this.frame.setTxtExtrato( this.frame.getTxtExtrato() + "\n" + divisor + "\n" + ultimaLinha );
  }
  public void carregarGrafico() {
    Caixa caixa;
   
    if( this.frame.getCbxResCaixa() != null ) {
      caixa = this.frame.getCbxResCaixa();
    }
    else {
      this.frame.setGrafico( null );
      return;
    }
   
    DefaultPieDataset grafico = new DefaultPieDataset();
   
    ArrayList<Object[]> dadosGrafico = this.lancamentoDAO.selectLancamentosGrafico(
      caixa.getCodCaixa(),
      DateTools.parseDateToInteger( this.perDataIni ),
      DateTools.parseDateToInteger( this.perDataFim ),
      this.frame.getCkbResumoCaixa()
    );
   
    if( dadosGrafico.isEmpty() ) {
      this.frame.setGrafico( null );
      return;
    }
   
    for( Object[] item : dadosGrafico ) {
      String conta = (String) item[0];
      Double valor = (Double) item[1];
     
      grafico.setValue( conta, valor );
    }
   
    JFreeChart chart = ChartFactory.createPieChart( "" , grafico );
   
    chart.removeLegend();
    chart.removeSubtitle( null );
   
    this.frame.setGrafico( chart );
  }
  private void confirmarAlterarLancamento() {
    if( !validarCamposLancamento() ) {
      return;
    }
   
    double valorAntigo = this.lancamentoAtual.getValor();
    double valorNovo = this.frame.getDbfMovValor();
   
    // seta no objeto os campos que podem ser alterado
    this.lancamentoAtual.setDescricao( this.frame.getTxfMovDescricao() );
    this.lancamentoAtual.setValor( this.frame.getDbfMovValor() );

    if( this.lancamentoAtual.getDataQuitacao() > 0 && !this.frame.getCkbMovPago() ) {
      System.out.println( "Transformando lançamento em provisão." );
      // transformar em provisao
      this.lancamentoAtual.setPago( 'N' );
      this.lancamentoAtual.setDataQuitacao( 0 );
     
      // -> remover o valor do lancamento do caixa
      if( this.lancamentoAtual.getConta().getTipo() == 'D' ) {
        // somar no caixa
        this.caixaDAO.adicionarAoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
      }
      else if( this.lancamentoAtual.getConta().getTipo() == 'C' ) {
        // debitar no caixa
        this.caixaDAO.subtrairDoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
      }
    }
    else if( this.lancamentoAtual.getDataQuitacao() == 0 && this.frame.getCkbMovPago() ) {
      System.out.println( "Transformando lançamento provisionado em a vista." );
      // transformat em lancamento a vista
      this.lancamentoAtual.setPago( 'S' );
      this.lancamentoAtual.setDataQuitacao( DateTools.getDataAtual() );
     
      // -> adicionar o valor do lancamento ao caixa
      if( this.lancamentoAtual.getConta().getTipo() == 'D' )
      {
        // debitar no caixa
        this.caixaDAO.subtrairDoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
      }
      else if( this.lancamentoAtual.getConta().getTipo() == 'C' )
      {
        // somar no caixa
        this.caixaDAO.adicionarAoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), this.lancamentoAtual.getValor() );
      }
    }
    else {
      if( this.frame.getCkbMovPago() ) {
        // apenas alterar o valor
        if( this.lancamentoAtual.getConta().getTipo() == 'C' ) {
          this.caixaDAO.subtrairDoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), valorAntigo );
          this.caixaDAO.adicionarAoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), valorNovo );
        }
        else {
          this.caixaDAO.adicionarAoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), valorAntigo );
          this.caixaDAO.subtrairDoSaldo( this.lancamentoAtual.getCaixa().getCodCaixa(), valorNovo );
        }
        this.lancamentoAtual.setValor( valorNovo );
      }
      else {
        // eh provisao, apenas alterar o valor do lancamento sem alterar o caixa
        this.lancamentoAtual.setValor( valorNovo );
      }
    }

    this.lancamentoDAO.alterar( this.lancamentoAtual );
    this.frame.mudarEstado( "Lancamento", "NAVEGACAO" );
    recarregarDoBancoDeDados( "Lancamentos" );
    recarregarDoBancoDeDados( "Caixas" );
    this.transacaoLancamento = 'C';
    this.frame.habilitarComponentesRecorrencia( true );
  }
  public static void main( String[] s ) {
    Main programa = new Main();
    programa.exec();
  }
  private void incluir( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      this.transacaoCaixa = 'I';
      this.frame.limparCamposCaixa();
      this.frame.habilitarTipoCaixa( false );
      this.frame.focoCaixa();
    }
    else if( pObjeto.equals( "Conta" ) ) {
      this.transacaoConta = 'I';
      this.frame.limparCamposConta();
      this.frame.focoConta();
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      this.transacaoLancamento = 'I';
      this.frame.habilitarComponentesRecorrencia( true );
      this.frame.limparCamposLancamento();
      this.frame.focoLancamento();
    }
    else if( pObjeto.equals( "Transferencia" ) ) {
      this.frame.limparCamposTransferencia();
      this.frame.focoTransferencia();
    }
   
    this.frame.habilitarCampoAlteracao( pObjeto, true );
    this.frame.mudarEstado( pObjeto, "EDICAO" );
    this.frame.habilitarTipoCaixa( false );
  }
  private void confirmar( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      if( this.transacaoCaixa == 'I' ) {
        confirmarIncluirCaixa();
      }
      else {
        confirmarAlterarCaixa();
      }
    }
    else if( pObjeto.equals( "Conta" ) ) {
      if( this.transacaoConta == 'I' ) {
        confirmarIncluirConta();
      }
      else {
        confirmarAlterarConta();
      }
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      if( this.transacaoLancamento == 'I' ) {
        confirmarIncluirLancamento();
      }
      else {
        confirmarAlterarLancamento();
      }
    }
    else if( pObjeto.equals( "Transferencia" ) ) {
      confirmarIncluirTransferencia();
    }
  }
  private void confirmarIncluirTransferencia() {
    if( !validarCamposTransferencia() ) {
      return;
    }
   
    Lancamento transf = this.frame.getTransferenciaTela();
   
    if( transf.getPago() == 'S' ) {
      // efetivar valores dos caixas
      this.caixaDAO.adicionarAoSaldo( this.frame.getCbxTransfCaixaDestino().getCodCaixa(), transf.getValor() );
      this.caixaDAO.subtrairDoSaldo( this.frame.getCbxTransfCaixaOrigem().getCodCaixa(), transf.getValor() );
    }
   
    this.lancamentoDAO.inserir( transf );
   
    this.frame.mudarEstado( "Transferencia", "NAVEGACAO" );
    recarregarDoBancoDeDados( "Lancamentos" );
    recarregarDoBancoDeDados( "Caixas" );
   
    Mensagem.info( "Transferência incluída com sucesso.", this.frame );
  }
  private boolean validarCamposTransferencia() {
    boolean ok = true;
    String mensagem = "";
   
    if( this.frame.getCbxTransfCaixaOrigem() == null ) {
      ok = false;
      mensagem += ">> Caixa de origem inválido.\n";
    }
   
    if( this.frame.getCbxTransfCaixaDestino() == null ) {
      ok = false;
      mensagem += ">> Caixa de destino inválido.\n";
    }
   
    if( this.frame.getCbxTransfCaixaOrigem() != null && this.frame.getCbxTransfCaixaDestino() != null ) {
      Caixa a = this.frame.getCbxTransfCaixaOrigem();
      Caixa b = this.frame.getCbxTransfCaixaDestino();
     
      if( a.equals( b ) ) {
        ok = false;
        mensagem += ">> Caixas de origem e destino não podem ser iguais.\n";
      }
    }
   
    if( this.frame.getTxfTransfDescricao().isEmpty() ) {
      ok = false;
      mensagem += ">> Descrição inválida.\n";
    }
   
    if( this.frame.getDtcTransfData() == null ) {
      ok = false;
      mensagem += ">> Data inválida.\n";
    }
   
    if( this.frame.getDbfTransfValor() == 0.0 ) {
      ok = false;
      mensagem += ">> Valor inválido.\n";
    }
   
    if( !ok ) {
      Mensagem.info( "Erro ao inserir transferência:\n" + mensagem, frame);
    }
   
    return( ok );
  }
  private void alterar( String pObjeto ) {
    if( pObjeto.equals( "Caixa" ) ) {
      if( this.caixaAtual == null ) {
        Mensagem.info( "Selecione um caixa para alterar.", this.frame );
        return;
      }

      this.transacaoCaixa = 'A';
      this.frame.mudarEstado( pObjeto, "EDICAO" );
      this.frame.habilitarCampoAlteracao( pObjeto, false );
      this.frame.habilitarTipoCaixa( this.caixaAtual.getLimite() == 'S' );
    }
    else if( pObjeto.equals( "Conta" ) ) {
      if( this.contaAtual == null ) {
        Mensagem.info( "Selecione uma conta para alterar.", this.frame );
        return;
      }
   
      this.transacaoConta = 'A';
      this.frame.mudarEstado( pObjeto, "EDICAO" );
      this.frame.habilitarCampoAlteracao( pObjeto, false );
    }
    else if( pObjeto.equals( "Lancamento" ) ) {
      if( this.lancamentoAtual == null ) {
        Mensagem.info( "Selecione um lançamento para editar.", this.frame );
        return;
      }
     
      if( this.lancamentoAtual.getConta() == null ) {
        // eh uma transferencia.. nao pode ser editada
        Mensagem.info( "Não é possível editar uma transferência.", this.frame );
        return;
      }

      this.transacaoLancamento = 'A';
      this.frame.habilitarComponentesRecorrencia( false );
      this.frame.mudarEstado( pObjeto, "EDICAO" );
      this.frame.habilitarCampoAlteracao( pObjeto, false );
    }
  }
}
TOP

Related Classes of mygoodmoney.Main

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.