def identification_delete_wtf(): data_films_attribue_genre_delete = None btn_submit_del = None # L'utilisateur vient de cliquer sur le bouton "DELETE". Récupère la valeur de "id_genre" id_identification_delete = request.values[ 'id_identification_btn_delete_html'] # Objet formulaire pour effacer le genre sélectionné. form_delete = FromWTFDeleteIdentification() try: print(" on submit ", form_delete.validate_on_submit()) if request.method == "POST" and form_delete.validate_on_submit(): if form_delete.submit_btn_annuler.data: return redirect( url_for("identification_afficher", order_by="ASC", id_identification_sel=0)) if form_delete.submit_btn_conf_del.data: # Récupère les données afin d'afficher à nouveau # le formulaire "genres/genre_delete_wtf.html" lorsque le bouton "Etes-vous sur d'effacer ?" est cliqué. data_films_attribue_genre_delete = session[ 'data_films_attribue_genre_delete'] print("data_films_attribue_genre_delete ", data_films_attribue_genre_delete) flash( f"Effacer les identifications de façon définitive de la BD !!!", "danger") # L'utilisateur vient de cliquer sur le bouton de confirmation pour effacer... # On affiche le bouton "Effacer genre" qui va irrémédiablement EFFACER le genre btn_submit_del = True if form_delete.submit_btn_del.data: valeur_delete_dictionnaire = { "value_id_identification": id_identification_delete } print("valeur_delete_dictionnaire ", valeur_delete_dictionnaire) str_sql_delete_films_genre = """DELETE FROM t_collaborateur_identification WHERE FK_collaborateur = %(value_id_identification)s""" str_sql_delete_idgenre = """DELETE FROM t_identification WHERE id_identification = %(value_id_identification)s""" # Manière brutale d'effacer d'abord la "FK_collaborateur", même si elle n'existe pas dans la "t_collaborateur_details_collaborateur" # Ensuite on peut effacer le genre vu qu'il n'est plus "lié" (INNODB) dans la "t_collaborateur_details_collaborateur" with MaBaseDeDonnee() as mconn_bd: mconn_bd.mabd_execute(str_sql_delete_films_genre, valeur_delete_dictionnaire) mconn_bd.mabd_execute(str_sql_delete_idgenre, valeur_delete_dictionnaire) flash(f"Identification définitivement effacé !!", "info") print(f"Identification définitivement effacé !!") # afficher les données return redirect( url_for('identification_afficher', order_by="ASC", id_identification_sel=0)) if request.method == "GET": valeur_select_dictionnaire = { "value_id_identification": id_identification_delete } print(id_identification_delete, type(id_identification_delete)) # Requête qui affiche tous les films qui ont le genre que l'utilisateur veut effacer str_sql_identification_delete = """SELECT id_collaborateur_identification, date_et_heure_arrivee, date_et_heure_depart FROM t_collaborateur_identification INNER JOIN t_identification ON t_collaborateur_identification.FK_identification = t_identification.id_identification INNER JOIN t_collaborateur ON t_collaborateur_identification.FK_collaborateur = t_collaborateur.id_collaborateur WHERE FK_collaborateur = %(value_id_identification)s""" mybd_curseur = MaBaseDeDonnee().connexion_bd.cursor() mybd_curseur.execute(str_sql_identification_delete, valeur_select_dictionnaire) data_films_attribue_genre_delete = mybd_curseur.fetchall() print("data_films_attribue_genre_delete...", data_films_attribue_genre_delete) # Nécessaire pour mémoriser les données afin d'afficher à nouveau # le formulaire "genres/genre_delete_wtf.html" lorsque le bouton "Etes-vous sur d'effacer ?" est cliqué. session[ 'data_films_attribue_genre_delete'] = data_films_attribue_genre_delete # Opération sur la BD pour récupérer "id_genre" et "nom_famille" de la "t_genre" str_sql_id_identification = "SELECT id_identification, nom_utilisateur, courriel FROM t_identification WHERE id_identification = %(value_id_identification)s" mybd_curseur.execute(str_sql_id_identification, valeur_select_dictionnaire) # Une seule valeur est suffisante "fetchone()", # vu qu'il n'y a qu'un seul champ "nom genre" pour l'action DELETE data_nom_utilisateur_identification = mybd_curseur.fetchone() print("data_nom_utilisateur_identification ", data_nom_utilisateur_identification, " type ", type(data_nom_utilisateur_identification), " genre ", data_nom_utilisateur_identification["nom_utilisateur"]) # Afficher la valeur sélectionnée dans le champ du formulaire "genre_delete_wtf.html" form_delete.nom_utilisateur_identification_delete_wtf.data = data_nom_utilisateur_identification[ "nom_utilisateur"] form_delete.courriel_identification_delete_wtf.data = data_nom_utilisateur_identification[ "courriel"] # Le bouton pour l'action "DELETE" dans le form. "genre_delete_wtf.html" est caché. btn_submit_del = False # OM 2020.04.16 ATTENTION à l'ordre des excepts, il est très important de respecter l'ordre. except KeyError: flash( f"__KeyError dans identification_delete_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]} {sys.exc_info()[2]}", "danger") except ValueError: flash( f"Erreur dans identification_delete_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]}", "danger") except (pymysql.err.OperationalError, pymysql.ProgrammingError, pymysql.InternalError, pymysql.err.IntegrityError, TypeError) as erreur_gest_genr_crud: code, msg = erreur_gest_genr_crud.args flash( f"attention : {error_codes.get(code, msg)} {erreur_gest_genr_crud} ", "danger") flash( f"Erreur dans identification_delete_wtf : {sys.exc_info()[0]} " f"{erreur_gest_genr_crud.args[0]} , " f"{erreur_gest_genr_crud}", "danger") flash( f"__KeyError dans identification_delete_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]} {sys.exc_info()[2]}", "danger") return render_template( "identification/identification_delete_wtf.html", form_delete=form_delete, btn_submit_del=btn_submit_del, data_identification_associes=data_films_attribue_genre_delete)
def identification_update_wtf(): # L'utilisateur vient de cliquer sur le bouton "EDIT". Récupère la valeur de "id_genre" id_identification_update = request.values[ 'id_identification_btn_edit_html'] # Objet formulaire pour l'UPDATE form_update = FormWTFUpdateIdentification() try: print(" on submit ", form_update.validate_on_submit()) if form_update.validate_on_submit(): # Récupèrer la valeur du champ depuis "genre_update_wtf.html" après avoir cliqué sur "SUBMIT". # Puis la convertir en lettres minuscules. nom_utilisateur_identification_update = form_update.nom_utilisateur_identification_update_wtf.data nom_utilisateur_identification_update = nom_utilisateur_identification_update.capitalize( ) courriel_identification_update = form_update.courriel_identification_update_wtf.data courriel_identification_update = courriel_identification_update.lower( ) valeur_update_dictionnaire = { "value_id_identification": id_identification_update, "value_nom_utilisateur_identification": nom_utilisateur_identification_update, "value_courriel_identification": courriel_identification_update } print("valeur_update_dictionnaire ", valeur_update_dictionnaire) str_sql_update_nom_utilisateur = """UPDATE t_identification SET nom_utilisateur = %(value_nom_utilisateur_identification)s, courriel = %(value_courriel_identification)s WHERE id_identification = %(value_id_identification)s""" with MaBaseDeDonnee() as mconn_bd: mconn_bd.mabd_execute(str_sql_update_nom_utilisateur, valeur_update_dictionnaire) flash(f"Donnée mise à jour !!", "info") print(f"Donnée mise à jour !!") # afficher et constater que la donnée est mise à jour. # Affiche seulement la valeur modifiée, "ASC" et l'"id_collaborateur_update" return redirect( url_for('identification_afficher', order_by="ASC", id_identification_sel=id_identification_update)) elif request.method == "GET": # Opération sur la BD pour récupérer "id_genre" et "nom_famille" de la "t_genre" str_sql_id_identification = "SELECT id_identification, nom_utilisateur, courriel FROM t_identification WHERE id_identification = %(value_id_identification)s" valeur_select_dictionnaire = { "value_id_identification": id_identification_update } mybd_curseur = MaBaseDeDonnee().connexion_bd.cursor() mybd_curseur.execute(str_sql_id_identification, valeur_select_dictionnaire) # Une seule valeur est suffisante "fetchone()", vu qu'il n'y a qu'un seul champ "nom genre" pour l'UPDATE data_nom_utilisateur_identification_collaborateur = mybd_curseur.fetchone( ) print( " ", data_nom_utilisateur_identification_collaborateur, " type ", type(data_nom_utilisateur_identification_collaborateur), " nom_utilisateur ", data_nom_utilisateur_identification_collaborateur["courriel"]) # Afficher la valeur sélectionnée dans le champ du formulaire "genre_update_wtf.html" form_update.nom_utilisateur_identification_update_wtf.data = data_nom_utilisateur_identification_collaborateur[ "nom_utilisateur"] form_update.courriel_identification_update_wtf.data = data_nom_utilisateur_identification_collaborateur[ "courriel"] # OM 2020.04.16 ATTENTION à l'ordre des excepts, il est très important de respecter l'ordre. except KeyError: flash( f"__KeyError dans genre_update_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]} {sys.exc_info()[2]}", "danger") except ValueError: flash( f"Erreur dans genre_update_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]}", "danger") except (pymysql.err.OperationalError, pymysql.ProgrammingError, pymysql.InternalError, pymysql.err.IntegrityError, TypeError) as erreur_gest_genr_crud: code, msg = erreur_gest_genr_crud.args flash( f"attention : {error_codes.get(code, msg)} {erreur_gest_genr_crud} ", "danger") flash( f"Erreur dans genre_update_wtf : {sys.exc_info()[0]} " f"{erreur_gest_genr_crud.args[0]} , " f"{erreur_gest_genr_crud}", "danger") flash( f"__KeyError dans genre_update_wtf : {sys.exc_info()[0]} {sys.exc_info()[1]} {sys.exc_info()[2]}", "danger") return render_template("identification/identification_update_wtf.html", form_update=form_update)