def retour(): global idusr, fen_ChgPass, pfs fen_ChgPass.destroy() if pfs == 'Elève': elv.elv_accueil(idusr) elif pfs == 'Professeur': prf.prf_accueil(idusr) else: adm.adm_accueil(idusr)
def check(): global idusr, fen_Main, pso_nom, pso_prenom, pso_password mdp = pso_password.get() nmpnps = [pso_nom.get(), pso_prenom.get(), pso_password.get() ] # passage du formulaire (nom et prénom) en tuple nompn = [pso_nom.get(), pso_prenom.get()] idusr = nompn nom = pso_nom.get() prenom = pso_prenom.get() # Construction du dictionnaire de tous les profils ## Découpage des entrées de la BDD clé / data (c.a.d. profil / nom-prénom) data_profils = open('data/data_profils.txt', 'r') dico_profils = decoup_valtuple(data_profils) data_profils.close() data_pass = open('data/data_pass.txt', 'r') dico_pass = decoup_cletuple(data_pass) data_pass.close() L1 = [] L2 = [] for key in dico_pass.keys(): L1 = [key[0], key[1], dico_pass[key]] L2.append(L1) if nmpnps in L2: if mdp == 'ISN_2020': tk.messagebox.showwarning( 'Bienvenue', 'Il semble que ce soit votre première connexion à Visual Note.\nVeuillez modifier votre mot de passe.' ) fen_Main.destroy() pss.chg_pass(nompn) else: fen_Main.destroy() pfs = gen.find_key(nompn, dico_profils) if pfs == 'Elève': elv.elv_accueil(nompn) elif pfs == 'Professeur': prf.prf_accueil(nompn) else: adm.adm_accueil(nompn) else: messagebox.showwarning( "ATTENTION", "Il y a une erreur dans votre nom, votre prénom ou le mot de passe.\n Merci de modifier votre saisie et de réessayer." )
def save_matelv () : global idusr, fen_SaisiePerso, pso_lv1, pso_lv2, pso_spe, nompn, nomps, dico_profils ch_lv1 = pso_lv1.get() ch_lv2 = pso_lv2.get() ch_spe = pso_spe.get() if ch_lv1 == ch_lv2 : tk.messagebox.showerror("ERREUR", "Un élève ne peut pas faire " + ch_lv1 + " en LV1 et LV2.\nMerci de corriger.", parent=fen_SaisiePerso) else : ## Découpage des entrées de la BDD (LV1) clé / data (c.a.d. langue 1 / élève) data_lv1 = open('data/data_lv1.txt','r') dico_lv1 = decoup_valtuple (data_lv1) data_lv1.close() ## Découpage des entrées de la BDD (LV2) clé / data (c.a.d. langue 2 / élève) data_lv2 = open('data/data_lv2.txt','r') dico_lv2 = decoup_valtuple (data_lv2) data_lv2.close() ## Découpage des entrées de la BDD (SPE) clé / data (c.a.d. Spécialité / élève) data_spe = open('data/data_spe.txt','r') dico_spe = decoup_valtuple (data_spe) data_spe.close() # Ajout des nouvelles entrées aux dictionnaires LV1, LV2 et SPE ajout_dico(dico_lv1, nompn, ch_lv1) ajout_dico(dico_lv2, nompn, ch_lv2) ajout_dico(dico_spe, nompn, ch_spe) # Sauvegarde des dictionnaires dans les fichiers textes bdd = 'data/data_lv1.txt' save_valtuple (bdd, dico_lv1) bdd = 'data/data_lv2.txt' save_valtuple (bdd, dico_lv2) bdd = 'data/data_spe.txt' save_valtuple (bdd, dico_spe) # Ajout de la nouvelle entrée au dictionnaire ajout_dico (dico_profils, nomps, profil) # Sauvegarde du dictionnaire dans le fichier texte bdd = 'data/data_profils.txt' save_valtuple (bdd, dico_profils) save_pwd (nompn, 'ISN_2020') # Message de fin ask = tk.messagebox.askyesno("MERCI", nompn[1]+" "+nompn[0]+" a bien été enregistrée(e) dans la base.\n Souhaitez-vous ajouter une autre personne ?", parent=fen_SaisiePerso) fen_SaisiePerso.destroy() if ask == True : addpers(idusr) # retour sur la page d'ajout de personne else : adm.adm_accueil(idusr) # retour sur l'accueil d'admin
def save_suppers(): global idusr, fen_SupprPers, usr_nom, usr_profil spn = usr_nom.get() sup_usr = spn.split(' ') sup_profil = usr_profil.get() # Suppression de l'utilisateur de la base data_profils data_profils = open('data/data_profils.txt', 'r') dico_profils = gen.decoup_valtuple(data_profils) data_profils.close() LU = dico_profils[sup_profil] LU.remove(sup_usr) del dico_profils[sup_profil] dico_profils[sup_profil] = LU bdd = 'data/data_profils.txt' gen.save_valtuple(bdd, dico_profils) # Suppression de l'utilisateur de la base data_pass data_pass = open('data/data_pass.txt', 'r') dico_pass = gen.decoup_cletuple(data_pass) data_pass.close() del dico_pass[tuple(sup_usr)] bdd = 'data/data_pass.txt' gen.save_cletuple(bdd, dico_pass) # Suppression des notes de l'utilisateur dans data_notes data_notes = open('data/data_notes.txt', 'r') dico_notes = gen.decoup_cletvalt(data_notes) data_notes.close() if tuple(sup_usr) in dico_notes: del dico_notes[tuple(sup_usr)] bdd = 'data/data_notes.txt' gen.save_cletvalt(bdd, dico_notes) # Suppression de l'utilisateur de la base data_LV1 data_lv1 = open('data/data_lv1.txt', 'r') dico_lv1 = gen.decoup_valtuple(data_lv1) dico_oldlv1 = dico_lv1.copy() data_lv1.close() for k in dico_oldlv1: L1 = dico_lv1[k] if sup_usr in L1: sup_lv1 = k LLV1 = dico_lv1[sup_lv1] LLV1.remove(sup_usr) del dico_lv1[sup_lv1] dico_lv1[sup_lv1] = LLV1 bdd = 'data/data_lv1.txt' gen.save_valtuple(bdd, dico_lv1) # Suppression de l'utilisateur de la base data_LV2 data_lv2 = open('data/data_lv2.txt', 'r') dico_lv2 = gen.decoup_valtuple(data_lv2) dico_oldlv2 = dico_lv2.copy() data_lv2.close() for k in dico_oldlv2: L2 = dico_lv2[k] if sup_usr in L2: sup_lv2 = k LLV2 = dico_lv2[sup_lv2] LLV2.remove(sup_usr) del dico_lv2[sup_lv2] dico_lv2[sup_lv2] = LLV2 bdd = 'data/data_lv2.txt' gen.save_valtuple(bdd, dico_lv2) # Suppression de l'utilisateur de la base data_SPE data_spe = open('data/data_spe.txt', 'r') dico_spe = gen.decoup_valtuple(data_spe) dico_oldspe = dico_spe.copy() data_spe.close() for k in dico_oldspe: LS = dico_spe[k] if sup_usr in LS: sup_spe = k LSPE = dico_spe[sup_spe] LSPE.remove(sup_usr) del dico_spe[sup_spe] dico_spe[sup_spe] = LSPE bdd = 'data/data_spe.txt' gen.save_valtuple(bdd, dico_spe) # Suppression de l'utilisateur (Professeur exclusivement) de la base data_com data_com = open('data/data_com.txt', 'r') dico_com = gen.decoup_valtuple(data_com) dico_oldcom = dico_com.copy() data_com.close() for k in dico_oldcom: LC = dico_com[k] if sup_usr in LC: sup_com = k LCOM = dico_com[sup_com] LCOM.remove(sup_usr) del dico_com[sup_com] dico_com[sup_com] = LCOM bdd = 'data/data_com.txt' gen.save_valtuple(bdd, dico_com) ask = tk.messagebox.askyesno( "MERCI", "Cet utilisateur a bien été supprimé.\n Souhaitez-vous en supprimer un autre ?", parent=fen_SupprPers) fen_SupprPers.destroy() if ask == True: del_perso(idusr) # retour sur la page d'ajout de personne else: adm.adm_accueil(idusr) # retour sur l'accueil d'admin
def retour(): global idusr, fen_SupprPers fen_SupprPers.destroy() adm.adm_accueil(idusr)
def checkmat(): global idusr, fen_SaisieMat, mat_coef, mat_nom, mat_prf chm_nom = mat_nom.get() chm_prf = mat_prf.get() chm_coef = mat_coef.get() ## Découpage des entrées de la BDD (mots de passe) clé / data (élève / notes et arguments) data_matieres = open('data/data_matieres.txt', 'r') dico_matieres = gen.decoup_valtuple(data_matieres) data_matieres.close() LM = [] for k in dico_matieres: for i in range(0, len(dico_matieres[k])): LM.append(dico_matieres[k][i][0]) if chm_nom == '' or chm_prf == '' or chm_coef == '': tk.messagebox.showwarning( 'ATTENTION', 'Tous les champs doivent être remplis !\nMerci de corriger.', parent=fen_SaisieMat) else: ret = check_num(chm_coef) res = check_alpha(chm_nom) if ret != 'ok': tk.messagebox.showwarning('ATTENTION', ret, parent=fen_SaisieMat) elif int(chm_coef) < 1 or int(chm_coef) > 20: tk.messagebox.showwarning( 'ATTENTION', 'Merci de saisir un coeffficient valide (compris entre 1 et 20).', parent=fen_SaisieMat) elif res != 'ok': tk.messagebox.showwarning('ATTENTION', res, parent=fen_SaisieMat) elif chm_nom in LM: tk.messagebox.showwarning( 'ATTENTION', 'Cette matière existe déjà.\nMerci de corriger.', parent=fen_SaisieMat) else: if chm_prf == 'Matière Commune': key = 'com' elif chm_prf == 'LV1': key = 'lv1' elif chm_prf == 'LV2': key = 'lv2' else: key = 'spe' val = [chm_nom, chm_coef] # Ajout des nouvelles entrées au dictionnaire Matières gen.ajout_dico(dico_matieres, val, key) # Sauvegarde des dictionnaires dans le fichier texte bdd = 'data/data_matieres.txt' gen.save_valtuple(bdd, dico_matieres) ask = tk.messagebox.askyesno( "MERCI", "Cette matière a bien été ajoutée.\nSouhaitez-vous en ajouter une autre ?", parent=fen_SaisieMat) fen_SaisieMat.destroy() if ask == True: addmat(idusr) # retour sur la page d'ajout de personne else: adm.adm_accueil(idusr) # retour sur l'accueil d'admin
def retour(): global idusr, fen_SaisieMat fen_SaisieMat.destroy() adm.adm_accueil(idusr)
def save_matprof () : global idusr, fen_SaisiePerso, nompn, dico_profils # Récupération des données du formulaire ch_com = [] sel_com = pso_com.curselection() for val in sel_com : ch_com.append(dico_matieres['com'][val]) ch_lv1 = [] sel_lv1 = pso_lv1.curselection() for val in sel_lv1 : ch_lv1.append(dico_matieres['lv1'][val]) ch_lv2 = [] sel_lv2 = pso_lv2.curselection() for val in sel_lv2 : ch_lv2.append(dico_matieres['lv2'][val]) ch_spe = [] sel_spe = pso_spe.curselection() for val in sel_spe : ch_spe.append(dico_matieres['spe'][val]) if ch_com != '' : # test sur la valeur saisie afin de ne pas manipuler un dictionnaire pour lequel il n'y aurait pas de nouvelle entrée ## Découpage des entrées de la BDD (COM) clé / data (c.a.d. matière commune / professeur) data_com = open('data/data_com.txt','r') dico_com = decoup_valtuple (data_com) data_com.close() # Ajout des nouvelles entrées au dictionnaire COM for val in ch_com : ajout_dico(dico_com, nompn, val[0]) # Sauvegarde des dictionnaires dans le fichier texte bdd = 'data/data_com.txt' save_valtuple (bdd, dico_com) if ch_lv1 != '' : # test sur la valeur saisie afin de ne pas manipuler un dictionnaire pour lequel il n'y aurait pas de nouvelle entrée ## Découpage des entrées de la BDD (LV1) clé / data (c.a.d. LV1 / professeur) data_lv1 = open('data/data_lv1.txt','r') dico_lv1 = decoup_valtuple (data_lv1) data_lv1.close() # Ajout des nouvelles entrées au dictionnaire COM for val in ch_lv1 : ajout_dico(dico_lv1, nompn, val[0]) # Sauvegarde des dictionnaires dans le fichier texte bdd = 'data/data_lv1.txt' save_valtuple (bdd, dico_lv1) if ch_lv2 != '' : # test sur la valeur saisie afin de ne pas manipuler un dictionnaire pour lequel il n'y aurait pas de nouvelle entrée ## Découpage des entrées de la BDD (LV1) clé / data (c.a.d. LV1 / professeur) data_lv2 = open('data/data_lv2.txt','r') dico_lv2 = decoup_valtuple (data_lv2) data_lv2.close() # Ajout des nouvelles entrées au dictionnaire COM for val in ch_lv2 : ajout_dico(dico_lv2, nompn, val[0]) # Sauvegarde des dictionnaires dans le fichier texte bdd = 'data/data_lv2.txt' save_valtuple (bdd, dico_lv2) if ch_spe != '' : # test sur la valeur saisie afin de ne pas manipuler un dictionnaire pour lequel il n'y aurait pas de nouvelle entrée ## Découpage des entrées de la BDD (LV1) clé / data (c.a.d. LV1 / professeur) data_spe = open('data/data_spe.txt','r') dico_spe = decoup_valtuple (data_spe) data_spe.close() # Ajout des nouvelles entrées au dictionnaire COM for val in ch_spe : ajout_dico(dico_spe, nompn, val[0]) # Sauvegarde des dictionnaires dans le fichier texte bdd = 'data/data_spe.txt' save_valtuple (bdd, dico_spe) # Ajout de la nouvelle entrée au dictionnaire ajout_dico (dico_profils, nomps, profil) # Sauvegarde du dictionnaire dans le fichier texte bdd = 'data/data_profils.txt' save_valtuple (bdd, dico_profils) save_pwd (nompn, 'ISN_2020') # Message de fin ask = tk.messagebox.askyesno("MERCI", nompn[1]+" "+nompn[0]+" a bien été enregistrée(e) dans la base.\n Souhaitez-vous ajouter une autre personne ?", parent=fen_SaisiePerso) fen_SaisiePerso.destroy() if ask == True : addpers(idusr) # retour sur la page d'ajout de personne else : adm.adm_accueil(idusr) # retour sur l'accueil d'admin
def retour() : global idusr, fen_SaisiePerso fen_SaisiePerso.destroy() adm.adm_accueil(idusr)
def checkpers() : global idusr, fen_SaisiePerso, fr1, fr2, fr3, pso_lv1, pso_lv2, pso_spe, pso_com, pso_profil, nomps, nompn, profil, dico_matieres, dico_profils nomps = [pso_nom.get(),pso_prenom.get(),'ISN_2020'] # passage du formulaire (nom, prénom, password) en tuple nompn = [pso_nom.get(),pso_prenom.get()] # passage du formulaire (nom et prénom) en tuple profil = pso_profil.get() # passage du formulaire (profil) en variables # Vérification des caractères alphabétiques dans la saisie res = check_alpha(nompn[0]) if res != 'ok' : tk.messagebox.showwarning('ATTENTION', res, parent = fen_SaisiePerso) else : ret = check_alpha(nompn[1]) if ret != 'ok' : tk.messagebox.showwarning('ATTENTION', ret, parent = fen_SaisiePerso) else : # Construction du dictionnaire de tous les profils ## Découpage des entrées de la BDD clé / data (c.a.d. profil / nom-prénom) data_profils=open('data/data_profils.txt','r') dico_profils = decoup_valtuple (data_profils) data_profils.close() # Vérification de l'existence de la nouvelle entrée dans la BDD L1 = [] for key in dico_profils.keys() : # Création d'une liste de tous les tuples [nom,prénom] pour recherche d'un existant L1.extend(dico_profils[key]) if nomps in L1 : tk.messagebox.showwarning("ATTENTION", "Cette personne est déjà enregistrée", parent=fen_SaisiePerso) fen_SaisiePerso.mainloop() # retour sur le même écran else : if profil == 'Elève' : for elt in fr2.winfo_children() : # RAZ de la fenêtre d'affichage elt.destroy() for elt in fr3.winfo_children() : # RAZ de la fenêtre d'affichage elt.destroy() fr2.pack(fill=X) fr3.pack(fill=X) # Saisie des LV1, LV2 et SPE txt_titre = tk.Label(fr2, text="Saisie des matières optionnelles", font=("Calibri",18), bg="white", fg="black") txt_titre.grid(row=0) # Construction du dictionnaire des matières ## Découpage des entrées de la BDD clé / data (c.a.d. type / matière) data_matieres=open('data/data_matieres.txt','r') dico_matieres = decoup_valtuple (data_matieres) data_matieres.close() # Mise en place des combobox de choix des matières pso_com='' lst_lv1 =[] for i in range (0, len(dico_matieres['lv1'])) : val = dico_matieres['lv1'][i][0] lst_lv1.append(val) lst_lv2 =[] for i in range (0, len(dico_matieres['lv2'])) : val = dico_matieres['lv2'][i][0] lst_lv2.append(val) lst_spe =[] for i in range (0, len(dico_matieres['spe'])) : val = dico_matieres['spe'][i][0] lst_spe.append(val) txt_lv1 = tk.Label(fr2, text="LV1", font=("Calibri",16), bg="white", fg="black") pso_lv1 = ttk.Combobox(fr2, values=lst_lv1, state="readonly") txt_lv1.grid(row=1) pso_lv1.current(0) # Anglais par défaut pso_lv1.grid(row=1, column=1) txt_lv2 = tk.Label(fr2, text="LV2", font=("Calibri",16), bg="white", fg="black") pso_lv2 = ttk.Combobox(fr2, values=lst_lv2, state="readonly") pso_lv2.current(1) # Espagnol par défaut txt_lv2.grid(row=2) pso_lv2.grid(row=2, column=1) txt_spe = tk.Label(fr2, text="Spécialité", font=("Calibri",16), bg="white", fg="black") pso_spe = ttk.Combobox(fr2, values=lst_spe, state="readonly") txt_spe.grid(row=3) # Pas de spécialité par défaut pso_spe.grid(row=3, column=1) bt_valider = tk.Button(fr3, text='Valider', font = ("Calibri", 15), bg="white", fg="black", command=save_matelv) bt_valider.pack(fill=X) bt_annuler = tk.Button(fr3, text='Annuler', font = ("Calibri", 15), bg="white", fg="black", command=annuler) bt_annuler.pack(fill=X) fen_SaisiePerso.mainloop() elif profil == 'Professeur' : for elt in fr2.winfo_children() : # RAZ de la fenêtre d'affichage elt.destroy() for elt in fr3.winfo_children() : # RAZ de la fenêtre d'affichage elt.destroy() fr2.pack(fill=X) fr3.pack(fill=X) # Saisie des matières enseignées txt_titre = tk.Label(fr2, text="Saisie des matières enseignées", font = ("Calibri", 18), bg="white", fg="black") txt_titre.grid(row=0) # Construction du dictionnaire des matières ## Découpage des entrées de la BDD clé / data (c.a.d. type / matière) data_matieres=open('data/data_matieres.txt','r') dico_matieres = decoup_valtuple (data_matieres) data_matieres.close() # Mise en place des listes de choix des matières txt_com = tk.Label(fr2, text="Matières communes", font = ("Calibri", 15), bg="white", fg="black") pso_com = tk.Listbox(fr2, height=5, selectmode='multiple', exportselection=0) for i in range (0, len(dico_matieres['com'])) : pso_com.insert(i, dico_matieres['com'][i][0]) txt_com.grid(row=1, column=0) pso_com.grid(row=2, column=0) txt_lv1 = tk.Label(fr2, text="LV1", font = ("Calibri", 15), bg="white", fg="black") pso_lv1 = tk.Listbox(fr2, height=5, selectmode='multiple', exportselection=0) for i in range (0, len(dico_matieres['lv1'])) : pso_lv1.insert(i, dico_matieres['lv1'][i][0]) txt_lv1.grid(row=1, column=1) pso_lv1.grid(row=2, column=1) txt_lv2 = tk.Label(fr2, text="LV2", font = ("Calibri", 15), bg="white", fg="black") pso_lv2 = tk.Listbox(fr2, height=5, selectmode='multiple', exportselection=0) for i in range (0, len(dico_matieres['lv2'])) : pso_lv2.insert(i, dico_matieres['lv2'][i][0]) txt_lv2.grid(row=1, column=3) pso_lv2.grid(row=2, column=3) txt_spe = tk.Label(fr2, text="Spécialité", font = ("Calibri", 15), bg="white", fg="black") pso_spe = tk.Listbox(fr2, height=5, selectmode='multiple', exportselection=0) for i in range (0, len(dico_matieres['spe'])) : pso_spe.insert(i, dico_matieres['spe'][i][0]) txt_spe.grid(row=1, column=4) pso_spe.grid(row=2, column=4) bt_valider = tk.Button(fr3, text='Valider', font = ("Calibri", 15), bg="white", fg="black", command=save_matprof) bt_valider.pack(fill=X) bt_annuler = tk.Button(fr3, text='Annuler', font = ("Calibri", 15), bg="white", fg="black", command=annuler) bt_annuler.pack(fill=X) fen_SaisiePerso.mainloop() else : # Ajout de la nouvelle entrée au dictionnaire ajout_dico (dico_profils, nomps, profil) # Sauvegarde du dictionnaire dans le fichier texte bdd = 'data/data_profils.txt' save_valtuple (bdd, dico_profils) save_pwd (nompn, 'ISN_2020') ask = tk.messagebox.askyesno("MERCI", nompn[1]+" "+nompn[0]+" a bien été enregistrée(e) dans la base.\n Souhaitez-vous ajouter une autre personne ?", parent=fen_SaisiePerso) fen_SaisiePerso.destroy() if ask == True : addpers(idusr) # retour sur la page d'ajout de personne else : adm.adm_accueil(idusr) # retour sur l'accueil d'admin
def check_supMat(): global idusr, fen_SupMat, mat_type, mat_mat sup_mat = mat_mat.get() nt = mat_type.get() if sup_mat == '' or nt == '': ask = tk.messagebox.showwarning( "ATTENTION", "Tous les champs doivent être remplis.\nMerci de corriger.", parent=fen_SupMat) else: data_not = open('data/data_notes.txt', 'r') dico_not = gen.decoup_valtuple(data_not) data_not.close() xy = 'ok' for k in dico_not: for i in range(0, len(dico_not[k])): if dico_not[k][i][0] == sup_mat: xy = 'ko' if xy != 'ko': ask = tk.messagebox.askyesno( "ATTENTION", "Cette opération va supprimer la matière dans TOUTES les bases de données.\nÊtes-vous sûr(e) de vouloir continuer ?", parent=fen_SupMat) if ask == True: # Suppression de l'utilisateur de la base data_com, data_lv1, data_lv2, data_spe if nt == 'Matière Commune': sup_type = 'com' elif nt == 'Spécialité': sup_type = 'spe' else: sup_type = nt.lower() tp = 'data/data_' + sup_type + '.txt' data_typ = open(tp, 'r') dico_typ = gen.decoup_valtuple(data_typ) data_typ.close() if sup_mat in dico_typ.keys(): del dico_typ[sup_mat] bdd = 'data/data_' + sup_type + '.txt' gen.save_valtuple(bdd, dico_typ) # Suppression de l'utilisateur de la base data_matieres data_matieres = open('data/data_matieres.txt', 'r') dico_matieres = gen.decoup_valtuple(data_matieres) data_matieres.close() LM = dico_matieres[sup_type].copy() for i in range(0, len(dico_matieres[sup_type])): if dico_matieres[sup_type][i][0] == sup_mat: LM.remove(dico_matieres[sup_type][i]) del dico_matieres[sup_type] dico_matieres[sup_type] = LM bdd = 'data/data_matieres.txt' gen.save_valtuple(bdd, dico_matieres) ask = tk.messagebox.askyesno( "MERCI", "Cette matière a bien été supprimée.\n Souhaitez-vous en supprimer une autre ?", parent=fen_SupMat) fen_SupMat.destroy() if ask == True: del_mat(idusr) # retour sur la page d'ajout de personne else: adm.adm_accueil(idusr) # retour sur l'accueil d'admin else: tk.messagebox.showerror( "ERREUR", "Des élèves ont des notes dans cette matière.\nVous devez retirer les notes AVANT de supprimer une matière.", parent=fen_SupMat)