Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • rayane.belguebli.etu/scodoc_r6a06
  • charles.coude.etu/scodoc_r6a06
  • axel.saintmaxin.etu/scodoc_r6a06
  • paul.milleville.etu/scodoc_r6a06
  • nathan.duplouy.etu/scodoc_r6a06
  • xavier.moyon.etu/scodoc-r-6-a-06-1023
  • paullouis.gomis.etu/scodoc_r6a06
  • louis.dormael.etu/scodoc-issue-976
  • armand.sady.etu/scodoc_r6a06
  • antoine.pourthie.etu/scodoc_r6a06
  • shems.petremand.etu/scodoc_r6a06
  • alice.landou.etu/scodoc_r6a06
  • adrien.degand.etu/scodoc_r6a06
  • ylann.gronnier.etu/scodoc_r6a06
  • ilyes.lekehal-de-percin.etu/scodoc_r6a06
  • clement.dekeister.etu/scodoc_r6a06
  • mehdi.zaidi.etu/scodoc_r6a06
  • antonin.duvauchel.etu/scodoc_r6a06
  • adrien.dacostaveiga.etu/scodoc_r6a06
  • ludovic.demol.etu/scodoc_r6a06
  • mounir.khatri.etu/scodoc_r6a06
  • leo.pirez.etu/scodoc_r6a06
  • gurvann.brenne.etu/scodoc_r6a06
  • Jean-Marie.Place/scodoc_r6a06
24 results
Select Git revision
  • master
