+++ /dev/null
-package org.lilie.services.eliot.notes.brevet
-
-import org.lilie.services.eliot.brevet.BrevetFiche
-import org.lilie.services.eliot.scolarite.Personne
-import org.lilie.services.eliot.scolarite.anneescolaire.AnneeScolaireService
-import org.lilie.services.eliot.annuaire.SecuriteSession
-import org.lilie.services.eliot.notes.NotesDroitService
-
-import org.lilie.services.eliot.brevet.BrevetSerie
-import org.lilie.services.eliot.annuaire.PersonneProprietesScolarite
-import org.lilie.services.eliot.notes.NotesFonction
-import org.lilie.services.eliot.notes.ActionEnum
-import org.lilie.services.eliot.scolarite.StructureEnseignement
-import org.lilie.services.eliot.notes.scolarite.NotesStructureEnseignementService
-import org.lilie.services.eliot.brevet.BrevetNote
-import org.hibernate.SessionFactory
-import org.hibernate.FetchMode
-
-class BrevetFicheService {
-
- AnneeScolaireService anneeScolaireService
- NotesDroitService notesDroitService
- NotesStructureEnseignementService notesStructureEnseignementService
-
- SessionFactory sessionFactory
-
- static transactional = true
-
- /**
- * Retourne toutes les fiches de Brevet de pour une classe et une série données.
- * @author bper
- */
- List<BrevetFiche> findAllFicheByClasseAndSerie(SecuriteSession securiteSession,
- StructureEnseignement classe,
- BrevetSerie serie) {
-
- notesDroitService.verifieAutorisationByEtablissement(
- securiteSession,
- classe.etablissement,
- ActionEnum.CONSULTATION,
- NotesFonction.DIRECTION_ASSIMILE)
-
- if (classe.anneeScolaire.id != serie.anneeScolaire.id) {
- throw new IllegalArgumentException(
- "L'année scolaire de la classe $classe ne correspond pas " +
- "à celle de la série de Brevet $serie"
- )
- }
-
- return PersonneProprietesScolarite.createCriteria().list {
- createAlias('personne', 'personne')
- createAlias('personne.brevetFiches', 'brevetFiches')
- createAlias('brevetFiches.notes', 'notes')
- createAlias('notes.epreuve', 'epreuve')
-
- projections {
- distinct('notes.fiche')
- }
-
- proprietesScolarite {
- eq('structureEnseignement',classe)
- }
-
- eq('brevetFiches.anneeScolaire', classe.anneeScolaire)
- eq('epreuve.serie', serie)
- eq('estActive', true)
- }
- }
-
-
- /**
- * Enregistre les notes et les avis dans les fiches de Brevet des élèves.
- * @author bper
- */
- List<BrevetFiche> saveAllFiche(SecuriteSession securiteSession,
- List<BrevetFicheSaveParams> ficheParamses) {
-
- List<Long> eleveIds = ficheParamses*.eleveId
-
- List<BrevetFiche> fiches = BrevetFiche.createCriteria().list {
- eleve {'in'('id',eleveIds)}
- eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
- }
-
- if (ficheParamses.size() != fiches.size()) {
- List<Long> eleveSansFicheIds = (List) eleveIds.findAll {Long eleveId ->
- !fiches.any {it.eleve.id == eleveId}
- }
- throw new IllegalArgumentException(
- "Les élèves avec IDs $eleveSansFicheIds ne sont pas inscrits au brevet"
- )
- }
-
- List<StructureEnseignement> classes =
- notesStructureEnseignementService.findAllClassesForAllEleves(fiches*.eleve)
-
- classes.each {StructureEnseignement classe ->
- notesDroitService.verifieAutorisationByEtablissement(
- securiteSession,
- classe.etablissement,
- ActionEnum.MODIFICATION,
- NotesFonction.DIRECTION_ASSIMILE)
- }
-
- fiches = fiches.collect {BrevetFiche fiche ->
- BrevetFicheSaveParams params = (BrevetFicheSaveParams) ficheParamses.find {
- it.eleveId == fiche.eleve.id
- }
-
- params.mapEpreuveNote.each {Long epreuveId, String valeurNote ->
- BrevetNote note = (BrevetNote) fiche.notes.find {it.epreuve.id == epreuveId}
-
- if (!note) {
- throw new IllegalArgumentException(
- "L'eleve ${fiche.eleve} n'est pas inscrit pour l'épreuve (id=$epreuveId)")
- }
-
- note.valeur = valeurNote
- }
-
- if (params.avis != null) {
- fiche.avis = (params.avis == '') ? null : params.avis
- }
-
- fiche.save(failOnError: true)
- return fiche
- }
-
- sessionFactory.currentSession.flush()
-
- return fiches
- }
-
-
- /**
- * Retourne toutes les fiches de Brevet pour une liste d'élève.
- * @author bper
- */
- List<BrevetFiche> internalFindAllFicheByEleves(List<Personne> eleves) {
- return BrevetFiche.createCriteria().list {
- 'in'('eleve', eleves)
- eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
- fetchMode('notes',FetchMode.JOIN)
- fetchMode('notes.epreuve',FetchMode.JOIN)
- }
- }
-
-}