--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression
+
+/**
+ * Permet d'enregistrer les paramètres des modèles d'absences
+ */
+class AbsenceOptions {
+
+ TemplateDocument templateDocument
+
+ Boolean tableauAbsences = false
+ Boolean tableauRetards = false
+ Boolean tableauDeparts = false
+
+ String typeTableau = ""
+
+ static constraints = {
+ templateDocument(nullable: false)
+ }
+
+ static mapping = {
+ table('impression.absence_options')
+ id column: 'id', generator: 'identity'
+ version false
+ }
+
+ def toMap() {
+ [
+ 'absences': tableauAbsences,
+ 'retards': tableauRetards,
+ 'departs': tableauDeparts,
+ 'typeTableau': typeTableau
+ ]
+ }
+
+}
String code
String nom
- String descriptif
Boolean systeme
String police
Etablissement etablissement
static constraints = {
code nullable: true
nom(nullable: false, unique: 'etablissement')
- descriptif nullable: true
templateEliot nullable: true
etablissement nullable: true
police nullable: true
class TemplateEliot {
String nom
- String descriptif
String code
TemplateTypeFonctionnalite typeFonctionnalite
TemplateJasper templateJasper
static constraints = {
nom(nullable: false)
- descriptif(nullable: true)
typeFonctionnalite(nullable: true)
typeDonnees(nullable: true)
templateJasper(nullable: true)
priseEnCompteMotif
)
Float absencesNonExcuseesForEleveAndPeriode = calculeAbsencesNonExcuseesForEleveAndPeriode(
- pref,
- personneEleve,
- dateDebut,
- dateFin,
- priseEnCompteMotif
- )
+ pref,
+ personneEleve,
+ dateDebut,
+ dateFin,
+ priseEnCompteMotif
+ )
Float retardsForEleveAndPeriode = calculeRetardsForEleveAndPeriode(
- pref.etablissementId,
- personneEleve,
- dateDebut,
- dateFin,
- priseEnCompteMotif
- )
+ pref.etablissementId,
+ personneEleve,
+ dateDebut,
+ dateFin,
+ priseEnCompteMotif
+ )
result.put(
ABSENCES_EXCUSEES_NB,
pref.pasDecompte == "heure" && pref.longueurPlage == 0.5 ?
* @return une map associant à chaque id d'appel, un flag indiquant si l'appel
* porte sur le matin, l'après-midi ou les deux
*/
- Map findAllDemiJoursForAllAppels(List<Long> appelIds) {
+ public Map findAllDemiJoursForAllAppels(List<Long> appelIds) {
Map result = [:]
if (appelIds.size() > 0) {
List liste = findAllAppelsWithPlages(appelIds)
*/
private List findAllAppelsWithPlages(List<Long> appelIds) {
def result = []
- if (appelIds && appelIds[0]){
+ if (appelIds && appelIds[0]) {
Session session = sessionFactory.getCurrentSession()
SQLQuery sqlQuery = session.createSQLQuery(SQL_GET_APPELS)
* @return la restriction HQL pour tenir compte de la prise en compte des
* motifs dans les bulletins ou les stats
*/
- String getRestrictionForPriseEnCompteMotifs(
+ private String getRestrictionForPriseEnCompteMotifs(
PriseEnCompteMotif priseEnCompteMotif
) {
switch (priseEnCompteMotif) {
* @param criteres : les critères de sélection
* @return un BilanAbsencesParPersonneInfo
*/
- BilanAbsencesParPersonneInfo getAbsencesOrRetards(BasicCriteresRecherche criteres) {
+ public BilanAbsencesParPersonneInfo getAbsencesOrRetards(BasicCriteresRecherche criteres) {
+
Map params = [
elevesIds: criteres.eleveIds,
dateDebut: criteres.dateDebut.getTime(),
if (criteres.motifIds) {
List result = PersonneProprietesScolarite.executeQuery(hql, params)
- Map mapEleveStructure = construitMapEleveStructure(criteres.eleveIds,
+ Map mapEleveStructure = construitMapEleveStructure(criteres.eleveIds,
criteres.structIds,
criteres.etablissementId)
List<Long> structIds,
Long etablissementId) {
Map mapARetourner = [:]
- if(structIds?.size() == 1) {
+ if (structIds?.size() == 1) {
StructureEnseignement structureEnseignement = StructureEnseignement.get(structIds.first())
eleveAutoriteIds.each {
mapARetourner[it] = structureEnseignement
* - l'absenceJournee
* @param preferences les préférences de l'établissement courant
*/
- List<StatAbsences> getStatsAbsencesByEleveFromData(
- BilanAbsencesParPersonneInfo datas,
- Etablissement etablissement
+ public List<StatAbsences> getStatsAbsencesByEleveFromData(BilanAbsencesParPersonneInfo datas,
+ Etablissement etablissement
) {
List<StatAbsences> listEleveStats = []
* - la Personne élève
* - l'absenceJournee
*/
- Map<String, BilanAbsencesParPersonneInfo> separeAbsencesParType(
- BilanAbsencesParPersonneInfo datas,
- Motif motifSansMotif
+ private Map<String, BilanAbsencesParPersonneInfo> separeAbsencesParType(BilanAbsencesParPersonneInfo datas,
+ Motif motifSansMotif
) {
Map<String, BilanAbsencesParPersonneInfo> resultats = (Map<String, BilanAbsencesParPersonneInfo>) [:]
/**
* Retourne une map associant à chaque élève le nombre
*/
- Map calculeNbAbsencesParEleve(BilanAbsencesParPersonneInfo datas,
- PreferencesEtablissementAbsences pref
+ public Map calculeNbAbsencesParEleve(BilanAbsencesParPersonneInfo datas,
+ PreferencesEtablissementAbsences pref
) {
List<PlageHoraire> plages = plageHoraireService.getPlageHoraires(pref)
switch (pref.pasDecompte) {
* @param pref : les PreferencesEtablissementAbsences
* @return une Map associant une personne (élève) au nombre de ces absences
*/
- Map calculeNbAbsencesParEleveEnHeures(BilanAbsencesParPersonneInfo datas,
- PreferencesEtablissementAbsences pref,
- List<PlageHoraire> plages) {
+ private Map calculeNbAbsencesParEleveEnHeures(BilanAbsencesParPersonneInfo datas,
+ PreferencesEtablissementAbsences pref,
+ List<PlageHoraire> plages) {
Float count = 0.0
Set<Appel> appels = datas.appels
Map nbPlagesParAppel = findPlagesCountForAllAppels(appels*.id)
* @return une map associant à chaque Personne élève le nombre de ses
* demi-journées d'absence
*/
- Map calculeNbAbsencesParEleveEnDemiJours(BilanAbsencesParPersonneInfo datas,
- List<PlageHoraire> plages) {
+ private Map calculeNbAbsencesParEleveEnDemiJours(BilanAbsencesParPersonneInfo datas,
+ List<PlageHoraire> plages) {
Set<Appel> appels = datas.appels
Map demiJoursParAppel = findAllDemiJoursForAllAppels(appels*.id)
* @return une map associant à chaque Personne élève le nombre de ses
* journées d'absence
*/
- Map calculeNbAbsencesParEleveEnJours(BilanAbsencesParPersonneInfo datas) {
+ private Map calculeNbAbsencesParEleveEnJours(BilanAbsencesParPersonneInfo datas) {
Integer count = 0
Map result = [:]
* eleve (personne) : nb de retard
* ]
*/
- Map calculeNbRetardsParEleve(BilanAbsencesParPersonneInfo datas) {
+ public Map calculeNbRetardsParEleve(BilanAbsencesParPersonneInfo datas) {
Map elevesRetard = [:]
datas.eachAbsence { Personne personne, BilanAbsenceInfo bilanAbsenceInfo ->
Personne eleve = personne
* eleve (personne) : nb de retard
* ]
*/
- Map calculeNbDepartAnticipesParEleve(BilanAbsencesParPersonneInfo datas) {
+ public Map calculeNbDepartAnticipesParEleve(BilanAbsencesParPersonneInfo datas) {
Map elevesDepart = [:]
datas.eachAbsence { Personne personne, BilanAbsenceInfo bilanAbsenceInfo ->
Personne eleve = personne
* - la Personne élève
* - l'absenceJournee
*/
- BilanAbsencesParPersonneInfo findAbsencesDatas(BasicCriteresRecherche criteres) {
+ public BilanAbsencesParPersonneInfo findAbsencesDatas(BasicCriteresRecherche criteres) {
if ((criteres.structIds?.size() > 0) || (criteres.eleveIds)) {
if (!criteres.eleveIds || criteres.eleveIds.contains((Long) -1)) {
List<Autorite> autoriteEleves = localStructureEnseignementService.findAllAutoritesElevesForAllStructures(
}
}
- BilanAbsencesParPersonneInfo findAbsencesDatasForPublipostageAbs(BasicCriteresRecherche criteres) {
+ public BilanAbsencesParPersonneInfo findAbsencesDatasForPublipostageAbs(BasicCriteresRecherche criteres) {
if ((criteres.structIds?.size() > 0) || (criteres.eleveIds)) {
if (!criteres.eleveIds || criteres.eleveIds.contains((Long) -1)) {
List<Autorite> autoriteEleves = localStructureEnseignementService.findAllAutoritesElevesForAllStructuresForPublipostageAbs(
TemplateJasper sousRapport = null
)
throws ImpressionServiceException {
+
TemplateJasper templateJasper = null
try {
String jrxml = jrxmlIS.getText(ConfigImpression.DEFAULT_ENCODING)
sousTemplate: sousRapport
)
templateJasper.save(flush: true, failOnError: true)
+
} catch (Exception e) {
log.error e.message
throw new ImpressionServiceException(
- "Le template Jasper n'a pas pu etre importe.",
+ "Le template Jasper n'a pas pu etre importe. $param",
e
)
}
//cree et sauvegarde le template eliot
templateEliot = new TemplateEliot(
nom: templateEliotEnum.nom,
- descriptif: templateEliotEnum.description,
code: templateEliotEnum.toString(),
typeFonctionnalite: typeFonctionnalite,
templateJasper: templateJasper,
* @return le TemplateEliot modifié
* @throws ImpressionServiceException
*/
- @Transactional
- TemplateEliot metAJourTemplateEliot(TemplateEliot templateEliot,
+ public TemplateEliot metAJourTemplateEliot(TemplateEliot templateEliot,
TemplateTypeFonctionnalite typeFonctionnalite,
TemplateEliotEnum templateEliotEnum,
String param,
templateJasperIS
)
templateEliot.nom = templateEliotEnum.nom
- templateEliot.descriptif = templateEliotEnum.description
templateEliot.code = templateEliotEnum.toString()
templateEliot.typeFonctionnalite = typeFonctionnalite
templateEliot.templateJasper = templateJasper
} catch (Exception e) {
log.error e.message
throw new ImpressionServiceException(
- "Le template eliot n'a pas pu etre mis a jour.",
+ "Le template eliot n'a pas pu etre mis a jour. ${templateEliotEnum.nom}",
e
)
}
InputStream tableauIS,
InputStream sousRapportIS,
InputStream sousSousRapportIS,
- TemplateTypeDonnees typeDonnees = null
+ TemplateTypeDonnees typeDonnees = null,
+ String nomParametre = null
)
throws ImpressionServiceException {
TemplateEliot templateEliot = null
}
// fsil : step 3 : importer le template jasper correspondant au tableau
TemplateJasper tableauTemplateJasper = importeTemplateJasper(
- ConfigImpression.PARAM_TABLEAU,
+ nomParametre ? nomParametre : ConfigImpression.PARAM_TABLEAU,
tableauIS,
sousTemplateJasper)
// fsil : step 4 : creer et sauvegarder le template eliot
// au ssSsRapport
templateEliot = new TemplateEliot(
nom: templateEliotEnum.nom,
- descriptif: templateEliotEnum.description,
code: templateEliotEnum.toString(),
sousRapport: true,
templateJasper: tableauTemplateJasper,
InputStream tableauIS,
InputStream sousRapportIS,
InputStream sousSousRapportIS,
- TemplateTypeDonnees typeDonnees = null)
+ TemplateTypeDonnees typeDonnees = null,
+ String nomParametre = null)
throws ImpressionServiceException {
videTemplateEliot(tableau)
// fsil : step 1 : importer le template jasper correspondant au sous sous rapport
}
// fsil : step 3 : importer le template jasper correspondant au tableau
TemplateJasper tableauTemplateJasper = importeTemplateJasper(
- ConfigImpression.PARAM_TABLEAU,
+ nomParametre ? nomParametre : ConfigImpression.PARAM_TABLEAU,
tableauIS,
sousTemplateJasper)
+
// fsil : step 4 : creer et sauvegarder le template eliot
try {
tableau.nom = templateEliotEnum.nom
- tableau.descriptif = templateEliotEnum.description
tableau.code = templateEliotEnum.toString()
tableau.sousRapport = true
tableau.templateJasper = tableauTemplateJasper
templateDocument = new TemplateDocument(
etablissement: etablissement,
nom: templateDocumentEnum.nom,
- descriptif: templateDocumentEnum.description,
code: templateDocumentEnum.toString(),
templateEliot: templateEliot,
media: typeMedia?.code,
listeTemplateChampMemo.each {
it.templateDocument = templateDocument
}
+
if (templateEliot) {
templateDocument.templateEliot = templateEliot
}
+
templateDocument.etablissement = etablissement
templateDocument.nom = templateDocumentEnum.nom
- templateDocument.descriptif = templateDocumentEnum.description
templateDocument.code = templateDocumentEnum.toString()
templateDocument.media = typeMedia?.code
templateDocument.systeme = systeme
package org.lilie.services.eliot.impression
/**
- * Contient la liste des paramètres à passer à un modèle jasper
+ * Classe des objets paramètres d'impression. Contient la liste des paramètres à passer à un modèle jasper.
* String : nom du paramètre dans le modèle jasper
* Object : valeur du paramètre
* @author othe
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.impression.stockage.PublipostageStockageFichierService
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.impression.ImpressionSuiviEleveService
import org.lilie.services.eliot.impression.constantes.TemplateTypeFonctionnaliteEnum
import org.lilie.services.eliot.impression.publipostage.PublipostageParametresService
BUL_NOTES_A4(
'A4.jrxml',
- 'Bulletin de notes simple',
'Bulletin de notes simple'
),
BUL_NOTES_LETTRE(
'A4_lettre.jrxml',
'Bulletin de notes avec adresse',
- 'Bulletin de notes avec adresse',
- '',
true,
true
),
BUL_NOTES_SANS_ADRESSE(
'A4_lettre.jrxml',
'Bulletin de notes sans adresse',
- 'Bulletin de notes sans adresse',
- '',
true,
true
),
BUL_NOTES_LIG_MATIERES(
'LignesMatieres.jrxml',
- 'Ligne matière de bulletin de notes',
'Ligne matière de bulletin de notes'
),
BUL_NOTES_LIG_SOUS_MATIERES(
'LignesSousMatieres.jrxml',
- 'Ligne sous-matière de bulletin de notes',
'Ligne sous-matière de bulletin de notes'
),
BUL_NOTES_TABLEAU(
'tableau.jrxml',
'Tableau de bulletin de notes',
- 'Tableau de bulletin de notes',
- '',
false,
false,
false,
LETTRE_ADMIN_ABS(
'lettre.jrxml',
- 'Lettre administrative',
'Lettre administrative'
),
+
LETTRE_ABS_LETTRE_ABSENCES(
'lettreAbsences.jrxml',
- "Lettre d'absences",
"Lettre d'absences"
),
- LETTRE_ABS_TAB_ABSENCES_1(
- 'TableauAbsences1.jrxml',
- 'Tableau des absences 1',
- 'Tableau des absences 1',
- '',
- true,
- false,
- false,
- false,
- true
- ),
- LETTRE_ABS_TAB_ABSENCES_2(
- 'TableauAbsences2.jrxml',
- 'Tableau des absences 2',
- 'Tableau des absences 2',
- '',
- true,
- false,
- false,
- false,
- true
- ),
LETTRE_RET_LETTRE_RETARDS(
'lettreRetards.jrxml',
- 'Lettre de retards',
'Lettre de retards'
),
- LETTRE_RET_TAB_RETARDS1(
- 'TableauRetards1.jrxml',
- 'Tableau des retards 1',
- 'Tableau des retards 1',
- '',
- false,
- true,
- false,
- false,
- false,
- true
- ),
-
- LETTRE_RET_TAB_RETARDS2(
- 'TableauRetards2.jrxml',
- 'Tableau des retards 2',
- 'Tableau des retards 2',
- '',
- false,
- true,
- false,
- false,
- false,
- true
- ),
-
REL_NOTES_A4(
'A4.jrxml',
- 'Relevé de notes sans adresse',
'Relevé de notes sans adresse'
),
REL_NOTES_LETTRE(
'A4_lettre.jrxml',
'Relevé de notes avec adresse',
- 'Relevé de notes avec adresse',
- '',
true,
true
),
REL_NOTES_LIG_MATIERES(
'LignesMatieres.jrxml',
- 'Ligne matière de relevé de notes',
'Ligne matière de relevé de notes'
),
REL_NOTES_LIG_SOUS_MATIERES(
'LignesSousMatieres.jrxml',
- 'Ligne sous-matière de relevé de notes',
'Ligne sous-matière de relevé de notes'
),
REL_NOTES_TABLEAU(
'tableau.jrxml',
'Tableau de relevé de notes',
- 'Tableau de relevé de notes',
- '',
false,
false,
true
),
SYNTHESE_A4(
'A4.jrxml',
- 'Synthèse',
'Synthèse'
),
SYNTHESE_TABLEAU(
'tableau.jrxml',
- 'Tableau de synthèse',
'Tableau de synthèse'
),
TABLEAU_NOTES_A4(
'A4.jrxml',
- 'Tableau de notes',
'Tableau de notes'
),
TABLEAU_NOTES_ANNEE_A4(
'A4.jrxml',
- 'Tableau de notes sur l\'année',
- 'Tableau de notes'
+ 'Tableau de notes sur l\'année'
),
TABLEAU_NOTES_LIG_MATIERES(
'LignesMatieres.jrxml',
- 'Ligne matière de tableau de notes',
'Ligne matière de tableau de notes'
),
TABLEAU_NOTES_TABLEAU(
'tableau.jrxml',
- 'Tableau de tableau de notes',
'Tableau de tableau de notes'
),
TABLEAU_NOTES_ANNEE(
'tableau.jrxml',
- 'Tableau de tableau de notes',
'Tableau de tableau de notes'
),
BREVET(
'brevet.jrxml',
- 'Fiche scolaire brevet',
'Fiche scolaire brevet'
),
BREVET_AVEC_COMP(
'competence.jrxml',
- 'Socle commun',
'Socle commun'
),
BREVET_SANS_COMP(
'vide.jrxml',
- 'Aucun',
'Aucun'
),
APPRECIATIONS(
'A4.jrxml',
- 'Aucun',
'Aucun'
),
APPRECIATIONS_TAB(
'tableau.jrxml',
- 'Aucun',
'Aucun'
),
ARCHIVAGE(
'A4.jrxml',
- 'Archivage',
'Archivage'
),
REGISTRE_APPELS(
'tableau.jrxml',
- 'Registre des appels',
'Registre des appels'
),
SUIVI_ENVOIS_FAMILLES(
'tableau.jrxml',
- 'Suivi des envois aux familles',
'Suivi des envois aux familles'
),
REGISTRE_PUNITIONS(
'tableau.jrxml',
- 'Registre des punitions',
'Registre des punitions'
),
REGISTRE_SANCTIONS(
'tableau.jrxml',
- 'Registre des sanctions',
'Registre des sanctions'
),
TABLEAU_DE_BORD(
'tableau.jrxml',
- 'Tableau de bord',
'Tableau de bord'
),
TABLEAU_DE_BORD_TOTAL(
'tableau.jrxml',
- 'Tableau de bord total',
'Tableau de bord total'
),
STATS_MENSUELLES_VOLUME(
'tableau.jrxml',
- 'Statistiques mensuelles en volume',
'Statistiques mensuelles en volume'
),
STATS_MENSUELLES_VOLUME_TOTAL(
'tableau.jrxml',
- 'Statistiques mensuelles total en volume',
'Statistiques mensuelles total en volume'
),
STATS_MENSUELLES_POURCENT(
'tableau.jrxml',
- 'Statistiques mensuelles en pourcent',
'Statistiques mensuelles en pourcent'
),
STATS_MENSUELLES_TITRES(
'tableau.jrxml',
- 'Statistiques mensuelles en pourcent',
'Statistiques mensuelles en pourcent'
),
STATS_MENSUELLES_POURCENT_TOTAL(
'tableau.jrxml',
- 'Statistiques mensuelles total en pourcent',
'Statistiques mensuelles total en pourcent'
),
+
+ ABS_TABLEAU(
+ 'TableauAbsences.jrxml',
+ 'Tableau des absences',
+ true,
+ false,
+ false,
+ false,
+ true
+ ),
+
+ ABS_TEXTE(
+ 'TexteAbsences.jrxml',
+ 'Texte des absences',
+ true,
+ false,
+ false,
+ false,
+ true
+ ),
+
+ RET_TABLEAU(
+ 'TableauRetards.jrxml',
+ 'Tableau des retards',
+ false,
+ true,
+ false,
+ false,
+ false,
+ true
+ ),
+
+ RET_TEXTE(
+ 'TexteRetards.jrxml',
+ 'Texte des retards',
+ false,
+ true,
+ false,
+ false,
+ false,
+ true
+ ),
+
+ DEP_TABLEAU(
+ "TableauDeparts.jrxml",
+ "Tableau des départs"
+ ),
+
+ DEP_TEXTE(
+ "TexteDeparts.jrxml",
+ "Texte des départs"
+ ),
LETTRE_PUNITION(
'lettre.jrxml',
- 'Lettre de punitions',
'Lettre de punitions'
),
-
LETTRE_SANCTION(
'lettre.jrxml',
- 'Lettre de sanctions',
'Lettre de sanctions'
),
-
private String nomFichier
private String nom
- private String description
- private String classeFactory = ""
-
private Boolean infoAbsences = false
private Boolean infoRetards = false
private Boolean infoReleveNotes = false
return nom
}
- public String getDescription() {
- return description
- }
-
- public String getClasseFactory() {
- return classeFactory
- }
-
private TemplateEliotEnum() {}
private TemplateEliotEnum(String nomFichier,
String nom,
- String description,
- String classeFactory = "",
Boolean infoAbsences = false,
Boolean infoRetards = false,
Boolean infoReleveNotes = false,
Boolean infoDetailRetards = false
) {
+
this.nomFichier = nomFichier
this.nom = nom
- this.description = description
- this.classeFactory = classeFactory
-
this.infoAbsences = infoAbsences
this.infoRetards = infoRetards
this.infoReleveNotes = infoReleveNotes
SOUSMODEL(3),
// zone d'edition du logo
LOGO(4),
- // zone d'edition du cachat
+ // zone d'edition du cachet
CACHET(5),
- //zone des options d'impression du bulletin
- BULLETIN(6)
+ // zone des options d'impression du bulletin
+ BULLETIN(6),
+ // zone de paramétrage des absences, retards et départs
+ ABS_RETARD_DEPART(7)
private int code
import net.sf.jasperreports.engine.JREmptyDataSource
import org.lilie.services.eliot.export.DonneesPourExportCSV
import org.lilie.services.eliot.export.CsvExportService
-import org.lilie.services.eliot.impression.ImpressionMoteurService
import org.codehaus.groovy.grails.commons.GrailsApplication
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
/**
* Ce service est dédié à l'impression de fichiers csv en dynamique.
import org.lilie.services.eliot.impression.constantes.TypeMedia
import org.lilie.services.eliot.impression.donnees.eleve.absences.AbsencesImpression
import org.lilie.services.eliot.impression.donnees.eleve.absences.RetardImpression
+import org.lilie.services.eliot.impression.donnees.eleve.absences.DepartImpression
/**
* Classe imprimable décrivant un élève
List<AbsencesImpression> absences = [] // l'information complete sur les absences
+ List<DepartImpression> departs = []
+
List<Date> datesAbsence = [] // // liste des dates d'absences par ordre décroissant
TableauImpressionInfo donneesTableau = new TableauImpressionInfo()
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
package org.lilie.services.eliot.impression.donnees.eleve.absences
/**
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
package org.lilie.services.eliot.impression.donnees.eleve.absences
/**
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.donnees.eleve.absences
+
+import java.text.SimpleDateFormat
+
+class DepartImpression extends AbstractAbsencesImpression{
+
+ private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
+
+ public String getDateDepart() {
+ sdf.format(date)
+ }
+
+}
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
package org.lilie.services.eliot.impression.donnees.eleve.absences
import java.text.SimpleDateFormat
/**
* Information concernant les retards
+ * @author othe
*/
class RetardImpression extends AbstractAbsencesImpression {
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.moteur
+
+import org.lilie.services.eliot.scolarite.Etablissement
+import net.sf.jasperreports.engine.JasperPrint
+import net.sf.jasperreports.engine.JasperReport
+import net.sf.jasperreports.engine.data.JsonDataSource
+import net.sf.jasperreports.engine.JasperFillManager
+import net.sf.jasperreports.engine.JREmptyDataSource
+import org.lilie.services.eliot.impression.template.ImpressionChargeurModeleService
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.ImpressionServiceException
+import org.lilie.services.eliot.impression.TemplateJasper
+import org.lilie.services.eliot.impression.ListeParametresImpression
+
+/**
+ * Module de création d'archive PDF
+ * @author othe
+ */
+class ImpressionArchiveService {
+
+ ImpressionChargeurModeleService impressionChargeurModele
+ ImpressionMoteurService impressionMoteurService
+
+ public ByteArrayOutputStream creeArchiveFromJSON(Etablissement etab,
+ String codeTemplateDocument,
+ String classe,
+ String dateDebut,
+ String dateFin,
+ InputStream jsonData,
+ List<String> requete
+ ) {
+ TemplateDocument templateDocument = impressionChargeurModele.getTemplateDocument(codeTemplateDocument)
+
+ JasperPrint jasperPrint = archive(
+ etab,
+ templateDocument,
+ classe,
+ dateDebut,
+ dateFin,
+ jsonData,
+ requete)
+
+ return impressionMoteurService.printPdf(jasperPrint)
+ }
+
+
+ /**
+ * fusionne le modèle utilisateur et les données pour retourner un descriptif du
+ * document à imprimer. Se base sur des données json
+ * @param etab l'établissement
+ * @param templateDocument template de document
+ * @param data données de publipostage
+ * @return un objet JasperPrint
+ */
+ private JasperPrint archive(Etablissement etab,
+ TemplateDocument templateDocument,
+ String classe,
+ String dateDebut,
+ String dateFin,
+ InputStream data,
+ List<String> requete) throws ImpressionServiceException {
+
+ if (log.infoEnabled) {
+ log.info("Fusionne : " + templateDocument.nom)
+ }
+ JasperPrint jasperPrint = null
+ try {
+ // tests preliminaires
+ TemplateJasper templateJasper =
+ templateDocument?.templateEliot?.templateJasper
+
+ if (templateJasper?.jasper == null) {
+ throw new ImpressionServiceException(
+ "Pas de template Jasper correspondant au template document."
+ )
+ }
+
+ if (log.debugEnabled) {
+ log.debug("Chargement modèle principal")
+ }
+
+ JasperReport jasperReport = impressionChargeurModele.chargeModeleJasperParDefaut(
+ templateJasper
+ )
+
+ List<JsonDataSource> allJsonDataSource = []
+
+ requete.each {
+ JsonDataSource jsonDataSource = new JsonDataSource(data, it)
+ allJsonDataSource << jsonDataSource
+ data.reset()
+ }
+
+ // Set les parametres
+ ListeParametresImpression parameters = impressionChargeurModele.findParametresTemplateDocument(
+ templateDocument,
+ null
+ )
+
+ parameters.json = allJsonDataSource
+ parameters.titre = templateDocument.nom
+ parameters.classe = classe
+ parameters.dateDebut = dateDebut
+ parameters.dateFin = dateFin
+ parameters.etablissement = etab.nomAffichage
+
+ // lance la fusion
+ if (log.debugEnabled) {
+ log.debug("fusion jasper, parametres=$parameters")
+ }
+
+ jasperPrint = JasperFillManager.fillReport(
+ jasperReport,
+ parameters,
+ new JREmptyDataSource(1)
+ )
+
+ if (log.debugEnabled) {
+ log.debug("fin fusion : " + templateDocument.nom)
+ }
+
+ } catch (Exception e) {
+ log.error e.message
+ throw new ImpressionServiceException(
+ "Le document n'a pas pu etre fusionne.",
+ e
+ )
+ }
+ return jasperPrint
+ }
+
+}
* <http://www.cecill.info/licences.fr.html>.
*/
-package org.lilie.services.eliot.impression
+package org.lilie.services.eliot.impression.moteur
import net.sf.jasperreports.engine.JRExporter
import net.sf.jasperreports.engine.JRExporterParameter
import net.sf.jasperreports.engine.export.JRPdfExporter
import org.lilie.services.eliot.impression.utils.ChampMemosResolver
import net.sf.jasperreports.engine.JasperReport
-import net.sf.jasperreports.engine.design.JasperDesign
-import net.sf.jasperreports.engine.xml.JRXmlLoader
import org.lilie.services.eliot.impression.constantes.ConfigImpression
import org.lilie.services.eliot.scolarite.Etablissement
-import org.lilie.services.eliot.impression.template.ImpressionTemplateFactoryService
import org.lilie.services.eliot.impression.image.ImpressionImageService
import org.lilie.services.eliot.impression.image.ImageType
import org.lilie.services.eliot.impression.donnees.DonneesOptions
-import net.sf.jasperreports.engine.data.JsonDataSource
-import net.sf.jasperreports.engine.JREmptyDataSource
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.ImpressionServiceException
+import org.lilie.services.eliot.impression.TemplateJasper
+import org.lilie.services.eliot.impression.ListeParametresImpression
+import org.lilie.services.eliot.impression.TemplateChampMemo
+import org.lilie.services.eliot.impression.template.ImpressionChargeurModeleService
/**
* Service d'org.lilie.services.eliot.impression
static transactional = false
- ImpressionTemplateFactoryService impressionTemplateFactoryService
ImpressionImageService impressionImageService
+ ImpressionChargeurModeleService impressionChargeurModeleService
public ImpressionMoteurService() {
System.setProperty("java.awt.headless", "true")
}
+ /**
+ * Construit le jasperprint résultat en fonction des données contenus dans data. Tiens compte de la structure de
+ * données dans data (List ou DonneesOptions)
+ */
+ public JasperPrint construitJasperPrint(Object data, Etablissement etab, TemplateDocument templateDocument) {
+ JasperPrint jasperPrint
+
+ switch (data.getClass()) {
+ case List:
+
+ jasperPrint = fusionne(etab, templateDocument, (List) data)
+
+ break
+
+ case DonneesOptions:
+
+ DonneesOptions donneesOptions = (DonneesOptions) data
+
+ jasperPrint = fusionne(
+ etab,
+ templateDocument,
+ donneesOptions.data,
+ donneesOptions.options
+ )
+
+ break
+ default:
+ throw new IllegalArgumentException("Les données passés en paramètre sont erronées.")
+
+ }
+
+ return jasperPrint
+ }
+
/**
* Impression d'un état système en PDF
*/
String codeTemplateDocument,
Object data
) {
- TemplateDocument templateDocument = getTemplateDocument(codeTemplateDocument)
+ TemplateDocument templateDocument = impressionChargeurModeleService.getTemplateDocument(codeTemplateDocument)
JasperPrint jasperPrint = construitJasperPrint(
data,
return printPdf(jasperPrint)
}
- public ByteArrayOutputStream creeArchiveFromJSON(Etablissement etab,
- String codeTemplateDocument,
- String classe,
- String dateDebut,
- String dateFin,
- InputStream jsonData,
- List<String> requete
- ) {
- TemplateDocument templateDocument = getTemplateDocument(codeTemplateDocument)
-
- JasperPrint jasperPrint = archive(
- etab,
- templateDocument,
- classe,
- dateDebut,
- dateFin,
- jsonData,
- requete)
-
- return printPdf(jasperPrint)
- }
-
- private TemplateDocument getTemplateDocument(String codeTemplateDocument) {
-
- TemplateDocument templateDocument = TemplateDocument.findByCode(
- codeTemplateDocument
- )
-
- if (!templateDocument) {
- throw new IllegalStateException("Le modèle $codeTemplateDocument n'existe pas en base.")
- }
- templateDocument
-
- }
-
/**
* Imprime un document en pdf
*/
}
- /**
- * Construit le jasperprint résultat en fonction des données contenus dans data. Tiens compte de la structure de
- * données dans data (List ou DonneesOptions)
- */
- public JasperPrint construitJasperPrint(Object data, Etablissement etab, TemplateDocument templateDocument) {
- JasperPrint jasperPrint
-
- switch (data.getClass()) {
- case List:
-
- jasperPrint = fusionne(etab, templateDocument, (List) data)
-
- break
-
- case DonneesOptions:
-
- DonneesOptions donneesOptions = (DonneesOptions) data
-
- jasperPrint = fusionne(
- etab,
- templateDocument,
- donneesOptions.data,
- donneesOptions.options
- )
-
- break
- default:
- throw new IllegalArgumentException("Les données passés en paramètre sont erronées.")
-
- }
-
- return jasperPrint
- }
-
/**
* fusionne le modèle utilisateur et les données pour retourner un descriptif du
* document à imprimer. Penser aussi a exploiter la possibilité d'utiliser
Object options = null) throws ImpressionServiceException {
if (log.infoEnabled) {
- log.info("Fusionne json : " + templateDocument.nom)
+ log.info("Fusionne : " + templateDocument.nom)
}
+
JasperPrint jasperPrint = null
+
try {
// tests preliminaires
TemplateJasper templateJasper =
log.debug("Chargement modèle principal")
}
- JasperReport jasperReport = impressionTemplateFactoryService.binaryTemplateJasperFactory(
+ JasperReport jasperReport = impressionChargeurModeleService.binaryTemplateJasperFactory(
templateDocument,
templateJasper,
options
new JRBeanCollectionDataSource(data)
// Set les parametres
- ListeParametresImpression parameters = findParametresTemplateDocument(
+ ListeParametresImpression parameters = impressionChargeurModeleService.findParametresTemplateDocument(
templateDocument,
options
)
return jasperPrint
}
- /**
- * fusionne le modèle utilisateur et les données pour retourner un descriptif du
- * document à imprimer. Se base sur des données json
- * @param etab l'établissement
- * @param templateDocument template de document
- * @param data données de publipostage
- * @return un objet JasperPrint
- */
- private JasperPrint archive(Etablissement etab,
- TemplateDocument templateDocument,
- String classe,
- String dateDebut,
- String dateFin,
- InputStream data,
- List<String> requete) throws ImpressionServiceException {
-
- if (log.infoEnabled) {
- log.info("Fusionne : " + templateDocument.nom)
- }
- JasperPrint jasperPrint = null
- try {
- // tests preliminaires
- TemplateJasper templateJasper =
- templateDocument?.templateEliot?.templateJasper
-
- if (templateJasper?.jasper == null) {
- throw new ImpressionServiceException(
- "Pas de template Jasper correspondant au template document."
- )
- }
-
- if (log.debugEnabled) {
- log.debug("Chargement modèle principal")
- }
-
- JasperReport jasperReport = impressionTemplateFactoryService.chargeModeleJasperParDefaut(
- templateJasper
- )
-
- List<JsonDataSource> allJsonDataSource = []
-
- requete.each {
- JsonDataSource jsonDataSource = new JsonDataSource(data, it)
- allJsonDataSource << jsonDataSource
- data.reset()
- }
-
- // Set les parametres
- ListeParametresImpression parameters = findParametresTemplateDocument(
- templateDocument,
- null
- )
-
- parameters.json = allJsonDataSource
- parameters.titre = templateDocument.nom
- parameters.classe = classe
- parameters.dateDebut = dateDebut
- parameters.dateFin = dateFin
- parameters.etablissement = etab.nomAffichage
-
- // lance la fusion
- if (log.debugEnabled) {
- log.debug("parametres=$parameters")
- log.debug("fusion jasper")
- }
-
- jasperPrint = JasperFillManager.fillReport(
- jasperReport,
- parameters,
- new JREmptyDataSource(1)
- )
-
- if (log.debugEnabled) {
- log.debug("fin fusion : " + templateDocument.nom)
- }
-
- } catch (Exception e) {
- log.error e.message
- throw new ImpressionServiceException(
- "Le document n'a pas pu etre fusionne.",
- e
- )
- }
- return jasperPrint
- }
-
/**
* Gestion des zones de mémo
*/
Object options) {
if (log.debugEnabled) {
- log.debug "Gestion paramètre complémentaire"
- log.debug "Options : $options"
+ log.debug "Gestion paramètre complémentaire. Options : $options"
}
if (options != null) {
- return affecteParametre(
+ return impressionChargeurModeleService.affecteParametre(
templateDocument,
parameters,
ConfigImpression.PARAM_OPTIONS,
if (image) {
if (image.length != 0) {
- affecteParametre(
+ impressionChargeurModeleService.affecteParametre(
templateDocument,
parameters,
nomParametre,
}
- /**
- * Modifie la liste des paramètres avec une nouvelle valeur de paramètre
- * @param templateDocument : modèle concerné
- * @param parameters : liste de paramètres
- * @param nom : nom du paramètre dans la liste
- * @param parametre : nouvelle valeur
- * @return la liste modifiée
- */
- private ListeParametresImpression affecteParametre(TemplateDocument templateDocument,
- ListeParametresImpression parameters,
- String nom,
- Object parametre) {
-
- String jrxml = templateDocument.templateEliot.templateJasper.jrxml
-
- if (jrxml == null) {
- throw new ImpressionServiceException(
- "Aucun template jrxml pour template utilisateur ${templateDocument}"
- )
- }
-
- ByteArrayInputStream is = new ByteArrayInputStream(
- jrxml.getBytes(ConfigImpression.DEFAULT_ENCODING)
- )
-
- JasperDesign jasperDesign = JRXmlLoader.load(is)
- if (jasperDesign.parametersMap.get(nom)) {
- parameters.put(
- nom,
- parametre
- )
- }
-
- return parameters
- }
-
-/**
- * Lecture des modèles jasper en base et préparation des paramètres pour jasperReport
- * @return Liste des paramètres sous la forme nom=objet
- * nom est de type string et object contient un objet JasperReport
- */
- private ListeParametresImpression findParametresTemplateDocument(TemplateDocument templateDocument, Object options) {
-
- ListeParametresImpression parameters = new ListeParametresImpression()
-
- // set les parametres correspondant au sous template
- List<TemplateDocumentSousTemplateEliot> docSsTemplatesEliot =
- TemplateDocumentSousTemplateEliot.findAllByTemplateDocument(templateDocument)
-
- docSsTemplatesEliot.each {
- TemplateDocumentSousTemplateEliot templateDocumentSousTemplateEliot ->
-
- parameters = chargeSousModele(
- parameters,
- templateDocument,
- templateDocumentSousTemplateEliot,
- options)
-
- }
- return parameters
- }
-
- private ListeParametresImpression chargeSousModele(ListeParametresImpression parameters,
- TemplateDocument templateDocument,
- TemplateDocumentSousTemplateEliot templateDocumentSousTemplateEliot,
- Object options) {
-
- TemplateJasper currentTemplateJasper =
- templateDocumentSousTemplateEliot.templateEliot?.templateJasper
-
- String premierParametre = templateDocumentSousTemplateEliot.param
-
- if (log.debugEnabled) {
- log.debug("Chargement sous-modèle racine " + premierParametre)
- }
-
- JasperReport jasperReportSousModele = impressionTemplateFactoryService.binaryTemplateJasperFactory(
- templateDocument,
- currentTemplateJasper,
- options
- )
-
- parameters.put(
- premierParametre,
- jasperReportSousModele
- )
-
- currentTemplateJasper = currentTemplateJasper.sousTemplate
-
- while (currentTemplateJasper) {
-
- if (log.debugEnabled) {
- log.debug("Chargement sous-modèle du sous-modèle" + templateDocumentSousTemplateEliot.param)
- }
-
- JasperReport jasperReport = impressionTemplateFactoryService.binaryTemplateJasperFactory(
- templateDocument,
- currentTemplateJasper,
- options
- )
-
- parameters.put(
- currentTemplateJasper.param,
- jasperReport
- )
-
- currentTemplateJasper = currentTemplateJasper.sousTemplate
-
- }
- parameters
- }
-
/**
* Imprime le descriptif du document au format PDF
* @param jasperPrint document final à imprimer
return fusionne(etab, (TemplateDocument) templateDocument, data, options)
}
+
}
elevesSelectionnes.each {String id ->
if (id.indexOf(':') == -1) {
- resultat << Long.parseLong(id)
+ resultat << Long.parseLong(id)
} else {
List<String> valeurs = id.split(':')
resultat << Long.parseLong(valeurs[0])
}
+ public String toString() {
+ "Modele : ${modeleId}"
+ }
+
+
}
package org.lilie.services.eliot.impression.requetage
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.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.impression.donnees.eleve.absences.RetardImpression
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.securite.impl.Autorite
import org.lilie.services.eliot.temps.DateUtil
import org.lilie.services.eliot.scolarite.*
import org.lilie.services.eliot.impression.ImpressionRequetageService
-import org.lilie.services.eliot.absences.GroupeMotif
-import org.lilie.services.eliot.absences.Motif
import org.lilie.services.eliot.LocalAutoriteService
import org.lilie.services.eliot.impression.publipostage.PublipostageAbsencesParams
import org.codehaus.groovy.grails.web.json.JSONObject
*/
class ImpressionRequetageAbsencesService {
- private final static int ABSENCES_VALABLES = 1
- private final static int ABSENCES_NON_VALABLES = 2
- private final static int ABSENCES_PREVISIONNELLES = 3
- private final static int RETARDS = 4
- private final static int DEPART_ANTICIPE = 5
- private final static int DEMI_PENSION = 6
- private final static int INTERNAT = 7
-
protected final static String SELECTION_ABSENCE = "absence"
protected final static String SELECTION_RETARD = "retard"
ImpressionRegroupementAbsencesService impressionRegroupementAbsencesService
MotifService motifService
ImpressionRequetageSanctionPunitionService impressionRequetageSanctionPunitionService
+ ImpressionRetardDepartService impressionRetardDepartService
private final static String CODE_MESSAGE_DEMI_PENSION = "Demi-pension"//message(code: 'absences.menu.publipostage.selection.heure.demi-pension')
private final static String CODE_MESSAGE_INTERNAT = "Internat" //message(code: 'absences.menu.publipostage.selection.heure.internat')
List<Personne> eleves,
TypePeriode typePeriode,
List<EleveImpressionInfo> eleveImpressionInfos,
- Boolean ajouteDetailsRetards = true,
+ ImpressionRequetageSelection impressionRequetageSelection,
PriseEnCompteMotif priseEnCompteMotif = PriseEnCompteMotif.TOUS
) {
criteres.dateDebut.setTime(periode.dateDebut)
criteres.dateFin.setTime(periode.dateFin)
- eleveImpressionInfos = findAllInfoRetardDepartEleve(
+ eleveImpressionInfos = impressionRetardDepartService.findAllInfoRetardDepartEleve(
criteres,
eleveImpressionInfos,
- ajouteDetailsRetards
+ impressionRequetageSelection
)
}
return eleveImpressionInfos
}
-/**
- * Lecture des données des élèves pour le publipostage pour les retards
- *
- * @author bahj
- * @param securiteSession la session courante
- * @param etablissement établissement courant
- * @param criteres représente l'ensemble des critères des retards
- *
- */
- public List<EleveImpressionInfo> findAllInfoForRetardsAndDepartAnticipes(SecuriteSession securiteSession,
- Etablissement etablissement,
- BasicCriteresRecherche criteres,
- SelectionAdresseResponsableEnum selectionAdresseResponsableEnum,
- Boolean ajouteDetailsRetards = true
- ) {
-
- List<Personne> eleves = localPersonneService.findAllPersonneBySetAutorite(
- (Set) Autorite.getAll(criteres.eleveIds)
- )
-
- ImpressionInfoGenerale impressionInfoGenerale = new ImpressionInfoGenerale(
- allEleves: eleves,
- adresseResponsableEnum: selectionAdresseResponsableEnum,
- etablissement: etablissement,
- elevesIds: criteres.eleveIds,
- typesResponsables: criteres.typesResponsables
- )
-
- List<EleveImpressionInfo> eleveImpressionInfos =
- impressionRequetageService.findAllInfoGeneralesEleve(
- impressionInfoGenerale,
- )
-
- eleveImpressionInfos = findAllInfoRetardDepartEleve(
- criteres,
- eleveImpressionInfos,
- ajouteDetailsRetards
- )
-
- return eleveImpressionInfos
-
- }
-
/**
* Lecture des données personne pour le publipostage des absences
*
* @param etablissement l'établissement courant
* @param criteres représente l'ensemble des critères d'absences
*/
- public List<EleveImpressionInfo> findAllInfoForAbsences(
- SecuriteSession securiteSession,
+ public List<EleveImpressionInfo> findAllInfoForAbsences(SecuriteSession securiteSession,
Etablissement etablissement,
BasicCriteresRecherche criteres,
SelectionAdresseResponsableEnum selectionAdresseResponsableEnum,
)
if (log.infoEnabled) {
- log.info "informations générales récupérées"
+ log.info "Informations générales récupérées"
}
eleveImpressionInfos = findAllInfoAbsenceEleve(
etablissement,
criteres,
- eleveImpressionInfos
+ eleveImpressionInfos,
+ ajouteDetailsAbsences
)
if (log.infoEnabled) {
- log.info "findAllInfoForAbsences terminé"
+ log.info "FindAllInfoForAbsences terminé"
}
eleveImpressionInfos = impressionRequetageSanctionPunitionService.findAllInfoPunitionSanctionEleve(
remplisDatesAbsences(eleveImpressionInfos)
if (log.infoEnabled) {
- log.info("remplisDatesAbsences terminé")
+ log.info("RemplisDatesAbsences terminé")
}
impressionRegroupementAbsencesService.fusionnePeriodesEleves(
)
if (log.infoEnabled) {
- log.info "fusion périodes absences terminé"
+ log.info "Fusion périodes absences terminé"
}
impressionRequetageService.triEleves(eleveImpressionInfos)
* Rempli datesAbsence dans eleveImpressionInfos en utilisant l'info sur les
* absences deja presant dans eleveImpressionInfos
*/
- void remplisDatesAbsences(List<EleveImpressionInfo> eleveImpressionInfos) {
+ private void remplisDatesAbsences(List<EleveImpressionInfo> eleveImpressionInfos) {
eleveImpressionInfos.each { EleveImpressionInfo eleveImpressionInfo ->
List<AbsencesImpression> absInfos = eleveImpressionInfo.absences
- List<Date> dateAbsences = absInfos.collect { getPartDate(it.date) }
+ List<Date> dateAbsences = absInfos.collect {
+ ImpressionRequetageHelper.getPartDate(it.date)
+ }
eleveImpressionInfo.datesAbsence = dateAbsences?.sort { it }?.unique()?.
toList()?.reverse()
}
Boolean ajouteDetailsAbsences = true
) {
- gestionDateDebutDateFinRequete(eleveImpressionInfos, criteres)
+ ImpressionRequetageHelper.gestionDateDebutDateFinRequete(eleveImpressionInfos, criteres)
// les critères de types d'absences ne doivent servir que pour filtrer les élèves,
- // mais pas pour publiposter
- setCriteresPublipostageAbsences(criteres)
+ // mais pas pour publiposter
+ ImpressionRequetageHelper.setCriteresPublipostageAbsences(criteres)
BilanAbsencesParPersonneInfo bilanAbsencesParPersonneInfo = bilanService.
getAbsencesOrRetards(criteres)
return eleveImpressionInfos
}
-/**
- * Retrouve les informations de retards concernant la liste des informations d'éléves
- *
- * @author bahj
- * @param etablissement l'établissement courant
- * @param criteres les critères de recherche des retrads
- *
- */
- private List<EleveImpressionInfo> findAllInfoRetardDepartEleve(BasicCriteresRecherche criteres,
- List<EleveImpressionInfo> eleveImpressionInfos,
- Boolean ajouteDetailsRetards = true
- ) {
-
- gestionDateDebutDateFinRequete(eleveImpressionInfos, criteres)
-
- BilanAbsencesParPersonneInfo resultatsRetard = bilanService.getAbsencesOrRetards(criteres)
-
- if (ajouteDetailsRetards) {
- eleveImpressionInfos = addRetardsImpressionInfo(
- resultatsRetard,
- eleveImpressionInfos
- )
- }
-
- Map elevesRetard = bilanService.calculeNbRetardsParEleve(resultatsRetard)
-
- elevesRetard.each {Personne eleve, Integer nbRetards ->
-
- EleveImpressionInfo impressionInfo =
- (EleveImpressionInfo) eleveImpressionInfos.find {
- it.personne == eleve
- }
-
- impressionInfo.eleve_NbRetard = nbRetards
- }
-
- criteres.retards = false
- criteres.departsAnticipes = true
- BilanAbsencesParPersonneInfo resultatsDepart = bilanService.getAbsencesOrRetards(criteres)
-
- Map elevesDepartAnticipe = bilanService.calculeNbDepartAnticipesParEleve(resultatsDepart)
-
- elevesDepartAnticipe.each {Personne eleve, Integer nbDepartAnticipes ->
-
- EleveImpressionInfo impressionInfo =
- (EleveImpressionInfo) eleveImpressionInfos.find {
- it.personne == eleve
- }
-
- impressionInfo.eleve_NbDepAnti = nbDepartAnticipes
- }
-
-
- return eleveImpressionInfos
- }
-
- /**
- * Gestion des dates de début et de fin de période
- */
- private void gestionDateDebutDateFinRequete(List<EleveImpressionInfo> eleveImpressionInfos,
- BasicCriteresRecherche criteres) {
- eleveImpressionInfos.each {
- EleveImpressionInfo eleveImpressionInfo ->
- eleveImpressionInfo.setPeriodeDebut(criteres.dateDebut.getTime())
- eleveImpressionInfo.setPeriodeFin(criteres.dateFin.getTime())
- }
- }
-
/**
* Ajoute les informations des absences des élèves dans les dto
*
return eleveImpressionInfos
}
- /**
- * Additionne les heures à la date du jour
- * @param dateDuJour : exemple 12/12/2010
- * @param heure : exemple 8H35
- * @return 12/12/2010 8H35
- */
- public Date ajouteHeure(Date dateDuJour, Date heure) {
- Calendar calendar = Calendar.getInstance()
- calendar.setTime(heure)
- Integer iMillisecond = heure.getTime() +
- calendar.get(Calendar.ZONE_OFFSET) +
- calendar.get(Calendar.DST_OFFSET)
- return DateUtils.addMilliseconds(dateDuJour, iMillisecond)
- }
-
- /**
- * Ajoute les informations des retards des élèves dans les dto
- *
- * @author bahj
- * @param datas les retrads des élèves sous la forme :
- * - l'Appel
- * - l'AppelLigne
- * - la StructureEnseignement
- * - la Personne élève
- * - l'absenceJournee
- *
- */
- private List<EleveImpressionInfo> addRetardsImpressionInfo(BilanAbsencesParPersonneInfo datas,
- List<EleveImpressionInfo> eleveImpressionInfos
- ) {
-
- datas.eachAbsence { Personne personne, BilanAbsenceInfo bilanAbsenceInfo ->
-
- EleveImpressionInfo eleveInfo = (EleveImpressionInfo) eleveImpressionInfos.find {
- it.personne == (Personne) personne
- }
-
- AppelLigne appelLigne = bilanAbsenceInfo.appelLigne
-
- if (bilanAbsenceInfo.appelLigne.retard) {
- eleveInfo.retards << new RetardImpression(
- date: appelLigne.appel ?
- appelLigne.appel.dateHeureDebut :
- appelLigne.absenceJournee.date,
- heureDebut: appelLigne.appel ?
- DateUtil.formateDate(appelLigne.appel.dateHeureDebut) :
- DateUtil.formateDate(appelLigne.heureDebut),
- heureFin: DateUtil.formateDate(appelLigne.heureArrivee),
- motif: appelLigne.motif.libelle
- )
- }
- }
-
- return eleveImpressionInfos
- }
-
public PublipostageCriteresRecherche parseCriteriaRetards(PublipostageAbsencesParams parametresSelectionPublipostage) {
- PublipostageCriteresRecherche result = parseCriteriaCommuns(parametresSelectionPublipostage)
+ PublipostageCriteresRecherche result = ParseCriteriaHelper.parseCriteriaCommuns(parametresSelectionPublipostage)
result.setTousTypes(false)
result.retards = true
return result
}
-/**
- * Récupère les paramètres de motifs
- * @param params : les paramètres de la requêtes
- * @param criteria : le criteria à compléter
- * @return un BilanCriteria complété avec les motifs
- * @author jbui
- */
- protected void parseCriteriaMotifs(def listeMotifs, listeGroupeMotifs, BasicCriteresRecherche criteria) {
- if (listeMotifs) {
- criteria.motifIds = (listeMotifs as String).split(',').collect {
- Long.parseLong(it)
- }
- } else {
- criteria.motifIds = []
- }
- if ((criteria.motifIds.size() > 0) &&
- (criteria.motifIds[0] == BasicCriteresRecherche.VALEUR_TOUS)) {
- parseCriteriaGroupeMotifs(listeGroupeMotifs, criteria)
- }
- }
-
-/**
- * Récupère les motifs associés aux groupes de motifs
- * @param params : les paramètres de la requête
- * @param bilanCriteria : le BilanCriteria à compléter
- * @author jbui
- */
- protected void parseCriteriaGroupeMotifs(def listeGroupeMotifs,
- BasicCriteresRecherche bilanCriteria) {
- List<Long> groupeMotifs
- if (listeGroupeMotifs) {
- groupeMotifs = (listeGroupeMotifs as String).split(',').collect {
- Long.parseLong(it)
- }
- } else {
- groupeMotifs = []
- }
- bilanCriteria.motifIds.clear()
- if ((groupeMotifs.size() > 0) && (groupeMotifs[0] == BasicCriteresRecherche.VALEUR_TOUS)) {
- bilanCriteria.motifIds << BasicCriteresRecherche.VALEUR_TOUS
- } else {
- groupeMotifs.each {
- bilanCriteria.motifIds.addAll(
- Motif.findAllByGroupeMotif(
- GroupeMotif.get(it)
- )*.id)
- }
- }
- }
-
-/**
- * Récupère les paramètres de dates
- * @param params : les paramètres de la requêtes
- * @return un BilanCriteria complété avec les dates
- * @author jbui
- */
- protected void parseBilanCriteriaDates(PublipostageAbsencesParams parametresSelectionPublipostage,
- BasicCriteresRecherche criteria) {
- String dateDebut = parametresSelectionPublipostage.dateDebut
- String dateFin = parametresSelectionPublipostage.dateFin
-
- criteria.dateDebut.setTime(
- DateUtil.parseDateJavascript(dateDebut)
- )
-
- criteria.dateFin.setTime(
- DateUtil.parseDateJavascript(dateFin)
- )
-
- DateUtil.setFinJour(criteria.dateFin)
- }
-
-/**
- * Récupère les paramètres de type
- * @param params : les paramètres de la requêtes
- * @return un BilanCriteria complété avec les types
- * @author jbui
- * @author bahj
- */
- protected void parseBilanCriteriaType(def listeTypes, BasicCriteresRecherche criteria) {
- List<Integer> typesEnInt
- if (listeTypes) {
- typesEnInt = (listeTypes as String).split(',').collect {
- Integer.parseInt((String) it)
- }
- } else {
- typesEnInt = []
- }
- if (typesEnInt.contains(BasicCriteresRecherche.VALEUR_TOUS as Integer)) {
- criteria.setTousTypes(true)
- }
- else {
- criteria.setTousTypes(false)
- for (int type : typesEnInt) {
- switch (type) {
- case ABSENCES_VALABLES:
- criteria.absencesValables = true
- break
-
- case ABSENCES_NON_VALABLES:
- criteria.absencesNonValables = true
- break
-
- case ABSENCES_PREVISIONNELLES:
- criteria.absencesPrevisionnelles = true
- break
-
- case RETARDS:
- criteria.retards = true
- break
-
- case DEPART_ANTICIPE:
- criteria.departsAnticipes = true
- break
-
- case DEMI_PENSION:
- criteria.demiPension = true
- break
-
- case INTERNAT:
- criteria.internat = true
- break
-
- }
- }
- }
- }
-
-
- private PublipostageCriteresRecherche parseCriteriaCommuns(PublipostageAbsencesParams parametresSelectionPublipostage) {
- PublipostageCriteresRecherche result = new PublipostageCriteresRecherche()
-
- parseCriteriaMotifs(
- parametresSelectionPublipostage.motifId,
- parametresSelectionPublipostage.groupeDeMotifId,
- result)
-
- parseBilanCriteriaDates(
- parametresSelectionPublipostage,
- result
- )
-
- parseBilanCriteriaDivisions(
- parametresSelectionPublipostage.classesId,
- result
- )
-
- parseBilanCriteriaType(
- parametresSelectionPublipostage.typeAbsenceId,
- result
- )
-
- result.nbLimit = parametresSelectionPublipostage.limitAbsence
- return result
- }
-
-/**
- * Récupère les paramètres de divisions
- * @param params : les paramètres de la requêtes
- * @return un BilanCriteria complété avec les divisions
- * @author jbui
- */
- protected void parseBilanCriteriaDivisions(def listeDivisions, BasicCriteresRecherche criteria) {
- if (listeDivisions) {
- criteria.structIds = (listeDivisions as String).split(',').collect {
- Long.parseLong(it)
- }
- } else {
- criteria.structIds = []
- }
- }
-
- /**
- * lecture de la liste des élèves à partir des paramètres.
- * @return la liste des id des élèves
- */
- public List getListeEleve(PublipostageAbsencesParams parametresSelectionPublipostage) {
- return parametresSelectionPublipostage.elevesSelectionnes
- }
-
public PublipostageCriteresRecherche parseCriteriaAbsences(PublipostageAbsencesParams parametresSelectionPublipostage) {
- PublipostageCriteresRecherche result = parseCriteriaCommuns(parametresSelectionPublipostage)
+ PublipostageCriteresRecherche result = ParseCriteriaHelper.parseCriteriaCommuns(parametresSelectionPublipostage)
result.demiPension = false
result.internat = false
result.retards = false
return result
}
- public void prepareListeEleveEtCritere(PublipostageAbsencesParams parametresSelectionPublipostage,
- PublipostageCriteresRecherche criteria,
- List<Personne> personneEleves) {
- List eleveIds = getListeEleve(parametresSelectionPublipostage)
- criteria.eleveIds = []
-
- eleveIds.each { Integer eleveId ->
- Personne eleve = getEleve(eleveId)
- personneEleves << eleve
- criteria.eleveIds << eleve.autoriteId
- }
- }
-
- private Personne getEleve(int eleveId) {
- Personne eleve = Personne.get(eleveId)
- if (!eleve) {
- throw new IllegalArgumentException("Elève [$eleveId] n'existe pas")
- }
- return eleve
- }
-
/**
* Lecture des données au moment du publipostage
*/
SecuriteSession securiteSession,
Etablissement etablissement
) {
+
+ if (log.debugEnabled) {
+ log.debug("lectureDonneesEleve - ${parametresSelectionPublipostage}")
+ }
+
List<EleveImpressionInfo> eleveImpressionInfos = []
- PublipostageCriteresRecherche criteres
SelectionAdresseResponsableEnum typeResponsable = SelectionAdresseResponsableEnum.valueOf(
SelectionAdresseResponsableEnum.class,
if (requetageSelection.infoAbsences || requetageSelection.infoDetailAbsences) {
- criteres =
+ PublipostageCriteresRecherche criteresAbsences =
parseCriteriaAbsences(
parametresSelectionPublipostage
)
- criteres.etablissementId = etablissement.id
-
- criteres.eleveIds =
- localAutoriteService.getAllAutoriteActuerForAllPersonne(
- parametresSelectionPublipostage.elevesSelectionnesId()
- )*.id
-
- criteres.typesResponsables =
- parametresSelectionPublipostage.responsablesElevesSelectionnes(typeResponsable)
-
- criteres.nbLimit = parametresSelectionPublipostage.limitAbsence
+ prepareCriteres(
+ etablissement,
+ criteresAbsences,
+ parametresSelectionPublipostage,
+ typeResponsable)
eleveImpressionInfos =
findAllInfoForAbsences(
securiteSession,
etablissement,
- criteres,
+ criteresAbsences,
typeResponsable,
requetageSelection.infoDetailAbsences
)
}
+ if (requetageSelection.infoDetails()) {
- if (requetageSelection.infoRetards || requetageSelection.infoDetailRetards) {
-
- criteres = parseCriteriaRetards(
- parametresSelectionPublipostage
- )
-
- criteres.etablissementId = etablissement.id
-
- criteres.eleveIds =
- localAutoriteService.getAllAutoriteActuerForAllPersonne(
- parametresSelectionPublipostage.elevesSelectionnesId()
- )*.id
-
- criteres.typesResponsables =
- parametresSelectionPublipostage.responsablesElevesSelectionnes(typeResponsable)
-
- criteres.nbLimit = parametresSelectionPublipostage.limitAbsence
-
- List<EleveImpressionInfo> eleveImpressionInfosRetard = findAllInfoForRetardsAndDepartAnticipes(
- securiteSession,
+ PublipostageCriteresRecherche criteresRetards = createCritereRetards(
+ parametresSelectionPublipostage,
etablissement,
- criteres,
- typeResponsable,
- requetageSelection.infoDetailRetards
- )
- eleveImpressionInfos = fusionneInfosAbsencesEtRetardsDeparts(
+ typeResponsable)
+
+ eleveImpressionInfos = impressionRetardDepartService.findAllInfoRetardDepartEleve(
+ criteresRetards,
eleveImpressionInfos,
- eleveImpressionInfosRetard
+ requetageSelection
)
+
}
return eleveImpressionInfos
}
- /**
- * Fusionne les infos d'absences et de retards dans une seule liste
- * @return une List<EleveImpressionInfo>
- */
- private List<EleveImpressionInfo> fusionneInfosAbsencesEtRetardsDeparts(
- List<EleveImpressionInfo> infosAbsences,
- List<EleveImpressionInfo> infosRetardsDeparts
- ) {
- List<EleveImpressionInfo> result = infosAbsences
- infosRetardsDeparts.each {
- EleveImpressionInfo infoRetard ->
- EleveImpressionInfo infoAbsence = result.find {
- it.personneId == infoRetard.personne.id
- }
+ private PublipostageCriteresRecherche createCritereRetards(PublipostageAbsencesParams parametresSelectionPublipostage, Etablissement etablissement, SelectionAdresseResponsableEnum typeResponsable) {
- if (infoAbsence) {
- infoAbsence.eleve_NbRetard += infoRetard.eleve_NbRetard
- infoAbsence.eleve_NbDepAnti += infoRetard.eleve_NbDepAnti
- infoAbsence.retards += infoRetard.retards
- } else {
- result.add(infoRetard)
- }
+ PublipostageCriteresRecherche criteresRetards = parseCriteriaRetards(
+ parametresSelectionPublipostage
+ )
- }
- return result
+ prepareCriteres(etablissement, criteresRetards, parametresSelectionPublipostage, typeResponsable)
+ criteresRetards
}
- private Date getPartDate(Date date) {
- Date partDate = new Date(date.getTime())
- partDate.setHours(0)
- partDate.setMinutes(0)
- partDate.setSeconds(0)
- return partDate
+ private void prepareCriteres(Etablissement etablissement, PublipostageCriteresRecherche criteres, PublipostageAbsencesParams parametresSelectionPublipostage, SelectionAdresseResponsableEnum typeResponsable) {
+ criteres.etablissementId = etablissement.id
+
+ criteres.eleveIds =
+ localAutoriteService.getAllAutoriteActuerForAllPersonne(
+ parametresSelectionPublipostage.elevesSelectionnesId()
+ )*.id
+
+
+ criteres.typesResponsables =
+ parametresSelectionPublipostage.responsablesElevesSelectionnes(typeResponsable)
+
+ criteres.nbLimit = parametresSelectionPublipostage.limitAbsence
}
- private void setCriteresPublipostageAbsences(BasicCriteresRecherche criteres) {
- // le publipostage doit pouvoir afficher toutes les absences sauf les prévisionnelles (voir mantis 0028044)
- criteres?.absencesNonValables = true
- criteres?.absencesValables = true
- criteres?.absencesPrevisionnelles = false
- criteres?.demiPension = true
- criteres?.internat = true
+ /**
+ * Additionne les heures à la date du jour
+ * @param dateDuJour : exemple 12/12/2010
+ * @param heure : exemple 8H35
+ * @return 12/12/2010 8H35
+ */
+ private Date ajouteHeure(Date dateDuJour, Date heure) {
+ Calendar calendar = Calendar.getInstance()
+ calendar.setTime(heure)
+ Integer iMillisecond = heure.getTime() +
+ calendar.get(Calendar.ZONE_OFFSET) +
+ calendar.get(Calendar.DST_OFFSET)
+ return DateUtils.addMilliseconds(dateDuJour, iMillisecond)
}
}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.requetage
+
+import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
+import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
+
+/**
+ * Classe outil pour le requetage d'impression
+ * @author othe
+ */
+class ImpressionRequetageHelper {
+
+ /**
+ * Gestion des dates de début et de fin de période
+ */
+ static public List<EleveImpressionInfo> gestionDateDebutDateFinRequete(List<EleveImpressionInfo> eleveImpressionInfos, BasicCriteresRecherche criteres) {
+
+ eleveImpressionInfos.each {
+ EleveImpressionInfo eleveImpressionInfo ->
+ eleveImpressionInfo.setPeriodeDebut(criteres.dateDebut.getTime())
+ eleveImpressionInfo.setPeriodeFin(criteres.dateFin.getTime())
+ }
+
+ return eleveImpressionInfos
+ }
+
+
+ static public void setCriteresPublipostageAbsences(BasicCriteresRecherche criteres) {
+ // le publipostage doit pouvoir afficher toutes les absences sauf les prévisionnelles (voir mantis 0028044)
+ criteres?.absencesNonValables = true
+ criteres?.absencesValables = true
+ criteres?.absencesPrevisionnelles = false
+ criteres?.demiPension = true
+ criteres?.internat = true
+ }
+
+ static public Date getPartDate(Date date) {
+ Date partDate = new Date(date.getTime())
+ partDate.setHours(0)
+ partDate.setMinutes(0)
+ partDate.setSeconds(0)
+ return partDate
+ }
+
+}
*/
Boolean infoAbsences = true
- Boolean infoDetailAbsences = false
-
/**
* Informations de retards
*/
Boolean infoRetards = true
- Boolean infoDetailRetards = false
-
/**
* Informations du relevé de notes
*/
*/
Boolean infoBulletinNotes = false
+ Boolean infoDetailDeparts = false
+ Boolean infoDetailRetards = false
+ Boolean infoDetailAbsences = false
+
+ public Boolean infoDetails() {
+ infoDetailDeparts || infoDetailRetards || infoDetailAbsences
+ }
+
void ajouteAllSelectionRequete(List<String> allNomRequete) {
allNomRequete.each { String nomRequete ->
this."$nomRequete" = true
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.requetage
+
+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.scolarite.Personne
+import org.lilie.services.eliot.applications.absences.BilanService
+import org.lilie.services.eliot.applications.absences.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.impression.donnees.eleve.absences.DepartImpression
+
+/**
+ * Service spécialisé dans le requetage des retards et des départs
+ * @author othe
+ */
+class ImpressionRetardDepartService {
+
+ static transactional = true
+
+ BilanService bilanService
+
+ /**
+ * Retrouve les informations de retards concernant la liste des informations d'éléves
+ *
+ * @author bahj
+ * @param etablissement l'établissement courant
+ * @param criteres les critères de recherche des retrads
+ *
+ */
+ public List<EleveImpressionInfo> findAllInfoRetardDepartEleve(BasicCriteresRecherche criteres,
+ List<EleveImpressionInfo> eleveImpressionInfos,
+ ImpressionRequetageSelection requetageSelection
+ ) {
+
+ if (log.debugEnabled) {
+ log.debug("Recherche des informations de départs anticipés et retards.")
+ }
+
+ eleveImpressionInfos = ImpressionRequetageHelper.gestionDateDebutDateFinRequete(
+ eleveImpressionInfos,
+ criteres
+ )
+
+ eleveImpressionInfos = lectureInformationsDesRetards(
+ criteres,
+ requetageSelection.infoDetailRetards,
+ eleveImpressionInfos)
+
+ eleveImpressionInfos = lectureInformationsDesDeparts(
+ criteres,
+ requetageSelection.infoDetailDeparts,
+ eleveImpressionInfos)
+
+
+ return eleveImpressionInfos
+ }
+
+ private List<EleveImpressionInfo> lectureInformationsDesRetards(BasicCriteresRecherche criteres,
+ boolean ajouteDetailsRetards,
+ List<EleveImpressionInfo> eleveImpressionInfos) {
+
+ criteres.retards = true
+ criteres.departsAnticipes = false
+
+ BilanAbsencesParPersonneInfo resultatsRetard = bilanService.getAbsencesOrRetards(criteres)
+
+ if (ajouteDetailsRetards) {
+ eleveImpressionInfos = addRetardsImpressionInfo(
+ resultatsRetard,
+ eleveImpressionInfos
+ )
+ }
+
+ eleveImpressionInfos = calculeStatRetard(eleveImpressionInfos, resultatsRetard)
+
+ return eleveImpressionInfos
+ }
+
+ private List<EleveImpressionInfo> calculeStatRetard(List<EleveImpressionInfo> eleveImpressionInfos,
+ BilanAbsencesParPersonneInfo resultatsRetard) {
+
+ Map elevesRetard = bilanService.calculeNbRetardsParEleve(resultatsRetard)
+
+ elevesRetard.each {Personne eleve, Integer nbRetards ->
+
+ EleveImpressionInfo impressionInfo =
+ (EleveImpressionInfo) eleveImpressionInfos.find {
+ it.personne == eleve
+ }
+
+ impressionInfo.eleve_NbRetard = nbRetards
+ }
+
+ return eleveImpressionInfos
+ }
+
+ private List<EleveImpressionInfo> lectureInformationsDesDeparts(BasicCriteresRecherche criteres,
+ boolean ajouteDetailsDeparts,
+ List<EleveImpressionInfo> eleveImpressionInfos) {
+
+ criteres.retards = false
+ criteres.departsAnticipes = true
+
+ BilanAbsencesParPersonneInfo resultatsDepart = bilanService.getAbsencesOrRetards(criteres)
+
+ if (ajouteDetailsDeparts) {
+ eleveImpressionInfos = addDepartsImpressionInfo(
+ resultatsDepart,
+ eleveImpressionInfos
+ )
+ }
+
+ eleveImpressionInfos = calculeStatDepart(eleveImpressionInfos, resultatsDepart)
+
+ return eleveImpressionInfos
+ }
+
+ private List<EleveImpressionInfo> calculeStatDepart(List<EleveImpressionInfo> eleveImpressionInfos,
+ BilanAbsencesParPersonneInfo resultatsDepart) {
+
+ Map elevesDepartAnticipe = bilanService.calculeNbDepartAnticipesParEleve(resultatsDepart)
+
+ elevesDepartAnticipe.each {Personne eleve, Integer nbDepartAnticipes ->
+
+ EleveImpressionInfo impressionInfo =
+ (EleveImpressionInfo) eleveImpressionInfos.find {
+ it.personne == eleve
+ }
+
+ impressionInfo.eleve_NbDepAnti = nbDepartAnticipes
+ }
+
+ return eleveImpressionInfos
+ }
+
+ /**
+ * Ajoute les informations des retards et départs des élèves dans les dto
+ *
+ * @author bahj
+ * @param datas les retards et départs des élèves sous la forme :
+ * - l'Appel
+ * - l'AppelLigne
+ * - la StructureEnseignement
+ * - la Personne élève
+ * - l'absenceJournee
+ *
+ */
+ private List<EleveImpressionInfo> addRetardsImpressionInfo(BilanAbsencesParPersonneInfo datas,
+ List<EleveImpressionInfo> eleveImpressionInfos
+ ) {
+
+ datas.eachAbsence { Personne personne, BilanAbsenceInfo bilanAbsenceInfo ->
+
+ EleveImpressionInfo eleveInfo = (EleveImpressionInfo) eleveImpressionInfos.find {
+ it.personne == (Personne) personne
+ }
+
+ if (log.debugEnabled) {
+ log.debug("Ajout d'informations pour l'élève ${eleveInfo.toString()}")
+ }
+
+ AppelLigne appelLigne = bilanAbsenceInfo.appelLigne
+
+ if (appelLigne.retard) {
+
+ if (log.debugEnabled) {
+ log.debug("Ajout d'une ligne de retard.")
+ }
+
+ eleveInfo.retards << new RetardImpression(
+ date: appelLigne.appel ?
+ appelLigne.appel.dateHeureDebut :
+ appelLigne.absenceJournee.date,
+ heureDebut: appelLigne.appel ?
+ DateUtil.formateDate(appelLigne.appel.dateHeureDebut) :
+ DateUtil.formateDate(appelLigne.heureDebut),
+ heureFin: DateUtil.formateDate(appelLigne.heureArrivee),
+ motif: appelLigne.motif.libelle
+ )
+
+ }
+
+ }
+
+ return eleveImpressionInfos
+ }
+
+ /**
+ * Ajoute les informations des retards et départs des élèves dans les dto
+ *
+ * @author bahj
+ * @param datas les retards et départs des élèves sous la forme :
+ * - l'Appel
+ * - l'AppelLigne
+ * - la StructureEnseignement
+ * - la Personne élève
+ * - l'absenceJournee
+ *
+ */
+ private List<EleveImpressionInfo> addDepartsImpressionInfo(BilanAbsencesParPersonneInfo datas,
+ List<EleveImpressionInfo> eleveImpressionInfos
+ ) {
+
+ datas.eachAbsence { Personne personne, BilanAbsenceInfo bilanAbsenceInfo ->
+
+ EleveImpressionInfo eleveInfo = (EleveImpressionInfo) eleveImpressionInfos.find {
+ it.personne == (Personne) personne
+ }
+
+ if (log.debugEnabled) {
+ log.debug("Ajout d'informations pour l'élève ${eleveInfo.toString()}")
+ }
+
+ AppelLigne appelLigne = bilanAbsenceInfo.appelLigne
+
+ if (appelLigne.departAnticipe) {
+
+ if (log.debugEnabled) {
+ log.debug("Ajout de départ anticipé.")
+ }
+
+ eleveInfo.departs << new DepartImpression(
+ date: appelLigne.appel ?
+ appelLigne.appel.dateHeureDebut :
+ appelLigne.absenceJournee.date,
+ heureFin: appelLigne.appel ?
+ DateUtil.formateDate(appelLigne.appel.dateHeureFin) :
+ DateUtil.formateDate(appelLigne.heureFin),
+ heureDebut: DateUtil.formateDate(appelLigne.heureDepart),
+ motif: appelLigne.motif.libelle
+ )
+ }
+ }
+
+ return eleveImpressionInfos
+ }
+
+
+}
import org.lilie.services.eliot.impression.TemplateDocument
import org.lilie.services.eliot.impression.TemplateEliot
import org.lilie.services.eliot.impression.TemplateDocumentSousTemplateEliot
+import org.lilie.services.eliot.impression.AbsenceOptions
/**
* Ce service permet de déterminer quels sont les requetages utiles pour un
static transactional = true
static private final String[] LISTE_VALEURS = [
- "infoAbsences",
- "infoRetards",
- "infoBulletinNotes",
- "infoReleveNotes",
- "infoDetailAbsences",
- "infoDetailRetards"
+ "infoAbsences",
+ "infoRetards",
+ "infoBulletinNotes",
+ "infoReleveNotes",
+ "infoDetailAbsences",
+ "infoDetailRetards"
]
/**
if (!templateDocument) {
throw new IllegalArgumentException(
- "Le modèle de document est null"
+ "Le modèle de document est null"
)
}
ImpressionRequetageSelection impressionRequetageSelection =
- new ImpressionRequetageSelection()
+ new ImpressionRequetageSelection()
// lecture des requetes à lancer pour le template principal
TemplateEliot templatePrincipal = templateDocument.templateEliot
- if (!templatePrincipal){
+ if (!templatePrincipal) {
return impressionRequetageSelection
}
impressionRequetageSelection.ajouteAllSelectionRequete(
- getAllSelectionRequeteForTemplate(templatePrincipal)
+ getAllSelectionRequeteForTemplate(templatePrincipal)
)
// lecture des requetes à lancer pour le template détail
// si on fait evoluer le modèle vers du multiple sous-modèle il faudra
// prévoir de lire une liste de sous-modèles ici
TemplateEliot templateSousEtat =
- TemplateDocumentSousTemplateEliot.findByTemplateDocument(
- templateDocument
- )?.templateEliot
+ TemplateDocumentSousTemplateEliot.findByTemplateDocument(
+ templateDocument
+ )?.templateEliot
if (templateSousEtat) {
impressionRequetageSelection.ajouteAllSelectionRequete(
- getAllSelectionRequeteForTemplate(templateSousEtat)
+ getAllSelectionRequeteForTemplate(templateSousEtat)
)
}
+ if (templateDocument.templateEliot.code == 'LETTRE_ABS_LETTRE_ABSENCES') {
+
+ AbsenceOptions absenceOptions = AbsenceOptions.findByTemplateDocument(templateDocument)
+ if (!templateDocument) {
+ throw new IllegalStateException(
+ "Les paramètres du modèle de lettre d'absence n'existent pas en base"
+ )
+ }
+
+ impressionRequetageSelection.infoDetailAbsences = absenceOptions.tableauAbsences
+ impressionRequetageSelection.infoDetailRetards = absenceOptions.tableauRetards
+ impressionRequetageSelection.infoDetailDeparts = absenceOptions.tableauDeparts
+
+ }
+
return impressionRequetageSelection
}
--- /dev/null
+package org.lilie.services.eliot.impression.requetage
+
+import org.lilie.services.eliot.impression.publipostage.PublipostageAbsencesParams
+import org.lilie.services.eliot.applications.absences.BasicCriteresRecherche
+import org.lilie.services.eliot.temps.DateUtil
+import org.lilie.services.eliot.absences.Motif
+import org.lilie.services.eliot.absences.GroupeMotif
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: oth
+ * Date: 08/09/14
+ * Time: 16:54
+ * To change this template use File | Settings | File Templates.
+ */
+class ParseCriteriaHelper {
+
+ private final static int ABSENCES_VALABLES = 1
+ private final static int ABSENCES_NON_VALABLES = 2
+ private final static int ABSENCES_PREVISIONNELLES = 3
+ private final static int RETARDS = 4
+ private final static int DEPART_ANTICIPE = 5
+ private final static int DEMI_PENSION = 6
+ private final static int INTERNAT = 7
+
+
+ public static PublipostageCriteresRecherche parseCriteriaCommuns(PublipostageAbsencesParams parametresSelectionPublipostage) {
+
+ PublipostageCriteresRecherche result = new PublipostageCriteresRecherche()
+
+ parseCriteriaMotifs(
+ parametresSelectionPublipostage.motifId,
+ parametresSelectionPublipostage.groupeDeMotifId,
+ result)
+
+ parseBilanCriteriaDates(
+ parametresSelectionPublipostage,
+ result
+ )
+
+ parseBilanCriteriaDivisions(
+ parametresSelectionPublipostage.classesId,
+ result
+ )
+
+ parseBilanCriteriaType(
+ parametresSelectionPublipostage.typeAbsenceId,
+ result
+ )
+
+ result.nbLimit = parametresSelectionPublipostage.limitAbsence
+
+ return result
+ }
+
+ /**
+ * Récupère les paramètres de motifs
+ * @param params : les paramètres de la requêtes
+ * @param criteria : le criteria à compléter
+ * @return un BilanCriteria complété avec les motifs
+ * @author jbui
+ */
+ private static void parseCriteriaMotifs(def listeMotifs, listeGroupeMotifs, BasicCriteresRecherche criteria) {
+ if (listeMotifs) {
+ criteria.motifIds = (listeMotifs as String).split(',').collect {
+ Long.parseLong(it)
+ }
+ } else {
+ criteria.motifIds = []
+ }
+ if ((criteria.motifIds.size() > 0) &&
+ (criteria.motifIds[0] == BasicCriteresRecherche.VALEUR_TOUS)) {
+ parseCriteriaGroupeMotifs(listeGroupeMotifs, criteria)
+ }
+ }
+
+ /**
+ * Récupère les paramètres de dates
+ * @param params : les paramètres de la requêtes
+ * @return un BilanCriteria complété avec les dates
+ * @author jbui
+ */
+ private static void parseBilanCriteriaDates(PublipostageAbsencesParams parametresSelectionPublipostage,
+ BasicCriteresRecherche criteria) {
+ String dateDebut = parametresSelectionPublipostage.dateDebut
+ String dateFin = parametresSelectionPublipostage.dateFin
+
+ criteria.dateDebut.setTime(
+ DateUtil.parseDateJavascript(dateDebut)
+ )
+
+ criteria.dateFin.setTime(
+ DateUtil.parseDateJavascript(dateFin)
+ )
+
+ DateUtil.setFinJour(criteria.dateFin)
+ }
+
+/**
+ * Récupère les motifs associés aux groupes de motifs
+ * @param params : les paramètres de la requête
+ * @param bilanCriteria : le BilanCriteria à compléter
+ * @author jbui
+ */
+ private static void parseCriteriaGroupeMotifs(def listeGroupeMotifs,
+ BasicCriteresRecherche bilanCriteria) {
+ List<Long> groupeMotifs
+ if (listeGroupeMotifs) {
+ groupeMotifs = (listeGroupeMotifs as String).split(',').collect {
+ Long.parseLong(it)
+ }
+ } else {
+ groupeMotifs = []
+ }
+ bilanCriteria.motifIds.clear()
+ if ((groupeMotifs.size() > 0) && (groupeMotifs[0] == BasicCriteresRecherche.VALEUR_TOUS)) {
+ bilanCriteria.motifIds << BasicCriteresRecherche.VALEUR_TOUS
+ } else {
+ groupeMotifs.each {
+ bilanCriteria.motifIds.addAll(
+ Motif.findAllByGroupeMotif(
+ GroupeMotif.get(it)
+ )*.id)
+ }
+ }
+ }
+
+ /**
+ * Récupère les paramètres de divisions
+ * @param params : les paramètres de la requêtes
+ * @return un BilanCriteria complété avec les divisions
+ * @author jbui
+ */
+ private static void parseBilanCriteriaDivisions(def listeDivisions, BasicCriteresRecherche criteria) {
+ if (listeDivisions) {
+ criteria.structIds = (listeDivisions as String).split(',').collect {
+ Long.parseLong(it)
+ }
+ } else {
+ criteria.structIds = []
+ }
+ }
+
+ /**
+ * Récupère les paramètres de type
+ * @param params : les paramètres de la requêtes
+ * @return un BilanCriteria complété avec les types
+ * @author jbui
+ * @author bahj
+ */
+ private static void parseBilanCriteriaType(def listeTypes, BasicCriteresRecherche criteria) {
+ List<Integer> typesEnInt
+ if (listeTypes) {
+ typesEnInt = (listeTypes as String).split(',').collect {
+ Integer.parseInt((String) it)
+ }
+ } else {
+ typesEnInt = []
+ }
+ if (typesEnInt.contains(BasicCriteresRecherche.VALEUR_TOUS as Integer)) {
+ criteria.setTousTypes(true)
+ }
+ else {
+ criteria.setTousTypes(false)
+ for (int type : typesEnInt) {
+ switch (type) {
+ case ABSENCES_VALABLES:
+ criteria.absencesValables = true
+ break
+
+ case ABSENCES_NON_VALABLES:
+ criteria.absencesNonValables = true
+ break
+
+ case ABSENCES_PREVISIONNELLES:
+ criteria.absencesPrevisionnelles = true
+ break
+
+ case RETARDS:
+ criteria.retards = true
+ break
+
+ case DEPART_ANTICIPE:
+ criteria.departsAnticipes = true
+ break
+
+ case DEMI_PENSION:
+ criteria.demiPension = true
+ break
+
+ case INTERNAT:
+ criteria.internat = true
+ break
+
+ }
+ }
+ }
+ }
+
+
+}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.template
+
+import org.lilie.services.eliot.impression.ListeParametresImpression
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.TemplateDocumentSousTemplateEliot
+import org.lilie.services.eliot.impression.TemplateJasper
+import net.sf.jasperreports.engine.JasperReport
+import org.lilie.services.eliot.impression.ImpressionServiceException
+import org.lilie.services.eliot.impression.constantes.ConfigImpression
+import net.sf.jasperreports.engine.design.JasperDesign
+import net.sf.jasperreports.engine.xml.JRXmlLoader
+import org.lilie.services.eliot.impression.TemplateEliot
+import org.lilie.services.eliot.impression.AbsenceOptions
+import org.lilie.services.eliot.impression.template.absence.TypeTableauEnum
+import org.lilie.services.eliot.impression.template.fonte.ImpressionPoliceService
+import org.lilie.services.eliot.impression.template.bulletin.ImpressionBulletinTemplateService
+import org.lilie.services.eliot.impression.constantes.TemplateDocumentEnum
+import net.sf.jasperreports.engine.util.JRLoader
+import org.lilie.services.eliot.impression.template.bulletin.option.BulletinOptionsPersonnalise
+
+class ImpressionChargeurModeleService {
+
+ private static final String MODELE_LETTRE_ABSENCES = "LETTRE_ABS_LETTRE_ABSENCES"
+ private static final String TAB_ABSENCES = "ABS_TABLEAU"
+ private static final String LISTE_ABSENCES = "ABS_TEXTE"
+ private static final String TAB_RETARDS = "RET_TABLEAU"
+ private static final String LISTE_RETARDS = "RET_TEXTE"
+ private static final String TAB_DEPARTS = "DEP_TABLEAU"
+ private static final String LISTE_DEPARTS = "DEP_TEXTE"
+ private static final String NOM_CHAMP_CORPS_LETTRE = "textCorpsDeLettre"
+
+ ImpressionPoliceService impressionPoliceService
+ ImpressionBulletinTemplateService impressionBulletinTemplateService
+
+ /**
+ * Modifie la liste des paramètres avec une nouvelle valeur de paramètre
+ * @param templateDocument : modèle concerné
+ * @param parameters : liste de paramètres
+ * @param nom : nom du paramètre dans la liste
+ * @param parametre : nouvelle valeur
+ * @return la liste modifiée
+ */
+ public ListeParametresImpression affecteParametre(TemplateDocument templateDocument,
+ ListeParametresImpression parameters,
+ String nom,
+ Object parametre) {
+
+ String jrxml = templateDocument.templateEliot.templateJasper.jrxml
+
+ if (jrxml == null) {
+ throw new ImpressionServiceException(
+ "Aucun template jrxml pour template utilisateur ${templateDocument}"
+ )
+ }
+
+ ByteArrayInputStream is = new ByteArrayInputStream(
+ jrxml.getBytes(ConfigImpression.DEFAULT_ENCODING)
+ )
+
+ JasperDesign jasperDesign = JRXmlLoader.load(is)
+
+ if (jasperDesign.parametersMap.get(nom)) {
+ parameters.put(
+ nom,
+ parametre
+ )
+ }
+
+ return parameters
+ }
+
+
+
+ public ListeParametresImpression findParametresTemplateDocument(TemplateDocument templateDocument, Object options) {
+
+ switch (templateDocument.templateEliot.code) {
+
+ case MODELE_LETTRE_ABSENCES:
+ return findParametresAbsences(templateDocument)
+ break
+
+ default:
+ return findParametresGeneriqueTemplateDocument(templateDocument, options)
+ }
+ }
+
+ /**
+ * Création d'un objet paramètre d'impression pour les absences
+ */
+ private ListeParametresImpression findParametresAbsences(TemplateDocument templateDocument) {
+
+ ListeParametresImpression resultat = new ListeParametresImpression()
+
+ Integer taillePolice = impressionPoliceService.findTaillePoliceMemo(templateDocument, NOM_CHAMP_CORPS_LETTRE)
+ String police = templateDocument.police
+
+ AbsenceOptions absenceOptions = AbsenceOptions.findByTemplateDocument(templateDocument)
+
+ if (!absenceOptions) {
+ throw new IllegalArgumentException("Le paramètre options est obligatoire")
+ }
+
+ switch (absenceOptions.typeTableau) {
+ case TypeTableauEnum.TABLEAU.toString():
+ chargeSousModele(resultat, TAB_ABSENCES, "tableauAbsences", police, taillePolice)
+ chargeSousModele(resultat, TAB_RETARDS, "tableauRetards", police, taillePolice)
+ chargeSousModele(resultat, TAB_DEPARTS, "tableauDeparts", police, taillePolice)
+ break
+ case TypeTableauEnum.TEXTE.toString():
+ chargeSousModele(resultat, LISTE_ABSENCES, "tableauAbsences", police, taillePolice)
+ chargeSousModele(resultat, LISTE_RETARDS, "tableauRetards", police, taillePolice)
+ chargeSousModele(resultat, LISTE_DEPARTS, "tableauDeparts", police, taillePolice)
+ break
+ default:
+ throw new IllegalStateException("Le typeTableau n'est pas correctement initialisé.")
+ }
+ return resultat
+ }
+
+ /**
+ * Permet d'affecter un modèle d'impression à l'objet parametre d'impression
+ * @param resultat : objet paramètre d'impression
+ * @param code : code du modèle jasper/eliot à charger
+ * @param paramName : nom du paramètre à affecté
+ * @return objet paramètre d'impression
+ */
+ private ListeParametresImpression chargeSousModele(ListeParametresImpression resultat,
+ String code,
+ String paramName,
+ String police,
+ Integer taille) {
+
+ TemplateEliot templateEliot = TemplateEliot.findByCode(code)
+
+ if (!templateEliot) {
+ throw new IllegalArgumentException("On doit passer un code connu en base à la méthode chargeSousModele - $code")
+ }
+
+ TemplateJasper templateJasper = templateEliot.templateJasper
+
+ JasperReport jasperReport = chargeModeleJasperParDefaut(templateJasper)
+
+ impressionPoliceService.modificationPoliceJasper(jasperReport, police, taille)
+
+ resultat.put(
+ paramName,
+ jasperReport
+ )
+
+ return resultat
+ }
+
+ /**
+ * Lecture des modèles jasper en base et préparation des paramètres pour jasperReport
+ * @return Liste des paramètres sous la forme nom=objet
+ * nom est de type string et object contient un objet JasperReport
+ */
+ public ListeParametresImpression findParametresGeneriqueTemplateDocument(TemplateDocument templateDocument, Object options) {
+
+ ListeParametresImpression parameters = new ListeParametresImpression()
+
+ // set les parametres correspondant au sous template
+ List<TemplateDocumentSousTemplateEliot> docSsTemplatesEliot =
+ TemplateDocumentSousTemplateEliot.findAllByTemplateDocument(templateDocument)
+
+ docSsTemplatesEliot.each {
+ TemplateDocumentSousTemplateEliot templateDocumentSousTemplateEliot ->
+
+ parameters = chargeSousModele(
+ parameters,
+ templateDocument,
+ templateDocumentSousTemplateEliot,
+ options)
+
+ }
+ return parameters
+ }
+
+ private ListeParametresImpression chargeSousModele(ListeParametresImpression parameters,
+ TemplateDocument templateDocument,
+ TemplateDocumentSousTemplateEliot templateDocumentSousTemplateEliot,
+ Object options) {
+
+ TemplateJasper currentTemplateJasper =
+ templateDocumentSousTemplateEliot.templateEliot?.templateJasper
+
+ String premierParametre = templateDocumentSousTemplateEliot.param
+
+ if (log.debugEnabled) {
+ log.debug("Chargement sous-modèle racine " + premierParametre)
+ }
+
+ JasperReport jasperReportSousModele = binaryTemplateJasperFactory(
+ templateDocument,
+ currentTemplateJasper,
+ options
+ )
+
+ parameters.put(
+ premierParametre,
+ jasperReportSousModele
+ )
+
+ currentTemplateJasper = currentTemplateJasper.sousTemplate
+
+ while (currentTemplateJasper) {
+
+ if (log.debugEnabled) {
+ log.debug("Chargement sous-modèle du sous-modèle" + templateDocumentSousTemplateEliot.param)
+ }
+
+ JasperReport jasperReport = binaryTemplateJasperFactory(
+ templateDocument,
+ currentTemplateJasper,
+ options
+ )
+
+ parameters.put(
+ currentTemplateJasper.param,
+ jasperReport
+ )
+
+ currentTemplateJasper = currentTemplateJasper.sousTemplate
+
+ }
+ parameters
+ }
+
+ /**
+ * Permet de récupérer un modèle de document par rapport à son code. Ce modèle doit exister en base
+ */
+ public TemplateDocument getTemplateDocument(String codeTemplateDocument) {
+
+ TemplateDocument templateDocument = TemplateDocument.findByCode(
+ codeTemplateDocument
+ )
+
+ if (!templateDocument) {
+ throw new IllegalStateException("Le modèle $codeTemplateDocument n'existe pas en base.")
+ }
+ templateDocument
+
+ }
+
+ /**
+ * Lecture des données binaires compilés
+ */
+ public JasperReport binaryTemplateJasperFactory(TemplateDocument templateDocument,
+ TemplateJasper currentTemplateJasper,
+ Object options
+ ) {
+
+ if (templateDocument.systeme) {
+ if (templateDocument.code != TemplateDocumentEnum.BULLETIN_NOTES_1.toString()) {
+ return chargeModeleJasperParDefaut(currentTemplateJasper)
+ }
+ }
+
+ JasperReport jasperReport = modifieModeleJasper(
+ templateDocument,
+ currentTemplateJasper,
+ options
+ )
+
+ return jasperReport
+ }
+
+ /**
+ * Lecture du modele jasper pré-compilé en base
+ */
+ public JasperReport chargeModeleJasperParDefaut(TemplateJasper currentTemplateJasper) {
+ ByteArrayInputStream modeleBinaire = new ByteArrayInputStream(
+ currentTemplateJasper.jasper
+ )
+ return (JasperReport) JRLoader.loadObject(modeleBinaire)
+ }
+
+ /**
+ * Modification du modele jasper fourni pour les taille de fonte et les fontes
+ */
+ private JasperReport modifieModeleJasper(TemplateDocument templateDocument,
+ TemplateJasper currentTemplateJasper,
+ Object options) {
+
+ // on récupère le modèle en base
+ JasperReport jasperReport = chargeModeleJasperParDefaut(currentTemplateJasper)
+
+ // Dans le cas du bulletin on applique les options d'impression
+ if (impressionBulletinTemplateService.isModeleBulletin(templateDocument)
+ &&
+ (currentTemplateJasper.param)) {
+
+ BulletinOptionsPersonnalise bulletinOptionsPersonnalise = (BulletinOptionsPersonnalise) options
+
+ impressionBulletinTemplateService.modifierTemplate(
+ jasperReport,
+ templateDocument,
+ currentTemplateJasper,
+ bulletinOptionsPersonnalise
+ )
+
+ }
+
+ // pour tous les modèles on appliques les options de mise en page des documents
+ return impressionPoliceService.modifierTemplate(
+ jasperReport,
+ templateDocument,
+ currentTemplateJasper
+ )
+
+ }
+
+
+}
import org.lilie.services.eliot.notes.BulletinOptions
import org.lilie.services.eliot.impression.PublipostageSuivi
import java.text.SimpleDateFormat
-//import org.lilie.services.eliot.requetage.RequetageUtilsService
-//import org.hibernate.SQLQuery
+import org.lilie.services.eliot.impression.template.absence.ParametrageLettreAbsenceService
-//class ImpressionTemplateDocumentService extends RequetageUtilsService {
+import org.lilie.services.eliot.impression.AbsenceOptions
+import org.lilie.services.eliot.impression.template.absence.TypeTableauEnum
class ImpressionTemplateDocumentService {
+ private static final String MODELE_LETTRE_ABSENCES = "LETTRE_ABS_LETTRE_ABSENCES"
+
ImpressionModeleContenuService impressionModeleContenuService
SessionFactory sessionFactory
public TemplateDocument creeTemplateDocumentSms(TypeMedia typeMedia,
Integer modeleSmsId,
Etablissement etablissement,
- String nom,
- String descriptif = null
+ String nom
) {
TemplateDocument templateDocument = new TemplateDocument(
nom: nom,
etablissement: etablissement,
- descriptif: descriptif,
media: typeMedia.code,
systeme: false,
templateEliot: null,
return templateDocument
}
+ ParametrageLettreAbsenceService parametrageLettreAbsenceService
+
/**
* Création d'un nouveau template utilisateur
* @param typeMedia le type de media
* @param etablissement l'établissement
* @param nom le nom du template
- * @param descriptif le descriptif (null par defaut)
* @throws ImpressionServiceException si la creation echoue
* @return le template cree
*/
public TemplateDocument creeTemplateDocument(TypeMedia typeMedia,
Etablissement etablissement,
String nom,
- String descriptif = null,
TemplateEliot templateEliot = null
)
throws ImpressionServiceException {
TemplateDocument templateDocument = new TemplateDocument(
nom: nom,
etablissement: etablissement,
- descriptif: descriptif,
media: typeMedia.code,
systeme: false,
templateEliot: templateEliot,
templateDocument.save(flush: true, failOnError: true)
}
+ if (templateEliot.code == MODELE_LETTRE_ABSENCES) {
+ parametrageLettreAbsenceService.save(templateDocument, true, false, false, TypeTableauEnum.TABLEAU)
+ }
+
return templateDocument
} else {
*/
public TemplateDocument modifieTemplateDocument(TemplateDocument templateDocument,
String nom,
- String police,
- String descriptif = null)
+ String police)
throws ImpressionServiceException {
try {
templateDocument.police = police
}
- if (descriptif) {
- templateDocument.descriptif = descriptif
- }
-
templateDocument.nom = nom
if (templateDocument.validate()) {
bulletinOptions.delete(flush: true)
}
+ AbsenceOptions absenceOptions =
+ AbsenceOptions.findByTemplateDocument(templateDocument)
+
+ if (absenceOptions) {
+ absenceOptions.delete(flush: true)
+ }
+
templateDocument.delete(flush: true)
sessionFactory.currentSession.clear()
return result
}
-/**
- * Teste que le modèle existe dans une liste de modèles
- * @param code : code du modèle recherché
- * @param templateEliots : liste de modèles
- * @return le modèloe recherché
- */
+ /**
+ * Teste que le modèle existe dans une liste de modèles
+ * @param code : code du modèle recherché
+ * @param templateEliots : liste de modèles
+ * @return le modèloe recherché
+ */
public TemplateDocument findTemplateDocumentInList(String code,
List<TemplateDocument> templateDocuments) {
return (TemplateDocument) templateDocuments.find {
}
}
-/**
- * Liste des modèles de sms pour l'établissement
- */
+ /**
+ * Liste des modèles de sms pour l'établissement
+ */
public List<TemplateDocument> findAllTemplateDocumentSms(Etablissement etablissement) {
List<TemplateDocument> reponse = TemplateDocument.withCriteria {
+++ /dev/null
-package org.lilie.services.eliot.impression.template
-
-import net.sf.jasperreports.engine.JasperReport
-import net.sf.jasperreports.engine.util.JRLoader
-import org.lilie.services.eliot.impression.TemplateDocument
-import org.lilie.services.eliot.impression.TemplateJasper
-import org.lilie.services.eliot.impression.template.bulletin.ImpressionBulletinTemplateService
-import org.lilie.services.eliot.impression.template.bulletin.option.BulletinOptionsPersonnalise
-import org.lilie.services.eliot.impression.template.fonte.ImpressionPoliceService
-import org.lilie.services.eliot.impression.constantes.TemplateDocumentEnum
-
-/**
- * Ce service permet de fournir les modèles jasper correspondant au modèle eliot. En fait on a maintenant
- * des modèles stockés en base susceptible d'être modifié en fonction de paramètre provenant de différentes
- * origines (fonte et taille, options d'impression)
- * @author othe
- */
-class ImpressionTemplateFactoryService {
-
- ImpressionPoliceService impressionPoliceService
- ImpressionBulletinTemplateService impressionBulletinTemplateService
-
- /**
- * Lecture des données binaires compilés
- */
- public JasperReport binaryTemplateJasperFactory(TemplateDocument templateDocument,
- TemplateJasper currentTemplateJasper,
- Object options
- ) {
-
- if (templateDocument.systeme) {
- if (templateDocument.code != TemplateDocumentEnum.BULLETIN_NOTES_1.toString()) {
- return chargeModeleJasperParDefaut(currentTemplateJasper)
- }
- }
-
- JasperReport jasperReport = modifieModeleJasper(
- templateDocument,
- currentTemplateJasper,
- options
- )
-
- return jasperReport
- }
-
- /**
- * Lecture du modele jasper pré-compilé en base
- */
- public JasperReport chargeModeleJasperParDefaut(TemplateJasper currentTemplateJasper) {
- ByteArrayInputStream modeleBinaire = new ByteArrayInputStream(
- currentTemplateJasper.jasper
- )
- return (JasperReport) JRLoader.loadObject(modeleBinaire)
- }
-
- /**
- * Modification du modele jasper fourni pour les taille de fonte et les fontes
- */
- private JasperReport modifieModeleJasper(TemplateDocument templateDocument,
- TemplateJasper currentTemplateJasper,
- Object options) {
-
- // on récupère le modèle en base
- JasperReport jasperReport = chargeModeleJasperParDefaut(currentTemplateJasper)
-
- // Dans le cas du bulletin on applique les options d'impression
- if (impressionBulletinTemplateService.isModeleBulletin(templateDocument)
- &&
- (currentTemplateJasper.param)) {
-
- BulletinOptionsPersonnalise bulletinOptionsPersonnalise = (BulletinOptionsPersonnalise) options
-
- impressionBulletinTemplateService.modifierTemplate(
- jasperReport,
- templateDocument,
- currentTemplateJasper,
- bulletinOptionsPersonnalise
- )
-
- }
-
- // pour tous les modèles on appliques les options de mise en page des documents
- return impressionPoliceService.modifierTemplate(
- jasperReport,
- templateDocument,
- currentTemplateJasper
- )
-
- }
-
-
-}
import net.sf.jasperreports.engine.base.JRBaseTextField
import net.sf.jasperreports.engine.JRExpression
import net.sf.jasperreports.engine.JRElement
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.constantes.TemplateEliotEnum
/**
* Contient des fonctions de base pour manipuler des modèles jasper
* recherche un élément par sa clé jasper (key) dans le bandeau jasper
* Cet élément doit exister dans le modèle
*/
- public JRElement getElementByKey(JRBand jrBand, String key) {
+ public JRElement getElementByKey(JRBand jrBand, String key) {
- JRElement element = jrBand.getElementByKey(key)
- return element
+ JRElement element = jrBand.getElementByKey(key)
+ return element
+ }
+
+ /**
+ * Indique si le modèle est un modèle d'absences
+ * @param templateDocument
+ * @return
+ */
+ public Boolean isModeleAbsences(TemplateDocument templateDocument) {
+
+ if (!templateDocument) {
+ throw new IllegalArgumentException("Le modèle de document est obligatoire.")
}
+ String code = templateDocument?.templateEliot?.code
+
+ return (code == TemplateEliotEnum.LETTRE_ABS_LETTRE_ABSENCES.toString()) ||
+ (code == TemplateEliotEnum.LETTRE_RET_LETTRE_RETARDS.toString())
+
+ }
}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.template.absence
+
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.AbsenceOptions
+
+/**
+ * Permet de gérer l'enregistrement des paramètres des modèles absences en base
+ * @author othe
+ */
+class ParametrageLettreAbsenceService {
+
+ public AbsenceOptions findByTemplate(TemplateDocument templateDocument) {
+ return AbsenceOptions.findByTemplateDocument(templateDocument)
+ }
+
+ public AbsenceOptions save(TemplateDocument templateDocument,
+ Boolean absences,
+ Boolean retards,
+ Boolean departs,
+ TypeTableauEnum typeTableau) {
+
+ AbsenceOptions absenceOptions = findByTemplate(templateDocument)
+
+ if (absenceOptions) {
+
+ absenceOptions.tableauAbsences = absences
+ absenceOptions.tableauDeparts = departs
+ absenceOptions.tableauRetards = retards
+ absenceOptions.typeTableau = typeTableau.toString()
+
+ } else {
+
+ absenceOptions = new AbsenceOptions(
+ templateDocument: templateDocument,
+ tableauAbsences: absences,
+ tableauDeparts: departs,
+ tableauRetards: retards,
+ typeTableau: typeTableau.toString()
+ )
+ }
+
+ absenceOptions.save(failOnError: true, flush: true)
+
+ return absenceOptions
+ }
+}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.impression.template.absence
+
+/**
+ * Type de sous-modèles pour les lettres d'absences
+ * @author othe
+ */
+public enum TypeTableauEnum {
+ TEXTE,
+ TABLEAU
+}
\ No newline at end of file
) {
- if (log.infoEnabled) {log.info("Changement police")}
+ if (log.infoEnabled) {
+ log.info("Changement police")
+ }
+
modifierPolice(jasperReport, templateDocument)
- if (log.infoEnabled) {log.info("Changement taille police")}
+
+ if (log.infoEnabled) {
+ log.info("Changement taille police")
+ }
+
modifierTaille(jasperReport, templateDocument)
return jasperReport
}
private void modifierPolice(JasperReport jasperReport, TemplateDocument templateDocument) {
+ modificationPoliceJasper(jasperReport, templateDocument.police)
+ }
+
+ private void modificationPoliceJasper(JasperReport jasperReport, String police) {
JRSection section = jasperReport.detailSection
// change la police sur le modele
- if (templateDocument.police) {
+ if (police) {
section.bands.each { JRBand jrBand1 ->
setFontName(
jrBand1,
- templateDocument.police
+ police
)
}
setFontName(
jasperReport.getColumnHeader(),
- templateDocument.police
+ police
)
setFontName(
jasperReport.getColumnFooter(),
- templateDocument.police
+ police
)
}
+ }
+
+ public void modificationPoliceJasper(JasperReport jasperReport, String police, Integer taillePolice) {
+ JRSection section = jasperReport.detailSection
+
+ // change la police sur le modele
+ if (police) {
+ section.bands.each { JRBand jrBand1 ->
+ setFontName(
+ jrBand1,
+ police
+ )
+
+ setTaillePolice(
+ jrBand1,
+ taillePolice
+ )
+ }
+
+ setFontName(
+ jasperReport.getColumnHeader(),
+ police
+ )
+
+ setTaillePolice(
+ jasperReport.getColumnHeader(),
+ taillePolice
+ )
+
+ setFontName(
+ jasperReport.getColumnFooter(),
+ police
+ )
+
+ setTaillePolice(
+ jasperReport.getColumnFooter(),
+ taillePolice
+ )
+
+ }
}
private void modifierTaille(JasperReport jasperReport, TemplateDocument templateDocument) {
+
List<TemplateChampMemo> allTaillePolice = findAllTaillePoliceMemo(templateDocument)
if (allTaillePolice) {
if (fontName) {
switch (element.getClass()) {
+
case JRBaseTextField:
JRBaseTextField baseTextField = (JRBaseTextField) element
}
+ public void setTaillePolice(JRBand jrBand, Integer fontSize) {
+
+ if (jrBand) {
+
+ jrBand.children.each {
+ JRElement element ->
+ setFontSize(element, fontSize)
+ }
+
+ }
+
+ }
+
/**
* Modifie les fontes sur une bande
*/
return resultat
}
+ /**
+ * Retrouve la taille de police d'un champ mémo
+ */
+ public Integer findTaillePoliceMemo(TemplateDocument templateDocument, String memo) {
+
+ Integer resultat = 8
+
+ TemplateChampMemo champMemo = TemplateChampMemo.findByTemplateDocumentAndChamp(templateDocument, memo)
+
+ if (champMemo.size) {
+ resultat = champMemo.size
+ }
+
+ return resultat
+ }
+
/**
* Modification de la taille des polices dans les champs memo
*/
import org.lilie.services.eliot.impression.utils.ChampMemosResolver
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.notes.BulletinOptions
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
class ImpressionMoteurServiceTests extends GroovyTestCase {
--- /dev/null
+<!--
+ ~ Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ ~ This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ ~
+ ~ Lilie is free software. You can redistribute it and/or modify since
+ ~ you respect the terms of either (at least one of the both license) :
+ ~ - under the terms of the GNU Affero General Public License as
+ ~ published by the Free Software Foundation, either version 3 of the
+ ~ License, or (at your option) any later version.
+ ~ - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ ~ License, or any later version
+ ~
+ ~ There are special exceptions to the terms and conditions of the
+ ~ licenses as they are applied to this software. View the full text of
+ ~ the exception in file LICENSE.txt in the directory of this software
+ ~ distribution.
+ ~
+ ~ Lilie is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ~ Licenses for more details.
+ ~
+ ~ You should have received a copy of the GNU General Public License
+ ~ and the CeCILL-C along with Lilie. If not, see :
+ ~ <http://www.gnu.org/licenses/> and
+ ~ <http://www.cecill.info/licences.fr.html>.
+ -->
+
+<databaseChangeLog
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
+
+ <changeSet id="1" author="othe">
+ <comment>
+ Création de la séquence pour la table des modèles d'absences paramétrées
+ </comment>
+
+ <sql>
+ CREATE SEQUENCE impression.absence_options_id_seq
+ INCREMENT 1
+ MINVALUE 1
+ MAXVALUE 9223372036854775807
+ START 1
+ CACHE 1;
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="2" author="othe">
+ <comment>
+ Création de la table des modèles d'absences paramétrées
+ </comment>
+
+ <sql>
+ CREATE TABLE impression.absence_options
+ (
+ id bigserial NOT NULL,
+ template_document_id bigint NOT NULL,
+ tableau_absences boolean NOT NULL,
+ tableau_retards boolean NOT NULL,
+ tableau_departs boolean NOT NULL,
+ type_tableau character varying(50) NOT NULL,
+ CONSTRAINT pk_absence_options PRIMARY KEY (id),
+ CONSTRAINT fk_absence_options_template_document_id FOREIGN KEY (template_document_id)
+ REFERENCES impression.template_document (id) MATCH SIMPLE
+ ON UPDATE NO ACTION ON DELETE NO ACTION
+ )
+ </sql>
+
+ </changeSet>
+
+
+</databaseChangeLog>
\ No newline at end of file
--- /dev/null
+<!--
+ ~ Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ ~ This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ ~
+ ~ Lilie is free software. You can redistribute it and/or modify since
+ ~ you respect the terms of either (at least one of the both license) :
+ ~ - under the terms of the GNU Affero General Public License as
+ ~ published by the Free Software Foundation, either version 3 of the
+ ~ License, or (at your option) any later version.
+ ~ - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ ~ License, or any later version
+ ~
+ ~ There are special exceptions to the terms and conditions of the
+ ~ licenses as they are applied to this software. View the full text of
+ ~ the exception in file LICENSE.txt in the directory of this software
+ ~ distribution.
+ ~
+ ~ Lilie is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ~ Licenses for more details.
+ ~
+ ~ You should have received a copy of the GNU General Public License
+ ~ and the CeCILL-C along with Lilie. If not, see :
+ ~ <http://www.gnu.org/licenses/> and
+ ~ <http://www.cecill.info/licences.fr.html>.
+ -->
+
+<databaseChangeLog
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
+
+ <changeSet id="1" author="othe">
+ <comment>
+ Suppression colonnes obsolètes
+ </comment>
+
+ <sql>
+ ALTER TABLE impression.template_document
+ DROP COLUMN descriptif
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="2" author="othe">
+ <comment>
+ Suppression colonnes obsolètes
+ </comment>
+
+ <sql>
+ ALTER TABLE impression.template_eliot
+ DROP COLUMN descriptif
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="3" author="othe">
+ <comment>
+ Création des enregistrements pour les options des lettre d'absences
+ </comment>
+
+ <sql>
+ INSERT INTO impression.absence_options (
+ template_document_id,
+ tableau_absences,
+ tableau_retards,
+ tableau_departs,
+ type_tableau )
+ (
+ (
+ SELECT
+ td.id AS template_document_id,
+ TRUE AS tableau_absences,
+ FALSE AS tableau_retards,
+ FALSE AS tableau_departs,
+ CASE
+ WHEN ste.code = 'LETTRE_ABS_TAB_ABSENCES_1' THEN 'TABLEAU'
+ ELSE 'TEXTE'
+ END AS type_tableau
+ FROM
+ impression.template_document td INNER JOIN impression.template_eliot te ON td.template_eliot_id = te.id INNER JOIN impression.template_document_sous_template_eliot st ON st.template_document_id = td.id INNER JOIN impression.template_eliot ste ON st.template_eliot_id = ste.id
+ WHERE
+ td.systeme = FALSE
+ AND te.code = 'LETTRE_ABS_LETTRE_ABSENCES' )
+ UNION (
+ SELECT
+ td.id AS template_document_id,
+ FALSE AS tableau_absences,
+ TRUE AS tableau_retards,
+ FALSE AS tableau_departs,
+ CASE
+ WHEN ste.code = 'LETTRE_RET_TAB_RETARDS1' THEN 'TABLEAU'
+ ELSE 'TEXTE'
+ END AS type_tableau
+ FROM
+ impression.template_document td INNER JOIN impression.template_eliot te ON td.template_eliot_id = te.id INNER JOIN impression.template_document_sous_template_eliot st ON st.template_document_id = td.id INNER JOIN impression.template_eliot ste ON st.template_eliot_id = ste.id
+ WHERE
+ td.systeme = FALSE
+ AND te.code = 'LETTRE_RET_LETTRE_RETARDS' ) )
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="4" author="othe">
+
+ <comment>
+ On supprime les anciens sous-modèles pour les abscences et les retards
+ </comment>
+
+ <sql>
+ delete from impression.template_document_sous_template_eliot st
+ where st.template_document_id in(
+ SELECT
+ td.id
+ FROM
+ impression.template_document td
+ INNER JOIN impression.template_eliot te ON td.template_eliot_id = te.id
+ WHERE
+ td.systeme = FALSE
+ AND ((te.code = 'LETTRE_ABS_LETTRE_ABSENCES') or(te.code = 'LETTRE_RET_LETTRE_RETARDS'))
+ )
+
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="5" author="othe">
+ <comment>
+ On transforme les modèles de retards en modèles d'absences
+ </comment>
+ <sql>
+ with
+ liste as (
+ select td.id as id from
+ impression.template_document td
+ inner join impression.template_eliot te on te.id=td.template_eliot_id and te.code='LETTRE_RET_LETTRE_RETARDS'
+ ),
+
+ id_abs as(
+ select
+ te.id
+ FROM
+ impression.template_eliot te
+ WHERE
+ te.code = 'LETTRE_ABS_LETTRE_ABSENCES'
+ )
+
+ update impression.template_document
+ set template_eliot_id = (select id from id_abs)
+ where id in (select * from liste)
+
+ </sql>
+
+ </changeSet>
+
+ <changeSet id="6" author="othe">
+ <comment>
+ On supprime le template des retards
+ </comment>
+ <sql>
+ delete
+ FROM
+ impression.template_eliot te
+ WHERE
+ te.code = 'LETTRE_RET_LETTRE_RETARDS'
+ </sql>
+
+ </changeSet>
+
+
+</databaseChangeLog>
\ No newline at end of file
<include file="changelogs/scolarite/2014-08-25-0038181.xml"/>
<include file="changelogs/securite/2014-08-01-0038318.xml"/>
<include file="changelogs/scolarite/2014-08-26-0038177.xml"/>
+ <include file="changelogs/scolarite/2014-09-03-0038178.xml"/>
+ <include file="changelogs/scolarite/2014-09-04-0038178.xml"/>
+
</databaseChangeLog>
import org.lilie.services.eliot.demon.impl.DefaultDemandeTraitementService
import org.lilie.services.eliot.CustomPropertyEditorRegistrar
-import org.lilie.services.eliot.absences.publipostage.PublipostageRequetageAbsencesService
+import org.lilie.services.eliot.absences.impression.publipostage.PublipostageRequetageAbsencesService
import org.codehaus.groovy.grails.commons.ConfigurationHolder
import org.lilie.services.eliot.stockage.FileDataStoreService
import org.lilie.services.eliot.jdbchook.EliotDataSourceBeanProcessor
impressionSelectionRequeteService = ref("impressionSelectionRequeteService")
motifService = ref("motifService")
impressionRequetageSanctionPunitionService = ref("impressionRequetageSanctionPunitionService")
-
+ impressionRetardDepartService = ref("impressionRetardDepartService")
}
fileDataStoreService(FileDataStoreService) { bean ->
package org.lilie.services.eliot.absences.consultation
import org.lilie.services.eliot.absences.AbsencesFonctionnalite
-import org.lilie.services.eliot.absences.impression.ImpressionCsvAbsencesService
+import org.lilie.services.eliot.absences.impression.moteur.ImpressionCsvAbsencesService
import grails.converters.JSON
import org.lilie.services.eliot.export.TypeDonneesExport
* <http://www.cecill.info/licences.fr.html>.
*/
-
-
-
-
package org.lilie.services.eliot.absences.maintenance
import org.lilie.services.eliot.absences.statistiques.mensuelle.ModeCalcul
import org.lilie.services.eliot.securite.AutorisationException
import org.lilie.services.eliot.impression.constantes.TemplateDocumentEnum
-import org.lilie.services.eliot.impression.ImpressionMoteurService
import org.lilie.services.eliot.absences.AbstractAbsencesController
import org.lilie.services.eliot.absences.archivage.ArchivageRequetageService
import grails.converters.JSON
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
import org.lilie.services.eliot.parametrages.calendrier.CalendrierService
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
+import org.lilie.services.eliot.impression.moteur.ImpressionArchiveService
class MaintenanceRapportsController extends AbstractAbsencesController {
- ImpressionMoteurService impressionMoteurService
ArchivageRequetageService archivageRequetageService
CalendrierService calendrierService
LocalStructureEnseignementService localStructureEnseignementService
+ ImpressionArchiveService impressionArchiveService
def index = {
InputStream is = new ByteArrayInputStream(donnees.bytes)
is.reset()
- ByteArrayOutputStream documentPDF = impressionMoteurService.creeArchiveFromJSON(
+ ByteArrayOutputStream documentPDF = impressionArchiveService.creeArchiveFromJSON(
etablissementCourant(),
templateDocumentEnum.toString(),
classe,
import org.lilie.services.eliot.urllabel.breadcrumbs.BreadCrumbsItemInfo
import org.lilie.services.eliot.urllabel.UrlLabelInfo
import org.lilie.services.eliot.impression.constantes.TypeMedia
-import org.lilie.services.eliot.absences.publipostage.PublipostageDirectService
-import org.lilie.services.eliot.absences.publipostage.PublipostageDiffereService
+import org.lilie.services.eliot.absences.impression.publipostage.PublipostageDirectService
+import org.lilie.services.eliot.absences.impression.publipostage.PublipostageDiffereService
import org.lilie.services.eliot.impression.constantes.TemplateTypeFonctionnaliteEnum
import org.lilie.services.eliot.absences.AbsencesFonctionnalite
import org.lilie.services.eliot.absences.Motif
import org.lilie.services.eliot.absences.AbsencesFonctionnalite
import grails.converters.JSON
import org.lilie.services.eliot.absences.consultation.AbstractConsultationController
-import org.lilie.services.eliot.absences.impression.ImpressionCsvAbsencesService
+import org.lilie.services.eliot.absences.impression.moteur.ImpressionCsvAbsencesService
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
/**
-package org.lilie.services.eliot.absences.impression
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.absences.impression.moteur
import org.lilie.services.eliot.impression.csv.ImpressionCsvService
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.scolarite.StructureEnseignement
import org.lilie.services.eliot.absences.statistiques.mensuelle.StatsMensuellesParams
import org.lilie.services.eliot.absences.statistiques.mensuelle.StatsMensuelles
-
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.absences.statistiques.mensuelle.AbsencesStatsMensuellesService
import org.lilie.services.eliot.absences.statistiques.StatsMarshallerService
-
-import org.lilie.services.eliot.absences.statistiques.StatistiqueParserService
-
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
import org.lilie.services.eliot.absences.PreferencesEtablissementAbsences
StatsMarshallerService statsMarshallerService
LocalStructureEnseignementService localStructureEnseignementService
LocalPersonneService localPersonneService
- StatistiqueParserService statistiqueParserService
ExportParserService exportParserService
private static final Integer ID_TOUS = -1
* <http://www.cecill.info/licences.fr.html>.
*/
-package org.lilie.services.eliot.absences.publipostage
+package org.lilie.services.eliot.absences.impression.publipostage
import org.lilie.services.eliot.impression.TemplateDocument
import org.lilie.services.eliot.scolarite.StructureEnseignement
* <http://www.cecill.info/licences.fr.html>.
*/
-package org.lilie.services.eliot.absences.publipostage
+package org.lilie.services.eliot.absences.impression.publipostage
import org.lilie.services.eliot.scolarite.Personne
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.impression.publipostage.PublipostageParametresService
import org.lilie.services.eliot.impression.ImpressionSuiviEleveService
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.impression.requetage.ImpressionSelectionRequeteService
/**
* <http://www.cecill.info/licences.fr.html>.
*/
-package org.lilie.services.eliot.absences.publipostage
+package org.lilie.services.eliot.absences.impression.publipostage
import org.lilie.services.eliot.impression.batch.PublipostageRequetageService
import org.lilie.services.eliot.impression.constantes.TemplateTypeFonctionnaliteEnum
import org.lilie.services.eliot.annuaire.SecuriteSession
import org.lilie.services.eliot.test.PopulationTestActeur
import org.lilie.services.eliot.test.InitDonneesCommunesTestAbsenceService
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.scolarite.etablissement.PreferencesEtablissementAbsencesService
-import org.lilie.services.eliot.securite.AutorisationException
+
import org.lilie.services.eliot.absences.statistiques.mensuelle.ModeCalcul
import org.lilie.services.eliot.test.PopulationTestClasse
import org.lilie.services.eliot.impression.template.ImpressionTemplateDocumentService
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.impression.requetage.ImpressionRequetageAbsencesService
import org.lilie.services.eliot.test.InitDonneesCommunesTestPreferencesAbsencesService
import org.lilie.services.eliot.impression.donnees.eleve.SelectionAdresseResponsableEnum
import org.lilie.services.eliot.impression.TemplateDocument
import org.lilie.services.eliot.scolarite.Periode
import javax.servlet.http.HttpServletResponse
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.CodeComparator
import org.lilie.services.eliot.impression.constantes.TemplateDocumentEnum
import org.lilie.services.eliot.urllabel.UrlLabelInfo
eleves,
typePeriode,
eleveImpressionInfos,
- impressionRequetageSelection.infoDetailRetards,
+ impressionRequetageSelection,
PriseEnCompteMotif.BULLETIN
)
}
import grails.test.GrailsUnitTestCase
import org.lilie.services.eliot.notes.impression.appreciations.Appreciations
import org.lilie.services.eliot.notes.impression.appreciations.AppreciationLigne
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.impression.TemplateDocument
TypeMedia.typeMediaForCode(Integer.parseInt(params.media)),
etablissementCourant(),
params.nom,
- '',
templateEliot
)
}
import org.lilie.services.eliot.impression.donnees.eleve.MatiereImpressionInfo
import org.lilie.services.eliot.impression.donnees.eleve.SousMatiereImpressionInfo
import org.lilie.services.eliot.impression.donnees.eleve.NoteImpressionInfo
+import org.lilie.services.eliot.impression.AbsenceOptions
+import org.lilie.services.eliot.impression.donnees.eleve.absences.DepartImpression
/**
* Retourne des objets pré-paramétrés pour l'aperçu
static public List<EleveImpressionInfo> data(Etablissement etablissement,
TemplateDocument templatedocument) {
+ AbsenceOptions absenceOptions = AbsenceOptions.findByTemplateDocument(templatedocument)
Class<? extends EleveImpressionInfo> clazzEleve = getClassDonnees(templatedocument)
List<EleveImpressionInfo> donnee = []
- donnee << eleve(etablissement, clazzEleve)
+ donnee << eleve(etablissement, clazzEleve, absenceOptions)
return donnee
}
return clazzEleve
}
- static public EleveImpressionInfo eleve(Etablissement etablissement, Class clazzEleve) {
+ static public EleveImpressionInfo eleve(Etablissement etablissement, Class clazzEleve, AbsenceOptions absenceOptions) {
EleveImpressionInfo eleveImpression = initialiserEleveImpressionInfo(
etablissement,
- clazzEleve
+ clazzEleve,
+ absenceOptions
)
eleveImpression.annee_scol_deb = "2011"
@SuppressWarnings('AbcComplexity')
private static EleveImpressionInfo initialiserEleveImpressionInfo(Etablissement etablissement,
- Class clazzEleve) {
+ Class clazzEleve,
+ AbsenceOptions absenceOptions) {
EleveImpressionInfo eleveImpression = (EleveImpressionInfo) clazzEleve.newInstance()
eleveImpression.etablissement = etablissement.nomAffichage
eleveImpression.classe_ProfPrincipal = "M. Langlois"
eleveImpression.donneesTableau.moyennePrec3 = 11.5
eleveImpression.donneesTableau.rangs = "10/30"
- eleveImpression.absences << new AbsencesImpression(
- date: new Date(2011 - 1900, 2, 10),
- heureDebut: "08H00",
- heureFin: "12H00",
- motif: "Maladie"
- )
+ if (absenceOptions.tableauAbsences) {
+ eleveImpression.absences << new AbsencesImpression(
+ date: new Date(2011 - 1900, 2, 10),
+ heureDebut: "08H00",
+ heureFin: "12H00",
+ motif: "Maladie"
+ )
+
+ eleveImpression.absences << new AbsencesImpression(
+ date: new Date(2011 - 1900, 3, 16),
+ heureDebut: "08H00",
+ heureFin: "18H00",
+ motif: "Maladie"
+ )
+ }
- eleveImpression.absences << new AbsencesImpression(
- date: new Date(2011 - 1900, 3, 16),
- heureDebut: "08H00",
- heureFin: "18H00",
- motif: "Maladie"
- )
+ if (absenceOptions.tableauRetards) {
+ eleveImpression.retards << new RetardImpression(
+ date: new Date(2011 - 1900, 1, 16),
+ heureDebut: "08H00",
+ heureFin: "08H20",
+ motif: "Retard Grève des trains"
+ )
+ }
+
+ if (absenceOptions.tableauDeparts) {
+ eleveImpression.departs << new DepartImpression(
+ date: new Date(2011 - 1900, 1, 16),
+ heureDebut: "08H00",
+ heureFin: "08H20",
+ motif: "Viré"
+ )
+ }
- eleveImpression.retards << new RetardImpression(
- date: new Date(2011 - 1900, 1, 16),
- heureDebut: "08H00",
- heureFin: "08H20",
- motif: "Retard Grève des trains"
- )
return eleveImpression
}
}
// gestion du zoom
static float zoomX = 1.5
- static float zoomY = 3.2
+ static float zoomY = 2.7
ImpressionEditionService impressionEditionService
ImpressionTemplateDocumentService impressionTemplateDocumentService
ImpressionApercuService impressionApercuService
ImpressionCopieTemplateDocumentService impressionCopieTemplateDocumentService
- /**
- * Recherche pour un éventuel sous-modèle eliot, la liste
- * des sous-modèles disponible. enrichie le modele de la vue
- * avec cette liste
- * @param modele : modèle de la vue à enrichir
- * @param templateEliot : sous-modèle
- */
- private void prepareSousModelePourModele(Map modele,
- TemplateEliot templateEliot) {
-
- if (templateEliot) {
- modele.listeSousRapport =
- listeSousModeles(
- templateEliot.typeFonctionnaliteId
- ) as JSON
- }
-
- }
-
- /**
- * Permet de convertir les informations de type media sous forme de map
- * dans le but de les mettre dans le modèle
- */
- private Map getMapforMedia(TypeMedia typeMedia) {
- return [
- id: typeMedia.getCode(),
- libelle: message(code: typeMedia.getLibelle()),
- urlEditeur: createLink(action: typeMedia.getAction(), controller: typeMedia.getController())
- ]
- }
-
- /**
- * Liste des média de sortie
- */
- private List listeMedia() {
- List result = []
- result << getMapforMedia(TypeMedia.COURRIER)
- result << getMapforMedia(TypeMedia.SMS)
- return result
- }
-
-
def index = {
Map modele = prepareBaseModele(ScolaritePage.PARAMETRAGE_MODELE_DOCUMENT)
}
- /**
- * Liste des modèles disponibles
- */
- private List listModele() {
-
- List result = []
-
- List<TemplateEliot> templates =
- impressionEditionService.findAllTemplateEliot(null)
-
- templates.each {
- if (it.modifiable()) {
- result << [
- "id": it.id,
- "libelle": it.nom
- ]
- }
- }
-
- result << [
- "id": -1,
- "libelle": "aucun"
- ]
-
- return result
- }
-
- /**
- * Calcul du zoom sur les zones jasper
- */
- private void zoom(List<ZoneTemplateJasperInfo> zones) {
- zones.each {
- ZoneTemplateJasperInfo zone ->
-
- zone.x =
- zone.x * zoomX
-
- zone.width =
- zone.width * zoomX
-
- zone.y =
- zone.y * zoomY
-
- zone.height =
- zone.height * zoomY
- }
- }
-
- /**
- * Récupère les valeurs par défaut des mémos
- */
- private void calculeValeurParDefaut(TemplateDocument templateDocument,
- List<ZoneTemplateJasperInfo> zones) {
- zones.each {
- ZoneTemplateJasperInfo zone ->
-
- if (zone.codeTemplateDefaut) {
- zone.template = message(code: zone.codeTemplateDefaut)
- if (zone.template == zone.codeTemplateDefaut) {
- zone.template = ""
- }
- zone.codeTemplateDefaut = ""
- impressionEditionService.sauveChampMemo(templateDocument, zone)
- }
- }
- }
-
-
- private static final String DEBUT_CODE_MESSAGE_TITRE = 'eliot.impression.editeur.zone.titre.'
-
- /**
- * Récupère les libellé des zones
- */
- private void calculeLibelleZones(List<ZoneTemplateJasperInfo> zones) {
-
- zones.each {
- ZoneTemplateJasperInfo zone ->
-
- switch (zone.typeZone) {
- case TypeZone.MEMO:
-
- zone.libelle =
- message(code: DEBUT_CODE_MESSAGE_TITRE + zone.champ)
-
- break
-
- case TypeZone.LOGO:
-
- zone.libelle =
- message(code: DEBUT_CODE_MESSAGE_TITRE + 'logo')
-
- break
-
- case TypeZone.CACHET:
-
- zone.libelle =
- message(code: DEBUT_CODE_MESSAGE_TITRE + 'cachet')
-
- break
-
-
- case TypeZone.TEXT:
- if (!zone.libelle) {
- zone.libelle =
- message(code: 'eliot.impression.champsPublipostage.' + zone.champ)
- }
- break
-
- case TypeZone.SOUSMODEL:
-
- zone.libelle =
- message(code: DEBUT_CODE_MESSAGE_TITRE + 'tableau')
-
- break
-
- case TypeZone.BULLETIN:
-
- zone.libelle =
- message(code: DEBUT_CODE_MESSAGE_TITRE + 'bulletin')
-
- break
-
- }
- }
- }
-
-/**
- * Retourne la liste des zones de l'état jasper associé à un modèle utilisateur
- * (voir 1.2- L'éditeur de modèles § Liste des éléments composant un modèle )
- * Préparation de la liste des zones pour le modèle
- */
- private List listZones(long templateDocumentId,
- long templateEliotId) {
-
- TemplateDocument templateDocument =
- TemplateDocument.get(templateDocumentId)
-
- TemplateEliot templateEliot =
- TemplateEliot.get(templateEliotId)
-
- def reponse = null
-
- def zones =
- impressionEditionService.findAllZonesTemplateJasper(
- templateDocument,
- templateEliot
- )
-
- calculeLibelleZones(zones)
-
- calculeValeurParDefaut(
- templateDocument,
- zones
- )
-
- zoom(zones)
- reponse = zones.collect {
- it.toMap()
- }
- return reponse
-
- }
-
-
- private List listeSousModeles(long typeFonctionaliteId) {
-
- TemplateTypeFonctionnalite typeFonctionnalite =
- TemplateTypeFonctionnalite.get(typeFonctionaliteId)
-
- def sousTemplatesJasper =
- impressionEditionService.findAllSousTemplateEliot(typeFonctionnalite)
-
- def reponse = sousTemplatesJasper.collect {
- [
- "id": it.id,
- "libelle": it.nom
- ]
- }
- return reponse
-
- }
-
/**
* fonction JSON
* Retourne la liste des templates eliot disponibles
]
} catch (Exception e) {
- log.error e
+ log.error "Erreur à l'enregistrement des modèles", e
reponse = [
success: false,
message: message(code: CODE_ERR_CREATION_TEMPLATE_UTILISATEUR)
}
}
- /**
- * Permet de préparer la réponse pour l'enregistrement d'image
- */
- private String messageRetour(boolean success, Map map) {
- String msg = message(map)
- String message = """{success:$success, msg: '$msg'}"""
- return message
- }
-
/**
* Enregistre le cachet pour l'établissement courant
* La taille en octets devra être limitée
}
- private def chargeImage(def response, def templateId, ImageType imageType) {
-
- TemplateDocument templateDocument = null
- if (templateId) {
- templateDocument = TemplateDocument.get(templateId)
- }
+ def edition = {
+ checkAccesPage(ScolaritePage.PARAMETRAGE_MODELE_DOCUMENT)
- byte[] image = impressionImageService.load(
- imageType,
- etablissementCourant(),
- templateDocument
- )
-
- if (image) {
- response.contentType = ConfigImpression.TYPE_MIME_JPEG
- } else {
- image = impressionImageService.load(
- ImageType.VIDE,
- etablissementCourant(),
- templateDocument
- )
-
- response.contentType = ConfigImpression.TYPE_MIME_GIF
- }
-
- response.characterEncoding = "UTF-8"
- response.outputStream << image
-
- }
-
-
-
- def edition = {
-
- checkAccesPage(ScolaritePage.PARAMETRAGE_MODELE_DOCUMENT)
-
- TemplateDocument templateDocument = TemplateDocument.get(
- Long.parseLong(params.templateDocumentId)
+ TemplateDocument templateDocument = TemplateDocument.get(
+ Long.parseLong(params.templateDocumentId)
)
if (params.copie) {
)
}
- private def listeTaillePolice() {
-
- List resultat = []
- impressionPoliceService.allTaillePolice.each {Integer size ->
- resultat << [
- size: size,
- libelle: size + ' pt'
- ]
- }
-
- return resultat
- }
-
@SuppressWarnings('CatchException') // JTRA : Pour gérer une réponse en cas d'erreur
def supprimeCachet = {
render reponse as JSON
}
+ private def chargeImage(def response, def templateId, ImageType imageType) {
+
+ TemplateDocument templateDocument = null
+ if (templateId) {
+ templateDocument = TemplateDocument.get(templateId)
+ }
+
+
+ byte[] image = impressionImageService.load(
+ imageType,
+ etablissementCourant(),
+ templateDocument
+ )
+
+ if (image) {
+ response.contentType = ConfigImpression.TYPE_MIME_JPEG
+ } else {
+ image = impressionImageService.load(
+ ImageType.VIDE,
+ etablissementCourant(),
+ templateDocument
+ )
+
+ response.contentType = ConfigImpression.TYPE_MIME_GIF
+ }
+
+ response.characterEncoding = "UTF-8"
+ response.outputStream << image
+
+ }
+
+ /**
+ * Recherche pour un éventuel sous-modèle eliot, la liste
+ * des sous-modèles disponible. enrichie le modele de la vue
+ * avec cette liste
+ * @param modele : modèle de la vue à enrichir
+ * @param templateEliot : sous-modèle
+ */
+ private void prepareSousModelePourModele(Map modele,
+ TemplateEliot templateEliot) {
+
+ if (templateEliot) {
+ modele.listeSousRapport =
+ listeSousModeles(
+ templateEliot.typeFonctionnaliteId
+ ) as JSON
+ }
+
+ }
+
+ /**
+ * Permet de convertir les informations de type media sous forme de map
+ * dans le but de les mettre dans le modèle
+ */
+ private Map getMapforMedia(TypeMedia typeMedia) {
+ return [
+ id: typeMedia.getCode(),
+ libelle: message(code: typeMedia.getLibelle()),
+ urlEditeur: createLink(action: typeMedia.getAction(), controller: typeMedia.getController())
+ ]
+ }
+
+ /**
+ * Liste des média de sortie
+ */
+ private List listeMedia() {
+ List result = []
+ result << getMapforMedia(TypeMedia.COURRIER)
+ result << getMapforMedia(TypeMedia.SMS)
+ return result
+ }
+
+ /**
+ * Liste des modèles disponibles
+ */
+ private List listModele() {
+
+ List result = []
+
+ List<TemplateEliot> templates =
+ impressionEditionService.findAllTemplateEliot(null)
+
+ templates.each {
+ if (it.modifiable()) {
+ result << [
+ "id": it.id,
+ "libelle": it.nom
+ ]
+ }
+ }
+
+ result << [
+ "id": -1,
+ "libelle": "aucun"
+ ]
+
+ return result
+ }
+
+ /**
+ * Calcul du zoom sur les zones jasper
+ */
+ private void zoom(List<ZoneTemplateJasperInfo> zones) {
+ zones.each {
+ ZoneTemplateJasperInfo zone ->
+
+ zone.x =
+ zone.x * zoomX
+
+ zone.width =
+ zone.width * zoomX
+
+ zone.y =
+ zone.y * zoomY
+
+ zone.height =
+ zone.height * zoomY
+ }
+ }
+
+ /**
+ * Récupère les valeurs par défaut des mémos
+ */
+ private void calculeValeurParDefaut(TemplateDocument templateDocument,
+ List<ZoneTemplateJasperInfo> zones) {
+ zones.each {
+ ZoneTemplateJasperInfo zone ->
+
+ if (zone.codeTemplateDefaut) {
+ zone.template = message(code: zone.codeTemplateDefaut)
+ if (zone.template == zone.codeTemplateDefaut) {
+ zone.template = ""
+ }
+ zone.codeTemplateDefaut = ""
+ impressionEditionService.sauveChampMemo(templateDocument, zone)
+ }
+ }
+ }
+
+
+ private static final String DEBUT_CODE_MESSAGE_TITRE = 'eliot.impression.editeur.zone.titre.'
+
+ /**
+ * Récupère les libellé des zones
+ */
+ private void calculeLibelleZones(List<ZoneTemplateJasperInfo> zones) {
+
+ zones.each {
+ ZoneTemplateJasperInfo zone ->
+
+ switch (zone.typeZone) {
+ case TypeZone.MEMO:
+
+ zone.libelle =
+ message(code: DEBUT_CODE_MESSAGE_TITRE + zone.champ)
+
+ break
+
+ case TypeZone.LOGO:
+
+ zone.libelle =
+ message(code: DEBUT_CODE_MESSAGE_TITRE + 'logo')
+
+ break
+
+ case TypeZone.CACHET:
+
+ zone.libelle =
+ message(code: DEBUT_CODE_MESSAGE_TITRE + 'cachet')
+
+ break
+
+
+ case TypeZone.TEXT:
+ if (!zone.libelle) {
+ zone.libelle =
+ message(code: 'eliot.impression.champsPublipostage.' + zone.champ)
+ }
+ break
+
+ case TypeZone.SOUSMODEL:
+
+ zone.libelle =
+ message(code: DEBUT_CODE_MESSAGE_TITRE + 'tableau')
+
+ break
+
+ case TypeZone.BULLETIN:
+
+ zone.libelle =
+ message(code: DEBUT_CODE_MESSAGE_TITRE + 'bulletin')
+
+ break
+
+ }
+ }
+ }
+
+/**
+ * Retourne la liste des zones de l'état jasper associé à un modèle utilisateur
+ * (voir 1.2- L'éditeur de modèles § Liste des éléments composant un modèle )
+ * Préparation de la liste des zones pour le modèle
+ */
+ private List listZones(long templateDocumentId,
+ long templateEliotId) {
+
+ TemplateDocument templateDocument =
+ TemplateDocument.get(templateDocumentId)
+
+ TemplateEliot templateEliot =
+ TemplateEliot.get(templateEliotId)
+
+ def reponse = null
+
+ def zones =
+ impressionEditionService.findAllZonesTemplateJasper(
+ templateDocument,
+ templateEliot
+ )
+
+ calculeLibelleZones(zones)
+
+ calculeValeurParDefaut(
+ templateDocument,
+ zones
+ )
+
+ zoom(zones)
+ reponse = zones.collect {
+ it.toMap()
+ }
+ return reponse
+
+ }
+
+ private List listeSousModeles(long typeFonctionaliteId) {
+
+ TemplateTypeFonctionnalite typeFonctionnalite =
+ TemplateTypeFonctionnalite.get(typeFonctionaliteId)
+
+ def sousTemplatesJasper =
+ impressionEditionService.findAllSousTemplateEliot(typeFonctionnalite)
+
+ def reponse = sousTemplatesJasper.collect {
+ [
+ "id": it.id,
+ "libelle": it.nom
+ ]
+ }
+ return reponse
+
+ }
+
+ /**
+ * Permet de préparer la réponse pour l'enregistrement d'image
+ */
+ private String messageRetour(boolean success, Map map) {
+ String msg = message(map)
+ String message = """{success:$success, msg: '$msg'}"""
+ return message
+ }
+
+ private def listeTaillePolice() {
+
+ List resultat = []
+ impressionPoliceService.allTaillePolice.each {Integer size ->
+ resultat << [
+ size: size,
+ libelle: size + ' pt'
+ ]
+ }
+
+ return resultat
+ }
protected ModuleEliot getModuleEliot(TemplateDocument templateDocument) {
TemplateTypeFonctionnaliteEnum templateTypeFonctionnaliteEnum
eliot.impression.editeur.zone.titre.textAdresse=Adresse
eliot.impression.editeur.zone.titre.textCorpsDeLettre=Corps de lettre
eliot.impression.editeur.zone.titre.textInfoEleve=Informations concernant l'élève
+eliot.impression.editeur.zone.titre.absRetDep=Information
eliot.impression.editeur.zone.titre.textTitre=Titre
eliot.impression.editeur.zone.police=Police
eliot.impression.editeur.zone.titre.textObservation=Observation
eliot.impression.editeur.zone.bulletinCheckBox.nombreNotes=Nombre de notes
eliot.impression.editeur.zone.bulletinCheckBox.rangs=Rang/Nombre d'élèves
eliot.impression.editeur.copie=Copie de
+eliot.impression.editeur.zone.absences.format=Format
+eliot.impression.editeur.zone.absences.absences=Absences
+eliot.impression.editeur.zone.absences.retards=Retards
+eliot.impression.editeur.zone.absences.departs=Départs
+eliot.impression.editeur.zone.absences.tableau=Tableau
+eliot.impression.editeur.zone.absences.texte=Texte
+
scolarite.format.dateJJMMAAAA=dd/MM/yyyy
package org.lilie.services.eliot.scolarite.impression
import org.lilie.services.eliot.impression.TemplateDocument
-import org.lilie.services.eliot.impression.TemplateEliot
import org.lilie.services.eliot.impression.TemplateChampMemo
import org.lilie.services.eliot.impression.TemplateDocumentSousTemplateEliot
import org.lilie.services.eliot.notes.BulletinOptions
+import org.lilie.services.eliot.impression.AbsenceOptions
/**
* Service dédié à la copie d'un template de document
while (templateCandidat) {
nomCandidat = prefixe + templateDocument.nom + " (" + compteur + ")"
templateCandidat = TemplateDocument.findByNom(nomCandidat)
+ compteur++
}
return nomCandidat
* Création d'une copie de template de document
* @return la copie
*/
- public TemplateDocument copie(String prefixe, TemplateDocument templateDocument) {
+ public TemplateDocument copie(String prefixe, TemplateDocument original) {
TemplateDocument copie = new TemplateDocument(
- code: templateDocument.code,
- nom: creeNom(prefixe, templateDocument),
- systeme: templateDocument.systeme,
- police: templateDocument.police,
- etablissement: templateDocument.etablissement,
- templateEliot: templateDocument.templateEliot,
- media: templateDocument.media,
+ code: original.code,
+ nom: creeNom(prefixe, original),
+ systeme: original.systeme,
+ police: original.police,
+ etablissement: original.etablissement,
+ templateEliot: original.templateEliot,
+ media: original.media,
actif: true,
- numeroVersion: 0,
- idCachet: templateDocument.idCachet
+ idCachet: original.idCachet
)
copie.save(flush: true, failOnError: true)
List<TemplateChampMemo> allTemplateChampMemo =
- TemplateChampMemo.findAllByTemplateDocument(templateDocument)
+ TemplateChampMemo.findAllByTemplateDocument(original)
allTemplateChampMemo.each {
TemplateChampMemo templateChampMemo ->
}
TemplateDocumentSousTemplateEliot sousModele =
- TemplateDocumentSousTemplateEliot.findByTemplateDocument(templateDocument)
+ TemplateDocumentSousTemplateEliot.findByTemplateDocument(original)
if (sousModele) {
copieDocumentSousTemplateEliot.save(flush: true, failOnError: true)
}
+ copieParametresBulletins(original, copie)
+ copieParametresAbsences(original, copie)
+
+ return copie
+ }
+
+ private void copieParametresAbsences(TemplateDocument original, TemplateDocument copie) {
+
+ AbsenceOptions absenceOptions =
+ AbsenceOptions.findByTemplateDocument(original)
+
+ if (absenceOptions) {
+
+ AbsenceOptions copieAbsenceOptions = new AbsenceOptions(
+ templateDocument: copie,
+ tableauAbsences: absenceOptions.tableauAbsences,
+ tableauRetards: absenceOptions.tableauRetards,
+ tableauDeparts: absenceOptions.tableauDeparts,
+ typeTableau: absenceOptions.typeTableau
+ )
+
+ copieAbsenceOptions.save(flush: true, failOnError: true)
+
+ }
+
+ }
+
+ private void copieParametresBulletins(TemplateDocument original, TemplateDocument copie) {
+
BulletinOptions bulletinOptions =
- BulletinOptions.findByTemplateDocumentAndClasseIsNull(templateDocument)
+ BulletinOptions.findByTemplateDocumentAndClasseIsNull(original)
if (bulletinOptions) {
BulletinOptions copieBulletinOptions = new BulletinOptions(
copieBulletinOptions.save(flush: true, failOnError: true)
}
- return copie
}
}
* Import ou met à jour un sous modèles
*/
public TemplateEliot verifieEtMetAJourSousModele(SousModeles sousModeles) {
+
path = sousModeles.toString()
TemplateTypeDonnees templateTypeDonnees = TemplateTypeDonnees.findByCode(
)
if (templateEliot) {
- return metAJourSousModele(
- sousModeles,
- templateEliot,
- templateTypeFonctionnalite,
- templateTypeDonnees
- )
+ return metAJourSousModele(
+ sousModeles,
+ templateEliot,
+ templateTypeFonctionnalite,
+ templateTypeDonnees
+ )
} else {
return importeSousModele(
sousModeles,
private TemplateEliot importeSousModele(SousModeles sousModeles,
TemplateTypeFonctionnalite templateTypeFonctionnalite,
- TemplateTypeDonnees templateTypeDonnees
+ TemplateTypeDonnees templateTypeDonnees,
+ String nomParam = null
) {
lectureFichiers(sousModeles)
return impressionImportService.importeTableau(
tableauIs,
sousRapportIs,
sousSousRapportIs,
- templateTypeDonnees
+ templateTypeDonnees,
+ nomParam
)
}
TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
),
- LETTRE_RET_LETTRE_RETARDS(
- TemplateEliotEnum.LETTRE_RET_LETTRE_RETARDS,
- TemplateTypeDonneeEnum.ELEVE_RETARDS,
- TemplateTypeFonctionnaliteEnum.LETTRE_RETARDS
- ),
-
REL_NOTES_A4(
TemplateEliotEnum.REL_NOTES_A4,
TemplateTypeDonneeEnum.ELEVE_NOTES,
TemplateTypeDonneeEnum.ELEVE_NOTES,
TemplateTypeFonctionnaliteEnum.SYNTHESE_NOTES
),
- ABS_TABLEAU_1(
- TemplateEliotEnum.LETTRE_ABS_TAB_ABSENCES_1,
- null,
- null,
- TemplateTypeDonneeEnum.ELEVE_ABSENCES,
- TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
- ),
-
- ABS_TABLEAU_2(
- TemplateEliotEnum.LETTRE_ABS_TAB_ABSENCES_2,
- null,
- null,
- TemplateTypeDonneeEnum.ELEVE_ABSENCES,
- TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
- ),
-
- RET_TABLEAU_1(
- TemplateEliotEnum.LETTRE_RET_TAB_RETARDS1,
- null,
- null,
- TemplateTypeDonneeEnum.ELEVE_RETARDS,
- TemplateTypeFonctionnaliteEnum.LETTRE_RETARDS
- ),
-
- RET_TABLEAU_2(
- TemplateEliotEnum.LETTRE_RET_TAB_RETARDS2,
- null,
- null,
- TemplateTypeDonneeEnum.ELEVE_RETARDS,
- TemplateTypeFonctionnaliteEnum.LETTRE_RETARDS
- ),
BREVET_AVEC_COMP(
TemplateEliotEnum.BREVET_AVEC_COMP,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
),
-
REGISTRE_PUNITIONS(
TemplateEliotEnum.REGISTRE_PUNITIONS,
null,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
),
-
REGISTRE_SANCTIONS(
TemplateEliotEnum.REGISTRE_SANCTIONS,
null,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
),
-
TABLEAU_DE_BORD(
TemplateEliotEnum.TABLEAU_DE_BORD,
null,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
),
-
TABLEAU_DE_BORD_TOTAL(
TemplateEliotEnum.TABLEAU_DE_BORD_TOTAL,
null,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
),
+
STATS_MENSUELLES_TITRES(
TemplateEliotEnum.STATS_MENSUELLES_TITRES,
null,
null,
TemplateTypeDonneeEnum.ARCHIVAGE,
TemplateTypeFonctionnaliteEnum.ARCHIVAGE
- )
+ ),
+
+ ABS_TABLEAU(
+ TemplateEliotEnum.ABS_TABLEAU,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_ABSENCES,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
+
+ ABS_TEXTE(
+ TemplateEliotEnum.ABS_TEXTE,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_ABSENCES,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
+ RET_TABLEAU(
+ TemplateEliotEnum.RET_TABLEAU,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_RETARDS,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
+
+ RET_TEXTE(
+ TemplateEliotEnum.RET_TEXTE,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_RETARDS,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
+
+ DEP_TABLEAU(
+ TemplateEliotEnum.DEP_TABLEAU,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_RETARDS,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
+
+ DEP_TEXTE(
+ TemplateEliotEnum.DEP_TEXTE,
+ null,
+ null,
+ TemplateTypeDonneeEnum.ELEVE_RETARDS,
+ TemplateTypeFonctionnaliteEnum.LETTRE_ABSENCES
+ ),
private TemplateEliotEnum niveau1
private TemplateEliotEnum niveau2
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.impression.TemplateDocument
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.impression.donnees.eleve.EleveImpressionInfo
import org.lilie.services.eliot.scolarite.parametrages.modelededocument.editeurs.DonneesApercu
import org.lilie.services.eliot.impression.donnees.DonneesOptions
* <http://www.cecill.info/licences.fr.html>.
*/
-
-
-
-
package org.lilie.services.eliot.scolarite.parametrages.modelededocument
import net.sf.jasperreports.engine.JRBand
import net.sf.jasperreports.engine.design.JRDesignTextField
import net.sf.jasperreports.engine.design.JasperDesign
import net.sf.jasperreports.engine.xml.JRXmlLoader
-import org.hibernate.SessionFactory
import org.lilie.services.eliot.impression.constantes.ConfigImpression
import org.lilie.services.eliot.impression.constantes.TypeZone
import org.lilie.services.eliot.impression.donnees.template.ZoneTemplateJasperInfo
import org.lilie.services.eliot.impression.template.ImpressionTemplateDocumentService
import org.lilie.services.eliot.scolarite.impression.importmodeles.donnees.Modeles
import org.lilie.services.eliot.scolarite.TypeIntervalleEnum
+import org.lilie.services.eliot.impression.template.ImpressionTemplateOutilsService
+
+import org.lilie.services.eliot.scolarite.parametrages.modelededocument.absences.ImpressionModeleAbsenceService
+import org.lilie.services.eliot.impression.template.absence.ParametrageLettreAbsenceService
+import org.lilie.services.eliot.impression.AbsenceOptions
+import org.lilie.services.eliot.scolarite.parametrages.modelededocument.absences.ParametreLettreAbsences
+import org.codehaus.groovy.grails.commons.ApplicationHolder
+import org.springframework.context.MessageSource
+import org.springframework.beans.factory.BeanCreationException
+import org.lilie.services.eliot.impression.template.absence.TypeTableauEnum
/**
* Service d'edition
static transactional = false
- SessionFactory sessionFactory
ImpressionTemplateDocumentService impressionTemplateDocumentService
ImpressionBulletinTemplateService impressionBulletinTemplateService
ImpressionBulletinOptionsService impressionBulletinOptionsService
+ ImpressionTemplateOutilsService impressionTemplateOutilsService
+ ImpressionModeleAbsenceService impressionModeleAbsenceService
/**
* Retourne la liste des template eliot disponibles
* ( voir 1-4 La vue pour avoir une idée de l'écran de saisie des
* modèles utilisateurs)
*/
- List<ZoneTemplateJasperInfo> findAllZonesTemplateJasper(TemplateDocument templateDocument,
- TemplateEliot templateEliot)
+ public List<ZoneTemplateJasperInfo> findAllZonesTemplateJasper(TemplateDocument templateDocument,
+ TemplateEliot templateEliot)
throws ImpressionServiceException {
JasperDesign jasperDesign = construitModeleEdition(templateDocument, templateEliot)
int nombreModeles = 0
jasperDesign.getDetailSection().bands.eachWithIndex { JRBand band, int index ->
+ boolean bandIsEmpty = true
band.elements.each { JRElement elt ->
def zone = getZone(templateDocument, elt, offsetOnY, index, nombreModeles)
if (zone) {
zones << zone
+ bandIsEmpty = false
}
}
- offsetOnY += band.height
+
+ if (!bandIsEmpty) {
+ offsetOnY += band.height
+ }
+
+ }
+
+ if (log.debugEnabled) {
+ zones.eachWithIndex {ZoneTemplateJasperInfo info, Integer index ->
+ log.debug("Zone #$index : ${info}")
+ }
}
return zones
}
case JRDesignSubreport:
+
nombreModeles++
if (impressionBulletinTemplateService.isModeleBulletin(templateDocument)) {
- return zoneTemplateJasperIfoForJRDesignSubreport(
+ // pour le modèle bulletin, on traite le cas particulier du tableau de notes
+ return zoneTemplateJasperForBulletin(
templateDocument,
(JRDesignSubreport) elt,
offsetOnY,
)
}
else {
- return zoneTemplateJasperIfoForJRDesignSubreport(
- templateDocument,
- (JRDesignSubreport) elt,
- offsetOnY
- )
+
+ if (impressionTemplateOutilsService.isModeleAbsences(templateDocument)) {
+
+ JRDesignSubreport designSubreport = (JRDesignSubreport) elt
+ if (designSubreport.key == 'absences') {
+ // si le sous-rapport s'appelle 'absences' c'est qu'il s'agit d'un groupe de tableau paramétrable (
+ // absences, retards, départs)
+ return zoneTemplateJasperForLettreAbsences(
+ templateDocument,
+ (JRDesignSubreport) elt,
+ offsetOnY,
+ TypeZone.ABS_RETARD_DEPART
+ )
+ } else {
+ return null
+ }
+
+ } else {
+
+ return zoneTemplateJasperIfoForJRDesignSubreport(
+ templateDocument,
+ (JRDesignSubreport) elt,
+ offsetOnY,
+ null
+ )
+ }
+
}
default:
jasperDesign
}
+ ParametrageLettreAbsenceService parametrageLettreAbsenceService
+
/**
* Enregistre une modification d'un élément de modèle pour les sous-états et
* pour les champs memo.
* @throws ImpressionServiceException
*/
@Transactional
- def modifieZoneTemplateJasper(TemplateDocument templateDocument,
- ZoneTemplateJasperInfo zoneInfo)
+ private def modifieZoneTemplateJasper(TemplateDocument templateDocument,
+ ZoneTemplateJasperInfo zoneInfo)
throws ImpressionServiceException {
switch (zoneInfo.typeZone) {
break
case TypeZone.BULLETIN:
modifiezoneTemplateJasperTypeBulletin(templateDocument, zoneInfo)
+ break
+ case TypeZone.ABS_RETARD_DEPART:
+
+ ParametreLettreAbsences parametreLettreAbsences = (ParametreLettreAbsences) zoneInfo.complement
+
+ parametrageLettreAbsenceService.save(templateDocument,
+ parametreLettreAbsences.absences,
+ parametreLettreAbsences.retards,
+ parametreLettreAbsences.departs,
+ parametreLettreAbsences.typeTableau
+ )
+
break
}
}
* @param templateJasper : le template jasper à étudier
* @throws ImpressionServiceException
* @return une liste de nom de champ
+ * @deprecated
*/
List<String> findAllMemo(TemplateJasper templateJasper)
throws ImpressionServiceException {
return zone
}
-/**
- * Retourne un objet de type ZoneTemplateJasperInfo constitué à partir d'un element
- * JRdesignSubreport
- * @param templateUtiisateur le template utilisateur
- * @param subreport l'element JRDesignImage
- * @param offsetOnY l'offset à ajouter à la position en y de la zone
- * @return l'objet de type ZoneTemplateJasperInfo
- */
+ /**
+ * Retourne un objet de type ZoneTemplateJasperInfo constitué à partir d'un element
+ * JRdesignSubreport
+ * @param templateUtiisateur le template utilisateur
+ * @param subreport l'element JRDesignImage
+ * @param offsetOnY l'offset à ajouter à la position en y de la zone
+ * @return l'objet de type ZoneTemplateJasperInfo
+ */
private ZoneTemplateJasperInfo zoneTemplateJasperIfoForJRDesignSubreport(TemplateDocument templateDocument,
JRDesignSubreport subreport,
int offsetOnY,
- TypeZone typeZone = TypeZone.SOUSMODEL) {
-
-
- TypePeriode typePeriode = TypePeriode.findByIntervalle(IntervalleEnum.T3)
-
- BulletinOptionsPersonnalise bulletinOptionsPersonnalise =
- impressionBulletinOptionsService.getParametreOptionsByTemplate(
- templateDocument,
- typePeriode,
- TypeIntervalleEnum.TRIMESTRE
- )
+ TypeZone typeZone = TypeZone.SOUSMODEL,
+ def complement) {
ZoneTemplateJasperInfo zone = new ZoneTemplateJasperInfo(
x: subreport.x,
height: subreport.height,
typeZone: typeZone,
champ: subreport.expression.chunks[0].text,
- complement: bulletinOptionsPersonnalise
+ complement: complement
)
// recupere l'id du sous modelsi il existe
if (templateDocument) {
return zone
}
+/**
+ * Retourne un objet de type ZoneTemplateJasperInfo constitué à partir d'un element
+ * JRdesignSubreport
+ * @param templateUtiisateur le template utilisateur
+ * @param subreport l'element JRDesignImage
+ * @param offsetOnY l'offset à ajouter à la position en y de la zone
+ * @return l'objet de type ZoneTemplateJasperInfo
+ */
+ private ZoneTemplateJasperInfo zoneTemplateJasperForBulletin(TemplateDocument templateDocument,
+ JRDesignSubreport subreport,
+ int offsetOnY,
+ TypeZone typeZone = TypeZone.SOUSMODEL) {
+
+
+ TypePeriode typePeriode = TypePeriode.findByIntervalle(IntervalleEnum.T3)
+
+ BulletinOptionsPersonnalise bulletinOptionsPersonnalise =
+ impressionBulletinOptionsService.getParametreOptionsByTemplate(
+ templateDocument,
+ typePeriode,
+ TypeIntervalleEnum.TRIMESTRE
+ )
+
+ return zoneTemplateJasperIfoForJRDesignSubreport(templateDocument, subreport, offsetOnY, typeZone, bulletinOptionsPersonnalise)
+ }
+
+/**
+ * Retourne un objet de type ZoneTemplateJasperInfo constitué à partir d'un element
+ * JRdesignSubreport
+ * @param templateUtiisateur le template utilisateur
+ * @param subreport l'element JRDesignImage
+ * @param offsetOnY l'offset à ajouter à la position en y de la zone
+ * @return l'objet de type ZoneTemplateJasperInfo
+ */
+ private ZoneTemplateJasperInfo zoneTemplateJasperForLettreAbsences(TemplateDocument templateDocument,
+ JRDesignSubreport subreport,
+ int offsetOnY,
+ TypeZone typeZone = TypeZone.SOUSMODEL) {
+
+ AbsenceOptions options = impressionModeleAbsenceService.findParametres(templateDocument)
+
+ ZoneTemplateJasperInfo templateJasperInfo = zoneTemplateJasperIfoForJRDesignSubreport(templateDocument, subreport, offsetOnY, typeZone, options)
+ templateJasperInfo.libelle = message('eliot.impression.editeur.zone.titre.absRetDep')
+ return templateJasperInfo
+ }
+
/**
* Modifie une zone du template de type memo
* @param templateDocument le template document
impressionTemplateDocumentService.modifieTemplateDocument(
templateDocument,
nom,
- police,
- templateDocument.descriptif
+ police
)
}
bulletinOptionsPersonnalise.rangs = it.complement.rangs
complement = bulletinOptionsPersonnalise
break
-
+ case 7: typeZone = TypeZone.ABS_RETARD_DEPART
+ def parametresModele = it.complement
+ ParametreLettreAbsences parametreLettreAbsences = new ParametreLettreAbsences()
+ parametreLettreAbsences.absences = parametresModele.absence
+ parametreLettreAbsences.retards = parametresModele.retard
+ parametreLettreAbsences.departs = parametresModele.depart
+ parametreLettreAbsences.typeTableau = TypeTableauEnum.valueOf(
+ TypeTableauEnum.class,
+ parametresModele.typeTableau.toString())
+
+ complement = parametreLettreAbsences
+ break
}
ZoneTemplateJasperInfo zoneTemplateJasperInfo =
size: size
)
+ if (log.debugEnabled) {
+ log.debug "Type de zone à enregistrer ${zoneTemplateJasperInfo}"
+ }
modifieZoneTemplateJasper(
templateDocument,
templateDocument.save(flush: true, failOnError: true)
}
+ private String message(String code, Object[] args = [], Locale locale = null) {
+ def ctx = ApplicationHolder.getApplication().getMainContext()
+ MessageSource messageSource = (MessageSource) ctx.getBean("messageSource")
+ if (messageSource == null) {
+ throw new BeanCreationException("Pas de bean de gestion i18n")
+ }
+ return messageSource.getMessage(code, args, locale)
+ }
+
+
}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.scolarite.parametrages.modelededocument.absences
+
+import org.lilie.services.eliot.impression.TemplateDocument
+import org.lilie.services.eliot.impression.TemplateDocumentSousTemplateEliot
+import org.lilie.services.eliot.impression.donnees.template.ZoneTemplateJasperInfo
+import org.lilie.services.eliot.impression.ImpressionServiceException
+import org.lilie.services.eliot.impression.TemplateEliot
+import org.lilie.services.eliot.impression.AbsenceOptions
+import org.lilie.services.eliot.impression.template.absence.ParametrageLettreAbsenceService
+
+/**
+ * Permet de paramétrer les modèles d'absences
+ * @author othe
+ */
+class ImpressionModeleAbsenceService {
+
+ ParametrageLettreAbsenceService parametrageLettreAbsenceService
+
+ public AbsenceOptions findParametres(TemplateDocument templateDocument) {
+
+ AbsenceOptions absenceOptions = parametrageLettreAbsenceService.findByTemplate(templateDocument)
+
+ if (absenceOptions) {
+ return absenceOptions
+ }
+
+ throw new IllegalStateException("Incohérence de base. Le modèles de lettre (${templateDocument.id}) doit avoir un enregistrement dans absence_options")
+ }
+
+ /**
+ * Modifie la zone du template passee en parametre
+ * @param templateDocument le template document
+ * @param zoneInfo la zone info de type sous internalModele
+ * @throws org.lilie.services.eliot.impression.ImpressionServiceException
+ */
+ public def modifieZoneTemplateJasperTypeSousModele(TemplateDocument templateDocument,
+ ZoneTemplateJasperInfo zoneInfo)
+ throws ImpressionServiceException {
+ try {
+ TemplateEliot ssTemplateEliot = TemplateEliot.get(
+ zoneInfo.idTemplateJasper
+ )
+
+ TemplateDocumentSousTemplateEliot templateDocSousTemplate =
+ TemplateDocumentSousTemplateEliot.findByTemplateDocumentAndParam(
+ templateDocument,
+ zoneInfo.champ
+ )
+
+ if (ssTemplateEliot) {
+ if (templateDocSousTemplate) {
+ templateDocSousTemplate.templateEliot = ssTemplateEliot
+ templateDocSousTemplate.save(flush: true, failOnError: true)
+ } else {
+ new TemplateDocumentSousTemplateEliot(
+ templateDocument: templateDocument,
+ param: zoneInfo.champ,
+ templateEliot: ssTemplateEliot
+ ).save(flush: true, failOnError: true)
+ }
+ } else {
+ if (templateDocSousTemplate) {
+ templateDocSousTemplate.delete(flush: true)
+ }
+ }
+ } catch (Exception e) {
+ log.error e.message
+ throw new ImpressionServiceException(
+ "Le sous model n'a pas pu etre enregistre.",
+ e
+ )
+ }
+ }
+
+
+}
--- /dev/null
+/*
+ * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ *
+ * Lilie is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE.txt in the directory of this software
+ * distribution.
+ *
+ * Lilie is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the CeCILL-C along with Lilie. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ */
+
+package org.lilie.services.eliot.scolarite.parametrages.modelededocument.absences
+
+import org.lilie.services.eliot.impression.template.absence.TypeTableauEnum
+
+/**
+ * Paramétrage du modèle de lettre d'absences
+ * @author othe
+ */
+class ParametreLettreAbsences {
+ Boolean absences = false
+ Boolean retards = false
+ Boolean departs = false
+ TypeTableauEnum typeTableau = TypeTableauEnum.TABLEAU
+}
-
-
%{--
- - Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
- - This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
- -
- - Lilie is free software. You can redistribute it and/or modify since
- - you respect the terms of either (at least one of the both license) :
- - - under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- - - the CeCILL-C as published by CeCILL-C; either version 1 of the
- - License, or any later version
- -
- - There are special exceptions to the terms and conditions of the
- - licenses as they are applied to this software. View the full text of
- - the exception in file LICENSE.txt in the directory of this software
- - distribution.
- -
- - Lilie is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - Licenses for more details.
- -
- - You should have received a copy of the GNU General Public License
- - and the CeCILL-C along with Lilie. If not, see :
- - <http://www.gnu.org/licenses/> and
- - <http://www.cecill.info/licences.fr.html>.
- --}%
+- Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+- This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+-
+- Lilie is free software. You can redistribute it and/or modify since
+- you respect the terms of either (at least one of the both license) :
+- - under the terms of the GNU Affero General Public License as
+- published by the Free Software Foundation, either version 3 of the
+- License, or (at your option) any later version.
+- - the CeCILL-C as published by CeCILL-C; either version 1 of the
+- License, or any later version
+-
+- There are special exceptions to the terms and conditions of the
+- licenses as they are applied to this software. View the full text of
+- the exception in file LICENSE.txt in the directory of this software
+- distribution.
+-
+- Lilie is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- Licenses for more details.
+-
+- You should have received a copy of the GNU General Public License
+- and the CeCILL-C along with Lilie. If not, see :
+- <http://www.gnu.org/licenses/> and
+- <http://www.cecill.info/licences.fr.html>.
+--}%
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.titre = '${g.message(code: "eliot.impression.editeur.zone.titre.textTitre").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.police = '${g.message(code: "eliot.impression.editeur.zone.police").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.supprimer = '${g.message(code: "eliot.scolarite.libelle.supprimer").encodeAsJavaScript()}';
+
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.bulletinCheckBox.moyenneGenerale = '${g.message(code: "eliot.impression.editeur.zone.bulletinCheckBox.moyenneGenerale").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.bulletinCheckBox.coefficient = '${g.message(code: "eliot.impression.editeur.zone.bulletinCheckBox.coefficient").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.bulletinCheckBox.moyennePrecedente = '${g.message(code: "eliot.impression.editeur.zone.bulletinCheckBox.moyennePrecedente").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.bulletinCheckBox.nombreNotes = '${g.message(code: "eliot.impression.editeur.zone.bulletinCheckBox.nombreNotes").encodeAsJavaScript()}';
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.bulletinCheckBox.rangs = '${g.message(code: "eliot.impression.editeur.zone.bulletinCheckBox.rangs").encodeAsJavaScript()}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.absencesCheckBox.absences = '${g.message(code: "eliot.impression.editeur.zone.absences.absences")}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.absencesCheckBox.retards = '${g.message(code: "eliot.impression.editeur.zone.absences.retards")}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.absencesCheckBox.departs = '${g.message(code: "eliot.impression.editeur.zone.absences.departs")}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.absenceFormats.TABLEAU = '${g.message(code: "eliot.impression.editeur.zone.absences.tableau")}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.absenceFormats.TEXTE = '${g.message(code: "eliot.impression.editeur.zone.absences.texte")}';
+eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.libelle.format= '${g.message(code: "eliot.impression.editeur.zone.absences.format")}';
+
//HEADERS
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele.header.template = '${g.message(code: "eliot.scolarite.libelle.template").encodeAsJavaScript()}';
import org.lilie.services.eliot.impression.template.bulletin.option.ImpressionBulletinOptionsService
import net.sf.jasperreports.engine.base.JRBasePrintPage
import net.sf.jasperreports.engine.fill.JRTemplatePrintText
-import org.lilie.services.eliot.impression.ImpressionMoteurService
+import org.lilie.services.eliot.impression.moteur.ImpressionMoteurService
import org.lilie.services.eliot.impression.TemplateDocument
import org.lilie.services.eliot.notes.BulletinOptions
import org.lilie.services.eliot.scolarite.impression.ImpressionImportResourcesService
<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="A4" pageWidth="595" pageHeight="842" columnWidth="539" leftMargin="28" rightMargin="28" topMargin="28" bottomMargin="28" uuid="e8516dbd-d334-4051-9862-30e4a9e57f5d">
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Lettre absences" pageWidth="595" pageHeight="842" columnWidth="539" leftMargin="28" rightMargin="28" topMargin="28" bottomMargin="28" uuid="e8516dbd-d334-4051-9862-30e4a9e57f5d">
<property name="ireport.zoom" value="1.5"/>
<property name="ireport.x" value="0"/>
- <property name="ireport.y" value="0"/>
+ <property name="ireport.y" value="192"/>
<style name="titre_document" hAlign="Center" fontName="Arial" fontSize="18"/>
<style name="label" hAlign="Left" fontName="Arial" fontSize="10"/>
<style name="valeur_champ" fontName="Arial" fontSize="10"/>
- <parameter name="tableau" class="java.lang.Object" isForPrompting="false"/>
- <parameter name="ligneMatiere" class="java.lang.Object" isForPrompting="false"/>
- <parameter name="ligneSousMatiere" class="java.lang.Object" isForPrompting="false"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["/home/olivier/Documents/notes/jasper/"]]></defaultValueExpression>
</parameter>
<parameter name="logo" class="java.lang.Object"/>
<parameter name="cachet" class="java.lang.Object"/>
+ <parameter name="tableauAbsences" class="java.lang.Object" isForPrompting="false"/>
+ <parameter name="tableauRetards" class="java.lang.Object" isForPrompting="false"/>
+ <parameter name="tableauDeparts" class="java.lang.Object" isForPrompting="false"/>
<field name="classe_ProfPrincipal" class="java.lang.String"/>
<field name="classe_PeriodeNom" class="java.lang.String"/>
<field name="classe_PeriodeDebut" class="java.lang.String"/>
<field name="textSignature" class="java.lang.String"/>
<field name="personneId" class="java.lang.Long"/>
<field name="pageId" class="java.lang.String"/>
+ <field name="departs" class="java.util.List"/>
<group name="personne" isStartNewPage="true">
<groupExpression><![CDATA[$F{pageId}]]></groupExpression>
<groupHeader>
</textField>
</band>
<band height="38" splitType="Stretch">
+ <printWhenExpression><![CDATA[$F{absences}.size()!=0]]></printWhenExpression>
<subreport runToBottom="false">
- <reportElement uuid="ba5af0dd-a403-4994-a187-af480b90c3ae" x="0" y="0" width="539" height="32"/>
+ <reportElement uuid="ba5af0dd-a403-4994-a187-af480b90c3ae" key="absences" x="0" y="0" width="539" height="32"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{absences})]]></dataSourceExpression>
- <subreportExpression><![CDATA[$P{tableau}]]></subreportExpression>
+ <subreportExpression><![CDATA[$P{tableauAbsences}]]></subreportExpression>
+ </subreport>
+ </band>
+ <band height="38" splitType="Stretch">
+ <printWhenExpression><![CDATA[$F{retards}.size()!=0]]></printWhenExpression>
+ <subreport runToBottom="false">
+ <reportElement uuid="ba5af0dd-a403-4994-a187-af480b90c3ae" key="retards" x="0" y="0" width="539" height="32"/>
+ <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{retards})]]></dataSourceExpression>
+ <subreportExpression><![CDATA[$P{tableauRetards}]]></subreportExpression>
+ </subreport>
+ </band>
+ <band height="35" splitType="Stretch">
+ <printWhenExpression><![CDATA[$F{departs}.size()!=0]]></printWhenExpression>
+ <subreport runToBottom="false">
+ <reportElement uuid="ba5af0dd-a403-4994-a187-af480b90c3ae" key="departs" x="0" y="0" width="539" height="32"/>
+ <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{departs})]]></dataSourceExpression>
+ <subreportExpression><![CDATA[$P{tableauDeparts}]]></subreportExpression>
</subreport>
</band>
<band height="30" splitType="Stretch">
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="A4" pageWidth="595" pageHeight="842" columnWidth="539" leftMargin="28" rightMargin="28" topMargin="28" bottomMargin="28">
- <property name="ireport.zoom" value="1.5"/>
- <property name="ireport.x" value="0"/>
- <property name="ireport.y" value="0"/>
- <style name="titre_document" hAlign="Center" fontName="Arial" fontSize="18"/>
- <style name="label" hAlign="Left" fontName="Arial" fontSize="10"/>
- <style name="valeur_champ" fontName="Arial" fontSize="10"/>
- <parameter name="tableau" class="java.lang.Object" isForPrompting="false"/>
- <parameter name="ligneMatiere" class="java.lang.Object" isForPrompting="false"/>
- <parameter name="ligneSousMatiere" class="java.lang.Object" isForPrompting="false"/>
- <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
- <defaultValueExpression><![CDATA["/home/olivier/Documents/notes/jasper/"]]></defaultValueExpression>
- </parameter>
- <parameter name="logo" class="java.lang.Object"/>
- <parameter name="cachet" class="java.lang.Object"/>
- <field name="classe_ProfPrincipal" class="java.lang.String"/>
- <field name="classe_PeriodeNom" class="java.lang.String"/>
- <field name="classe_PeriodeDebut" class="java.lang.String"/>
- <field name="classe_PeriodeFin" class="java.lang.String"/>
- <field name="eleve_Nom" class="java.lang.String"/>
- <field name="eleve_Prenom" class="java.lang.String"/>
- <field name="eleve_Regime" class="java.lang.String"/>
- <field name="eleve_Sexe" class="java.lang.String"/>
- <field name="eleve_Classe" class="java.lang.String"/>
- <field name="eleve_ClasseLibelleLong" class="java.lang.String"/>
- <field name="eleve_DateNaissance" class="java.lang.String"/>
- <field name="parent1_Nom" class="java.lang.String"/>
- <field name="parent1_Prenom" class="java.lang.String"/>
- <field name="parent1_Adresse" class="java.lang.String"/>
- <field name="parent1_CodePostal" class="java.lang.String"/>
- <field name="parent1_Ville" class="java.lang.String"/>
- <field name="parent2_Nom" class="java.lang.String"/>
- <field name="parent2_Prenom" class="java.lang.String"/>
- <field name="parent2_Adresse" class="java.lang.String"/>
- <field name="parent2_CodePostal" class="java.lang.String"/>
- <field name="parent2_Ville" class="java.lang.String"/>
- <field name="eleve_NbAbsNonExc" class="java.lang.String"/>
- <field name="eleve_NbAbsExc" class="java.lang.String"/>
- <field name="eleve_NbAbsence" class="java.lang.String"/>
- <field name="eleve_NbRetard" class="java.lang.String"/>
- <field name="dateDuJour" class="java.lang.String"/>
- <field name="textCorpsDeLettre" class="java.lang.String"/>
- <field name="textAdresse" class="java.lang.String"/>
- <field name="retards" class="java.util.List"/>
- <field name="absences" class="java.util.List"/>
- <field name="donneesTableau" class="java.util.List"/>
- <field name="etablissement" class="java.lang.String"/>
- <field name="textEtablissement" class="java.lang.String"/>
- <field name="textSignature" class="java.lang.String"/>
- <field name="personneId" class="java.lang.Long"/>
-<field name="pageId" class="java.lang.String"/>
- <group name="personne" isStartNewPage="true">
- <groupExpression><![CDATA[$F{pageId}]]></groupExpression>
- <groupHeader>
- <band height="1"/>
- </groupHeader>
- </group>
- <detail>
- <band height="255" splitType="Stretch">
- <textField isStretchWithOverflow="true" isBlankWhenNull="true">
- <reportElement style="valeur_champ" stretchType="RelativeToBandHeight" x="263" y="133" width="276" height="99"/>
- <textElement markup="html">
- <font fontName="Arial" pdfFontName="Helvetica" isPdfEmbedded="true"/>
- </textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{textAdresse}]]></textFieldExpression>
- </textField>
- <textField isBlankWhenNull="true">
- <reportElement x="103" y="0" width="436" height="80"/>
- <textElement markup="html">
- <font fontName="Arial" size="10" pdfFontName="Helvetica" isPdfEmbedded="true"/>
- </textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{textEtablissement}]]></textFieldExpression>
- </textField>
- <image isUsingCache="true" isLazy="true" onErrorType="Blank">
- <reportElement x="0" y="0" width="99" height="94"/>
- <imageExpression class="java.io.InputStream"><![CDATA[$P{logo}]]></imageExpression>
- </image>
- </band>
- <band height="52" splitType="Stretch">
- <textField isStretchWithOverflow="true" isBlankWhenNull="true">
- <reportElement style="valeur_champ" stretchType="RelativeToBandHeight" x="0" y="0" width="539" height="48"/>
- <textElement textAlignment="Justified" markup="html">
- <font fontName="Arial" isPdfEmbedded="true"/>
- </textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{textCorpsDeLettre}]]></textFieldExpression>
- </textField>
- </band>
- <band height="27" splitType="Stretch">
- <subreport runToBottom="false">
- <reportElement x="0" y="1" width="539" height="21"/>
- <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{retards})]]></dataSourceExpression>
- <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{tableau}]]></subreportExpression>
- </subreport>
- </band>
- <band height="30" splitType="Stretch">
- <textField isStretchWithOverflow="true" isBlankWhenNull="true">
- <reportElement style="valeur_champ" stretchType="RelativeToTallestObject" x="375" y="0" width="164" height="30"/>
- <textElement verticalAlignment="Top" markup="html">
- <font fontName="Arial" size="9" isItalic="false" pdfFontName="Helvetica" isPdfEmbedded="true"/>
- </textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{textSignature}]]></textFieldExpression>
- </textField>
- </band>
- <band height="69">
- <image hAlign="Center" vAlign="Middle" isUsingCache="true" isLazy="true">
- <reportElement x="421" y="0" width="67" height="67"/>
- <imageExpression class="java.io.InputStream"><![CDATA[$P{cachet}]]></imageExpression>
- </image>
- </band>
- </detail>
-</jasperReport>
<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TableauAbsences1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
- <property name="ireport.zoom" value="1.0"/>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Tableau des absences" language="groovy" pageWidth="539" pageHeight="842" columnWidth="539" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="5a546a58-8f2c-42fe-a1f2-10e693b742f1">
+ <property name="ireport.zoom" value="1.5"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<field name="date" class="java.util.Date"/>
<field name="heureFin" class="java.lang.String"/>
<field name="motif" class="java.lang.String"/>
<columnHeader>
- <band height="21">
+ <band height="40">
<staticText>
- <reportElement mode="Opaque" x="0" y="1" width="150" height="20" backcolor="#ABA6A6"/>
+ <reportElement uuid="098a7c4b-0c5b-4a42-8b09-685d4e160dde" mode="Opaque" x="0" y="20" width="150" height="20" backcolor="#ABA6A6"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Début]]></text>
</staticText>
<staticText>
- <reportElement mode="Opaque" x="150" y="1" width="150" height="20" backcolor="#ABA6A6"/>
+ <reportElement uuid="d78b93bb-c722-4ce7-b995-95daae2d21f9" mode="Opaque" x="150" y="20" width="150" height="20" backcolor="#ABA6A6"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Fin]]></text>
</staticText>
<staticText>
- <reportElement mode="Opaque" x="300" y="1" width="230" height="20" backcolor="#ABA6A6"/>
+ <reportElement uuid="70b1ba19-14b3-4046-a07c-a0f914e472ec" mode="Opaque" x="300" y="20" width="239" height="20" backcolor="#ABA6A6"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Motif d'absence]]></text>
</staticText>
+ <staticText>
+ <reportElement uuid="ee9d6f4a-7255-417a-8448-f7924b25d151" x="0" y="0" width="100" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Absences : ]]></text>
+ </staticText>
</band>
</columnHeader>
<detail>
<band height="21" splitType="Stretch">
<textField>
- <reportElement x="0" y="1" width="150" height="20"/>
+ <reportElement uuid="218a146a-328e-4974-b46f-f3fffbbacfff" x="0" y="0" width="150" height="21"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{heureDebut}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{heureDebut}]]></textFieldExpression>
</textField>
<textField>
- <reportElement x="150" y="1" width="150" height="20"/>
+ <reportElement uuid="8db216d9-3de0-42b6-9a63-5efc468f69dc" x="150" y="0" width="150" height="21"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{heureFin}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{heureFin}]]></textFieldExpression>
</textField>
<textField>
- <reportElement x="300" y="1" width="239" height="20"/>
+ <reportElement uuid="d0de74ab-9623-4977-9eb5-d99d96db052d" x="300" y="0" width="239" height="21"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{motif}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{motif}]]></textFieldExpression>
</textField>
</band>
</detail>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TableauAbsences1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
- <property name="ireport.zoom" value="1.0"/>
- <property name="ireport.x" value="0"/>
- <property name="ireport.y" value="0"/>
- <field name="date" class="java.util.Date"/>
- <field name="heureDebut" class="java.lang.String"/>
- <field name="heureFin" class="java.lang.String"/>
- <field name="motif" class="java.lang.String"/>
- <detail>
- <band height="24" splitType="Stretch">
- <textField>
- <reportElement x="0" y="0" width="555" height="20"/>
- <textElement>
- <font fontName="Arial" isPdfEmbedded="true"/>
- </textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{heureDebut}+" "+$F{heureFin}+", Motif : "+$F{motif}]]></textFieldExpression>
- </textField>
- </band>
- </detail>
-</jasperReport>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="texte absence" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="25fe69b6-2ff9-4902-b142-0220cb7ff16e">
+ <property name="ireport.zoom" value="1.0"/>
+ <property name="ireport.x" value="0"/>
+ <property name="ireport.y" value="0"/>
+ <field name="heureDebut" class="java.lang.String"/>
+ <field name="heureFin" class="java.lang.String"/>
+ <field name="motif" class="java.lang.String"/>
+ <columnHeader>
+ <band height="26">
+ <staticText>
+ <reportElement uuid="b7ac67d1-d2c4-4b76-9b2c-f042a87afa5d" x="0" y="0" width="595" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Liste des absences : ]]></text>
+ </staticText>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="21" splitType="Stretch">
+ <textField isBlankWhenNull="true">
+ <reportElement uuid="8f9985f7-e37c-4f37-94b3-ecba9d164e6a" x="0" y="0" width="595" height="20"/>
+ <textElement>
+ <font fontName="Arial" isPdfEmbedded="true"/>
+ </textElement>
+ <textFieldExpression><![CDATA[$F{heureDebut}+" "+$F{heureFin}+", Motif : "+$F{motif}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+</jasperReport>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Tableau des départs" pageWidth="539" pageHeight="842" columnWidth="539" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="0dee8731-d149-4c97-9337-43742c5f1fe2">
+ <property name="ireport.zoom" value="1.5"/>
+ <property name="ireport.x" value="0"/>
+ <property name="ireport.y" value="0"/>
+ <field name="date" class="java.util.Date"/>
+ <field name="heureDebut" class="java.lang.String"/>
+ <field name="heureFin" class="java.lang.String"/>
+ <field name="motif" class="java.lang.String"/>
+ <field name="dateDepart" class="java.lang.String"/>
+ <columnHeader>
+ <band height="50">
+ <staticText>
+ <reportElement uuid="1f36c966-0763-45f8-8cff-42c122f81e27" mode="Opaque" x="0" y="20" width="78" height="30" backcolor="#ABA6A6"/>
+ <textElement textAlignment="Center">
+ <font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
+ </textElement>
+ <text><![CDATA[Date]]></text>
+ </staticText>
+ <staticText>
+ <reportElement uuid="4a7fca2c-ec75-4970-9a93-1f291e795767" mode="Opaque" x="78" y="20" width="100" height="30" backcolor="#ABA6A6"/>
+ <textElement textAlignment="Center">
+ <font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
+ </textElement>
+ <text><![CDATA[Heure de départ du cours]]></text>
+ </staticText>
+ <staticText>
+ <reportElement uuid="ba42e0b0-627f-457a-b7b2-439fc85c7349" mode="Opaque" x="178" y="20" width="100" height="30" backcolor="#ABA6A6"/>
+ <textElement textAlignment="Center">
+ <font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
+ </textElement>
+ <text><![CDATA[Heure de fin du cours]]></text>
+ </staticText>
+ <staticText>
+ <reportElement uuid="5cf2417f-116d-457c-81d6-07a3e38ea135" mode="Opaque" x="278" y="20" width="261" height="30" backcolor="#ABA6A6"/>
+ <textElement textAlignment="Center">
+ <font fontName="Arial" size="11" isBold="false" isPdfEmbedded="true"/>
+ </textElement>
+ <text><![CDATA[Motif du départ]]></text>
+ </staticText>
+ <staticText>
+ <reportElement uuid="1fd682f7-9c3b-46e0-a8cc-0846f51feedc" x="0" y="0" width="278" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Départs anticipés : ]]></text>
+ </staticText>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="21" splitType="Stretch">
+ <textField>
+ <reportElement uuid="4aabfc36-1a26-4b74-8c54-2d31460c0390" x="78" y="0" width="100" height="21"/>
+ <textElement>
+ <font fontName="Arial" isPdfEmbedded="true"/>
+ </textElement>
+ <textFieldExpression><![CDATA[$F{heureDebut}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement uuid="c09ff65f-60be-41bf-8bdf-d6f1539778b1" x="178" y="0" width="100" height="21"/>
+ <textElement>
+ <font fontName="Arial" isPdfEmbedded="true"/>
+ </textElement>
+ <textFieldExpression><![CDATA[$F{heureFin}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement uuid="c804f492-8adb-4775-853a-f84b511dc2c2" x="278" y="0" width="261" height="21"/>
+ <textElement>
+ <font fontName="Arial" isPdfEmbedded="true"/>
+ </textElement>
+ <textFieldExpression><![CDATA[$F{motif}]]></textFieldExpression>
+ </textField>
+ <textField>
+ <reportElement uuid="e010d7ea-682c-48e8-9d62-ac1dc9780f1a" x="0" y="0" width="78" height="21"/>
+ <textElement/>
+ <textFieldExpression><![CDATA[$F{dateDepart}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+</jasperReport>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Texte départs" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="20" uuid="a1d7ca02-60e9-42b4-8671-82577dad7a83">
+ <property name="ireport.zoom" value="1.0"/>
+ <property name="ireport.x" value="0"/>
+ <property name="ireport.y" value="0"/>
+ <field name="date" class="java.util.Date"/>
+ <field name="heureDebut" class="java.lang.String"/>
+ <field name="heureFin" class="java.lang.String"/>
+ <field name="motif" class="java.lang.String"/>
+ <field name="dateDepart" class="java.lang.String"/>
+ <columnHeader>
+ <band height="26">
+ <staticText>
+ <reportElement uuid="1233e87f-a438-40d1-975c-316f9f475bb9" x="0" y="0" width="595" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Départs anticipés :]]></text>
+ </staticText>
+ </band>
+ </columnHeader>
+ <detail>
+ <band height="21" splitType="Stretch">
+ <textField>
+ <reportElement uuid="0b61abe6-c295-4e28-90b7-e69c787282f7" x="0" y="0" width="595" height="20"/>
+ <textElement>
+ <font fontName="Arial" isPdfEmbedded="true"/>
+ </textElement>
+ <textFieldExpression><![CDATA["Le "+$F{dateDepart}+", départ anticipé à "+$F{heureDebut}+" au lieu de "+$F{heureFin}+", Motif : "+$F{motif}]]></textFieldExpression>
+ </textField>
+ </band>
+ </detail>
+</jasperReport>
<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TableauAbsences1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
- <property name="ireport.zoom" value="1.0"/>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Tableau des retards" language="groovy" pageWidth="539" pageHeight="842" columnWidth="539" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="f82ce77a-a03d-440c-b610-c7fb65327ce3">
+ <property name="ireport.zoom" value="1.5"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<field name="date" class="java.util.Date"/>
<field name="heureDebut" class="java.lang.String"/>
<field name="heureFin" class="java.lang.String"/>
<field name="motif" class="java.lang.String"/>
+ <field name="dateRetard" class="java.lang.String"/>
<columnHeader>
- <band height="31">
+ <band height="50">
<staticText>
- <reportElement mode="Opaque" x="0" y="0" width="78" height="31" backcolor="#C2B4B4"/>
+ <reportElement uuid="03dae41e-7573-4427-ab5e-119cfb25ce0a" mode="Opaque" x="0" y="20" width="78" height="30" backcolor="#C2B4B4"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Date]]></text>
</staticText>
<staticText>
- <reportElement mode="Opaque" x="78" y="0" width="100" height="31" backcolor="#C2B4B4"/>
+ <reportElement uuid="d2f948ca-a3d5-45a8-83c4-92c9bbf4bbf0" mode="Opaque" x="78" y="20" width="100" height="30" backcolor="#C2B4B4"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isPdfEmbedded="true"/>
</textElement>
du cours]]></text>
</staticText>
<staticText>
- <reportElement mode="Opaque" x="178" y="0" width="100" height="31" backcolor="#C2B4B4"/>
+ <reportElement uuid="c68d5910-7da0-4096-99d8-f9d6b4f0e3ad" mode="Opaque" x="178" y="20" width="100" height="30" backcolor="#C2B4B4"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isPdfEmbedded="true"/>
</textElement>
d'arrivée]]></text>
</staticText>
<staticText>
- <reportElement mode="Opaque" x="278" y="0" width="243" height="31" backcolor="#C2B4B4"/>
+ <reportElement uuid="455a984d-4834-436a-80c3-533ed906fdb3" mode="Opaque" x="278" y="20" width="261" height="30" backcolor="#C2B4B4"/>
<textElement textAlignment="Center">
<font fontName="Arial" size="11" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[Motif de retard]]></text>
</staticText>
+ <staticText>
+ <reportElement uuid="c0942673-4ca5-43e4-a41b-9c4c09a914d2" x="0" y="0" width="100" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Retards :]]></text>
+ </staticText>
</band>
</columnHeader>
<detail>
<band height="22" splitType="Stretch">
<textField pattern="">
- <reportElement x="0" y="0" width="78" height="20"/>
+ <reportElement uuid="23d6d610-2acd-4023-a92a-6a674962033b" x="0" y="0" width="78" height="22"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{date}.format("dd/MM/yyyy")]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{dateRetard}]]></textFieldExpression>
</textField>
<textField>
- <reportElement x="78" y="0" width="100" height="20"/>
+ <reportElement uuid="e64e34b8-a910-414d-9f2e-8b1506f49925" x="78" y="0" width="100" height="22"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{heureDebut}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{heureDebut}]]></textFieldExpression>
</textField>
<textField>
- <reportElement x="178" y="0" width="100" height="20"/>
+ <reportElement uuid="d84a6758-a7aa-426f-9a87-c066f645556f" x="178" y="0" width="100" height="22"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{heureFin}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{heureFin}]]></textFieldExpression>
</textField>
<textField>
- <reportElement x="278" y="0" width="243" height="20"/>
+ <reportElement uuid="79ab5a0f-e347-4a82-aeeb-69e21aa2e10c" x="278" y="0" width="261" height="22"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{motif}]]></textFieldExpression>
+ <textFieldExpression><![CDATA[$F{motif}]]></textFieldExpression>
</textField>
</band>
</detail>
<?xml version="1.0" encoding="UTF-8"?>
-<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TableauAbsences1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Texte des retards" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="d8ddd0bc-bed8-47a3-a4c1-5474b9cf2360">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<field name="heureFin" class="java.lang.String"/>
<field name="motif" class="java.lang.String"/>
<field name="dateRetard" class="java.lang.String"/>
+ <columnHeader>
+ <band height="26">
+ <staticText>
+ <reportElement uuid="f65b8211-d555-437f-8ce3-7de3a84d7bed" x="0" y="0" width="595" height="20"/>
+ <textElement>
+ <font fontName="Arial" size="8"/>
+ </textElement>
+ <text><![CDATA[Retards :]]></text>
+ </staticText>
+ </band>
+ </columnHeader>
<detail>
- <band height="23" splitType="Stretch">
+ <band height="21" splitType="Stretch">
<textField pattern="">
- <reportElement x="12" y="0" width="471" height="23"/>
+ <reportElement uuid="af8ea9f5-33db-4edc-ad58-2b69d1fb7852" x="0" y="0" width="595" height="20"/>
<textElement>
<font fontName="Arial" isPdfEmbedded="true"/>
</textElement>
- <textFieldExpression class="java.lang.String"><![CDATA["Le "+$F{dateRetard}+", arrivé(e) à "+$F{heureFin}+" au lieu de "+$F{heureDebut}+", Motif : "+$F{motif}]]></textFieldExpression>
- </textField>
- <textField>
- <reportElement x="483" y="3" width="72" height="20"/>
- <textElement/>
- <textFieldExpression class="java.lang.String"><![CDATA[$F{date}]]></textFieldExpression>
+ <textFieldExpression><![CDATA["Le "+$F{dateRetard}+", arrivé(e) à "+$F{heureFin}+" au lieu de "+$F{heureDebut}+", Motif : "+$F{motif}]]></textFieldExpression>
</textField>
</band>
</detail>
.formImport label {
- text-align: right;
+ text-align: right;
}
.formImport table {
- float: right;
- border: none;
+ float: right;
+ border: none;
}
.formImport form {
- border: none;
+ border: none;
}
.divFormImport form div {
- border: none;
- margin: auto;
+ border: none;
+ margin: auto;
}
.entete {
- background-image: url("../images/skin/white-top-bottom.gif"); /*background: url("../images/skin/shadow.jpg") repeat scroll 0 0 #FFFFFF;*/
- color: #15428B;
- font-size: 11px;
- font-weight: bold;
- line-height: 17px;
- padding: 2px 6px;
- text-align: center;
+ background-image: url("../images/skin/white-top-bottom.gif"); /*background: url("../images/skin/shadow.jpg") repeat scroll 0 0 #FFFFFF;*/
+ color: #15428B;
+ font-size: 11px;
+ font-weight: bold;
+ line-height: 17px;
+ padding: 2px 6px;
+ text-align: center;
}
/*Ajout*/
table {
- border: 0px;
+ border: 0px;
}
.portal-default_table thead {
- font-size: 11px;
- font-weight: bold;
- color: #3F61A0;
- text-align: center;
- background-color: #D7DCE7;
+ font-size: 11px;
+ font-weight: bold;
+ color: #3F61A0;
+ text-align: center;
+ background-color: #D7DCE7;
}
.portal-default_table .footer tr td {
- font-size: 11px;
- font-weight: bold; /*color: #3F61A0;*/
- text-align: center;
- background-color: #D7DCE7;
+ font-size: 11px;
+ font-weight: bold; /*color: #3F61A0;*/
+ text-align: center;
+ background-color: #D7DCE7;
}
.portal-default_table th td {
- border: 1px solid #728CBD;
- font-size: 11px;
- padding: 5px;
- text-align: center;
- width: auto;
+ border: 1px solid #728CBD;
+ font-size: 11px;
+ padding: 5px;
+ text-align: center;
+ width: auto;
}
h2 {
- font-size: 1.5em;
- text-align: left;
- padding-bottom: 5;
- padding-top: 5;
- border-bottom: none;
+ font-size: 1.5em;
+ text-align: left;
+ padding-bottom: 5;
+ padding-top: 5;
+ border-bottom: none;
}
h1, h2, h3, h4, h5, h6 {
- color: #3F61A0;
- margin-bottom: 0;
+ color: #3F61A0;
+ margin-bottom: 0;
}
.x-grid3-hd-inner {
- font-weight: bold;
- text-align: center;
+ font-weight: bold;
+ text-align: center;
}
.x-grid3-td-7 {
- cursor: pointer;
+ cursor: pointer;
}
.x-grid3-col {
- cursor: default;
+ cursor: default;
}
.portal-messages .error ul {
- padding-left: 20px;
+ padding-left: 20px;
}
.portal-messages .success ul {
- padding-left: 20px;
+ padding-left: 20px;
}
.portal-messages .error li {
- list-style-type: disc;
- text-align: left;
+ list-style-type: disc;
+ text-align: left;
}
.portal-messages .success li {
- list-style-type: disc;
- text-align: left;
+ list-style-type: disc;
+ text-align: left;
}
.label {
- color: #3F61A0;
- font-size: 1em;
- font-weight: bold;
- vertical-align: middle;
+ color: #3F61A0;
+ font-size: 1em;
+ font-weight: bold;
+ vertical-align: middle;
}
.vertical-header-grid .x-grid3-header table,
.vertical-header-grid .x-grid3-header-offset td {
- height: 80px !important;
+ height: 80px !important;
}
.vertical-header-grid .x-grid3-hd-row td.x-grid3-hd * {
- -webkit-transform: rotate(90deg);
- -moz-transform: rotate(90deg);
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
}
.ext-ie .vertical-header-grid .x-grid3-hd-row td.x-grid3-hd * {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation = 1);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation = 1);
}
.vertical-header-grid .x-grid3-hd-inner {
- overflow: visible;
+ overflow: visible;
}
.vertical-header-grid .x-grid3-hd-row td.x-grid3-hd {
- vertical-align: top;
+ vertical-align: top;
}
.grid-services-informations .x-grid3-row-first {
- font-weight: bold;
- background-color: #D7DCE7;
- border: solid 1px #728CBD;
+ font-weight: bold;
+ background-color: #D7DCE7;
+ border: solid 1px #728CBD;
}
.grid-services-informations .x-grid3-row {
- border-bottom: solid 1px #728CBD;
- border-right: solid 1px #728CBD;
- border-left: solid 1px #728CBD;
+ border-bottom: solid 1px #728CBD;
+ border-right: solid 1px #728CBD;
+ border-left: solid 1px #728CBD;
}
.grid-services-informations .x-grid3-row-last {
- border-bottom: solid 1px #728CBD;
+ border-bottom: solid 1px #728CBD;
}
ul.x-tab-strip {
- width: auto;
+ width: auto;
}
td, th {
- padding: 0px;
+ padding: 0px;
}
.separateur {
- background: none repeat scroll 0 0 #DDDDDD;
- border: medium none;
- clear: both;
- color: #DDDDDD;
- float: none;
- height: 0.1em;
- margin: 20 0 20;
- width: 100%;
+ background: none repeat scroll 0 0 #DDDDDD;
+ border: medium none;
+ clear: both;
+ color: #DDDDDD;
+ float: none;
+ height: 0.1em;
+ margin: 20 0 20;
+ width: 100%;
}
#idTabNotes ul.x-tab-strip li {
- float: left;
- margin-left: 2px;
+ float: left;
+ margin-left: 2px;
}
/*.x-form-item-label {*/
/*}*/
.x-panel-zone {
- background-color: #EFEFEF;
+ background-color: #EFEFEF;
}
.x-panel {
- color: #15428B;
- border-color: #D0D0D0;
+ color: #15428B;
+ border-color: #D0D0D0;
}
.x-panel-body {
- border-top-color: #D0D0D0;
+ border-top-color: #D0D0D0;
}
.ext-gecko .x-form-text, .ext-ie8 .x-form-text {
- padding-bottom: 2px;
+ padding-bottom: 2px;
}
.x-toolbar {
- background-color: #EDEDED;
- background-image: url(../js/lib/extjs-3.2.0/resources/images/gray/toolbar/bg.gif);
- border-color: #D0D0D0;
+ background-color: #EDEDED;
+ background-image: url(../js/lib/extjs-3.2.0/resources/images/gray/toolbar/bg.gif);
+ border-color: #D0D0D0;
}
.x-row-editor {
- font: 11px arial, tahoma, helvetica, sans-serif;
- color: #333333;
- text-align: center;
+ font: 11px arial, tahoma, helvetica, sans-serif;
+ color: #333333;
+ text-align: center;
}
.x-row-editor-body {
- overflow: hidden;
- zoom: 1;
- background: none repeat scroll 0 0 #EBF2FB;
- padding-top: 2px;
+ overflow: hidden;
+ zoom: 1;
+ background: none repeat scroll 0 0 #EBF2FB;
+ padding-top: 2px;
}
.x-row-editor-footer {
- height: 2px;
- overflow: hidden;
- background: url("../images/row-editor-bg.gif") repeat-x scroll 0 -2px transparent;
+ height: 2px;
+ overflow: hidden;
+ background: url("../images/row-editor-bg.gif") repeat-x scroll 0 -2px transparent;
}
.x-row-editor .x-btns {
- position: absolute;
- top: 28px;
- left: 20px;
- padding-left: 5px;
- background: transparent url(../images/row-editor-btns.gif) no-repeat 0 0;
+ position: absolute;
+ top: 28px;
+ left: 20px;
+ padding-left: 5px;
+ background: transparent url(../images/row-editor-btns.gif) no-repeat 0 0;
}
.x-row-editor .x-btns .x-plain-bwrap {
- padding-right: 5px;
- background: transparent url(../images/row-editor-btns.gif) no-repeat right -31px;
+ padding-right: 5px;
+ background: transparent url(../images/row-editor-btns.gif) no-repeat right -31px;
}
.x-row-editor .x-btns .x-plain-body {
- background: transparent url(../images/row-editor-btns.gif) repeat-x 0 -62px;
- height: 31px;
+ background: transparent url(../images/row-editor-btns.gif) repeat-x 0 -62px;
+ height: 31px;
}
.x-row-editor .x-btns .x-table-layout-cell {
- padding: 3px;
+ padding: 3px;
}
/* Fixes for IE6/7 trigger fields */
.ext-ie6 .x-row-editor .x-form-field-wrap .x-form-trigger, .ext-ie7 .x-row-editor .x-form-field-wrap .x-form-trigger {
- top: 1px;
+ top: 1px;
}
.ext-ie6 .x-row-editor .x-form-field-trigger-wrap, .ext-ie7 .x-row-editor .x-form-field-trigger-wrap {
- margin-top: -1px;
+ margin-top: -1px;
}
.errorTip .x-tip-body ul {
- list-style-type: disc;
- margin-left: 15px;
+ list-style-type: disc;
+ margin-left: 15px;
}
.ext-ie .x-row-editor-footer {
- margin-top: -1px;
+ margin-top: -1px;
}
.ext-ie .x-row-editor .x-form-text {
- margin: 0 !important;
+ margin: 0 !important;
}
.x-row-editor-header {
- height: 2px;
- overflow: hidden;
- background: transparent url(../images/row-editor-bg.gif) repeat-x 0 0;
+ height: 2px;
+ overflow: hidden;
+ background: transparent url(../images/row-editor-bg.gif) repeat-x 0 0;
}
.portal-messages .success {
- background-image: url("../images/ok.gif");
+ background-image: url("../images/ok.gif");
}
.portal-messages .erreor {
- background-image: url("../images/warning.gif");
+ background-image: url("../images/warning.gif");
}
.x-btn-text-icon .x-btn-icon-small-left .x-btn-text {
- padding-left: 28px;
+ padding-left: 28px;
}
.x-grid-consultation {
- padding-top: 6px;
+ padding-top: 6px;
}
.x-grid3-row td {
- vertical-align: middle;
+ vertical-align: middle;
}
.ux-menu ul li a.menuCoche {
- padding-left: 15px;
- background-image: url("../images/checkmenu.png");
- background-repeat: no-repeat;
- background-position: center left;
+ padding-left: 15px;
+ background-image: url("../images/checkmenu.png");
+ background-repeat: no-repeat;
+ background-position: center left;
}
.ux-menu ul li a.menuDeCoche {
- padding-left: 15px;
+ padding-left: 15px;
}
.x-form-check-wrap input {
- margin-left: 26px;
+ margin-left: 26px;
}
.x-grid3-locked {
- overflow: hidden;
- position: absolute;
+ overflow: hidden;
+ position: absolute;
}
.x-grid3-unlocked {
- overflow: hidden;
- position: absolute;
+ overflow: hidden;
+ position: absolute;
}
.x-grid3-locked {
- border-right: 1px solid #99BBE8;
+ border-right: 1px solid #99BBE8;
}
.x-grid3-locked .x-grid3-scroller {
- overflow: hidden;
- border-right: 1px solid #99BBE8;
+ overflow: hidden;
+ border-right: 1px solid #99BBE8;
}
.x-grid3-locked .x-grid3-row {
- border-right: 0;
+ border-right: 0;
}
.x-grid3-scroll-spacer {
- height: 19px;
+ height: 19px;
}
.x-grid3-unlocked .x-grid3-header-offset {
- padding-left: 0;
+ padding-left: 0;
}
.x-grid3-unlocked .x-grid3-row {
- border-left: 0;
+ border-left: 0;
}
.footer {
- font-size: 11px;
- font-weight: bold;
- text-align: center;
- background-color: #D7DCE7;
+ font-size: 11px;
+ font-weight: bold;
+ text-align: center;
+ background-color: #D7DCE7;
}
/* Css de la page de paramétrage de calendrier hébdomadaire*/
.plage-non-valide {
- background-color: #FF0000;
+ background-color: #FF0000;
}
.plage-matin {
- background-color: #FFCC00;
+ background-color: #FFCC00;
}
.plage-soir {
- background-color: #66CC66;
+ background-color: #66CC66;
}
.colSelectionnee {
- background-color: #857DFE;
- height: 20px;
+ background-color: #857DFE;
+ height: 20px;
}
.smsEditeurInfoMessage {
- font-style: italic;
- font-size: 12px;
- color: black;
+ font-style: italic;
+ font-size: 12px;
+ color: black;
}
.smsEditeurMessageTronque {
- font-style: normal;
- color: red;
- font-size: 12px;
+ font-style: normal;
+ color: red;
+ font-size: 12px;
}
.cssLabel {
- font : normal 12px tahoma, arial, helvetica, sans-serif;
- color : #3F61A0;
- font-weight:bold;
- line-height:18px
+ font: normal 12px tahoma, arial, helvetica, sans-serif;
+ color: #3F61A0;
+ font-weight: bold;
+ line-height: 18px
}
.ext-ie.layout-html #divBreadCrumbs button {
- padding-top: 3px;
+ padding-top: 3px;
}
.x-grid3-check-col.disabled {
- background-image:url(../images/menu/unchecked-disabled.gif);
+ background-image: url(../images/menu/unchecked-disabled.gif);
}
.x-grid3-check-col-on.disabled {
- background-image:url(../images/menu/checked-disabled.gif);
+ background-image: url(../images/menu/checked-disabled.gif);
}
#texteImport {
- margin-left: 20%;
- margin-right: 20%;
- margin-top: 10px;
- margin-bottom: 10px;
+ margin-left: 20%;
+ margin-right: 20%;
+ margin-top: 10px;
+ margin-bottom: 10px;
}
#radioGroupStsUdt {
- width: 120px;
- margin-left: auto;
- margin-right: auto;
-}
\ No newline at end of file
+ width: 120px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.modele-absences-checkbox-radio {
+ margin-left: 0 !important;
+}
+
items:[
{
region : 'north',
- height : 45,
+ height : 40,
border: false,
frame : false,
items : [
layout : 'border',
items : [
{
- height : 45,
+ height : 40,
region: 'north',
layout: 'column',
- bodyStyle:'padding:15px 15px 5px',
+ bodyStyle:'padding:0px 15px 5px',
border: false,
frame : false,
items: [
region : 'center',
border: false,
frame : false,
- bodyStyle:'padding:15px 15px 5px',
+ bodyStyle:'padding:0px 8px 5px',
items : listeElementModeleView.templatePanel
}
]
eliot.scolarite.parametrages.modelededocument.creermodifier.Constantes = {
- regionId : {
- center : 'center',
- idViewport : 'idViewport',
- idNorthPanel : 'idNorthPanel',
- idCenterPanel : 'idCenterPanel'
+ regionId:{
+ center:'center',
+ idViewport:'idViewport',
+ idNorthPanel:'idNorthPanel',
+ idCenterPanel:'idCenterPanel'
},
- eventId : {
- actionReinitialiser : 'actionReinitialiser',
- actionEnregistrer : 'actionEnregistrer',
- actionApercu : 'actionApercu',
- actionEditerNomTemplate : 'actionEditerNomTemplate',
- actionSelectionneSousRapport : 'actionSelectionneSousRapport',
- actionEditerZone : 'actionEditerZone',
- zoneTexteEdite : 'zoneTexteEdite',
- actionValiderEdition : 'actionValiderEdition',
- actionEnvoyerDonneesEditees : 'actionEnvoyerDonneesEditees',
+ eventId:{
+ actionReinitialiser:'actionReinitialiser',
+ actionEnregistrer:'actionEnregistrer',
+ actionApercu:'actionApercu',
+ actionEditerNomTemplate:'actionEditerNomTemplate',
+ actionSelectionneSousRapport:'actionSelectionneSousRapport',
+ actionEditerZone:'actionEditerZone',
+ zoneTexteEdite:'zoneTexteEdite',
+ actionValiderEdition:'actionValiderEdition',
+ actionEnvoyerDonneesEditees:'actionEnvoyerDonneesEditees',
- zoneLogoEdite : 'zoneLogoEdite',
- zoneCachetEdite : 'zoneCachetEdite',
- actionFocusNomTemplate : 'actionFocusNomTemplate',
- actionChangeBulletinComplement: 'actionChangeBulletinComplement',
- actionEditerPolice: 'actionEditerPolice'
+ zoneLogoEdite:'zoneLogoEdite',
+ zoneCachetEdite:'zoneCachetEdite',
+ actionFocusNomTemplate:'actionFocusNomTemplate',
+ actionChangeBulletinComplement:'actionChangeBulletinComplement',
+ actionChangeAbsenceComplement:'actionChangeAbsenceComplement',
+ actionEditerPolice:'actionEditerPolice'
},
- composantId : {
- btnEnregistrer : 'btnEnregistrer',
- btnAnnulation : 'btnAnnulation',
- btnApercu : 'btnApercu',
- htmleditor : 'htmleditor',
- fileField : 'fileField',
- upLoadTextField : 'upLoadTextField',
- btnValider : 'btnValider',
- titreField : 'titreField'
+ composantId:{
+ btnEnregistrer:'btnEnregistrer',
+ btnAnnulation:'btnAnnulation',
+ btnApercu:'btnApercu',
+ htmleditor:'htmleditor',
+ fileField:'fileField',
+ upLoadTextField:'upLoadTextField',
+ btnValider:'btnValider',
+ titreField:'titreField'
},
- divId : {
- divMessage : 'divMessage'
+ divId:{
+ divMessage:'divMessage'
},
- champPublipostageItemId : {
- premierItem : -1
+ champPublipostageItemId:{
+ premierItem:-1
},
- dataIndex : {
- typeZone : 'typeZone',
- libelle : 'libelle',
- action : 'action'
+ dataIndex:{
+ typeZone:'typeZone',
+ libelle:'libelle',
+ action:'action'
},
- action : {
- memo : 1,
- texteNonEditable : 2,
- sousModele : 3,
- logo : 4,
- cachet : 5,
- bulletin : 6
+ action:{
+ memo:1,
+ texteNonEditable:2,
+ sousModele:3,
+ logo:4,
+ cachet:5,
+ bulletin:6,
+ absences:7
+ },
+
+ absenceOptions:{
+ absences:'absences',
+ retards:'retards',
+ departs:'departs'
+ },
+
+ absenceFormats:{
+ tableau:'TABLEAU',
+ textes:'TEXTE'
}
+
+
};
\ No newline at end of file
eliot.scolarite.parametrages.modelededocument.creermodifier.ListeElementsModeleController
= Ext.extend(Ext.util.Observable, {
- constructor: function() {
- /**
- * La constructeur permet de construire le store de sous rapport, et charger
- * le store
- */
- var NameSpace = eliot.scolarite.parametrages.modelededocument.creermodifier;
- this.Constantes = NameSpace.Constantes;
- this.Modele = NameSpace.Modele;
-
- this.idTemplateJasper = undefined;
- this.champ = undefined;
-
- this.addEvents(
- /**
- * @event zoneTexteEdite est déclenché pour mettre à jours la popUp fenetre
- * @params titre titre de popUp fenetre
- * @params zoneId id de la zone éditée
- * @params texte texte saisie dans la zone
- * @param element
- */
- this.Constantes.eventId.zoneTexteEdite,
- /**
- * @event zoneLogoEdite est déclenché quand le logo est édité
- * @params zoneId id du zone
- * @params titre titre dans popUp fenetre
- */
- this.Constantes.eventId.zoneLogoEdite,
-
- /**
- * @event zoneCachetEdite est déclenché quand le cachet est édité
- * @params zoneId id du zone
- * @params titre titre dans popUp fenetre
- */
- this.Constantes.eventId.zoneCachetEdite
+ constructor:function () {
+ /**
+ * La constructeur permet de construire le store de sous rapport, et charger
+ * le store
+ */
+ var NameSpace = eliot.scolarite.parametrages.modelededocument.creermodifier;
+ this.Constantes = NameSpace.Constantes;
+ this.Modele = NameSpace.Modele;
+
+ this.idTemplateJasper = undefined;
+ this.champ = undefined;
+
+ this.addEvents(
+ /**
+ * @event zoneTexteEdite est déclenché pour mettre à jours la popUp fenetre
+ * @params titre titre de popUp fenetre
+ * @params zoneId id de la zone éditée
+ * @params texte texte saisie dans la zone
+ * @param element
+ */
+ this.Constantes.eventId.zoneTexteEdite,
+ /**
+ * @event zoneLogoEdite est déclenché quand le logo est édité
+ * @params zoneId id du zone
+ * @params titre titre dans popUp fenetre
+ */
+ this.Constantes.eventId.zoneLogoEdite,
+
+ /**
+ * @event zoneCachetEdite est déclenché quand le cachet est édité
+ * @params zoneId id du zone
+ * @params titre titre dans popUp fenetre
+ */
+ this.Constantes.eventId.zoneCachetEdite
);
- // Store de combo de sous rapport
- this.store = new Ext.data.JsonStore({
- fields:[
- {name:'id', type:'int'},
- {name:'libelle', type:'string'}
- ],
- data : []
- });
-
- this.store.loadData(
- this.Modele.data.listeSousRapport
+ // Store de combo de sous rapport
+ this.store = new Ext.data.JsonStore({
+ fields:[
+ {name:'id', type:'int'},
+ {name:'libelle', type:'string'}
+ ],
+ data:[]
+ });
+
+ this.store.loadData(
+ this.Modele.data.listeSousRapport
);
- if (this.Modele.data.listeSousRapport.length) {
- this.sousRapportValeurInitiale = this.store.getAt(0).get('id');
- }
+ if (this.Modele.data.listeSousRapport.length) {
+ this.sousRapportValeurInitiale = this.store.getAt(0).get('id');
+ }
- },
-
- /**
- * Observation la vue du liste éléments de modèle
- * @param listeElementsModeleView
- */
- observeEditeurModeleSms : function(listeElementsModeleView) {
- listeElementsModeleView.addListener(
- this.Constantes.eventId.actionSelectionneSousRapport,
- function(zoneId, sousRapportId) {
-
- this.construitZoneDonneeModifie(
- '',
- zoneId,
- null,
- this.Constantes.action.sousModele,
- sousRapportId
- );
- },
- this
- );
- listeElementsModeleView.addListener(
- this.Constantes.eventId.actionEditerZone,
- function(zoneId, titre, element) {
- this.champ = zoneId;
- if (zoneId === 'logo') {
- this.fireEvent(
- this.Constantes.eventId.zoneLogoEdite,
- zoneId,
- titre
+ },
+
+ /**
+ * Observation la vue du liste éléments de modèle
+ * @param listeElementsModeleView
+ */
+ observeEditeurModeleSms:function (listeElementsModeleView) {
+ listeElementsModeleView.addListener(
+ this.Constantes.eventId.actionSelectionneSousRapport,
+ function (zoneId, sousRapportId) {
+
+ this.construitZoneDonneeModifie(
+ '',
+ zoneId,
+ null,
+ this.Constantes.action.sousModele,
+ sousRapportId
);
- } else {
- if (zoneId === 'cachet') {
- this.fireEvent(
- this.Constantes.eventId.zoneCachetEdite,
- zoneId,
- titre
- );
-
- } else {
- if (Ext.get(zoneId + 'texte')) {
- var texte = '';
- if (zoneId !== 'textTitre') {
- texte = Ext.getCmp(zoneId + 'texte').body.dom.innerHTML;
- }
- else {
- texte = Ext.getCmp(zoneId + 'texte').body.dom.innerHTML;
+ },
+ this
+ );
+ listeElementsModeleView.addListener(
+ this.Constantes.eventId.actionEditerZone,
+ function (zoneId, titre, element) {
+ this.champ = zoneId;
+ if (zoneId === 'logo') {
+ this.fireEvent(
+ this.Constantes.eventId.zoneLogoEdite,
+ zoneId,
+ titre
+ );
+ } else {
+ if (zoneId === 'cachet') {
+ this.fireEvent(
+ this.Constantes.eventId.zoneCachetEdite,
+ zoneId,
+ titre
+ );
+
+ } else {
+ if (Ext.get(zoneId + 'texte')) {
+ var texte = '';
+ if (zoneId !== 'textTitre') {
+ texte = Ext.getCmp(zoneId + 'texte').body.dom.innerHTML;
+ }
+ else {
+ texte = Ext.getCmp(zoneId + 'texte').body.dom.innerHTML;
+ }
+ }
+
+ this.fireEvent(
+ this.Constantes.eventId.zoneTexteEdite,
+ titre,
+ zoneId,
+ texte,
+ element
+ );
+
+ }
}
- }
-
- this.fireEvent(
- this.Constantes.eventId.zoneTexteEdite,
- titre,
- zoneId,
- texte,
- element
- );
-
- }
- }
- },
- this
+ },
+ this
);
- listeElementsModeleView.addListener(
- this.Constantes.eventId.actionChangeBulletinComplement,
- function(zoneId, typeZone, complement) {
- this.changeBulletinComplement(zoneId, typeZone, complement);
- },
- this
- );
-
- },
-
- /**
- * Observation la vue de popUp fenetre d'édition
- * @param popUpFenetreView
- */
- observePopUpFenetreEditionView : function(popUpFenetreView) {
- popUpFenetreView.addListener(
- this.Constantes.eventId.actionValiderEdition,
- function(zoneId, texteEdite, size) {
- this.miseAJoursZone(texteEdite, zoneId);
- this.construitZoneDonneeModifie(
- texteEdite,
- zoneId,
- size,
- this.Constantes.action.memo,
- 0);
- },
- this
+ listeElementsModeleView.addListener(
+ this.Constantes.eventId.actionChangeBulletinComplement,
+ function (zoneId, typeZone, complement) {
+ this.changeBulletinComplement(zoneId, typeZone, complement);
+ },
+ this
);
- },
-
- /**
- * La méthode permet de mettre à jours le zone éditable
- * @param texteEdite
- * @param zoneId
- */
- miseAJoursZone : function(texteEdite, zoneId) {
- var zone = Ext.getCmp(zoneId + 'texte');
- zone.body.update(texteEdite);
- },
-
- /**
- * La méthode permet de construire des données, qui sont les données vienent
- * de modifiées dans les zones
- * @param texteEdite texte éditée
- * @param zoneId id de la zone
- * @param typeZone il y en a 4 types : logo, memo, textNonEditable, sousRapport
- * @param idTemplateJasper id de sous rapport
- */
- construitZoneDonneeModifie : function(texteEdite,
- zoneId,
- size,
- typeZone,
- idTemplateJasper) {
- var donnees = {};
- donnees.champ = zoneId;
- donnees.template = texteEdite;
- donnees.typeZone = typeZone;
- donnees.idTemplateJasper = idTemplateJasper;
- if (size != null) {
- donnees.size = size;
- }
- this.fireEvent(
- this.Constantes.eventId.actionEnvoyerDonneesEditees,
- donnees
+ listeElementsModeleView.addListener(
+ this.Constantes.eventId.actionChangeAbsenceComplement,
+ function (zoneId, typeZone, complement) {
+ this.changeAbsenceComplement(zoneId, typeZone, complement);
+ },
+ this
);
- },
-
- changeBulletinComplement: function(zoneId, typeZone, complement) {
- this.fireEvent(this.Constantes.eventId.actionEnvoyerDonneesEditees,
- {
- champ: zoneId,
- typeZone: typeZone,
- complement: complement
- });
- }
+
+ },
+
+ /**
+ * Observation la vue de popUp fenetre d'édition
+ * @param popUpFenetreView
+ */
+ observePopUpFenetreEditionView:function (popUpFenetreView) {
+ popUpFenetreView.addListener(
+ this.Constantes.eventId.actionValiderEdition,
+ function (zoneId, texteEdite, size) {
+ this.miseAJoursZone(texteEdite, zoneId);
+ this.construitZoneDonneeModifie(
+ texteEdite,
+ zoneId,
+ size,
+ this.Constantes.action.memo,
+ 0);
+ },
+ this
+ );
+ },
+
+ /**
+ * La méthode permet de mettre à jours le zone éditable
+ * @param texteEdite
+ * @param zoneId
+ */
+ miseAJoursZone:function (texteEdite, zoneId) {
+ var zone = Ext.getCmp(zoneId + 'texte');
+ zone.body.update(texteEdite);
+ },
+
+ /**
+ * La méthode permet de construire des données, qui sont les données vienent
+ * de modifiées dans les zones
+ * @param texteEdite texte éditée
+ * @param zoneId id de la zone
+ * @param typeZone il y en a 4 types : logo, memo, textNonEditable, sousRapport
+ * @param idTemplateJasper id de sous rapport
+ */
+ construitZoneDonneeModifie:function (texteEdite, zoneId, size, typeZone, idTemplateJasper) {
+ var donnees = {};
+ donnees.champ = zoneId;
+ donnees.template = texteEdite;
+ donnees.typeZone = typeZone;
+ donnees.idTemplateJasper = idTemplateJasper;
+ if (size != null) {
+ donnees.size = size;
+ }
+
+ this.fireEvent(
+ this.Constantes.eventId.actionEnvoyerDonneesEditees,
+ donnees
+ );
+ },
+
+ changeBulletinComplement:function (zoneId, typeZone, complement) {
+ this.fireEvent(this.Constantes.eventId.actionEnvoyerDonneesEditees,
+ {
+ champ:zoneId,
+ typeZone:typeZone,
+ complement:complement
+ });
+ },
+
+ changeAbsenceComplement:function (zoneId, typeZone, complement) {
+
+ this.fireEvent(this.Constantes.eventId.actionEnvoyerDonneesEditees,
+ {
+ champ:zoneId,
+ typeZone:typeZone,
+ complement:complement
+ });
+
+ }
+
});
eliot.scolarite.parametrages.modelededocument.creermodifier.ListeElementsModeleView
= Ext.extend(Ext.util.Observable, {
- constructor:function (config) {
-
- var defaultConfig = {
- store:undefined,
- valeurInit:undefined
- };
-
- Ext.applyIf(config, defaultConfig);
-
- var NameSpace = eliot.scolarite.parametrages.modelededocument.creermodifier;
- this.Constantes = NameSpace.Constantes;
- this.Modele = NameSpace.Modele;
- this.ConfigServeur = this.Modele;
-
- this.addEvents(
- /**
- * @event actionEditerZone est déclenché quand bouton 'modifier' est appuye
- * @params zoneId id de la zone éditée
- * @params libellé titre de la zone éditée
- * @param element
- */
- this.Constantes.eventId.actionEditerZone,
- /**
- * @event actionSelectionneSousRapport est déclenché quand un item de sous-
- * rapport est sélectionné
- * @params idCombo id de la zone éditée
- * @params idItem id de item sélectionné
- */
- this.Constantes.eventId.actionSelectionneSousRapport,
-
- /**
- * @event actionChangeBulletinComplement
- * @param zoneId
- * @param typeZone
- * @param complement
- */
- this.Constantes.eventId.actionChangeBulletinComplement
- );
-
- // Création le panel de template
- this.templatePanel = new Ext.form.FormPanel({
- title:this.Modele.header.template,
- style:{
- "margin-left":"auto",
- "margin-right":"auto"
- },
- height:400,
- width:910,
- shadow:false,
- layout:'absolute',
- autoScroll:true,
- border:true,
- frame:true
- });
-
- // Récupération des éléments dans template
- var listeElement = this.Modele.data.listeElements;
- // Extraire les élément un par un pour mettre dans template panel
- for (var i = 0; i < listeElement.length; i++) {
- var editor = undefined;
- var logoBox = undefined;
- var cachetBox = undefined;
-
- switch (listeElement[i].action) {
-
- case this.Constantes.action.memo :
- editor = new Ext.Button({
- element:listeElement[i],
- idButton:listeElement[i].id,
- text:this.Modele.libelle.modifier,
- fieldLabel:listeElement[i].libelle,
- labelSeparator:'',
- icon:this.Modele.icon.modification,
- listeners:{
- 'click':function (button, e) {
- this.fireEvent(
- this.Constantes.eventId.actionEditerZone,
- button.idButton,
- button.fieldLabel,
- button.element
- );
- },
- scope:this
- }
- });
- if (editor.idButton !== 'textSignature') {
- listeElement[i].autoScroll = true;
- }
- break;
-
- case this.Constantes.action.texteNonEditable :
- listeElement[i].html = listeElement[i].libelle;
- break;
-
- case this.Constantes.action.sousModele :
- var valeurInit = config.valeurInit;
-
- if (listeElement[i].idTemplateJasper) {
- valeurInit = listeElement[i].idTemplateJasper;
- }
- editor = new Ext.form.ComboBox({
- width:200,
- idComboBox:listeElement[i].id,
- fieldLabel:listeElement[i].libelle,
- labelSeparator:' : ',
- editable:false,
- store:config.store,
- mode:'local',
- typeAhead:true,
- triggerAction:'all',
- autocomplete:true,
- displayField:'libelle',
- valueField:'id',
- value:valeurInit,
- listeners:{
- 'select':function (combo, record, index) {
- this.fireEvent(
- this.Constantes.eventId.actionSelectionneSousRapport,
- combo.idComboBox,
- record.get('id')
- );
- },
- scope:this
- }
- });
- break;
-
- case this.Constantes.action.logo :
- editor = new Ext.Button({
- idButton:listeElement[i].id,
- text:this.Modele.libelle.modifier,
- libelle:listeElement[i].libelle,
- icon:this.Modele.icon.modification,
- listeners:{
- 'click':function (button, e) {
- this.fireEvent(
- this.Constantes.eventId.actionEditerZone,
- button.idButton,
- button.libelle
- );
- },
- scope:this
- }
- });
- var height = listeElement[i].height - 38;
- var width = listeElement[i].width - 14;
- logoBox = {
- xtype:'box',
- autoEl:{
- tag:'div',
- html:'<img id="picPageLogo" src="lireLogo?date=' + new Date() +
- '" width=' + width + ' height=' + height + '/>'
- }
- };
- break;
-
- case this.Constantes.action.cachet :
- editor = new Ext.Button({
- idButton:listeElement[i].id,
- text:this.Modele.libelle.modifier,
- libelle:listeElement[i].libelle,
- icon:this.Modele.icon.modification,
- listeners:{
- 'click':function (button, e) {
- this.fireEvent(
- this.Constantes.eventId.actionEditerZone,
- button.idButton,
- button.libelle
- );
- },
- scope:this
- }
- });
- var height = listeElement[i].height - 38;
- var width = listeElement[i].width - 14;
-
- var urlLireCachet = "lireCachet?templateId=" + this.Modele.data.idModeleUtilisateur + "&date=" + new Date();
-
- cachetBox = {
- xtype:'box',
- autoEl:{
- tag:'div',
- html:'<img id="picPageCachet" src="' + urlLireCachet +
- '" width=' + width + ' height=' + height + '/>'
- }
- };
- break;
-
- case this.Constantes.action.bulletin :
- // on construit ici les checkbox pour le paramétrage des options du bulletin
- // il faut lire listeElement[i].complement pour avoir les données
- editor = this.creeBulletinEditor(listeElement[i]);
-
- break;
+ constructor:function (config) {
+
+ var defaultConfig = {
+ store:undefined,
+ valeurInit:undefined
+ };
+
+ Ext.applyIf(config, defaultConfig);
+
+ var NameSpace = eliot.scolarite.parametrages.modelededocument.creermodifier;
+ this.Constantes = NameSpace.Constantes;
+ this.Modele = NameSpace.Modele;
+ this.ConfigServeur = this.Modele;
+
+ this.addEvents(
+ /**
+ * @event actionEditerZone est déclenché quand bouton 'modifier' est appuye
+ * @params zoneId id de la zone éditée
+ * @params libellé titre de la zone éditée
+ * @param element
+ */
+ this.Constantes.eventId.actionEditerZone,
+ /**
+ * @event actionSelectionneSousRapport est déclenché quand un item de sous-
+ * rapport est sélectionné
+ * @params idCombo id de la zone éditée
+ * @params idItem id de item sélectionné
+ */
+ this.Constantes.eventId.actionSelectionneSousRapport,
+
+ /**
+ * @event actionChangeBulletinComplement
+ * @param zoneId
+ * @param typeZone
+ * @param complement
+ */
+ this.Constantes.eventId.actionChangeBulletinComplement,
+
+ /**
+ * @event actionChangeBulletinComplement
+ * @param zoneId
+ * @param typeZone
+ * @param complement
+ */
+ this.Constantes.eventId.actionChangeAbsenceComplement
+ );
+
+ // Création le panel de template
+ this.templatePanel = new Ext.form.FormPanel({
+ title:this.Modele.header.template,
+ height:425,
+ width:912,
+ shadow:false,
+ layout:'absolute',
+ autoScroll:true,
+ border:true,
+ frame:true
+ });
+
+ // Récupération des éléments dans template
+ var listeElement = this.Modele.data.listeElements;
+ // Extraire les élément un par un pour mettre dans template panel
+ for (var i = 0; i < listeElement.length; i++) {
+ var editor = undefined;
+ var logoBox = undefined;
+ var cachetBox = undefined;
+
+ switch (listeElement[i].action) {
+
+ case this.Constantes.action.memo :
+ editor = new Ext.Button({
+ element:listeElement[i],
+ idButton:listeElement[i].id,
+ text:this.Modele.libelle.modifier,
+ fieldLabel:listeElement[i].libelle,
+ labelSeparator:'',
+ icon:this.Modele.icon.modification,
+ listeners:{
+ 'click':function (button, e) {
+ this.fireEvent(
+ this.Constantes.eventId.actionEditerZone,
+ button.idButton,
+ button.fieldLabel,
+ button.element
+ );
+ },
+ scope:this
}
-
-
- // Si en mode modification, afficher les textes dans les zones
- var tpl = listeElement[i].template;
- if (!listeElement[i].template) {
- tpl = '';
+ });
+ if (editor.idButton !== 'textSignature') {
+ listeElement[i].autoScroll = true;
+ }
+ break;
+
+ case this.Constantes.action.texteNonEditable :
+ listeElement[i].html = listeElement[i].libelle;
+ break;
+
+ case this.Constantes.action.sousModele :
+ var valeurInit = config.valeurInit;
+
+ if (listeElement[i].idTemplateJasper) {
+ valeurInit = listeElement[i].idTemplateJasper;
+ }
+ editor = new Ext.form.ComboBox({
+ width:200,
+ idComboBox:listeElement[i].id,
+ fieldLabel:listeElement[i].libelle,
+ labelSeparator:' : ',
+ editable:false,
+ store:config.store,
+ mode:'local',
+ typeAhead:true,
+ triggerAction:'all',
+ autocomplete:true,
+ displayField:'libelle',
+ valueField:'id',
+ value:valeurInit,
+ listeners:{
+ 'select':function (combo, record, index) {
+ this.fireEvent(
+ this.Constantes.eventId.actionSelectionneSousRapport,
+ combo.idComboBox,
+ record.get('id')
+ );
+ },
+ scope:this
}
- if (editor) {
-
- listeElement[i].items = [editor,
- {
- id:listeElement[i].id + 'texte',
- html:tpl,
- width : listeElement[i].width - 30
- }];
+ });
+ break;
+
+ case this.Constantes.action.logo :
+ editor = new Ext.Button({
+ idButton:listeElement[i].id,
+ text:this.Modele.libelle.modifier,
+ libelle:listeElement[i].libelle,
+ icon:this.Modele.icon.modification,
+ listeners:{
+ 'click':function (button, e) {
+ this.fireEvent(
+ this.Constantes.eventId.actionEditerZone,
+ button.idButton,
+ button.libelle
+ );
+ },
+ scope:this
+ }
+ });
+ var height = listeElement[i].height - 38;
+ var width = listeElement[i].width - 14;
+ logoBox = {
+ xtype:'box',
+ autoEl:{
+ tag:'div',
+ html:'<img id="picPageLogo" src="lireLogo?date=' + new Date() +
+ '" width=' + width + ' height=' + height + '/>'
+ }
+ };
+ break;
+
+ case this.Constantes.action.cachet :
+ editor = new Ext.Button({
+ idButton:listeElement[i].id,
+ text:this.Modele.libelle.modifier,
+ libelle:listeElement[i].libelle,
+ icon:this.Modele.icon.modification,
+ listeners:{
+ 'click':function (button, e) {
+ this.fireEvent(
+ this.Constantes.eventId.actionEditerZone,
+ button.idButton,
+ button.libelle
+ );
+ },
+ scope:this
+ }
+ });
+ var height = listeElement[i].height - 38;
+ var width = listeElement[i].width - 14;
+
+ var urlLireCachet = "lireCachet?templateId=" + this.Modele.data.idModeleUtilisateur + "&date=" + new Date();
+
+ cachetBox = {
+ xtype:'box',
+ autoEl:{
+ tag:'div',
+ html:'<img id="picPageCachet" src="' + urlLireCachet +
+ '" width=' + width + ' height=' + height + '/>'
+ }
+ };
+ break;
+
+ case this.Constantes.action.bulletin :
+ // on construit ici les checkbox pour le paramétrage des options du bulletin
+ // il faut lire listeElement[i].complement pour avoir les données
+ editor = this.creeBulletinEditor(listeElement[i]);
+
+ break;
+ case this.Constantes.action.absences:
+ editor = this.creeAbsencesEditor(listeElement[i]);
+ break;
+ }
+
+
+ // Si en mode modification, afficher les textes dans les zones
+ var tpl = listeElement[i].template;
+ if (!listeElement[i].template) {
+ tpl = '';
+ }
+ if (editor) {
+
+ listeElement[i].items = [editor,
+ {
+ id:listeElement[i].id + 'texte',
+ html:tpl,
+ width:listeElement[i].width - 30
+ }];
+
+
+ // S'il existe un logo dans un établissement, alors ajoute l'image dans zone de logo
+ if (logoBox) {
+ listeElement[i].items = [editor, logoBox];
+ }
+ // S'il existe un cachet dans un établissement, alors ajoute l'image dans zone de cachet
+ if (cachetBox) {
+ listeElement[i].items = [editor, cachetBox];
+ }
- // S'il existe un logo dans un établissement, alors ajoute l'image dans zone de logo
- if (logoBox) {
- listeElement[i].items = [editor, logoBox];
- }
+ }
- // S'il existe un cachet dans un établissement, alors ajoute l'image dans zone de cachet
- if (cachetBox) {
- listeElement[i].items = [editor, cachetBox];
- }
+ listeElement[i].layout = 'form';
+ listeElement[i].cls = 'x-panel-zone';
+ this.templatePanel.add(listeElement[i]);
+ }
+ },
+
+ creeBulletinEditor:function (element) {
+
+ this.bulletinCheckboxes = {
+ moyenneGenerale:this.creeBulletinCheckbox(element, 'moyenneGenerale'),
+ coefficient:this.creeBulletinCheckbox(element, 'coefficient'),
+ moyennePrecedente:this.creeBulletinCheckbox(element, 'moyennePrecedente'),
+ moyenneMinMax:this.creeBulletinCheckbox(element, 'moyenneMinMax'),
+ nombreNotes:this.creeBulletinCheckbox(element, 'nombreNotes'),
+ rangs:this.creeBulletinCheckbox(element, 'rangs')
+ };
+
+ var editor = new Ext.Panel({
+ layout:'column',
+ items:[
+ {
+ layout:'form',
+ labelWidth:135,
+ width:140,
+ items:[
+ {
+ xtype:'label',
+ labelSeparator:'',
+ fieldLabel:element.libelle
}
-
- listeElement[i].layout = 'form';
- listeElement[i].cls = 'x-panel-zone';
-
- this.templatePanel.add(listeElement[i]);
+ ]
+ },
+ {
+ layout:'form',
+ hideLabels:true,
+ width:220,
+ items:[
+ this.bulletinCheckboxes.moyenneGenerale,
+ this.bulletinCheckboxes.coefficient,
+ this.bulletinCheckboxes.moyennePrecedente
+ ]
+ },
+ {
+ layout:'form',
+ hideLabels:true,
+ width:220,
+ items:[
+ this.bulletinCheckboxes.moyenneMinMax,
+ this.bulletinCheckboxes.nombreNotes,
+ this.bulletinCheckboxes.rangs
+ ]
}
- },
-
- creeBulletinEditor:function (element) {
-
- this.bulletinCheckboxes = {
- moyenneGenerale:this.creeBulletinCheckbox(element, 'moyenneGenerale'),
- coefficient:this.creeBulletinCheckbox(element, 'coefficient'),
- moyennePrecedente:this.creeBulletinCheckbox(element, 'moyennePrecedente'),
- moyenneMinMax:this.creeBulletinCheckbox(element, 'moyenneMinMax'),
- nombreNotes:this.creeBulletinCheckbox(element, 'nombreNotes'),
- rangs:this.creeBulletinCheckbox(element, 'rangs')
- };
-
- var editor = new Ext.Panel({
- layout:'column',
- items:[
- {
- layout:'form',
- labelWidth:135,
- width:140,
- items:[
- {
- xtype:'label',
- labelSeparator:'',
- fieldLabel:element.libelle
- }
- ]
- },
- {
- layout:'form',
- hideLabels:true,
- width:220,
- items:[
- this.bulletinCheckboxes.moyenneGenerale,
- this.bulletinCheckboxes.coefficient,
- this.bulletinCheckboxes.moyennePrecedente
- ]
- },
- {
- layout:'form',
- hideLabels:true,
- width:220,
- items:[
- this.bulletinCheckboxes.moyenneMinMax,
- this.bulletinCheckboxes.nombreNotes,
- this.bulletinCheckboxes.rangs
- ]
- }
- ]
- });
-
- return editor;
- },
-
- creeBulletinCheckbox:function (element, name) {
- return new Ext.form.Checkbox({
- boxLabel:'<span style="font-weight: normal; font-size: 11px;">'
- + this.ConfigServeur.libelle.bulletinCheckBox[name] + '</span>',
- checked:element.complement[name],
- listeners:{
- check:function () {
- this.updateBulletinCheckboxValues(element);
- },
- scope:this
- }
- })
- },
-
- updateBulletinCheckboxValues:function (element) {
-
- var complement = {
- moyenneGenerale:this.bulletinCheckboxes.moyenneGenerale.checked,
- coefficient:this.bulletinCheckboxes.coefficient.checked,
- moyennePrecedente:this.bulletinCheckboxes.moyennePrecedente.checked,
- moyenneMinMax:this.bulletinCheckboxes.moyenneMinMax.checked,
- nombreNotes:this.bulletinCheckboxes.nombreNotes.checked,
- rangs:this.bulletinCheckboxes.rangs.checked
- };
-
- this.fireEvent(this.Constantes.eventId.actionChangeBulletinComplement,
- element.id, element.action, complement);
- }
+ ]
+ });
+
+ return editor;
+ },
+
+ creeBulletinCheckbox:function (element, name) {
+ return new Ext.form.Checkbox({
+ boxLabel:'<span style="font-weight: normal; font-size: 11px;">'
+ + this.ConfigServeur.libelle.bulletinCheckBox[name] + '</span>',
+ checked:element.complement[name],
+ listeners:{
+ check:function () {
+ this.updateBulletinCheckboxValues(element);
+ },
+ scope:this
+ }
+ })
+ },
+
+ updateBulletinCheckboxValues:function (element) {
+
+ var complement = {
+ moyenneGenerale:this.bulletinCheckboxes.moyenneGenerale.checked,
+ coefficient:this.bulletinCheckboxes.coefficient.checked,
+ moyennePrecedente:this.bulletinCheckboxes.moyennePrecedente.checked,
+ moyenneMinMax:this.bulletinCheckboxes.moyenneMinMax.checked,
+ nombreNotes:this.bulletinCheckboxes.nombreNotes.checked,
+ rangs:this.bulletinCheckboxes.rangs.checked
+ };
+
+ this.fireEvent(this.Constantes.eventId.actionChangeBulletinComplement,
+ element.id, element.action, complement);
+ },
+
+ creeAbsencesEditor:function (element) {
+
+ // Création des checkbox informations
+ this.AbsencesCheckboxes = {
+ tableauAbsence:this.creeAbsenceCheckbox(
+ element,
+ this.Constantes.absenceOptions.absences
+ ),
+ tableauRetard:this.creeAbsenceCheckbox(
+ element,
+ this.Constantes.absenceOptions.retards
+ ),
+ tableauDepart:this.creeAbsenceCheckbox(
+ element,
+ this.Constantes.absenceOptions.departs
+ )
+ };
+
+ // Création des radiobox format
+ var formatPanel = this.creeAbsencesFormatRadio(element);
+
+ return new Ext.Panel({
+ layout:'column',
+ items:[
+ {
+ layout:'form',
+ labelWidth:80,
+ items:{
+ xtype:'label',
+ labelSeparator:' : ',
+ fieldLabel:element.libelle
+ }
+ },
+ {
+ width:150,
+ items:[
+ this.AbsencesCheckboxes.tableauAbsence,
+ this.AbsencesCheckboxes.tableauRetard,
+ this.AbsencesCheckboxes.tableauDepart
+ ]
+ },
+ {
+ width:200,
+ layout:'form',
+ labelWidth:50,
+ labelSeparator:' : ',
+ items:formatPanel
+ }
+ ]
+ });
+
+ },
+
+ creeAbsenceCheckbox:function (element, name) {
+
+ return new Ext.form.Checkbox({
+ boxLabel:'<span style="font-weight: normal; font-size: 11px;">'
+ + this.ConfigServeur.libelle.absencesCheckBox[name] + '</span>',
+ checked:element.complement[name],
+ cls:'modele-absences-checkbox-radio',
+ listeners:{
+ check:function () {
+ this.updateAbsenceValues(element);
+ },
+ scope:this
+ }
+ })
+ },
+
+ creeAbsencesFormatRadio:function (element) {
+ this.absencesFormat = new Ext.form.RadioGroup({
+ fieldLabel:this.ConfigServeur.libelle.format,
+ columns:1,
+ items:[
+ this.creeAbsencesRadioBouton(element, this.Constantes.absenceFormats.tableau),
+ this.creeAbsencesRadioBouton(element, this.Constantes.absenceFormats.textes)
+ ],
+ listeners:{
+ change:function () {
+ this.updateAbsenceValues(element);
+ },
+ scope:this
+ }
+ });
+
+ return this.absencesFormat;
+ },
+
+ creeAbsencesRadioBouton:function (element, name) {
+ return {
+ hideLabel:true,
+ boxLabel:'<span style="font-weight: normal; font-size: 11px;">'
+ + this.ConfigServeur.libelle.absenceFormats[name] + '</span>',
+ name:'format',
+ cls:'modele-absences-checkbox-radio',
+ inputValue:name,
+ checked:element.complement.typeTableau == name
+ };
+ },
+
+ updateAbsenceValues:function (element) {
+
+ var complement = {
+ absence:this.AbsencesCheckboxes.tableauAbsence.checked,
+ retard:this.AbsencesCheckboxes.tableauRetard.checked,
+ depart:this.AbsencesCheckboxes.tableauDepart.checked,
+ typeTableau:this.absencesFormat.getValue().inputValue
+ };
+
+ this.fireEvent(
+ this.Constantes.eventId.actionChangeAbsenceComplement,
+ element.id,
+ element.action,
+ complement
+ );
+ }
});
*/
eliot.scolarite.parametrages.modelededocument.creermodifier.Modele = {
- data:{
- nomTemplate:undefined,
- police:undefined,
- listeElements:undefined,
- listePolices:undefined,
- listeTaillePolice: undefined,
- listeSousRapport:undefined,
- listeChampPublipostage:undefined,
- idModeleUtilisateur:undefined
- },
+ data:{
+ nomTemplate:undefined,
+ police:undefined,
+ listeElements:undefined,
+ listePolices:undefined,
+ listeTaillePolice:undefined,
+ listeSousRapport:undefined,
+ listeChampPublipostage:undefined,
+ idModeleUtilisateur:undefined
+ },
- url:{
- enregistreZonesTemplateJasper:undefined,
- apercu:undefined,
- upLoadLogo:undefined,
- upLoadCachet:undefined,
- loadImage:undefined,
- afficheEdition:undefined,
- supprimeLogo:undefined,
- supprimeCachet:undefined
- },
+ url:{
+ enregistreZonesTemplateJasper:undefined,
+ apercu:undefined,
+ upLoadLogo:undefined,
+ upLoadCachet:undefined,
+ loadImage:undefined,
+ afficheEdition:undefined,
+ supprimeLogo:undefined,
+ supprimeCachet:undefined
+ },
- message:{
- erreurInconnue:undefined,
- enregistrementMaskText:undefined,
- selectionneImage:undefined,
- formatImage:undefined,
- choisirTableau:undefined,
- choisirPulipostage:undefined
- },
+ message:{
+ erreurInconnue:undefined,
+ enregistrementMaskText:undefined,
+ selectionneImage:undefined,
+ formatImage:undefined,
+ choisirTableau:undefined,
+ choisirPulipostage:undefined
+ },
- header:{
- template:undefined
+ header:{
+ template:undefined
+ },
+
+ libelle:{
+ enregistrer:undefined,
+ annuler:undefined,
+ enregisterApercu:undefined,
+ nomTemplate:undefined,
+ valider:undefined,
+ upLoadTextField:undefined,
+ upLoadTextFieldCachet:undefined,
+ upLoad:undefined,
+ changeImage:undefined,
+ modifier:undefined,
+ premierItem:undefined,
+ premierItemTableau:undefined,
+ titre:undefined,
+ supprimer:undefined,
+ police:undefined,
+ bulletinCheckBox:{
+ moyenneGenerale:undefined,
+ coefficient:undefined,
+ moyennePrecedente:undefined,
+ moyenneMinMax:undefined,
+ nombreNotes:undefined,
+ rangs:undefined
+ },
+ absencesCheckBox:{
+ absences:undefined,
+ retards:undefined,
+ departs:undefined
},
- libelle:{
- enregistrer:undefined,
- annuler:undefined,
- enregisterApercu:undefined,
- nomTemplate:undefined,
- valider:undefined,
- upLoadTextField:undefined,
- upLoadTextFieldCachet:undefined,
- upLoad:undefined,
- changeImage:undefined,
- modifier:undefined,
- premierItem:undefined,
- premierItemTableau:undefined,
- titre:undefined,
- supprimer:undefined,
- police: undefined,
- bulletinCheckBox: {
- moyenneGenerale: undefined,
- coefficient: undefined,
- moyennePrecedente: undefined,
- moyenneMinMax: undefined,
- nombreNotes: undefined,
- rangs: undefined
- }
+ absenceFormats:{
+ TABLEAU:undefined,
+ TEXTE:undefined
},
+ format:undefined
+ },
- icon:{
- enregistrement:undefined,
- annulation:undefined,
- apercu:undefined,
- modification:undefined
- }
+ icon:{
+ enregistrement:undefined,
+ annulation:undefined,
+ apercu:undefined,
+ modification:undefined
+ }
};
\ No newline at end of file
*/
eliot.scolarite.parametrages.modelededocument.creermodifier.SaveCancelToolBarController =
- Ext.extend(Ext.util.Observable, {
- constructor: function(config) {
-
- var defaultConfig = {
- valeurInit : undefined
- };
-
- Ext.applyIf(config, defaultConfig);
-
- // Variables
- var NameSpace = eliot.scolarite.parametrages.modelededocument.
- creermodifier;
- this.Constantes = NameSpace.Constantes;
- this.Modele = NameSpace.Modele;
-
- this.nomTemplate = this.Modele.data.nomTemplate;
- var idTemplate = this.Modele.data.idModeleUtilisateur;
- var zones = [
- {
- champ : 'tableau',
- idTemplateJasper : config.valeurInit,
- template : '',
- typeZone : this.Constantes.action.sousModele
- }
- ];
-
- // Paramètres à envoyer pour l'enregistrement
- this.params = {
- id : idTemplate,
- nom : this.nomTemplate,
- police: this.Modele.data.police,
- zones : zones
- };
- },
+ Ext.extend(Ext.util.Observable, {
+ constructor:function (config) {
- /**
- * Observe view de toolbar
- * @param saveCancelToolbarView
- */
- observeSaveCancelToolbarView : function(saveCancelToolbarView) {
- saveCancelToolbarView.addListener(
- this.Constantes.eventId.actionReinitialiser,
- function() {
- var href = this.Modele.url.afficheEdition +
- '?templateDocumentId=' +
- this.Modele.data.idModeleUtilisateur;
- document.location.href = href;
- },
- this
- );
- saveCancelToolbarView.addListener(
- this.Constantes.eventId.actionEnregistrer,
- function() {
- this.actionEnregistrer();
- },
- this
- );
- saveCancelToolbarView.addListener(
- this.Constantes.eventId.actionApercu,
- function() {
- this.actionApercu();
- },
- this
- );
- },
+ var defaultConfig = {
+ valeurInit:undefined
+ };
- /**
- * Observe le champ : nom de template
- * @param application
- */
- observeNomDeTemplate : function(application) {
- application.addListener(
- this.Constantes.eventId.actionEditerNomTemplate,
- function(value) {
- this.nomTemplate = value;
- this.params.nom = this.nomTemplate;
- },
- this
- );
-
- application.addListener(
- this.Constantes.eventId.actionEditerPolice,
- function(police) {
- this.params.police = police;
- },
- this
- );
+ Ext.applyIf(config, defaultConfig);
- application.addListener(
- this.Constantes.eventId.actionEnregistrer,
- function(valeur) {
- this.params.nom = valeur;
- this.actionEnregistrer();
- },
- this
- );
- },
+ // Variables
+ var NameSpace = eliot.scolarite.parametrages.modelededocument.
+ creermodifier;
+ this.Constantes = NameSpace.Constantes;
+ this.Modele = NameSpace.Modele;
- /**
- * Observation controller de listeElementsModele
- * @param listeElementsModeleController
- */
- observeEditeurSms : function(
- listeElementsModeleController
- ) {
- listeElementsModeleController.addListener(
- this.Constantes.eventId.actionEnvoyerDonneesEditees,
- function(donnees) {
- this.params.zones.push(donnees);
- },
- this
- );
- },
+ this.nomTemplate = this.Modele.data.nomTemplate;
+ var idTemplate = this.Modele.data.idModeleUtilisateur;
+ var zones = [
+ {
+ champ:'tableau',
+ idTemplateJasper:config.valeurInit,
+ template:'',
+ typeZone:this.Constantes.action.sousModele
+ }
+ ];
- /**
- * Action pour enregistrer template d'utilisateur
- */
- actionEnregistrer : function() {
- eliot.scolarite.Message.resetMessages();
- this.executeEnregistrer();
- },
+ // Paramètres à envoyer pour l'enregistrement
+ this.params = {
+ id:idTemplate,
+ nom:this.nomTemplate,
+ police:this.Modele.data.police,
+ zones:zones
+ };
+ },
- /**
- * Action pour prévisualiser le modèle
- */
- actionApercu : function() {
- eliot.scolarite.Message.resetMessages();
- this.executeEnregistrer(this.Modele.data.idModeleUtilisateur);
- },
+ /**
+ * Observe view de toolbar
+ * @param saveCancelToolbarView
+ */
+ observeSaveCancelToolbarView:function (saveCancelToolbarView) {
+ saveCancelToolbarView.addListener(
+ this.Constantes.eventId.actionReinitialiser,
+ function () {
+ var href = this.Modele.url.afficheEdition +
+ '?templateDocumentId=' +
+ this.Modele.data.idModeleUtilisateur;
+ document.location.href = href;
+ },
+ this
+ );
+ saveCancelToolbarView.addListener(
+ this.Constantes.eventId.actionEnregistrer,
+ function () {
+ this.actionEnregistrer();
+ },
+ this
+ );
+ saveCancelToolbarView.addListener(
+ this.Constantes.eventId.actionApercu,
+ function () {
+ this.actionApercu();
+ },
+ this
+ );
+ },
- /**
- * Exécuter l'enregistrement d'une template
- */
- executeEnregistrer : function(idModeleAAfficher) {
- Ext.Ajax.request({
- url: this.Modele.url.enregistreZonesTemplateJasper,
- params: {params : Ext.encode(this.params)},
- success:function(response, request) {
- var reponse = Ext.decode(response.responseText);
- if (reponse.success != true) {
- if (reponse.message) {
- eliot.scolarite.Message.showErreur(reponse.message);
- }
- else {
- request.failure.call(this);
+ /**
+ * Observe le champ : nom de template
+ * @param application
+ */
+ observeNomDeTemplate:function (application) {
+ application.addListener(
+ this.Constantes.eventId.actionEditerNomTemplate,
+ function (value) {
+ this.nomTemplate = value;
+ this.params.nom = this.nomTemplate;
+ },
+ this
+ );
+
+ application.addListener(
+ this.Constantes.eventId.actionEditerPolice,
+ function (police) {
+ this.params.police = police;
+ },
+ this
+ );
+
+ application.addListener(
+ this.Constantes.eventId.actionEnregistrer,
+ function (valeur) {
+ this.params.nom = valeur;
+ this.actionEnregistrer();
+ },
+ this
+ );
+ },
+
+ /**
+ * Observation controller de listeElementsModele
+ * @param listeElementsModeleController
+ */
+ observeEditeurSms:function (listeElementsModeleController) {
+ listeElementsModeleController.addListener(
+ this.Constantes.eventId.actionEnvoyerDonneesEditees,
+ function (donnees) {
+
+ console.log("Ajout zone de données");
+ console.info(donnees);
+
+ if (donnees.typeZone == this.Constantes.action.absences) {
+ var zone7trouve = false;
+ for (var i = 0; i < this.params.zones.length; i++) {
+ if (this.params.zones[i].typeZone == 7) {
+
+ this.params.zones[i].complement = donnees.complement;
+ zone7trouve = true;
}
}
- else {
- if (reponse.message) {
- eliot.scolarite.Message.showConfirmation(reponse.message);
- this.params.zones = [];
- }
- if (idModeleAAfficher) {
- window.open(
- this.Modele.url.apercu +
- '?templateId=' + idModeleAAfficher,
- '_blank',
- 'height=600, width=800, toolbar=yes,menubar=no,scrollbars=yes'
- );
- }
+
+ if (zone7trouve == false) {
+ console.info(donnees);
+ this.params.zones.push(donnees);
}
- },
- failure:function() {
- eliot.scolarite.Message.showErreur(
- this.Modele.message.erreurInconnue
- );
- },
- scope : this
- });
- }
+
+ } else {
+ this.params.zones.push(donnees);
+ }
+ },
+ this
+ );
+ },
+
+ /**
+ * Action pour enregistrer template d'utilisateur
+ */
+ actionEnregistrer:function () {
+ eliot.scolarite.Message.resetMessages();
+ this.executeEnregistrer();
+ },
+
+ /**
+ * Action pour prévisualiser le modèle
+ */
+ actionApercu:function () {
+ eliot.scolarite.Message.resetMessages();
+ this.executeEnregistrer(this.Modele.data.idModeleUtilisateur);
+ },
+
+ /**
+ * Exécuter l'enregistrement d'une template
+ */
+ executeEnregistrer:function (idModeleAAfficher) {
+ Ext.Ajax.request({
+ url:this.Modele.url.enregistreZonesTemplateJasper,
+ params:{params:Ext.encode(this.params)},
+ success:function (response, request) {
+ var reponse = Ext.decode(response.responseText);
+ if (reponse.success != true) {
+ if (reponse.message) {
+ eliot.scolarite.Message.showErreur(reponse.message);
+ }
+ else {
+ request.failure.call(this);
+ }
+ }
+ else {
+ if (reponse.message) {
+ eliot.scolarite.Message.showConfirmation(reponse.message);
+ this.params.zones = [];
+ }
+ if (idModeleAAfficher) {
+ window.open(
+ this.Modele.url.apercu +
+ '?templateId=' + idModeleAAfficher,
+ '_blank',
+ 'height=600, width=800, toolbar=yes,menubar=no,scrollbars=yes'
+ );
+ }
+ }
+ },
+ failure:function () {
+ eliot.scolarite.Message.showErreur(
+ this.Modele.message.erreurInconnue
+ );
+ },
+ scope:this
});
+ }
+ });
return {
frame:true,
labelAlign : 'right',
- bodyStyle:'padding:5px 5px 5px',
+ bodyStyle:'padding:0px 5px 0px',
items : {
layout : 'column',
items : [