Skip to content

Commit

Permalink
Piano Economico: bug e controllo modifiche impegni residui propri
Browse files Browse the repository at this point in the history
  • Loading branch information
raffaelepagano committed Jan 21, 2019
1 parent ec99184 commit 44789e3
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 81 deletions.
@@ -1,6 +1,7 @@
package it.cnr.contab.config00.latt.bulk;

import java.rmi.RemoteException;
import java.util.List;

import javax.ejb.EJBException;

Expand All @@ -10,6 +11,8 @@
import it.cnr.contab.config00.sto.bulk.DipartimentoBulk;
import it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome;
import it.cnr.contab.consultazioni.bulk.ConsultazioniRestHome;
import it.cnr.contab.progettiric00.core.bulk.ProgettoBulk;
import it.cnr.contab.progettiric00.core.bulk.ProgettoHome;
import it.cnr.contab.progettiric00.core.bulk.Progetto_sipBulk;
import it.cnr.contab.progettiric00.core.bulk.Progetto_sipHome;
import it.cnr.contab.utenze00.bp.CNRUserContext;
Expand All @@ -19,6 +22,7 @@
import it.cnr.jada.bulk.BusyResourceException;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.OutdatedResourceException;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.ObjectNotFoundException;
Expand Down Expand Up @@ -222,4 +226,30 @@ private CdrBulk cdrFromUserContext(UserContext userContext) throws ComponentExce
throw new ComponentException(e);
}
}

public WorkpackageBulk searchGAECompleta(UserContext userContext, Integer pEsercizio, String pCdr, String pCdLineaAttivita ) throws ComponentException {
try {
WorkpackageHome lattHome = (WorkpackageHome)getHomeCache().getHome(WorkpackageBulk.class, "V_LINEA_ATTIVITA_VALIDA");
SQLBuilder sql = lattHome.createSQLBuilder();

sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.ESERCIZIO",SQLBuilder.EQUALS,pEsercizio);
sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.CD_CENTRO_RESPONSABILITA",SQLBuilder.EQUALS,pCdr);
sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.CD_LINEA_ATTIVITA",SQLBuilder.EQUALS,pCdLineaAttivita);

List<WorkpackageBulk> list = lattHome.fetchAll(sql);
if (!list.isEmpty()) {
if (list.size()>1)
throw new ApplicationException("Errore in fase di ricerca linea_attivita.");
WorkpackageBulk linea = list.get(0);
ProgettoHome home = (ProgettoHome)getHomeCache().getHome(ProgettoBulk.class);
home.setFetchPolicy("it.cnr.contab.progettiric00.comp.ProgettoRicercaComponent.find");
home.findByPrimaryKey(userContext, linea.getProgetto());
getHomeCache().fetchAll(userContext);
return linea;
}
return null;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw new ComponentException(e);
}
}
}
Expand Up @@ -19,6 +19,7 @@
import it.cnr.contab.config00.esercizio.bulk.Esercizio_baseHome;
import it.cnr.contab.config00.latt.bulk.CostantiTi_gestione;
import it.cnr.contab.config00.latt.bulk.WorkpackageBulk;
import it.cnr.contab.config00.latt.bulk.WorkpackageHome;
import it.cnr.contab.config00.pdcfin.bulk.Ass_evold_evnewBulk;
import it.cnr.contab.config00.pdcfin.bulk.Ass_evold_evnewHome;
import it.cnr.contab.config00.pdcfin.bulk.Elemento_voceBulk;
Expand Down Expand Up @@ -1662,42 +1663,28 @@ private void validaCdrLineaVoce(UserContext userContext, ObbligazioneBulk obblig
}

