private IEnumerable <ChoixPackVehicule> EnumererChoixPackVehicule()
 {
     if (Connexion == null)
     {
         Connexion = Program.GMBD.BD;
     }
     return(ChoixPackVehicule.Enumerer(Connexion, Connexion.Enumerer(@"SELECT * FROM choix_pack_vehicule
                                                                         JOIN pack_option_pack_vehicule ON choix_pack_vehicule.fk_id_popv = pack_option_pack_vehicule.id_pack_option_pack_vehicule
                                                                         WHERE choix_pack_vehicule.fk_id_vehicule_vente = {0}", Id)));
 }
        private void ListeDeroulantePackOptions_SurChangementSelection(object sender, EventArgs e)
        {
            if (listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne != null)
            {
                buttonAjouterP.Enabled      = false;
                buttonSupprimerPack.Enabled = true;

                #region Requêtes pour les packs d'options
                //////////////////////////////////////
                // Requêtes pour les pack d'options //
                //////////////////////////////////////
                ficheOptionsPackActuel.Options = Program.GMBD.EnumererOptionVehicule(null, new PDSGBD.MyDB.CodeSql(@"JOIN pack_option ON option_vehicule.id_option_vehicule = pack_option.fk_id_option_vehicule
                                                                                                                     JOIN type_option ON option_vehicule.fk_id_type_option = type_option.id_type_option"),
                                                                                     new PDSGBD.MyDB.CodeSql("WHERE pack_option.fk_id_popv = {0}", listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.Id), null);

                ficheOptionsPackActuel.SurChangementFiltre += (s, ev) =>
                {
                    // Cette condition permet d'alléger la requête si l'utilisateur revient sur un filtre vide
                    if (ficheOptionsPackActuel.TexteFiltreOptions != "")
                    {
                        ficheOptionsPackActuel.Options = Program.GMBD.EnumererOptionVehicule(null,
                                                                                             new PDSGBD.MyDB.CodeSql(@"JOIN pack_option ON option_vehicule.id_option_vehicule = pack_option.fk_id_option_vehicule
                                                                                                     JOIN type_option ON option_vehicule.fk_id_type_option = type_option.id_type_option"),
                                                                                             new PDSGBD.MyDB.CodeSql("WHERE nom_option LIKE {0} AND pack_option.fk_id_popv = {1}", string.Format(c_FiltreAvecLike, ficheOptionsPackActuel.TexteFiltreOptions, listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.Id), listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.Id),
                                                                                             null);
                    }
                    else
                    {
                        ficheOptionsPackActuel.Options = Program.GMBD.EnumererOptionVehicule(null, new PDSGBD.MyDB.CodeSql(@"JOIN pack_option ON option_vehicule.id_option_vehicule = pack_option.fk_id_option_vehicule
                                                                                                                             JOIN type_option ON option_vehicule.fk_id_type_option = type_option.id_type_option"),
                                                                                             new PDSGBD.MyDB.CodeSql("WHERE pack_option.fk_id_popv = {0}", listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.Id), null);
                    }
                };
                #endregion

                textBoxNomPack.Text         = listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.NomPack;
                numericUpDownPrixPack.Value = decimal.Parse(listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.PrixPack.ToString());

                ChoixPackVehicule LiaisonExistante = Program.GMBD.EnumererChoixPackVehicule(null, null, new PDSGBD.MyDB.CodeSql("WHERE fk_id_popv = {0}", listeDeroulantePackOptions1.PackOptionPackVehiculeSelectionne.Id), null).FirstOrDefault();
                if (LiaisonExistante != null)
                {
                    numericUpDownPrixPack.Enabled = false;
                    pictureBoxPackA.Enabled       = false;
                    pictureBoxPackR.Enabled       = false;
                    buttonModifierP.Enabled       = false;
                    textBoxNomPack.Enabled        = false;
                }
                else
                {
                    numericUpDownPrixPack.Enabled = true;
                    pictureBoxPackA.Enabled       = true;
                    pictureBoxPackR.Enabled       = true;
                    buttonModifierP.Enabled       = true;
                    textBoxNomPack.Enabled        = true;
                }
            }
            else
            {
                numericUpDownPrixPack.Enabled = true;
            }
        }
        private void buttonCommander_Click(object sender, EventArgs e)
        {
            if (formulaire_Client1.AccesALaListeClient.ClientSelectionne != null)
            {
                bool          CreationOptionSucces     = true;
                bool          CreationPackOptionSucces = true;
                VehiculeVente VehiculeCommande         = new VehiculeVente();
                VehiculeCommande.AnneeConstruction     = 0;
                VehiculeCommande.DateArrivee           = DateTime.MinValue;
                VehiculeCommande.DateCommande          = DateTime.Now;
                VehiculeCommande.DateMiseEnCirculation = DateTime.MinValue;
                VehiculeCommande.Kilometrage           = 0;
                VehiculeCommande.NumeroChassis         = "";
                VehiculeCommande.PrixTotal             = PrixEstimeApresChoix;
                VehiculeCommande.Vehicule        = VehiculeChoisi;
                VehiculeCommande.StatutLivraison = Program.GMBD.EnumererStatut(null, null, new PDSGBD.MyDB.CodeSql("WHERE statut = \"En livraison\""), null).FirstOrDefault();

                if ((VehiculeCommande.EstValide) && (Program.GMBD.AjouterVehiculeVente(VehiculeCommande)))
                {
                    for (int i = 0; i < OptionsChoisies.Count; i++)
                    {
                        ChoixOptionVehicule OV = new ChoixOptionVehicule();
                        OV.VehiculeVente  = VehiculeCommande;
                        OV.OptionVehicule = OptionsChoisies[i];
                        if ((OV.EstValide) && (Program.GMBD.AjouterChoixOptionVehicule(OV)))
                        {
                            //ne rien faire vu que la création a été validée
                        }
                        else
                        {
                            CreationOptionSucces = false;
                        }
                    }
                    if (CreationOptionSucces)
                    {
                        for (int i = 0; i < PackChoisis.Count; i++)
                        {
                            ChoixPackVehicule CPV = new ChoixPackVehicule();
                            CPV.VehiculeVente          = VehiculeCommande;
                            CPV.PackOptionPackVehicule = PackChoisis[i];
                            if ((CPV.EstValide) && (Program.GMBD.AjouterChoixPackVehicule(CPV)))
                            {
                                //ne rien faire vu que la création a été validée
                            }
                            else
                            {
                                CreationPackOptionSucces = false;
                            }
                        }
                    }
                    // Si un problème est déjà survenu à cet endroit, il n'y a aucun intérêt de poursuivre la création
                    if ((!CreationOptionSucces) && (!CreationPackOptionSucces))
                    {
                        Program.GMBD.SupprimerVehiculeVente(VehiculeCommande);
                        errorProvider.SetError(buttonCommander, "Une erreur interne s'est produite, veuillez recommencer");
                    }
                    else
                    {
                        FactureVente DernierId = Program.GMBD.EnumererFactureVente(null, null, null, null).LastOrDefault();
                        FactureVente NouvelleFactureDeCommande = new FactureVente();
                        NouvelleFactureDeCommande.Client           = formulaire_Client1.ClientEnCoursDeTraitement;
                        NouvelleFactureDeCommande.Employe          = Form_Principal.Employe;
                        NouvelleFactureDeCommande.VehiculeVente    = VehiculeCommande;
                        NouvelleFactureDeCommande.PourcentageTva   = 1;
                        NouvelleFactureDeCommande.RemiseSurReprise = 1000;
                        NouvelleFactureDeCommande.DateVente        = DateTime.MinValue;
                        if (DernierId == null)
                        {
                            NouvelleFactureDeCommande.NumeroFacture = string.Format("{0}-1", DateTime.Now.Year);
                        }
                        else
                        {
                            NouvelleFactureDeCommande.NumeroFacture = string.Format("{0}-{1}", DateTime.Now.Year, DernierId.Id + 1);
                        }

                        if ((NouvelleFactureDeCommande.EstValide) && (Program.GMBD.AjouterNouvelleFactureVente(NouvelleFactureDeCommande)))
                        {
                            GenerationFacturePDF NouveauBonDeCommande = new GenerationFacturePDF();
                            NouveauBonDeCommande.GenerationBonDeCommande(NouvelleFactureDeCommande);
                            ValidationProvider.Clear();
                            formulaire_Client1.ViderFormulaire();
                            ficheOptionsChoisies.Options        = null;
                            fichePackOptionsChoisis.PackOptions = null;
                        }
                        else
                        {
                            Program.GMBD.SupprimerVehiculeVente(VehiculeCommande);
                            errorProvider.SetError(buttonCommander, "Une erreur interne s'est produite, veuillez recommencer");
                        }
                    }
                }
            }
        }