--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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>.
+ -->
+
+<databaseChangeLog
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
+
+ <changeSet id="1" author="bper">
+ <comment>
+ Changement mode de calcul de l'épreuve EPS pour la série "Professionnelle Agricole"
+ </comment>
+
+ <sql>
+ UPDATE entnotes.brevet_epreuve SET mode_calcul_note = 'PREMIERE_TROUVEE'
+ WHERE id = (
+ SELECT e.id FROM entnotes.brevet_epreuve AS e
+ INNER JOIN entnotes.brevet_serie AS s ON e.serie_id = s.id
+ WHERE upper(s.libelle_court) LIKE 'PROFESSIONNELLE%AGRICOLE'
+ AND e.code = 106
+ )
+ </sql>
+
+ </changeSet>
+
+</databaseChangeLog>
<include file="changelogs/scolarite/2013-03-26-0022466.xml"/>
<include file="changelogs/scolarite/2013-03-27-0026499.xml"/>
<include file="changelogs/scolarite/2013-03-27-0026775.xml"/>
+ <include file="changelogs/scolarite/2013-03-27-0026455.xml"/>
</databaseChangeLog>
securiteSession,
etablissementCourant()
)
- classes.sort {a, b -> cc.compare(a.code, b.code)}
+ classes.sort {a, b -> cc.compare(a.code, b.code)}.unique()
- List<Service> serviceSports = notesServiceService.findAllServiceMatiereSportByClasses(
+ Map<BrevetSerie, List<Service>> serviceSportsParSerie =
+ notesServiceService.findAllServiceSportGroupeParSerie(
securiteSession,
classes
)
modele.classes = classes.collect {StructureEnseignement classe ->
- List servicesEps = serviceSports.findAll {it.structureEnseignement.id == classe.id}.collect {
- [
- id: it.id,
- libelle: getLibelleServiceSport(it)
- ]
+ Map mapSerieIdServiceSports = [:]
+
+ serviceSportsParSerie.each {BrevetSerie serie, List<Service> services ->
+ mapSerieIdServiceSports.put(
+ serie.id,
+ services.findAll {it.structureEnseignement.id == classe.id}.collect {
+ [
+ id: it.id,
+ libelle: getLibelleServiceSport(it)
+ ]
+ }
+ )
}
Periode annee = classe.getPeriodeAnnee()
libelle: classe.code,
dateDebut: annee?.dateDebut,
dateFin: annee?.dateFin,
- servicesEps: servicesEps
+ mapSerieIdServiceEps: mapSerieIdServiceSports
]
}
import org.lilie.services.eliot.annuaire.FonctionEnum
import org.lilie.services.eliot.brevet.BrevetRelEpreuveMatiere
import org.lilie.services.eliot.brevet.BrevetModeCalculNote
+import org.lilie.services.eliot.brevet.BrevetSerie
class NotesServiceService extends ServiceService {
* de brevet de type SPORT pour les classes données.
* @author bper
*/
- List<Service> findAllServiceMatiereSportByClasses(SecuriteSession securiteSession,
- List<StructureEnseignement> classes) {
+ Map<BrevetSerie, List<Service>> findAllServiceSportGroupeParSerie(SecuriteSession securiteSession,
+ List<StructureEnseignement> classes) {
if (classes.isEmpty()) {
return []
(List) (NotesFonction.DIRECTION_ASSIMILE)
)
- List<Matiere> matiereSports = (List<Matiere>) BrevetRelEpreuveMatiere.createCriteria().listDistinct {
+ List<BrevetRelEpreuveMatiere> rels = BrevetRelEpreuveMatiere.createCriteria().list {
matiere {
eq('etablissement', etablissement)
}
epreuve {
eq('modeCalculNote', BrevetModeCalculNote.MOYENNE_SPORT)
}
-
- projections {
- property('matiere')
- }
}
- if (matiereSports.isEmpty()) {
- return []
+ if (rels.isEmpty()) {
+ return [:]
}
- return Service.createCriteria().listDistinct {
+ List<Service> services = Service.createCriteria().listDistinct {
'in'('structureEnseignement', classes)
- 'in'('matiere', matiereSports)
+ 'in'('matiere', rels*.matiere)
eq('servicePrincipal', true)
createAlias("relPeriodeServices", "relPS")
eq('relPS.evaluable', true)
}
+
+ Map<BrevetSerie, List<Service>> map = [:]
+
+ rels.groupBy {it.epreuve.serie}.each {BrevetSerie serie, List<BrevetRelEpreuveMatiere> relsParSerie ->
+ map.put(serie, (List) services.findAll {it.matiere.id in relsParSerie*.matiere*.id})
+ }
+
+ return map
}
/**
{name: 'libelle'},
{name: 'dateDebut', type: 'date', dateFormat: 'c'},
{name: 'dateFin', type: 'date', dateFormat: 'c'},
- {name: 'servicesEps'}
+ {name: 'mapSerieIdServiceEps'}
]
})
});
var classeId = record.get('id');
var classe = classeStore.getById(classeId);
- //if (classe) {}
- var servicesEps = classe.get('servicesEps');
-
- for (var i = 0; i < servicesEps.length; i++) {
- if (servicesEps[i].id == value) {
- libelle = servicesEps[i].libelle;
+ if (classe) {
+ var mapSerieIdServiceEps = classe.get('mapSerieIdServiceEps');
+ for (var serieId in mapSerieIdServiceEps) {
+ var servicesEps = mapSerieIdServiceEps[serieId];
+ for (var i = 0; i < servicesEps.length; i++) {
+ if (servicesEps[i].id === value) {
+ libelle = servicesEps[i].libelle;
+ }
+ }
}
}
}
disabled: true,
listeners: {
select: function(combo, classe) {
- this.initDatePublicationEditor(classe, true);
this.initServiceEpsEditor(classe);
+ this.initDatePublicationEditor(classe, true);
},
scope: this
}
allowBlank: false,
mode:'local',
editable: false,
- disabled: true
+ disabled: true,
+ listeners: {
+ select: function(combo, record) {
+ var classe = this.config.classeModel.getValue();
+ var classeId = classe.get('id') ? classe.get('id') : this.classeEditor.getValue();
+ var classeStoreRecord = this.config.classeStore.getById(classeId);
+ this.initServiceEpsEditor(classeStoreRecord, record.get('id'));
+ },
+ scope: this
+ }
});
return this.serieEditor;
},
return this.serviceEpsEditor;
},
- initServiceEpsEditor: function(classeStoreRecord) {
- if (classeStoreRecord) {
- this.serviceEpsEditor.clearValue();
- var store = this.serviceEpsEditor.store;
- store.loadData(classeStoreRecord.get('servicesEps'));
+ initServiceEpsEditor: function(classeStoreRecord, serieId) {
+ var servicesEps = {};
- var selected = this.serviceEpsEditor.getValue();
- if (!selected && store.getTotalCount() > 0) {
- this.serviceEpsEditor.setValue(store.getAt(0).get('id'));
+ if (classeStoreRecord != undefined) {
+ if (serieId == undefined) {
+ var classeId = classeStoreRecord.get('id');
+ var classeBrevetRecord = this.config.classeBrevetStore.getById(classeId);
+ serieId = classeBrevetRecord ? classeBrevetRecord.get('serie') : this.serieEditor.getValue();
}
+
+ servicesEps = classeStoreRecord.get('mapSerieIdServiceEps')[serieId];
+ servicesEps = servicesEps ? servicesEps : {};
+ }
+
+ this.serviceEpsEditor.clearValue();
+ var store = this.serviceEpsEditor.store;
+ store.loadData(servicesEps);
+
+ var selected = this.serviceEpsEditor.getValue();
+ if (!selected && store.getTotalCount() > 0) {
+ this.serviceEpsEditor.setValue(store.getAt(0).get('id'));
}
},
this.serieEditor.enable();
}
- var classeStoreRecord = this.config.classeStore.getById(classe.get('id'))
+ var classeStoreRecord = this.config.classeStore.getById(classe.get('id'));
this.initServiceEpsEditor(classeStoreRecord);
this.initDatePublicationEditor(classeStoreRecord, false);