--- /dev/null
+package org.lilie.services.eliot.absences.saisie.absencejournee
+
+import org.lilie.services.eliot.securite.impl.Autorite
+import org.lilie.services.eliot.absences.Sanction
+import org.lilie.services.eliot.absences.saisie.absencejournee.exceptions.AbsenceJourneeException
+import org.lilie.services.eliot.absences.saisie.absencejournee.exceptions.AbsenceJourneeDatesObligatoiresException
+import org.lilie.services.eliot.absences.saisie.absencejournee.exceptions.AbsenceJourneeMotifObligatoireException
+import org.lilie.services.eliot.absences.AbsencesDateUtil
+import org.lilie.services.eliot.temps.DateUtil
+import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
+import org.lilie.services.eliot.absences.AbsenceJournee
+import org.lilie.services.eliot.scolarite.etablissement.PreferencesEtablissementAbsencesService
+
+/**
+ * gestion des absences journée pour les sanctions
+ */
+class AbsenceJourneeSanctionService {
+
+ AbsenceJourneeService absenceJourneeService
+ PreferencesEtablissementAbsencesService preferencesEtablissementAbsencesService
+
+ /**
+ * Crée la ou les absences associées à une sanction
+ * @return une liste d'appelLigne
+ */
+ public void creeAbsencesForSanction(Autorite operateurSaisie,
+ Sanction sanction
+ ) throws AbsenceJourneeException {
+
+ if (sanction.absenceLiee) {
+ if (!(sanction.debutAbsence && sanction.finAbsence)) {
+ throw new AbsenceJourneeDatesObligatoiresException()
+ }
+ if (!sanction.motif) {
+ throw new AbsenceJourneeMotifObligatoireException()
+ }
+ Date jourDebut = AbsencesDateUtil.getDay(sanction.debutAbsence)
+ Date jourFin = AbsencesDateUtil.getDay(sanction.finAbsence)
+
+ Calendar cal = Calendar.getInstance()
+ for (Date jour = jourDebut; (jour <= jourFin); jour++) {
+ cal.clear()
+ cal.setTime(jour)
+ DateUtil.setDebutJour(cal)
+ Date debutJournee = cal.getTime()
+ DateUtil.setFinJour(cal)
+ Date finJournee = cal.getTime()
+
+ PreferencesEtablissementAbsences preferences =
+ preferencesEtablissementAbsencesService.getPreferencesEtablissementForEtablissement(sanction.etablissement)
+
+ AbsenceJournee absenceJournee = absenceJourneeService.findOrCreateAbsenceJournee(
+ sanction.etablissement,
+ jour,
+ preferences
+ )
+ absenceJourneeService.internalCreeLignesAbsenceJournee(
+ absenceJournee,
+ [new AbsenceJourneeLigneParams(
+ personne: sanction.eleve,
+ motif: sanction.motif,
+ debut: (sanction.debutAbsence > debutJournee) ?
+ sanction.debutAbsence : debutJournee,
+ fin: (sanction.finAbsence < finJournee) ?
+ sanction.finAbsence : finJournee,
+ sanction: sanction,
+ operateurSaisie: operateurSaisie,
+ dateSaisie: new Date(),
+ absenceJustifiee: true,
+ absencePrevisionnelle: true,
+ presence: false
+ )],
+ null
+ )
+ }
+ } else {
+ absenceJourneeService.internalSupprimeAbsencesForSanction(sanction)
+ }
+ }
+
+}