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

it.cnr.contab.config00.sto.bulk.CdrHome 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.config00.sto.bulk;

import it.cnr.contab.anagraf00.core.bulk.*;

import java.rmi.*;
import java.sql.*;
import it.cnr.contab.config00.util.*;
import it.cnr.contab.prevent01.bulk.Pdg_esercizioBulk;
import it.cnr.contab.prevent01.bulk.Pdg_moduloBulk;
import it.cnr.contab.progettiric00.core.bulk.ProgettoBulk;
import it.cnr.contab.progettiric00.core.bulk.ProgettoHome;
import it.cnr.contab.progettiric00.core.bulk.Progetto_sipBulk;
import it.cnr.contab.progettiric00.core.bulk.Progetto_sipHome;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.*;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.persistency.*;
import it.cnr.jada.persistency.beans.*;
import it.cnr.jada.persistency.sql.*;

public class CdrHome extends BulkHome {

	public static final Integer CDR_PRIMO_LIVELLO = new Integer(1);
	public static final Integer CDR_SECONDO_LIVELLO =  new Integer(2);	
		
	public static final String  DEFAULT_DS_CDR = new String("CDR responsabile dell'UO" );

protected CdrHome(Class clazz,java.sql.Connection conn) {
	super(clazz,conn);
}
protected CdrHome(Class clazz,java.sql.Connection conn,PersistentCache persistentCache) {
	super(clazz,conn,persistentCache);
}
/**
 * 
 * Costruisce un CdrHome
 *
 * @param conn	La java.sql.Connection su cui vengono effettuate le operazione di persistenza
 */
public CdrHome(java.sql.Connection conn) {
	super(CdrBulk.class,conn);
}
/**
 * 
 * Costruisce un CdrHome
 *
 * @param conn	La java.sql.Connection su cui vengono effettuate le operazione di persistenza
 * @param persistentCache	La PersistentCache in cui vengono cachati gli oggetti persistenti caricati da questo Home
 */
public CdrHome(java.sql.Connection conn,PersistentCache persistentCache) {
	super(CdrBulk.class,conn,persistentCache);
}
/**
 * Determina un nuovo codice per l'UO in processo
 * @param esercizio esercizio in cui viene creata l'UO
 * @param codiceCDS codice del CDS di appartenenza dell'UO
 * @return il nuovo codice
 */

public void aggiornaEsercizioFinePerLineeAttivita(Integer esercizio,String codiceCDR)  throws ApplicationException, PersistencyException
{
	try
	{
		LoggableStatement ps =new LoggableStatement(getConnection(),
			"UPDATE " + 
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 
			"LINEA_ATTIVITA " +
			"SET ESERCIZIO_FINE = ? " +
			"WHERE " +
			"ESERCIZIO_FINE > ?   AND " +			
			"CD_CENTRO_RESPONSABILITA = ?  " ,true,this.getClass());
		try
		{
			ps.setObject( 1, esercizio );
			ps.setObject( 2, esercizio );		
			ps.setString( 3, codiceCDR );
		
			ps.executeUpdate();
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}
	}
	catch ( SQLException e )
	{
		throw new PersistencyException( e );
	}
}
/**
 * Genera un nuovo codice per CdrBulk calcolando il progressivo successivo al massimo esistente
 * per l'unita organizzativa da cui dipende
 * @param codiceUO codice completo dell'unita organizzativa
 * @param livello livello del Cdr
 * @return String codice creato
 */



public String creaNuovoCodiceCDR( String codiceUO, Integer livello) throws ApplicationException, PersistencyException
{	
	String codice;

	try
	{
		LoggableStatement ps = new LoggableStatement(getConnection(),
			"SELECT CD_PROPRIO_CDR FROM " +
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 			
			"CDR " +
			"WHERE " +
			"CD_UNITA_ORGANIZZATIVA = ? AND " +
			"CD_PROPRIO_CDR = ( SELECT MAX(CD_PROPRIO_CDR) " +			
			"FROM " +
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 			
			"CDR WHERE " +
			"CD_UNITA_ORGANIZZATIVA = ?)" +
			"FOR UPDATE NOWAIT",true ,this.getClass());
		try
		{
			ps.setString( 1, codiceUO );
			ps.setString( 2, codiceUO );
		
			ResultSet rs = ps.executeQuery();
			try
			{
				if ( rs.next() )
				{
					codice = rs.getString( 1 );
					if ( codice != null )
					{
						long cdLong = Long.parseLong( codice ) + 1;
						codice = String.valueOf( cdLong );
					}
					else
						codice = String.valueOf( 0 );
				}
				else
					codice = String.valueOf( 0 );
			}
			catch ( SQLException e )
			{
				throw new PersistencyException( e );
			}
			finally
			{
				try{rs.close();}catch( java.sql.SQLException e ){};
			}
//		return getLunghezza_chiaviHome().create().formatCdrKey( codice, esercizio, livello );
			return codice;
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}		
	}
	catch (java.lang.NumberFormatException e)
	{
		throw new ApplicationException( "Esistono codice non numerici nel database. " );			
	}
	catch ( SQLException e )
	{
		throw new PersistencyException( e );
	}
}
/**
 * Aggiunge condizioni cablate per le ricerche sul bulk collegato a questa home.
 * In particolare impone che il CDR non appartenga ad UO ENTE
 * @return SQLBuilder
 */

public SQLBuilder createSQLBuilder()
{
	SQLBuilder sql = createSQLBuilderEsteso();
	sql.addSQLClause("AND", " not exists (select 1 from "+it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema()+"UNITA_ORGANIZZATIVA where" +
		"    UNITA_ORGANIZZATIVA.cd_unita_organizzativa = "+sql.getColumnMap().getTableName()+".cd_unita_organizzativa " +
		"and UNITA_ORGANIZZATIVA.cd_tipo_unita = ? ) "
	);
	sql.addParameter(Tipo_unita_organizzativaHome.TIPO_UO_ENTE,Types.VARCHAR,0);
	return sql;

}
/**
 * Aggiunge condizioni cablate per le ricerche sul bulk collegato a questa home.
 * @return SQLBuilder
 */

public SQLBuilder createSQLBuilderEsteso()
{
	SQLBuilder sql = super.createSQLBuilder();
	return sql;

}
/**
 * Recupera il codice del CDR di afferenza per un Cdr che dipende da un CDS di tipo diverso da SAC.
 * In particolare individua prima l'UO-CDS del CDS specificato e successivamente il CDR di I livello sotto all'UO-CDS.
 * @param esercizio esercizio del cdr
 * @param codiceCDS codice del CDS
 * @return String codice del cdr di I livello sotto all'UO-CDS 
 */

public String findCdCdrAfferenzaForMacro( String codiceCDS) throws PersistencyException, ApplicationException
{	
	try
	{
		//select uo_cds

		String uoCds;
		ResultSet rs;
		
		LoggableStatement ps = new LoggableStatement(getConnection(),
			"SELECT CD_UNITA_ORGANIZZATIVA FROM " + 
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 			
			"UNITA_ORGANIZZATIVA " +
			"WHERE " +
			"FL_UO_CDS = 'Y' AND " +
			"CD_UNITA_PADRE = ? ",true,this.getClass());
		try
		{	
			ps.setString( 1, codiceCDS );

			rs = ps.executeQuery();
			try
			{
				if ( rs.next() )
					uoCds = rs.getString( 1 );
				else
					throw new ApplicationException( "UO-CDS non trovato!");
			}
			catch ( SQLException e )
			{
				throw new PersistencyException( e );
			}
			finally
			{
				try{rs.close();}catch( java.sql.SQLException e ){};
			}
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}
			
		ps = new LoggableStatement(getConnection(),			
			"SELECT CD_CENTRO_RESPONSABILITA FROM " +
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 
			"CDR WHERE " +
			"CD_UNITA_ORGANIZZATIVA = ? AND " +
			"LIVELLO = ?",true ,this.getClass());
		try
		{
			ps.setString( 1, uoCds );
			ps.setObject( 2, CDR_PRIMO_LIVELLO );
		
			rs = ps.executeQuery();
			try
			{
				if ( rs.next() )
					return rs.getString( 1 );
				else
					return null;
			}
			catch ( SQLException e )
			{
				throw new PersistencyException( e );
			}
			finally
			{
				try{rs.close();}catch( java.sql.SQLException e ){};
			}
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}
	}
	catch ( SQLException e )
	{
			throw new PersistencyException( e );
	}
}
/**
 * Recupera il codice del CDR di afferenza per un Cdr che dipende da un CDS di tipo SAC.
 * In particolare individua il CDR di I livello sotto all'Unita Organizzativa.
 * @param esercizio esercizio del cdr
 * @param codiceUO codice dell'Unita organizzativa da cui dipende il Cdr
 * @return String codice del cdr di I livello sotto all'Unita Organizzativa
 */

public String findCdCdrAfferenzaForSAC( String codiceUO) throws PersistencyException, ApplicationException
{	
	try
	{
		
		LoggableStatement ps =new LoggableStatement(getConnection(),
			"SELECT CD_CENTRO_RESPONSABILITA FROM " +
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 			
			"CDR " +
			"WHERE " +
			"CD_UNITA_ORGANIZZATIVA = ? AND " +
			"LIVELLO = ?" ,true,this.getClass());
		try
		{
			ps.setString( 1, codiceUO );
			ps.setObject( 2, CDR_PRIMO_LIVELLO );
		
			ResultSet rs = ps.executeQuery();
			try
			{
				if ( rs.next() )
					return rs.getString( 1 );
				else
					return null;
			}
			catch ( SQLException e )
			{
				throw new PersistencyException( e );
			}
			finally
			{
				try{rs.close();}catch( java.sql.SQLException e ){};
			}
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}
	}
	catch ( SQLException e )
	{
		throw new PersistencyException( e );
	}
}
/**
 * Ritorna il CDR ENTE
 *
 * @param esercizio	esercizio
 * @return Cdr Ente
 * @throws PersistencyException	
 * @throws ApplicationException	
 */
public CdrBulk findCdrEnte(Integer esercizio) throws PersistencyException, ApplicationException {
		 Unita_organizzativaHome uo_home = (Unita_organizzativaHome)getHomeCache().getHome(Unita_organizzativaBulk.class);
		SQLBuilder sql = uo_home.createSQLBuilderEsteso();
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.FL_UO_CDS",sql.EQUALS,"Y");
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.CD_TIPO_UNITA",sql.EQUALS,Tipo_unita_organizzativaHome.TIPO_UO_ENTE);
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.ESERCIZIO_INIZIO",sql.LESS_EQUALS, esercizio);
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.ESERCIZIO_FINE",sql.GREATER_EQUALS, esercizio);				
		java.util.List uo = uo_home.fetchAll(sql);
		if (uo.isEmpty()) return null;
		sql = createSQLBuilderEsteso();
		sql.addSQLClause("AND","CDR.CD_UNITA_ORGANIZZATIVA",sql.EQUALS,((Unita_organizzativaBulk)uo.get(0)).getCd_unita_organizzativa());
		sql.addSQLClause("AND","TO_NUMBER(CDR.CD_PROPRIO_CDR) = 0");
		sql.addSQLClause("AND","ESERCIZIO_INIZIO",sql.LESS_EQUALS, esercizio);
		sql.addSQLClause("AND","ESERCIZIO_FINE",sql.GREATER_EQUALS, esercizio);		
		Broker broker = createBroker(sql);
		CdrBulk cdr = null;
		if (broker.next())
			cdr = (CdrBulk)fetch(broker);
		return cdr;
}
/**
 * Ritorna il cdr dell'UO CDS del SAC
 * 
 *
 * @param esercizio	
 * @return Cdr
 * @throws PersistencyException	
 * @throws ApplicationException	
 */
public CdrBulk findCdrSAC(Integer esercizio) throws PersistencyException, ApplicationException {
		BulkHome uo_home = (BulkHome)getHomeCache().getHome(Unita_organizzativaBulk.class);
		SQLBuilder sql = uo_home.createSQLBuilder();
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.FL_UO_CDS",sql.EQUALS,"Y");
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.CD_TIPO_UNITA",sql.EQUALS,Tipo_unita_organizzativaHome.TIPO_UO_SAC);
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.ESERCIZIO_INIZIO",sql.LESS_EQUALS, esercizio);
		sql.addSQLClause("AND","UNITA_ORGANIZZATIVA.ESERCIZIO_FINE",sql.GREATER_EQUALS, esercizio);				
		java.util.List uo = uo_home.fetchAll(sql);
		if (uo.isEmpty()) return null;
		sql = createSQLBuilder();
		sql.addSQLClause("AND","CDR.CD_UNITA_ORGANIZZATIVA",sql.EQUALS,((Unita_organizzativaBulk)uo.get(0)).getCd_unita_organizzativa());
		sql.addSQLClause("AND","TO_NUMBER(CDR.CD_PROPRIO_CDR) = 0");
		sql.addSQLClause("AND","ESERCIZIO_INIZIO",sql.LESS_EQUALS, esercizio);
		sql.addSQLClause("AND","ESERCIZIO_FINE",sql.GREATER_EQUALS, esercizio);		
		Broker broker = createBroker(sql);
		CdrBulk cdr = null;
		if (broker.next())
			cdr = (CdrBulk)fetch(broker);
		return cdr;

}
/**
 * Ritorna una lista contenente tutte i CDR che afferiscono nel CDR passato
 * 
 * @param Cdr classe Bulk del CDR di cui si vuol conoscere la lista dei CDR che afferiscono 	
 * @return Lista Cdr
 * @throws PersistencyException	
 * @throws ApplicationException	
**/
public java.util.List findCdrAfferenti(CdrBulk cdr) throws PersistencyException
{
	BulkHome cdrHome = (BulkHome)getHomeCache().getHome(CdrBulk.class);
	SQLBuilder sql = cdrHome.createSQLBuilder();
	sql.addSQLClause("AND","CD_CDR_AFFERENZA",sql.ISNOTNULL, null);
	sql.addSQLClause("AND","CD_CDR_AFFERENZA",sql.EQUALS, cdr.getCd_centro_responsabilita());

	return cdrHome.fetchAll(sql);
}

public boolean isEnte(CdrBulk cdr) throws PersistencyException{

	getHomeCache().getHome(Unita_organizzativaBulk.class).findByPrimaryKey(cdr.getUnita_padre());
	return cdr.isCdrAC();
}
/**
 * Ritorna false se l'esercizio di fine impostato sul cdr è minore del massimo esercizio 
 * esistente per pdg del cdr in processo
 *
 * @param cdr Cdr in processo	
 * @return boolean
 * @throws PersistencyException	
 */
public boolean verificaEsercizioPreventivo( CdrBulk cdr ) throws PersistencyException
{	try
	{
		int esercizioPdG;
		
		LoggableStatement ps =new LoggableStatement(getConnection(),
			"SELECT MAX(ESERCIZIO) FROM " +
			it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() + 			
			"PDG_PREVENTIVO " +
			"WHERE " +
			"CD_CENTRO_RESPONSABILITA = ? ",true,this.getClass());
		try
		{
			ps.setString( 1, cdr.getCd_centro_responsabilita() );
		
			ResultSet rs = ps.executeQuery();
			try
			{
				if ( rs.next() )
				{
					esercizioPdG = rs.getInt( 1 );
					if ( esercizioPdG > 0 && esercizioPdG > cdr.getEsercizio_fine().intValue())
						return false;
				}
			}
			catch ( SQLException e )
			{
				throw new PersistencyException( e );
			}
			finally
			{
				try{rs.close();}catch( java.sql.SQLException e ){};
			}
		}
		catch ( SQLException e )
		{
			throw new PersistencyException( e );
		}
		finally
		{
			try{ps.close();}catch( java.sql.SQLException e ){};
		}
		
		return true;
	}
	catch ( SQLException e )
	{
		throw new PersistencyException( e );
	}
}

public java.util.Collection findPdgModuloDettagli(UserContext userContext, CdrBulk testata, Integer livelloProgetto) throws IntrospectionException, PersistencyException {
	PersistentHome dettHome = getHomeCache().getHome(Pdg_moduloBulk.class);
	SQLBuilder sql = dettHome.createSQLBuilder();
	sql.addClause("AND","esercizio",sql.EQUALS,it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));
	sql.addClause("AND","cd_centro_responsabilita",sql.EQUALS,testata.getCd_centro_responsabilita());

	Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHomeCache().getHome( Unita_organizzativa_enteBulk.class).findAll().get(0);
	if (!((CNRUserContext) userContext).getCd_unita_organizzativa().equals( ente.getCd_unita_organizzativa())){
		Progetto_sipHome progettohome = (Progetto_sipHome)getHomeCache().getHome(Progetto_sipBulk.class);
		sql.addSQLExistsClause("AND",progettohome.abilitazioni(userContext,"PDG_MODULO.PG_PROGETTO",livelloProgetto)); 	
	  //sql.addSQLClause("AND","EXISTS ( SELECT 1 FROM PROGETTO_UO WHERE PDG_MODULO.PG_PROGETTO = PROGETTO_UO.PG_PROGETTO AND PROGETTO_UO.CD_UNITA_ORGANIZZATIVA = ?)");
	  //sql.addParameter(((CNRUserContext) userContext).getCd_unita_organizzativa() ,java.sql.Types.VARCHAR,0);
	}
	return dettHome.fetchAll(sql);
}
public java.util.Collection findPdgEsercizioDettagli(UserContext userContext, CdrBulk testata) throws IntrospectionException, PersistencyException {
	PersistentHome dettHome = getHomeCache().getHome(Pdg_esercizioBulk.class);
	SQLBuilder sql = dettHome.createSQLBuilder();
	sql.addTableToHeader("V_CDR_VALIDO");
	sql.addSQLJoin("PDG_ESERCIZIO.CD_CENTRO_RESPONSABILITA", "V_CDR_VALIDO.CD_CENTRO_RESPONSABILITA");
	sql.addTableToHeader("UNITA_ORGANIZZATIVA");
	sql.addSQLJoin("V_CDR_VALIDO.CD_UNITA_ORGANIZZATIVA", "UNITA_ORGANIZZATIVA.CD_UNITA_ORGANIZZATIVA");
	sql.addSQLClause("AND", "V_CDR_VALIDO.esercizio", SQLBuilder.EQUALS, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));
	sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));

	Unita_organizzativaBulk uo = new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext));
	uo = (Unita_organizzativaBulk) getHomeCache().getHome(uo).findByPrimaryKey(uo);

	Unita_organizzativa_enteBulk uoEnte = (Unita_organizzativa_enteBulk) getHomeCache().getHome(Unita_organizzativa_enteBulk.class ).findAll().get(0);

	if (!uoEnte.equalsByPrimaryKey(uo))
		if (uo.getLivello().compareTo(new Integer(1))==0
			|| uo.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_SAC) 
			|| uo.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_AREA)) {
			sql.addSQLClause("AND", "V_CDR_VALIDO.cd_unita_organizzativa", SQLBuilder.EQUALS, uo.getCd_unita_organizzativa());
		}
		else {
			sql.addSQLClause("AND", "V_CDR_VALIDO.livello", SQLBuilder.EQUALS, new Integer(1));
			sql.addSQLClause("AND", "UNITA_ORGANIZZATIVA.cd_unita_padre", SQLBuilder.EQUALS, uo.getCd_unita_padre());
		}
	sql.addOrderBy("CD_CENTRO_RESPONSABILITA");
	return dettHome.fetchAll(sql);
}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy