Package gui.course.tournee

Source Code of gui.course.tournee.TourneeEditionCourse$GestionnaireEtape

package gui.course.tournee;

import static gui.MotsCleProjet.CMD_CANCEL;
import static gui.MotsCleProjet.CMD_DEBUT_TOURNEE;
import static gui.MotsCleProjet.CMD_FIN_TOURNEE;
import static gui.MotsCleProjet.CMD_OK;
import static gui.MotsCleProjet.CMD_PRECEDENT;
import static gui.MotsCleProjet.CMD_SUIVANT;
import static gui.MotsCleProjet.DATE_ERREUR_TEXTE;
import static gui.MotsCleProjet.IsDecimal;
import static gui.MotsCleProjet.IsLong;
import static gui.MotsCleProjet.IsNum;
import static gui.MotsCleProjet.IsNumString;
import static gui.util.TaxiGuiUtil.FabricationButton;
import static gui.util.TaxiGuiUtil.MessageBox;
import gui.DateCalendar;
import gui.JTextControlKey;
import gui.MainWindow;
import gui.MotsCleProjet;
import gui.chauffeur.gestionchauffeur.ChauffeurAffichable;
import gui.commun.ville.VilleAffichable;
import gui.util.ErreurDeValidation;
import gui.util.IRetourneDate;
import gui.util.TaxiGuiUtil;
import gui.voiture.gestionvoiture.VoitureAffichable;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
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.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;

import modele.chauffeur.Chauffeur;
import modele.chauffeur.IChauffeur;
import modele.chauffeur.ReferenceChauffeur;
import modele.chauffeur.Ville;
import modele.course.Tournee;
import modele.course.Trajet;
import modele.voiture.Voiture;
import util.BigDecimalFormatter;
import dao.GestionnaireDeStockage;
import dao.IDao;
import dao.IReadOnlyDao;
import dao.IVoitureDao;

/**
* TourneeEditionCourse : c'est la classe qui cr�e
* <p>les composants de l'interface utilisateur</p>
*
* @author Kasandra
*
*/
public class TourneeEditionCourse extends JFrame implements ActionListener {
 
 
  private static final long serialVersionUID = 1L;
  private static final String CARD_LAYOUT_NAME_DEBUT_TOURNEE = "DEBUT_TOURNEE";
  private static final String CARD_LAYOUT_NAME_TRAJET = "TRAJET";
  private static final String CARD_LAYOUT_NAME_FIN_TOURNEE = "FIN_TOURNEE";

  /**
   * Etape est la classe qui d�finit une �tape du cardLayout
   *
   * @author Kasandra
   *
   */
  private static class Etape {
    private String cardLayoutName;

    /**
     * <p>
     * Constructeur de la classe Etape  qui re�oit en param�tre un cardLayout </p>
     * @param cardLayoutName : nom de cardLayout.
     */
    public Etape(String cardLayoutName) {
      this.cardLayoutName = cardLayoutName;
    }

    /**
     * Retourne le nom de cardLayout
     * @return le nom de cardLayout sous forme des caract�res
     */
    public String getCardLayoutName() {
      return cardLayoutName;
    }
  }

  /**
   * GestionnaireEtape est une classe qui g�re les diff�rentes �tapes
   *
   * elle est caract�ris� par les informations suivantes :
   * un indexCourant qui pr�cise la position courante,
   * une �tape d�but de la tourn�e
   * une �tape fin de la tourn�e et
   * une liste d'�tapes o� on pourra ajouter
   * les �tapes (cardLayout).
   *
   * @see Etape
   * @author Kasandra
   * @version 1.0
   */
  private static class GestionnaireEtape {
   
    /**
     * cr�e un objet static de l'�tape d�but tourn�e
     * @see  Etape
     */
    private static Etape DEBUT_TOURNEE = new Etape(CARD_LAYOUT_NAME_DEBUT_TOURNEE);
    /**
     * cr�e un objet static de l'�tape fin tourn�e
     * @see  Etape
     */
    private static Etape FIN_TOURNEE = new Etape(CARD_LAYOUT_NAME_FIN_TOURNEE);
    /**
     * La liste des �tapes.
     * Il est possible d'ajouter les �tapes dans cette liste.
         * @see  Etape
     */
    private final ArrayList<Etape> �tapes;
   
    /**
     * un entier index courant
     */
    int indexCourant;

      /**
       * Constructeur GestionnaireEtape
       * � la construction d'un objet gestionnaireEtape
       * on cr�e la liste des �tapes � la quelle on ajoute une �tape d�but tourn�e, fin tourn�e et on positionne l'index � 0
       * @see Etape
       */
      public GestionnaireEtape() {
        �tapes = new ArrayList<Etape>();
        �tapes.add(DEBUT_TOURNEE);
        �tapes.add(FIN_TOURNEE);
        indexCourant = 0;
      }
     
      /**
       * initialise la tourn�e
       * ajoute les composants du cardLayout en fonction de nombre de trajets
       * se rapportant � la tourn�e
       * @param tournee
       *
       * @see Etape
       * @see Tournee
       */
      public void initialise(Tournee tournee) {
        for (int i = 0; i < tournee.getTrajets().size(); i++) {
          ajouteEtape(new Etape(CARD_LAYOUT_NAME_TRAJET));
        }
        indexCourant = 0;
      }
   
      /**
       * Retourne l'�tape courante
       *
       * @see Etape
       * @return �tape courante
       */
     
      public Etape courante() {
        return �tapes.get(indexCourant);
      }
   
      /**
       * retourne l'index courant
       * @return index courant
       */
      public int getIndexCourant() {
        return indexCourant;
      }
     
      /**
       * permet d'aller au premier index du cardLayout qui n'est autre que les informations
       * du d�but de la tourn�e
       */
      public void allerDebutTourn�e() {
        indexCourant = 0;
      }
   
      /**
       * retourne true si index courant est diff�rent de zero
       * @return true si indexCourant est diff�rent de 0
       */
      public boolean aUneEtapePr�c�dente() {
        return (indexCourant != 0);
      }
   
      /**
       * permet d'aller � une �tape pr�cedente.
       * decr�mentation de l'indexCourant
       */
      public void allerEtapePr�c�dente() {
        if (aUneEtapePr�c�dente()) {
          indexCourant--;
        }
      }
   
      /**
       * Retourne true si on a une �tape suivante
       * <p> Index courant est diff�rent de la taille de la liste - 1 </p>
       * @return true  si indexCourant est diff�rent de la taille de la liste - 1
       */
      public boolean aUneEtapeSuivante() {
        return indexCourant != (�tapes.size() - 1);
      }
   
      /**
       * <p> Permet d' aller � une �tape suivante</p>
       * <p> On incremente indexCourant s'il y a une �tape suivante </p>
       */
      public void allerEtapeSuivante() {
        if (aUneEtapeSuivante()) {
          indexCourant++;
        }
      }
   
      /**
       * <p> Permet d'aller � la fin de la tourn�e </p>
       * <p> Positionne l'index courant � la fin de la liste </p>
       */
      public void allerFinTourn�e() {
        indexCourant = �tapes.size() - 1;
      }
   
      /**
       * Ajoute une nouvelle �tape � la liste
       * @param nouvelleEtape
       * @see Etape
       */
      public void ajouteEtape(Etape nouvelleEtape) {
        �tapes.add(�tapes.size() - 1, nouvelleEtape);
        indexCourant = �tapes.size() - 2;
      }
  }

  /**
   *
   * @see GestionnaireEtape
   */
  GestionnaireEtape gestionnaireEtape = new GestionnaireEtape();

  JPanel panelCardLayout;
  // Chacun de ces panneaux constitueront les "cards".
  JPanel panelDebutTournee, panelTrajet, panelFinTournee;
 
  JPanel panelBouton;
  JButton btDebutTournee, btTrajet, btFinTournee;
  CardLayout cardLayout;

  JPanel paneDebutTourneeNord, paneDebutTourneeCentre, paneDebutTourneeSud;
  JPanel paneTrajetNord, paneTrajetCentre, paneTrajetSud;
  JPanel paneFinTourneeNord, paneFinTourneeCentre, paneFinTourneeSud;

  JButton boutonAnnulerFinTournee, boutonDebutTournee, boutonFinTourneeFin, boutonFinTourneeTrajet, boutonSuivantTrajet;

  private JLabel textDateDebutTournee;

  private JTextField textIndexKmBordDebut;
  private JTextField textIndexKmBordFin;
  private JTextField textTotKmBord;

  private JTextField textIndexKmTxmtDebut;
  private JTextField textIndexKmTxmtFin;
  private JTextField textTotIndexKmTxmt;

  private JTextField textNbPriseDebut;
  private JTextField textNbPriseFin;
  private JTextField textTotNbPrise;

  private JTextField textIndexKmChrgDebut;
  private JTextField textIndexKmChrgFin;
  private JTextField textTotIndexKmChrg;

  private JTextField textChuteDebut;
  private JTextField textChuteFin;
  private JTextField textTotChute;

  private JTextControlKey textTotRecetteJrnl, textTotRecetteTrnee;

  private JLabel titres, textDateFinTournee, textDur�eInterruptionTournee, labDateDebutTrnee, labDateFinTournee, labInterrup, labelIndexKmBordD�but, labIndexKmBordS, labIndexKmTxmtE, labIndexKmTxmtS, labNbPriseS, labNbPriseE, labTotNbPrise, labChuteE, labChuteS, labTotChute, labIndexKmChrgE, labIndexKmChrgS, labTotIndexKmChrg, labIndexKmTotE, labIndexKmTotS, labTotRecette;

  private JPanel titre, paneFinTournee;
  private JLabel labChauffeur, labVoiture;

  private JDialog aDialog;// R�f�rence � la boite de dialogue.

  static Font titreFont = new Font("Tahoma", 1, 12);

  /**
   * @see Tournee
   */
  Tournee tourn�e = new Tournee();
 
