/* Copyright 2012-2017 Jose Robson Mariano Alves This file is part of bgfinancas. 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 package 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 badernageral.bgfinancas.modulo.despesa; import badernageral.bgfinancas.biblioteca.ajuda.Ajuda; import badernageral.bgfinancas.biblioteca.contrato.Categoria; import badernageral.bgfinancas.biblioteca.contrato.Controlador; import badernageral.bgfinancas.biblioteca.contrato.ControladorFiltro; import badernageral.bgfinancas.biblioteca.contrato.Item; import badernageral.bgfinancas.biblioteca.sistema.Janela; import badernageral.bgfinancas.biblioteca.sistema.Botao; import badernageral.bgfinancas.biblioteca.sistema.Kernel; import badernageral.bgfinancas.biblioteca.sistema.Tabela; import badernageral.bgfinancas.biblioteca.tipo.Acao; import badernageral.bgfinancas.biblioteca.tipo.Duracao; import badernageral.bgfinancas.biblioteca.tipo.Operacao; import badernageral.bgfinancas.biblioteca.tipo.Posicao; import badernageral.bgfinancas.biblioteca.tipo.Status; import badernageral.bgfinancas.biblioteca.utilitario.AreaTransferencia; import badernageral.bgfinancas.biblioteca.utilitario.AutoCompletarTextField; import badernageral.bgfinancas.biblioteca.utilitario.Datas; import badernageral.bgfinancas.biblioteca.utilitario.Erro; import badernageral.bgfinancas.biblioteca.utilitario.Validar; import java.math.BigDecimal; import java.net.URL; import java.time.LocalDate; import java.util.ResourceBundle; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.DatePicker; import javafx.scene.control.Label; import javafx.scene.control.TableView; import badernageral.bgfinancas.template.modulo.ListaConta; import badernageral.bgfinancas.modelo.Conta; import badernageral.bgfinancas.modelo.Despesa; import badernageral.bgfinancas.modelo.DespesaItem; import badernageral.bgfinancas.modulo.despesa.item.DespesaItemFormularioControlador; import java.util.Arrays; import javafx.scene.layout.GridPane; public final class DespesaCadastroMultiploControlador implements Initializable, Controlador, ControladorFiltro { private final String TITULO = idioma.getMensagem("despesas")+" - "+idioma.getMensagem("cadastrar"); @FXML private Button voltar; @FXML private Button cadastrarItem; @FXML private Button excluir; @FXML private Button finalizar; @FXML private GridPane barraSuperior; @FXML private GridPane barraInferior; private final AutoCompletarTextField<DespesaItem> item = new AutoCompletarTextField<>(this,this); @FXML private ComboBox<Categoria> conta; @FXML private DatePicker data; @FXML private Label labelTitulo; @FXML private Label labelDespesa; @FXML private Label labelData; @FXML private Label labelConta; @FXML private Label labelDespesaValor; @FXML private Label labelValorTotal; @FXML private ListaConta listaContaController; @FXML private TableView<Despesa> tabelaLista; private final Tabela<Despesa> tabela = new Tabela<>(); private ObservableList<Despesa> itens; private BigDecimal saldoTotal; private AreaTransferencia areaTransferencia = new AreaTransferencia(); @Override public void initialize(URL url, ResourceBundle rb) { Kernel.setTitulo(TITULO); Botao.prepararBotao(new Button[]{cadastrarItem}, null, excluir, voltar); Botao.prepararBotaoFinalizar(finalizar, this); tabela.prepararTabela(tabelaLista, 1); tabela.adicionarColuna(tabelaLista, idioma.getMensagem("categoria"), "nomeCategoria"); tabela.adicionarColuna(tabelaLista, idioma.getMensagem("item"), "nomeItem"); tabela.adicionarColunaNumero(tabelaLista, idioma.getMensagem("quantidade"), "quantidade"); tabela.adicionarColunaNumero(tabelaLista, idioma.getMensagem("valor"), "valor"); data.setValue(LocalDate.now()); acaoFiltrar(false); item.getStyleClass().add("semFoco"); item.getStyleClass().add("BotaoMeio"); barraSuperior.add(item, 1, 0); labelTitulo.setText(idioma.getMensagem("cadastro_multiplo")); labelDespesa.setText(idioma.getMensagem("adicionar_despesa")+":"); labelDespesaValor.setText(idioma.getMensagem("valor")+":"); labelData.setText(idioma.getMensagem("data")+":"); labelConta.setText(idioma.getMensagem("conta")+":"); finalizar.setText(idioma.getMensagem("cadastrar")); item.setPromptText(idioma.getMensagem("autofiltro")); areaTransferencia.criarMenu(this, tabelaLista, false); } private String[] modalDespesa(Acao acao, String campo_1, String valor_1, String campo_2, String valor_2){ ModalDespesaControlador janela = Janela.abrir(Despesa.FXML_MODAL_DESPESA, TITULO, true); if(acao == Acao.CADASTRAR){ janela.setTitulo(idioma.getMensagem("adicionar_item")); }else{ janela.setTitulo(idioma.getMensagem("alterar_item")); } janela.setMensagem(campo_1, campo_2); janela.setValor(valor_1, valor_2); Kernel.palcoModal.showAndWait(); return janela.getResultado(); } @Override public void adicionar(String nome) { String[] texto; if(nome!=null && !nome.equals("")){ texto = Item.getNomes(nome); }else{ texto = Item.getNomes(item.getText()); } item.setText(""); if(texto!=null){ DespesaItem i = new DespesaItem().setNome(texto[0]).setNomeCategoria(texto[1]).consultar(); if(i!=null){ String[] valor = modalDespesa(Acao.CADASTRAR, idioma.getMensagem("valor")+":", "0.00", idioma.getMensagem("quantidade")+":", "1"); if(valor != null){ tabelaLista.getItems().add(new Despesa(i.getIdItem(), i.getNome(), i.getNomeCategoria(), valor[1], valor[0])); calcularValorTotal(); } } } } private boolean validarFormulario(){ try { Validar.tableView(tabelaLista, finalizar); Validar.datePicker(data); Validar.comboBox(conta); return true; } catch (Erro e) { return false; } } private void calcularValorTotal(){ itens = tabelaLista.getItems(); BigDecimal valorTotal = new BigDecimal("0.00"); if(itens!=null){ for(Despesa d : itens){ BigDecimal valor = d.getValor(); valorTotal = valorTotal.add(valor); } } saldoTotal = valorTotal; labelValorTotal.setText(idioma.getMensagem("moeda")+" "+valorTotal.toString()); } private void limparFormulario(){ tabelaLista.getItems().removeAll(itens); data.setValue(LocalDate.now()); acaoFiltrar(true); } @Override public void acaoCadastrar(int botao) { if(botao==1){ String texto = item.getText(); if(texto.equals("")){ Janela.showTooltip(Status.ADVERTENCIA, idioma.getMensagem("campo_nao_informado"), item, Duracao.CURTA); item.requestFocus(); }else{ if(Janela.showPergunta(idioma.getMensagem("item_nao_encontrado"))){ DespesaItemFormularioControlador Controlador = Janela.abrir(DespesaItem.FXML_FORMULARIO, TITULO); Controlador.cadastrar(null, this, texto); } } } } public void acaoFinalizar() { if(validarFormulario()){ itens = tabelaLista.getItems(); LocalDate d = data.getValue(); Categoria c = conta.getSelectionModel().getSelectedItem(); for(Despesa i : itens){ i.setIdConta(c); i.setData(Datas.toSqlData(d)); i.setHora(Datas.getHoraAtual()); i.cadastrar(); } new Conta().alterarSaldo(Operacao.DECREMENTAR, c.getIdCategoria(), saldoTotal.toString()); limparFormulario(); Janela.showTooltip(Status.SUCESSO, idioma.getMensagem("operacao_sucesso"), Duracao.CURTA); } } @Override public void acaoExcluir(int botao) { itens = tabelaLista.getSelectionModel().getSelectedItems(); if(Validar.exclusao(itens, excluir, false)){ tabelaLista.getItems().removeAll(itens); calcularValorTotal(); } } @Override public void acaoFiltrar(Boolean animacao) { item.setItens(new DespesaItem().listar()); new Conta().montarSelectCategoria(conta); listaContaController.atualizarTabela(animacao); calcularValorTotal(); item.requestFocus(); } @Override public void acaoAlterar(int tabela) { if(tabela==1){ int index = tabelaLista.getSelectionModel().getSelectedIndex(); Despesa despesa = tabelaLista.getSelectionModel().getSelectedItem(); String[] valor = modalDespesa(Acao.ALTERAR, idioma.getMensagem("valor")+":", despesa.getValor().toString(), idioma.getMensagem("quantidade")+":", despesa.getQuantidade().toString()); if(valor != null){ despesa.setValor(valor[0]); despesa.setQuantidade(valor[1]); tabelaLista.getItems().set(index, despesa); calcularValorTotal(); } }else if(tabela==2){ listaContaController.alterarConta(TITULO); } } @Override public void acaoVoltar() { Kernel.principal.acaoVoltar(); } @Override public void acaoGerenciar(int botao) { System.out.println(idioma.getMensagem("nao_implementado")); } @Override public void acaoAjuda() { Ajuda.getInstance().setObjetos(voltar,labelTitulo,labelData,data,labelConta,conta,finalizar,labelDespesa,item,cadastrarItem,excluir,tabelaLista,barraInferior,listaContaController.getGridPane()); Ajuda.getInstance().capitulo(Posicao.CENTRO, idioma.getMensagem("tuto_desp_mult_1")); Ajuda.getInstance().capitulo(data, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_2")); Ajuda.getInstance().capitulo(item, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_3")); Ajuda.getInstance().capitulo(cadastrarItem, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_4")); Ajuda.getInstance().capitulo(excluir, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_5")); Ajuda.getInstance().capitulo(Arrays.asList(tabelaLista, barraInferior), Posicao.CENTRO, idioma.getMensagem("tuto_desp_mult_6")); Ajuda.getInstance().capitulo(conta, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_7")); Ajuda.getInstance().capitulo(finalizar, Posicao.BAIXO, idioma.getMensagem("tuto_desp_mult_8")); Ajuda.getInstance().apresentarProximo(); } }