package org.lilie.services.eliot.absences.saisie.discipline.incident
+import groovy.time.TimeCategory
import org.lilie.services.eliot.absences.Incident
+import org.lilie.services.eliot.absences.ScolariteService
+import org.lilie.services.eliot.absences.TypeProtagonisteIncident
+import org.lilie.services.eliot.scolarite.StructureEnseignement
+import org.lilie.services.eliot.scolarite.personne.PersonneAnnuaireService
+import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.securite.AutorisationException
import org.lilie.services.eliot.absences.securite.DroitsService
import org.lilie.services.eliot.absences.ProtagonisteIncident
EleveAnnuaireService eleveAnnuaireService
AbsencesSanctionService absencesSanctionService
AbsencesPunitionService absencesPunitionService
+ ScolariteService scolariteService
+ LocalStructureEnseignementService localStructureEnseignementService
+ PersonneAnnuaireService personneAnnuaireService
private static final FIND_INCIDENTS = """
from Incident as incident
incident.partenairesAPrevenir?.each {
PartenaireAPrevenirIncident partenaireAPrevenirIncident ->
- // Suppression du partenaire
- if (!incidentParams.partenairesParams.find { PartenaireAPrevenirIncidentParams params ->
- params.partenaireAPrevenir.id == partenaireAPrevenirIncident.partenaireAPrevenir.id
- }) {
- partenairesAPrevenirASupprimer.add(
- partenaireAPrevenirIncident.id
- )
- }
+ // Suppression du partenaire
+ if (!incidentParams.partenairesParams.find { PartenaireAPrevenirIncidentParams params ->
+ params.partenaireAPrevenir.id == partenaireAPrevenirIncident.partenaireAPrevenir.id
+ }) {
+ partenairesAPrevenirASupprimer.add(
+ partenaireAPrevenirIncident.id
+ )
+ }
}
partenaireAPrevenirIncidentService.supprimePartenaireAPrevenirIncidents(
incidentParams.partenairesParams.each {
PartenaireAPrevenirIncidentParams partenaireAPrevenirIncidentDto ->
- if (!incident.partenairesAPrevenir.find {
- PartenaireAPrevenirIncident partenaireAPrevenirIncident ->
- partenaireAPrevenirIncidentDto.partenaireAPrevenir.id == partenaireAPrevenirIncident.partenaireAPrevenir.id
- }) {
+ if (!incident.partenairesAPrevenir.find {
+ PartenaireAPrevenirIncident partenaireAPrevenirIncident ->
+ partenaireAPrevenirIncidentDto.partenaireAPrevenir.id == partenaireAPrevenirIncident.partenaireAPrevenir.id
+ }) {
- partenairesAPrevenirACreer << partenaireAPrevenirIncidentDto
- }
+ partenairesAPrevenirACreer << partenaireAPrevenirIncidentDto
+ }
}
partenaireAPrevenirIncidentService.creePartenairesAPrevenirIncident(
String champOrdre,
Boolean ascendant,
int start,
- int limit) {
+ int limit,
+ Map criteres = [:]) {
- List<Autorite> eleves = []
ListeIncidentsInfo result = new ListeIncidentsInfo(
nbIncidents: 0,
incidents: []
)
+
Map hqlParams = [etablissementId: etablissement.id]
String hql = FIND_INCIDENTS
)
if (estSeulementEnseig) {
- eleves = eleveAnnuaireService.findAllEleveByService(
+ List<Personne> elevesEnseignant = eleveAnnuaireService.findAllEleveByService(
securiteSession,
droitsService.getPerimetreServiceIds(securiteSession)
- )?.collect { it.autorite }
+ )
- if (eleves.size() == 0) {
+ if (elevesEnseignant.size() == 0) {
return result
}
- hql += ' and protagoniste_incident.autorite in (:eleves)'
- hqlParams.eleves = eleves
- result.nbIncidents =
- (Integer) ProtagonisteIncident.createCriteria().get {
- 'in'('autorite', eleves)
- incident {
- eq('etablissement', etablissement)
- }
- projections {
- 'countDistinct'('incident')
- }
+
+ hql += ' and protagoniste_incident.autorite in (:elevesEnseignant)'
+ hqlParams.elevesEnseignant = elevesEnseignant?.collect { it.autorite }
+ }
+
+
+ if (criteres.dateDebut != null) {
+ hql += ' and incident.date >= :dateDebut'
+ hqlParams['dateDebut'] = criteres.dateDebut
+ }
+
+ if (criteres.dateFin != null) {
+ Date dateFin = criteres.dateFin
+ use (TimeCategory) {
+ dateFin += 23.hours + 59.minutes
+ }
+
+ hql += ' and incident.date <= :dateFin'
+ hqlParams['dateFin'] = dateFin
+ }
+
+ if ((criteres.lieux != null) && (criteres.lieux.size() > 0)) {
+ hql += ' and incident.lieu in (:lieux)'
+ hqlParams['lieux'] = criteres.lieux
+ }
+
+ if ((criteres.typesIncident != null) && (criteres.typesIncident.size() > 0)) {
+ hql += ' and incident.type in (:typesIncident)'
+ hqlParams['typesIncident'] = criteres.typesIncident
+ }
+
+ List<Personne> personnes = []
+
+ if ((criteres.personnes != null) && (criteres.personnes.size() > 0)) {
+ personnes.addAll(criteres.personnes)
+ }
+
+ else if ((criteres.typesProtagoniste == null) ||
+ criteres.typesProtagoniste.contains(TypeProtagonisteIncident.CENSEUR)) {
+
+
+ if (((criteres.typesProtagoniste != null) && (criteres.typesProtagoniste.size() > 0)) ||
+ ((criteres.profils != null) && (criteres.profils.size() > 0))) {
+
+ Boolean direction = true
+ Boolean personnelsEducation = true
+ Boolean enseignants = true
+
+ if ((criteres.profils != null) && (criteres.profils.size() > 0)) {
+ direction = criteres.profils.contains(ProfilCenseur.DIRECTIONS)
+ personnelsEducation = criteres.profils.contains(ProfilCenseur.PERSONNELS_EDUCATION)
+ enseignants = criteres.profils.contains(ProfilCenseur.ENSEIGNANTS)
+ }
+ else if ((criteres.classes != null) && (criteres.classes.size() > 0)) {
+ direction = false
+ personnelsEducation = false
+ enseignants = false
+ }
+
+ if (direction == true) {
+ personnes.addAll(personneAnnuaireService.
+ findAllPersonnelDirectionByEtablissement(etablissement))
+ }
+
+ if (personnelsEducation == true) {
+ personnes.addAll(personneAnnuaireService.
+ findAllPersonnelEducationByEtablissement(etablissement))
+ }
+
+ if (enseignants == true) {
+ personnes.addAll(personneAnnuaireService.
+ findAllEnseignantByEtablissement(etablissement))
}
+ }
+ }
+
+ if ((criteres.classes != null) &&
+ ((criteres.classes.size() > 1) || (criteres.personnes == null))) {
+
+ Boolean eleves = true
+ Boolean parents = true
+
+ if ((criteres.typesProtagoniste != null) && (criteres.typesProtagoniste.size() > 0)) {
+ eleves = criteres.typesProtagoniste.contains(TypeProtagonisteIncident.ELEVE)
+ parents = criteres.typesProtagoniste.contains(TypeProtagonisteIncident.PARENT)
+ }
+
+ if (eleves == true) {
+ personnes.addAll(scolariteService.findAllPersonneEleveForStructure(
+ securiteSession,
+ criteres.classes.collect {it.id}
+ ))
+ }
+
+ if (parents == true) {
+ personnes.addAll(localStructureEnseignementService.findAllParentsForStructures(
+ securiteSession,
+ StructureEnseignement.getAll(criteres.classes)
+ ))
+ }
+
}
- else {
- result.nbIncidents = Incident.countByEtablissement(etablissement)
+
+ if (personnes.size() > 0) {
+ hql += ' and protagoniste_incident.autorite in (:personnes) '
+ hqlParams['personnes'] = personnes.collect { it.autorite }
}
switch (champOrdre) {
[max: limit, offset: start]
)
+ result.nbIncidents = Incident.executeQuery(hql, hqlParams).size()
+
return result
}
Boolean result = false
incident.partenairesAPrevenir.each {
PartenaireAPrevenirIncident part ->
- if (ids.contains(part.partenaireAPrevenir.id)) {
- result = true
- }
- ids.add(part.partenaireAPrevenir.id)
+ if (ids.contains(part.partenaireAPrevenir.id)) {
+ result = true
+ }
+ ids.add(part.partenaireAPrevenir.id)
}
return result
}