import org.lilie.services.eliot.scolarite.anneescolaire.AnneeScolaireService\r
import org.lilie.services.eliot.brevet.BrevetFiche\r
import org.lilie.services.eliot.brevet.BrevetModeCalculNote\r
+import org.lilie.services.eliot.notes.Note\r
\r
/**\r
* Gestion des notes de brevet\r
// enregsitre les changements\r
notesInitialises.each { BrevetNoteInfo noteInfo ->\r
BrevetNote brevetNote = BrevetNote.get(noteInfo.noteId)\r
- if (noteInfo.appreciation !=null || noteInfo.valeurNumerique != null) {\r
- if (noteInfo.appreciation !=null) {\r
+ if (noteInfo.appreciation != null || noteInfo.valeurNumerique != null || noteInfo.noteValeur) {\r
+\r
+ if (noteInfo.appreciation != null) {\r
brevetNote.appreciation = noteInfo.appreciation\r
}\r
- if (noteInfo.valeurNumerique !=null) {\r
+\r
+ if (noteInfo.valeurNumerique != null) {\r
brevetNote.valeurNumerique = noteInfo.valeurNumerique\r
}\r
+ else if (noteInfo.noteValeur != null) {\r
+ brevetNote.setValeurTextuelle(noteInfo.noteValeur)\r
+ }\r
+\r
brevetNote.save(failOnError: true)\r
}\r
}\r
- sessionFactory.currentSession.flush() // flush la session\r
+ sessionFactory.currentSession.flush()\r
\r
return initialisationOk\r
}\r
EpreuveInfo epreuveInfo = epreuveInfos.find {\r
it.epreuve.id == brevetNote.epreuve.id }\r
\r
- internalActualiseNote(\r
+ notesActualisess += internalActualiseNote(\r
epreuveInfo.moyenne,\r
epreuveInfo.appreciation,\r
- brevetNote,\r
- notesActualisess\r
+ brevetNote\r
)\r
}\r
\r
epreuveInfo.matieres = moyenneParMatierePourEpreuve.keySet().toList()\r
break\r
\r
+ case BrevetModeCalculNote.MOYENNE_SPORT :\r
+ epreuveInfo.moyenne = calculeMoyenneSport(periode.classe, eleve)\r
+ Matiere matiereSport = getMatiereSport(periode.classe)\r
+ epreuveInfo.matieres = matiereSport ? [matiereSport] : []\r
+ break\r
+\r
default: \r
throw new IllegalStateException(\r
"Le mode de calcul de note ${epreuveInfo.epreuve.modeCalculNote} " +\r
}\r
}\r
\r
+ private BigDecimal calculeMoyenneSport(StructureEnseignement classe, Personne eleve) {\r
+ Service serviceSport = classe.structureEnseignementNotes.serviceSport\r
+\r
+ if (!serviceSport) {\r
+ return null\r
+ }\r
+\r
+ List<Note> notes = Note.createCriteria().listDistinct {\r
+ eq('eleve', eleve.autorite)\r
+ evaluation {\r
+ enseignement {\r
+ eq('service', serviceSport)\r
+ }\r
+ periodes {\r
+ typePeriode {\r
+ eq('nature', NaturePeriodeEnum.NOTATION)\r
+ }\r
+ }\r
+ }\r
+\r
+ eq('choisiePourSport', true)\r
+ }\r
+\r
+ if (notes.size() < 3) {\r
+ return null\r
+ }\r
+\r
+ if (notes.size() > 3) {\r
+ throw new IllegalStateException(\r
+ "L'élève $eleve a plus de 3 notes sélectionnées sport dans le service $serviceSport")\r
+ }\r
+\r
+ return calculationService.calculeMoyenne(notes*.valeurSur20, true)?.valeurNumerique\r
+ }\r
+\r
+ private Matiere getMatiereSport(StructureEnseignement classe) {\r
+ return classe.structureEnseignementNotes.serviceSport?.matiere\r
+ }\r
+\r
/**\r
* Moyenne ponderee des resultats\r
* @author msan\r
* la valeur numérique de cette note n'est pas mise à jour.\r
* @author msan\r
*/\r
- void internalActualiseNote(BigDecimal note,\r
- String appreciation,\r
- BrevetNote brevetNote,\r
- List<BrevetNoteInfo> notesActualisees) {\r
+ private List<BrevetNoteInfo> internalActualiseNote(BigDecimal note,\r
+ String appreciation,\r
+ BrevetNote brevetNote) {\r
+\r
+ List<BrevetNoteInfo> notesActualises = []\r
\r
// si la moyenne ou l'appr existe, ajoute la note\r
// dans la liste des resultats envoyes\r
- if (note != null || appreciation!=null) {\r
+ if (note != null || appreciation != null ||\r
+ (brevetNote.epreuve.isSport() && brevetNote.valeurTextuelle == null)) {\r
+\r
BrevetNoteInfo brevetNoteInfo = new BrevetNoteInfo(\r
noteId: brevetNote.id,\r
eleveId: brevetNote.fiche.eleve.id,\r
noteValeur: brevetNote.valeur,\r
valeurNumerique: brevetNote.valeurNumerique\r
)\r
- if (note != null && brevetNote.valeurTextuelle == null) {\r
- brevetNoteInfo.valeurNumerique = note\r
- brevetNoteInfo.noteValeur = BrevetNote.NOTE_FORMATEUR.format(note)\r
+\r
+ if (brevetNote.valeurTextuelle == null) {\r
+ if (note != null) {\r
+ brevetNoteInfo.valeurNumerique = note\r
+ brevetNoteInfo.noteValeur = BrevetNote.NOTE_FORMATEUR.format(note)\r
+ }\r
+ else if (brevetNote.epreuve.isSport()) {\r
+ brevetNoteInfo.valeurNumerique = null\r
+ brevetNoteInfo.noteValeur = NoteTextuellesEnum.DI\r
+ }\r
}\r
- if (appreciation!=null) {\r
+\r
+ if (appreciation != null) {\r
brevetNoteInfo.appreciation = coupeAppreciation(appreciation)\r
}\r
\r
- notesActualisees.add(brevetNoteInfo)\r
+ notesActualises.add(brevetNoteInfo)\r
}\r
+\r
+ return notesActualises\r
}\r
\r
/**\r