package view; import entidades.Veiculo; import java.net.URL; import java.util.ResourceBundle; import java.util.regex.Pattern; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import model.util.MaskFieldUtil; import model.util.Util; import org.controlsfx.control.action.Action; import org.controlsfx.dialog.Dialogs; public class TelaParceirosController implements Initializable, ControlledScreen { ScreensController myController; @FXML private ComboBox cmbTipoPessoa, cmbUF, cmbPorte; @FXML private CheckBox chkAtivo; @FXML private Label lblDescricao, lblCPF_CNPJ, lblBairro, lblCEP, lblCidade, lblComplemento, lblEmail, lblFone1, lblFone2, lblLogradouro, lblNumero, lblPlaca, lblUF, lblVeiculo; @FXML private TextField txtCodigo, txtNome, ftxtCPF_CNPJ, txtLogradouro, txtComplemento, txtNumero, txtBairro, ftxtCEP, txtCidade, txtFone1, txtFone2, txtEmail, txtDescricao, txtPlaca; @FXML private Button btnIncluirParceiros, btnNovoParceiros, btnPesquisar, btnLimparParceiros, btnIncluirVeiculo, btnRemoverVeiculo, btnLimparCampos; @FXML private TableView tblVeiculos, tblPesquisa; @FXML private AnchorPane anchorPanePesquisa; @Override public void initialize(URL url, ResourceBundle rb) { // TODO } public void setScreenParent(ScreensController screenParent) { myController = screenParent; cmbTipoPessoa.getSelectionModel().select(0); txtCidade.setText("GOIÂNIA"); cmbUF.getSelectionModel().select(8); cmbPorte.getSelectionModel().select(1); } //volta para a tela principal @FXML private void keyReleased(KeyEvent keyEvent) { if (keyEvent.getCode() == KeyCode.ESCAPE) { Util.voltar(myController); } } @FXML private void onMouseEntered(MouseEvent mouseEvent) { Button b = (Button) mouseEvent.getSource(); if (null != b.getText()) switch (b.getText()) { case "Novo": lblDescricao.setText("Habilita campos para cadastro de novo cliente."); break; case "Limpar": lblDescricao.setText("Limpa os campos e volta todos para o estado inicial."); break; case "Salvar": lblDescricao.setText("Valida as alterações e salva o registro."); break; case "Deletar": lblDescricao.setText("Valida as alterações e salva o registro."); break; case "Incluir": lblDescricao.setText("Valida as informações e inclui o novo registro."); break; case "Voltar": lblDescricao.setText("Volta para a tela principal."); break; } mouseEvent.consume(); } @FXML private void onMouseExited(MouseEvent mouseEvent) { lblDescricao.setText(null); } @FXML private void btnVoltarOnAction(ActionEvent event) { clear(); elementChangeStatus(false); Util.voltar(myController); } //alterna o nome da label entre cpf e cnpj de acordo com a seleção na combo @FXML private void cmbTipoPessoaOnAction(ActionEvent event) { if (cmbTipoPessoa.getSelectionModel().getSelectedIndex() == 1) { ftxtCPF_CNPJ.setText(null); lblCPF_CNPJ.setText("CNPJ"); } else { ftxtCPF_CNPJ.setText(null); lblCPF_CNPJ.setText("CPF"); } } //mostra o anchorpane de pesquisa //faz as consultas no banco de acordo com os valores preenchidos @FXML private void btnPesquisarOnAction(ActionEvent event) { Util.pesquisar(true, anchorPanePesquisa); //implementar consultas } //esconde o anchorpane de pesquisa @FXML private void btnCancelarPesquisaOnAction(ActionEvent event) { Util.pesquisar(false, anchorPanePesquisa); } //habilita os elementos para inserção //limpa os campos para o caso de haver algum texto inadequado escrito //foca no textfield nome do cliente //desabilita o acesso ao textfield codigo //aplica máscara ao campo cnpj cpf @FXML private void btnNovoParceirosOnAction(ActionEvent event) { elementChangeStatus(true); clear(); txtNome.requestFocus(); txtCodigo.setEditable(false); MaskFieldUtil.cpfCnpjField(ftxtCPF_CNPJ); } //invoca o método clear que volta os valores dos elementos para seus padrões //e muda o status do cenário para o inicial (habilita pesquisa de clientes) @FXML private void btnLimparParceirosOnAction(ActionEvent event) { clear(); elementChangeStatus(false); } @FXML private void btnIncluirParceirosOnAction(ActionEvent event) { } //só fica habilitado caso haja retorno de uma consulta @FXML private void btnDeletarParceirosOnAction(ActionEvent event) { } //adiciona veículo da tableview @FXML private void addVeiculo(ActionEvent event) { try { String placa = txtPlaca.getText().toUpperCase(), descricao = txtDescricao.getText().toUpperCase(); Pattern p = Pattern.compile("[a-zA-Z]{3}-[0-9]{4}"); boolean valida = p.matcher(placa).matches(); if (descricao == null || placa == null || !valida) { Action erro = Dialogs.create() .title("Atenção") .masthead("Informe valores válidos") .message("Possíveis erros:\n\t• Veículo ou placa não informado" + "\n\t• Placa fora do padrão \"AAA-0000\"") .showWarning(); } else if (valida) { } } catch (Exception e) { e.getMessage(); } } //remove veículo da tableview @FXML private void removeVeiculo() { ObservableList data = tblVeiculos.getItems(); int index = tblVeiculos.getSelectionModel().getFocusedIndex(); try { data.remove(index); } catch (Exception e) { try { data.remove(0); } catch (Exception ex) { Action response = Dialogs.create() .title("Atenção!") .masthead("Lista vazia") .showWarning(); } } } //limpa apenas os campos Veículo, Placa e seta a combo para o valor 2 (carro) @FXML private void limpaCamposVeiculo() { txtDescricao.setText(null); txtPlaca.setText(null); cmbPorte.getSelectionModel().select(1); } //muda a propriedade disabled de acordo com o valor booleano do parâmetro private void elementChangeStatus(boolean x) { btnPesquisar.setDisable(x); btnNovoParceiros.setDisable(x); btnLimparParceiros.setDisable(!x); btnIncluirParceiros.setDisable(!x); chkAtivo.setDisable(!x); lblBairro.setDisable(!x); lblCEP.setDisable(!x); lblCidade.setDisable(!x); lblComplemento.setDisable(!x); lblEmail.setDisable(!x); lblFone1.setDisable(!x); lblFone2.setDisable(!x); lblLogradouro.setDisable(!x); lblNumero.setDisable(!x); lblPlaca.setDisable(!x); lblUF.setDisable(!x); lblVeiculo.setDisable(!x); txtLogradouro.setDisable(!x); txtComplemento.setDisable(!x); txtNumero.setDisable(!x); txtBairro.setDisable(!x); ftxtCEP.setDisable(!x); txtCidade.setDisable(!x); txtFone1.setDisable(!x); txtFone2.setDisable(!x); txtEmail.setDisable(!x); txtDescricao.setDisable(!x); txtPlaca.setDisable(!x); tblVeiculos.setDisable(!x); cmbUF.setDisable(!x); cmbPorte.setDisable(!x); btnIncluirVeiculo.setDisable(!x); btnRemoverVeiculo.setDisable(!x); btnLimparCampos.setDisable(!x); } //faz com que os campos voltem ao valor padrão inicial private void clear() { txtBairro.setText(null); ftxtCEP.setText(null); cmbTipoPessoa.getSelectionModel().select(0); //Pessoa Física ftxtCPF_CNPJ.setText(null); cmbUF.getSelectionModel().select(8); //UF => GO txtCidade.setText("GOIÂNIA"); txtComplemento.setText(null); txtEmail.setText(null); txtFone1.setText(null); txtFone2.setText(null); txtLogradouro.setText(null); txtNumero.setText(null); cmbPorte.getSelectionModel().select(1); //Porte 2 (carro) txtPlaca.setText(null); txtDescricao.setText(null); } }