--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+
+
+package org.lilie.services.eliot.notes
+
+import grails.test.GrailsUnitTestCase
+import org.lilie.services.eliot.scolarite.Etablissement
+
+import org.lilie.services.eliot.scolarite.anneescolaire.AnneeScolaireService
+import org.lilie.services.eliot.notes.scolarite.NotesPeriodeService
+import org.lilie.services.eliot.test.InitPeriodeTestService
+import org.lilie.services.eliot.notes.test.InitDonneesNotesTestService
+import org.lilie.services.eliot.test.LocalInitDonneesCommunesTestService
+import org.lilie.services.eliot.notes.resultat.RecapElevePeriodeService
+import org.lilie.services.eliot.scolarite.StructureEnseignement
+import org.lilie.services.eliot.scolarite.Matiere
+import org.lilie.services.eliot.scolarite.Periode
+import org.lilie.services.eliot.scolarite.Service
+import org.lilie.services.eliot.scolarite.Enseignement
+import org.lilie.services.eliot.scolarite.Personne
+import org.lilie.services.eliot.scolarite.AnneeScolaire
+import org.lilie.services.eliot.securite.impl.Autorite
+import org.lilie.services.eliot.test.PopulationTestEtablissement
+import org.lilie.services.eliot.test.PopulationTestMatiere
+import org.lilie.services.eliot.scolarite.TypeIntervalleEnum
+import org.lilie.services.eliot.annuaire.PersonneProprietesScolarite
+import org.lilie.services.eliot.annuaire.ProprietesScolarite
+import org.lilie.services.eliot.annuaire.FonctionEnum
+import org.lilie.services.eliot.annuaire.Fonction
+import org.lilie.services.eliot.test.ProprieteScolariteTestUtilService
+import org.lilie.services.eliot.test.PopulationTestActeur
+import org.lilie.services.eliot.annuaire.SecuriteSession
+import org.lilie.services.eliot.notes.resultat.RecapElevePeriode
+import org.lilie.services.eliot.notes.resultat.RecapEleve
+import org.lilie.services.eliot.annuaire.SourceImport
+import org.lilie.services.eliot.notes.resultat.UptodateService
+import org.lilie.services.eliot.notes.resultat.MoyenneService
+import org.lilie.services.eliot.notes.resultat.MoyenneCalculLauncherService
+import org.lilie.services.eliot.test.PopulationTestClasse
+
+/**
+ * Tests RecapElevePeriodeService
+ * @author mjao
+ */
+class RecapElevePeriodeServiceTests extends GrailsUnitTestCase {
+
+ LocalInitDonneesCommunesTestService localInitDonneesCommunesTestService
+ InitDonneesNotesTestService initDonneesNotesTestService
+ InitPeriodeTestService initPeriodeTestService
+ NotesPeriodeService notesPeriodeService
+ AnneeScolaireService anneeScolaireService
+ ProprieteScolariteTestUtilService proprieteScolariteTestUtilService
+ RecapElevePeriodeService recapElevePeriodeService
+ UptodateService uptodateService
+ MoyenneService moyenneService
+ MoyenneCalculLauncherService moyenneCalculLauncherService
+
+
+ Date dateEvaluation1 = new Date(111, 1, 1)
+ Date dateCreation1 = new Date(111, 1, 1)
+ Date dateEvaluation2 = new Date(111, 2, 1)
+ Date dateCreation2 = new Date(111, 2, 1)
+
+ Etablissement etablissement1 = null
+ StructureEnseignement classe1enTrimestres = null
+
+ Matiere matiere1 = null
+
+ Periode periodeT1_1 = null
+ Periode periodeT2_1 = null
+ Periode periodeT3_1 = null
+ Periode periode_Annee = null
+
+ Service service = null
+
+ Enseignement enseignement = null //attaché au service
+
+ Personne eleve1 = null
+ Personne eleve2 = null
+
+ Evaluation evalT1 = null
+ Evaluation evalT2 = null
+ Evaluation evalT3 = null
+
+ AnneeScolaire anneeScolaire = null
+
+ //la note de service attaché à l'eleve1 pour la periode T1
+ Note noteT1_1 = null
+ //la note de service attaché à l'eleve2 pour la periode T1
+ Note noteT1_2 = null
+ //la note de service attaché à l'eleve1 pour la periode T2
+ Note noteT2_1 = null
+ //la note de service attaché à l'eleve2 pour la periode T2
+ Note noteT2_2 = null
+ //la note de service attaché à l'eleve1 pour la periode T3
+ Note noteT3_1 = null
+ //la note de service attaché à l'eleve2 pour la periode T3
+ Note noteT3_2 = null
+
+ //les valeurs numeriques des notes
+ private final note1_1 = 30
+ private final note1_2 = 10
+ private final note2_1 = 50
+ private final note2_2 = 40
+ private final note3_1 = 41
+ private final note3_2 = 20
+
+ private final noteMax = 50
+
+
+ protected void setUp() {
+ super.setUp()
+
+ initPeriodeTestService.initialisePeriodesDeTest()
+ initDonneesNotesTestService.initDonneesTest()
+
+ etablissement1 =
+ localInitDonneesCommunesTestService.getEtablissement(PopulationTestEtablissement.ETABLISSEMENT_1)
+
+ matiere1 = localInitDonneesCommunesTestService.
+ getMatiere(PopulationTestMatiere.FRANCAIS)
+
+ anneeScolaire = anneeScolaireService.anneeScolaireEnCours()
+
+ //creer une classe Trimestrielle
+ classe1enTrimestres = localInitDonneesCommunesTestService.getClasse(
+ PopulationTestClasse.CLASSE_1
+ )
+ classe1enTrimestres.typeIntervalle = TypeIntervalleEnum.TRIMESTRE
+ classe1enTrimestres.save()
+
+ //creer une personne (eleve1)
+ eleve1 = creePersonne("111100098720000010")
+
+ // Les proprietés scolarités des eleves
+ ProprietesScolarite propretesScolarite = creeProprietesScolarite()
+
+ // La PersonneProprietésScolarités attachée à l'eleve1
+ creePersonneProprietesScolarite(eleve1, propretesScolarite)
+
+ // creer une personne (eleve2)
+ eleve2 = creePersonne("11110147800011")
+
+ // // La PersonneProprietésScolarités attachée à l'eleve2
+ creePersonneProprietesScolarite(eleve2, creeProprietesScolarite())
+
+ //ajouter (inscription) les deux eleves eleve1 et eleve2 au classe1Trimestre1
+ proprieteScolariteTestUtilService.inscrireEleveClasse(
+ eleve1,
+ etablissement1,
+ classe1enTrimestres,
+ anneeScolaire,
+ null,
+ null,
+ null,
+ true,
+ SourceImport.findByCode(SourceImport.STS)
+ )
+ proprieteScolariteTestUtilService.inscrireEleveClasse(
+ eleve2,
+ etablissement1,
+ classe1enTrimestres,
+ anneeScolaire,
+ null,
+ null,
+ null,
+ true,
+ SourceImport.findByCode(SourceImport.STS)
+ )
+
+ //get periode de notation
+ periodeT1_1 = initDonneesNotesTestService.getOuCreePeriode(
+ initPeriodeTestService.t1, classe1enTrimestres)
+
+ periodeT2_1 = initDonneesNotesTestService.getOuCreePeriode(
+ initPeriodeTestService.t2, classe1enTrimestres
+ )
+ periodeT3_1 = initDonneesNotesTestService.getOuCreePeriode(
+ initPeriodeTestService.t3, classe1enTrimestres
+ )
+ periode_Annee = initDonneesNotesTestService.getOuCreePeriode(
+ initPeriodeTestService.annee, classe1enTrimestres)
+
+ //creer un service
+ service = initDonneesNotesTestService.creeService(matiere1, classe1enTrimestres)
+
+ //recuperer un enseignant
+ Autorite enseignant1 = localInitDonneesCommunesTestService.
+ getAutorite(PopulationTestActeur.ENSEIGNANT_1)
+
+ //creer un enseignement attaché à l'enseignant 1 et le service
+ enseignement = initDonneesNotesTestService.creeEnseignement(enseignant1, service)
+
+ service.addToEnseignements(enseignement)
+
+ //Creer les evaluations pour le test
+ evalT1 = creeEvaluation([periodeT1_1], enseignement, dateCreation1, dateEvaluation1)
+ evalT2 = creeEvaluation([periodeT2_1], enseignement, dateCreation2, dateEvaluation2)
+ evalT3 = creeEvaluation([periodeT3_1], enseignement, dateCreation1, dateEvaluation1)
+
+ //creer les notes de chauq eleve pour chaque periode
+ noteT1_1 = creeNote(eleve1.autorite, evalT1, note1_1)
+ noteT1_2 = creeNote(eleve2.autorite, evalT1, note1_2)
+ noteT2_1 = creeNote(eleve1.autorite, evalT2, note2_1)
+ noteT2_2 = creeNote(eleve2.autorite, evalT2, note2_2)
+ noteT3_1 = creeNote(eleve1.autorite, evalT3, note3_1)
+ noteT3_2 = creeNote(eleve2.autorite, evalT3, note3_2)
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ // List<RecapElevePeriode> construisRecapElevePeriodes(SecuriteSession securiteSession,
+ // Personne eleve)
+
+ void testConstruisRecapElevePeriodes() {
+
+ SecuriteSession securiteSessionEnseignant =
+ localInitDonneesCommunesTestService.getSecuriteSession(
+ PopulationTestActeur.ENSEIGNANT_1)
+
+ List<Autorite> eleves = [eleve1.autorite, eleve2.autorite]
+
+ uptodateService.marqueDirtyEleves(securiteSessionEnseignant,
+ eleves,
+ periodeT1_1,
+ enseignement,
+ null
+ )
+ uptodateService.marqueDirtyEleves(securiteSessionEnseignant,
+ eleves,
+ periodeT2_1,
+ enseignement,
+ null
+ )
+ uptodateService.marqueDirtyEleves(securiteSessionEnseignant,
+ eleves,
+ periodeT3_1,
+ enseignement,
+ null
+ )
+
+ moyenneCalculLauncherService.calculeToutesMoyennes()
+
+ RecapEleve recapEleve = recapElevePeriodeService.
+ construisRecapElevePeriodes(
+ securiteSessionEnseignant,
+ eleve1,
+ classe1enTrimestres) //TOREFACT ajouter la classe de l'élève
+
+ List<RecapElevePeriode> recap = recapEleve.recapElevePeriodes
+
+ //Tester la recuperation des données dans la liste recap
+ assertNotNull("La liste recap de l'eleve1 est nulle", recap)
+
+ RecapElevePeriode recapT1 = recap.find {it.periode.id == periodeT1_1.id}
+ RecapElevePeriode recapT2 = recap.find {it.periode.id == periodeT2_1.id}
+ RecapElevePeriode recapT3 = recap.find {it.periode.id == periodeT3_1.id}
+ RecapElevePeriode recapAnnee = recap.find {it.periode.id == periode_Annee.id}
+
+ //verifier la bonne recuperation de l'eleve
+ assertEquals("L'eleve recuperé dans recapT1 est incorrect",
+ recapT1.eleve.id, eleve1.id)
+
+ assertEquals("L'eleve recuperé dans recapT2 est incorrect",
+ recapT2.eleve.id, eleve1.id)
+
+ assertEquals("L'eleve recuperé dans recapT3 est incorrect",
+ recapT3.eleve.id, eleve1.id)
+
+ assertEquals("L'eleve recuperé dans recapAnnée est incorrect",
+ recapAnnee.eleve.id, eleve1.id)
+
+ //verifier la bonne recuperation des resultats de l'eleve
+ ResultatElevePeriode resultT1 = ResultatElevePeriode.findByEleveAndPeriode(eleve1.autorite, periodeT1_1)
+ ResultatElevePeriode resultT2 = ResultatElevePeriode.findByEleveAndPeriode(eleve1.autorite, periodeT2_1)
+ ResultatElevePeriode resultT3 = ResultatElevePeriode.findByEleveAndPeriode(eleve1.autorite, periodeT3_1)
+ ResultatElevePeriode resultAnnee = ResultatElevePeriode.findByEleveAndPeriode(eleve1.autorite, periode_Annee)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapT1.resultatElevePeriode.id, resultT1.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapT2.resultatElevePeriode.id, resultT2.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapT3.resultatElevePeriode.id, resultT3.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapAnnee.resultatElevePeriode.id, resultAnnee.id)
+
+ //verifier la bonne recuperation de resultat de classe
+ ResultatClassePeriode resultClasseT1 = ResultatClassePeriode.findByClasseAndPeriode(classe1enTrimestres, periodeT1_1)
+ ResultatClassePeriode resultClasseT2 = ResultatClassePeriode.findByClasseAndPeriode(classe1enTrimestres, periodeT2_1)
+ ResultatClassePeriode resultClasseT3 = ResultatClassePeriode.findByClasseAndPeriode(classe1enTrimestres, periodeT3_1)
+ ResultatClassePeriode resultClasseAnnee = ResultatClassePeriode.findByClasseAndPeriode(classe1enTrimestres, periode_Annee)
+
+ assertEquals("Le resultatClassePeriode pour la periode T1 est incorrect",
+ recapT1.resultatClassePeriode.id, resultClasseT1.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapT2.resultatClassePeriode.id, resultClasseT2.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapT3.resultatClassePeriode.id, resultClasseT3.id)
+
+ assertEquals("Le resultatElevePeriode pour la periode T1 est incorrect",
+ recapAnnee.resultatClassePeriode.id, resultClasseAnnee.id)
+
+
+ }
+
+ /**
+ * Crée ou get une evaluation attaché a une periode
+ * @param periode
+ * @param enseignement
+ * @param dateCreation
+ * @return evaluation
+ * @author mjao
+ */
+ private Evaluation creeEvaluation(List<Periode> periodes,
+ Enseignement enseignement,
+ Date dateCreation,
+ Date dateEvaluation) {
+ Evaluation evaluation = new Evaluation(
+ enseignement: enseignement,
+ dateCreation: dateCreation,
+ dateEvaluation: dateEvaluation,
+ periodes: periodes,
+ publiable: true,
+ titre: "libelleInitial",
+ coefficient: 1,
+ noteMaxPossible: noteMax,
+ )
+ evaluation.save(flush: true)
+ if (evaluation.hasErrors()) {
+ println(evaluation.errors)
+ }
+ return evaluation
+
+ }
+
+ /**
+ * Crée une note
+ * @param eleve
+ * @param evaluation qui correspond à l'eleve
+ * @param valeur : la valeur numerique de note
+ * @author mjao
+ */
+ private Note creeNote(Autorite eleve,
+ Evaluation evaluation,
+ BigDecimal valeur) {
+ Note note = new Note(
+ eleve: eleve,
+ evaluation: evaluation,
+ valeurNumerique: valeur
+ )
+ note.save(flush: true)
+ if (note.hasErrors()) {
+ println(note.errors)
+ }
+ return note
+ }
+
+
+ /**
+ * Crée une personne (eleve)
+ * idExterne l'idExterne de la personne
+ * @return personne l'eleve
+ * @author mjao
+ */
+ private Personne creePersonne(String idExterne) {
+
+ Autorite autorite = new Autorite(
+ type: Autorite.TYPE_ACTEUR,
+ idExterne: idExterne,
+ )
+ autorite.save()
+ if (autorite.hasErrors()) {
+ println(autorite.errors)
+ }
+
+ Personne personne = new Personne(
+ nom: "Michal",
+ Prenom: "Luxo",
+ indexTypePersonne: 1,
+ autorite: autorite,
+ etablissementRattachement: etablissement1,
+ actif: true
+ )
+ personne.save()
+ if (personne.hasErrors()) {
+ println(personne.errors)
+ }
+ return personne
+
+ }
+
+ /**
+ * Crée une ProprietesScolarite
+ * @return proprietesScolarite d'un eleve
+ * @author mjao
+ */
+ private ProprietesScolarite creeProprietesScolarite() {
+
+ ProprietesScolarite proprietesScolarite = new ProprietesScolarite(
+
+ anneeScolaire: anneeScolaireService.anneeScolaireEnCours(),
+ fonction: Fonction.findByCode(FonctionEnum.ELEVE.getCode()),
+ etablissement: etablissement1,
+ source: SourceImport.findByCode(SourceImport.STS)
+ )
+ proprietesScolarite.save()
+ if (proprietesScolarite.hasErrors()) {
+ println(proprietesScolarite.errors)
+ }
+ return proprietesScolarite
+
+ }
+
+ /**
+ * Crée une PersonneProprietesScolarite
+ * @return proprietesScolarite d'un eleve
+ * @author mjao
+ */
+ private PersonneProprietesScolarite creePersonneProprietesScolarite(
+ Personne personne,
+ ProprietesScolarite proprietesScolarite
+ ) {
+
+ PersonneProprietesScolarite personneProprietesScolarite =
+ new PersonneProprietesScolarite(
+
+ personne: personne,
+ proprietesScolarite: creeProprietesScolarite(),
+ estActive: true
+
+ )
+ personneProprietesScolarite.save()
+ return personneProprietesScolarite
+ }
+
+ /**
+ * Crée un avisConseilDeClasse
+ * @param texte le texte d'avisConseildeClasse
+ * @param etablissement l'etablissement
+ * @return l'avisConseilDeClasse crée
+ * @author mjao
+ */
+ private AvisConseilDeClasse creeAvisConseilDeClasse(
+ String texte,
+ Etablissement etablissement) {
+
+ AvisConseilDeClasse avisConseilDeClasse = new AvisConseilDeClasse(
+
+ texte: texte,
+ etablissement: etablissement1,
+ )
+
+ avisConseilDeClasse.save(flush: true)
+
+ if (avisConseilDeClasse.hasErrors()) {
+ println(avisConseilDeClasse.errors)
+ }
+
+ return avisConseilDeClasse
+ }
+
+ /**
+ * Crée un avisOrientation
+ * @param texte le texte d'avisOrientation
+ * @param etablissement l'etablissement
+ * @author mjao
+ */
+ private AvisOrientation creeAvisOrientation(
+ String texte,
+ Etablissement etablissement) {
+
+ AvisOrientation avisOrientation = new AvisOrientation(
+
+ texte: texte,
+ etablissement: etablissement1,
+ )
+
+ avisOrientation.save(flush: true)
+
+ if (avisOrientation.hasErrors()) {
+ println(avisOrientation.errors)
+ }
+
+ return avisOrientation
+ }
+
+
+}