/*
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.grupo;
import badernageral.bgfinancas.biblioteca.ajuda.Ajuda;
import badernageral.bgfinancas.biblioteca.contrato.Categoria;
import badernageral.bgfinancas.biblioteca.contrato.Controlador;
import badernageral.bgfinancas.biblioteca.sistema.Botao;
import badernageral.bgfinancas.biblioteca.sistema.Janela;
import badernageral.bgfinancas.biblioteca.sistema.Kernel;
import badernageral.bgfinancas.biblioteca.sistema.Tabela;
import badernageral.bgfinancas.biblioteca.tipo.Duracao;
import badernageral.bgfinancas.biblioteca.tipo.Posicao;
import badernageral.bgfinancas.biblioteca.tipo.Status;
import badernageral.bgfinancas.biblioteca.utilitario.Animacao;
import badernageral.bgfinancas.biblioteca.utilitario.Erro;
import badernageral.bgfinancas.biblioteca.utilitario.Validar;
import badernageral.bgfinancas.modelo.DespesaCategoria;
import badernageral.bgfinancas.modelo.Grupo;
import badernageral.bgfinancas.modelo.GrupoItem;
import badernageral.bgfinancas.template.barra.BarraPadrao;
import java.net.URL;
import java.time.LocalDate;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.StackPane;
import javafx.collections.ObservableList;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableView;
import javafx.scene.layout.GridPane;
public final class GrupoItemControlador implements Initializable, Controlador {
@FXML private GridPane barraSuperior;
@FXML private Label labelCategoria;
@FXML private ComboBox<Categoria> categoria;
@FXML private Button cadastrar;
@FXML private Button excluir;
@FXML private BarraPadrao barraController;
@FXML private TableView<Grupo> listaGrupos;
private ObservableList<Grupo> itensGrupo;
private final Tabela<Grupo> tabelaGrupo = new Tabela<>();
@FXML private StackPane tabelaPane;
private final String TITULO = idioma.getMensagem("cotas_despesas");
private ObservableList<GrupoItem> itens;
private final Tabela<GrupoItem> tabela = new Tabela<>();
private final TableView<GrupoItem> tabelaLista = new TableView<>();;
@Override
public void initialize(URL url, ResourceBundle rb) {
Kernel.setTitulo(TITULO);
barraController.getLabelTitulo().setText(TITULO);
Botao.prepararBotaoCadastrar(cadastrar, 2);
Botao.prepararBotaoExcluir(excluir, 2);
labelCategoria.setText(idioma.getMensagem("adicionar_categoria")+":");
tabelaGrupo.prepararTabelaSelecao(listaGrupos, 1);
tabelaGrupo.adicionarColuna(listaGrupos, idioma.getMensagem("cota"), "nome");
tabelaGrupo.adicionarColunaNumero(listaGrupos, idioma.getMensagem("valor"), "valor");
tabelaGrupo.setColunaColorida(tabelaGrupo.adicionarColunaNumero(listaGrupos, idioma.getMensagem("saldo"), "saldo"));
tabelaPane.getChildren().add(tabelaLista);
tabela.prepararTabela(tabelaLista, 2);
tabela.adicionarColuna(tabelaLista, idioma.getMensagem("despesa")+" / "+idioma.getMensagem("categoria"), "nomeItem");
acaoFiltrar(false);
new DespesaCategoria().montarSelectCategoria(categoria);
}
public void acaoGrupoSelecionado(){
Categoria c = listaGrupos.getSelectionModel().getSelectedItem();
if(c!=null){
labelCategoria.setDisable(false);
categoria.setDisable(false);
cadastrar.setDisable(false);
excluir.setDisable(false);
tabelaLista.setDisable(false);
categoria.getSelectionModel().select(-1);
tabelaLista.setItems(new GrupoItem().setIdCategoria(c.getIdCategoria()).listar());
}else{
labelCategoria.setDisable(true);
categoria.setDisable(true);
cadastrar.setDisable(true);
excluir.setDisable(true);
tabelaLista.setDisable(true);
}
}
@Override
public void acaoFiltrar(Boolean animacao){
atualizarGrupos();
acaoGrupoSelecionado();
if(animacao){
Animacao.fadeOutIn(tabelaLista);
}
}
public void atualizarGrupos(){
Grupo grupoSelecionado = listaGrupos.getSelectionModel().getSelectedItem();
LocalDate hoje = LocalDate.now();
listaGrupos.setItems(new Grupo().getRelatorio(hoje,barraController.getFiltro().getText()));
listaGrupos.getSelectionModel().select(grupoSelecionado);
}
@Override
public void acaoCadastrar(int botao) {
if(botao==1){
GrupoFormularioControlador Controlador = Janela.abrir(Grupo.FXML_FORMULARIO, TITULO);
Controlador.cadastrar(null);
}else if(botao==2){
try{
Validar.comboBox(categoria);
Categoria d = categoria.getSelectionModel().getSelectedItem();
Categoria c = listaGrupos.getSelectionModel().getSelectedItem();
if(d!=null && c!=null){
try{
for(GrupoItem p : tabelaLista.getItems()){
if(p.getIdItem().equals(d.getIdCategoria())){
throw new Erro();
}
}
GrupoItem gi = new GrupoItem(d.getIdCategoria(), c.getIdCategoria(), d.getNome());
gi.cadastrar();
acaoFiltrar(true);
}catch(Erro e){
Janela.showTooltip(Status.ERRO, idioma.getMensagem("item_ja_existe"), Duracao.NORMAL);
}
}
}catch(Erro e){
//
}
}
}
@Override
public void acaoAlterar(int tabela) {
if(tabela==1){
itensGrupo = listaGrupos.getSelectionModel().getSelectedItems();
if(Validar.alteracao(itensGrupo, barraController.getBotaoAlterar())){
GrupoFormularioControlador Controlador = Janela.abrir(Grupo.FXML_FORMULARIO, TITULO);
Controlador.alterar(itensGrupo.get(0));
}
}else if(tabela==11){
acaoGrupoSelecionado();
}
}
@Override
public void acaoExcluir(int botao) {
if(botao==1){
itensGrupo = listaGrupos.getSelectionModel().getSelectedItems();
if(Validar.exclusao(itensGrupo, barraController.getBotaoExcluir())){
try {
for(Grupo t : itensGrupo){
t.excluir();
}
Janela.showTooltip(Status.SUCESSO, idioma.getMensagem("operacao_sucesso"), Duracao.CURTA);
} catch (Erro ex) {
Janela.showTooltip(Status.ERRO, idioma.getMensagem("restricao_excluir"), Duracao.NORMAL);
}
acaoFiltrar(true);
}
}else if(botao==2){
itens = tabelaLista.getSelectionModel().getSelectedItems();
if(Validar.exclusao(itens, excluir)){
itens.forEach((GrupoItem p) -> p.excluir());
Janela.showTooltip(Status.SUCESSO, idioma.getMensagem("operacao_sucesso"), Duracao.CURTA);
acaoFiltrar(true);
}
}
}
@Override
public void acaoGerenciar(int botao) {
System.out.println(idioma.getMensagem("nao_implementado"));
}
@Override
public void acaoVoltar() {
Kernel.principal.acaoVoltar();
}
@Override
public void acaoAjuda() {
Ajuda.getInstance().setObjetos(barraController,labelCategoria,cadastrar,categoria,excluir,listaGrupos,tabelaLista);
Ajuda.getInstance().capitulo(Posicao.CENTRO, idioma.getMensagem("tuto_grupo_1"));
Ajuda.getInstance().capitulo(listaGrupos, Posicao.CENTRO, idioma.getMensagem("tuto_grupo_2"));
Ajuda.getInstance().capitulo(barraController.getBotaoCadastrar(),
Posicao.BAIXO, idioma.getMensagem("tuto_cadastrar"));
Ajuda.getInstance().capitulo(barraController.getBotaoAlterar(),
Posicao.BAIXO, idioma.getMensagem("tuto_alterar"));
Ajuda.getInstance().capitulo(barraController.getBotaoExcluir(),
Posicao.BAIXO, idioma.getMensagem("tuto_excluir"));
Ajuda.getInstance().capitulo(tabelaLista, Posicao.CENTRO, idioma.getMensagem("tuto_grupo_3"));
Ajuda.getInstance().capitulo(cadastrar, Posicao.BAIXO, idioma.getMensagem("tuto_grupo_4"));
Ajuda.getInstance().capitulo(excluir, Posicao.BAIXO, idioma.getMensagem("tuto_grupo_5"));
Ajuda.getInstance().apresentarProximo();
}
}