fr.amapj.view.views.permanence.mespermanences.grille.GrilleInscriptionPermanence.java Source code

Java tutorial

Introduction

Here is the source code for fr.amapj.view.views.permanence.mespermanences.grille.GrilleInscriptionPermanence.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.grille;

import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout;

import fr.amapj.common.AmapjRuntimeException;
import fr.amapj.model.models.permanence.periode.RegleInscriptionPeriodePermanence;
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.view.views.permanence.grille.AbstractPeriodePermanenceGrillePart;
import fr.amapj.view.views.permanence.mespermanences.MesPermanencesUtils;

/**
 * Permet  un utilisateur de s'inscrire en grille  
 *
 */
public class GrilleInscriptionPermanence extends AbstractPeriodePermanenceGrillePart {
    private UnePeriodePermanenceDTO periodePermanenceDTO;

    public GrilleInscriptionPermanence(Long idPeriodePermanence, Long userId) {
        super(idPeriodePermanence, userId);
    }

    @Override
    protected String getHeader() {
        periodePermanenceDTO = new MesPermanencesService().loadCompteurPeriodePermanence(dto.id, userId);
        String cpt = MesPermanencesUtils.getLibCompteur(periodePermanenceDTO);
        return cpt;
    }

    @Override
    protected Layout addSpecificButton(PeriodePermanenceDateDTO date) {
        HorizontalLayout hl = new HorizontalLayout();
        hl.setWidth("400px");
        hl.setHeight("45px");

        boolean isInscrit = date.isInscrit(userId);
        boolean isComplet = date.isDateComplete();
        // Indique si il est encore possible de s'inscire ou non pour cette date 
        boolean isModifiable = MesPermanencesUtils.isDateModifiable(periodePermanenceDTO, date);

        //
        if (isModifiable == false) {
            return null;
        }

        switch (periodePermanenceDTO.regleInscription) {
        case UNE_INSCRIPTION_PAR_DATE:
            return specificButtonInscriptionUniqueParDate(hl, isInscrit, isComplet, date);

        case MULTIPLE_INSCRIPTION_SUR_ROLE_DIFFERENT:
        case TOUT_AUTORISE:
            return specificButtonInscriptionMultipleParDate(hl, isInscrit, isComplet, date);

        default:
            throw new AmapjRuntimeException();
        }
    }

    /**
     * Dessin des boutons dans le cas ou l'utilisateur peut s'inscrire une seule fois sur une date 
     */
    private Layout specificButtonInscriptionUniqueParDate(HorizontalLayout hl, boolean isInscrit, boolean isComplet,
            PeriodePermanenceDateDTO date) {
        // Si l'utilisateur est inscrit pour cette date 
        if (isInscrit) {
            Button b = new Button("Je ne souhaite plus venir  cette date.");
            b.addStyleName("suppress-inscrire");
            b.addClickListener(e -> handleSuppressionInscription(date));

            hl.addComponent(b);
            hl.setComponentAlignment(b, Alignment.MIDDLE_CENTER);
            return hl;
        }

        // Si pas de place disponible
        if (isComplet == true) {
            return null;
        }

        // Cas standard : on peut s'inscrire 
        Button b = new Button("Je m'inscris  cette date");
        b.addStyleName("inscrire");
        b.addClickListener(e -> handleInscription(date));

        hl.addComponent(b);
        hl.setComponentAlignment(b, Alignment.MIDDLE_CENTER);
        return hl;
    }

    private void handleSuppressionInscription(PeriodePermanenceDateDTO date) {
        DesinscriptionPopup.open(new DesinscriptionPopup(date, userId), this);
    }

    private void handleInscription(PeriodePermanenceDateDTO date) {
        InscriptionPopup.open(new InscriptionPopup(date, userId, dto.id), this);
    }

    /**
     * Dessin des boutons dans le cas ou l'utilisateur peut s'inscrire plusieurs fois sur une date 
     */
    private Layout specificButtonInscriptionMultipleParDate(HorizontalLayout hl, boolean isInscrit,
            boolean isComplet, PeriodePermanenceDateDTO date) {
        // Si l'utilisateur est inscrit pour cette date 
        if (isInscrit) {
            Button b = new Button("Je change mon choix pour cette date.");
            b.addStyleName("suppress-inscrire");
            b.addClickListener(e -> handleMultipleInscription(date));

            hl.addComponent(b);
            hl.setComponentAlignment(b, Alignment.MIDDLE_CENTER);
            return hl;
        }

        // Si pas de place disponible
        if (isComplet == true) {
            return null;
        }

        // Cas standard : on peut s'inscrire 
        Button b = new Button("Je m'inscris  cette date");
        b.addStyleName("inscrire");
        b.addClickListener(e -> handleMultipleInscription(date));

        hl.addComponent(b);
        hl.setComponentAlignment(b, Alignment.MIDDLE_CENTER);
        return hl;
    }

    private void handleMultipleInscription(PeriodePermanenceDateDTO date) {
        if (dto.regleInscription == RegleInscriptionPeriodePermanence.TOUT_AUTORISE) {
            InscriptionPopupToutAutorise
                    .open(new InscriptionPopupToutAutorise(date.idPeriodePermanenceDate, userId, dto.id), this);
        } else {
            InscriptionPopupRoleDifferent
                    .open(new InscriptionPopupRoleDifferent(date.idPeriodePermanenceDate, userId, dto.id), this);
        }
    }

}