import org.lilie.services.eliot.impression.template.bulletin.colonne.ColonneDescription
import org.lilie.services.eliot.impression.template.bulletin.colonne.ColonneBulletin
import org.lilie.services.eliot.scolarite.StructureEnseignement
+import org.lilie.services.eliot.scolarite.TypeIntervalleEnum
/**
* Permet de calculer des données de positionnement et d'affichage à partir du DTO de paramétrage
*/
class ImpressionBulletinOptionsService {
-
+ /**
+ * Recherche des options d'impression pour le modèle de document sur la période et pour le type de période
+ * de la classe.
+ * @param templateDocument
+ * @param typePeriode
+ * @param typeIntervalleEnum
+ * @return
+ */
public BulletinOptionsPersonnalise getParametreOptionsByTemplate(TemplateDocument templateDocument,
- TypePeriode typePeriode){
+ TypePeriode typePeriode,
+ TypeIntervalleEnum typeIntervalleEnum) {
BulletinOptions bulletinOptions = BulletinOptions.findByTemplateDocument(templateDocument)
- return getParametreOptions(bulletinOptions, typePeriode)
+ return getParametreOptions(
+ bulletinOptions,
+ typePeriode,
+ typeIntervalleEnum
+ )
}
+ /**
+ * Recherche des options d'impression pour le modèle du document, pour une période sur une classe
+ * @param templateDocument
+ * @param typePeriode
+ * @param classe
+ * @return
+ */
public BulletinOptionsPersonnalise getParametreOptionsByTemplateAndClasse(TemplateDocument templateDocument,
TypePeriode typePeriode,
- StructureEnseignement classe){
+ StructureEnseignement classe) {
BulletinOptions bulletinOptions =
classe ? BulletinOptions.findByTemplateDocumentAndClasse(templateDocument, classe) : null
- return getParametreOptions(bulletinOptions, typePeriode)
+ return getParametreOptions(
+ bulletinOptions,
+ typePeriode,
+ classe.getTypeIntervalle()
+ )
}
/**
* @param typePeriode
* @return
*/
- private BulletinOptionsPersonnalise getParametreOptions(BulletinOptions bulletinOptions, TypePeriode typePeriode) {
+ private BulletinOptionsPersonnalise getParametreOptions(BulletinOptions bulletinOptions,
+ TypePeriode typePeriode,
+ TypeIntervalleEnum typeIntervalleEnum) {
BulletinOptionsPersonnalise resultat
case IntervalleEnum.ANNEE:
+ switch (typeIntervalleEnum) {
+ case TypeIntervalleEnum.TRIMESTRE:
+
+ break
+
+ case TypeIntervalleEnum.SEMESTRE:
+ resultat.moyennePrec3 = false
+ break
+
+ }
+
break
}
}
- private static final Integer TOUS_LE_GROUPE=-1
+ private static final Integer TOUS_LE_GROUPE = -1
public Boolean groupeASupprimer(BulletinOptionsPersonnalise bulletinParametrage,
ColonneGroupeEnum colonneEnum,
case ColonneGroupeEnum.MOYENNE_PREC:
switch (numCol) {
- //
+ //
case TOUS_LE_GROUPE:
return !bulletinParametrage.getMoyennePrec()
import org.lilie.services.eliot.impression.template.bulletin.option.BulletinOptionsPersonnalise
import org.lilie.services.eliot.impression.donnees.DonneesOptions
import org.lilie.services.eliot.impression.template.bulletin.option.ImpressionBulletinOptionsService
+import org.lilie.services.eliot.scolarite.TypeIntervalleEnum
class PublipostageController extends AbstractNotesController {
params.libelleTypePeriode = getTypePeriodeLibelle(typePeriode)
- String nom = construitNomDeTraitement(command)
-
- // envoi de la demande vers le service de demande de traitement
- String parametres = params as JSON
- // on appele le service de gestion de la file d'attente
- demandeTraitementService.ajouteDemandeTraitement(
- (Long) securiteSession.defaultAutorite.id,
- etablissementCourantId(),
- anneeScolaireService.anneeScolaireEnCours().id,
- DefaultTraitementType.PUBLIPOSTAGE_NOTES,
- parametres,
- nom
- )
+ List<Personne> eleves = Personne.getAll(command.elevesSelectionnes)
+
+ Map<Personne, StructureEnseignement> mapEleveClasse =
+ localStructureEnseignementService.findAllClassesForAllEleves(eleves as Set)
+
+ // Split les demandes de tratement par TypeIntervalle
+ mapEleveClasse.groupBy {eleve, classe -> classe.typeIntervalle}.each {
+ TypeIntervalleEnum typeIntervalle,
+ Map<Personne, StructureEnseignement> mapEleveClasseByTypeIntervalle ->
+
+ Set<Personne> elevesByTypeIntervalle = mapEleveClasseByTypeIntervalle.keySet()
+ Set<StructureEnseignement> classesByTypeIntervalle = mapEleveClasseByTypeIntervalle.values() as Set
+
+ Map parametres = (Map) params.clone()
+
+ parametres.classesId = classesByTypeIntervalle*.id.join(',')
+ parametres.elevesSelectionnes = elevesByTypeIntervalle*.id.join(',')
+ parametres.typeIntervalle = typeIntervalle?.toString()
+
+ String nom = construitNomDeTraitement(classesByTypeIntervalle, command.modeleId)
+
+ // on appele le service de gestion de la file d'attente
+ demandeTraitementService.ajouteDemandeTraitement(
+ (Long) securiteSession.defaultAutorite.id,
+ etablissementCourantId(),
+ anneeScolaireService.anneeScolaireEnCours().id,
+ DefaultTraitementType.PUBLIPOSTAGE_NOTES,
+ (String) parametres as JSON,
+ nom
+ )
+ }
+
resultats = [
success: true,
message: message(code: 'notes.publipostage.message.ajout.succes')
/**
* Méthode permet de construire un nom de traitement, il est composé par
* nom de modèle et nom de classe sélectionné
- * @param command
- * @return
*/
- private String construitNomDeTraitement(PublipostageCommand command) {
- List<Personne> listEleves =
- command.elevesSelectionnes.collect {Personne.get(it)}
-
- List<StructureEnseignement> listClasses =
- localStructureEnseignementService.findAllClassesForAllEleves(listEleves).unique {it.id}
+ private String construitNomDeTraitement(Set<StructureEnseignement> classes,
+ Long modeleId) {
- String modeleLibelle = TemplateDocument.get(command.modeleId).nom
+ String modeleLibelle = TemplateDocument.get(modeleId).nom
- String classesCode = listClasses*.code.join(',')
+ String classesCode = classes*.code.join(',')
// Construire le nom de traitement
String nom = modeleLibelle + ' - ' + classesCode
Personne eleve = eleveImpressionInfo.personne
+ StructureEnseignement classe =
+ localStructureEnseignementService.findClasseForEleve(securiteSession, eleve)
+
// Si la période est spécifiée on vérifie que l'élève est ou était dans
// la classe de la période.
if (periode) {
// Si la période n'est pas spécifiée on recherche la période de type donné de
// la classe actuelle de l'élève
else {
- StructureEnseignement classe =
- localStructureEnseignementService.findClasseForEleve(securiteSession, eleve)
periode = periodeService.getPeriode(classe, typePeriode)
}
BulletinOptionsPersonnalise bulletinOptionsPersonnalise =
impressionBulletinOptionsService.getParametreOptionsByTemplate(
templateDocument,
- typePeriode
+ typePeriode,
+ classe.getTypeIntervalle()
)
return bulletinToTableauImpressionInfo(bulletin,
import org.lilie.services.eliot.scolarite.TypePeriode
import org.lilie.services.eliot.scolarite.IntervalleEnum
+import org.lilie.services.eliot.scolarite.TypeIntervalleEnum
/**
* Génération de l'aperçu
data: data,
options: impressionBulletinOptionsService.getParametreOptionsByTemplate(
templateDocument,
- typePeriode)
+ typePeriode,
+ TypeIntervalleEnum.TRIMESTRE)
)
return impressionMoteurService.creePdf(
import org.lilie.services.eliot.impression.template.bulletin.option.BulletinOptionsPersonnalise
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
/**
* Service d'edition
TypePeriode typePeriode = TypePeriode.findByIntervalle(IntervalleEnum.T3)
BulletinOptionsPersonnalise bulletinOptionsPersonnalise =
- impressionBulletinOptionsService.getParametreOptionsByTemplate(templateDocument, typePeriode)
+ impressionBulletinOptionsService.getParametreOptionsByTemplate(
+ templateDocument,
+ typePeriode,
+ TypeIntervalleEnum.TRIMESTRE
+ )
ZoneTemplateJasperInfo zone = new ZoneTemplateJasperInfo(
x: subreport.x,