/// <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 votre compte" qui crée un nouveau client dans la database /// </summary> /// <param name="sender">Bouton créer votre compte creer</param> /// <param name="e">Evenment Click</param> private void Button_Click_creer_compte_client(object sender, RoutedEventArgs e) { // récupération des input string id = idTextBox.Text; string mdp = mdpTextBox.Text; string nom = nomTextBox.Text; string tel = telTextBox.Text; // sécurité pour les input if (id == "" || id.Length > 50) { error.Content = "Identifiant invalide (1-50 caractères)"; } else if (mdp == "" || mdp.Length > 50) { error.Content = "Mot de passe invalide (1-50 caractères)"; } else if (nom == "" || nom.Length > 50) { error.Content = "Nom invalide (1-50 caractères)"; } else if (tel == "" || !int.TryParse(tel, out _) || tel.Length > 15) { error.Content = "Téléphone invalide (1-15 caractères)"; } else { error.Content = ""; // création du client dans la database à partir des input string requete = $"INSERT INTO cooking.client VALUES (\"{id}\",\"{mdp}\",\"{nom}\",\"{tel}\",0,False);"; string ex = Commandes_SQL.Insert_Requete(requete); if (ex == $"Duplicate entry '{id}' for key 'client.PRIMARY'") // si l'identifiant (clé primaire) existe déjà dans la database.client { error.Content = "Identifiant déjà utilisé"; } else { // on navigue vers la page Interface_Home Interface_Home homepage = new Interface_Home(); this.NavigationService.Navigate(homepage); } } }
/// <summary> /// Méthode reliée au bouton "Créer le fournisseur" qui crée un nouveau fournisseur dans la database /// </summary> /// <param name="sender">bouton "Créer le fournisseur"</param> /// <param name="e">Evenement Click</param> private void Creer_Fournisseur_Click(object sender, RoutedEventArgs e) { // récupération des input string nom = textbox_nom.Text; string refe = textbox_ref.Text; string tel = textbox_tel.Text; // sécurité pour les input if (nom == "" || nom.Length > 50) { Erreur_message.Content = "Nom invalide (1-50 caractères)"; } else if (refe == "" || refe.Length > 50) { Erreur_message.Content = "Référence invalide (1-50 caractères)"; } else if (tel == "" || !int.TryParse(tel, out _) || tel.Length > 15) { Erreur_message.Content = "Téléphone invalide (1-15 caractères)"; } else { Erreur_message.Content = ""; // création du fournisseur dans la database à partir des input string query = $"insert into cooking.fournisseur VALUES(\"{refe}\",\"{nom}\",\"{tel}\");"; string ex = Commandes_SQL.Insert_Requete(query); if (ex == $"Duplicate entry '{refe}' for key 'fournisseur.PRIMARY'") // si la ref_fournisseur (clé primaire) existe déjà dans la database.fournisseur { Erreur_message.Content = "Nom déjà utilisé"; } else { // on navigue vers la page Admin Page_Admin page_admin = new Page_Admin(this.id_admin); this.NavigationService.Navigate(page_admin); } } }
/// <summary> /// Méthode reliée au bouton "Tricher (+50cooks)" permettant d'augmenter le solde du client de 50 cooks. /// A l'heure actuelle si le solde d'un client n'est pas suffisant pour payer l'intégralité de la commande, le client est invité /// à payer le reste par CB. Comme indiqué dans le CdC cette page (Page_Payer_CB ici) n'avait pas à être réellement designée. /// Afin de permettre le test de nos fonctions, nous avons donc ajouté ce bouton permettant à un nouveau client de se donner des crédits cooks /// et ainsi pouvoir valider ses commandes. /// Après avoir triché la valeur du bouton valider est ré-évaluée /// Cette méthode serait évidemment retirée dans le cadre d'une réelle mise en ligne de l'application. /// </summary> /// <param name="sender">Bouton "Tricher"</param> /// <param name="e">Evenement Click</param> private void Tricher_Click(object sender, RoutedEventArgs e) { string updatesolde = Convert.ToString(Convert.ToInt32(Solde.Content) + 50); string query = $"Update cooking.client set Credit_Cook = {updatesolde} where Identifiant = \"{this.id_client}\" ;"; string ex = Commandes_SQL.Insert_Requete(query); Solde.Content = updatesolde; int difference = Convert.ToInt32(Solde.Content) - Convert.ToInt32(Total.Content); if (difference >= 0) { Reste_a_payer.Content = "0"; Nv_Solde.Content = Convert.ToString(difference); Valider.Content = "Confirmer"; } else { Nv_Solde.Content = "0"; Reste_a_payer.Content = Convert.ToString(Math.Abs(difference)); Valider.Content = "Payer le reste par CB"; } }
/// <summary> /// Méthode reliée au bouton "Créer le produit" qui crée un nouveau produit dans la database /// </summary> /// <param name="sender">Bouton "Créer le produit"</param> /// <param name="e">Evenement Click</param> private void Creer_Produit_Click(object sender, RoutedEventArgs e) { // récupération des input string nom_produit = textbox_nom.Text; string categorie = textbox_categorie.Text; string unite = textbox_unite.Text; string ref_fournisseur = textbox_ref_fournisseur.Text; string stock = textbox_stock.Text; string stock_min = textbox_stock_min.Text; string stock_max = textbox_stock_max.Text; // sécurité pour les input if (nom_produit == "" || nom_produit.Length > 50) { Erreur_message.Content = "Nom invalide (1-50 caractères)"; } else if (categorie == "" || categorie.Length > 50) { Erreur_message.Content = "Categorie invalide (1-50 caractères)"; } else if (unite == "" || unite.Length > 10) { Erreur_message.Content = "Unite invalide (1-10 caractères)"; } else if (ref_fournisseur == "" || ref_fournisseur.Length > 50) { Erreur_message.Content = "Fournisseur invalide (1-50 caractères)"; } else if (stock == "" || !int.TryParse(stock, out _)) { Erreur_message.Content = "Stock invalide"; } else if (stock_min == "" || !int.TryParse(stock_min, out _)) { Erreur_message.Content = "Stock minimal invalide"; } else if (stock_max == "" || !int.TryParse(stock_max, out _) || Convert.ToInt32(stock_max) < Convert.ToInt32(stock_min) || Convert.ToInt32(stock_max) < Convert.ToInt32(stock)) { Erreur_message.Content = "Stock maximal invalide"; } else { Erreur_message.Content = ""; //on vérifie si le fournisseur du produit qu'on veut créer existe dans notre database car Ref_Fournisseur = Foreign key de l'entité produit string query = "select Ref_Fournisseur from cooking.fournisseur;"; List <List <string> > liste_Ref_fournisseur = Commandes_SQL.Select_Requete(query); bool ref_fournisseur_dans_BDD = false; for (int i = 0; i < liste_Ref_fournisseur.Count; i++) { if (liste_Ref_fournisseur[i][0] == ref_fournisseur) { ref_fournisseur_dans_BDD = true; } } if (!ref_fournisseur_dans_BDD) { Erreur_message.Content = "Fournisseur inconnu"; } else { // création du fournisseur dans la database à partir des input query = $"insert into cooking.produit values (\"{nom_produit}\",\"{categorie}\",\"{unite}\",{stock},{stock_min},{stock_max},\"{ref_fournisseur}\")"; string ex = Commandes_SQL.Insert_Requete(query); if (ex == $"Duplicate entry '{nom_produit}' for key 'produit.PRIMARY'") // si le nom_produit (clé primaire) existe déjà dans la database.produit { Erreur_message.Content = "Nom déjà utilisé"; } else { // on navigue vers la page Admin Page_Admin page_admin = new Page_Admin(this.id_admin); this.NavigationService.Navigate(page_admin); } } } }
/// <summary> /// Méthode reliée au bouton "Carnet de commande des produits XML" permettant de générer un fichier XML contenant La liste des produits dont la quantité est inférieure à la quantité minimale classé par fournisseur puis par produit /// </summary> /// <param name="sender">Bouton "Carnet de commande des produits XML"</param> /// <param name="e">Evenement Click</param> private void Carnet_commandes_produit_XML_Click(object sender, RoutedEventArgs e) { // mise a jour stock min et max produits pas utilisés depuis 30 jours DateTime Trente_jours_avant = DateTime.Now.AddDays(-30); // on met la date en format AAAA-MM-JJ car MySLQ interprète la date comme cela string datelimite = $"{Trente_jours_avant.Year}/{Trente_jours_avant.Month}/{Trente_jours_avant.Day}"; string auj = $"{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}"; // query permettant de récupérer le nom, stock_min, stock_max des produits qui n'ont pas été utilisé depuis 30 jours string query = $"select distinct(Nom_Produit), Stock_min, Stock_max " + $"from cooking.produit " + $"where Nom_Produit not in " + $"(select distinct(Nom_Produit) " + $"from (cooking.commande natural join cooking.composition_commande) natural join cooking.composition_recette " + $"where Date between \"{datelimite}\" AND \"{auj}\");"; List <List <string> > Liste_Produit_a_modifier = Commandes_SQL.Select_Requete(query); // pour chaque produit on fait la mise à jour des quantité for (int i = 0; i < Liste_Produit_a_modifier.Count; i++) { string nom_produit = Liste_Produit_a_modifier[i][0]; int Nv_Stock_Min = Convert.ToInt32(Liste_Produit_a_modifier[i][1]) / 2; int Nv_Stock_Max = Convert.ToInt32(Liste_Produit_a_modifier[i][2]) / 2; query = $"Update cooking.produit set Stock_min = {Nv_Stock_Min}, Stock_max = {Nv_Stock_Max} where Nom_Produit = \"{nom_produit}\";"; string ex = Commandes_SQL.Insert_Requete(query); } // query permettant de récupérer les produits triés par fournisseur puis par leur nom query = "select Nom_Produit,Categorie,Unite,Stock,Stock_min,Stock_max,Ref_Fournisseur from cooking.produit where Stock < Stock_min order by Ref_Fournisseur,Nom_Produit;"; List <List <string> > liste_produit_a_commander = Commandes_SQL.Select_Requete(query); List <Fournisseur> liste_Fournisser_XML = new List <Fournisseur>(); //liste finale qu'on va rentrer dans XML List <Produit> liste_produits_pour_un_fournisseur = new List <Produit>(); int a = 0; // compteur utilisé pour rassembler les produits d'un même fournisseur dans une liste bool changement_fournisseur_iteration_precedente = true; // pour savoir si on a changé de fournisseur à l'itération précédente for (int i = 0; i < liste_produit_a_commander.Count; i += a) { a = 0; // si on a changé de fournisseur à l'itération précédente, on doit rentrer dans la boucle // de même, si le fournisseur du produit regardé est le même que celui du produit de l'itération précédente, on doit rentrer dans la boucle // la condition du dessus est valable car les produits sont triés par fournisseur dans la liste des produits commandés while (changement_fournisseur_iteration_precedente || liste_produit_a_commander[i + a][6] == liste_produit_a_commander[i + a - 1][6]) { // infos du produit qu'on regarde Produit produit_concerne = new Produit { Nom_Produit = liste_produit_a_commander[i + a][0], Categorie = liste_produit_a_commander[i + a][1], Unite = liste_produit_a_commander[i + a][2], Stock = liste_produit_a_commander[i + a][3], Stock_min = liste_produit_a_commander[i + a][4], Stock_max = liste_produit_a_commander[i + a][5], Ref_Fournisseur = liste_produit_a_commander[i + a][6], Quantite_a_commander = Convert.ToString(Convert.ToInt32(liste_produit_a_commander[i + a][5]) - Convert.ToInt32(liste_produit_a_commander[i + a][3])) }; liste_produits_pour_un_fournisseur.Add(produit_concerne); //tous les produits à commander pour un fournisseur a++; if (i + a == liste_produit_a_commander.Count) { break; //si on atteint la taille de la liste des produits à commander on sort du while } changement_fournisseur_iteration_precedente = false; } // jusque là, les produits avaient le même fournisseur //récupération des infos du fournisseur concerné query = $"select Ref_Fournisseur,Nom_Fournisseur,Numero_tel_Fournisseur from cooking.fournisseur where Ref_Fournisseur = \"{liste_produit_a_commander[i+a - 1][6]}\";"; List <List <string> > liste_info_fournisseur = Commandes_SQL.Select_Requete(query); Fournisseur nouveau_fournisseur = new Fournisseur { Ref_Fournisseur = liste_info_fournisseur[0][0], Nom_Fournisseur = liste_info_fournisseur[0][1], Numero_tel_Fournisseur = liste_info_fournisseur[0][2], liste_produit_a_commander = liste_produits_pour_un_fournisseur }; liste_Fournisser_XML.Add(nouveau_fournisseur); liste_produits_pour_un_fournisseur = new List <Produit>(); //reset la liste des produits pour un fournisseur changement_fournisseur_iteration_precedente = true; } // Création du fichier XML XmlSerializer xs = new XmlSerializer(typeof(List <Fournisseur>)); using (StreamWriter wr = new StreamWriter("Liste_des_produits_à_commander.xml")) { xs.Serialize(wr, liste_Fournisser_XML); } }
/// <summary> /// Méthode reliée au bouton "Passer le CdR en client" permettant d'effectuer l'action correspondante, elle va donc rendre impossible pour ce client d'être CdR et va supprimer toutes ses recettes /// </summary> /// <param name="sender">Bouton "Passer le CdR en client"</param> /// <param name="e">Evenement Click</param> private void CdR_To_Client_Click(object sender, RoutedEventArgs e) { // sécurité if (id_CdR_Box.Text == "") { Erreur_Message.Content = "Aucun CdR rentré"; } else { Erreur_Message.Content = ""; // passer le CdR en client et l'empêcher de redevenir CdR (cela est représenté par la valeur 2) string query = $"Update cooking.client set CdR = 2 where Identifiant = \"{id_CdR_Box.Text}\";"; string ex = Commandes_SQL.Insert_Requete(query); // suppression de toutes les recettes du CdR // on veut récupérer toutes les recettes du CdR rentré en input query = $"select Nom_Recette from cooking.recette where Identifiant = \"{id_CdR_Box.Text}\";"; List <List <string> > liste_nom_recette_CdR = Commandes_SQL.Select_Requete(query); if (liste_nom_recette_CdR.Count == 0) { Erreur_Message.Content = "Ce CdR n'existe pas"; } else { for (int i = 0; i < liste_nom_recette_CdR.Count; i++) { //mettre à jour les stock mini et max de produit //on recupère les infos relatives au produit dont on a besoin query = $"Select Nom_Produit,Quantite_Produit,Stock_min,Stock_max from cooking.composition_recette natural join cooking.produit where Nom_Recette = \"{liste_nom_recette_CdR[i][0]}\";"; List <List <string> > Liste_Nom_Produit_QT_Min_Max = Commandes_SQL.Select_Requete(query); string query5 = ""; for (int j = 0; j < Liste_Nom_Produit_QT_Min_Max.Count; j++) { // re-définition des termes pour que ce soit plus clair string nom_produit_observe = Liste_Nom_Produit_QT_Min_Max[j][0]; int quantite_necessaire_dans_recette = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[j][1]); int stock_min = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[j][2]); int stock_max = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[j][3]); //on adapte les stocks de la même manière que lorsque qu'une recette est créée, sauf qu'ici, le stock est impacté négativement int nv_stock_min = stock_min - quantite_necessaire_dans_recette; int nv_stock_max = stock_max - 2 * quantite_necessaire_dans_recette; // query pour modifier les valeurs de stock_min et stock_max où le nom de produit est celui que l'on observe // on fait "+=" pour cette query car veut minimiser les interactions avec MySQL query5 += $"Update cooking.produit set Stock_min = {nv_stock_min}, Stock_max = {nv_stock_max} where Nom_Produit = \"{nom_produit_observe}\";"; } // on exécute donc la query (contenant plusieurs commandes) dans MySQL à la fin de la boucle ex = Commandes_SQL.Insert_Requete(query5); //delete child rows string query1 = $"delete from cooking.composition_recette where Nom_Recette = \"{liste_nom_recette_CdR[i][0]}\";"; string query2 = $"delete from cooking.composition_commande where Nom_Recette = \"{liste_nom_recette_CdR[i][0]}\";"; //delete parent row string query4 = $"delete from cooking.recette where Nom_Recette = \"{liste_nom_recette_CdR[i][0]}\";"; //final query string query_final = query1 + query2 + query4; ex = Commandes_SQL.Insert_Requete(query_final); } //on actualise la listView contenant les recettes Recettes_id_ListView.Items.Clear(); query = $"select Nom_Recette,Identifiant from cooking.recette;"; List <List <string> > liste_recette_nom_compteur = Commandes_SQL.Select_Requete(query); for (int i = 0; i < liste_recette_nom_compteur.Count; i++) { Recettes_id_ListView.Items.Add(new Recette_id_CdR { Nom_Recette = liste_recette_nom_compteur[i][0], Identifiant_CdR = liste_recette_nom_compteur[i][1] }); } } } }
/// <summary> /// Méthode reliée au bouton "Supprimer recette" permettant de supprimer une recette, et tout ce qui est associé à celle-ci, de la database /// </summary> /// <param name="sender">Bouton "Supprimer recette"</param> /// <param name="e">Evenement Click</param> private void Supprimer_recette_Click(object sender, RoutedEventArgs e) { // selection est un objet que l'on re-définit en tant classe Recette_id_CdR pour pouvoir accéder à ce qu'elle contient Recette_id_CdR selection = Recettes_id_ListView.SelectedItem as Recette_id_CdR; // sécurité if (selection == null) { Erreur_Message.Content = "Aucune recette sélectionnée"; } else { Erreur_Message.Content = ""; //mettre à jour les stock mini et max de produit //on recupère les infos relatives au produit dont on a besoin string query = $"Select Nom_Produit,Quantite_Produit,Stock_min,Stock_max from cooking.composition_recette natural join cooking.produit where Nom_Recette = \"{selection.Nom_Recette}\";"; List <List <string> > Liste_Nom_Produit_QT_Min_Max = Commandes_SQL.Select_Requete(query); string query5 = ""; for (int i = 0; i < Liste_Nom_Produit_QT_Min_Max.Count; i++) { // re-définition des termes pour que ce soit plus clair string nom_produit_observe = Liste_Nom_Produit_QT_Min_Max[i][0]; int quantite_necessaire_dans_recette = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[i][1]); int stock_min = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[i][2]); int stock_max = Convert.ToInt32(Liste_Nom_Produit_QT_Min_Max[i][3]); // on adapte les stocks de la même manière que lorsque qu'une recette est créée, sauf qu'ici, le stock est impacté négativement int nv_stock_min = stock_min - quantite_necessaire_dans_recette; int nv_stock_max = stock_max - 2 * quantite_necessaire_dans_recette; // query pour modifier les valeurs de stock_min et stock_max où le nom de produit est celui que l'on observe // on fait "+=" pour cette query car veut minimiser les interactions avec MySQL query5 += $"Update cooking.produit set Stock_min = {nv_stock_min}, Stock_max = {nv_stock_max} where Nom_Produit = \"{nom_produit_observe}\";"; } // on exécute donc la query (contenant plusieurs commandes) dans MySQL à la fin de la boucle string ex = Commandes_SQL.Insert_Requete(query5); // delete child rows string query1 = $"delete from cooking.composition_recette where Nom_Recette = \"{selection.Nom_Recette}\";"; string query2 = $"delete from cooking.composition_commande where Nom_Recette = \"{selection.Nom_Recette}\";"; // delete parent row string query4 = $"delete from cooking.recette where Nom_Recette = \"{selection.Nom_Recette}\";"; // final query query = query1 + query2 + query4; ex = Commandes_SQL.Insert_Requete(query); // update listView -> on veut aussi supprimer la recette selectionée de la listView List <Recette_id_CdR> liste_nv_Item = new List <Recette_id_CdR>(); for (int i = 0; i < Recettes_id_ListView.Items.Count; i++) { Recette_id_CdR recette_observee = Recettes_id_ListView.Items[i] as Recette_id_CdR; if (recette_observee.Nom_Recette != selection.Nom_Recette) { Recette_id_CdR copie_recette = new Recette_id_CdR { Nom_Recette = recette_observee.Nom_Recette, Identifiant_CdR = recette_observee.Identifiant_CdR }; liste_nv_Item.Add(copie_recette); } } Recettes_id_ListView.Items.Clear(); for (int i = 0; i < liste_nv_Item.Count; i++) { Recettes_id_ListView.Items.Add(liste_nv_Item[i]); } } }
/// <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 "Valider" permettant de Valider le paiement. /// Si le contenu du bouton est "Payer le reste par CB", aucune action n'est effectuée et le client est envoyé sur la page Page_Payer_CB /// Si le contenu du bouton est "Confirmer", on effectue les actions suivantes : /// - Décrémenter le nb de crédit du client /// - Créer une instance de Commande /// --> Pour chaque recette commandée /// * Rémunérer le/les CdR /// * Augmenter le compteur des recettes utilisées de la quantité prise /// * Augmenter le prix de vente /// * Augmenter la rémunération de la recette /// * Créer ses instances de Recette_Commande /// * Diminuer les produits /// </summary> /// <param name="sender">Bouton "Valider"</param> /// <param name="e">Evenement Click</param> private void Valider_Click(object sender, RoutedEventArgs e) { if (Valider.Content.ToString() == "Confirmer") { // Décrémenter le nb de crédit du client int nouveau_solde = Convert.ToInt32(Nv_Solde.Content); string query = $"Update cooking.client set Credit_Cook = {nouveau_solde} where Identifiant = \"{this.id_client}\" ;"; string ex = Commandes_SQL.Insert_Requete(query); // Créer une instance de Commande string date = $"{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}"; query = $"Insert into cooking.commande (Date, prix, Identifiant) VALUES(\"{date}\",{Total.Content},\"{this.id_client}\");"; ex = Commandes_SQL.Insert_Requete(query); // Actions pour chacune des recettes for (int i = 0; i < this.liste_panier.Count; i++) { // Rémunérer le/les CdR string nom_recette = this.liste_panier[i][0]; int qt = Convert.ToInt32(this.liste_panier[i][1]); query = $"Select Identifiant, Remuneration, compteur, Prix_Vente from cooking.recette where Nom_Recette = \"{nom_recette}\";"; List <List <string> > info_recette = Commandes_SQL.Select_Requete(query); string identifiant_CdR = info_recette[0][0]; int remuneration = Convert.ToInt32(info_recette[0][1]); int ajout_credit = remuneration * qt; query = $"Select Credit_Cook from cooking.client where Identifiant = \"{identifiant_CdR}\";"; List <List <string> > Credit_CdR = Commandes_SQL.Select_Requete(query); int nvCredit_CdR = Convert.ToInt32(Credit_CdR[0][0]) + ajout_credit; query = $"Update cooking.client set Credit_Cook = {nvCredit_CdR} where Identifiant = \"{identifiant_CdR}\"; "; ex = Commandes_SQL.Insert_Requete(query); // Augmenter le compteur des recettes utilisées de la quantité prise int nvcompteur = Convert.ToInt32(info_recette[0][2]) + qt; query = $"Update cooking.recette set compteur = {nvcompteur} where Nom_Recette = \"{nom_recette}\";"; ex = Commandes_SQL.Insert_Requete(query); // Augmenter le prix de vente // Augmenter la rémunération de la recette if (nvcompteur > 10 && Convert.ToInt32(info_recette[0][2]) <= 10) //nv compteur >10 et ancien <=10 { int nv_prix = 2 + Convert.ToInt32(info_recette[0][3]); int remuneration_CdR = 2; if (nvcompteur > 50 && Convert.ToInt32(info_recette[0][2]) <= 50)//nv compteur >50 et ancien <=50 { nv_prix = 5 + Convert.ToInt32(info_recette[0][3]); remuneration_CdR = 4; } query = $"Update cooking.recette set Prix_Vente = {nv_prix}, Remuneration = {remuneration_CdR} where Nom_Recette = \"{nom_recette}\";"; ex = Commandes_SQL.Insert_Requete(query); } // Créer ses instances de Recette_Commande query = $"select count(*) from cooking.commande"; //notre commande est la dernière, donc Ref_Commande = count(*) //En effet ref_commande est un autoincrement List <List <string> > List_Ref_Commande = Commandes_SQL.Select_Requete(query); query = $"Insert into cooking.composition_commande VALUES (\"{nom_recette}\",{List_Ref_Commande[0][0]}, {qt} );"; ex = Commandes_SQL.Insert_Requete(query); //Diminuer les produits query = $"select Nom_Produit, Quantite_Produit from cooking.composition_recette where Nom_Recette = \"{nom_recette}\";"; List <List <string> > List_Produit_QT_dans_recette = Commandes_SQL.Select_Requete(query); for (int j = 0; j < List_Produit_QT_dans_recette.Count; j++) { int diminution = qt * Convert.ToInt32(List_Produit_QT_dans_recette[j][1]); query = $"select Stock from cooking.produit where Nom_Produit = \"{List_Produit_QT_dans_recette[j][0]}\";"; List <List <string> > List_Stock = Commandes_SQL.Select_Requete(query); int nv_Stock = Convert.ToInt32(List_Stock[0][0]) - diminution; query = $"Update cooking.produit set Stock = \"{nv_Stock}\" where Nom_Produit = \"{List_Produit_QT_dans_recette[j][0]}\" ;"; Commandes_SQL.Insert_Requete(query); } } Page_Client page_Client = new Page_Client(this.id_client); this.NavigationService.Navigate(page_Client); } else { Page_Payer_CB page_payer_cb = new Page_Payer_CB(); this.NavigationService.Navigate(page_payer_cb); } }