/// <summary>
        /// Methode permettant de vérifier si les champs sont bien remplis avant la modification de la facture
        /// </summary>
        private void FactureEnEdition_AvantChangement(FactureVente Entite, FactureVente.Champs Champ, object ValeurActuelle, object NouvelleValeur, AccumulateurErreur AccumulateurErreur)
        {
            switch (Champ)
            {
            case FactureVente.Champs.RemiseSurReprise:
                int Remise = 0;
                if ((listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null) && (NouvelleValeur.ToString() != ""))
                {
                    if (int.TryParse(textBoxRemise.Text, out Remise))
                    {
                        if ((listeDeroulanteClientVehicule1.ClientVehiculeSelectionne != null) && (int.Parse(textBoxRemise.Text) < 0) || (int.Parse(textBoxRemise.Text) > listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente.PrixTotal))
                        {
                            AccumulateurErreur.NotifierErreur(string.Format("La remise doit être comprise entre 1 € et {0} €", listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente.PrixTotal));
                        }
                    }
                    else
                    {
                        AccumulateurErreur.NotifierErreur(string.Format("La remise doit être comprise entre 1 € et {0} €", listeDeroulanteFactureVente1.FactureVenteSelectionne.VehiculeVente.PrixTotal));
                    }
                }
                break;

            default:
                break;
            }
        }
 private bool ChargerFactureVente()
 {
     if (Id <= 0)
     {
         return(false);
     }
     m_FactureVente = EnumererFactureVente().ElementAt(0);
     return(true);
 }
 private IEnumerable <FactureVente> EnumererFactureVente()
 {
     if (Connexion == null)
     {
         Connexion = Program.GMBD.BD;
     }
     return(FactureVente.Enumerer(Connexion, Connexion.Enumerer(@"SELECT * FROM facture_vente
                                                                 JOIN vehicule_vente ON facture_vente.fk_id_vehicule_vente = vehicule_vente.id_vehicule_vente
                                                                 JOIN client ON facture_vente.fk_id_client = client.id_client
                                                                 JOIN employe ON facture_vente.fk_id_employe = employe.id_employe
                                                                 WHERE facture_vente.fk_id_vehicule_vente = {0}", Id)));
 }
        /// <summary>
        /// Methode permettant de réagir sur l'erreur d'une édition d'une facture
        /// </summary>
        private void FactureVenteEnEdition_SurErreur(FactureVente Entite, FactureVente.Champs Champ, string MessageErreur)
        {
            switch (Champ)
            {
            case FactureVente.Champs.PourcentageTva:
                errorProvider.SetError(numericUpDownTVA, MessageErreur);
                break;

            case FactureVente.Champs.RemiseSurReprise:
                errorProvider.SetError(textBoxRemise, MessageErreur);
                break;
            }
        }
 /// <summary>
 /// Constructeur par défaut
 /// </summary>
 public VehiculeVente()
     : base()
 {
     m_AnneeConstruction     = -1;
     m_DateArrivee           = DateTime.MaxValue;
     m_DateMiseEnCirculation = DateTime.MaxValue;
     m_DateCommande          = DateTime.MaxValue;
     m_Kilometrage           = -1;
     m_PrixTotal             = -1.0;
     m_NumeroChassis         = null;
     m_StatutLivraison       = null;
     m_Vehicule            = null;
     m_ChoixOptionVehicule = null;
     m_ChoixPackVehicule   = null;
     m_FactureVente        = 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");
            }
        }
        /// <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;
                        }
                    }
                }
            }
        }
 public Element(FactureVente FactureVente)
 {
     this.FactureVente = FactureVente;
 }
        /// <summary>
        /// Met à jour la listview des FactureVentes et y insére les elements
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Entites"></param>
        /// <returns></returns>
        private bool MettreAJourListe <T>(IEnumerable <T> Entites)
            where T : class, IEntiteMySQL
        {
            bool EstFactureVente = typeof(T).Equals(typeof(FactureVente));

            if (!EstFactureVente)
            {
                return(false);
            }
            listViewFactureVente.Items.Clear();
            if (Entites == null)
            {
                return(false);
            }
            if (EstFactureVente && (listViewFactureVente.Columns.Count != 2))
            {
                listViewFactureVente.Columns.Clear();

                listViewFactureVente.Columns.Add(new ColumnHeader()
                {
                    Name      = "Prenom",
                    Text      = "Prénom",
                    TextAlign = HorizontalAlignment.Center,
                });
                listViewFactureVente.Columns.Add(new ColumnHeader()
                {
                    Name      = "Nom",
                    Text      = "Nom",
                    TextAlign = HorizontalAlignment.Center,
                });
                listViewFactureVente.Columns.Add(new ColumnHeader()
                {
                    Name      = "NumeroFacture",
                    Text      = "Numéro de facture",
                    TextAlign = HorizontalAlignment.Center,
                });
                listViewFactureVente.Columns.Add(new ColumnHeader()
                {
                    Name      = "Modele",
                    Text      = "Modèle du véhicule",
                    TextAlign = HorizontalAlignment.Center,
                });
                listViewFactureVente.Columns.Add(new ColumnHeader()
                {
                    Name      = "Statut",
                    Text      = "Statut",
                    TextAlign = HorizontalAlignment.Center,
                });
            }

            foreach (T Entite in Entites)
            {
                FactureVente FactureVente = Entite as FactureVente;

                ListViewItem NouvelElement = new ListViewItem()
                {
                    Tag  = Entite,
                    Text = FactureVente.Client.Prenom,
                };
                NouvelElement.SubItems.Add(FactureVente.Client.Nom);
                NouvelElement.SubItems.Add(FactureVente.NumeroFacture);
                NouvelElement.SubItems.Add(FactureVente.VehiculeVente.Vehicule.Modele);
                NouvelElement.SubItems.Add(FactureVente.VehiculeVente.StatutLivraison.StatutOperation);
                listViewFactureVente.Items.Add(NouvelElement);
            }

            listViewFactureVente.Visible = false;
            foreach (ColumnHeader Colonne in listViewFactureVente.Columns)
            {
                Colonne.Width = listViewFactureVente.Width / listViewFactureVente.Columns.Count;
            }

            listViewFactureVente.Visible = true;
            listViewFactureVente_SelectedIndexChanged(listViewFactureVente, EventArgs.Empty);
            return(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");
                        }
                    }
                }
            }
        }