DemandeTraitementService demandeTraitementService
ActionPossibleService actionPossibleService
CahierDeTextesImpressionService cahierDeTextesImpressionService
- TextesImpressionStockageService textesImpressionStockageService
- DocbookService docbookService
-
- private static String CDT_COMPLET = "complet"
void traiteAllDemande() {
List<CahierDeTextes> cdts = CahierDeTextes.getAll(param.ids)
if (param.plusieursCahiers) {
- imprimePlusieursCdt(demande, param, cdts)
+ cahierDeTextesImpressionService.imprimePlusieursCdt(demande, param, cdts)
} else {
- imprimeUnCdt(demande, param, cdts.first())
+ cahierDeTextesImpressionService.imprimeUnCdt(demande, param, cdts.first())
}
} catch (Exception ex) {
log.error("Error lors du traitement de la demande ${demande.id}", ex)
}
- private void imprimeUnCdt(DemandeTraitement demande,
- TextesImpressionParam param,
- CahierDeTextes cdt) {
-
- ElementLivre donnees =
- cahierDeTextesImpressionService.findDonneesImpression(
- cdt,
- param.avecChapitreVide,
- param.dateDebut,
- param.dateFin)
-
- OutputStream documentPDF =
- docbookService.renderPdfPourUnCdt(CDT_COMPLET, [infosCahiers: donnees])
-
- textesImpressionStockageService.saveFichierPDF(demande, documentPDF)
- }
-
-
- private void imprimePlusieursCdt(DemandeTraitement demande,
- TextesImpressionParam param,
- List<CahierDeTextes> cdts) {
-
- List<ElementLivre> donnees = cdts.collect {
- cahierDeTextesImpressionService.findDonneesImpression(
- it,
- param.avecChapitreVide,
- param.dateDebut,
- param.dateFin)
- }
-
- OutputStream documentPDF =
- docbookService.renderPdfPourPlusieursCdt(CDT_COMPLET, [donnees: donnees])
-
- textesImpressionStockageService.saveFichierPDF(demande, documentPDF)
- }
-
-
DemandeTraitement enregistreDemande(SecuriteSession securiteSession,
TextesImpressionParam param) {
import org.lilie.services.eliot.textes.impression.requetage.donnees.ElementChapitre
import org.lilie.services.eliot.textes.DateActivite
import org.lilie.services.eliot.textes.impression.requetage.donnees.ElementLivre
+import org.lilie.services.eliot.demon.DemandeTraitement
+import org.lilie.services.eliot.textes.impression.TextesImpressionParam
+import org.lilie.services.eliot.textes.impression.TextesImpressionStockageService
+import org.lilie.services.eliot.textes.impression.DocbookService
/**
* Module de requetage pour l'impression des cahiers de textes
*/
class CahierDeTextesImpressionService {
+ TextesImpressionStockageService textesImpressionStockageService
+ DocbookService docbookService
+
+ private static String CDT_COMPLET = "complet"
+
static private String hqlActivite = """
select
da
List<Activite> resultat = []
List<DateActivite> activites = DateActivite.executeQuery(
- hqlActivite,
- [
- cdt: cahierDeTextes
- ]
+ hqlActivite,
+ [
+ cdt: cahierDeTextes
+ ]
)
activites.each { DateActivite dateActivite ->
if (dateActivite.dateEcheance) {
if (
- (dateActivite.dateEcheance > dateDebut) &&
- (dateActivite.dateEcheance < dateFin)
+ (dateActivite.dateEcheance > dateDebut) &&
+ (dateActivite.dateEcheance < dateFin)
) {
resultat << dateActivite.activite
return
if (dateActivite.dateActivite) {
if (
- (dateActivite.dateActivite > dateDebut) &&
- (dateActivite.dateActivite < dateFin)
+ (dateActivite.dateActivite > dateDebut) &&
+ (dateActivite.dateActivite < dateFin)
) {
resultat << dateActivite.activite
return
// si l'élément chapitre n'existe pas, on doit construire un nouveau chapitre
elementChapitre =
construitBrancheDesChapitres(
- chap,
- elementCahierDeTextes
+ chap,
+ elementCahierDeTextes
)
}
if (avecChapitreVide) {
ajouteChapitresVide(
- cdt,
- elementCahierDeTextes
+ cdt,
+ elementCahierDeTextes
)
}
if (!elementChapitre) {
construitBrancheDesChapitres(
- chapitre,
- elementCahierDeTextes
+ chapitre,
+ elementCahierDeTextes
)
}
}
+
+ void imprimeUnCdt(DemandeTraitement demande,
+ TextesImpressionParam param,
+ CahierDeTextes cdt) {
+
+ ElementLivre donnees = findDonneesImpression(
+ cdt,
+ param.avecChapitreVide,
+ param.dateDebut,
+ param.dateFin)
+
+ OutputStream documentPDF =
+ docbookService.renderPdfPourUnCdt(CDT_COMPLET, [infosCahiers: donnees])
+
+ textesImpressionStockageService.saveFichierPDF(demande, documentPDF)
+ }
+
+
+ void imprimePlusieursCdt(DemandeTraitement demande,
+ TextesImpressionParam param,
+ List<CahierDeTextes> cdts) {
+
+ List<ElementLivre> donnees = cdts.collect {
+ findDonneesImpression(
+ it,
+ param.avecChapitreVide,
+ param.dateDebut,
+ param.dateFin)
+ }
+
+ OutputStream documentPDF =
+ docbookService.renderPdfPourPlusieursCdt(CDT_COMPLET, [donnees: donnees])
+
+ textesImpressionStockageService.saveFichierPDF(demande, documentPDF)
+ }
}
--- /dev/null
+package org.lilie.services.eliot.textes.impression
+
+import grails.plugin.spock.UnitSpec
+import org.codehaus.groovy.grails.plugins.converters.codecs.JSONCodec
+import org.lilie.services.eliot.securite.impl.Autorite
+import org.lilie.services.eliot.annuaire.SecuriteSession
+import org.lilie.services.eliot.scolarite.Etablissement
+import org.lilie.services.eliot.demon.DemandeTraitementService
+import org.lilie.services.eliot.textes.droits.ActionPossibleService
+import org.lilie.services.eliot.textes.impression.requetage.CahierDeTextesImpressionService
+import org.lilie.services.eliot.demon.impl.DefaultTraitementType
+import org.lilie.services.eliot.demon.impl.DefaultDemandeTraitement
+import org.lilie.services.eliot.textes.CahierDeTextes
+import org.lilie.services.eliot.UnitTestUtils
+import org.lilie.services.eliot.securite.AutorisationException
+import org.lilie.services.eliot.demon.DemandeTraitement
+
+/**
+ * @author bper
+ */
+class TextesImpressionDiffereeSpec extends UnitSpec {
+
+ DemandeTraitementService demandeTraitementService
+ ActionPossibleService actionPossibleService
+ CahierDeTextesImpressionService cahierDeTextesImpressionService
+
+ TextesImpressionDiffereeService textesImpressionDiffereeService
+
+ def setup() {
+ demandeTraitementService = Mock()
+ actionPossibleService = Mock()
+ cahierDeTextesImpressionService = Mock()
+
+ mockLogging(TextesImpressionDiffereeService, false)
+
+ textesImpressionDiffereeService = new TextesImpressionDiffereeService(
+ demandeTraitementService: demandeTraitementService,
+ actionPossibleService: actionPossibleService,
+ cahierDeTextesImpressionService: cahierDeTextesImpressionService
+ )
+
+ UnitTestUtils.initDefaultMarshallers()
+ Map.metaClass.encodeAsJSON = {JSONCodec.encode(delegate)}
+ }
+
+ def cleanup() {
+ Map.metaClass = null
+ }
+
+ def "enregistreDemande - OK"() {
+ given:
+ SecuriteSession securiteSession = Mock(SecuriteSession)
+ securiteSession.getDefaultAutorite() >> Mock(Autorite)
+ securiteSession.getEtablissementCourant() >> Mock(Etablissement)
+
+ mockDomain(CahierDeTextes, null)
+
+ actionPossibleService.verifierAccesConsultation(securiteSession,_) >> {}
+
+ TextesImpressionParam param = new TextesImpressionParam(
+ dateDebut: dateDebut,
+ dateFin: dateFin,
+ avecChapitreVide: avecChapitreVide,
+ plusieursCahiers: plusieursCahiers,
+ ids: ids
+ )
+
+ Long demandeId = id
+
+ demandeTraitementService.ajouteDemandeTraitement(
+ _, _, null, DefaultTraitementType.IMPRESSION_CDT, _, null
+ ) >> {id}
+
+ demandeTraitementService.getDemandeTraitement(demandeId) >> {
+ new DefaultDemandeTraitement(id: demandeId)
+ }
+
+ when:
+ def result = textesImpressionDiffereeService.enregistreDemande(securiteSession, param)
+
+ then:
+ result != null
+ result instanceof DefaultDemandeTraitement
+
+ where:
+ id | dateDebut | dateFin | avecChapitreVide | plusieursCahiers | ids
+ 1 | new Date() | new Date() | true | false | [1]
+ 2 | new Date() | new Date() | false | false | [1]
+ 3 | new Date() | new Date() | true | true | [1, 2]
+ }
+
+
+ def "enregistreDemande - params non valides"() {
+ given:
+ SecuriteSession securiteSession = Mock(SecuriteSession)
+ securiteSession.getDefaultAutorite() >> Mock(Autorite)
+ securiteSession.getEtablissementCourant() >> Mock(Etablissement)
+
+ mockDomain(CahierDeTextes, null)
+
+ actionPossibleService.verifierAccesConsultation(securiteSession,_) >> {}
+
+ TextesImpressionParam param = new TextesImpressionParam(
+ dateDebut: dateDebut,
+ dateFin: dateFin,
+ avecChapitreVide: avecChapitreVide,
+ plusieursCahiers: plusieursCahiers,
+ ids: ids
+ )
+
+ Long demandeId = id
+
+ demandeTraitementService.ajouteDemandeTraitement(
+ _, _, null, DefaultTraitementType.IMPRESSION_CDT, _, null
+ ) >> {id}
+
+ demandeTraitementService.getDemandeTraitement(demandeId) >> {
+ new DefaultDemandeTraitement(id: demandeId)
+ }
+
+ when:
+ textesImpressionDiffereeService.enregistreDemande(securiteSession, param)
+
+ then:
+ thrown(IllegalStateException)
+
+ where:
+ id | dateDebut | dateFin | avecChapitreVide | plusieursCahiers | ids
+ 0 | new Date() | new Date() | true | false | null
+ 1 | new Date() | new Date() | true | false | []
+ 2 | new Date() | new Date() | true | null | [1]
+ 3 | new Date() | new Date() | null | false | [1]
+ 4 | new Date() | null | false | false | [1]
+ 5 | null | new Date() | false | false | [1]
+ 6 | new Date() | new Date() | false | false | [1,2]
+ }
+
+
+ def "enregistreDemande - pas d'autorisation"() {
+ given:
+ SecuriteSession securiteSession = Mock(SecuriteSession)
+
+ mockDomain(CahierDeTextes, ids.collect {new CahierDeTextes(id: it)})
+
+ actionPossibleService.verifierAccesConsultation(securiteSession,_) >> {_, cdt ->
+ if (cdt.id == cdtNonAutoriseId) {
+ throw AutorisationException.consultationContenuException()
+ }
+ }
+
+ TextesImpressionParam param = new TextesImpressionParam(ids: ids)
+
+ when:
+ textesImpressionDiffereeService.enregistreDemande(securiteSession, param)
+
+ then:
+ thrown(AutorisationException)
+
+ where:
+ cdtNonAutoriseId | ids
+ 1 | [1]
+ 4 | [1,2,3,4,5]
+ }
+
+
+ def "traiteDemande - Ok"() {
+ given:
+ TextesImpressionParam param = new TextesImpressionParam(
+ dateDebut: dateDebut,
+ dateFin: dateFin,
+ avecChapitreVide: avecChapitreVide,
+ plusieursCahiers: plusieursCahiers,
+ ids: ids
+ )
+
+ List<CahierDeTextes> cdts = ids.collect {new CahierDeTextes(id: it)}
+ mockDomain(CahierDeTextes, cdts)
+
+ DemandeTraitement demande = Mock(DefaultDemandeTraitement)
+ demande.getTraitementArgs() >> {param.toJSON()}
+
+
+ (plusieursCahiers ? 1 : 0) * cahierDeTextesImpressionService.imprimePlusieursCdt(demande, _, cdts)
+ (plusieursCahiers ? 0 : 1) * cahierDeTextesImpressionService.imprimeUnCdt(demande, _, cdts.first())
+
+ when:
+ textesImpressionDiffereeService.traiteDemande(demande)
+
+ then:
+ 1 * demande.notifieDebutTraitement()
+ 1 * demande.notifieFinTraitement(true)
+ 0 * demande.notifieFinTraitement(false)
+
+ where:
+ dateDebut | dateFin | avecChapitreVide | plusieursCahiers | ids
+ new Date() | new Date() | true | false | [1]
+ new Date() | new Date() | false | true | [1]
+ new Date() | new Date() | true | true | [1, 2]
+ }
+
+
+ def "traiteDemande - Erreur"() {
+ given:
+ TextesImpressionParam param = new TextesImpressionParam(
+ dateDebut: dateDebut,
+ dateFin: dateFin,
+ avecChapitreVide: avecChapitreVide,
+ plusieursCahiers: plusieursCahiers,
+ ids: ids
+ )
+
+ List<CahierDeTextes> cdts = ids.collect {new CahierDeTextes(id: it)}
+ mockDomain(CahierDeTextes, cdts)
+
+ DemandeTraitement demande = Mock(DefaultDemandeTraitement)
+ demande.getTraitementArgs() >> {param.toJSON()}
+
+
+ cahierDeTextesImpressionService.imprimePlusieursCdt(_,_,_) >> {
+ throw new IllegalStateException()
+ }
+ cahierDeTextesImpressionService.imprimeUnCdt(_,_,_) >> {
+ throw new IllegalStateException()
+ }
+
+ when:
+ textesImpressionDiffereeService.traiteDemande(demande)
+
+ then:
+ 1 * demande.notifieDebutTraitement()
+ 0 * demande.notifieFinTraitement(true)
+ 1 * demande.notifieFinTraitement(false)
+
+ where:
+ dateDebut | dateFin | avecChapitreVide | plusieursCahiers | ids
+ new Date() | new Date() | true | false | [1]
+ new Date() | new Date() | false | true | [1]
+ new Date() | new Date() | true | true | [1, 2]
+ }
+
+}