package gui.course.tarif;
import static gui.MotsCleProjet.*;
import static gui.util.TaxiGuiUtil.FabricationButton;
import static gui.util.TaxiGuiUtil.MessageBox;
import gui.*;
import gui.util.ErreurDeValidation;
import gui.util.TaxiGuiUtil;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Vector;
import javax.swing.*;
import modele.commun.TarifCourse;
/**
* class TarifCourseEditionFenetre
* permet de cr�er une interface graphique pour modifier et ajouter un enregistrement
* @author Kasandra
*
*/
public class TarifCourseEditionFenetre implements ActionListener{
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private TarifCourse tarifCourse = new TarifCourse();
static Font titreFont = new Font("Tahoma", 1, 12);
private JLabel labDtV, labPriseChrg, labTJr, labTNuit, labT1, labT2, labHrAtt, titres;
private JPanel titre;
private JTextControlKey txtPriseEnChrgTJr, txtPrixSupplForfaitTNuit,
txtTarif1, txtPrixHrAtt, txtTarif2;
private ImageIcon ani;
private JLabel textdateVigueur;
protected boolean okFlag;
public boolean OK_Button() {
return okFlag;
}
/**
* Constructeur
*/
public TarifCourseEditionFenetre() {
aDialog = new JDialog(MainWindow.cadrePrincipal(), " Tarif des courses taxis...", true);
ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"));
textdateVigueur = new JLabel();
textdateVigueur.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textdateVigueur.setIcon(ani);
textdateVigueur.setFont(titreFont);
textdateVigueur.setForeground(new java.awt.Color(66, 79, 120));
textdateVigueur.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), 0, DateCalendar.Mode.DATE_SEULEMENT);
fen.affiche();
if (fen.okFlag) {
Date strDate = fen.retourDate();
if (strDate.after(new Date())) {
textdateVigueur.setText(DATE_ERREUR_TEXTE);
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
} else {
textdateVigueur.setText(new SimpleDateFormat(DATE_FORMAT).format(strDate));
}
} else {
textdateVigueur.setText(DATE_ERREUR_TEXTE);
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
txtTarif1 = new JTextControlKey("", 5, IsDecimal);
txtTarif2 = new JTextControlKey("", 5, IsDecimal);
txtPriseEnChrgTJr = new JTextControlKey("", 5, IsDecimal);
txtPrixHrAtt = new JTextControlKey("", 5, IsDecimal);
txtPrixSupplForfaitTNuit = new JTextControlKey("", 5, IsDecimal);
okFlag = false;
}
/**
* initialise les donn�es
* @param tarifCourse
*/
public void initializeDonnee(TarifCourse tarifCourse) {
this.tarifCourse = tarifCourse;
textdateVigueur.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(tarifCourse.getDateVigueur()));
txtTarif1.ChampsTxt.setText(""+tarifCourse.getPrixTarif1());
txtTarif2.ChampsTxt.setText(""+tarifCourse.getPrixTarif2());
txtPriseEnChrgTJr.ChampsTxt.setText(""+tarifCourse.getPrixPriseCharge());
txtPrixHrAtt.ChampsTxt.setText(""+tarifCourse.getPrixHeureAttente());
txtPrixSupplForfaitTNuit.ChampsTxt.setText(""+tarifCourse.getPrixForfaitNuit());
}
/**
*
* @return tarifCourse
*/
public TarifCourse renvoiTarifCourse() {
return tarifCourse;
}
/**
* Cr�e panel date tarif vigueur *
* @return
*/
private JPanel creeDateTarifVigueurPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(new java.awt.Color(170, 207, 249));
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labDtV = new JLabel(" Date tarif vigueur :");
labDtV.setFont(titreFont);
parameterPane.add(labDtV);
parameterPane.add(textdateVigueur);
return parameterPane;
}
/**
* Cr�e panel prise en charge
*
* @return
*/
private JPanel creePrixPriseChrgTarJrPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labTJr = new JLabel(" Prix prise en charge jour : *");
labTJr.setFont(titreFont);
parameterPane.add(labTJr);
parameterPane.add(txtPriseEnChrgTJr.ChampsTxt);
return parameterPane;
}
/**
* Cr�e panel prix tarif 1 *
* @return
*/
private JPanel creePrixTar1Pane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labT1 = new JLabel(" Prix km tarif 1 : *");
labT1.setFont(titreFont);
parameterPane.add(labT1);
parameterPane.add(txtTarif1.ChampsTxt);
return parameterPane;
}
/**
* Cr�e panel prix tarif 2
*
* @return
*/
private JPanel creePrixTar2Pane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labT1 = new JLabel(" Prix km tarif 2 : *");
labT1.setFont(titreFont);
parameterPane.add(labT1);
parameterPane.add(txtTarif2.ChampsTxt);
return parameterPane;
}
/**
* Cr�e panel heure attente *
* @return
*/
private JPanel creePrixHrAttentePane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(new java.awt.Color(170, 207, 249));
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labHrAtt = new JLabel(" Prix heure attente : *");
labHrAtt.setFont(titreFont);
parameterPane.add(labHrAtt);
parameterPane.add(txtPrixHrAtt.ChampsTxt);
return parameterPane;
}
/**
* Cr�e Panel supplement forfaitaire pour le suppl�ment nuit *
* @return
*/
private JPanel prixSupplementForfaitCpourseNuitPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labTNuit = new JLabel(" Suppl�ment forfait course nuit :");
labTNuit.setFont(titreFont);
parameterPane.add(labTNuit);
parameterPane.add(txtPrixSupplForfaitTNuit.ChampsTxt);
return parameterPane;
}
/**
*
* @return titre du formulaire
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText(" Fiche tarif course");
titres.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
titres.setForeground(new Color(255, 255, 255));
titre = new JPanel();
titre.setLayout(new GridBagLayout());
titre.setPreferredSize(new Dimension(50, 45));
titre.setBackground(new Color(66, 79, 120));
titre.add(titres, gridBagTitre);
}
return titre;
}
/**
* D�finit la fen�tre et ses composants
*/
public void affiche() {
JToolBar toolBar = new JToolBar("Outils...");
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(new Color(170, 207, 249));
parameterPane.setLayout(new FlowLayout());
parameterPane.setPreferredSize(new Dimension(600, 300));
//parameterPane.setBorder(BorderFactory.createTitledBorder(" "));
parameterPane.add(creeDateTarifVigueurPane());
parameterPane.add(creePrixTar1Pane());
parameterPane.add(creePrixTar2Pane());
parameterPane.add(creePrixPriseChrgTarJrPane() );
parameterPane.add(creePrixHrAttentePane());
parameterPane.add(prixSupplementForfaitCpourseNuitPane());
aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
aDialog.getContentPane().add(parameterPane, BorderLayout.CENTER);
aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_END);
toolBar.setBackground(new Color(66, 79, 120));
toolBar.add(FabricationButton("OK", CMD_OK, "OK...", this));
toolBar.add(FabricationButton("ANNULER", CMD_CANCEL, "Annuler...", this));
Point p = MainWindow.cadrePrincipal().getLocation();
aDialog.setLocation((p.x + 450), (p.y + 200));
aDialog.pack();
aDialog.setVisible(true);
}
/**
* Gestionnaire des �v�nements
*/
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
try {
// Restaure la couleur de fonds par d�faut.
for (JComponent composant : Arrays.asList(textdateVigueur, txtTarif1.ChampsTxt, txtTarif2.ChampsTxt, txtPriseEnChrgTJr.ChampsTxt,txtPrixHrAtt.ChampsTxt,txtPrixSupplForfaitTNuit.ChampsTxt )) {
composant.setBackground(Color.WHITE);
composant.setToolTipText("");
}
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
Date dateVigueur;
try {
dateVigueur = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textdateVigueur.getText());
tarifCourse.setDateVigueur(dateVigueur);
} catch (ParseException e1) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
}
Vector<ErreurDeValidation> erreursDeValidation = new Vector<ErreurDeValidation>();
BigDecimal tarif1 = null;
try {
tarif1 =new BigDecimal(txtTarif1.ChampsTxt.getText());
}
catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(txtTarif1.ChampsTxt, "le texte introduit pour le tarif 1 n'est pas un nombre d�cimal"));
}
BigDecimal tarif2 = null;
try {
tarif2 =new BigDecimal(txtTarif2.ChampsTxt.getText());
}
catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(txtTarif2.ChampsTxt, "le texte introduit pour le tarif 2 n'est pas un nombre d�cimal"));
}
BigDecimal priseEnCharge = null;
try {
priseEnCharge = new BigDecimal(txtPriseEnChrgTJr.ChampsTxt.getText());
}
catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(txtPriseEnChrgTJr.ChampsTxt, "le texte introduit pour la prise en charge n'est pas un nombre d�cimal"));
}
BigDecimal heureAttente = null;
try {
heureAttente = new BigDecimal(txtPrixHrAtt.ChampsTxt.getText());
}
catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(txtPrixHrAtt.ChampsTxt, "le texte introduit pour prix heure d'attente n'est pas un nombre d�cimal"));
}
BigDecimal supplementNuit = null;
try {
supplementNuit = new BigDecimal(txtPrixSupplForfaitTNuit.ChampsTxt.getText());
}
catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(txtPrixSupplForfaitTNuit.ChampsTxt, "le texte introduit pour supplement nuit n'est pas un nombre d�cimal"));
}
if (!erreursDeValidation.isEmpty()) {
StringBuffer erreurAffichee = new StringBuffer();
for (ErreurDeValidation erreurDeValidation : erreursDeValidation) {
erreurAffichee.append(erreurDeValidation.getMessageErreur());
erreurAffichee.append("\n");
erreurDeValidation.getComposant().setBackground(Color.RED);
erreurDeValidation.getComposant().setToolTipText(erreurDeValidation.getMessageErreur());
}
TaxiGuiUtil.MessageBox(MainWindow.desktop(), erreurAffichee.toString(), "ERREUR");
return;
}
tarifCourse.setPrixTarif1(Double.parseDouble(txtTarif1.ChampsTxt.getText()));
tarifCourse.setPrixTarif2(Double.parseDouble(txtTarif2.ChampsTxt.getText()));
tarifCourse.setPrixPriseCharge(Double.parseDouble(txtPriseEnChrgTJr.ChampsTxt.getText()));
tarifCourse.setPrixHeureAttente(Double.parseDouble(txtPrixHrAtt.ChampsTxt.getText()));
tarifCourse.setPrixForfaitNuit(Double.parseDouble(txtPrixSupplForfaitTNuit.ChampsTxt.getText()));
okFlag = true;
aDialog.setVisible(false);
}
else if (CMD_CANCEL.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
}
catch(Exception ex) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Erreur syst�me : " + ex.getMessage(), "Erreur syst�me");
}
}
}