nc.noumea.mairie.appock.entity.Demande.java Source code

Java tutorial

Introduction

Here is the source code for nc.noumea.mairie.appock.entity.Demande.java

Source

package nc.noumea.mairie.appock.entity;

/*-
 * #%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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import org.apache.commons.collections4.CollectionUtils;

import nc.noumea.mairie.appock.comparator.ArticleDemandeComparator;
import nc.noumea.mairie.appock.core.entity.AbstractEntity;
import nc.noumea.mairie.appock.core.utility.AppockUtil;
import nc.noumea.mairie.appock.core.utility.DateUtil;
import nc.noumea.mairie.appock.enums.EtatDemande;

/**
 * Modlise une demande d'approvisionnement.
 * 
 * @author AgileSoft.NC
 */
@Entity
public class Demande extends AbstractEntity {
    private static final long serialVersionUID = 1L;

    @Version
    private Integer version;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "s_demande")
    @SequenceGenerator(name = "s_demande", sequenceName = "s_demande", allocationSize = 1)
    Long id;

    @ManyToOne
    private Service service;

    @Column
    @NotNull
    LocalDateTime dateCreation = LocalDateTime.now();

    @Column
    LocalDateTime dateTransmission;

    @Column
    LocalDateTime dateTraitement;

    @Column(length = 200)
    String createUser;

    @Column(length = 200)
    String transmetUser;

    @Column(length = 20)
    String transmetLogin;

    @Column(length = 200)
    String traitementUser;

    @Column(length = 200)
    @NotNull
    String numero;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "commande")
    private Commande commande;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "demande", orphanRemoval = true)
    @OrderBy("id")
    List<ArticleDemande> listeArticleDemande = new ArrayList<>();

    @Enumerated(EnumType.ORDINAL)
    @NotNull(message = "L'tat de la demande est obligatoire")
    private EtatDemande etatDemande = EtatDemande.CREE;

    @Override
    public Long getId() {
        return id;
    }

    @Override
    public Integer getVersion() {
        return this.version;
    }

    @Override
    public String getLibelleCourt() {
        return this.numero;
    }

    public Service getService() {
        return service;
    }

    public void setService(Service service) {
        this.service = service;
    }

    /**
     * @return la liste des articles qui composent cette demande (tris par libell d'article)
     */
    public List<ArticleDemande> getListeArticleDemande() {
        Collections.sort(listeArticleDemande, new ArticleDemandeComparator());
        return listeArticleDemande;
    }

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

    /**
     * @return la date de cration de la demande
     */
    public LocalDateTime getDateCreation() {
        return dateCreation;
    }

    public void setDateCreation(LocalDateTime dateCreation) {
        this.dateCreation = dateCreation;
    }

    /**
     * @return la personne qui a cr la demande
     */
    public String getCreateUser() {
        return createUser;
    }

    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }

    /**
     * @return la commande associe  cette demande
     */
    public Commande getCommande() {
        return commande;
    }

    public void setCommande(Commande commande) {
        this.commande = commande;
    }

    /**
     * Supprime un article de la demande
     * @param articleDemande article  supprimer de la demande
     */
    public void removeArticleDemande(ArticleDemande articleDemande) {
        articleDemande.setDemande(null);
        listeArticleDemande.remove(articleDemande);
    }

    /**
     * @return la date de cration au format String
     */
    public String getDateCreationAsString() {
        return DateUtil.formatDateTime(dateCreation);
    }

    /**
     * @return la date de transmission de la demande au format String
     */
    public String getDateTransmissionAsString() {
        return DateUtil.formatDateTime(dateTransmission);
    }

    /**
     * @return la date de traitement de la demande au format String
     */
    public String getDateTraitementAsString() {
        return DateUtil.formatDateTime(dateTraitement);
    }

    /**
     * @return le numro de la demande (auto-gnr)
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @return le numro court de la demande (sans le prefixe du ple-direction-service)
     */
    public String getNumeroCourt() {
        return numero != null ? numero.substring(
                numero.lastIndexOf(service.getLibelleCourt()) + service.getLibelleCourt().length() + 1,
                numero.length()) : null;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return l'tat de la demande
     */
    public EtatDemande getEtatDemande() {
        return etatDemande;
    }

    public void setEtatDemande(EtatDemande etatDemande) {
        this.etatDemande = etatDemande;
    }

    public boolean isEtatDemandeCree() {
        return etatDemande == EtatDemande.CREE;
    }

    public boolean isEtatDemandeEnAttenteTraitement() {
        return etatDemande == EtatDemande.EN_ATTENTE_TRAITEMENT;
    }

    public boolean isEtatDemandeTraite() {
        return etatDemande == EtatDemande.TRAITE;
    }

    /**
     * @return la date  laquelle la demande a t transmise par le rfrent service au service achat
     */
    public LocalDateTime getDateTransmission() {
        return dateTransmission;
    }

    public void setDateTransmission(LocalDateTime dateTransmission) {
        this.dateTransmission = dateTransmission;
    }

    /**
     * @return la personne qui a transmis la demande
     */
    public String getTransmetUser() {
        return transmetUser;
    }

    public void setTransmetUser(String transmetUser) {
        this.transmetUser = transmetUser;
    }

    /**
     * @return la personne qui a trait la demande ct rfrent achat
     */
    public String getTraitementUser() {
        return traitementUser;
    }

    public void setTraitementUser(String traitementUser) {
        this.traitementUser = traitementUser;
    }

    /**
     * @return la date de traitement
     */
    public LocalDateTime getDateTraitement() {
        return dateTraitement;
    }

    public void setDateTraitement(LocalDateTime dateTraitement) {
        this.dateTraitement = dateTraitement;
    }

    /**
     * @return le login de l'utilisateur qui a transmis la demande
     */
    public String getTransmetLogin() {
        return transmetLogin;
    }

    public void setTransmetLogin(String transmetLogin) {
        this.transmetLogin = transmetLogin;
    }

    /**
     * @return le prix total de la demande
     */
    public int getPrixTotal() {
        int result = 0;

        for (ArticleDemande articleDemande : listeArticleDemande) {
            result += articleDemande.getTotalPrixCommande();
        }

        return result;
    }

    /**
     * @return le prix total de la demande au format CFP
     */
    public String getPrixTotalFormatCfp() {
        return AppockUtil.representationCfp(getPrixTotal());
    }

    /**
     * @return le prix total de la commande (qui additionne uniquement tous les articles qui ont t valids et pas ceux qui ont t rejets)
     */
    public int getPrixTotalCommande() {
        int result = 0;

        for (ArticleDemande articleDemande : listeArticleDemande) {
            if (articleDemande.isValide()) {
                result += articleDemande.getTotalPrixCommande();
            }
        }

        return result;
    }

    /**
     * @return le prix total de la commande au format CFP(qui additionne uniquement tous les articles qui ont t valids et pas ceux qui ont t rejets)
     */
    public String getPrixTotalCommandeFormatCfp() {
        return AppockUtil.representationCfp(getPrixTotalCommande());
    }

    /**
     * @return l'avancement du traitement de la demande
     */
    public int getAvancementTraitement() {
        double i = 0;
        for (ArticleDemande articleDemande : listeArticleDemande) {
            if (articleDemande.getEtatArticleDemande() != null) {
                i++;
            }
        }

        if (CollectionUtils.isEmpty(listeArticleDemande)) {
            return 0;
        }

        return AppockUtil.arrondiDizaine(i / listeArticleDemande.size());
    }

    /**
     * @return l'image qui correspond au pourcentage d'avancement
     */
    public String getAvancementTraitementIconCss() {
        return "/imgs/progress/" + getAvancementTraitement() + "_pourcent.png";
    }

    public boolean isEtatTraiteOuSuperieur() {
        return etatDemande != EtatDemande.CREE && etatDemande != EtatDemande.EN_ATTENTE_TRAITEMENT;
    }

    /**
     * Recherche un articleDemande li  cet articleCatalogue
     * @param articleCatalogue Article du catalogue
     * @return articleDemande trouv, null si non trouv
     */
    public ArticleDemande findArticleDemande(ArticleCatalogue articleCatalogue) {
        return this.listeArticleDemande.stream()
                .filter(articleDemande -> articleDemande.getArticleCatalogue().equals(articleCatalogue)).findFirst()
                .get();
    }
}