package org.lilie.services.eliot.absences.saisie.discipline.sanction
+import org.hibernate.Hibernate
+import org.hibernate.SQLQuery
+import org.hibernate.Session
+import org.hibernate.SessionFactory
import org.lilie.services.eliot.absences.Sanction
import org.lilie.services.eliot.absences.ScolariteService
import org.lilie.services.eliot.absences.saisie.discipline.sanction.exceptions.SanctionException
import org.lilie.services.eliot.absences.securite.DroitsService
import org.lilie.services.eliot.absences.saisie.discipline.sanction.exceptions.SanctionDescriptionLongueException
+
+import org.lilie.services.eliot.annuaire.Fonction
+import org.lilie.services.eliot.annuaire.FonctionEnum
import org.springframework.dao.DataIntegrityViolationException
import org.lilie.services.eliot.absences.saisie.discipline.sanction.exceptions.SuppressionSanctionContrainteException
import org.lilie.services.eliot.scolarite.Etablissement
EleveRecupService eleveRecupService
EleveAnnuaireService eleveAnnuaireService
ScolariteService scolariteService
-
-
- private static final String HQL_SANCTION = """
- select sanction, pps.proprietesScolarite.structureEnseignement
- from Sanction as sanction, PersonneProprietesScolarite as pps
- inner join fetch sanction.eleve as eleve
- inner join fetch sanction.censeur as censeur
- inner join fetch sanction.typeSanction as typeSanction
- where sanction.etablissement.id = :etablissementId and
- eleve=pps.personne and
- pps.estActive=true and
- pps.proprietesScolarite.structureEnseignement.actif=true
- and pps.proprietesScolarite.structureEnseignement.type = :typeClasse
- """
-
- // idem HQL_SANCTION avec le type d'incident en plus (pour les archives)
- // et des fetch en moins sinon Hibernate mélange élève et censeur
- private static final String HQL_SANCTION_AVEC_TYPE_INCIDENT = """
- select sanction, pps.proprietesScolarite.structureEnseignement, eleve.nom||' '||eleve.prenom, censeur.nom||' '||censeur.prenom, typeIncident.libelle
- from Sanction as sanction, PersonneProprietesScolarite as pps
- inner join sanction.eleve as eleve
- inner join sanction.censeur as censeur
- inner join fetch sanction.typeSanction as typeSanction
- left join sanction.incident.type as typeIncident
- where sanction.etablissement.id = :etablissementId and
- eleve=pps.personne and
- pps.estActive=true and
- pps.proprietesScolarite.structureEnseignement.actif=true
- and pps.proprietesScolarite.structureEnseignement.type = :typeClasse
+ SessionFactory sessionFactory
+
+ private static final String SQL_SANCTION_TOUS = """
+ with pps_dernier_debut as (
+ select
+ pps.personne_id as persEleveId,
+ max(pps.date_debut) as dernier_debut
+ from
+ ent.personne_propriete_scolarite pps
+ join ent.propriete_scolarite ps on pps.propriete_scolarite_id = ps.id and ps.fonction_id = :fonctionEleveId
+ join ent.structure_enseignement se on ps.structure_enseignement_id = se.id and se.type = :typeClasse and se.etablissement_id = :etablissementId
+ group by pps.personne_id
+ ),
+
+ derniere_classe as (
+ select
+ pps.personne_id as eleve_id,
+ se.code as classe_code,
+ count(*) over() as nbrEleves
+ from
+ ent.personne_propriete_scolarite pps
+ join ent.propriete_scolarite ps on pps.propriete_scolarite_id = ps.id and ps.fonction_id = :fonctionEleveId
+ join ent.structure_enseignement se on ps.structure_enseignement_id = se.id and se.type = :typeClasse and se.etablissement_id = :etablissementId
+ join pps_dernier_debut der on der.persEleveId = pps.personne_id and der.dernier_debut = pps.date_debut
+ )
+
+ select {sanction.*},
+ derniere_classe.classe_code as codeClasse,
+ eleve.nom||' '||eleve.prenom as nomPrenomEleve,
+ censeur.nom||' '||censeur.prenom as nomPrenomCenseur,
+ type_sanction.libelle as typeSanction,
+ type_incident.libelle as typeIncident,
+ count(*) OVER() as nbrSanctions
+ from
+ enttemps.sanction
+ join ent.personne eleve on sanction.eleve_id = eleve.id
+ join ent.personne censeur on sanction.censeur_id = censeur.id
+ join enttemps.type_sanction on sanction.type_sanction_id = type_sanction.id
+ join derniere_classe on derniere_classe.eleve_id = eleve.id
+ left join enttemps.incident on sanction.incident_id = incident.id
+ left join enttemps.type_incident on incident.type_id = type_incident.id
+ where
+ sanction.etablissement_id = :etablissementId
"""
+ /**
+ * Pareil que SQL_SANCTION_TOUS avec en plus une restriction sur les élèves dans les with
+ */
+ private static final String SQL_SANCTION = """
+
+ with pps_dernier_debut as (
+ select
+ pps.personne_id as persEleveId,
+ max(pps.date_debut) as dernier_debut
+ from
+ ent.personne_propriete_scolarite pps
+ join ent.propriete_scolarite ps on pps.propriete_scolarite_id = ps.id and ps.fonction_id = :fonctionEleveId
+ join ent.structure_enseignement se on ps.structure_enseignement_id = se.id and se.type = :typeClasse and se.etablissement_id = :etablissementId
+ where
+ pps.personne_id in (:eleveIds)
+ group by pps.personne_id
+ ),
+
+ derniere_classe as (
+ select
+ pps.personne_id as eleve_id,
+ se.code as classe_code,
+ count(*) over() as nbrEleves
+ from
+ ent.personne_propriete_scolarite pps
+ join ent.propriete_scolarite ps on pps.propriete_scolarite_id = ps.id and ps.fonction_id = :fonctionEleveId
+ join ent.structure_enseignement se on ps.structure_enseignement_id = se.id and se.type = :typeClasse and se.etablissement_id = :etablissementId
+ join pps_dernier_debut der on der.persEleveId = pps.personne_id and der.dernier_debut = pps.date_debut
+ where
+ pps.personne_id in (:eleveIds)
+ )
+
+ select {sanction.*},
+ derniere_classe.classe_code as codeClasse,
+ eleve.nom||' '||eleve.prenom as nomPrenomEleve,
+ censeur.nom||' '||censeur.prenom as nomPrenomCenseur,
+ type_sanction.libelle as typeSanction,
+ type_incident.libelle as typeIncident,
+ count(*) OVER() as nbrSanctions
+ from
+ enttemps.sanction
+ join ent.personne eleve on sanction.eleve_id = eleve.id
+ join ent.personne censeur on sanction.censeur_id = censeur.id
+ join enttemps.type_sanction on sanction.type_sanction_id = type_sanction.id
+ join derniere_classe on derniere_classe.eleve_id = eleve.id
+ left join enttemps.incident on sanction.incident_id = incident.id
+ left join enttemps.type_incident on incident.type_id = type_incident.id
+ where
+ sanction.etablissement_id = :etablissementId
+ """
/**
* Crée une nouvelle sanction
}
/**
- * Récupère la liste des sanctions correspandant aux critères
- * @param etablissement : l'établissement dont on veut les sanctions
- * @param champOrdre : l'ordre de classement des sanctions
- * @param ascendant : indique si le classement est croissant
- * @param start : l'indice du premier enregistrement à retourner
- * @param limit : le nombre d'enregistrement à retourner
- * @return une map sous la forme :
- * [
- * nbSanction : le nombre de sanction total,
- * sanctions : liste des sanctions
- * ]
- *
+ * Retourne une liste de sanctions selon les critères
*/
Map findAllSanctionParPersonne(SecuriteSession securiteSession,
- Etablissement etablissement,
- Personne personne,
- String champOrdre,
- Boolean ascendant,
- Integer start,
- Integer limit,
- Map criteres = [:],
- Boolean specialArchive = false) {
-
- List sanctionsInfo = []
- Map resultats = [
- nbsanctionsInfo: 0,
- sanctionsInfo: sanctionsInfo
+ Etablissement etablissement,
+ Personne personne,
+ String champOrdre,
+ Boolean ascendant,
+ Integer start,
+ Integer limit,
+ Map criteres = [:]) {
+
+ Map result = [
+ 'nbSanctionsInfo': 0,
+ 'sanctionsInfo': []
]
- Map hqlParams = [
- etablissementId: etablissement.id,
- typeClasse: StructureEnseignement.TYPE_CLASSE
- ]
+ if(!criteres.eleves) {
+ if (criteres.classes) {
+ List<Personne> elevesClasse =
+ scolariteService.findAllPersonneEleveForStructure(
+ securiteSession,
+ criteres.classes.collect { it.id }
+ )
- String hqlFromSanction = findAllSanctionsHqlFromSanctions(specialArchive)
+ if (elevesClasse.size() > 0) {
+ criteres.eleves = elevesClasse
+ }
+ } else if (droitsService.hasOnlyPerimetreEnseignement(securiteSession)) {
+ // spécial prof
+ List<Personne> elevesEnseignant =
+ eleveRecupService.findAllEleveByEnseignantAndEtablissement(
+ securiteSession,
+ personne,
+ etablissement
+ )
+
+ if (elevesEnseignant.size() > 0) {
+ criteres.eleves = elevesEnseignant
+ }
+ }
+ }
- hqlFromSanction = ajouteFiltresParCriteresSimples(hqlFromSanction, hqlParams, criteres)
+ Session session = sessionFactory.getCurrentSession()
- Boolean personneIsEnseignant = droitsService.hasOnlyPerimetreEnseignement(securiteSession)
+ SQLQuery sqlQuery = session.createSQLQuery(getSqlSanction(
+ champOrdre,
+ ascendant,
+ start,
+ limit,
+ criteres))
+ sqlQuery.addEntity("sanction", Sanction)
+ sqlQuery.addScalar('codeClasse', Hibernate.STRING)
+ sqlQuery.addScalar('nomPrenomEleve', Hibernate.STRING)
+ sqlQuery.addScalar('nomPrenomCenseur', Hibernate.STRING)
+ sqlQuery.addScalar('typeSanction', Hibernate.STRING)
+ sqlQuery.addScalar('typeIncident', Hibernate.STRING)
+ sqlQuery.addScalar('nbrSanctions', Hibernate.LONG)
- if (personneIsEnseignant) {
- List<Personne> elevesEnseignant = eleveRecupService.findAllEleveByEnseignantAndEtablissement(
- securiteSession,
- personne,
- etablissement
- )
+ sqlQuery.setLong("fonctionEleveId",
+ Fonction.findByCode(FonctionEnum.ELEVE.getCode(), [cache: true]).id)
+ sqlQuery.setLong('etablissementId',etablissement.id)
+ sqlQuery.setString('typeClasse','CLASSE')
- if (elevesEnseignant.size() == 0) {
- return resultats
- }
+ completeSqlQuery(sqlQuery, criteres, start, limit)
- hqlFromSanction += ' and eleve in (:elevesEnseignant)'
- hqlParams['elevesEnseignant'] = elevesEnseignant
+ List resultats = sqlQuery.list()
+
+ result['sanctionsInfo'] = resultats
+ result['nbSanctionsInfo'] = resultats ? resultats[0][6] : 0
+
+ return result
+ }
+
+ private SQLQuery completeSqlQuery(SQLQuery sqlQuery,
+ Map criteres,
+ Integer offset,
+ Integer limit) {
+
+ if (criteres.dateDebut != null) {
+ sqlQuery.setDate('dateDebut', criteres.dateDebut)
}
- if ((criteres.classes != null) && (criteres.classes.size() > 0)) {
- List<Personne> elevesClasse = scolariteService.findAllPersonneEleveForStructure(
- securiteSession,
- criteres.classes.collect {it.id}
- )
+ if (criteres.dateFin != null) {
+ sqlQuery.setDate('dateFin', criteres.dateFin)
+ }
- if (elevesClasse.size() > 0) {
- hqlFromSanction += ' and eleve in (:elevesClasse)'
- hqlParams['elevesClasse'] = elevesClasse
- }
+ if ((criteres.eleves != null) && (criteres.eleves.size() > 0)) {
+ sqlQuery.setParameterList("eleveIds", criteres.eleves*.id)
}
- resultats['nbsanctionsInfo'] = compteSanctions(hqlFromSanction,
- hqlParams,
- !specialArchive)
+ if ((criteres.responsables != null) && (criteres.responsables.size() > 0)) {
+ sqlQuery.setParameterList("responsableIds", criteres.responsables*.id)
+ }
- String ordre = ascendant ? ' asc' : ' desc'
- String champ = getNomCompletChampOrdre(champOrdre)
- hqlFromSanction += ' order by ' + champ + ordre
+ if ((criteres.typesSanction != null) && (criteres.typesSanction.size() > 0)) {
+ sqlQuery.setParameterList("typeSanctionIds", criteres.typesSanction*.id)
+ }
- Map paginationMap = limit ? [max: limit, offset: start] : [:]
+ if (criteres.effectue != null) {
+ sqlQuery.setBoolean('effectue', criteres.effectue)
+ }
- resultats['sanctionsInfo'] = Sanction.executeQuery(
- hqlFromSanction,
- hqlParams,
- paginationMap
- )
+ if (offset != null) {
+ sqlQuery.setInteger('offset',offset)
+ }
+ if (limit != null) {
+ sqlQuery.setInteger('limit',limit)
+ }
- return resultats
+ sqlQuery
}
- private Integer compteSanctions(String hqlSanction, Map hqlParams, Boolean compter) {
- if(compter) {
- String hqlCount = hqlSanction
- .replace(
- 'select sanction, pps.proprietesScolarite.structureEnseignement',
- 'select count (distinct sanction.id)'
- )
- .replaceAll(' join fetch ', ' join ')
+ private String getSqlSanction(String champOrdre,
+ Boolean ascendant,
+ Integer start,
+ Integer limit,
+ Map criteres) {
+
+ def sql
- Sanction.executeQuery(hqlCount, hqlParams).first()
+
+ if ((criteres.eleves != null) && (criteres.eleves.size() > 0)) {
+ sql = SQL_SANCTION
+ sql <<= ' and sanction.eleve_id in (:eleveIds)'
} else {
- 0
+ sql = SQL_SANCTION_TOUS
}
- }
-
- private String ajouteFiltresParCriteresSimples(String hqlFromSanction,
- LinkedHashMap<String, Serializable> hqlParams,
- Map criteres) {
if (criteres.dateDebut != null) {
- hqlFromSanction += ' and sanction.date >= :dateDebut'
- hqlParams['dateDebut'] = criteres.dateDebut
+ sql <<= ' and sanction.date >= :dateDebut'
}
if (criteres.dateFin != null) {
- hqlFromSanction += ' and sanction.date <= :dateFin'
- hqlParams['dateFin'] = criteres.dateFin
- }
-
- if ((criteres.eleves != null) && (criteres.eleves.size() > 0)) {
- hqlFromSanction += ' and eleve in (:eleves)'
- hqlParams['eleves'] = criteres.eleves
+ sql <<= ' and sanction.date <= :dateFin'
}
if ((criteres.responsables != null) && (criteres.responsables.size() > 0)) {
- hqlFromSanction += ' and sanction.censeur in (:responsables)'
- hqlParams['responsables'] = criteres.responsables
+ sql <<= ' and sanction.censeur_id in (:responsableIds)'
}
if ((criteres.typesSanction != null) && (criteres.typesSanction.size() > 0)) {
- hqlFromSanction += ' and sanction.typeSanction in (:typesSanction)'
- hqlParams['typesSanction'] = criteres.typesSanction
+ sql <<= ' and sanction.typeSanction_id in (:typeSanctionIds)'
}
if (criteres.effectue != null) {
- hqlFromSanction += ' and sanction.effectue = :effectue'
- hqlParams['effectue'] = criteres.effectue
+ sql <<= ' and sanction.effectue = :effectue'
}
- hqlFromSanction
- }
+ // tri et pagination
+ String ordre = ascendant ? ' asc' : ' desc'
+ String champ = getNomCompletChampOrdre(champOrdre)
+ sql <<= ' order by ' + champ + ordre
+ if(start != null) {
+ sql <<= " offset :offset"
+ }
+ if (limit != null) {
+ sql <<= " limit :limit"
+ }
+
+ sql
+ }
private String getNomCompletChampOrdre(String champOrdre) {
String champ
case ConsultationPunitionSanctionNomColonnes.DATE:
champ = 'sanction.date'
break
- case ConsultationPunitionSanctionNomColonnes.NOM_AFFICHAGE:
- champ = 'sanction.eleve.nom, sanction.eleve.prenom'
+ case ConsultationPunitionSanctionNomColonnes.ELEVE_ID:
+ champ = 'sanction.eleve_id'
break
- case ConsultationPunitionSanctionNomColonnes.CENSEUR:
- champ = 'sanction.censeur.nom, sanction.censeur.prenom'
+ case ConsultationPunitionSanctionNomColonnes.NOM_AFFICHAGE:
+ champ = 'eleve.nom, eleve.prenom'
break
case ConsultationPunitionSanctionNomColonnes.TYPE:
- champ = 'sanction.typeSanction.libelle'
+ champ = 'type_sanction.libelle'
+ break
+ case ConsultationPunitionSanctionNomColonnes.CENSEUR:
+ champ = 'censeur.nom, censeur.prenom'
break
case ConsultationPunitionSanctionNomColonnes.STATUT:
champ = 'sanction.effectue'
break
case ConsultationPunitionSanctionNomColonnes.CLASSE:
- champ = 'pps.proprietesScolarite.structureEnseignement.code'
+ champ = 'derniere_classe.classe_code'
break
}
return champ
}
- private String findAllSanctionsHqlFromSanctions(Boolean avecTypeIncident) {
- return avecTypeIncident ? HQL_SANCTION_AVEC_TYPE_INCIDENT : HQL_SANCTION
- }
-
/**
* Permet d'initialiser la sanction par les paramètres de la sanctionParams
* @param sanction : la sanction à initiliser
<text><![CDATA[Type]]></text>
</staticText>
<staticText>
- <reportElement uuid="96ce8af5-62d7-4122-8e0e-c798d202b8a2" style="cellule" x="138" y="0" width="144" height="12"/>
+ <reportElement uuid="96ce8af5-62d7-4122-8e0e-c798d202b8a2" style="cellule" x="138" y="0" width="106" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Nom prénom]]></text>
</staticText>
<staticText>
- <reportElement uuid="fb84fda3-9ea9-422e-b3af-896a528c038f" style="cellule" x="282" y="0" width="43" height="12"/>
+ <reportElement uuid="fb84fda3-9ea9-422e-b3af-896a528c038f" style="cellule" x="244" y="0" width="43" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Classe]]></text>
</staticText>
<staticText>
- <reportElement uuid="cb041e2f-407d-4720-9b0c-8cbfe3e9b053" style="cellule" x="325" y="0" width="92" height="12"/>
+ <reportElement uuid="cb041e2f-407d-4720-9b0c-8cbfe3e9b053" style="cellule" x="287" y="0" width="92" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Responsable]]></text>
</staticText>
<staticText>
- <reportElement uuid="2a837673-3e28-4d86-bbb4-63097a01aa92" style="cellule" x="417" y="0" width="80" height="12"/>
+ <reportElement uuid="2a837673-3e28-4d86-bbb4-63097a01aa92" style="cellule" x="379" y="0" width="80" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Statut]]></text>
</staticText>
<staticText>
- <reportElement uuid="31f92d62-d318-4b6e-8d82-dd7355c87bb6" style="cellule" x="497" y="0" width="106" height="12"/>
+ <reportElement uuid="31f92d62-d318-4b6e-8d82-dd7355c87bb6" style="cellule" x="459" y="0" width="106" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Description]]></text>
</staticText>
<staticText>
- <reportElement uuid="a5a17361-05bb-4994-84d8-6861c33b4290" style="cellule" x="603" y="0" width="60" height="12"/>
+ <reportElement uuid="a5a17361-05bb-4994-84d8-6861c33b4290" style="cellule" x="565" y="0" width="83" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
<text><![CDATA[Début Absence]]></text>
</staticText>
<staticText>
- <reportElement uuid="7926a339-c114-4bda-a61e-0cc2ffeefe8e" style="cellule" x="663" y="0" width="54" height="12"/>
+ <reportElement uuid="fb9ecd42-8509-427b-809b-ca2951c651e4" style="cellule" x="731" y="0" width="67" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
- <text><![CDATA[Fin Absence]]></text>
+ <text><![CDATA[Type Incident]]></text>
</staticText>
<staticText>
- <reportElement uuid="fb9ecd42-8509-427b-809b-ca2951c651e4" style="cellule" x="717" y="0" width="81" height="12"/>
+ <reportElement uuid="210c3eec-816b-4b28-9b24-ec9807d5baf2" style="cellule" x="648" y="0" width="83" height="12"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="8"/>
</textElement>
- <text><![CDATA[Type Incident]]></text>
+ <text><![CDATA[Fin Absence]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="12">
<textField>
- <reportElement uuid="076faf05-2c8e-4f33-be6b-2f3c57fffdd5" style="cellule" mode="Opaque" x="138" y="0" width="144" height="12"/>
+ <reportElement uuid="076faf05-2c8e-4f33-be6b-2f3c57fffdd5" style="cellule" mode="Opaque" x="138" y="0" width="106" height="12"/>
<textElement textAlignment="Left">
<font fontName="Arial" size="8" isBold="false" pdfEncoding="Cp1251" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{type}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="947b44a6-178a-4bd9-8d86-eff2975f868d" style="cellule" mode="Opaque" x="282" y="0" width="43" height="12"/>
+ <reportElement uuid="947b44a6-178a-4bd9-8d86-eff2975f868d" style="cellule" mode="Opaque" x="244" y="0" width="43" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{classe}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="25db4d8e-89e4-428d-b8b8-aef799a0f8f0" style="cellule" x="325" y="0" width="92" height="12"/>
+ <reportElement uuid="25db4d8e-89e4-428d-b8b8-aef799a0f8f0" style="cellule" x="287" y="0" width="92" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{censeur}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="f54f73d7-3642-4e74-9f4c-070219415270" style="cellule" x="417" y="0" width="80" height="12"/>
+ <reportElement uuid="f54f73d7-3642-4e74-9f4c-070219415270" style="cellule" x="379" y="0" width="80" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{statut}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="7605ee1e-bfb6-464c-87f3-e8a798b087bb" style="cellule" x="497" y="0" width="106" height="12"/>
+ <reportElement uuid="7605ee1e-bfb6-464c-87f3-e8a798b087bb" style="cellule" x="459" y="0" width="106" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="e5fe0b73-86a7-43f8-96de-a75f77d25bf9" style="cellule" x="603" y="0" width="60" height="12"/>
+ <reportElement uuid="e5fe0b73-86a7-43f8-96de-a75f77d25bf9" style="cellule" x="565" y="0" width="83" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{debutAbsence}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="ddd873ae-ae05-48ed-a2c0-520739726f44" style="cellule" x="663" y="0" width="54" height="12"/>
+ <reportElement uuid="b8e7ab2d-0c19-41e5-a7da-c1e74ab2f503" style="cellule" x="731" y="0" width="67" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression><![CDATA[$F{finAbsence}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{typeIncident}]]></textFieldExpression>
</textField>
<textField>
- <reportElement uuid="b8e7ab2d-0c19-41e5-a7da-c1e74ab2f503" style="cellule" x="717" y="0" width="81" height="12"/>
+ <reportElement uuid="765395a6-8041-4be9-8804-983c194db956" style="cellule" x="648" y="0" width="83" height="12"/>
<textElement>
<font fontName="Arial" size="8" isBold="false" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression><![CDATA[$F{typeIncident}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{finAbsence}]]></textFieldExpression>
</textField>
</band>
</detail>