fr.amapj.view.views.permanence.mespermanences.MesPermanencesView.java Source code

Java tutorial

Introduction

Here is the source code for fr.amapj.view.views.permanence.mespermanences.MesPermanencesView.java

Source

/*
 *  Copyright 2013-2018 Emmanuel BRUN (contact@amapj.fr)
 * 
 *  This file is part of AmapJ.
 *  
 *  AmapJ is free software: you can redistribute it and/or modify
 *  it 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.
    
 *  AmapJ 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
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with AmapJ.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * 
 */
package fr.amapj.view.views.permanence.mespermanences;

import java.text.SimpleDateFormat;
import java.util.List;

import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;

import fr.amapj.common.AmapjRuntimeException;
import fr.amapj.service.services.edgenerator.excel.permanence.EGPlanningPermanence;
import fr.amapj.service.services.permanence.mespermanences.MesPermanenceDTO;
import fr.amapj.service.services.permanence.mespermanences.MesPermanencesService;
import fr.amapj.service.services.permanence.mespermanences.UnePeriodePermanenceDTO;
import fr.amapj.service.services.permanence.periode.PeriodePermanenceDateDTO;
import fr.amapj.service.services.permanence.periode.SmallPeriodePermanenceDTO;
import fr.amapj.service.services.session.SessionManager;
import fr.amapj.view.engine.excelgenerator.TelechargerPopup;
import fr.amapj.view.engine.popup.PopupListener;
import fr.amapj.view.engine.popup.corepopup.CorePopup;
import fr.amapj.view.engine.template.FrontOfficeView;
import fr.amapj.view.engine.tools.BaseUiTools;
import fr.amapj.view.views.permanence.mespermanences.grille.GrilleInscriptionPermanence;
import fr.amapj.view.views.saisiecontrat.SaisieContrat.ModeSaisie;

/**
 * Page permettant  l'utilisateur de grer ses permanences
 * 
 */
public class MesPermanencesView extends FrontOfficeView implements PopupListener {

    private SimpleDateFormat df1 = new SimpleDateFormat("EEEEE dd MMMMM yyyy");

    static public String LABEL_RUBRIQUE = "rubrique";
    static public String LABEL_TITRECONTRAT = "titrecontrat";
    static public String PANEL_UNCONTRAT = "uncontrat";
    static public String BUTTON_PRINCIPAL = "principal";

    SimpleDateFormat df = new SimpleDateFormat("EEEEE dd MMMMM yyyy");
    VerticalLayout layout = null;
    public MesPermanenceDTO mesContratsDTO;

    @Override
    public String getMainStyleName() {
        return "mespermanences";
    }

    /**
     * 
     */
    @Override
    public void enter() {
        refresh();
    }

    /**
     * Ajoute un label sur toute la largeur  la ligne indique
     */
    private Label addLabel(VerticalLayout layout, String str) {
        Label tf = new Label(str);
        tf.addStyleName(LABEL_RUBRIQUE);
        layout.addComponent(tf);
        return tf;

    }

    private Button addButtonInscription(String str, final UnePeriodePermanenceDTO c) {
        Button b = new Button(str);
        b.addClickListener(e -> handleInscription(c, ModeSaisie.STANDARD));
        return b;
    }

    protected void handleInscription(UnePeriodePermanenceDTO c, ModeSaisie modeSaisie) {
        // TODO aller vers l'autre ecran en commentaire sur un telephone, car il est adapt pour les petites tailles  
        //SmallInscriptionPermanence.open(new SmallInscriptionPermanence(c.idPeriodePermanence,SessionManager.getUserId(),false), this);
        GrilleInscriptionPermanence
                .open(new GrilleInscriptionPermanence(c.idPeriodePermanence, SessionManager.getUserId()), this);
    }

