Java tutorial
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(); } }