Example #1
0
def stuff_edit():
    # OM 2020.04.07 Les données sont affichées dans un formulaire, l'affichage de la sélection
    # d'une seule ligne choisie par le bouton "edit" dans le formulaire "user_afficher.html"

    obj_actions_user = GestionUser()
    obj_actions_state_stuff = GestionStateStuff()
    obj_actions_type_payment = GestionTypePayment()
    data_user = obj_actions_user.user_afficher_data()
    data_state_stuff = obj_actions_state_stuff.state_stuff_afficher_data(
        valeur_order_by='ASC', id_state_stuff_sel=0)
    data_type_payment = obj_actions_type_payment.type_payment_afficher_data(
        valeur_order_by='ASC', id_type_payment_sel=0)

    if request.method == 'GET':
        try:
            # Récupérer la valeur de "id_user" du formulaire html "user_afficher.html"
            # l'utilisateur clique sur le lien "edit" et on récupére la valeur de "id_user"
            # grâce à la variable "id_user_edit_html"
            # <a href="{{ url_for('user_edit', id_user_edit_html=row.id_user) }}">Edit</a>
            id_stuff_edit = request.values['id_stuff_edit_html']

            # Pour afficher dans la console la valeur de "id_user_edit", une façon simple de se rassurer,
            # sans utiliser le DEBUGGER
            print(id_stuff_edit)

            # Constitution d'un dictionnaire et insertion dans la BD
            valeur_select_dictionnaire = {"value_id_stuff": id_stuff_edit}

            # OM 2020.04.09 Objet contenant toutes les méthodes pour gérer (CRUD) les données.
            obj_actions_stuff = GestionStuff()

            # OM 2019.04.02 La commande MySql est envoyée à la BD
            data_id_stuff = obj_actions_stuff.edit_stuff_data(
                valeur_select_dictionnaire)
            print("dataIdStuff ", data_id_stuff, "type ", type(data_id_stuff))
            # Message ci-après permettent de donner un sentiment rassurant aux utilisateurs.
            flash(f"Editer le stuff !!!")

        except (Exception, pymysql.err.OperationalError,
                pymysql.ProgrammingError, pymysql.InternalError,
                pymysql.IntegrityError, TypeError) as erreur:

            # On indique un problème, mais on ne dit rien en ce qui concerne la résolution.
            print("Problème avec la BD ! : %s", erreur)
            # OM 2020.04.09 On dérive "Exception" dans "MaBdErreurConnexion" fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(
                f"RGG Exception {msg_erreurs['ErreurConnexionBD']['message']}"
                f"et son status {msg_erreurs['ErreurConnexionBD']['status']}")

    return render_template("stuff/stuff_edit.html",
                           data_user=data_user,
                           data_state_stuff=data_state_stuff,
                           data_type_payment=data_type_payment,
                           data=data_id_stuff)
Example #2
0
def user_add():
    # OM 2019.03.25 Pour savoir si les données d'un formulaire sont un affichage
    # ou un envoi de donnée par des champs utilisateurs.
    obj_actions_gender = GestionGenders()
    data_genders = obj_actions_gender.gender_afficher_data(
        valeur_order_by='ASC', id_genders_sel=0)
    if request.method == "POST":
        try:
            # OM 2020.04.09 Objet contenant toutes les méthodes pour gérer (CRUD) les données.
            obj_actions_user = GestionUser()
            # OM 2020.04.09 Récupère le contenu du champ dans le formulaire HTML "user_add.html"
            firstname_user = request.form['firstname_user_html']
            lastname_user = request.form['lastname_user_html']
            mail = request.form['mail_html']
            phone = request.form['phone_html']
            address = request.form['address_html']
            city = request.form['city_html']
            npa = request.form['npa_html']
            gender = request.form['gender_select']
            date_user = request.form['date_user_html']

            # OM 2019.04.04 On ne doit pas accepter des valeurs vides, des valeurs avec des chiffres,
            # des valeurs avec des caractères qui ne sont pas des lettres.
            # Accepte le trait d'union ou l'apostrophe, et l'espace entre deux mots, mais pas plus d'une occurence.
            if not re.match(
                    "^([A-Z]|[a-z\u00C0-\u00FF])[A-Za-z\u00C0-\u00FF]*['\\- ]?[A-Za-z\u00C0-\u00FF]+$",
                    firstname_user):
                # OM 2019.03.28 Message humiliant à l'attention de l'utilisateur.
                flash(
                    f"Une entrée...incorrecte !! Pas de chiffres, de caractères spéciaux, d'espace à double, "
                    f"de double apostrophe, de double trait union et ne doit pas être vide.",
                    "Danger")
                # On doit afficher à nouveau le formulaire "user_add.html" à cause des erreurs de "claviotage"
                return redirect(url_for("user_add"))
            else:

                # Constitution d'un dictionnaire et insertion dans la BD
                valeurs_insertion_dictionnaire = {
                    "value_firstname_user": firstname_user,
                    "value_lastname_user": lastname_user,
                    "value_mail": mail,
                    "value_phone": phone,
                    "value_address": address,
                    "value_city": city,
                    "value_npa": npa,
                    "value_gender": gender,
                    "value_date_user": date_user
                }

                obj_actions_user.add_user_data(valeurs_insertion_dictionnaire)

                # OM 2019.03.25 Les 2 lignes ci-après permettent de donner un sentiment rassurant aux utilisateurs.
                flash(f"Données insérées !!", "Sucess")
                print(f"Données insérées !!")
                # On va interpréter la "route" 'user_afficher', car l'utilisateur
                # doit voir le nouveau firstname_user qu'il vient d'insérer.
                return redirect(url_for('user_afficher'))

        # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre.
        # except pymysql.err.IntegrityError as erreur:
        # OM 2020.04.09 On dérive "pymysql.err.IntegrityError" dans "MaBdErreurDoublon" fichier "erreurs.py"
        # Ainsi on peut avoir un message d'erreur personnalisé.
        #raise MaBdErreurDoublon(
        # f"RGG pei {msg_erreurs['ErreurDoublonValue']['message']} et son status {msg_erreurs['ErreurDoublonValue']['status']}")

        # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre.
        #except (pymysql.err.OperationalError,
        #     pymysql.ProgrammingError,
        #     pymysql.InternalError,
        #     TypeError) as erreur:
        # flash(f"Autre erreur {erreur}")
        #raise MonErreur(f"Autre erreur")

        # OM 2020.04.16 ATTENTION à l'ordre des excepts très important de respecter l'ordre.
        except Exception as erreur:
            # OM 2020.04.09 On dérive "Exception" dans "MaBdErreurConnexion" fichier "erreurs.py"
            # Ainsi on peut avoir un message d'erreur personnalisé.
            raise MaBdErreurConnexion(
                f"RGG Exception {msg_erreurs['ErreurConnexionBD']['message']} et son status {msg_erreurs['ErreurConnexionBD']['status']}"
            )
    # OM 2020.04.07 Envoie la page "HTML" au serveur.
    return render_template("user/user_add.html", data_genders=data_genders)