/// <summary>
        /// Se produit lors du click sur le bouton d'impression d'une facture
        /// </summary>
        private void buttonImprimerFacture_Click(object sender, EventArgs e)
        {
            errorProvider.Clear();
            FactureVente FactureAModifier = listeDeroulanteFactureVente1.FactureVenteSelectionne;

            FactureAModifier.SurErreur       += FactureVenteEnEdition_SurErreur;
            FactureAModifier.AvantChangement += FactureEnEdition_AvantChangement;
            int Remise = 0;

            if (listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null)
            {
                if (string.IsNullOrWhiteSpace(textBoxRemise.Text))
                {
                    FactureAModifier.RemiseSurReprise = 0;
                }
                else if (int.TryParse(textBoxRemise.Text, out Remise))
                {
                    if (Remise > 0)
                    {
                        FactureAModifier.RemiseSurReprise = Remise;
                    }
                }
                else
                {
                    FactureAModifier.RemiseSurReprise = double.MaxValue;
                }
            }
            else
            {
                FactureAModifier.RemiseSurReprise = 0;
            }
            FactureAModifier.Client         = listeDeroulanteFactureVente1.FactureVenteSelectionne.Client;
            FactureAModifier.DateVente      = DateTime.Now;
            FactureAModifier.PourcentageTva = int.Parse(numericUpDownTVA.Value.ToString());

            if (FactureAModifier.EstValide && Program.GMBD.ModifierFactureVente(FactureAModifier))
            {
                VehiculeVente VehiculeVenteAModifier = listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente;
                VehiculeVenteAModifier.SurErreur            += VehiculeVenteEnEdition_SurErreur;
                VehiculeVenteAModifier.AvantChangement      += VehiculeVenteEnEdition_AvantChangement;
                VehiculeVenteAModifier.DateArrivee           = dateTimePickerDateReception.Value;
                VehiculeVenteAModifier.DateMiseEnCirculation = DateTime.Now;
                VehiculeVenteAModifier.Kilometrage           = int.Parse(numericUpDownKilometrage.Value.ToString());
                VehiculeVenteAModifier.NumeroChassis         = textBoxNumChassis.Text;
                VehiculeVenteAModifier.AnneeConstruction     = int.Parse(numericUpDownAnneeConstruction.Value.ToString());
                VehiculeVenteAModifier.StatutLivraison       = Program.GMBD.EnumererStatut(null, null, new PDSGBD.MyDB.CodeSql("WHERE statut = \"Vendu\""), null).FirstOrDefault();

                if (VehiculeVenteAModifier.EstValide && Program.GMBD.ModifierVehiculeVente(VehiculeVenteAModifier))
                {
                    ClientVehicule NouveauClientVehicule = new ClientVehicule();
                    NouveauClientVehicule.Client          = listeDeroulanteFactureVente1.FactureVenteSelectionne.Client;
                    NouveauClientVehicule.VehiculeActif   = 1;
                    NouveauClientVehicule.Vehicule        = listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente.Vehicule;
                    NouveauClientVehicule.NumeroChassis   = listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente.NumeroChassis;
                    NouveauClientVehicule.Immatriculation = "";
                    if (NouveauClientVehicule.EstValide && Program.GMBD.AjouterClientVehicule(NouveauClientVehicule))
                    {
                        if (listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null)
                        {
                            ClientVehicule VehiculeReprisParLaConcession = listeDeroulanteClientVehicule1.ClientVehiculeSelectionne;
                            VehiculeReprisParLaConcession.VehiculeActif = 0;
                            if ((VehiculeReprisParLaConcession.EstValide) && (Program.GMBD.ModifierClientVehicule(VehiculeReprisParLaConcession)))
                            {
                                RefreshPage();
                                GenerationFacturePDF FacturationPDF = new GenerationFacturePDF();
                                FacturationPDF.GenerationFactureVente(FactureAModifier);
                                listeDeroulanteFactureVente1.FactureVenteSelectionne = null;
                            }
                        }
                        else
                        {
                            RefreshPage();
                            GenerationFacturePDF FacturationPDF = new GenerationFacturePDF();
                            FacturationPDF.GenerationFactureVente(FactureAModifier);
                            listeDeroulanteFactureVente1.FactureVenteSelectionne = null;
                        }
                    }
                }
            }
        }
        private void buttonAcheter_Click(object sender, EventArgs e)
        {
            errorProvider.Clear();
            ValidationProvider.Clear();
            VehiculeVente VehiculeExiste = Program.GMBD.EnumererVehiculeVente(null, new PDSGBD.MyDB.CodeSql("JOIN vehicule ON vehicule_vente.fk_id_vehicule = vehicule.id_vehicule"), new PDSGBD.MyDB.CodeSql("WHERE id_vehicule_vente = {0}", m_Id), null).FirstOrDefault();

            if (VehiculeExiste != null)
            {
                if (formulaire_Client1.ClientEnCoursDeTraitement != null)
                {
                    // Si un véhicule a été repris, une indication de prix sur la reprise du véhicule doit être indiquée et le véhicule ne sera plus actif pour ce client.
                    if (listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null)
                    {
                        int DernierId = -1;
                        IEnumerable <FactureVente> ListeDesFactures = Program.GMBD.EnumererFactureVente(null, null, null, null);
                        if (ListeDesFactures.Count() == 0)
                        {
                            DernierId = 1;
                        }
                        else
                        {
                            DernierId = ListeDesFactures.Last().Id;
                        }

                        // On enregistrement le nouveau véhicule du client
                        ClientVehicule VehiculeAcheterParLeClient = new ClientVehicule();
                        VehiculeAcheterParLeClient.NumeroChassis   = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id)).NumeroChassis;
                        VehiculeAcheterParLeClient.VehiculeActif   = 1;
                        VehiculeAcheterParLeClient.Immatriculation = "";
                        VehiculeAcheterParLeClient.Vehicule        = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id)).Vehicule;
                        VehiculeAcheterParLeClient.Client          = formulaire_Client1.AccesALaListeClient.Client.FirstOrDefault();
                        if ((VehiculeAcheterParLeClient.EstValide) && (Program.GMBD.AjouterClientVehicule(VehiculeAcheterParLeClient)))
                        {
                            // On enregistre la facture
                            FactureVente NouvelleFactureDeVente = new FactureVente();
                            NouvelleFactureDeVente.Client         = formulaire_Client1.ClientEnCoursDeTraitement;
                            NouvelleFactureDeVente.Employe        = Form_Principal.Employe;
                            NouvelleFactureDeVente.VehiculeVente  = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id));
                            NouvelleFactureDeVente.PourcentageTva = int.Parse(numericUpDownTVA.Value.ToString());
                            double remise = 0;
                            if (double.TryParse(textBoxRemise.Text, out remise))
                            {
                                NouvelleFactureDeVente.RemiseSurReprise = remise;
                            }
                            else
                            {
                                NouvelleFactureDeVente.RemiseSurReprise = 0;
                            }
                            NouvelleFactureDeVente.DateVente     = DateTime.Now;
                            NouvelleFactureDeVente.NumeroFacture = string.Format("{0}-{1}", DateTime.Now.Year, DernierId + 1);
                            if ((NouvelleFactureDeVente.EstValide) && (Program.GMBD.AjouterNouvelleFactureVente(NouvelleFactureDeVente)))
                            {
                                if (listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null)
                                {
                                    ClientVehicule VehiculeADesactiver = listeDeroulanteClientVehicule1.ClientVehiculeSelectionne;
                                    VehiculeADesactiver.VehiculeActif = 0;
                                    if ((VehiculeADesactiver.EstValide) && (Program.GMBD.ModifierClientVehicule(VehiculeADesactiver)))
                                    {
                                        VehiculeExiste.StatutLivraison = Program.GMBD.EnumererStatut(null, null, new PDSGBD.MyDB.CodeSql("WHERE statut = \"Vendu\""), null).FirstOrDefault();
                                        if ((VehiculeExiste.EstValide) && (Program.GMBD.ModifierVehiculeVente(VehiculeExiste)))
                                        {
                                            GenerationFacturePDF NouvelleFacturePDF = new GenerationFacturePDF();
                                            NouvelleFacturePDF.GenerationFactureVente(NouvelleFactureDeVente);
                                            ValidationProvider.SetError(buttonAcheter, "Achat correctement effectué");
                                        }
                                    }

                                    ActualiserApresAchat();
                                    ActualiserListeVehiculeDispo();
                                }
                            }
                            else
                            {
                                Program.GMBD.SupprimerClientVehicule(VehiculeAcheterParLeClient);
                            }
                        }
                    }
                    // Sinon l'acheteur ne revend pas de véhicule à la concession donc un traitement simple sera effectué
                    else
                    {
                        int DernierId = -1;
                        IEnumerable <FactureVente> ListeDesFactures = Program.GMBD.EnumererFactureVente(null, null, null, null);
                        if (ListeDesFactures.Count() == 0)
                        {
                            DernierId = 1;
                        }
                        else
                        {
                            DernierId = ListeDesFactures.Last().Id;
                        }


                        ClientVehicule VehiculeAcheterParLeClient = new ClientVehicule();
                        VehiculeAcheterParLeClient.NumeroChassis   = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id)).NumeroChassis;
                        VehiculeAcheterParLeClient.VehiculeActif   = 1;
                        VehiculeAcheterParLeClient.Immatriculation = "";
                        VehiculeAcheterParLeClient.Vehicule        = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id)).Vehicule;
                        VehiculeAcheterParLeClient.Client          = formulaire_Client1.AccesALaListeClient.Client.FirstOrDefault();
                        if ((VehiculeAcheterParLeClient.EstValide) && (Program.GMBD.AjouterClientVehicule(VehiculeAcheterParLeClient)))
                        {
                            FactureVente NouvelleFactureDeVente = new FactureVente();
                            NouvelleFactureDeVente.Client           = formulaire_Client1.ClientEnCoursDeTraitement;
                            NouvelleFactureDeVente.Employe          = Form_Principal.Employe;
                            NouvelleFactureDeVente.VehiculeVente    = ListeVehiculeDispo.First(item => item.Id == int.Parse(m_Id));
                            NouvelleFactureDeVente.PourcentageTva   = int.Parse(numericUpDownTVA.Value.ToString());
                            NouvelleFactureDeVente.RemiseSurReprise = 0;
                            NouvelleFactureDeVente.DateVente        = DateTime.Now;
                            NouvelleFactureDeVente.NumeroFacture    = string.Format("{0}-{1}", DateTime.Now.Year, DernierId + 1);

                            if ((NouvelleFactureDeVente.EstValide) && (Program.GMBD.AjouterNouvelleFactureVente(NouvelleFactureDeVente)))
                            {
                                VehiculeExiste.StatutLivraison = Program.GMBD.EnumererStatut(null, null, new PDSGBD.MyDB.CodeSql("WHERE statut = \"Vendu\""), null).FirstOrDefault();
                                if ((VehiculeExiste.EstValide) && (Program.GMBD.ModifierVehiculeVente(VehiculeExiste)))
                                {
                                    ActualiserApresAchat();
                                    ActualiserListeVehiculeDispo();
                                    GenerationFacturePDF NouvelleFacturePDF = new GenerationFacturePDF();
                                    NouvelleFacturePDF.GenerationFactureVente(NouvelleFactureDeVente);
                                }
                            }
                            else
                            {
                                Program.GMBD.SupprimerClientVehicule(VehiculeAcheterParLeClient);
                            }
                        }
                    }
                }
                else
                {
                    errorProvider.SetError(buttonAcheter, "Veuillez choisir un client");
                }
            }
            else
            {
                errorProvider.SetError(buttonAcheter, "Ce véhicule n'existe plus, veuillez en choisir un autre");
            }
        }
        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");
                        }
                    }
                }
            }
        }