Java tutorial
package nc.noumea.mairie.appock.viewmodel; /*- * #%L * Logiciel de Gestion des approvisionnements et des stocks des fournitures administratives de la Mairie de Nouma * %% * Copyright (C) 2017 Mairie de Nouma, Nouvelle-Caldonie * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import nc.noumea.mairie.appock.comparator.ArticleStockComparator; import nc.noumea.mairie.appock.core.utility.AppockUtil; import nc.noumea.mairie.appock.core.utility.DateUtil; import nc.noumea.mairie.appock.core.viewmodel.AbstractEditViewModel; import nc.noumea.mairie.appock.dto.EntreeSortieStock; import nc.noumea.mairie.appock.entity.*; import nc.noumea.mairie.appock.enums.TypeMouvementStock; import nc.noumea.mairie.appock.services.*; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zkplus.spring.DelegatingVariableResolver; import org.zkoss.zul.Messagebox; import java.io.Serializable; import java.util.*; @VariableResolver(DelegatingVariableResolver.class) public class EditStockViewModel extends AbstractEditViewModel<Stock> implements Serializable { private static final long serialVersionUID = 1L; @WireVariable ServiceService serviceService; @WireVariable CatalogueService catalogueService; @WireVariable ArticleCatalogueService articleCatalogueService; @WireVariable StockService stockService; @WireVariable MailService mailService; private Service selectedService; private List<Service> listeService; private List<ArticleStock> listeArticleStock; private List<ArticleStock> selectedListeArticleStock; private String texteRecherche; private String texteRechercheHistorique; private String observationRecherche; private List<MouvementStock> listeMouvementStock; public Service getSelectedService() { return selectedService; } public void setSelectedService(Service selectedService) { this.selectedService = selectedService; } public List<ArticleStock> getListeArticleStock() { return listeArticleStock; } public void setListeArticleStock(List<ArticleStock> listeArticleStock) { this.listeArticleStock = listeArticleStock; } public List<ArticleStock> getSelectedListeArticleStock() { return selectedListeArticleStock; } public void setSelectedListeArticleStock(List<ArticleStock> selectedListeArticleStock) { this.selectedListeArticleStock = selectedListeArticleStock; } public String getTexteRechercheHistorique() { return texteRechercheHistorique; } public void setTexteRechercheHistorique(String texteRechercheHistorique) { this.texteRechercheHistorique = AppockUtil.majusculeSansAccentTrim(texteRechercheHistorique); } public List<MouvementStock> getListeMouvementStock() { return listeMouvementStock; } public void setListeMouvementStock(List<MouvementStock> listeMouvementStock) { this.listeMouvementStock = listeMouvementStock; } public List<Service> getListeService() { return listeService; } public void setListeService(List<Service> listeService) { this.listeService = listeService; } public String getObservationRecherche() { return observationRecherche; } public void setObservationRecherche(String observationRecherche) { this.observationRecherche = AppockUtil.majusculeSansAccentTrim(observationRecherche); } public String getTexteRecherche() { return texteRecherche; } public void setTexteRecherche(String texteRecherche) { this.texteRecherche = AppockUtil.majusculeSansAccentTrim(texteRecherche); } @Init public void init() { setListeService(serviceService.findAllWithActifInactifOrderByLibelle(true)); } @Command @NotifyChange("*") public void refreshListeArticleStock() { if (selectedService == null) { return; } selectedListeArticleStock = null; selectedService = serviceService.findOne(selectedService.getId()); if (selectedService.getStock() == null) { selectedService.setStock(new Stock()); selectedService = serviceService.save(selectedService); } entity = stockService.findOne(selectedService.getStock().getId()); listeArticleStock = entity.getListeArticleStock(); Collections.sort(listeArticleStock, new ArticleStockComparator()); Catalogue catalogueActif = catalogueService.findActif(); List<ArticleStock> resultListeArticleStock = new ArrayList<>(); for (ArticleStock articleStock : listeArticleStock) { // Pour les stocks a t dcid de ne pas faire de lien "fort" par id sur un articleCatalogue le catalogue changeant tous les ans // Tous les ans un mme article va donc avoir un nouvel ID au sein d'un nouveau catalogue (pas gnant du tout pour les catalogues). // Hors pour les stocks il s'agit bien du mme article anne aprs anne, donc on fait le lien par rfrence ArticleCatalogue articleCatalogue = articleCatalogueService.findArticleCataloguePlusRecentParReference( articleStock.getReferenceArticleStock(), catalogueActif); if (articleCatalogue == null || (StringUtils.isNotBlank(texteRecherche) && !articleCatalogue.getLibelle().contains(texteRecherche) && !articleCatalogue.getReference().contains(texteRecherche) && !articleCatalogue.getSousFamille().getLibelle().contains(texteRecherche))) { continue; } else { articleStock.setArticleCatalogue(articleCatalogue); resultListeArticleStock.add(articleStock); } catalogueService.initPhotoSrc(articleStock.getArticleCatalogue()); } setListeArticleStock(resultListeArticleStock); Collections.sort(listeArticleStock, new ArticleStockComparator()); List<MouvementStock> result = new ArrayList<>(); result.addAll(entity.getListeMouvementStock()); if (StringUtils.isNotBlank(texteRechercheHistorique) || StringUtils.isNotBlank(observationRecherche)) { for (MouvementStock mouvementStock : entity.getListeMouvementStock()) { if (StringUtils.isNotBlank(texteRechercheHistorique)) { if (!mouvementStock.getReference().contains(texteRechercheHistorique)) { result.remove(mouvementStock); } } if (StringUtils.isNotBlank(observationRecherche)) { if (mouvementStock.getObservation() == null || !AppockUtil.majusculeSansAccentTrim(mouvementStock.getObservation()) .contains(observationRecherche)) { result.remove(mouvementStock); } } } } setListeMouvementStock(result); } protected void creeSortieStock(String referentAchatOuService) { if (CollectionUtils.isEmpty(selectedListeArticleStock)) { Messagebox.show( "Vous devez slectionner un article dans la liste avant de pouvoir effectuer une sortie de stock", "Erreur", Messagebox.OK, Messagebox.ERROR); return; } Map<String, Object> args = new HashMap<>(); args.put("selectedListeArticleStock", selectedListeArticleStock); args.put("referentAchatOuService", referentAchatOuService); Executions.createComponents("/layout/createSortieStockPopup.zul", null, args); } protected void creeMultipleNouvelleSortieStock(List<EntreeSortieStock> listeSortieStock) { listeSortieStock.forEach(sortieStock -> { // On rcupre la dernire version de ArticleStock mis jour par les itrations prcdentes Stock stock = stockService.findOne(sortieStock.getArticleStock().getStock().getId()); Optional<ArticleStock> optionalArticleStock = stock.getListeArticleStock().stream() .filter(a -> a.getId().equals(sortieStock.getArticleStock().getId())).findFirst(); optionalArticleStock.ifPresent(articleStock -> creeNouvelleSortieStock(articleStock, sortieStock.getQuantiteASortir(), sortieStock.getObservation())); }); } protected void creeNouvelleSortieStock(ArticleStock articleStock, Integer quantiteRenseigne, String observation) { if (articleStock.getQuantiteStock() - quantiteRenseigne < 0) { Messagebox.show( // "Vous ne pouvez pas sortir du stock une quantit suprieure celle que vous avez en stock", // articleStock.getLibelleCourt() + " : Sortie refuse", // Messagebox.OK, Messagebox.ERROR); return; } if (articleStock.getQuantiteStock() - quantiteRenseigne == 0) { Messagebox.show( // "Confirmez-vous que vous n'avez plus l'article (" + articleStock.getLibelleCourt() + ") en stock ?", // "Confirmation", // new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.NO }, // Messagebox.QUESTION, evt -> { if (evt.getName().equals("onYes")) { creeEntreeSortieGeneric(articleStock, quantiteRenseigne, observation, TypeMouvementStock.SORTIE); } }); } else { creeEntreeSortieGeneric(articleStock, quantiteRenseigne, observation, TypeMouvementStock.SORTIE); } } protected void creeEntreeSortieGeneric(List<EntreeSortieStock> listeEntreeStock, TypeMouvementStock typeMouvementStock) { listeEntreeStock.forEach(entreeStock -> { // On rcupre la dernire version de ArticleStock mis jour par les itrations prcdentes Stock stock = stockService.findOne(entreeStock.getArticleStock().getStock().getId()); Optional<ArticleStock> optionalArticleStock = stock.getListeArticleStock().stream() .filter(a -> a.getId().equals(entreeStock.getArticleStock().getId())).findFirst(); optionalArticleStock.ifPresent(articleStock -> creeEntreeSortieGeneric(articleStock, entreeStock.getQuantiteASortir(), entreeStock.getObservation(), typeMouvementStock)); }); } protected void creeEntreeSortieGeneric(ArticleStock articleStock, Integer quantiteRenseigne, String observation, TypeMouvementStock typeMouvementStock) { if (articleStock == null || quantiteRenseigne == null) { return; } stockService.creeEntreeSortieEtMouvement(articleStock, quantiteRenseigne, typeMouvementStock, observation); refreshListeArticleStock(); // #45172 : Pas d'appel rechargeOngletMonStock() pour ne pas perdre le texte de la recherche BindUtils.postNotifyChange(null, null, this, "*"); } @Command @NotifyChange("*") public void rechercheHistorique() { refreshListeArticleStock(); } @Command @NotifyChange("*") public void videRechercheHistorique() { setTexteRechercheHistorique(null); setObservationRecherche(null); refreshListeArticleStock(); } public String getDateDernierInventaireAsString() { if (entity == null) { return null; } return DateUtil.formatDateTime(entity.getDateDernierInventaire()); } public String getDateDerniereDemandeInventaireAsString() { if (entity == null) { return null; } return DateUtil.formatDateTime(entity.getDateDerniereDemandeInventaire()); } public String getInventaireUser() { if (entity == null) { return null; } return entity.getInventaireUser(); } public String getInventaireDemandeUser() { if (entity == null) { return null; } return entity.getInventaireDemandeUser(); } }