static mapping = {
table 'ent.service'
id column: 'id', generator: 'sequence', params: [sequence: 'ent.services_id_seq']
- structureEnseignement column: 'structure_enseignement_id', fetch: 'join'
- matiere column: 'matiere_id', fetch: 'join'
- modaliteCours column: 'modalite_cours_id', fetch: 'join'
}
/**
static mapping = {
table 'entcdt.activite'
id column: 'id', generator: 'sequence', params: [sequence: 'entcdt.activite_id_seq']
- item column: 'item_id', fetch: 'join'
typeActivite column: 'type_activite_id'
contexteActivite column: 'contexte_activite_id'
chapitre column: 'chapitre_id'
cahierDeTextes column: 'cahier_de_textes_id'
auteur column: 'auteur_id'
cahierDeTextesImport column: 'import_id'
+ // ATTENTION: la signification de batchSize n'est pas correctement interprétée dans la doc de GRAILS.
+ // Il faut se référer à la doc de Hibernate
+ dates batchSize: 50
+ ressources batchSize: 50
+ relActiviteActeurs batchSize: 50
version false
}
import org.lilie.services.eliot.scolarite.Personne
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.constantes.ConstFonct
+import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
/**
* The CahierDeTextes entity.
private Autorite proprietaire
private Personne proprietairePersonne
+ LocalPersonneService localPersonneService
+
static mapping = {
table 'entcdt.cahier_de_textes'
id column: 'id', generator: 'sequence', params: [sequence: 'entcdt.cahier_de_textes_id_seq']
cahierDeTextesImport column: 'import_id'
+ // ATTENTION: la signification de batchSize n'est pas correctement interprétée dans la doc de GRAILS.
+ // Il faut se référer à la doc de Hibernate
+ activites batchSize: 50
+ chapitres batchSize: 50
version false
}
relCahierActeurs: RelCahierActeur,
relCahierGroupes: RelCahierGroupe,
activites: Activite,
+ chapitres: Chapitre,
cahiersIncorpores: CahierDeTextes
]
'type',
'recupererCahierParent',
'findEtablissement',
- 'peutEtreVise'
+ 'peutEtreVise',
+ 'localPersonneService'
]
String toString() {
*/
boolean peutEtreVise() {
return (
- (anneeScolaire.anneeEnCours && service) ||
- (anneeScolaire.anneeEnCours && etablissement)
+ (anneeScolaire.anneeEnCours && serviceId) ||
+ (anneeScolaire.anneeEnCours && etablissementId)
)
}
if (proprietairePersonne == null) {
Autorite autorite = getProprietaire()
if (autorite) {
- proprietairePersonne = Personne.findByAutorite(autorite)
+ // La méthode utilise le cache des requetes
+ proprietairePersonne = localPersonneService.findPersonneByAutorite(autorite)
}
}
return proprietairePersonne
cahierDeTextes column: 'cahier_de_textes_id'\r
cahierDeTextesImport column: 'import_id'\r
version false\r
+ activites batchSize: 50\r
+ chapitreFils batchSize: 50\r
}\r
\r
static belongsTo = [auteur: Autorite, cahierDeTextes: CahierDeTextes, chapitre: Chapitre]\r
public String toString() {
return "Visa{" +
"id=" + id +
- ", cahierVise=" + cahierVise +
+ ", cahierVise=" + cahierViseId +
", dateVisee=" + dateVisee +
", auteur=" + auteur +
", commentaire='" + commentaire + '\'' +
/**
* Prépare les cahiers privés non visé pour le visa :
- * - rattache le cahier à un établissement
+ * - rattache le cahier à un établissement
* - rattache le cahier et à l'année scolaire en cours
* - attache les activités de cahier aux types d'activités de l'établissement
* Les cahiers déjà attaché ne sont pas modifiés
- * @param cahiers
- * @return
* @author bahj
*/
List<CahierDeTextes> prepareCahierDeTextesPrivePourVisa(SecuriteSession securiteSession,
List<CahierDeTextes> cahiers,
- Etablissement etablissement
- ) {
+ Etablissement etablissement) {
- List<CahierDeTextes> cahiersATraiter = cahiers.findAll { CahierDeTextes cdt ->
+ List<CahierDeTextes> cahiersATraiter = cahiers.findAll {CahierDeTextes cdt ->
cdt.getType() == CahierDeTextesType.CAHIER_PRIVE_NON_VISE
}
/**
* Attache un cahier privé à un établissement et à une année scolaire
* Attention, ne vérifie pas le type de cahier
- * @param cahiers
- * @param etablissement
- * @param anneeScolaire
- * @return
* @author bahj
*/
private List<CahierDeTextes> attacheCahierPrives(List<CahierDeTextes> cahiers,
/**
* Méthode recherchant le cahier de textes pour un enseignant donné et un
* service donné
- * @param enseignant l'enseignant
- * @param service le service
* @return le cahier de textes si il existe
*/
CahierDeTextes findCahierDeTextesByEnseignantAndService(Autorite enseignant,
* Méthode recherchant le cahier de textes pour un enseignant donné et un
* service ayant la même matière et la même structure d'ens. que le service
* passé en paramètre
- * @param enseignant l'enseignant
- * @param service le service
* @return le cahier de textes si il existe
*/
CahierDeTextes findCahierDeTextesByEnseignantAndServiceSansModalite(Autorite enseignant,
/**
* Méthode retournant le nom à affecter à un nouveau cahier de textes de
* service
- * @param service le service
* @return le nom généré
*
*/
/**
* Teste si un cahier de textes et un cahier de service d'une classe
- * @param cahierDeTextes
- * @return
* @author bahj
*/
boolean isCdtServiceDeClasse(CahierDeTextes cahierDeTextes) {
/**
* Teste si l'utilisateur identifié par sa session de sécurité possède
* l'autorisation de créer un cahier de textes privé
- * @param securiteSession
* @throws AutorisationException si l'utilisateur n'est pas autorisé à créer
* un cahier privé
*/
/**
* Teste si l'utilisateur identifié par sa session de sécurité possède
* l'autorisation de créer un cahier de textes de service
- * @param securiteSession
* @throws AutorisationException si l'utilisateur n'est pas autorisé à créer
* un cahier privé
*/
/**
* Charge cahiers par leur ids
- * @param ids
- * @return
* @author msan
*/
List<CahierDeTextes> internalFindAllCahiers(List<Long> ids) {
/**
* Retourne toutes les activités d'un cahier de textes
- * @param cahierDeTextes
* @param inclureActivitesNonPubliees si true, les activités non publiées seront incluses dans
* la structure (false par défaut)
- * @return une liste d'activité
* @author jtra
*/
List<Activite> findAllActiviteByCahierDeTextes(CahierDeTextes cahierDeTextes,
/**
* Retourne tous les chapitres d'un cahier de textes
- * @param cahierDeTextes
- * @return une liste de chapitre
*/
List<Chapitre> findAllChapitreByCahierDeTextes(CahierDeTextes cahierDeTextes) {
List<Chapitre> chapitres = Chapitre.createCriteria().listDistinct {
String codeEtablissement = cahierInfo.etablissementInfo?.codeEtablissement
Etablissement etablissement = null
if (codeEtablissement){
- etablissement = Etablissement.findByUai(codeEtablissement)
+ etablissement = Etablissement.findByUai(codeEtablissement, [cache: true])
}
if (!etablissement){
throw new CahierDeTextesInvalideException("Le cahier de classe " +
}
// Récupère toutes les activités publiées du cahier
- List<Activite> activites =
- cahierDeTextesService.findAllActiviteByCahierDeTextes(cdt, false)
+ List<Activite> activites = cdt.activites.findAll {it.estPubliee}.toList()
// Récupères tous les chapitres du cahiers
- List<Chapitre> chapitres =
- cahierDeTextesService.findAllChapitreByCahierDeTextes(cdt)
+ List<Chapitre> chapitres = cdt.chapitres.toList()
CahierDeTextesStructureInfo cdtStructureInfo =
new CahierDeTextesStructureInfo(
}
// Récupère toutes les activités publiées du cahier
- List<Activite> activites =
- cahierDeTextesService.findAllActiviteByCahierDeTextes(cdt, false)
+ List<Activite> activites = cdt.activites.findAll {it.estPubliee}.toList()
// Récupères tous les chapitres du cahiers
- List<Chapitre> chapitres =
- cahierDeTextesService.findAllChapitreByCahierDeTextes(cdt)
+ List<Chapitre> chapitres = cdt.chapitres.toList()
CahierDeTextesStructureInfo cdtStructureInfo =
new CahierDeTextesStructureInfo(
return []
}
- return Etablissement.findAllByEtablissementRattachement(citeScolaire)
+ return Etablissement.findAllByEtablissementRattachement(citeScolaire, [cache: true])
}
/**
package org.lilie.services.eliot.scolarite.etablissement
import org.lilie.services.eliot.scolarite.Etablissement
-import org.lilie.services.eliot.scolarite.StructureEnseignement
import org.lilie.services.eliot.annuaire.FonctionEnum
import org.lilie.services.eliot.annuaire.PersonneProprietesScolarite
import org.lilie.services.eliot.scolarite.AnneeScolaire
* @author jtra , othe
*/
Etablissement findEtablissementByIdExterne(String idExterne) throws EtablissementException {
- Etablissement etablissement = Etablissement.findByIdExterne(idExterne)
+ Etablissement etablissement = Etablissement.findByIdExterne(idExterne, [cache: true])
if (!etablissement) {
throw new EtablissementException(
* @author jtra , othe
*/
public Etablissement findEtablissementByUai(String uai, Boolean failOnError = true) throws EtablissementException {
- Etablissement etablissement = Etablissement.findByUai(uai.toUpperCase())
+ Etablissement etablissement = Etablissement.findByUai(uai.toUpperCase(), [cache: true])
if (!etablissement) {
if (failOnError) {
/**
* Retourne une liste d'établissements où la personne est directeur
- * @param personne
* @return liste d'établissements où la personne est directeur
*/
public List<Etablissement> findAllEtablissementsForPersonneDIR(Personne personne,
Autorite.withSession {Session session ->
FlushMode currentFlushMode = session.getFlushMode()
session.setFlushMode(newflushMode)
- action(session)
+ def result = action(session)
session.setFlushMode(currentFlushMode)
+ return result
}
}
}
// Traitement du cas particulier du correspondant de déploiement
if (typeUtilisateur == TypeUtilisateur.CORRESPONDANT_DEPLOIEMENT) {
return Etablissement.findByIdExterne(
- etablissementRattachementIdExterneCorrespondantDeploiement
+ etablissementRattachementIdExterneCorrespondantDeploiement,
+ [cache: true]
)
}
if (typeUtilisateur == TypeUtilisateur.CORRESPONDANT_DEPLOIEMENT) {
return [
Etablissement.findByIdExterne(
- etablissementRattachementIdExterneCorrespondantDeploiement
+ etablissementRattachementIdExterneCorrespondantDeploiement,
+ [cache: true]
)
]
}
// Traitement du cas particulier du correspondant de déploiement
if (fonctionEtablissement.fonctionEnum == FonctionEnum.CORRESPONDANT_DEPLOIEMENT) {
return Etablissement.findByIdExterne(
- etablissementRattachementIdExterneCorrespondantDeploiement
+ etablissementRattachementIdExterneCorrespondantDeploiement,
+ [cache: true]
)
}
private List<AnnuaireConsultationInfo> chrecheInfoParAutresCriteres(Map model, Map params) {
List<AnnuaireConsultationInfo> listeInfos = []
- Etablissement etab = params.etab ? Etablissement.findById(params.etab) : null
- StructureEnseignement structure = params.structure ? StructureEnseignement.findById(params.structure) : null
- Fonction fct = params.fct ? Fonction.findById(params.fct) : null
+ Etablissement etab = params.etab ? Etablissement.get(params.etab) : null
+ StructureEnseignement structure = params.structure ? StructureEnseignement.get(params.structure) : null
+ Fonction fct = params.fct ? Fonction.get(params.fct) : null
String codeAnnee = params.annee.toString()
boolean actif = params.actif ? true : false
boolean responsable = params.responsable ? true : false
Etablissement filtreEtab = null
if (etab) {
- filtreEtab = Etablissement.findById(etab.toString().toLong())
+ filtreEtab = Etablissement.get(etab.toString().toLong())
}
ajouterNbComptesUtilisateursTotal(model, filtreEtab)
ajouterNbComptesUtilisateursActif(model, filtreEtab)
private static final WEBSERVICE_DISPONIBLE = 'webserviceDisponible'
private static final WS_EQUATION = 'wsequation'
- /**
- * Try/Catch méthode. Execute le code passé dans la closure en captant les
- * Exceptions.
- * @param closure Closure avec le code à executer qui doit retourner un Map
- * @return Map
- *
- * @author bper
- * @author ywan
- */
-
MenuService menuService
TextesCahierDeTextesService textesCahierDeTextesService
MenuAideTextesService menuAideTextesService
EliotUrlService eliotUrlService
CahierDeTextesMarshallerService cahierDeTextesMarshallerService
+
protected Map infoWebService(Map model) {
Map resultat = model
}
+
+ /**
+ * Try/Catch méthode. Execute le code passé dans la closure en captant les
+ * Exceptions.
+ * @param closure Closure avec le code à exécuter qui doit retourner un Map
+ * @return Map
+ *
+ * @author bper
+ * @author ywan
+ */
protected Map tryCatch(def closure) {
return wrapResultat {
Boolean success = true
/**
* Cette fonction permet de récuperer une Map utile pour l'affichage d'une
* activité (au format JSON)
- * @param chapitreActiviteParCahier
- * @param sdf
- * @param utilisateur
- * @param activite
* @param droitCdt = droit de modifier le contenu du cahier de texte parent
* @return Map Json utilse pour l'affichage de l'activité
*/
}
/**
- * Récupère la balise discution
- * @param chapitreActiviteParCahier
- * @param activite
- * @return
+ * Récupère la balise discussion
*/
private String baliseDiscussion(Activite activite) {
/**
* Traduction d'un message fournie par l'application
- * @param code
- * @return
*/
protected String traduis(String msgCode) {
return message(code: msgCode)
}
/**
- * Dans eliot-textes on est dans un environement multi-etablissement.
+ * Dans eliot-textes on est dans un environnement multi-établissement.
* Quand on veut trouver l'etablissement d'un cahier de textes on prend
* - etablissement de service - pour les cahiers de service
* - etablissement du cahier - pour les cahiers privés visés
* - etablissement du rattachement d'utilisateur - pour les cahiers prives
*
- * @param cahierDeTextes
- * @return
*/
protected Etablissement getEtablissementDuCDT(CahierDeTextes cahierDeTextes) {
return cahierDeTextes.findEtablissement() ?: etablissementCourant()
}
}
-/**
- * Prépare des données du modèle pour le visa
- * @param peutAfficherVisas
- * @param cdt
- */
+ /**
+ * Prépare des données du modèle pour le visa
+ */
protected Map prepareVisas(boolean peutAfficherVisas, CahierDeTextes cdt) {
Map resultat = cahierDeTextesMarshallerService.marshallVisa(
}
}
-/**
- * Indique si on peut modifier le contenu du cahier de textes
- * auquel appartient uneActivite
- * @param mapActivite ['activite':uneActivite]
- * @return
- */
+ /**
+ * Indique si on peut modifier le contenu du cahier de textes
+ * auquel appartient uneActivite
+ * @param mapActivite ['activite':uneActivite]
+ */
private peutModifierContenuCdt(Map mapActivite) {
Boolean peutModifierContenuCdt = false
if (mapActivite) {
return resultat
}
-
}
* <http://www.cecill.info/licences.fr.html>.
*/
-
-
package org.lilie.services.eliot.domain
import org.lilie.services.eliot.DateConstantes
import org.lilie.services.eliot.textes.CahierDeTextes
import org.lilie.services.eliot.AbstractTextesController
import grails.converters.JSON
-import org.lilie.services.eliot.EliotConstantes
import org.lilie.services.eliot.textes.Visa
import org.lilie.services.eliot.textes.visa.VisaXmlService
import org.lilie.services.eliot.textes.visa.VisaInfo
import org.lilie.services.eliot.scolarite.Personne
import java.text.SimpleDateFormat
-import org.lilie.services.eliot.applications.textes.CahierDeTextesService
-import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.scolarite.personne.LocalPersonneService
/**
VisaService visaService
VisaXmlService visaXmlService
- CahierDeTextesService cahierDeTextesService
LocalPersonneService localPersonneService
def getInfoDernierVisa = {
render resulat as JSON
}
+
def creeVisa = {
Map result = tryCatch {
-
- List<CahierDeTextes> cahiers = internalChargeCahiers(params.cdtIds)
- Etablissement etablissement = Etablissement.findById(
- params.etablissementId.toLong()
- )
-
- // Get commentaire
- String commentaire = params.commentaire
-
// crée visa + verifie les droits
- List<Visa> visas = visaService.creeVisas(securiteSession,
- cahiers,
- etablissement,
- commentaire
+ visaService.creeVisasByIds(
+ securiteSession,
+ getCahierIds(params.cdtIds),
+ params.etablissementId.toLong(),
+ params.commentaire
)
-
- return [
- (EliotConstantes.JSON_SUCCESS): true,
-// visa: visaToMap(visa),
- visas: visas.collect { visaToMap(it)}
- ]
}
render result as JSON
}
+
/**
- * Charge les CDTs definis dans les params
- * @param cdtIdsStr
- * @return
+ * Charge les CDTs définis dans les params
*/
- private List<CahierDeTextes> internalChargeCahiers(String cdtIdsStr) {
+ private List<Long> getCahierIds(String cdtIdsStr) {
if (cdtIdsStr == null) {
throw new IllegalArgumentException("cdtIds n'est pas spécifié")
List<Long> ids = strIds.collect { Long.parseLong(it) }
- List<CahierDeTextes> cahiers = cahierDeTextesService.
- internalFindAllCahiers(ids)
-
- if (ids.size() != cahiers.size()) {
- throw new IllegalArgumentException(
- "cdtIds contient les IDs qui referencent les cahiers inexistants")
- }
-
- if (cahiers.isEmpty()) {
- throw new IllegalArgumentException(
- "Aucun cahier de textes selectione"
- )
- }
-
- return cahiers
+ return ids
}
+
@SuppressWarnings('CatchException') // jtra : il faut retourner un message d'erreur à l'utilisateur en cas d'erreur inconnue
def afficheVisa = {
// Get Visa
* Construis un apercu de plusieurs cahiers de textes
*/
def apercevoirPlusieursCdts = {
+ List<Long> cdtIds = params.cdtIds.split(',')*.toLong()
- List<CahierDeTextes> cdts = []
-
- List<Integer> cdtIds = params.cdtIds.split(',').collect {it as int}
-
- cdtIds.each() {
- cdts << CahierDeTextes.get(it)
+ if (cdtIds.isEmpty()) {
+ throw new IllegalArgumentException("Aucun cahier à afficher")
}
- List infosCahiers = []
-
- cdts.each() {
-
- cahierDeTextesDroitsService.verifierAccesConsultation(
- getSecuriteSession(),
- it
- )
-
- infosCahiers << this.cahierDeTextesMarshallerService.marshallApercu(getSecuriteSession(), it)
- }
+ List infosCahiers = cahierDeTextesMarshallerService.apercevoirPlusieursCdts(securiteSession, cdtIds)
Map model = [
infosCahiers: infosCahiers
/**
* Gestion du breadCrumbs
- * @return
*/
protected List getBreadCrumbsInfo() {
List breadCrumbsInfo = super.getBreadCrumbsInfo()
nouvelChapitre.ordre = oldChapitre.ordre
mapping[oldChapitre] = nouvelChapitre
}
-
-/**
- * Marque le CDT comme visé
- * @param cahierDeTextes
- * @return
- */
- public CahierDeTextes internalMarqueVise(CahierDeTextes cahierDeTextes) {
- if (!cahierDeTextes.estVise) {
- cahierDeTextes.estVise = true
- save(cahierDeTextes)
- }
- return cahierDeTextes
- }
}
\ No newline at end of file
List<CahierDeTextesContenuElementInfo> getChapitresEtActivitesListePlate(CahierDeTextes cdt,
SecuriteSession securiteSession,
Boolean seulementActiviesVisibles = false) {
- verificationAutorisationConsultation(cdt, securiteSession)
- Collection<Chapitre> chapitres =
- Chapitre.findAllByCahierDeTextesAndChapitreIsNull(cdt)
- Collection<Activite> activites =
- Activite.findAllByCahierDeTextesAndChapitreIsNull(cdt)
+ // Les activités est les chapitre du 1er niveau
+ Collection<Chapitre> chapitres = cdt.chapitres.findAll {it.chapitre == null}
+ Collection<Activite> activites = cdt.activites.findAll {it.chapitre == null}
if (seulementActiviesVisibles) {
Autorite userLoggue = (Autorite) securiteSession.getDefaultAutorite()
activites = activites.findAll { Activite activite ->
// Si l'acteur est l'auteur -> totues les activités sont visibles
// Sinon seulement les activités publiées sont visibles
- (activite.auteur.id == userLoggue.id || activite.estPubliee)
+ (activite.auteurId == userLoggue.id || activite.estPubliee)
}
}
Collection chapitresEtActivites = (chapitres + activites).sort { it.ordre }
import org.springframework.context.MessageSource
import org.springframework.beans.factory.BeanCreationException
import org.lilie.services.eliot.DateConstantes
+import org.springframework.transaction.annotation.Transactional
+import org.hibernate.FetchMode
/**
* Service de marshalling pour les cahiers de textes
*/
class CahierDeTextesMarshallerService {
- static transactional = false
+ static transactional = true
TextesChapitreService textesChapitreService
VisaService visaService
Locale.FRANCE
)
+ @Transactional(readOnly = true)
+ List<Map> apercevoirPlusieursCdts(SecuriteSession securiteSession, List<Long> cdtIds) {
+
+ List<CahierDeTextes> cdts = CahierDeTextes.withCriteria {
+ 'in'('id', cdtIds)
+ fetchMode('item', FetchMode.JOIN)
+ fetchMode('service', FetchMode.JOIN)
+ fetchMode('service.matiere', FetchMode.JOIN)
+ fetchMode('service.structureEnseignement', FetchMode.JOIN)
+ }
+
+ List results = cdts.collect {
+ cahierDeTextesDroitsService.verifierAccesConsultation(securiteSession, it)
+ return marshallApercu(securiteSession, it)
+ }
+
+ return results
+ }
+
/**
* Prepare les donnes de model pour l'apercu de cahier
- * @param cdt
- * @return
*/
+ @Transactional(readOnly = true)
public Map marshallApercu(SecuriteSession securiteSession, CahierDeTextes cdt) {
Collection chapitresEtActivites =
boolean estProprietaire = cdt.getProprietaire().idExterne ==
securiteSession.getDefaultAutorite().idExterne
- Personne prof = Personne.findByAutorite(cdt.getProprietaire())
+ Personne prof = cdt.getProprietairePersonne()
return [
cdtInfo: new CahierDeTextesInfo(
}
private static final String LISTE_VISA = 'listeVisa'
+
/**
* Prépare des données du modèle pour le visa
- * @param peutAfficherVisas
- * @param cdt
*/
+ @Transactional(readOnly = true)
public Map marshallVisa(SecuriteSession securiteSession, boolean peutAfficherVisas, CahierDeTextes cdt) {
Map resultat = [
/**
* Marshalling des droits de lecture/écriture du cahier de textes
- * @param cahierDeTextes
- * @return
*/
+ @Transactional(readOnly = true)
public Map marsallAccesDroitEtPermissions(SecuriteSession securiteSession, CahierDeTextes cahierDeTextes) {
AccessManager accessManager = new AccessManager(
}
- /**
- *
- * @param securiteSession
- * @param cahierDeTextes
- * @return
- */
+ @Transactional(readOnly = true)
public Map marshallCahierDeTextesFusionnes(SecuriteSession securiteSession, CahierDeTextes cahierDeTextes) {
List nomAffichageCahiersIncorpores = []
/**
* Permet de sérialiser les informations de fusion d'un cahier de textes
- * @param securiteSession
- * @param cdt
- * @return
*/
+ @Transactional(readOnly = true)
public Map marshallFusionCahierInfo(SecuriteSession securiteSession, CahierDeTextes cdt) {
List<CahierFusionInfo> cahiersCompatibleAvecFusion =
/**
* Marshalling de liste d'informations concernant un cahier de textes
- * @param cdtsInfo
- * @param locale
- * @return
*/
+ @Transactional(readOnly = true)
public Map marshall(List<CahierDeTextesRechercheInfo> cdtsInfo,
Integer nombreTotalCdts,
Locale locale = null) {
private static final CAHIERS = 'cahiers'
- /**
- *
- * @param securiteSession
- * @param acteurAllCahierPersonnalise
- * @param date
- * @return
- */
+
+ @Transactional(readOnly = true)
public List mashallListeCdtParEmploiDuTemps(SecuriteSession securiteSession,
List<RelCahierEvenement> cdtsEvntsInfo) {
List resultats = []
private static final String PARENTHESE_F = ')'
private static final String ESPACE = ' '
private static final String TIRET = ' - '
+
/**
* Permet de déterminer le nom d'affichage du cahiers de textes combiné à un évènement d'emploi du temps
- * @param securiteSession
- * @param cdtEvntInfo
- * @param cahier
- * @return
*/
+ @Transactional(readOnly = true)
private String nomAffichage(SecuriteSession securiteSession, RelCahierEvenement cdtEvntInfo, CahierDeTextes cahier) {
String creneauDebut = df.format(cdtEvntInfo.evenement.dateHeureDebut)
nomAffichage
}
+ @Transactional(readOnly = true)
public Map marshallInfoProprietaire(CahierDeTextes cahierDeTextes, Autorite proprietaire, Boolean isProprietaire) {
String nomProprietaire
String cdtInfoSuppression = ""
/**
* Gestion i18n
- * @param code
- * @param args
- * @param locale
- * @return
*/
private String message(String code, Object[] args = [], Locale locale = null) {
def ctx = ApplicationHolder.getApplication().getMainContext()
* <http://www.cecill.info/licences.fr.html>.
*/
-
-
package org.lilie.services.eliot.textes.visa
import org.lilie.services.eliot.annuaire.SecuriteSession
-import org.lilie.services.eliot.exception.SauvegardeEchoueException
import org.lilie.services.eliot.scolarite.Personne
import org.lilie.services.eliot.securite.AutorisationException
import org.lilie.services.eliot.annuaire.FonctionEnum
import org.springframework.transaction.interceptor.TransactionAspectSupport
-import org.lilie.services.eliot.securite.impl.Autorite
import org.lilie.services.eliot.textes.TextesStockageFichierService
import org.lilie.services.eliot.textes.TextesCahierDeTextesService
import org.lilie.services.eliot.textes.CahierDeTextes
import org.lilie.services.eliot.scolarite.etablissement.CiteScolaireService
import org.lilie.services.eliot.scolarite.Etablissement
import org.lilie.services.eliot.securite.Autorite
+import org.lilie.services.eliot.GormUtils
+import org.hibernate.FlushMode
+import org.hibernate.Session
+import org.hibernate.FetchMode
+import org.hibernate.Criteria
+import grails.orm.HibernateCriteriaBuilder
/**
* Service de gestion des visas de cahiers de textes
/**
* Droit de créer un visa d'un cahier de textes
- * @param securiteSession
- * @param cdt
*/
void verifieAutorisationCreerVisa(SecuriteSession securiteSession, CahierDeTextes cdt)
throws AutorisationException, IllegalStateException {
/**
* Droit de visualiser l'information sur le dernière visa d'un cahier de textes
- * @param securiteSession
- * @param cdt
*/
void verifieAutorisationConsulterInfoVisa(SecuriteSession securiteSession,
CahierDeTextes cdt)
throws AutorisationException, IllegalStateException {
if (!CAHIER_TYPE_AVEC_VISAS.contains(cdt.getType())) {
throw new IllegalStateException(
- "Cahier de texte qui n'est pas cahier de textes de service"+
- ", cahier privé visé ou cahier archivé ne peut contenir visas"
+ "Cahier de texte qui n'est pas cahier de textes de service, " +
+ "cahier privé visé ou cahier archivé ne peut contenir visas"
)
}
Long etablissementId = null
if (cdt.getType() == CahierDeTextesType.CAHIER_PRIVE_VISE) {
- etablissementId = cdt.etablissement.id
+ etablissementId = cdt.etablissementId
} else {
// cahier de service
- etablissementId = cdt.service.structureEnseignement.etablissement.id
+ etablissementId = cdt.service.structureEnseignement.etablissementId
}
// directeur
/**
* Droit de visualiser les visas d'un cahier de textes
- * @param securiteSession
- * @param cdt
*/
void verifieAutorisationConsulterVisas(SecuriteSession securiteSession,
CahierDeTextes cdt) {
"choisi [$cdt.id]"
)
}
-
}
/**
* Droit de visualiser un visa
- * @param securiteSession
- * @param visa
*/
void verifieAutorisationConsulterVisa(SecuriteSession securiteSession,
Visa visa) {
/**
* True si l'utilisateur connecté peut afficher les visas du cahier de texte
- * @param securiteSession
- * @param cdt
- * @return
*/
Boolean peutAfficherVisas(SecuriteSession securiteSession,
CahierDeTextes cdt) {
)
}
+ List<Visa> creeVisasByIds(SecuriteSession securiteSession,
+ List<Long> cahierIds,
+ Long etablissementCdtPriveId,
+ String commentaire = null) throws IOException {
+
+ (List<Visa>) GormUtils.withFlushModeAndSession(FlushMode.MANUAL) {Session session ->
+
+ Etablissement etablissementCdtPrive = Etablissement.get(etablissementCdtPriveId)
+
+ List<CahierDeTextes> cahiers = CahierDeTextes.createCriteria().list{
+ 'in'('id', cahierIds)
+ fetchMode('etablissement', FetchMode.JOIN)
+ fetchMode('service', FetchMode.JOIN)
+ fetchMode('service.matiere', FetchMode.JOIN)
+ fetchMode('service.structureEnseignement', FetchMode.JOIN)
+ }
+
+ List<Visa> visas = creeVisas(securiteSession, cahiers, etablissementCdtPrive, commentaire)
+ session.flush()
+
+ return visas
+ }
+ }
+
/**
* Crée visas de cahiers de textes
* @param cahiers cahiers de textes visés
etablissementCdtPrive
)
- return cahiers.collect {
- creeVisa(securiteSession, it, commentaire)
- }
+ List<Visa> visas = cahiers.collect {creeVisa(securiteSession, it, commentaire)}
+
+ return visas
}
/**
Personne personne = (Personne) securiteSession.personne
-
Visa visa = null
try {
-
// Crée le visa en base
visa = new Visa(
cahierVise: cahierDeTextes,
etablissementUai: cahierDeTextes.findEtablissement().uai
)
- save(visa)
- textesCahierDeTextesService.internalMarqueVise(cahierDeTextes)
+ visa.save(failOnError: true)
+
+ if (!cahierDeTextes.estVise) {
+ cahierDeTextes.estVise = true
+ cahierDeTextes.save(failOnError: true)
+ }
// Crée le fichier correspondant à la copie de CdT du visa
- File fichierCopieCdt = textesStockageFichierService.creeFichierCahierVise(
- visa
- )
+ File fichierCopieCdt = textesStockageFichierService.creeFichierCahierVise(visa)
// note msan: IOException est levée si le writer n'arrive pas à écrire dans le fichier
fichierCopieCdt.withWriter('UTF-8') { Writer writer ->
}
/**
- * True si cahier de textes a été visé
- * Note: cette méthode ne vérifie pas le droit de consulter les visas!
- * @param securiteSession
- * @param cahierDeTextes
- * @return
- */
- Boolean hasVisas(SecuriteSession securiteSession,
- CahierDeTextes cahierDeTextes) {
-
- return Visa.createCriteria().get {
- eq('cahierVise', cahierDeTextes)
- projections {
- 'count'('id')
- }
- } != 0
- }
-
- /**
- * @param visa
* @return un pointeur sur le fichier XML du visa
*/
File getVisaFichierXml(Visa visa) {
return textesStockageFichierService.getFichierVisa(visa)
}
- /**
- * Enregistre une visa.
- * @param visa
- * @return visa
- */
- Visa save(Visa visa) {
- if (visa) {
- if (!visa.save(flush: true) || visa.hasErrors()) {
- throw new SauvegardeEchoueException(visa)
- }
- }
- return visa
- }
-
/**
* Dernière visa pour un CDT donné
- * @param securiteSession
- * @param cahierDeTextes
- * @return
*/
Visa findDerniereVisaByCahierDeTextes(SecuriteSession securiteSession,
CahierDeTextes cahierDeTextes)
* <http://www.cecill.info/licences.fr.html>.
*/
-
-
-
-
package org.lilie.services.eliot.textes.visa
import java.text.SimpleDateFormat
*/
void buildXmlVisa(MarkupBuilder builder, Visa visa) {
builder."visa"(xmlns: "http://lilie.org/services/eliot/interoperabilite/textes/0.2") {
- "cahierVise"(id: visa.cahierVise.id)
+ "cahierVise"(id: visa.cahierViseId)
"date"(XML_DATE_FORMAT.format(visa.dateVisee))
- "auteur"(id: visa.auteur.id)
+ "auteur"(id: visa.auteurId)
"commentaire"(visa.commentaire)
textesXml02Service.buildXmlCahierDeTextes(