From 72079464bba8e99c938901221882fef38fcc0082 Mon Sep 17 00:00:00 2001 From: Lapin-Blanc Date: Mon, 23 Nov 2020 17:07:24 +0100 Subject: [PATCH] =?UTF-8?q?sur=20deux=20tables=20(localit=C3=A9s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaire.py | 99 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/formulaire.py b/formulaire.py index 381db71..86513c4 100755 --- a/formulaire.py +++ b/formulaire.py @@ -7,16 +7,42 @@ import sqlite3 db = sqlite3.connect('ecole.sqlite3') cursor = db.cursor() +cursor.execute("""PRAGMA foreign_keys=ON;""") +cursor.execute("""CREATE TABLE IF NOT EXISTS localites( + ID_Localite INTEGER PRIMARY KEY AUTOINCREMENT, + zipcode TEXT, + localite TEXT); + """) cursor.execute("""CREATE TABLE IF NOT EXISTS eleves( ID_Eleve INTEGER PRIMARY KEY AUTOINCREMENT, Prenom TEXT, - Nom TEXT); - """) -cursor.execute("""SELECT id_eleve, nom, prenom - FROM eleves - ORDER BY nom, prenom; + Nom TEXT, + RefLocalite INTEGER, + FOREIGN KEY(RefLocalite) REFERENCES localites(Id_Localite)); """) -liste_eleves = cursor.fetchall() + +def select_all_eleves(): + cursor.execute("""SELECT id_eleve, nom, prenom, ifnull(refLocalite, ''), ifnull(zipcode, '-'), ifnull(localite, '-') + FROM eleves + LEFT JOIN localites + ON eleves.reflocalite=localites.id_localite + ORDER BY nom, prenom; + """) + liste_eleves = cursor.fetchall() + return liste_eleves + + +def select_all_localites(): + cursor.execute("""SELECT id_Localite, zipcode, localite + FROM localites + ORDER BY zipcode, localite; + """) + liste_localite = cursor.fetchall() + return liste_localite + +liste_eleves = select_all_eleves() +liste_localites = select_all_localites() +liste_localites_combo = [f"{cp} {loc}" for _, cp, loc in liste_localites] def make_main_window(): col = [ @@ -28,9 +54,9 @@ def make_main_window(): layout = [ [sg.Text('Liste des élèves')], [sg.Table(values=liste_eleves, - headings=['Id', 'Prénom', 'Nom'], + headings=['', 'Prénom', 'Nom', '', 'Code postal', 'Localité'], max_col_width=25, - col_widths=[0, 20, 20], + col_widths=[0, 15, 15, 0, 10, 15], hide_vertical_scroll=True, background_color='light blue', text_color='black', @@ -43,7 +69,7 @@ def make_main_window(): ] window = sg.Window('Formulaire', layout=layout, - size=(500, 500), + size=(650, 500), finalize=True) return window @@ -52,7 +78,7 @@ def make_add_window(caption, role='create', initial_values=None, eleve_id=None): - prenom, nom = ('','') if not initial_values else initial_values + prenom, nom, id_localite, combo_value = ('','', '', '') if not initial_values else initial_values layout = [ [sg.Text(text='Prénom', size=(10,2)), sg.InputText(default_text=prenom, @@ -62,8 +88,15 @@ def make_add_window(caption, sg.InputText(default_text=nom, size=(20,2), k='nom')], + [sg.Text(text='Localité', size=(10,2)), + sg.Combo(liste_localites_combo, + size=(18,10), + k='localite', + enable_events=True, + default_value=combo_value)], [sg.Button('Valider', bind_return_key=True), - sg.Button('Annuler', bind_return_key=True)] + sg.Button('Annuler', bind_return_key=True)], + [sg.InputText(default_text=id_localite, k="id_localite", visible=False)] ] window = sg.Window(caption, layout=layout, @@ -74,11 +107,15 @@ def make_add_window(caption, def main(): + liste_eleves = select_all_eleves() + liste_localites = select_all_localites() + liste_localites_combo = [f"{cp} {loc}" for _, cp, loc in liste_localites] + window1, window2 = make_main_window(), None while True: window, event, values = sg.read_all_windows() - # print(f'window : {window}, event : {event}, values : {values}') + print(f'window : {window}, event : {event}, values : {values}') if window == window1: if event in (sg.WIN_CLOSED, 'Quitter'): break @@ -100,22 +137,18 @@ def main(): continue cursor.execute("""DELETE FROM eleves WHERE ID_Eleve=?""",(id_eleve,)) db.commit() - cursor.execute("""SELECT id_eleve, nom, prenom - FROM eleves - ORDER BY nom, prenom; - """) - liste_eleves = cursor.fetchall() + liste_eleves = select_all_eleves() window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves)) if event == 'Modifier': try: - id_eleve, nom, prenom = liste_eleves[values['table_eleves'][0]] + id_eleve, nom, prenom, refLocalite, zipcode, localite = liste_eleves[values['table_eleves'][0]] except IndexError: sg.popup_ok('Veuillez sélectionner un enregistrement à modifier') continue window2 = make_add_window('Modifier', - initial_values=[prenom, nom], + initial_values=[prenom, nom, refLocalite, zipcode+" "+localite], role='modify', eleve_id=id_eleve) window2.make_modal() @@ -125,18 +158,20 @@ def main(): window2.close() window2 = None + if event == 'localite': + index = liste_localites_combo.index(values['localite']) + ID_Localite = liste_localites[index][0] + window['id_localite'].update(ID_Localite) + if window.role == 'create' and event == 'Valider': prenom = values['prenom'].capitalize() nom = values['nom'].upper() + id_localite = values['id_localite'] # print(f"prenom : {prenom}, nom : {nom}") - cursor.execute("""INSERT INTO eleves(prenom, nom) - VALUES(?,?);""", (prenom, nom)) + cursor.execute("""INSERT INTO eleves(prenom, nom, refLocalite) + VALUES(?,?,?);""", (prenom, nom, id_localite)) db.commit() - cursor.execute("""SELECT id_eleve, nom, prenom - FROM eleves - ORDER BY nom, prenom; - """) - liste_eleves = cursor.fetchall() + liste_eleves = select_all_eleves() window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves)) window2.close() window2 = None @@ -149,18 +184,16 @@ def main(): continue prenom = values['prenom'].capitalize() nom = values['nom'].upper() + id_localite = values['id_localite'] # print(f"prenom : {prenom}, nom : {nom}") cursor.execute("""UPDATE eleves SET prenom=?, - nom=? + nom=?, + refLocalite=? WHERE id_eleve=?; - """, (prenom, nom, window.eleve_id)) + """, (prenom, nom, id_localite, window.eleve_id)) db.commit() - cursor.execute("""SELECT id_eleve, nom, prenom - FROM eleves - ORDER BY nom, prenom; - """) - liste_eleves = cursor.fetchall() + liste_eleves = select_all_eleves() window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves)) window2.close()