1 result
Show changes
Commits on Source (76)
Showing with 111 additions and 109 deletions
# ScoDoc - Gestion de la scolarité - Version ScoDoc 9
(c) Emmanuel Viennet 1999 - 2024 (voir LICENCE.txt).
(c) Emmanuel Viennet 1999 - 2025 (voir LICENCE.txt).
Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian12>
......@@ -170,7 +170,7 @@ pip install snakeviz
```
puis
```bash
snakeviz -s --hostname 0.0.0.0 -p 5555 /opt/scodoc-data/GET.ScoDoc......prof
snakeviz -s --hostname 0.0.0.0 -p 5555 /opt/scodoc-data/GET.ScoDoc......prof
```
## Paquet Debian 12
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""ScoDoc 9 API : Assiduités"""
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
API : itemsuivi devenir/débouché des étudiants
API : itemsuivi devenir/débouché des étudiants
CATEGORY
--------
Étudiants
CATEGORY
--------
Étudiants
"""
import datetime
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
API : accès aux étudiants
API : accès aux étudiants
CATEGORY
--------
Étudiants
CATEGORY
--------
Étudiants
"""
from datetime import datetime
from operator import attrgetter
......@@ -35,8 +35,8 @@ from app.models import (
FormSemestreInscription,
FormSemestre,
Identite,
ScolarNews,
)
from app.models.etudiants import create_etud_with_adresse_admission
from app.scodoc import sco_bulletins
from app.scodoc import sco_groups
from app.scodoc.sco_bulletins import do_formsemestre_bulletinetud
......@@ -549,32 +549,8 @@ def etudiant_create(force=False):
return scu.json_error(
400, f"{len(homonyms)} homonymes détectés. Vous pouvez utiliser /force."
)
etud = Identite.create_etud(**args)
db.session.flush()
# --- Données admission
admission_args = args.get("admission", None)
if admission_args:
etud.admission.from_dict(admission_args)
# --- Adresse
adresses = args.get("adresses", [])
if adresses:
# ne prend en compte que la première adresse
# car si la base est concue pour avoir plusieurs adresses par étudiant,
# l'application n'en gère plus qu'une seule.
adresse = etud.adresses.first()
adresse.from_dict(adresses[0])
# Poste une nouvelle dans le département concerné:
ScolarNews.add(
typ=ScolarNews.NEWS_INSCR,
text=f"Nouvel étudiant {etud.html_link_fiche()}",
url=etud.url_fiche(),
max_frequency=0,
dept_id=dept_o.id,
)
etud = create_etud_with_adresse_admission(args)
db.session.commit()
# Note: je ne comprends pas pourquoi un refresh est nécessaire ici
# sans ce refresh, etud.__dict__ est incomplet (pas de 'nom').
db.session.refresh(etud)
r = etud.to_dict_api(restrict=False) # pas de restriction, on vient de le créer
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux évaluations
ScoDoc 9 API : accès aux évaluations
CATEGORY
--------
Évaluations
CATEGORY
--------
Évaluations
"""
from flask import g, request
from flask_json import as_json
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux formations
ScoDoc 9 API : accès aux formations
CATEGORY
--------
Formations
CATEGORY
--------
Formations
"""
from flask import flash, g, request
......@@ -209,26 +209,40 @@ def ue_set_parcours(ue_id: int):
return {"status": ok, "message": error_message}
@bp.route(
"/formation/ue/<int:ue_id>/assoc_niveau/<int:niveau_id>/force",
defaults={"force": True},
methods=["POST"],
)
@api_web_bp.route(
"/formation/ue/<int:ue_id>/assoc_niveau/<int:niveau_id>/force",
defaults={"force": True},
methods=["POST"],
)
@bp.route(
"/formation/ue/<int:ue_id>/assoc_niveau/<int:niveau_id>",
defaults={"force": False},
methods=["POST"],
)
@api_web_bp.route(
"/formation/ue/<int:ue_id>/assoc_niveau/<int:niveau_id>",
defaults={"force": False},
methods=["POST"],
)
@login_required
@scodoc
@permission_required(Permission.EditFormation)
@as_json
def ue_assoc_niveau(ue_id: int, niveau_id: int):
"""Associe l'UE au niveau de compétence."""
def ue_assoc_niveau(ue_id: int, niveau_id: int, force=False):
"""Associe l'UE au niveau de compétence.
Si force, modifie l'association même si des décisions de jury sont présentes.
"""
query = UniteEns.query.filter_by(id=ue_id)
if g.scodoc_dept:
query = query.join(Formation).filter_by(dept_id=g.scodoc_dept_id)
ue: UniteEns = query.first_or_404()
niveau: ApcNiveau = ApcNiveau.get_or_404(niveau_id)
ok, error_message = ue.set_niveau_competence(niveau)
ok, error_message = ue.set_niveau_competence(niveau, force=force)
if not ok:
if g.scodoc_dept: # "usage web"
flash(error_message, "error")
......@@ -238,19 +252,31 @@ def ue_assoc_niveau(ue_id: int, niveau_id: int):
return {"status": 0}
@bp.route(
"/formation/ue/<int:ue_id>/desassoc_niveau/force",
defaults={"force": True},
methods=["POST"],
)
@api_web_bp.route(
"/formation/ue/<int:ue_id>/desassoc_niveau/force",
defaults={"force": True},
methods=["POST"],
)
@bp.route(
"/formation/ue/<int:ue_id>/desassoc_niveau",
defaults={"force": False},
methods=["POST"],
)
@api_web_bp.route(
"/formation/ue/<int:ue_id>/desassoc_niveau",
defaults={"force": False},
methods=["POST"],
)
@login_required
@scodoc
@permission_required(Permission.EditFormation)
@as_json
def ue_desassoc_niveau(ue_id: int):
def ue_desassoc_niveau(ue_id: int, force=False):
"""Désassocie cette UE de son niveau de compétence
(si elle n'est pas associée, ne fait rien).
"""
......@@ -258,7 +284,7 @@ def ue_desassoc_niveau(ue_id: int):
if g.scodoc_dept:
query = query.join(Formation).filter_by(dept_id=g.scodoc_dept_id)
ue: UniteEns = query.first_or_404()
ok, error_message = ue.set_niveau_competence(None)
ok, error_message = ue.set_niveau_competence(None, force=force)
if not ok:
if g.scodoc_dept: # "usage web"
flash(error_message, "error")
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux formsemestres
ScoDoc 9 API : accès aux formsemestres
CATEGORY
--------
FormSemestre
CATEGORY
--------
FormSemestre
"""
import base64
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions.
ScoDoc 9 API : jury WIP à compléter avec enregistrement décisions.
CATEGORY
--------
Jury
CATEGORY
--------
Jury
"""
import datetime
......@@ -75,19 +75,17 @@ def decisions_jury(formsemestre_id: int):
def _news_delete_jury_etud(etud: Identite, detail: str = ""):
"génère news sur effacement décision"
# n'utilise pas g.scodoc_dept, pas toujours dispo en mode API
url = url_for(
"scolar.fiche_etud", scodoc_dept=etud.departement.acronym, etudid=etud.id
)
ScolarNews.add(
typ=ScolarNews.NEWS_JURY,
obj=etud.id,
text=f"""Suppression décision jury {detail} pour <a href="{url}">{etud.nomprenom}</a>""",
url=url,
text=f"""Suppression décision jury {detail} pour {etud.html_link_fiche()}""",
url=etud.url_fiche(),
dept_id=etud.dept_id,
)
Scolog.logdb(
"jury_delete_manual",
etudid=etud.id,
msg=f"Validation {detail} effacée",
msg=f"Suppression décision jury {detail}",
commit=True,
)
......@@ -153,11 +151,12 @@ def _validation_ue_delete(etudid: int, validation_id: int):
# Validation non rattachée à un semestre: on doit être chef
return json_error(403, "opération non autorisée (126)")
detail = f"UE {validation}"
log(f"validation_ue_delete: etuid={etudid} {validation}")
db.session.delete(validation)
sco_cache.invalidate_formsemestre_etud(etud)
db.session.commit()
_news_delete_jury_etud(etud)
_news_delete_jury_etud(etud, detail=detail)
return "ok"
......@@ -181,11 +180,12 @@ def autorisation_inscription_delete(etudid: int, validation_id: int):
validation = ScolarAutorisationInscription.query.filter_by(
id=validation_id, etudid=etudid
).first_or_404()
detail = f"autorisation inscription {validation}"
log(f"autorisation_inscription_delete: etuid={etudid} {validation}")
db.session.delete(validation)
sco_cache.invalidate_formsemestre_etud(etud)
db.session.commit()
_news_delete_jury_etud(etud)
_news_delete_jury_etud(etud, detail=detail)
return "ok"
......@@ -340,11 +340,12 @@ def validation_rcue_delete(etudid: int, validation_id: int):
validation = ApcValidationRCUE.query.filter_by(
id=validation_id, etudid=etudid
).first_or_404()
detail = f"RCUE {validation}"
log(f"delete validation_ue_delete: etuid={etudid} {validation}")
db.session.delete(validation)
sco_cache.invalidate_formsemestre_etud(etud)
db.session.commit()
_news_delete_jury_etud(etud, detail="UE")
_news_delete_jury_etud(etud, detail=detail)
return "ok"
......@@ -368,12 +369,12 @@ def validation_annee_but_delete(etudid: int, validation_id: int):
validation = ApcValidationAnnee.query.filter_by(
id=validation_id, etudid=etudid
).first_or_404()
ordre = validation.ordre
detail = f"{validation}"
log(f"delete validation_annee_but: etuid={etudid} {validation}")
db.session.delete(validation)
sco_cache.invalidate_formsemestre_etud(etud)
db.session.commit()
_news_delete_jury_etud(etud, detail=f"année BUT{ordre}")
_news_delete_jury_etud(etud, detail=detail)
return "ok"
......@@ -397,9 +398,10 @@ def validation_dut120_delete(etudid: int, validation_id: int):
validation = ValidationDUT120.query.filter_by(
id=validation_id, etudid=etudid
).first_or_404()
detail = f"{validation}"
log(f"delete validation_dut120: etuid={etudid} {validation}")
db.session.delete(validation)
sco_cache.invalidate_formsemestre_etud(etud)
db.session.commit()
_news_delete_jury_etud(etud, detail="diplôme DUT120")
_news_delete_jury_etud(etud, detail=detail)
return "ok"
......@@ -5,7 +5,7 @@
#
# Gestion scolarite IUT
#
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux moduleimpl
ScoDoc 9 API : accès aux moduleimpl
CATEGORY
--------
ModuleImpl
CATEGORY
--------
ModuleImpl
"""
from flask_json import as_json
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : liste opérations effectuées par un utilisateur
ScoDoc 9 API : liste opérations effectuées par un utilisateur
CATEGORY
--------
Operations
CATEGORY
--------
Operations
"""
from flask import url_for
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : partitions
ScoDoc 9 API : partitions
CATEGORY
--------
Groupes et Partitions
CATEGORY
--------
Groupes et Partitions
"""
from operator import attrgetter
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux formsemestres
ScoDoc 9 API : accès aux formsemestres
"""
# from flask import g, jsonify, request
# from flask_login import login_required
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""ScoDoc 9 API : outils
"""
"""ScoDoc 9 API : outils"""
from flask_login import current_user
from sqlalchemy import desc, or_
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""
ScoDoc 9 API : accès aux utilisateurs
ScoDoc 9 API : accès aux utilisateurs
CATEGORY
--------
Utilisateurs
CATEGORY
--------
Utilisateurs
"""
from flask import g, request
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
"""Génération bulletin BUT
"""
"""Génération bulletin BUT"""
import collections
import datetime
......
##############################################################################
# ScoDoc
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
# Copyright (c) 1999 - 2025 Emmanuel Viennet. All rights reserved.
# See LICENSE
##############################################################################
......