--- /dev/null
+/*****************************************************************************
+ * Copyright Igor Barma, Eric Brun, Alexandre Desoubeaux, Christian Martel,
+ * (2 décembre 2008)
+ *
+ * Ce logiciel est un programme informatique servant à l'évaluation des
+ * compétences.
+ *
+ * Ce logiciel est régi par la licence CeCILL soumise au droit français et
+ * respectant les principes de diffusion des logiciels libres. Vous pouvez
+ * utiliser, modifier et/ou redistribuer ce programme sous les conditions
+ * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
+ * sur le site "http://www.cecill.info".
+ *
+ * En contrepartie de l'accessibilité au code source et des droits de copie,
+ * de modification et de redistribution accordés par cette licence, il n'est
+ * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
+ * seule une responsabilité restreinte pèse sur l'auteur du programme, le
+ * titulaire des droits patrimoniaux et les concédants successifs.
+ *
+ * A cet égard l'attention de l'utilisateur est attirée sur les risques
+ * associés au chargement, à l'utilisation, à la modification et/ou au
+ * développement et à la reproduction du logiciel par l'utilisateur étant
+ * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
+ * manipuler et qui le réserve donc à des développeurs et des professionnels
+ * avertis possédant des connaissances informatiques approfondies. Les
+ * utilisateurs sont donc invités à charger et tester l'adéquation du
+ * logiciel à leurs besoins dans des conditions permettant d'assurer la
+ * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
+ * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
+ *
+ * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
+ * pris connaissance de la licence CeCILL, et que vous en avez accepté les
+ * termes.
+ *******************************************************************************/
+package com.pentila.evalcomp.client.evalFolder;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.gwtext.client.core.Function;
+import com.gwtext.client.util.DelayedTask;
+import com.pentila.evalcomp.client.ConnexionServer;
+import com.pentila.evalcomp.client.i18n.Messages;
+import com.pentila.evalcomp.client.utilities.Tools;
+import com.pentila.evalcomp.client.utilities.UserTools;
+import com.pentila.evalcomp.domain.EObject;
+import com.pentila.evalcomp.domain.instance.EvaluationSubjectInstance;
+import com.pentila.evalcomp.domain.transit.TEvaluationDefinition;
+import com.pentila.evalcomp.domain.transit.TListEObject;
+import com.pentila.evalcomp.domain.transit.TPlan;
+import com.pentila.evalcomp.domain.transit.TUser;
+import com.smartgwt.client.data.DataSource;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.types.TitleOrientation;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.CheckboxItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
+import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent;
+import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+import com.smartgwt.client.widgets.tree.TreeGrid;
+import com.smartgwt.client.widgets.tree.TreeGridField;
+import com.smartgwt.client.widgets.tree.TreeNode;
+import com.smartgwt.client.widgets.tree.events.DataArrivedEvent;
+import com.smartgwt.client.widgets.tree.events.DataArrivedHandler;
+
+
+/**
+ * The Class UserSelector.
+ */
+public class UserSelector extends VLayout {
+
+ /** The evaluations tree. */
+ private TreeGrid evaluationsTree;
+
+ /** The search text. */
+ private TextItem searchText;
+
+ /** The checkbox item. */
+ CheckboxItem checkboxItem;
+
+ /** The id ref. */
+ Long idRef;
+
+ /** The provider. */
+ private EvalRefFieldSet provider;
+
+ /** The lplans. */
+ TListEObject lplans;
+
+ /** The selected record. */
+ Record selectedRecord;
+
+ private CheckboxItem checkboxItem2;
+
+ /**
+ * Instantiates a new user selector.
+ *
+ * @param provider the provider
+ * @param idRef the id ref
+ */
+ public UserSelector(EvalRefFieldSet provider, Long idRef){
+ super();
+ this.provider = provider;
+ this.idRef = idRef;
+
+ initializeInterface();
+ }
+
+
+ /**
+ * Initialize interface.
+ */
+ public void initializeInterface(){
+
+
+ ToolStrip preferencesToolStrip = new ToolStrip();
+ //preferencesToolStrip.setPadding(5);
+ preferencesToolStrip.setWidth100();
+
+
+ this.evaluationsTree = new TreeGrid();
+ evaluationsTree.setWidth100();
+
+ this.evaluationsTree.setLoadDataOnDemand(false);
+ evaluationsTree.setAutoFetchData(true);
+
+ evaluationsTree.setShowConnectors(true);
+
+
+
+ final DynamicForm form = new DynamicForm();
+
+ form.setTitleOrientation(TitleOrientation.RIGHT);
+ form.setTitleWidth(50);
+
+ searchText = new TextItem();
+ searchText.setTitle("<nobr>" + Messages.getString("Rechercher_par_nom") + "</nobr>");
+
+
+ checkboxItem = new CheckboxItem();
+ checkboxItem.setTitle(Messages.getString("voir_tous_les_dossiers_du_candidat_sur_le_plan"));
+ checkboxItem.setColSpan(3);
+ checkboxItem.addChangedHandler(new ChangedHandler(){
+
+ public void onChanged(ChangedEvent event) {
+
+ updateSelection();
+
+ }
+
+ });
+
+
+ checkboxItem2 = new CheckboxItem();
+ checkboxItem2.setTitle(Messages.getString("voir_aussi_les_dossiers_de_campagnes_terminees"));
+ checkboxItem2.setColSpan(3);
+ checkboxItem2.addChangedHandler(new ChangedHandler(){
+
+ public void onChanged(ChangedEvent event) {
+
+ update();
+
+ }
+
+ });
+
+
+
+
+
+ final DelayedTask dt = new DelayedTask();
+
+ final Function doit = new Function(){
+ public void execute() {
+
+ update();
+
+ }
+
+ };
+
+ searchText.addKeyUpHandler(new KeyUpHandler(){
+
+ public void onKeyUp(KeyUpEvent event) {
+ dt.cancel();
+ dt.delay(1500, doit);
+
+ }
+
+ });
+
+ //form.setTitleOrientation(TitleOrientation.TOP);
+
+ form.setItems(searchText, checkboxItem2 , checkboxItem);
+
+ TreeGridField fplan = new TreeGridField("plan");
+ TreeGridField fed = new TreeGridField("ed");
+ TreeGridField fuser = new TreeGridField("user");
+ TreeGridField folder = new TreeGridField("folder");
+
+ evaluationsTree.setCanHover(true);
+
+ evaluationsTree.setHoverCustomizer(new HoverCustomizer(){
+
+ public String hoverHTML(Object value, ListGridRecord record,
+ int rowNum, int colNum) {
+
+ if (record.getAttribute("user") != null){
+
+ String htmlFolder = record.getAttributeAsString("htmlFolder");
+ return htmlFolder;
+ }
+
+ return "";
+
+ }
+
+ });
+
+ SectionStack sectionStack = new SectionStack();
+
+ evaluationsTree.setFields(fplan, fed, fuser, folder);
+
+ evaluationsTree.addDataArrivedHandler(new DataArrivedHandler() {
+ public void onDataArrived(DataArrivedEvent event) {
+ evaluationsTree.getData().openAll();
+
+
+ }
+ });
+
+
+
+ form.setZIndex(1);
+ //this.addMember(form);
+
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+
+ SectionStackSection section = new SectionStackSection(Messages.getString("parameters"));
+ section.setExpanded(false);
+ preferencesToolStrip.addMember(form);
+ section.addItem(preferencesToolStrip);
+
+ SectionStackSection section2 = new SectionStackSection();
+ section2.setExpanded(true);
+ section2.setShowHeader(false);
+ sectionStack.addSection(section);
+
+ section2.addItem(evaluationsTree);
+
+ sectionStack.addSection(section2);
+
+
+ evaluationsTree.setDataSource(createDataSource());
+
+ evaluationsTree.addRecordClickHandler(new RecordClickHandler(){
+
+ public void onRecordClick(RecordClickEvent event) {
+ selectedRecord = event.getRecord();
+ updateSelection();
+ }
+ });
+
+
+ this.addMember(sectionStack);
+
+
+
+ }
+
+
+
+ /**
+ * Update selection.
+ */
+ private void updateSelection(){
+
+ if (selectedRecord != null && selectedRecord.getAttribute("user") != null){
+
+ Set<Long> EDIds = new HashSet<Long>();
+ Set<Long> ESIIds = new HashSet<Long>();
+
+ TUser tu = (TUser) selectedRecord.getAttributeAsObject("userObject");
+
+ Long userId = tu.getId();
+ Long planId = selectedRecord.getAttributeAsLong("planId");
+
+ if (!checkboxItem.getValueAsBoolean()){
+
+ TEvaluationDefinition ted = (TEvaluationDefinition)selectedRecord.getAttributeAsObject("camp");
+
+ EDIds.add(ted.getId());
+
+ for (Long id : tu.getEvaluationSubjectInstances().keySet()){
+ ESIIds.add(id);
+ }
+ }else{
+
+
+ for (EObject eo : lplans.getListOfEObjects()){
+
+ TPlan tp = (TPlan) eo;
+
+ if (tp.getId().equals(planId)){
+
+ for (Entry<Long, TEvaluationDefinition> e : tp.getEvaluationDefinitions().entrySet()){
+
+ Long EDId = e.getKey();
+
+ TEvaluationDefinition ted = e.getValue();
+
+ if (ted.getUsers().containsKey(userId)){
+ EDIds.add(EDId);
+
+ for (Long ESIId : ted.getUsers().get(userId).getEvaluationSubjectInstances().keySet()){
+ ESIIds.add(ESIId);
+ }
+
+ }
+
+
+ }
+
+
+ }
+
+ }
+
+ }
+
+ String username = tu.getLastname() + " " + tu.getFirstname();
+
+ provider.initializeSuiviResults(tu.getUid(),username, EDIds, ESIIds, planId);
+ }
+
+ }
+
+ /**
+ * Update.
+ */
+ public void update(){
+
+
+ AsyncCallback callback = new AsyncCallback() {
+
+ public void onFailure(Throwable arg0) {
+
+ Tools.hideLoading();
+ }
+
+ public void onSuccess(Object result) {
+ lplans = (TListEObject) result;
+
+ Date now = new Date();
+
+ TreeNode[] array = new TreeNode[lplans.getListOfEObjects().size()];
+
+ int indexPlan = 0;
+
+ for (EObject eo : lplans.getListOfEObjects()){
+
+ TPlan tp = (TPlan) eo;
+
+ TreeNode tn = new TreeNode();
+
+ tn.setIcon(Tools.getBaseURL() + "images/plan-16x16.png");
+ tn.setTitle(tp.getName());
+ tn.setAttribute("plan", tp.getName());
+
+ TreeNode[] sted = new TreeNode[tp.getEvaluationDefinitions().size()];
+
+ int indexED = 0;
+
+ for (TEvaluationDefinition ted: tp.getEvaluationDefinitions().values()){
+
+ TreeNode tnted = new TreeNode();
+
+ tnted.setIcon(Tools.getBaseURL() + "images/campagne16.png");
+ tnted.setTitle(ted.getName());
+
+ if (now.after(ted.getDateEnd())){
+ tnted.setCustomStyle("grey_cell");
+ }
+
+ tnted.setAttribute("ed", ted.getName());
+
+ int indexUser = 0;
+
+ TreeNode[] susers = new TreeNode[ted.getUsers().size()];
+
+ for (TUser tu: ted.getUsers().values()){
+
+ TreeNode u = new TreeNode();
+ u.setIcon(Tools.getBaseURL() + "images/user16.png");
+ u.setTitle(tu.getLastname() + " " + tu.getFirstname()+ " <i>("+tu.getEvaluationSubjectInstances().size()+")</i>");
+ u.setAttribute("camp", ted);
+ u.setAttribute("planId", tp.getId());
+ u.setAttribute("userObject", tu);
+ u.setAttribute("user", tu.getLastname() + " " + tu.getFirstname());
+
+
+
+ susers[indexUser++] = u;
+
+ String htmlFolder = "";
+
+ int i = 1;
+
+ for (EvaluationSubjectInstance esi : tu.getEvaluationSubjectInstances().values()){
+
+ if(esi.getName() != null && !esi.getName().equals(""))
+ {
+ htmlFolder = htmlFolder + "<b>" + esi.getName();
+
+ if ( esi.getDescription() != null){
+ htmlFolder += " : </b><p align=\"justify\" style=\"width: 500px\">" + esi.getDescription() + "</p><br/>";
+ }else{
+ htmlFolder += "</b>";
+ }
+
+
+ }
+ else
+ {
+ htmlFolder += Messages.getString("Dossier") + " " + i + "<br/>";
+ }
+ i++;
+
+ }
+
+ u.setAttribute("htmlFolder", htmlFolder);
+
+ }
+
+ tnted.setChildren(susers);
+
+ sted[indexED++] = tnted;
+
+ }
+
+ tn.setChildren(sted);
+
+ array[indexPlan++] = tn;
+
+ }
+
+
+ evaluationsTree.getDataSource().setTestData(array);
+ evaluationsTree.setData(array);
+ evaluationsTree.fetchData();
+ evaluationsTree.sort();
+
+ searchText.focusInItem();
+
+
+ Tools.hideLoading();
+
+ }
+
+ };
+ Tools.showLoading(Messages.getString("MAJ_resultats"),
+ Messages.getString("Chargement"));
+
+
+ String searchTerm = searchText.getValueAsString();
+
+ Boolean showFinishedED = this.checkboxItem2.getValueAsBoolean();
+
+ // FIXME : HARD Coded role Evaluateurs !!!!
+ ConnexionServer.validationService.getUserFoldersReferentielByLocalRole(UserTools.getUser().getUid(), "Evaluateurs", idRef, searchTerm, showFinishedED, callback);
+
+
+
+ }
+
+
+ /**
+ * Creates the data source.
+ *
+ * @return the data source
+ */
+ private DataSource createDataSource(){
+ DataSource dataSource = new DataSource();
+ dataSource.setClientOnly(true);
+
+
+
+
+ String[][] r = { {"plan", "Plan"}, {"ed", "Campgane"}, {"user", "User"} };
+
+ DataSourceField[] array = new DataSourceField[3];
+
+ int i = 0;
+
+
+
+ for(String[] a : r) {
+
+
+ DataSourceTextField smartgwtField = new DataSourceTextField();
+
+ smartgwtField.setTitle(a[1]);
+ smartgwtField.setName(a[0]);
+ //dataSource.addField(smartgwtField);
+
+ array[i++] = smartgwtField;
+
+ }
+
+
+ dataSource.setFields(array);
+ return dataSource;
+ }
+
+
+
+}