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)