From 1bdba6f7a7abeeb5949a587bd6a0bbd70dc005c2 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 21 Nov 2021 02:29:24 +0100 Subject: [PATCH] Adding ability to add a casher to the database --- main.py | 148 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 123 insertions(+), 25 deletions(-) diff --git a/main.py b/main.py index 90a82f1..80ae0d9 100644 --- a/main.py +++ b/main.py @@ -56,6 +56,44 @@ class GesMag: return (False, "Un nom d'utilisateur ne doit pas contenir de caractère spécial.") return (True,) + def nomCorrect(self, nom: str) -> bool: + """Détermine si un nom suit la politique du programme ou non.""" + if len(nom) == 0: + return False + if sub(r" *?[^\w\s]+", '', nom) != nom: # pas de caractères spéciaux dans un nom + return False + return True + + def prenomCorrect(self, prenom: str) -> bool: + """Détermine si un prénom suit la politique du programme ou non.""" + if len(prenom) == 0: + return False + if sub(r" *?[^\w\s]+", '', prenom) != prenom: # pas de caractères spéciaux dans un prénom + return False + return True + + def naissanceCorrect(self, naissance: str) -> bool: + """Détermine si une date de naissance suit la politique du programme ou non.""" + if len(naissance) == 0: + return False + if sub(r"\d{4}\/\d{2}\/\d{2}", '', naissance) != '': + return False + return True + + def adresseCorrect(self, adresse: str) -> bool: + """Détermine si une adresse suit la politique du programme ou non.""" + if len(adresse) == 0: + return False + return True + + def postalCorrect(self, code: str) -> bool: + """Détermine si un code postal suit la politique du programme ou non.""" + if len(code) == 0: + return False + if sub(r"\d{5}", '', code) != '': + return False + return True + def connexion(self, utilisateur: str, motDePasse: str): """Gère la connexion aux différentes interfaces de l'application.""" """ @@ -72,7 +110,7 @@ class GesMag: return # Redirection vers la bonne interface - utilisateurBaseDeDonnee = Utilisateurs().verificationIdentifiants(utilisateur.lower(), motDePasse) + utilisateurBaseDeDonnee = Utilisateurs().verificationIdentifiants(utilisateur, motDePasse) if utilisateurBaseDeDonnee[0] > 0: if utilisateurBaseDeDonnee[1] == 0: # si le métier est "Manager" self._interfaceManager(utilisateurBaseDeDonnee[0]) @@ -181,52 +219,112 @@ class GesMag: """ enfant = Toplevel(self.f) enfant.title(f"Ajouter un {'manager' if metier == 0 else 'caissier'}") - self.dimensionsFenetre(enfant, 330, 220) + self.dimensionsFenetre(enfant, 640, 200) def ___verification(): """Vérifie si les champs renseignées sont valides.""" + """ + La variable `ok` sert à savoir si la vérification est passée + si elle vaut `True` alors tout est bon, + Par contre si elle vaut `False` alors il y a eu une erreur. + Les valeurs `Entry` qui ne sont pas passés seront dans + la liste `mauvaisChamps`. + """ + ok = True + mauvaisChamps = [] # vérification pour le nom d'utilisateur - pass + if self.utilisateurCorrect(pseudo.get())[0] == False or Utilisateurs().utilisateurExistant(pseudo.get()) == True: + ok = False + mauvaisChamps.append(pseudo) # vérification pour le mot de passe - pass - # vérification pour le métier - pass + if self.motDePasseCorrect(passe.get())[0] == False: + ok = False + mauvaisChamps.append(passe) # vérification pour le nom - pass + if self.nomCorrect(nom.get()) == False: + ok = False + mauvaisChamps.append(nom) # vérification pour le prénom - pass + if self.prenomCorrect(prenom.get()) == False: + ok = False + mauvaisChamps.append(prenom) # vérification pour la date de naissance - pass + if self.naissanceCorrect(naissance.get()) == False: + ok = False + mauvaisChamps.append(naissance) # vérification pour l'adresse - pass + if self.adresseCorrect(adresse.get()) == False: + ok = False + mauvaisChamps.append(adresse) # vérification pour le code postal - pass + if self.postalCorrect(postal.get()) == False: + ok = False + mauvaisChamps.append(postal) - # Champs + if ok == False: + """ + Tous les champs qui n'ont pas réunies les conditions nécéssaires + sont mis en orange pendant 3 secondes pour bien comprendre quelles champs + sont à modifié. + + La fonction lambda `remettreCouleur` permet de remettre la couleur initial + après les 3 secondes. + """ + remettreCouleur = lambda widget, ancienneCouleur: widget.configure(bg=ancienneCouleur) + for champs in mauvaisChamps: + couleur = champs["background"] # couleur d'avant changement + champs.configure(bg="orange") # on change la couleur du champs en orange + # dans 3 secondes on fait : `remettreCouleur(champs, couleur)` + champs.after(3000, remettreCouleur, champs, couleur) + else: + # Tous les tests sont passés, on peut ajouter l'utilisateur à la base de donnée + Utilisateurs().ajoutUtilisateur( + pseudo.get(), + passe.get().strip(), + metier, + nom.get(), + prenom.get(), + naissance.get(), + adresse.get(), + int(postal.get()), # pas besoin de gérer d'erreur lors du cast car on a vérifié avant que c'était bien une suite de chiffre + ) + __ajouterUtilisateursListe() # met à jour la liste + + # Champs de saisie + # Nom d'utilisateurs Label(enfant, text="Nom d'utilisateur :").grid(column=0, row=0, sticky='e') + Label(enfant, text="Pas de caractères spéciaux", font=("Arial", 10, "italic")).grid(column=2, row=0, sticky='w') pseudo = Entry(enfant) pseudo.grid(column=1, row=0, sticky='w') + # Mot de passe Label(enfant, text="Mot de passe :").grid(column=0, row=1, sticky='e') + Label(enfant, text="1 majuscule, miniscule et caractère spécial minimum", font=("Arial", 10, "italic")).grid(column=2, row=1, sticky='w') passe = Entry(enfant) passe.grid(column=1, row=1, sticky='w') - Label(enfant, text="Métier :").grid(column=0, row=2, sticky='e') - metier = Entry(enfant) - metier.grid(column=1, row=2, sticky='w') - Label(enfant, text="Nom :").grid(column=0, row=3, sticky='e') + # Nom + Label(enfant, text="Nom :").grid(column=0, row=2, sticky='e') + Label(enfant, text="Pas de caractères spéciaux", font=("Arial", 10, "italic")).grid(column=2, row=2, sticky='w') nom = Entry(enfant) - nom.grid(column=1, row=3, sticky='w') - Label(enfant, text="Prénom :").grid(column=0, row=4, sticky='e') + nom.grid(column=1, row=2, sticky='w') + # Prénom + Label(enfant, text="Prénom :").grid(column=0, row=3, sticky='e') + Label(enfant, text="Pas de caractères spéciaux", font=("Arial", 10, "italic")).grid(column=2, row=3, sticky='w') prenom = Entry(enfant) - prenom.grid(column=1, row=4, sticky='w') - Label(enfant, text="Date de naissance :").grid(column=0, row=5, sticky='e') + prenom.grid(column=1, row=3, sticky='w') + # Date de naissance + Label(enfant, text="Date de naissance :").grid(column=0, row=4, sticky='e') + Label(enfant, text="Format : AAAA/MM/JJ", font=("Arial", 10, "italic")).grid(column=2, row=4, sticky='w') naissance = Entry(enfant) - naissance.grid(column=1, row=5, sticky='w') - Label(enfant, text="Adresse").grid(column=0, row=6, sticky='e') + naissance.grid(column=1, row=4, sticky='w') + # Adresse + Label(enfant, text="Adresse").grid(column=0, row=5, sticky='e') adresse = Entry(enfant) - adresse.grid(column=1, row=6, sticky='w') - Label(enfant, text="Code postal :").grid(column=0, row=7, sticky='e') + adresse.grid(column=1, row=5, sticky='w') + # Code postal + Label(enfant, text="Code postal :").grid(column=0, row=6, sticky='e') + Label(enfant, text="5 chiffres", font=("Arial", 10, "italic")).grid(column=2, row=6, sticky='w') postal = Entry(enfant) - postal.grid(column=1, row=7, sticky='w') + postal.grid(column=1, row=6, sticky='w') def ___viderChamps(): """Vide tout les champs de leur contenu"""