/// <summary> /// Méthode reliée au bouton "Se connecter" côté client qui vérifie si l'identifiant et le mdp rentrés par l'utilisateur correspondent à un couple identifiant/mdp dans la database /// </summary> /// <param name="sender">Bouton "Se connecter"</param> /// <param name="e">Evenement Click</param> private void Button_Click_connect_client(object sender, RoutedEventArgs e) { // Récupération des input string id = ID_client.Text; string mdp = MDP_client.Password; // sécurité sur le mdp pour éviter le caractère retournant une erreur MySQL (fonction Caractere_interdit ne fonctionne pas sur les passwordBox) if (mdp.Contains('"')) { error_label.Content = "Guillemets (\") interdits"; } else { // query pour rechercher si le couple identifiant/mdp rentré par l'utilisateur correspondant à un couple dans la database string query = $"Select count(*) from cooking.client where Identifiant=\"{id}\" and Mot_de_passe=\"{mdp}\";"; List <List <string> > liste = Commandes_SQL.Select_Requete(query); if (liste[0][0] == "1") // si on trouve une occurence de ce couple alors le client existe { // on navigue vers la page client en conservant l'id Page_Client page_client = new Page_Client(id); this.NavigationService.Navigate(page_client); } else { error_label.Content = "Erreur client non reconnu"; } } }
/// <summary> /// Initialisation de la Page_Demo_1, affiche le nombre de client /// </summary> public Page_Demo_1() { InitializeComponent(); string query = "Select count(*) from cooking.client"; List <List <string> > Liste_Nb = Commandes_SQL.Select_Requete(query); Nb.Content = Liste_Nb[0][0]; }
/// <summary> /// Initialisation de Page_Demo_4, affichage du Nom, Stock actuel et Stock minimum des produits dont le Stock actuel est inférieur à 2*Stock minimal dans une List View /// </summary> public Page_Demo_4() { InitializeComponent(); string query = "SELECT Nom_Produit, Stock, Stock_min FROM cooking.produit where Stock < (2*Stock_min);"; List <List <string> > Liste_Nom_Stock_Stockmini = Commandes_SQL.Select_Requete(query); for (int i = 0; i < Liste_Nom_Stock_Stockmini.Count; i++) { Liste_Produit.Items.Add(new Produit { Nom = Liste_Nom_Stock_Stockmini[i][0], Stock = Liste_Nom_Stock_Stockmini[i][1], Stock_mini = Liste_Nom_Stock_Stockmini[i][2] }); } }
/// <summary> /// Initialisation de la page Validation_Paiement, affichage du montant total de la commande, du solde actuel, /// du solde restant après commande et du reste à payer après déduction du total au solde actuel. /// /// Affichage du montant qui sera remboursé post-paiement dans le cadre de la rémunération des CdR /// Passer le bouton Valider en mode "Confirmer" si le solde actuel est suffisant, "Payer le reste par CB" dans le cas contraire /// </summary> /// <param name="total">Montant total de la commande</param> /// <param name="solde">Solde actuel du client</param> /// <param name="id_client">Identifiant du client afin de procéder au paiement</param> /// <param name="liste_panier">Liste des objets dans le panier du client afin de décrémenter les quantités de produit</param> public Validation_Paiement(string total, string solde, string id_client, List <List <string> > liste_panier) { InitializeComponent(); this.liste_panier = liste_panier; this.id_client = id_client; Total.Content = total; Solde.Content = solde; Remuneration_cooks.Visibility = Visibility.Hidden; //par défaut on cache ce label label_Remuneration.Visibility = Visibility.Hidden; //par défaut on cache ce label label_cook_remuneration.Visibility = Visibility.Hidden; //par défaut on cache ce label //Si le client qui commande est le CdR d'une des recette du panier, on affiche la rémunération qu'il va percevoir de cette commande int ajout_credit = 0; List <string> liste_CdR = new List <string>(); for (int i = 0; i < liste_panier.Count; i++) { string nom_recette = this.liste_panier[i][0]; string query = $"select Identifiant,Remuneration from cooking.recette where Nom_Recette = \"{nom_recette}\";"; List <List <string> > Id_CdR_et_remuneration = Commandes_SQL.Select_Requete(query); if (this.id_client == Id_CdR_et_remuneration[i][0]) { int qt = Convert.ToInt32(this.liste_panier[i][1]); int remuneration = Convert.ToInt32(Id_CdR_et_remuneration[i][1]); ajout_credit += remuneration * qt; Remuneration_cooks.Visibility = Visibility.Visible; label_Remuneration.Visibility = Visibility.Visible; label_cook_remuneration.Visibility = Visibility.Visible; } } Remuneration_cooks.Content = Convert.ToString(ajout_credit); int difference = Convert.ToInt32(solde) - Convert.ToInt32(total); 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 "Tri par recette" permettant de trier les éléments de la listView contenant les recettes par rapport au nom des recettes /// </summary> /// <param name="sender">Bouton "Tri par recette"</param> /// <param name="e">Evenement Click</param> private void Trier_par_recette_Click(object sender, RoutedEventArgs e) { // query permettant d'obtenir les éléments triés ordre alphabétique par rapport aux identifiants string query = $"select Nom_Recette,Identifiant from cooking.recette order by Nom_Recette;"; List <List <string> > liste_recette_nom_compteur = Commandes_SQL.Select_Requete(query); // on update la listView Recettes_id_ListView.Items.Clear(); 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 "Afficher infos recette" permettant (en cliquant sur un produit au préalable) d'afficher dans une autre ListView les informations relatives aux recettes utilisant ce produit /// Notamment leur nom et la quantité de ce produit qu'elles utilisent /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click_Recette(object sender, RoutedEventArgs e) { Liste_Recette.Items.Clear(); Produit selection = Liste_Produit.SelectedItem as Produit; string nom = selection.Nom; string query = $"SELECT Nom_Recette, Quantite_Produit FROM cooking.composition_recette where Nom_Produit = \"{nom}\";"; List <List <string> > Liste_Nom_Qt = Commandes_SQL.Select_Requete(query); for (int i = 0; i < Liste_Nom_Qt.Count; i++) { Liste_Recette.Items.Add(new Recette { Nom = Liste_Nom_Qt[i][0], Qt = Liste_Nom_Qt[i][1] }); } }
/// <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> /// Initialisation de la page comprenant le message de bienvenue et la listView contenant les recettes /// </summary> /// <param name="id_admin"> identifiant de l'utilisateur que l'on a conservé depuis la page Interface_Home </param> public Page_Admin(string id_admin) { InitializeComponent(); this.id_admin = id_admin; welcome_message.Content = "Bonjour " + id_admin; //Ajout recette CdR et id_CdR dans la listView associé string 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> /// Initialisation de la Page_Demo_2, affiche le nombre de CdR et une ListView contenant la liste pour chaque CdR de leur Identifant, Nom et le volume que représente les commandes de leurs recettes /// </summary> public Page_Demo_2() { InitializeComponent(); string query = "Select Nom_Client, Identifiant from cooking.client where CdR = \"1\";"; List <List <string> > Liste_Nom_Id = Commandes_SQL.Select_Requete(query); Nb_CdR.Content = Liste_Nom_Id.Count; for (int i = 0; i < Liste_Nom_Id.Count; i++) { string nom = Liste_Nom_Id[i][0]; string id = Liste_Nom_Id[i][1]; query = $"SELECT sum(Compteur) FROM cooking.recette where Identifiant = \"{id}\" ;"; List <List <string> > Liste_Qt = Commandes_SQL.Select_Requete(query); string qt = Liste_Qt[0][0]; Liste_CdR.Items.Add(new Nom_QT { Nom = nom, Qt = qt, Identifiant = id }); } }
/// <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> /// Initialisation de la page comprenant le message de bienvenue, le solde du CdR, la listView contenant les produits et la listView contenant les recettes du CdR /// </summary> /// <param name="id_client"> identifiant de l'utilisateur que l'on a conservé depuis la page Interface_Home </param> public Page_CdR(string id_client) { InitializeComponent(); this.id_client = id_client; string query = $"Select Nom_Client from cooking.client where Identifiant = \"{this.id_client}\" ;"; List <List <string> > liste = Commandes_SQL.Select_Requete(query); welcome_message.Content = "Bonjour " + liste[0][0]; // récupération du solde cook du CdR query = $"select Credit_Cook from client where Identifiant = \"{this.id_client}\" ;"; liste = Commandes_SQL.Select_Requete(query); Solde.Content = liste[0][0]; // ajout produit dans la listView associée query = $"select Nom_Produit,Unite from cooking.produit;"; List <List <string> > liste_produit_nom_unite = Commandes_SQL.Select_Requete(query); for (int i = 0; i < liste_produit_nom_unite.Count; i++) { Produits_ListView.Items.Add(new Produit { Nom_Produit = liste_produit_nom_unite[i][0], Unite = liste_produit_nom_unite[i][1] }); } // ajout recette CdR dans la listView associée query = $"select Nom_Recette,Compteur from cooking.recette where Identifiant = \"{this.id_client}\";"; List <List <string> > liste_recette_nom_compteur = Commandes_SQL.Select_Requete(query); for (int i = 0; i < liste_recette_nom_compteur.Count; i++) { Recettes_CdR_ListView.Items.Add(new Recette { Nom_Recette = liste_recette_nom_compteur[i][0], Compteur = liste_recette_nom_compteur[i][1] }); } }
/// <summary> /// Initialisation de la page permettant l'écriture du welcome message, solde en cook, de la listview des recettes dispos ainsi que des différents bouton, textbox, ... /// </summary> /// <param name="id_client">Identifiant du client actuel</param> public Page_Client(string id_client) { InitializeComponent(); Valider.IsEnabled = false; this.id_client = id_client; string query = $"Select Nom_Client from cooking.client where Identifiant = \"{this.id_client}\" ;"; List <List <string> > liste = Commandes_SQL.Select_Requete(query); welcome_message.Content = "Bonjour " + liste[0][0]; // Ajout de toutes les recettes List <List <string> > list_recette = new List <List <string> >(); query = "Select Nom_Recette, Type, Prix_Vente, Descriptif from cooking.recette;"; list_recette = Commandes_SQL.Select_Requete(query); for (int i = 0; i < list_recette.Count(); i++) { //déterminer nb de produit dans la recette query = $"select Nom_Produit, Quantite_Produit from cooking.composition_recette where Nom_Recette = \"{list_recette[i][0]}\";"; List <List <string> > List_Produit_QT_dans_recette = Commandes_SQL.Select_Requete(query); int min_qt_faisable = int.MaxValue; for (int j = 0; j < List_Produit_QT_dans_recette.Count; j++) //pour chaque produit { 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 stock_produit = Convert.ToInt32(List_Stock[0][0]); int quantite_pour_recette = Convert.ToInt32(List_Produit_QT_dans_recette[j][1]); int qt_faisable = stock_produit / quantite_pour_recette; if (qt_faisable < min_qt_faisable) { min_qt_faisable = qt_faisable; } } Liste_Recette.Items.Add(new Recette_complete { Nom_Recette = list_recette[i][0], Type = list_recette[i][1], Descriptif = list_recette[i][3], Prix = list_recette[i][2], Qt_Faisable = min_qt_faisable }); } string query2 = $"select CdR,Credit_Cook from client where Identifiant = \"{this.id_client}\" ;"; liste = Commandes_SQL.Select_Requete(query2); if (Convert.ToInt32(liste[0][0]) == 0) { CdR.Content = "Devenir CdR"; } if (Convert.ToInt32(liste[0][0]) == 1) { CdR.Content = "Page CdR"; } if (Convert.ToInt32(liste[0][0]) == 2) { CdR.Content = "Client"; CdR.IsEnabled = false; } Solde.Content = liste[0][1]; }
/// <summary> /// Méthode reliée au bouton "Ajouter" permettant de passer le montant choisi de la recette sélectionnée dans le panier. La quantité faisable pour chaque recette se met à jour après l'ajout dans le panier /// Le montant total de la commande se met à jour après chaque ajout /// </summary> /// <param name="sender">Bouton "Ajouter"</param> /// <param name="e">Evenement Click</param> private void Ajouter_Click(object sender, RoutedEventArgs e) { Recette_complete selection = Liste_Recette.SelectedItem as Recette_complete; if (selection == null) { erreur.Content = "Aucune recette sélectionnée"; } if (Quantité.Text == "" || !int.TryParse(Quantité.Text, out _) || Convert.ToInt32(Quantité.Text) <= 0) { erreur.Content = "Quantité invalide"; } else { erreur.Content = ""; Recette_Panier recette_selectionnee = new Recette_Panier { Nom_Recette = selection.Nom_Recette, Quantite_Recette = Quantité.Text, Prix = selection.Prix }; List <Recette_Panier> Liste_Recette_Panier = new List <Recette_Panier>(); Liste_Recette_Panier.Add(recette_selectionnee); for (int i = 0; i < Panier.Items.Count; i++) { Liste_Recette_Panier.Add(Panier.Items[i] as Recette_Panier); } //Liste_Recette_Panier contient toutes les recettes qu'on veut évaluer List <List <string> > Nom_Conso = new List <List <string> >(); for (int i = 0; i < Liste_Recette_Panier.Count; i++) { string query = $"select Nom_Produit, Quantite_Produit from cooking.composition_recette where Nom_Recette = \"{Liste_Recette_Panier[i].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++) // pour chaque produit de cette recette { if (Nom_Conso.Count == 0) //premier item { List <string> premieritem = new List <string>(); premieritem.Add(List_Produit_QT_dans_recette[j][0]); premieritem.Add(Convert.ToString(Convert.ToInt32(List_Produit_QT_dans_recette[j][1]) * Convert.ToInt32(Liste_Recette_Panier[i].Quantite_Recette))); Nom_Conso.Add(premieritem); } else { bool copie = false; for (int k = 0; k < Nom_Conso.Count; k++) //pour chaque produit déjà enregistré { if (Nom_Conso[k][0] == List_Produit_QT_dans_recette[j][0]) { copie = true; Nom_Conso[k][1] = Convert.ToString(Convert.ToInt32(Nom_Conso[k][1]) + (Convert.ToInt32(List_Produit_QT_dans_recette[j][1]) * Convert.ToInt32(Liste_Recette_Panier[i].Quantite_Recette))); } } if (!copie) { List <string> nv_item = new List <string>(); nv_item.Add(List_Produit_QT_dans_recette[j][0]); nv_item.Add(Convert.ToString(Convert.ToInt32(List_Produit_QT_dans_recette[j][1]) * Convert.ToInt32(Liste_Recette_Panier[i].Quantite_Recette))); Nom_Conso.Add(nv_item); } } } } //on récupère le vrai stock string query2 = "Select Nom_Produit, Stock from cooking.produit"; List <List <string> > Nom_Stock = Commandes_SQL.Select_Requete(query2); bool check = true; for (int i = 0; i < Nom_Stock.Count; i++) { for (int j = 0; j < Nom_Conso.Count; j++) { if (Nom_Stock[i][0] == Nom_Conso[j][0]) { Nom_Stock[i][1] = Convert.ToString(Convert.ToInt32(Nom_Stock[i][1]) - Convert.ToInt32(Nom_Conso[j][1])); if (Convert.ToInt32(Nom_Stock[i][1]) < 0) { check = false; //pas assez de stock } } } } if (!check) { erreur.Content = "ERREUR pas assez de stock"; } else { Valider.IsEnabled = true; // on réactive le bouton erreur.Content = ""; List <Recette_complete> nouvelle_table = new List <Recette_complete>(); for (int i = 0; i < Liste_Recette.Items.Count; i++) { Recette_complete recette_observee = Liste_Recette.Items[i] as Recette_complete; string nom_recette = recette_observee.Nom_Recette; string 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); int min_qt_faisable = int.MaxValue; for (int j = 0; j < List_Produit_QT_dans_recette.Count; j++) //pour chaque produit { int stock_produit = 0; for (int k = 0; k < Nom_Stock.Count; k++) { if (Nom_Stock[k][0] == List_Produit_QT_dans_recette[j][0]) { stock_produit = Convert.ToInt32(Nom_Stock[k][1]); } } int quantite_pour_recette = Convert.ToInt32(List_Produit_QT_dans_recette[j][1]); int qt_faisable = stock_produit / quantite_pour_recette; if (qt_faisable < min_qt_faisable) { min_qt_faisable = qt_faisable; } } recette_observee.Qt_Faisable = min_qt_faisable; Recette_complete copie_recette = new Recette_complete { Nom_Recette = recette_observee.Nom_Recette, Type = recette_observee.Type, Descriptif = recette_observee.Descriptif, Prix = recette_observee.Prix, Qt_Faisable = min_qt_faisable }; nouvelle_table.Add(copie_recette); } Liste_Recette.Items.Clear(); for (int i = 0; i < nouvelle_table.Count; i++) { Liste_Recette.Items.Add(nouvelle_table[i]); } int ajout = Convert.ToInt32(selection.Prix) * Convert.ToInt32(Quantité.Text); Total.Content = Convert.ToString(Convert.ToInt32(Total.Content) + ajout); Panier.Items.Add(new Recette_Panier { Nom_Recette = selection.Nom_Recette, Quantite_Recette = Quantité.Text, Prix = selection.Prix }); Quantité.Text = ""; } } }
/// <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 "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); } }
/// <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 "Reset BDD" nous permettant de réinitialiser notre database à partir de fichiers txt (équivalents à des scripts SQL ordinaires) /// </summary> /// <param name="sender">Bouton "Reset BDD"</param> /// <param name="e">Evenement Click</param> private void Button_Click_Reset_BDD(object sender, RoutedEventArgs e) { Commandes_SQL.Execution_Script_TXT("Initialisation_DB.txt"); Commandes_SQL.Execution_Script_TXT("Dummy_Data.txt"); }
/// <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 "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> /// Initialisaiton de la Page_Top, permettant l'affichage du CdR d'OR, de ses recettes les plus vendues, du CdR de la semaine actuelle /// ainsi que les 5 recettes les plus commandées de la semaine actuelle /// </summary> public Page_Top() { InitializeComponent(); //On peut déjà mettre les informations du CdR d'Or //On recherche déjà son nom //On peut directement chercher dans Composition_Commande vu qu'on va prendre toutes les commandes string query = "SELECT Identifiant, sum(compteur) as SUMQT FROM cooking.recette group by Identifiant order by SUMQT desc limit 1;"; //query pour le CdR d'Or List <List <string> > Liste_Nom_CdR_Qte_vendue = Commandes_SQL.Select_Requete(query); if (Liste_Nom_CdR_Qte_vendue.Count != 0) { CdR_Or.Content = Liste_Nom_CdR_Qte_vendue[0][0]; //On cherche ensuite ses recettes les plus vendues query = $"SELECT Nom_Recette, Type, Compteur FROM cooking.recette where Identifiant = \"{Liste_Nom_CdR_Qte_vendue[0][0]}\" order by Compteur desc limit 5;"; List <List <string> > Liste_Recette_Infos = Commandes_SQL.Select_Requete(query); //On ajoute ensuite les informations de chaque recette à la ListView dédiée for (int i = 0; i < Liste_Recette_Infos.Count; i++) { string Nom = Liste_Recette_Infos[i][0]; string Type = Liste_Recette_Infos[i][1]; string Qte = Liste_Recette_Infos[i][2]; Liste_Recette_Or.Items.Add(new Recette_Or { Nom = Nom, Type = Type, Compteur = Qte }); } } else { CdR_Or.Content = "Pas de CdR d'Or"; } //CdR Semaine int jour = (int)DateTime.Today.DayOfWeek; //jour de la semaine double decalage = 1 - jour; //on veut le decalage à lundi System.DateTime datelimite_system = DateTime.Today.AddDays(decalage); string datelimite = $"{datelimite_system.Year}/{datelimite_system.Month}/{datelimite_system.Day}"; // on a notre date limite string date = $"{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}"; // on veut sélectionner toutes les commandes faites sur cette période query = $"select recette.Identifiant " + $"from (cooking.commande natural join cooking.composition_commande as T) join cooking.recette " + $"on cooking.recette.Nom_Recette=T.Nom_Recette " + $"where Date between \"{datelimite}\" and \"{date}\" " + $"group by cooking.recette.Identifiant " + $"order by sum(Quantite_Recette) desc " + $"limit 1;"; List <List <string> > Liste_CdR_Semaine = Commandes_SQL.Select_Requete(query); if (Liste_CdR_Semaine.Count != 0) { CdR_Semaine.Content = Liste_CdR_Semaine[0][0]; } else { CdR_Semaine.Content = "Pas de CdR Semaine"; } //Top commande Semaine query = $"select recette.Nom_Recette, Type, recette.Identifiant, sum(Quantite_Recette), Compteur " + $"from (cooking.commande natural join cooking.composition_commande as T) join cooking.recette " + $"on cooking.recette.Nom_Recette=T.Nom_Recette " + $"where Date between \"{datelimite}\" and \"{date}\" " + $"group by cooking.recette.Nom_Recette " + $"order by sum(Quantite_Recette) desc " + $"limit 5;"; List <List <string> > Liste_Recette_Semaine = Commandes_SQL.Select_Requete(query); for (int i = 0; i < Liste_Recette_Semaine.Count; i++) { ListeView_Recette_Semaine.Items.Add(new Recette_Semaine { Nom = Liste_Recette_Semaine[i][0], Type = Liste_Recette_Semaine[i][1], Createur = Liste_Recette_Semaine[i][2], Volume_Achete_Semaine = Liste_Recette_Semaine[i][3], Compteur = Liste_Recette_Semaine[i][4] }); } }