/*
* Copyright 2012 MoonJava LTDA.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package br.com.moonjava.flight.view.passagem;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.awt.event.KeyListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;
import br.com.moonjava.flight.model.base.FormaDeTratamento;
import br.com.moonjava.flight.model.base.Tipo;
import br.com.moonjava.flight.util.AbstractFlightUI;
import br.com.moonjava.flight.util.ErrorSystem;
import br.com.moonjava.flight.util.FlightImageUI;
import br.com.moonjava.flight.util.FocusTextField;
import br.com.moonjava.flight.util.GerarCodigo;
import br.com.moonjava.flight.util.RequestParamWrapper;
/**
* @version 1.0 Aug 31, 2012
* @contact tiago.aguiar@moonjava.com.br
*
*/
public class VenderPassagemUI extends AbstractFlightUI {
private final JPanel conteudo;
protected final ResourceBundle bundle;
private JLabel tituloQuantidade;
private JLabel tituloTipo;
private JLabel tituloCodigo;
private JLabel tituloTratamento;
private JLabel tituloPagamento;
private JLabel tituloNome;
private JLabel tituloSobrenome;
private JLabel tituloNascimento;
private JLabel tituloCpf;
private JLabel tituloRg;
private JLabel tituloEndereco;
private JLabel tituloTelRes;
private JLabel tituloTelCelular;
private JLabel tituloEmail;
private JLabel imagemCpf;
private JLabel alertaCpf;
private JLabel imagemNascimento;
private JLabel alertaNascimento;
private JLabel tipoLabel;
private JLabel codigo;
private JTextField quantidade;
private JTextField nome;
private JTextField sobrenome;
private JTextField rg;
private JTextField endereco;
private JTextField telResidencial;
private JTextField telCelular;
private JTextField email;
private String[] valTipos;
private JFormattedTextField nascimento;
private JFormattedTextField cpf;
private JComboBox tratamento;
private JComboBox pagamento;
private JButton solicitarCompra;
private JButton concluir;
private JButton quantidadeOK;
private JLabel imagemTelResidencial;
private JLabel imagemTelCelular;
private JLabel alertaTelResidencial;
private JLabel alertaTelCelular;
private ArrayList<JComboBox> tipos;
private double valorTotal;
private boolean firstCreate = true;
private String number;
public VenderPassagemUI(JPanel conteudo, ResourceBundle bundle) {
this.conteudo = conteudo;
this.bundle = bundle;
refresh();
mainMenu();
}
@Override
protected void mainMenu() {
// Titulos
tituloQuantidade = new JLabel(bundle.getString("vender.passagem.titulo.quantidade"));
tituloTipo = new JLabel(bundle.getString("vender.passagem.titulo.tipo"));
tituloCodigo = new JLabel(bundle.getString("vender.passagem.codigo"));
tituloTratamento = new JLabel(bundle.getString("vender.passagem.titulo.tratamento"));
tituloPagamento = new JLabel(bundle.getString("vender.passagem.titulo.pagamento"));
tituloNome = new JLabel(bundle.getString("criar.pessoafisica.titulo.nome"));
tituloSobrenome = new JLabel(bundle.getString("criar.pessoafisica.titulo.sobrenome"));
tituloNascimento = new JLabel(bundle.getString("criar.pessoafisica.titulo.nascimento"));
tituloCpf = new JLabel(bundle.getString("criar.pessoafisica.titulo.cpf"));
tituloRg = new JLabel(bundle.getString("criar.pessoafisica.titulo.rg"));
tituloEndereco = new JLabel(bundle.getString("criar.pessoafisica.titulo.endereco"));
tituloTelRes = new JLabel(bundle.getString("criar.pessoafisica.titulo.telResidencial"));
tituloTelCelular = new JLabel(bundle.getString("criar.pessoafisica.titulo.telCelular"));
tituloEmail = new JLabel(bundle.getString("criar.pessoafisica.titulo.email"));
tipos = new ArrayList<JComboBox>();
// Botoes e caixas de textos
// GerarCodigo gerarCodigo = new GerarCodigo("PASSAGEM");
MaskFormatter mask = null;
try {
mask = new MaskFormatter("#");
mask.setValidCharacters("123456789");
nascimento = new JFormattedTextField(new MaskFormatter("##/##/####"));
cpf = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
} catch (ParseException e1) {
ErrorSystem.addException(e1, bundle);
}
quantidade = new JFormattedTextField(mask);
nome = new JTextField(bundle.getString("criar.pessoafisica.antes.nome"));
sobrenome = new JTextField(bundle.getString("criar.pessoafisica.antes.sobrenome"));
rg = new JTextField(bundle.getString("criar.pessoafisica.antes.rg"));
endereco = new JTextField(bundle.getString("criar.pessoafisica.antes.endereco"));
telResidencial = new JTextField(bundle.getString("criar.pessoafisica.antes.telResidencial"));
telCelular = new JTextField(bundle.getString("criar.pessoafisica.antes.telCelular"));
email = new JTextField(bundle.getString("criar.pessoafisica.antes.email"));
quantidadeOK = new JButton("Ok");
solicitarCompra = new JButton(bundle.getString("vender.passagem.botao.solicitarCompra"));
concluir = new JButton(bundle.getString("vender.passagem.botao.concluir"));
Tipo[] tipos = Tipo.values();
valTipos = new String[tipos.length];
for (int i = 0; i < valTipos.length; i++) {
valTipos[i] = tipos[i].setBundle(bundle);
}
FormaDeTratamento[] tratamentos = FormaDeTratamento.values();
String valTratamentos[] = new String[tratamentos.length];
for (int i = 0; i < valTratamentos.length; i++) {
valTratamentos[i] = tratamentos[i].setBundle(bundle);
}
String valPagamentos[] = {
bundle.getString("vender.passagem.pagamento.cartao"),
bundle.getString("vender.passagem.pagamento.cheque")
};
tratamento = new JComboBox(valTratamentos);
pagamento = new JComboBox(valPagamentos);
pagamento.setSelectedItem(null);
imagemCpf = new JLabel();
imagemNascimento = new JLabel();
imagemTelResidencial = new JLabel();
imagemTelCelular = new JLabel();
alertaCpf = new JLabel();
alertaNascimento = new JLabel();
alertaTelResidencial = new JLabel();
alertaTelCelular = new JLabel();
Font font = new Font("Century Gothic", Font.ITALIC, 13);
nome.setFont(font);
sobrenome.setFont(font);
rg.setFont(font);
endereco.setFont(font);
telResidencial.setFont(font);
telCelular.setFont(font);
email.setFont(font);
nome.setForeground(Color.GRAY);
sobrenome.setForeground(Color.GRAY);
rg.setForeground(Color.GRAY);
endereco.setForeground(Color.GRAY);
telResidencial.setForeground(Color.GRAY);
telCelular.setForeground(Color.GRAY);
email.setForeground(Color.GRAY);
tituloQuantidade.setBounds(60, 35, 100, 30);
tituloTipo.setBounds(60, 75, 100, 30);
tituloCodigo.setBounds(60, 40, 100, 30);
tituloNome.setBounds(60, 110, 200, 30);
tituloSobrenome.setBounds(60, 145, 200, 30);
tituloNascimento.setBounds(60, 180, 160, 30);
tituloCpf.setBounds(60, 215, 40, 30);
tituloRg.setBounds(60, 250, 40, 30);
tituloEndereco.setBounds(60, 285, 100, 30);
tituloTelRes.setBounds(60, 320, 140, 30);
tituloTelCelular.setBounds(60, 355, 140, 30);
tituloEmail.setBounds(60, 395, 160, 30);
tituloTratamento.setBounds(60, 435, 160, 30);
tituloPagamento.setBounds(60, 475, 160, 30);
quantidade.setBounds(150, 35, 100, 30);
quantidadeOK.setBounds(420, 35, 100, 30);
solicitarCompra.setBounds(350, 75, 170, 30);
nome.setBounds(200, 110, 300, 30);
sobrenome.setBounds(200, 145, 300, 30);
nascimento.setBounds(200, 180, 180, 30);
cpf.setBounds(200, 215, 180, 30);
rg.setBounds(200, 250, 180, 30);
endereco.setBounds(200, 285, 300, 30);
telResidencial.setBounds(200, 320, 180, 30);
telCelular.setBounds(200, 355, 180, 30);
email.setBounds(200, 395, 300, 30);
tratamento.setBounds(200, 435, 100, 30);
pagamento.setBounds(200, 475, 100, 30);
concluir.setBounds(350, 475, 150, 30);
imagemCpf.setBounds(385, 215, 40, 30);
imagemNascimento.setBounds(385, 180, 40, 30);
imagemTelResidencial.setBounds(385, 320, 40, 30);
imagemTelCelular.setBounds(385, 355, 40, 30);
alertaCpf.setBounds(410, 215, 100, 30);
alertaNascimento.setBounds(410, 180, 300, 30);
alertaTelResidencial.setBounds(410, 320, 400, 30);
alertaTelCelular.setBounds(410, 355, 400, 30);
conteudo.add(tituloQuantidade);
conteudo.add(tituloTipo);
conteudo.add(quantidade);
conteudo.add(quantidadeOK);
repaint();
}
@Override
protected JPanel getConteudo() {
return conteudo;
}
protected JTextField getQuantidade() {
return quantidade;
}
protected List<JComboBox> getTipos() {
return tipos;
}
protected void setValorTotal(double valor) {
this.valorTotal = valor;
}
protected double getValorTotal() {
return valorTotal;
}
// Get parameters
protected RequestParamWrapper getParametersPF() {
RequestParamWrapper request = new RequestParamWrapper();
request.set("cpf", cpf.getText());
request.set("nome", nome.getText());
request.set("sobrenome", sobrenome.getText());
request.set("rg", rg.getText());
request.set("endereco", endereco.getText());
request.set("email", email.getText());
request.set("nascimento", nascimento.getText());
request.set("telResidencial", telResidencial.getText());
request.set("telCelular", telCelular.getText());
request.set("pagamentoIndex", pagamento.getSelectedIndex());
request.set("codigo", codigo.getText());
return request;
}
protected RequestParamWrapper getDefaultTexts() {
RequestParamWrapper request = new RequestParamWrapper();
request.set("telResidencial", bundle.getString("criar.pessoafisica.antes.telResidencial"));
request.set("telCelular", bundle.getString("criar.pessoafisica.antes.telCelular"));
return request;
}
// Add listeners
protected void addSolicitarCompraListener(ActionListener a) {
solicitarCompra.addActionListener(a);
}
protected void addChangeQuantidadeListener(KeyListener a) {
quantidade.addKeyListener(a);
}
protected void addQuantidadeOKListener(ActionListener a) {
quantidadeOK.addActionListener(a);
}
protected void addFocusCpfListener(FocusListener a) {
cpf.addFocusListener(a);
}
protected void addFocusDataDeNascimentoListener(FocusListener a) {
nascimento.addFocusListener(a);
}
protected void addPagamentoChangeListener(ActionListener a) {
pagamento.addActionListener(a);
}
protected void addConcluirListener(ActionListener a) {
concluir.addActionListener(a);
}
protected void addFocusTelResidencialListener(FocusListener a) {
telResidencial.addFocusListener(a);
}
protected void addFocusTelCelularListener(FocusListener a) {
telCelular.addFocusListener(a);
}
protected void addFocusListener(FocusListener a) {
nome.addFocusListener(a);
sobrenome.addFocusListener(a);
rg.addFocusListener(a);
endereco.addFocusListener(a);
telResidencial.addFocusListener(a);
telCelular.addFocusListener(a);
email.addFocusListener(a);
((FocusTextField) a).setField(nome, sobrenome, rg, endereco, telResidencial, telCelular, email);
((FocusTextField) a).setText(bundle.getString("criar.pessoafisica.antes.nome"),
bundle.getString("criar.pessoafisica.antes.sobrenome"),
bundle.getString("criar.pessoafisica.antes.rg"),
bundle.getString("criar.pessoafisica.antes.endereco"),
bundle.getString("criar.pessoafisica.antes.telResidencial"),
bundle.getString("criar.pessoafisica.antes.telCelular"),
bundle.getString("criar.pessoafisica.antes.email"));
}
// Add layout
protected void addConcluirButton() {
concluir.setEnabled(true);
}
protected void addSolicitarCompraButton() {
JOptionPane.showMessageDialog(null,
bundle.getString("vender.passagem.valor") + ": R$" + String.format("%,.2f", valorTotal),
bundle.getString("vender.passagem.titulo"),
JOptionPane.INFORMATION_MESSAGE);
conteudo.add(solicitarCompra);
repaint();
}
protected void removeSolicitarComprabutton() {
conteudo.remove(solicitarCompra);
repaint();
}
protected void messageFailedQtd(int qtd) {
JOptionPane.showMessageDialog(null,
bundle.getString("vender.passagem.quantidade.erro") + " " + qtd + " " +
bundle.getString("vender.passagem.quantidade.disponivel"),
bundle.getString("vender.passagem.titulo"),
JOptionPane.QUESTION_MESSAGE);
}
protected void addComboBoxTipo(int qtd) {
int y = 75;
for (int i = 0; i < tipos.size(); i++) {
conteudo.remove(tipos.get(i));
}
tipos.clear();
for (int i = 0; i < qtd; i++) {
tipos.add(new JComboBox(valTipos));
tipos.get(i).setBounds(150, y, 100, 30);
conteudo.add(tipos.get(i));
y += 40;
}
repaint();
}
protected void addForm(JComboBox element) {
refresh();
tituloTipo.setBounds(60, 75, 100, 30);
conteudo.add(tituloCodigo);
conteudo.add(tituloTipo);
conteudo.add(tituloNome);
conteudo.add(tituloSobrenome);
conteudo.add(tituloNascimento);
conteudo.add(tituloCpf);
conteudo.add(tituloRg);
conteudo.add(tituloEndereco);
conteudo.add(tituloTelRes);
conteudo.add(tituloTelCelular);
conteudo.add(tituloEmail);
conteudo.add(tituloTratamento);
String item = (String) element.getSelectedItem();
tipoLabel = new JLabel(item);
tipoLabel.setBounds(200, 75, 300, 30);
// Na primeira execução o código é criado com base no BD (ver
// GerarCodigo.java).
// A partir da segunda o codigo é gerado internamente,
// isto devido ao processo de vender ser em massa, isto é,
// cria-se todos os passageiros primeiros e após a confirmação
// no sistema de cartão, o sistema emite (cadastra) as respectivas
// passagens
String cod = null;
if (firstCreate) {
cod = new GerarCodigo("PASSAGEM").getCodigo();
firstCreate = false;
} else {
long numberFormatted = Long.parseLong(number) + 1;
cod = "P" + numberFormatted;
}
codigo = new JLabel(cod);
number = codigo.getText().substring(1);
codigo.setBounds(200, 40, 100, 30);
conteudo.add(codigo);
conteudo.add(tipoLabel);
conteudo.add(nome);
conteudo.add(sobrenome);
conteudo.add(nascimento);
conteudo.add(cpf);
conteudo.add(rg);
conteudo.add(endereco);
conteudo.add(telResidencial);
conteudo.add(telCelular);
conteudo.add(email);
conteudo.add(tratamento);
if (tipos.size() == 1) {
conteudo.add(tituloPagamento);
conteudo.add(pagamento);
concluir.setEnabled(false);
}
conteudo.add(concluir);
repaint();
}
protected void removeForm() {
tipos.remove(tipos.size() - 1);
repaint();
}
protected void addImageBirthDayValid() {
FlightImageUI.add(imagemNascimento, alertaNascimento,
bundle.getString("nascimento.valido"), bundle, conteudo);
repaint();
}
protected void addImageBirthDayInvalid() {
FlightImageUI.addError(imagemNascimento, alertaNascimento,
bundle.getString("nascimento.invalido"), bundle, conteudo);
repaint();
}
protected void addImageTelResidencialParseException() {
FlightImageUI.addError(imagemTelResidencial, alertaTelResidencial,
bundle.getString("alerta.numero"), bundle, conteudo);
repaint();
}
protected void addImageTelCelularParseException() {
FlightImageUI.addError(imagemTelCelular, alertaTelCelular,
bundle.getString("alerta.numero"), bundle, conteudo);
repaint();
}
protected void addImageCpfValido() {
FlightImageUI.add(imagemCpf, alertaCpf,
bundle.getString("criar.pessoafisica.cpf.alerta.ok"), bundle, conteudo);
repaint();
}
public void addImageCpfInvalido() {
FlightImageUI.addError(imagemCpf, alertaCpf,
bundle.getString("criar.pessoafisica.cpf.alerta.erro"), bundle, conteudo);
repaint();
}
protected void messagePFExistente() {
JOptionPane.showMessageDialog(null, bundle.getString("criar.usuario.erro"),
"",
JOptionPane.ERROR_MESSAGE);
}
protected void messageDbUniqueKey() {
JOptionPane.showMessageDialog(null,
bundle.getString("erro.bd.uniquekey"),
bundle.getString("cancelar.passagem.titulo"),
JOptionPane.ERROR_MESSAGE);
}
// remove layout
protected void removeImageTelResidencialParseException() {
conteudo.remove(alertaTelResidencial);
conteudo.remove(imagemTelResidencial);
repaint();
}
protected void removeImageTelCelularParseException() {
conteudo.remove(alertaTelCelular);
conteudo.remove(imagemTelCelular);
repaint();
}
}