fr.amapj.view.views.meslivraisons.MesLivraisonsView.java Source code

Java tutorial

Introduction

Here is the source code for fr.amapj.view.views.meslivraisons.MesLivraisonsView.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.meslivraisons;

import java.text.SimpleDateFormat;

import com.vaadin.server.FontAwesome;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

import fr.amapj.common.FormatUtils;
import fr.amapj.model.models.param.paramecran.PEMesLivraisons;
import fr.amapj.service.services.edgenerator.excel.emargement.EGFeuilleEmargement;
import fr.amapj.service.services.meslivraisons.JourLivraisonsDTO;
import fr.amapj.service.services.meslivraisons.JourLivraisonsDTO.InfoPermanence;
import fr.amapj.service.services.meslivraisons.MesLivraisonsDTO;
import fr.amapj.service.services.meslivraisons.MesLivraisonsService;
import fr.amapj.service.services.meslivraisons.ProducteurLivraisonsDTO;
import fr.amapj.service.services.meslivraisons.QteProdDTO;
import fr.amapj.service.services.parametres.ParametresService;
import fr.amapj.service.services.session.SessionManager;
import fr.amapj.view.engine.excelgenerator.LinkCreator;
import fr.amapj.view.engine.menu.MenuList;
import fr.amapj.view.engine.popup.PopupListener;
import fr.amapj.view.engine.template.FrontOfficeView;
import fr.amapj.view.engine.tools.BaseUiTools;
import fr.amapj.view.views.common.gapviewer.AbstractGapViewer;
import fr.amapj.view.views.common.gapviewer.GapViewerUtil;
import fr.amapj.view.views.common.gapviewer.WeekViewer;
import fr.amapj.view.views.mescontrats.TelechargerMesContrat;

/**
 * Affichage des livraisons
 *
 */
@SuppressWarnings("serial")
public class MesLivraisonsView extends FrontOfficeView implements PopupListener {

    static private String LABEL_DATEJOURLIV = "datejourliv";
    static private String LABEL_QTEPRODUIT = "qteproduit";
    static private String PANEL_UNJOUR = "unjour";

    private VerticalLayout planning;

    private VerticalLayout livraison;

    private AbstractGapViewer semaineViewer;

    private SimpleDateFormat df1 = FormatUtils.getFullDate();

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

    /**
     * 
     */
    @Override
    public void enter() {
        PEMesLivraisons peMesLivraisons = (PEMesLivraisons) new ParametresService()
                .loadParamEcran(MenuList.MES_LIVRAISONS);

        semaineViewer = GapViewerUtil.createGapWiever(peMesLivraisons.modeAffichage, this);
        addComponent(semaineViewer.getComponent());

        VerticalLayout central = new VerticalLayout();
        addComponent(central);

        planning = new VerticalLayout();
        central.addComponent(planning);
        livraison = new VerticalLayout();
        central.addComponent(livraison);

        // Le bouton pour tlcharger les livraisons   
        Button telechargerButton = new Button("Imprimer mes livraisons ...");
        telechargerButton.setIcon(FontAwesome.PRINT);
        telechargerButton.addStyleName("borderless");
        telechargerButton.addStyleName("large");
        telechargerButton.addClickListener(e -> handleTelecharger());

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

        onPopupClose();
    }

    private void handleTelecharger() {
        new TelechargerMesLivraisons().displayPopupTelecharger(semaineViewer, SessionManager.getUserId(), this);
    }

    public void onPopupClose() {
        MesLivraisonsDTO res = new MesLivraisonsService().getMesLivraisons(semaineViewer.getDateDebut(),
                semaineViewer.getDateFin(), SessionManager.getUserRoles(), SessionManager.getUserId());

        // Pour la semaine, ajout des planning mensuels de distribution
        planning.removeAllComponents();
        for (EGFeuilleEmargement planningMensuel : res.planningMensuel) {
            planning.addComponent(LinkCreator.createLink(planningMensuel));
        }
        if (res.planningMensuel.size() > 0) {
            BaseUiTools.addEmptyLine(planning);
        }

        // Pour chaque jour, ajout des informations permanence et produits livrs
        livraison.removeAllComponents();
        for (JourLivraisonsDTO jour : res.jours) {
            VerticalLayout vl = BaseUiTools.addPanel(livraison, PANEL_UNJOUR);

            String dateMessage = df1.format(jour.date);
            BaseUiTools.addStdLabel(vl, dateMessage, LABEL_DATEJOURLIV);

            if (jour.permanences != null) {
                for (InfoPermanence info : jour.permanences) {
                    String msg = "<br/><h2><i><b>" + "!! Attention, vous devez raliser la permanence ce "
                            + df1.format(jour.date) + " (" + info.periodePermanenceDTO.nom + ")!!</br>"
                            + "Liste des personnes de permanence : " + info.dateDTO.getNomInscrit()
                            + "</i></b></h2>";
                    BaseUiTools.addHtmlLabel(vl, msg, "");
                }
            }

            for (ProducteurLivraisonsDTO producteurLiv : jour.producteurs) {
                BaseUiTools.addBandeau(vl, producteurLiv.modeleContrat, "nomcontrat");

                for (QteProdDTO cell : producteurLiv.produits) {
                    String content = cell.qte + " " + cell.nomProduit + " , " + cell.conditionnementProduit;
                    BaseUiTools.addStdLabel(vl, content, LABEL_QTEPRODUIT);
                }

                if (BaseUiTools.isCompactMode() == false) {
                    vl.addComponent(new Label("<br/>", ContentMode.HTML));
                }

            }
        }
    }

}