it.cnr.contab.doccont00.comp.ObbligazioneComponent Maven / Gradle / Ivy
/*
* Copyright (C) 2019 Consiglio Nazionale delle Ricerche
*
* 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 .
*/
package it.cnr.contab.doccont00.comp;
import java.io.Serializable;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Vector;
import javax.ejb.EJBException;
import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.AnagraficoHome;
import it.cnr.contab.anagraf00.core.bulk.Anagrafico_terzoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoHome;
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.bulk.Parametri_cdsBulk;
import it.cnr.contab.config00.bulk.Parametri_cdsHome;
import it.cnr.contab.config00.bulk.Parametri_cnrBulk;
import it.cnr.contab.config00.bulk.Parametri_cnrHome;
import it.cnr.contab.config00.contratto.bulk.Ass_contratto_uoBulk;
import it.cnr.contab.config00.contratto.bulk.ContrattoBulk;
import it.cnr.contab.config00.contratto.bulk.ContrattoHome;
import it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession;
import it.cnr.contab.config00.esercizio.bulk.EsercizioBulk;
import it.cnr.contab.config00.esercizio.bulk.Esercizio_baseBulk;
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;
import it.cnr.contab.config00.pdcfin.bulk.Elemento_voceHome;
import it.cnr.contab.config00.pdcfin.bulk.FunzioneBulk;
import it.cnr.contab.config00.pdcfin.bulk.IVoceBilancioBulk;
import it.cnr.contab.config00.pdcfin.bulk.NaturaBulk;
import it.cnr.contab.config00.pdcfin.bulk.Voce_fBulk;
import it.cnr.contab.config00.pdcfin.cla.bulk.Classificazione_vociBulk;
import it.cnr.contab.config00.sto.bulk.CdrBulk;
import it.cnr.contab.config00.sto.bulk.CdsBulk;
import it.cnr.contab.config00.sto.bulk.CdsHome;
import it.cnr.contab.config00.sto.bulk.EnteBulk;
import it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaHome;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativa_enteBulk;
import it.cnr.contab.config00.sto.bulk.V_struttura_organizzativaBulk;
import it.cnr.contab.doccont00.core.DatiFinanziariScadenzeDTO;
import it.cnr.contab.doccont00.core.bulk.IDocumentoContabileBulk;
import it.cnr.contab.doccont00.core.bulk.IScadenzaDocumentoContabileBulk;
import it.cnr.contab.doccont00.core.bulk.Linea_attivitaBulk;
import it.cnr.contab.doccont00.core.bulk.MandatoIBulk;
import it.cnr.contab.doccont00.core.bulk.Mandato_rigaBulk;
import it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk;
import it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contHome;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneHome;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneOrdBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneResBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneRes_impropriaBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_mod_voceBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_mod_voceHome;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_mod_voceKey;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_modificaBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_modificaHome;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_modificaKey;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scad_voceBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioHome;
import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.doccont00.core.bulk.ReversaleBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_obb_doc_ammBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_obbligazioni_LAVBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_obbligazioni_riportabiliVBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_registro_annotazione_spese_pgiroBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_registro_obbligazioniBulk;
import it.cnr.contab.doccont00.core.bulk.Stampa_scadenzario_obbligazioniBulk;
import it.cnr.contab.doccont00.core.bulk.V_doc_passivo_obbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.V_mod_saldi_obbligBulk;
import it.cnr.contab.doccont00.core.bulk.V_mod_saldi_obbligHome;
import it.cnr.contab.doccont00.core.bulk.V_mod_saldi_obblig_scad_voceBulk;
import it.cnr.contab.doccont00.core.bulk.V_mod_saldi_obblig_scad_voceHome;
import it.cnr.contab.doccont00.core.bulk.V_obblig_pdg_saldo_laBulk;
import it.cnr.contab.doccont00.core.bulk.V_obbligazione_im_mandatoBulk;
import it.cnr.contab.doccont00.core.bulk.V_pdg_obbligazione_speBulk;
import it.cnr.contab.doccont00.ejb.SaldoComponentSession;
import it.cnr.contab.incarichi00.bulk.Ass_incarico_uoBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorioBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorioHome;
import it.cnr.contab.pdg00.bulk.Pdg_preventivo_spe_detBulk;
import it.cnr.contab.pdg01.bulk.Pdg_modulo_spese_gestBulk;
import it.cnr.contab.prevent00.bulk.*;
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.utenze00.bulk.UtenteBulk;
import it.cnr.contab.util.ApplicationMessageFormatException;
import it.cnr.contab.util.Utility;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.BulkHome;
import it.cnr.jada.bulk.BulkList;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.PrimaryKeyHashMap;
import it.cnr.jada.bulk.PrimaryKeyHashtable;
import it.cnr.jada.bulk.ValidationException;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ApplicationRuntimeException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.comp.ICRUDMgr;
import it.cnr.jada.comp.IPrintMgr;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.ObjectNotFoundException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.sql.CompoundFindClause;
import it.cnr.jada.persistency.sql.FindClause;
import it.cnr.jada.persistency.sql.LoggableStatement;
import it.cnr.jada.persistency.sql.PersistentHome;
import it.cnr.jada.persistency.sql.Query;
import it.cnr.jada.persistency.sql.SQLBroker;
import it.cnr.jada.persistency.sql.SQLBuilder;
import it.cnr.jada.util.DateUtils;
import it.cnr.jada.util.ejb.EJBCommonServices;
/* Gestisce documenti di tipo
OBB - bilancio Cds
*/
public class ObbligazioneComponent extends it.cnr.jada.comp.CRUDComponent implements IDocumentoContabileMgr,IObbligazioneMgr, ICRUDMgr, IPrintMgr, Cloneable,Serializable
{
private final static int INSERIMENTO = 1;
private final static int MODIFICA = 2;
private final static int CANCELLAZIONE = 3;
//@@<< CONSTRUCTORCST
public ObbligazioneComponent()
{
//>>
//<< CONSTRUCTORCSTL
/*Default constructor*/
//>>
//<< CONSTRUCTORCSTT
}
private Vector accorpaLineeAttivita (UserContext aUC,Vector lineeAttivita) throws ComponentException
{
try
{
Vector newLineeAttivita = new Vector();
HashMap hm = new HashMap();
V_pdg_obbligazione_speBulk latt, stessaLatt;
String key;
for ( Iterator i = lineeAttivita.iterator(); i.hasNext(); )
{
latt = (V_pdg_obbligazione_speBulk) i.next();
key = latt.getEsercizio().toString() + '-' + latt.getCd_centro_responsabilita() + '-' + latt.getCd_linea_attivita();
stessaLatt = (V_pdg_obbligazione_speBulk) hm.get( key );
if ( stessaLatt == null )
hm.put( key, latt );
else
{
/* anno 1 */
stessaLatt.setIm_rj_ccs_spese_odc_altra_uo( stessaLatt.getIm_rj_ccs_spese_odc_altra_uo().add( latt.getIm_rj_ccs_spese_odc_altra_uo()));
stessaLatt.setIm_rl_ccs_spese_ogc_altra_uo( stessaLatt.getIm_rl_ccs_spese_ogc_altra_uo().add( latt.getIm_rl_ccs_spese_ogc_altra_uo()));
stessaLatt.setIm_rr_ssc_costi_odc_altra_uo( stessaLatt.getIm_rr_ssc_costi_odc_altra_uo().add( latt.getIm_rr_ssc_costi_odc_altra_uo()));
stessaLatt.setIm_rt_ssc_costi_ogc_altra_uo( stessaLatt.getIm_rt_ssc_costi_ogc_altra_uo().add( latt.getIm_rt_ssc_costi_ogc_altra_uo()));
/* anno 2 */
stessaLatt.setIm_rad_a2_spese_odc_altra_uo( stessaLatt.getIm_rad_a2_spese_odc_altra_uo().add(latt.getIm_rad_a2_spese_odc_altra_uo()));
stessaLatt.setIm_raf_a2_spese_ogc_altra_uo( stessaLatt.getIm_raf_a2_spese_ogc_altra_uo().add(latt.getIm_raf_a2_spese_ogc_altra_uo()));
/* anno 3 */
stessaLatt.setIm_ram_a3_spese_odc_altra_uo( stessaLatt.getIm_ram_a3_spese_odc_altra_uo().add( latt.getIm_ram_a3_spese_odc_altra_uo()));
stessaLatt.setIm_rao_a3_spese_ogc_altra_uo( stessaLatt.getIm_rao_a3_spese_ogc_altra_uo().add( latt.getIm_rao_a3_spese_ogc_altra_uo()));
hm.put( key, stessaLatt );
}
}
for ( Iterator i = hm.values().iterator(); i.hasNext(); )
newLineeAttivita.add( i.next());
return newLineeAttivita;
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* creazione/modifica/eliminazione obbligazione con esercizio competenza diverso da esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata creata/modificata/eliminata e l'esercizio di competenza dell'obbligazione
* e' maggiore dell'esercizio di scrivania.
* PostCondition:
* Nessun aggiornamento viene effettuato
* creazione obbligazione con esercizio competenza = esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata creata e l'esercizio di competenza dell'obbligazione
* e' uguale all'esercizio di scrivania dell'esercizio di scrivania.
* PostCondition:
* Viene chiamato il metodo 'aggiornaSaldiInInserimento' che, per ogni voce del piano utilizzata nell'obbligazione calcola
* gli importi degli aggiornamenti da apportare ai saldi e viene richiamato il metodo sulla Component di Gestione Saldi (SaldoComponent) che
* effettua tale aggiornamento
* modifica/eliminazione obbligazione con esercizio competenza = esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata modificata/eliminata e l'esercizio di competenza dell'obbligazione
* e' uguale all'esercizio di scrivania dell'esercizio di scrivania.
* PostCondition:
* Viene chiamato il metodo 'aggiornaSaldiInModifica' che, per ogni voce del piano utilizzata nell'obbligazione calcola
* gli importi degli aggiornamenti da apportare ai saldi e viene richiamato il metodo sulla Component di Gestione Saldi (SaldoComponent) che
* effettua tale aggiornamento
* @param userContext lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per la quale devono essere aggiornati i saldi relativi ai capitoli di spesa
* @param azione indica l'azione effettuata sull'obbligazione e puo' assumere i valori INSERIMENTO, MODIFICA, CANCELLAZIONE
*
*/
private void aggiornaCapitoloSaldoObbligazione (UserContext userContext,ObbligazioneBulk obbligazione, int azione) throws ComponentException
{
try
{
// non si aggiornano i saldi di obbligazioni con esercizio di competenza diverso da esercizio di creazione
if ( obbligazione.getEsercizio().compareTo( obbligazione.getEsercizio_competenza()) != 0 )
return;
if ( azione == INSERIMENTO )
aggiornaSaldiInInserimento( userContext, obbligazione, Boolean.TRUE );
else if ( azione == MODIFICA )
aggiornaSaldiInModifica( userContext,
obbligazione,
obbligazione.getPg_ver_rec(),
Boolean.TRUE );
else if ( azione == CANCELLAZIONE )
aggiornaSaldiInModifica( userContext,
obbligazione,
new Long(obbligazione.getPg_ver_rec().longValue() + 1),
Boolean.TRUE);
/*
SaldoComponentSession session = createSaldoComponentSession();
PrimaryKeyHashMap saldoVociMap = calcolaVociMapPerObbligazione( userContext, obbligazione );
Voce_fBulk voce;
BigDecimal im_voce;
for ( Iterator i = saldoVociMap.keySet().iterator(); i.hasNext(); )
{
voce = (Voce_fBulk) i.next();
im_voce = (BigDecimal) saldoVociMap.get( voce );
if ( im_voce.compareTo( new BigDecimal(0) ) != 0 )
session.aggiornaObbligazioniAccertamenti( userContext, voce, obbligazione.getCd_cds(), im_voce );
}
*/
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* aggiornaCogeCoanInDifferita method comment.
*/
public void aggiornaCogeCoanInDifferita(it.cnr.jada.UserContext userContext, it.cnr.contab.doccont00.core.bulk.IDocumentoContabileBulk docContabile, java.util.Map values) throws it.cnr.jada.comp.ComponentException {
try
{
if ( docContabile instanceof ObbligazioneBulk )
{
ObbligazioneBulk obbligazione = (ObbligazioneBulk) docContabile;
Long pg_ver_rec = (Long) values.get("pg_ver_rec");
if ( pg_ver_rec == null )
throw new ApplicationException( "Aggiornamento in differita dello stato coge/coan dei documenti contabili impossibile (pg_ver_rec nullo)");
if ( obbligazione.getPg_obbligazione().longValue() >= 0 ) //accertamento non temporaneo
callDoRiprocObb(userContext, obbligazione, pg_ver_rec );
}
}
catch ( Exception e )
{
throw handleException(e);
}
}
/**
* Aggiornamento in differita dei saldi dell'obbligazione .
* Un documento amministrativo di spesa che agisce in modalità transazionale ha creato/modificato gli importi
* relativi ad un'obbligazione; i saldi di tale obbligazione non possono essere aggiornati subito in quanto
* tale operazione genererebbe dei lock sulle voci del piano che non ne consentirebbere l'utilizzo ad altri utenti;
* pertanto l'aggiornamento dei saldi dell'obbligazione viene differito al momento del salvataggio
* del documento amministrativo.
*
* Pre-post-conditions:
*
* Nome: Aggiorna saldi per obbligazione creata
* Pre: Una richiesta di aggiornamento dei saldi in differita e' stata generata per una obbligazione su capitoli di
* bilancio che e' stata creata nel contesto transazionale del documento ammninistrativo ( progressivo
* obbligazione < 0)
* Post: I saldi dell'obbligazione sono stati aggiornati nel metodo 'aggiornaSaldiInInserimento'
*
* Nome: Aggiorna saldi per obbligazione esistente
* Pre: Una richiesta di aggiornamento dei saldi in differita e' stata generata per una obbligazione su capitoli di
* bilancio che non e' stata creata nel contesto transazionale del documento ammninistrativo ( progressivo
* obbligazione > 0)
* Post: I saldi dell'obbligazione sono stati aggiornati nel metodo 'aggiornaSaldiInModifica'
*
* @param userContext lo UserContext che ha generato la richiesta
* @param docContabile l'ObbligazioneBulk per cui aggiornare i saldi
* @param values la Map che contiene il "pg_ver_rec" iniziale dell'obbligazione e il "checkDisponibilitaCassaEseguito" che indica se
* l'utente ha richiesto la forzatura della disponibilità di cassa (parametro impostato dalla Gestione Obbligazione)
* @param param il parametro che indica se il controllo della disp. di cassa e' necessario (parametro impostato dalla Gestione dei doc. amm.)
*/
public void aggiornaSaldiInDifferita( UserContext userContext, IDocumentoContabileBulk docContabile, Map values, OptionRequestParameter param ) throws ComponentException
{
try
{
if ( docContabile instanceof ObbligazioneBulk )
{
ObbligazioneBulk obbligazione = (ObbligazioneBulk) docContabile;
Boolean forzaDispCassa = (Boolean) values.get("checkDisponibilitaCassaEseguito");
Boolean isObbTemp = (Boolean) values.get("isObbTemp");
if ( forzaDispCassa == null && param != null )
forzaDispCassa = new Boolean (!param.isCheckDisponibilitaDiCassaRequired().booleanValue());
if ( isObbTemp != null || obbligazione.getPg_obbligazione().longValue() < 0 ) //obbligazione appena inserita
aggiornaSaldiInInserimento( userContext, obbligazione, forzaDispCassa );
else {
/* MI - Modifica effettuata per la risoluzione di una anomalia
* dovuta alla conversione a WAS 5 (???)
*/
Long pg_ver_rec = (Long) values.get("pg_ver_rec");
if ( pg_ver_rec == null )
throw new ApplicationException( "Aggiornamento in differita dei saldi dei documenti contabili impossibile (pg_ver_rec nullo)");
aggiornaSaldiInModifica( userContext, obbligazione, pg_ver_rec, forzaDispCassa );
}
}
}
catch ( Exception e )
{
throw handleException(e);
}
}
/**
*
* Pre-post-conditions:
*
* Nome: Aggiorna saldi in contesto non transazionale
* Pre: Un'obbligazione e' stata creata in un contesto non transazionale
* La disponibilità di cassa e' già stata verificata
* Post: Per ogni Voce del piano presente nell'obbligazione viene richiamato il metodo sulla Component di gestione dei Saldi (SaldoComponent) per incrementare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa.
*
* Nome: Aggiorna saldi in contesto transazionale senza verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata creata in un contesto transazionale
* L'utente ha già confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni Voce del piano presente nell'obbligazione viene richiamato il metodo sulla Component di gestione dei Saldi (SaldoComponent) per incrementare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa.
*
* Nome: Aggiorna saldi in contesto transazionale con verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata creata in un contesto transazionale
* L'utente non ha ancora confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni Voce del piano presente nell'obbligazione viene richiamato il metodo sulla Component di gestione dei Saldi (SaldoComponent) per incrementare
* il saldo del capitolo corrispondente richiedendo di effettuare la verifica della disponibilità di cassa.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param obbligazione l'ObbligazioneBulk per cui aggiornare i saldi
* @param forzaDispCassa il parametro che indica se l'utente ha confermato di forzare il controllo della disp. di cassa
*
*/
private void aggiornaSaldiInInserimento( UserContext userContext, ObbligazioneBulk obbligazione, Boolean forzaDispCassa) throws ComponentException, java.rmi.RemoteException
{
SaldoComponentSession session = createSaldoComponentSession();
PrimaryKeyHashMap saldiDaAggiornare;
try {
saldiDaAggiornare = obbligazione.getVociMap(((Parametri_cnrHome)getHome(userContext, Parametri_cnrBulk.class)).isNuovoPdg(userContext));
} catch (PersistencyException e) {
throw handleException(e);
}
for ( Iterator i = saldiDaAggiornare.keySet().iterator(); i.hasNext(); )
{
IVoceBilancioBulk voce = (IVoceBilancioBulk) i.next();
BigDecimal im_voce = (BigDecimal) saldiDaAggiornare.get(voce);
/* il check della disponabilità di cassa deve essere eseguito solo se
l'utente non ha ancora avuto il warning sulla disp.cassa oppure
l'utente ha avuto il warning sulla disp.cassa e ha risposto no */
boolean checkDispCassa = forzaDispCassa == null ||
forzaDispCassa != null && !forzaDispCassa.booleanValue();
if (voce instanceof Voce_fBulk)
session.aggiornaObbligazioniAccertamenti( userContext, (Voce_fBulk)voce, obbligazione.getCd_cds(), im_voce,
Voce_f_saldi_cmpBulk.TIPO_COMPETENZA,
checkDispCassa);
/*
* Aggiorno i Saldi per CDR/Linea
*/
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
for ( Iterator j = obbligazione.getObbligazione_scadenzarioColl().iterator(); j.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) j.next();
for ( int index = os.getObbligazione_scad_voceColl().size() - 1; index >= 0 ; index--)
{
osv = (Obbligazione_scad_voceBulk) os.getObbligazione_scad_voceColl().get( index );
session.aggiornaObbligazioniAccertamenti( userContext, osv.getCd_centro_responsabilita(), osv.getCd_linea_attivita(), voce, obbligazione.getEsercizio_originale(),obbligazione.isObbligazioneResiduoImproprio()?Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO:Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO,osv.getIm_voce(),obbligazione.getCd_tipo_documento_cont());
}
}
}
checkDispObbligazioniAccertamenti(userContext,obbligazione);
}
/**
*
* Pre-post-conditions:
*
*
* Nome: Aggiorna saldi in contesto non transazionale
* Pre: Un'obbligazione e' stata modificata/eliminata in un contesto non transazionale
* La disponibilità di cassa e' già stata verificata
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa; se necessario
* anche i saldi relativi ai mandati e al pagato vengono aggiornati.
*
* Nome: Aggiorna saldi in contesto transazionale senza verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata modificata in un contesto transazionale
* L'utente ha già confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa
*
* Nome: Aggiorna saldi in contesto transazionale con verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata modificata in un contesto transazionale
* L'utente non ha ancora confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente richiedendo di effettuare la verifica della disponibilità di cassa.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param obbligazione l'ObbligazioneBulk per cui aggiornare i saldi
* @param pg_ver_rec il "pg_ver_rec" iniziale dell'obbligazione
* @param forzaDispCassa il parametro che indica se l'utente ha confermato di forzare il controllo della disp. di cassa e' necessario
*
*/
private void aggiornaSaldiInModifica( UserContext userContext, ObbligazioneBulk obbligazione, Long pg_ver_rec, Boolean forzaDispCassa ) throws it.cnr.jada.persistency.PersistencyException, ComponentException, java.rmi.RemoteException
{
SaldoComponentSession session = createSaldoComponentSession();
/* in realtà siamo sempre a competenza ma è meglio verificare */
String ti_competenza_residuo;
String tipo_imp;
if ( obbligazione.isResiduo() )
ti_competenza_residuo = ReversaleBulk.TIPO_RESIDUO;
else
ti_competenza_residuo = ReversaleBulk.TIPO_COMPETENZA;
List saldiDaAggiornare = ((V_mod_saldi_obbligHome)getHome( userContext, V_mod_saldi_obbligBulk.class )).findModificheSaldiFor( obbligazione, pg_ver_rec );
if ( userContext.isTransactional() && saldiDaAggiornare.size() == 0 )
throw new ApplicationException( "Attenzione! I saldi relativi all'impegno " + obbligazione.getEsercizio_originale() + "/" + obbligazione.getPg_obbligazione() + " non possono essere aggiornati perchè l'impegno non e' presente nello storico.");
for ( Iterator i = saldiDaAggiornare.iterator(); i.hasNext(); )
{
V_mod_saldi_obbligBulk modSaldo = (V_mod_saldi_obbligBulk) i.next();
if ( modSaldo.getIm_delta_voce().compareTo( new BigDecimal(0)) != 0 )
{
Voce_fBulk voce = new Voce_fBulk( modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione() );
/* il check della disponabilità di cassa deve essere eseguito solo se
l'importo delta del saldo e' positivo e
l'utente non ha ancora avuto il warning sulla disp.cassa oppure
l'utente ha avuto il warning sulla disp.cassa e ha risposto no */
boolean checkDispCassa = modSaldo.getIm_delta_voce().compareTo( new BigDecimal(0)) > 0 &&
(forzaDispCassa == null ||
forzaDispCassa != null && !forzaDispCassa.booleanValue());
session.aggiornaObbligazioniAccertamenti( userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_voce(), ti_competenza_residuo, checkDispCassa);
if ( modSaldo.getIm_delta_man_voce().compareTo( new BigDecimal(0) ) != 0 )
session.aggiornaMandatiReversali( userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_man_voce(), ti_competenza_residuo, checkDispCassa);
if ( modSaldo.getIm_delta_pag_voce().compareTo( new BigDecimal(0) ) != 0 )
session.aggiornaPagamentiIncassi( userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_pag_voce(), ti_competenza_residuo);
}
}
/*
* Aggiorno i Saldi per CDR/Linea
*/
List saldiDaAggiornareCdrLinea = ((V_mod_saldi_obblig_scad_voceHome)getHome( userContext, V_mod_saldi_obblig_scad_voceBulk.class )).findModificheSaldiFor( obbligazione, pg_ver_rec );
if ( userContext.isTransactional() && saldiDaAggiornareCdrLinea.size() == 0 )
throw new ApplicationException( "Attenzione! I saldi relativi all'impegno " + obbligazione.getEsercizio_originale() + "/" + obbligazione.getPg_obbligazione() + " non possono essere aggiornati perchè l'impegno non e' presente nello storico.");
for ( Iterator i = saldiDaAggiornareCdrLinea.iterator(); i.hasNext(); )
{
V_mod_saldi_obblig_scad_voceBulk modSaldo = (V_mod_saldi_obblig_scad_voceBulk) i.next();
Voce_fBulk voce = new Voce_fBulk( modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione() );
/* il check della disponabilità di cassa deve essere eseguito solo se
l'importo delta del saldo e' positivo e
l'utente non ha ancora avuto il warning sulla disp.cassa oppure
l'utente ha avuto il warning sulla disp.cassa e ha risposto no */
boolean checkDispCassa = modSaldo.getIm_delta_voce().compareTo( new BigDecimal(0)) > 0 &&
(forzaDispCassa == null ||
forzaDispCassa != null && !forzaDispCassa.booleanValue());
if ( modSaldo.getIm_delta_voce().compareTo( new BigDecimal(0)) != 0 ) {
// nel caso di modifiche agli impegni residui propri
// non deve variare il valore sul campo IM_OBBL_RES_IMP
if (!obbligazione.isObbligazioneResiduo())
session.aggiornaObbligazioniAccertamenti( userContext, modSaldo.getCd_centro_responsabilita(), modSaldo.getCd_linea_attivita(), voce, modSaldo.getEsercizio_originale(),modSaldo.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_OBB_RES_IMPROPRIA)?Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO:Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO,modSaldo.getIm_delta_voce(),modSaldo.getCd_tipo_documento_cont());
}
if ( modSaldo.getIm_delta_man_voce().compareTo( new BigDecimal(0) ) != 0 )
session.aggiornaMandatiReversali( userContext,modSaldo.getCd_centro_responsabilita(),modSaldo.getCd_linea_attivita(),voce,modSaldo.getEsercizio_originale(),modSaldo.getIm_delta_man_voce(),modSaldo.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_OBB_RES_IMPROPRIA)?Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO:Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO,checkDispCassa);
if ( modSaldo.getIm_delta_pag_voce().compareTo( new BigDecimal(0) ) != 0 )
session.aggiornaPagamentiIncassi( userContext,modSaldo.getCd_centro_responsabilita(),modSaldo.getCd_linea_attivita(),voce,modSaldo.getEsercizio_originale(), modSaldo.getIm_delta_pag_voce());
}
// aggiorniamo i saldi legati alle modifiche agli impegni residui
aggiornaSaldiImpegniResiduiPropri(userContext,obbligazione);
if (obbligazione.isObbligazioneResiduo()) {
// aggiorniamo il progressivo in definitivo
Obbligazione_modificaBulk obbMod = ((ObbligazioneResBulk) obbligazione).getObbligazione_modifica();
if (obbMod!=null && obbMod.isTemporaneo()) {
aggiornaObbligazioneModificaTemporanea(userContext, obbMod);
}
}
checkDispObbligazioniAccertamenti(userContext,obbligazione);
}
private void aggiornaSaldiImpegniResiduiPropri (UserContext uc,ObbligazioneBulk obbligazione) throws ComponentException
{
if (obbligazione.isObbligazioneResiduo()) {
ObbligazioneResBulk obbRes = (ObbligazioneResBulk) obbligazione;
Obbligazione_modificaBulk obbMod = obbRes.getObbligazione_modifica();
if (obbMod!=null && obbMod.isTemporaneo()) {
SaldoComponentSession session = createSaldoComponentSession();
try
{
for ( Iterator i = obbMod.getObbligazione_mod_voceColl().iterator(); i.hasNext(); )
{
Obbligazione_mod_voceBulk obbModVoce = (Obbligazione_mod_voceBulk) i.next();
session.aggiornaImpegniResiduiPropri(
uc,
obbModVoce.getCd_centro_responsabilita(),
obbModVoce.getCd_linea_attivita(),
obbModVoce.getVoce(),
obbMod.getObbligazione().getEsercizio_originale(),
obbModVoce.getIm_modifica());
}
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
}
}
private void checkDispObbligazioniAccertamenti(UserContext userContext, ObbligazioneBulk obbligazione) throws ComponentException {
BigDecimal importo = Utility.ZERO;
Obbligazione_scad_voceBulk scad_voceDB;
Parametri_cdsBulk parametri_cds = null;
try{
parametri_cds = (Parametri_cdsBulk)getHome( userContext,Parametri_cdsBulk.class ).findByPrimaryKey(new Parametri_cdsBulk(CNRUserContext.getCd_cds(userContext),CNRUserContext.getEsercizio(userContext)));
}catch(PersistencyException e){
throw new ComponentException(e);
}
String messaggio = "";
if (parametri_cds != null && (parametri_cds.getBlocco_impegni_cdr_gae().equals(Parametri_cdsBulk.BLOCCO_IMPEGNI_ERROR) ||
parametri_cds.getBlocco_impegni_cdr_gae().equals(Parametri_cdsBulk.BLOCCO_IMPEGNI_WARNING))){
try {
SQLBroker broker = getHome(userContext,Obbligazione_scad_voceBulk.class).createBroker(((ObbligazioneHome)getHome( userContext,ObbligazioneBulk.class )).findObbligazione_scad_voceDistinctList(obbligazione));
while(broker.next()){
String cd_voce = (String)broker.fetchPropertyValue("cd_voce",String.class);
String cd_centro_responsabilita = (String)broker.fetchPropertyValue("cd_centro_responsabilita",String.class);
String cd_linea_attivita = (String)broker.fetchPropertyValue("cd_linea_attivita",String.class);
if ((!obbligazione.isCheckDisponibilitaCdrGAEEseguito()||
parametri_cds != null && parametri_cds.getBlocco_impegni_cdr_gae().equals(Parametri_cdsBulk.BLOCCO_IMPEGNI_ERROR))){
Voce_fBulk voce = new Voce_fBulk( cd_voce, obbligazione.getEsercizio(), obbligazione.getTi_appartenenza(), obbligazione.getTi_gestione() );
try {
String mess = createSaldoComponentSession().checkDispObbligazioniAccertamenti(
userContext,
cd_centro_responsabilita,
cd_linea_attivita,
voce,
obbligazione.getEsercizio_originale(),
(obbligazione.isObbligazioneResiduo()||obbligazione.isObbligazioneResiduoImproprio())?Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO:Voce_f_saldi_cdr_lineaBulk.TIPO_COMPETENZA,
parametri_cds.getBlocco_impegni_cdr_gae());
if (parametri_cds != null && mess != null && parametri_cds.getBlocco_impegni_cdr_gae().equals(Parametri_cdsBulk.BLOCCO_IMPEGNI_ERROR))
throw new ApplicationException(mess);
if (mess != null)
messaggio = messaggio + (messaggio.equals("")?"":"
") + mess;
}catch (RemoteException e) {
throw new ComponentException(e);
}
}
}
}catch (IntrospectionException e) {
throw new ComponentException(e);
} catch (PersistencyException e) {
throw new ComponentException(e);
}
}
if (!messaggio.equals("")){
if (parametri_cds != null && parametri_cds.getBlocco_impegni_cdr_gae().equals(Parametri_cdsBulk.BLOCCO_IMPEGNI_WARNING))
throw handleException( new CheckDisponibilitaCdrGAEFailed(messaggio));
}
}
//^^@@
/**
* Tutti controlli superati
* PreCondition:
* scadenza(n+1) esiste
* scadenza(n+1).importo > differenza in scadenza(n).importo
* scadenza(n+1) non ha documenti amministrativi associati
* PostCondition:
* Il sistema eseguirà l'aggiornamento dell'importo della scadenza successiva (n+1) dell'obbligazione aggiungendo la differenza fra il nuovo e vecchio importo della scadenza in aggiornamento.
* La differenza è espressa come (scadenzario(n).importo_nuovo - scadenzario(n).importo_vecchio)
* scadenza(n+1).importo <= differenza in scadenza(n).importo
* PreCondition:
* L'utente richiede l'aggiornamento in automatico dell'importo della scadenza successiva (scadenza(n+1)) alla scadenza in elaborazione (scadenza(n)), ma l'aumento dell'importo della scadenza(n) supera il valore dell'importo dell'ultima scadenza dell'obbligazione. Una formula per questa condizione sarebbe (scadenzario(n+1).importo - (scadenzario(n).importo_nuovo - scadenzario(n).importo_vecchio) > 0)
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'aggiornamento in automatico dell'importo non è possibile perché l'aumento dell'importo della scadenza(n) è maggiore all'importo dell'ultima scadenza (cercarebbe settare l'importo <= 0). L'attività non è consentita.
* scadenza(n+1) non esiste
* PreCondition:
* L'utente richiede l'aggiornamento in automatico dell'importo della scadenza successiva (scadenza(n+1)) alla scadenza in elaborazione (scadenza(n)), ma la scadenza in aggiornamento è l'ultima scadenza dell'obbligazione.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'aggiornamento in automatico dell'importo non è possibile perché non esiste una scadenza successiva. L'attività non è consentita.
* scadenza(n+1) ha doc amministrativi associati
* PreCondition:
* L'utente richiede l'aggiornamento in automatico dell'importo della scadenza successiva (scadenza(n+1))
* alla scadenza in elaborazione (scadenza(n)), ma la scadenza (n+1) ha documenti amministrativi associati
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la modifica della scadenza non è valida.
*
* @param aUC lo user context
* @param scadenzario l'istanza di Obbligazione_scadenzarioBulk della quale deve essere individuata la scadenza successiva per aggiornarne l'importo
* @return la scadenza successiva con l'importo modificato
*/
public Obbligazione_scadenzarioBulk aggiornaScadenzaSuccessivaObbligazione (UserContext aUC,Obbligazione_scadenzarioBulk scadenzario) throws ComponentException
{
ObbligazioneBulk obbligazione = scadenzario.getObbligazione();
Obbligazione_scadenzarioBulk scadSuccessiva, scadSuccessivaIniziale, scadSuccessivaNew;
//individuo la scadenza successiva e calcolo quanto aggiungere/togliere alla scadenza successiva
BigDecimal delta = scadenzario.getScadenza_iniziale().getIm_scadenza().subtract(scadenzario.getIm_scadenza());
int index, scadSuccessivaIndex;
index = scadSuccessivaIndex = 0;
for ( Iterator i = obbligazione.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
if ( ((Obbligazione_scadenzarioBulk) i.next()).equals( scadenzario ) )
scadSuccessivaIndex = index + 1;
index++;
}
//non esiste scadenza successiva
//se residuo proprio e il delta è positivo (è stata diminuito l'importo della scadenza precedente)
//inserisco una nuova scadenza
if ( scadSuccessivaIndex == obbligazione.getObbligazione_scadenzarioColl().size() ) {
//Lello - Sdoppiamento scadenza anche su obbligazione
//if (!obbligazione.isObbligazioneResiduo() || delta.doubleValue() < 0)
if (delta.doubleValue() < 0)
throw handleException( new ApplicationException( "Non esiste una scadenza successiva da aggiornare" ));
else {
scadSuccessivaNew = new Obbligazione_scadenzarioBulk();
scadSuccessivaNew.setDt_scadenza(scadenzario.getDt_scadenza());
scadSuccessivaNew.setDs_scadenza(scadenzario.getDs_scadenza());
scadSuccessivaNew.setIm_scadenza(Utility.ZERO);
scadSuccessivaIndex = obbligazione.addToObbligazione_scadenzarioColl(scadSuccessivaNew);
generaDettagliScadenzaObbligazione( aUC, obbligazione, scadSuccessivaNew, false);
}
}
scadSuccessiva = (Obbligazione_scadenzarioBulk) obbligazione.getObbligazione_scadenzarioColl().get( scadSuccessivaIndex );
//scadenza successiva ha importo inferiore a delta
if ( delta.doubleValue() < 0 && (scadSuccessiva.getIm_scadenza().add(delta).doubleValue() < 0 ))
throw handleException( new ApplicationException( "Modifica impossibile: l'importo della scadenza successiva e' inferiore all'importo da aggiornare" ));
//segnalo impossibilità di modificare importo se ci sono doc amministrativi associati
if ( scadSuccessiva.getPg_doc_passivo() != null )
throw new ApplicationException( "Modifica impossibile: la scadenza successiva e' associata a doc. amministrativi");
//aggiorno importo scadenza successiva
scadSuccessivaIniziale = new Obbligazione_scadenzarioBulk();
scadSuccessivaIniziale.setIm_scadenza( scadSuccessiva.getIm_scadenza());
scadSuccessiva.setScadenza_iniziale( scadSuccessivaIniziale);
scadSuccessiva.setIm_scadenza( scadSuccessiva.getIm_scadenza().add( delta ) );
scadenzario.setFl_aggiorna_scad_successiva( new Boolean( false) );
scadSuccessiva.setToBeUpdated();
scadenzario.setToBeUpdated();
//Carico la lista delle voci con gli importi da ripartire
PrimaryKeyHashtable hashVociList = new PrimaryKeyHashtable();
Obbligazione_scadenzarioBulk os;
BigDecimal totaleSelVoci = new BigDecimal(0);
for (int i=0; i<2; i++)
{
if (i==0)
os = scadenzario;
else
os = scadSuccessiva;
for ( Iterator s = os.getObbligazione_scad_voceColl().iterator(); s.hasNext(); )
{
Obbligazione_scad_voceBulk osv = (Obbligazione_scad_voceBulk) s.next();
Boolean trovato = new Boolean(Boolean.FALSE);
for ( Enumeration h = hashVociList.keys(); h.hasMoreElements(); )
{
V_assestatoBulk key = (V_assestatoBulk)h.nextElement();
if (key.getEsercizio().equals(osv.getEsercizio()) &&
key.getEsercizio_res().equals(osv.getObbligazione_scadenzario().getObbligazione().getEsercizio_originale()) &&
key.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) &&
key.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) &&
key.getTi_appartenenza().equals(osv.getTi_appartenenza()) &&
key.getTi_gestione().equals(osv.getTi_gestione()) &&
key.getCd_voce().equals(osv.getCd_voce()))
{
key.setImp_da_assegnare(key.getImp_da_assegnare().add(osv.getIm_voce()));
hashVociList.put(key, new BigDecimal(0));
totaleSelVoci = totaleSelVoci.add(osv.getIm_voce());
trovato = Boolean.TRUE;
break;
}
}
if (!trovato)
{
V_assestatoBulk voceSel = new V_assestatoBulk(osv.getEsercizio(),
osv.getObbligazione_scadenzario().getObbligazione().getEsercizio_originale(),
osv.getCd_centro_responsabilita(),
osv.getCd_linea_attivita(),
osv.getTi_appartenenza(),
osv.getTi_gestione(),
osv.getObbligazione_scadenzario().getObbligazione().getCd_elemento_voce());
voceSel.setCd_voce(osv.getCd_voce());
voceSel.setImp_da_assegnare(Utility.nvl(osv.getIm_voce()));
hashVociList.put(voceSel, new BigDecimal(0));
totaleSelVoci = totaleSelVoci.add(Utility.nvl(osv.getIm_voce()));
}
}
}
//Valorizzo il campo Percentuale che utilizzerò per individuare gli importi da attribuire ad ogni scadenza
for ( Enumeration e = hashVociList.keys(); e.hasMoreElements(); )
{
V_assestatoBulk voceSel = (V_assestatoBulk)e.nextElement();
if (totaleSelVoci.compareTo(Utility.ZERO)<=0)
voceSel.setPrc_da_assegnare(new BigDecimal(0));
else
voceSel.setPrc_da_assegnare(Utility.nvl(voceSel.getImp_da_assegnare()).divide(totaleSelVoci, 4, java.math.BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
}
spalmaImportiSuScadenza(aUC, scadenzario, hashVociList);
spalmaImportiSuScadenza(aUC, scadSuccessiva, hashVociList);
return scadSuccessiva;
}
/**
*
* Pre-post-conditions:
*
* Nome: Aggiorna stato COAN/COGE di doc. amministrativi
* Pre: Una richiesta di modifica di una obbligazione o di storno di una obbligazione definitiva e' stata generata.
* Post: E' stata richiamata la stored procedure che provvede ad aggiornare gli stati COAN/COGE degli eventuali doc. amministrativi
* contabilizzati sull'obbligazione
*
* @param userContext lo UserContext che ha generato la richiesta
* @param docContabile ObbligazioneBulk l'obbligazione modificata o eliminata
*
*/
private void aggiornaStatoCOAN_COGEDocAmm( UserContext userContext, ObbligazioneBulk docContabile ) throws ComponentException
{
callDoRiprocObb(userContext, docContabile, null);
}
/**
* creazione obbligazione
* PreCondition:
* Una nuova obbligazione deve essere creata e l'importo dell'obbligazione supera il controllo della copertura finanziaria
* effettuato dalla stored procedure CNRCTB030.checkAssunzObblig
* PostCondition:
* L'utente può proseguire con la definizione dell'imputazione finanziaria dell'obbligazione o con il suo salvataggio
* creazione obbligazione - errore
* PreCondition:
* Una nuova obbligazione deve essere creata e l'importo dell'obbligazione non supera il controllo della copertura finanziaria
* effettuato dalla stored procedure CNRCTB030.checkAssunzObblig
* PostCondition:
* Una segnalazione di errore comunica all'utente l'impossibilità di proseguire nella definizione dell'obbligazione
* aumento importo obbligazione
* PreCondition:
* Ad una obbligazione esistente e' stato incrementato l'importo e la differenza fra l'importo attuale dell'obbligazione
* e l'importo che aveva in precedenza supera il controllo della copertura finanziaria
* effettuato dalla stored procedure CNRCTB030.checkAssunzObblig
* PostCondition:
* L'utente può proseguire con la definizione dell'imputazione finanziaria dell'obbligazione o con il suo salvataggio
* aumento importo obbligazione - errore
* PreCondition:
* Ad una obbligazione esistente e' stato incrementato l'importo e la differenza fra l'importo attuale dell'obbligazione
* e l'importo che aveva in precedenza non supera il controllo della copertura finanziaria
* effettuato dalla stored procedure CNRCTB030.checkAssunzObblig
* PostCondition:
* Una segnalazione di errore comunica all'utente l'impossibilità di proseguire nella modifica dell'obbligazione
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk che il Cds dovrebbe assumere
*/
private void calcolaLimiteAssunzioneObbligazioni (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
/**
* @author mspasiano
* @since 04.03.2006
* @value Se è attiva la gestione di competenza del 2006 non controlla il limite di assunzione obbligazioni
*/
if (((Parametri_cnrBulk)getHome(aUC,Parametri_cnrBulk.class).findByPrimaryKey(new Parametri_cnrBulk(CNRUserContext.getEsercizio(aUC)))).getFl_regolamento_2006().booleanValue())
return;
}
/**
* normale
* PreCondition:
* Viene richiesto il calcolo delle percentuali d'imputazione per l'obbligazione e la ripartizione dell'importo
* delle sacdenze sui vari dettagli secondo tali percentuali
* PostCondition:
* Il sistema calcola la percentuale di ripartizione delle linee di attività nel modo seguente:
* - Per le linee di attività non presenti nel Piano di Gestione la percentuale e' inserita dall'utente
* - Per le linee di attività presenti nel Piano di Gestione e con categoria di dettaglio = SINGOLO viene
* calcolata la somma delle colonne I,K,Q,S,U e viene calcolata la percentuale di questo importo rispetto alla
* somma di tutti questi importi per tutte le linee attività selezionate
* - Per le linee di attività presenti nel Piano di Gestione e con categoria di dettaglio = SCARICO viene
* calcolata la somma delle colonne J,L,R,T e viene calcolata la percentuale di questo importo rispetto alla
* somma di tutti questi importi per tutte le linee attività selezionate
* Esempio di imputazione finanziaria:
* - Linea attività L0001 non da PdG con percentuale specificata dall'utente: 10%
* - Linea attività L0002 da PdG con categoria dettaglio = SINGOLO e somma delle colonne I,K,Q,S,U = 50.000,00
* - Linea attività L0003 da PdG con categoria dettaglio = SCARICO e somma delle colonne I,K,Q,S,U = 40.000,00
* Il sistema calcola le seguenti percentuali di ripartizione:
* - Linea attività L0001 : 10%
* - Linea attività L0002 : 50%
* - Linea attività L0003 : 40%
* Determinate tali percentuali il sistema procede a ripartire l'importo di ogni scadenza sui singoli dettagli
* secondo tali percentuali. Se, per problemi di arrotondamento, alla fine della ripartizione la somma degli
* importi dei dettagli della scadenza non e' uguale all'importo della scadenza, il sistema quadra tale somma
* assegnando il delta al primo dettaglio della scadenza
*
* errore - manca percentuale per nuova linea attività
* PreCondition:
* Nell'imputazione finanziaria dell'obbligazione e' stata specificata una linea di attività non presente nel
* Piano di Gestione e per tale linea non e' stata specificata la percentuale da usare nella ripartizione
* dell'importo delle scadenze sui dettagli
* PostCondition:
* Una segnalazione di errore viene restituita all'utente per comunicare il problema
*
* errore - non esistono spese e costi nel piano di gestione per linea attivita SINGOLA
* PreCondition:
* Nell'imputazione finanziaria dell'obbligazione e' stata specificata una linea di attività presente nel
* Piano di Gestione con categoria di dettaglio SINGOLA e per la quale la somma delle colonne I,K,Q,S,U risulta
* essere 0
* PostCondition:
* Una segnalazione di errore viene restituita all'utente per comunicare che i costi/spese della linea di attività sono nulli
*
* errore - non esistono spese e costi nel piano di gestione per linea attivita SCARICO
* PreCondition:
* Nell'imputazione finanziaria dell'obbligazione e' stata specificata una linea di attività presente nel
* Piano di Gestione con categoria di dettaglio SCARICO e per la quale la somma delle colonne J,L,R,T risulta
* essere 0
* PostCondition:
* Una segnalazione di errore viene restituita all'utente per comunicare che i costi/spese relativi ad altra UO della linea di attività sono nulli
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per la quale devono essere calcolati gli importi e le percentuali dei suoi
* dettagli di scadenza
* @return l'obbligazione con le percentuali e gli importi dei dettagli delle scadenze aggiornati
*/
protected ObbligazioneBulk calcolaPercentualeImputazioneObbligazione (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
BigDecimal percentuale = new BigDecimal( 100);
BigDecimal totaleLattDaPdg = new BigDecimal( 0 );
BigDecimal totalePerScadenza;
V_pdg_obbligazione_speBulk lattDaPdg;
Linea_attivitaBulk latt;
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
// calcolo le percentuali di imputazione finanziaria per le linee di attivita da pdg
// 100 - percentuali specificate x linee att non da PDG
for ( Iterator i = obbligazione.getNuoveLineeAttivitaColl().iterator(); i.hasNext(); )
percentuale = percentuale.subtract( ((Linea_attivitaBulk) i.next()).getPrcImputazioneFin());
if ( obbligazione.getNuoveLineeAttivitaColl().size() > 0 && percentuale.compareTo( new BigDecimal(100)) == 0
&& obbligazione.getLineeAttivitaSelezionateColl().size() == 0 )
throw new ApplicationException( "Non sono state specificate le percentuali per i nuovi GAE!");
for ( Iterator i = obbligazione.getLineeAttivitaSelezionateColl().iterator(); i.hasNext(); )
totaleLattDaPdg = totaleLattDaPdg.add(((V_pdg_obbligazione_speBulk) i.next()).getImporto());
if ( obbligazione.getLineeAttivitaSelezionateColl().size() > 0 && totaleLattDaPdg.doubleValue() == 0 )
throw new ApplicationException( "GAE da PdG con costi/spese nulli. Imputazione automatica impossibile!");
for ( Iterator i = obbligazione.getLineeAttivitaSelezionateColl().iterator(); i.hasNext(); )
{
lattDaPdg = (V_pdg_obbligazione_speBulk) i.next();
lattDaPdg.setPrcImputazioneFin( lattDaPdg.getImporto().multiply(percentuale).divide(totaleLattDaPdg, 2, BigDecimal.ROUND_HALF_UP) );
}
// calcolo gli importi e le percentuali per i dettagli delle scadenze
for ( Iterator i = obbligazione.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) i.next();
totalePerScadenza = new BigDecimal( 0 );
for ( Iterator j = os.getObbligazione_scad_voceColl().iterator(); j.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) j.next();
for ( Iterator k = obbligazione.getLineeAttivitaSelezionateColl().iterator(); k.hasNext(); )
{
lattDaPdg = (V_pdg_obbligazione_speBulk) k.next();
if ( lattDaPdg.getCd_centro_responsabilita().equals( osv.getCd_centro_responsabilita()) &&
lattDaPdg.getCd_linea_attivita().equals( osv.getCd_linea_attivita()))
{
osv.setIm_voce( os.getIm_scadenza().multiply( lattDaPdg.getPrcImputazioneFin()).divide( new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
totalePerScadenza = totalePerScadenza.add( osv.getIm_voce() );
if ( os.getIm_scadenza().doubleValue() != 0 )
osv.setPrc( lattDaPdg.getPrcImputazioneFin() );
else
osv.setPrc( new BigDecimal(0) );
osv.setToBeUpdated();
break;
}
}
for ( Iterator k = obbligazione.getNuoveLineeAttivitaColl().iterator(); k.hasNext(); )
{
latt = (Linea_attivitaBulk) k.next();
if ( latt.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita().equals( osv.getCd_centro_responsabilita()) &&
latt.getLinea_att().getCd_linea_attivita().equals( osv.getCd_linea_attivita()))
{
osv.setIm_voce( os.getIm_scadenza().multiply(latt.getPrcImputazioneFin()).divide( new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
totalePerScadenza = totalePerScadenza.add( osv.getIm_voce() );
if ( os.getIm_scadenza().doubleValue() != 0 )
osv.setPrc( latt.getPrcImputazioneFin() );
else
osv.setPrc( new BigDecimal(0) );
osv.setToBeUpdated();
break;
}
}
}
// quadro il totale della scadenza con la somma dei dettagli
if ( os.getObbligazione_scad_voceColl().size() > 0 && totalePerScadenza.compareTo( os.getIm_scadenza()) != 0 )
{
for (Iterator scad_voce = os.getObbligazione_scad_voceColl().iterator(); scad_voce.hasNext();){
osv = (Obbligazione_scad_voceBulk)scad_voce.next();
if (osv.getIm_voce().add( os.getIm_scadenza().subtract( totalePerScadenza )).compareTo( new BigDecimal(0)) > 0){
osv.setIm_voce( osv.getIm_voce().add( os.getIm_scadenza().subtract( totalePerScadenza )));
break;
}
}
}
}
return obbligazione;
}
/**
* riprocessa lo stato coge/coan di documenti associati al doc. contabile
* PreCondition:
* E' stata inoltrata una richiesta di riprocessare lo stato coge/coan di doc. amm. associati al documento contabile
* PostCondition:
* Vengono cambiati gli stati coge/coan dei doc amm associati al doc. cont
*
* @param userContext lo UserContext che ha generato la richiesta
* @param doc IDocumentoContabileBulk doc.contabile da utilizzare
* @param pg_ver_rec Long pg_ver_rec di riferimento
*
*/
public void callDoRiprocObb(
UserContext userContext,
IDocumentoContabileBulk doc,
Long pg_ver_rec)
throws it.cnr.jada.comp.ComponentException
{
try
{
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB215.doRiprocObb(?, ?, ?, ?, ?)",false,this.getClass());
try
{
cs.setInt( 1, doc.getEsercizio().intValue());
cs.setString( 2, doc.getCd_cds());
cs.setInt( 3, doc.getEsercizio_originale().intValue());
cs.setLong( 4, doc.getPg_doc_contabile().longValue());
if (pg_ver_rec == null)
cs.setNull( 5, Types.DECIMAL);
else
cs.setLong( 5, pg_ver_rec.longValue());
cs.executeQuery();
}
catch ( SQLException e )
{
throw handleException( e );
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException( e );
}
}
/**
* riporta all'esercizio successivo di doc.contabile
* PreCondition:
* E' stata inoltrata una richiesta di riportare all'esercizio successivo un documento contabile
* PostCondition:
* Il doc.contabile è stato riportato all'esercizio successivo richiamando
* la stored procedure CNRCTB046.riportoEsNextDocCont
*
* @param userContext lo UserContext che ha generato la richiesta
* @param doc IDocumentoContabileBulk doc.contabile da riportare
*
*/
public void callRiportaAvanti (UserContext userContext,IDocumentoContabileBulk doc) throws it.cnr.jada.comp.ComponentException
{
try
{
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB046.riportoEsNextDocCont(?, ?, ?, ?, ?, ?)",false,this.getClass());
try
{
cs.setString( 1, doc.getCd_cds());
cs.setObject( 2, doc.getEsercizio());
cs.setObject( 3, doc.getEsercizio_originale());
cs.setObject( 4, doc.getPg_doc_contabile());
cs.setString( 5, doc.getTi_entrata_spesa());
cs.setString( 6, ((CNRUserContext)userContext).getUser() );
cs.executeQuery();
}
catch ( SQLException e )
{
throw handleException( e );
}
catch ( Exception e )
{
throw handleException( e );
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException( e );
}
}
/**
* riporta indietro dall'esercizio successivo di un doc.contabile
* PreCondition:
* E' stata inoltrata una richiesta di riportare indietro dall'esercizio successivo un documento contabile
* PostCondition:
* Il doc.contabile è stato riportato all'esercizio successivo richiamando
* la stored procedure CNRCTB046.deriportoEsNextDocCont
*
* @param userContext lo UserContext che ha generato la richiesta
* @param doc IDocumentoContabileBulk doc.contabile da riportare
*
*/
public void callRiportaIndietro (UserContext userContext,IDocumentoContabileBulk doc) throws ComponentException
{
try
{
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB046.deriportoEsNextDocCont(?, ?, ?, ?, ?, ?)",false,this.getClass());
try
{
cs.setString( 1, doc.getCd_cds());
cs.setObject( 2, doc.getEsercizio());
cs.setObject( 3, doc.getEsercizio_originale());
cs.setObject( 4, doc.getPg_doc_contabile());
cs.setString( 5, doc.getTi_entrata_spesa());
cs.setString( 6, ((CNRUserContext)userContext).getUser() );
cs.executeQuery();
}
catch ( SQLException e )
{
throw handleException( e );
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException( e );
}
}
/**
* cancella dettaglio
* PreCondition:
* E' stata modificato l'imputazione finanziaria dell'obbligazione e una linea di attività
* prima selezionata ora non lo e' più
* PostCondition:
* Il dettaglio della scadenza dell'obbligazione riferito alla linea di attività non più selezionata
* viene cancellato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione la cui imputazione finanziaria e' stata modificata
* @param scadenzario Obbligazione_scadenzarioBulk la scadenza dell'obbligazione per cui eliminare i dettagli non più validi
*
*/
protected void cancellaDettaglioScadenze (UserContext aUC,ObbligazioneBulk obbligazione, Obbligazione_scadenzarioBulk scadenzario) throws ComponentException
{
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
V_pdg_obbligazione_speBulk ppsd;
Linea_attivitaBulk la;
boolean found;
int index = 0;
//cancello i dettagli scadenze per le linee di attività che non esistono piu'
for ( Iterator scadIterator = scadenzario.getObbligazione_scad_voceColl().iterator(); scadIterator.hasNext(); index++)
{
osv = (Obbligazione_scad_voceBulk) scadIterator.next();
found = false;
for ( Iterator lattIterator = obbligazione.getLineeAttivitaSelezionateColl().iterator(); lattIterator.hasNext(); )
{
ppsd = (V_pdg_obbligazione_speBulk) lattIterator.next();
if ( osv.getCd_centro_responsabilita().equals( ppsd.getCd_centro_responsabilita()) &&
osv.getCd_linea_attivita().equals( ppsd.getCd_linea_attivita()) )
{
found = true;
break;
}
}
if ( !found )
for ( Iterator lattIterator = obbligazione.getNuoveLineeAttivitaColl().iterator(); lattIterator.hasNext(); )
{
la = (Linea_attivitaBulk) lattIterator.next();
if ( osv.getCd_centro_responsabilita().equals( la.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita()) &&
osv.getCd_linea_attivita().equals( la.getLinea_att().getCd_linea_attivita()) )
{
found = true;
break;
}
}
if ( !found )
{
osv.setToBeDeleted();
scadIterator.remove();
}
}
}
//^^@@
/**
* Lo stato dell'obbligazione è Provvisoria e non esistono ordini
* PreCondition:
* Lo stato dell'obbligazione è Provvisoria e non esiste nessun ordine associato all'obbligazione
* PostCondition:
* Il sistema eseguirà le seguente attività:
* 1) L'aggiornamento dei saldi 'obbligazioni' dei capitoli di spesa CdS.
* (Questo processo viene eseguito dal metodo 'aggiornaCapitoloSaldoObbligazione').
* 2) L'eliminazione di ogni scadenza nello scadenzario dell'obbligazione,
* 3) L'eliminazione dell'obbligazione propria.
*
* Esiste un ordine per l'obbligazione
* PreCondition:
* Per l'obbligazione provvisoria e' stato definito un ordine
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che per cancellare un'obbligazione provvisoria
* per la quale e' già stato emesso un ordine e' necessario prima cancellare l'ordine
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione da cancellare
*/
public void cancellaObbligazioneProvvisoria (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
// controllo se esiste un ordine associato all'obbligazione
// In caso affermativo blocco l'operazione di eliminazione
it.cnr.contab.doccont00.ordine.bulk.OrdineBulk ordine = findOrdineFor(aUC, obbligazione);
if (ordine!=null)
throw new ApplicationException("L'impegno selezionato è collegato ad un ordine. Cancellare prima l'ordine");
//imposto a TO_BE_DELETED l'obbligazione e tutte le sue scadenze e tutte le sue scad_voce
obbligazione.setToBeDeleted();
// aggiornaCapitoloSaldoObbligazione( aUC, obbligazione );
makeBulkPersistent( aUC, obbligazione );
aggiornaCapitoloSaldoObbligazione( aUC, obbligazione, CANCELLAZIONE );
}
catch ( ObjectNotFoundException e )
{
throw new ApplicationException( "L'impegno è già stato cancellato" );
}
catch ( Exception e )
{
throw handleException( obbligazione, e ) ;
}
}
//^^@@
/**
* default
* PreCondition:
* Viene richiesto il cdr dell'utente connesso
* PostCondition:
* Restituisce il cdr a cui appartiene l'utente specificato:
* esercizio = esercizio selezionato in scrivania
* codice = UTENTE.CD_CDR
*/
//^^@@
private CdrBulk cdrFromUserContext(UserContext userContext) throws ComponentException {
try {
it.cnr.contab.utenze00.bulk.UtenteBulk user = new it.cnr.contab.utenze00.bulk.UtenteBulk( ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getUser() );
user = (it.cnr.contab.utenze00.bulk.UtenteBulk)getHome(userContext, user).findByPrimaryKey(user);
CdrBulk cdr = new CdrBulk( it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cdr(userContext) );
return (CdrBulk)getHome(userContext, cdr).findByPrimaryKey(cdr);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw new ComponentException(e);
}
}
/**
* Lo stato dell'obbligazione è Provvisoria - esercizio ok
* PreCondition:
* Lo stato dell'obbligazione è Provvisoria.
* L'esercizio di competenza dell'obbligazione e' uguale all'esercizio di creazione
* PostCondition:
* L'obbligazione viene aggiornata allo stato di 'Definitiva'.
*
* Lo stato dell'obbligazione è Provvisoria - esercizio errore
* PreCondition:
* Lo stato dell'obbligazione è Provvisoria.
* L'esercizio di competenza dell'obbligazione e' maggiore all'esercizio di creazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che un'obbligazione con esercizio competenza
* maggiore all'esercizio di creazione non può essere resa definitiva
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione da confermare
* @return ObbligazioneBulk l'obbligazione con lo stato modificato
*
*/
public ObbligazioneBulk confermaObbligazioneProvvisoria (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
if ( obbligazione instanceof V_obbligazione_im_mandatoBulk )
{
V_obbligazione_im_mandatoBulk v_obbligazione = (V_obbligazione_im_mandatoBulk) obbligazione;
if (obbligazione.isObbligazioneResiduo())
obbligazione = (ObbligazioneBulk) getHome( aUC, ObbligazioneResBulk.class).findByPrimaryKey( new ObbligazioneResBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else if (obbligazione.isObbligazioneResiduoImproprio())
obbligazione = (ObbligazioneBulk) getHome( aUC, ObbligazioneRes_impropriaBulk.class).findByPrimaryKey( new ObbligazioneRes_impropriaBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else
obbligazione = (ObbligazioneBulk) getHome( aUC, ObbligazioneOrdBulk.class).findByPrimaryKey( new ObbligazioneOrdBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
if ( obbligazione == null )
throw new ApplicationException( "L'impegno e' stato cancellato" );
}
lockBulk( aUC, obbligazione );
if ( obbligazione.getFl_gara_in_corso()!=null && obbligazione.getFl_gara_in_corso().booleanValue() )
throw new ApplicationException("Non e' possibile confermare un'impegno ("+obbligazione.getEsercizio()+"/"+obbligazione.getEsercizio_originale()+"/"+obbligazione.getPg_obbligazione()+") con gara di appalto in corso di espletamento.");
if ( obbligazione.getEsercizio().compareTo( obbligazione.getEsercizio_competenza()) != 0 )
throw new ApplicationException("Non e' possibile confermare un'impegno con esercizio di competenza successivo all'esercizio di scrivania");
obbligazione.setStato_obbligazione( obbligazione.STATO_OBB_DEFINITIVO );
obbligazione.setUser( aUC.getUser());
updateBulk( aUC, obbligazione );
return obbligazione;
}
catch ( Exception e )
{
if ( obbligazione != null )
obbligazione.setStato_obbligazione( obbligazione.STATO_OBB_PROVVISORIO );
throw handleException( obbligazione, e ) ;
}
}
/**
* anno di competenza maggiore da anno di creazione obbligazione + 2
* PreCondition:
* L'anno di competenza dell'obbligazione è maggiore dell'anno di creazione dell'obbligazione + 2
* PostCondition:
* Non viene effetuato il controllo della copertura finanziaria.
* anno di competenza inferiore anno di creazione obbligazione + 2
* PreCondition:
* L'anno di competenza dell'obbligazione è uguale all'anno di creazione dell'obbligazione oppure
* l'anno di competenza dell'obbligazione è uguale all'anno di creazione dell'obbligazione + 1 oppure
* L'anno di competenza dell'obbligazione è uguale all'anno di creazione dell'obbligazione + 2
* PostCondition:
* La copertura finanziaria viene controllata per l'obbligazione in elaborazione con il metodo
* calcolaLimiteAssunzioneObbligazioni
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui verificare la copertura finanziaria
*
*/
private void controllaCoperturaFinanziariaObbligazione (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
/* eliminato
if ( !obbligazione.getElemento_voce().getFl_limite_ass_obblig().booleanValue())
return;
*/
int esercizioScrivania = ((it.cnr.contab.utenze00.bp.CNRUserContext)aUC).getEsercizio().intValue();
if ( (esercizioScrivania + 2 ) < obbligazione.getEsercizio().intValue() )
return;
calcolaLimiteAssunzioneObbligazioni( aUC, obbligazione );
}
/**
* creazione/modifica di obbligazione con esercizio competenza diverso da esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata creata/modificata e l'esercizio di competenza dell'obbligazione
* e' maggiore dell'esercizio di scrivania.
* PostCondition:
* Nessun controllo viene effettuato
* creazione obbligazione con esercizio competenza = esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata creata
* l'esercizio dell'obbligazione e' uguale all'esercizio di scrivania.
* PostCondition:
* Viene richiamato il metodo 'controllaDisponibilitaCassaPerVoceInInserimento' che
* esegue il controllo della disponibilità di cassa per ogni voce presente nell'obbligazione
* modifica obbligazione con esercizio competenza = esercizio scrivania
* PreCondition:
* Un'obbligazione e' stata modificata
* l'esercizio dell'obbligazione e' uguale all'esercizio di scrivania.
* PostCondition:
* Viene richiamato il metodo 'controllaDisponibilitaCassaPerVoceInModifica' che
* esegue il controllo della disponibilità di cassa per ogni voce presente nell'obbligazione
* @param userContext lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per i cui capitoli deve essere verificata la disponibilità di cassa
* @param azione indica l'azione effettuata sull'obbligazione e puo' assumere i valori INSERIMENTO, MODIFICA, CANCELLAZIONE
*
*/
private void controllaDisponibilitaCassaPerVoce (UserContext userContext,ObbligazioneBulk obbligazione, int azione) throws ComponentException
{
try
{
// non si aggiornano i saldi di obbligazioni con esercizio di competenza diverso da esercizio di creazione
if ( obbligazione.getEsercizio().compareTo( obbligazione.getEsercizio_competenza()) != 0 )
return ;
if ( obbligazione.isCheckDisponibilitaCassaEseguito() )
return;
if ( azione == INSERIMENTO )
controllaDisponibilitaCassaPerVoceInInserimento( userContext, obbligazione );
else if (azione == MODIFICA )
controllaDisponibilitaCassaPerVoceInModifica( userContext, obbligazione );
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
*
* disp. cassa
* PreCondition:
* Un'obbligazione e' stata creata
* PostCondition:
* Per ogni voce del piano presente nell'obbligazione viene
* eseguito il controllo della disponibilità di cassa
*
* @param userContext lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per la quale deve essere verificata la disponibilità di cassa sui capitoli
*
*/
private void controllaDisponibilitaCassaPerVoceInInserimento (UserContext userContext,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
SaldoComponentSession session = createSaldoComponentSession();
IVoceBilancioBulk voce;
BigDecimal im_voce;
PrimaryKeyHashMap saldoVociMap;
try {
saldoVociMap = obbligazione.getVociMap(((Parametri_cnrHome)getHome(userContext, Parametri_cnrBulk.class)).isNuovoPdg(userContext));
} catch (PersistencyException e) {
throw handleException(e);
}
for ( Iterator i = saldoVociMap.keySet().iterator(); i.hasNext(); )
{
voce = (IVoceBilancioBulk) i.next();
if (voce instanceof Voce_fBulk) {
im_voce = (BigDecimal) saldoVociMap.get( voce );
session.checkDisponabilitaCassaObbligazioni( userContext, (Voce_fBulk)voce, obbligazione.getCd_cds(), im_voce, Voce_f_saldi_cmpBulk.TIPO_COMPETENZA );
}
}
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* disp. cassa senza mandati
* PreCondition:
* Un'obbligazione e' stata modificata
* L'obbligazione non ha mandati associati
* PostCondition:
* Per ogni voce del piano presente nell'obbligazione viene calcolato quale e' il valore da considerare
* (V_mod_saldi_obbligBulk) per verificare la disponibilità di cassa relativa sull'assunzione di obbligazioni
*
* disp. cassa con mandati
* PreCondition:
* Un'obbligazione e' stata modificata
* L'obbligazione ha mandati associati
* PostCondition:
* Per ogni voce del piano presente nell'obbligazione viene calcolato quale e' il valore da considerare
* (V_mod_saldi_obbligBulk) per verificare la disponibilità di cassa relativa sia all'assunzione di mandati
* (controllo bloccante) che all'assunzione di obbligazioni (controllo non bloccante)
*
*
* @param userContext lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per la quale devono essere aggiornati i saldi relativi ai capitoli di spesa
*
*/
private void controllaDisponibilitaCassaPerVoceInModifica (UserContext userContext,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
List saldiDaAggiornare = ((V_mod_saldi_obbligHome)getHome( userContext, V_mod_saldi_obbligBulk.class )).findModificheSaldiFor( obbligazione, obbligazione.getPg_ver_rec() );
SaldoComponentSession session = createSaldoComponentSession();
for ( Iterator i = saldiDaAggiornare.iterator(); i.hasNext(); )
{
V_mod_saldi_obbligBulk modSaldo = (V_mod_saldi_obbligBulk) i.next();
Voce_fBulk voce = new Voce_fBulk( modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione() );
if ( modSaldo.getIm_delta_man_voce().compareTo( new BigDecimal(0) ) > 0 )
session.checkDisponabilitaCassaMandati( userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_man_voce(), Voce_f_saldi_cmpBulk.TIPO_COMPETENZA);
if ( modSaldo.getIm_delta_voce().compareTo( new BigDecimal(0) ) > 0 )
session.checkDisponabilitaCassaObbligazioni( userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_voce(), Voce_f_saldi_cmpBulk.TIPO_COMPETENZA );
}
/*
* Aggiorno i Saldi per CDR/Linea
*/
List saldiDaAggiornareCdrLinea = ((V_mod_saldi_obblig_scad_voceHome)getHome( userContext, V_mod_saldi_obblig_scad_voceBulk.class )).findModificheSaldiFor( obbligazione, obbligazione.getPg_ver_rec() );
for ( Iterator i = saldiDaAggiornareCdrLinea.iterator(); i.hasNext(); )
{
V_mod_saldi_obblig_scad_voceBulk modSaldo = (V_mod_saldi_obblig_scad_voceBulk) i.next();
Voce_fBulk voce = new Voce_fBulk( modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione() );
if ( modSaldo.getIm_delta_man_voce().compareTo( new BigDecimal(0) ) > 0 )
session.checkDisponabilitaCassaMandati( userContext, modSaldo.getCd_centro_responsabilita(), modSaldo.getCd_linea_attivita(), voce, modSaldo.getIm_delta_man_voce());
}
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Effettua controlli sulle combinazione Cdr/Voce/Linea selezionate e scelte dall'utente.
* Il controllo viene effettuato sull'insieme delle Linee di attività (da PDG e non) selezionate dall'utente.
*
* PreCondition:
* E' stata confermata l'imputazione finanziaria dell'obbligazione da creare
* PostCondition:
* se l'impegno creato è di competenza viene verificato che la disponibilità residua ad assumere
* impegni residui impropri non sia superiore al limite indicato nei Parametri CNR per ogni
* Cdr/Voce/Linea selezionata
*
* @param userContext lo user context
* @param obbligazione l'obbligazione da creare
* @return
* @throws ComponentException
*/
public ObbligazioneBulk validaImputazioneFinanziaria(UserContext userContext, ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
V_pdg_obbligazione_speBulk ppsd;
Linea_attivitaBulk la;
IVoceBilancioBulk voce;
// recupero le percentuali di imputazione finanziaria per le linee di attivita da pdg
// 100 - percentuali specificate x linee att non da PDG
PrimaryKeyHashtable oldRipartizioneCdrVoceLinea = getOldRipartizioneCdrVoceLinea(userContext, obbligazione);
//individuo le combinazioni CDR/VOCE/Linea scelti dall'utente
for ( Iterator lattIterator = obbligazione.getLineeAttivitaSelezionateColl().iterator(); lattIterator.hasNext(); )
{
ppsd = (V_pdg_obbligazione_speBulk) lattIterator.next();
if ( obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( Tipo_unita_organizzativaHome.TIPO_UO_SAC ) )
{
if ( ppsd.getCategoria_dettaglio().equals( it.cnr.contab.pdg00.bulk.Pdg_preventivo_spe_detBulk.CAT_SINGOLO) ||
ppsd.getCd_centro_responsabilita_clgs()==null)
voce = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita());
else
voce = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita_clgs());
/*
* Nella gestione 2006, il campo voce potrebbe essere null se la ricerca è attuata tramite
* getCd_centro_responsabilita_clgs(). In questo caso cerco di trovarla tramite
* ppsd.getCd_centro_responsabilita()
*/
if (voce == null)
voce = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita());
}
else
voce = obbligazione.getCapitolo( ppsd.getCd_funzione() );
validaCdrLineaVoce(userContext, obbligazione, oldRipartizioneCdrVoceLinea, ppsd.getCd_centro_responsabilita(), ppsd.getCd_linea_attivita(), voce);
}
for ( Iterator lattIterator = obbligazione.getNuoveLineeAttivitaColl().iterator(); lattIterator.hasNext(); )
{
la = (Linea_attivitaBulk) lattIterator.next();
if ( obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( Tipo_unita_organizzativaHome.TIPO_UO_SAC) )
voce = obbligazione.getArticolo( la.getLinea_att().getFunzione().getCd_funzione(), la.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita());
else
voce = obbligazione.getCapitolo( la.getLinea_att().getFunzione().getCd_funzione() );
validaCdrLineaVoce(userContext, obbligazione, oldRipartizioneCdrVoceLinea, la.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita(), la.getLinea_att().getCd_linea_attivita(), voce);
}
return obbligazione;
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Effettua controlli sulle combinazione Cdr/Voce/Linea indicati come parametri
* PreCondition:
* Una nuova combinazione Cdr/Voce/Linea è stata scelta o è stato aumentato l'importo
* complessivo assegnato al Cdr/Voce/Linea
* PostCondition:
* Se l'impegno creato è di competenza viene verificato che la disponibilità residua ad assumere
* impegni residui impropri non sia superiore al limite indicato nei Parametri CNR
*
* @param userContext lo user context
* @param obbligazione l'obbligazione di cui sto aggiornando l'imputazione finanziaria
* @param oldRipartizioneCdrVoceLinea la chiave restituita dalla chiamata alla procedura getOldRipartizioneCdrVoceLinea
* @param cdr il centro di responsabilità
* @param latt il codice della GAE
* @param voce l'istanza di Voce_fBulk contenente l'elemento voce da verificare
* @throws ComponentException
*
*/
private void validaCdrLineaVoce(UserContext userContext, ObbligazioneBulk obbligazione, PrimaryKeyHashtable oldRipartizioneCdrVoceLinea, String cdr, String latt, IVoceBilancioBulk voce) throws ComponentException
{
BigDecimal totaleOldScad = new BigDecimal(0);
BigDecimal totaleNewScad = new BigDecimal(0);
Obbligazione_scadenzarioBulk os;
Obbligazione_scad_voceBulk osv;
Obbligazione_scad_voceBulk key = new Obbligazione_scad_voceBulk();
boolean found=false;
try
{
if (obbligazione.isCompetenza()) {
SaldoComponentSession session = createSaldoComponentSession();
Parametri_cdsBulk param_cds = (Parametri_cdsBulk)(getHome(userContext, Parametri_cdsBulk.class)).findByPrimaryKey(new Parametri_cdsBulk(CNRUserContext.getCd_cds(userContext),CNRUserContext.getEsercizio(userContext)));
if (param_cds.getIm_soglia_consumo_residuo()==null) return;
for ( Iterator s = obbligazione.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
if (osv.getCd_centro_responsabilita().equals( cdr ) &&
osv.getCd_linea_attivita().equals( latt ) &&
osv.getCd_voce().equals(voce.getCd_voce())) {
totaleNewScad = totaleNewScad.add( osv.getIm_voce() );
break;
}
}
}
for ( Enumeration e = oldRipartizioneCdrVoceLinea.keys(); e.hasMoreElements(); )
{
key = (Obbligazione_scad_voceBulk)e.nextElement();
found = false;
if (key.getCd_centro_responsabilita().equals( cdr ) &&
key.getCd_linea_attivita().equals( latt ) &&
key.getCd_voce().equals( voce.getCd_voce() )) {
totaleOldScad = (BigDecimal) oldRipartizioneCdrVoceLinea.get( key );
found = true;
break;
}
}
/*
* Controllo, in caso di creazione impegni di competenza o aumento dell'importo assegnato,
* che la disponibilità ad assumere impegni residui impropri non sia superiore al limite
* previsto nei parametri CNR
*
**/
if (totaleOldScad.compareTo(totaleNewScad)==-1 || !found) {
BigDecimal totaleResidui = session.getTotaleSaldoResidui(userContext,cdr,latt,voce);
if (totaleResidui.compareTo(param_cds.getIm_soglia_consumo_residuo())==1)
if (!found)
throw new ApplicationException("Non è possibile assumere impegni di competenza per il CDR/GAE/Voce (" +
cdr + "/" + latt + "/" + voce.getCd_voce() +
"), in quanto esiste una disponibilità ad assumere impegni " +
"su stanziamenti residui impropri (" +
new it.cnr.contab.util.EuroFormat().format(totaleResidui) + ").");
else
throw new ApplicationException("Non è possibile aumentare di " +
new it.cnr.contab.util.EuroFormat().format(totaleNewScad.subtract(totaleOldScad)) +
" l'importo di competenza già assegnato per il CDR/GAE/Voce (" +
cdr + "/" + latt + "/" + voce.getCd_voce() +
"), in quanto esiste una disponibilità ad assumere impegni " +
"su stanziamenti residui impropri (" +
new it.cnr.contab.util.EuroFormat().format(totaleResidui) + ").");
}
}
//Controllo valido solo per residui nati nell'anno (impropri e competenza)
//per i residui propri il controllo viene fatto solo all'atto della modifica totale positiva dell'importo. Il controllo
//è già presente in ObbligazioneResComponent
if (!obbligazione.isObbligazioneResiduo() &&
Utility.createParametriEnteComponentSession().isProgettoPianoEconomicoEnabled(userContext, CNRUserContext.getEsercizio(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()) {
//Negli impegni controllare la più piccola data tra data inizio progetto e data stipula contratto definitivo
ProgettoHome progettoHome = (ProgettoHome)getHome(userContext, ProgettoBulk.class);
java.util.Collection contratti = progettoHome.findContratti(progetto.getPg_progetto());
Optional optContratto =
contratti.stream().filter(el->el.isAttivo()||el.isAttivo_e_Passivo())
.min((p1, p2) -> p1.getDt_stipula().compareTo(p2.getDt_stipula()))
.filter(el->el.getDt_stipula().before(progetto.getOtherField().getDtInizio()));
if (optContratto.isPresent())
optContratto
.filter(ctr->ctr.getDt_stipula().after(obbligazione.getDt_registrazione()))
.ifPresent(ctr->{
throw new ApplicationRuntimeException(
"Attenzione! GAE "+linea.getCd_linea_attivita()+" non selezionabile. "
+ "La data stipula ("+new java.text.SimpleDateFormat("dd/MM/yyyy").format(ctr.getDt_stipula())
+ ") del primo contratto " + ctr.getEsercizio()+"/"+ctr.getStato()+"/"+ctr.getPg_contratto()
+ " associato al progetto "+progetto.getCd_progetto()+" è successiva "
+ "rispetto alla data di registrazione dell'obbligazione ("
+ new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+").");
});
else
Optional.of(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'obbligazione ("
+ new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione())+")."));
}
LocalDate localDateFineProgetto = Optional.ofNullable(progetto.getOtherField().getDtProroga())
.orElse(Optional.ofNullable(progetto.getOtherField().getDtFine())
.orElse(DateUtils.firstDateOfTheYear(3000))).toLocalDateTime().toLocalDate();
int ggProroga = Optional.ofNullable(obbligazione.getElemento_voce())
.flatMap(el->{
if (obbligazione.isCompetenza())
return Optional.ofNullable(el.getGg_deroga_obbl_comp_prg_scad());
else
return Optional.ofNullable(el.getGg_deroga_obbl_res_prg_scad());
})
.filter(el->el.compareTo(0)>0)
.orElse(0);
localDateFineProgetto = localDateFineProgetto.plusDays(ggProroga);
if (localDateFineProgetto.isBefore(obbligazione.getDt_registrazione().toLocalDateTime().toLocalDate()))
throw new ApplicationMessageFormatException("Attenzione! GAE {0} non selezionabile. "
+ "La data fine/proroga del progetto {1} {2} ({3}) è precedente rispetto alla data di registrazione dell''impegno ({4}).",
linea.getCd_linea_attivita(),
progetto.getCd_progetto(),
(ggProroga>0?", aumentata di " + ggProroga +" giorni,":""),
localDateFineProgetto.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")),
new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()));
}
} catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Tutti i controlli superati - contesto non transazionale
* PreCondition:
* Una richiesta di creazione di un'obbligazione e' stata generata
* L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
* L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* L'obbligazione non e' stata creata in un contesto transazionale
* PostCondition:
* L'obbligazione viene creata, i dettagli di tutte le scadenze vengono creati (metodo generaDettagliScadenzaObbligazione) e i saldi
* dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
* Tutti i controlli superati - contesto transazionale
* PreCondition:
* Una richiesta di creazione di un'obbligazione e' stata generata
* L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
* L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* L'obbligazione e' stata creata in un contesto transazionale
* PostCondition:
* L'obbligazione viene creata e i dettagli di tutte le sue scadenze vengono creati (metodo generaDettagliScadenzaObbligazione)
* Errore di verifica obbligazione
* PreCondition:
* Una richiesta di creazione di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli eseguiti dal metodo 'verificaObbligazione'
* PostCondition:
* Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
* Errore di disponibilità di cassa
* PreCondition:
* Una richiesta di creazione di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* PostCondition:
* Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
* Errore di disponibilità di cassa - forzatura
* PreCondition:
* Una richiesta di creazione di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* e l'utente ha scelto di forzare l'emissione dell'obbligazione
* PostCondition:
* L'obbligazione viene creata, i dettagli di tutte le scadenze vengono creati (metodo generaDettagliScadenzaObbligazione) e i saldi
* dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
*
* @param uc lo user context
* @param bulk l'istanza di ObbligazioneBulk da creare
* @return l'istanza di ObbligazioneBulk creata
*
*/
public OggettoBulk creaConBulk (UserContext uc,OggettoBulk bulk) throws ComponentException
{
ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
try {
verificaStatoEsercizio(
uc,
((CNRUserContext)uc).getEsercizio(),
obbligazione.getCd_cds());
} catch (Exception e) {
throw handleException(e);
}
validaCampi(uc, obbligazione);
/* simona 23.10.2002 : invertito l'ordine della verifica e della generzione dettagli x problema 344 */
generaDettagliScadenzaObbligazione( uc, obbligazione, null );
verificaObbligazione( uc, obbligazione );
//verifica la correttezza dell'imputazione finanziaria
validaImputazioneFinanziaria( uc, obbligazione );
obbligazione = (ObbligazioneBulk) super.creaConBulk( uc, bulk );
//esegue il check di disponibilita di cassa
controllaDisponibilitaCassaPerVoce( uc, obbligazione, INSERIMENTO );
verificaCoperturaContratto( uc, obbligazione);
verificaCoperturaIncaricoRepertorio(uc, obbligazione);
if ( !uc.isTransactional() )
//aggiorna il capitolo saldo
aggiornaCapitoloSaldoObbligazione( uc, obbligazione, INSERIMENTO );
obbligazione.setIm_iniziale_obbligazione( obbligazione.getIm_obbligazione());
obbligazione.setCd_iniziale_elemento_voce( obbligazione.getCd_elemento_voce());
if (obbligazione.isCompetenza())
controllaAssunzioneImpegni(uc);
if (obbligazione.isObbligazioneResiduoImproprio())
controllaAssunzioneImpResImpro(uc);
validaCreaModificaOrigineFonti(uc, obbligazione);
try {
obbligazione = validaCreaModificaElementoVoceNext(uc, obbligazione);
} catch ( Exception e ) {
throw handleException( e ) ;
}
return obbligazione;
}
/**
* CDS SAC - non scarico
* PreCondition:
* E' stata modificato l'imputazione finanziaria aggiungendo una nuova linea di attività da piano di gestione
* ad una obbligazione di appartenenza del Cds SAC. La linea di attività non e' di scarico.
* PostCondition:
* Viene creato un nuovo dettaglio di scadenza dell'obbligazione riferito alla nuova linea di attività e viene
* impostata come voce del piano dei conti del dettaglio della scadenza l'articolo selezionato
* in imputazione finanziaria avente funzione e codice CdR uguale a quello della linea di attività
* CDS SAC - scarico
* PreCondition:
* E' stata modificato l'imputazione finanziaria aggiungendo una nuova linea di attività da piano di gestione
* ad una obbligazione di appartenenza del Cds SAC. La linea di attività e' di scarico.
* PostCondition:
* Viene creato un nuovo dettaglio di scadenza dell'obbligazione riferito alla nuova linea di attività e viene
* impostata come voce del piano dei conti del dettaglio della scadenza l'articolo selezionato
* in imputazione finanziaria avente funzione e codice CdR uguale a quello della linea di attività collegata nel
* piano di gestione alla linea di attività selezionata
* CDS diverso da SAC
* PreCondition:
* E' stata modificato l'imputazione finanziaria aggiungendo una nuova linea di attività da piano di gestione
* ad una obbligazione di appartenenza di un Cds con tipologia diversa da SAC.
* La linea di attività non e' di scarico.
* PostCondition:
* Viene creato un nuovo dettaglio di scadenza dell'obbligazione riferito alla nuova linea di attività e viene
* impostata come voce del piano dei conti del dettaglio della scadenza il capitolo selezionato
* in imputazione finanziaria avente funzione uguale a quello della linea di attività
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui creare i dettagli scadenza
* @param scadenzario Obbligazione_scadenzarioBulk la scadenza dell'obbligazione per cui creare i dettagli
*
*/
protected void creaDettagliScadenzaPerLineeAttivitaDaPdG(UserContext aUC,ObbligazioneBulk obbligazione, Obbligazione_scadenzarioBulk scadenzario) throws ComponentException
{
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
V_pdg_obbligazione_speBulk ppsd;
Linea_attivitaBulk la;
boolean found;
//creo i dettagli scadenze se non esistono per le linee di attività da PDG
for ( Iterator lattIterator = obbligazione.getLineeAttivitaSelezionateColl().iterator(); lattIterator.hasNext(); )
{
found = false;
ppsd = (V_pdg_obbligazione_speBulk) lattIterator.next();
if (scadenzario.getDatiFinanziariScadenzeDTO() == null || scadenzario.getDatiFinanziariScadenzeDTO().getCdLineaAttivita() == null ||
scadenzario.getDatiFinanziariScadenzeDTO().getCdCentroResponsabilita() == null ||
scadenzario.getDatiFinanziariScadenzeDTO().getCdVoce() == null ||
(scadenzario.getDatiFinanziariScadenzeDTO().getCdLineaAttivita().equals(ppsd.getCd_linea_attivita()) &&
scadenzario.getDatiFinanziariScadenzeDTO().getCdCentroResponsabilita().equals(ppsd.getCd_centro_responsabilita())
// && scadenzario.getDatiFinanziariScadenzeDTO().getCdVoce().equals(ppsd.getCd_elemento_voce())
)){
for ( Iterator i = scadenzario.getObbligazione_scad_voceColl().iterator(); i.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) i.next();
if ( osv.getCd_centro_responsabilita().equals( ppsd.getCd_centro_responsabilita()) &&
osv.getCd_linea_attivita().equals( ppsd.getCd_linea_attivita()) )
{
found = true;
break;
}
}
if ( !found )
{
//creo nuovo Obbligazione_scad_voceBulk
osv = new Obbligazione_scad_voceBulk();
osv.setToBeCreated();
if ( obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( Tipo_unita_organizzativaHome.TIPO_UO_SAC ) )
{
IVoceBilancioBulk articolo;
if ( ppsd.getCategoria_dettaglio().equals( it.cnr.contab.pdg00.bulk.Pdg_preventivo_spe_detBulk.CAT_SINGOLO) ||
ppsd.getCd_centro_responsabilita_clgs()==null)
articolo = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita());
else
articolo = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita_clgs());
/*
* Nella gestione 2006, il campo "articolo" potrebbe essere null se la ricerca è attuata tramite
* getCd_centro_responsabilita_clgs(). In questo caso cerco di trovarla tramite
* ppsd.getCd_centro_responsabilita()
*/
if (articolo == null)
articolo = obbligazione.getArticolo( ppsd.getCd_funzione(), ppsd.getCd_centro_responsabilita());
if (articolo != null){
osv.setTi_appartenenza( articolo.getTi_appartenenza());
osv.setTi_gestione( articolo.getTi_gestione());
osv.setCd_voce( articolo.getCd_voce() );
}
}
else
{
IVoceBilancioBulk capitolo = obbligazione.getCapitolo( ppsd.getCd_funzione() );
osv.setTi_appartenenza( capitolo.getTi_appartenenza());
osv.setTi_gestione( capitolo.getTi_gestione());
osv.setCd_voce( capitolo.getCd_voce() );
}
//linea attivita'
CdrBulk cdr = new CdrBulk();
cdr.setCd_centro_responsabilita( ppsd.getCd_centro_responsabilita());
osv.getLinea_attivita().setCentro_responsabilita( cdr );
FunzioneBulk funzione = new FunzioneBulk();
osv.getLinea_attivita().setCd_linea_attivita( ppsd.getCd_linea_attivita());
osv.getLinea_attivita().setFunzione( funzione );
osv.getLinea_attivita().setCd_funzione( ppsd.getCd_funzione());
NaturaBulk natura = new NaturaBulk();
osv.getLinea_attivita().setNatura( natura );
osv.getLinea_attivita().setCd_natura( ppsd.getCd_natura());
osv.setCd_linea_attivita( ppsd.getCd_linea_attivita() );
osv.setCd_centro_responsabilita( ppsd.getCd_centro_responsabilita());
osv.setIm_voce( new java.math.BigDecimal(0));
osv.setCd_fondo_ricerca( obbligazione.getCd_fondo_ricerca() );
//osv.setUser( aUC.getUser()) ;
osv.setUser( scadenzario.getObbligazione().getUser() );
osv.setObbligazione_scadenzario( scadenzario );
((BulkList) scadenzario.getObbligazione_scad_voceColl()).add( osv );
}
}
}
}
/**
* CDS SAC
* PreCondition:
* E' stata modificato l'imputazione finanziaria aggiungendo ad una obbligazione di appartenenza del Cds SAC
* una nuova linea di attività che non e' presente nel piano di gestione
* PostCondition:
* Viene creato un nuovo dettaglio di scadenza dell'obbligazione riferito alla nuova linea di attività e viene
* impostata come voce del piano dei conti del dettaglio della scadenza l'articolo selezionato
* in imputazione finanziaria avente funzione e codice CdR uguale a quello della linea di attività
* CDS diverso da SAC
* PreCondition:
* E' stata modificato l'imputazione finanziaria aggiungendo ad una obbligazione di appartenenza ad un Cds diverso da SAC
* una nuova linea di attività che non e' presente nel piano di gestione
* PostCondition:
* Viene creato un nuovo dettaglio di scadenza dell'obbligazione riferito alla nuova linea di attività e viene
* impostata come voce del piano dei conti del dettaglio della scadenza il capitolo selezionato
* in imputazione finanziaria avente funzione uguale a quello della linea di attività
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui creare i dettagli scadenza
* @param scadenzario Obbligazione_scadenzarioBulk la scadenza dell'obbligazione per cui creare i dettagli
*
*/
protected void creaDettagliScadenzaPerNuoveLineeAttivita (UserContext aUC,ObbligazioneBulk obbligazione, Obbligazione_scadenzarioBulk scadenzario) throws ComponentException
{
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
Linea_attivitaBulk la;
boolean found;
//creo i dettagli scadenze se non esistono per le nuove linee di attività
for ( Iterator lattIterator = obbligazione.getNuoveLineeAttivitaColl().iterator(); lattIterator.hasNext(); )
{
la = (Linea_attivitaBulk) lattIterator.next();
try
{
la.validate();
}
catch ( ValidationException e)
{
throw handleException( new ApplicationException( e.getMessage()));
}
found = false;
for ( Iterator i = scadenzario.getObbligazione_scad_voceColl().iterator(); i.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) i.next();
if ( osv.getCd_centro_responsabilita().equals( la.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita()) &&
osv.getCd_linea_attivita().equals( la.getLinea_att().getCd_linea_attivita()) )
found = true;
}
if ( !found )
{
//creo nuovo Obbligazione_scad_voceBulk
osv = new Obbligazione_scad_voceBulk();
osv.setToBeCreated();
if ( obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( Tipo_unita_organizzativaHome.TIPO_UO_SAC ) )
{
IVoceBilancioBulk articolo = obbligazione.getArticolo( la.getLinea_att().getFunzione().getCd_funzione(), la.getLinea_att().getCentro_responsabilita().getCd_centro_responsabilita());
osv.setTi_appartenenza( articolo.getTi_appartenenza());
osv.setTi_gestione( articolo.getTi_gestione());
osv.setCd_voce( articolo.getCd_voce() );
}
else
{
IVoceBilancioBulk capitolo = obbligazione.getCapitolo( la.getLinea_att().getFunzione().getCd_funzione() );
osv.setTi_appartenenza( capitolo.getTi_appartenenza());
osv.setTi_gestione( capitolo.getTi_gestione());
osv.setCd_voce( capitolo.getCd_voce() );
}
osv.setLinea_attivita( la.getLinea_att() );
osv.setCd_linea_attivita( la.getLinea_att().getCd_linea_attivita() );
osv.setCd_centro_responsabilita( la.getLinea_att().getCd_centro_responsabilita());
osv.setIm_voce( new java.math.BigDecimal(0));
osv.setCd_fondo_ricerca( obbligazione.getCd_fondo_ricerca() );
// osv.setUser( scadenzario.getUser()) ;
osv.setUser( scadenzario.getObbligazione().getUser() );
osv.setObbligazione_scadenzario( scadenzario );
((BulkList) scadenzario.getObbligazione_scad_voceColl()).add( osv );
}
}
}
/**
* Crea la CRUDComponentSession da usare per effettuare le operazioni di CRUD
*/
private it.cnr.contab.doccont00.ejb.SaldoComponentSession createSaldoComponentSession() throws ComponentException
{
try
{
return (SaldoComponentSession)EJBCommonServices.createEJB("CNRDOCCONT00_EJB_SaldoComponentSession");
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* Obbligazione provvisoria
* PreCondition:
* E' stata generata la richiesta di cancellazione di un' obbligazione che ha lo stato provvisorio
* PostCondition:
* L'obbligazione viene fisicamente cancellata tramite il metodo cancellaObbligazioneProvvisoria
*
* Obbligazione definitiva
* PreCondition:
* E' stata generata la richiesta di cancellazione di un' obbligazione che ha lo stato definitivo
* PostCondition:
* L'obbligazione viene stornata e cancellata logicamente tramite il metodo annullaObbligazioneDefinitiva
*
* @param aUC lo user context
* @param bulk l'istanza di ObbligazioneBulk da eliminare
*
*/
public void eliminaConBulk (UserContext aUC,OggettoBulk bulk) throws ComponentException
{
try
{
if ( bulk instanceof V_obbligazione_im_mandatoBulk )
{
V_obbligazione_im_mandatoBulk v_obbligazione = (V_obbligazione_im_mandatoBulk) bulk;
if (v_obbligazione.isObbligazioneResiduo())
bulk = (OggettoBulk) getHome( aUC, ObbligazioneResBulk.class).findByPrimaryKey( new ObbligazioneResBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else if (v_obbligazione.isObbligazioneResiduoImproprio())
bulk = (OggettoBulk) getHome( aUC, ObbligazioneRes_impropriaBulk.class).findByPrimaryKey( new ObbligazioneRes_impropriaBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else
bulk = (OggettoBulk) getHome( aUC, ObbligazioneOrdBulk.class).findByPrimaryKey( new ObbligazioneOrdBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
if ( bulk == null )
throw new ApplicationException( "L'impegno e' stato cancellato" );
}
ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
if ( obbligazione.getStato_obbligazione().equals( obbligazione.STATO_OBB_PROVVISORIO ))
cancellaObbligazioneProvvisoria( aUC, obbligazione );
else if ( obbligazione.getStato_obbligazione().equals( obbligazione.STATO_OBB_DEFINITIVO ))
stornaObbligazioneDefinitiva( aUC, obbligazione );
else // stato = STORNATA
throw handleException( new it.cnr.jada.comp.ApplicationException( "Lo stato dell'impegno non ne consente la cancellazione/storno"));
}
catch ( it.cnr.jada.persistency.PersistencyException e)
{
throw handleException( bulk, e );
}
}
/**
* ricerca ordine
* PreCondition:
* E' stata generata la richiesta di ricerca dell'ordine (se esiste) associato all'obbligazione
* PostCondition:
* L'ordine associato all'obbligazione viene restituito
*
* @param userContext it.cnr.jada.UserContext lo userContext
* @param obblig ObbligazioneBulk l'oobligazione per la quale e' necessario individuare l'ordine
* @return it.cnr.contab.doccont00.ordine.bulk.OrdineBulk l'ordine asssociato all'obbligazione oppure null se nessun ordine e'
* stato definito per l'obbligazione
*/
public it.cnr.contab.doccont00.ordine.bulk.OrdineBulk findOrdineFor(UserContext userContext, ObbligazioneBulk obblig) throws ComponentException {
try{
it.cnr.contab.doccont00.ordine.bulk.OrdineHome ordHome = (it.cnr.contab.doccont00.ordine.bulk.OrdineHome)getHome(userContext,it.cnr.contab.doccont00.ordine.bulk.OrdineBulk.class);
return ordHome.findOrdineFor(obblig);
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(obblig,ex);
}
}
/**
* creazione scadenza/modifica importo - imputazione automatica
* PreCondition:
* L'utente ha richiesto l'imputazione automatica dell'obbligazione e ha creato una scadenza o ha modificato l'importo
* di una scadenza esistente
* PostCondition:
* Per ogni linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* il metodo calcolaPercentualeImputazioneObbligazione viene utilizzato per determinare le percentuali
* assegnate ad ogni linea d'attività/capitolo e per riaprtire l'importo della scadenza sui vari dettagli
* in base a tali percentuali
* creazione scadenza/modifica importo - imputazione manuale
* PreCondition:
* L'utente ha specificato l'imputazione manuale dell'obbligazione e ha creato una scadenza o ha modificato l'importo
* di una scadenza esistente
* PostCondition:
* Per ogni linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* conferma imputazione finanziaria - imputazione automatica
* PreCondition:
* L' utente ha completato l'imputazione finanziaria, confermando le linee di attività selezionate, e ha richiesto la ripartizione automatica degli importi
* delle scadenze
* PostCondition:
* Per ogni scadenza dell'obbligazione e per ogni linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni scadenza dell'obbligazione e per ogni linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* il metodo calcolaPercentualeImputazioneObbligazione viene utilizzato per determinare le percentuali
* assegnate ad ogni linea d'attività/capitolo e per ripartire l'importo della scadenza sui vari dettagli
* in base a tali percentuali
* conferma imputazione finanziaria - imputazione manuale
* PreCondition:
* L' utente ha completato l'imputazione finanziaria, confermando le linee di attività selezionate, e ha selezionato la ripartizione manuale degli importi
* delle scadenze
* PostCondition:
* Per ogni scadenza dell'obbligazione e per ogni linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni scadenza dell'obbligazione e per ogni linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* modifica imputazione finanziaria - imputazione automatica
* PreCondition:
* L' utente ha modificato l'imputazione finanziaria definita per l'obbligazione e ha richiesto la ripartizione automatica degli importi
* delle scadenze
* PostCondition:
* Tutti i dettagli delle scadenze dell'obbligazione che facevano riferimento a linee di attività non più selezionate
* vengono cancellati
* Per ogni scadenza dell'obbligazione e per ogni nuova linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni scadenza dell'obbligazione e per ogni nuova linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* il metodo calcolaPercentualeImputazioneObbligazione viene utilizzato per determinare le percentuali
* assegnate ad ogni linea d'attività/capitolo e per ripartire l'importo della scadenza sui vari dettagli
* in base a tali percentuali
* modifica imputazione finanziaria - imputazione manuale
* PreCondition:
* L' utente ha modificato l'imputazione finanziaria definita per l'obbligazione e ha selezionato la ripartizione manuale degli importi
* delle scadenze
* PostCondition:
* Tutti i dettagli delle scadenze dell'obbligazione che facevano riferimento a linee di attività non più selezionate
* vengono cancellati
* Per ogni scadenza dell'obbligazione e per ogni nuova linea di attività selezionata dall'utente e presente nel piano di gestione viene creato un dettaglio di
* scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerLineeAttivitaDaPdG);
* Analogamente, per ogni scadenza dell'obbligazione e per ogni nuova linea di attività selezionata dall'utente e non presente nel piano di gestione viene creato
* un dettaglio di scadenza Obbligazione_scad_vocebulk (metodo creaDettagliScadenzaPerNuoveLineeAttivita);
* Errore - imputazione automatica per linea att SINGOLA
* PreCondition:
* L'utente ha richiesto l'imputazione automatica, ha inoltre selezionato delle linee di attività dal piano di gestione
* con categoria di dettaglio = SINGOLA e per le quali la somma delle colonne I,K,Q,S,U e' nullo
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare all'utente l'impossibilità di effettuare in automatico la
* ripartizione dell'importo della scadenza sulle linee di attività scelte
* Errore - imputazione automatica per linea att SCARICO
* PreCondition:
* L'utente ha richiesto l'imputazione automatica, ha inoltre selezionato delle linee di attività dal piano di gestione
* con categoria di dettaglio = SCARICO e per le quali la somma delle colonne J,L,R,T e' nullo
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare all'utente l'impossibilità di effettuare in automatico la
* ripartizione dell'importo della scadenza sulle linee di attività scelte
* Errore - percentuali per nuove linee att.
* PreCondition:
* L'utente ha specificato solo delle linee di attività che non sono presenti nel piano di gestione e la somma
* delle percentuali inserite dall'utente da utilizzare nella ripartizione dell'importo di ogni scadenza e' diversa
* da 100.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare l'errore all'utente
* Errore - percentuali per nuove linee att. > 100
* PreCondition:
* L'utente ha specificato per le linee di attività che non sono presenti nel piano di gestione
* delle percentuali da utilizzare nella ripartizione dell'importo di ogni scadenza e la loro somma e'
* maggiore di 100
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare l'errore all'utente
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui creare i dettagli scadenza
* @param scadenzario Obbligazione_scadenzarioBulk la scadenza dell'obbligazione per cui creare i dettagli oppure
* null se e' necessario generare i dettagli per tutte le scadenze
*
*
*/
public ObbligazioneBulk generaDettagliScadenzaObbligazione (UserContext aUC,ObbligazioneBulk obbligazione,Obbligazione_scadenzarioBulk scadenzario) throws ComponentException {
return generaDettagliScadenzaObbligazione(aUC, obbligazione, scadenzario, true);
}
protected ObbligazioneBulk generaDettagliScadenzaObbligazione (UserContext aUC,ObbligazioneBulk obbligazione,Obbligazione_scadenzarioBulk scadenzario, boolean allineaImputazioneFinanziaria) throws ComponentException
{
Obbligazione_scadenzarioBulk os;
// non e' ancora stata selezionata l'imputazione finanziaria
if (obbligazione.getLineeAttivitaSelezionateColl().size() == 0 &&
obbligazione.getNuoveLineeAttivitaColl().size() == 0)
return obbligazione;
// la somma delle percentuali delle nuove linee di attività e' diversa da 100
if (obbligazione.getLineeAttivitaSelezionateColl().size() == 0 &&
obbligazione.getNuoveLineeAttivitaColl().size() > 0)
{
BigDecimal tot = new BigDecimal(0);
for ( Iterator i = obbligazione.getNuoveLineeAttivitaColl().iterator(); i.hasNext(); )
tot = tot.add( ((Linea_attivitaBulk)i.next()).getPrcImputazioneFin());
if ( tot.compareTo( new BigDecimal(100)) != 0 )
throw new ApplicationException( "La somma delle percentuali dei nuovi GAE e' diversa da 100");
}
// la somma delle percentuali delle nuove linee di attività e' maggiore di 100
else if ( obbligazione.getNuoveLineeAttivitaColl().size() > 0)
{
BigDecimal tot = new BigDecimal(0);
for ( Iterator i = obbligazione.getNuoveLineeAttivitaColl().iterator(); i.hasNext(); )
tot = tot.add( ((Linea_attivitaBulk)i.next()).getPrcImputazioneFin());
if ( tot.compareTo( new BigDecimal(100)) > 0 )
throw new ApplicationException( "La somma delle percentuali dei nuovi GAE e' maggiore di 100");
}
//imputazione automatica impossibile
if ( obbligazione.getFl_calcolo_automatico().booleanValue() )
{
BigDecimal totaleLattDaPdg = new BigDecimal(0);
for ( Iterator i = obbligazione.getLineeAttivitaSelezionateColl().iterator(); i.hasNext(); )
totaleLattDaPdg = totaleLattDaPdg.add(((V_pdg_obbligazione_speBulk) i.next()).getImporto());
if ( obbligazione.getLineeAttivitaSelezionateColl().size() > 0 && totaleLattDaPdg.doubleValue() == 0 )
throw new ApplicationException( "GAE da PdG con costi/spese nulli. Imputazione automatica impossibile!");
}
// non sono ancora state inserite le scadenze
if (obbligazione.getObbligazione_scadenzarioColl().size() == 0 )
return obbligazione;
if ( scadenzario != null ) // una sola scadenza e' stata modificata
{
//creo i dettagli della scadenza per le linee attivita da PDG
creaDettagliScadenzaPerLineeAttivitaDaPdG( aUC, obbligazione, scadenzario );
//creo i dettagli della scadenza per le nuove linee attivita
creaDettagliScadenzaPerNuoveLineeAttivita( aUC, obbligazione, scadenzario );
} // imputazione finanziaria e' stata modificata, quindi rigenero i dettagli per tutte le scadenze
else
{
// per ogni scadenza aggiorno i suoi dettagli in base alle linee di attività specificate dall'utente
for ( Iterator scadIterator = obbligazione.getObbligazione_scadenzarioColl().iterator(); scadIterator.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) scadIterator.next();
//cancello i dettagli della scadenza per le linee attivita che non esistono piu'
cancellaDettaglioScadenze( aUC, obbligazione, os );
//creo i dettagli della scadenza per le linee attivita da PDG
creaDettagliScadenzaPerLineeAttivitaDaPdG( aUC, obbligazione, os );
//creo i dettagli della scadenza per le nuove linee attivita
creaDettagliScadenzaPerNuoveLineeAttivita( aUC, obbligazione, os );
}
}
if ( obbligazione.getFl_calcolo_automatico().booleanValue() && allineaImputazioneFinanziaria)
obbligazione = calcolaPercentualeImputazioneObbligazione( aUC, obbligazione );
return obbligazione;
}
/**
* creazione prospetto
* PreCondition:
* L'utente richiede la visualizzazione del prospetto spese per una obbligazione.
* PostCondition:
* L'applicazione crea un report contenente la situazione 'spese' per una obbligazione e per i cdr che
* l'utente ha seelzionato.
* Il prospetto avrà una riga per ogni linea di attività relativa ai piani di gestione dei CdR
* considerati nell'obbligazione. Il formatto sarà:
*
* Colonna 1: Linea di attività
* Colonna 2: Spese previste nel pdg, calcolati per il 1° esercizio = somma degli importi delle colonne (I), (K), (Q), (S) e (U)
* Colonna 3: Spese previste nel pdg, calcolati per il 2° esercizio = somma degli importi delle colonne (AC), (AE) e (AG)
* Colonna 4: Spese previste nel pdg, calcolati per il 3° esercizio = somma degli importi delle colonne (AC), (AE) e (AG)
* Colonna 5: Totale Obbligazioni emesse i cui dettagli corrispondono per CdR e LdA nel 1° esercizio
* Colonna 6: Totale Obbligazioni emesse i cui dettagli corrispondono per CdR e LdA nel 2° esercizio
* Colonna 7: Totale Obbligazioni emesse i cui dettagli corrispondono per CdR e LdA nel 3° esercizio
* valutazione prospetto
* PreCondition:
* I dati necessari per il prospetto sono stati raccolti.
* PostCondition:
* Il delta risultante dal prospetto (Colonna 5 - Colonna 2, Colonna 6 - Colonna 3, Colonna 7 - Colonna4 ) viene confrontato
* con l'importo del totale delle linee di attività
* appartenenti allo stesso CdR, nel caso che detto importo sia maggiore del delta risultante,
* il sistema restituisce un messaggio di 'segnalazione' (non bloccante) con il quale avverte il responsabile
* della possibilità di 'sfondamento'. Il controllo sarà ripetuto per ogni cdr coinvolto nei dettagli delle obbligazioni.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param cdrList la lista di CdrBulk per cui generare il prospetto spese
* @return la lista di V_obblig_pdg_saldo_laBulk coi dati relativi alle linee di attività dei Cdr selezionati
*
*/
public List generaProspettoSpeseObbligazione (UserContext userContext,List cdrList) throws ComponentException
{
try
{
if ( cdrList.size() == 0 )
throw new ApplicationException( "E' necessario selezionare almeno un Cdr");
SQLBuilder sql = getHome( userContext, V_obblig_pdg_saldo_laBulk.class ).createSQLBuilder();
sql.addClause( "AND", "esercizio", sql.EQUALS, ((CNRUserContext) userContext).getEsercizio());
Iterator i = cdrList.iterator();
sql.addClause( "AND", "cd_centro_responsabilita", sql.EQUALS, ((CdrBulk)i.next()).getCd_centro_responsabilita());
//in realtà l'utente può entrare sempre con un solo cdr
while ( i.hasNext() )
sql.addClause( "OR", "cd_centro_responsabilita", sql.EQUALS, ((CdrBulk)i.next()).getCd_centro_responsabilita());
// sql.addOrderBy( "cd_centro_responsabilita" );
return getHome( userContext, V_obblig_pdg_saldo_laBulk.class ).fetchAll( sql );
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private Timestamp getDataOdierna(it.cnr.jada.UserContext userContext) throws ComponentException {
try
{
return getHome(userContext, MandatoIBulk.class).getServerDate();
}
catch(it.cnr.jada.persistency.PersistencyException ex)
{
throw handleException(ex);
}
}
/**
* CDR NRUO
* PreCondition:
* se CD_PROPRIO != '00'
* PostCondition:
* Restituisce 3
* CDR RUO
* PreCondition:
* CD_PROPRIO = '00' e LIVELLO = 2
*
* PostCondition:
* Restituisce 2
* CDR I
* PreCondition:
* LIVELLO = 1
* PostCondition:
* Restituisce 1
* AC
* PreCondition:
* LIVELLO = 1 e UNITA_ORGANIZZATIVA.CD_TIPO_UNITA = 'ENTE'
* PostCondition:
* Restituisce 0
*/
private int getLivelloResponsabilitaCDR(UserContext userContext, CdrBulk cdr) throws ComponentException {
try {
cdr = (CdrBulk)getHome(userContext, cdr).findByPrimaryKey(cdr);
// Se il livello del CDR è 1
if(cdr.getLivello().intValue() == 1) {
// Se il codice proprio del cdr è 0
if (Integer.parseInt(cdr.getCd_proprio_cdr()) == 0) {
Unita_organizzativaBulk uo = new Unita_organizzativaBulk( cdr.getCd_unita_organizzativa() );
uo = (Unita_organizzativaBulk)getHome(userContext, uo).findByPrimaryKey(uo);
Unita_organizzativaBulk cds = new Unita_organizzativaBulk( uo.getCd_unita_padre() );
cds = (Unita_organizzativaBulk)getHome(userContext, cds).findByPrimaryKey(cds);
// e ha come padre il cds dell'ente
if (uo.getFl_uo_cds().booleanValue() == true &&
cds.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE))
// AC
return Stampa_obbligazioni_LAVBulk.LV_AC;
}
return Stampa_obbligazioni_LAVBulk.LV_CDRI;
} else if( (cdr.getLivello().intValue() == 2 && Integer.parseInt(cdr.getCd_proprio_cdr()) == 0)) {
// Sel cdr.livello == 2 e codice proprio = 0
return Stampa_obbligazioni_LAVBulk.LV_RUO;
} else {
// Ogni altro livello o combinazione è livello 3
return Stampa_obbligazioni_LAVBulk.LV_NRUO;
}
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw new ComponentException(e);
}
}
/**
* Calcolo della disponibilità di cassa del Cds per l'esercizio di scrivania o per
* i due esercizi successivi a quello di scrivania.
* PreCondition:
* E' stato richiesto di visualizzare la disponibilità di cassa per
* l'obbligazione che ha esercizio corrente uguale a quello di scrivania
* (esercizio di competenza = esercizio) o per i suoi due esercizi successivi
* (esercizio di competenza = esercizio + n, con n=1,2). In quest'ultimo caso
* l'utente deve aver selezionato la voce del piano dell'obbligazione.
* PostCondition:
* Viene richiamata una stored procedure (getMassaSpendibile) che calcola
* la disponibilità di cassa del Cds dell'obbligazione.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param esercizio_competenza String esercizio di competenza dell'obbligazione
* @param esercizio String esercizio di scrivania
* @param cd_cds String codice del centro di spesa dell'obbligazione
* @param cd_elemento_voce String codice dell'elemento voce dell'obbligazione
* @return disp_cassa_cds BigDecimal disponibilità di cassa del Cds
*
*/
private BigDecimal getMassaSpendibile ( UserContext userContext, Integer esercizio_competenza, Integer esercizio, String cd_cds, String cd_elemento_voce ) throws ComponentException
{
try
{
BigDecimal disp_cassa_cds;
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"{ ? = call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB030.getMassaSpendibile(?, ?, ?, ?)}",false,this.getClass());
try
{
cs.registerOutParameter( 1, java.sql.Types.NUMERIC );
cs.setObject( 2, esercizio_competenza );
cs.setObject( 3, esercizio );
cs.setString( 4, cd_cds );
cs.setString( 5, cd_elemento_voce);
cs.executeQuery();
disp_cassa_cds = cs.getBigDecimal( 1 );
return disp_cassa_cds;
}
catch ( SQLException e )
{
throw handleException(e);
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException(e);
}
}
/**
* Esercizio non aperto
* PreCondition:
* L'esercizio di scrivania e' in uno stato diverso da APERTO
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che non e' possibile creare obbligazioni.
* Esercizio aperto
* PreCondition:
* L'esercizio di scrivania e' in stato APERTO
* PostCondition:
* una istanza di ObbligazioneBulk viene restituita con impostata la data del giorno come data di emissione e
* il Cds da cui dipende l'UO di scrivania come Cds dell'obbligazione
*
* @param aUC lo user context
* @param bulk l'istanza di ObbligazioneBulk da inizializzare
* @return l'istanza di ObbligazioneBulk inizializzata
*
*/
public OggettoBulk inizializzaBulkPerInserimento (UserContext aUC,OggettoBulk bulk) throws ComponentException
{
ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
try
{
Unita_organizzativa_enteBulk uoEnte = (Unita_organizzativa_enteBulk)getHome( aUC, Unita_organizzativa_enteBulk.class).findAll().get(0);
// se l'unità organizzativa è uguale a quella dell'Ente, non è possibile creare obbligazioni
if ( obbligazione.getCd_unita_organizzativa().equals( uoEnte.getCd_unita_organizzativa() ))
throw new ApplicationException("Funzione non consentita per utente abilitato a " + uoEnte.getCd_unita_organizzativa() );
obbligazione.setDt_registrazione( DateServices.getDt_valida(aUC));
obbligazione.setCds( (CdsBulk) getHome( aUC, CdsBulk.class).findByPrimaryKey( obbligazione.getUnita_organizzativa().getUnita_padre() ));
verificaStatoEsercizio( aUC, obbligazione.getEsercizio(), obbligazione.getCd_cds());
// if (!((ObbligazioneHome)getHome(aUC, obbligazione.getClass())).verificaStatoEsercizio(obbligazione))
// throw handleException( new ApplicationException( "Non e' possibile creare obbligazioni: esercizio non ancora aperto!") );
if(obbligazione.getCreditore()!=null && obbligazione.getCreditore().getCd_terzo()!=null){
ObbligazioneHome obbligHome = (ObbligazioneHome) getHome( aUC, obbligazione.getClass());
TerzoHome terzoHome = (TerzoHome) getHome( aUC, TerzoBulk.class);
if(obbligHome.selectCreditoreByClause(obbligazione, terzoHome, new TerzoBulk(obbligazione.getCreditore().getCd_terzo()), null).executeCountQuery(getHomeCache(aUC).getConnection())==0)
throw new ApplicationException("Funzione non consentita per terzo disabilitato.");
}
return super.inizializzaBulkPerInserimento(aUC, obbligazione );
}
catch ( Exception e )
{
throw handleException(obbligazione, e);
}
}
//^^@@
/**
* Obbligazione non esiste
* PreCondition:
* L'obbligazione richiesta non esiste.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'obbligazione non è stata trovata. L'attività non è consentita.
* Obbligazione trovata
* PreCondition:
* L'obbligazione richiesta è stata trovata.
* PostCondition:
* L'obbligazione viene caricata normalmente. L'imputazione finanziaria è impostata una volta sola al livello di testata, e poi vale per tutte le scadenze nello scadenzario. In questo caso l'applicazione ricava le informazione per l'imputazione finanziaria dalla prima scadenza dello scadenzario.
* Scadenzario dell'obbligazione non esiste
* PreCondition:
* L'obbligazione richiesta esiste, ma lo scadenzario per l'obbligazione non esiste.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che lo scadenzario non è stato trovato. L'attività non è consentita.
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk da inizializzare
* @return l'istanza di ObbligazioneBulk inizializzata
*
*/
public OggettoBulk inizializzaBulkPerModifica (UserContext aUC,OggettoBulk obbligazione) throws ComponentException
{
try
{
if ( obbligazione instanceof V_obbligazione_im_mandatoBulk ) {
V_obbligazione_im_mandatoBulk v_obbligazione = (V_obbligazione_im_mandatoBulk) obbligazione;
if (((ObbligazioneBulk)v_obbligazione).isObbligazioneResiduo())
obbligazione = (OggettoBulk) getHome( aUC, ObbligazioneResBulk.class).findByPrimaryKey( new ObbligazioneResBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else if (((ObbligazioneBulk)v_obbligazione).isObbligazioneResiduoImproprio())
obbligazione = (OggettoBulk) getHome( aUC, ObbligazioneRes_impropriaBulk.class).findByPrimaryKey( new ObbligazioneRes_impropriaBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
else
obbligazione = (OggettoBulk) getHome( aUC, ObbligazioneOrdBulk.class).findByPrimaryKey( new ObbligazioneOrdBulk( v_obbligazione.getCd_cds(), v_obbligazione.getEsercizio(), v_obbligazione.getEsercizio_originale(), v_obbligazione.getPg_obbligazione() ));
if ( obbligazione == null )
throw new ApplicationException( "L'impegno e' stato cancellato" );
}
ObbligazioneBulk obblig = (ObbligazioneBulk) super.inizializzaBulkPerModifica( aUC, obbligazione );
//imposta l'unita' organizzativa
// Unita_organizzativaBulk uo = new Unita_organizzativaBulk();
// uo.setCd_unita_organizzativa(obblig.getCd_unita_organizzativa());
// obblig.setUnita_organizzativa( (Unita_organizzativaBulk) getHome( aUC, Unita_organizzativaBulk.class ).findByPrimaryKey( uo ) );
//imposto il cds
// obblig.setCds( (CdsBulk) getHome( aUC, CdsBulk.class).findByPrimaryKey( obblig.getUnita_organizzativa().getUnita_padre() ));
obblig.setIm_mandati( new BigDecimal(0));
// carica lo scadenzario e i suoi dettagli
ObbligazioneHome obbligHome = (ObbligazioneHome) getHome( aUC, obbligazione.getClass());
Obbligazione_scadenzarioHome osHome = (Obbligazione_scadenzarioHome) getHome( aUC, Obbligazione_scadenzarioBulk.class );
obblig.setObbligazione_scadenzarioColl( new BulkList( obbligHome.findObbligazione_scadenzarioList( obblig ) ));
for ( Iterator i = obblig.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
Obbligazione_scadenzarioBulk os = (Obbligazione_scadenzarioBulk) i.next();
initializeKeysAndOptionsInto( aUC, os );
os.setObbligazione( obblig );
os.setStatus( os.STATUS_CONFIRMED);
os.setObbligazione_scad_voceColl( new BulkList( osHome.findObbligazione_scad_voceList(aUC, os )));
//per ogni scadenza carico l'eventuale doc.passivo
V_doc_passivo_obbligazioneBulk docPassivo = osHome.findDoc_passivo( os );
if ( docPassivo != null)
{
os.setEsercizio_doc_passivo( docPassivo.getEsercizio());
os.setPg_doc_passivo( docPassivo.getPg_documento_amm());
os.setCd_tipo_documento_amm(docPassivo.getCd_tipo_documento_amm());
}
//per ogni scadenza carico l'eventuale mandato
Mandato_rigaBulk mandato = osHome.findMandato( os );
if ( mandato != null )
{
os.setEsercizio_mandato( mandato.getEsercizio());
os.setPg_mandato( mandato.getPg_mandato());
obblig.setIm_mandati( obblig.getIm_mandati().add( mandato.getIm_mandato_riga()));
}
// per ogni dettaglio imposto la percentuale
for ( Iterator j = os.getObbligazione_scad_voceColl().iterator(); j.hasNext(); )
{
Obbligazione_scad_voceBulk osv = (Obbligazione_scad_voceBulk)j.next();
osv.setObbligazione_scadenzario( os );
if ( os.getIm_scadenza().doubleValue() != 0 )
osv.setPrc( (osv.getIm_voce().multiply( new BigDecimal(100)).divide( os.getIm_scadenza(), 2, BigDecimal.ROUND_HALF_UP)));
else
osv.setPrc( new BigDecimal(0)) ;
}
/* // per ogni dettaglio carico la linea di attività
for ( Iterator j = os.getObbligazione_scad_voceColl().iterator(); j.hasNext(); )
{
Obbligazione_scad_voceBulk osv = (Obbligazione_scad_voceBulk)j.next();
osv.setLinea_attivita( (Linea_attivitaBulk) getHome( aUC, Linea_attivitaBulk.class ).findByPrimaryKey( new Linea_attivitaKey( osv.getObbligazione_scadenzario().getObbligazione().getCds().getEsercizio(), osv.getCd_linea_attivita(), osv.getCd_centro_responsabilita() )));
}
*/
}
// carica i capitoli di spesa del CDS
obblig = listaCapitoliPerCdsVoce( aUC, obblig );
obblig.refreshCapitoliDiSpesaCdsSelezionatiColl();
// carica i cdr
obblig.setCdrColl( listaCdrPerCapitoli( aUC, obblig));
obblig.refreshCdrSelezionatiColl();
// carica le linee di attività da PDG
obblig.setLineeAttivitaColl( listaLineeAttivitaPerCapitoliCdr( aUC, obblig));
obblig.refreshLineeAttivitaSelezionateColl();
// carica le nuove linee di attività
obblig = obbligHome.refreshNuoveLineeAttivitaColl( aUC, obblig );
obblig.setInternalStatus( ObbligazioneBulk.INT_STATO_LATT_CONFERMATE );
obblig.setIm_iniziale_obbligazione( obblig.getIm_obbligazione());
obblig.setCd_iniziale_elemento_voce( obblig.getCd_elemento_voce());
obblig.setCd_terzo_iniziale( obblig.getCd_terzo());
// SETTO IL FLAG CHE SERVE PER CAPIRE SE OCCORRE RICHIEDERE L'INSERIMENTO DELLA VOCE NUOVA DA UTILIZZARE PER IL RIBALTAMENTO
// LA VOCE VIENE RICHIESTA SOLO SE NON PRESENTE L'ASSOCIAZIONE NELLA TABELLA ASS_EVOLD_EVNEWBULK
obblig.setEnableVoceNext(!existAssElementoVoceNew(aUC,(ObbligazioneBulk)obbligazione));
return obblig;
}
catch( Exception e )
{
throw handleException( e );
}
}
/**
* inizializzazione per inserimento
* PreCondition:
* La richiesta di inizializzazione di un ImpegnoPGiroBulk per inserimento
* e' stata generata
* PostCondition:
* Viene impostata la data di registrazione dell'obbligazione con la data odierna,
* il codice Cds e il codice Cds di origine con il codice Cds di scrivania
*
* @param aUC lo user context
* @param bulk l'istanza di ObbligazioneBulk da inizializzare
* @return l'istanza di ObbligazioneBulk inizializzata
*/
public OggettoBulk inizializzaBulkPerRicerca (UserContext aUC,OggettoBulk bulk) throws ComponentException
{
try
{
if ( bulk instanceof ObbligazioneBulk)
{
ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
obbligazione.setCds( (CdsBulk) getHome( aUC, CdsBulk.class).findByPrimaryKey( new CdsBulk(((CNRUserContext) aUC).getCd_cds())));
obbligazione.setCd_cds_origine( ((CNRUserContext) aUC).getCd_cds() );
// if (!((ObbligazioneHome)getHome(aUC, obbligazione.getClass())).verificaStatoEsercizio(obbligazione))
// throw handleException( new ApplicationException( "Non e' possibile creare obbligazioni: esercizio non ancora aperto!") );
return super.inizializzaBulkPerRicerca( aUC, obbligazione );
}
else
return super.inizializzaBulkPerRicerca( aUC, bulk );
}
catch ( it.cnr.jada.persistency.PersistencyException e )
{
throw handleException(bulk, e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_obbligazioni_LAVBulk stampa) throws ComponentException{
// Imposta i parametri CdS, Esercizio, UO, prendeno come rif. i valori di scrivania
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCdUoForPrint(CNRUserContext.getCd_unita_organizzativa(userContext));
// Setta la Data Inizio e Data Fine di default
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
CdrBulk cdrUtente = cdrFromUserContext(userContext);
Unita_organizzativaBulk uoPadre = null;
try{
uoPadre = (Unita_organizzativaBulk)getHome(userContext, cdrUtente.getUnita_padre()).findByPrimaryKey(cdrUtente.getUnita_padre());
} catch (it.cnr.jada.persistency.PersistencyException pe){
throw new it.cnr.jada.comp.ComponentException(pe);
}
stampa.setCdrUtente(cdrUtente);
stampa.setLivello_Responsabilita(getLivelloResponsabilitaCDR(userContext, cdrUtente));
stampa.setCdrForPrint(new CdrBulk());
stampa.setIsCdrForPrintEnabled(true);
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_obbligazioni_riportabiliVBulk stampa) throws ComponentException{
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
try {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk)home.findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
if (!uoScrivania.isUoCds()){
stampa.setUoForPrint(uoScrivania);
stampa.setIsUOForPrintEnabled(false);
} else {
stampa.setUoForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(true);
}
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(stampa, e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_registro_annotazione_spese_pgiroBulk stampa) throws ComponentException{
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setStato_obbligazione(stampa.STATO_OBB_TUTTI);
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setPgInizio(new Integer(0));
stampa.setPgFine(new Integer(999999999));
stampa.setCdsOrigineForPrint(new CdsBulk());
try {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk)home.findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
String cd_cds_scrivania = it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cds(userContext);
CdsHome cds_home = (CdsHome)getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk)cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
if (stampa.isStampa_cnr()){
if (cds_scrivania.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)){
stampa.setCdsOrigineForPrint(new CdsBulk());
stampa.setIsCdsForPrintEnabled(true);
} else {
stampa.setCdsOrigineForPrint(cds_scrivania);
stampa.setIsCdsForPrintEnabled(false);
}
} else {
stampa.setCdsOrigineForPrint(cds_scrivania);
}
if (!uoScrivania.isUoCds()){
stampa.setUoForPrint(uoScrivania);
stampa.setIsUOForPrintEnabled(false);
} else {
stampa.setUoForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(true);
}
//stampa.setCdsUOInScrivania(uoScrivania.isUoCds());
//stampa.setUoForPrint((stampa.isCdsUOInScrivania())?new Unita_organizzativaBulk():uoScrivania);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(stampa, e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_registro_obbligazioniBulk stampa) throws ComponentException{
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
try {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk)home.findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
stampa.setCdsUOInScrivania(uoScrivania.isUoCds());
stampa.setUoForPrint((stampa.isCdsUOInScrivania())?new Unita_organizzativaBulk():uoScrivania);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(stampa, e);
}
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setPgInizio(new Long(0));
stampa.setPgFine(new Long("9999999999"));
stampa.setStato_obbligazione(stampa.STATO_OBB_TUTTI);
stampa.setCd_tipo_documento_cont(stampa.TIPO_TUTTI);
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_scadenzario_obbligazioniBulk stampa) throws ComponentException{
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
try {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk)home.findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
stampa.setCdsUOInScrivania(uoScrivania.isUoCds());
stampa.setUoForPrint((stampa.isCdsUOInScrivania())?new Unita_organizzativaBulk():uoScrivania);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(stampa, e);
}
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
}
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_obb_doc_ammBulk stampa) throws ComponentException{
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
try {
// Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
// Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk)home.findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
String cd_cds_scrivania = it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cds(userContext);
CdsHome cds_home = (CdsHome)getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk)cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
if (!cds_scrivania.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)){
stampa.setCdsForPrint(cds_scrivania);
stampa.setCdsForPrintEnabled(true);
stampa.setEsercizioDocForPrintEnabled(true);
} else {
stampa.setCdsForPrintEnabled(false);
stampa.setEsercizioDocForPrintEnabled(false);
}
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(stampa, e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
public it.cnr.jada.bulk.OggettoBulk inizializzaBulkPerStampa(it.cnr.jada.UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
try{
if (bulk instanceof Stampa_registro_obbligazioniBulk)
inizializzaBulkPerStampa(userContext, (Stampa_registro_obbligazioniBulk)bulk);
else if (bulk instanceof Stampa_registro_annotazione_spese_pgiroBulk){
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class).findAll().get(0);
((Stampa_registro_annotazione_spese_pgiroBulk)bulk).setCdsEnte(ente);
inizializzaBulkPerStampa(userContext, (Stampa_registro_annotazione_spese_pgiroBulk)bulk);
}
else if (bulk instanceof Stampa_scadenzario_obbligazioniBulk)
inizializzaBulkPerStampa(userContext, (Stampa_scadenzario_obbligazioniBulk)bulk);
else if (bulk instanceof Stampa_obbligazioni_riportabiliVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_obbligazioni_riportabiliVBulk)bulk);
else if (bulk instanceof Stampa_obbligazioni_LAVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_obbligazioni_LAVBulk)bulk);
else if (bulk instanceof Stampa_obb_doc_ammBulk)
inizializzaBulkPerStampa(userContext, (Stampa_obb_doc_ammBulk)bulk);
return bulk;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException( e);
}
}
/**
* Tipologia CdS è 'SAC'
* PreCondition:
* L'utente ha specificato una voce del piano in testata di una obbligazione appartenente al cds SAC
* PostCondition:
* L'elenco degli articoli di spesa CDS presenti nel piano dei conti Parte 1, aventi come titolo-capitolo la voce del piano selezionata dall'utente,
* viene presentato all'utente, evidenziandone la funzione
* Tipologia CdS è diverso da 'SAC'
* PreCondition:
* L'utente ha specificato una voce del piano in testata di una obbligazione appartenente ad un cds con tipologia diversa da SAC
* PostCondition:
* L'elenco dei capitoli di spesa CDS presenti nel piano dei conti Parte 1, aventi come titolo-capitolo la voce del piano selezionata dall'utente,
* viene presentato all'utente, evidenziandone la funzione
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui recuperare i capitoli
* @return ObbligazioneBulk l'obbligazione con i capitoli impostati
*
*/
public ObbligazioneBulk listaCapitoliPerCdsVoce (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
ObbligazioneHome obbligazioneHome = (ObbligazioneHome) getHome( aUC, obbligazione.getClass());
obbligazione.setCapitoliDiSpesaCdsColl( obbligazioneHome.findCapitoliDiSpesaCds( obbligazione ));
}
catch ( Exception e )
{
throw handleException( obbligazione, e );
}
return obbligazione;
}
/**
* CdS diverso da 'SAC' - obbligazione non Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato dei capitoli di spesa CDS per un'obbligazione appartenente ad un cds diverso da SAC e per la
* quale non e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Viene estratto l'elenco dei Cdr appartenenti all'uo di scrivania per i quali sono presenti nel piano di gestione delle linee di attività,
* con categoria dettaglio = SINGOLA e
* la cui funzione e' uguale ad una di quelle dei capitoli di spesa selezionati dall'utente
* CdS diverso da 'SAC' - obbligazione Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato dei capitoli di spesa CDS per un'obbligazione appartenente ad un cds diverso da SAC e per la
* quale e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Viene estratto l'elenco dei Cdr appartenenti all'uo di scrivania per i quali sono presenti nel piano di gestione delle linee di attività,
* con categoria dettaglio = SINGOLA e
* la cui funzione e' uguale ad una di quelle dei capitoli di spesa selezionati dall'utente; a tale elenco viene aggiunto
* quello ottenuto estraendo i Cdr per i quali sono presenti nel piano di gestione delle linee di attività,
* con categoria dettaglio = SCARICO e la cui linea di attività collegata appartiene all'uo di scrivania e
* la cui funzione e' uguale ad una di quelle dei capitoli di spesa selezionati dall'utente
* CdS 'SAC' - obbligazione non Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato degli articoli di spesa CDS per un'obbligazione appartenente al cds SAC e per la
* quale non e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Fra tutti i Cdr selezionati implicitamente dall'utente con la selezione degli articoli viene estratto
* l'elenco di quelli per i quali sono presenti nel piano di gestione delle linee di attività
* con categoria dettaglio = SINGOLA e
* il cui cdr e funzione sono uguali ad uno di quelli degli articoli selezionati dall'utente
* CdS 'SAC' - obbligazione Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato degli articoli di spesa CDS per un'obbligazione appartenente al cds SAC e per la
* quale e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Fra tutti i Cdr selezionati implicitamente dall'utente con la selezione degli articoli viene estratto
* l'elenco di quelli per i quali sono presenti nel piano di gestione delle linee di attività
* con categoria dettaglio = SINGOLA e
* il cui cdr e funzione e' uguale ad una di quelle degli articoli selezionati dall'utente; a tale elenco viene aggiunto
* quello ottenuto estraendo i Cdr per i quali sono presenti nel piano di gestione delle linee di attività,
* con categoria dettaglio = SCARICO e la cui linea di attività collegata ha cdr e funzione uguali
* ad uno di quelli selezionati dall'utente con la selezione degli articoli di spesa
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui recuperare i cdr
* @return ObbligazioneBulk l'obbligazione con i cdr impostati
*/
public Vector listaCdrPerCapitoli (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
Vector cdr = new Vector();
ObbligazioneHome obbligazioneHome = (ObbligazioneHome) getHome( aUC, obbligazione );
if(obbligazione.getEsercizio_originale()==null)
throw new ApplicationException("Valorizzare Esercizio Impegno");
if ( !obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome.TIPO_UO_SAC ) )
{
cdr.addAll( obbligazioneHome.findCdr( (List) obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), obbligazione ));
if (obbligazione.isSpesePerCostiAltrui() )
cdr.addAll( obbligazioneHome.findCdrPerSpesePerCostiAltrui( (List) obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), obbligazione ));
}
else
{
cdr.addAll( obbligazioneHome.findCdrPerSAC( (List) obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), obbligazione ));
if (obbligazione.isSpesePerCostiAltrui() )
cdr.addAll( obbligazioneHome.findCdrPerSpesePerCostiAltruiPerSAC( (List) obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), obbligazione ));
}
return cdr;
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* CdS diverso da 'SAC' - obbligazione non Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato i capitoli di spesa CDS e i cdr per eseguire l'imputazione finanziaria
* di un'obbligazione appartenente ad un cds diverso da SAC e per la
* quale non e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Vengono estratte tutte le linee di attività presenti nel piano di gestione con categoria dettaglio = SINGOLA e
* cdr uguale ad uno di quelli selezionati dall'utente
* e funzione uguale ad una di quelle selezionate implicitamente dall'utente con la selezione dei capitoli.
* CdS diverso da 'SAC' - obbligazione Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato i capitoli di spesa CDS e i cdr per eseguire l'imputazione finanziaria
* di un'obbligazione appartenente ad un cds diverso da SAC e per la
* quale e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Vengono estratte tutte le linee di attività presenti nel piano di gestione con categoria dettaglio = SINGOLA e
* cdr uguale ad uno di quelli selezionati dall'utente
* e funzione uguale ad una di quelle selezionate implicitamente dall'utente con la selezione dei capitoli;
* a tale elenco viene aggiunto quello ottenuto estraendo le linee di attività presenti nel piano di gestione
* con categoria dettaglio = SCARICO e la cui linea di attività collegata appartiene all'uo di scrivania e
* la cui funzione e' uguale ad una di quelle dei capitoli di spesa selezionati dall'utente
* CdS 'SAC' - obbligazione non Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato i capitoli di spesa CDS e i cdr per eseguire l'imputazione finanziaria
* di un'obbligazione appartenente al cds SAC e per la
* quale non e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Vengono estratte tutte le linee di attività presenti nel piano di gestione con categoria dettaglio = SINGOLA e
* cdr uguale ad uno di quelli selezionati dall'utente
* e cdr e funzione uguali ad uno di quelli selezionati implicitamente dall'utente con la selezione degli articoli.
* CdS 'SAC' - obbligazione Spese per Costi Altrui
* PreCondition:
* L'utente ha selezionato i capitoli di spesa CDS e i cdr per eseguire l'imputazione finanziaria
* di un'obbligazione appartenente al cds SAC e per la
* quale e' stato selezionato il flag Spese per Costi Altrui
* PostCondition:
* Vengono estratte tutte le linee di attività presenti nel piano di gestione con categoria dettaglio = SINGOLA e
* cdr uguale ad uno di quelli selezionati dall'utente
* e cdr e funzione uguali ad uno di quelli selezionati implicitamente dall'utente con la selezione degli articoli;
* a tale elenco viene aggiunto quello ottenuto estraendo le linee di attività presenti nel piano di gestione
* con categoria dettaglio = SCARICO il cui cdr e' uno di quelli selezionati dall'utente e la cui linea di attività
* collegata ha cdr e funzione uguale ad uno di quelli selezionati implicitamente dall'utente
* con la selezione degli articoli
*
* @param aUC lo UserContext che ha generato la richiesta
* @param obbligazione ObbligazioneBulk l'obbligazione per cui recuperare le linee di attività
* @return ObbligazioneBulk l'obbligazione con le linee di attività impostate
*
*/
public Vector listaLineeAttivitaPerCapitoliCdr (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
Vector lineeAttivita = new Vector();
List cdrDiScrivaniaColl = (List) obbligazione.getCdrDiScrivaniaSelezionatiColl( ((CNRUserContext)aUC).getCd_unita_organizzativa());
ObbligazioneHome obbligazioneHome = (ObbligazioneHome) getHome( aUC, obbligazione );
if ( !obbligazione.getCds().getCd_tipo_unita().equalsIgnoreCase( it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome.TIPO_UO_SAC ) )
{
lineeAttivita.addAll( obbligazioneHome.findLineeAttivita( cdrDiScrivaniaColl, (List)obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), obbligazione ));
if (obbligazione.isSpesePerCostiAltrui() )
lineeAttivita.addAll( obbligazioneHome.findLineeAttivitaPerSpesePerCostiAltrui( (List)obbligazione.getCdrSelezionatiColl(),(List) obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(), ((CNRUserContext) aUC).getCd_unita_organizzativa(), obbligazione ));
}
else //SAC
{
List capitoli = new LinkedList(); //elimina dalla lista dei capitoli selezionati quelli che hanno cdr non
//selezionati dall'utente nella lista Cdr
for (Iterator i = obbligazione.getCapitoliDiSpesaCdsSelezionatiColl().iterator(); i.hasNext(); )
{
IVoceBilancioBulk voce = (IVoceBilancioBulk) i.next();
if (voce instanceof Voce_fBulk) {
for ( Iterator j = cdrDiScrivaniaColl.iterator(); j.hasNext(); )
if (((CdrBulk)j.next()).getCd_centro_responsabilita().equals( ((Voce_fBulk)voce).getCd_centro_responsabilita()))
capitoli.add( voce );
} else
capitoli.add( voce );
}
lineeAttivita.addAll( obbligazioneHome.findLineeAttivitaSAC( cdrDiScrivaniaColl, capitoli, obbligazione ));
if (obbligazione.isSpesePerCostiAltrui() )
lineeAttivita.addAll( obbligazioneHome.findLineeAttivitaPerSpesePerCostiAltruiSAC( (List)obbligazione.getCapitoliDiSpesaCdsSelezionatiColl(),(List) obbligazione.getCdrSelezionatiColl(), obbligazione));
}
if ( obbligazione.isSpesePerCostiAltrui() )
lineeAttivita = accorpaLineeAttivita( aUC, lineeAttivita );
return lineeAttivita;
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Lock scadenza
* PreCondition:
* E' stato richiesto l'inserimento di un lock sulla scadenza di un'obbligazione
* PostCondition:
* Il record relativo alla scadenza e' stato messo in lock e non e' pertanto consentito ad altre transazioni
* l'accesso a tale scadenza
*
* @param userContext lo UserContext che ha generato la richiesta
* @param scadenza Obbligazione_scadenzarioBulk da mettere in lock
*
*/
public void lockScadenza( UserContext userContext,IScadenzaDocumentoContabileBulk scadenza) throws ComponentException
{
try
{
getHome( userContext, scadenza.getClass()).lock( (OggettoBulk)scadenza );
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* Tutti i controlli superati - contesto non transazionale
* PreCondition:
* Una richiesta di modifica di un'obbligazione e' stata generata
* L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
* L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* L'obbligazione non e' stata modificata in un contesto transazionale
* PostCondition:
* L'obbligazione viene aggiornata
* I dettagli di tutte le scadenze vengono aggiornati (metodo generaDettagliScadenzaObbligazione)
* I saldi dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
* Lo stato COFI/COGE degli eventuali doc. amministrativi associati all'obbligazione e' stato aggiornato
* Tutti i controlli superati - contesto transazionale
* PreCondition:
* Una richiesta di modifica di un'obbligazione e' stata generata
* L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
* L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* L'obbligazione e' stata modificata in un contesto transazionale
* PostCondition:
* L'obbligazione viene aggiornata e i dettagli di tutte le scadenze vengono aggiornati (metodo generaDettagliScadenzaObbligazione)
* Errore di verifica obbligazione
* PreCondition:
* Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli eseguiti dal metodo 'verificaObbligazione'
* PostCondition:
* Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
* Errore di disponibilità di cassa
* PreCondition:
* Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* PostCondition:
* Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
* Errore di disponibilità di cassa - forzatura
* PreCondition:
* Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
* controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
* e l'utente ha scelto di forzare l'emissione dell'obbligazione
* PostCondition:
* L'obbligazione viene modificata, i dettagli di tutte le scadenze vengono modificati (metodo generaDettagliScadenzaObbligazione) e i saldi
* dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
*
* @param aUC lo user context
* @param bulk l'istanza di ObbligazioneBulk da modificare
* @return l'istanza di ObbligazioneBulk modificata
*
*/
public OggettoBulk modificaConBulk (UserContext aUC,OggettoBulk bulk) throws ComponentException
{
try
{
Obbligazione_scadenzarioBulk scadenza;
ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
validaCampi(aUC, obbligazione);
/* simona 23.10.2002 : invertito l'ordine della verifica e della generzione dettagli x problema 344 */
//genera eventualmente i dettagli che non erano ancora stati generati
generaDettagliScadenzaObbligazione( aUC, obbligazione, null );
//verifica la correttezza dell'obbligazione
verificaObbligazione( aUC, obbligazione );
//verifica la correttezza dell'imputazione finanziaria
validaImputazioneFinanziaria( aUC, obbligazione );
//aggiorna il db:
updateBulk( aUC, obbligazione);
makeBulkListPersistent( aUC, obbligazione.getObbligazione_scadenzarioColl());
//esegue il check di disponibilita di cassa
controllaDisponibilitaCassaPerVoce( aUC, obbligazione, MODIFICA );
verificaCoperturaContratto( aUC, obbligazione );
verificaCoperturaIncaricoRepertorio(aUC, obbligazione);
if ( !aUC.isTransactional() )
{
//aggiorna il capitolo saldo
aggiornaCapitoloSaldoObbligazione( aUC, obbligazione, MODIFICA );
aggiornaStatoCOAN_COGEDocAmm( aUC, obbligazione );
}
// Se utente non è supervisore e la voce va azzerata non è possibile aumentare l'importo dell'impegno residuo
if (obbligazione.isObbligazioneResiduo())
if(verificaVoceResidua(aUC, obbligazione))
if(obbligazione.getIm_iniziale_obbligazione().compareTo(obbligazione.getIm_obbligazione()) <0)
throw new ApplicationException( "Aggiornamento non consentito! L'impegno residuo non può essere aumentato" );
obbligazione.setIm_iniziale_obbligazione( obbligazione.getIm_obbligazione());
obbligazione.setCd_iniziale_elemento_voce( obbligazione.getCd_elemento_voce());
if (obbligazione.isObbligazioneResiduo()) {
if (((ObbligazioneResBulk)obbligazione).isSaldiDaAggiornare()) {
// aggiorniamo i saldi legati alle modifiche agli impegni residui
aggiornaSaldiImpegniResiduiPropri(aUC,obbligazione);
// aggiorniamo il progressivo in definitivo
Obbligazione_modificaBulk obbMod = ((ObbligazioneResBulk) obbligazione).getObbligazione_modifica();
if (obbMod!=null && obbMod.isTemporaneo()) {
aggiornaObbligazioneModificaTemporanea(aUC, obbMod);
}
}
}
verificaStatoEsercizio(
aUC,
((CNRUserContext)aUC).getEsercizio(),
obbligazione.getCd_cds());
validaCreaModificaOrigineFonti(aUC, obbligazione);
obbligazione = validaCreaModificaElementoVoceNext(aUC, obbligazione);
return obbligazione;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/*
* Modifica l'importo di una scadenza e aggiunge la differenza alla scadenza successiva oppure modifica l'importo di una
* scadenza e l'importo della testata dell'obbligazione
*
* Pre-post-conditions:
*
* Nome: Modifica Scadenza
* Pre: E' stata generata la richiesta di modifica l'importo di una scadenza
* Post: L'importo della scadenza e della testata dell'obbligazione sono stati modificati
*
* Nome: Modifica Scadenza successiva
* Pre: E' stata generata la richiesta di modifica dell'importo di una scadenza e la differenza fra il nuovo importo
* e l'importo precedente deve essere riportato sulla scadenza successiva
* Post: L'importo della scadenza e della scadenza successiva sono stati modificati
*
* Nome: Scadenza successiva - Errore ultima scadenza
* Pre: E' stata generata la richiesta di modifica dell'importo di una scadenza e non esiste una scadenza
* successiva su cui scaricare la differenza fra l'importo attuale scadenza e il nuovo importo
* Post: Viene generata un'ApplicationException per segnalare l'impossibilità di aggiornamento della scadenza
*
* Nome: Scadenza successiva - Errore importo scadenza successiva
* Pre: E' stata generata la richiesta di modifica dell'importo di una scadenza e (im_scadenza_successisva -
* nuovo_im_scadenza + im_scadenza) e' minore di 0
* Post: Viene generata un'ApplicationException per segnalare l'impossibilità di aggiornamento della scadenza
*
* Nome: Scadenza successiva - Errore doc amministrativi associati
* Pre: E' stata generata la richiesta di modifica dell'importo di una scadenza e la scadenza successiva ha
* già dei documenti amministrativi associati
* Post: Viene generata un'ApplicationException per segnalare l'impossibilità di aggiornamento della scadenza
*
* Nome: Errore imputazione manuale
* Pre: E' stata generata la richiesta di modifica dell'importo di una scadenza e l'imputazione finanziaria
* dell'obbligazione non e' automatica
* Post: Viene generata un'ApplicationException per segnalare l'impossibilità di aggiornamento della scadenza
*
* @param userContext lo userContext che ha generato la richiesta
* @param scad l'istanza di Obbligazione_scadenzarioBulk il cui importo deve essere modificato
* @param nuovoImporto il valore del nuovo importo che la scadenza di obbligazione dovrà assumere
* @param modificaScadenzaSuccessiva il flag che indica se modificare la testata dell'obbligazione o modificare la scadenza
* successiva dell'obbligazione
* @return l'istanza di Obbligazione_scadenzarioBulk con l'importo modificato
*/
public IScadenzaDocumentoContabileBulk modificaScadenzaInAutomatico( UserContext userContext, IScadenzaDocumentoContabileBulk scad, BigDecimal nuovoImporto, boolean modificaScadenzaSuccessiva ) throws ComponentException
{
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)scad;
if (scadenza.getObbligazione().isObbligazioneResiduo())
throw handleException( new ApplicationException( "Aggiornamento in automatico non consentito! L'impegno residuo non è modificabile" ));
if ( !scadenza.getObbligazione().getFl_calcolo_automatico().booleanValue() )
throw handleException( new ApplicationException( "Aggiornamento in automatico non consentito! L'impegno consente solo l'imputazione manuale" ));
if ( scadenza.getIm_scadenza().compareTo( nuovoImporto ) == 0 )
throw handleException( new ApplicationException( "Aggiornamento in automatico non necessario" ));
if ( nuovoImporto.compareTo( new BigDecimal(0)) < 0 )
throw handleException( new ApplicationException( "L'importo della scadenza deve essere maggiore di 0" ));
if ( modificaScadenzaSuccessiva )
{
scadenza.setFl_aggiorna_scad_successiva( new Boolean( true) );
//salvo i dati iniziali
Obbligazione_scadenzarioBulk scadIniziale = new Obbligazione_scadenzarioBulk();
scadIniziale.setIm_scadenza( scadenza.getIm_scadenza());
scadenza.setScadenza_iniziale( scadIniziale );
//aggiorno importo scadenza corrente
scadenza.setIm_scadenza( nuovoImporto );
scadenza.setToBeUpdated();
//aggiorna l'importo della scadenza successiva ed i suoi dettagli
Obbligazione_scadenzarioBulk scadSuccessiva = aggiornaScadenzaSuccessivaObbligazione( userContext,scadenza );
scadSuccessiva.setToBeUpdated();
//aggiorna i dettagli della scadenza corrente e della scadenza successiva
calcolaPercentualeImputazioneObbligazione( userContext, scadenza.getObbligazione() );
modificaConBulk( userContext, scadenza.getObbligazione());
return scadenza;
}
else
{
//aggiorno importo testata
ObbligazioneBulk obbligazione = scadenza.getObbligazione();
obbligazione.setIm_obbligazione( obbligazione.getIm_obbligazione().add(nuovoImporto).subtract( scadenza.getIm_scadenza()) );
obbligazione.setToBeUpdated();
//aggiorno importo scadenza corrente
scadenza.setIm_scadenza( nuovoImporto );
scadenza.setToBeUpdated();
//aggiorna i dettagli della scadenza corrente
calcolaPercentualeImputazioneObbligazione( userContext, obbligazione );
modificaConBulk( userContext, obbligazione );
return scadenza;
}
}
/*
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite su ObbligazioniBulk
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di un'obbligazione
* Pre: E' stata generata la richiesta di ricerca di un'obbligazione
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che l'obbligazione sia stata originata dall'uo di scrivania e che il suo progressivo sia
* un numero positivo (in modo da escludere le obbligazioni temporaneamente create dalla gestione dei
* documenti amministrativi)
*
* @param userContext lo userContext che ha generato la richiesta
* @param clauses clausole di ricerca gia' specificate dall'utente
* @param bulk istanza di CdsBulk o Unita_organizzativaBulk che deve essere utilizzata per la ricerca
* @return sql Query con le clausole aggiuntive
*/
protected Query select(UserContext userContext,CompoundFindClause clauses,OggettoBulk bulk) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = (SQLBuilder) super.select( userContext, clauses, bulk );
sql.addClause( "AND", "cd_uo_origine", sql.EQUALS, ((CNRUserContext)userContext).getCd_unita_organizzativa());
sql.addClause( "AND", "esercizio", sql.EQUALS, ((CNRUserContext)userContext).getEsercizio());
sql.addClause( "AND", "pg_obbligazione", sql.GREATER_EQUALS, new Long(0));
if ( bulk instanceof V_obbligazione_im_mandatoBulk )
{
verificaStatoEsercizio( userContext, ((CNRUserContext)userContext).getEsercizio(), ((CNRUserContext)userContext).getCd_cds() );
sql.addClause( "AND", "stato_obbligazione", sql.EQUALS, ((V_obbligazione_im_mandatoBulk) bulk).getStato_obbligazione());
}
return sql;
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca delle Linee di Attività non da PDG
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di una linea di attività
* Pre: E' stata generata la richiesta di ricerca di una linea di attività non presente nel PDG
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la Linea Attività sia valida per l'esercizio di scrivania, che il suo CDR appartenga
* all'UO di scrivania, che la Linea di Attività non sia presente nel PDG e che la sua funzione
* sia uguale a quella di uno dei capitoli di spesa selezionati dall'utente
* @param userContext lo userContext che ha generato la richiesta
* @param uo istanza di Unita_organizzativaBulk
* @param cds istanza di CdsBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con la clausola aggiuntive
*/
public SQLBuilder selectCdrForPrintByClause(UserContext userContext, Stampa_obbligazioni_LAVBulk stampa, it.cnr.contab.config00.sto.bulk.CdrBulk cdr, CompoundFindClause clauses ) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
CdrBulk cdr_scrivania = cdrFromUserContext(userContext);
int livelloResponsabilita = getLivelloResponsabilitaCDR(userContext, cdr_scrivania);
it.cnr.contab.config00.sto.bulk.CdrHome home;
it.cnr.jada.persistency.sql.SQLBuilder sql;
if (livelloResponsabilita == Stampa_obbligazioni_LAVBulk.LV_AC) {
home = (it.cnr.contab.config00.sto.bulk.CdrHome)getHome(userContext, CdrBulk.class,"V_CDR_VALIDO","none");
sql = home.createSQLBuilder();
} else {
home = (it.cnr.contab.config00.sto.bulk.CdrHome)getHome(userContext, CdrBulk.class, "V_PDG_CDR_FIGLI_PADRE","none");
sql = home.createSQLBuilder();
sql.addSQLClause("AND", "CD_CDR_ROOT", sql.EQUALS, cdr_scrivania.getCd_centro_responsabilita());
}
sql.addSQLClause("AND", "ESERCIZIO", sql.EQUALS, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));
sql.addClause(clauses);
return sql;
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca delle Linee di Attività non da PDG
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di una linea di attività
* Pre: E' stata generata la richiesta di ricerca di una linea di attività non presente nel PDG
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la Linea Attività sia valida per l'esercizio di scrivania, che il suo CDR appartenga
* all'UO di scrivania, che la Linea di Attività non sia presente nel PDG e che la sua funzione
* sia uguale a quella di uno dei capitoli di spesa selezionati dall'utente
* @param userContext lo userContext che ha generato la richiesta
* @param uo istanza di Unita_organizzativaBulk
* @param cds istanza di CdsBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con la clausola aggiuntive
*/
public SQLBuilder selectLinea_attByClause(UserContext userContext, it.cnr.contab.doccont00.core.bulk.Linea_attivitaBulk context, it.cnr.contab.config00.latt.bulk.WorkpackageBulk bulk, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
return selectLinea_attByClause( userContext, context.getObbligazione(), clauses );
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca delle Linee di Attività non da PDG
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di una linea di attività
* Pre: E' stata generata la richiesta di ricerca di una linea di attività non presente nel PDG
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la Linea Attività sia valida per l'esercizio di scrivania, che il suo CDR appartenga
* all'UO di scrivania, che la Linea di Attività non sia presente nel PDG e che la sua funzione
* sia uguale a quella di uno dei capitoli di spesa selezionati dall'utente
* @param userContext lo userContext che ha generato la richiesta
* @param uo istanza di Unita_organizzativaBulk
* @param cds istanza di CdsBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con la clausola aggiuntive
*/
public SQLBuilder selectLinea_attByClause(UserContext userContext, ObbligazioneBulk obbligazione, CompoundFindClause clauses ) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = getHome(userContext, it.cnr.contab.config00.latt.bulk.WorkpackageBulk.class, "V_LINEA_ATT_NOT_IN_PDG").createSQLBuilder();
sql.setHeader( "SELECT DISTINCT " + sql.getColumnMap().getDefaultSelectHeaderSQL() );
sql.addClause( clauses );
sql.addSQLClause( "AND", "ESERCIZIO", sql.EQUALS, ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getEsercizio() );
sql.addSQLClause( "AND", "CD_CENTRO_RESPONSABILITA", sql.LIKE, obbligazione.getCd_unita_organizzativa() + ".%" );
//condizioni sulla funzione
Iterator i = obbligazione.getCapitoliDiSpesaCdsSelezionatiColl().iterator();
if ( i.hasNext() )
{
sql.openParenthesis( "AND" );
sql.addClause("AND", "cd_funzione", SQLBuilder.EQUALS, ((IVoceBilancioBulk)i.next()).getCd_funzione());
while ( i.hasNext() )
sql.addClause( "OR", "cd_funzione", SQLBuilder.EQUALS, ((IVoceBilancioBulk)i.next()).getCd_funzione());
sql.closeParenthesis();
}
sql.openParenthesis( "AND");
sql.addSQLClause( "AND", "cd_elemento_voce", sql.ISNULL, null );
sql.openParenthesis( "OR");
sql.addSQLClause( "AND", "cd_elemento_voce", sql.NOT_EQUALS, obbligazione.getCd_elemento_voce() );
String condizione = "not exists ( select 1 from " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"pdg_preventivo_spe_det " +
"where pdg_preventivo_spe_det.categoria_dettaglio = '" + Pdg_preventivo_spe_detBulk.CAT_SINGOLO +"' " +
"and pdg_preventivo_spe_det.stato = '" + Pdg_preventivo_spe_detBulk.ST_CONFERMA +"' " +
"and pdg_preventivo_spe_det.ti_appartenenza = '" + Elemento_voceHome.APPARTENENZA_CDS + "' " +
"and pdg_preventivo_spe_det.ti_gestione = '" + Elemento_voceHome.GESTIONE_SPESE +"' " +
"and pdg_preventivo_spe_det.esercizio = V_LINEA_ATT_NOT_IN_PDG.ESERCIZIO " +
"and pdg_preventivo_spe_det.cd_centro_responsabilita = V_LINEA_ATT_NOT_IN_PDG.cd_centro_responsabilita " +
"and pdg_preventivo_spe_det.cd_linea_attivita = V_LINEA_ATT_NOT_IN_PDG.cd_linea_attivita " +
"and pdg_preventivo_spe_det.cd_elemento_voce = '" + obbligazione.getCd_elemento_voce() + "' ";
if (obbligazione.isObbligazioneResiduo() || obbligazione.isObbligazioneResiduoImproprio())
condizione = condizione +
"union " +
"select 1 from " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"voce_f_saldi_cdr_linea " +
"where voce_f_saldi_cdr_linea.esercizio > voce_f_saldi_cdr_linea.esercizio_res " +
"and voce_f_saldi_cdr_linea.esercizio_res = " + obbligazione.getEsercizio_originale() +
"and voce_f_saldi_cdr_linea.ti_appartenenza = '" + Elemento_voceHome.APPARTENENZA_CDS + "' " +
"and voce_f_saldi_cdr_linea.ti_gestione = '" + Elemento_voceHome.GESTIONE_SPESE +"' " +
"and voce_f_saldi_cdr_linea.esercizio = V_LINEA_ATT_NOT_IN_PDG.ESERCIZIO " +
"and voce_f_saldi_cdr_linea.cd_centro_responsabilita = V_LINEA_ATT_NOT_IN_PDG.cd_centro_responsabilita " +
"and voce_f_saldi_cdr_linea.cd_linea_attivita = V_LINEA_ATT_NOT_IN_PDG.cd_linea_attivita " +
"and voce_f_saldi_cdr_linea.cd_elemento_voce = '" + obbligazione.getCd_elemento_voce() + "' ";
else
condizione = condizione +
"union " +
"select 1 from " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"pdg_modulo_spese_gest " +
"where pdg_modulo_spese_gest.categoria_dettaglio = '" + Pdg_modulo_spese_gestBulk.CAT_DIRETTA +"' " +
"and pdg_modulo_spese_gest.ti_appartenenza = '" + Elemento_voceHome.APPARTENENZA_CDS + "' " +
"and pdg_modulo_spese_gest.ti_gestione = '" + Elemento_voceHome.GESTIONE_SPESE +"' " +
"and pdg_modulo_spese_gest.esercizio = V_LINEA_ATT_NOT_IN_PDG.ESERCIZIO " +
"and pdg_modulo_spese_gest.cd_centro_responsabilita = V_LINEA_ATT_NOT_IN_PDG.cd_centro_responsabilita " +
"and pdg_modulo_spese_gest.cd_linea_attivita = V_LINEA_ATT_NOT_IN_PDG.cd_linea_attivita " +
"and pdg_modulo_spese_gest.cd_elemento_voce = '" + obbligazione.getCd_elemento_voce() + "' ";
condizione = condizione + ") ";
sql.addSQLClause( "AND", condizione);
sql.closeParenthesis();
sql.closeParenthesis();
/**
* Escludo la linea di attività dell'IVA C20
*/
it.cnr.contab.config00.bulk.Configurazione_cnrBulk config = null;
try {
config = Utility.createConfigurazioneCnrComponentSession().getConfigurazione( userContext, null, null, it.cnr.contab.config00.bulk.Configurazione_cnrBulk.PK_LINEA_ATTIVITA_SPECIALE, it.cnr.contab.config00.bulk.Configurazione_cnrBulk.SK_LINEA_COMUNE_VERSAMENTO_IVA);
} catch (RemoteException e) {
throw new ComponentException(e);
} catch (EJBException e) {
throw new ComponentException(e);
}
if (config != null){
sql.addSQLClause( "AND", "CD_LINEA_ATTIVITA", sql.NOT_EQUALS, config.getVal01());
}
/**
* Se è attivo il nuovo regolamento 2006 e non è un residuo proprio
* Vedo solo le Linee sfondabili
*/
try {
if (Utility.createParametriCnrComponentSession().getParametriCnr(userContext,CNRUserContext.getEsercizio(userContext)).getFl_regolamento_2006().booleanValue() && !obbligazione.isObbligazioneResiduo()){
sql.addSQLClause( "AND", "FL_LIMITE_ASS_OBBLIG", sql.EQUALS, "N");
}
}catch (RemoteException e) {
throw new ComponentException(e);
} catch (EJBException e) {
throw new ComponentException(e);
}
return sql;
}
/**
*
* @param userContext
* @param obbligazione
* @param contratto
* @param clauses
* @return
* @throws ComponentException
* @throws it.cnr.jada.persistency.PersistencyException
*/
public SQLBuilder selectContrattoByClause(UserContext userContext, ObbligazioneBulk obbligazione, ContrattoBulk contratto, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
Parametri_cdsHome paramHome = (Parametri_cdsHome)getHome(userContext, Parametri_cdsBulk.class);
Parametri_cdsBulk param_cds;
try {
param_cds =
(Parametri_cdsBulk) paramHome.findByPrimaryKey(
new Parametri_cdsBulk(
obbligazione.getCd_cds(),
obbligazione.getEsercizio()));
} catch (PersistencyException e) {
throw new ComponentException(e);
}
SQLBuilder sql = getHome(userContext,ContrattoBulk.class).createSQLBuilder();
if (clauses != null)
sql.addClause(clauses);
sql.openParenthesis("AND");
sql.addSQLClause("AND","NATURA_CONTABILE",SQLBuilder.EQUALS, ContrattoBulk.NATURA_CONTABILE_PASSIVO);
sql.addSQLClause("OR","NATURA_CONTABILE",SQLBuilder.EQUALS, ContrattoBulk.NATURA_CONTABILE_ATTIVO_E_PASSIVO);
sql.closeParenthesis();
if(param_cds != null && param_cds.getFl_contratto_cessato().booleanValue()){
sql.openParenthesis("AND");
sql.addSQLClause("AND","STATO",SQLBuilder.EQUALS, ContrattoBulk.STATO_DEFINITIVO);
sql.addSQLClause("OR","STATO",SQLBuilder.EQUALS, ContrattoBulk.STATO_CESSSATO);
sql.closeParenthesis();
}
else
sql.addSQLClause("AND", "STATO", sql.EQUALS, ContrattoBulk.STATO_DEFINITIVO);
// Se uo 999.000 in scrivania: visualizza tutti i contratti
Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHome( userContext, Unita_organizzativa_enteBulk.class).findAll().get(0);
if (!((CNRUserContext) userContext).getCd_unita_organizzativa().equals( ente.getCd_unita_organizzativa())){
sql.openParenthesis("AND");
sql.addSQLClause("AND","CONTRATTO.CD_UNITA_ORGANIZZATIVA",sql.EQUALS,CNRUserContext.getCd_unita_organizzativa(userContext));
SQLBuilder sqlAssUo = getHome(userContext,Ass_contratto_uoBulk.class).createSQLBuilder();
sqlAssUo.addSQLJoin("CONTRATTO.ESERCIZIO","ASS_CONTRATTO_UO.ESERCIZIO");
sqlAssUo.addSQLJoin("CONTRATTO.PG_CONTRATTO","ASS_CONTRATTO_UO.PG_CONTRATTO");
sqlAssUo.addSQLClause("AND","ASS_CONTRATTO_UO.CD_UNITA_ORGANIZZATIVA",sql.EQUALS,CNRUserContext.getCd_unita_organizzativa(userContext));
sql.addSQLExistsClause("OR",sqlAssUo);
sql.closeParenthesis();
}
sql.addTableToHeader("TERZO");
sql.addSQLJoin("CONTRATTO.FIG_GIUR_EST", SQLBuilder.EQUALS,"TERZO.CD_TERZO");
sql.addSQLClause("AND","TERZO.DT_FINE_RAPPORTO",SQLBuilder.ISNULL,null);
if((obbligazione.getCreditore() != null && obbligazione.getCreditore().getCd_terzo()!=null)){
sql.openParenthesis("AND");
sql.openParenthesis("AND");
sql.addSQLClause(FindClause.AND, "FIG_GIUR_EST",SQLBuilder.EQUALS,obbligazione.getCreditore().getCd_terzo());
AnagraficoHome anagraficoHome = (AnagraficoHome) getHome(userContext, AnagraficoBulk.class);
sql.closeParenthesis();
try {
for (Iterator i = anagraficoHome.findAssociatiStudio(obbligazione.getCreditore().getAnagrafico()).iterator(); i.hasNext();) {
sql.openParenthesis("OR");
Anagrafico_terzoBulk associato = i.next();
sql.addSQLClause("OR", "CONTRATTO.FIG_GIUR_EST",SQLBuilder.EQUALS, associato.getCd_terzo());
sql.closeParenthesis();
}
} catch (IntrospectionException e) {
}
sql.closeParenthesis();
}
/*
sql.openParenthesis("AND");
sql.addSQLClause("AND","TRUNC(NVL(DT_FINE_VALIDITA,SYSDATE)) >= TRUNC(SYSDATE)");
sql.addSQLClause("OR","(DT_PROROGA IS NOT NULL AND TRUNC(DT_PROROGA) >= TRUNC(SYSDATE))");
sql.closeParenthesis();
*/
return sql;
}
/**
*
* @param userContext
* @param obbligazione
* @param contratto
* @param clauses
* @return
* @throws ComponentException
* @throws it.cnr.jada.persistency.PersistencyException
*/
public void validaContratto(UserContext userContext, ObbligazioneBulk obbligazione, ContrattoBulk contratto, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = selectContrattoByClause(userContext, obbligazione, contratto, clauses);
sql.addSQLClause("AND","ESERCIZIO",SQLBuilder.EQUALS, contratto.getEsercizio());
sql.addSQLClause("AND","STATO",SQLBuilder.EQUALS, contratto.getStato());
sql.addSQLClause("AND","PG_CONTRATTO",SQLBuilder.EQUALS, contratto.getPg_contratto());
ContrattoHome home = (ContrattoHome)getHome(userContext,ContrattoBulk.class);
it.cnr.jada.persistency.Broker broker = home.createBroker(sql);
if(!broker.next())
throw new ApplicationException("Contratto non valido!");
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca delle Linee di Attività non da PDG
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di una linea di attività
* Pre: E' stata generata la richiesta di ricerca di una linea di attività non presente nel PDG
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la Linea Attività sia valida per l'esercizio di scrivania, che il suo CDR appartenga
* all'UO di scrivania, che la Linea di Attività non sia presente nel PDG e che la sua funzione
* sia uguale a quella di uno dei capitoli di spesa selezionati dall'utente
* @param userContext lo userContext che ha generato la richiesta
* @param uo istanza di Unita_organizzativaBulk
* @param cds istanza di CdsBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con la clausola aggiuntive
*/
public SQLBuilder selectLineaAttForPrintByClause(UserContext userContext,
Stampa_obbligazioni_LAVBulk stampa,
it.cnr.contab.config00.latt.bulk.WorkpackageBulk linea_att,
CompoundFindClause clauses ) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = getHome(userContext,it.cnr.contab.config00.latt.bulk.WorkpackageBulk.class, "V_LINEA_ATTIVITA_VALIDA").createSQLBuilder();
if (clauses != null) sql.addClause(clauses);
sql.addClause("AND", "cd_centro_responsabilita", SQLBuilder.EQUALS, stampa.getCdrForPrint().getCd_centro_responsabilita());
sql.addSQLClause("AND","V_LINEA_ATTIVITA_VALIDA.ESERCIZIO",SQLBuilder.EQUALS, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param stampa l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
*
**/
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_obbligazioni_riportabiliVBulk stampa, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCd_cds());
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param stampa l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
*
**/
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_registro_annotazione_spese_pgiroBulk stampa, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException {
//try{
//Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
//SQLBuilder sql = home.createSQLBuilder();
//CDRComponentSession sess = (CDRComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_CDRComponentSession", CDRComponentSession.class);
//if (sess.isEnte(userContext)){
//if(stampa.getCdCdsOrigineForPrint()==null)
//throw new ApplicationException("Inserire il CDS di ORIGINE");
//sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCdCdsOrigineForPrint());
//}else
//sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCd_cds());
//sql.addClause(clauses);
//return sql;
//}catch(javax.ejb.EJBException ex){
//throw handleException(ex);
//}catch(java.rmi.RemoteException ex){
//throw handleException(ex);
//}
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCdsOrigineForPrint().getCd_proprio_unita());
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param stampa l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
*
**/
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_registro_obbligazioniBulk stampa, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCd_cds());
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param stampa l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
*
**/
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_scadenzario_obbligazioniBulk stampa, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome)getHome(userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", sql.EQUALS, stampa.getCd_cds());
sql.addClause(clauses);
return sql;
}
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_obb_doc_ammBulk stampa, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException, PersistencyException {
SQLBuilder sql = ((Unita_organizzativaHome)getHome(userContext, uo, "V_UNITA_ORGANIZZATIVA_VALIDA")).createSQLBuilder();
sql.addSQLClause("AND", "ESERCIZIO", sql.EQUALS, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio( userContext ) );
sql.addSQLClause("AND", "CD_UNITA_PADRE", sql.EQUALS, stampa.getCdCdsForPrint());
sql.addClause(clauses);
return sql;
}
public SQLBuilder selectCdsForPrintByClause (UserContext userContext, Stampa_obb_doc_ammBulk stampa, it.cnr.contab.config00.sto.bulk.CdsBulk cds, CompoundFindClause clause) throws ComponentException, PersistencyException
{
SQLBuilder sql = getHome(userContext, cds.getClass(), "V_CDS_VALIDO").createSQLBuilder();
sql.addClause( clause );
String cd_cds_scrivania = it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cds(userContext);
it.cnr.contab.config00.sto.bulk.CdsHome cds_home = (CdsHome)getHome(userContext, CdsBulk.class);
it.cnr.contab.config00.sto.bulk.CdsBulk cds_scrivania = (CdsBulk)cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
if (cds_scrivania.getCd_tipo_unita().equals(it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome.TIPO_UO_ENTE)){
sql.addSQLClause("AND", "ESERCIZIO", SQLBuilder.EQUALS, ((it.cnr.contab.utenze00.bp.CNRUserContext) userContext).getEsercizio());
}
else{
sql.addSQLClause("AND", "ESERCIZIO", SQLBuilder.EQUALS, ((it.cnr.contab.utenze00.bp.CNRUserContext) userContext).getEsercizio());
sql.addSQLClause("AND", "CD_UNITA_ORGANIZZATIVA", SQLBuilder.EQUALS, ((it.cnr.contab.utenze00.bp.CNRUserContext) userContext).getCd_cds());
sql.addClause("AND","FL_CDS",sql.EQUALS, new Boolean(true) );
}
return sql;
}
public SQLBuilder selectElementoVoceForPrintByClause(UserContext userContext, Stampa_obb_doc_ammBulk stampa, Elemento_voceBulk elementoVoce, CompoundFindClause clauses) throws ComponentException {
Elemento_voceHome home = (Elemento_voceHome)getHome(userContext, elementoVoce);
SQLBuilder sql = home.createSQLBuilder();
sql.addSQLClause("AND","ESERCIZIO",sql.EQUALS, CNRUserContext.getEsercizio(userContext));
sql.addSQLClause("AND","TI_GESTIONE", sql.EQUALS, home.GESTIONE_SPESE);
sql.addClause( clauses );
return sql;
}
public SQLBuilder selectEsercizioDocForPrintByClause(UserContext userContext, Stampa_obb_doc_ammBulk stampa, Esercizio_baseBulk es, CompoundFindClause clauses) throws ComponentException, PersistencyException {
Esercizio_baseHome home = (Esercizio_baseHome)getHome(userContext,es);
SQLBuilder sql = home.createSQLBuilder();
sql.addTableToHeader("PRT_OBB_DOC_AMM");
sql.addSQLJoin("PRT_OBB_DOC_AMM.ESERCIZIO_DOC_AMM","ESERCIZIO_BASE.ESERCIZIO");
sql.addSQLClause("AND", "PRT_OBB_DOC_AMM.CD_CDS_OBBLIG", sql.EQUALS, stampa.getCdCdsForPrint());
sql.addSQLClause("AND", "PRT_OBB_DOC_AMM.CD_ELEMENTO_VOCE", sql.EQUALS, stampa.getCdElementoVoceForPrint());
sql.addSQLClause("AND", "PRT_OBB_DOC_AMM.ESERCIZIO_OBBLIG", sql.EQUALS, CNRUserContext.getEsercizio(userContext));
sql.setDistinctClause(true);
sql.addClause(clauses);
return sql;
}
/**
* stampaConBulk method comment.
*/
public OggettoBulk stampaConBulk(UserContext aUC, OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_registro_obbligazioniBulk)
validateBulkForPrint(aUC, (Stampa_registro_obbligazioniBulk)bulk);
else if (bulk instanceof Stampa_registro_annotazione_spese_pgiroBulk)
validateBulkForPrint(aUC, (Stampa_registro_annotazione_spese_pgiroBulk)bulk);
else if (bulk instanceof Stampa_scadenzario_obbligazioniBulk)
validateBulkForPrint(aUC, (Stampa_scadenzario_obbligazioniBulk)bulk);
else if (bulk instanceof Stampa_obbligazioni_riportabiliVBulk)
validateBulkForPrint(aUC, (Stampa_obbligazioni_riportabiliVBulk)bulk);
else if (bulk instanceof Stampa_obbligazioni_LAVBulk)
validateBulkForPrint(aUC, (Stampa_obbligazioni_LAVBulk)bulk);
else if (bulk instanceof Stampa_obb_doc_ammBulk)
stampaConBulk(aUC, (Stampa_obb_doc_ammBulk)bulk);
return bulk;
}
public OggettoBulk stampaConBulk(UserContext userContext, Stampa_obb_doc_ammBulk stampa) throws ComponentException {
if ( stampa.getCdsForPrint()==null || stampa.getCdsForPrint().getCd_proprio_unita()==null)
throw new ApplicationException( "E' necessario selezionare il CDS");
if ( stampa.getElementoVoceForPrint()==null || stampa.getElementoVoceForPrint().getCd_elemento_voce()==null)
throw new ApplicationException( "E' necessario selezionare la Voce");
return stampa;
}
/**
* Tutti controlli superati
* PreCondition:
* Non esistono documenti amministrativi per l'obbligazione.
* Non esitono ordini associati all'obbligazione
* Lo stato dell'obbligazione è 'DEFINITIVA'
* PostCondition:
* Il sistema eseguirà le seguente attività:
* 1) L'aggiornamento dei saldi 'obbligazioni' dei capitoli di spesa CdS
* (Questo processo viene eseguito dal metodo 'aggiornaCapitoloSaldoObbligazione').
* 2) L'azzeramento dell'importo di ogni dettaglio di ogni scadenza dell'obbligazione,
* 3) L'azzeramento dell'importo di ogni scadenza dell'obbligazione,
* 4) L'azzeramento dell'importo dell'obbligazione propria,
* 5) L'aggiornamento dello stato dell'obbligazione a 'STORNATA'.
*
* Esistono documenti amministrativi per l'obbligazione
* PreCondition:
* Per l'obbligazione definitiva ci sono documenti amministrativi già collegati all'obbligazione.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che per stornare una obbligazione definitiva,
* qualsiasi documento amministrativo collegato all'obbligazione deve essere sganciato prima di eseguire
* lo storno. L'attività non è consentita.
*
* Esiste un ordine per l'obbligazione
* PreCondition:
* Per l'obbligazione definitiva e' stato definito un ordine
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che per stornare una obbligazione definitiva
* per la quale e' già stato emesso un ordine e' necessario prima cancellare l'ordine
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk da annullare
* @return l'istanza di ObbligazioneBulk annullata
*
*/
public ObbligazioneBulk stornaObbligazioneDefinitiva(
UserContext aUC,
ObbligazioneBulk obbligazione)
throws ComponentException {
try {
// Controllo se esiste un ordine associato all'obbligazione
// In caso affermativo blocco l'operazione di eliminazione
it.cnr.contab.doccont00.ordine.bulk.OrdineBulk ordine =
findOrdineFor(aUC, obbligazione);
if (ordine != null)
throw new ApplicationException("L'impegno selezionato è collegato ad un ordine. Cancellare prima l'ordine");
if (obbligazione.isAssociataADocAmm())
throw new ApplicationException("Impossibile stornare impegni con documenti amministrativi associati");
//test per obbligazioni collegate a spese del fondo economale
for ( Iterator i = obbligazione.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
if ( ((Obbligazione_scadenzarioBulk)i.next()).getIm_associato_doc_amm().compareTo( new BigDecimal(0)) > 0 )
throw new ApplicationException("Impossibile stornare impegni collegati a spese del fondo economale o a documenti amministrativi");
obbligazione.storna();
obbligazione.setDt_cancellazione( DateServices.getDt_valida(aUC));
/* //e' necessario aggiornare prima i dettagli e poi la testata per consentire lo storico delle modifiche
makeBulkListPersistent(aUC, obbligazione.getObbligazione_scadenzarioColl());
obbligazione.setUser(aUC.getUser());
updateBulk(aUC, obbligazione);
*/
makeBulkPersistent( aUC, obbligazione);
/*
if ( !aUC.isTransactional() )
aggiornaStatoCOAN_COGEDocAmm( aUC, obbligazione );
*/
aggiornaCapitoloSaldoObbligazione(aUC, obbligazione, MODIFICA);
return obbligazione;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_obbligazioni_LAVBulk stampa) throws ComponentException{
try{
Timestamp dataOdierna = getDataOdierna(userContext);
Timestamp lastDayOfYear = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
if (stampa.getDataInizio()==null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine()==null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices.getFirstDayOfYear(stampa.getEsercizio().intValue());
if (stampa.getDataInizio().compareTo(stampa.getDataFine())>0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
if (stampa.getDataInizio().compareTo(firstDayOfYear)<0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di INIZIO PERIODO non può essere inferiore a " + formatter.format(firstDayOfYear));
}
if (stampa.getDataFine().compareTo(lastDayOfYear)>0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(lastDayOfYear));
}
if (stampa.getEsercizio()==null)
throw new ValidationException("Il campo ESERCIZIO e' obbligatorio");
if (stampa.getCd_cds()==null)
throw new ValidationException("Il campo CDS e' obbligatorio");
} catch(ValidationException ex) {
throw new it.cnr.jada.comp.ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_obbligazioni_riportabiliVBulk stampa) throws ComponentException{
try{
Timestamp lastDay = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
if (stampa.getEsercizio()==null)
throw new ValidationException("Il campo ESERCIZIO e' obbligatorio");
}catch(ValidationException ex){
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_registro_annotazione_spese_pgiroBulk stampa) throws ComponentException{
try{
Timestamp dataOdierna = getDataOdierna(userContext);
Timestamp lastDayOfYear = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
if (stampa.getEsercizio()==null)
throw new ValidationException("Il campo ESERCIZIO e' obbligatorio");
//if (stampa.getCd_cds()==null)
//throw new ValidationException("Il campo CDS e' obbligatorio");
//try{
//CDRComponentSession sess = (CDRComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_CDRComponentSession", CDRComponentSession.class);
//if (sess.isEnte(userContext) && stampa.getCdCdsOrigineForPrint()==null)
//throw new ValidationException("Il campo CDS di ORIGINE è obbligatorio");
//}catch(javax.ejb.EJBException ex){
//throw handleException(ex);
//}catch(java.rmi.RemoteException ex){
//throw handleException(ex);
//}
//if (!stampa.isCdsUOInScrivania() && stampa.getCdUoForPrint() == null)
//throw new ValidationException("Il campo UNITA ORGANIZZATIVA è obbligatorio");
if (stampa.getDataInizio()==null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine()==null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices.getFirstDayOfYear(stampa.getEsercizio().intValue());
if (stampa.getDataInizio().compareTo(stampa.getDataFine())>0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
if (stampa.getDataInizio().compareTo(firstDayOfYear)<0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di INIZIO PERIODO non può essere inferiore a " + formatter.format(firstDayOfYear));
}
if (stampa.getDataFine().compareTo(lastDayOfYear)>0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(lastDayOfYear));
}
if (stampa.getPgInizio()==null)
throw new ValidationException("Il campo NUMERO INIZIO è obbligatorio");
if (stampa.getPgFine()==null)
throw new ValidationException("Il campo NUMERO FINE è obbligatorio");
if (stampa.getPgInizio().compareTo(stampa.getPgFine())>0)
throw new ValidationException("Il NUMERO INIZIO non può essere superiore al NUMERO FINE");
}catch(ValidationException ex){
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_registro_obbligazioniBulk stampa) throws ComponentException{
try{
Timestamp dataOdierna = getDataOdierna(userContext);
Timestamp lastDayOfYear = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
if (stampa.getEsercizio()==null)
throw new ValidationException("Il campo ESERCIZIO e' obbligatorio");
if (stampa.getCd_cds()==null)
throw new ValidationException("Il campo CDS e' obbligatorio");
if (!stampa.isCdsUOInScrivania() && stampa.getCdUoForPrint() == null)
throw new ValidationException("Il campo UNITA ORGANIZZATIVA è obbligatorio");
// if (it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome.TIPO_UO_SAC.equalsIgnoreCase(uo.getCd_tipo_unita())){
if (stampa.getDataInizio()==null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine()==null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices.getFirstDayOfYear(stampa.getEsercizio().intValue());
if (stampa.getDataInizio().compareTo(stampa.getDataFine())>0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
if (stampa.getDataInizio().compareTo(firstDayOfYear)<0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di INIZIO PERIODO non può essere inferiore a " + formatter.format(firstDayOfYear));
}
if (stampa.getDataFine().compareTo(lastDayOfYear)>0){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(lastDayOfYear));
}
if (stampa.getPgInizio()==null)
throw new ValidationException("Il campo NUMERO INIZIO è obbligatorio");
if (stampa.getPgFine()==null)
throw new ValidationException("Il campo NUMERO FINE è obbligatorio");
if (stampa.getPgInizio().compareTo(stampa.getPgFine())>0)
throw new ValidationException("Il NUMERO INIZIO non può essere superiore al NUMERO FINE");
} catch(ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_scadenzario_obbligazioniBulk stampa) throws ComponentException{
try{
Timestamp lastDay = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
if (stampa.getEsercizio()==null)
throw new ValidationException("Il campo ESERCIZIO e' obbligatorio");
if (stampa.getCd_cds()==null)
throw new ValidationException("Il campo CDS e' obbligatorio");
if (!stampa.isCdsUOInScrivania() && stampa.getCdUoForPrint() == null)
throw new ValidationException("Il campo UNITA ORGANIZZATIVA è obbligatorio");
if (stampa.getDataInizio()==null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine()==null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
if (stampa.getDataInizio().compareTo(stampa.getDataFine())>0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
}catch(ValidationException ex){
throw new ApplicationException(ex);
}
}
/**
* Obbligazione spese per costi altrui
* PreCondition:
* Obbligazione con flag spese per costi altrui selezionato
* PostCondition:
* Nessun controllo viene effettuato e l'obbligazione supera questa validazione
*
* Obbligazione non spese per costi altrui - ok
* PreCondition:
* Obbligazione con flag spese per costi altrui non selezionato e con linee di attività, specificate nell'imputazione
* finanziaria, tutte appartenenti a cdr che dipendono dall'unità organizzativa di scrivania
* PostCondition:
* L'obbligazione supera questa validazione
*
* Obbligazione non spese per costi altrui - errore
* PreCondition:
* Obbligazione con flag spese per costi altrui non selezionato e con almeno una linea di attività, specificata nell'imputazione
* finanziaria, che appartene ad un cdr che non dipende dall'unità organizzativa di scrivania
* PostCondition:
* Una segnalazione di errore viene restituita all'utente per informarlo dell'impossibilità di effettuare la creazione/modifica
* dell'obbligazione.
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk da verificare
*
*/
private void verificaFl_spese_costi_altrui (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
if ( !obbligazione.getFl_spese_costi_altrui().booleanValue() )
{
V_pdg_obbligazione_speBulk latt;
for (Iterator i = obbligazione.getLineeAttivitaSelezionateColl().iterator(); i.hasNext(); )
{
latt = (V_pdg_obbligazione_speBulk) i.next();
if ( !latt.getCd_centro_responsabilita().startsWith( obbligazione.getCd_unita_organizzativa()))
throw new ApplicationException( "Sono state selezionate Workpckages di CdR che non appartengono all'Unità Organizzativa! E' necessario modificare l'imputazione finanziaria");
}
}
}
catch ( Exception e )
{
throw handleException( e );
}
}
/**
* Linea attività in Pdg
* PreCondition:
* L'utente ha selezionato una nuova linea di attività e la nuova linea di attività e' nel Piano di Gestione
* PostCondition:
* Una segnalazione di errore comunica all'utente l'impossibilità di assegnare come nuova linea di attività
* una presente nel P.d.G.
* Linea attività in Pdg
* PreCondition:
* L'utente ha selezionato una nuova linea di attività e la nuova linea di attività non e' presente nel Piano di Gestione
* PostCondition:
* La nuova linea di attività ha superato la validazione
*
* @param userContext lo user context
* @param latt l'istanza di Linea_attivitaBulk da verificare
*
*/
public void verificaNuovaLineaAttivita (UserContext userContext, it.cnr.contab.config00.latt.bulk.WorkpackageBulk latt) throws ComponentException
{
/*
try
{
SQLBuilder sql = getHome(userContext, latt.getClass(), "V_LINEA_ATT_NOT_IN_PDG").createSQLBuilder();
sql.addClause( "AND", "cd_centro_responsabilita", sql.EQUALS, latt.getCd_centro_responsabilita());
sql.addClause( "AND", "cd_linea_attivita", sql.EQUALS, latt.getCd_linea_attivita());
List result = getHome(userContext, latt.getClass(), "V_LINEA_ATT_NOT_IN_PDG").fetchAll( sql );
if ( result == null || result.size() == 0)
throw new ApplicationException( "Il GAE " +
latt.getCd_centro_responsabilita() + "-" +
latt.getCd_linea_attivita() +
"e' presente nel piano di gestione");
}
catch ( it.cnr.jada.persistency.PersistencyException e )
{
throw handleException(e);
}
*/
}
/**
* Tutti controlli superati - anno di creazione obbligazione < anno competenza dell'obbligazione
* PreCondition:
* testata dell'obbligazione verificata (controllato nel metodo verificaTestataObbligazione).
* sum(scadenzario.importo) = obbligazione.importo
* sum(scad_voce.importo) = scadenzario.importo
* dettagli d'imputazione finanziaria specificati
* almeno una scadenza definita
* verfiche per spese per costi altrui superate (metodo verificaFl_spese_costi_altrui)
* L'anno di competenza dell'obbligazione è superiore all'anno di creazione dell'obbligazione
* PostCondition:
* Il sistema può proseguire con la creazione/modifica dell'obbligazione, ma non verranno aggiornati i saldi
* dei capitoli di spesa CdS.
*
* Tutti controlli superati - anno di creazione obbligazione = anno competenza
* PreCondition:
* testata dell'obbligazione verificata (controllato nel metodo verificaTestataObbligazione).
* sum(scadenzario.import) = obbligazione.import.
* sum(scad_voce.importo) = scadenzario.importo
* dettagli d'imputazione finanziaria specificati
* almeno una scadenza definita
* verfiche per spese per costi altrui superate (metodo verificaFl_spese_costi_altrui)
* L'anno di competenza dell'obbligazione è uguale all'anno di creazione dell'obbligazione
* PostCondition:
* Il sistema può proseguire con la creazione/modifica dell'obbligazione e dovrà effettuare l'aggiornamento
* dei saldi dei capitoli di spesa CdS. (Questo processo viene eseguito dal metodo 'aggiornaCapitoloSaldoObbligazione').
*
* sum(scadenzario.importo) not = obbligazione.importo
* PreCondition:
* La somma degli importi delle scadenze dell'obbligazione non è uguale all'importo dell'obbligazione in elaborazione.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il salvataggio dell'obbligazione non è consentito
* se l'importo non è uguale alla somma degli importi delle scadenze dell'obbligazione.
*
* sum(scad_voce.importo) not = scadenzario.importo
* PreCondition:
* L'utente ha selezionato l'imputazione manuale degli importi dei dettagli delle scadenze e la somma degli importi
* dei dettagli di una scadenza dell'obbligazione non è uguale all'importo della scadenza
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il salvataggio dell'obbligazione non è consentito
* se l'importo della scadenza non è uguale alla somma degli importi dei dettagli della scadenza dell'obbligazione.
*
* dettagli d'imputazione finanziaria non specificati al livello di obbligazione
* PreCondition:
* I dettagli d'imputazione finanziaria (capitolo di spesa, linea d'attività) non sono stati specificati
* al livello di obbligazione
* PostCondition:
* Il sistema segnala l'impossibilità di craere/aggiornare l'obbligazione fino a quando l'imputazione finanziaria non viene completata
*
* scadenze non definite
* PreCondition:
* Non sono state definite scadenze per l'obbligazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il salvataggio dell'obbligazione non è consentito
* se non viene definita almento una scadenza
*
* spese per costi altrui
* PreCondition:
* L'utente ha specificato di voler emettere un'obbligazione non di tipo spese per costi altrui
* ma ha selezionato linee di attività appartenenti a cdr che non sipendono dall'uo di scrivania
* (questo controllo viene effettuato dal metodo 'verificaFl_spese_costi_altrui')
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il salvataggio dell'obbligazione non è consentito
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk da verificare
*
*
*/
public void verificaObbligazione (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
Obbligazione_scadenzarioBulk os;
Obbligazione_scad_voceBulk osv;
BigDecimal totalObbligazione = new BigDecimal(0);
BigDecimal totalScadenza;
verificaTestataObbligazione( aUC, obbligazione );
// non e' stata fatta l'imputazione finanziaria
if ( obbligazione.getLineeAttivitaSelezionateColl().size() == 0 &&
obbligazione.getNuoveLineeAttivitaColl().size() == 0 )
throw handleException( new it.cnr.jada.comp.ApplicationException( "E' necessario effettuare l'imputazione finanziaria")) ;
// non ci sono scadenze
if ( obbligazione.getObbligazione_scadenzarioColl().isEmpty() )
throw handleException( new it.cnr.jada.comp.ApplicationException( "E' necessario creare almeno una scadenza")) ;
// La somma degli importi delle scadenze dell'obbligazione non è uguale all'importo dell'obbligazione in elaborazione.
for ( Iterator i = obbligazione.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) i.next();
totalObbligazione = totalObbligazione.add( os.getIm_scadenza());
totalScadenza = new BigDecimal(0);
for (Iterator j = os.getObbligazione_scad_voceColl().iterator(); j.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) j.next();
if ( osv.getIm_voce() == null )
throw handleException( new it.cnr.jada.comp.ApplicationException( "E' necessario inserire l'importo di un dettaglio per la scadenza del " + String.valueOf( os.getDt_scadenza()).substring(0,10)) );
totalScadenza = totalScadenza.add( osv.getIm_voce() );
}
if ( totalScadenza.compareTo( os.getIm_scadenza()) != 0 )
throw handleException( new it.cnr.jada.comp.ApplicationException( "La somma degli importi dei singoli dettagli della scadenza e' diverso dall'importo complessivo della scadenza")) ;
}
if ( totalObbligazione.compareTo( obbligazione.getIm_obbligazione()) > 0 )
throw handleException( new it.cnr.jada.comp.ApplicationException( "La somma degli importi delle singole scadenze supera l'importo complessivo dell'impegno")) ;
if ( totalObbligazione.compareTo( obbligazione.getIm_obbligazione()) < 0 )
throw handleException( new it.cnr.jada.comp.ApplicationException( "La somma degli importi delle singole scadenze e' inferiore all'importo complessivo dell'impegno")) ;
if((obbligazione.getContratto() != null && obbligazione.getContratto().getFigura_giuridica_esterna()!= null &&
!(obbligazione.getCreditore().equalsByPrimaryKey(obbligazione.getContratto().getFigura_giuridica_esterna())||verificaAssociato(aUC, obbligazione.getContratto().getFigura_giuridica_esterna(),obbligazione))))
throw new it.cnr.jada.comp.ApplicationException( "Il Creditore (Codice Terzo:"+obbligazione.getCreditore().getCd_terzo()+") \n"+"non è congruente con quello del contratto (Codice Terzo:"+obbligazione.getContratto().getFigura_giuridica_esterna().getCd_terzo()+")");
if ((obbligazione.getIncarico_repertorio() != null && obbligazione.getIncarico_repertorio().getTerzo()!= null &&
!(obbligazione.getCreditore().equalsByPrimaryKey(obbligazione.getIncarico_repertorio().getTerzo())||verificaAssociato(aUC, obbligazione.getIncarico_repertorio().getTerzo(),obbligazione))))
throw new it.cnr.jada.comp.ApplicationException( "Il Creditore (Codice Terzo:"+obbligazione.getCreditore().getCd_terzo()+") \n"+"non è congruente con quello dell'incarico (Codice Terzo:"+obbligazione.getIncarico_repertorio().getTerzo().getCd_terzo()+")");
verificaFl_spese_costi_altrui( aUC, obbligazione );
/*
* Controllo l'eventuale obbligatorietà del Contratto
*/
Elemento_voceHome home = (Elemento_voceHome)getHome(aUC, Elemento_voceBulk.class);
Elemento_voceBulk elemento_voce;
try {
elemento_voce =
(Elemento_voceBulk) home.findByPrimaryKey(
new Elemento_voceBulk(
obbligazione.getCd_elemento_voce(),
obbligazione.getEsercizio(),
obbligazione.getTi_appartenenza(),
obbligazione.getTi_gestione()));
} catch (PersistencyException e) {
throw new ComponentException(e);
}
if(elemento_voce.getFl_recon().booleanValue()){
Parametri_cdsHome paramHome = (Parametri_cdsHome)getHome(aUC, Parametri_cdsBulk.class);
Parametri_cdsBulk param_cds;
try {
param_cds =
(Parametri_cdsBulk) paramHome.findByPrimaryKey(
new Parametri_cdsBulk(
obbligazione.getCd_cds(),
obbligazione.getEsercizio()));
} catch (PersistencyException e) {
throw new ComponentException(e);
}
if (obbligazione.getFl_gara_in_corso().booleanValue() &&
obbligazione.getDs_gara_in_corso() == null)
throw new it.cnr.jada.comp.ApplicationException("La gara di appalto risulta essere in corso di espletamento. Campo \"Descrizione gara di appalto\" obbligatorio!");
if (obbligazione.getFl_gara_in_corso().booleanValue() &&
obbligazione.isObbligazioneResiduo()
&& obbligazione.getStato_obbligazione().equals( obbligazione.STATO_OBB_PROVVISORIO ))
throw new ApplicationException("Non e' possibile modificare un'impegno residuo con gara di appalto in corso di espletamento, si prega di riportarlo indietro dall'esercizio precedente e di renderlo definitivo");
if (obbligazione.getFl_gara_in_corso().booleanValue() &&
(obbligazione.getPg_contratto() != null || obbligazione.getPg_repertorio() != null))
throw new it.cnr.jada.comp.ApplicationException("La gara di appalto risulta essere in corso di espletamento. Non è possibile valorizzare il campo contratto e/o incarico. Disattivare il flag \"Gara in corso di espletamento\" e ripetere l'operazione!");
if (obbligazione.getPg_contratto() != null && obbligazione.getPg_repertorio() != null)
throw new it.cnr.jada.comp.ApplicationException("Il campo contratto e incarico non possono essere valorizzati contemporaneamente. Eliminare uno dei due e ripetere l'operazione!");
if(param_cds != null && param_cds.getIm_soglia_contratto_s()!= null &&
obbligazione.getIm_obbligazione().compareTo(param_cds.getIm_soglia_contratto_s())!=-1)
if (!obbligazione.getFl_gara_in_corso().booleanValue() &&
obbligazione.getPg_contratto() == null && obbligazione.getPg_repertorio() == null)
throw new it.cnr.jada.comp.ApplicationException("I campi contratto e incarico non possono essere contemporaneamente nulli in assenza di una gara in corso di espletamento. Importo dell'Impegno superiore al limite stabilito!");
}
verificaGestioneTrovato(aUC, obbligazione, elemento_voce);
verificaGestioneMissioni(aUC, obbligazione, elemento_voce);
}
private void verificaGestioneTrovato(UserContext aUC,
ObbligazioneBulk obbligazione, Elemento_voceBulk elemento_voce)
throws ComponentException {
// if (obbligazione.getCd_iniziale_elemento_voce() != null && !elemento_voce.getCd_elemento_voce().equals(obbligazione.getCd_iniziale_elemento_voce())){
if (obbligazione.getPg_obbligazione() != null){
try {
if(elemento_voce.isObbligatoriaIndicazioneTrovato()){
controlliGestioneTrovatoAttiva(aUC, obbligazione);
} else if (elemento_voce.isInibitaIndicazioneTrovato()){
controlliGestioneTrovatoNonAttiva(aUC, obbligazione);
}
} catch(Throwable e) {
throw handleException(e);
}
}
// }
}
private void verificaGestioneMissioni(UserContext aUC,
ObbligazioneBulk obbligazione, Elemento_voceBulk elemento_voce)
throws ComponentException {
// if (obbligazione.getPg_obbligazione() != null){
// try {
// if (!elemento_voce.getFl_missioni() && esistonoMissioniCollegate(aUC, obbligazione)){
// throw new it.cnr.jada.comp.ApplicationException("Attenzione! La voce del piano indicata non ha attiva la gestione delle missioni ma esistono missioni collegate all'obbligazione.");
// }
// } catch(Throwable e) {
// throw handleException(e);
// }
// }
// }
}
private void controlliGestioneTrovatoNonAttiva(UserContext aUC,
ObbligazioneBulk obbligazione) throws ComponentException, SQLException,
ApplicationException {
SQLBuilder sql = condizioneRigheFatturaConTrovatoValorizzato(aUC,obbligazione);
if (sql.executeCountQuery(getConnection(aUC)) > 0){
throw new it.cnr.jada.comp.ApplicationException("Attenzione! La voce del piano indicata non ha attiva la gestione dei brevetti ma sono state trovate fatture con l'indicazione del trovato.");
}
}
private void controlliGestioneTrovatoAttiva(UserContext aUC,
ObbligazioneBulk obbligazione) throws ComponentException, SQLException,
ApplicationException {
SQLBuilder sql = condizioneRigheFatturaConTrovatoNonValorizzato(aUC, obbligazione);
if (sql.executeCountQuery(getConnection(aUC)) > 0){
throw new it.cnr.jada.comp.ApplicationException("Attenzione! La voce del piano indicata ha attiva la gestione dei brevetti ma sono state trovate fatture senza l'indicazione del trovato.");
}
}
private SQLBuilder condizioneRigheFatturaConTrovatoNonValorizzato(
UserContext aUC, ObbligazioneBulk obbligazione)
throws ComponentException {
SQLBuilder sql = preparaCondizionePerTrovato(aUC, obbligazione);
sql.addSQLClause(FindClause.AND,"FATTURA_PASSIVA_RIGA.pg_trovato",sql.ISNULL, null);
return sql;
}
private SQLBuilder condizioneRigheFatturaConTrovatoValorizzato(UserContext aUC,
ObbligazioneBulk obbligazione) throws ComponentException {
SQLBuilder sql = preparaCondizionePerTrovato(aUC, obbligazione);
sql.addSQLClause(FindClause.AND,"FATTURA_PASSIVA_RIGA.pg_trovato",sql.ISNOTNULL, null);
return sql;
}
private SQLBuilder preparaCondizionePerTrovato(UserContext aUC,
ObbligazioneBulk obbligazione) throws ComponentException {
PersistentHome osHome = getHomeCache(aUC).getHome(Obbligazione_scadenzarioBulk.class);
SQLBuilder sql = osHome.createSQLBuilder();
sql.addClause(FindClause.AND,"cd_cds",sql.EQUALS, obbligazione.getCds().getCd_unita_organizzativa());
sql.addClause(FindClause.AND,"esercizio",sql.EQUALS, obbligazione.getEsercizio());
sql.addClause(FindClause.AND,"esercizio_originale",sql.EQUALS, obbligazione.getEsercizio_originale());
sql.addClause(FindClause.AND,"pg_obbligazione",sql.EQUALS, obbligazione.getPg_obbligazione());
sql.addTableToHeader("FATTURA_PASSIVA_RIGA");
sql.addSQLClause(FindClause.AND,"FATTURA_PASSIVA_RIGA.ESERCIZIO",SQLBuilder.EQUALS, obbligazione.getEsercizio());
sql.addSQLJoin( "FATTURA_PASSIVA_RIGA.CD_CDS_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.CD_CDS");
sql.addSQLJoin( "FATTURA_PASSIVA_RIGA.ESERCIZIO_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.ESERCIZIO");
sql.addSQLJoin( "FATTURA_PASSIVA_RIGA.ESERCIZIO_ORI_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.ESERCIZIO_ORIGINALE");
sql.addSQLJoin( "FATTURA_PASSIVA_RIGA.PG_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.PG_OBBLIGAZIONE");
sql.addSQLJoin( "FATTURA_PASSIVA_RIGA.PG_OBBLIGAZIONE_SCADENZARIO", "OBBLIGAZIONE_SCADENZARIO.PG_OBBLIGAZIONE_SCADENZARIO");
return sql;
}
private Boolean esistonoMissioniCollegate(UserContext aUC,
ObbligazioneBulk obbligazione) throws ComponentException, SQLException {
PersistentHome osHome = getHomeCache(aUC).getHome(Obbligazione_scadenzarioBulk.class);
SQLBuilder sql = osHome.createSQLBuilder();
sql.addClause(FindClause.AND,"cd_cds",sql.EQUALS, obbligazione.getCds().getCd_unita_organizzativa());
sql.addClause(FindClause.AND,"esercizio",sql.EQUALS, obbligazione.getEsercizio());
sql.addClause(FindClause.AND,"esercizio_originale",sql.EQUALS, obbligazione.getEsercizio_originale());
sql.addClause(FindClause.AND,"pg_obbligazione",sql.EQUALS, obbligazione.getPg_obbligazione());
sql.addTableToHeader("MISSIONE");
sql.addSQLClause(FindClause.AND,"MISSIONE.ESERCIZIO",SQLBuilder.EQUALS, obbligazione.getEsercizio());
sql.addSQLJoin( "MISSIONE.CD_CDS_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.CD_CDS");
sql.addSQLJoin( "MISSIONE.ESERCIZIO_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.ESERCIZIO");
sql.addSQLJoin( "MISSIONE.ESERCIZIO_ORI_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.ESERCIZIO_ORIGINALE");
sql.addSQLJoin( "MISSIONE.PG_OBBLIGAZIONE", "OBBLIGAZIONE_SCADENZARIO.PG_OBBLIGAZIONE");
sql.addSQLJoin( "MISSIONE.PG_OBBLIGAZIONE_SCADENZARIO", "OBBLIGAZIONE_SCADENZARIO.PG_OBBLIGAZIONE_SCADENZARIO");
if (sql.executeCountQuery(getConnection(aUC)) > 0){
return true;
}
return false;
}
public void verificaCoperturaContratto (UserContext aUC,ObbligazioneBulk obbligazione, int flag) throws ComponentException
{
// Controllo che l'obbligazione non abbia sfondato il contratto
if (obbligazione.isCheckDisponibilitaContrattoEseguito())
return;
if (obbligazione.getContratto() != null && obbligazione.getContratto().getPg_contratto() != null){
try {
ContrattoHome contrattoHome = (ContrattoHome)getHome(aUC, ContrattoBulk.class);
SQLBuilder sql = contrattoHome.calcolaTotObbligazioni(aUC,obbligazione.getContratto());
BigDecimal totale = null;
try {
java.sql.ResultSet rs = null;
LoggableStatement ps = null;
try {
ps = sql.prepareStatement(getConnection(aUC));
try {
rs = ps.executeQuery();
if (rs.next())
totale = rs.getBigDecimal(1);
} catch (java.sql.SQLException e) {
throw handleSQLException(e);
} finally {
if (rs != null) try{rs.close();}catch( java.sql.SQLException e ){};
}
} finally {
if (ps != null) try{ps.close();}catch( java.sql.SQLException e ){};
}
} catch (java.sql.SQLException ex) {
throw handleException(ex);
}
if (flag == INSERIMENTO)
totale = totale.add(obbligazione.getIm_obbligazione());
if (totale != null ){
if (totale.compareTo(obbligazione.getContratto().getIm_contratto_passivo()) > 0){
throw handleException( new CheckDisponibilitaContrattoFailed("La somma degli impegni associati supera l'importo definito nel contratto."));
}
}
} catch (IntrospectionException e1) {
throw new it.cnr.jada.comp.ComponentException(e1);
} catch (PersistencyException e1) {
throw new it.cnr.jada.comp.ComponentException(e1);
}
}
}
public void verificaCoperturaContratto (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
verificaCoperturaContratto (aUC,obbligazione, MODIFICA);
}
/**
* Tutti controlli superati - creazione
* PreCondition:
* Non esiste già una scadenza per la data.
* Attività = creazione
* PostCondition:
* Alla scrittura dell'obbligazione il sistema aggiungerà questo scadenzario e genererà tutti i dettagli della
* scadenza (metodo 'generaDettagliScadenzaObbligazione')
* Tutti controlli superati - aggiornamento con agg. auto. scad. succ.
* PreCondition:
* Attività = aggiornamento
* L'utente ha scelto l'aggiornamento in automatico della scadenza successiva.
* PostCondition:
* Alla scrittura dell'obbligazione il sistema aggiornerà questo scadenzario.
* In più, il metodo aggiornaScadenzaSuccessivaObbligazione viene utilizzato per aggiornare la scadenza successiva
* a quella in aggiornamento.
* Tutti controlli superati - aggiornamento senza agg. auto. scad. succ.
* PreCondition:
* Attività = aggiornamento
* L'utente NON ha scelto l'aggiornamento in automatico della scadenza successiva.
* PostCondition:
* Alla scrittura dell'obbligazione il sistema aggiornerà questo scadenzario.
* Sarà il compito dell'utente aggiornare una delle scadenze per garantire che la somma degli importi
* delle scadenze sia uguale all'importo dell'obbligazione.
* creazione/modifica - esiste già una scadenza per la data
* PreCondition:
* L'utente richiede la creazione di una scadenza o modifica la data di una scadenza.
* Per la data scadenza specificata esiste già una scadenza per l'obbligazione.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la data della scadenza non è valida.
* creazione/modifica - importo negativo
* PreCondition:
* L'utente richiede la creazione di una scadenza o modifica l'importo di una scadenza
* Il nuovo importo e' negativo.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'importo della scadenza deve essere > 0
* creazione/modifica - importo nullo
* PreCondition:
* L'utente richiede la creazione di una scadenza o modifica l'importo di una scadenza
* Il nuovo importo e' nulla e la scadenza non è associata a documenti amministrativi
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'importo della scadenza deve essere >= 0
* modifica - la scadenza ha doc amministrativi associati e non proviene da documenti amministrativi
* PreCondition:
* L'utente richiede la modifica dell'importo di una scadenza che ha documenti amministrativi associati
* e la richiesta non proviene dal BusinessProcess che gestisce i documenti amministrativi
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la modifica della scadenza non è valida.
* modifica - la scadenza ha doc amministrativi associati e proviene da documenti amministrativi
* PreCondition:
* L'utente richiede la modifica dell'importo di una scadenza che ha documenti amministrativi associati e la
* richiesta proviene dal BusinessProcess che gestisce i documenti amministartivi
* PostCondition:
* L'aggiornamento dell'importo della scadenza e' consentito
* modifica - la scadenza ha mandati associati
* PreCondition:
* L'utente richiede la modifica dell'importo di una scadenza
* La scadenza ha mandati associati
* La richiesta di modifica proviene dal BusinessProcess che gestisce i documenti amministrativi
* PostCondition:
* L'aggiornamento dell'importo della scadenza non e' consentito
* @param aUC lo user context
* @param scadenzario l'istanza di Obbligazione_scadenzarioBulk da verificare
* @return l' ObbligazioneBulk a cui appartiene la scadenza
*
*/
public ObbligazioneBulk verificaScadenzarioObbligazione (UserContext aUC,Obbligazione_scadenzarioBulk scadenzario) throws ComponentException
{
ObbligazioneBulk obbligazione = scadenzario.getObbligazione();
Obbligazione_scadenzarioBulk os, osNew;
//segnalo impossibilità di modificare importo se ci sono doc amministrativi associati
if ( //!scadenzario.getObbligazione().isFromDocAmm() &&
!scadenzario.isFromDocAmm() &&
scadenzario.getScadenza_iniziale() != null &&
scadenzario.getIm_scadenza().compareTo(scadenzario.getScadenza_iniziale().getIm_scadenza()) != 0 &&
// scadenzario.getIm_associato_doc_amm().compareTo( new BigDecimal(0)) > 0 &&
scadenzario.getPg_doc_passivo() != null
)
throw new ApplicationException( "Impossibile variare importo di una scadenza con doc. amministrativi associati");
if ( //!scadenzario.getObbligazione().isFromDocAmm() &&
scadenzario.isFromDocAmm() &&
scadenzario.getScadenza_iniziale() != null &&
scadenzario.getIm_scadenza().compareTo(scadenzario.getScadenza_iniziale().getIm_scadenza()) != 0 &&
// scadenzario.getIm_associato_doc_amm().compareTo( new BigDecimal(0)) > 0 &&
scadenzario.getPg_mandato() != null
)
throw new ApplicationException( "Impossibile variare importo di una scadenza con mandati associati");
// riordino lo scadenzario
/* simona 13.2.2002 */
/* commentato l'ordinamento delle scadenze perche' può generare problemi quando l'accertamento e' richiamato dai documenti
amministrativi con una scadenza selezionata */
// obbligazione.setObbligazione_scadenzarioColl( scadenzario.ordinaPerDataScadenza( obbligazione.getObbligazione_scadenzarioColl()));
/*
// segnala errore se scadenze duplicate o se importo <= 0
for ( Iterator i = obbligazione.getObbligazione_scadenzarioColl().iterator(); i.hasNext(); )
{
os = (Obbligazione_scadenzarioBulk) i.next();
if ( !os.equals(scadenzario) && os.getDt_scadenza().equals( scadenzario.getDt_scadenza()))
throw handleException( new it.cnr.jada.comp.ApplicationException( "Esiste gia' una scadenza per la data specificata"));
}
*/
if ( scadenzario.getIm_scadenza().doubleValue() < 0 )
throw handleException( new it.cnr.jada.comp.ApplicationException( "L'importo della scadenza deve essere maggiore di 0 "));
/* rimosso questo controllo per consentire comunque l'inserimento/modifica dell'importo a 0 -
questo è utile quando è già stato creato il mandato e pertanto non è possibile effettuare la cancellazione
fisica della scadenza (per i vincoli di integrità referenziale con le righe del mandato, pertanto
l'unica alternativa è quella di impostare a 0 la scadenza */
/*
/*
if ( scadenzario.getIm_scadenza().doubleValue() == 0 && scadenzario.getPg_doc_passivo() == null)
throw handleException( new it.cnr.jada.comp.ApplicationException( "L'importo della scadenza deve essere maggiore a 0 "));
*/
//aggiorno scadenza succcessiva ed i suoi dettagli
if ( scadenzario.getFl_aggiorna_scad_successiva() != null &&
scadenzario.getFl_aggiorna_scad_successiva().booleanValue() &&
scadenzario.getScadenza_iniziale() != null &&
scadenzario.getIm_scadenza().compareTo( scadenzario.getScadenza_iniziale().getIm_scadenza()) != 0 )
aggiornaScadenzaSuccessivaObbligazione( aUC, scadenzario );
else
// calcolaDisponibilitaCassaObbligazione( aUC, scadenzario );
generaDettagliScadenzaObbligazione( aUC, obbligazione, scadenzario, obbligazione.isObbligazioneResiduo()?false:true);
//genero i dettagli anche per la riga nuova che, nel caso di residui propri
//potrebbe essere stata creata
//Lello - Sdoppiamento scadenza anche su obbligazione
// if (osNew != null && obbligazione.isObbligazioneResiduo())
// if (osNew != null)
// generaDettagliScadenzaObbligazione( aUC, obbligazione, osNew, false);
scadenzario.setStatus( scadenzario.STATUS_CONFIRMED);
scadenzario.setScadenza_iniziale( null );
return obbligazione;
}
/**
* Verifica dello stato dell'esercizio
*
* @param userContext UserContext
*
* @return FALSE se per il cds interessato non è stato inserito nessun esercizio o se l'esercizio non è in stato di "aperto"
* TRUE in tutti gli altri casi
*
*/
protected void verificaStatoEsercizio( UserContext userContext, Integer es, String cd_cds ) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
EsercizioBulk esercizio = verificaStatoEsercizio( userContext, cd_cds, es);
if ( !esercizio.STATO_APERTO.equals(esercizio.getSt_apertura_chiusura()))
throw new ApplicationException( "Inserimento impossibile: esercizio non aperto!") ;
}
public EsercizioBulk verificaStatoEsercizio( UserContext userContext, String cd_cds, Integer es ) throws ComponentException
{
try
{
EsercizioBulk esercizio = (EsercizioBulk) getHome(userContext, EsercizioBulk.class).findByPrimaryKey(
new EsercizioBulk( cd_cds, es ));
return esercizio;
}
catch ( Exception e )
{
throw handleException(e) ;
}
}
/**
* Tutti controlli superati
* PreCondition:
* Copertura finanziaria è sufficiente.
* Data obbligazione è valida.
* Esercizio competenza >= esercizio creazione dell'obbligazione
* PostCondition:
* La testata dell'obbligazione è valida. E' consentito eseguire l'attività di salvataggio o di passaggio
* alle pagine successive (Configurazione Imputazione Finanziaria o Scadenzario).
* Copertura finanziaria insufficiente
* PreCondition:
* La copertura finanziaria in riferimento al limite di assunzione di obbligazioni risulta insufficiente.
* Il controllo della copertura finanziaria dipende dal metodo 'controllaCoperturaFinanziariaObbligazione',
* che calcola un valore per questo limite secondo i dettagli dell'obbligazione in aggiornamento.
* Per l'aggiornamento, il valore del limite viene confrontato con la differenza fra l'importo vecchio e
* l'importo nuovo dell'obbligazione, quando l'importo nuovo supera l'importo vecchio.
* (Se l'importo rimane uguale, o diminuisce, questo controllo della copertura finanziaria non viene eseguito.)
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'importo dell'obbligazione in aggiornamento supera
* il limite di assunzione di obbligazioni. L'attività non è consentita.
* Data obbligazione non è valida
* PreCondition:
* La data dell'obbligazione in inserimento antecede la data dell'ultima obbligazione inserita per questo CdS.
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la data dell'obbligazione non può essere antecedente
* la data dell'ultima obbligazione inserita per questo CdS. L'attività non è consentita.
* Esercizio competenza non valido
* PreCondition:
* L'esercizio di competenza dell'obbligazione e' inferiore all'esercizio di scrivania e quindi all'esercizio
* di creazione dell'obbligazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che l'esercizio di competenza non può essere antecedente
* all'esercizio di creazione dell'obbligazione
*
* @param aUC lo user context
* @param obbligazione l'istanza di ObbligazioneBulk per cui verificare la testata
*
*/
public void verificaTestataObbligazione (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
try
{
controllaCoperturaFinanziariaObbligazione( aUC, obbligazione );
// verifica data dell'obbligazione
if ( obbligazione.isToBeCreated() )
{
Timestamp lastDayOfTheYear = DateServices.getLastDayOfYear( obbligazione.getEsercizio().intValue());
if ( obbligazione.getDt_registrazione().before(DateServices.getFirstDayOfYear( obbligazione.getEsercizio().intValue())) ||
obbligazione.getDt_registrazione().after(lastDayOfTheYear))
throw new ApplicationException( "La data di registrazione deve appartenere all'esercizio di scrivania" );
if ( getDataOdierna( aUC).after(lastDayOfTheYear ) &&
obbligazione.getDt_registrazione().compareTo( lastDayOfTheYear) != 0 )
throw new ApplicationException( "La data di registrazione deve essere " +
java.text.DateFormat.getDateInstance().format( lastDayOfTheYear ));
Timestamp dataUltObbligazione = ((ObbligazioneHome) getHome( aUC, ObbligazioneBulk.class )).findDataUltimaObbligazionePerCds( obbligazione );
if ( dataUltObbligazione != null && dataUltObbligazione.after( obbligazione.getDt_registrazione() ) )
throw new ApplicationException( "Non è possibile inserire un'obbligazione con data anteriore a " +
java.text.DateFormat.getDateInstance().format( dataUltObbligazione ));
}
if ( (obbligazione.getEsercizio_competenza()).intValue() < (obbligazione.getEsercizio()).intValue() )
throw new ApplicationException("Non è possibile creare un'obbligazione con esercizio antecedente a quello di scrivania.");
}
catch ( Exception e )
{
throw handleException( e );
}
}
public void controllaAssunzioneImpegni(UserContext userContext) throws it.cnr.jada.comp.ComponentException{
try
{
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB270.controllaAssunzioneImpegni(?, ?)",false,this.getClass());
try
{
cs.setString( 1, CNRUserContext.getCd_cds(userContext));
cs.setObject( 2, CNRUserContext.getEsercizio(userContext));
cs.executeQuery();
}
catch ( SQLException e )
{
throw handleException( e );
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException( e );
}
}
public void controllaAssunzioneImpResImpro(UserContext userContext) throws it.cnr.jada.comp.ComponentException{
try
{
LoggableStatement cs = new LoggableStatement(getConnection( userContext ),
"call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB270.controllaAssunzioneImpResImpro(?, ?)",false,this.getClass());
try
{
cs.setString( 1, CNRUserContext.getCd_cds(userContext));
cs.setObject( 2, CNRUserContext.getEsercizio(userContext));
cs.executeQuery();
}
catch ( SQLException e )
{
throw handleException( e );
}
finally
{
cs.close();
}
}
catch ( SQLException e )
{
throw handleException( e );
}
}
/**
* Aggiorna l'obbligazione in base alla selezione delle voci effettuate dall'utente.
* L'utente, in fase di selezione voci, può o meno indicare l'importo da imputare per ogni Cdr/Gae/Voce.
* Gli importi indicati dall'utente per CDR/GAE/Voce vengono presi in considerazione solo se
* l'obbligazione è formata da un'unica scadenza.
* In caso di più scadenze vengono assegnate solo le combinazioni scelte CDR/Gae/Voce mentre gli importi vengono
* ricalcolati con le modalità abituali (es. percentuale GAE all'interno del Bilancio).
*
* @param userContext
* @param obbligazione
* @param vociList
* @return
* @throws it.cnr.jada.comp.ComponentException
*/
public ObbligazioneBulk riportaSelezioneVoci(UserContext userContext, ObbligazioneBulk obbligazione, java.util.List vociList) throws it.cnr.jada.comp.ComponentException{
ObbligazioneHome obbligHome = (ObbligazioneHome) getHome( userContext, obbligazione.getClass());
Obbligazione_scadenzarioHome osHome = (Obbligazione_scadenzarioHome) getHome( userContext, Obbligazione_scadenzarioBulk.class );
// carica i capitoli di spesa del CDS
obbligazione = listaCapitoliPerCdsVoce( userContext, obbligazione );
obbligazione.refreshCapitoliDiSpesaCdsSelezionatiColl(vociList);
// carica i cdr
obbligazione.setCdrColl( listaCdrPerCapitoli( userContext, obbligazione));
obbligazione.refreshCdrSelezionatiColl(vociList);
// carica le linee di attività da PDG
obbligazione.setLineeAttivitaColl( listaLineeAttivitaPerCapitoliCdr( userContext, obbligazione));
obbligazione.refreshLineeAttivitaSelezionateColl(vociList);
obbligazione.setInternalStatus( ObbligazioneBulk.INT_STATO_LATT_CONFERMATE );
obbligazione.setIm_iniziale_obbligazione( obbligazione.getIm_obbligazione());
obbligazione.setCd_iniziale_elemento_voce( obbligazione.getCd_elemento_voce());
obbligazione.setCd_terzo_iniziale( obbligazione.getCd_terzo());
BigDecimal totaleSelVoci = new BigDecimal( 0 ).setScale(2,BigDecimal.ROUND_HALF_UP);
//Carico la lista delle voci con gli importi da ripartirre
PrimaryKeyHashtable hashVociList = new PrimaryKeyHashtable();
if (!vociList.isEmpty() && vociList.get(0) instanceof V_assestatoBulk) {
for ( Iterator s = vociList.iterator(); s.hasNext(); )
{
V_assestatoBulk voceSel = (V_assestatoBulk) s.next();
hashVociList.put(voceSel, new BigDecimal(0));
if (Utility.nvl(voceSel.getImp_da_assegnare()).compareTo(new BigDecimal(0))!=-1)
totaleSelVoci = totaleSelVoci.add( Utility.nvl(voceSel.getImp_da_assegnare()) );
}
}
//Valorizzo il campo Percentuale che utilizzerò per individuare gli importi da attribuire ad ogni scadenza
if (totaleSelVoci.compareTo(Utility.ZERO)>0)
{
for ( Enumeration e = hashVociList.keys(); e.hasMoreElements(); )
{
V_assestatoBulk voceSel = (V_assestatoBulk)e.nextElement();
voceSel.setPrc_da_assegnare(Utility.nvl(voceSel.getImp_da_assegnare()).divide(totaleSelVoci, 4, java.math.BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
}
}
if (totaleSelVoci.compareTo(obbligazione.getIm_obbligazione())>0)
obbligazione.setIm_obbligazione(totaleSelVoci);
//Crea l'eventuale scadenza mancante
creaScadenzaResiduale(userContext, obbligazione);
//Rigenero i dettagli di tutte le scadenze
for ( Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); )
generaDettagliScadenzaObbligazione( userContext, obbligazione, ((Obbligazione_scadenzarioBulk)s.next()), false);
if (totaleSelVoci.compareTo(new BigDecimal(0))>0) {
Obbligazione_scadenzarioBulk os = null;
Obbligazione_scad_voceBulk osv;
BigDecimal impDaAssegnareObb = totaleSelVoci;
BigDecimal impAssegnatoObb = new BigDecimal( 0 );
//DEVO PRIMA VERIFICARE CHE L'IMPORTO SELEZIONATO SIA ALMENO SUFFICIENTE A COLMARE LA QUOTA ASSOCIATA A DOC.AMM.
BigDecimal impAssociatoDocAmm = new BigDecimal( 0 );
for ( Iterator iteratorOs = obbligazione.getObbligazione_scadenzarioColl().iterator(); iteratorOs.hasNext(); )
impAssociatoDocAmm = impAssociatoDocAmm.add(((Obbligazione_scadenzarioBulk)iteratorOs.next()).getIm_associato_doc_amm());
if (impAssociatoDocAmm.compareTo(impDaAssegnareObb)>0)
throw new ApplicationException("Non è possibile attribuire all'obbligazione un importo " + new it.cnr.contab.util.EuroFormat().format(impDaAssegnareObb) +
" inferiore a quanto risulta associato a documenti amministrativi " + new it.cnr.contab.util.EuroFormat().format(impAssociatoDocAmm) + ".");
//AGGIORNO PRIMA LE SCADENZE ASSOCIATE A DOCUMENTI AMMINISTRATIVI
for ( Iterator iteratorOs = obbligazione.getObbligazione_scadenzarioColl().iterator(); iteratorOs.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk)iteratorOs.next();
//SELEZIONO QUELLE ASSOCIATE A DOCUMENTI AMMINISTRATIVI
if (os.getIm_associato_doc_amm().compareTo(new BigDecimal(0))>0){
//SE L'IMPORTO DELLA SCADENZA è MAGGIORE DI QUANTO DEVE ESSERE ANCORA RIPARTITO
//NE RIDUCO L'IMPORTO CONTROLLANDO DI NON RENDERLO INFERIORE A QUANTO ASSOCIATO A
//DOCUMENTI AMMINISTRATIVI
if (os.getIm_scadenza().compareTo(impDaAssegnareObb)>0){
if (os.getIm_associato_doc_amm().compareTo(impDaAssegnareObb)<0){
throw new ApplicationException("Non è possibile inserire un importo " + new it.cnr.contab.util.EuroFormat().format(impDaAssegnareObb) +
"inferiore a quanto risulta associato a documenti amministrativi " + new it.cnr.contab.util.EuroFormat().format(impAssociatoDocAmm) + ".");
}
os.setIm_scadenza(impDaAssegnareObb);
}
spalmaImportiSuScadenza(userContext, os, hashVociList);
os.setToBeUpdated();
impDaAssegnareObb = impDaAssegnareObb.subtract(os.getIm_scadenza());
impAssegnatoObb = impAssegnatoObb.add(os.getIm_scadenza());
}
}
BulkList recDaEliminare = new BulkList();
// POI LE SCADENZE NON ASSOCIATE A DOCUMENTI AMMINISTRATIVI
for ( Iterator iteratorOs = obbligazione.getObbligazione_scadenzarioColl().iterator(); iteratorOs.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk)iteratorOs.next();
//SELEZIONO QUELLE NON ASSOCIATE A DOCUMENTI AMMINISTRATIVI
if (os.getIm_associato_doc_amm().compareTo(new BigDecimal(0))<=0){
if (impDaAssegnareObb.compareTo(Utility.ZERO)==0) {
for ( Iterator iteratorOsv = os.getObbligazione_scad_voceColl().iterator(); iteratorOsv.hasNext(); )
((Obbligazione_scad_voceBulk)iteratorOsv.next()).setToBeDeleted();
os.setToBeDeleted();
recDaEliminare.add(os);
}
else
{
//SE L'IMPORTO DELLA SCADENZA è MAGGIORE DI QUANTO DEVE ESSERE ANCORA RIPARTITO
//NE RIDUCO L'IMPORTO
if (os.getIm_scadenza().compareTo(impDaAssegnareObb)>0)
os.setIm_scadenza(impDaAssegnareObb);
spalmaImportiSuScadenza(userContext, os, hashVociList);
os.setToBeUpdated();
impDaAssegnareObb = impDaAssegnareObb.subtract(os.getIm_scadenza());
impAssegnatoObb = impAssegnatoObb.add(os.getIm_scadenza());
}
}
}
//Elimino dallo scadenzario dell'obbligazione le scadenze segnate come da eliminare
for ( Iterator iteratorDel = recDaEliminare.iterator(); iteratorDel.hasNext(); )
obbligazione.getObbligazione_scadenzarioColl().remove(iteratorDel.next());
obbligazione.setIm_obbligazione(impAssegnatoObb.setScale(2,BigDecimal.ROUND_HALF_UP));
obbligazione.setFl_calcolo_automatico(Boolean.FALSE);
}
else
{
if ( obbligazione.getFl_calcolo_automatico().booleanValue() && !obbligazione.isObbligazioneResiduo())
obbligazione = calcolaPercentualeImputazioneObbligazione( userContext, obbligazione );
}
return obbligazione;
}
/**
* Metodo che spalma su una scadenza gli importi dei CDR/GAE/Voce secondo le percentuali indicate.
* PreCondition:
* E' stato richiesto di assegnare alla scadenza indicata gli importi dei CDR/GAE/Voce tenendo conto
* della ripartizione percentuale e degli importi da assegnare indicati nella HashList
* PostCondition:
* Viene verificato che gli importi da ripartire dei CDR/GAE/Voce siano sufficienti a coprire l'importo
* della scadenza. Quindi viene caricato lo scadenzario/voce aggiornando l'importo assegnato alla voce
* della HashList
*
* @param userContext
* @param os Obbligazione_scadenzarioBulklo scadenzario da aggiornare
* @param hashVociList la lista di oggetti V_assestatoBulk da cui prendere le percentuali e gli importi
* da spalmare.
* @return la scadenza Obbligazione_scadenzarioBulk aggiornata
* @throws it.cnr.jada.comp.ComponentException
*/
private Obbligazione_scadenzarioBulk spalmaImportiSuScadenza(UserContext userContext,
Obbligazione_scadenzarioBulk os,
PrimaryKeyHashtable hashVociList) throws it.cnr.jada.comp.ComponentException
{
Obbligazione_scad_voceBulk osv;
BigDecimal impDaAssegnareScadenza = os.getIm_scadenza();
BigDecimal impAssegnatoScadenza = new BigDecimal(0);
//AGGIORNO LO SCADENZARIO VOCI IN PERCENTUALE ALLE SELEZIONI EFFETTUATE
for ( Iterator iteratorOsv = os.getObbligazione_scad_voceColl().iterator(); iteratorOsv.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) iteratorOsv.next();
osv.setIm_voce( Utility.ZERO );
osv.setToBeUpdated();
for ( Enumeration e = hashVociList.keys(); e.hasMoreElements(); )
{
V_assestatoBulk voceSel = (V_assestatoBulk)e.nextElement();
BigDecimal impDaAssegnareVoce = Utility.nvl(voceSel.getImp_da_assegnare()).subtract((BigDecimal) hashVociList.get( voceSel ));
BigDecimal prcDaAssegnareVoce = os.getIm_scadenza().multiply(voceSel.getPrc_da_assegnare().divide(new BigDecimal(100)));
if (prcDaAssegnareVoce.compareTo(impDaAssegnareVoce)>0)
prcDaAssegnareVoce = impDaAssegnareVoce;
if (prcDaAssegnareVoce.compareTo(impDaAssegnareScadenza)>0)
prcDaAssegnareVoce = impDaAssegnareScadenza;
if (prcDaAssegnareVoce.compareTo(Utility.ZERO)>0 &&
voceSel.getEsercizio().equals(osv.getEsercizio()) &&
voceSel.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) &&
voceSel.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) &&
voceSel.getTi_appartenenza().equals(osv.getTi_appartenenza()) &&
voceSel.getTi_gestione().equals(osv.getTi_gestione()) &&
voceSel.getCd_voce().equals(osv.getCd_voce()))
{
//Importo scadenza moltiplicato per la percentuale ottenuto dalla divisione tra
//l'importo assegnato al CDR/VOCE/GAE e l'importo totale
osv.setIm_voce( prcDaAssegnareVoce.setScale(2,BigDecimal.ROUND_HALF_UP));
//importo assegnato CDR/VOCE/LINEA
hashVociList.put(voceSel, ((BigDecimal) hashVociList.get( voceSel )).add(osv.getIm_voce()));
break;
}
}
impDaAssegnareScadenza = impDaAssegnareScadenza.subtract(osv.getIm_voce());
impAssegnatoScadenza = impAssegnatoScadenza.add(osv.getIm_voce());
}
//Se la scadenza non è stata completamente coperta, vado a recuperare sulle combinazioni CDR/VOCE/GAE
//gli importi ancora disponibili
if (os.getIm_scadenza().compareTo(impAssegnatoScadenza)>0) {
for ( Iterator iteratorOsv = os.getObbligazione_scad_voceColl().iterator(); iteratorOsv.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) iteratorOsv.next();
BigDecimal impDaAssegnareVoce = new BigDecimal(0);
for ( Enumeration e = hashVociList.keys(); e.hasMoreElements(); )
{
V_assestatoBulk voceSel = (V_assestatoBulk)e.nextElement();
impDaAssegnareVoce = Utility.nvl(voceSel.getImp_da_assegnare()).subtract((BigDecimal) hashVociList.get( voceSel ));
if (impDaAssegnareVoce.compareTo(impDaAssegnareScadenza)>0)
impDaAssegnareVoce = impDaAssegnareScadenza;
if (impDaAssegnareVoce.compareTo(Utility.ZERO)>0 &&
voceSel.getEsercizio().equals(osv.getEsercizio()) &&
voceSel.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) &&
voceSel.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) &&
voceSel.getTi_appartenenza().equals(osv.getTi_appartenenza()) &&
voceSel.getTi_gestione().equals(osv.getTi_gestione()) &&
voceSel.getCd_voce().equals(osv.getCd_voce()))
{
//Importo scadenza moltiplicato per la percentuale ottenuto dalla divisione tra
//l'importo assegnato al CDR/VOCE/GAE e l'importo totale
osv.setIm_voce( osv.getIm_voce().add(impDaAssegnareVoce.setScale(2,BigDecimal.ROUND_HALF_UP)));
osv.setToBeUpdated();
//importo assegnato CDR/VOCE/LINEA
hashVociList.put(voceSel, ((BigDecimal) hashVociList.get( voceSel )).add(impDaAssegnareVoce.setScale(2,BigDecimal.ROUND_HALF_UP)));
impDaAssegnareScadenza = impDaAssegnareScadenza.subtract(impDaAssegnareVoce.setScale(2,BigDecimal.ROUND_HALF_UP));
impAssegnatoScadenza = impAssegnatoScadenza.add(impDaAssegnareVoce.setScale(2,BigDecimal.ROUND_HALF_UP));
break;
}
}
}
}
os.setIm_scadenza(impAssegnatoScadenza.setScale(2,BigDecimal.ROUND_HALF_UP));
if (os.getIm_scadenza().compareTo(os.getIm_associato_doc_amm())==-1)
throw new ApplicationException("Non è possibile attribuire all'obbligazione un importo inferiore a quanto "
+ "risulta associato a documenti amministrativi.");
//Aggiusto le percentuali
for ( Iterator j = os.getObbligazione_scad_voceColl().iterator(); j.hasNext(); )
{
osv = (Obbligazione_scad_voceBulk) j.next();
if ( os.getIm_scadenza().doubleValue() != 0 )
osv.setPrc( (osv.getIm_voce().multiply( new BigDecimal(100)).divide( os.getIm_scadenza(), 2, BigDecimal.ROUND_HALF_UP)));
else
osv.setPrc( new BigDecimal(0));
}
return os;
}
/*
* Crea una scadenza di importo pari alla quota residua dell'impegno ancora da scadenziare.
* Attribuisce come descrizione e data scadenza la descrizione e data di emissione dell'obbligazione
*/
public ObbligazioneBulk creaScadenzaResiduale(UserContext userContext, ObbligazioneBulk obbligazione) throws it.cnr.jada.comp.ComponentException{
BigDecimal imResiduo = obbligazione.getIm_obbligazione();
Obbligazione_scadenzarioBulk os;
for ( Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); )
imResiduo = imResiduo.subtract(((Obbligazione_scadenzarioBulk) s.next()).getIm_scadenza());
if (imResiduo.compareTo(Utility.ZERO)>0) {
Obbligazione_scadenzarioBulk scadenza = new Obbligazione_scadenzarioBulk();
obbligazione.addToObbligazione_scadenzarioColl(scadenza);
scadenza.setDt_scadenza(obbligazione.getDt_registrazione());
scadenza.setDs_scadenza(obbligazione.getDs_obbligazione());
scadenza.setIm_scadenza(imResiduo);
Obbligazione_scadenzarioBulk scadIniziale = new Obbligazione_scadenzarioBulk();
scadIniziale.setIm_scadenza( scadenza.getIm_scadenza());
scadenza.setScadenza_iniziale( scadIniziale);
scadenza.setToBeCreated();
generaDettagliScadenzaObbligazione( userContext, obbligazione, scadenza, obbligazione.isObbligazioneResiduo()?false:true);
}
return obbligazione;
}
public PrimaryKeyHashtable getOldRipartizioneCdrVoceLinea(UserContext userContext, ObbligazioneBulk obbligazione) throws it.cnr.jada.comp.ComponentException {
BigDecimal totaleScad = new BigDecimal(0);
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
Obbligazione_scad_voceBulk key = new Obbligazione_scad_voceBulk();
PrimaryKeyHashtable prcImputazioneFinanziariaTable = new PrimaryKeyHashtable();
try {
ObbligazioneHome obbligHome = (ObbligazioneHome)getTempHome(userContext, ObbligazioneBulk.class);
Obbligazione_scadenzarioHome obbligScadHome = (Obbligazione_scadenzarioHome)getTempHome(userContext, Obbligazione_scadenzarioBulk.class);
ObbligazioneBulk obbligDB = (ObbligazioneBulk)obbligHome.findObbligazione(obbligazione);
/*se non esiste l'obbligazione ritorno un valore vuoto*/
if (obbligDB == null)
return prcImputazioneFinanziariaTable;
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( userContext,obbligScadDB )));
}
getHomeCache(userContext).fetchAll(userContext);
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 );
}
}
}
return prcImputazioneFinanziariaTable;
} catch (PersistencyException e) {
throw handleException( e );
} catch (IntrospectionException e) {
throw handleException( e );
}
}
/*
* Pre-post-conditions:
*
* Nome: Sdoppiamento scadenza in automatico
*
* Pre: E' stata generata la richiesta di sdoppiare in automatico l'importo di una scadenza, aggiornando
* l'importo della prima scadenza e scaricando al differenza su una nuova scadenza
* Post: L'importo della scadenza viene aggiornato al nuovo valore e i suoi dettagli rigenerati
* Viene creata una nuova scadenza su cui vengono scaricati gli importi sottratti alla scadenza precedente
*
* @param userContext lo userContext che ha generato la richiesta
* @param scad l'istanza di Obbligazione_scadenzarioBulk il cui importo deve essere sdoppiato
* @param nuovoImportoScadenzaVecchia il valore del nuovo importo che la scadenza indicata dovrà assumere
* @return l'istanza di Obbligazione_scadenzarioBulk nuova creata in seguito allo sdoppiamento
*/
public IScadenzaDocumentoContabileBulk sdoppiaScadenzaInAutomatico( UserContext userContext, IScadenzaDocumentoContabileBulk scad, BigDecimal nuovoImportoScadenzaVecchia) throws ComponentException
{
DatiFinanziariScadenzeDTO dati = new DatiFinanziariScadenzeDTO();
dati.setNuovoImportoScadenzaVecchia(nuovoImportoScadenzaVecchia);
return sdoppiaScadenzaInAutomatico(userContext, scad, dati);
}
public IScadenzaDocumentoContabileBulk sdoppiaScadenzaInAutomatico( UserContext userContext, IScadenzaDocumentoContabileBulk scad, DatiFinanziariScadenzeDTO dati) throws ComponentException
{
String nuovaGae = dati.getCdLineaAttivita();
String nuovaDescrizione = dati.getNuovaDescrizione();
Timestamp nuovaScadenza = dati.getNuovaScadenza();
String cdr = dati.getCdCentroResponsabilita();
String voce = dati.getCdVoce();
BigDecimal nuovoImportoScadenzaVecchia = dati.getNuovoImportoScadenzaVecchia();
Obbligazione_scadenzarioBulk scadenzaVecchia = (Obbligazione_scadenzarioBulk)scad;
if ( nuovoImportoScadenzaVecchia.compareTo( scad.getIm_scadenza()) == 0 )
throw handleException( new ApplicationException( "Sdoppiamento in automatico non necessario!" ));
if ( nuovoImportoScadenzaVecchia.compareTo( new BigDecimal(0)) < 0 )
throw handleException( new ApplicationException( "L'importo della scadenza deve essere maggiore di 0" ));
if ( nuovoImportoScadenzaVecchia.compareTo( scad.getIm_scadenza()) == 1 )
throw new ApplicationException("L'importo nuovo da assegnare alla scadenza dell'impegno deve essere inferiore al valore originario!");
try {
java.math.BigDecimal vecchioImportoScadenzaVecchia = scadenzaVecchia.getIm_scadenza();
java.math.BigDecimal importoScadenzaNuova = vecchioImportoScadenzaVecchia.subtract(nuovoImportoScadenzaVecchia);
BigDecimal newImportoOsv = Utility.ZERO, totImporto = Utility.ZERO;
ObbligazioneHome obbligazioneHome = (ObbligazioneHome) getHome( userContext, ObbligazioneBulk.class );
ObbligazioneBulk obbligazione = (ObbligazioneBulk)obbligazioneHome.findByPrimaryKey(scadenzaVecchia.getObbligazione());
obbligazione = (ObbligazioneBulk)inizializzaBulkPerModifica(userContext, (OggettoBulk)obbligazione);
//cerco nell'obbligazione riletto la scadenza indicata
for (Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); ) {
Obbligazione_scadenzarioBulk os = (Obbligazione_scadenzarioBulk)s.next();
if (os.equalsByPrimaryKey(scadenzaVecchia)) {
scadenzaVecchia = os;
break;
}
}
if (scadenzaVecchia == null)
throw new ApplicationException("Scadenza da sdoppiare non trovata nell'impegno indicato!");
Obbligazione_scadenzarioBulk scadenzaNuova = new Obbligazione_scadenzarioBulk();
scadenzaNuova.setDt_scadenza(nuovaScadenza!=null ? nuovaScadenza : scadenzaVecchia.getDt_scadenza());
scadenzaNuova.setDs_scadenza(nuovaDescrizione!=null ? nuovaDescrizione : scadenzaVecchia.getDs_scadenza());
obbligazione.addToObbligazione_scadenzarioColl(scadenzaNuova);
// Rigenero i relativi dettagli
generaDettagliScadenzaObbligazione(userContext, obbligazione, scadenzaNuova, false);
for (Iterator s = scadenzaVecchia.getObbligazione_scad_voceColl().iterator(); s.hasNext(); ) {
Obbligazione_scad_voceBulk osvOld = (Obbligazione_scad_voceBulk)s.next();
if (nuovaGae != null && cdr != null){
if (osvOld.getCd_linea_attivita() != null && osvOld.getCd_linea_attivita().equals(nuovaGae) &&
osvOld.getCd_centro_responsabilita() != null && osvOld.getCd_centro_responsabilita().equals(cdr)){
aggiornaImportoScadVoceScadenzaNuova(importoScadenzaNuova, scadenzaNuova, osvOld);
osvOld.setIm_voce(nuovoImportoScadenzaVecchia);
osvOld.setToBeUpdated();
}
} else {
newImportoOsv = nuovoImportoScadenzaVecchia.multiply(osvOld.getIm_voce()).divide(vecchioImportoScadenzaVecchia, 2, BigDecimal.ROUND_HALF_UP);
aggiornaImportoScadVoceScadenzaNuova(newImportoOsv, scadenzaNuova, osvOld);
osvOld.setIm_voce(newImportoOsv);
osvOld.setToBeUpdated();
}
}
//Quadro la sommatoria sulla vecchia scadenza
for (Iterator s = scadenzaVecchia.getObbligazione_scad_voceColl().iterator(); s.hasNext(); )
totImporto = totImporto.add(((Obbligazione_scad_voceBulk)s.next()).getIm_voce());
if (totImporto.compareTo(nuovoImportoScadenzaVecchia)!=0) {
//recupero il primo dettaglio e lo aggiorno per quadrare
for (Iterator s = scadenzaVecchia.getObbligazione_scad_voceColl().iterator(); s.hasNext(); ) {
Obbligazione_scad_voceBulk osv = (Obbligazione_scad_voceBulk)s.next();
if (osv.getIm_voce().add(nuovoImportoScadenzaVecchia.subtract(totImporto)).compareTo(Utility.ZERO)!=-1) {
osv.setIm_voce(osv.getIm_voce().add(nuovoImportoScadenzaVecchia.subtract(totImporto)));
break;
}
}
}
totImporto = Utility.ZERO;
//Quadro la sommatoria sulla nuova scadenza
for (Iterator s = scadenzaNuova.getObbligazione_scad_voceColl().iterator(); s.hasNext(); )
totImporto = totImporto.add(((Obbligazione_scad_voceBulk)s.next()).getIm_voce());
if (totImporto.compareTo(importoScadenzaNuova)!=0) {
//recupero il primo dettaglio e lo aggiorno per quadrare
for (Iterator s = scadenzaNuova.getObbligazione_scad_voceColl().iterator(); s.hasNext(); ) {
Obbligazione_scad_voceBulk osv = (Obbligazione_scad_voceBulk)s.next();
if (osv.getIm_voce().add(importoScadenzaNuova.subtract(totImporto)).compareTo(Utility.ZERO)!=-1) {
osv.setIm_voce(osv.getIm_voce().add(importoScadenzaNuova.subtract(totImporto)));
break;
}
}
}
scadenzaVecchia.setIm_scadenza(nuovoImportoScadenzaVecchia);
scadenzaVecchia.setToBeUpdated();
scadenzaNuova.setIm_scadenza(importoScadenzaNuova);
scadenzaNuova.setToBeCreated();
obbligazione.setToBeUpdated();
/**
* Viene posto il campo che verifica se il controllo della disponibilità
* è stato effettuato a TRUE, in quanto, l'obbligazione è in modifica
* e lo sdoppiamento delle righe non cambia il valore complessivo
* dell'obbligazione
*/
obbligazione.setCheckDisponibilitaContrattoEseguito(true);
obbligazione.setCheckDisponibilitaIncaricoRepertorioEseguito(true);
modificaConBulk(userContext, obbligazione);
return scadenzaNuova;
} catch (PersistencyException e) {
throw handleException( e );
}
}
private void aggiornaImportoScadVoceScadenzaNuova(BigDecimal newImportoOsv, Obbligazione_scadenzarioBulk scadenzaNuova,
Obbligazione_scad_voceBulk osvOld) {
for (Iterator n = scadenzaNuova.getObbligazione_scad_voceColl().iterator(); n.hasNext(); ) {
Obbligazione_scad_voceBulk osvNew = (Obbligazione_scad_voceBulk)n.next();
if (osvNew.getCd_centro_responsabilita().equals(osvOld.getCd_centro_responsabilita()) &&
osvNew.getCd_linea_attivita().equals(osvOld.getCd_linea_attivita())
// && osvNew.getCd_voce().equals(osvOld.getCd_voce())
)
osvNew.setIm_voce(osvOld.getIm_voce().subtract(newImportoOsv));
}
}
private void aggiornaObbligazioneModificaTemporanea(UserContext userContext,Obbligazione_modificaBulk obbligazioneModTemporanea) throws ComponentException {
try {
Numerazione_doc_contHome numHome = (Numerazione_doc_contHome) getHomeCache(userContext).getHome(Numerazione_doc_contBulk.class);
Long pg = numHome.getNextPg(userContext,
obbligazioneModTemporanea.getEsercizio(),
obbligazioneModTemporanea.getCd_cds(),
obbligazioneModTemporanea.getCd_tipo_documento_cont(),
obbligazioneModTemporanea.getUser()!=null?obbligazioneModTemporanea.getUser():((CNRUserContext)userContext).getUser());
confirmObbligazioneModTemporanea(userContext, obbligazioneModTemporanea, pg);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(obbligazioneModTemporanea, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(obbligazioneModTemporanea, e);
}
}
private void confirmObbligazioneModTemporanea(
UserContext userContext,
Obbligazione_modificaBulk obbligazioneModTemporanea,
Long pg)
throws IntrospectionException,PersistencyException, ComponentException {
confirmObbligazioneModTemporanea(userContext,obbligazioneModTemporanea, pg, true);
}
private void confirmObbligazioneModTemporanea(
UserContext userContext,
Obbligazione_modificaBulk obbligazioneModTemporanea,
Long pg,
boolean deleteTemp)
throws IntrospectionException,PersistencyException, ComponentException {
if (pg == null)
throw new PersistencyException("Impossibile ottenere un progressivo definitivo per la modifica dell'impegno inserito!");
Long tempPg = obbligazioneModTemporanea.getPg_modifica();
Obbligazione_modificaHome omHome = (Obbligazione_modificaHome) getHome(userContext, Obbligazione_modificaBulk.class);
SQLBuilder sql = omHome.createSQLBuilder();
sql.addSQLClause( "AND", "cd_cds", sql.EQUALS, obbligazioneModTemporanea.getCd_cds());
sql.addSQLClause( "AND", "esercizio", sql.EQUALS, obbligazioneModTemporanea.getEsercizio());
sql.addSQLClause( "AND", "pg_modifica", sql.EQUALS, tempPg);
List result = omHome.fetchAll( sql );
if (result.isEmpty())
throw new ApplicationException("Modifica temporanea ad Impegno residuo proprio non trovato. Impossibile procedere.");
if (result.size()>1)
throw new ApplicationException("Modifica temporanea ad Impegno residuo proprio non individuata correttamente. Impossibile procedere.");
Obbligazione_modificaBulk obbModDaCanc = (Obbligazione_modificaBulk) result.get(0);
if (deleteTemp)
deleteBulk(userContext,obbModDaCanc);
Obbligazione_modificaKey omkey = (Obbligazione_modificaKey) obbligazioneModTemporanea.getKey();
omkey.setPg_modifica(pg);
obbligazioneModTemporanea.setPg_modifica(pg);
insertBulk(userContext, obbligazioneModTemporanea);
BulkList dett = obbligazioneModTemporanea.getObbligazione_mod_voceColl();
for(Iterator it=dett.iterator();it.hasNext();) {
Obbligazione_mod_voceBulk obbModVoceTemp = (Obbligazione_mod_voceBulk) it.next();
Obbligazione_mod_voceHome omvHome = (Obbligazione_mod_voceHome) getHome(userContext, Obbligazione_mod_voceBulk.class);
sql = omvHome.createSQLBuilder();
sql.addSQLClause( "AND", "cd_cds", sql.EQUALS, obbModVoceTemp.getCd_cds());
sql.addSQLClause( "AND", "esercizio", sql.EQUALS, obbModVoceTemp.getEsercizio());
sql.addSQLClause( "AND", "pg_modifica", sql.EQUALS, tempPg);
sql.addSQLClause( "AND", "ti_appartenenza", sql.EQUALS, obbModVoceTemp.getTi_appartenenza());
sql.addSQLClause( "AND", "ti_gestione", sql.EQUALS, obbModVoceTemp.getTi_gestione());
sql.addSQLClause( "AND", "cd_voce", sql.EQUALS, obbModVoceTemp.getCd_voce());
sql.addSQLClause( "AND", "cd_centro_responsabilita", sql.EQUALS, obbModVoceTemp.getCd_centro_responsabilita());
sql.addSQLClause( "AND", "cd_linea_attivita", sql.EQUALS, obbModVoceTemp.getCd_linea_attivita());
result = omvHome.fetchAll( sql );
if (result.isEmpty())
throw new ApplicationException("Modifica temporanea ad Impegno residuo dettaglio proprio non trovato. Impossibile procedere.");
if (result.size()>1)
throw new ApplicationException("Modifica temporanea ad Impegno residuo dettaglio proprio non individuata correttamente. Impossibile procedere.");
Obbligazione_mod_voceBulk obbModVoceDaCanc = (Obbligazione_mod_voceBulk) result.get(0);
if (deleteTemp)
deleteBulk(userContext, obbModVoceDaCanc);
Obbligazione_mod_voceKey omvkey = (Obbligazione_mod_voceKey) obbModVoceTemp.getKey();
omvkey.setPg_modifica(pg);
obbModVoceTemp.setPg_modifica(pg);
insertBulk(userContext, obbModVoceTemp);
}
}
public SQLBuilder selectAssestatoSpeseByClause (UserContext userContext, ObbligazioneBulk obbligazione, V_assestatoBulk assestato, CompoundFindClause clause) throws ComponentException, PersistencyException{
SQLBuilder sql = getHome(userContext, V_assestatoBulk.class).createSQLBuilder();
sql.addClause( clause );
sql.addClause(FindClause.AND, "esercizio", SQLBuilder.EQUALS, CNRUserContext.getEsercizio(userContext));
sql.addClause(FindClause.AND, "esercizio_res", SQLBuilder.EQUALS, obbligazione.getEsercizio_originale());
sql.addClause(FindClause.AND, "ti_gestione", SQLBuilder.EQUALS, CostantiTi_gestione.TI_GESTIONE_SPESE);
sql.addClause(FindClause.AND, "ti_appartenenza", SQLBuilder.NOT_EQUALS, "C");
sql.addClause(FindClause.AND, "cd_elemento_voce", SQLBuilder.EQUALS, obbligazione.getCd_elemento_voce());
if (obbligazione.getCd_unita_organizzativa() != null){
BulkHome bulkHome = getHome(userContext, V_struttura_organizzativaBulk.class);
SQLBuilder sqlStruttura = bulkHome.createSQLBuilder();
sqlStruttura.addSQLClause(FindClause.AND, "ESERCIZIO", SQLBuilder.EQUALS, CNRUserContext.getEsercizio(userContext));
sqlStruttura.addSQLClause(FindClause.AND, "CD_UNITA_ORGANIZZATIVA", SQLBuilder.EQUALS, obbligazione.getCd_unita_organizzativa());
sqlStruttura.addSQLClause(FindClause.AND, "CD_CENTRO_RESPONSABILITA", SQLBuilder.ISNOTNULL, true);
List strutture = bulkHome.fetchAll(sqlStruttura);
sql.openParenthesis(FindClause.AND);
for (V_struttura_organizzativaBulk v_struttura_organizzativaBulk : strutture) {
sql.addClause(FindClause.OR, "cd_centro_responsabilita", SQLBuilder.EQUALS, v_struttura_organizzativaBulk.getCd_centro_responsabilita());
}
sql.closeParenthesis();
}
return sql;
}
public List listaAssestatoSpese(UserContext userContext, ObbligazioneBulk obbligazione) throws ComponentException, PersistencyException{
SQLBuilder sql = selectAssestatoSpeseByClause(userContext, obbligazione, null, null);
return getHome(userContext, V_assestatoBulk.class).fetchAll( sql );
}
private void validaCampi(UserContext uc, ObbligazioneBulk obbligazione) throws ComponentException {
try {
// controlli di validazione del campo MOTIVAZIONE
Parametri_cnrBulk bulkCNR = (Parametri_cnrBulk)getHome(uc, Parametri_cnrBulk.class).findByPrimaryKey(new Parametri_cnrBulk(CNRUserContext.getEsercizio(uc)));
if (bulkCNR == null)
throw new ApplicationException("Parametri CNR non presenti per l'anno "+CNRUserContext.getEsercizio(uc));
if (!obbligazione.isObbligazioneResiduo() &&
bulkCNR.getFl_motivazione_su_imp() &&
obbligazione.getMotivazione()==null) {
if (obbligazione.isToBeUpdated()) {
BigDecimal impObbl=obbligazione.getIm_obbligazione();
ObbligazioneBulk oldObbl = (ObbligazioneBulk)getHome(uc, ObbligazioneBulk.class).findByPrimaryKey(obbligazione);
BigDecimal oldImpObbl = oldObbl.getIm_obbligazione();
if (Utility.nvl(impObbl.subtract(oldImpObbl)).compareTo(Utility.nvl(bulkCNR.getImporto_max_imp()))>=0 &&
Utility.nvl(oldImpObbl).compareTo(Utility.nvl(impObbl))!=0)
throw new ApplicationException("Attenzione: il campo MOTIVAZIONE è obbligatorio.");
}
else {
throw new ApplicationException("Attenzione: il campo MOTIVAZIONE è obbligatorio.");
}
}
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
*
* @param userContext
* @param obbligazione
* @param incarico
* @param clauses
* @return
* @throws ComponentException
* @throws it.cnr.jada.persistency.PersistencyException
*/
public SQLBuilder selectIncarico_repertorioByClause(UserContext userContext, ObbligazioneBulk obbligazione, Incarichi_repertorioBulk incarico, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = getHome(userContext,Incarichi_repertorioBulk.class).createSQLBuilder();
if (clauses != null)
sql.addClause(clauses);
SQLBuilder sqlUoExists = getHome(userContext,Ass_incarico_uoBulk.class).createSQLBuilder();
sqlUoExists.addSQLJoin("ASS_INCARICO_UO.ESERCIZIO","INCARICHI_REPERTORIO.ESERCIZIO");
sqlUoExists.addSQLJoin("ASS_INCARICO_UO.PG_REPERTORIO","INCARICHI_REPERTORIO.PG_REPERTORIO");
sqlUoExists.addSQLClause("AND","ASS_INCARICO_UO.CD_UNITA_ORGANIZZATIVA",SQLBuilder.EQUALS, obbligazione.getCd_unita_organizzativa());
sql.openParenthesis(FindClause.AND);
sql.addClause(FindClause.OR, "cd_unita_organizzativa", SQLBuilder.EQUALS, obbligazione.getCd_unita_organizzativa());
sql.addSQLExistsClause(FindClause.OR,sqlUoExists);
sql.closeParenthesis();
sql.openParenthesis(FindClause.AND);
sql.addClause(FindClause.OR, "stato", SQLBuilder.EQUALS, Incarichi_repertorioBulk.STATO_DEFINITIVO);
sql.addClause(FindClause.OR, "stato", SQLBuilder.EQUALS, Incarichi_repertorioBulk.STATO_INVIATO);
sql.closeParenthesis();
sql.addTableToHeader("INCARICHI_REPERTORIO_ANNO");
sql.addSQLJoin("INCARICHI_REPERTORIO_ANNO.ESERCIZIO", "INCARICHI_REPERTORIO.ESERCIZIO");
sql.addSQLJoin("INCARICHI_REPERTORIO_ANNO.PG_REPERTORIO", "INCARICHI_REPERTORIO.PG_REPERTORIO");
sql.addSQLClause("AND", "INCARICHI_REPERTORIO_ANNO.ESERCIZIO_LIMITE", SQLBuilder.EQUALS, obbligazione.getEsercizio_originale());
sql.addTableToHeader("TERZO");
sql.addSQLJoin("INCARICHI_REPERTORIO.CD_TERZO", SQLBuilder.EQUALS,"TERZO.CD_TERZO");
sql.addSQLClause("AND","TERZO.DT_FINE_RAPPORTO",SQLBuilder.ISNULL,null);
if((obbligazione.getCreditore() != null && obbligazione.getCreditore().getCd_terzo()!=null)){
sql.openParenthesis("AND");
sql.openParenthesis("AND");
sql.addClause(FindClause.AND, "cd_terzo",SQLBuilder.EQUALS,obbligazione.getCreditore().getCd_terzo());
AnagraficoHome anagraficoHome = (AnagraficoHome) getHome(userContext, AnagraficoBulk.class);
sql.closeParenthesis();
try {
for (Iterator i = anagraficoHome.findAssociatiStudio(obbligazione.getCreditore().getAnagrafico()).iterator(); i.hasNext();) {
sql.openParenthesis("OR");
Anagrafico_terzoBulk associato = i.next();
sql.addSQLClause("OR", "INCARICHI_REPERTORIO.CD_TERZO",SQLBuilder.EQUALS, associato.getCd_terzo());
sql.closeParenthesis();
}
} catch (IntrospectionException e) {
}
sql.closeParenthesis();
}
return sql;
}
/**
*
* @param userContext
* @param obbligazione
* @param incarico
* @param clauses
* @return
* @throws ComponentException
* @throws it.cnr.jada.persistency.PersistencyException
*/
public void validaIncaricoRepertorio(UserContext userContext, ObbligazioneBulk obbligazione, Incarichi_repertorioBulk incarico, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
SQLBuilder sql = selectIncarico_repertorioByClause(userContext, obbligazione, incarico, clauses);
sql.addSQLClause("AND","ESERCIZIO",SQLBuilder.EQUALS, incarico.getEsercizio());
sql.addSQLClause("AND","PG_REPERTORIO",SQLBuilder.EQUALS, incarico.getPg_repertorio());
Incarichi_repertorioHome home = (Incarichi_repertorioHome)getHome(userContext,Incarichi_repertorioBulk.class);
it.cnr.jada.persistency.Broker broker = home.createBroker(sql);
if(!broker.next())
throw new ApplicationException("Incarico non valido!");
}
public void verificaCoperturaIncaricoRepertorio (UserContext aUC,ObbligazioneBulk obbligazione, int flag) throws ComponentException
{
// Controllo che l'obbligazione non abbia sfondato l'incarico
if (obbligazione.isCheckDisponibilitaIncaricoRepertorioEseguito())
return;
if (obbligazione.getIncarico_repertorio() != null && obbligazione.getIncarico_repertorio().getPg_repertorio() != null){
try {
Incarichi_repertorioHome incaricoHome = (Incarichi_repertorioHome)getHome(aUC, Incarichi_repertorioBulk.class);
SQLBuilder sql = incaricoHome.calcolaTotObbligazioni(aUC,obbligazione.getIncarico_repertorio());
BigDecimal totale = null;
try {
java.sql.ResultSet rs = null;
LoggableStatement ps = null;
try {
ps = sql.prepareStatement(getConnection(aUC));
try {
rs = ps.executeQuery();
if (rs.next())
totale = rs.getBigDecimal(1);
} catch (java.sql.SQLException e) {
throw handleSQLException(e);
} finally {
if (rs != null) try{rs.close();}catch( java.sql.SQLException e ){};
}
} finally {
if (ps != null) try{ps.close();}catch( java.sql.SQLException e ){};
}
} catch (java.sql.SQLException ex) {
throw handleException(ex);
}
if (flag == INSERIMENTO)
totale = totale.add(obbligazione.getIm_obbligazione());
if (totale != null ){
if (totale.compareTo(obbligazione.getIncarico_repertorio().getImporto_complessivo()) > 0){
throw handleException( new CheckDisponibilitaIncaricoRepertorioFailed("La somma degli impegni associati supera l'importo definito nell'incarico."));
}
}
} catch (IntrospectionException e1) {
throw new it.cnr.jada.comp.ComponentException(e1);
} catch (PersistencyException e1) {
throw new it.cnr.jada.comp.ComponentException(e1);
}
}
}
public void verificaCoperturaIncaricoRepertorio (UserContext aUC,ObbligazioneBulk obbligazione) throws ComponentException
{
verificaCoperturaIncaricoRepertorio (aUC,obbligazione, MODIFICA);
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni di lettura della Configurazione CNR
*
* @return Configurazione_cnrComponentSession l'istanza di Configurazione_cnrComponentSession che serve per leggere i parametri di configurazione del CNR
*/
private Configurazione_cnrComponentSession createConfigurazioneCnrComponentSession() throws ComponentException
{
try
{
return (Configurazione_cnrComponentSession)EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
public void validaOrigineFontiPerAnnoResiduo(UserContext usercontext, Integer annoResiduo, String origineFonti, String pk) throws ComponentException {
try{
UtenteBulk utente = (UtenteBulk)(getHome(usercontext, UtenteBulk.class).findByPrimaryKey(new UtenteBulk(CNRUserContext.getUser(usercontext))));
if (!utente.isSupervisore()) {
Configurazione_cnrBulk config = createConfigurazioneCnrComponentSession().getConfigurazione( usercontext, CNRUserContext.getEsercizio(usercontext), CNRUserContext.getCd_cds(usercontext), pk, String.valueOf(annoResiduo));
if ( config == null )
config = createConfigurazioneCnrComponentSession().getConfigurazione( usercontext, CNRUserContext.getEsercizio(usercontext), null, pk, String.valueOf(annoResiduo));
if (config != null){
if (!origineFonti.equalsIgnoreCase(config.getVal01()) && !origineFonti.equalsIgnoreCase(config.getVal02())){
throw new ApplicationException("Non è consentito emettere/modificare Impegni Residui Propri/Impropri\n"+
"su GAE di "+ NaturaBulk.tipo_naturaKeys.get(origineFonti)+" su fondi dell'esercizio residuo "+annoResiduo);
}
}
}
}catch ( Exception e ){
throw handleException( e ) ;
}
}
protected void validaCreaModificaOrigineFonti(UserContext usercontext, ObbligazioneBulk obbligazione) throws ComponentException {
try {
getHomeCache(usercontext).fetchAll(usercontext);
if (obbligazione.isObbligazioneResiduoImproprio() || obbligazione.isObbligazioneResiduo()){
HashSet origineFonti = new HashSet();
for (Iterator iterator = obbligazione.getObbligazione_scadenzarioColl().iterator(); iterator.hasNext();) {
Obbligazione_scadenzarioBulk obbligazione_scadenzarioBulk = iterator.next();
for (Iterator iterator2 = obbligazione_scadenzarioBulk.getObbligazione_scad_voceColl().iterator(); iterator2.hasNext();) {
Obbligazione_scad_voceBulk obbligazione_scad_voceBulk = iterator2.next();
NaturaBulk natura = (NaturaBulk) getHome(usercontext, NaturaBulk.class).findByPrimaryKey(obbligazione_scad_voceBulk.getLinea_attivita().getNatura());
origineFonti.add(natura.getTipo());
}
}
for (Iterator iterator = origineFonti.iterator(); iterator.hasNext();) {
String fonte = iterator.next();
String pk = null;
if (obbligazione.isObbligazioneResiduoImproprio())
pk = Configurazione_cnrBulk.PK_ANNI_RESIDUI_IM_RES_IMP;
else if (obbligazione.isObbligazioneResiduo())
pk = Configurazione_cnrBulk.PK_ANNI_RESIDUI_IM_RES_PRO;
if (pk != null)
validaOrigineFontiPerAnnoResiduo(usercontext, obbligazione.getEsercizio_originale(), fonte, pk);
}
}
} catch (PersistencyException e) {
handleException(e);
}
}
private Boolean verificaAssociato(UserContext usercontext, TerzoBulk terzo, ObbligazioneBulk obbligazione)throws ComponentException {
try {
AnagraficoHome anagraficoHome = (AnagraficoHome) getHome(usercontext, AnagraficoBulk.class);
for (Iterator i = anagraficoHome.findAssociatiStudio(obbligazione.getCreditore().getAnagrafico()).iterator(); i.hasNext();) {
Anagrafico_terzoBulk associato = i.next();
if( associato.getCd_terzo().compareTo(terzo.getCd_terzo())==0)
return true;
}
} catch (IntrospectionException e) {
handleException(e);
} catch (PersistencyException e) {
handleException(e);
}
return false;
}
private Boolean verificaVoceResidua(UserContext usercontext, ObbligazioneBulk obbligazione)throws ComponentException {
try{
UtenteBulk utente = (UtenteBulk)(getHome(usercontext, UtenteBulk.class).findByPrimaryKey(new UtenteBulk(CNRUserContext.getUser(usercontext))));
if (!utente.isSupervisore())
if(obbligazione!=null && obbligazione.getElemento_voce()!=null && obbligazione.getElemento_voce().getFl_azzera_residui())
return true;
} catch (PersistencyException e) {
handleException(e);
}
return false;
}
public SQLBuilder selectElemento_voce_nextByClause(UserContext userContext, ObbligazioneBulk obbligazione, Elemento_voceBulk elemento_voce, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext,Elemento_voceBulk.class).createSQLBuilder();
if (clauses != null)
sql.addClause(clauses);
sql.addClause(FindClause.AND, "esercizio", SQLBuilder.EQUALS, obbligazione.getEsercizio()+1 );
sql.addClause(FindClause.AND, "ti_gestione", SQLBuilder.EQUALS, Elemento_voceHome.GESTIONE_SPESE );
sql.addClause(FindClause.AND, "fl_limite_spesa", SQLBuilder.EQUALS, Boolean.FALSE );
sql.addClause(FindClause.AND, "fl_solo_competenza", SQLBuilder.EQUALS, Boolean.FALSE );
sql.addClause(FindClause.AND, "fl_azzera_residui", SQLBuilder.EQUALS, new Boolean( false) );
sql.addClause(FindClause.AND, "fl_voce_fondo", SQLBuilder.EQUALS, Boolean.FALSE );
sql.addTableToHeader("V_CLASSIFICAZIONE_VOCI_ALL", "CLASSVOCENEW");
sql.addTableToHeader("CLASSIFICAZIONE_VOCI", "CLASSLIV1NEW");
sql.addSQLJoin("ELEMENTO_VOCE.ID_CLASSIFICAZIONE", "CLASSVOCENEW.ID_CLASSIFICAZIONE");
sql.addSQLJoin("CLASSVOCENEW.ID_LIV1", "CLASSLIV1NEW.ID_CLASSIFICAZIONE");
sql.addSQLClause(FindClause.AND, "CLASSLIV1NEW.TI_CLASSIFICAZIONE", SQLBuilder.ISNOTNULL, null);
if (obbligazione!=null && obbligazione.getElemento_voce()!=null && obbligazione.getElemento_voce().getV_classificazione_voci()!=null &&
obbligazione.getElemento_voce().getV_classificazione_voci().getId_classificazione()!=null) {
SQLBuilder sqlExists = getHome(userContext,Classificazione_vociBulk.class).createSQLBuilder();
sqlExists.addTableToHeader("V_CLASSIFICAZIONE_VOCI_ALL", "CLASSVOCEOLD");
sqlExists.addSQLClause(FindClause.AND, "CLASSVOCEOLD.ID_CLASSIFICAZIONE", SQLBuilder.EQUALS, obbligazione.getElemento_voce().getV_classificazione_voci().getId_classificazione());
sqlExists.addSQLJoin("CLASSVOCEOLD.ID_LIV1", "CLASSIFICAZIONE_VOCI.ID_CLASSIFICAZIONE");
sqlExists.addSQLClause(FindClause.AND, "CLASSIFICAZIONE_VOCI.TI_CLASSIFICAZIONE", SQLBuilder.ISNOTNULL, null);
sqlExists.addSQLJoin("CLASSIFICAZIONE_VOCI.TI_CLASSIFICAZIONE", "CLASSLIV1NEW.TI_CLASSIFICAZIONE" );
sql.addSQLExistsClause(FindClause.AND, sqlExists);
} else {
sql.addSQLClause(FindClause.AND, "1!=1"); //Condizione inserita per far fallire la query
}
return sql;
}
public boolean existAssElementoVoceNew(UserContext userContext, ObbligazioneBulk obbligazione) throws RemoteException,it.cnr.jada.comp.ComponentException {
try {
Ass_evold_evnewHome ass_evold_evnewHome = (Ass_evold_evnewHome) getHome( userContext, Ass_evold_evnewBulk.class);
if (!ass_evold_evnewHome.findAssElementoVoceNewList(obbligazione.getElemento_voce()).isEmpty())
return Boolean.TRUE;
} catch (IntrospectionException e) {
handleException(e);
} catch (PersistencyException e) {
handleException(e);
}
return Boolean.FALSE;
}
protected ObbligazioneBulk validaCreaModificaElementoVoceNext(UserContext userContext, ObbligazioneBulk obbligazione) throws RemoteException, ComponentException {
try {
if (obbligazione.getElemento_voce_next()!=null && obbligazione.getElemento_voce_next().getCd_elemento_voce()!=null){
if (existAssElementoVoceNew(userContext, obbligazione)) {
obbligazione.setElemento_voce_next(null);
obbligazione.setToBeUpdated();
} else {
Elemento_voceHome home = (Elemento_voceHome)getHome(userContext,Elemento_voceBulk.class);
SQLBuilder sql = selectElemento_voce_nextByClause(userContext, obbligazione, obbligazione.getElemento_voce(), new CompoundFindClause());
sql.addSQLClause(FindClause.AND, "ELEMENTO_VOCE.ESERCIZIO", SQLBuilder.EQUALS, obbligazione.getElemento_voce_next().getEsercizio());
sql.addSQLClause(FindClause.AND, "ELEMENTO_VOCE.TI_APPARTENENZA", SQLBuilder.EQUALS, obbligazione.getElemento_voce_next().getTi_appartenenza());
sql.addSQLClause(FindClause.AND, "ELEMENTO_VOCE.TI_GESTIONE", SQLBuilder.EQUALS, obbligazione.getElemento_voce_next().getTi_gestione());
sql.addSQLClause(FindClause.AND, "ELEMENTO_VOCE.CD_ELEMENTO_VOCE", SQLBuilder.EQUALS, obbligazione.getElemento_voce_next().getCd_elemento_voce());
List listEv = home.fetchAll(sql);
if (listEv.isEmpty())
throw new ApplicationException("Attenzione! Non esiste congruenza tra la voce dell''impegno e quella di ribaltamento. Modificare la voce di ribaltamento!");
if (obbligazione.getElemento_voce().getFl_recon().equals(Boolean.FALSE) && obbligazione.getElemento_voce_next().getFl_recon().equals(Boolean.TRUE) &&
(obbligazione.getIncarico_repertorio()==null || obbligazione.getIncarico_repertorio().getPg_repertorio()==null) &&
(obbligazione.getContratto()==null || obbligazione.getContratto().getPg_contratto()==null))
throw new ApplicationException("Attenzione! Non esiste congruenza tra la voce dell''impegno che non richiede l'indicazione "+
"del contratto/incarico e quella di ribaltamento che ne richiede l'inserimento. Modificare la voce di ribaltamento "+
"o inserire i dati relativi al contratto/incarico!");
try {
verificaGestioneTrovato(userContext, obbligazione, obbligazione.getElemento_voce_next());
} catch (ApplicationException e) {
throw new ApplicationException("Attenzione! Non esiste congruenza tra la voce dell''impegno e quella di ribaltamento! " + e.getMessage());
}
verificaGestioneMissioni(userContext, obbligazione, obbligazione.getElemento_voce_next());
if (!obbligazione.getElemento_voce().getFl_inv_beni_patr().equals(obbligazione.getElemento_voce_next().getFl_inv_beni_patr()))
throw new ApplicationException("Attenzione! Non esiste congruenza tra la voce dell''impegno e quella di ribaltamento " +
"nella gestione dell''inventario. Modificare la voce di ribaltamento!");
if (obbligazione.getElemento_voce_next().getFl_limite_spesa())
throw new ApplicationException("Attenzione! La voce di ribaltamento è soggetta ai limiti di spesa. Associazione non consentita!");
}
}
} catch (PersistencyException e) {
handleException(e);
}
return obbligazione;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy