Subversion Repositories eFlore/Applications.coel

Rev

Rev 100 | Rev 103 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.Modele;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.InterneValeur;
import org.tela_botanica.client.modeles.InterneValeurListe;
import org.tela_botanica.client.modeles.Personne;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.TextToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;

public class FormStructureVue extends LayoutContainer implements Rafraichissable {

        private Modele coelModele = null ;
        private ListStore<Valeur> magazinLstpr = null;
        private ComboBox<Valeur> comboLstpr = null;
        private ListStore<Valeur> magazinLstpu = null;
        private ComboBox<Valeur> comboLstpu = null;
        private ComboBox<InterneValeur> comboAcronyme = null;
        private TextField<String> ihChp = null;
        private TextField<String> mnhnChp = null;
        private ComboBox<InterneValeur> comboTypeStructure = null;
        
        public FormStructureVue() {
                //+-----------------------------------------------------------------------------------------------------------+         
                // Initialisation de variables
                setLayout(new FitLayout());
                coelModele = Registry.get(RegistreId.MODELE);
                
                // Création de la disposition : FIELDSET
                FormLayout layoutFieldset = new FormLayout();
                layoutFieldset.setLabelWidth(200);
                layoutFieldset.setPadding(4);

                //+-----------------------------------------------------------------------------------------------------------+
                // Création du panneau Formulaire
                FormPanel panel = new FormPanel();  
                panel.setFrame(true);
                panel.setIconStyle("icone-form-ajouter");  
                panel.setCollapsible(false);  
                panel.setHeading("Ajout d'une institution");  
                panel.setButtonAlign(HorizontalAlignment.CENTER);  
                panel.setLayout(new FlowLayout());

                // Création des onglets
                TabPanel onglets = new TabPanel();
                onglets.setAutoHeight(true);
                //tabs.setDeferredRender(false);  
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire IDENTIFICATION
                TabItem identificationOnglet = new TabItem();  
                identificationOnglet.setText("Identification");  
                identificationOnglet.setLayout(new FormLayout());

                // Fieldset IDENTITÉ
                FieldSet fieldSetIdentite = new FieldSet();
                fieldSetIdentite.setHeading("Identité");
                fieldSetIdentite.setCollapsible(true);
                fieldSetIdentite.setLayout(layoutFieldset);
                
                TextField<String> nomStructureChp = new TextField<String>();  
                nomStructureChp.setFieldLabel("Nom de la structure");
                nomStructureChp.setAllowBlank(false);
                nomStructureChp.getMessages().setBlankText("Ce champ est obligatoire.");
                fieldSetIdentite.add(nomStructureChp, new FormData(450, 0));
                
                // Création du sous-formulaire : Acronyme
                LayoutContainer ligne = new LayoutContainer();  
                ligne.setLayout(new ColumnLayout());
                LayoutContainer gauche = new LayoutContainer();
                FormLayout layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(200);
                layoutGauche.setPadding(0);
                gauche.setLayout(layoutGauche);
                LayoutContainer droite = new LayoutContainer();
                FormLayout layoutDroite = new FormLayout();
                layoutDroite.setLabelWidth(0);
                layoutDroite.setPadding(0);
                droite.setLayout(layoutDroite);
                
                ListStore<InterneValeur> acronymes = new ListStore<InterneValeur>();  
                acronymes.add(InterneValeurListe.getTypeAcronyme()); 
                
                comboAcronyme = new ComboBox<InterneValeur>();  
                comboAcronyme.setEmptyText("Sélectioner un type d'acronyme...");
                comboAcronyme.setFieldLabel("Acronymes");
                comboAcronyme.setDisplayField("nom");
                comboAcronyme.setStore(acronymes);
                comboAcronyme.setEditable(false);
                comboAcronyme.setTypeAhead(true);  
                comboAcronyme.setTriggerAction(TriggerAction.ALL);
                comboAcronyme.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
                        @Override
                        public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
                                String acronymeAbr = se.getSelectedItem().getAbr();
                                if (acronymeAbr.equals("IH")) {
                                        mnhnChp.hide();
                                        ihChp.show();
                                } else if (acronymeAbr.equals("MNHN")) {
                                        ihChp.hide();
                                        mnhnChp.show();
                                } else if (acronymeAbr.equals("")) {
                                        ihChp.hide();
                                        mnhnChp.hide();
                                        comboAcronyme.clearSelections();
                                }
                        }
        });
                gauche.add(comboAcronyme);
                
                ihChp = new TextField<String>();  
                //ihChp.setEmptyText("Index Herbariorum");
                ihChp.setLabelSeparator("");
                ihChp.setToolTip("Index Herbariorum : herbier de plus de 5000 échantillons");
                ihChp.hide();
                droite.add(ihChp);
                
                mnhnChp = new TextField<String>();  
                //mnhnChp.setEmptyText("MNHN");
                mnhnChp.setLabelSeparator("");
                mnhnChp.setToolTip("Acronyme MNHN : herbier de moins de 5000 échantillons");
                mnhnChp.hide();
                droite.add(mnhnChp);
                
                ligne.add(gauche, new ColumnData(0.5));  
                ligne.add(droite, new ColumnData(0.5));
                fieldSetIdentite.add(ligne);
                
                // Création du sous-formulaire : Type de Structure
                LayoutContainer ligneTs = new LayoutContainer();  
                ligneTs.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheTs = new LayoutContainer();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(200);
                layoutGauche.setPadding(0);
                gaucheTs.setLayout(layoutGauche);
                
                LayoutContainer droiteTs = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelWidth(0);
                layoutDroite.setPadding(0);
                droiteTs.setLayout(layoutDroite);
                
                ListStore<InterneValeur> typesStructure = new ListStore<InterneValeur>();  
                typesStructure.add(InterneValeurListe.getTypeStructure());
                
                this.comboTypeStructure = new ComboBox<InterneValeur>();  
                comboTypeStructure.setEmptyText("Sélectioner un type de structure...");
                comboTypeStructure.setFieldLabel("Statut des structures");
                comboTypeStructure.setDisplayField("nom");
                comboTypeStructure.setStore(typesStructure);
                comboTypeStructure.setEditable(false);
                comboTypeStructure.setTypeAhead(true);  
                comboTypeStructure.setTriggerAction(TriggerAction.ALL);
                comboTypeStructure.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
                        @Override
                        public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
                                String typeAbr = se.getSelectedItem().getAbr();
                                if (typeAbr.equals("stpu")) {
                                        comboLstpr.hide();
                                        comboLstpu.show();
                                } else if (typeAbr.equals("stpr")) {
                                        comboLstpu.hide();
                                        comboLstpr.show();
                                } else if (typeAbr.equals("")) {
                                        comboLstpr.hide();
                                        comboLstpu.hide();
                                        comboTypeStructure.clearSelections();
                                }
                        }
        });
                gaucheTs.add(comboTypeStructure);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpu"));
                magazinLstpu = new ListStore<Valeur>();
                magazinLstpu.add(new ArrayList<Valeur>());
                comboLstpu = new ComboBox<Valeur>();  
                //comboLstpu.setFieldLabel("Statut des structures publiques");
                comboLstpu.setLabelSeparator("");
                comboLstpu.setDisplayField("nom");
                comboLstpu.setEditable(false);
                comboLstpu.setTriggerAction(TriggerAction.ALL);
                comboLstpu.setStore(magazinLstpu);
                comboLstpu.hide();
                droiteTs.add(comboLstpu);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpr"));
                magazinLstpr = new ListStore<Valeur>();
                magazinLstpr.add(new ArrayList<Valeur>());
                comboLstpr = new ComboBox<Valeur>();  
                //comboLstpr.setFieldLabel("Statut des structures privées");
                comboLstpr.setLabelSeparator("");
                comboLstpr.setDisplayField("nom");
                comboLstpr.setEditable(false);
                comboLstpr.setTriggerAction(TriggerAction.ALL);
                comboLstpr.setStore(magazinLstpr);
                comboLstpr.hide();
                droiteTs.add(comboLstpr);
                
                ligneTs.add(gaucheTs, new ColumnData(0.5));  
                ligneTs.add(droiteTs, new ColumnData(0.5));
                fieldSetIdentite.add(ligneTs);
                
                DateField dateFondationChp = new DateField();
                dateFondationChp.setFieldLabel("Date de fondation");
                dateFondationChp.getPropertyEditor().getFormat();
                dateFondationChp.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
                dateFondationChp.getMessages().setInvalidText("La valeur saisie n'est pas une date valide. La date doit être au format «jj/mm/aaaa».");
                fieldSetIdentite.add(dateFondationChp);
                
                identificationOnglet.add(fieldSetIdentite);
                
                // Fieldset ADRESSE
                LayoutContainer principalFdAdresse = new LayoutContainer();  
                principalFdAdresse.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheFdAdresse = new LayoutContainer();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(100);
                layoutGauche.setPadding(0);
                gaucheFdAdresse.setLayout(layoutGauche);
                
                LayoutContainer droiteFdAdresse = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelAlign(LabelAlign.LEFT);
                layoutDroite.setLabelWidth(100);
                layoutDroite.setPadding(0);
                droiteFdAdresse.setLayout(layoutDroite);
                
                FieldSet fieldSetAdresse = new FieldSet();
                fieldSetAdresse.setHeading("Adresse");
                fieldSetAdresse.setCollapsible(true);
                
                layoutFieldset = new FormLayout();  
                layoutFieldset.setLabelWidth(100);  
                layoutFieldset.setPadding(4);
                fieldSetAdresse.setLayout(layoutFieldset);
                
                TextField<String> adrChp = new TextField<String>();  
                adrChp.setFieldLabel("Adresse");
                fieldSetAdresse.add(adrChp, new FormData(550, 0));
                
                TextField<String> cpChp = new TextField<String>();  
                cpChp.setFieldLabel("Code postal");
                gaucheFdAdresse.add(cpChp);
                
                TextField<String> villeChp = new TextField<String>();  
                villeChp.setFieldLabel("Ville");
                droiteFdAdresse.add(villeChp);
                
                TextField<String> regionChp = new TextField<String>();  
                regionChp.setFieldLabel("Région");
                gaucheFdAdresse.add(regionChp);
                
                TextField<String> paysChp = new TextField<String>();  
                paysChp.setFieldLabel("Pays");
                droiteFdAdresse.add(paysChp);
                
                principalFdAdresse.add(gaucheFdAdresse, new ColumnData(.5));
                principalFdAdresse.add(droiteFdAdresse, new ColumnData(.5));
                fieldSetAdresse.add(principalFdAdresse);
                identificationOnglet.add(fieldSetAdresse);
                
                // Fieldset TÉLÉPHONE et EMAIL
                
                LayoutContainer principalFdTelMail = new LayoutContainer();  
                principalFdTelMail.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheFdTelMail = new LayoutContainer();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(100);
                layoutGauche.setPadding(0);
                gaucheFdTelMail.setLayout(layoutGauche);
                
                LayoutContainer droiteFdTelMail = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelAlign(LabelAlign.LEFT);
                layoutDroite.setLabelWidth(100);
                layoutDroite.setPadding(0);
                droiteFdTelMail.setLayout(layoutDroite);
                
                FieldSet fieldSetTelMail = new FieldSet();
                fieldSetTelMail.setHeading("Communication");
                fieldSetTelMail.setCollapsible(true);
                
                layoutFieldset = new FormLayout();  
                layoutFieldset.setLabelWidth(200);  
                layoutFieldset.setPadding(4);  
                fieldSetTelMail.setLayout(layoutFieldset);
                                
                TextField<String> telChp = new TextField<String>();  
                telChp.setFieldLabel("Téléphone");
                gaucheFdTelMail.add(telChp);
                
                TextField<String> faxChp = new TextField<String>();  
                faxChp.setFieldLabel("Fax");
                droiteFdTelMail.add(faxChp);
                
                TextField<String> emailChp = new TextField<String>();  
                emailChp.setFieldLabel("Courriel");
                emailChp.setToolTip("Saisir le courriel de l'organisation, pas de courriel individuel. Ex. : accueil@organisation.org");
                gaucheFdTelMail.add(emailChp);
                
                TextField<String> urlChp = new TextField<String>();  
                urlChp.setFieldLabel("Site web");
                droiteFdTelMail.add(urlChp);
                
                principalFdTelMail.add(gaucheFdTelMail, new ColumnData(.5));
                principalFdTelMail.add(droiteFdTelMail, new ColumnData(.5));
                fieldSetTelMail.add(principalFdTelMail);
                identificationOnglet.add(fieldSetTelMail);

                onglets.add(identificationOnglet);

                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire PERSONNEL
                TabItem personnelOnglet = new TabItem();  
                personnelOnglet.setText("Personnel");
                FormLayout personnelOngletLayout = new FormLayout();
                personnelOngletLayout.setLabelWidth(400);
                personnelOnglet.setLayout(personnelOngletLayout);
                
                TextField<String> nbreTotalPersonneStructureChp = new TextField<String>();  
                nbreTotalPersonneStructureChp.setFieldLabel("Nombre de personne travaillant dans l'institution");
                personnelOnglet.add(nbreTotalPersonneStructureChp);
                
                personnelOnglet.add(this.creerGrillePersonnel());
                
                onglets.add(personnelOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire CONSERVATION
                TabItem conservationOnglet = new TabItem();  
                conservationOnglet.setText("Conservation");  
                conservationOnglet.setLayout(new FormLayout());

                
                onglets.add(conservationOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire VALORISATION
                TabItem valorisationOnglet = new TabItem();  
                valorisationOnglet.setText("Valorisation");  
                valorisationOnglet.setLayout(new FormLayout());

                
                onglets.add(valorisationOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Gestion du FORMULAIRE GÉNÉRAL
                
                // Ajout des onglets
                panel.add(onglets);
                
                // Ajout des boutons au panneau formulaire
                Button annulerBtn = new Button("Annuler");
                panel.addButton(annulerBtn);
                Button validerBtn = new Button("Valider");
                panel.addButton(validerBtn);
                
                // Ajout du panneau Formulaire à la disposition générale
                add(panel);               
        }

        private ContentPanel creerGrillePersonnel() {  
                List<Personne> personnes = new ArrayList<Personne>();
                personnes.add(new Personne(Valeur.FONCTION_DIRECTEUR));
                personnes.add(new Personne(Valeur.FONCTION_CONSERVATEUR));
                
                List<ColumnConfig> configs = new ArrayList<ColumnConfig>();

                CheckBoxSelectionModel<Personne> sm = new CheckBoxSelectionModel<Personne>();
                configs.add(sm.getColumn());

                ColumnConfig column = new ColumnConfig();
                column.setId("ce_truk_fonction");
                column.setHeader("Fonction");
                column.setWidth(100);
                configs.add(column);
                
                column = new ColumnConfig();  
                column.setId("prenom");  
                column.setHeader("Prénom");  
                column.setWidth(100);  
                configs.add(column);  
                
                column = new ColumnConfig();  
                column.setId("nom");
                column.setHeader("Nom");
                column.setWidth(75);
                TextField<String> text = new TextField<String>();  
                text.setAllowBlank(false);  
                text.setAutoValidate(true);  
                column.setEditor(new CellEditor(text));
                configs.add(column);  

                column = new ColumnConfig("tel", "Téléphone", 100);  
                configs.add(column);

                column = new ColumnConfig("fax", "Fax", 100);
                configs.add(column);
                
                column = new ColumnConfig("tps_w", "Temps travail", 0);
                column.setNumberFormat(NumberFormat.getDecimalFormat());
                column.setEditor(new CellEditor(new NumberField()));
                configs.add(column);
                
                column = new ColumnConfig("specialites", "Spécialités botaniques", 200);
                configs.add(column);
                
                CheckColumnConfig checkColumn = new CheckColumnConfig("mark_contact", "Contact ?", 55);
                configs.add(checkColumn);
                
                ContentPanel cp = new ContentPanel();
                cp.setHeading("Personnes travaillant sur les collections");
                cp.setFrame(true);
                cp.setIconStyle("icon-table");  
                cp.setLayout(new FitLayout());  
                
                ToolBar toolBar = new ToolBar();  
                toolBar.add(new TextToolItem("Ajouter", "icon-add"));  
                toolBar.add(new SeparatorToolItem());  
                toolBar.add(new TextToolItem("Supprimer", "icon-delete"));  
                cp.setTopComponent(toolBar);  

                ListStore<Personne> store = new ListStore<Personne>();  
                store.add(personnes);  

                ColumnModel cm = new ColumnModel(configs);
                
                EditorGrid<Personne> grid = new EditorGrid<Personne>(store, cm);  
                grid.setBorders(true);
                grid.setSelectionModel(sm);
                grid.addPlugin(sm);
                //grid.setAutoExpandColumn("nom");
                grid.addPlugin(checkColumn);
                grid.setHeight(400);
                
                cp.add(grid);  
                return cp;  
        }  
        
        public void rafraichir(Object nouvelleDonnees) {
                if (nouvelleDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvelleDonnees;
                        
                        List<Valeur> liste = new ArrayList<Valeur>();
                        for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                                liste.add(listeValeurs.get(it.next()));
                        }
                        // Test pour savoir si la liste contient des éléments
                        if (liste.size() > 0) {
                                Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
                                if (listeValeurs.getId().equals(config.getListeId("stpr"))) {
                                        GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                                        magazinLstpr.removeAll();
                                        magazinLstpr.add(liste);
                                        comboLstpr.setStore(magazinLstpr);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("stpu"))) {
                                        GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                                        magazinLstpu.removeAll();
                                        magazinLstpu.add(liste);
                                        comboLstpu.setStore(magazinLstpu);
                                }
                        } else {
                                GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
                        }
                }
        }
         
}