All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.evasion.entity.Partenaire Maven / Gradle / Ivy

There is a newer version: 2.0.0.2
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.evasion.entity;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
 * Classe représentant un partenariat entre une personne morale
 * et le détenteur du site.
 * @author sebastien
 */
@Entity
@NamedQueries({
    @NamedQuery(name = Partenaire.FIND_ALL_ACTIF,
    query = "SELECT p FROM Partenaire p WHERE "
    + "p.type <> com.evasion.entity.Partenaire.Type.aValider "
    + "OR p.dateFin < CURRENT_DATE "),
    @NamedQuery(name = Partenaire.FIND_ALL,
    query = "SELECT b FROM Partenaire b"),
    @NamedQuery(name = Partenaire.POTENTIAL_PARTENAIRE,
    query = "SELECT c FROM Corporation c "
    + "WHERE c.id NOT IN ("
    + "SELECT p.person.id FROM Partenaire p "
    + "WHERE p.type <> com.evasion.entity.Partenaire.Type.permanent "
    + "OR p.dateFin < CURRENT_DATE )")})
@Table(name = "Partenaires")
public class Partenaire implements Serializable {
    /***
     * serialVersionUID.
     */
    private static final long serialVersionUID = 1L;
    public static final String FIND_ALL_ACTIF = "FIND_ALL_ACTIF";

    public static final String FIND_ALL = "FIND_ALL";

    public static final String POTENTIAL_PARTENAIRE = "CORPO_NOT_PARTENAIRE";

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    private Corporation person;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateEnregistrement;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateDebut;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateFin;

    public enum Etat {

        aVenir,
        actif,
        inactif;
    }

    @Transient
    private Etat etat;

    public enum Type {

        aValider,
        temporaire,
        permanent;

        public static List listValues() {
            Type[] types = Type.values();
            return Arrays.asList(types);
        }

        ;

        String toString;

        Type(String toString) {
            this.toString = toString;
        }

        Type() {
        }

        @Override
        public String toString() {
            return ((toString != null) ? toString : super.toString());
        }
    }

    @Enumerated(EnumType.STRING)
    private Type type;

    public Partenaire() {
    }

    public Partenaire(Date dateEnregistrement) {
        this.dateEnregistrement = dateEnregistrement;
    }
    
    @PrePersist
    private void initDateEnregistrement() {
        if (dateEnregistrement == null) {
            dateEnregistrement = new Date();
        }
    }

    public Date getDateDebut() {
        return dateDebut;
    }

    public void setDateDebut(Date dateDebut) {
        this.dateDebut = dateDebut;
    }

    public Date getDateFin() {
        return dateFin;
    }

    public void setDateFin(Date dateFin) {
        this.dateFin = dateFin;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Corporation getPerson() {
        return person;
    }

    public void setPerson(Corporation person) {
        this.person = person;
    }

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }

    public Date getDateEnregistrement() {
        if (dateEnregistrement == null) {
            this.initDateEnregistrement();
        }
        return dateEnregistrement;
    }

    /**
     * Définit l'état du partenaire.
     * Si son type est permanent alors il est à l'état actif;
     * Si la date de début est inférieur à la date du jour alors, l'état est à venir;
     * Si la date de fin est supérieur à la date du jour alors, l'état est innactif;
     * @return
     */
    public Etat getEtat() {
        final Date actuelle = new Date();
        if (dateDebut == null || actuelle.before(dateDebut)) {
            etat = Etat.aVenir;
        } else if (actuelle.after(dateDebut) && (type == Type.permanent || actuelle.before(dateFin))) {
            etat = Etat.actif;
        } else {
            etat = Etat.inactif;
        }

        return etat;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public boolean equals(final Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Partenaire)) {
            return false;
        }
        Partenaire rhs = (Partenaire) obj;
        return new EqualsBuilder().append(this.person, rhs.person).append(this.dateEnregistrement, rhs.dateEnregistrement).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37).append(this.person).append(this.dateEnregistrement).toHashCode();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy