/* * Copyright (C) 2012 AXIA Studio (http://www.axiastudio.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.axiastudio.suite.deliberedetermine.entities; import com.axiastudio.pypapi.Register; import com.axiastudio.pypapi.db.Controller; import com.axiastudio.pypapi.db.Database; import com.axiastudio.pypapi.db.IDatabase; import com.axiastudio.suite.SuiteUtil; import com.axiastudio.suite.base.entities.Ufficio; import com.axiastudio.suite.base.entities.Utente; import com.axiastudio.suite.deliberedetermine.DeterminaListener; import com.axiastudio.suite.finanziaria.entities.Progetto; import com.axiastudio.suite.finanziaria.entities.Servizio; import com.axiastudio.suite.pratiche.IAtto; import com.axiastudio.suite.pratiche.IDettaglio; import com.axiastudio.suite.pratiche.entities.Fase; import com.axiastudio.suite.pratiche.entities.Pratica; import com.axiastudio.suite.pratiche.entities.Visto; import com.axiastudio.suite.procedimenti.entities.CodiceCarica; import com.axiastudio.suite.protocollo.IProtocollabile; import com.axiastudio.suite.protocollo.entities.Protocollo; import com.axiastudio.suite.protocollo.entities.UfficioProtocollo; import javax.persistence.*; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import java.io.Serializable; import java.util.Collection; import java.util.Date; import java.util.List; /** * * @author AXIA Studio (http://www.axiastudio.com) */ @Entity @EntityListeners({DeterminaListener.class}) @Table(schema="deliberedetermine") @SequenceGenerator(name="gendetermina", sequenceName="deliberedetermine.determina_id_seq", initialValue=1, allocationSize=1) @NamedQuery(name="inAttesaDiVistoDiBilancio", query = "SELECT d FROM Determina d JOIN d.pratica p JOIN p.fasePraticaCollection fp " + "WHERE fp.attiva = true AND fp.fase.id = :idfase") public class Determina implements Serializable, IDettaglio, IProtocollabile, IAtto { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="gendetermina") private Long id; @JoinColumn(name = "idpratica", referencedColumnName = "idpratica") @ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}) private Pratica pratica; @Column(name="codiceinterno", unique=true) private String codiceinterno; @Column(name="oggetto", length=2048) private String oggetto; @OneToMany(mappedBy = "determina", orphanRemoval = true, cascade=CascadeType.ALL) private Collection<ServizioDetermina> servizioDeterminaCollection; @OneToMany(mappedBy = "determina", orphanRemoval = true, cascade=CascadeType.ALL) private Collection<MovimentoDetermina> movimentoDeterminaCollection; @OneToMany(mappedBy = "determina", orphanRemoval = true, cascade=CascadeType.ALL) private Collection<SpesaImpegnoEsistente> spesaImpegnoEsistenteCollection; @OneToMany(mappedBy = "determina", orphanRemoval = true, cascade=CascadeType.ALL) private Collection<UfficioDetermina> ufficioDeterminaCollection; @Column(name="dispesa") private Boolean dispesa=Boolean.FALSE; @Column(name="spesaimpegnoesistente") private Boolean spesaimpegnoesistente =Boolean.FALSE; @Column(name="dientrata") private Boolean diEntrata=Boolean.FALSE; @Column(name="diregolarizzazione") private Boolean diRegolarizzazione=Boolean.FALSE; @Column(name="diliquidazione") private Boolean diLiquidazione=Boolean.FALSE; @Column(name="diincarico") private Boolean diIncarico=Boolean.FALSE; @Column(name="referentepolitico") private String referentePolitico; @JoinColumn(name = "responsabile", referencedColumnName = "id") @ManyToOne private Utente responsabile; @Column(name="anno") private Integer anno; @Column(name="numero") private Integer numero; @Column(name="data") @Temporal(javax.persistence.TemporalType.DATE) private Date data; /* protocollo */ @JoinColumn(name = "protocollo", referencedColumnName = "iddocumento") @ManyToOne private Protocollo protocollo; @Enumerated(EnumType.STRING) private TipoPubblicazione pubblicabile=TipoPubblicazione.PUBBLICABILE; @Column(name="pluriennale") private Boolean pluriennale=Boolean.FALSE; @Column(name="finoadanno") private Integer finoAdAnno; @JoinColumn(name = "progetto", referencedColumnName = "id") @ManyToOne private Progetto progetto; /* timestamped */ @Column(name="rec_creato", insertable=false, updatable=false, columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP") @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date recordcreato; @Column(name="rec_creato_da") private String recordcreatoda; @Column(name="rec_modificato") @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date recordmodificato; @Column(name="rec_modificato_da") private String recordmodificatoda; public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public Pratica getPratica() { return pratica; } @Override public void setPratica(Pratica pratica) { this.pratica = pratica; } @Override public String getIdpratica() { if( this.pratica != null ){ return pratica.getIdpratica(); } return null; } @Override public void setIdpratica(String idpratica) { // NOP } @Override public String getCodiceinterno() { return codiceinterno; } @Override public void setCodiceinterno(String codiceinterno) { this.codiceinterno = codiceinterno; } @Override public Servizio getServizio() { Collection<ServizioDetermina> serviziDetermina = getServizioDeterminaCollection(); for( ServizioDetermina servizioDetermina: getServizioDeterminaCollection() ){ if( servizioDetermina.getPrincipale() ){ return servizioDetermina.getServizio(); } } return null; } @Override public Ufficio getUfficio() { Servizio servizio = getServizio(); if( servizio != null ){ return servizio.getUfficio(); } return null; } @Override public String getOggetto() { return oggetto; } @Override public void setOggetto(String oggetto) { this.oggetto = oggetto; } public Date getDatapratica() { if( this.pratica != null ){ return pratica.getDatapratica(); } return null; } public void setDatapratica(Date datapratica) { // NOP } public Collection<ServizioDetermina> getServizioDeterminaCollection() { return servizioDeterminaCollection; } public void setServizioDeterminaCollection(Collection<ServizioDetermina> servizioDeterminaCollection) { this.servizioDeterminaCollection = servizioDeterminaCollection; } public Collection<MovimentoDetermina> getMovimentoDeterminaCollection() { return movimentoDeterminaCollection; } public void setMovimentoDeterminaCollection(Collection<MovimentoDetermina> movimentoDeterminaCollection) { this.movimentoDeterminaCollection = movimentoDeterminaCollection; } public Collection<SpesaImpegnoEsistente> getSpesaImpegnoEsistenteCollection() { return spesaImpegnoEsistenteCollection; } public void setSpesaImpegnoEsistenteCollection(Collection<SpesaImpegnoEsistente> spesaImpegnoEsistenteCollection) { this.spesaImpegnoEsistenteCollection = spesaImpegnoEsistenteCollection; } public Collection<UfficioDetermina> getUfficioDeterminaCollection() { return ufficioDeterminaCollection; } public void setUfficioDeterminaCollection(Collection<UfficioDetermina> ufficioDeterminaCollection) { this.ufficioDeterminaCollection = ufficioDeterminaCollection; } public Boolean getDispesa() { return dispesa; } public void setDispesa(Boolean dispesa) { this.dispesa = dispesa; } public Boolean getSpesaimpegnoesistente() { return spesaimpegnoesistente; } public void setSpesaimpegnoesistente(Boolean spesaprecedenteimpegno) { this.spesaimpegnoesistente = spesaprecedenteimpegno; } public Boolean getDiEntrata() { return diEntrata; } public void setDiEntrata(Boolean diEntrata) { this.diEntrata = diEntrata; } public Boolean getDiRegolarizzazione() { return diRegolarizzazione; } public void setDiRegolarizzazione(Boolean diRegolarizzazione) { this.diRegolarizzazione = diRegolarizzazione; } public Boolean getDiLiquidazione() { return diLiquidazione; } public void setDiLiquidazione(Boolean diLiquidazione) { this.diLiquidazione = diLiquidazione; } public Boolean getDiIncarico() { return diIncarico; } public void setDiIncarico(Boolean diIncarico) { this.diIncarico = diIncarico; } public String getReferentePolitico() { return referentePolitico; } public void setReferentePolitico(String referentePolitico) { this.referentePolitico = referentePolitico; } public Integer getAnno() { return anno; } public void setAnno(Integer anno) { this.anno = anno; } public Integer getNumero() { return numero; } public void setNumero(Integer numero) { this.numero = numero; } public Date getData() { return data; } public void setData(Date data) { this.data = data; } public Protocollo getProtocollo() { return protocollo; } public void setProtocollo(Protocollo protocollo) { this.protocollo = protocollo; } public Utente getResponsabile() { return responsabile; } public void setResponsabile(Utente responsabile) { this.responsabile = responsabile; } public TipoPubblicazione getPubblicabile() { return pubblicabile; } public void setPubblicabile(TipoPubblicazione pubblicabile) { this.pubblicabile = pubblicabile; } public Boolean getPluriennale() { return pluriennale; } public void setPluriennale(Boolean pluriennale) { this.pluriennale = pluriennale; } public Integer getFinoAdAnno() { return finoAdAnno; } public void setFinoAdAnno(Integer finoAdAnno) { this.finoAdAnno = finoAdAnno; } public Progetto getProgetto() { return progetto; } public void setProgetto(Progetto progetto) { this.progetto = progetto; } public String getServizioPrincipale() { if (getServizio() != null) { return getServizio().getDescrizione(); } return null; } public void setServizioPrincipale(String servizioPrincipale) { // NOP } public String getFirma() { String firma = " RESPONSABILE DEL SERVIZIO DI BILANCIO\n"; Visto vistoResp = this.getVisto("FASE_VISTO_RESPONSABILE"); if( vistoResp != null ){ if( vistoResp.getUtente().equals(vistoResp.getResponsabile()) ){ firma = "IL" + firma; } else { firma = "PER TEMPORANEA ASSENZA DEL" + firma; } } if ( this.getProtocollo() != null && this.getProtocollo().getUfficioProtocolloCollection() != null ) { UfficioProtocollo ufficio = (UfficioProtocollo) this.getProtocollo().getUfficioProtocolloCollection().iterator().next(); firma += ufficio.getUfficio().getDenominazione() +"\n"; } else { firma += "[ufficio]\n"; } if ( vistoResp != null && vistoResp.getCodiceCarica() != null ) { if ( vistoResp.getCodiceCarica().equals(CodiceCarica.RESPONSABILE_DI_SERVIZIO) && ! vistoResp.getUtente().equals(vistoResp.getResponsabile()) ) { firma += "IL FUNZIONARIO INCARICATO\n"; } else if ( vistoResp.getCodiceCarica().equals(CodiceCarica.SEGRETARIO) ) { firma += "IL SEGRETARIO GENERALE\n"; } else if ( vistoResp.getCodiceCarica().equals(CodiceCarica.VICE_SEGRETARIO) ) { firma += "IL VICESEGRETARIO GENERALE\n"; } firma += vistoResp.getUtente(); } return firma; } public void setFirma(String firma) { // NOP } private Visto getVisto(String tipoVisto) { if( this.getPratica() != null ){ Database db = (Database) Register.queryUtility(IDatabase.class); Long idFaseVisto = Long.parseLong(SuiteUtil.trovaCostante(tipoVisto).getValore()); Controller controller = db.createController(Fase.class); Fase fase = (Fase)controller.get(idFaseVisto); EntityManager em = db.getEntityManagerFactory().createEntityManager(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Visto> cq = cb.createQuery(Visto.class); Root<Visto> root = cq.from(Visto.class); cq.select(root); cq.where(cb.and(cb.equal(root.get("pratica"), this.getPratica()), cb.equal(root.get("fase"), fase), cb.equal(root.get("negato"), false))); cq.orderBy(cb.desc(root.get("data"))); TypedQuery<Visto> tq = em.createQuery(cq); List<Visto> resultList = tq.getResultList(); if( resultList.size()>0 ){ return resultList.get(0); } } return null; } public Visto getVistoResponsabile() { return getVisto("FASE_VISTO_RESPONSABILE"); } public void setVistoResponsabile(Visto visto){ } public Visto getVistoBilancio() { return getVisto("FASE_VISTO_BILANCIO"); } public void setVistoBilancio(Visto visto){ } public Visto getVistoBilancioNegato() { return getVisto("FASE_VISTO_BILANCIO_NEGATO"); } public void setVistoBilancioNegato(Visto visto){ } public Date getRecordcreato() { return recordcreato; } public void setRecordcreato(Date recordcreato) { this.recordcreato = recordcreato; } public String getRecordcreatoda() { return recordcreatoda; } public void setRecordcreatoda(String recordcreatoda) { this.recordcreatoda = recordcreatoda; } public Date getRecordmodificato() { return recordmodificato; } public void setRecordmodificato(Date recordmodificato) { this.recordmodificato = recordmodificato; } public String getRecordmodificatoda() { return recordmodificatoda; } public void setRecordmodificatoda(String recordmodificatoda) { this.recordmodificatoda = recordmodificatoda; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Determina)) { return false; } Determina other = (Determina) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.axiastudio.suite.deliberedetermine.entities.Determina[ id=" + id + " ]"; } }