    public void refresh() {
        mesContratsDTO = new MesPermanencesService().getMesPermanenceDTO(SessionManager.getUserId());

        layout = this;
        layout.removeAllComponents();

        if (mesContratsDTO.mesPeriodesPermanences.size() > 0) {

            // Le titre
            addLabel(layout, "S'inscrire aux permanences");

            // la liste des inscriptions possibles
            for (UnePeriodePermanenceDTO c : mesContratsDTO.mesPeriodesPermanences) {
                Panel p = new Panel();
                p.addStyleName(PANEL_UNCONTRAT);

                HorizontalLayout hl = new HorizontalLayout();
                hl.setMargin(true);
                hl.setSpacing(true);
                hl.setWidth("100%");

                VerticalLayout vl = new VerticalLayout();
                Label lab = new Label(c.nom);
                lab.addStyleName(LABEL_TITRECONTRAT);
                vl.addComponent(lab);

                String str = formatLibelleContrat(c, true);
                BaseUiTools.addHtmlLabel(vl, str, "libelle-contrat");

                hl.addComponent(vl);
                hl.setExpandRatio(vl, 1);

                VerticalLayout vl2 = new VerticalLayout();
                vl2.setWidth("115px");
                vl2.setSpacing(true);

                String libButton = getLibButton(c);
                Button b = addButtonInscription(libButton, c);
                b.setWidth("100%");
                b.addStyleName(BUTTON_PRINCIPAL);
                vl2.addComponent(b);

                hl.addComponent(vl2);
                hl.setComponentAlignment(vl2, Alignment.MIDDLE_CENTER);

                p.setContent(hl);

                layout.addComponent(p);

            }
        }

        //
        addLabel(layout, "Les dates de mes permanences");

        VerticalLayout vl1 = BaseUiTools.addPanel(this, "mes-permanences");
        String mesPermanences = getLibMesPermanences();
        BaseUiTools.addHtmlLabel(vl1, mesPermanences, "ligne");

        addLabel(layout, "Consulter les plannings de permanence");

        VerticalLayout vl2 = BaseUiTools.addPanel(this, "mes-permanences");

        // Le bouton pour visualiser les permanences en ligne 
        Button onLineButton = new Button("Visualiser les plannings de permanence ...");
        onLineButton.setIcon(FontAwesome.EYE);
        onLineButton.addStyleName("borderless");
        onLineButton.addStyleName("large");
        onLineButton.addClickListener(e -> handleVisualiser());

        vl2.addComponent(onLineButton);
        vl2.setComponentAlignment(onLineButton, Alignment.MIDDLE_LEFT);

        // Le bouton pour tlcharger les permanences 
        Button telechargerButton = new Button("Tlcharger les plannings de permanence au format tableur ...");
        telechargerButton.setIcon(FontAwesome.PRINT);
        telechargerButton.addStyleName("borderless");
        telechargerButton.addStyleName("large");
        telechargerButton.addClickListener(e -> handleTelecharger());

        vl2.addComponent(telechargerButton);
        vl2.setComponentAlignment(telechargerButton, Alignment.MIDDLE_LEFT);

    }

    private void handleVisualiser() {
        ChoixVisualiserPeriodePermanence.open(new ChoixVisualiserPeriodePermanence(), this);
    }

    private void handleTelecharger() {
        TelechargerPopup popup = new TelechargerPopup("Tlchargement des plannings de permanence", 80);
        List<SmallPeriodePermanenceDTO> dtos = new MesPermanencesService().getAllPeriodeInFuture();

        for (SmallPeriodePermanenceDTO dto : dtos) {
            popup.addGenerator(new EGPlanningPermanence(dto.id, null));
        }

        CorePopup.open(popup, this);
    }

    private String getLibMesPermanences() {
        StringBuffer buf = new StringBuffer();
        buf.append("Vous devez faire les permanences suivantes :<ul>");
        for (PeriodePermanenceDateDTO permanence : mesContratsDTO.mesPermanencesFutures) {
            buf.append("<li>" + df1.format(permanence.datePerm) + "</li>");
        }
        buf.append("</ul>");

        return buf.toString();
    }

