Adding ability to add a casher to the database

This commit is contained in:
Mylloon 2021-11-21 02:29:24 +01:00
parent acd2f9e950
commit 1bdba6f7a7

148
main.py
View file

@ -56,6 +56,44 @@ class GesMag:
return (False, "Un nom d'utilisateur ne doit pas contenir de caractère spécial.") return (False, "Un nom d'utilisateur ne doit pas contenir de caractère spécial.")
return (True,) 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): def connexion(self, utilisateur: str, motDePasse: str):
"""Gère la connexion aux différentes interfaces de l'application.""" """Gère la connexion aux différentes interfaces de l'application."""
""" """
@ -72,7 +110,7 @@ class GesMag:
return return
# Redirection vers la bonne interface # Redirection vers la bonne interface
utilisateurBaseDeDonnee = Utilisateurs().verificationIdentifiants(utilisateur.lower(), motDePasse) utilisateurBaseDeDonnee = Utilisateurs().verificationIdentifiants(utilisateur, motDePasse)
if utilisateurBaseDeDonnee[0] > 0: if utilisateurBaseDeDonnee[0] > 0:
if utilisateurBaseDeDonnee[1] == 0: # si le métier est "Manager" if utilisateurBaseDeDonnee[1] == 0: # si le métier est "Manager"
self._interfaceManager(utilisateurBaseDeDonnee[0]) self._interfaceManager(utilisateurBaseDeDonnee[0])
@ -181,52 +219,112 @@ class GesMag:
""" """
enfant = Toplevel(self.f) enfant = Toplevel(self.f)
enfant.title(f"Ajouter un {'manager' if metier == 0 else 'caissier'}") enfant.title(f"Ajouter un {'manager' if metier == 0 else 'caissier'}")
self.dimensionsFenetre(enfant, 330, 220) self.dimensionsFenetre(enfant, 640, 200)
def ___verification(): def ___verification():
"""Vérifie si les champs renseignées sont valides.""" """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 # 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 # vérification pour le mot de passe
pass if self.motDePasseCorrect(passe.get())[0] == False:
# vérification pour le métier ok = False
pass mauvaisChamps.append(passe)
# vérification pour le nom # vérification pour le nom
pass if self.nomCorrect(nom.get()) == False:
ok = False
mauvaisChamps.append(nom)
# vérification pour le pré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 # vérification pour la date de naissance
pass if self.naissanceCorrect(naissance.get()) == False:
ok = False
mauvaisChamps.append(naissance)
# vérification pour l'adresse # vérification pour l'adresse
pass if self.adresseCorrect(adresse.get()) == False:
ok = False
mauvaisChamps.append(adresse)
# vérification pour le code postal # 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="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 = Entry(enfant)
pseudo.grid(column=1, row=0, sticky='w') 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="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 = Entry(enfant)
passe.grid(column=1, row=1, sticky='w') passe.grid(column=1, row=1, sticky='w')
Label(enfant, text="Métier :").grid(column=0, row=2, sticky='e') # Nom
metier = Entry(enfant) Label(enfant, text="Nom :").grid(column=0, row=2, sticky='e')
metier.grid(column=1, row=2, sticky='w') Label(enfant, text="Pas de caractères spéciaux", font=("Arial", 10, "italic")).grid(column=2, row=2, sticky='w')
Label(enfant, text="Nom :").grid(column=0, row=3, sticky='e')
nom = Entry(enfant) nom = Entry(enfant)
nom.grid(column=1, row=3, sticky='w') nom.grid(column=1, row=2, sticky='w')
Label(enfant, text="Prénom :").grid(column=0, row=4, sticky='e') # 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 = Entry(enfant)
prenom.grid(column=1, row=4, sticky='w') prenom.grid(column=1, row=3, sticky='w')
Label(enfant, text="Date de naissance :").grid(column=0, row=5, sticky='e') # 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 = Entry(enfant)
naissance.grid(column=1, row=5, sticky='w') naissance.grid(column=1, row=4, sticky='w')
Label(enfant, text="Adresse").grid(column=0, row=6, sticky='e') # Adresse
Label(enfant, text="Adresse").grid(column=0, row=5, sticky='e')
adresse = Entry(enfant) adresse = Entry(enfant)
adresse.grid(column=1, row=6, sticky='w') adresse.grid(column=1, row=5, sticky='w')
Label(enfant, text="Code postal :").grid(column=0, row=7, sticky='e') # 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 = Entry(enfant)
postal.grid(column=1, row=7, sticky='w') postal.grid(column=1, row=6, sticky='w')
def ___viderChamps(): def ___viderChamps():
"""Vide tout les champs de leur contenu""" """Vide tout les champs de leur contenu"""