package com.axxx.dps.apv.model;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.IndexColumn;
import com.axxx.dps.apv.persistence.GenericEntity;
@Entity
@Table(name = "apv_projet")
@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "hibernate_sequence")
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Projet extends GenericEntity<Projet> {
private static final long serialVersionUID = 2661251735222689510L;
@ManyToOne(optional=false)
private Tdr tdr;
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
// no mappedBy because this is the master side of the relation and has join & index
@JoinColumn(name = "benefs_list_id")
@IndexColumn(name = "benefs_list_index") // indexed list
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private List<Benef> benefs; // OPT
private String status; // TODO enum ?? ; created,( approved,) published (i.e. it's taken into account when computing numbers of its tdr)
private String typeLieu; // enum Mer, Montagne, Campagne
private Integer departement; // number TODO validation ; integer ?!
private Integer periode; // month number TODO validation ; integer ?!
// TODO add fields : take enough meaningful ones from reporting SQL (look for "ejou"), including those required by PrecomptePartenaire & Pivotal (aggregated in Client, Information_APV, OPT ContactClient)
// duree, typelieu, pays, departement, region, periode, vacancesscolaires, transport, distance, hebergement, hebergementautre, formule, dominantesportive) FROM stdin;
// 7 Mer countries.France departements.PyreneesAtlantiques regions.Aquitaine months.february hors vacances scolaires [Train,modes de déplacement doux (marche à pied, vélo)] 800 Hôtel demi-pension Non
// 10 Mer countries.France departements.Finistere regions.Bretagne months.may hors vacances scolaires [autocar, modes de déplacement doux (marche à pied, vélo)] 250 colonies de vacances Pension complète Non
// p_preparation : dureepreparation, objectif, nbseancespreparation, modalitespreparation, actions
// 7 [Equilibre, Bien-être, Renforcement des liens sociaux] 3 individuelle [Actions d'autofinancement]
// 90 [Découverte, Renforcement des liens sociaux] 3 collective [Ateliers]
// 60 [Contenu éducatif] 3 collective [Actions d'autofinancement]
// 4 [Santé, Accéder aux vacances, Découverte, Renforcement des liens sociaux] 3 les deux [Actions d'autofinancement]
// NB. no accompagnateurs / aidants
// benefs
// nbbeneficiaires, couttotal, montantapv, coutparjourparpersonne, montantapvparjourparpersonne, partapvfinancement
// 35 220 60 0.62857145 0.17142858 27.272728
// 1 383 180 95.75 45 46.997391
// aduisos
// nb, couttotal, montantapv, coutparjourparpersonne, montantapvparjourparpersonne, partapvfinancement
// 0...
//
@OneToOne(cascade=CascadeType.ALL, /*mappedBy="projet",*/ orphanRemoval=true, fetch=FetchType.EAGER)
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Benefs totalBenefs; // OPT computed from other xxxBenefs here
@OneToOne(cascade=CascadeType.ALL, /*mappedBy="projet",*/ orphanRemoval=true, fetch=FetchType.EAGER)
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Benefs enfantsBenefs; // for Information_APV (Nombre), Client (Nb_Benef_N, Montant_Utilise_N)
@OneToOne(cascade=CascadeType.ALL, /*mappedBy="projet",*/ orphanRemoval=true, fetch=FetchType.EAGER)
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Benefs jeunesBenefs; // for Information_APV (Nombre), Client (Nb_Benef_N, Montant_Utilise_N)
@OneToOne(cascade=CascadeType.ALL, /*mappedBy="projet",*/ orphanRemoval=true, fetch=FetchType.EAGER)
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Benefs adultesIsolesBenefs; // for Information_APV (Nombre), Client (Nb_Benef_N, Montant_Utilise_N)
@OneToOne(cascade=CascadeType.ALL, /*mappedBy="projet",*/ orphanRemoval=true, fetch=FetchType.EAGER)
//@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Benefs seniorsBenefs; // for Information_APV (Nombre), Client (Nb_Benef_N, Montant_Utilise_N)
// enfants
//...
//...
// adresse, ville, cp, age, sexe, zonehabitation, territoirepolitiqueville, statutsocial, typeressources, montantmensuelressources, typelogement, dernierdepart, personnemalade, montantapv, coutparjour, montantapvparjour, partapvfinancement
// 5 rue des cordiers st malo 35400 12 M Zone urbaine Non Elève [Salaire, Allocations familiales] de 501 à 1000 € Logement autonome de 1 à 3 ans Non 60 22 6 27.272728
// enfants_l___coutsfinancement
// couttotal, financementtotal
// 220 220
// enfants_l___coutsfinancement_couts
// couttransport, couthebergement, coutrestauration, coutloisirs, coutautres
// 0 0 0 0 220
// 66 50 80.660004 16.67 0
// enfants_l_in_sources
// apvaxxx, caf, msa, conseilregional, conseilgeneral, communeintercommunalite, organismepdp, autofinancement, financeurprive, autre
// 60 0 0 0 0 60 0 100 0 0
// familles ???!!
// seniors
// jeunes
// apressejour
// actionsbilan, actionsbilanautre, impact, impactautre, textelibretdr
// [Entretien individuel, réunion collective] [santé et bien-être, renforcement de savoir-être et de savoir-faire, autonomie,Impacts en termes de renforcement des liens sociaux]
// NB. pdp ?? (blocadmin ? utilisateurs ??)
public Tdr getTdr() {
return tdr;
}
public void setTdr(Tdr tdr) {
this.tdr = tdr;
}
public List<Benef> getBenefs() {
return benefs;
}
public void setBenefs(List<Benef> benefs) {
this.benefs = benefs;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTypeLieu() {
return typeLieu;
}
public void setTypeLieu(String typeLieu) {
this.typeLieu = typeLieu;
}
/**
* @return the departement
*/
public Integer getDepartement() {
return departement;
}
/**
* @param departement the departement to set
*/
public void setDepartement(Integer departement) {
this.departement = departement;
}
/**
* @return the periode
*/
public Integer getPeriode() {
return periode;
}
/**
* @param periode the periode to set
*/
public void setPeriode(Integer periode) {
this.periode = periode;
}
public Benefs getEnfantsBenefs() {
return enfantsBenefs;
}
public void setEnfantsBenefs(Benefs enfantsBenefs) {
this.enfantsBenefs = enfantsBenefs;
computeTotalBenef();
}
public Benefs getJeunesBenefs() {
return jeunesBenefs;
}
public void setJeunesBenefs(Benefs jeunesBenefs) {
this.jeunesBenefs = jeunesBenefs;
computeTotalBenef();
}
public Benefs getAdultesIsolesBenefs() {
return adultesIsolesBenefs;
}
public void setAdultesIsolesBenefs(Benefs adultesIsolesBenefs) {
this.adultesIsolesBenefs = adultesIsolesBenefs;
computeTotalBenef();
}
public Benefs getSeniorsBenefs() {
return seniorsBenefs;
}
public void setSeniorsBenefs(Benefs seniorsBenefs) {
this.seniorsBenefs = seniorsBenefs;
computeTotalBenef();
}
public Benefs getTotalBenefs() {
return totalBenefs;
}
public void setTotalBenefs(Benefs totalBenefs) {
this.totalBenefs = totalBenefs;
}
public void computeTotalBenef(){
if(this.totalBenefs == null){
this.totalBenefs = new Benefs();
}
if (this.getEnfantsBenefs() == null || this.getJeunesBenefs() == null
|| this.getAdultesIsolesBenefs() == null || this.getSeniorsBenefs() == null) {
// not inited, abort
return;
}
this.totalBenefs.setMontantApv(this.getEnfantsBenefs().getMontantApv()
+ this.getJeunesBenefs().getMontantApv()
+ this.getAdultesIsolesBenefs().getMontantApv()
+ this.getSeniorsBenefs().getMontantApv());
this.totalBenefs.setNbBeneficiaires(this.getEnfantsBenefs().getNbBeneficiaires()
+ this.getJeunesBenefs().getNbBeneficiaires()
+ this.getAdultesIsolesBenefs().getNbBeneficiaires()
+ this.getSeniorsBenefs().getNbBeneficiaires());
}
}