forked from ScoDoc/ScoDoc
Clonage UE et modules pour faciliter saisie programmes
This commit is contained in:
parent
b7fb8879df
commit
2d76cc0ad1
@ -6,7 +6,7 @@ from app.models import APO_CODE_STR_LEN
|
||||
from app.models.but_refcomp import ApcParcours, app_critiques_modules, parcours_modules
|
||||
from app.scodoc import sco_utils as scu
|
||||
from app.scodoc.sco_codes_parcours import UE_SPORT
|
||||
from app.scodoc.sco_utils import ModuleType
|
||||
from app.scodoc.sco_utils import ModuleType, abbrev_prenom
|
||||
|
||||
|
||||
class Module(db.Model):
|
||||
@ -69,6 +69,37 @@ class Module(db.Model):
|
||||
return f"""<Module{ModuleType(self.module_type or ModuleType.STANDARD).name
|
||||
} id={self.id} code={self.code!r} semestre_id={self.semestre_id}>"""
|
||||
|
||||
def clone(self):
|
||||
"""Create a new copy of this module."""
|
||||
mod = Module(
|
||||
titre=self.titre,
|
||||
abbrev=self.abbrev,
|
||||
code=self.code + "-copie",
|
||||
heures_cours=self.heures_cours,
|
||||
heures_td=self.heures_td,
|
||||
heures_tp=self.heures_tp,
|
||||
coefficient=self.coefficient,
|
||||
ects=self.ects,
|
||||
ue_id=self.ue_id,
|
||||
matiere_id=self.matiere_id,
|
||||
formation_id=self.formation_id,
|
||||
semestre_id=self.semestre_id,
|
||||
numero=self.numero, # il est conseillé de renuméroter
|
||||
code_apogee="", # volontairement vide pour éviter les erreurs
|
||||
module_type=self.module_type,
|
||||
)
|
||||
|
||||
# Les tags:
|
||||
for tag in self.tags:
|
||||
mod.tags.append(tag)
|
||||
# Les parcours
|
||||
for parcour in self.parcours:
|
||||
mod.parcours.append(parcour)
|
||||
# Les AC
|
||||
for app_critique in self.app_critiques:
|
||||
mod.app_critiques.append(app_critique)
|
||||
return mod
|
||||
|
||||
def to_dict(self, convert_objects=False, with_matiere=False, with_ue=False) -> dict:
|
||||
"""If convert_objects, convert all attributes to native types
|
||||
(suitable jor json encoding).
|
||||
|
@ -64,6 +64,28 @@ class UniteEns(db.Model):
|
||||
self.semestre_idx} {
|
||||
'EXTERNE' if self.is_external else ''})>"""
|
||||
|
||||
def clone(self):
|
||||
"""Create a new copy of this ue.
|
||||
Ne copie pas le code, ni le code Apogée, ni les liens au réf. de comp.
|
||||
(parcours et niveau).
|
||||
"""
|
||||
ue = UniteEns(
|
||||
formation_id=self.formation_id,
|
||||
acronyme=self.acronyme + "-copie",
|
||||
numero=self.numero,
|
||||
titre=self.titre,
|
||||
semestre_idx=self.semestre_idx,
|
||||
type=self.type,
|
||||
ue_code="", # ne duplique pas le code
|
||||
ects=self.ects,
|
||||
is_external=self.is_external,
|
||||
code_apogee="", # ne copie pas les codes Apo
|
||||
coefficient=self.coefficient,
|
||||
coef_rcue=self.coef_rcue,
|
||||
color=self.color,
|
||||
)
|
||||
return ue
|
||||
|
||||
def to_dict(self, convert_objects=False, with_module_ue_coefs=True):
|
||||
"""as a dict, with the same conversions as in ScoDoc7
|
||||
(except ECTS: keep None)
|
||||
|
@ -776,7 +776,18 @@ def module_edit(
|
||||
)
|
||||
#
|
||||
if tf[0] == 0:
|
||||
return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
|
||||
return (
|
||||
"\n".join(H)
|
||||
+ tf[1]
|
||||
+ f"""
|
||||
<form action="module_clone" class="clone_form" method="post">
|
||||
<input type="hidden" name="module_id" value="{module_id}">
|
||||
<button type="submit">Créer une copie de ce module</button>
|
||||
</form>
|
||||
"""
|
||||
if not create
|
||||
else "" + html_sco_header.sco_footer()
|
||||
)
|
||||
elif tf[0] == -1:
|
||||
return flask.redirect(
|
||||
url_for(
|
||||
|
@ -471,11 +471,21 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
|
||||
modules_div += """</ul></div>"""
|
||||
else:
|
||||
modules_div = ""
|
||||
if ue:
|
||||
clone_form = f"""
|
||||
<form action="ue_clone" class="clone_form" method="post">
|
||||
<input type="hidden" name="ue_id" value="{ue.id}">
|
||||
<button type="submit">Créer une copie de cette UE</button>
|
||||
</form>
|
||||
"""
|
||||
else:
|
||||
clone_form = ""
|
||||
bonus_div = """<div id="bonus_description"></div>"""
|
||||
ue_div = """<div id="ue_list_code"></div>"""
|
||||
return (
|
||||
"\n".join(H)
|
||||
+ tf[1]
|
||||
+ clone_form
|
||||
+ niveau_competence_div
|
||||
+ modules_div
|
||||
+ bonus_div
|
||||
|
@ -2259,6 +2259,21 @@ ul.notes_module_list {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
input#tf_submit,
|
||||
input#tf_cancel {
|
||||
padding: 8px 20px;
|
||||
font-size: 16px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
input#tf_submit {
|
||||
border: 2px solid #c50000;
|
||||
}
|
||||
|
||||
form.clone_form {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
/*Choix niveau dans form edit UE */
|
||||
div.ue_choix_niveau {
|
||||
background-color: rgb(191, 242, 255);
|
||||
|
@ -580,6 +580,27 @@ def module_tag_set():
|
||||
return sco_tag_module.module_tag_set(module_id, taglist)
|
||||
|
||||
|
||||
@bp.route("/module_clone", methods=["POST"])
|
||||
@scodoc
|
||||
@permission_required(Permission.ScoChangeFormation)
|
||||
def module_clone():
|
||||
"""Clone existing module"""
|
||||
module_id = int(request.form.get("module_id"))
|
||||
module = Module.query.get_or_404(module_id)
|
||||
module2 = module.clone()
|
||||
db.session.add(module2)
|
||||
db.session.commit()
|
||||
flash(f"Module {module.code} dupliqué")
|
||||
return flask.redirect(
|
||||
url_for(
|
||||
"notes.ue_table",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
semestre_idx=module.semestre_id,
|
||||
formation_id=module.formation_id,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
@bp.route("/")
|
||||
@bp.route("/index_html")
|
||||
@ -754,6 +775,27 @@ sco_publish(
|
||||
sco_publish("/ue_move", sco_edit_formation.ue_move, Permission.ScoChangeFormation)
|
||||
|
||||
|
||||
@bp.route("/ue_clone", methods=["POST"])
|
||||
@scodoc
|
||||
@permission_required(Permission.ScoChangeFormation)
|
||||
def ue_clone():
|
||||
"""Clone existing UE"""
|
||||
ue_id = int(request.form.get("ue_id"))
|
||||
ue = UniteEns.query.get_or_404(ue_id)
|
||||
ue2 = ue.clone()
|
||||
db.session.add(ue2)
|
||||
db.session.commit()
|
||||
flash(f"UE {ue.acronyme} dupliquée")
|
||||
return flask.redirect(
|
||||
url_for(
|
||||
"notes.ue_table",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
semestre_idx=ue.semestre_idx,
|
||||
formation_id=ue.formation_id,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
# --- Semestres de formation
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.4.0"
|
||||
SCOVERSION = "9.4.01"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user