export ref. comp. en json
This commit is contained in:
parent
d2b69c2f73
commit
d435f3b835
@ -51,6 +51,14 @@ class ApcReferentielCompetences(db.Model, XMLModel):
|
|||||||
"""Représentation complète du ref. de comp.
|
"""Représentation complète du ref. de comp.
|
||||||
comme un dict.
|
comme un dict.
|
||||||
"""
|
"""
|
||||||
|
return {
|
||||||
|
"dept_id": self.dept_id,
|
||||||
|
"specialite": self.specialite,
|
||||||
|
"specialite_long": self.specialite_long,
|
||||||
|
"type_titre": self.type_titre,
|
||||||
|
"competences": {x.titre: x.to_dict() for x in self.competences},
|
||||||
|
"parcours": {x.code: x.to_dict() for x in self.parcours},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ApcCompetence(db.Model, XMLModel):
|
class ApcCompetence(db.Model, XMLModel):
|
||||||
@ -62,7 +70,6 @@ class ApcCompetence(db.Model, XMLModel):
|
|||||||
titre_long = db.Column(db.Text())
|
titre_long = db.Column(db.Text())
|
||||||
couleur = db.Column(db.Text())
|
couleur = db.Column(db.Text())
|
||||||
numero = db.Column(db.Integer) # ordre de présentation
|
numero = db.Column(db.Integer) # ordre de présentation
|
||||||
couleur = db.Column(db.Text())
|
|
||||||
_xml_attribs = { # xml_attrib : attribute
|
_xml_attribs = { # xml_attrib : attribute
|
||||||
"name": "titre",
|
"name": "titre",
|
||||||
"libelle_long": "titre_long",
|
"libelle_long": "titre_long",
|
||||||
@ -86,6 +93,19 @@ class ApcCompetence(db.Model, XMLModel):
|
|||||||
cascade="all, delete-orphan",
|
cascade="all, delete-orphan",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
"titre": self.titre,
|
||||||
|
"titre_long": self.titre_long,
|
||||||
|
"couleur": self.couleur,
|
||||||
|
"numero": self.numero,
|
||||||
|
"situations": [x.to_dict() for x in self.situations],
|
||||||
|
"composantes_essentielles": [
|
||||||
|
x.to_dict() for x in self.composantes_essentielles
|
||||||
|
],
|
||||||
|
"niveaux": {x.annee: x.to_dict() for x in self.niveaux},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ApcSituationPro(db.Model, XMLModel):
|
class ApcSituationPro(db.Model, XMLModel):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
@ -94,6 +114,8 @@ class ApcSituationPro(db.Model, XMLModel):
|
|||||||
)
|
)
|
||||||
libelle = db.Column(db.Text(), nullable=False)
|
libelle = db.Column(db.Text(), nullable=False)
|
||||||
# aucun attribut (le text devient le libellé)
|
# aucun attribut (le text devient le libellé)
|
||||||
|
def to_dict(self):
|
||||||
|
return {"libelle": self.libelle}
|
||||||
|
|
||||||
|
|
||||||
class ApcComposanteEssentielle(db.Model, XMLModel):
|
class ApcComposanteEssentielle(db.Model, XMLModel):
|
||||||
@ -103,6 +125,9 @@ class ApcComposanteEssentielle(db.Model, XMLModel):
|
|||||||
)
|
)
|
||||||
libelle = db.Column(db.Text(), nullable=False)
|
libelle = db.Column(db.Text(), nullable=False)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {"libelle": self.libelle}
|
||||||
|
|
||||||
|
|
||||||
class ApcNiveau(db.Model, XMLModel):
|
class ApcNiveau(db.Model, XMLModel):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
@ -120,6 +145,14 @@ class ApcNiveau(db.Model, XMLModel):
|
|||||||
cascade="all, delete-orphan",
|
cascade="all, delete-orphan",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
"libelle": self.libelle,
|
||||||
|
"annee": self.annee,
|
||||||
|
"ordre": self.ordre,
|
||||||
|
"app_critiques": {x.code: x.to_dict() for x in self.app_critiques},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ApcAppCritique(db.Model, XMLModel):
|
class ApcAppCritique(db.Model, XMLModel):
|
||||||
"Apprentissage Critique BUT"
|
"Apprentissage Critique BUT"
|
||||||
@ -136,9 +169,7 @@ class ApcAppCritique(db.Model, XMLModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
result = dict(self.__dict__)
|
return {"code": self.code, "libelle": self.libelle}
|
||||||
result.pop("_sa_instance_state", None)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_label(self):
|
def get_label(self):
|
||||||
return self.code + " - " + self.titre
|
return self.code + " - " + self.titre
|
||||||
@ -173,18 +204,30 @@ class ApcParcours(db.Model, XMLModel):
|
|||||||
cascade="all, delete-orphan",
|
cascade="all, delete-orphan",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return {
|
||||||
|
"code": self.code,
|
||||||
|
"numero": self.numero,
|
||||||
|
"libelle": self.libelle,
|
||||||
|
"annees": {x.ordre: x.to_dict() for x in self.annees},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ApcAnneeParcours(db.Model, XMLModel):
|
class ApcAnneeParcours(db.Model, XMLModel):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
parcours_id = db.Column(
|
parcours_id = db.Column(
|
||||||
db.Integer, db.ForeignKey("apc_parcours.id"), nullable=False
|
db.Integer, db.ForeignKey("apc_parcours.id"), nullable=False
|
||||||
)
|
)
|
||||||
numero = db.Column(db.Integer) # ordre de présentation
|
ordre = db.Column(db.Integer)
|
||||||
|
|
||||||
# L'attribut s'appelle "ordre" dans le XML Orébut
|
def to_dict(self):
|
||||||
_xml_attribs = { # xml_attrib : attribute
|
return {
|
||||||
"ordre": "numero",
|
"ordre": self.ordre,
|
||||||
}
|
"competences": {
|
||||||
|
x.competence.titre: {"niveau": x.niveau, "titre": x.competence.titre}
|
||||||
|
for x in self.niveaux_competences
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ApcParcoursNiveauCompetence(db.Model):
|
class ApcParcoursNiveauCompetence(db.Model):
|
||||||
@ -215,7 +258,7 @@ class ApcParcoursNiveauCompetence(db.Model):
|
|||||||
annee_parcours = db.relationship(
|
annee_parcours = db.relationship(
|
||||||
ApcAnneeParcours,
|
ApcAnneeParcours,
|
||||||
backref=db.backref(
|
backref=db.backref(
|
||||||
"competences",
|
"niveaux_competences",
|
||||||
passive_deletes=True,
|
passive_deletes=True,
|
||||||
cascade="save-update, merge, delete, delete-orphan",
|
cascade="save-update, merge, delete, delete-orphan",
|
||||||
),
|
),
|
||||||
|
@ -16,7 +16,7 @@ notes_bp = Blueprint("notes", __name__)
|
|||||||
users_bp = Blueprint("users", __name__)
|
users_bp = Blueprint("users", __name__)
|
||||||
absences_bp = Blueprint("absences", __name__)
|
absences_bp = Blueprint("absences", __name__)
|
||||||
|
|
||||||
from app.views import scodoc, notes, scolar, absences, users, pn_modules
|
from app.views import scodoc, notes, scolar, absences, users, pn_modules, refcomp
|
||||||
|
|
||||||
|
|
||||||
# Cette fonction est bien appelée avant toutes les requêtes
|
# Cette fonction est bien appelée avant toutes les requêtes
|
||||||
|
30
app/views/refcomp.py
Normal file
30
app/views/refcomp.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
"""
|
||||||
|
PN / Référentiel de compétences
|
||||||
|
|
||||||
|
Emmanuel Viennet, 2021
|
||||||
|
"""
|
||||||
|
|
||||||
|
from flask import url_for
|
||||||
|
from flask import jsonify
|
||||||
|
from flask import current_app, g, request
|
||||||
|
from flask.templating import render_template
|
||||||
|
from flask_login import current_user
|
||||||
|
from werkzeug.utils import redirect
|
||||||
|
|
||||||
|
from config import Config
|
||||||
|
|
||||||
|
from app import db
|
||||||
|
from app import models
|
||||||
|
|
||||||
|
from app.decorators import scodoc, permission_required
|
||||||
|
from app.models.but_refcomp import ApcReferentielCompetences
|
||||||
|
from app.scodoc.sco_permissions import Permission
|
||||||
|
from app.views import notes_bp as bp
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/pn/comp/<int:refcomp_id>")
|
||||||
|
@scodoc
|
||||||
|
@permission_required(Permission.ScoView)
|
||||||
|
def refcomp(refcomp_id):
|
||||||
|
ref = ApcReferentielCompetences.query.get_or_404(refcomp_id)
|
||||||
|
return jsonify(ref.to_dict())
|
44
migrations/versions/eed6d50fd9cb_refcomp.py
Normal file
44
migrations/versions/eed6d50fd9cb_refcomp.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
"""refcomp
|
||||||
|
|
||||||
|
Revision ID: eed6d50fd9cb
|
||||||
|
Revises: 00ad500fb118
|
||||||
|
Create Date: 2021-12-02 17:34:10.999132
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = 'eed6d50fd9cb'
|
||||||
|
down_revision = '00ad500fb118'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_table('app_crit')
|
||||||
|
op.drop_table('modules_acs')
|
||||||
|
op.add_column('apc_annee_parcours', sa.Column('ordre', sa.Integer(), nullable=True))
|
||||||
|
op.drop_column('apc_annee_parcours', 'numero')
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('apc_annee_parcours', sa.Column('numero', sa.INTEGER(), autoincrement=False, nullable=True))
|
||||||
|
op.drop_column('apc_annee_parcours', 'ordre')
|
||||||
|
op.create_table('modules_acs',
|
||||||
|
sa.Column('module_id', sa.INTEGER(), autoincrement=False, nullable=True),
|
||||||
|
sa.Column('ac_id', sa.INTEGER(), autoincrement=False, nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(['ac_id'], ['app_crit.id'], name='modules_acs_ac_id_fkey'),
|
||||||
|
sa.ForeignKeyConstraint(['module_id'], ['notes_modules.id'], name='modules_acs_module_id_fkey')
|
||||||
|
)
|
||||||
|
op.create_table('app_crit',
|
||||||
|
sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('code', sa.TEXT(), autoincrement=False, nullable=False),
|
||||||
|
sa.Column('titre', sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint('id', name='app_crit_pkey')
|
||||||
|
)
|
||||||
|
# ### end Alembic commands ###
|
Loading…
Reference in New Issue
Block a user