import org.lilie.services.eliot.temps.DateUtil
import org.lilie.services.eliot.absences.Sanction
import org.lilie.services.eliot.scolarite.Personne
-import org.lilie.services.eliot.applications.absences.BilanAbsencesParPersonneInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsencesParPersonneInfo
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.absences.emploidutemps.EmploiDuTempsService
import org.lilie.services.eliot.scolarite.NiveauGeneral
import org.lilie.services.eliot.absences.statistiques.Type
import org.lilie.services.eliot.absences.statistiques.volumehoraire.VolumesAllStructureEnseignements
import org.lilie.services.eliot.scolarite.structureenseignement.EffectifsClasseGroupe
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.absences.statistiques.commons.StatsAbsencesParPeriode
import org.lilie.services.eliot.absences.statistiques.commons.NiveauDetail
package org.lilie.services.eliot.absences.statistiques.periode
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.absences.statistiques.commons.StatsAbsencesParPeriode
-import org.lilie.services.eliot.applications.absences.BilanAbsencesParPersonneInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsencesParPersonneInfo
import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
import org.lilie.services.eliot.scolarite.personne.eleve.FicheEleveAbsencesReferentiel
import org.lilie.services.eliot.absences.AppelLigne
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
import org.lilie.services.eliot.absences.PlageHoraire
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.temps.DateUtil
/**
--- /dev/null
+package org.lilie.services.eliot.applications.absences
+
+import org.lilie.services.eliot.securite.Autorite
+import org.lilie.services.eliot.scolarite.StructureEnseignement
+import org.lilie.services.eliot.impression.constantes.TypeMedia
+import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementServiceHql
+import org.lilie.services.eliot.scolarite.Personne
+import org.lilie.services.eliot.temps.DateUtil
+import org.lilie.services.eliot.impression.constantes.TemplateTypeFonctionnaliteEnum
+
+class AutoritePublipostageService {
+
+ public List<Autorite> findAllAutoritesElevesForAllStructuresForPublipostageAbs(Set<StructureEnseignement> structures,
+ TypeMedia typeMedia,
+ Boolean filtrerDejaEnvoye,
+ Boolean elevesActifsSeulement = true,
+ Boolean autoriteIdsSeulement = false) {
+
+ String hql = autoriteIdsSeulement ?
+ LocalStructureEnseignementServiceHql.HQL_AUTORITE_ELEVE_ID_PAR_STRUCT_ENS :
+ LocalStructureEnseignementServiceHql.HQL_AUTORITE_ELEVE_PAR_STRUCT_ENS
+
+ if (elevesActifsSeulement) {
+ hql += """
+ and pps.estActive = true
+ and pps.personne.autorite.estActive = true
+ """
+ }
+
+ Map params = [
+ fonctionCode: org.lilie.services.eliot.annuaire.FonctionEnum.ELEVE.getCode(),
+ structures: structures.toList()
+ ]
+
+ if (filtrerDejaEnvoye) {
+ Map requeteInfo = getRequeteAndParamsFiltrerDejaEnvoye(typeMedia)
+
+ hql += requeteInfo['hql']
+
+ params += requeteInfo['params']
+ }
+
+ List<Autorite> autorites =
+ org.lilie.services.eliot.securite.impl.Autorite.executeQuery(hql, params)
+
+ return autorites
+ }
+
+ public List<Personne> findAllPersonnesElevesForAllStructuresForPublipostageAbs(Set<StructureEnseignement> structures,
+ TypeMedia typeMedia = TypeMedia.COURRIER,
+ boolean filtrerDejaEnvoye = false) {
+
+ Map params = [
+ fonctionCode: org.lilie.services.eliot.annuaire.FonctionEnum.ELEVE.getCode(),
+ structures: structures.toList()
+ ]
+
+
+ String hql = """select pps.personne
+ from PersonneProprietesScolarite pps
+ inner join fetch pps.personne.autorite
+ where pps.proprietesScolarite.fonction.code = :fonctionCode
+ and pps.proprietesScolarite.structureEnseignement in (:structures)
+ and pps.estActive = true
+ and pps.personne.autorite.estActive = true
+ """
+
+ if (filtrerDejaEnvoye) {
+ Map requeteInfo = getRequeteAndParamsFiltrerDejaEnvoye(typeMedia)
+
+ hql += requeteInfo['hql']
+
+ params += requeteInfo['params']
+ }
+
+ return Personne.executeQuery(hql, params)
+ }
+
+ private Map getRequeteAndParamsFiltrerDejaEnvoye(TypeMedia typeMedia) {
+ Map params = [:]
+ Date debJour = DateUtil.setDebutJour(new Date())
+ Date finJour = DateUtil.setFinJour(new Date())
+
+ String hql = """
+ and not exists (
+ from PublipostageSuivi suivi
+ inner join suivi.typeFonctionnalite tf
+ where suivi.personne = pps.personne
+ and suivi.media = :media
+ and suivi.dateEnvoi between :debJour and :finJour
+ and tf.code in (:typeFonctionnaliteCodes)
+ )
+ """
+
+ params.put('media', typeMedia.code)
+ params.put('debJour', debJour)
+ params.put('finJour', finJour)
+
+ params.put(
+ 'typeFonctionnaliteCodes',
+ [
+ TemplateTypeFonctionnaliteEnum.ABSENCES.toString(),
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES.toString(),
+ TemplateTypeFonctionnaliteEnum.LETTRE_RETARDS.toString(),
+ TemplateTypeFonctionnaliteEnum.SMS.toString(),
+ TemplateTypeFonctionnaliteEnum.LETTRE_PUNITION.toString(),
+ TemplateTypeFonctionnaliteEnum.LETTRE_SANCTION.toString()
+ ]
+ )
+
+ return [
+ hql: hql,
+ params: params
+ ]
+ }
+
+
+}
-package org.lilie.services.eliot.applications.absences
+package org.lilie.services.eliot.applications.absences.bilan
import org.lilie.services.eliot.scolarite.StructureEnseignement
import org.lilie.services.eliot.absences.AppelLigne
-package org.lilie.services.eliot.applications.absences
+package org.lilie.services.eliot.applications.absences.bilan
import org.lilie.services.eliot.scolarite.Personne
import org.lilie.services.eliot.absences.Appel
* <http://www.cecill.info/licences.fr.html>.
*/
-package org.lilie.services.eliot.applications.absences
+package org.lilie.services.eliot.applications.absences.bilan
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.impression.constantes.TypeMedia
import org.hibernate.SessionFactory
import org.hibernate.SQLQuery
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementServiceHql
+import org.lilie.services.eliot.applications.absences.PriseEnCompteMotif
+import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
+import org.lilie.services.eliot.applications.absences.StatAbsences
+import org.lilie.services.eliot.applications.absences.AutoritePublipostageService
class BilanService {
PreferencesEtablissementAbsencesService preferencesEtablissementAbsencesService
MotifService motifService
PlageHoraireService plageHoraireService
+ AutoritePublipostageService autoritePublipostageService
SessionFactory sessionFactory
return mapARetourner
}
-
/**
* calcul pour chaque élève le nombre des absences excusées et
* les absences non excusées
if ((criteres.structIds?.size() > 0) || (criteres.eleveIds)) {
if (!criteres.eleveIds || criteres.eleveIds.contains((Long) -1)) {
List<Autorite> autoriteEleves =
- localStructureEnseignementService.findAllAutoritesElevesForAllStructuresForPublipostageAbs(
- StructureEnseignement.findAllByIdInList(criteres.structIds) as Set,
- typeMedia,
- filtrerDejaEnvoye,
- criteres.elevesActifsSeulement
- )
+ autoritePublipostageService.findAllAutoritesElevesForAllStructuresForPublipostageAbs(
+ StructureEnseignement.findAllByIdInList(criteres.structIds) as Set,
+ typeMedia,
+ filtrerDejaEnvoye,
+ criteres.elevesActifsSeulement
+ )
criteres.eleveIds = autoriteEleves*.id
}
return getAbsencesOrRetards(criteres)
if (appel) {
demiJours = (Byte) demiJoursParAppel[appel.id]
nbDemiJours = 1
- if (demiJours == org.lilie.services.eliot.applications.absences.BilanService.MATIN_ET_APRES_MIDI) {
+ if (demiJours == BilanService.MATIN_ET_APRES_MIDI) {
nbDemiJours = 2
}
dateAbsence = appel.dateHeureDebut
* auquel cas, la nouvelle absence ne compte que pour l'après-midi
*/
if (nbDemiJours == 2) {
- if (currentJour == lastJour && lastDemiJour == org.lilie.services.eliot.applications.absences.BilanService.MATIN) {
+ if (currentJour == lastJour && lastDemiJour == BilanService.MATIN) {
return 1
} else {
return 2
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
import org.lilie.services.eliot.absences.AppelLigne
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.applications.absences.StatAbsences
import org.lilie.services.eliot.impression.donnees.eleve.absences.AbsencesImpression
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
import org.lilie.services.eliot.impression.regroupement.ImpressionRegroupementAbsencesService
import org.apache.commons.lang.time.DateUtils
-import org.lilie.services.eliot.applications.absences.BilanAbsencesParPersonneInfo
-import org.lilie.services.eliot.applications.absences.BilanAbsenceInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsencesParPersonneInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsenceInfo
import org.lilie.services.eliot.applications.absences.PriseEnCompteMotif
import org.lilie.services.eliot.parametrages.motifs.MotifService
import org.lilie.services.eliot.impression.ImpressionInfoGenerale
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
-import org.lilie.services.eliot.applications.absences.BilanAbsencesParPersonneInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsencesParPersonneInfo
import org.lilie.services.eliot.scolarite.Personne
-import org.lilie.services.eliot.applications.absences.BilanService
-import org.lilie.services.eliot.applications.absences.BilanAbsenceInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsenceInfo
import org.lilie.services.eliot.absences.AppelLigne
import org.lilie.services.eliot.impression.donnees.eleve.absences.RetardImpression
import org.lilie.services.eliot.temps.DateUtil
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.notes.exception.PeriodeNonPublieException
import org.lilie.services.eliot.notes.NotesDroitService
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.securite.AutorisationException
import org.lilie.services.eliot.securite.Autorite
import org.lilie.services.eliot.notes.NoteTextuelle
import org.lilie.services.eliot.notification.AbstractDemandeNotification
import org.lilie.services.eliot.applications.EliotApplicationEnum
import org.lilie.services.eliot.scolarite.Periode
+import org.lilie.services.eliot.scolarite.LocalResponsableService
/**
* @author jtra
"eleveAnnuaireService"
)
- LocalStructureEnseignementService localStructureEnseignementService =
- applicationContext.getBean('localStructureEnseignementService')
+ LocalResponsableService localResponsableService=
+ applicationContext.getBean('localResponsableService')
StructureEnseignement structureEnseignement = StructureEnseignement.get(
structureEnseignementId
return eleveAnnuaireService.findAllEleveByStructureEnseignement(
structureEnseignement
) +
- localStructureEnseignementService.findAllParentsForStructure(
+ localResponsableService.findAllParentsForStructure(
securiteSessionNotes,
structureEnseignement
)
--- /dev/null
+package org.lilie.services.eliot.scolarite
+
+import org.lilie.services.eliot.annuaire.Fonction
+import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementServiceHql
+import org.lilie.services.eliot.annuaire.SecuriteSession
+
+/**
+ * Service pour récupérer des informations responsables dans l'annuaire local.
+ */
+class LocalResponsableService {
+
+ /**
+ * Retourne la liste des parents d'élèves d'une structure d'enseignement
+ * classé par défaut en ordre alphabétique
+ * @param securiteSession la session de securite de l'utilisateur déclenchant
+ * l'action (pour transmettre le code porteur ENT)
+ * @return une liste de personne (parents)
+ */
+ List<Personne> findAllParentsForStructure(SecuriteSession securiteSession,
+ StructureEnseignement structureEnseignement) { // TOREFACT : renommer parent en responsableEleve
+ List<Personne> parents = (List<Personne>) Fonction.executeQuery(
+ LocalStructureEnseignementServiceHql.HQL_PARENTS_FOR_STRUCTURE,
+ [
+ structureEnseignement: structureEnseignement
+ ]
+ )
+
+ return parents
+ }
+
+ List<Personne> findAllParentsForStructures(SecuriteSession securiteSession,
+ List<StructureEnseignement> structures) { // TOREFACT : renommer parent en responsableEleve
+ List<Personne> parents = (List<Personne>) Fonction.executeQuery(
+ LocalStructureEnseignementServiceHql.HQL_PARENTS_FOR_STRUCTURES,
+ [
+ structures: structures
+ ]
+ )
+
+ return parents
+ }
+
+}
import org.hibernate.Session
import org.hibernate.Hibernate
import org.lilie.services.eliot.constantes.ConstTechniques
+import org.lilie.services.eliot.requetage.RequetageUtilsService
/**
* Service de gestion des structures d'enseignement pour l'annuaire local
* @author jtra , othe
*/
-class LocalStructureEnseignementService {
+class LocalStructureEnseignementService extends RequetageUtilsService {
static transactional = true
- SessionFactory sessionFactory
-
PeriodeService periodeService
AnneeScolaireService anneeScolaireService
LocalPersonneService localPersonneService
* @param type structure (optionel)
* @return une liste de StructureEnseignement
*/
- List<StructureEnseignement> findAllStructureEnseignementByEtablissement(
+ public List<StructureEnseignement> findAllStructureEnseignementByEtablissement(
Etablissement etablissement,
TypeStructureEnum typeStructure = null) {
* @param type structure (optionel)
* @return une liste de StructureEnseignement
*/
- List<StructureEnseignement> findAllStructureEnseignementByEnseignantAndEtablissement(Autorite enseignant,
- Etablissement etablissement,
- TypeStructureEnum typeStructure = null
+ public List<StructureEnseignement> findAllStructureEnseignementByEnseignantAndEtablissement(Autorite enseignant,
+ Etablissement etablissement,
+ TypeStructureEnum typeStructure = null
) {
// auteur jbui
// auteur bahj
return enseignements*.service*.structureEnseignement
}
- List<StructureEnseignement> findAllStructureEnseignementByEnseignantAndEtablissementLight(Autorite enseignant,
- Etablissement etablissement,
- TypeStructureEnum typeStructure = null
+ public List<StructureEnseignement> findAllStructureEnseignementByEnseignantAndEtablissementLight(Autorite enseignant,
+ Etablissement etablissement,
+ TypeStructureEnum typeStructure = null
) {
String sql = """
ORDER BY str.code ASC
"""
- Session session = sessionFactory.getCurrentSession()
-
- SQLQuery sqlQuery = session.createSQLQuery(sql)
+ SQLQuery sqlQuery = prepareRequete(sql)
sqlQuery.addScalar(ConstTechniques.ID, Hibernate.LONG)
sqlQuery.addScalar(ConstTechniques.CODE, Hibernate.STRING)
return structureEnseignementList
}
- List<Map> findAllStructureEnseignementLight(Autorite enseignant,
- Etablissement etablissement,
- Boolean sortAsc = true
+ public List<Map> findAllStructureEnseignementLight(Autorite enseignant,
+ Etablissement etablissement,
+ Boolean sortAsc = true
) {
String sql = """ SELECT id AS id, code AS code, null AS enseignantId
sql += ' ORDER BY code DESC'
}
- Session session = sessionFactory.getCurrentSession()
-
- SQLQuery sqlQuery = session.createSQLQuery(sql)
+ SQLQuery sqlQuery = prepareRequete(sql)
sqlQuery.addScalar(ConstTechniques.ID, Hibernate.LONG)
sqlQuery.addScalar(ConstTechniques.CODE, Hibernate.STRING)
* @param enseignant : l'enseignant connecté
* @return une liste de StructureEnseignement
*/
- List<StructureEnseignement> findStructureEnseignementByEnseignantAndMatiereAndEtablissement(Autorite enseignant,
- Matiere matiere,
- Etablissement etablissement
+ public List<StructureEnseignement> findStructureEnseignementByEnseignantAndMatiereAndEtablissement(Autorite enseignant,
+ Matiere matiere,
+ Etablissement etablissement
) {
// auteur bahj
// Complexite Database access : constante : 1 requête
*
* @return la liste des classes
*/
- List<StructureEnseignement> findAllClasseByEtablissement(Etablissement etablissement,
- String sortField = null,
- Boolean sortAsc = true) {
+ public List<StructureEnseignement> findAllClasseByEtablissement(Etablissement etablissement,
+ String sortField = null,
+ Boolean sortAsc = true) {
return (List<StructureEnseignement>) StructureEnseignement.withCriteria {
eq('type', StructureEnseignement.TYPE_CLASSE)
eq('etablissement', etablissement)
}
}
- /*
- * Récupère les classes en faisant un fetch sur entnotes.structure_enseignement_notes
- * pour éviter les N+1 select
- */
-
- List<StructureEnseignement> findAllClasseByEtablissementForNotes(Etablissement etablissement,
- String sortField = null,
- Boolean sortAsc = true) {
- return (List<StructureEnseignement>) StructureEnseignement.withCriteria {
- eq('type', StructureEnseignement.TYPE_CLASSE)
- eq('etablissement', etablissement)
- eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
- if (sortField) {
- order(sortField, sortAsc ? 'asc' : 'desc')
- }
- fetchMode("structureEnseignementNotesSet", FetchMode.JOIN)
- }
- }
-
- List<StructureEnseignement> findAllClasseByEtablissementLight(Etablissement etablissement,
- String sortField = null,
- Boolean sortAsc = true) {
-
- Map parameters = [
- type: StructureEnseignement.TYPE_CLASSE,
- etablissementId: etablissement.id,
- anneeId: anneeScolaireService.anneeScolaireEnCours().id
- ]
-
- String hql = LocalStructureEnseignementServiceHql.HQL_STRUCTURES_LIGHT
- if (sortField) {
- if (sortAsc) {
- hql += " ORDER BY $sortField ASC"
- } else {
- hql += " ORDER BY $sortField DESC"
- }
- }
-
- List<Map> result = (List<Map>) StructureEnseignement.executeQuery(hql, parameters)
-
- List<StructureEnseignement> structureEnseignementList = []
- result.each {
- StructureEnseignement s = new StructureEnseignement(
- code: it[1]
- )
- s.id = it[0]
- structureEnseignementList.add(s)
- }
-
- return structureEnseignementList
- }
-
- /**
- * Retrouve la liste des classes pour tous les établissements
- * @return la liste des classes
- * @author msan
- */
- List<StructureEnseignement> findAllClasse() {
- return (
- List<StructureEnseignement>) StructureEnseignement.createCriteria().list {
- eq('type', StructureEnseignement.TYPE_CLASSE)
- eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
- }
- }
-
/**
* Liste des groupes d'une classe
* @param classe : on recherche les groupes sur cette classe
*
* @return La liste des groupes
*/
- List<StructureEnseignement> findAllGroupeByClasse(StructureEnseignement classe,
- Map sortParams = [:]) {
+ public List<StructureEnseignement> findAllGroupeByClasse(StructureEnseignement classe,
+ Map sortParams = [:]) {
return StructureEnseignement.createCriteria().list(sortParams) {
createAlias('classes', 'c')
eq('c.id', classe.id)
* l'action (pour transmettre le code porteur ENT)
* @return une liste de structure d'enseignement
*/
- List<StructureEnseignement> findAllStructureEnseignementForPersonne(Personne personne) {
+ public List<StructureEnseignement> findAllStructureEnseignementForPersonne(Personne personne) {
return (List<StructureEnseignement>) PersonneProprietesScolarite.createCriteria().list {
eq('personne', personne)
}
- List<StructureEnseignement> findAllStructureEnseignementForEleve(Personne eleve, TypeStructureEnum type = null) {
+ public List<StructureEnseignement> findAllStructureEnseignementForEleve(Personne eleve, TypeStructureEnum type = null) {
return (List<StructureEnseignement>) PersonneProprietesScolarite.withCriteria {
createAlias('proprietesScolarite', 'ps')
}
- List<StructureEnseignement> findAllStructureEnseignementForEleves(List<Personne> eleves, TypeStructureEnum type = null) {
+ public List<StructureEnseignement> findAllStructureEnseignementForEleves(List<Personne> eleves, TypeStructureEnum type = null) {
return (List<StructureEnseignement>) PersonneProprietesScolarite.withCriteria {
createAlias('proprietesScolarite', 'ps')
return result
}
-/**
- * Retourne la liste des parents d'élèves d'une structure d'enseignement
- * classé par défaut en ordre alphabétique
- * @param securiteSession la session de securite de l'utilisateur déclenchant
- * l'action (pour transmettre le code porteur ENT)
- * @return une liste de personne (parents)
- */
- List<Personne> findAllParentsForStructure(SecuriteSession securiteSession,
- StructureEnseignement structureEnseignement) { // TOREFACT : renommer parent en responsableEleve
- List<Personne> parents = (List<Personne>) Fonction.executeQuery(
- LocalStructureEnseignementServiceHql.HQL_PARENTS_FOR_STRUCTURE,
- [
- structureEnseignement: structureEnseignement
- ]
- )
-
- return parents
- }
-
- List<Personne> findAllParentsForStructures(SecuriteSession securiteSession,
- List<StructureEnseignement> structures) { // TOREFACT : renommer parent en responsableEleve
- List<Personne> parents = (List<Personne>) Fonction.executeQuery(
- LocalStructureEnseignementServiceHql.HQL_PARENTS_FOR_STRUCTURES,
- [
- structures: structures
- ]
- )
-
- return parents
- }
-
/**
* Retourne la liste des élèves d'une classe ou d'un groupe
* @param securiteSession pour le porteur ENT
])
}
- List<Autorite> findAllAutoritesElevesForAllStructuresForPublipostageAbs(Set<StructureEnseignement> structures,
- TypeMedia typeMedia,
- Boolean filtrerDejaEnvoye,
- Boolean elevesActifsSeulement = true,
- Boolean autoriteIdsSeulement = false) {
-
- String hql = autoriteIdsSeulement ?
- LocalStructureEnseignementServiceHql.HQL_AUTORITE_ELEVE_ID_PAR_STRUCT_ENS :
- LocalStructureEnseignementServiceHql.HQL_AUTORITE_ELEVE_PAR_STRUCT_ENS
-
- if (elevesActifsSeulement) {
- hql += """
- and pps.estActive = true
- and pps.personne.autorite.estActive = true
- """
- }
-
- Map params = [
- fonctionCode: FonctionEnum.ELEVE.getCode(),
- structures: structures.toList()
- ]
-
- if (filtrerDejaEnvoye) {
- Map requeteInfo = getRequeteAndParamsFiltrerDejaEnvoye(typeMedia)
-
- hql += requeteInfo['hql']
-
- params += requeteInfo['params']
- }
-
- List<Autorite> autorites =
- org.lilie.services.eliot.securite.impl.Autorite.executeQuery(hql, params)
-
- return autorites
- }
-
-
-
- private Map getRequeteAndParamsFiltrerDejaEnvoye(TypeMedia typeMedia) {
- Map params = [:]
- Date debJour = DateUtil.setDebutJour(new Date())
- Date finJour = DateUtil.setFinJour(new Date())
-
- String hql = """
- and not exists (
- from PublipostageSuivi suivi
- inner join suivi.typeFonctionnalite tf
- where suivi.personne = pps.personne
- and suivi.media = :media
- and suivi.dateEnvoi between :debJour and :finJour
- and tf.code in (:typeFonctionnaliteCodes)
- )
- """
-
- params.put('media', typeMedia.code)
- params.put('debJour', debJour)
- params.put('finJour', finJour)
-
- params.put(
- 'typeFonctionnaliteCodes',
- [
- TemplateTypeFonctionnaliteEnum.ABSENCES.toString(),
- TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES.toString(),
- TemplateTypeFonctionnaliteEnum.LETTRE_RETARDS.toString(),
- TemplateTypeFonctionnaliteEnum.SMS.toString(),
- TemplateTypeFonctionnaliteEnum.LETTRE_PUNITION.toString(),
- TemplateTypeFonctionnaliteEnum.LETTRE_SANCTION.toString()
- ]
- )
-
- return [
- hql: hql,
- params: params
- ]
- }
-
/**
* Retourne les "Personne" de tous les élèves appartenant à une des classes
* @return une List<Personne>
])
}
- List<Personne> findAllPersonnesElevesForAllStructuresForPublipostageAbs(Set<StructureEnseignement> structures,
- TypeMedia typeMedia = TypeMedia.COURRIER,
- boolean filtrerDejaEnvoye = false) {
-
- Map params = [
- fonctionCode: FonctionEnum.ELEVE.getCode(),
- structures: structures.toList()
- ]
-
-
- String hql = """select pps.personne
- from PersonneProprietesScolarite pps
- inner join fetch pps.personne.autorite
- where pps.proprietesScolarite.fonction.code = :fonctionCode
- and pps.proprietesScolarite.structureEnseignement in (:structures)
- and pps.estActive = true
- and pps.personne.autorite.estActive = true
- """
-
- if (filtrerDejaEnvoye) {
- Map requeteInfo = getRequeteAndParamsFiltrerDejaEnvoye(typeMedia)
-
- hql += requeteInfo['hql']
-
- params += requeteInfo['params']
- }
-
- return Personne.executeQuery(hql, params)
- }
-
/**
* Retourne les "Personne" de tous les élèves appartenant à une des classes avec la classe où il se trouve
* @return une List<<PPS, StructureEnseignement>>
* Liste les élèves actifs ou sortants d'une liste de classes
*/
public List<Map> listeElevesActifsOuSortants(List<Long> classeIds) {
- Session session = sessionFactory.getCurrentSession()
String sql = LocalStructureEnseignementServiceHql.SQL_ELEVES_ACTIFS_OU_SORTANTS
- SQLQuery sqlQuery = session.createSQLQuery(sql)
+ SQLQuery sqlQuery = prepareRequete(sql)
sqlQuery.addEntity("p", Personne)
sqlQuery.addScalar('actif', Hibernate.BOOLEAN)
sqlQuery.addScalar('codeClasse', Hibernate.STRING)
return []
}
- Session session = sessionFactory.getCurrentSession()
-
def sql =
LocalStructureEnseignementServiceHql.SQL_ELEVES_DERNIERE_CLASSE_ETAB
}
- SQLQuery sqlQuery = session.createSQLQuery(sql.toString())
+ SQLQuery sqlQuery = prepareRequete(sql.toString())
sqlQuery.addEntity("p", Personne)
sqlQuery.addScalar('codeClasse', Hibernate.STRING)
MatiereService matiereService
ServiceService serviceService
StructureEnseignementNotesService structureEnseignementNotesService
+ LocalResponsableService localResponsableService
Etablissement etablissement1
@Ignore /*Ce test ne peut pas être réalisé sans injecter les données dont
il a besoin*/
void testFindAllClasse() {
- List liste1 = localStructureEnseignementService.findAllClasse()
+ List liste1 = findAllClasse()
liste1.sort {
s1, s2 ->
s1.id <=> s2.id
assertEquals("La méthode doit retourner 458 classes (453 + 5 de test).", 458, liste1.size())
}
+ /**
+ * Retrouve la liste des classes pour tous les établissements
+ * @return la liste des classes
+ * @author msan
+ */
+ private List<StructureEnseignement> findAllClasse() {
+ return (
+ List<StructureEnseignement>) StructureEnseignement.createCriteria().list {
+ eq('type', StructureEnseignement.TYPE_CLASSE)
+ eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
+ }
+ }
+
+
@Ignore /*Ce test ne peut pas être réalisé sans injecter les données dont
il a besoin*/
void testFindAllClasseByEnseignantAndEtablissement() {
@Ignore /*Ce test ne peut pas être réalisé sans injecter les données dont
il a besoin*/
void testFindAllParentsForStructure() {
- List liste1 = localStructureEnseignementService.findAllParentsForStructure(
+ List liste1 = localResponsableService.findAllParentsForStructure(
localInitDonneesCommunesTestService.getSecuriteSession(PopulationTestActeur.DIRECTION_1),
localInitDonneesCommunesTestService.getClasse(PopulationTestClasse.CLASSE_1)
)
AnneeScolaireService anneeScolaireService
ServiceService serviceService
EnseignementService enseignementService
+ LocalResponsableService localResponsableService
StructureEnseignement struct1
StructureEnseignement struct2
StructureEnseignement classe =
localInitDonneesCommunesTestService.getClasse(PopulationTestClasse.CLASSE_1)
- List<Personne> lst = localStructureEnseignementService.findAllParentsForStructure(
+ List<Personne> lst = localResponsableService.findAllParentsForStructure(
sessionEnseignant,
classe
)
import org.lilie.services.eliot.CodeComparator
import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
import org.lilie.services.eliot.securite.perimetre.PerimetreEtablissement
+import org.lilie.services.eliot.scolarite.LocalResponsableService
class JsonScolariteController extends AbstractAbsencesController {
EleveAnnuaireService eleveAnnuaireService
ScolariteService scolariteService
LocalPersonneService localPersonneService
+ LocalResponsableService localResponsableService
/**
* Retourne la liste des enseignants de l'établissement courant
)
if (structureEnseignement) {
List<Personne> eleves =
- localStructureEnseignementService.findAllParentsForStructure(
+ localResponsableService.findAllParentsForStructure(
securiteSession,
structureEnseignement
)
import org.lilie.services.eliot.absences.securite.DroitsService
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.impression.constantes.TemplateTypeFonctionnaliteEnum
import org.lilie.services.eliot.impression.publipostage.PublipostageService
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.impression.donnees.eleve.SelectionAdresseResponsableEnum
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
import org.lilie.services.eliot.impression.constantes.TypeMedia
-import org.lilie.services.eliot.applications.absences.BilanAbsencesParPersonneInfo
+import org.lilie.services.eliot.applications.absences.bilan.BilanAbsencesParPersonneInfo
import org.lilie.services.eliot.temps.DateUtil
+import org.lilie.services.eliot.applications.absences.AutoritePublipostageService
class AbsencesPublipostageService extends PublipostageService {
AnneeScolaireService anneeScolaireService
BilanService bilanService
DroitsService droitsService
+ AutoritePublipostageService autoritePublipostageService
/**
* Retourne une liste de maps contenant chacune
List<StructureEnseignement> structures = criteria.structIds.collect {
StructureEnseignement.get(it)
}
- eleves = (Set<Personne>) localStructureEnseignementService.
+ eleves = (Set<Personne>) autoritePublipostageService.
findAllPersonnesElevesForAllStructuresForPublipostageAbs(
(Set<StructureEnseignement>) structures,
typeMedia,
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.scolarite.StructureEnseignement
import org.lilie.services.eliot.scolarite.Etablissement
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
import org.lilie.services.eliot.absences.securite.DroitsService
import org.lilie.services.eliot.impression.donnees.eleve.SelectionAdresseResponsableEnum
import org.lilie.services.eliot.scolarite.etablissement.PreferencesEtablissementAbsencesService
import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.applications.absences.PriseEnCompteMotif
import org.lilie.services.eliot.test.InitDonneesCommunesTestPreferencesAbsencesService
import org.lilie.services.eliot.scolarite.Personne
import org.lilie.services.eliot.scolarite.Periode
import org.lilie.services.eliot.notes.resultat.bulletin.Bulletin
-import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.bilan.BilanService
import org.lilie.services.eliot.notes.resultat.bulletin.BulletinServiceResultat
import org.lilie.services.eliot.notes.resultat.bulletin.BulletinSousServiceResultat
import grails.converters.JSON
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.scolarite.Personne
-import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
import org.lilie.services.eliot.notes.NotesDroitService
import org.lilie.services.eliot.annuaire.TypeStructureEnum
import org.lilie.services.eliot.scolarite.TypePeriode
}
}
+ /*
+ * Récupère les classes en faisant un fetch sur entnotes.structure_enseignement_notes
+ * pour éviter les N+1 select
+ */
+
+ private List<StructureEnseignement> findAllClasseByEtablissementForNotes(Etablissement etablissement,
+ String sortField = null,
+ Boolean sortAsc = true) {
+ return (List<StructureEnseignement>) StructureEnseignement.withCriteria {
+ eq('type', StructureEnseignement.TYPE_CLASSE)
+ eq('etablissement', etablissement)
+ eq('anneeScolaire', anneeScolaireService.anneeScolaireEnCours())
+ if (sortField) {
+ order(sortField, sortAsc ? 'asc' : 'desc')
+ }
+ fetchMode("structureEnseignementNotesSet", FetchMode.JOIN)
+ }
+ }
+
+
}