  /**
   * La liste des trajets.
     * @see Trajet
   */
  ArrayList<Trajet> trajets = new ArrayList<Trajet>();

  private Date dateDebutTournee = null;
  private Date dateFinTournee = null;
  private Date dateInterruptionTournee = null;

  private JComboBox cmbChauffeur, cmbVoiture;

  JButton boutonPrecedentTrajet;

  /**
   * Panel Trajet
   */

  private JTextControlKey textAdresseD�part;
  private JTextControlKey textKilom�trageD�part;
  private JTextControlKey textAdresseArriv�e;
  private JTextControlKey textKilom�trageArriv�e;

  private JTextField textPrixTrajet, textPrixSupl�mentaireTrajet;
  private JLabel textHeureFinTrajet, textHeureD�butTrajet;
  private JTextField txtTotKmTrajet, txtTotPrixTraj, txtTotHrTraj;
  private JPanel PaneTotaux = null;

  private JLabel labAdrDep, labAdrFin, labKmDep, labKmFin, labHrDep, labHrFin, labPrix, labSupPrix, labTotKmTrajet, labTotHrTrajet;

  private JLabel labTotPrix;

  protected boolean okFlag;
 
  private JLabel labTitreNouveauTrajet;

  public boolean OK_Button() {
    return okFlag;
  }

