Java tutorial
/* * 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.gestioncontratsignes.modifiermasse.date; import java.util.ArrayList; import java.util.List; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.CheckBox; import fr.amapj.common.CollectionUtils; import fr.amapj.common.FormatUtils; import fr.amapj.service.services.gestioncontrat.GestionContratService; import fr.amapj.service.services.mescontrats.ContratDTO; import fr.amapj.service.services.mescontrats.ContratLigDTO; import fr.amapj.service.services.mescontrats.MesContratsService; import fr.amapj.view.engine.popup.formpopup.WizardFormPopup; import fr.amapj.view.engine.tools.table.complex.ComplexTableBuilder; /** * Popup pour supprimer le barr sur une ou plusieurs dates de livraison * * */ public class PopupDeBarrerDateLivraison extends WizardFormPopup { public enum Step { INFO_GENERALES, SAISIE_DATE, CONFIRMATION; } private ContratDTO contratDTO; private List<ContratLigDTO> datesBarrees; private ComplexTableBuilder<ContratLigDTO> builder; private List<ContratLigDTO> modeleContratDateToDebarrer; /** * */ public PopupDeBarrerDateLivraison(Long idModeleContrat) { setWidth(80); popupTitle = "D barrer une ou plusieurs dates de livraison"; // Chargement du contrat et calcul des dates barres contratDTO = new MesContratsService().loadContrat(idModeleContrat, null); contratDTO.expandExcluded(); datesBarrees = computeDateBarrees(); modeleContratDateToDebarrer = new ArrayList<ContratLigDTO>(); } @Override protected void configure() { add(Step.INFO_GENERALES, () -> addFieldInfoGenerales(), () -> checkDateBarrees()); add(Step.SAISIE_DATE, () -> addFieldSaisieDate(), () -> readDateToDebarrer()); add(Step.CONFIRMATION, () -> addFieldConfirmation()); } private List<ContratLigDTO> computeDateBarrees() { return CollectionUtils.filter(contratDTO.contratLigs, e -> isBarree(e)); } /** * Permet de savoir si toute la ligne est barre */ private boolean isBarree(ContratLigDTO ligDTO) { for (int j = 0; j < contratDTO.contratColumns.size(); j++) { if (contratDTO.excluded[ligDTO.i][j] == false) { return false; } } return true; } private void addFieldInfoGenerales() { // Titre setStepTitle("les informations gnrales."); String str = "Cet outil va vous permettre de remettre l'tat actif une date de livraison qui est barre.<br/>" + "Vous allez supprim le barr sur la date.<br/>" + "<br/>" + "Exemple de cas d'utilisation : vous aviez barr une date car le producteur vous avait indiqu tre absent par exemple une date prcise.<br/>" + "Finalement le producteur vous indique qu'il sera bien prsent.<br/>" + "<br/>" + "Cet outil permet de supprimer le barr sur cette date<br/>"; addLabel(str, ContentMode.HTML); } private String checkDateBarrees() { if (datesBarrees.size() == 0) { return "Il n'y a pas de dates barres sur ce contrat. Vous ne pouvez donc pas continuer."; } return null; } private void addFieldSaisieDate() { // Titre setStepTitle("les dates barres rendre active"); String str = "Veuillez indiquer les dates que vous souhaitez ne plus barrer </br>"; addLabel(str, ContentMode.HTML); builder = new ComplexTableBuilder<ContratLigDTO>(datesBarrees); builder.setPageLength(7); builder.addDate("Date", false, 300, e -> e.date); builder.addCheckBox("Ne pas barrer cette date", "cb", true, 150, e -> modeleContratDateToDebarrer.contains(e.modeleContratDateId), null); addComplexTable(builder); } private String readDateToDebarrer() { modeleContratDateToDebarrer.clear(); for (int i = 0; i < datesBarrees.size(); i++) { ContratLigDTO lig = datesBarrees.get(i); // case cocher CheckBox cb = (CheckBox) builder.getComponent(i, "cb"); if (cb.getValue() == true) { modeleContratDateToDebarrer.add(lig); } } if (modeleContratDateToDebarrer.size() == 0) { return "Vous devez choisir au moins une date pour pouvoir continuer."; } return null; } private void addFieldConfirmation() { // Titre setStepTitle("confirmation avant modification"); addLabel("Vous allez supprimer le barr sur " + modeleContratDateToDebarrer.size() + " dates de ce contrat:", ContentMode.HTML); addLabel(FormatUtils.puceDate(modeleContratDateToDebarrer, e -> e.date), ContentMode.HTML); addLabel("Appuyez sur Sauvegarder pour raliser cette modification, ou Annuler pour ne rien modifier", ContentMode.HTML); } @Override protected void performSauvegarder() { // On met jour la grille dans contratDTO for (ContratLigDTO ligDTO : modeleContratDateToDebarrer) { for (int j = 0; j < contratDTO.contratColumns.size(); j++) { contratDTO.excluded[ligDTO.i][j] = false; } } // On sauvegarde en base new GestionContratService().updateDateBarreesModeleContrat(contratDTO); } @Override protected Class getEnumClass() { return Step.class; } }