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

Java tutorial

Introduction

Here is the source code for nc.noumea.mairie.appock.viewmodel.EditDemandeViewModel.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.Serializable;
import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
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.core.viewmodel.AbstractEditViewModel;
import nc.noumea.mairie.appock.entity.ArticleDemande;
import nc.noumea.mairie.appock.entity.Demande;
import nc.noumea.mairie.appock.enums.EtatArticleDemande;
import nc.noumea.mairie.appock.repositories.ArticleDemandeRepository;
import nc.noumea.mairie.appock.repositories.DemandeRepository;
import nc.noumea.mairie.appock.services.CatalogueService;
import nc.noumea.mairie.appock.services.DemandeService;
import nc.noumea.mairie.appock.services.StockService;

@VariableResolver(DelegatingVariableResolver.class)
public class EditDemandeViewModel extends AbstractEditViewModel<Demande> implements Serializable {
    private static final long serialVersionUID = 1L;

    @WireVariable
    CatalogueService catalogueService;

    @WireVariable
    ArticleDemandeRepository articleDemandeRepository;

    @WireVariable
    DemandeRepository demandeRepository;

    @WireVariable
    DemandeService demandeService;

    @WireVariable
    StockService stockService;

    private ListModelList<ArticleDemande> listeArticleDemande;

    public ListModelList<ArticleDemande> getListeArticleDemande() {
        return listeArticleDemande;
    }

    public void setListeArticleDemande(ListModelList<ArticleDemande> listeArticleDemande) {
        this.listeArticleDemande = listeArticleDemande;
    }

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

    @Init(superclass = true)
    public void init() {
        List<ArticleDemande> listeArticleDemande = entity.getListeArticleDemande();
        for (ArticleDemande articleDemande : listeArticleDemande) {
            if (articleDemande.getEtatArticleDemande() == EtatArticleDemande.REJETE) {
                articleDemande.setQuantiteCommande(0);
            }
            catalogueService.initPhotoSrc(articleDemande.getArticleCatalogue());
            if (entity.isEtatDemandeCree()) {
                // on ajoute la quantit en stock dans le dtail d'une demande  l'tat 'Cre'
                stockService.initArticleQuantiteStockPourService(articleDemande,
                        articleDemande.getDemande().getService());
            }
        }
        setListeArticleDemande(new ListModelList<>(listeArticleDemande));
    }

    @Command
    public void updateQuantite(@BindingParam("articleDemande") ArticleDemande articleDemande,
            @BindingParam("quantite") Integer quantite) {
        articleDemande.setQuantite(quantite);

        int i = 0;
        for (ArticleDemande articleDemandeARemplacer : listeArticleDemande) {
            if (articleDemandeARemplacer.equals(articleDemande)) {
                articleDemande.setQuantiteCommande(articleDemande.getQuantite());
                articleDemande = articleDemandeRepository.save(articleDemande);
                catalogueService.initPhotoSrc(articleDemande.getArticleCatalogue());
                listeArticleDemande.set(i, articleDemande);
                showNotificationStandard("Quantit mise  jour");
                break;
            }
            i++;
        }
    }

    @Command
    public void transmetDemande() {
        if (CollectionUtils.isEmpty(entity.getListeArticleDemande())) {
            Messagebox.show(
                    "Vous ne pouvez pas transmettre une demande qui ne contient pas d'articles. Vous devez annuler cette demande.",
                    "Tranmsission impossible", Messagebox.OK, Messagebox.ERROR);
            return;
        }
        Messagebox.show("Voulez-vous transmettre cette demande pour traitement  la section achat ?",
                "Transmettre la demande", new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.NO },
                Messagebox.QUESTION, evt -> {
                    if (evt.getName().equals("onYes")) {
                        entity = demandeRepository.findOne(entity.getId());
                        demandeService.transmetDemande(entity);
                        rechargeOnglet();
                        rechargeOngletListeDemande();
                        rechargeOngletListeReferentAchat();
                        notifyChange("entity");
                        showNotificationStandard("Demande transmise");
                    }
                });
    }

    @Command
    public void removeFromDemande(@BindingParam("articleDemande") ArticleDemande articleDemande) {
        Messagebox.show("tes-vous sr de vouloir retirer cet article de votre demande ?", "Confirmation",
                new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.CANCEL }, Messagebox.QUESTION,
                evt -> {
                    if (evt.getName().equals("onYes")) {
                        entity = demandeService.findOne(entity.getId());
                        entity.removeArticleDemande(articleDemande);
                        demandeRepository.save(entity);
                        rechargeOnglet();
                        rechargeOngletListeDemande();
                        rechargeOngletListeReferentAchat();
                        notifyChange("entity");
                        showNotificationStandard("Article retir de la demande");
                    }
                });
    }
}