import org.lilie.services.eliot.securite.impl.DefaultSecuriteSessionFactory
import org.lilie.services.eliot.textes.impression.ImpressionCatalogueService
import org.lilie.services.eliot.securite.impl.Autorite
+import org.lilie.services.eliot.textes.Ressource
+import org.hibernate.SQLQuery
+import org.hibernate.Session
+import org.hibernate.SessionFactory
+import org.lilie.services.eliot.textes.Fichier
/**
* Module de requetage pour l'impression des cahiers de textes
class CahierDeTextesImpressionService {
def grailsApplication
+ SessionFactory sessionFactory
TextesImpressionStockageService textesImpressionStockageService
DocbookService docbookService
HtmlService htmlService
ImpressionCatalogueService impressionCatalogueService
- static private final String HQL_TOUTES_ACTIVITES = """
-select
-da
-from
-DateActivite da
+ static private final String SQL_TOUTES_ACTIVITES = """
-where
-da.activite.cahierDeTextes=:cdt
-order by da.activite.ordre
+select {activite.*}, {dateActivite.*}, {rsc.*}, {fic.*}
-"""
+from entcdt.activite activite
- private Map findNoticesBiblio(Etablissement etablissement, Activite activite, Autorite autorite) {
+left join entcdt.date_activite dateActivite on dateActivite.activite_id=activite.id
+left join entcdt.ressource rsc on rsc.activite_id=activite.id
+left join entcdt.fichier fic on rsc.fichier_id=fic.id
- SecuriteSession securiteSession = DefaultSecuriteSessionFactory.
- getEliotTextesSecuriteSessionForCodePorteurENT(
- etablissement.codePorteurENT
- )
+where activite.cahier_de_textes_id=:id
+
+order by activite.ordre
+"""
+
+ private Map findNoticesBiblio(SecuriteSession securiteSession,
+ Etablissement etablissement,
+ Activite activite,
+ Autorite autorite) {
Map activiteDocInfos = impressionCatalogueService.getDocInfos(
securiteSession,
return resultat
}
+ private List findAllDonneesActivitesCahierDeTextes(Long cahierDeTextesId) {
+
+ Session session = sessionFactory.getCurrentSession()
+
+ SQLQuery sqlQuery = session.createSQLQuery(SQL_TOUTES_ACTIVITES)
+
+ sqlQuery.addEntity("activite", Activite)
+ sqlQuery.addEntity("dateActivite", DateActivite)
+ sqlQuery.addEntity("rsc", Ressource)
+ sqlQuery.addEntity("fic", Fichier)
+
+ sqlQuery.setLong("id", cahierDeTextesId)
+
+ return sqlQuery.list()
+
+ }
+
/**
* Lecture des activités en base
* @param cahierDeTextes : pour ce cahier de textes
List<Activite> resultat = []
- if (peutVoirActiviteSansDate) {
- Activite.findAllByCahierDeTextes(
- cahierDeTextes
- ).each {Activite activite ->
- if (activite.dates.size() == 0) {
- activite.hasDescription = hasActiviteDescription(activite)
- resultat << activite
- }
- }
- }
+ List allDonneesActivitesCahierDeTextes = findAllDonneesActivitesCahierDeTextes(cahierDeTextes.id)
- List<DateActivite> activites = DateActivite.executeQuery(
- HQL_TOUTES_ACTIVITES,
- [
- cdt: cahierDeTextes
- ]
- )
+ resultat = trouveEtAjoutActiviteSansDate(allDonneesActivitesCahierDeTextes, peutVoirActiviteSansDate, resultat)
+
+ List allDatesActivites = findAllDatesActivites(allDonneesActivitesCahierDeTextes)
+
+ resultat = findAllActiviteAvecDateImprimables(
+ allDatesActivites,
+ dateDebut,
+ dateFin,
+ peutVoirActiviteNonPubliee,
+ resultat)
+
+ return resultat
+ }
+
+ private List<Activite> findAllActiviteAvecDateImprimables(ArrayList allDatesActivites,
+ Date dateDebut,
+ Date dateFin,
+ boolean peutVoirActiviteNonPubliee,
+ List<Activite> resultat) {
Calendar cal = GregorianCalendar.getInstance(Locale.FRANCE)
- activites.each { DateActivite dateActivite ->
+ allDatesActivites.each { DateActivite dateActivite ->
Activite activite = dateActivite.activite
}
}
+ return resultat
+ }
+
+ private List<Activite> trouveEtAjoutActiviteSansDate(List allDonneesActivitesCahierDeTextes, boolean peutVoirActiviteSansDate, List<Activite> resultat) {
+ Map<Activite, Boolean> allActiviteAvecDate = findAllActiviteAvecOuSansDate(allDonneesActivitesCahierDeTextes)
+
+ if (peutVoirActiviteSansDate) {
+
+ resultat = ajouteActiviteSansDate(allActiviteAvecDate, resultat)
+ }
+ resultat
+ }
+
+ private List<Activite> ajouteActiviteSansDate(Map<Activite, Boolean> allActiviteAvecDate, List<Activite> resultat) {
+ allActiviteAvecDate.each {k, v ->
+ if (!v) {
+ k.hasDescription = hasActiviteDescription(k)
+ resultat << k
+ }
+ }
return resultat
}
+ private List findAllDatesActivites(List allActivites) {
+
+ List allDatesActivites = []
+
+ allActivites.each {
+
+ DateActivite dateActivite = (DateActivite) it[1]
+
+ if (dateActivite) {
+ if (allDatesActivites.indexOf(dateActivite) == -1) {
+ allDatesActivites << dateActivite
+ }
+ }
+
+ }
+ allDatesActivites
+ }
+
+ private Map<Activite, Boolean> findAllActiviteAvecOuSansDate(List allActivites) {
+
+ Map<Activite, Boolean> allActiviteAvecDate = [:]
+
+ allActivites.each {
+
+ Activite activite = (Activite) it[0]
+ DateActivite dateActivite = (DateActivite) it[1]
+
+ if (dateActivite) {
+
+ if (allActiviteAvecDate[activite]) {
+ allActiviteAvecDate[activite] = true
+ } else {
+ allActiviteAvecDate.put(activite, true)
+ }
+
+ } else {
+
+ if (!allActiviteAvecDate[activite]) {
+ allActiviteAvecDate.put(activite, false)
+ }
+
+ }
+
+ }
+ allActiviteAvecDate
+ }
+
/**
* Mets la partie Time de Date a 0
*/
- Date extraisPartieDate(Date date, Calendar cal) {
+ private Date extraisPartieDate(Date date, Calendar cal) {
cal.setTime(date)
cal.set(Calendar.HOUR_OF_DAY, 0)
cal.set(Calendar.MINUTE, 0)
ElementChapitreInvisible elementChapitreInvisible = new ElementChapitreInvisible()
+ SecuriteSession securiteSessionEliot = DefaultSecuriteSessionFactory.
+ getEliotTextesSecuriteSessionForCodePorteurENT(
+ etablissement.codePorteurENT
+ )
+
List<Activite> activites = findAllActivite(
cdt,
dateDebut,
ElementActivite elementActivite = new ElementActivite(activite)
- elementActivite.docInfos = findNoticesBiblio(etablissement, activite, autorite)
+ elementActivite.ressources
+
+ elementActivite.docInfos = findNoticesBiblio(
+ securiteSessionEliot,
+ etablissement,
+ activite,
+ autorite)
Chapitre chap = activite.chapitre
boolean peutVoirActiviteSansDate
) {
+ if (log.isDebugEnabled()) {
+ log.debug("Début impression pdf")
+ }
+
ElementLivre donnees = findDonneesImpression(
cdt,
Autorite.get(param.autoriteId),
logDocbook([donnees: donnees], false, demande)
+ if (log.isDebugEnabled()) {
+ log.debug("Début transformation pdf")
+ }
+
OutputStream documentPDF =
docbookService.renderPdfPourUnCdt([donnees: donnees])
+ if (log.isDebugEnabled()) {
+ log.debug("Fin transformation pdf")
+ }
+
+
textesImpressionStockageService.saveFichierPDF(demande, documentPDF)
}