예제 #1
0
        /// <summary>
        /// Méthode reliée au bouton CdR permettant de devenir CdR si on ne l'est pas, ou accéder à la page CdR si on l'est. Inaccessible pour les utilisateurs restreints en clients
        /// </summary>
        /// <param name="sender">Bouton ""</param>
        /// <param name="e">Evenement Click</param>
        private void CdR_Click(object sender, RoutedEventArgs e)
        {
            string query = $"select CdR from client where Identifiant = \"{this.id_client}\" ;";
            List <List <string> > liste = Commandes_SQL.Select_Requete(query);

            if (Convert.ToInt32(liste[0][0]) == 0)
            {
                string query2 = $"Update cooking.client set CdR = 1 where Identifiant = \"{this.id_client}\" ;";
                string ex     = Commandes_SQL.Insert_Requete(query2);
                CdR.Content = "Page CdR";
            }
            else
            {
                Page_CdR Page_CdR = new Page_CdR(this.id_client);
                this.NavigationService.Navigate(Page_CdR);
            }
        }
        /// <summary>
        /// Méthode reliée au bouton "Créer la recette" permettant d'ajouter une nouvelle recette dans la database
        /// </summary>
        /// <param name="sender">Bouton "Créer la recette"</param>
        /// <param name="e">Evenement Click</param>
        private void Creer_Recette_Click(object sender, RoutedEventArgs e)
        {
            //récupération infos rentrées par l'utilisateur
            string nom_recette_input         = Nom_Recette_Box.Text;
            string type_recette_input        = Type_Recette_Box.Text;
            string prix_recette_input        = Prix_Recette_Box.Text;
            string description_recette_input = Description_Recette_Box.Text;
            List <List <string> > liste_produit_nom_quantite = new List <List <string> >();

            for (int i = 0; i < Produits_ListView.Items.Count; i++)
            {
                Produit produit_observe = Produits_ListView.Items[i] as Produit;

                // si la quantité du produit observé n'est pas nulle, il fait partie de la recette
                if (produit_observe.Quantite != null)
                {
                    List <string> temp = new List <string>();
                    temp.Add(produit_observe.Nom_Produit);
                    temp.Add(produit_observe.Quantite);
                    liste_produit_nom_quantite.Add(temp);
                }
            }

            // sécurité pour les input
            if (nom_recette_input == "" || nom_recette_input.Length > 100)
            {
                Erreur_Message.Content = "Nom doit contenir 1 à 100 caractères";
            }
            else if (type_recette_input == "" || !type_recette_input.All(Char.IsLetter))
            {
                Erreur_Message.Content = "Type invalide";
            }
            else if (prix_recette_input == "" || !int.TryParse(prix_recette_input, out _) || Convert.ToInt32(prix_recette_input) > 40 || Convert.ToInt32(prix_recette_input) < 10)
            {
                Erreur_Message.Content = "Prix doit être entre 10 et 40";
            }
            else if (description_recette_input == "" || description_recette_input.Length > 256)
            {
                Erreur_Message.Content = "Description est limitée à 256 caractères";
            }
            else if (liste_produit_nom_quantite.Count == 0)
            {
                Erreur_Message.Content = "Aucun produit ajouté";
            }
            else
            {
                Erreur_Message.Content = "";

                // query pour insérer la nouvelle recette dans la database avec les input comme valeurs
                string query1 = $"INSERT INTO cooking.recette VALUES (\"{nom_recette_input}\",\"{type_recette_input}\",\"{description_recette_input}\",\"{prix_recette_input}\",2,0,\"{this.id_client}\");";
                string query2 = "";
                string query4 = "";
                for (int i = 0; i < liste_produit_nom_quantite.Count; i++)
                {
                    // query pour insérer un nouveau produit relié à sa recette dans la database avec les input comme valeurs
                    query2 += $"INSERT INTO cooking.composition_recette VALUES (\"{nom_recette_input}\",\"{liste_produit_nom_quantite[i][0]}\",{liste_produit_nom_quantite[i][1]});";

                    // mise à jour des sotck min et max des produits
                    // on a décidé d'augmenter stock min de 1 fois la quantité nécessaire pour cette recette (choix expliqué dans le rapport)
                    // stock max est augmenté de 2 fois la quantité nécessaire pour cette recette
                    string query3 = $"Select Stock_min, Stock_max from cooking.produit where Nom_Produit = \"{liste_produit_nom_quantite[i][0]}\" ;";
                    List <List <string> > Liste_stock_min_max = Commandes_SQL.Select_Requete(query3);

                    int Nv_Stock_min = Convert.ToInt32(Liste_stock_min_max[0][0]) + Convert.ToInt32(liste_produit_nom_quantite[i][1]);
                    int Nv_Stock_max = Convert.ToInt32(Liste_stock_min_max[0][1]) + 2 * Convert.ToInt32(liste_produit_nom_quantite[i][1]);
                    query4 += $"Update cooking.produit set Stock_min = {Nv_Stock_min}, Stock_max = {Nv_Stock_max} where Nom_Produit = \"{liste_produit_nom_quantite[i][0]}\" ;";
                }
                string query = query1 + query2 + query4;                                      // si la recette porte le même nom qu'une recette existante, l'exécution échoue à la query1. Cela empêche l'exécution des query 2 et 4
                string ex    = Commandes_SQL.Insert_Requete(query);
                if (ex == $"Duplicate entry '{nom_recette_input}' for key 'recette.PRIMARY'") // si le nom_recette (clé primaire) existe déjà dans la database.recette
                {
                    Erreur_Message.Content = "Nom déjà utilisé";
                }
                else
                {
                    Page_CdR page_CdR = new Page_CdR(this.id_client);
                    this.NavigationService.Navigate(page_CdR);
                }
            }
        }
        /// <summary>
        /// Méthode reliée au bouton "Reinitialiser" servant à clear toutes les textbox
        /// </summary>
        /// <param name="sender">Bouton "Reinitialiser"</param>
        /// <param name="e">Evenement Click</param>
        private void Reset_Click(object sender, RoutedEventArgs e)
        {
            Page_CdR page_CdR = new Page_CdR(this.id_client);

            this.NavigationService.Navigate(page_CdR);
        }