Code source de app.t_applications.forms

from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, SubmitField, HiddenField, SelectField
from wtforms.validators import DataRequired

from app.models import TRoles, TProfils, CorRoleAppProfil
from app.env import db


[docs] class Application(FlaskForm): """ Classe du formulaire des applications """
[docs] nom_application = StringField( "Nom", validators=[DataRequired(message="Le nom de l'application est obligatoire")], )
[docs] code_application = StringField( "Code", validators=[DataRequired(message="Le code de l'application est obligatoire")], )
[docs] desc_application = StringField("Description")
[docs] id_parent = SelectField("Application parent", coerce=int, choices=[])
[docs] id_application = HiddenField("id")
[docs] submit = SubmitField("Enregistrer")
[docs] class AppProfil(FlaskForm): """ Classe du formulaire de profil d'un role pour une appli """
[docs] role = SelectField("Role", coerce=int)
[docs] profil = SelectField("Profil", coerce=int)
profil = SelectField("Profil", coerce=int)
[docs] submit = SubmitField("Enregistrer")
# on surchage le constructeur de la classe pour y passer l'id_application en paramètre # et filter les listes déroulante des profils et des roles def __init__(self, id_application, *args, **kwargs): super(AppProfil, self).__init__(*args, **kwargs) # on ne met que les users qui n'ont pas déja un profil dans l'app # sous requete utilisateurs ayant deja un profil pour une app user_with_profil_in_app = db.session.query(CorRoleAppProfil.id_role).filter( CorRoleAppProfil.id_application == id_application ) users_no_profils_in_app = ( db.session.query(TRoles) .filter(TRoles.id_role.notin_(user_with_profil_in_app)) .order_by(TRoles.nom_role.asc()) .all() ) users_select_choices = [] for user in users_no_profils_in_app: user_as_dict = user.as_dict_full_name() users_select_choices.append( (user_as_dict["id_role"], user_as_dict["full_name"]) ) self.role.choices = users_select_choices # choix des profils dispo pour une appli self.profil.choices = TProfils.choixSelect(id_application=id_application)