  /**
   * construit les informations du d�but de la tourn�e
   */
  private void infoDebutTournee() {
    textIndexKmBordDebut = new JTextField();
    textIndexKmTxmtDebut = new JTextField();
    textIndexKmChrgDebut = new JTextField();
    textNbPriseDebut = new JTextField();
    textChuteDebut = new JTextField();

    cmbChauffeur = new JComboBox(getListeChauffeur());
   
    cmbVoiture = new JComboBox(getListeVoiture());
    cmbVoiture.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        initializeKilom�trageD�butTourn�e((VoitureAffichable)e.getItem());
      }
    });
    initializeKilom�trageD�butTourn�e((VoitureAffichable)cmbVoiture.getSelectedItem());
   
    dateDebutTournee = null;
    textDateDebutTournee = TaxiGuiUtil.cr�eChampDate(MotsCleProjet.DATE_TIME_FORMAT, new IRetourneDate() {
      public void onDate(Date date) {
        dateDebutTournee = date;
      }
    }, DateCalendar.Mode.DATE_ET_HEURE);
  }

  /**
   * initialise le kilom�trage d�but tourn�e avec le dernier kilom�trage de la voiture
   * @param voitureAffichable
   */
  private void initializeKilom�trageD�butTourn�e(VoitureAffichable voitureAffichable) {
    textIndexKmBordDebut.setText(Long.toString(voitureAffichable.getVoiture().getKilometrage()));
   
  }

  /**
   * construit les informations de la fin de la tourn�e
   */
  private void infoFinTournee() {
    dateFinTournee = null;
    textDateFinTournee = TaxiGuiUtil.cr�eChampDate(MotsCleProjet.DATE_TIME_FORMAT, new IRetourneDate() {
     
      public void onDate(Date date) {
        if (date.after(new Date())) {
          MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
        } else {
          dateFinTournee = date;
          textDateFinTournee.setText(new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).format(date));
        }
      }
    }, DateCalendar.Mode.DATE_ET_HEURE);

       
    ImageIcon ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"))
    textDur�eInterruptionTournee= new JLabel();
    textDur�eInterruptionTournee.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
    textDur�eInterruptionTournee.setIcon(ani)
     
    textDur�eInterruptionTournee.addMouseListener(new MouseListener() {
      public void mouseClicked(MouseEvent e) {
        DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), DateCalendar.Mode.HEURE_SEULEMENT);
        fen.affiche();
        if (fen.okFlag) {
          Date date = fen.retourDate();
          textDur�eInterruptionTournee.setText(new SimpleDateFormat(gui.MotsCleProjet.TIME_FORMAT).format(date));
        } else {
          textDur�eInterruptionTournee.setText("");
        }
      }
      public void mouseEntered(MouseEvent e) {}
      public void mouseExited(MouseEvent e) {}
      public void mousePressed(MouseEvent e) {}
      public void mouseReleased(MouseEvent e) {}
    });
   
    textIndexKmBordFin = new JTextField();     
       
    textIndexKmTxmtFin = new JTextField();
    textIndexKmChrgFin = new JTextField();
    textNbPriseFin = new JTextField();
    textChuteFin = new JTextField();
    getTotalKmBord();
    getTotalKmTaxisMetre();   
    getTotalNombreDePrise();   
    getTotalKmEnCharge();
    getTotalChute();
    textTotRecetteJrnl = new   JTextControlKey("", 10, IsLong);
    textTotRecetteTrnee = new  JTextControlKey("", 10, IsLong);

  }
 
 
 
  /**
   *
   * @return kilom�trage d�but tourn�e
   */
  public String renvoiKmBordDebut() {
    return textIndexKmBordDebut.getText();
  }
 
  /**
   *
   * @return kilom�trage fin tourn�e
   */
  public String renvoiKmBordFin() {
    return textIndexKmBordFin.getText();
  }
 
  /**
   * calcule le toTal du kilom�trage de bord
   * @return total kilom�trage de bord parcouru
   */
  private JTextField getTotalKmBord() {
   
    if (textTotKmBord == null) {
      textTotKmBord = new JTextField();
      textTotKmBord.setFont(titreFont);
      textTotKmBord.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
     
      textTotKmBord.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

         
          Long kmBordDeb = 0L;
          Long kmBordFin= 0L;
          Long totalKmBordFin= 0L;
         
          kmBordDeb = Long.parseLong(renvoiKmBordDebut());
          kmBordFin = Long.valueOf(renvoiKmBordFin());
          totalKmBordFin = kmBordFin.longValue() - kmBordDeb;       

          textTotKmBord.setText("" +totalKmBordFin);
         

        }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
     
      textTotKmBord.setPreferredSize(new java.awt.Dimension(70, 20));
      textTotKmBord.setEditable(false);
    }
    return textTotKmBord;
  }
 
  /**
   * retourne kilom�trage taxim�tre d�but
   * @return textIndexKmTxmtDebut
   */
  public String renvoiKmTaximetreDebut() {
    return textIndexKmTxmtDebut.getText();
  }
 
  /**
   * Retourne kilom�trage taxim�tre fin tourn�e
   * @return textIndexKmTxmtFin
   */
  public String renvoiKmTaximetreFin() {
    return textIndexKmTxmtFin.getText();
  }
 
 
  /**
   * calcule le total du kilom�trage de taxim�tre parcouru
   * @return textTotIndexKmTxmt
   */
  private JTextField getTotalKmTaxisMetre() {
     
    if (textTotIndexKmTxmt == null) {
      textTotIndexKmTxmt = new JTextField();
      textTotIndexKmTxmt.setFont(titreFont);
      textTotIndexKmTxmt.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));

      textTotIndexKmTxmt.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

          Long kmTaximetreDeb = 0L;
          Long kmTaximetreFin= 0L;
          Long totalKmTaximetre= 0L;
         
          kmTaximetreDeb = Long.parseLong(renvoiKmTaximetreDebut());
          kmTaximetreFin = Long.valueOf(renvoiKmTaximetreFin());
          totalKmTaximetre = kmTaximetreFin.longValue() - kmTaximetreDeb;       

          textTotIndexKmTxmt.setText("" +totalKmTaximetre);

        }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
      textTotIndexKmTxmt.setPreferredSize(new java.awt.Dimension(70, 20));
      textTotIndexKmTxmt.setEditable(false);
    }
    return textTotIndexKmTxmt;
  }
 
 
  /**
   * retourne kilom�trage en charge d�but
   * @return textIndexKmChrgDebut
   */
  public String renvoiKmEnChargeDebut() {
    return textIndexKmChrgDebut.getText();
  }
 
  /**
   * retourne kilom�trage en charge fin
   * @return textIndexKmChrgFin
   */
  public String renvoiKmEnChargeFin() {
    return textIndexKmChrgFin.getText();
  }
 
 
  /**
   * retourne total kilom�trage en charge parcouru
   * @return textTotIndexKmChrg
   */
  private JTextField getTotalKmEnCharge() {
     
    if (textTotIndexKmChrg == null) {
      textTotIndexKmChrg = new JTextField();
      textTotIndexKmChrg.setFont(titreFont);
      textTotIndexKmChrg.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));

      textTotIndexKmChrg.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

          Long kmEnChargeDeb = 0L;
          Long kmEnChargeFin= 0L;
          Long totalKmEnCharge= 0L;
         
          kmEnChargeDeb = Long.valueOf(renvoiKmEnChargeDebut());
          kmEnChargeFin = Long.valueOf(renvoiKmEnChargeFin());
          totalKmEnCharge = kmEnChargeFin.longValue() - kmEnChargeDeb;       

          textTotIndexKmChrg.setText("" +totalKmEnCharge);

        }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
      textTotIndexKmChrg.setPreferredSize(new java.awt.Dimension(70, 20));
      textTotIndexKmChrg.setEditable(false);
    }
    return textTotIndexKmChrg;
  }
 

  /**
   * retourne nombre de prise d�but
   * @return textNbPriseDebut
   */
  public String renvoiNombreDePriseDebut() {
    return textNbPriseDebut.getText();
  }
 
  /**
   * retourne nombre de prise fin
   * @return textNbPriseFin
   */
  public String renvoiKmNombreDePriseFin() {
    return textNbPriseFin.getText();
  }
 

 
 
  /**
   * retourne  total nombre de prise
   * @return textTotNbPrise
   */
  private JTextField getTotalNombreDePrise() {
    Tournee tournee;
     
    if (textTotNbPrise == null) {
      textTotNbPrise = new JTextField();
      textTotNbPrise.setFont(titreFont);
      textTotNbPrise.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));

      textTotNbPrise.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

          int nombrePriseDebut = 0;
          int nombrePriseFin= 0;
          int totalNombrePrise= 0;
          nombrePriseDebut = Integer.parseInt(renvoiNombreDePriseDebut());
          nombrePriseFin = Integer.parseInt(renvoiKmNombreDePriseFin());
          totalNombrePrise = nombrePriseFin - nombrePriseDebut;       

          textTotNbPrise.setText("" +totalNombrePrise);

        }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
      textTotNbPrise.setPreferredSize(new java.awt.Dimension(70, 20));
      textTotNbPrise.setEditable(false);
    }
    return textTotNbPrise;
  }
 
  /**
   * Retourne chute d�but
   * @return textChuteDebut
   */
  public String renvoiChuteDebut() {
    return textChuteDebut.getText();
  }
  /**
   * Retourne chute fin
   * @return textChuteFin
   */
  public String renvoiChuteFin() {
    return textChuteFin.getText();
  }
 
 
  /**
   * Retourne total chute
   * @return textTotChute
   */
  private JTextField getTotalChute() {
     
    if (textTotChute == null) {
      textTotChute = new JTextField();
      textTotChute.setFont(titreFont);
      textTotChute.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));

      textTotChute.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

          BigDecimal chuteDebut = null;
          BigDecimal chuteFin= null;
          BigDecimal totalChute= null;
         
          chuteDebut = new BigDecimal(renvoiChuteDebut());
          chuteFin = new BigDecimal(renvoiChuteFin());
          totalChute = chuteFin.subtract(chuteDebut);       

          textTotChute.setText("" +totalChute);

        }
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
      textTotChute.setPreferredSize(new java.awt.Dimension(70, 20));
      textTotChute.setEditable(false);
    }
    return textTotChute;
  }
 

  /**
   * construit les informations du trajet
   */
  private void infoTrajet() {
    textAdresseD�part = new JTextControlKey("", 50, IsNumString);
    textKilom�trageD�part = new JTextControlKey("", 10, IsNum);

    textHeureD�butTrajet = TaxiGuiUtil.cr�eChampDate(MotsCleProjet.TIME_FORMAT, null, DateCalendar.Mode.HEURE_SEULEMENT);
   
    textAdresseArriv�e = new JTextControlKey("", 50, IsNumString);
    textKilom�trageArriv�e = new JTextControlKey("", 10, IsNum);
   
    textHeureFinTrajet = TaxiGuiUtil.cr�eChampDate(MotsCleProjet.TIME_FORMAT, null, DateCalendar.Mode.HEURE_SEULEMENT);
   
    getTextPrixTraj();
    getTxtPrixSuplTrajet();
    getTxtTotPrixTraj();
    getTxtTotKmTrajet();
  }

  /**
   * Constructeur de la classe TourneeEditionCourse
   */
  public TourneeEditionCourse() {
    aDialog = new JDialog(MainWindow.cadrePrincipal(), "  Tourn�e chauffeur...", true);

    infoDebutTournee();
    infoFinTournee();
    infoTrajet();
  }

  /**
   *
   * @return liste de la r�f�rence des chauffeurs
   */
  private Vector<ChauffeurAffichable<? extends IChauffeur>> getListeChauffeur() {
   
    Vector<ChauffeurAffichable<? extends IChauffeur>> chauffeurAffichables = new Vector<ChauffeurAffichable<? extends IChauffeur>>();
   
    ArrayList<ReferenceChauffeur> chauffeurs = getReferenceChauffeurDao().findAll();
   
   
    for (ReferenceChauffeur echauffeur : chauffeurs) {
      chauffeurAffichables.add(new ChauffeurAffichable<ReferenceChauffeur>(echauffeur));
    }
    return chauffeurAffichables;
  }

  /**
   * Cr�e l'instance de de la classe dao qui impl�mente les m�thodes de l'interface IReadOnlyDao
   * @return ReferenceChauffeur
   *
   */
  private IReadOnlyDao<ReferenceChauffeur> getReferenceChauffeurDao() {
    try {
      return GestionnaireDeStockage.getInstance().getReferenceChauffeurDao();
    } catch (ClassNotFoundException e) {
      throw new RuntimeException(e);
    } catch (InstantiationException e) {
      throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    }

  }
 
  /**
   * retourne la liste des voitures
   * @return la liste des voitures
   */

  private Vector<VoitureAffichable> getListeVoiture() {
   
    Vector<VoitureAffichable> voitureAffichables = new Vector<VoitureAffichable>();
     
    ArrayList<Voiture> voitures = getVoitureDao().findAllActif();//.findAll();
   
    for (Voiture evoiture : voitures) {
      voitureAffichables.add(new VoitureAffichable(evoiture));
    }
    return voitureAffichables;
  }

  /**
   * Cr�e l'instance de de la classe dao qui impl�mente les m�thodes de l'interface IDao<Voiture>
   * @return ReferenceChauffeur
   *
   */
  private IVoitureDao getVoitureDao() {
    try {
      return GestionnaireDeStockage.getInstance().getVoitureDao();
    } catch (ClassNotFoundException e) {
      throw new RuntimeException(e);
    } catch (InstantiationException e) {
      throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }

 
  /**
   * retourne la somme de deux entiers d�cimaux
   * @param a : entierDecimal1
   * @param b : entierDecimal2
   * @return somme
   */
  private BigDecimal calculeSomme(String a, String b) {
    BigDecimal somme;
    somme = new BigDecimal(a);
    somme = somme.add(new BigDecimal(b));
    return somme;
  }

  /**
   * retourne textField total kilom�trage trajet
   * @return txtTotKmTrajet
   */
  private JTextField getTxtTotKmTrajet() {
    if (txtTotKmTrajet == null) {
      txtTotKmTrajet = new JTextField();
      txtTotKmTrajet.setFont(titreFont);
      txtTotKmTrajet.setForeground(new java.awt.Color(66, 79, 120));
      txtTotKmTrajet.setPreferredSize(new java.awt.Dimension(70, 20));

      txtTotKmTrajet.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {
          Long nb = 0L;
          nb = calculeTotKmTrajet(textKilom�trageD�part.ChampsTxt.getText(), textKilom�trageArriv�e.ChampsTxt.getText());
          txtTotKmTrajet.setText("" + nb);
        }

        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });

      txtTotKmTrajet.setEditable(false);
    }
    return txtTotKmTrajet;
  }

  /**
   * Retourne texte heure trajet *
   *
   * @return txtTotHrTraj
   */
  private JTextField getTxtTotHrTrajet() {
    if (txtTotHrTraj == null) {
      txtTotHrTraj = new JTextField();
      txtTotHrTraj.setFont(titreFont);
      txtTotHrTraj.setForeground(new java.awt.Color(66, 79, 120));

      txtTotHrTraj.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {

          int TailleHrDeb = (textHeureD�butTrajet.toString().length());
          int TailleHrFin = (textHeureFinTrajet.toString().length());
          int ps = (textHeureD�butTrajet.toString().lastIndexOf(":"));

          Integer hrDeb = Integer.parseInt(textHeureD�butTrajet.toString().substring(0, 1));
          Integer mmDeb = Integer.parseInt(textHeureD�butTrajet.toString().substring(3, ps)) - 1;
          Integer ssDeb = Integer.parseInt(textHeureD�butTrajet.toString().substring(ps + 1), TailleHrDeb);

          Integer hrFin = Integer.parseInt(textHeureFinTrajet.toString().substring(0, 1));
          Integer mmFin = Integer.parseInt(textHeureFinTrajet.toString().substring(3, ps)) - 1;
          Integer ssFin = Integer.parseInt(textHeureFinTrajet.toString().substring(ps + 1), TailleHrFin);

          int hrTot = hrFin - hrDeb;
          int mmTot = mmFin - mmDeb;
          int ssTot = ssFin - ssDeb;

          txtTotHrTraj.setText("" + hrTot + mmTot + ssTot);

        }

        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });

      txtTotHrTraj.setPreferredSize(new java.awt.Dimension(70, 20));
    }
    return txtTotHrTraj;
  }

  /**
   * retourne total prix trajet
   *
   * @return txtTotPrixTraj
   */
  private JTextField getTxtTotPrixTraj() {

    if (txtTotPrixTraj == null) {
      txtTotPrixTraj = new JTextField();
      txtTotPrixTraj.setFont(titreFont);
      txtTotPrixTraj.setForeground(Color.blue);

      txtTotPrixTraj.addMouseListener(new MouseListener() {
        public void mouseClicked(MouseEvent e) {
          BigDecimal nb = calculeSomme(textPrixTrajet.getText(), textPrixSupl�mentaireTrajet.getText());
          txtTotPrixTraj.setText(nb.toString());
        }

        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
      });
      txtTotPrixTraj.setPreferredSize(new java.awt.Dimension(70, 20));
      txtTotPrixTraj.setEditable(false);
    }
    return txtTotPrixTraj;
  }

  /**
   * Calcule le total de kilom�trage du trajet
   * soustrait le kilom�trage fin trajet moins le kilom�trage d�but
   * @param a : kilom�trage d�but
   * @param b : kilom�trage fin
   *
   * @return
   */
  private Long calculeTotKmTrajet(String a, String b) {
    Long n1=0L, n2=0L, somme=0L;

    n1 = Long.parseLong(a);
    n2 = Long.parseLong(b);
    somme = n2 - n1;
    txtTotKmTrajet.setText("" + somme);

    return somme;
  }

  /**
   * Retourne textField prix trajet
   * @return txtPrixTrajet
   */
  private JTextField getTextPrixTraj() {
    if (textPrixTrajet == null) {
      textPrixTrajet = new JTextField();
      textPrixTrajet.setFont(titreFont);
      textPrixTrajet.setForeground(new java.awt.Color(66, 79, 120));
      textPrixTrajet.getText();
    }
    return textPrixTrajet;
  }

  /**
   * Retourne textField prix trajet
   * @return txtPrixTra
   */
   JTextField getTxtPrixSuplTrajet() {
    if (textPrixSupl�mentaireTrajet == null) {
      textPrixSupl�mentaireTrajet = new JTextField();
      textPrixSupl�mentaireTrajet.setFont(titreFont);
      textPrixSupl�mentaireTrajet.setForeground(new java.awt.Color(66, 79, 120));
      textPrixSupl�mentaireTrajet.getText();
    }
    return textPrixSupl�mentaireTrajet;
  }

   /**
    * Retourne le panel adresse de d�part
    * @return parameterPane
    *
    */
  private JPanel adrDepPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labAdrDep = new JLabel("     Adresse d�part trajet : *");
    labAdrDep.setFont(titreFont);
    labAdrDep.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labAdrDep);
    // parameterPane.add(new JLabel("Adresse d�part trajet:"));
    parameterPane.add(textAdresseD�part.ChampsTxt);

    return parameterPane;
  }

  /**
    * Retourne le panel kilom�trage de d�part
    * @return parameterPane
    *
    */

  private JPanel kmDepPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));
    labKmDep = new JLabel("     Km d�part trajet : *");
    labKmDep.setFont(titreFont);
    labKmDep.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labKmDep);
    // parameterPane.add(new JLabel("Km d�part trajet:"));
    parameterPane.add(textKilom�trageD�part.ChampsTxt);
    return parameterPane;
  }

  /**
    * Retourne le panel heure de d�part
    * @return parameterPane
    *
    */
  private JPanel hrDepPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labHrDep = new JLabel("     Heure d�part trajet : *");
    labHrDep.setFont(titreFont);
    labHrDep.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labHrDep);
    // parameterPane.add(new JLabel("Heure d�part trajet:"));
    // parameterPane.add(textHrDep.ChampsTxt);
    parameterPane.add(textHeureD�butTrajet);
    return parameterPane;
  }

  /**
    * Retourne le panel adresse fin
    * @return parameterPane
    *
    */
  private JPanel adrFinPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labAdrFin = new JLabel("     Adresse fin trajet :*");
    labAdrFin.setFont(titreFont);
    labAdrFin.setForeground(new java.awt.Color(66, 79, 120));
   
    parameterPane.add(labAdrFin);
    parameterPane.add(textAdresseArriv�e.ChampsTxt);
   
    return parameterPane;
  }

  /**
   * Panel km fin trajet
   *
   * @return
   */

  private JPanel kmFinPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labKmFin = new JLabel("     Km Fin trajet :*");
    labKmFin.setFont(titreFont);
    labKmFin.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labKmFin);
    parameterPane.add(textKilom�trageArriv�e.ChampsTxt);
    return parameterPane;
  }

  /**
   * retourne le panel heure fin trajet
   *
   * @return parameterPane
   */

  private JPanel hrFinPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labHrFin = new JLabel("     Heure fin trajet : *");
    labHrFin.setFont(titreFont);
    labHrFin.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labHrFin);

    parameterPane.add(textHeureFinTrajet);
    return parameterPane;
  }

  /**
   * retourne le panel prix course
   *
   * @return parameterPane
   */

  private JPanel prixCoursePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labPrix = new JLabel("     Prix trajet : *");
    labPrix.setFont(titreFont);
    labPrix.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labPrix);

    parameterPane.add(getTextPrixTraj());
    return parameterPane;
  }

  /**
   * retourne le panel suppl�ment course trajet
   *
   * @return parameterPane
   */

  private JPanel supplementCoursePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labSupPrix = new JLabel("     Suppl�ment prix trajet : *");
    labSupPrix.setFont(titreFont);
    labSupPrix.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(labSupPrix);
    parameterPane.add(getTxtPrixSuplTrajet());
    return parameterPane;
  }

  /**
   * on place les composants des trajets dans le panel centre
   *
   * @return parameterPane : le panel centre
   */
  private JPanel paneCentre() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(Color.WHITE);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setPreferredSize(new Dimension(800, 400));
    parameterPane.add(adrDepPane());
    parameterPane.add(kmDepPane());
    parameterPane.add(hrDepPane());
    parameterPane.add(adrFinPane());
    parameterPane.add(kmFinPane());
    parameterPane.add(hrFinPane());
    parameterPane.add(prixCoursePane());
    parameterPane.add(supplementCoursePane());

    return parameterPane;
  }

  /**
   * retourne le panel total kilom�tragem trajet
   * @return parameterPane: panel km trajet
   */

  private JPanel totalKmTrajetPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(200, 25));

    labTotKmTrajet = new JLabel("Total Km trajet :");
    labTotKmTrajet.setFont(titreFont);
    labTotKmTrajet.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotKmTrajet);
    parameterPane.add(getTxtTotKmTrajet());

    return parameterPane;
  }

  /**
   * retourne le panel totale heure trajet
   *
   * @return parameterPane : panel totale heure trajet
   */

  private JPanel totalHeureTrajetPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(200, 25));

    labTotHrTrajet = new JLabel("Totale heure trajet :");
    labTotHrTrajet.setFont(titreFont);
    labTotHrTrajet.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotHrTrajet);
    parameterPane.add(getTxtTotHrTrajet());

    return parameterPane;
  }

  /**
   * retourne le panel total prix trajet
   * @return
   */

  private JPanel totalPrixTrajetPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(200, 25));

    labTotPrix = new JLabel("Total prix course:");
    labTotPrix.setFont(titreFont);
    labTotPrix.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotPrix);
    parameterPane.add(getTxtTotPrixTraj());

    return parameterPane;
  }

  /**
   * retourne le panel totaux
   * @return
   */
  private JPanel getPanneauTotaux() {

    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setPreferredSize(new Dimension(800, 100));
    if (PaneTotaux == null) {

      PaneTotaux = new JPanel();
      PaneTotaux.setBackground(Color.white);
      PaneTotaux.add(totalKmTrajetPane(), null);
      PaneTotaux.add(totalHeureTrajetPane(), null);
      PaneTotaux.add(totalPrixTrajetPane(), null);

    }

    return PaneTotaux;
  }

  /**
   * retourne le panel chauffeur
   * @return parameterPane: panel chauffeur
   */
  private JPanel codeChauffeurPane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));
   

    labChauffeur = new JLabel("     Chauffeur : *");
    labChauffeur.setFont(titreFont);
    labChauffeur.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labChauffeur);
    parameterPane.add(cmbChauffeur);

    return parameterPane;
  }

  /**
   * retourne le panel voiture
   * @return parameterPane : panel voiture
   */
  private JPanel codeVoiturePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));
    labVoiture = new JLabel("     Voiture : *");
    labVoiture.setFont(titreFont);
    labVoiture.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labVoiture);
    parameterPane.add(cmbVoiture);

    return parameterPane;
  }

  /**
   * retourne panel date tourn�e
   * @return parameterPane : panel date d�but tourn�e
   */
  private JPanel dateDebutTrneePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));
    labDateDebutTrnee = new JLabel("     Date d�but service : *");
    labDateDebutTrnee.setFont(titreFont);
    labDateDebutTrnee.setForeground(new java.awt.Color(66, 79, 120));
   
    parameterPane.add(labDateDebutTrnee);
    textDateDebutTournee.setForeground(new java.awt.Color(66, 79, 120));
    parameterPane.add(textDateDebutTournee);

    return parameterPane;
  }

  /**
   * Retourne panel date fin service
   * @return parameterPane : panel  datefin service
   */
  private JPanel dateFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labDateFinTournee = new JLabel("     Date fin service : *");
    labDateFinTournee.setFont(titreFont);
    labDateFinTournee.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labDateFinTournee);
    parameterPane.add(textDateFinTournee);

    return parameterPane;
  }

  /**
   * Retourne panel date interruption service
   * @return parameterPane : panel heure interruption service
   */
  private JPanel dateInterruptionServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labInterrup = new JLabel("     dur�e interruption service : *");
    labInterrup.setFont(titreFont);
    labInterrup.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labInterrup);
    parameterPane.add(textDur�eInterruptionTournee);

    return parameterPane;
  }

  /**
   * Retourne panel index kilom�tratrage de bord d�but service
   * @return parameterPane : panel km bord d�but
   */
  private JPanel indexKmBordDebServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));;
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labelIndexKmBordD�but = new JLabel("     index km de bord d�but : *");
    labelIndexKmBordD�but.setFont(titreFont);
    labelIndexKmBordD�but.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labelIndexKmBordD�but);
    parameterPane.add(textIndexKmBordDebut);

    return parameterPane;
  }

  /**
   * Retourne panel index kilom�trage  de bord fin service
   * @return parameterPane : km de bord fin service
   */
  private JPanel indexKmBordFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labIndexKmBordS= new JLabel("     index km de bord fin : *");
    labIndexKmBordS.setFont(titreFont);
    labIndexKmBordS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmBordS);
    parameterPane.add(textIndexKmBordFin);

    return parameterPane;
  }
 

  /**
   * Retourne panel total kilom�trage de bord parcouru
   * @return parameterPane : total km bord
   */
  private JPanel totalKmBordServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labIndexKmTotE = new JLabel("     Total km bord :");
    labIndexKmTotE.setFont(titreFont);
    labIndexKmTotE.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmTotE);
    parameterPane.add(getTotalKmBord());
   
    return parameterPane;
  }

  /**
   * Retourne panel index kilom�trage taxim�tre d�but service
   * @return parameterPane : index km taxim�re d�but service
   */
  private JPanel indexKmTxmtDebServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labIndexKmTxmtE = new JLabel("     Index km taxim�tre d�but : *");
    labIndexKmTxmtE.setFont(titreFont);
    labIndexKmTxmtE.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmTxmtE);
    parameterPane.add(textIndexKmTxmtDebut);

    return parameterPane;
  }

  /**
   * Retourne panel index kilom�trage taxim�tre fin service
   * @return parameterPane : km taxim�re fin service
   */
  private JPanel indexKmTxmtFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labIndexKmTxmtS = new JLabel("     Index km taxim�tre fin : *");
    labIndexKmTxmtS.setFont(titreFont);
    labIndexKmTxmtS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmTxmtS);
    parameterPane.add(textIndexKmTxmtFin);

    return parameterPane;
  }

  /**
   * Retourne panel total kilom�trage taxim�tre
   * @return parameterPane : total km taxim�tre
   */
  private JPanel totalKmTxmtServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    // parameterPane.setBackground(Color.white);
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labIndexKmTotS = new JLabel("     Total km taxim�tre :");
    labIndexKmTotS.setFont(titreFont);
    labIndexKmTotS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmTotS);
    parameterPane.add(getTotalKmTaxisMetre());

    return parameterPane;
  }

  /**
   * Retourne panel kilom�trage en charge d�but service
   * @return km en charge d�but service
   */
  private JPanel kmChargeDebServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labIndexKmChrgE = new JLabel("     Km en Charge d�but : *");
    labIndexKmChrgE.setFont(titreFont);
    labIndexKmChrgE.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmChrgE);
    parameterPane.add(textIndexKmChrgDebut);

    return parameterPane;
  }

  /**
   * Retourne panel km en charge fin service
   * @return parameterPane : km en charge fin service
   */
  private JPanel kmChargeFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
   
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labIndexKmChrgS = new JLabel("     Km en charge fin : *");
    labIndexKmChrgS.setFont(titreFont);
    labIndexKmChrgS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labIndexKmChrgS);
    parameterPane.add(textIndexKmChrgFin);

    return parameterPane;
  }

  /**
   * Retourne panel total km en charge service
   * @return parameterPane : total km en charge
   */
  private JPanel totKmChargeServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
   
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labTotIndexKmChrg = new JLabel("     Total km en charge :");
    labTotIndexKmChrg.setFont(titreFont);
    labTotIndexKmChrg.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotIndexKmChrg);
    parameterPane.add(getTotalKmEnCharge());

    return parameterPane;
  }

  /**
   * Retourne panel nombre de prises d�but service
   * @return parameterPane : nombre de prises d�but service
   */
  private JPanel nombrePriseDebServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labNbPriseE = new JLabel("     Nombre de prises d�but : *");
    labNbPriseE.setFont(titreFont);
    labNbPriseE.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labNbPriseE);

    parameterPane.add(textNbPriseDebut);
    return parameterPane;
  }

  /**
   * Retourne panel nombre de prises fin service
   * @return parameterPane : nombre de prises fin service
   */
  private JPanel nombrePriseFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labNbPriseS = new JLabel("     Nombre de prises fin : *");
    labNbPriseS.setFont(titreFont);
    labNbPriseS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labNbPriseS);
    parameterPane.add(textNbPriseFin);

    return parameterPane;
  }

  /**
   * Retourne panel total nombre de prises service
   * @return parameterPane :  total nombre de prises
   */
  private JPanel totNombrePriseServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));   
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labTotNbPrise = new JLabel("     Total nombre de prises :");
    labTotNbPrise.setFont(titreFont);
    labTotNbPrise.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotNbPrise);
    parameterPane.add(getTotalNombreDePrise());

    return parameterPane;
  }

  /**
   * Retourne panel chute d�but service
   * @return parameterPane : chute d�but service
   */
  private JPanel chuteDebServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labChuteE = new JLabel("     Chute d�but : *");
    labChuteE.setFont(titreFont);
    labChuteE.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labChuteE);
    parameterPane.add(textChuteDebut);

    return parameterPane;
  }

  /**
   * Retourne panel chute fin service
   * @return parameterPane : chute fin service
   */
  private JPanel chuteFinServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(600, 30));

    labChuteS = new JLabel("     Chute fin : *");
    labChuteS.setFont(titreFont);
    labChuteS.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labChuteS);
    parameterPane.add(textChuteFin);

    return parameterPane;
  }

  /**
   * Retourne panel total chute service
   * @return parameterPane : total chute service
   */
  private JPanel totChuteServicePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
   
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labTotChute = new JLabel("     Total chute :");
    labTotChute.setFont(titreFont);
    labTotChute.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotChute);
    parameterPane.add(getTotalChute());

    return parameterPane;
  }

  /**
   * Retourne panel recette tourn�e
   * @return parameterPane : recette de la tourn�e
   */
  private JPanel recetteTrneePane() {
    JPanel parameterPane = new JPanel(false);
    parameterPane.setBackground(new java.awt.Color(170, 207, 249));
   
    parameterPane.setLayout(new GridLayout());
    parameterPane.setPreferredSize(new Dimension(300, 30));

    labTotRecette = new JLabel("     Recette tourn�e  : *");
    labTotRecette.setFont(titreFont);
    labTotRecette.setForeground(new java.awt.Color(66, 79, 120));

    parameterPane.add(labTotRecette);
    parameterPane.add(textTotRecetteJrnl.ChampsTxt);
   

    return parameterPane;
  }

  /**
   * Retourne panel titre de la fen�tre
   * @return titre
   */
  private JPanel getTitre() {
    if (titre == null) {
      GridBagConstraints gridBagTitre = new GridBagConstraints();
      gridBagTitre.gridx = 0;
      gridBagTitre.gridy = 0;
      titres = new JLabel();
      titres.setText("FEUILLE DE ROUTE ");
      titres.setFont(new java.awt.Font("Comic Sans MS", 1, 30));
      titres.setForeground(new java.awt.Color(255, 255, 255));
      titre = new JPanel();
      titre.setLayout(new GridBagLayout());
      titre.setPreferredSize(new Dimension(50, 45));
      titre.setBackground(new java.awt.Color(66, 79, 120));
      titre.add(titres, gridBagTitre);
    }
    return titre;
  }

  /**
   * Ajoute les composants de la fin de la tourn�e dans le panel fin tourn�e
   * @return paneFinTournee
   */
  private JPanel getPanelFinTournee() {

    paneFinTournee = new JPanel();
    paneFinTournee.setPreferredSize(new Dimension(800, 400));

    //paneFinTournee.setBorder(BorderFactory.createTitledBorder(" FIN TOURNEE CHAUFFEUR : "));
    paneFinTournee.setBackground(new java.awt.Color(170, 207, 249));
    paneFinTournee.add(dateFinServicePane());
    paneFinTournee.add(dateInterruptionServicePane());
    paneFinTournee.add(indexKmBordFinServicePane());
    paneFinTournee.add(indexKmTxmtFinServicePane());
    paneFinTournee.add(kmChargeFinServicePane());
    paneFinTournee.add(nombrePriseFinServicePane());
    paneFinTournee.add(chuteFinServicePane());

    paneFinTournee.add(totalKmBordServicePane());
    paneFinTournee.add(totalKmTxmtServicePane());
    paneFinTournee.add(totKmChargeServicePane());
    paneFinTournee.add(totNombrePriseServicePane());
    paneFinTournee.add(totChuteServicePane());
    paneFinTournee.add(recetteTrneePane());

    return paneFinTournee;
  }

  /**
   * D�finit la fen�tre et ses composants
   */
  public void affiche() {

    init();

  }
 
  /**
   * cr�e le panel qui contiendra les trois cardLayout
   */
  private void init() {
   
    JToolBar toolBar = new JToolBar("Outils...");

    panelCardLayout = new JPanel();
    panelCardLayout.setBackground(new java.awt.Color(170, 207, 249));
    panelCardLayout.setLayout(new FlowLayout());
    panelCardLayout.setPreferredSize(new Dimension(900, 550));
    // cr�e l'objet CardLayout
    cardLayout = new CardLayout();
    // associe le cardLayout au panel
    panelCardLayout.setLayout(cardLayout);

    JLabel labTitreDebutTournee = new JLabel("Nouvelle tourn�e");
    labTitreDebutTournee.setForeground(new java.awt.Color(66, 79, 120));
    labTitreDebutTournee.setFont(new java.awt.Font("Comic Sans MS", 1, 20));

    // cr�e les trois panel � montrer
   
    // 1. Panel nouvelle tourn�e   
    panelDebutTournee = new JPanel();
    panelDebutTournee.setPreferredSize(new Dimension(800, 400));
    panelDebutTournee.setBackground(new java.awt.Color(170, 207, 249));
    panelDebutTournee.add(codeChauffeurPane());
    panelDebutTournee.add(codeVoiturePane());
    panelDebutTournee.add(dateDebutTrneePane());
    panelDebutTournee.add(indexKmBordDebServicePane());
    panelDebutTournee.add(indexKmTxmtDebServicePane());
    panelDebutTournee.add(kmChargeDebServicePane());
    panelDebutTournee.add(nombrePriseDebServicePane());
    panelDebutTournee.add(chuteDebServicePane());

    paneDebutTourneeNord = new JPanel();
    paneDebutTourneeNord.setBackground(new java.awt.Color(255, 255, 255));
    paneDebutTourneeNord.add(labTitreDebutTournee);

    paneDebutTourneeCentre = new JPanel();
    paneDebutTourneeCentre.setBackground(new java.awt.Color(0, 128, 255));
    paneDebutTourneeCentre.add(panelDebutTournee);

    JPanel panelNouvelleTournee = new JPanel();
    panelNouvelleTournee.setBackground(new java.awt.Color(255, 255, 255));
   

    panelNouvelleTournee.add(paneDebutTourneeNord, BorderLayout.NORTH);
    panelNouvelleTournee.add(paneDebutTourneeCentre, BorderLayout.CENTER);

    // 2. Panel trajets
    labTitreNouveauTrajet = new JLabel("Nouveau trajet");
    labTitreNouveauTrajet.setBackground(new java.awt.Color(255, 255, 255));
    labTitreNouveauTrajet.setForeground(new java.awt.Color(66, 79, 120));
    labTitreNouveauTrajet.setFont(new java.awt.Font("Comic Sans MS", 1, 20));

   
    panelTrajet = new JPanel();
    panelTrajet.setBackground(new java.awt.Color(0, 64, 128));
    panelTrajet.add(paneCentre());

    paneTrajetNord = new JPanel();
    paneTrajetNord.setBackground(new java.awt.Color(255, 255, 255));
    paneTrajetNord.add(labTitreNouveauTrajet);

    paneTrajetCentre = new JPanel();
    paneTrajetCentre.add(panelTrajet);

    JPanel panelNouveauTrajet = new JPanel();
    panelNouveauTrajet.setBackground(new java.awt.Color(255, 255, 255));
    panelNouveauTrajet.add(paneTrajetNord, BorderLayout.NORTH);
    panelNouveauTrajet.add(paneTrajetCentre, BorderLayout.CENTER);
   
    // 3. Panel fin tourn�e
    JLabel labTitreFinTournee = new JLabel("Fin tourn�e");
    labTitreFinTournee.setForeground(new java.awt.Color(66, 79, 120));
    labTitreFinTournee.setFont(new java.awt.Font("Comic Sans MS", 1, 20));

    paneFinTourneeNord = new JPanel();
    paneFinTourneeNord.setBackground(new java.awt.Color(255, 255, 255));
    paneFinTourneeNord.add(labTitreFinTournee);

    panelFinTournee = new JPanel();
    panelFinTournee.setBackground(new java.awt.Color(255, 128, 64));
    panelFinTournee.add(getPanelFinTournee());

    paneFinTourneeCentre = new JPanel();
    paneFinTourneeCentre.add(panelFinTournee);

    JPanel panelFinTournee = new JPanel();
    panelFinTournee.setBackground(new java.awt.Color(255, 255, 255));
    panelFinTournee.add(paneFinTourneeNord, BorderLayout.NORTH);
    panelFinTournee.add(paneFinTourneeCentre, BorderLayout.CENTER);
   
    //panelCardLayout.setBorder(BorderFactory.createTitledBorder(" Infos courses "));

    panelCardLayout.add(panelNouvelleTournee, CARD_LAYOUT_NAME_DEBUT_TOURNEE); // blue
    panelCardLayout.add(panelNouveauTrajet, CARD_LAYOUT_NAME_TRAJET); // yellow
    panelCardLayout.add(panelFinTournee, CARD_LAYOUT_NAME_FIN_TOURNEE); // green

    toolBar.setBackground(new Color(66, 79, 120));
 
   
    // 4. Boutons   
   
    toolBar.add(FabricationButton("D�but tourn�e", CMD_DEBUT_TOURNEE, "D�but tourn�e...", this));   
    toolBar.add(FabricationButton("Pr�cedent", CMD_PRECEDENT, "Pr�cedent...", this));
    toolBar.add(FabricationButton("Suivant", CMD_SUIVANT, "Suivant...", this));
    toolBar.add(FabricationButton("Fin tourn�e", CMD_FIN_TOURNEE, "Fin tourn�e...", this));
    toolBar.add(FabricationButton("Enregistrer", CMD_OK, "OK...", this));
    toolBar.add(FabricationButton("ANNULER", CMD_CANCEL, "Annuler...", this));

    aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
    aDialog.getContentPane().add(panelCardLayout, BorderLayout.CENTER);
    aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_END);

    Point p = MainWindow.cadrePrincipal().getLocation();
    aDialog.setLocation((p.x + 250), (p.y +80));
   

    aDialog.pack();
    aDialog.setVisible(true);
    aDialog.setSize(900, 700);

  }

  /**
   * Affiche les diff�rentes �tapes
   */
  private void afficheEtape() {
   
    Etape �tapeCourante = gestionnaireEtape.courante();
   
    cardLayout.show(panelCardLayout, �tapeCourante.getCardLayoutName());
   
    if (�tapeCourante.getCardLayoutName().equals(CARD_LAYOUT_NAME_TRAJET)) {
      int indexCourant = gestionnaireEtape.getIndexCourant();
      afficheTrajet(trajets.get(indexCourant - 1));
      labTitreNouveauTrajet.setText("Nouveau trajet (" + indexCourant + ")");
    }
  }

  /**
   * Gestionnaire des �v�nements
   */
  public void actionPerformed(ActionEvent event) {
    try {
     
      resetErreurDeValidation();

      String cmd = event.getActionCommand();
     
      Etape �tapeCourante = gestionnaireEtape.courante();
     
      if (CMD_FIN_TOURNEE.equals(cmd)) {
        if (validate(�tapeCourante)) {
          stockeEtapeEnM�moire();
          gestionnaireEtape.allerFinTourn�e();
          afficheEtape();
        }

      } else if (CMD_DEBUT_TOURNEE.equals(cmd)) {
        if (validate(�tapeCourante)) {
          stockeEtapeEnM�moire();
          gestionnaireEtape.allerDebutTourn�e();
          afficheEtape();
        }

      } else if (CMD_PRECEDENT.equals(cmd)) {
        if (validate(�tapeCourante)) {
          stockeEtapeEnM�moire();
          if (gestionnaireEtape.aUneEtapePr�c�dente()) {
            gestionnaireEtape.allerEtapePr�c�dente();
            afficheEtape();
          }
        }
      } else if (CMD_SUIVANT.equals(cmd)) {
        if (validate(�tapeCourante)) {
          stockeEtapeEnM�moire();
          if (gestionnaireEtape.aUneEtapeSuivante()) {
            gestionnaireEtape.allerEtapeSuivante();
            if (gestionnaireEtape.courante().equals(GestionnaireEtape.FIN_TOURNEE)) {
              trajets.add(new Trajet());
              gestionnaireEtape.ajouteEtape(new Etape(CARD_LAYOUT_NAME_TRAJET));
              afficheEtape();
            } else {
              afficheEtape();
            }
          }
        }
      } else if (CMD_OK.equals(cmd)) {
        if (validate(�tapeCourante)) {
          stockeEtapeEnM�moire();
          // ...
          okFlag = true;
          aDialog.setVisible(false);
        }

      } else if (CMD_CANCEL.equals(cmd)) {

        okFlag = false;
        aDialog.setVisible(false);
      }
    } catch (Exception e) {
      TaxiGuiUtil.MessageBox(MainWindow.desktop(), e.getMessage());
    }
  }
 

  /**
   * <p>Stocke les diff�rentes �tapes en m�moire</p>
   * <ul>
   *   <li> Information d�but tourn�e</li>
   *   <li> Information fin tourn�e</li>
   *   <li> Information trajets</li>
   * </ul
   *
   */
  private void stockeEtapeEnM�moire() {
   
    Etape �tapeCourante = gestionnaireEtape.courante();
   
    if (�tapeCourante == GestionnaireEtape.DEBUT_TOURNEE) {
      // Stocke les informations du d�but de la tourn�e
      tourn�e.setChauffeur(((ChauffeurAffichable<ReferenceChauffeur>)cmbChauffeur.getSelectedItem()).getChauffeur());
      tourn�e.setVoiture(((VoitureAffichable)cmbVoiture.getSelectedItem()).getVoiture());
     
      try {
        tourn�e.setDateDebutService(new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).parse(textDateDebutTournee.getText()));
      } catch (ParseException e) {
        throw new RuntimeException(e);
      }
      tourn�e.setKilometrageVoitureDebutTournee(Long.parseLong(textIndexKmBordDebut.getText()));
      tourn�e.setKmTaximetreDebut(Long.parseLong(textIndexKmTxmtDebut.getText()));
      tourn�e.setKmEnChargeDebut(Long.parseLong(textIndexKmChrgDebut.getText()));
      tourn�e.setNombrePriseDebut(Integer.parseInt(textNbPriseDebut.getText()));
      tourn�e.setChuteDebut(new BigDecimal(textChuteDebut.getText()));
    } else if (�tapeCourante == GestionnaireEtape.FIN_TOURNEE) {
      // Stocke les informations de la fin de la tourn�e           
      try {
        tourn�e.setDateFinService(new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).parse(textDateFinTournee.getText()));
      } catch (ParseException e) {
        throw new RuntimeException(e);
      }
     
      try {
        tourn�e.setDateInterruptionService(new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textDur�eInterruptionTournee.getText()));
      } catch (ParseException e) {
        throw new RuntimeException(e);
      }
      tourn�e.setKilometrageVoitureFinTournee(Long.parseLong(textIndexKmBordFin.getText()));
      tourn�e.setKmTaximetreFin(Long.parseLong(textIndexKmTxmtFin.getText()));
      tourn�e.setKmEnChargeFin(Long.parseLong(textIndexKmChrgFin.getText()));
      tourn�e.setNombrePriseFin(Integer.parseInt(textNbPriseFin.getText()));
      tourn�e.setChuteFin(new BigDecimal(textChuteFin.getText()));
      tourn�e.setRecetteJournali�re(new BigDecimal(textTotRecetteJrnl.ChampsTxt.getText()));
    } else {
     
      // Stocke les informations des trajets
      Trajet trajet = trajets.get(gestionnaireEtape.getIndexCourant() - 1);
      trajet.setAddresseDepart(textAdresseD�part.ChampsTxt.getText());
      trajet.setKilometrageTaximetreDepart(Long.parseLong(textKilom�trageD�part.ChampsTxt.getText()));
      trajet.setAddresseArrivee(textAdresseArriv�e.ChampsTxt.getText());
      try {
        trajet.setHeureDepart(new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textHeureD�butTrajet.getText()));
        trajet.setHeureArrivee(new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textHeureFinTrajet.getText()));
      } catch (ParseException e) {
        throw new RuntimeException(e);
      }
      trajet.setKilometrageTaximetreArrivee(Long.parseLong(textKilom�trageArriv�e.ChampsTxt.getText()));
      trajet.setPrixCourse(new BigDecimal(textPrixTrajet.getText()));
      trajet.setPrixSupplementaire(new BigDecimal(textPrixSupl�mentaireTrajet.getText()));
     
      trajet.setTournee(tourn�e);
    }

  }

  /**
   * <p> si la  chaine source est diff�rent de null, il retourne la chaine source </p>
   * <p> sinon il retourne la chaine vide
   *
   * @param source
   * @return chaine source ou chaine vide
   */
  private String chaineVideSiNull(String source) {
    return (source != null ? source : "");
  }

  /**
   * <p>si l'entier d�cimal est vide, il retourne  la chaine "0.0"</p>
   * <p> sinon il retourne la chaine d�cimale
   *
   * @param bigDecimal
   * @return bidDecimal ou 0.0
   */
  private String bigDecimalVideSiNull(BigDecimal bigDecimal) {
    if (bigDecimal == null) {
      return "0.0";
    } else {
      return bigDecimal.toString();
    }
  }

  /**
   * affiche le trajet
   * @param trajet
   */
  private void afficheTrajet(Trajet trajet) {
    textAdresseD�part.ChampsTxt.setText(chaineVideSiNull(trajet.getAddresseDepart()));
    textKilom�trageD�part.ChampsTxt.setText(Long.toString(trajet.getKilometrageTaximetreDebut()));
    textHeureD�butTrajet.setText(trajet.getHeureDepart() == null ? "" : new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).format(trajet.getHeureDepart()));
    textAdresseArriv�e.ChampsTxt.setText(chaineVideSiNull(trajet.getAddresseArrivee()));
    textKilom�trageArriv�e.ChampsTxt.setText(Long.toString(trajet.getKilometrageTaximetreFin()));
    textHeureFinTrajet.setText(trajet.getHeureArrivee() == null ? "" : new SimpleDateFormat( MotsCleProjet.TIME_FORMAT).format(trajet.getHeureArrivee()));
    textPrixTrajet.setText(bigDecimalVideSiNull(trajet.getPrixCourse()));
    textPrixSupl�mentaireTrajet.setText(bigDecimalVideSiNull(trajet.getPrixSupplementaire()));
  }

  /**
   * remet � blanc les champs
   *
   */
  private void resetErreurDeValidation() {
   
    for (JComponent composant : Arrays.<JComponent> asList(
        textAdresseD�part.ChampsTxt,
        textKilom�trageD�part.ChampsTxt,
        textHeureD�butTrajet,
        textAdresseArriv�e.ChampsTxt,
        textKilom�trageArriv�e.ChampsTxt,
        textHeureFinTrajet,
        textPrixTrajet,
        textPrixSupl�mentaireTrajet,
        cmbChauffeur,
        cmbVoiture,
        textDateDebutTournee,
        textIndexKmBordDebut,
        textIndexKmTxmtDebut,
        textIndexKmChrgDebut,
        textNbPriseDebut,
        textChuteDebut,
        textDateFinTournee,
        textDur�eInterruptionTournee,
        textIndexKmBordFin,
        textIndexKmTxmtFin,
        textIndexKmChrgFin,
        textNbPriseFin,
        textChuteFin
        )) {
      composant.setBackground(Color.WHITE);
      composant.setToolTipText("");
    }
  }

  /**
   * <p>Valide l'�tape courante</p>
   * <p> il peut s'agir de soit de l'�tape d�but tourn�e, trajets ou fin de tourn�e
   * 
   * @param �tape
   * @return
   */
  private boolean validate(Etape �tape) {
   
    Collection<ErreurDeValidation> erreursDeValidation = new ArrayList<ErreurDeValidation>();
   
    if (�tape.getCardLayoutName().equals(CARD_LAYOUT_NAME_DEBUT_TOURNEE)) {
     
      erreursDeValidation.addAll(validateDebutTourn�e());
    } else if (�tape.getCardLayoutName().equals(CARD_LAYOUT_NAME_FIN_TOURNEE)) {
      erreursDeValidation.addAll(validateFinTourn�e());
    } else {
      erreursDeValidation.addAll(validateTrajet());
    }
    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 false;
    }
    return true;

  }

  /**
   * <p> Valide les champs du trajet effectu�
   * @return la liste des erreurs de validation
   */
  private Collection<ErreurDeValidation> validateTrajet() {
    Collection<ErreurDeValidation> erreurDeValidations = new ArrayList<ErreurDeValidation>();
   
   
    if (textAdresseD�part.ChampsTxt.getText().trim().equals("")) {
      erreurDeValidations.add(new ErreurDeValidation(textAdresseD�part.ChampsTxt, "le champ 'addresse d�part' est vide"));
    }
    try {
      Long.parseLong(textKilom�trageD�part.ChampsTxt.getText().trim());
    } catch (NumberFormatException e) {
      erreurDeValidations.add(new ErreurDeValidation(textKilom�trageD�part.ChampsTxt, "le champ 'kilom�trage d�part' doit �tre un num�rique'"));
    }
   
    if (textAdresseArriv�e.ChampsTxt.getText().trim().equals("")) {
      erreurDeValidations.add(new ErreurDeValidation(textAdresseArriv�e.ChampsTxt, "le champ 'addresse arriv�e' est vide"));
    }
    Long kmFinTrajet= Long.parseLong(textKilom�trageArriv�e.ChampsTxt.getText());
    Long kmDepTrajet = Long.parseLong(textKilom�trageD�part.ChampsTxt.getText());
    Long kmBordDeb = Long.parseLong(textIndexKmBordDebut.getText());
    if ( kmDepTrajet > kmFinTrajet){
      erreurDeValidations.add(new ErreurDeValidation(textKilom�trageArriv�e.ChampsTxt, "le champ 'kilom�trage arriv�e' doit sup�rieur au km d�but'"));
     
    }
   
    if ( kmDepTrajet < kmBordDeb){
      erreurDeValidations.add(new ErreurDeValidation(textKilom�trageD�part.ChampsTxt, "le champ 'kilom�trage d�part trajet ' doit > = au km de bord d�but'"));
     
    }
   
    try {
      Long.parseLong(textKilom�trageArriv�e.ChampsTxt.getText().trim());
    } catch (NumberFormatException e) {
      erreurDeValidations.add(new ErreurDeValidation(textKilom�trageArriv�e.ChampsTxt, "le champ 'kilom�trage arriv�e' doit �tre un num�rique'"));
    }
   
    Date heureFinTrajet=null;
 
      try {
        heureFinTrajet =new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textHeureFinTrajet.getText());
      } catch (ParseException e1) {
        e1.printStackTrace();
        erreurDeValidations.add(new ErreurDeValidation(textHeureD�butTrajet, "Date/Heure de d�but du trajet' invalide"));
      }

      Date heureDebutTraj=null;
      try {
        heureDebutTraj =new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textHeureD�butTrajet.getText());
      } catch (ParseException e1) {
        e1.printStackTrace();
        erreurDeValidations.add(new ErreurDeValidation(textHeureFinTrajet, "Date/Heure de fin du trajet' invalide"));
      }
   
   
    if (heureDebutTraj.after(heureFinTrajet)){
      erreurDeValidations.add(new ErreurDeValidation(textHeureFinTrajet, "Date/Heure de fin du trajet' doit �tre apr�s date/heure d�but"));
     
    }
    if (textPrixTrajet.getText().trim().equals("")) {
      erreurDeValidations.add(new ErreurDeValidation(textPrixTrajet, "le champ 'prix du trajet' est obligatoire."));
    }
    try {
      new BigDecimal(textPrixTrajet.getText());
    } catch (NumberFormatException e) {
      erreurDeValidations.add(new ErreurDeValidation(textPrixTrajet, "le champ 'prix du trajet' ne contient pas un nombre valide."));
    }
    if (!textPrixSupl�mentaireTrajet.getText().trim().equals("")) {
      try {
        new BigDecimal(textPrixSupl�mentaireTrajet.getText());
      } catch (NumberFormatException e) {
        erreurDeValidations.add(new ErreurDeValidation(textPrixSupl�mentaireTrajet, "le champ 'prix suppl�mentaire' ne contient pas un nombre valide."));
      }
    }

    return erreurDeValidations;
  }

 
  /**
   * <p> Valide les champs de la fin de la tourn�e
   * @return la liste des erreurs de validation
   */
  private Collection<ErreurDeValidation> validateFinTourn�e() {
   
    //return new ArrayList<ErreurDeValidation>();
    Collection<ErreurDeValidation> erreursDeValidation = new ArrayList<ErreurDeValidation>();
   
    try {
      new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).parse(textDateFinTournee.getText());
    } catch (ParseException e) {
      erreursDeValidation.add(new ErreurDeValidation(textDateFinTournee, "la date de fin de tourn�e est invalide"));
    }
   
    try {
      new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).parse(textDur�eInterruptionTournee.getText());
    } catch (ParseException e) {
      erreursDeValidation.add(new ErreurDeValidation(textDur�eInterruptionTournee, "la dur�e interruption de tourn�e est invalide"));
    }
   
    if (textIndexKmBordFin.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmBordFin, "le kilom�trage tableau de bord de fin de tourn�e est obligatoire"));
    }
    try {
      Long.parseLong(textIndexKmBordFin.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmBordDebut, "le kilom�trage tableau de bord de fin de tourn�e n'est pas un nombre"));
    }
   
    Long kmBordDeb = Long.parseLong(textIndexKmBordDebut.getText());
    Long kmBordFin = Long.parseLong(textIndexKmBordFin.getText());
    if (kmBordFin.longValue() < kmBordDeb ) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmBordFin, "km de bord fin doit �tre sup�rieur ou �gal au  Km bord d�but "));
    }

    if (textIndexKmTxmtFin.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtFin, "le kilom�trage taxim�tre de fin de tourn�e est obligatoire"));
    }
    try {
      Long.parseLong(textIndexKmTxmtFin.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtFin, "le kilom�trage taxim�tre de fin de tourn�e n'est pas un nombre"));
    }
    Long kmTaxiMtDeb = Long.parseLong(textIndexKmTxmtDebut.getText());
    Long kmTaxiMtFin = Long.parseLong(textIndexKmTxmtFin.getText());
    if ((kmTaxiMtFin.longValue() < kmBordDeb) && (kmTaxiMtFin.longValue() < kmTaxiMtDeb)) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtFin, "km taxim�tre fin doit �tre >= au  Km bord d�but et doit �tre >= km taxim�tre d�but "));
    }

    if (textIndexKmChrgFin.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgFin, "le kilom�trage en charge de fin de tourn�e est obligatoire"));
    }
    try {
      Long.parseLong(textIndexKmChrgFin.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgFin, "le kilom�trage en charge de fin de tourn�e n'est pas un nombre"));
    }
   
    Long kmChargeDeb = Long.parseLong(textIndexKmChrgDebut.getText());
    Long kmChargeFin = Long.parseLong(textIndexKmChrgFin.getText());
    if (kmChargeFin.longValue() > kmTaxiMtFin){
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgFin, "km en charge fin doit �tre < = km taxim�tre fin "));
    }

    if (kmChargeFin.longValue() < kmChargeDeb)  {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgFin, "km en charge fin doit �tre >= au  Km en charge d�but "));
    }
   
    if (textNbPriseFin.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textNbPriseFin, "Le nombre de prise en charge de Fin de tourn�e est obligatoire"));
    }
    try {
      Integer.parseInt(textNbPriseFin.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textNbPriseFin, "Le nombre de prise en charge de Fin de tourn�e n'est pas un nombre"));
    }
   
    Integer nbrePriseDeb = Integer.parseInt(textNbPriseDebut.getText());
    Integer nbrePriseFin = Integer.parseInt(textNbPriseFin.getText());
    if (nbrePriseFin.intValue() < nbrePriseDeb) {
      erreursDeValidation.add(new ErreurDeValidation(textNbPriseFin, "Le nombre de prise fin doit �tre >= au nombre de prise d�but "));
    }

    if (textChuteFin.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textChuteFin, "L'index de chute de bord de Fin de tourn�e est obligatoire"));
    }

    try {
      BigDecimal chuteFin = new BigDecimal(textChuteFin.getText());
      if (chuteFin.compareTo(tourn�e.getChuteDebut()) < 0 ) {
        erreursDeValidation.add(new ErreurDeValidation(textChuteFin, "La chute de fin doit �tre sup�rieure � la chute de d�but"));
      }
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textChuteFin, "L'index de chute de Fin de tourn�e n'est pas un nombre"));
    }
   
    return erreursDeValidation;
  }

  /**
   * Valide les champs du d�but de la tourn�e
   * @return la liste des erreurs de validation
   */
  private Collection<ErreurDeValidation> validateDebutTourn�e() {
   
    Collection<ErreurDeValidation> erreursDeValidation = new ArrayList<ErreurDeValidation>();
   
    if (cmbChauffeur.getSelectedIndex() == -1) {
      erreursDeValidation.add(new ErreurDeValidation(cmbChauffeur, "le chauffeur est obligatoire"));
    }
   
    if (cmbVoiture.getSelectedIndex() == -1) {
      erreursDeValidation.add(new ErreurDeValidation(cmbVoiture, "la voiture est obligatoire"));
    }
   
    try {
      new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).parse(textDateDebutTournee.getText());
    } catch (ParseException e) {
      erreursDeValidation.add(new ErreurDeValidation(textDateDebutTournee, "la date de d�but de tourn�e est invalide"));
    }
   
    if (textIndexKmBordDebut.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textDateDebutTournee, "le kilom�trage tableau de bord de d�but de tourn�e est obligatoire"));
    }   
    try {
      Long.parseLong(textIndexKmBordDebut.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmBordDebut, "le kilom�trage tableau de bord de d�but de tourn�e n'est pas un nombre"));
    }

    if (textIndexKmTxmtDebut.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtDebut, "le kilom�trage taxim�tre de d�but de tourn�e est obligatoire"));
    }   
    try {
      Long.parseLong(textIndexKmTxmtDebut.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtDebut, "le kilom�trage taxim�tre de d�but de tourn�e n'est pas un nombre"));
   
   
    Long kmBord = Long.parseLong(textIndexKmBordDebut.getText());
    Long kmTaxiMtDeb = Long.parseLong(textIndexKmTxmtDebut.getText());
    if (kmTaxiMtDeb.longValue() > kmBord ) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmTxmtDebut, "km taxim�tre de d�but doit �tre inf�rieur ou �gal au  Km bord d�but "));
    }

    if (textIndexKmChrgDebut.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgDebut, "le kilom�trage en charge de d�but de tourn�e est obligatoire"));
    }
    try {
      Long.parseLong(textIndexKmChrgDebut.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgDebut, "le kilom�trage en charge de d�but de tourn�e n'est pas un nombre"));
    }
   
    Long kmCharge = Long.parseLong(textIndexKmChrgDebut.getText());
    if (kmCharge.longValue() > kmBord) {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgDebut, "km charge d�but doit �tre inf�rieur ou �gal au  Km bord d�but "));
    }
   
    if (kmCharge.longValue() > kmTaxiMtDeb)  {
      erreursDeValidation.add(new ErreurDeValidation(textIndexKmChrgDebut, "km charge d�but doit �tre < = km taxim�tre d�but"));
    }

    if (textNbPriseDebut.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textNbPriseDebut, "Le nombre de prise en charge de d�but de tourn�e est obligatoire"));
    }
    try {
      Integer.parseInt(textNbPriseDebut.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textNbPriseDebut, "Le nombre de prise en charge de d�but de tourn�e n'est pas un nombre"));
    }

    if (textChuteDebut.getText().trim().equals("")) {
      erreursDeValidation.add(new ErreurDeValidation(textChuteDebut, "L'index de chute de bord de d�but de tourn�e est obligatoire"));
    }
    try {
      new BigDecimal(textChuteDebut.getText());
    } catch (NumberFormatException e) {
      erreursDeValidation.add(new ErreurDeValidation(textChuteDebut, "L'index de chute de d�but de tourn�e n'est pas un nombre"));
    }
    return erreursDeValidation;
  }
 
  public Tournee renvoiTournee() {
    return tourn�e;
  }
 
  /**
   * <p> Retourne la liste des trajet
   * @return trajets
   */
  public Collection<Trajet> renvoieTrajets() {
    return trajets;
  }

  /**
   * initialise les donn�es de la tourn�e
   * @param tournee
   */
  public void initializeDonnee(Tournee tournee) {
    this.tourn�e = tournee;
    this.trajets = new ArrayList<Trajet>(tournee.getTrajets());
    this.gestionnaireEtape.initialise(tournee);

    //cmbChauffeur.setSelectedItem(tournee.getChauffeur().getId());
    selectionneChauffeur(tourn�e.getChauffeur());
    //cmbVoiture.setSelectedItem(tournee.getVoiture().getId());
    selectionneVoiture(tourn�e.getVoiture());

    dateDebutTournee = tournee.getDateDebutService();
    textDateDebutTournee.setText(new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).format(dateDebutTournee));
   
    textIndexKmBordDebut.setText(Long.toString(tournee.getKilometrageVoitureDebutTournee()));
    textIndexKmTxmtDebut.setText(Long.toString(tournee.getKmTaximetreDebut()));
    textIndexKmChrgDebut.setText(Long.toString(tournee.getKmEnChargeDebut()));
    textNbPriseDebut.setText(Integer.toString(tournee.getNombrePriseDebut()));
    textChuteDebut.setText(BigDecimalFormatter.format(tournee.getChuteDebut()));

    dateFinTournee = tournee.getDateFinService();
    textDateFinTournee.setText(new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).format(dateFinTournee));

    dateInterruptionTournee = tournee.getDateInterruptionService();
    textDur�eInterruptionTournee.setText(new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).format(dateInterruptionTournee));

    textIndexKmBordFin.setText(Long.toString(tournee.getKilometrageVoitureFinTournee()));
    textIndexKmTxmtFin.setText(Long.toString(tournee.getKmTaximetreFin()));
    textIndexKmChrgFin.setText(Long.toString(tournee.getKmEnChargeFin()));
    textNbPriseFin.setText(Integer.toString(tournee.getNombrePriseFin()));
    textChuteFin.setText(BigDecimalFormatter.format(tournee.getChuteFin()));

    textTotKmBord.setText(Long.toString(tournee.getKilometrageParcouruVoiture()));
    textTotIndexKmTxmt.setText(Long.toString(tournee.getIndexKilometrageParcouruTaximetre()));
    textTotNbPrise.setText(Integer.toString(tournee.getTotalNombreDePrise()));
    textTotIndexKmChrg.setText(Long.toString(tournee.getKilometrageParcouruEnCharge()));
    textTotChute.setText(BigDecimalFormatter.format(tournee.getTotalChute()));

    textTotRecetteJrnl.ChampsTxt.setText(BigDecimalFormatter.format(tournee.getRecetteJournali�re()));
  }
 
  private void selectionneChauffeur(ReferenceChauffeur referenceChauffeur) {
    int nbChauffeur = cmbChauffeur.getItemCount();
    for (int i = 0; i<nbChauffeur; i++) {
      if (((ChauffeurAffichable)cmbChauffeur.getItemAt(i)).getChauffeur().getId().equals(referenceChauffeur.getId())) {
        cmbChauffeur.setSelectedIndex(i);
        break;
      }
    }
  }
 
  private void selectionneVoiture(Voiture voiture) {
    int nbVoiture = cmbVoiture.getItemCount();
    for (int i = 0; i<nbVoiture; i++) {
      if (((VoitureAffichable)cmbVoiture.getItemAt(i)).getVoiture().getId().equals(voiture.getId())) {
        cmbVoiture.setSelectedIndex(i);
        break;
      }
    }
  }

}
TOP

Related Classes of gui.course.tournee.TourneeEditionCourse$GestionnaireEtape

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.