// les enseignants ne doivent pas pouvoir rattacher les absences créées par d'autres
// comptes à leur appel
if (isAssimileDirection){
- attacheAbsencesToAppelEtGereMultiPlages(appel, structureEnseignement)
+ attacheAbsencesToAppelEtGereMultiPlages(appel, structureEnseignement, operateurSaisie)
} else if (appel.plageHoraires.size() > 1){
// gère le cas des appels sur plusieurs plages pour les comptes enseignants
- gereMultiPlages(appel, structureEnseignement)
+ gereMultiPlages(appel, structureEnseignement, operateurSaisie)
}
return appel
}
- void attacheAbsencesToAppelEtGereMultiPlages(Appel appel, StructureEnseignement structure) {
+ void attacheAbsencesToAppelEtGereMultiPlages(Appel appel,
+ StructureEnseignement structure,
+ Autorite operateurSaisie) {
List<PlageHoraire> plagesOrdonneesAppel = getPlagesOrdonneesAppel(appel)
PlageHoraire premierePlageAppel = plagesOrdonneesAppel.first()
PlageHoraire dernierePlageAppel = plagesOrdonneesAppel.last()
Map absencesTriees = getAbsencesParEleve(appel, premierePlageAppel, dernierePlageAppel,structure)
- executeAttacheAbsencesToAppelEtGereMultiPlages(absencesTriees, appel, premierePlageAppel, dernierePlageAppel)
+ executeAttacheAbsencesToAppelEtGereMultiPlages(absencesTriees, appel, premierePlageAppel, dernierePlageAppel, operateurSaisie)
}
- void gereMultiPlages(Appel appel, StructureEnseignement structure) {
+ void gereMultiPlages(Appel appel, StructureEnseignement structure, Autorite operateurSaisie) {
List<PlageHoraire> plagesOrdonneesAppel = getPlagesOrdonneesAppel(appel)
PlageHoraire premierePlageAppel = plagesOrdonneesAppel.first()
PlageHoraire dernierePlageAppel = plagesOrdonneesAppel.last()
Map absencesJourneeTriees = getAbsencesJournesParEleve(appel, premierePlageAppel, dernierePlageAppel,structure)
- executeGereMultiPlages(absencesJourneeTriees, appel, premierePlageAppel, dernierePlageAppel)
+ executeGereMultiPlages(absencesJourneeTriees, appel, premierePlageAppel, dernierePlageAppel, operateurSaisie)
}
Map getAbsencesJournesParEleve(Appel appel,
void executeAttacheAbsencesToAppelEtGereMultiPlages(Map absencesTriees,
Appel appel,
PlageHoraire premierePlageAppel,
- PlageHoraire dernierePlageAppel) {
+ PlageHoraire dernierePlageAppel,
+ Autorite operateurSaisie) {
absencesTriees.each { Autorite eleve, List<AppelLigne> lignes ->
// Classe l'ensemble des appelLignes par heure de début
lignes.sort {
// On supprime les autres appelLigne sauf celles sur sanction
List idsAppelLignes = lignes.findAll{it.sanction == null}*.id
idsAppelLignes.remove(idsAppelLignes.size() - 1)
- appelLigneService.supprimeAppelLignes(idsAppelLignes)
+ appelLigneService.supprimeAppelLignes(idsAppelLignes, operateurSaisie)
}
}
void executeGereMultiPlages(Map absencesJourneeTriees,
Appel appel,
PlageHoraire premierePlageAppel,
- PlageHoraire dernierePlageAppel) {
+ PlageHoraire dernierePlageAppel,
+ Autorite operateurSaisie) {
absencesJourneeTriees.each { Autorite eleve, List<AppelLigne> lignes ->
// Classe l'ensemble des appelLignes par heure de début
lignes.sort {
List idsAppelLignes = lignes.findAll{it.sanction == null}*.id
idsAppelLignes.remove(idsAppelLignes.size() - 1)
- appelLigneService.supprimeAppelLignes(idsAppelLignes)
+ appelLigneService.supprimeAppelLignes(idsAppelLignes, operateurSaisie)
}
}
}
import org.lilie.services.eliot.absences.saisie.AbsenceService
import org.lilie.services.eliot.absences.saisie.absencejournee.AbsenceJourneeService
import org.lilie.services.eliot.absences.PlageHoraire
+import org.hibernate.Hibernate
/**
* @author jbui
appelLigneInfo.getaSupprimer()
}
- supprimeAppelLignes(allSupprimeLigneAppel*.id)
+ supprimeAppelLignes(allSupprimeLigneAppel*.id, (Autorite)securiteSession.getDefaultAutorite())
allModifieLigneAppel.each {
/**
* Supprime les appels lignes en paramètre
*/
- void supprimeAppelLignes(List<Long> idsAppelLignes) {
+ void supprimeAppelLignes(List<Long> idsAppelLignes,
+ Autorite utilisateurEnCours) {
if (idsAppelLignes.size() > 0) {
- AppelLigne.executeUpdate("delete AppelLigne al where al.id in (:idsAppelLignes)",
- [idsAppelLignes: idsAppelLignes]
- )
+ SQLQuery sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(SQL_SUPPRIME_APPELS_LIGNES)
+
+ sqlQuery.addScalar("operateurSaisieId", Hibernate.LONG)
+ sqlQuery.addScalar("eleveId", Hibernate.LONG)
+ sqlQuery.addScalar("absenceJourneeDate", Hibernate.DATE)
+ sqlQuery.addScalar("absenceJourneeHeureDebut", Hibernate.TIME)
+ sqlQuery.addScalar("absenceJourneeHeureFin", Hibernate.TIME)
+ sqlQuery.addScalar("apDateHeureDebut", Hibernate.TIMESTAMP)
+ sqlQuery.addScalar("apDateHeureFin", Hibernate.TIMESTAMP)
+
+ sqlQuery.setParameterList("idsAppelLignes", idsAppelLignes)
+
+ List appelLigneSupprimes = sqlQuery.list()
+
+ appelLigneSupprimes.each{
+ if (it[3] != null){
+ log.info("""L'utilisateur d'autoriteId ${utilisateurEnCours.id} a supprimé l'appelLigne du ${it[2]} de ${it[3]} à ${it[4]}
+ créé par l'utilisateur d'id ${it[0]} pour l'élève d'id ${it[1]} """)
+ } else {
+ log.info("""L'utilisateur d'autoriteId ${utilisateurEnCours.id} a supprimé l'appelLigne de ${it[5]} à ${it[6]}
+ créé par l'utilisateur d'id ${it[0]} pour l'élève d'id ${it[1]}""")
+ }
+ }
}
}
+ private static String SQL_SUPPRIME_APPELS_LIGNES = """
+WITH appelLignesSupprimes AS (
+ DELETE FROM enttemps.appel_ligne al
+ USING enttemps.absence_journee aj, enttemps.appel ap
+ WHERE (al.absence_journee_id = aj.id OR
+ al.appel_id = ap.id)
+ AND al.id IN (:idsAppelLignes)
+ RETURNING al.operateur_saisie_id AS operateur_saisie_id,
+ al.autorite_id AS eleve_id,
+ aj.date AS date,
+ al.heure_debut AS heure_debut,
+ al.heure_fin AS heure_fin,
+ ap.date_heure_debut AS date_heure_debut,
+ ap.date_heure_fin AS date_heure_fin)
+
+SELECT als.operateur_saisie_id AS operateurSaisieId,
+als.eleve_id AS eleveId,
+als.date AS absenceJourneeDate,
+als.heure_debut AS absenceJourneeHeureDebut,
+als.heure_fin AS absenceJourneeHeureFin,
+als.date_heure_debut AS apDateHeureDebut,
+als.date_heure_fin AS apDateHeureFin
+FROM appelLignesSupprimes als
+"""
+
/**
* Récupère l'AppelLigne et vérifie que la ligne appartient bien à l'appel
* en cours de modification ou qu'il s'agit d'une absence hors appel ou d'une
if (appelLigne.appelId != appel.id &&
appelLigne.absenceJourneeId != absenceJournee.id &&
!appelLigne.absencePrevisionnelle
- ) {
+ ) {
throw new IllegalArgumentException(
"La ligne d'appel (${appelLigneInfo.id}) " +
"n'est associée ni à l'appel ${appel.id} ni à l'absence journée ${absenceJournee?.id}."
params,
listeAbsenceJourneeParamsASupprimer,
true
- )
+ ),
+ securiteSession
)
resultat = []
}
getRechercheAbsenceExistanteParams(
params,
listeAbsenceJourneeParamsACreer
- )
+ ),
+ securiteSession
)
} else {
listeAbsenceJourneeParamsACreer =
* Supprime les absences existantes
*/
private supprimeAbsencesExistantes(
- RechercheAbsenceExistanteParams rechercheAbsenceExistanteParams
+ RechercheAbsenceExistanteParams rechercheAbsenceExistanteParams,
+ SecuriteSession securiteSession
) {
List<AppelLigne> listeAppelLigneASupprimer =
rechercheAbsenceExistanteService.findAppelLigneExistantes(
rechercheAbsenceExistanteParams
)
- appelLigneService.supprimeAppelLignes(listeAppelLigneASupprimer*.id)
+ appelLigneService.supprimeAppelLignes(listeAppelLigneASupprimer*.id, securiteSession.getDefaultSession())
AppelLigne.withSession {
Session session ->
listeAppelLigneASupprimer.each {