nc.noumea.mairie.appock.viewmodel.PanierViewModel.java Source code

Java tutorial

Introduction

Here is the source code for nc.noumea.mairie.appock.viewmodel.PanierViewModel.java

Source

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 java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.zkoss.bind.annotation.*;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.Selectors;
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.ListModelList;
import org.zkoss.zul.Messagebox;

import nc.noumea.mairie.appock.controller.MainController;
import nc.noumea.mairie.appock.core.utility.AppockUtil;
import nc.noumea.mairie.appock.core.viewmodel.AbstractViewModel;
import nc.noumea.mairie.appock.entity.ArticlePanier;
import nc.noumea.mairie.appock.entity.Demande;
import nc.noumea.mairie.appock.entity.Panier;
import nc.noumea.mairie.appock.repositories.ArticlePanierRepository;
import nc.noumea.mairie.appock.repositories.PanierRepository;
import nc.noumea.mairie.appock.services.CatalogueService;
import nc.noumea.mairie.appock.services.DemandeService;
import nc.noumea.mairie.appock.services.PanierService;
import nc.noumea.mairie.appock.services.StockService;

@VariableResolver(DelegatingVariableResolver.class)
public class PanierViewModel extends AbstractViewModel<Panier> implements Serializable {
    private static final long serialVersionUID = 1L;

    @WireVariable
    CatalogueService catalogueService;

    @WireVariable
    PanierService panierService;

    @WireVariable
    PanierRepository panierRepository;

    @WireVariable
    ArticlePanierRepository articlePanierRepository;

    @WireVariable
    DemandeService demandeService;

    @WireVariable
    StockService stockService;

    private String texteRecherche;

    private ListModelList<ArticlePanier> listeArticlePanier;

    private ListModelList<ArticlePanier> selectedListeArticlePanier;

    public ListModelList<ArticlePanier> getListeArticlePanier() {
        return listeArticlePanier;
    }

    public void setListeArticlePanier(ListModelList<ArticlePanier> listeArticlePanier) {
        this.listeArticlePanier = listeArticlePanier;
        this.listeArticlePanier.setMultiple(true);
    }

    public ListModelList<ArticlePanier> getSelectedListeArticlePanier() {
        return selectedListeArticlePanier;
    }

    public void setSelectedListeArticlePanier(ListModelList<ArticlePanier> selectedListeArticlePanier) {
        this.selectedListeArticlePanier = selectedListeArticlePanier;
    }

    public String getTexteRecherche() {
        return texteRecherche;
    }

    public void setTexteRecherche(String texteRecherche) {
        this.texteRecherche = AppockUtil.majusculeSansAccentTrim(texteRecherche);
    }

    @AfterCompose
    public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {
        Selectors.wireComponents(view, this, false);
    }

    @Init(superclass = true)
    public void init() {
        // Cration du panier du service s'il n'existe pas dj
        entity = panierService.findOrCreateByCurrentService();
        List<ArticlePanier> listeArticlePanier = entity.getListeArticlePanier();
        List<ArticlePanier> result = new ArrayList<>();

        for (ArticlePanier articlePanier : listeArticlePanier) {
            if (StringUtils.isNotBlank(texteRecherche)
                    && !articlePanier.getArticleCatalogue().getLibelle().contains(texteRecherche)
                    && !articlePanier.getArticleCatalogue().getReference().contains(texteRecherche)) {
                continue;
            }
            catalogueService.initPhotoSrc(articlePanier.getArticleCatalogue());
            stockService.initArticleQuantiteStockPourService(articlePanier, articlePanier.getPanier().getService());
            result.add(articlePanier);
        }
        setListeArticlePanier(new ListModelList<>(result));
        notifyChange("listeArticlePanier");
    }

    @Command
    public void updateQuantite(@BindingParam("articlePanier") ArticlePanier articlePanier,
            @BindingParam("quantite") Integer quantite) {
        articlePanier = articlePanierRepository.findOne(articlePanier.getId());
        articlePanier.setQuantite(quantite);
        saveLigneEtRefreshLigne(articlePanier, "Quantit mise  jour");
    }

    private void saveLigneEtRefreshLigne(ArticlePanier articlePanier, String messageNotification) {
        int i = 0;
        for (ArticlePanier articlePanierARemplacer : listeArticlePanier) {
            if (articlePanierARemplacer.equals(articlePanier)) {
                articlePanier = articlePanierRepository.save(articlePanier);
                catalogueService.initPhotoSrc(articlePanier.getArticleCatalogue());
                listeArticlePanier.set(i, articlePanier);
                showNotificationStandard(messageNotification);
                break;
            }
            i++;
        }
    }

    @Command
    public void updateObservation(@BindingParam("articlePanier") ArticlePanier articlePanier,
            @BindingParam("observation") String observation) {
        articlePanier = articlePanierRepository.findOne(articlePanier.getId());
        articlePanier.setObservation(observation);
        saveLigneEtRefreshLigne(articlePanier, "Observations mise  jour");
    }

    @Command
    public void removeFromPanier(@BindingParam("articlePanier") ArticlePanier articlePanier) {
        Messagebox.show("tes-vous sr de vouloir retirer cet article de votre panier ?", "Confirmation",
                new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.CANCEL }, Messagebox.QUESTION,
                evt -> {
                    if (evt.getName().equals("onYes")) {
                        entity = panierService.findOne(entity.getId());
                        entity.removeArticlePanier(articlePanier);
                        panierRepository.save(entity);
                        rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER);
                        showNotificationStandard("Article retir du panier");
                    }
                });
    }

    @Command
    public void videPanier() {
        Messagebox.show("tes-vous sr de vouloir retirer tous les articles de votre panier ?", "Confirmation",
                new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.CANCEL }, Messagebox.QUESTION,
                evt -> {
                    if (evt.getName().equals("onYes")) {
                        panierService.videPanier(entity);
                        rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER);
                        showNotificationStandard("Panier vid");
                    }
                });
    }

    @Command
    public void creeDemandeApprovisionnement() {
        if (CollectionUtils.isEmpty(selectedListeArticlePanier)) {
            Messagebox.show(
                    "Vous devez slectionner au moins un article dans le panier pour pouvoir crer une demande d'approvisionnement",
                    "Cration refuse", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }

        Demande demande = demandeService.creeDemandeFromListeArticlePanier(selectedListeArticlePanier);
        if (demande == null) {
            return;
        }

        for (ArticlePanier articlePanier : selectedListeArticlePanier) {
            entity.removeArticlePanier(articlePanier);
        }

        panierRepository.save(entity);
        rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER);
        rechargeOngletListeDemande();
        ouvreOnglet(demande, null);

        showNotificationStandard("Demande " + demande.getNumero() + " cr");
    }

    @Command
    @NotifyChange("*")
    public void recherche() throws IOException {
        setListeArticlePanier(new ListModelList<>(new ArrayList()));
        setSelectedListeArticlePanier(null);
        init();
    }

    @Command
    @NotifyChange("*")
    public void videRecherche() throws IOException {
        setTexteRecherche(null);
        this.recherche();
    }
}