using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace VP { /********************************************************/ /* Class : permettant l'affichage de la page principale * du programme */ /********************************************************/ public partial class Form1 : Form { // Attribut pour savoir si les onglets ont besoin d'être rafraichi ou pas private bool DoOnceOnglet1 = false; private bool DoOnceOnglet2 = false; // Attribut pour l'activation du bouton de validation du message // Si tous ces boolean sont à true alors le bouton de validation du voyage // est activé (cette vérification est faite dans la méthode TravelOkButtonClick private bool DateRempliCorrectement = false; private bool TypeDeVehiculeChoisiLibre = false; private bool EmployeCorrectementSelectionne = false; private bool DestinationRempliCorrectement = false; // Véhicule qui a été choisi lors de la reservation par l'employé Vehicle v; /* Constructeur */ public Form1() { InitializeComponent(); } /* Méthode pour quitter le programme proprement */ private void exitToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("Do you really want to quit ? (The save is done automatically)", "Quit ?", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) { // On sérialise toutes les données, et on quitte Model.SerialisationEmployee(); Model.SerialisationVehicle(); Model.SerialisationTravel(); // On ferme l'application Close(); Application.Exit(); } } /* Liste des Employés, cette méthode met à jour la listView des employés */ private void listView1_SelectedIndexChanged(object sender, EventArgs e) { // Ici on a sélectionné quelque chose,alors on peut regarder si il y a des voyages // pour la personne sélectionnée, donc on active le bouton en question SeeTravelPersonButton.Enabled = true; // Le morceau de code ci-dessous permet la réactualisation de la liste if (DoOnceOnglet1 == false) // Si c'est à false c'est qu'on a pas encore crée la liste (c'est pour le faire qu'une fois) { // On efface la liste listView1.Items.Clear(); // Je récupère les informations pour remplir la liste AllEmployee all = Model.getAllEmployee(); ArrayList liste = all.getAllEmployee(); // Boucle sur la liste pour afficher chaque employé foreach (Employee emp in liste) { /**************************************************************/ /* On met la date dans le format qu'on veut (sans les heures) */ /**************************************************************/ string shortDate; DateTime dt = new DateTime(); dt = emp.getNaissance(); shortDate = dt.ToShortDateString(); /**************************************************************/ string[] employee = new string[] { emp.getFname(), emp.getName(), shortDate, emp.getJob(), emp.getSex(), emp.getAdresse() }; // On ajoute chaque item a la liste ListViewItem item = new ListViewItem(employee); listView1.Items.Add(item); } // On a plus besoin de créer la liste car on vient de le faire, donc on met à vrai DoOnceOnglet1 = true; } } /* Méthode permettant le chargement de la page */ private void Form1_Load(object sender, EventArgs e) { // Dès le lancement de la fenêtre on affiche la table des employées listView1_SelectedIndexChanged(null, null); // Pareil : ici on affiche la liste des véhicules listView2_SelectedIndexChanged(null, null); // Pareil mais pour le remplissage de la combobox de l'onglet travel EmployeeOfTheTravelComboBox_SelectedIndexChanged(null, null); typeVehicleOfTheTravelComboBox_SelectedIndexChanged(null, null); destinationOfTheTravelComboBox_SelectedIndexChanged(null, null); DurationOfTravelUpDown1_ValueChanged(null, null); // Message d'erreur à OFF pour l'instant ErreurDateLabel.Visible = false; ErrorLabel.Visible = false; ErreurDateTravelLabel.Visible = false; // Et bouton de validation des voyages désactivé pour l'instant TravelOKButton.Enabled = false; // Et les autres boutons SeeTravelPersonButton.Enabled = false; SeeTravelVehicleButton.Enabled = false; } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { } /* Méthode lancée lorsque la valeur de la combobox Employee a changer */ private void EmployeeOfTheTravelComboBox_SelectedIndexChanged(object sender, EventArgs e) { // Ici on a selectionner quelque chose alors on peut valider ce boolean EmployeCorrectementSelectionne = true; /* Remplissage de la comboBox */ if (EmployeeOfTheTravelComboBox.Items.Count == 0) { EmployeeOfTheTravelComboBox.Items.Clear(); AllEmployee all = Model.getAllEmployee(); ArrayList liste = all.getAllEmployee(); foreach (Employee emp in liste) { EmployeeOfTheTravelComboBox.Items.Add(emp.getFname()); } } // Vu qu'on a changé le nom de l'employé et que la date des voyages est lié, on vérifie ca aussi dateTimePicker1_ValueChanged(null, null); // Vérification si on peut activer le bouton de validation du voyage VerificationBoutonOK(); } private void tabPage3_Click(object sender, EventArgs e) { } /* Méthode lancée lorsque la valeur de la combobox TypeVehicle a changer */ private void typeVehicleOfTheTravelComboBox_SelectedIndexChanged(object sender, EventArgs e) { TypeDeVehiculeChoisiLibre = true; // On a une selection donc on active ce boolean ErrorLabel.Visible = false; // Le message d'erreur est désactivé pour l'instant /* Remplissage de la comboBox */ if (typeVehicleOfTheTravelComboBox.Items.Count == 0) { typeVehicleOfTheTravelComboBox.Items.Add("Car"); typeVehicleOfTheTravelComboBox.Items.Add("Bus"); typeVehicleOfTheTravelComboBox.Items.Add("Plane"); typeVehicleOfTheTravelComboBox.Items.Add("Helicopter"); } // Vue que cet evenement se lance quand on a changé de valeur, on regarde si il nous reste // de la disponibilité dans le véhicule demandé. Si aucune dispo, on affiche un message d'erreur bool disponibilite = false; label6.Text = "false"; AllVehicle all = Model.getAllVehicle(); ArrayList liste; // On récupère les dates données par l'utilisateur DateTime DateD = dateTimePicker1.Value; DateTime DateF = DateD.AddDays(((double)DurationOfTravelUpDown1.Value) - 1.0); // On récupère le type de véhicule selectionné int selected = typeVehicleOfTheTravelComboBox.SelectedIndex; if (selected == 0) // On a une Car { liste = all.getAllCar(); disponibilite = AllVehicle.VerificationDisponibiliteCar(liste, DateD, DateF); /* On a la disponibilite (utile pour l'activation du message d'erreur */ if (disponibilite == true) this.v = AllVehicle.RetournerCar(liste, DateD, DateF); // On affecte le véhicule } if (selected == 1) // On a un Bus { liste = all.getAllBus(); disponibilite = AllVehicle.VerificationDisponibiliteBus(liste, DateD, DateF); if (disponibilite == true) this.v = AllVehicle.RetournerBus(liste, DateD, DateF); } if (selected == 2) // On a un Avion { liste = all.getAllPlane(); disponibilite = AllVehicle.VerificationDisponibilitePlane(liste, DateD, DateF); if (disponibilite == true) this.v = AllVehicle.RetournerPlane(liste, DateD, DateF); label6.Text = disponibilite.ToString(); } if (selected == 3) // On a un Helico { liste = all.getAllHelicopter(); disponibilite = AllVehicle.VerificationDisponibiliteHelicopter(liste, DateD, DateF); if (disponibilite == true) this.v = AllVehicle.RetournerHelicopter(liste, DateD, DateF); } /* Test si la disponibilite du vehicule est bonne, si elle ne l'est pas on affiche un message * d'erreur */ if (disponibilite == false) { ErrorLabel.Visible = true; //ErrorLabel.Text = "Plus aucun véhicule de ce type n'est disponible, veuillez en choisir un autre"; TravelOKButton.Enabled = false; TypeDeVehiculeChoisiLibre = false; } // On vérifie si on peut activer le bouton de validation VerificationBoutonOK(); } /* Evenement quand on clique sur "?" de la barre de menu */ private void toolStripMenuItem1_Click(object sender, EventArgs e) { // Affichage de la boite de dialogue MenuInterrogation mi = new MenuInterrogation(); mi.ShowDialog(); mi.Dispose(); } /* Méthode lancée lorsque la valeur de la DateTimePicker a changer */ private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { if (typeVehicleOfTheTravelComboBox.SelectedIndex >= 0) { typeVehicleOfTheTravelComboBox_SelectedIndexChanged(null, null); } DateRempliCorrectement = true; ErreurDateLabel.Visible = false; ErreurDateTravelLabel.Visible = false; // Test si le début du voyage est un samedi ou un dimanche, si oui >> Erreur affiché if ((dateTimePicker1.Value.DayOfWeek == System.DayOfWeek.Sunday) || (dateTimePicker1.Value.DayOfWeek == System.DayOfWeek.Saturday)) { ErreurDateLabel.Visible = true; DateRempliCorrectement = false; TravelOKButton.Enabled = false; } // Je crée la date de fin de voyage qui n'existe pas DateTime finvoyage = dateTimePicker1.Value.AddDays(((double)DurationOfTravelUpDown1.Value) - 1.0); // Test si la fin du voyage est un samedi ou un dimanche, si oui >> Erreur affiché if ((finvoyage.DayOfWeek == System.DayOfWeek.Sunday) || (finvoyage.DayOfWeek == System.DayOfWeek.Saturday)) { ErreurDateLabel.Visible = true; DateRempliCorrectement = false; TravelOKButton.Enabled = false; } // Test si l'utilisateur n'a pas un voyage au même moment mais pour cela faut avoir sélectionner un // utilisateur // A t-il sélectionné une utilisateur ? if (EmployeeOfTheTravelComboBox.SelectedIndex >= 0) { // Oui alors on effectue les vérifications // On récupère les dates qu'a donné l'utilisateur DateTime DateDPropose = dateTimePicker1.Value; DateTime DateFPropose = DateDPropose.AddDays(((double)DurationOfTravelUpDown1.Value) - 1.0); // On récupère tous les voyages AllTravel all = Model.getAllTravel(); ArrayList travel = all.getAllTravel(); // Et on vérifie qu'il n'a pas déjà un voyage au même moment foreach (Travel t in travel) { // On récupère le nom du voyageur string nomvoyageur = EmployeeOfTheTravelComboBox.Text; // On le compare à celui qu'on a trouve if (nomvoyageur.CompareTo(t.getVoyageur()) == 0) { // Ici on a trouvé un voyage pour cette personne alors on regarde la date du voyage avec // la date du voyage qu'elle demande, si ca se croise on dit que c'est une erreur /* Explication de l'algo : il suffit que la date de fin qu'on a trouvé, soit inférieur * à la date de début que veut la personne, ou le contraire que la date de début qu'on * a trouvé soit supérieur à la date de fin que veut la personne */ DateTime DateDTrouve = t.getDateD(); DateTime DateFTrouve = t.getDateF(); if (((DateTime.Compare(DateFTrouve, DateDPropose) < 0)) || ((DateTime.Compare(DateDTrouve, DateFPropose) > 0))) { } else { DateRempliCorrectement = false; TravelOKButton.Enabled = false; ErreurDateTravelLabel.Visible = true; } } } } // On vérifie si on peut activer le bouton ok VerificationBoutonOK(); } /* Fonction qui vérifie si le bouton OK de validation de voyage peut être activé ou pas */ private void VerificationBoutonOK() { // Si tous les comboBox sont remplis correctement if (TypeDeVehiculeChoisiLibre == true && DateRempliCorrectement == true && EmployeCorrectementSelectionne == true && DestinationRempliCorrectement == true) { // Si la destination n'est pas vide, l'employé, et le type de locomotion non plus if ((destinationOfTheTravelComboBox.SelectedIndex >= 0) && (EmployeeOfTheTravelComboBox.SelectedIndex >= 0)) { // Alors seulement on peut activer le bouton TravelOKButton.Enabled = true; } } } /* Méthode permettant de créer le voyage lorsqu'on clique sur OK */ private void TravelOKButton_Click(object sender, EventArgs e) { ErreurDateTravelLabel.Visible = false; // On récupère les dates qu'a donné l'utilisateur DateTime DateDPropose = dateTimePicker1.Value; DateTime DateFPropose = DateDPropose.AddDays(((double)DurationOfTravelUpDown1.Value) - 1.0); // On ajoute le voyage Model.allTravel.addTravel( destinationOfTheTravelComboBox.Text, (int)DurationOfTravelUpDown1.Value, DateDPropose, DateFPropose, EmployeeOfTheTravelComboBox.Text, typeVehicleOfTheTravelComboBox.Text, v); // Et surtout on modifie l'attribut isBooked du vehicule v.setIsBooked(true, DateDPropose, DateFPropose); // Et on réactualise la liste pour que ca se voit DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); // On affiche un message disant que c'est crée, et on reset les données du tableau MessageBox.Show("You have created a new travel for " + EmployeeOfTheTravelComboBox.Text + ".", "Travel Confirmed", MessageBoxButtons.OK); TravelResetButton_Click(null, null); } /* Liste des véhicules */ /* Méthode permettant de remplir la listeView2 : Celle des véhicules */ private void listView2_SelectedIndexChanged(object sender, EventArgs e) { // Ici on a sélectionné quelque chose,alors on peut regarder si il y a des voyages // pour la personne sélectionnée, donc on active le bouton en question SeeTravelVehicleButton.Enabled = true; // Le morceau de code ci-dessous permet la réactualisation de la liste en fonction // des checkbox selectionnes if (DoOnceOnglet2 == false) { listView2.Items.Clear(); // On récupère la liste de tous les véhicules AllVehicle all = Model.getAllVehicle(); ArrayList carL = all.getAllCar(); ArrayList busL = all.getAllBus(); ArrayList planeL = all.getAllPlane(); ArrayList helicoL = all.getAllHelicopter(); /** Boucle pour les voitures **/ if (CarCheckBox.Checked == true) { foreach (Car car in carL) { string[] c = new string[] { car.getType(), car.getNom(), car.getMarque(), car.getPrixVoyage().ToString(), car.getIsBooked().ToString() }; // On affiche tous les items ListViewItem item = new ListViewItem(c); listView2.Items.Add(item); } } /** Boucle pour les bus **/ if (BusCheckBox.Checked == true) { foreach (Bus bus in busL) { string[] c = new string[] { bus.getType(), bus.getNom(), bus.getMarque(), bus.getPrixVoyage().ToString(), bus.getIsBooked().ToString() }; // On affiche tous les items ListViewItem item = new ListViewItem(c); listView2.Items.Add(item); } } /** Boucle pour les avions **/ if (PlaneCheckBox.Checked == true) { foreach (Plane plane in planeL) { string[] c = new string[] { plane.getType(), plane.getNom(), plane.getMarque(), plane.getPrixVoyage().ToString(), plane.getIsBooked().ToString() }; // On affiche tous les items ListViewItem item = new ListViewItem(c); listView2.Items.Add(item); } } /** Boucle pour les helico **/ if (HelicoCheckBox.Checked == true) { foreach (Helicopter helico in helicoL) { string[] c = new string[] { helico.getType(), helico.getNom(), helico.getMarque(), helico.getPrixVoyage().ToString(), helico.getIsBooked().ToString() }; // On affiche tous les items ListViewItem item = new ListViewItem(c); listView2.Items.Add(item); } } // On met le boolean a true pour ne pas réactualise inutilement DoOnceOnglet2 = true; } } /* Méthode permettant de reset tout l'onglet Travel */ private void TravelResetButton_Click(object sender, EventArgs e) { // Réinitialisation EmployeeOfTheTravelComboBox.Items.Clear(); EmployeeOfTheTravelComboBox_SelectedIndexChanged(null, null); typeVehicleOfTheTravelComboBox.Items.Clear(); typeVehicleOfTheTravelComboBox_SelectedIndexChanged(null, null); destinationOfTheTravelComboBox.Items.Clear(); destinationOfTheTravelComboBox_SelectedIndexChanged(null, null); DurationOfTravelUpDown1.Value = 1; dateTimePicker1.Value = new DateTime(2009, 09, 01); // Message d'erreur à OFF ErreurDateLabel.Visible = false; ErrorLabel.Visible = false; ErreurDateTravelLabel.Visible = false; // Et les boutons TravelOKButton.Enabled = false; //SeeTravelPersonButton.Enabled = false; //SeeTravelVehicleButton.Enabled = false; } /* Méthode permettant de réactualiser les listes */ private void TabPage_TabIndexChanged(object sender, EventArgs e) { // Si c'est l'onglet 0 alors on réactualise if (TabPage.SelectedIndex == 0) { DoOnceOnglet1 = false; listView1_SelectedIndexChanged(null, null); } // Pareil pour l'onglet 1 if (TabPage.SelectedIndex == 1) { DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); } } /* Méthode pour l'evenement clic sur le bouton See Travel of Person */ private void SeeTravelPersonButton_Click(object sender, EventArgs e) { // On récupère la personne sélectionné et on l'envoie à la nouvelle fenêtre ListView.SelectedListViewItemCollection ligne = listView1.SelectedItems; string familyname = ""; string name = ""; string naissance = ""; string job = ""; string sex = ""; string adresse = ""; foreach (ListViewItem item in ligne) { familyname = item.SubItems[0].Text; name = item.SubItems[1].Text; naissance = item.SubItems[2].Text; job = item.SubItems[3].Text; sex = item.SubItems[4].Text; adresse = item.SubItems[5].Text; } EmployeeTravel empT = new EmployeeTravel(familyname, name, naissance, job, sex, adresse); empT.ShowDialog(); } /* Méthode pour l'evenement clic sur le bouton See Travel of Vehicle */ private void SeeTravelVehicleButton_Click(object sender, EventArgs e) { // On récupère le véhicule sélectionné et on l'envoie à la nouvelle fenêtre ListView.SelectedListViewItemCollection ligne = listView2.SelectedItems; string type = ""; string model = ""; string brand = ""; string price = ""; string isBooked = ""; foreach (ListViewItem item in ligne) { type = item.SubItems[0].Text; model = item.SubItems[1].Text; brand = item.SubItems[2].Text; isBooked = item.SubItems[3].Text; price = item.SubItems[4].Text; } // On affiche la boite de dialogue avec les informations suivantes VehicleTravel vecT = new VehicleTravel(type, model, brand, price, isBooked); vecT.ShowDialog(); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { } /* Méthode pour le remplissange de la comboBox destination */ private void destinationOfTheTravelComboBox_SelectedIndexChanged(object sender, EventArgs e) { // Ici on a selectionner quelque chose alors on peut valider DestinationRempliCorrectement = true; // Remplissage de la comboBox if (destinationOfTheTravelComboBox.Items.Count == 0) { destinationOfTheTravelComboBox.Items.Add("Paris"); destinationOfTheTravelComboBox.Items.Add("Marseille"); destinationOfTheTravelComboBox.Items.Add("Melun"); destinationOfTheTravelComboBox.Items.Add("Villejuif"); destinationOfTheTravelComboBox.Items.Add("Montpellier"); destinationOfTheTravelComboBox.Items.Add("Lyon"); destinationOfTheTravelComboBox.Items.Add("Bruxelles"); destinationOfTheTravelComboBox.Items.Add("Londres"); destinationOfTheTravelComboBox.Items.Add("Berlin"); destinationOfTheTravelComboBox.Items.Add("Bordeaux"); destinationOfTheTravelComboBox.Items.Add("Nantes"); destinationOfTheTravelComboBox.Items.Add("Lille"); destinationOfTheTravelComboBox.Items.Add("Stuttgart"); } // Vérification si on peut activer le bouton de validation du voyage VerificationBoutonOK(); } /* Méthode : Si on change la valeur de la durée du voyage, on fait certaine actions */ private void DurationOfTravelUpDown1_ValueChanged(object sender, EventArgs e) { // Vérification pour l'activation du bouton de validation du voyage VerificationBoutonOK(); // Dès qu'on change la durée du voyage, on vérifie que la date de fin et de début est // Toujours valide. Pour cela, on lance la fonction suivante : dateTimePicker1_ValueChanged(null, null); } /****************************************************************/ /* Fonctions pour les CHECKBOX de la liste des vehicules ********/ /* On réactualise la liste en mettant le boolean DoOnceOnglet2 **/ /* à faux et en relancant la méthode pour la réactualisation ****/ /****************************************************************/ private void CarCheckBox_CheckedChanged(object sender, EventArgs e) { DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); } private void BusCheckBox_CheckedChanged(object sender, EventArgs e) { DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); } private void PlaneCheckBox_CheckedChanged(object sender, EventArgs e) { DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); } private void HelicoCheckBox_CheckedChanged(object sender, EventArgs e) { DoOnceOnglet2 = false; listView2_SelectedIndexChanged(null, null); } /*********************************************************/ } }