    private String getLibButton(UnePeriodePermanenceDTO c) {
        if (c.nbInscription >= c.nbSouhaite) {
            return "Modifier";
        } else {
            return "S'inscrire";
        }
    }

    private String formatLibelleContrat(UnePeriodePermanenceDTO c, boolean isInscription) {
        switch (c.nature) {
        case INSCRIPTION_LIBRE_AVEC_DATE_LIMITE:
            return formatLibelleLibreDateLimite(c);

        case INSCRIPTION_LIBRE_FLOTTANT:
            return formatLibelleLibreSansDateLimite(c);

        default:
            throw new AmapjRuntimeException("" + c.nature);
        }

    }

    private String formatLibelleLibreDateLimite(UnePeriodePermanenceDTO c) {
        // Ligne 1
        String str = c.description;
        str = str + "<br/>";

        // Ligne 2 - Les dates de livraisons
        str = str + "<b>Vous devez raliser " + c.nbSouhaite + " permanences entre le " + df.format(c.dateDebut)
                + " et le " + df.format(c.dateFin) + "<br/>( choisir parmi " + c.nbDatePermanence
                + " dates).</b>";
        str = str + "<br/>";

        // Ligne 3 et 4 : etat + limite  
        if (c.nbInscription >= c.nbSouhaite) {
            str = str + "Vous tes bien inscrit sur " + c.nbInscription + " dates.";
            str = str + "<br/>";
            str = str + "Vous pouvez modifier vos choix jusqu'au " + df.format(c.dateFinInscription) + " minuit.";
        } else if (c.nbInscription == 0) {
            str = str + "Vous n'tes pas inscrit, merci de vous inscrire.";
            str = str + "<br/>";
            str = str + "Vous devez vous inscrire avant le " + df.format(c.dateFinInscription) + " minuit.";
        } else if (c.nbInscription < c.nbSouhaite) {
            str = str + "Vous tes inscrit sur " + c.nbInscription
                    + " permanences, merci de vous inscrire encore sur " + (c.nbSouhaite - c.nbInscription)
                    + " dates";
            str = str + "<br/>";
            str = str + "Vous devez finaliser vos inscriptions avant le " + df.format(c.dateFinInscription)
                    + " minuit.";
        }
        str = str + "<br/>";

        return str;
    }

    private String formatLibelleLibreSansDateLimite(UnePeriodePermanenceDTO c) {
        // Ligne 1
        String str = c.description;
        str = str + "<br/>";

        // Ligne 2 - Les dates de livraisons
        str = str + "<b>Vous devez raliser " + c.nbSouhaite + " permanences entre le " + df.format(c.dateDebut)
                + " et le " + df.format(c.dateFin) + "<br/>( choisir parmi " + c.nbDatePermanence
                + " dates).</b>";
        str = str + "<br/>";

        // Ligne 3 et 4 : etat + limite  
        if (c.nbInscription >= c.nbSouhaite) {
            str = str + "Vous tes bien inscrit sur " + c.nbInscription + " dates.";
            str = str + "<br/>";
            str = str + "Vous pouvez modifier vos choix pour vos permanences places aprs le "
                    + df.format(c.firstDateModifiable);
        } else if (c.nbInscription == 0) {
            str = str + "Vous n'tes pas inscrit, merci de vous inscrire.";
            str = str + "<br/>";
            str = str + "Vous pouvez vous inscrire pour les permanences places aprs le "
                    + df.format(c.firstDateModifiable);
        } else if (c.nbInscription < c.nbSouhaite) {
            str = str + "Vous tes inscrit sur " + c.nbInscription
                    + " permanences, merci de vous inscrire encore sur " + (c.nbSouhaite - c.nbInscription)
                    + " dates";
            str = str + "<br/>";
            str = str + "Vous pouvez vous inscrire pour les permanences places aprs le "
                    + df.format(c.firstDateModifiable);
        }
        str = str + "<br/>";

        return str;
    }

    @Override
    public void onPopupClose() {
        refresh();

    }

}