if (Utility.createParametriEnteComponentSession().isProgettoPianoEconomicoEnabled(userContext, CNRUserContext.getEsercizio(userContext))) {
BulkHome lattHome = getHome(userContext, WorkpackageBulk.class, "V_LINEA_ATTIVITA_VALIDA");
SQLBuilder sql = lattHome.createSQLBuilder();

sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.ESERCIZIO",SQLBuilder.EQUALS,CNRUserContext.getEsercizio(userContext));
sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.CD_CENTRO_RESPONSABILITA",SQLBuilder.EQUALS,cdr);
sql.addSQLClause(FindClause.AND,"V_LINEA_ATTIVITA_VALIDA.CD_LINEA_ATTIVITA",SQLBuilder.EQUALS,latt);

List<WorkpackageBulk> list = lattHome.fetchAll(sql);
if (!list.isEmpty()) {
if (list.size()>1)
throw new ApplicationException("Errore in fase di ricerca linea_attivita.");
WorkpackageBulk linea = list.get(0);
ProgettoHome home = (ProgettoHome)getHome(userContext, ProgettoBulk.class);
home.setFetchPolicy("it.cnr.contab.progettiric00.comp.ProgettoRicercaComponent.find");
ProgettoBulk progetto = (ProgettoBulk)home.findByPrimaryKey(userContext, linea.getProgetto());
getHomeCache(userContext).fetchAll(userContext);
WorkpackageBulk linea = ((WorkpackageHome)getHome(userContext, WorkpackageBulk.class))
.searchGAECompleta(userContext,CNRUserContext.getEsercizio(userContext), cdr, latt);
ProgettoBulk progetto = linea.getProgetto();
Optional.ofNullable(progetto.getOtherField())
.filter(el->el.isStatoApprovato()||el.isStatoChiuso())
.orElseThrow(()->new ApplicationException("Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "Il progetto associato "+progetto.getCd_progetto()+" non risulta in stato Approvato o Chiuso."));
if (progetto.isDatePianoEconomicoRequired()) {
Optional.ofNullable(progetto.getOtherField().getDtInizio())
.filter(dt->!dt.after(obbligazione.getDt_registrazione()))
.orElseThrow(()->new ApplicationException("Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "La data inizio ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(progetto.getOtherField().getDtInizio())
+ ") del progetto "+progetto.getCd_progetto()+" associato è successiva "
+ "rispetto alla data di registrazione dell'impegno ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+")."));
}
Optional.ofNullable(
Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(Optional.ofNullable(progetto.getOtherField().getDtFine()).orElse(DateUtils.firstDateOfTheYear(3000))))
.filter(dt->!dt.before(obbligazione.getDt_registrazione()))
.orElseThrow(()->new ApplicationException("Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "La data fine/proroga ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(progetto.getOtherField().getDtFine()))
+ ") del progetto "+progetto.getCd_progetto()+" associato è precedente "
+ "rispetto alla data di registrazione dell'impegno ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+")."));
if (progetto.isDatePianoEconomicoRequired()) {
Optional.ofNullable(progetto.getOtherField().getDtInizio())
.filter(dt->!dt.after(obbligazione.getDt_registrazione()))
.orElseThrow(()->new ApplicationException("Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "La data inizio ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(progetto.getOtherField().getDtInizio())
+ ") del progetto "+progetto.getCd_progetto()+" associato è successiva "
+ "rispetto alla data di registrazione dell'impegno ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+")."));
}
Optional.ofNullable(
Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(Optional.ofNullable(progetto.getOtherField().getDtFine()).orElse(DateUtils.firstDateOfTheYear(3000))))
.filter(dt->!dt.before(obbligazione.getDt_registrazione()))
.orElseThrow(()->new ApplicationException("Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "La data fine/proroga ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(progetto.getOtherField().getDtFine()))
+ ") del progetto "+progetto.getCd_progetto()+" associato è precedente "
+ "rispetto alla data di registrazione dell'impegno ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+")."));
}
} catch ( Exception e )
{
Expand Down
Expand Up @@ -9,6 +9,8 @@
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrHome;
import it.cnr.contab.config00.bulk.Parametri_cdsBulk;
import it.cnr.contab.config00.latt.bulk.WorkpackageBulk;
import it.cnr.contab.config00.latt.bulk.WorkpackageHome;
import it.cnr.contab.doccont00.core.bulk.Mandato_rigaBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneHome;
Expand All @@ -27,6 +29,9 @@
import it.cnr.contab.doccont00.core.bulk.V_doc_passivo_obbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.V_obbligazione_im_mandatoBulk;
import it.cnr.contab.pdg00.bulk.Pdg_variazioneBulk;
import it.cnr.contab.progettiric00.core.bulk.ProgettoBulk;
import it.cnr.contab.progettiric00.core.bulk.ProgettoHome;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.util.Utility;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.BulkList;
Expand All @@ -37,11 +42,14 @@
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.sql.SQLBuilder;
import it.cnr.jada.util.DateUtils;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;

/**
* @author rpagano
Expand Down Expand Up @@ -134,55 +142,6 @@ private ObbligazioneBulk calcolaPercentualeImputazioneObbligazione (UserContext

boolean cdsModObblResImporto = isCdsModObblResImporto(aUC, obbligazione.getCd_cds());

/*
// calcolo le percentuali di imputazione finanziaria per le linee di attivita da pdg
// 100 - percentuali specificate x linee att non da PDG
try {
ObbligazioneHome obbligHome = (ObbligazioneHome)getHome(aUC, ObbligazioneBulk.class);
Obbligazione_scadenzarioHome obbligScadHome = (Obbligazione_scadenzarioHome)getHome(aUC, Obbligazione_scadenzarioBulk.class);
ObbligazioneBulk obbligDB = (ObbligazioneBulk)obbligHome.findObbligazione(obbligazione);
obbligDB.setObbligazione_scadenzarioColl(new BulkList(obbligHome.findObbligazione_scadenzarioList(obbligDB)));
for ( Iterator i = obbligDB.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
Obbligazione_scadenzarioBulk obbligScadDB = (Obbligazione_scadenzarioBulk) i.next();
obbligScadDB.setObbligazione_scad_voceColl( new BulkList( obbligScadHome.findObbligazione_scad_voceList( obbligScadDB )));
}
getHomeCache(aUC).fetchAll();
PrimaryKeyHashtable prcImputazioneFinanziariaTable = new PrimaryKeyHashtable();
for ( Iterator s = obbligDB.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) s.next();
for ( Iterator d = os.getObbligazione_scad_voceColl().iterator(); d.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) d.next();
// totale per Cdr e per scadenza
key = new Obbligazione_scad_voceBulk(osv.getCd_cds(),
osv.getCd_centro_responsabilita(),
osv.getCd_linea_attivita(),
osv.getCd_voce(),
osv.getEsercizio(),
osv.getEsercizio_originale(),
osv.getPg_obbligazione(),
new Long(1),
osv.getTi_appartenenza(),
osv.getTi_gestione());
totaleScad = (BigDecimal) prcImputazioneFinanziariaTable.get( key );
if ( totaleScad == null || totaleScad.compareTo(new BigDecimal(0)) == 0)
prcImputazioneFinanziariaTable.put( key, osv.getIm_voce());
else
{
totaleScad = totaleScad.add( osv.getIm_voce());
prcImputazioneFinanziariaTable.put( key, totaleScad );
}
}
}
*/

// recupero le percentuali di imputazione finanziaria per le linee di attivita da pdg
// 100 - percentuali specificate x linee att non da PDG
PrimaryKeyHashtable prcImputazioneFinanziariaTable = getOldRipartizioneCdrVoceLinea(aUC, obbligazione);
Expand Down Expand Up @@ -263,6 +222,29 @@ private ObbligazioneBulk calcolaPercentualeImputazioneObbligazione (UserContext
}

if (totaleScad.compareTo((BigDecimal) prcImputazioneFinanziariaTable.get( key ))!=0) {
WorkpackageBulk latt = ((WorkpackageHome)getHome(aUC, WorkpackageBulk.class)).searchGAECompleta(aUC,CNRUserContext.getEsercizio(aUC),
key.getCd_centro_responsabilita(), key.getCd_linea_attivita());
ProgettoBulk progetto = latt.getProgetto();
Optional.ofNullable(progetto.getOtherField())
.filter(el->el.isStatoApprovato()||el.isStatoChiuso())
.orElseThrow(()->new ApplicationException("Attenzione! Modifica importo GAE "+latt.getCd_linea_attivita()+" non consentito. "
+ "Il progetto associato "+progetto.getCd_progetto()+" non risulta in stato Approvato o Chiuso."));
if (progetto.isDatePianoEconomicoRequired()) {
Optional.ofNullable(progetto.getOtherField().getDtInizio())
.filter(dt->!dt.after(obbligazione.getDt_registrazione()))
.orElseThrow(()->new ApplicationException("Attenzione! Modifica importo GAE "+latt.getCd_linea_attivita()+" non consentito. "
+ "La data inizio ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(progetto.getOtherField().getDtInizio())
+ ") del progetto "+progetto.getCd_progetto()+" associato è successiva "
+ "rispetto alla data odierna."));
}
Optional.ofNullable(
Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(Optional.ofNullable(progetto.getOtherField().getDtFine()).orElse(DateUtils.firstDateOfTheYear(3000))))
.filter(dt->!dt.before(DateUtils.truncate(it.cnr.jada.util.ejb.EJBCommonServices.getServerTimestamp())))
.orElseThrow(()->new ApplicationException("Attenzione! Modifica importo GAE "+latt.getCd_linea_attivita()+" non consentito. "
+ "La data fine/proroga ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(progetto.getOtherField().getDtFine()))
+ ") del progetto "+progetto.getCd_progetto()+" associato è precedente "
+ "rispetto alla data odierna."));

if ( !obbligazione.getFl_calcolo_automatico().booleanValue() ) {
String errore = "L'importo (" +
new it.cnr.contab.util.EuroFormat().format(totaleScad) +
Expand Down
Expand Up @@ -2011,7 +2011,7 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var
.filter(Pdg_variazioneBulk.class::isInstance)
.map(Pdg_variazioneBulk.class::cast)
.map(Pdg_variazioneBulk::getDt_chiusura)
.orElse(Optional.of(variazione)
.orElseGet(()->Optional.of(variazione)
.filter(Var_stanz_resBulk.class::isInstance)
.map(Var_stanz_resBulk.class::cast)
.map(Var_stanz_resBulk::getDt_chiusura)
Expand Down

0 comments on commit 44789e3

Please sign in to comment.