// Choix d'un projet dans la combo
        private void cboProjets_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboProjets.SelectedIndex != -1)
            {
                // Chargement du datagridview
                //-----------------------------
                leProjetEnCours = (ProjetForfait)cboProjets.SelectedItem;

                // afficher prévisions
                AfficherPrevisions();

                lblTitre.Visible = true;
                btnCreer.Visible = true;
            }
        }
        // Valider
        private void btnValider_Click(object sender, EventArgs e)
        {
            // Controle la saisie des champs 
            //==============================
            decimal mtContrat;
            DateTime dateDebut, dateFin;
            // test champ alpha : au moins 1 caractere 
            if (!Regex.IsMatch(txtNomProjet.Text, @"^[A-Za-z ]+$"))// espace autorisé
            {
                Affichage.ErreurSaisie(txtNomProjet, "Nom projet invalide");
            }
            // test Date
            // attention date de format jj/mm passe avec tryParse , année en cours par défaut
            // on pourrait ajouter le controle du format jj/mm/aaaa par expression régulière
            else if (!DateTime.TryParse(txtDateD.Text, out dateDebut))
            {
                Affichage.ErreurSaisie(txtDateD, "Date invalide");
            }
            else if (!DateTime.TryParse(txtDateF.Text, out dateFin))
            {
                Affichage.ErreurSaisie(txtDateF, "Date invalide");
            }
            // DateDebut < DateFin
            else if (dateDebut.CompareTo(dateFin) > 0)
            {
                Affichage.ErreurSaisie(txtDateD, "La date de début doit être inférieure à la date du jour");
            }
            // test client sélectionnée
            else if (cboClients.SelectedIndex == -1)
            {
                Affichage.ErreurSaisie(cboClients, "Sélectionnez un client");
            }
            //Contact, non obligatoire, mais alpha si saisi
            else if (!Regex.IsMatch(txtNomProjet.Text, @"^[A-Za-z ]*$"))// espace autorisé
            {
                Affichage.ErreurSaisie(txtNomProjet, "Ne peut contenir que des caractères");
            }
            // test Adresse mail, avec utilisation System.Net.Mail
            else if (!IsValidEMail(txtMail.Text))
            {
                Affichage.ErreurSaisie(txtMail, "Adresse mail erronée");
            }
            // test collaborateur sélectionnée
            else if (cboCollaborateurs.SelectedIndex == -1)
            {
                Affichage.ErreurSaisie(cboCollaborateurs, "Sélectionnez un chef de projet");
            }
            // test mt contrat
            else if (!Decimal.TryParse(txtMtContrat.Text, out mtContrat))
            {
                Affichage.ErreurSaisie(txtMtContrat, "Montant contrat invalide");
            }
            else  // saisie OK
            {
                //Affectation du code penalite : utilisation de l'opérateur ternaire
                //Penalite cp;
                //if (rbPenNon.Checked) cp = Penalite.Non;
                //else cp = Penalite.Oui;
                ProjetForfait oProjet = new ProjetForfait(txtNomProjet.Text, dateDebut, dateFin, (Client)cboClients.SelectedItem,
                        txtContact.Text, txtMail.Text, mtContrat, rbPenNon.Checked ? Penalite.Non:Penalite.Oui, (Collaborateur)cboCollaborateurs.SelectedItem);

                bool success;
                try {
                    if (creation) // Création
                    {
                        int code = DaoProjet.AddProjet(oProjet);
                        oProjet.CodeProjet = code;
                        success = true;
                        // ajout dans la combo au travers du binding
                        projetForfaitBindingSource.Add(oProjet);

                    }
                    else // Modification
                    {
                        oProjet.CodeProjet = codeProjet;
                        DaoProjet.UpdProjet(oProjet);
                        success = true;
                        // modif du bindingSource 
                        int rang = projetForfaitBindingSource.IndexOf(oProjet);
                        if (rang != -1) projetForfaitBindingSource[rang] = oProjet;
                    }

                    // Echec ou succes ?
                    if (success)
                    {
                        // actualisation
                        projetForfaitBindingSource.ResetBindings(false);
                        cboProjets.SelectedItem = oProjet;
                        // Affichage en visu
                        AfficheForm("V");
                    }
                    // sinon on reste en l'état
                }
                catch (DaoExceptionFinAppli defa)
                {
                    MessageBox.Show(defa.Message);
                    Application.Exit();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
        } 
 public FrmPrevisionnel(ProjetForfait pf)
 {
     InitializeComponent();
     leProjetEnCours = pf;
 }
        public static List<Projet> GetAllProjetForfaits()
        {
            List<Projet> Projets = new List<Projet>();
            // création connection
            using (SqlConnection sqlConnect = GetConnection())
            {

                // projet forfait
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    //initialiser la connection de la commande
                    sqlCde.Connection = sqlConnect;
                    // chargement des qualifications
                    String strSql = "GetAllProjetForfaits";
                    sqlCde.CommandText = strSql;
                    sqlCde.CommandType = CommandType.StoredProcedure;

                    // Exécution de la commande
                    try
                    {
                        SqlDataReader sqlRdr = sqlCde.ExecuteReader();
                        while (sqlRdr.Read())
                        {
                            // mt contrat et Penalite : jamais null pour les forfaits
                            
                            // Champs null possibles : contact client et mailcontact gérés par ToString()
                            // Affectation Penalite
                            //Penalite pen = Penalite.Non;
                            //if (sqlRdr.GetBoolean(8) == true) pen = Penalite.Oui;
                            // non utilisé , utilisation opérateur ternaire dans le constructeur

                            // Création objet
                            ProjetForfait oProjetForfait = new ProjetForfait(sqlRdr.GetInt32(0), sqlRdr.GetString(1), sqlRdr.GetDateTime(2), sqlRdr.GetDateTime(3), new Client() { CodeClient = sqlRdr.GetInt32(6) },
                               sqlRdr[4].ToString(), sqlRdr[5].ToString(), sqlRdr.GetDecimal(7), sqlRdr.GetBoolean(8)? Penalite.Oui: Penalite.Non, new Collaborateur() { CodeColl = sqlRdr.GetInt32(9) });
                            // ajout liste
                            Projets.Add(oProjetForfait);
                        }
                        sqlRdr.Close();

                        return Projets;
                    }
                    catch (SqlException se)
                    {
                        throw new DaoExceptionFinAppli("Lecture des projets forfait impossible, l'application va se fermer: \n" + se.Message, se);
                    }
                }
            }
        }