import grails.converters.JSON
import org.codehaus.groovy.grails.web.converters.exceptions.ConverterException
+import org.lilie.services.eliot.backoffice.Filtre
import org.lilie.services.eliot.temps.DateUtil
class RestBackofficeConfigController {
response.characterEncoding = "utf-8"
- Map filtre = [:]
- Map pagination = [:]
- if (params?.uai) {filtre.uai = params.uai}
- if (params?.isEtabEliot != null) {filtre.isEtabEliot = Boolean.valueOf(params.isEtabEliot)}
- if (params?.isEliotOpen != null) {filtre.isEliotOpen = Boolean.valueOf(params.isEliotOpen)}
- if (params?.isCdtOpen != null) {filtre.isCdtOpen = Boolean.valueOf(params.isCdtOpen)}
- if (params?.baseEleve) {filtre.baseEleve = params.baseEleve}
- if (params?.lvs != null) {filtre.lvs = Boolean.valueOf(params.lvs)}
- if (params?.udt != null) {filtre.udt = Boolean.valueOf(params.udt)}
- if (params?.max) {pagination.max = Integer.parseInt(params.max)}
- if (params?.offset) {pagination.offset = Integer.parseInt(params.offset)}
-
- List configs = []
- configs = backofficeService.listeConfigBackoffice(filtre,pagination)
- Integer nombreBackofficeConfigs = backofficeService.compteBackofficeConfigFiltre(filtre)
+ Filtre filtre = getEtablissementFiltre()
+ Map pagination = getPagination()
+
+ List configs = backofficeService.listeConfigBackoffice(filtre, pagination)
Map backofficeConfigReponse = [
backofficeConfigs: configs,
- nombreBackofficeConfigs: nombreBackofficeConfigs
+ nombreBackofficeConfigs: configs ? configs.first().nombreTotal : 0
]
render(backofficeConfigReponse.encodeAsJSON())
}
+ private Map getPagination() {
+ Map pagination = [:]
+ if (params.max) {
+ pagination.max = Integer.parseInt(params.max)
+ }
+ if (params.offset) {
+ pagination.offset = Integer.parseInt(params.offset)
+ }
+ pagination
+ }
+
+ private Filtre getEtablissementFiltre() {
+ Filtre filtre = new Filtre()
+ if (params.uai) {
+ filtre.uai = params.uai
+ }
+ if (params.isEtabEliot != null) {
+ filtre.isEtabEliot = Boolean.valueOf(params.isEtabEliot)
+ }
+ if (params.isEliotOpen != null) {
+ filtre.isEliotOpen = Boolean.valueOf(params.isEliotOpen)
+ }
+ if (params.isCdtOpen != null) {
+ filtre.isCdtOpen = Boolean.valueOf(params.isCdtOpen)
+ }
+ if (params.baseEleve) {
+ filtre.baseEleve = params.baseEleve
+ }
+ if (params.lvs != null) {
+ filtre.lvs = Boolean.valueOf(params.lvs)
+ }
+ if (params.udt != null) {
+ filtre.udt = Boolean.valueOf(params.udt)
+ }
+
+ if (params.dernierImportUdtDtDeb) {
+ filtre.dernierImportUdtDtDeb = parseDate(params.dernierImportUdtDtDeb)
+ }
+ if (params.dernierImportUdtDtFin) {
+ filtre.dernierImportUdtDtFin = parseDate(params.dernierImportUdtDtFin)
+ }
+ if (params.dernierImportAnnuaireDtDeb) {
+ filtre.dernierImportAnnuaireDtDeb = parseDate(params.dernierImportAnnuaireDtDeb)
+ }
+ if (params.dernierImportAnnuaireDtFin) {
+ filtre.dernierImportAnnuaireDtFin = parseDate(params.dernierImportAnnuaireDtFin)
+ }
+
+ return filtre
+ }
+
private boolean isSaveBodyValide(def json) {
return json && json instanceof JSONArray && !json.isEmpty()
}
Map filtre = [:]
if (params.uai) {filtre.uai = params.uai}
if (params.debutImport) {
- filtre.debutImport = DateUtil.parse(params.debutImport, 'dd/MM/yyyy')
+ filtre.debutImport = parseDate(params.debutImport)
}
List importsUdt = backofficeService.listeImportsUdt(filtre)
render(importsUdt.encodeAsJSON())
}
+ private static Date parseDate(String date) {
+ DateUtil.parse(date, 'dd/MM/yyyy')
+ }
+
}
import groovy.sql.Sql
import org.lilie.services.eliot.annuaire.FonctionEnum
import org.lilie.services.eliot.api.backoffice.BackofficeConfigSaveParam
+import org.lilie.services.eliot.temps.DateUtil
import java.sql.Timestamp
academie, max(date_import) as date
from
aaf.import
+ where
+ academie is not null
group by
academie
),
etablissement as (
select
- id, uai, true as is_eliot
+ id, uai, academie, true as is_eliot
from
ent.etablissement
),
dernier_import_udt as (
- select
- etablissement_id, max(id) as id
- from
- udt.import
- group by
- etablissement_id
- ),
- dernier_import_udt_dates as (
- select
- id, date_debut_pre_traitement, date_fin_pre_traitement
+ select distinct on (etablissement_id)
+ id,
+ etablissement_id,
+ date_debut_pre_traitement,
+ date_fin_pre_traitement
from
udt.import
+ order by
+ etablissement_id, id desc
),
derniere_semaine_importee as (
select
bc.is_cdt_open,
etablissement.is_eliot as is_etab_eliot,
be.code as base_eleve,
- dernier_import_udt_dates.date_debut_pre_traitement as debut_dernier_import_udt,
- dernier_import_udt_dates.date_fin_pre_traitement as fin_pt_dernier_import_udt,
+ dernier_import_udt.date_debut_pre_traitement as debut_dernier_import_udt,
+ dernier_import_udt.date_fin_pre_traitement as fin_pt_dernier_import_udt,
fin_import_semaine.date_fin_import as fin_dernier_import_udt,
dernier_import_aaf.date as dernier_import_aaf,
- coalesce(evenements_en_attente.nbr, 0) as nbr_event_en_attente_dernier_import_udt
+ coalesce(evenements_en_attente.nbr, 0) as nbr_event_en_attente_dernier_import_udt,
+ count(*) over() as nombre_total
from
backoffice.backoffice_config as bc
left join
backoffice.base_eleve as be on bc.base_eleve_id = be.id
- left join
- dernier_import_aaf on dernier_import_aaf.academie = bc.uai
left join
etablissement on etablissement.uai = bc.uai
left join
- dernier_import_udt on dernier_import_udt.etablissement_id = etablissement.id
+ dernier_import_aaf on dernier_import_aaf.academie = etablissement.academie
left join
- dernier_import_udt_dates on dernier_import_udt_dates.id = dernier_import_udt.id
+ dernier_import_udt on dernier_import_udt.etablissement_id = etablissement.id
left join
derniere_semaine_importee on derniere_semaine_importee.udt_import_id = dernier_import_udt.id
left join
where 1 = 1
"""
- List listeConfigBackoffice(def filtre, def pagination){
+ List listeConfigBackoffice(Filtre filtre, Map pagination){
List params = []
StringBuilder requeteSqlBuilder = new StringBuilder()
requeteSqlBuilder <<= LISTE_CONFIG_BACKOFFICE_SQL
params << filtre.baseEleve
}
if (filtre.lvs != null){
- requeteSqlBuilder <<=" and bc.lvs = ?"
+ requeteSqlBuilder <<= " and bc.lvs = ?"
params << filtre.lvs
}
if (filtre.udt != null){
- requeteSqlBuilder <<=" and bc.udt = ?"
+ requeteSqlBuilder <<= " and bc.udt = ?"
params << filtre.udt
}
+ if (filtre.dernierImportUdtDtDeb){
+ requeteSqlBuilder <<= " and dernier_import_udt.date_debut_pre_traitement >= ?"
+ params << new Timestamp(DateUtil.setDebutJour(filtre.dernierImportUdtDtDeb).getTime())
+ }
+
+ if (filtre.dernierImportUdtDtFin){
+ requeteSqlBuilder <<= " and dernier_import_udt.date_debut_pre_traitement <= ?"
+ params << new Timestamp(DateUtil.setFinJour(filtre.dernierImportUdtDtFin).getTime())
+ }
+
+ if (filtre.dernierImportAnnuaireDtDeb){
+ requeteSqlBuilder <<= " and dernier_import_aaf.date >= ?"
+ params << new Timestamp(DateUtil.setDebutJour(filtre.dernierImportAnnuaireDtDeb).getTime())
+ }
+
+ if (filtre.dernierImportAnnuaireDtFin){
+ requeteSqlBuilder <<= " and dernier_import_aaf.date <= ?"
+ params << new Timestamp(DateUtil.setFinJour(filtre.dernierImportAnnuaireDtFin).getTime())
+ }
+
requeteSqlBuilder <<= " order by bc.uai"
- pagine(pagination, params, requeteSqlBuilder)
+ requeteSqlBuilder = pagine(pagination, params, requeteSqlBuilder)
return executeRequeteListeConfigBackoffice(requeteSqlBuilder.toString(), params)
}
row.getProperty('fin_dernier_import_udt'),
row.getProperty('nbr_event_en_attente_dernier_import_udt')
)
+ mapImport.nombreTotal = row.getProperty('nombre_total')
configs << mapImport
}
} catch (Exception e) {
}
- Integer compteBackofficeConfigFiltre (def filtre){
- Map params = [:]
- String hql = "select count(distinct bo.id)"
- hql += hqlFiltreBackofficeConfig(filtre, params)
-
- return (Integer) BackofficeConfig.executeQuery(hql, params)[0]
- }
-
-
Integer compteUtilisateurFiltre (def uai, def filtre) {
List params = []
requeteSql <<= sqlFiltrePersonne(filtre, params, uai)
requeteSql <<= " order by nom, prenom"
- pagine(pagination, params, requeteSql)
+ requeteSql = pagine(pagination, params, requeteSql)
List utilisateurs = []
def sql = new Sql(dataSource)
}
- private String hqlFiltreBackofficeConfig(filtre, params){
- String hql = """
- FROM
- BackofficeConfig as bo
- LEFT JOIN bo.baseEleve as be
- WHERE
- 1 = 1
- """
- // Where 1 = 1 > Pour ne pas gérer les "AND" dans les conditions suivantes...
-
- if (filtre?.uai){
- hql += " AND bo.uai like :uai"
- params["uai"]=filtre.uai
- }
- if (filtre?.isEtabEliot == true){
- hql += """ AND ( SELECT uai
- FROM Etablissement as e
- WHERE e.uai = bo.uai) is not null """
- }
- if (filtre?.isEtabEliot == false){
- hql += """ AND ( SELECT uai
- FROM Etablissement as e
- WHERE e.uai = bo.uai) is null """
- }
- if (filtre?.isEliotOpen != null){
- hql += """ AND bo.isEliotOpen = :isEliotOpen """
- params["isEliotOpen"]=filtre.isEliotOpen
- }
- if (filtre?.isCdtOpen != null){
- hql += """ AND bo.isCdtOpen = :isCdtOpen """
- params["isCdtOpen"]=filtre.isCdtOpen
- }
- if (filtre?.baseEleve){
- hql += " AND bo.baseEleve.code = :baseEleve"
- params["baseEleve"]=filtre.baseEleve
- }
- if (filtre?.lvs != null){
- hql +=" AND bo.lvs = :lvs"
- params["lvs"]=filtre.lvs
- }
- if (filtre?.udt != null){
- hql +=" AND bo.udt = :udt"
- params["udt"]=filtre.udt
- }
-
- return hql
-
- }
-
-
/**
* Gère la clause union pour les requêtes sqlFiltrePersonne
*/
/**
* gére la pagination
*/
- private void pagine(Map pagination, List params, StringBuilder requeteSql) {
+ private StringBuilder pagine(Map pagination, List params, StringBuilder requeteSql) {
if (pagination.max) {
requeteSql <<= " limit ?"
params << pagination.max
requeteSql <<= " offset ?"
params << pagination.offset
}
+
+ return requeteSql
}
List <BaseEleve> listeBaseEleves(){
--- /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.backoffice
+
+
+class Filtre {
+ String uai
+ Boolean isEtabEliot
+ Boolean isEliotOpen
+ Boolean isCdtOpen
+ String baseEleve
+ Boolean lvs
+ Boolean udt
+
+ Date dernierImportUdtDtDeb
+ Date dernierImportUdtDtFin
+ Date dernierImportAnnuaireDtDeb
+ Date dernierImportAnnuaireDtFin
+}