// Annule la modification de réservation
 private void btnAnnuler_Click(object sender, EventArgs e) {
     dialogResult = MessageBox.Show("La réservation en cours ne sera pas modifiée. Confirmez-vous votre choix ?", "Annulation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
     if (dialogResult == DialogResult.Yes) {
         // Affichage des réservation en cours
         if (ActiveMdiChild != null) {
             ActiveMdiChild.Close();
         }
         // Affichage pour les réservations en cours ou validées
         frmReservationEnCours = new frmReservationEnCours();
         frmReservationEnCours.MdiParent = frmPrinicpale.ActiveForm;
         frmReservationEnCours.Show();
         frmReservationEnCours.Location = new Point(0, 0);
     }
 }
 // Réservation en cours ou en attente
 private void réservationEnAttenteToolStripMenuItem_Click(object sender, EventArgs e) {
     if (ActiveMdiChild != null) {
         ActiveMdiChild.Close();
     }
     pnlPrincipal.SendToBack();
     // Affichage pour les réservations en cours ou validés
     frmReservationEnCours = new frmReservationEnCours();
     frmReservationEnCours.MdiParent = this;
     frmReservationEnCours.Show();
     frmReservationEnCours.Location = new Point(0, 0);
 }
        // Validation de la sélection
        private void btnValiderLoc_Click(object sender, EventArgs e) {
            ok = false;
            if (this.modeAcces == "CR") {
                // Test si les champs obligatoires ont été renseignés
                foreach (DataGridViewRow row in dgvVehicule.Rows) {
                    if ((bool)row.Cells[1].Value) {
                        numLig = row.Index;
                        ok = true;
                        break;
                    }
                }

                if (ok && txtMotif.Text != "") {
                    dialogResult = MessageBox.Show("Confirmez-vous votre choix ?", "Validation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes) {
                        // Insertion de la location dans la base
                        try {
                            requete = "INSERT INTO emprunt (`idVehicule`, `idUtilisateur`, `dateEmprunt`, `dateRetour`, `rendu`, `kilometrage`, `niveauCarburant`, `valide`, `idAdmin`, `contenu`, `dateSaisie`, `dateValidation`) VALUES "
                                + "(" + dgvVehicule.Rows[numLig].Cells[0].Value + ", " + Global.userId + ", '" + fonctions.formatDate(dateDeb) + " " + fonctions.formatHeure(cbHeDeb.SelectedItem.ToString()) + "', '" + fonctions.formatDate(dateRet) + " " + fonctions.formatHeure(cbHeFin.SelectedItem.ToString()) + "' "
                                + ", 0, 0, 0, 0, '', @Contenu, now(), '1000-01-01 00:00:00');";
                            MySqlCommand cmd = new MySqlCommand(requete, Global.Connection);
                            MySqlParameter pContenu = new MySqlParameter("@Contenu", MySqlDbType.Text);
                            pContenu.Value = txtMotif.Text;
                            cmd.Parameters.Add(pContenu);
                            cmd.Prepare();
                            cmd.ExecuteNonQuery();

                            requete = "INSERT INTO rappellocation (`idEmprunt`, `rappel`) VALUES ((SELECT idEmprunt FROM emprunt ORDER BY idEmprunt DESC LIMIT 1), 1)";
                            cmd = new MySqlCommand(requete, Global.Connection);
                            cmd.ExecuteNonQuery();

                            MessageBox.Show("La réservation a bien été prise en compte. Elle sera traitée par un administrateur dans les plus bref délais.", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            // Affichage des réservation en cours
                            if (ActiveMdiChild != null) {
                                ActiveMdiChild.Close();
                            }
                            // Affichage pour les réservations en cours ou validées
                            frmReservationEnCours = new frmReservationEnCours();
                            frmReservationEnCours.MdiParent = frmPrinicpale.ActiveForm;
                            frmReservationEnCours.Show();
                            frmReservationEnCours.Location = new Point(0, 0);
                        } catch (MySqlException) {
                            MessageBox.Show("Une erreur est survenue. Impossible de continuer.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                } else {
                    MessageBox.Show("Vous devez renseigné un motif et sélectionnez un véhicule.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            } else if (modeAcces == "MO") {
                // Test si les champs obligatoires ont été renseignés
                foreach (DataGridViewRow row in dgvVehicule.Rows) {
                    if ((bool)row.Cells[1].Value) {
                        numLig = row.Index;
                        ok = true;
                        break;
                    }
                }

                if (ok && txtMotif.Text != "") {
                    dialogResult = MessageBox.Show("Confirmez-vous votre choix ?", "Validation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes) {

                        // Vérification de la conformité de la location
                        string dateTimeDeb = fonctions.formatDate(dateDeb) + " " + fonctions.formatHeure(cbHeDeb.SelectedItem.ToString());
                        string dateTimeFin = fonctions.formatDate(dateRet) + " " + fonctions.formatHeure(cbHeFin.SelectedItem.ToString());
                        DateTime dateTest = fonctions.convertDate(dateDeb, cbHeDeb.SelectedItem.ToString());

                        if (dateTest.AddHours(-3) < DateTime.Now) {
                            MessageBox.Show("Le début de location doit être à au moins 3 heures de la date actuelle.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        } else {
                            requete = "select case when count(*) = 0 then 'rien' else 'qqchose' end as compteresa from vehicule natural join categorievehicule where vehicule.idVehicule " +
                                      " IN(SELECT emprunt.idVehicule FROM emprunt WHERE idEmprunt <> " + idResa + " and (((dateEmprunt between '" + dateTimeDeb + "' and '" + dateTimeFin + "') and dateEmprunt is not null) " +
                                      " or ((dateRetour between '" + dateTimeDeb + "' and '" + dateTimeFin + "') and dateRetour is not null) or dateEmprunt = '" + dateTimeDeb +
                                      "' or dateRetour = '" + dateTimeFin + "' or dateEmprunt = '" + dateTimeFin + "' or dateRetour = '" + dateTimeDeb + "' or (dateEmprunt <= '" +
                                      dateTimeDeb + "' and dateRetour >= '" + dateTimeDeb + "') or (dateEmprunt <= '" + dateTimeFin + "' and dateRetour >= '" + dateTimeFin + "')) and idVehicule = " + dgvVehicule.Rows[0].Cells[0].Value + ")";

                            MySqlCommand cmd = new MySqlCommand(requete, Global.Connection);
                            rd = cmd.ExecuteReader();
                            rd.Read();                          

                            if ((string) rd["compteresa"] == "rien") {
                                rd.Close();
                                // Update de la location dans la base
                                try {
                                    requete = "UPDATE emprunt SET idVehicule = " + dgvVehicule.Rows[numLig].Cells[0].Value + ", dateEmprunt = '" + fonctions.formatDate(dateDeb) + " " + fonctions.formatHeure(cbHeDeb.SelectedItem.ToString()) + "', " +
                                        "dateRetour = '" + fonctions.formatDate(dateRet) + " " + fonctions.formatHeure(cbHeFin.SelectedItem.ToString()) + "', contenu = @Contenu WHERE idEmprunt = " + idResa;
                                    cmd = new MySqlCommand(requete, Global.Connection);
                                    MySqlParameter pContenu = new MySqlParameter("@Contenu", MySqlDbType.Text);
                                    pContenu.Value = txtMotif.Text;
                                    cmd.Parameters.Add(pContenu);
                                    cmd.Prepare();
                                    cmd.ExecuteNonQuery();
                                    MessageBox.Show("Modification effectuée.", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    // Affichage des réservation en cours
                                    if (ActiveMdiChild != null) {
                                        ActiveMdiChild.Close();
                                    }
                                    // Affichage pour les réservations en cours ou validées
                                    frmReservationEnCours = new frmReservationEnCours();
                                    frmReservationEnCours.MdiParent = frmPrinicpale.ActiveForm;
                                    frmReservationEnCours.Show();
                                    frmReservationEnCours.Location = new Point(0, 0);
                                } catch (MySqlException) {
                                    MessageBox.Show("Une erreur est survenue. Impossible de continuer.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            } else {
                                MessageBox.Show("Le véhicule n'est pas libre à ces nouvelles dates, vérifiez ses disponibilitées.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                rd.Close();
                            }
                        }
                    }
                } else {
                    MessageBox.Show("Vous devez renseigner un motif et sélectionnez un véhicule.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }