コード例 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            // Permet de valider les modifications
            // Récupération du contenu du combobox
            string selection = labelNom.Text;
            var    vis       = from p in monModele.visiteurs
                               where p.VIS_NOM == selection
                               select p;

            // Remplissage des modifications sur chaque champ de la table de la base de données
            foreach (var resultat in vis)
            {
                resultat.VIS_ADRESSE = tb_adresse.Text;
                resultat.VIS_CP      = tb_cp.Text;
                resultat.VIS_VILLE   = tb_ville.Text;
                //resultat.VIS_DATEEMBAUCHE = Convert.ToDateTime(tb_dateEmbauche);
            }
            // Faire une vérif si une modification a lieu
            MessageBox.Show("Les données ont bien été modifiées !");
            monModele.SaveChanges();

            tb_adresse.ReadOnly      = true;
            tb_cp.ReadOnly           = true;
            tb_dateEmbauche.ReadOnly = true;
            tb_ville.ReadOnly        = true;
        }
コード例 #2
0
ファイル: Form_Medicaments.cs プロジェクト: Existrace/GSBPPE3
        //Permet de supprimer le médicament sélectionné dans le deuxième combobox
        private void btn_suppr_Click(object sender, EventArgs e)
        {
            string selection = tb_nom.Text;

            if (selection == "")
            {
                MessageBox.Show("Erreur, champ vide, suppression impossible. ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (MessageBox.Show("Voulez vous vraiment supprimer ce médicament ?", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    == DialogResult.Yes)
                {
                    var deletemed = from med in monModele.medicaments
                                    where med.MED_NOMCOMMERCIAL == selection
                                    select med;


                    foreach (var med in deletemed)
                    {
                        MessageBox.Show("Le médicament " + med.MED_NOMCOMMERCIAL + " a bien été supprimé.");
                        var deleteConstituer = from p in monModele.constituers
                                               where p.MED_DEPOTLEGAL == med.MED_DEPOTLEGAL
                                               select p;

                        foreach (var p in deleteConstituer)
                        {
                            MessageBox.Show("Le médicament " + med.MED_NOMCOMMERCIAL + " a bien été supprimé.");
                            monModele.constituers.Remove(p);
                            monModele.medicaments.Remove(med);
                        }
                    }
                    monModele.SaveChanges();
                    tb_compo.Text   = "";
                    tb_contre.Text  = "";
                    tb_effet.Text   = "";
                    tb_famille.Text = "";
                    tb_nom.Text     = "";
                    cb_select.Items.Clear();
                    RechargerDonneescb(); // Recharge les données de la comboBox des médicaments
                }
            }
        }
コード例 #3
0
ファイル: Form_Medecins.cs プロジェクト: Existrace/GSBPPE3
        /// <summary>
        /// Permet de modifier dans la base de données
        /// les informations du médecin choisi
        /// (Avec dans la requête where médecin choisi)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string selection = tb_nom.Text;
            var    med       = from p in monModele.praticiens
                               where p.PRA_NOM == selection
                               select p;

            foreach (var resultat in med)
            {
                resultat.PRA_NOM     = tb_nom.Text;
                resultat.PRA_PRENOM  = tb_prenom.Text;
                resultat.PRA_ADRESSE = tb_adresse.Text;
                resultat.PRA_CP      = tb_cp.Text;
                resultat.PRA_VILLE   = tb_ville.Text;
            }

            // Faire une vérif si une modification a lieu
            MessageBox.Show("Les données ont bien été modifiées !");

            // Reperer comment faire le SavesChanges
            monModele.SaveChanges();
        }
コード例 #4
0
        /// <summary>
        /// Permet de supprimer le visiteur concerné
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_suppr_Click(object sender, EventArgs e)
        {
            string selection = tb_nom.Text;

            if (cb_select.Text == "")
            {
                MessageBox.Show("Erreur, champ vide, suppression impossible. ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (MessageBox.Show("Voulez vous vraiment supprimer ce praticien ?", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    == DialogResult.Yes)
                {
                    var deleteprat = from prat in monModele.praticiens
                                     where prat.PRA_NOM == selection
                                     select prat;

                    foreach (var prat in deleteprat)
                    {
                        var deletePossession = from p in monModele.posseders
                                               where p.PRA_NUM == prat.PRA_NUM
                                               select p;
                        foreach (var p in deletePossession)
                        {
                            MessageBox.Show("Le praticien " + prat.PRA_NOM + " a bien été supprimé.");
                            monModele.posseders.Remove(p);
                            monModele.praticiens.Remove(prat);
                        }
                    }
                    monModele.SaveChanges();
                    tb_type.Text     = "";
                    tb_coefConf.Text = "";
                    tb_cp.Text       = "";
                    tb_nom.Text      = "";
                    tb_prenom.Text   = "";
                    tb_adresse.Text  = "";
                    tb_ville.Text    = "";
                    tb_coefNot.Text  = "";
                    cb_select.Items.Clear();
                    //RechargerDonneescb(); // Recharge les données de la comboBox des praticiens
                    RechargerCompteur(); // Recompte le nombres des praticiens
                }
            }
        }
コード例 #5
0
        // Permet de valider l'ajout d'un nouveau rapport
        private void bt_valid_Click(object sender, EventArgs e)
        {
            // Tout d'abord, générer un numéro de dossier random
            // sans que ce numéro soit déjà dans la base
            Random aleatoire = new Random();

            numRapport = aleatoire.Next(7, 100); //Génère un entier aléatoire positif

            // Permet de générer et d'attribuer un numéro de rapport, sans que celui-ci ne soit déjà dans la base
            do
            {
                numRapport = aleatoire.Next(1, 1000);
            } while (monModele.rapport_visite.Any(a => a.RAP_NUM == numRapport));
            MessageBox.Show("Bravo, numéro de rapport généré : " + numRapport + ".");
            // Ensuite il faut récupérer le matricule du visiteur
            var req = from p in monModele.visiteurs
                      where p.VIS_NOM == tb_nomVis.Text
                      select p.VIS_MATRICULE;

            foreach (var res in req)
            {
                matriculeVis = res;
            }

            // Maintenant, on veut récupérer la date d'aujourd'hui pour la mettre en DATE DE SAISIE
            string dateToday = DateTime.Now.ToString("yyyy-MM-dd");


            // Maintenant vérification des saisies
            //Vérifie que rien ne soit vide
            if (cb_praticien.Text == "" && tb_bilan.Text == "" && cb_motif.Text == "")
            {
                MessageBox.Show("Un ou plusieurs champs est/sont vide(s)", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                try
                {
                    // ETAPE UN RECUP MOTIF
                    // Récupération du contenu du combobox du motif
                    string recupMotif = cb_motif.SelectedItem.ToString();
                    // Dans le combobox du type, on récupère le code du motif
                    // pour pouvoir le mettre dans la base de données

                    var req1 = from p in monModele.motifs
                               where p.MOT_LIBELLE == recupMotif
                               select p.MOT_CODE;

                    // Récupération du code du motif
                    foreach (var res in req1)
                    {
                        motif = res;
                    }


                    // ETAPE UN RECUP MATRICULE PRATICIEN PREMIER
                    // Récupération du contenu du comboBox du premier praticien (obligatoire)
                    string recupPra = cb_praticien.SelectedItem.ToString();

                    var reqRecupPra = from p in monModele.praticiens
                                      where p.PRA_NOM == recupPra
                                      select p.PRA_NUM;
                    // Récupération du matricule du premier praticien
                    foreach (var recup in reqRecupPra)
                    {
                        matriculePra = recup;
                    }


                    // ETAPE UN RECUP MATRICULE PRATICIEN BIS SI SELECTION PAS AUCUN
                    if (cb_praticienBis.Text == "Aucun")
                    {
                        // A mettre null dans la base de données
                        matriculePraBis = 0;
                        var unRapport = new rapport_visite()
                        {
                            VIS_MATRICULE        = matriculeVis,
                            RAP_NUM              = numRapport,
                            PRA_NUM              = matriculePra,
                            PRA_NUM_REMPLACANT   = null,
                            RAP_DATE_SAISIE      = Convert.ToDateTime(dateToday),
                            RAP_DATE_VISITE      = Convert.ToDateTime(dateVisite),
                            RAP_BILAN            = texteBilan,
                            RAP_MOTIF_AUTRE      = null,
                            MOT_CODE             = motif,
                            RAP_DOCUMENTATION    = 0,
                            RAP_SAISIEDEFINITIVE = 0
                        };

                        // Ajout du rapport dans la liste gérees par le programme
                        monModele.rapport_visite.Add(unRapport);
                        // Sauvegarde de l'ajout dans la BDD
                        monModele.SaveChanges();

                        MessageBox.Show("Nouveau rapport " + numRapport + " bien ajouté. Merci " + tb_nomVis.Text + ".", "Ajout confirmé", MessageBoxButtons.OK);
                        panelMed.Visible = true;
                        bt_valid.Enabled = false;
                    }
                    else
                    {
                        // Récupération du contenu du comboBox du deuxième praticien
                        string recupPraBis = cb_praticienBis.SelectedItem.ToString();

                        var reqRecupPraBis = from p in monModele.praticiens
                                             where p.PRA_NOM == recupPraBis
                                             select p.PRA_NUM;
                        // Récupération du matricule du deuxième praticien
                        foreach (var recup in reqRecupPraBis)
                        {
                            matriculePraBis = recup;
                        }

                        var unRapport = new rapport_visite()
                        {
                            VIS_MATRICULE        = matriculeVis,
                            RAP_NUM              = numRapport,
                            PRA_NUM              = matriculePra,
                            PRA_NUM_REMPLACANT   = matriculePraBis,
                            RAP_DATE_SAISIE      = Convert.ToDateTime(dateToday),
                            RAP_DATE_VISITE      = Convert.ToDateTime(dateVisite),
                            RAP_BILAN            = texteBilan,
                            RAP_MOTIF_AUTRE      = null,
                            MOT_CODE             = motif,
                            RAP_DOCUMENTATION    = 0,
                            RAP_SAISIEDEFINITIVE = 0
                        };

                        // Ajout du rapport dans la liste gérees par le programme
                        monModele.rapport_visite.Add(unRapport);
                        // Sauvegarde de l'ajout dans la BDD
                        monModele.SaveChanges();

                        MessageBox.Show("Nouveau rapport " + numRapport + " bien ajouté. Merci " + tb_nomVis.Text + ".", "Ajout confirmé", MessageBoxButtons.OK);
                        panelMed.Visible = true;
                        bt_valid.Enabled = false;
                    }

                    // ETAPE RECUP DATE DE VISITE
                    dateVisite = dateVisitePick.Value.ToString("yyyy-MM-dd");
                    // ETAPE RECUP SAISIE BILAN
                    texteBilan = tb_bilan.Text;
                }
                catch (NullReferenceException)
                {
                    MessageBox.Show("Erreur, reessayez.", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                catch (DbUpdateException)
                {
                    MessageBox.Show("Problème interne base de données....", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Permet d'ajouter un visiteur avec les informations récupérées
        /// dans les Textbox remplies
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Valider_Click(object sender, EventArgs e)
        {
            using (var context = new GSB_PPE3Entities1())
            {
                if (tb_Matricule.Text == "" && tb_Nom.Text == "" && tb_Prenom.Text == "" &&
                    tb_Adresse.Text == "" && tb_CP.Text == "" && tb_Ville.Text == "" &&
                    dtp_DateEmbauche.Text == "" && tb_Login.Text == "" && tb_MotDePasse.Text == "")
                {
                    MessageBox.Show("Tous les champs ne sont pas renseignés ! ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else // Si les champs ne sont pas vides alors, il faut les contrôler
                {
                    // Vérification si les données rentrées existent déjà
                    var req = from v in monModele.visiteurs
                              select v;

                    //string num = req.First();
                    bool identique = false;
                    // Il faut parcourir la liste pour savoir si le num tapé correspond à un num dans la liste
                    foreach (var resultat in req)
                    {
                        if (tb_Matricule.Text == resultat.VIS_MATRICULE)
                        {
                            identique = true;
                        }
                    }
                    // Si dans la liste, on a trouvé un numéro similaire à celui saisi dans le textbox du matricule
                    if (identique == true)
                    {
                        MessageBox.Show("Le numéro de visiteur existe déjà. En choisir un autre. ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        try
                        {
                            // Maintenant, il faut récupérer le code de la région à l'aide du comboBox de la région
                            string selectionRegion = cb_region.SelectedItem.ToString();

                            var req2 = from p in monModele.regions
                                       where p.REG_NOM == selectionRegion
                                       select p.REG_CODE;
                            foreach (var res in req2)
                            {
                                codeRegion = res;
                            }

                            // Déclaration d'un nouveau visiteur
                            var unVisiteur = new visiteur()
                            {
                                VIS_MATRICULE    = tb_Matricule.Text,
                                VIS_NOM          = tb_Nom.Text,
                                VIS_PRENOM       = tb_Prenom.Text,
                                VIS_ADRESSE      = tb_Adresse.Text,
                                VIS_CP           = tb_CP.Text,
                                VIS_VILLE        = tb_Ville.Text,
                                VIS_DATEEMBAUCHE = Convert.ToDateTime(dtp_DateEmbauche.Text),
                                VIS_LOGIN        = tb_Login.Text,
                                VIS_MDP          = tb_MotDePasse.Text
                            };

                            // Ajout du visiteur dans la liste gérees par le programme
                            context.visiteurs.Add(unVisiteur);
                            // Sauvegarde de l'ajout dans la BDD
                            context.SaveChanges();
                            MessageBox.Show("Le visiteur " + tb_Nom.Text + " " + tb_Prenom.Text + " à bien été ajouté", "ok", MessageBoxButtons.OK);
                            tb_Matricule.Text     = "";
                            tb_Nom.Text           = "";
                            tb_Prenom.Text        = "";
                            tb_Adresse.Text       = "";
                            tb_CP.Text            = "";
                            tb_Ville.Text         = "";
                            dtp_DateEmbauche.Text = "";
                            tb_Login.Text         = "";
                            tb_MotDePasse.Text    = "";
                        }
                        catch (NullReferenceException) // Si le visiteur sélectionné n'est pas dans la région sélectionnée
                        {
                            MessageBox.Show("Erreur, des champs ne sont pas renseignés, les champs sont tous obligatoires." +
                                            ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        catch (FormatException)
                        {
                            MessageBox.Show("Erreur, format de la chaine d'une saisie incorrecte, retentez.." +
                                            ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Créer dans la base de données, un nouveau médecin
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Valider_Click(object sender, EventArgs e)
        {
            using (var context = new GSB_PPE3Entities1())
            {
                // Vérification si les champs sont vides. S'ils sont vides, message d'erreur.
                if (tb_Nom.Text == "" && tb_Prenom.Text == "" &&
                    tb_Adresse.Text == "" && tb_CP.Text == "" && tb_Ville.Text == "" &&
                    tb_coefNot.Text == "" && tb_coefConf.Text == "")
                {
                    MessageBox.Show("Tous les champs ne sont pas renseignés ! ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else // Si les champs ne sont pas vides alors, il faut les contrôler
                {
                    // Vérification si les données rentrées existent déjà
                    var req = from p in monModele.praticiens
                              select p;


                    try
                    {
                        // Récupération du contenu du combobox du type du praticien
                        string selectionType = cb_type.SelectedItem.ToString();
                        // Dans le combobox du type, on récupère le libelle
                        // Il faut le code du type du praticien

                        var req1 = from p in monModele.type_praticien
                                   where p.TYP_LIBELLE == selectionType
                                   select p.TYP_CODE;
                        foreach (var res in req1)
                        {
                            codeType = res;
                        }

                        // Maintenant, il faut récupérer le code de la région à l'aide du comboBox de la région
                        string selectionRegion = cb_region.SelectedItem.ToString();

                        var req2 = from p in monModele.regions
                                   where p.REG_NOM == selectionRegion
                                   select p.REG_CODE;
                        foreach (var res in req2)
                        {
                            codeRegion = res;
                        }

                        // Tout d'abord, générer un numéro de dossier random
                        // sans que ce numéro soit déjà dans la base
                        Random aleatoire = new Random();
                        matriculeAlea = aleatoire.Next(7, 100); //Génère un entier aléatoire positif

                        // Permet de générer et d'attribuer un numéro de rapport, sans que celui-ci ne soit déjà dans la base
                        do
                        {
                            matriculeAlea = aleatoire.Next(1, 300);
                        } while (monModele.praticiens.Any(a => a.PRA_NUM == matriculeAlea));
                        MessageBox.Show("Bravo, numéro de rapport généré : " + matriculeAlea + ".");
                        var unPraticien = new praticien()
                        {
                            PRA_NUM           = matriculeAlea,
                            PRA_NOM           = tb_Nom.Text,
                            PRA_PRENOM        = tb_Prenom.Text,
                            PRA_ADRESSE       = tb_Adresse.Text,
                            PRA_CP            = tb_CP.Text,
                            PRA_VILLE         = tb_Ville.Text,
                            PRA_COEFNOTORIETE = Convert.ToInt32(tb_coefNot.Text),
                            PRA_COEFCONFIANCE = Convert.ToInt32(tb_coefConf.Text),
                            TYP_CODE          = codeType,
                            REG_CODE          = codeRegion
                        };

                        // Ajout du visiteur dans la liste gérees par le programme
                        context.praticiens.Add(unPraticien);
                        // Sauvegarde de l'ajout dans la BDD
                        context.SaveChanges();
                        MessageBox.Show("Le praticien " + tb_Nom.Text + " " + tb_Prenom.Text + " à bien été ajouté", "Ajout confirmé", MessageBoxButtons.OK);

                        tb_Nom.Text      = "";
                        tb_Prenom.Text   = "";
                        tb_Adresse.Text  = "";
                        tb_CP.Text       = "";
                        tb_Ville.Text    = "";
                        tb_coefNot.Text  = "";
                        tb_coefConf.Text = "";
                    }
                    catch (NullReferenceException)     // Si le visiteur sélectionné n'est pas dans la région sélectionnée
                    {
                        MessageBox.Show("Erreur, des champs ne sont pas renseignés, les champs sont tous obligatoires." +
                                        ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    catch (FormatException)
                    {
                        MessageBox.Show("Erreur, format de la chaine d'une saisie incorrecte, retentez.." +
                                        ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// Permet d'ajouter un médicament dans la base de données
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Valider_Click(object sender, EventArgs e)
        {
            using (var context = new GSB_PPE3Entities1())
            {
                // Vérification si les champs sont vides. S'ils sont vides, message d'erreur.
                if (tb_Matricule.Text == "" && tb_Nom.Text == "" &&
                    tb_Compo.Text == "" && tb_contreIndic.Text == "" &&
                    tb_effets.Text == "")
                {
                    MessageBox.Show("Tous les champs ne sont pas renseignés ! ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else // Si les champs ne sont pas vides alors, il faut les contrôler
                {
                    // Vérification si les données rentrées existent déjà
                    var req = from m in monModele.medicaments
                              select m;

                    //string num = req.First();
                    bool identique = false;
                    // Il faut parcourir la liste pour savoir si le num tapé correspond à un num dans la liste
                    foreach (var resultat in req)
                    {
                        if (tb_Matricule.Text == Convert.ToString(resultat.MED_DEPOTLEGAL))
                        {
                            identique = true;
                        }
                    }
                    // Si dans la liste, on a trouvé un numéro similaire à celui saisi dans le textbox du matricules
                    if (identique == true)
                    {
                        MessageBox.Show("Le numéro du médicament existe déjà. En choisir un autre. ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        try
                        {
                            // Récupération du contenu du combobox de la famille du médicament
                            string selectionFamille = cb_famille.SelectedItem.ToString();
                            // Dans le combobox du type, on récupère le libelle
                            // Il faut le code de la famille

                            var req1 = from p in monModele.familles
                                       where p.FAM_LIBELLE == selectionFamille
                                       select p.FAM_CODE;

                            foreach (var res in req1)
                            {
                                codeFamille = res;
                            }

                            var unMedicament = new medicament()
                            {
                                MED_DEPOTLEGAL    = tb_Matricule.Text,
                                MED_NOMCOMMERCIAL = tb_Nom.Text,
                                MED_COMPOSITION   = tb_Compo.Text,
                                MED_EFFETS        = tb_effets.Text,
                                MED_CONTREINDIC   = tb_contreIndic.Text,
                                FAM_CODE          = codeFamille
                            };
                            // Ajout du médicament dans la liste gérees par le programme
                            context.medicaments.Add(unMedicament);
                            // Sauvegarde de l'ajout dans la BDD
                            context.SaveChanges();

                            MessageBox.Show("Le médicament " + tb_Nom.Text + "  à bien été ajouté", "Ajout confirmé", MessageBoxButtons.OK);
                            tb_Matricule.Text   = "";
                            tb_Nom.Text         = "";
                            tb_effets.Text      = "";
                            tb_Compo.Text       = "";
                            tb_contreIndic.Text = "";
                        }
                        catch (NullReferenceException) // Si le médicament sélectionné n'est pas dans la famille sélectionnée
                        {
                            MessageBox.Show("Erreur, des champs ne sont pas renseignés, les champs sont tous obligatoires." +
                                            ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        catch (FormatException)
                        {
                            MessageBox.Show("Erreur, format de la chaine d'une saisie incorrecte, retentez.." +
                                            ". ", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }

                        /*
                         * // Pour récupérer la valeur dans le comboBox
                         * string selection = cb_famille.SelectedItem.ToString();
                         * var unMedicament = new medicament()
                         * {
                         *  MED_DEPOTLEGAL = tb_Matricule.Text,
                         *  MED_NOMCOMMERCIAL = tb_Nom.Text,
                         *  MED_COMPOSITION = tb_Compo.Text,
                         *  MED_EFFETS = tb_effets.Text,
                         *  MED_CONTREINDIC = tb_contreIndic.Text,
                         *  FAM_CODE = selection
                         * };
                         * // Ajout du visiteur dans la liste gérees par le programme
                         * context.medicaments.Add(unMedicament);
                         * // Sauvegarde de l'ajout dans la BDD
                         * context.SaveChanges();
                         *
                         * MessageBox.Show("Le médicament " + tb_Nom.Text + "  à bien été ajouté", "ok", MessageBoxButtons.OK);
                         * tb_Matricule.Text = "";
                         * tb_Nom.Text = "";
                         * tb_effets = null;
                         * tb_Compo = null;
                         * tb_contreIndic = null;*/
                    }
                }
            }
        }