// Gestion du boutton supprimer
 private void buttonSupprimer_Click(object sender, EventArgs e)
 {
     if (comboBoxNomProjet.SelectedIndex >= 0)
     {
         string message = "Etes-vous sûr de vouloir supprimer";
         string caption = "Suppression d'un projet";
         var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
         if (result == DialogResult.Yes)
         {
             ProjetForfait projet = new ProjetForfait();
             projet.CodeProjet = ((ProjetForfait)comboBoxNomProjet.SelectedItem).CodeProjet;
             if (DaoProjet.DelProjet(projet) == true)
             {
                 projetForfaitBindingSource.Remove(comboBoxNomProjet.SelectedItem);
                 projetForfaitBindingSource.ResetBindings(true);
             }
             else
                 MessageBox.Show("Le projet n'a pas pu etre supprimé");
         }
     }
     comboBoxNomProjet.SelectedItem = null;
     groupBoxProjet.Visible = false;
     groupBoxForfait.Visible = false;
 }
        // On gère l'evenement du click sur valider
        private void buttonValider_Click(object sender, EventArgs e)
        {
            int CodeProjet = 0;

        
           
            if (comboBoxResponsable.SelectedItem != null && comboBoxClient != null && nomIsOk == true && dateIsOk == true && montantIsOk == true)
            {
                ProjetForfait projet = new ProjetForfait(CodeProjet, textBoxNomProjet.Text, dateDebut, dateFin, (Client)comboBoxClient.SelectedItem, textBoxContact.Text, textBoxMailContact.Text, Convert.ToDecimal(textBoxMontantContrat.Text), radioButtonOui.Checked, (Collaborateur)comboBoxResponsable.SelectedItem);
                if (clickCreer == true)
                {

                    if (DaoProjet.AddProjet(projet, out CodeProjet) == true)
                    {
                        projet.CodeProjet = CodeProjet;
                        projetForfaitBindingSource.Add(projet);
                    }
                    else
                        MessageBox.Show("Le projet n'a pas été ajouté");
                    projetForfaitBindingSource.ResumeBinding();
                    const string caption = "Projet enregistré";
                    string message = "Projet" + projet.ToString() + "\n" + "Client" + comboBoxClient.SelectedItem.ToString() + "\n" + textBoxContact.Text + "," + textBoxMailContact.Text + "\n" + "[" + textBoxMontantContrat.Text + "," + "Collaborateur" + comboBoxResponsable.SelectedItem.ToString();
                    MessageBox.Show(message, caption, MessageBoxButtons.OK);
                    comboBoxNomProjet.Enabled = true;
                    comboBoxNomProjet.SelectedItem = null;
                    ChangerEnabledTrueOrFalse(false);
                    groupBoxForfait.Visible = false;
                    groupBoxProjet.Visible = false;
                }    
                if (clickModif == true)
                {
                    Verif();
                        
                    string message = "Veuillez confirmer la modification";
                    string caption = "Validation de la modification";
                    var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        projet.CodeProjet = ((ProjetForfait)comboBoxNomProjet.SelectedItem).CodeProjet;

                        if (DaoProjet.UpdProjet(projet) == true)
                        {
                            projetForfaitBindingSource.ResumeBinding();
                        }
                        else
                            MessageBox.Show("La mise a jour n'a pas été effectuée");
                        const string caption2 = "Projet modifié";
                        string message2 = "Projet" + projet.ToString() + "\n" + "Client" + comboBoxClient.SelectedItem.ToString() + "\n" + textBoxContact.Text + "," + textBoxMailContact.Text + "\n" + "[" + textBoxMontantContrat.Text + "," + "Collaborateur" + comboBoxResponsable.SelectedItem.ToString();
                        MessageBox.Show(message2, caption2, MessageBoxButtons.OK);
                        comboBoxNomProjet.Enabled = true;
                        projetForfaitBindingSource.ResumeBinding();
                        comboBoxNomProjet.SelectedItem = null;
                        ChangerEnabledTrueOrFalse(false);
                        groupBoxForfait.Visible = false;
                        groupBoxProjet.Visible = false;
                    }
                }
            }
            else
            {
                if (nomIsOk == false)
                {
                    errorProviderNomProjet.SetError(textBoxNomProjet, "Le nom est obligatoire pour créer un projet");
                }
                else if (dateIsOk == false)
                {
                    errorProviderDateDebut.SetError(maskedTextBoxDateDebut, "La saisie des dates est obligatoire");
                    errorProviderDateFin.SetError(maskedTextBoxDateFin, "La saisie des dates est obligatoire");
                }
                else if (montantIsOk == false)
                {
                    errorProviderMontant.SetError(textBoxMontantContrat, "Le montant du contrat est obligatoire pour créer un projet");
                }
                else if (comboBoxClient.SelectedItem == null)
                {
                    MessageBox.Show("Veuillez selectionner un client");
                }
                else if(comboBoxResponsable.SelectedItem == null)
                {
                    MessageBox.Show("Veuillez selectionneur un collaborateur");
                }
            }



        }
        //Modifier un projet dans la BB
        public static bool UpdProjet(ProjetForfait pr)
        {
            using (SqlConnection sqlConnect = GetConnection())
            {
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    sqlCde.Connection = sqlConnect;
                    string strsql = "updProjet";

                    try
                    {
                        sqlCde.CommandType = CommandType.StoredProcedure;
                        sqlCde.CommandText = strsql;

                        sqlCde.Parameters.Add(new SqlParameter("@idp", SqlDbType.Int)).Value = pr.CodeProjet;
                        sqlCde.Parameters.Add(new SqlParameter("@vColl", SqlDbType.Int)).Value = pr.ChefDeProjet.CodeColl;
                        sqlCde.Parameters.Add(new SqlParameter("@vClient", SqlDbType.Int)).Value = pr.LeClient.CodeClient;
                        sqlCde.Parameters.Add(new SqlParameter("@vQualif", SqlDbType.TinyInt)).Value = null;
                        sqlCde.Parameters.Add(new SqlParameter("@vtypep", SqlDbType.TinyInt)).Value = 1;
                        sqlCde.Parameters.Add(new SqlParameter("@vnomprojet", SqlDbType.VarChar)).Value = pr.NomProjet;
                        sqlCde.Parameters.Add(new SqlParameter("@vdatedebut", SqlDbType.Date)).Value = pr.DDebut;
                        sqlCde.Parameters.Add(new SqlParameter("@vdatefin", SqlDbType.Date)).Value = pr.DFin;
                        sqlCde.Parameters.Add(new SqlParameter("@vcontactclient", SqlDbType.VarChar)).Value = pr.Contact;
                        sqlCde.Parameters.Add(new SqlParameter("@vmailcontact", SqlDbType.VarChar)).Value = pr.MailContact;
                        sqlCde.Parameters.Add(new SqlParameter("@vtarifjournalier", SqlDbType.Money)).Value = null;
                        sqlCde.Parameters.Add(new SqlParameter("@vmtcontrat", SqlDbType.Money)).Value = pr.MontantContrat;
                        sqlCde.Parameters.Add(new SqlParameter("@vpenaliteOuiNon", SqlDbType.Bit)).Value = pr.PenaliteOuiNon;

                        //Execution de la commande
                        int n = sqlCde.ExecuteNonQuery();
                        if (n == 1)
                            MessageBox.Show("Mise a jour éffectuée");

                        return true;

                    }
                    catch (Exception ex)
                    {
                        throw new DAOException(ex.Message);
                    }
                }
            }
        }
        // Parametrage BDD avec la methode GetallProject
        public static List<ProjetForfait> GetAllProject()
        {
            using (SqlConnection sqlConnect = GetConnection())
            {
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    sqlCde.Connection = sqlConnect;
                    string strsql = "GetAllProjetForfaits";

                    try
                    {
                        sqlCde.CommandType = CommandType.StoredProcedure;
                        sqlCde.CommandText = strsql;
                        SqlDataReader sqlRdr = sqlCde.ExecuteReader();
                        Projets = new List<ProjetForfait>();
                        while (sqlRdr.Read())
                        {
                            
                            ProjetForfait projet = new ProjetForfait()
                            {
                                CodeProjet = sqlRdr.GetInt32(0),
                                NomProjet = sqlRdr.GetString(1),
                                DDebut = sqlRdr.GetDateTime(2),
                                DFin = sqlRdr.GetDateTime(3),
                                Contact = sqlRdr[4].ToString(),
                                MailContact = sqlRdr[5].ToString(),
                                LeClient = new Client()
                                {
                                    CodeClient = sqlRdr.GetInt32(6)
                                },
                                MontantContrat = sqlRdr.GetDecimal(7),
                                ChefDeProjet = new Collaborateur()
                                {
                                    CodeColl = sqlRdr.GetInt32(9)
                                },

                                PenaliteOuiNon = sqlRdr.GetSqlBoolean(8) == true ? Penalite.Oui : Penalite.Non
                            };
                            Projets.Add(projet);
                        }
                        sqlRdr.Close();
                        return Projets;
                    }
                    catch (Exception ex)
                    {
                        throw new DAOException(ex.Message);
                    }

                }
            }

        }
        //Ajouter un projet dans la BDD
        public static bool AddProjet(ProjetForfait pr, out int idProjet)
        {
            using (SqlConnection sqlConnect = GetConnection())
            {
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    sqlCde.Connection = sqlConnect;
                    string strsql = "AddProjet";

                    try
                    {
                        sqlCde.CommandType = CommandType.StoredProcedure;
                        sqlCde.CommandText = strsql;

                        // Ajout des paramètres
                        sqlCde.Parameters.Add(new SqlParameter("@idColl", SqlDbType.Int)).Value = pr.ChefDeProjet.CodeColl;
                        sqlCde.Parameters.Add(new SqlParameter("@IdClient", SqlDbType.Int)).Value = pr.LeClient.CodeClient;
                        sqlCde.Parameters.Add(new SqlParameter("@IdQualif", SqlDbType.TinyInt)).Value = null;
                        sqlCde.Parameters.Add(new SqlParameter("@idtypep", SqlDbType.TinyInt)).Value = 1;
                        sqlCde.Parameters.Add(new SqlParameter("@nomprojet", SqlDbType.VarChar)).Value = pr.NomProjet;
                        sqlCde.Parameters.Add(new SqlParameter("@ddebut", SqlDbType.Date)).Value = pr.DDebut;
                        sqlCde.Parameters.Add(new SqlParameter("@dfin", SqlDbType.Date)).Value = pr.DFin;
                        sqlCde.Parameters.Add(new SqlParameter("@contactclient", SqlDbType.VarChar)).Value = pr.Contact;
                        sqlCde.Parameters.Add(new SqlParameter("@mailcontact", SqlDbType.VarChar)).Value = pr.MailContact;
                        sqlCde.Parameters.Add(new SqlParameter("@tarifjournalier", SqlDbType.Money)).Value = null;
                        sqlCde.Parameters.Add(new SqlParameter("@mtcontrat", SqlDbType.Money)).Value = pr.MontantContrat;
                        sqlCde.Parameters.Add(new SqlParameter("@penaliteOuiNon", SqlDbType.Bit)).Value = pr.PenaliteOuiNon;
                        sqlCde.Parameters.Add(new SqlParameter("@idProjet", SqlDbType.Int)).Direction = ParameterDirection.Output;


                        // Execution de la commande et recup parametre de sortie
                        int n = sqlCde.ExecuteNonQuery();
                        if (n == 1)
                            MessageBox.Show("Mise a jour éffectuée");
                        idProjet = (int)sqlCde.Parameters["@idProjet"].Value;

                        return true;
                        
                    }
                    catch (Exception ex)
                    {
                        throw new DAOException(ex.Message);
                    }
                }
            }
        }