forked from eric.li/EditionPN
Compare commits
9 Commits
c843bfd478
...
db7db63f47
Author | SHA1 | Date | |
---|---|---|---|
db7db63f47 | |||
31d0aaf29b | |||
932fdfddef | |||
835990a81e | |||
0c5345f171 | |||
9adb5a6292 | |||
564af1ea69 | |||
7435478a23 | |||
ba0d6c3ba7 |
77
app/forms.py
77
app/forms.py
@ -17,7 +17,7 @@ REPERTOIRE_EXPORT = "./export/"
|
|||||||
if not os.path.exists(REPERTOIRE_EXPORT):
|
if not os.path.exists(REPERTOIRE_EXPORT):
|
||||||
os.makedirs(REPERTOIRE_EXPORT)
|
os.makedirs(REPERTOIRE_EXPORT)
|
||||||
|
|
||||||
categorie_liste = ["saes","ressources","acs"]
|
categorie_liste = ["saes","ressources","acs","ues","semestres","competences"]
|
||||||
categorie_to_model = {"saes": "SAE", "ressources": "Ressource", "acs": "AC", "coefsaes": "CoefSAE", "coefressources": "CoefRessource", "pns": "PN", "semestres": "Semestre", "competences": "Competence"}
|
categorie_to_model = {"saes": "SAE", "ressources": "Ressource", "acs": "AC", "coefsaes": "CoefSAE", "coefressources": "CoefRessource", "pns": "PN", "semestres": "Semestre", "competences": "Competence"}
|
||||||
separateur = None
|
separateur = None
|
||||||
|
|
||||||
@ -44,15 +44,18 @@ class AccueilForm(FlaskForm):
|
|||||||
reset = SubmitField("Reset")
|
reset = SubmitField("Reset")
|
||||||
exporterJSON = SubmitField("ExporterJSON")
|
exporterJSON = SubmitField("ExporterJSON")
|
||||||
exporterYAML = SubmitField("ExporterYAML")
|
exporterYAML = SubmitField("ExporterYAML")
|
||||||
importerJSON = SubmitField("ImporterJSON")
|
fichier = FileField("Choisir fichier", validators=[FileAllowed(["yml","json"], "Fichier YAML/JSON seulement!")])
|
||||||
importerYAML = SubmitField("ImporterYAML")
|
importer = SubmitField("Importer")
|
||||||
|
|
||||||
def ListRef(self):
|
def ListRef(self):
|
||||||
result = {"semestres": [], "competences": [], "acs": [], "pns": [], "saes": [], "coefsaes": [], "ressources": [], "coefressources": []}
|
result = {"semestres": [], "competences": [], "acs": [], "pns": [], "saes": [], "coefsaes": [], "ressources": [], "coefressources": []}
|
||||||
|
associations = {"semestres_competences": models.Semestres_Competences, "acs_competences": models.ACs_Competences, "ressources_acs": models.Ressources_ACs, "ressources_saes": models.Ressources_SAEs, "saes_acs": models.SAEs_ACs}
|
||||||
for key in result.keys():
|
for key in result.keys():
|
||||||
model = getattr(models, categorie_to_model[key])
|
model = getattr(models, categorie_to_model[key])
|
||||||
for ref in model.query.all():
|
for ref in model.query.all():
|
||||||
result[key].append(ref.export())
|
result[key].append(ref.export())
|
||||||
|
for assoName, association in associations.items():
|
||||||
|
result[assoName] = db.session.query(association).all()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def exportJSON(self):
|
def exportJSON(self):
|
||||||
@ -65,7 +68,71 @@ class AccueilForm(FlaskForm):
|
|||||||
result = self.ListRef()
|
result = self.ListRef()
|
||||||
fichier = REPERTOIRE_EXPORT + "referentiels" + ".yml"
|
fichier = REPERTOIRE_EXPORT + "referentiels" + ".yml"
|
||||||
with open(fichier, "w", encoding="utf8") as fid:
|
with open(fichier, "w", encoding="utf8") as fid:
|
||||||
yaml.dump(yaml.safe_load(json.dumps(result, cls=CustomEncoder)), fid, indent=4)
|
yaml.dump(yaml.safe_load(json.dumps(result, cls=CustomEncoder)), fid, indent=4, sort_keys=False)
|
||||||
|
|
||||||
|
def importRef(self):
|
||||||
|
fichier = self.fichier.data
|
||||||
|
filename, extension = fichier.filename.split(".")
|
||||||
|
if extension == "yml":
|
||||||
|
filedata = yaml.safe_load(fichier.read())
|
||||||
|
elif extension == "json":
|
||||||
|
filedata = json.load(fichier)
|
||||||
|
else:
|
||||||
|
self.fichier.errors.append("Une erreur a été produite.")
|
||||||
|
return
|
||||||
|
for categorie, liste in filedata.items():
|
||||||
|
if "_" not in categorie:
|
||||||
|
model = getattr(models, categorie_to_model[categorie])
|
||||||
|
for ref in liste:
|
||||||
|
print("Adding:", ref)
|
||||||
|
if categorie == "semestres":
|
||||||
|
semestre = model.query.filter_by(num=ref["num"]).first()
|
||||||
|
if not semestre:
|
||||||
|
ref["ues"] = []
|
||||||
|
db.session.add(model(**ref))
|
||||||
|
else:
|
||||||
|
print("Not added: Already in database")
|
||||||
|
elif "coef" in categorie:
|
||||||
|
competence = models.Competence.query.filter_by(code=ref["competence"]).first()
|
||||||
|
if categorie == "coefsaes":
|
||||||
|
sae = models.SAE.query.filter_by(code=ref["sae"]).first()
|
||||||
|
if not models.CoefSAE.query.filter_by(sae=sae,competence=competence).first():
|
||||||
|
db.session.add(models.CoefSAE(sae=sae,competence=competence,coef=ref["coef"]))
|
||||||
|
else:
|
||||||
|
print("Not added: Already in database")
|
||||||
|
elif categorie == "coefressources":
|
||||||
|
ressource = models.Ressource.query.filter_by(code=ref["ressource"]).first()
|
||||||
|
if not models.CoefRessource.query.filter_by(ressource=ressource, competence=competence).first():
|
||||||
|
db.session.add(models.CoefRessource(ressource=ressource, competence=competence,coef=ref["coef"]))
|
||||||
|
else:
|
||||||
|
print("Not added: Already in database")
|
||||||
|
else:
|
||||||
|
refBDD = model.query.filter_by(code=ref["code"]).first()
|
||||||
|
if not refBDD:
|
||||||
|
for categorieRef, valeur in ref.items():
|
||||||
|
if categorieRef in categorie_liste:
|
||||||
|
ref[categorieRef] = []
|
||||||
|
db.session.add(model(**ref))
|
||||||
|
else:
|
||||||
|
print("Not added: Already in database")
|
||||||
|
else:
|
||||||
|
for assoc in liste:
|
||||||
|
print("Adding association:", assoc)
|
||||||
|
firstModelname, secondModelname = categorie.split("_")
|
||||||
|
firstVal, secondVal = assoc
|
||||||
|
firstModel = getattr(models, categorie_to_model[firstModelname])
|
||||||
|
secondModel = getattr(models, categorie_to_model[secondModelname])
|
||||||
|
if firstModelname == "semestres":
|
||||||
|
firstRef = firstModel.query.filter_by(num=firstVal).first()
|
||||||
|
secondRef = secondModel.query.filter_by(code=secondVal).first()
|
||||||
|
if secondRef not in firstRef.ues: firstRef.ues.append(secondRef)
|
||||||
|
else: print("Not added: Association already exist")
|
||||||
|
else:
|
||||||
|
firstRef = firstModel.query.filter_by(code=firstVal).first()
|
||||||
|
secondRef = secondModel.query.filter_by(code=secondVal).first()
|
||||||
|
if secondRef not in firstRef.__dict__[secondModelname]: firstRef.__dict__[secondModelname].append(secondRef)
|
||||||
|
else: print("Not added: Association already exist")
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
class CoefForm(FlaskForm):
|
class CoefForm(FlaskForm):
|
||||||
objetformation = HiddenField("Objet de formation")
|
objetformation = HiddenField("Objet de formation")
|
||||||
@ -162,7 +229,7 @@ class PNForm(Form):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = models.PN
|
model = models.PN
|
||||||
|
|
||||||
type = RadioField("Type", choices=["1","2","3"])
|
type = RadioField("Type de parcours", choices=["1","2","3"])
|
||||||
|
|
||||||
class ACForm(Form):
|
class ACForm(Form):
|
||||||
regex = "^AC\d{4}$"
|
regex = "^AC\d{4}$"
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
Semestres_Competences = db.Table("Semestres_Competences",
|
Semestres_Competences = db.Table("Semestres_Competences",
|
||||||
db.Column("Semestre_num", db.String(1), db.ForeignKey("semestre.num")),
|
db.Column("Semestre_num", db.String(32), db.ForeignKey("semestre.num")),
|
||||||
db.Column("Competence_code", db.String(3), db.ForeignKey("competence.code"))
|
db.Column("Competence_code", db.String(32), db.ForeignKey("competence.code"))
|
||||||
)
|
)
|
||||||
|
|
||||||
ACs_Competences = db.Table("ACs_Competences",
|
ACs_Competences = db.Table("ACs_Competences",
|
||||||
db.Column("AC_code", db.String(6), db.ForeignKey("AC.code")),
|
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code")),
|
||||||
db.Column("Competence_code", db.String(3), db.ForeignKey("competence.code"))
|
db.Column("Competence_code", db.String(32), db.ForeignKey("competence.code"))
|
||||||
)
|
)
|
||||||
|
|
||||||
Ressources_ACs = db.Table("Ressources_ACs",
|
Ressources_ACs = db.Table("Ressources_ACs",
|
||||||
db.Column("Ressource_code", db.String(4), db.ForeignKey("ressource.code")),
|
db.Column("Ressource_code", db.String(32), db.ForeignKey("ressource.code")),
|
||||||
db.Column("AC_code", db.String(6), db.ForeignKey("AC.code"))
|
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code"))
|
||||||
)
|
)
|
||||||
|
|
||||||
Ressources_SAEs = db.Table("Ressources_SAEs",
|
Ressources_SAEs = db.Table("Ressources_SAEs",
|
||||||
db.Column("Ressource_code", db.String(4), db.ForeignKey("ressource.code")),
|
db.Column("Ressource_code", db.String(32), db.ForeignKey("ressource.code")),
|
||||||
db.Column("SAE_code", db.String(5), db.ForeignKey("SAE.code"))
|
db.Column("SAE_code", db.String(32), db.ForeignKey("SAE.code"))
|
||||||
)
|
)
|
||||||
|
|
||||||
SAEs_ACs = db.Table("SAEs_ACs",
|
SAEs_ACs = db.Table("SAEs_ACs",
|
||||||
db.Column("SAE_code", db.String(5), db.ForeignKey("SAE.code")),
|
db.Column("SAE_code", db.String(32), db.ForeignKey("SAE.code")),
|
||||||
db.Column("AC_code", db.String(6), db.ForeignKey("AC.code"))
|
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code"))
|
||||||
)
|
)
|
||||||
|
|
||||||
class Semestre(db.Model):
|
class Semestre(db.Model):
|
||||||
@ -38,7 +38,7 @@ class Semestre(db.Model):
|
|||||||
return "<Semestre {}>".format(self.num)
|
return "<Semestre {}>".format(self.num)
|
||||||
|
|
||||||
class Competence(db.Model):
|
class Competence(db.Model):
|
||||||
code = db.Column(db.String(3), primary_key = True, info={'label': 'Code'})
|
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'})
|
||||||
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
||||||
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
|
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
|
||||||
description = db.Column(db.Text(), info={'label': 'Description'})
|
description = db.Column(db.Text(), info={'label': 'Description'})
|
||||||
@ -85,11 +85,11 @@ class Competence(db.Model):
|
|||||||
return "<Competence {}>".format(self.code)
|
return "<Competence {}>".format(self.code)
|
||||||
|
|
||||||
class CoefSAE(db.Model):
|
class CoefSAE(db.Model):
|
||||||
competence_code = db.Column(db.String(3), db.ForeignKey("competence.code"), primary_key=True)
|
competence_code = db.Column(db.String(32), db.ForeignKey("competence.code"), primary_key=True)
|
||||||
sae_code = db.Column(db.String(6), db.ForeignKey("SAE.code"), primary_key=True)
|
sae_code = db.Column(db.String(32), db.ForeignKey("SAE.code"), primary_key=True)
|
||||||
coef = db.Column(db.String(2))
|
coef = db.Column(db.String(2))
|
||||||
competence = db.relationship("Competence", lazy=False, backref=db.backref("saes"))
|
competence = db.relationship("Competence", lazy=False, backref=db.backref("saes", cascade="save-update, merge, delete, delete-orphan"))
|
||||||
sae = db.relationship("SAE", lazy=False, backref=db.backref("competences"))
|
sae = db.relationship("SAE", lazy=False, backref=db.backref("competences", cascade="save-update, merge, delete, delete-orphan"))
|
||||||
|
|
||||||
def export(self):
|
def export(self):
|
||||||
result = dict(self.__dict__)
|
result = dict(self.__dict__)
|
||||||
@ -97,11 +97,11 @@ class CoefSAE(db.Model):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
class CoefRessource(db.Model):
|
class CoefRessource(db.Model):
|
||||||
competence_code = db.Column(db.String(3), db.ForeignKey("competence.code"), primary_key=True)
|
competence_code = db.Column(db.String(32), db.ForeignKey("competence.code"), primary_key=True)
|
||||||
ressource_code = db.Column(db.String(4), db.ForeignKey("ressource.code"), primary_key=True)
|
ressource_code = db.Column(db.String(32), db.ForeignKey("ressource.code"), primary_key=True)
|
||||||
coef = db.Column(db.String(2))
|
coef = db.Column(db.String(2))
|
||||||
competence = db.relationship("Competence", lazy=False, backref=db.backref("ressources"))
|
competence = db.relationship("Competence", lazy=False, backref=db.backref("ressources", cascade="save-update, merge, delete, delete-orphan"))
|
||||||
ressource = db.relationship("Ressource", lazy=False, backref=db.backref("competences"))
|
ressource = db.relationship("Ressource", lazy=False, backref=db.backref("competences", cascade="save-update, merge, delete, delete-orphan"))
|
||||||
|
|
||||||
def export(self):
|
def export(self):
|
||||||
result = dict(self.__dict__)
|
result = dict(self.__dict__)
|
||||||
@ -109,7 +109,7 @@ class CoefRessource(db.Model):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
class AC(db.Model):
|
class AC(db.Model):
|
||||||
code = db.Column(db.String(6), primary_key = True, info={'label': 'Code'})
|
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'})
|
||||||
titre = db.Column(db.String(255), info={'label': 'Titre'})
|
titre = db.Column(db.String(255), info={'label': 'Titre'})
|
||||||
saes = db.relationship("SAE", secondary=SAEs_ACs, lazy=False, backref=db.backref("acs", lazy=False))
|
saes = db.relationship("SAE", secondary=SAEs_ACs, lazy=False, backref=db.backref("acs", lazy=False))
|
||||||
ressources = db.relationship("Ressource", order_by="Ressource.code", secondary=Ressources_ACs, lazy=False, backref=db.backref("acs", lazy=False))
|
ressources = db.relationship("Ressource", order_by="Ressource.code", secondary=Ressources_ACs, lazy=False, backref=db.backref("acs", lazy=False))
|
||||||
@ -126,7 +126,7 @@ class AC(db.Model):
|
|||||||
return "<AC {}>".format(self.code)
|
return "<AC {}>".format(self.code)
|
||||||
|
|
||||||
class PN(db.Model):
|
class PN(db.Model):
|
||||||
code = db.Column(db.String(3), primary_key = True, info={'label': 'Code'})
|
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'})
|
||||||
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
||||||
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
|
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
|
||||||
description = db.Column(db.Text(), info={'label': 'Description'})
|
description = db.Column(db.Text(), info={'label': 'Description'})
|
||||||
@ -141,7 +141,7 @@ class PN(db.Model):
|
|||||||
return "<PN {}>".format(self.code)
|
return "<PN {}>".format(self.code)
|
||||||
|
|
||||||
class SAE(db.Model):
|
class SAE(db.Model):
|
||||||
code = db.Column(db.String(5), primary_key = True, info={'label': 'Code'})
|
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'})
|
||||||
titre = db.Column(db.String(255), info={'label': 'Titre'})
|
titre = db.Column(db.String(255), info={'label': 'Titre'})
|
||||||
semestre = db.Column(db.String(255), info={'label': 'Semestre'})
|
semestre = db.Column(db.String(255), info={'label': 'Semestre'})
|
||||||
heures_encadrees = db.Column(db.String(3), info={'label': 'Heures Encadrées'})
|
heures_encadrees = db.Column(db.String(3), info={'label': 'Heures Encadrées'})
|
||||||
@ -173,7 +173,7 @@ class SAE(db.Model):
|
|||||||
return "<SAE {}>".format(self.code)
|
return "<SAE {}>".format(self.code)
|
||||||
|
|
||||||
class Ressource(db.Model):
|
class Ressource(db.Model):
|
||||||
code = db.Column(db.String(4), primary_key = True, info={'label': 'Code'})
|
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'})
|
||||||
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
nom = db.Column(db.String(255), info={'label': 'Nom'})
|
||||||
semestre = db.Column(db.String(255), info={'label': 'Semestre'})
|
semestre = db.Column(db.String(255), info={'label': 'Semestre'})
|
||||||
heures_formation = db.Column(db.String(3), info={'label': 'Heures Formation'})
|
heures_formation = db.Column(db.String(3), info={'label': 'Heures Formation'})
|
||||||
|
@ -3,10 +3,11 @@ from app import app, db
|
|||||||
from app.forms import *
|
from app.forms import *
|
||||||
import app.models as models
|
import app.models as models
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/", methods=["GET","POST"])
|
||||||
@app.route("/index", methods=["GET","POST"])
|
@app.route("/index", methods=["GET","POST"])
|
||||||
def index():
|
def index():
|
||||||
form = AccueilForm()
|
form = AccueilForm()
|
||||||
|
valide = form.validate_on_submit()
|
||||||
if form.ajouter.data:
|
if form.ajouter.data:
|
||||||
for i in range(1,7):
|
for i in range(1,7):
|
||||||
semestre = models.Semestre(num=i)
|
semestre = models.Semestre(num=i)
|
||||||
@ -20,6 +21,8 @@ def index():
|
|||||||
form.exportJSON()
|
form.exportJSON()
|
||||||
elif form.exporterYAML.data:
|
elif form.exporterYAML.data:
|
||||||
form.exportYAML()
|
form.exportYAML()
|
||||||
|
elif form.importer.data and valide:
|
||||||
|
form.importRef()
|
||||||
semestres = sorted(models.Semestre.query.all(), key=lambda semestre: semestre.num)
|
semestres = sorted(models.Semestre.query.all(), key=lambda semestre: semestre.num)
|
||||||
return render_template("index.html", semestres=semestres, form=form)
|
return render_template("index.html", semestres=semestres, form=form)
|
||||||
|
|
||||||
@ -27,6 +30,9 @@ def index():
|
|||||||
def Semestre(num):
|
def Semestre(num):
|
||||||
form = SemestreForm()
|
form = SemestreForm()
|
||||||
semestre = models.Semestre.query.filter_by(num=num).first()
|
semestre = models.Semestre.query.filter_by(num=num).first()
|
||||||
|
if semestre == None:
|
||||||
|
flash("Ce Semestre n'existe pas!", "error")
|
||||||
|
return redirect(url_for("index"))
|
||||||
for i, ue in enumerate(semestre.ues):
|
for i, ue in enumerate(semestre.ues):
|
||||||
if form.ueform.__len__() < len(semestre.ues): form.ueform.append_entry(data={"ue": ue.code})
|
if form.ueform.__len__() < len(semestre.ues): form.ueform.append_entry(data={"ue": ue.code})
|
||||||
# Donne aux dropdowns la liste des objets de formations que les ACs possèdent sans doublons
|
# Donne aux dropdowns la liste des objets de formations que les ACs possèdent sans doublons
|
||||||
@ -41,9 +47,12 @@ def Semestre(num):
|
|||||||
form.ueform.__getitem__(i).ressources.query=queryRessource
|
form.ueform.__getitem__(i).ressources.query=queryRessource
|
||||||
if not form.update.data:
|
if not form.update.data:
|
||||||
for coefsae in ue.saes:
|
for coefsae in ue.saes:
|
||||||
form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefsae.sae})
|
if coefsae.sae in querySAE: form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefsae.sae})
|
||||||
|
else: db.session.delete(coefsae)
|
||||||
for coefressource in ue.ressources:
|
for coefressource in ue.ressources:
|
||||||
form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefressource.ressource})
|
if coefressource.ressource in queryRessource: form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefressource.ressource})
|
||||||
|
else: db.session.delete(coefressource)
|
||||||
|
db.session.commit()
|
||||||
# Appuie sur Update
|
# Appuie sur Update
|
||||||
if form.update.data:
|
if form.update.data:
|
||||||
semestre.ues = [ue for ue in form.ues.data]
|
semestre.ues = [ue for ue in form.ues.data]
|
||||||
@ -51,7 +60,7 @@ def Semestre(num):
|
|||||||
for i, field in enumerate(form.ueform):
|
for i, field in enumerate(form.ueform):
|
||||||
ue = models.Competence.query.filter_by(code=field.ue.data).first()
|
ue = models.Competence.query.filter_by(code=field.ue.data).first()
|
||||||
ue.acs = field.acs.data
|
ue.acs = field.acs.data
|
||||||
# Fabrique la liste des Coefs qui ne doit pas être supprimé suite à un éventuel suppression d'un AC
|
# Fabrique la liste des Coefs qui ne doit pas être supprimé suite à un éventuel désélection d'un AC
|
||||||
querySAE = []
|
querySAE = []
|
||||||
queryRessource = []
|
queryRessource = []
|
||||||
for ac in ue.acs:
|
for ac in ue.acs:
|
||||||
@ -65,7 +74,7 @@ def Semestre(num):
|
|||||||
codeClass, code = coeffield.objetformation.data[1:-1].split()
|
codeClass, code = coeffield.objetformation.data[1:-1].split()
|
||||||
model = getattr(models, codeClass)
|
model = getattr(models, codeClass)
|
||||||
objetformation = model.query.filter_by(code=code).first()
|
objetformation = model.query.filter_by(code=code).first()
|
||||||
if objetformation in querySAE or objetformation in queryRessource:
|
if objetformation in list(set(querySAE)&set(field.saes.data)) or objetformation in list(set(queryRessource)&set(field.ressources.data)):
|
||||||
objetformation.setCoef(coeffield.coef.data, ue)
|
objetformation.setCoef(coeffield.coef.data, ue)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return redirect(url_for("Semestre", num=num))
|
return redirect(url_for("Semestre", num=num))
|
||||||
@ -98,6 +107,8 @@ def PN(code):
|
|||||||
form.exporterRef()
|
form.exporterRef()
|
||||||
elif form.sauvegarder.data:
|
elif form.sauvegarder.data:
|
||||||
form.sauvegarderRef()
|
form.sauvegarderRef()
|
||||||
|
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
|
||||||
|
return redirect(url_for("PN", code=form.code.data[2:]))
|
||||||
return redirect(url_for("PN"))
|
return redirect(url_for("PN"))
|
||||||
elif code:
|
elif code:
|
||||||
referentiel = models.PN.query.filter_by(code="PN"+code).first()
|
referentiel = models.PN.query.filter_by(code="PN"+code).first()
|
||||||
@ -123,6 +134,8 @@ def AC(code):
|
|||||||
form.exporterRef()
|
form.exporterRef()
|
||||||
elif form.sauvegarder.data:
|
elif form.sauvegarder.data:
|
||||||
form.sauvegarderRef()
|
form.sauvegarderRef()
|
||||||
|
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
|
||||||
|
return redirect(url_for("AC", code=form.code.data[2:]))
|
||||||
return redirect(url_for("AC"))
|
return redirect(url_for("AC"))
|
||||||
elif code:
|
elif code:
|
||||||
referentiel = models.AC.query.filter_by(code="AC"+code).first()
|
referentiel = models.AC.query.filter_by(code="AC"+code).first()
|
||||||
@ -148,6 +161,8 @@ def SAE(code):
|
|||||||
form.exporterRef()
|
form.exporterRef()
|
||||||
elif form.sauvegarder.data:
|
elif form.sauvegarder.data:
|
||||||
form.sauvegarderRef()
|
form.sauvegarderRef()
|
||||||
|
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
|
||||||
|
return redirect(url_for("SAE", code=form.code.data[3:]))
|
||||||
return redirect(url_for("SAE"))
|
return redirect(url_for("SAE"))
|
||||||
elif code:
|
elif code:
|
||||||
referentiel = models.SAE.query.filter_by(code="SAE"+code).first()
|
referentiel = models.SAE.query.filter_by(code="SAE"+code).first()
|
||||||
@ -173,6 +188,8 @@ def Ressource(code):
|
|||||||
form.exporterRef()
|
form.exporterRef()
|
||||||
elif form.sauvegarder.data:
|
elif form.sauvegarder.data:
|
||||||
form.sauvegarderRef()
|
form.sauvegarderRef()
|
||||||
|
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
|
||||||
|
return redirect(url_for("Ressource", code=form.code.data[1:]))
|
||||||
return redirect(url_for("Ressource"))
|
return redirect(url_for("Ressource"))
|
||||||
elif code:
|
elif code:
|
||||||
referentiel = models.Ressource.query.filter_by(code="R"+code).first()
|
referentiel = models.Ressource.query.filter_by(code="R"+code).first()
|
||||||
@ -198,6 +215,8 @@ def Competence(code):
|
|||||||
form.exporterRef()
|
form.exporterRef()
|
||||||
if form.sauvegarder.data:
|
if form.sauvegarder.data:
|
||||||
form.sauvegarderRef()
|
form.sauvegarderRef()
|
||||||
|
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
|
||||||
|
return redirect(url_for("Competence", code=form.code.data[2:]))
|
||||||
return redirect(url_for("Competence"))
|
return redirect(url_for("Competence"))
|
||||||
elif code:
|
elif code:
|
||||||
referentiel = models.Competence.query.filter_by(code="RT"+code).first()
|
referentiel = models.Competence.query.filter_by(code="RT"+code).first()
|
||||||
|
@ -96,12 +96,27 @@
|
|||||||
<!-- Contenu de la page -->
|
<!-- Contenu de la page -->
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages(category_filter=["error"]) %}
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<script>
|
<article class="message is-danger">
|
||||||
alert("{% for message in messages %}{{message}}{% endfor %}");
|
<div class="message-body">
|
||||||
</script>
|
{% for message in messages %}
|
||||||
{% endif %}
|
<p>{{message}}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
|
{% with messages = get_flashed_messages(category_filter=["success"]) %}
|
||||||
|
{% if messages %}
|
||||||
|
<article class="message is-success">
|
||||||
|
<div class="message-body">
|
||||||
|
{% for message in messages %}
|
||||||
|
<p>{{message}}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{% endif %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -2,6 +2,15 @@
|
|||||||
{% block title %}Accueil{% endblock %}
|
{% block title %}Accueil{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% if form.fichier.errors|length != 0 %}
|
||||||
|
<article class="message is-danger">
|
||||||
|
<div class="message-body">
|
||||||
|
{% for error in form.fichier.errors %}
|
||||||
|
<p>{{error}}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{% endif %}
|
||||||
<div class="content">
|
<div class="content">
|
||||||
{% for semestre in semestres %}
|
{% for semestre in semestres %}
|
||||||
<h1 class="title"><a style="color: inherit;" href="{{ url_for('Semestre', num=semestre.num) }}">Semestre {{ semestre.num }} <i class="far fa-edit fa-sm"></i></a></h1>
|
<h1 class="title"><a style="color: inherit;" href="{{ url_for('Semestre', num=semestre.num) }}">Semestre {{ semestre.num }} <i class="far fa-edit fa-sm"></i></a></h1>
|
||||||
@ -17,7 +26,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<form action="" method="post" novalidate>
|
<form action="" enctype=multipart/form-data method="post" novalidate>
|
||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
{% if not semestres %}
|
{% if not semestres %}
|
||||||
@ -29,8 +38,22 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{{ form.exporterJSON(class="button") }}
|
{{ form.exporterJSON(class="button") }}
|
||||||
{{ form.exporterYAML(class="button") }}
|
{{ form.exporterYAML(class="button") }}
|
||||||
{{ form.importerJSON(class="button is-static") }}
|
<div class="control">
|
||||||
{{ form.importerYAML(class="button is-static") }}
|
<div class="file has-name">
|
||||||
|
<label class="file-label">
|
||||||
|
{{ form.fichier(class="file-input") }}
|
||||||
|
<span class="file-cta">
|
||||||
|
<span class="file-icon">
|
||||||
|
<i class="fas fa-file-import"></i>
|
||||||
|
</span>
|
||||||
|
<span class="file-label">
|
||||||
|
{{ form.fichier.label }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
{{ form.importer(class="button file-name") }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
28
requirements.txt
Normal file
28
requirements.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
alembic==1.6.2
|
||||||
|
click==7.1.2
|
||||||
|
decorator==5.0.9
|
||||||
|
dnspython==2.1.0
|
||||||
|
email-validator==1.1.2
|
||||||
|
Flask==1.1.2
|
||||||
|
Flask-Migrate==2.7.0
|
||||||
|
Flask-SQLAlchemy==2.5.1
|
||||||
|
Flask-WTF==0.14.3
|
||||||
|
greenlet==1.1.0
|
||||||
|
idna==3.2
|
||||||
|
infinity==1.5
|
||||||
|
intervals==0.9.1
|
||||||
|
itsdangerous==1.1.0
|
||||||
|
Jinja2==2.11.3
|
||||||
|
Mako==1.1.4
|
||||||
|
MarkupSafe==1.1.1
|
||||||
|
python-dateutil==2.8.1
|
||||||
|
python-editor==1.0.4
|
||||||
|
PyYAML==5.4.1
|
||||||
|
six==1.16.0
|
||||||
|
SQLAlchemy==1.4.14
|
||||||
|
SQLAlchemy-Utils==0.37.6
|
||||||
|
validators==0.18.2
|
||||||
|
Werkzeug==1.0.1
|
||||||
|
WTForms==2.3.3
|
||||||
|
WTForms-Alchemy==0.17.0
|
||||||
|
WTForms-Components==0.10.5
|
Loading…
Reference in New Issue
Block a user