package org.lilie.services.eliot.scolarite.publipostage.suivipareleve
import grails.converters.JSON
-import org.lilie.services.eliot.impression.ImpressionSuiviEleveService
-import org.lilie.services.eliot.impression.PublipostageSuivi
import org.lilie.services.eliot.impression.TemplateDocument
import org.lilie.services.eliot.impression.constantes.TemplateEliotEnum
-import org.lilie.services.eliot.impression.constantes.TypeMedia
import org.lilie.services.eliot.impression.template.ImpressionTemplateDocumentService
import org.lilie.services.eliot.applications.scolarite.calendrier.CalendrierService
import org.lilie.services.eliot.scolarite.AbstractScolariteController
import org.lilie.services.eliot.scolarite.structureenseignement.LocalStructureEnseignementService
import org.lilie.services.eliot.sms.SmsStatut
import org.lilie.services.eliot.urllabel.breadcrumbs.BreadCrumbsItemInfo
-
import java.text.SimpleDateFormat
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap
import org.lilie.services.eliot.export.DonneesPourExportCSV
-
+import org.lilie.services.eliot.scolarite.publipostage.SuiviEleveService
class SuiviEleveController extends AbstractScolariteController {
LocalStructureEnseignementService localStructureEnseignementService
CalendrierService calendrierService
- ImpressionSuiviEleveService impressionSuiviEleveService
ImpressionTemplateDocumentService impressionTemplateDocumentService
+ SuiviEleveService suiviEleveService
+ SuiviElevePreparartionExportCSVService suiviElevePreparartionExportCSVService
static final SimpleDateFormat SDF_DATE = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
- static final SimpleDateFormat SDF_HEURE = new SimpleDateFormat("HH:mm:ss", Locale.FRANCE)
-
static final String NOM_FICHIER_EXPORT = "Scolarite_Suivi par eleve"
def index = {
def recherche = {
verifieDroitFonctionnalite(ScolariteFonctionnalites.SCOL_PUBLIPOSTAGE)
- Map result = rechercher(params)
+ Map mapParams = (Map) JSON.parse(params.params)
- render result as JSON
+ List<StructureEnseignement> classes = StructureEnseignement.getAll(mapParams.classeIds)
+ classes.each {verifieDroitAccesObjetDomaine(it)}
+
+ render suiviEleveService.rechercher(params, etablissementCourant()) as JSON
}
def exporteDonneesCourrier = {
verifieDroitFonctionnalite(ScolariteFonctionnalites.SCOL_PUBLIPOSTAGE)
- // créer un objet DonneesPourExportCSV
- DonneesPourExportCSV donneesPourExportCSV = new DonneesPourExportCSV()
- // parser les paramètres
- Map mapParams = (Map) JSON.parse(params.params)
- // recalculer le tableau
- Map donneesDuTableau = rechercher(params)
- // vérifier les colonnes sélectionnées pour l'affichage
- List<Integer> colonnesSelectionneesIds = mapParams.colonnes?.toList()
- List<SuiviEleveCourrierColonnesEnum> colonnesSelectionnees = getColonnesSelectionneesCourrier(colonnesSelectionneesIds)
- // définir les colonnes en créant une liste de String contenant le nom de chaque colonne
- boolean colDateSelectionnee = false
- boolean colHeureSelectionnee = false
- boolean colNomSelectionnee = false
- boolean colClasseSelectionnee = false
- boolean colSupportSelectionnee = false
- boolean colModeleSelectionnee = false
- // définir les colonnes en créant une liste de String contenant le nom de chaque colonne
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.DATE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.date', default: 'Date')
- colDateSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.HEURE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.heure', default: 'Heure')
- colHeureSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.NOM)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.nom', default: 'Nom')
- colNomSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.CLASSE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.classe', default: 'Classe')
- colClasseSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.SUPPORT)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.support', default: 'Support')
- colSupportSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveCourrierColonnesEnum.MODELE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.modele', default: 'Modèle')
- colModeleSelectionnee = true
- }
- // formater les données du tableau tel que pour chaque ligne, on a une liste de valeurs, dans l'ordre des colonnes du tableau
- donneesDuTableau.data.each{
- List ligne = []
- if (colDateSelectionnee) {ligne.add(it.date)}
- if (colHeureSelectionnee) {ligne.add(it.heure)}
- if (colNomSelectionnee) {ligne.add(it.nom)}
- if (colClasseSelectionnee) {ligne.add(it.classe)}
- if (colSupportSelectionnee) {ligne.add(it.type)}
- if (colModeleSelectionnee) {ligne.add(it.modele)}
- donneesPourExportCSV.lignes << ligne
- }
- // réaliser l'export
- sendCsvFile(response, donneesPourExportCSV, NOM_FICHIER_EXPORT)
-
- }
+ Map mapParams = (Map) JSON.parse(params.params)
- def exporteDonneesSMS = {
+ Map donneesDuTableau = suiviEleveService.rechercher(params, etablissementCourant())
- verifieDroitFonctionnalite(ScolariteFonctionnalites.SCOL_PUBLIPOSTAGE)
+ DonneesPourExportCSV donneesPourExportCSV =
+ suiviElevePreparartionExportCSVService.prepareExportSuiviEleve(
+ donneesDuTableau.data,
+ mapParams.colonnes?.toList(),
+ SuiviElevePreparartionExportCSVService.COURIER
+ )
- // créer un objet DonneesPourExportCSV
- DonneesPourExportCSV donneesPourExportCSV = new DonneesPourExportCSV()
- // parser les paramètres
- Map mapParams = (Map) JSON.parse(params.params)
- // recalculer le tableau
- Map donneesDuTableau = rechercher(params)
- // vérifier les colonnes sélectionnées pour l'affichage
- List<Integer> colonnesSelectionneesIds = mapParams.colonnes?.toList()
- List<SuiviEleveSMSColonnesEnum> colonnesSelectionnees = getColonnesSelectionneesSMS(colonnesSelectionneesIds)
- boolean colDateSelectionnee = false
- boolean colHeureSelectionnee = false
- boolean colNomPrenomSelectionnee = false
- boolean colClasseSelectionnee = false
- boolean colResponsableSelectionnee = false
- boolean colTelPortSelectionnee = false
- boolean colNomSMSSelectionnee = false
- boolean colStatutSelectionnee = false
- // définir les colonnes en créant une liste de String contenant le nom de chaque colonne
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.DATE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.date', default: 'Date')
- colDateSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.HEURE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.heure', default: 'Heure')
- colHeureSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.NOM)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.nom', default: 'Nom')
- colNomPrenomSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.CLASSE)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.classe', default: 'Classe')
- colClasseSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.RESPONSABLE)){
- donneesPourExportCSV.colonnes << message(code: 'eliot.libelle.responsable', default: 'Responsable')
- colResponsableSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.TEL_PORT)){
- donneesPourExportCSV.colonnes << message(code: 'eliot.libelle.portable', default: 'Tél. Port.')
- colTelPortSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.NOM_SMS)){
- donneesPourExportCSV.colonnes << message(code: 'scolarite.suivipareleve.nomSms', default: 'Nom du SMS')
- colNomSMSSelectionnee = true
- }
- if (colonnesSelectionnees.contains(SuiviEleveSMSColonnesEnum.STATUT)){
- donneesPourExportCSV.colonnes << message(code: 'eliot.libelle.statut', default: 'Statut')
- colStatutSelectionnee = true
- }
- // formater les données du tableau tel que pour chaque ligne, on a une liste de valeurs, dans l'ordre des colonnes du tableau
- donneesDuTableau.data.each{
- List ligne = []
- if (colDateSelectionnee) {ligne.add(it.date)}
- if (colHeureSelectionnee) {ligne.add(it.heure)}
- if (colNomPrenomSelectionnee) {ligne.add(it.nom)}
- if (colClasseSelectionnee) {ligne.add(it.classe)}
- if (colResponsableSelectionnee) {ligne.add(it.responsable)}
- if (colTelPortSelectionnee) {ligne.add(it.portable)}
- if (colNomSMSSelectionnee) {ligne.add(it.modele)}
- if (colStatutSelectionnee) {ligne.add(it.statut)}
- donneesPourExportCSV.lignes << ligne
- }
// réaliser l'export
sendCsvFile(response, donneesPourExportCSV, NOM_FICHIER_EXPORT)
}
- private List<SuiviEleveCourrierColonnesEnum> getColonnesSelectionneesCourrier(List<Integer> colonnesSelectionneesIds) {
- List<SuiviEleveCourrierColonnesEnum> colonnesSelectionnees = []
-
- SuiviEleveCourrierColonnesEnum.each{
- if (colonnesSelectionneesIds?.contains(it.id)){
- colonnesSelectionnees.add(it)
- }
- }
-
- return colonnesSelectionnees
- }
-
- private List<SuiviEleveSMSColonnesEnum> getColonnesSelectionneesSMS(List<Integer> colonnesSelectionneesIds) {
- List<SuiviEleveSMSColonnesEnum> colonnesSelectionnees = []
-
- SuiviEleveSMSColonnesEnum.each{
- if (colonnesSelectionneesIds?.contains(it.id)){
- colonnesSelectionnees.add(it)
- }
- }
-
- return colonnesSelectionnees
- }
-
- private Map rechercher(GrailsParameterMap params) {
- Map result = [:]
+ def exporteDonneesSMS = {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",
- Locale.FRANCE)
+ verifieDroitFonctionnalite(ScolariteFonctionnalites.SCOL_PUBLIPOSTAGE)
Map mapParams = (Map) JSON.parse(params.params)
- Date dateDebut = mapParams.dateDebut ? sdf.parse(mapParams.dateDebut) : null
- Date dateFin = mapParams.dateFin ? sdf.parse(mapParams.dateFin) : null
-
- List<StructureEnseignement> classes = StructureEnseignement.getAll(mapParams.classeIds)
- classes.each {verifieDroitAccesObjetDomaine(it)}
-
- List<TemplateDocument> modeles = TemplateDocument.getAll(mapParams
- .modeleIds)
+ Map donneesDuTableau = suiviEleveService.rechercher(params, etablissementCourant())
- dateFin.setTime(dateFin.getTime() + 24 * 3600 * 1000)
-
- int start = mapParams.start ?: 0
-
- Map sortInfo = [:]
- List<SmsStatut> statuts = []
-
- switch (mapParams.mediaId) {
- case TypeMedia.COURRIER.getCode():
- sortInfo = mapParams.sortInfo
- break
- case TypeMedia.SMS.getCode():
- sortInfo = mapParams.sort ? [field: mapParams.sort, direction: mapParams.dir] : [:]
- statuts = mapParams.statuts ? mapParams.statuts.collect{SmsStatut[it]} : []
- break
- }
-
- Map listeEnvoi = impressionSuiviEleveService.listeEnvoi(
- etablissementCourant(),
- dateDebut,
- dateFin,
- classes,
- modeles,
- start,
- sortInfo,
- TypeMedia.typeMediaForCode(mapParams.mediaId),
- statuts
- )
-
- List<PublipostageSuivi> suivis = listeEnvoi.liste
-
- result.data = suivis.collect {
- [
- id: it.id,
- date: SDF_DATE.format(it.dateEnvoi),
- heure: SDF_HEURE.format(it.dateEnvoi),
- nom: it.personne?.nomAffichage(),
- classe: it.classe?.code,
- type: message(code: TypeMedia.typeMediaForCode(it.media).libelle),
- responsable: it?.responsable?.nomAffichage(),
- modele: it?.templateDocument?.nom,
- portable: it?.responsable?.getTelephonePortable(),
- statut: message(code: 'eliot.impression.sms.statut.' + it.statut.toString())
- ]
- }
+ DonneesPourExportCSV donneesPourExportCSV =
+ suiviElevePreparartionExportCSVService.prepareExportSuiviEleve(
+ donneesDuTableau.data,
+ mapParams.colonnes?.toList(),
+ SuiviElevePreparartionExportCSVService.SMS
+ )
- result.nbData = listeEnvoi.nbData
- result.success = true
- return result
+ // réaliser l'export
+ sendCsvFile(response, donneesPourExportCSV, NOM_FICHIER_EXPORT)
}
-
private List<Map> getClasses() {
List<StructureEnseignement> classes = localStructureEnseignementService.
findAllClasseByEtablissement(etablissementCourant()).