diff --git a/app/api/partitions.py b/app/api/partitions.py index 50660fb6648cdc8750daef763618e3bbacdf54cc..cd36bd924fdb7cfd7ea103aa356fb2725cdb91f3 100644 --- a/app/api/partitions.py +++ b/app/api/partitions.py @@ -311,6 +311,13 @@ def group_create(partition_id: int): # partition-group-create args["group_name"] = args["group_name"].strip() if not GroupDescr.check_name(partition, args["group_name"]): return json_error(API_CLIENT_ERROR, "invalid group_name") + + # le numero est optionnel + numero = args.get("numero") + if numero is None: + numeros = [gr.numero or 0 for gr in partition.groups] + numero = (max(numeros) + 1) if numeros else 0 + args["numero"] = numero args["partition_id"] = partition_id try: group = GroupDescr(**args) @@ -595,6 +602,8 @@ def partition_edit(partition_id: int): data = request.get_json(force=True) # may raise 400 Bad Request modified = False partition_name = data.get("partition_name") + partition_name = partition_name.replace(":", "").replace(";", "") + # if partition_name is not None and partition_name != partition.partition_name: if partition.is_parcours(): diff --git a/app/models/groups.py b/app/models/groups.py index 7250f1e676592205ad9dbaaae12371d9f7433f67..37245e3e1443542f0adf498367144f4efbab680b 100644 --- a/app/models/groups.py +++ b/app/models/groups.py @@ -197,6 +197,7 @@ class Partition(ScoDocModel): new_numero = max(numeros) + 1 else: new_numero = 0 + group_name = group_name.replace(";", "").replace(":", "") group = GroupDescr(partition=self, group_name=group_name, numero=new_numero) db.session.add(group) db.session.commit() diff --git a/app/scodoc/sco_import_etuds.py b/app/scodoc/sco_import_etuds.py index 7107217b3ac3f1eb50ff1016fc8f30e889b22596..0a2b002d5c74b5ee8e2a96c04866a3e39c98cab9 100644 --- a/app/scodoc/sco_import_etuds.py +++ b/app/scodoc/sco_import_etuds.py @@ -729,10 +729,6 @@ def scolars_import_admission(datafile, formsemestre_id=None, type_admission=None ) else: log("scolars_import_admission: partition non editable") - diag.append( - f"Attention: partition {group.partition} non editable (ignorée)" - ) - # diag.append(f"import de {etud['nomprenom']}") n_import += 1 diff --git a/app/templates/scolar/partition_editor.j2 b/app/templates/scolar/partition_editor.j2 index 6d5bcf72e12359db5ecfa1cc69dfe4ffcce1abe6..2eaa018e87971dab95e254b86a0585c2597117ce 100644 --- a/app/templates/scolar/partition_editor.j2 +++ b/app/templates/scolar/partition_editor.j2 @@ -211,7 +211,7 @@ span.calendarEdit { <!-- Partition --> <h3 data-idpartition="${partition.id}"> <span class="editing move">||</span> - <span>${partition.partition_name}</span> + <span class="partGrpName" oninput="trimPartGrpName(this.innerText)" >${partition.partition_name}</span> <span class="editing modif">✏️</span> <span class="editing suppr">❌</span> @@ -255,6 +255,21 @@ span.calendarEdit { return div; } + + function trimPartGrpName(){ + const field = document.querySelector(".partGrpName[contenteditable=true]"); + let sanitized = field.innerText.replace(/[:;]/g, ''); + field.innerText = sanitized ; + + let selection = window.getSelection(); + let range = document.createRange(); + range.setStart(field.childNodes[0], sanitized.length); + range.collapse(true); + selection.removeAllRanges(); + selection.addRange(range); + field.focus(); + } + function templateFiltres_groupe(groupe) { let div = document.createElement("button"); div.classList.add("dt-button"); @@ -263,7 +278,7 @@ span.calendarEdit { let title_EDT = `Identifiant EDT: ${groupe.edt_id || groupe.group_name}`; div.innerHTML = ` <span class="editing move">||</span> - <span>${groupe.group_name}</span> + <span class="partGrpName" oninput="trimPartGrpName(this.innerText)" >${groupe.group_name}</span> <span class="editing rename">✏️</span> <span class="editing calendarEdit" title="${title_EDT}">📅</span> <span class="editing suppr">❌</span>`;