it.cnr.contab.compensi00.comp.MinicarrieraComponent 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.compensi00.comp;
import it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contHome;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneHome;
import it.cnr.contab.compensi00.ejb.CompensoComponentSession;
import it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoHome;
import it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk;
import it.cnr.contab.doccont00.comp.DocumentoContabileComponentSession;
import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.doccont00.core.bulk.IDocumentoContabileBulk;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.util.GregorianCalendar;
import it.cnr.contab.docamm00.docs.bulk.*;
import java.io.Serializable;
import java.rmi.RemoteException;
import it.cnr.contab.compensi00.bp.CRUDCompensoBP;
import it.cnr.contab.compensi00.docs.bulk.*;
import it.cnr.contab.compensi00.tabrif.bulk.*;
import it.cnr.contab.config00.bulk.Parametri_cnrBulk;
import it.cnr.contab.config00.ejb.Parametri_cnrComponentSession;
import it.cnr.contab.anagraf00.core.bulk.*;
import it.cnr.contab.docamm00.ejb.*;
import it.cnr.contab.incarichi00.bulk.Ass_incarico_uoBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorioBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorio_annoBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorio_varBulk;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.jada.UserContext;
import it.cnr.jada.action.ActionContext;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.action.Forward;
import it.cnr.jada.bulk.BulkList;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.PrimaryKeyHashMap;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.comp.ICRUDMgr;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.sql.*;
import it.cnr.jada.util.RemoteIterator;
/**
* Insert the type's description here.
* Creation date: (21/02/2002 16.13.52)
* @author: Roberto Fantino
*/
public class MinicarrieraComponent extends it.cnr.jada.comp.CRUDComponent implements IMinicarrieraMgr,Cloneable,Serializable {
/**
* CompensoComponent constructor comment.
*/
public MinicarrieraComponent() {
super();
}
private void addStaticClause(SQLBuilder sql, MinicarrieraBulk carriera){
// Nella ricerca del terzo devo inserire come clausole statiche:
// 1°: Tipo Dipendente/Altro
// 2°: Data Registrazione minicarriera compresa fra Data Inizio e Data Fine validità
sql.addSQLClause("AND","TI_DIPENDENTE_ALTRO",sql.EQUALS,carriera.getTi_anagrafico());
sql.addSQLClause("AND","DT_INI_VALIDITA",sql.LESS_EQUALS,carriera.getDt_inizio_minicarriera());
sql.addSQLClause("AND","DT_FIN_VALIDITA",sql.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
}
private CompensoBulk aggiornaCompensoTemporaneo(
it.cnr.jada.UserContext userContext,
CompensoBulk compensoTemporaneo)
throws ComponentException{
try {
CompensoComponentSession session = (CompensoComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB(
"CNRCOMPENSI00_EJB_CompensoComponentSession",
CompensoComponentSession.class);
// inserisco il compenso assegnando un pg definitivo
return session.inserisciCompenso(userContext, compensoTemporaneo);
} catch (Throwable e) {
throw handleException(compensoTemporaneo, e);
}
}
private void aggiornaMontantiPerCompensiTemporanei(
it.cnr.jada.UserContext userContext,
it.cnr.jada.bulk.PrimaryKeyHashMap compensiTemporanei)
throws ComponentException{
if (compensiTemporanei != null)
try {
PrimaryKeyHashMap processed = new PrimaryKeyHashMap();
CompensoComponentSession session = (CompensoComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB(
"CNRCOMPENSI00_EJB_CompensoComponentSession",
CompensoComponentSession.class);
for (java.util.Iterator i = compensiTemporanei.keySet().iterator(); i.hasNext();) {
CompensoBulk compensoTemporaneo = (CompensoBulk)i.next();
deleteBulk(userContext, compensoTemporaneo);
// inserisco il compenso assegnando un pg definitivo
CompensoBulk compensoDef = (CompensoBulk)compensiTemporanei.get(compensoTemporaneo);
session.aggiornaMontanti(userContext, compensoDef);
aggiornaObbligazioneTemporanea(userContext, compensoDef, processed);
}
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* Conferma dell'obbligazione temporanea associata al compenso
* Viene recuperato un progressivo definitivo per l'obbligazione
* e viene salvata su db
*
**/
private void aggiornaObbligazioneTemporanea(
UserContext userContext,
CompensoBulk compenso,
PrimaryKeyHashMap processed) throws ComponentException {
if (compenso != null && compenso.getObbligazioneScadenzario().getObbligazione().isTemporaneo()) {
ObbligazioneBulk obbligazioneTemporanea = compenso.getObbligazioneScadenzario().getObbligazione();
if (processed.get(obbligazioneTemporanea) == null) {
try {
Numerazione_doc_contHome numHome = (Numerazione_doc_contHome) getHomeCache(userContext).getHome(it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk.class);
Long pg = null;
pg = numHome.getNextPg(userContext,
obbligazioneTemporanea.getEsercizio(),
obbligazioneTemporanea.getCd_cds(),
obbligazioneTemporanea.getCd_tipo_documento_cont(),
obbligazioneTemporanea.getUser());
ObbligazioneHome home = (ObbligazioneHome)getHome(userContext, obbligazioneTemporanea);
ObbligazioneBulk obbligazioneTemporaneaOriginale = (ObbligazioneBulk)obbligazioneTemporanea.clone();
home.confirmObbligazioneTemporanea(userContext,obbligazioneTemporanea, pg, false);
obbligazioneTemporanea.setPg_obbligazione(pg);
updateBulk(userContext, compenso);
try {
deleteBulk(userContext, obbligazioneTemporaneaOriginale);
} catch (ReferentialIntegrityException ex) {
//Ignorato di proposito: esistono altre scadenze associate
//ancora da processare --> demando all'ultimo processo il
//compito di cancellare
}
compenso.addToRelationsDocContForSaldi(obbligazioneTemporanea, obbligazioneTemporaneaOriginale.getPg_obbligazione());
processed.put(obbligazioneTemporaneaOriginale, compenso);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(obbligazioneTemporanea, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(obbligazioneTemporanea, e);
}
} else {
Long pgAssegnato = ((CompensoBulk)processed.get(obbligazioneTemporanea)).getObbligazioneScadenzario().getPg_obbligazione();
ObbligazioneBulk obbligazioneTemporaneaOriginale = (ObbligazioneBulk)obbligazioneTemporanea.clone();
obbligazioneTemporanea.setPg_obbligazione(pgAssegnato);
try {
updateBulk(userContext, compenso);
deleteBulk(userContext, obbligazioneTemporaneaOriginale);
} catch (ReferentialIntegrityException ex) {
//Ignorato di proposito: esistono altre scadenze associate
//ancora da processare --> demando all'ultimo processo il
//compito di cancellare
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(compenso, e);
}
//compenso.addToRelationsDocContForSaldi(obbligazioneTemporanea, obbligazioneTemporaneaOriginale.getPg_obbligazione());
}
}
}
private PrimaryKeyHashMap aggiornaRate(
it.cnr.jada.UserContext userContext,
MinicarrieraBulk carriera,
boolean doInsert)
throws ComponentException {
try {
PrimaryKeyHashMap compensiTemporanei = getCompensiTemporanei(
userContext,
carriera);
for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();) {
Minicarriera_rataBulk rata = (Minicarriera_rataBulk)i.next();
CompensoBulk compensoAssociato = rata.getCompenso();
if (compensoAssociato != null && compensoAssociato.isTemporaneo()) {
CompensoBulk compensoDef = null;
if (compensiTemporanei.containsKey(compensoAssociato) &&
(compensoDef = (CompensoBulk)compensiTemporanei.get(compensoAssociato)) == null) {
compensoDef = aggiornaCompensoTemporaneo(
userContext,
compensoAssociato);
compensiTemporanei.put(compensoAssociato, compensoDef);
}
rata.setCompenso(compensoDef);
}
rata.setUser(userContext.getUser());
if (doInsert || rata.isToBeCreated()) {
insertBulk(userContext, rata);
} else
updateBulk(userContext, rata);
}
return compensiTemporanei;
} catch (Throwable e) {
throw handleException(e);
}
}
private void aggiornaSaldi(
it.cnr.jada.UserContext uc,
MinicarrieraBulk carriera,
IDocumentoContabileBulk docCont,
OptionRequestParameter status)
throws ComponentException{
try {
if (docCont != null && carriera != null && carriera.getDefferredSaldi() != null) {
IDocumentoContabileBulk key = carriera.getDefferredSaldoFor(docCont);
if (key != null) {
java.util.Map values = (java.util.Map)carriera.getDefferredSaldi().get(key);
//caso di creazione o di nessuna modifica sui doc cont
if (values == null) return;
//QUI chiamare component del documento contabile interessato
String jndiName = null;
Class clazz = null;
jndiName = "CNRDOCCONT00_EJB_ObbligazioneAbstractComponentSession";
clazz = ObbligazioneAbstractComponentSession.class;
DocumentoContabileComponentSession session =
(ObbligazioneAbstractComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB(
jndiName,clazz);
if (session != null) {
session.aggiornaSaldiInDifferita(uc, key, values, status);
carriera.getDefferredSaldi().remove(key);
}
}
}
} catch (javax.ejb.EJBException e) {
throw handleException(carriera, e);
} catch (java.rmi.RemoteException e) {
throw handleException(carriera, e);
}
}
private void aggiornaSaldiPer(
it.cnr.jada.UserContext uc,
MinicarrieraBulk carriera,
OptionRequestParameter status)
throws ComponentException{
if (carriera != null && carriera.getMinicarriera_rate() != null) {
//Costruisco il vettore per prendere una sola volta il compenso (che puo' essere associato
//a più rate) in maniera da aggiornare una volta sola i saldi dell'obbligazione
java.util.Vector compensi = new java.util.Vector();
for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();) {
Minicarriera_rataBulk rata = (Minicarriera_rataBulk)i.next();
if (rata.isAssociataACompenso() &&
!it.cnr.jada.bulk.BulkCollections.containsByPrimaryKey(compensi, rata.getCompenso()))
compensi.add(rata.getCompenso());
}
for (java.util.Iterator i = compensi.iterator(); i.hasNext();) {
CompensoBulk compenso = (CompensoBulk)i.next();
synchronizeCarriera(uc, carriera, compenso);
aggiornaSaldi(
uc,
carriera,
compenso.getObbligazioneScadenzario().getObbligazione(),
status);
}
}
}
private Long assegnaProgressivo(
UserContext userContext,
MinicarrieraBulk carriera)
throws ComponentException {
try {
// Assegno un nuovo progressivo alla minicarriera
ProgressiviAmmComponentSession progressiviSession = (ProgressiviAmmComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_ProgressiviAmmComponentSession", ProgressiviAmmComponentSession.class);
Numerazione_doc_ammBulk numerazione = new Numerazione_doc_ammBulk(carriera);
return progressiviSession.getNextPG(userContext, numerazione);
}catch(javax.ejb.EJBException ex){
throw handleException(carriera, ex);
}catch(RemoteException ex){
throw handleException(carriera, ex);
}
}
private Long assegnaProgressivoTemporaneo(
UserContext userContext,
MinicarrieraBulk carriera)
throws ComponentException {
try {
// Assegno un nuovo progressivo temporaneo alla minicarriera
NumerazioneTempDocAmmComponentSession session = (NumerazioneTempDocAmmComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_NumerazioneTempDocAmmComponentSession", NumerazioneTempDocAmmComponentSession.class);
Numerazione_doc_ammBulk numerazione = new Numerazione_doc_ammBulk(carriera);
numerazione.setEsercizio(it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext));
return session.getNextTempPG(userContext, numerazione);
}catch(javax.ejb.EJBException ex){
throw handleException(carriera, ex);
}catch(RemoteException ex){
throw handleException(carriera, ex);
}
}
//^^@@
/**
* Associa le rate selezionate al compenso.
* PreCondition:
* Viene richiesta l'associazione delle rate selezionate al compenso.
* PostCondition:
* Il "compenso" viene associato ad ogni elemento di "rateAssociate" della "minicarriera".
* Stato associazione della rata associata
* PreCondition:
* La rata (elemento di "rateAssociate") viene associata al compenso.
* PostCondition:
* Lo stato associazione viene impostato a 'T' (Totalmente associata).
* Stato di associazione a compenso della testata
* PreCondition:
* Le "rateAssociate" sono associate.
* PostCondition:
* Nel caso in cui tutte le rate della minicarriera sono associate lo stato associazione viene impostato a 'T'
* (Totalmente associata); altrimenti lo stato viene impostato a 'P' (Parzialmente associata)
* Il processo viene eseguito correttamente
* PreCondition:
* Le "rateAssociate" vengono correttamente associate.
* PostCondition:
* Viene restituita la minicarriera debitamente modificata
* Si verifica un errore
* PreCondition:
* Le "rateAssociate" non vengono correttamente associate.
* PostCondition:
* Viene restituita l'errore relativo
*/
//^^@@
public MinicarrieraBulk associaCompenso(
UserContext userContext,
MinicarrieraBulk minicarriera,
java.util.List rateAssociate,
CompensoBulk compenso)
throws ComponentException {
for (java.util.Iterator i = rateAssociate.iterator(); i.hasNext();) {
Minicarriera_rataBulk rata = (Minicarriera_rataBulk)i.next();
rata.setCompenso(compenso);
rata.setStato_ass_compenso(rata.STATO_TOTALE_ASS_COMPENSO);
rata.setToBeUpdated();
}
if (minicarriera.hasRateAssociateACompenso()) {
if (minicarriera.getMinicarriera_rate().size() == minicarriera.getRateAssociateACompenso().size())
minicarriera.setStato_ass_compenso(minicarriera.STATO_TOTALE_ASS_COMPENSO);
else
minicarriera.setStato_ass_compenso(minicarriera.STATO_PARZIALE_ASS_COMPENSO);
minicarriera.setToBeUpdated();
}
try {
makeBulkPersistent(userContext, minicarriera);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(minicarriera, e);
}
return (MinicarrieraBulk)reloadMinicarriera(userContext, minicarriera);
}
//^^@@
/**
* Tutti i controlli superati.
* PreCondition:
* Viene richiesto il calcolo dell'aliquota irpef media di una minicarriera
* a tassazione separata
* PostCondition:
* A fronte degli importi irpef dei due anni precedenti viene
* impostata in minicarriera il valore dell'aliquota calcolata.
* (Influiscono sul calcolo l'esercizio di scrivania e l'esercizio della
* minicarriera, la data di registrazione, il percipiente ed il suo tipo
* di anagrafico, trattamento e rapporto)
* Errori riscontrati
* PreCondition:
* Durante il calcolo dell'aliquota irpef media si verifica un errore formale
* PostCondition:
* L'errore viene segnalato all'utente
*/
//^^@@
public MinicarrieraBulk calcolaAliquotaMedia(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
java.math.BigDecimal aliquota = callAliquotaMediaIrpef(
userContext,
carriera.getImponibile_irpef_eseprec1(),
carriera.getImponibile_irpef_eseprec2(),
it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext),
carriera.getEsercizio(),
carriera.getDt_registrazione(),
carriera.getTi_anagrafico(),
carriera.getCd_terzo(),
carriera.getCd_tipo_rapporto(),
carriera.getCd_trattamento());
carriera.setAliquota_irpef_media(aliquota);
return carriera;
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private java.math.BigDecimal callAliquotaMediaIrpef(
UserContext userContext,
java.math.BigDecimal imp1,
java.math.BigDecimal imp2,
Integer esercizioScrivania,
Integer esercizioMinicarriera,
java.sql.Timestamp dataRegistrazione,
String tipoAnagrafico,
Integer cdPercipiente,
String cdTipoRapporto,
String cdTipoTrattamento)
throws ComponentException {
LoggableStatement cs = null;
java.math.BigDecimal aliquota = new java.math.BigDecimal(0).setScale(6, java.math.BigDecimal.ROUND_HALF_UP);
try {
try {
cs =new LoggableStatement(getConnection(userContext),
"{ ? = call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB600.getAliquotaMediaIrpef( ?, ?, ?, ?, ?, ?, ?, ?, ?) }",
false,this.getClass());
cs.registerOutParameter( 1, java.sql.Types.NUMERIC);
cs.setBigDecimal(2, imp1);
cs.setBigDecimal(3, imp2);
cs.setInt(4, esercizioScrivania.intValue());
cs.setInt(5, esercizioMinicarriera.intValue());
cs.setTimestamp(6, dataRegistrazione);
cs.setString(7, tipoAnagrafico);
cs.setInt(8, cdPercipiente.intValue());
cs.setString(9, cdTipoRapporto);
cs.setString(10, cdTipoTrattamento);
cs.executeQuery();
aliquota = cs.getBigDecimal(1);
} catch (Throwable e) {
throw handleException(e);
} finally {
if (cs != null) cs.close();
}
} catch (java.sql.SQLException ex) {
throw handleException(ex);
}
return aliquota;
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private void callGeneraRate(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException{
LoggableStatement cs = null;
try {
cs = new LoggableStatement(getConnection(userContext),
"{call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB605.creaRateMinicarriera(?,?,?,?,?,?,?,?) }",
false,this.getClass());
cs.setString( 1, carriera.getCd_cds() );
cs.setString( 2, carriera.getCd_unita_organizzativa() );
cs.setInt( 3, carriera.getEsercizio().intValue() );
cs.setLong( 4, carriera.getPg_minicarriera().longValue() );
if (carriera.getPgMinicarrieraPerClone() != null) {
cs.setString( 5, carriera.getCd_cds() );
cs.setString( 6, carriera.getCd_unita_organizzativa() );
cs.setInt( 7, carriera.getEsercizio().intValue() );
cs.setLong( 8, carriera.getPgMinicarrieraPerClone().longValue() );
} else {
cs.setNull( 5, java.sql.Types.VARCHAR );
cs.setNull( 6, java.sql.Types.VARCHAR );
cs.setNull( 7, java.sql.Types.NUMERIC );
cs.setNull( 8, java.sql.Types.NUMERIC );
}
cs.executeQuery();
} catch (Throwable e) {
throw handleException(e);
} finally {
try {
if (cs != null) cs.close();
} catch (java.sql.SQLException e) {
throw handleException(e);
}
}
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private void callValidaRate(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException{
LoggableStatement cs = null;
try {
cs = new LoggableStatement(getConnection(userContext),
"{ call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB605.chkScadRateMinicarriera(?,?,?,?) }",
false,this.getClass());
cs.setString( 1, carriera.getCd_cds() );
cs.setString( 2, carriera.getCd_unita_organizzativa() );
cs.setInt( 3, carriera.getEsercizio().intValue() );
cs.setLong( 4, carriera.getPg_minicarriera().longValue() );
cs.executeQuery();
} catch (Throwable e) {
throw handleException(e);
} finally {
try {
if (cs != null) cs.close();
} catch (java.sql.SQLException e) {
throw handleException(e);
}
}
}
//^^@@
/**
* Cessazione
* PreCondition:
* Viene richiesta la cessazione della minicarriera
* PostCondition:
* Viene eseguita la richiesta e restituita la minicarriera aggiornata non più modificabile
*/
//^^@@
public MinicarrieraBulk cessa(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
carriera.setStato(carriera.STATO_CESSATA);
carriera.setToBeUpdated();
return (MinicarrieraBulk)modificaConBulk(userContext, carriera);
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private void completaMinicarriera(
UserContext userContext,
MinicarrieraBulk carriera)
throws ComponentException{
try {
carriera.setPercipiente(loadPercipiente(userContext,carriera));
completaPercipiente(userContext, carriera);
carriera.setTipiTrattamento(findTipiTrattamento(userContext, carriera));
loadTipoTrattamento(userContext, carriera);
//if (isGestitePrestazioni(userContext))
//{
carriera.impostaVisualizzaPrestazione();
//carriera.setTipiPrestazioneCompenso(getHome(userContext,Tipo_prestazione_compensoBulk.class).findAll());
carriera.setTipiPrestazioneCompenso(findTipiPrestazioneCompenso(userContext,
carriera));
//}
//else
//carriera.setVisualizzaPrestazione(false);
if (isGestitiIncarichi(userContext))
carriera.impostaVisualizzaIncarico();
else
carriera.setVisualizzaPrestazione(false);
getHomeCache(userContext).fetchAll(userContext);
carriera.setAliquotaCalcolata(
carriera.getFl_tassazione_separata() != null &&
carriera.getFl_tassazione_separata().booleanValue() &&
new java.math.BigDecimal(0).compareTo(carriera.getAliquota_irpef_media()) != 0);
} catch (it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(ex);
}
}
private MinicarrieraBulk completaPercipiente(UserContext userContext, MinicarrieraBulk carriera)
throws ComponentException {
if (carriera != null) {
V_terzo_per_compensoBulk vTerzo = carriera.getPercipiente();
carriera.setCd_terzo(vTerzo.getCd_terzo());
carriera.setNome(vTerzo.getNome());
carriera.setCognome(vTerzo.getCognome());
carriera.setRagione_sociale(vTerzo.getRagione_sociale());
carriera.setCodice_fiscale(vTerzo.getCodice_fiscale());
carriera.setPartita_iva(vTerzo.getPartita_iva());
carriera.setModalita(findModalita(userContext, carriera));
carriera.setTermini(findTermini(userContext, carriera));
carriera.setTipiRapporto(findTipiRapporto(userContext, carriera));
}
return carriera;
}
//^^@@
/**
* Normale.
* PreCondition:
* Vengono richiesti i dati relativi al percipiente della minicarriera
* - richiesta caricamento dati diretti (nome, cognome, ragione sociale, CF, PIva)
* - richiesta caricamento modalita di pagamento
* - richiesta caricamento termini di pagamento
* - richiesta caricamento tipi di rapporto
* PostCondition:
* vengono trasmessi i dati relativi alla minicarriera.
*/
//^^@@
public MinicarrieraBulk completaPercipiente(
UserContext userContext,
MinicarrieraBulk carriera,
V_terzo_per_compensoBulk vTerzo)
throws ComponentException {
carriera.setPercipiente(vTerzo);
return completaPercipiente(userContext, carriera);
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private MinicarrieraBulk copiaMinicarriera(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException{
LoggableStatement cs = null;
Integer esCorrente = it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext);
try {
cs = new LoggableStatement(getConnection(userContext),
"{ call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB605.copiaMinicarriera(? ,? ,? ,? ,? ,? ,? ,? ) }",
false,this.getClass());
cs.setString( 1, carriera.getCd_cds() );
cs.setString( 2, carriera.getCd_unita_organizzativa() );
cs.setInt( 3, carriera.getEsercizio().intValue() );
cs.setLong( 4, carriera.getPg_minicarriera().longValue() );
cs.setString( 5, carriera.getCd_cds() );
cs.setString( 6, carriera.getCd_unita_organizzativa() );
cs.setInt( 7, esCorrente.intValue() );
cs.setLong( 8, carriera.getPgMinicarrieraPerClone().longValue() );
cs.executeQuery();
} catch (java.sql.SQLException e) {
if (-20100 == e.getErrorCode())
throw new it.cnr.jada.comp.ApplicationException(e.getMessage());
throw handleException(e);
} catch (Throwable e) {
throw handleException(e);
} finally {
try {
if (cs != null) cs.close();
} catch (java.sql.SQLException e) {
throw handleException(e);
}
}
return new MinicarrieraBulk(
carriera.getCd_cds(),
carriera.getCd_unita_organizzativa(),
esCorrente,
carriera.getPgMinicarrieraPerClone());
}
//^^@@
/**
* Validazione documento.
* PreCondition:
* Viene richiesta la creazione di una minicarriera e la stessa non ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Non viene consentita la registrazione della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la creazione di una minicarriera e la stessa ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Viene consentita la registrazione della minicarriera.
*/
//^^@@
public OggettoBulk creaConBulk(UserContext userContext,OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
return creaConBulk(userContext, bulk, null);
}
//^^@@
/**
* Validazione documento.
* PreCondition:
* Viene richiesta la creazione di una minicarriera e la stessa non ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Non viene consentita la registrazione della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la creazione di una minicarriera e la stessa ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Viene consentita la registrazione della minicarriera.
*/
//^^@@
public it.cnr.jada.bulk.OggettoBulk creaConBulk(it.cnr.jada.UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk, it.cnr.contab.doccont00.core.bulk.OptionRequestParameter status) throws it.cnr.jada.comp.ComponentException {
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
validaMinicarriera(userContext, carriera);
Long pgTmp = carriera.getPg_minicarriera();
Long pg = assegnaProgressivo(userContext,carriera);
carriera.setPg_minicarriera(pg);
it.cnr.jada.bulk.PrimaryKeyHashMap compensiTemporanei = inserisciMinicarriera(userContext, carriera);
callValidaRate(userContext, carriera);
eliminaMinicarrieraClone(userContext, carriera, pgTmp);
// Gli unici casi in cui esistono i cloni con minicarriere temporanee è quando
// sto salvando carriere generate da rinnovi e ripristini --> devo gestire
// anche la cancellazione dei cloni dei temporanei!
if (carriera.getPgMinicarrieraPerClone() != null)
eliminaMinicarrieraClone(userContext, carriera, carriera.getPgMinicarrieraPerClone());
carriera.setPg_minicarriera(pg);
aggiornaMontantiPerCompensiTemporanei(userContext, compensiTemporanei);
aggiornaSaldiPer(userContext, carriera, status);
if (!verificaStatoEsercizio(userContext, new it.cnr.contab.config00.esercizio.bulk.EsercizioBulk(carriera.getCd_cds(), ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getEsercizio())))
throw new it.cnr.jada.comp.ApplicationException("Impossibile salvare un documento per un esercizio non aperto!");
return carriera;
}
//^^@@
/**
* Validazione documento.
* PreCondition:
* Viene richiesta l'eliminazione di una minicarriera e la stessa non ha superato il metodo 'eliminaMinicarriera'.
* PostCondition:
* Non viene consentita l'eliminazione della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta l'eliminazione di una minicarriera e la stessa ha superato il metodo 'eliminaMinicarriera'.
* PostCondition:
* Viene consentita l'eliminazione della minicarriera.
*/
//^^@@
public void eliminaConBulk(UserContext userContext,OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
//try{
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
eliminaMinicarriera(userContext,carriera);
Long pgTmp = carriera.getPgMinicarrieraPerClone();
//if (!carriera.isCancellabile()){
//carriera.setStato(MinicarrieraBulk.STATO_SOSPESA);
//updateBulk(userContext, carriera);
//} else {
for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();)
((Minicarriera_rataBulk)i.next()).setToBeDeleted();
super.eliminaConBulk(userContext, carriera);
//}
if (pgTmp!=null)
eliminaMinicarrieraClone(userContext, carriera, pgTmp);
//}catch(it.cnr.jada.persistency.PersistencyException ex){
//handleException(bulk, ex);
//}
}
//^^@@
/**
* Minicarriera autogenerata
* PreCondition:
* Viene richiesta l'eliminazione di una minicarriera generata come ripristino o rinnovo di altra minicarriera.
* PostCondition:
* Non viene consentita l'eliminazione della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta l'eliminazione di una minicarriera con almeno una rata collegata a compenso
* PostCondition:
* Non viene consentita l'eliminazione della minicarriera.
*/
//^^@@
private void eliminaMinicarriera(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
if (carriera.getMinicarriera_origine() != null)
throw new it.cnr.jada.comp.ApplicationException("Questa minicarriera ha una minicarriera di origine. Impossibile proseguire con la cancellazione!");
if (carriera.isAssociataACompenso())
throw new it.cnr.jada.comp.ApplicationException("Questa minicarriera ha almeno una rata collegata a compenso. Impossibile proseguire con la cancellazione!");
if (!carriera.isAttiva())
throw new it.cnr.jada.comp.ApplicationException("Questa minicarriera non è in stato attivo. Impossibile proseguire con la cancellazione!");
}
/**
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la modifica del compenso
* PostCondition:
* Viene consentito la modifica del compenso e
* della obbligazione associata
*
* Controlli non superati
* PreCondition:
* Non sono stati superati i controlli di validazione
* per la modifica del compenso
* PostCondition:
* Non viene permessa la modifica del compenso e della obbligazione
**/
public void eliminaMinicarrieraClone(UserContext userContext, MinicarrieraBulk carriera, Long tmp) throws ComponentException{
try{
carriera.setPg_minicarriera(tmp);
//Aggiunto cascade. NON + necessario
//for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();)
//try {
//deleteBulk(userContext, (Minicarriera_rataBulk)i.next());
//} catch (it.cnr.jada.persistency.ObjectNotFoundException e) {
//}
deleteBulk(userContext, carriera);
} catch(it.cnr.jada.persistency.ObjectNotFoundException ex){
} catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
//^^@@
/**
* Normale.
* PreCondition:
* Nessun errore segnalato.
* PostCondition:
* Viene restituita la lista delle banche del percipiente.
*/
//^^@@
public java.util.List findListaBanche(
UserContext userContext,
MinicarrieraBulk carriera)
throws ComponentException {
try {
if(carriera.getPercipiente() == null ||
carriera.getPercipiente().getCd_terzo() == null)
return null;
return getHome(userContext, BancaBulk.class).fetchAll(selectBancaByClause(userContext, carriera, null, null));
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
/**
* Percipiente selezionato
* PreCondition:
* Viene richiesta la lista delle Modalità di pagamento
* associate al percipiente
* PostCondition:
* Viene restituita la lista dei Modalità di pagamento
* associate al percipiente
*
* Percipiente NON selezionato
* PreCondition:
* Non è stato selezionato il percipiente
* PostCondition:
* Non vengono caricate le modalità di pagamento
**/
public java.util.Collection findModalita(
UserContext userContext,
OggettoBulk bulk)
throws ComponentException {
try {
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
if(carriera.getTerzo() == null ||
carriera.getTerzo().getCd_terzo() == null)
return null;
TerzoHome terzoHome = (TerzoHome)getHome(userContext,TerzoBulk.class);
return terzoHome.findRif_modalita_pagamento(carriera.getTerzo());
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(bulk, ex);
}catch (it.cnr.jada.persistency.IntrospectionException ex){
throw handleException(bulk, ex);
}
}
//^^@@
/**
* Normale.
* PreCondition:
* Richiesta di caricamento rate di una minicarriera
* PostCondition:
* Restituisce la lista delle rate
*/
//^^@@
public java.util.List findRate(UserContext aUC,MinicarrieraBulk carriera)
throws
ComponentException,
it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException {
if (carriera == null) return null;
it.cnr.jada.bulk.BulkHome home = getHome(aUC, Minicarriera_rataBulk.class);
it.cnr.jada.persistency.sql.SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "pg_minicarriera", sql.EQUALS, carriera.getPg_minicarriera());
sql.addClause("AND", "cd_cds", sql.EQUALS, carriera.getCd_cds());
sql.addClause("AND", "esercizio", sql.EQUALS, carriera.getEsercizio());
sql.addClause("AND", "cd_unita_organizzativa", sql.EQUALS, carriera.getCd_unita_organizzativa());
sql.addOrderBy("PG_RATA");
return home.fetchAll(sql);
}
/**
* Percipiente selezionato
* PreCondition:
* Viene richiesta la lista dei Termini di pagamento
* associati al terzo
* PostCondition:
* Viene restituita la lista dei Termini di pagamento
* associati al terzo
*
* Percipiente NON selezionato
* PreCondition:
* Non è stato selezionato il terzo
* PostCondition:
* Non vengono caricati i termini di pagamento
**/
public java.util.Collection findTermini(UserContext userContext, OggettoBulk bulk) throws ComponentException{
try{
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
if(carriera.getTerzo() == null ||
carriera.getTerzo().getCd_terzo() == null)
return null;
TerzoHome terzoHome = (TerzoHome)getHome(userContext,TerzoBulk.class);
return terzoHome.findRif_termini_pagamento(carriera.getTerzo());
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(bulk, ex);
}catch (it.cnr.jada.persistency.IntrospectionException ex){
throw handleException(bulk, ex);
}
}
/**
* Percipiente selezionato
* PreCondition:
* Viene richiesta la lista dei Tipi di rapporto
* del terzo selezionato
* PostCondition:
* Viene restituita la lista dei Tipi di rapporto
* del Percipiente selezionato
*
* Percipiente NON selezionato
* PreCondition:
* Non è stato selezionato il Percipiente
* PostCondition:
* Non vengono caricati i tipi di rapporto
**/
public java.util.Collection findTipiRapporto(
UserContext userContext,
MinicarrieraBulk carriera) throws ComponentException{
try{
if (carriera.getTerzo() == null ||
carriera.getTerzo().getCd_terzo() == null)
return null;
it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoHome home = (it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoHome)getHome(userContext, it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoBulk.class);
return home.findTipiRapporto(carriera.getPercipiente(), carriera.getDt_inizio_minicarriera());
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(carriera, ex);
}
}
/**
* Tipo di rapporto selezionato
* PreCondition:
* Viene richiesta la lista dei Tipi di Trattamento legati al
* tipo di rapporto selezionato
* PostCondition:
* Viene restituita la lista dei Tipi di Trattamento legati al
* tipo di rapporto selezionato
*
* Tipo di rapporto NON selezionato
* PreCondition:
* Non è stato selezionato il tipo di rapporto
* PostCondition:
* Non vengono caricati i tipi trattamento
**/
public java.util.Collection findTipiTrattamento(UserContext userContext, MinicarrieraBulk carriera)
throws ComponentException{
try{
if (carriera.getTipo_rapporto() == null)
return null;
Tipo_trattamentoHome trattHome = (Tipo_trattamentoHome)getHome(userContext,Tipo_trattamentoBulk.class);
Filtro_trattamentoBulk filtro = new Filtro_trattamentoBulk();
filtro.setCdTipoRapporto(carriera.getCd_tipo_rapporto());
filtro.setTipoAnagrafico(carriera.getTi_anagrafico());
filtro.setDataValidita(carriera.getDt_registrazione());
//filtro.setFlDiaria(Boolean.FALSE);
filtro.setFlSenzaCalcoli(Boolean.FALSE);
filtro.setFlDefaultCongualio(Boolean.FALSE);
filtro.setTiIstituzionaleCommerciale(carriera.getTi_istituz_commerc());
if (carriera.getFl_tassazione_separata() != null && carriera.getFl_tassazione_separata().booleanValue())
filtro.setFlTassazioneSeparata(carriera.getFl_tassazione_separata());
if (filtro.getCdTipoRapporto() != null && filtro.getCdTipoRapporto().equals("DIP"))
{
try {
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(carriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
RapportoHome rHome = (RapportoHome) getHomeCache(userContext).getHome( RapportoBulk.class );
java.util.Collection collRapp = rHome.findByCdAnagCdTipoRapporto(t.getCd_anag(),filtro.getCdTipoRapporto());
boolean exit=false;
for (java.util.Iterator i = collRapp.iterator();i.hasNext()&&!exit;) {
RapportoBulk r = (RapportoBulk)i.next();
exit=true;
if (r.getCd_ente_prev_sti()==null)
//throw new it.cnr.jada.comp.ApplicationException("Non è stato possibile recuperare l''Ente Previdenziale del dipendente selezionato.");
//non blocco perchè potrebbero esserci trattamenti che non prevedono contributi previdenziali
//quindi passo il codice fittizio 'XX'
filtro.setEntePrev("XX");
else
filtro.setEntePrev(r.getCd_ente_prev_sti());
if (r.getCd_rapp_impiego_sti()==null)
throw new it.cnr.jada.comp.ApplicationException("Per il dipendente in esame non è definito un Rapporto di Impiego!");
else
{
Ass_rapp_impiegoHome assHome = (Ass_rapp_impiegoHome) getHome(userContext, Ass_rapp_impiegoBulk.class );
Ass_rapp_impiegoBulk assKey = new Ass_rapp_impiegoBulk(r.getCd_rapp_impiego_sti());
Ass_rapp_impiegoBulk ass = (Ass_rapp_impiegoBulk)assHome.findByPrimaryKey(assKey);
filtro.setTipoRappImpiego(ass.getTipo_rapp_impiego());
}
}
} catch (IntrospectionException e) {
throw handleException(e);
}
//solo per il rapporto DIP aggiungo il filtro "Anno prec" a seconda della data di inizio competenza
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(carriera.getDt_inizio_minicarriera());
if (data_da.get(GregorianCalendar.YEAR)==(carriera.getEsercizio()-1))
filtro.setFlAnnoPrec(new Boolean(true));
else
filtro.setFlAnnoPrec(new Boolean(false));
}
if (carriera.getDt_inizio_minicarriera()!=null && carriera.getDt_fine_minicarriera()!=null)
{
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar data_a = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(carriera.getDt_inizio_minicarriera());
data_a.setTime(carriera.getDt_fine_minicarriera());
if (data_da.get(GregorianCalendar.YEAR) == data_a.get(GregorianCalendar.YEAR))
{
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(carriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
AnagraficoHome aHome = (AnagraficoHome) getHomeCache(userContext).getHome( AnagraficoBulk.class );
AnagraficoBulk aKey = new AnagraficoBulk(t.getCd_anag());
AnagraficoBulk a = (AnagraficoBulk)aHome.findByPrimaryKey(aKey);
if (a.getFl_cervellone()&&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_inizio_res_fis().intValue()) < 0) &&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_fine_agevolazioni().intValue()) > 0))
{
filtro.setFlAgevolazioniCervelli(new Boolean(a.getFl_cervellone()));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
return trattHome.findTipiTrattamento(filtro);
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(carriera, ex);
}
}
//^^@@
/**
* Validazione minicarriera.
* PreCondition:
* Viene richiesta la generazione delle rate di una minicarriera e la stessa non ha superato il metodo 'validate'.
* PostCondition:
* Non viene consentita la generazione delle rate della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la generazione delle rate di una minicarriera e la stessa ha superato il metodo 'validate'.
* PostCondition:
* Viene consentita la generazione delle rate della minicarriera.
*/
//^^@@
public MinicarrieraBulk generaRate(
UserContext userContext,
MinicarrieraBulk carriera,
boolean eseguiCopia)
throws it.cnr.jada.comp.ComponentException {
try{
carriera.validate();
Long pgTmp = null;
//eseguiCopia &&
if (carriera.getPgMinicarrieraPerClone() == null){
pgTmp = assegnaProgressivoTemporaneo(userContext, carriera);
carriera.setPgMinicarrieraPerClone(pgTmp);
//copiaMinicarriera(userContext, carriera);
}
if (carriera.getPg_minicarriera() == null){
pgTmp = assegnaProgressivoTemporaneo(userContext, carriera);
carriera.setPg_minicarriera(pgTmp);
insertBulk(userContext, carriera);
}else{
updateBulk(userContext, carriera);
}
callGeneraRate(userContext, carriera);
return reloadMinicarriera(userContext, carriera);
} catch(it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(carriera,ex);
} catch(it.cnr.jada.bulk.ValidationException ex) {
throw handleException(carriera,ex);
}
}
private it.cnr.jada.bulk.PrimaryKeyHashMap getCompensiTemporanei(
it.cnr.jada.UserContext userContext,
MinicarrieraBulk carriera)
throws ComponentException {
it.cnr.jada.bulk.PrimaryKeyHashMap compensiTemporanei = new it.cnr.jada.bulk.PrimaryKeyHashMap();
try {
for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();) {
Minicarriera_rataBulk rata = (Minicarriera_rataBulk)i.next();
if (rata.getCompenso() != null && rata.getCompenso().isTemporaneo())
compensiTemporanei.put(rata.getCompenso(), null);
}
return compensiTemporanei;
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* Gestione della validazione del terzo selezionato
* Ritorna una ComponentException con il messaggio realtivo all'errore
*
* errorCode Significato
* ========= ===========
* 0 Tutto bene
* 1 Terzo assente
* 2 Terzo non valido alla data registrazione
* 3 Controllo se ho inserito le modalità di pagamento
* 4 Tipo rapporto assente
* 5 Tipo di rapporto non valido in data inizio validità
* 6 Tipo trattamento assente
* 7 Tipo trattamento non valido alla data registrazione
*
*
**/
private void handleExceptionsPercipiente(int error) throws ComponentException{
switch (error) {
case 1: {
throw new it.cnr.jada.comp.ApplicationException("Inserire il percipiente");
}case 2: {
throw new it.cnr.jada.comp.ApplicationException("Il percipiente selezionato non è valido in Data Registrazione");
}case 3: {
throw new it.cnr.jada.comp.ApplicationException("Selezionare la Modalità di pagamento");
}case 4: {
throw new it.cnr.jada.comp.ApplicationException("Selezionare il Tipo Rapporto");
}case 5: {
throw new it.cnr.jada.comp.ApplicationException("Il Tipo Rapporto selezionato non è valido alla Data Inizio Validità");
}case 6: {
throw new it.cnr.jada.comp.ApplicationException("Selezionare il Tipo Trattamento");
}case 7: {
throw new it.cnr.jada.comp.ApplicationException("Il Tipo Trattamento selezionato non è valido alla Data Registrazione");
}
}
}
/**
* Prepara un OggettoBulk per la presentazione all'utente per una possibile
* operazione di modifica.
*
* Pre-post-conditions:
*
* Nome: Oggetto non esistente
* Pre: L'OggettoBulk specificato non esiste.
* Post: Viene generata una CRUDException con la descrizione dell'errore.
*
* Nome: Tutti i controlli superati
* Pre: L'OggettoBulk specificato esiste.
* Post: Viene riletto l'OggettoBulk, inizializzato con tutti gli oggetti collegati e preparato
* per l'operazione di presentazione e modifica nell'interfaccia visuale.
* L'operazione di lettura viene effettuata con una FetchPolicy il cui nome è
* ottenuto concatenando il nome della component con la stringa ".edit"
*
* @param uc lo UserContext che ha generato la richiesta
* @param bulk l'OggettoBulk da preparare
* @return l'OggettoBulk preparato
*/
public OggettoBulk inizializzaBulkPerInserimento(UserContext userContext,OggettoBulk bulk) throws ComponentException {
MinicarrieraBulk carriera = (MinicarrieraBulk)super.inizializzaBulkPerInserimento(userContext, bulk);
if (!verificaStatoEsercizio(userContext, new it.cnr.contab.config00.esercizio.bulk.EsercizioBulk( carriera.getCd_cds(), ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getEsercizio())))
throw new it.cnr.jada.comp.ApplicationException("Impossibile inserire una minicarriera per un esercizio non aperto!");
/*
if (isGestitePrestazioni(userContext))
carriera.impostaVisualizzaPrestazione();
else
carriera.setVisualizzaPrestazione(false);
*/
carriera.impostaVisualizzaPrestazione();
if (isGestitiIncarichi(userContext))
carriera.impostaVisualizzaIncarico();
else
carriera.setVisualizzaIncarico(false);
return carriera;
}
/**
* Prepara un OggettoBulk per la presentazione all'utente per una possibile
* operazione di modifica.
*
* Pre-post-conditions:
*
* Nome: Oggetto non esistente
* Pre: L'OggettoBulk specificato non esiste.
* Post: Viene generata una CRUDException con la descrizione dell'errore.
*
* Nome: Tutti i controlli superati
* Pre: L'OggettoBulk specificato esiste.
* Post: Viene riletto l'OggettoBulk, inizializzato con tutti gli oggetti collegati e preparato
* per l'operazione di presentazione e modifica nell'interfaccia visuale.
* L'operazione di lettura viene effettuata con una FetchPolicy il cui nome è
* ottenuto concatenando il nome della component con la stringa ".edit"
*
* @param uc lo UserContext che ha generato la richiesta
* @param bulk l'OggettoBulk da preparare
* @return l'OggettoBulk preparato
*/
public OggettoBulk inizializzaBulkPerModifica(UserContext userContext,OggettoBulk bulk) throws ComponentException {
MinicarrieraBulk carriera = (MinicarrieraBulk)super.inizializzaBulkPerModifica(userContext, bulk);
if (carriera.getEsercizio().intValue() > it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext).intValue())
throw new it.cnr.jada.comp.ApplicationException("Il documento deve appartenere o all'esercizio di scrivania o ad esercizi precedenti per essere aperto in modifica!");
try {
lockBulk(userContext, carriera);
} catch (Throwable t) {
throw handleException(t);
}
try {
BulkList rate = new BulkList(findRate(userContext, carriera));
carriera.setMinicarriera_rate(rate);
getHomeCache(userContext).fetchAll(userContext);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(carriera, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(carriera, e);
}
completaMinicarriera(userContext, carriera);
/*
if (isGestitePrestazioni(userContext))
carriera.impostaVisualizzaPrestazione();
else
carriera.setVisualizzaPrestazione(false);
if (isGestitiIncarichi(userContext))
carriera.impostaVisualizzaIncarico();
else
carriera.setVisualizzaIncarico(false);
*/
if (carriera.getPgMinicarrieraPerClone() == null) {
Long pgTmp = assegnaProgressivoTemporaneo(userContext, carriera);
carriera.setPgMinicarrieraPerClone(pgTmp);
}
// copiaMinicarriera(userContext, carriera);
carriera.resetDefferredSaldi();
return carriera;
}
private PrimaryKeyHashMap inserisciMinicarriera(
UserContext userContext,
MinicarrieraBulk carriera) throws ComponentException{
try {
insertBulk(userContext, carriera);
return aggiornaRate(userContext, carriera, true);
} catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
private boolean isTipoRapportoValido(UserContext userContext, MinicarrieraBulk minicarriera) throws ComponentException {
try{
Tipo_rapportoHome home = (Tipo_rapportoHome)getHome(userContext, Tipo_rapportoBulk.class);
return home.isTipoRapportoValido(minicarriera.getPercipiente(), minicarriera.getCd_tipo_rapporto(), minicarriera.getDt_inizio_minicarriera());
}catch(java.sql.SQLException ex){
throw handleException(ex);
}
}
private boolean isTipoTrattamentoValido(UserContext userContext, MinicarrieraBulk minicarriera) throws ComponentException{
try{
Tipo_trattamentoHome home = (Tipo_trattamentoHome)getHome(userContext, Tipo_trattamentoBulk.class);
Filtro_trattamentoBulk filtro = new Filtro_trattamentoBulk();
filtro.setCdTipoRapporto(minicarriera.getCd_tipo_rapporto());
filtro.setCdTipoTrattamento(minicarriera.getCd_trattamento());
filtro.setTipoAnagrafico(minicarriera.getTi_anagrafico());
filtro.setDataValidita(minicarriera.getDt_registrazione());
//filtro.setFlDiaria(Boolean.FALSE);
filtro.setFlSenzaCalcoli(Boolean.FALSE);
filtro.setFlDefaultCongualio(Boolean.FALSE);
filtro.setTiIstituzionaleCommerciale(minicarriera.getTi_istituz_commerc());
if (minicarriera.getFl_tassazione_separata() != null &&
minicarriera.getFl_tassazione_separata().booleanValue())
filtro.setFlTassazioneSeparata(minicarriera.getFl_tassazione_separata());
if (filtro.getCdTipoRapporto() != null && filtro.getCdTipoRapporto().equals("DIP"))
{
try {
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(minicarriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
RapportoHome rHome = (RapportoHome) getHomeCache(userContext).getHome( RapportoBulk.class );
java.util.Collection collRapp = rHome.findByCdAnagCdTipoRapporto(t.getCd_anag(),filtro.getCdTipoRapporto());
boolean exit=false;
for (java.util.Iterator i = collRapp.iterator();i.hasNext()&&!exit;) {
RapportoBulk r = (RapportoBulk)i.next();
exit=true;
if (r.getCd_ente_prev_sti()==null)
//throw new it.cnr.jada.comp.ApplicationException("Non è stato possibile recuperare l''Ente Previdenziale del dipendente selezionato.");
//non blocco perchè potrebbero esserci trattamenti che non prevedono contributi previdenziali
//quindi passo il codice fittizio 'XX'
filtro.setEntePrev("XX");
else
filtro.setEntePrev(r.getCd_ente_prev_sti());
if (r.getCd_rapp_impiego_sti()==null)
throw new it.cnr.jada.comp.ApplicationException("Per il dipendente in esame non è definito un Rapporto di Impiego!");
else
{
Ass_rapp_impiegoHome assHome = (Ass_rapp_impiegoHome) getHome(userContext, Ass_rapp_impiegoBulk.class );
Ass_rapp_impiegoBulk assKey = new Ass_rapp_impiegoBulk(r.getCd_rapp_impiego_sti());
Ass_rapp_impiegoBulk ass = (Ass_rapp_impiegoBulk)assHome.findByPrimaryKey(assKey);
filtro.setTipoRappImpiego(ass.getTipo_rapp_impiego());
}
}
} catch (IntrospectionException e) {
throw handleException(e);
}
//solo per il rapporto DIP aggiungo il filtro "Anno prec" a seconda della data di inizio competenza
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(minicarriera.getDt_inizio_minicarriera());
if (data_da.get(GregorianCalendar.YEAR)==(minicarriera.getEsercizio()-1))
filtro.setFlAnnoPrec(new Boolean(true));
else
filtro.setFlAnnoPrec(new Boolean(false));
}
if (minicarriera.getDt_inizio_minicarriera()!=null && minicarriera.getDt_fine_minicarriera()!=null)
{
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar data_a = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(minicarriera.getDt_inizio_minicarriera());
data_a.setTime(minicarriera.getDt_fine_minicarriera());
if (data_da.get(GregorianCalendar.YEAR) == data_a.get(GregorianCalendar.YEAR))
{
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(minicarriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
AnagraficoHome aHome = (AnagraficoHome) getHomeCache(userContext).getHome( AnagraficoBulk.class );
AnagraficoBulk aKey = new AnagraficoBulk(t.getCd_anag());
AnagraficoBulk a = (AnagraficoBulk)aHome.findByPrimaryKey(aKey);
if (a.getFl_cervellone()&&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_inizio_res_fis().intValue()) < 0) &&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_fine_agevolazioni().intValue()) > 0))
{
filtro.setFlAgevolazioniCervelli(new Boolean(a.getFl_cervellone()));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
return home.isTipoTrattamentoValido(filtro);
}catch(java.sql.SQLException ex){
throw handleException(ex);
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
private V_terzo_per_compensoBulk loadPercipiente(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException {
try {
V_terzo_per_compensoHome home = (V_terzo_per_compensoHome)getHome(userContext, V_terzo_per_compensoBulk.class, "DISTINCT_TERZO");
return home.loadVTerzo(userContext,
carriera.getTi_anagrafico(),
carriera.getCd_terzo(),
carriera.getDt_registrazione(),
carriera.getDt_inizio_minicarriera());
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private void loadTipoTrattamento(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException {
try {
Tipo_trattamentoHome trattHome = (Tipo_trattamentoHome)getHome(userContext, Tipo_trattamentoBulk.class);
if (carriera.getTipo_trattamento() == null) {
String cod = carriera.getCd_trattamento();
Tipo_trattamentoBulk tt = new Tipo_trattamentoBulk();
tt.setCd_trattamento(cod);
carriera.setTipo_trattamento(tt);
}
Filtro_trattamentoBulk filtro = new Filtro_trattamentoBulk();
filtro.setCdTipoTrattamento(carriera.getCd_trattamento());
filtro.setTipoAnagrafico(carriera.getTi_anagrafico());
filtro.setDataValidita(carriera.getDt_registrazione());
//filtro.setFlDiaria(Boolean.FALSE);
filtro.setFlSenzaCalcoli(Boolean.FALSE);
filtro.setFlDefaultCongualio(Boolean.FALSE);
filtro.setTiIstituzionaleCommerciale(carriera.getTi_istituz_commerc());
if (carriera.getFl_tassazione_separata() != null && carriera.getFl_tassazione_separata().booleanValue())
filtro.setFlTassazioneSeparata(carriera.getFl_tassazione_separata());
if (filtro.getCdTipoRapporto() != null && filtro.getCdTipoRapporto().equals("DIP"))
{
try {
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(carriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
RapportoHome rHome = (RapportoHome) getHomeCache(userContext).getHome( RapportoBulk.class );
java.util.Collection collRapp = rHome.findByCdAnagCdTipoRapporto(t.getCd_anag(),filtro.getCdTipoRapporto());
boolean exit=false;
for (java.util.Iterator i = collRapp.iterator();i.hasNext()&&!exit;) {
RapportoBulk r = (RapportoBulk)i.next();
exit=true;
if (r.getCd_ente_prev_sti()==null)
//throw new it.cnr.jada.comp.ApplicationException("Non è stato possibile recuperare l''Ente Previdenziale del dipendente selezionato.");
//non blocco perchè potrebbero esserci trattamenti che non prevedono contributi previdenziali
//quindi passo il codice fittizio 'XX'
filtro.setEntePrev("XX");
else
filtro.setEntePrev(r.getCd_ente_prev_sti());
if (r.getCd_rapp_impiego_sti()==null)
throw new it.cnr.jada.comp.ApplicationException("Per il dipendente in esame non è definito un Rapporto di Impiego!");
else
{
Ass_rapp_impiegoHome assHome = (Ass_rapp_impiegoHome) getHome(userContext, Ass_rapp_impiegoBulk.class );
Ass_rapp_impiegoBulk assKey = new Ass_rapp_impiegoBulk(r.getCd_rapp_impiego_sti());
Ass_rapp_impiegoBulk ass = (Ass_rapp_impiegoBulk)assHome.findByPrimaryKey(assKey);
filtro.setTipoRappImpiego(ass.getTipo_rapp_impiego());
}
}
} catch (IntrospectionException e) {
throw handleException(e);
}
//solo per il rapporto DIP aggiungo il filtro "Anno prec" a seconda della data di inizio competenza
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(carriera.getDt_inizio_minicarriera());
if (data_da.get(GregorianCalendar.YEAR)==(carriera.getEsercizio()-1))
filtro.setFlAnnoPrec(new Boolean(true));
else
filtro.setFlAnnoPrec(new Boolean(false));
}
if (carriera.getDt_inizio_minicarriera()!=null && carriera.getDt_fine_minicarriera()!=null)
{
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar data_a = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(carriera.getDt_inizio_minicarriera());
data_a.setTime(carriera.getDt_fine_minicarriera());
if (data_da.get(GregorianCalendar.YEAR) == data_a.get(GregorianCalendar.YEAR))
{
TerzoHome tHome = (TerzoHome) getHomeCache(userContext).getHome( TerzoBulk.class );
TerzoBulk tKey = new TerzoBulk(carriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
AnagraficoHome aHome = (AnagraficoHome) getHomeCache(userContext).getHome( AnagraficoBulk.class );
AnagraficoBulk aKey = new AnagraficoBulk(t.getCd_anag());
AnagraficoBulk a = (AnagraficoBulk)aHome.findByPrimaryKey(aKey);
if (a.getFl_cervellone()&&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_inizio_res_fis().intValue()) < 0) &&
!(new Integer(data_da.get(GregorianCalendar.YEAR)).compareTo(a.getAnno_fine_agevolazioni().intValue()) > 0))
{
filtro.setFlAgevolazioniCervelli(new Boolean(a.getFl_cervellone()));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
else
filtro.setFlAgevolazioniCervelli(new Boolean(false));
}
carriera.setTipo_trattamento(trattHome.findTipoTrattamentoValido(filtro));
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
/**
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la modifica del compenso
* PostCondition:
* Viene consentito la modifica del compenso e
* della obbligazione associata
*
* Controlli non superati
* PreCondition:
* Non sono stati superati i controlli di validazione
* per la modifica del compenso
* PostCondition:
* Non viene permessa la modifica del compenso e della obbligazione
**/
public OggettoBulk modificaConBulk(UserContext userContext,OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
return modificaConBulk(userContext, bulk, null);
}
//^^@@
/**
* Validazione documento.
* PreCondition:
* Viene richiesta la modifica di una minicarriera e la stessa non ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Non viene consentita la modifica della minicarriera.
* Tutti i controlli superati.
* PreCondition:
* Viene richiesta la modifica di una minicarriera e la stessa ha superato il metodo 'validaMinicarriera'.
* PostCondition:
* Viene consentita la modifica della minicarriera.
*/
//^^@@
public it.cnr.jada.bulk.OggettoBulk modificaConBulk(it.cnr.jada.UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk, it.cnr.contab.doccont00.core.bulk.OptionRequestParameter status) throws it.cnr.jada.comp.ComponentException {
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
Long tmp = carriera.getPgMinicarrieraPerClone();
Long current = carriera.getPg_minicarriera();
validaMinicarriera(userContext, carriera);
PrimaryKeyHashMap compensiTemporanei = aggiornaRate(userContext, carriera, false);
carriera = (MinicarrieraBulk)super.modificaConBulk(userContext, carriera);
callValidaRate(userContext, carriera);
if (tmp!=null){
eliminaMinicarrieraClone(userContext, carriera, tmp);
carriera.setPg_minicarriera(current);
}
aggiornaMontantiPerCompensiTemporanei(userContext, compensiTemporanei);
aggiornaSaldiPer(userContext, carriera, status);
return carriera;
}
/**
* Insert the method's description here.
* Creation date: (22/02/2002 14.28.44)
* @return java.util.List
*/
private MinicarrieraBulk reloadMinicarriera(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException{
try {
Long pgTmp = carriera.getPgMinicarrieraPerClone();
it.cnr.jada.bulk.PrimaryKeyHashMap saldi = carriera.getDefferredSaldi();
MinicarrieraHome home = (MinicarrieraHome)getHome(userContext, carriera);
MinicarrieraBulk carrieraCaricata = (MinicarrieraBulk)home.findByPrimaryKey(carriera);
try {
BulkList rate = new BulkList(findRate(userContext, carrieraCaricata));
for (java.util.Iterator i = carriera.getMinicarriera_rate().iterator(); i.hasNext();) {
Minicarriera_rataBulk vecchiaRata = (Minicarriera_rataBulk)i.next();
if (vecchiaRata.isAssociataACompenso()) {
Minicarriera_rataBulk rataCaricata = (Minicarriera_rataBulk)rate.get(rate.indexOfByPrimaryKey(vecchiaRata));
rataCaricata.setCompenso(vecchiaRata.getCompenso());
}
}
carrieraCaricata.setMinicarriera_rate(rate);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(carriera, e);
}
getHomeCache(userContext).fetchAll(userContext);
carrieraCaricata.setPgMinicarrieraPerClone(pgTmp);
completaMinicarriera(userContext, carrieraCaricata);
carrieraCaricata.setDefferredSaldi(saldi);
return carrieraCaricata;
}catch (it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
//^^@@
/**
* Minicarriera corrente
* PreCondition:
* Viene richiesto il rinnovo della minicarriera
* PostCondition:
* La minicarriera corrente viene aggiornata e diventa "non modificabile"
* Rinnovo
* PreCondition:
* La minicarriera di origine viene aggiornata correttamente
* PostCondition:
* Viene eseguita e restituita una copia della testata della minicarriera di origine
* Rate
* PreCondition:
* La minicarriera di origine viene aggiornata correttamente
* PostCondition:
* NON viene eseguita la copia delle rate, ma ne viene richiesta la generazione
*/
//^^@@
public MinicarrieraBulk rinnova(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
carriera.setStato(carriera.STATO_RINNOVATA);
carriera.setToBeUpdated();
carriera = (MinicarrieraBulk)modificaConBulk(userContext, carriera);
MinicarrieraBulk carrieraRinnovata = copiaMinicarriera(userContext, carriera);
return reloadMinicarriera(userContext, carrieraRinnovata);
}
//^^@@
/**
* Minicarriera corrente
* PreCondition:
* Viene richiesto il ripristino della minicarriera
* PostCondition:
* La minicarriera corrente viene aggiornata e diventa "non modificabile"
* Ripristino
* PreCondition:
* La minicarriera di origine viene aggiornata correttamente
* PostCondition:
* Viene eseguita e restituita una copia della testata della minicarriera di origine
* Rate
* PreCondition:
* La minicarriera di origine viene aggiornata correttamente
* PostCondition:
* NON viene eseguita la copia delle rate, ma ne viene richiesta la generazione
*/
//^^@@
public MinicarrieraBulk ripristina(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
carriera.setStato(carriera.STATO_RIPRISTINATA);
carriera.setToBeUpdated();
carriera = (MinicarrieraBulk)modificaConBulk(userContext, carriera);
MinicarrieraBulk carrieraRipristinata = copiaMinicarriera(userContext, carriera);
return reloadMinicarriera(userContext, carrieraRipristinata);
}
/**
* Filtro ricerca Compenso
* PreCondition:
* E' stata generata la richiesta di ricerca di un Compenso
* PostCondition:
* Viene restituito l'SQLBuilder con l'elenco delle clausole
* selezionate dall'utente e, in aggiunta:
* - CDS di scrivania
* - UO di scrivania
* - ESERCIZIO di scrivania
**/
public Query select(UserContext userContext,CompoundFindClause clauses,OggettoBulk bulk) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
MinicarrieraBulk carriera = (MinicarrieraBulk)bulk;
MinicarrieraHome home = (MinicarrieraHome)getHome(userContext,carriera);
SQLBuilder sql = home.createSQLBuilder();
if (clauses == null) {
if (bulk != null)
clauses = bulk.buildFindClauses(null);
} else
clauses = it.cnr.jada.persistency.sql.CompoundFindClause.and(clauses,bulk.buildFindClauses(Boolean.FALSE));
for (java.util.Iterator i = clauses.iterator(); i.hasNext();) {
SimpleFindClause clause = (SimpleFindClause)i.next();
if (clause.getPropertyName().equalsIgnoreCase("ti_anagraficoForSearch")) {
clause.setPropertyName("ti_anagrafico");
if (clause.getValue().equals("T")) clause.setValue(null);
} else if (clause.getPropertyName().equalsIgnoreCase("percipiente.cd_terzo")) {
clause.setPropertyName("cd_terzo");
}
}
//sql.addSQLClause("AND", "CD_CDS", sql.EQUALS, carriera.getCd_cds());
//sql.addSQLClause("AND", "CD_UNITA_ORGANIZZATIVA", sql.EQUALS, carriera.getCd_unita_organizzativa());
//sql.addSQLClause("AND", "ESERCIZIO", sql.EQUALS, carriera.getEsercizio());
if (carriera.getPercipiente() != null &&
carriera.getPercipiente().getCd_terzo_precedente() != null) {
sql.addTableToHeader("TERZO");
sql.addSQLJoin("MINICARRIERA.CD_TERZO", "TERZO.CD_TERZO");
sql.addSQLClause("AND", "TERZO.CD_PRECEDENTE", sql.EQUALS, carriera.getPercipiente().getCd_terzo_precedente());
}
sql.addClause(clauses);
return sql;
}
/**
* Filtro ricerca per le banche
* PreCondition:
* E' stata generata la richiesta di ricerca delle banche
* PostCondition:
* Viene restituito l'SQLBuilder per filtrare le banche
* associate al TERZO selezionato e al TIPO PAGAMENTO selezionato
**/
public SQLBuilder selectBancaByClause(UserContext userContext, MinicarrieraBulk carriera, BancaBulk banca, CompoundFindClause clauses) throws ComponentException {
BancaHome bancaHome = (BancaHome)getHome(userContext, BancaBulk.class);
SQLBuilder sql = bancaHome.selectBancaFor(
carriera.getModalita_pagamento(),
carriera.getCd_terzo());
sql.addClause(clauses);
return sql;
}
/**
* Filtro ricerca per il terzo
* PreCondition:
* E' stata generata la richiesta di ricerca di un terzo
* PostCondition:
* Viene restituito l'SQLBuilder per filtrare i terzi validi
* e con TIPO ANAGRAFICO compatibile con quello selezionato
**/
public SQLBuilder selectPercipienteByClause(
UserContext userContext,
MinicarrieraBulk carriera,
V_terzo_per_compensoBulk vTerzo,
CompoundFindClause clauses) throws ComponentException {
try {
carriera.validaDateValidita();
V_terzo_per_compensoHome home = (V_terzo_per_compensoHome)getHome(userContext,V_terzo_per_compensoBulk.class,"DISTINCT_TERZO");
SQLBuilder sql = home.selectVTerzo(
carriera.getTi_anagrafico(),
null,
carriera.getDt_registrazione(),
carriera.getDt_inizio_minicarriera(),
clauses);
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.CD_TERZO_PRECEDENTE", sql.EQUALS, carriera.getPercipiente().getCd_terzo_precedente());
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.COGNOME", sql.CONTAINS, carriera.getCognome());
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.NOME", sql.CONTAINS, carriera.getNome());
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.RAGIONE_SOCIALE", sql.CONTAINS, carriera.getRagione_sociale());
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.CODICE_FISCALE", sql.CONTAINS, carriera.getCodice_fiscale());
sql.addSQLClause("AND", "V_TERZO_PER_COMPENSO.PARTITA_IVA", sql.CONTAINS, carriera.getPartita_iva());
return sql;
} catch (it.cnr.jada.bulk.ValidationException e) {
throw new it.cnr.jada.comp.ApplicationException(e.getMessage());
} catch(it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(ex);
}
}
//^^@@
/**
* Sospensione
* PreCondition:
* Viene richiesta la sospensione della minicarriera
* PostCondition:
* Viene eseguita la richiesta e restituita la minicarriera aggiornata non più modificabile
*/
//^^@@
public MinicarrieraBulk sospendi(
UserContext userContext,
MinicarrieraBulk carriera)
throws it.cnr.jada.comp.ComponentException {
carriera.setStato(carriera.STATO_SOSPESA);
carriera.setToBeUpdated();
return (MinicarrieraBulk)modificaConBulk(userContext, carriera);
}
private void synchronizeCarriera(
it.cnr.jada.UserContext uc,
MinicarrieraBulk carriera,
CompensoBulk compenso) {
ObbligazioneBulk obbligazione = compenso.getObbligazioneScadenzario().getObbligazione();
PrimaryKeyHashMap relazioni = compenso.getRelationsDocContForSaldi();
if (relazioni != null) {
Long temporaneo = (Long)relazioni.get(obbligazione);
if (temporaneo != null && temporaneo.longValue() < 0 && relazioni != null && !relazioni.isEmpty()) {
ObbligazioneBulk obblTemporanea = (ObbligazioneBulk)obbligazione.clone();
obblTemporanea.setPg_obbligazione(temporaneo);
if (carriera.getDefferredSaldi() != null) {
java.util.Map values = (java.util.Map)carriera.getDefferredSaldi().get(obblTemporanea);
carriera.removeFromDefferredSaldi(obblTemporanea);
if (values == null)
values = new java.util.HashMap();
values.put("isObbTemp", Boolean.TRUE);
carriera.addToDefferredSaldi(obbligazione, values);
}
}
}
}
//^^@@
/**
* Validazione documento.
* PreCondition:
* Viene richiesta la validazione di una minicarriera e la stessa viene superata.
* PostCondition:
* Viene consentita la continuazione del processo.
* La data di registrazione non è stata specificata
* PreCondition:
* Nella minicarriera non è stata specificata la data di registrazione.
* PostCondition:
* Viene restituito messaggio relativo e richiesta l'immissione del valore.
* La data di registrazione
* PreCondition:
* Nella minicarriera è stata specificata la data di registrazione ma è antecedente a 'oggi'
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore corretto.
* La data di inizio e fine validità
* PreCondition:
* Nella minicarriera non è stata specificata la data di inizio o fine validità
* PostCondition:
* Viene restituito messaggio relativo e richiesta l'immissione del valore.
* Validità delle date di inizio e fine validità
* PreCondition:
* Nella minicarriera data di fine validità è precedente alla data di inizio validità
* PostCondition:
* Viene restituito messaggio relativo e richiesta l'immissione del valore corretto.
* Percipiente
* PreCondition:
* Nella minicarriera non è stato specificato il percipiente
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Modalità pagamento
* PreCondition:
* Nella minicarriera non è stato specificato il valore modalità di pagamento del percipiente
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Tipo rapporto
* PreCondition:
* Nella minicarriera non è stato specificato il valore tipo rapporto del percipiente
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Tipo trattamento
* PreCondition:
* Nella minicarriera non è stato specificato il valore tipo trattamento del percipiente
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Rate
* PreCondition:
* Nella minicarriera non sono state aggiunte o generate rate
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione di almeno una rata
* Importo totale minicarriera
* PreCondition:
* Nella minicarriera non è stato specificato l'importo totale del documento
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Importo totale minicarriera non valido
* PreCondition:
* Nella minicarriera è stato specificato l'importo totale del documento, ma è minore o uguale a 0
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore corretto.
* Importo totale rate non valido
* PreCondition:
* Nella minicarriera sono state inserite rate con importo complessivo diverso dall'importo totale di documento
* PostCondition:
* Viene restituito messaggio relativo e richiesta la correzione delle rate o dell'importo totale di testata.
* N. rate minicarriera
* PreCondition:
* Nella minicarriera non è stato specificato il numero delle rate del documento
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* N. rate minicarriera non valido
* PreCondition:
* Nella minicarriera è stato specificato il numero delle rate del documento, ma è minore o uguale a 0
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore corretto.
* Numero totale rate non valido
* PreCondition:
* Nella minicarriera sono state inserite rate in eccesso o difetto rispetto al numero rate di testata
* PostCondition:
* Viene restituito messaggio relativo e richiesta la correzione delle rate o dell'numero totale di testata
* N. mesi di anticipo/posticipo
* PreCondition:
* Nella minicarriera è stato specificato il tipo anticipo/posticipo per le rate, ma non è stato specificato
* il numero di mesi
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore.
* Validità n. mesi di anticipo/posticipo
* PreCondition:
* Nella minicarriera è stato specificato il tipo anticipo/posticipo per le rate, ma non è stato specificato
* il numero di mesi valido (minore o uguale a 0)
* PostCondition:
* Viene restituito messaggio relativo e richiesto l'immissione del valore corretto.
* Validità delle rate immesse
* PreCondition:
* La stored procedure per la validazione degli intervalli di tempo relativa alle rate fallisce
* PostCondition:
* Viene restituito messaggio relativo e richiesto la correzione.
*/
//^^@@
private void validaMinicarriera(
UserContext userContext,
MinicarrieraBulk carriera) throws ComponentException{
// Controllo Testata Minicarriera e percipiente
try {
carriera.validaTestata();
handleExceptionsPercipiente(validaPercipiente(userContext, carriera));
carriera.validaCorpo();
if (carriera.getDt_cessazione()== null)
{
//if(isGestitePrestazioni(userContext))
//{
carriera.impostaVisualizzaPrestazione();
if(carriera.isVisualizzaPrestazione() && (carriera.getTipoPrestazioneCompenso() == null || carriera.getTipoPrestazioneCompenso().getCrudStatus()== OggettoBulk.UNDEFINED))
throw new it.cnr.jada.comp.ApplicationException("Inserire il tipo di prestazione.");
//}
if(isGestitiIncarichi(userContext))
{
carriera.impostaVisualizzaIncarico();
if(carriera.isVisualizzaIncarico() && (carriera.getIncarichi_repertorio() == null || carriera.getIncarichi_repertorio().getCrudStatus()== OggettoBulk.UNDEFINED))
throw new it.cnr.jada.comp.ApplicationException("Inserire il Contratto.");
}
}
if (carriera.getMinicarriera_rate().size() <= 0)
throw new it.cnr.jada.comp.ApplicationException("Per continuare è necessario generare le rate!");
if (carriera.getIm_totale_minicarriera().compareTo(carriera.calcolaTotaleRate()) != 0)
throw new it.cnr.jada.comp.ApplicationException("L'importo totale delle rate deve essere uguale all'importo specificato nella minicarriera.");
if (carriera.getNumero_rate().intValue() != carriera.getMinicarriera_rate().size())
throw new it.cnr.jada.comp.ApplicationException("Il numero totale delle rate deve essere uguale al numero rate specificate nella minicarriera.");
} catch (it.cnr.jada.bulk.ValidationException e) {
throw new it.cnr.jada.comp.ApplicationException(e.getMessage());
} catch (Throwable t) {
throw handleException(carriera, t);
}
}
/**
* Viene richiesta la validazione del terzo selezionato
* Ritorna il codice di Errore relativo alla validzione
*
* errorCode Significato
* ========= ===========
* 0 Tutto bene
* 1 Terzo assente
* 2 Terzo non valido alla data registrazione
* 3 Controllo se ho inserito le modalità di pagamento
* 4 Tipo rapporto assente
* 5 Tipo di rapporto non valido in data inizio competenza coge
* 6 Tipo trattamento assente
* 7 Tipo trattamento non valido alla data registrazione
*
* Pre-post-conditions
*
* Nome: Terzo assente
* Pre: Non è stato selezionato un terzo
* Post: Ritorna il valore 1
*
* Nome: Terzo non valido alla data registrazione
* Pre: Il terzo selezionato non è valido alla data registrazione
* Post: Ritorna il valore 2
*
* Nome: Modalita di pagamento assente
* Pre: Non è stato selezionata una modalita di pagamento
* Post: Ritorna il valore 3
*
* Nome: Tipo rapporto assente
* Pre: Non è stato selezionato un tipo rapporto
* Post: Ritorna il valore 4
*
* Nome: Tipo rapporto non valido alla data inizio validità
* Pre: Il tipo rapporto selezionato non è valido in data inizio validità
* Post: Ritorna il valore 5
*
* Nome: Tipo trattamento assente
* Pre: Non è stato selezionato un tipo trattamento
* Post: Ritorna il valore 6
*
* Nome: Tipo trattamento non valido alla data registrazione
* Pre: Non è stato selezionato un tipo trattamento
* Post: Ritorna il valore 7
*
* Nome: Terzo valido
* Pre: Il terzo selezionato non ha errori
* Post: Ritorna il valore 0
*
* @param userContext lo UserContext che genera la richiesta
* @param minicarriera il minicarriera di cui validare il terzo
* @return il codice di errore relativo
*
**/
public int validaPercipiente(
UserContext userContext,
MinicarrieraBulk minicarriera)
throws ComponentException{
TerzoBulk percipiente = minicarriera.getTerzo();
int returnCode = V_terzo_per_compensoBulk.TUTTO_BENE;
try {
returnCode = minicarriera.validaPercipiente(false);
} catch (it.cnr.jada.bulk.ValidationException e) {
throw new it.cnr.jada.comp.ApplicationException(e.getMessage(), e);
}
if (returnCode != V_terzo_per_compensoBulk.TUTTO_BENE)
return returnCode;
// rapporto non valido in data inizio validità
if (!isTipoRapportoValido(userContext, minicarriera))
return V_terzo_per_compensoBulk.TIPO_RAPP_NON_VALIDO;
// tipo trattamento non valido alla data registrazione
if (!isTipoTrattamentoValido(userContext, minicarriera))
return V_terzo_per_compensoBulk.TIPO_TRATT_NON_VALIDO;
return(0);
}
public boolean verificaStatoEsercizio(UserContext userContext,it.cnr.contab.config00.esercizio.bulk.EsercizioBulk anEsercizio) throws ComponentException
{
try
{
it.cnr.contab.config00.esercizio.bulk.EsercizioHome eHome = (it.cnr.contab.config00.esercizio.bulk.EsercizioHome)getHome(userContext, it.cnr.contab.config00.esercizio.bulk.EsercizioBulk.class);
return !eHome.isEsercizioChiuso(userContext, anEsercizio.getEsercizio(), anEsercizio.getCd_cds());
}
catch (it.cnr.jada.persistency.PersistencyException e)
{
throw handleException(e);
}
}
public boolean isTerzoCervellone(UserContext userContext, MinicarrieraBulk carriera) throws ComponentException
{
if (carriera.getCd_terzo()!= null)
{
try {
TerzoHome tHome = (TerzoHome) getHome(userContext,TerzoBulk.class);
TerzoBulk tKey = new TerzoBulk(carriera.getCd_terzo());
TerzoBulk t = (TerzoBulk)tHome.findByPrimaryKey(tKey);
if (t == null)
{
return false;
}
else
{
AnagraficoHome aHome = (AnagraficoHome) getHome(userContext,AnagraficoBulk.class);
AnagraficoBulk aKey = new AnagraficoBulk(t.getCd_anag());
AnagraficoBulk a = (AnagraficoBulk)aHome.findByPrimaryKey(aKey);
if (a.getFl_cervellone())
return true;
else
return false;
}
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(carriera, ex);
}
}
else
return false;
}
public boolean isGestitiIncarichi(UserContext userContext) throws ComponentException {
try {
Parametri_cnrBulk par = ((Parametri_cnrComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Parametri_cnrComponentSession",Parametri_cnrComponentSession.class)).getParametriCnr(userContext,CNRUserContext.getEsercizio(userContext));
return
par.getFl_incarico();
} catch(Throwable e) {
throw handleException(e);
}
}
public SQLBuilder selectIncarichi_repertorioByClause(UserContext userContext, MinicarrieraBulk carriera, Incarichi_repertorioBulk incarico, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException
{
if (carriera.getCd_terzo()==null)
throw new it.cnr.jada.comp.ApplicationException("Inserire prima il codice del Terzo");
SQLBuilder sql = getHome(userContext,Incarichi_repertorioBulk.class).createSQLBuilder();
//getHomeCache(userContext).fetchAll(userContext);
if (clauses != null)
sql.addClause(clauses);
sql.addClause("AND","stato",SQLBuilder.EQUALS, Incarichi_repertorioBulk.STATO_DEFINITIVO);
sql.addClause("AND","ti_istituz_commerc",SQLBuilder.EQUALS, carriera.getTi_istituz_commerc());
sql.addClause("AND","cd_terzo",SQLBuilder.EQUALS, carriera.getCd_terzo());
if(carriera.getCd_tipo_rapporto()!= null)
sql.addSQLClause("AND","CD_TIPO_RAPPORTO",SQLBuilder.EQUALS, carriera.getCd_tipo_rapporto());
// if(carriera.getCd_trattamento()!=null)
// sql.addSQLClause("AND","CD_TRATTAMENTO",SQLBuilder.EQUALS, carriera.getCd_trattamento());
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_INIZIO_VALIDITA",SQLBuilder.LESS_EQUALS,carriera.getDt_inizio_minicarriera());
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, carriera.getCd_unita_organizzativa());
sql.openParenthesis(FindClause.AND);
sql.openParenthesis(FindClause.OR);
sql.addClause(FindClause.AND,"cd_cds",SQLBuilder.EQUALS, carriera.getCd_cds());
sql.addClause(FindClause.AND,"cd_unita_organizzativa",SQLBuilder.EQUALS, carriera.getCd_unita_organizzativa());
sql.closeParenthesis();
sql.addSQLExistsClause(FindClause.OR,sqlUoExists);
sql.closeParenthesis();
sql.openParenthesis("AND");
sql.openParenthesis("");
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_FINE_VALIDITA",SQLBuilder.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.closeParenthesis();
sql.openParenthesis("OR");
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_PROROGA",SQLBuilder.ISNOTNULL,null);
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_PROROGA",SQLBuilder.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.closeParenthesis();
sql.openParenthesis("OR");
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_PROROGA_PAGAM",SQLBuilder.ISNOTNULL,null);
sql.addSQLClause("AND","INCARICHI_REPERTORIO.DT_PROROGA_PAGAM",SQLBuilder.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.closeParenthesis();
SQLBuilder sqlExists = getHome(userContext,Incarichi_repertorio_varBulk.class).createSQLBuilder();
sqlExists.addSQLJoin("INCARICHI_REPERTORIO_VAR.ESERCIZIO","INCARICHI_REPERTORIO.ESERCIZIO");
sqlExists.addSQLJoin("INCARICHI_REPERTORIO_VAR.PG_REPERTORIO","INCARICHI_REPERTORIO.PG_REPERTORIO");
sqlExists.openParenthesis(FindClause.AND);
sqlExists.addSQLClause(FindClause.OR,"INCARICHI_REPERTORIO_VAR.TIPO_VARIAZIONE",SQLBuilder.EQUALS, Incarichi_repertorio_varBulk.TIPO_INTEGRAZIONE_INCARICO_TRANS);
sqlExists.addSQLClause(FindClause.OR,"INCARICHI_REPERTORIO_VAR.TIPO_VARIAZIONE",SQLBuilder.EQUALS, Incarichi_repertorio_varBulk.TIPO_INTEGRAZIONE_INCARICO);
sqlExists.closeParenthesis();
sqlExists.addSQLClause("AND","INCARICHI_REPERTORIO_VAR.STATO",SQLBuilder.EQUALS, Incarichi_repertorio_varBulk.STATO_DEFINITIVO);
sqlExists.addSQLClause("AND","INCARICHI_REPERTORIO_VAR.DT_FINE_VALIDITA",SQLBuilder.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.addSQLExistsClause("OR",sqlExists);
sql.closeParenthesis();
/*
sql.openParenthesis("AND");
sql.openParenthesis("");
sql.addSQLClause("AND","DT_PROROGA",sql.ISNULL,null);
sql.addSQLClause("AND","DT_FINE_VALIDITA",sql.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.closeParenthesis();
sql.openParenthesis("OR");
sql.addSQLClause("AND","DT_PROROGA",sql.ISNOTNULL,null);
sql.addSQLClause("AND","DT_PROROGA",sql.GREATER_EQUALS,carriera.getDt_fine_minicarriera());
sql.closeParenthesis();
sql.closeParenthesis();
*/
return sql;
}
public MinicarrieraBulk completaIncarico(UserContext userContext, MinicarrieraBulk carriera,Incarichi_repertorioBulk incarico) throws ComponentException {
if (carriera != null) {
try {
if(carriera.getTipo_trattamento()==null)
{
Tipo_trattamentoHome trattHome = (Tipo_trattamentoHome)getHome(userContext, Tipo_trattamentoBulk.class);
Tipo_trattamentoBulk tratt;
tratt = trattHome.findIntervallo(new Tipo_trattamentoBulk(incarico.getTipo_trattamento().getCd_trattamento(),trattHome.getServerDate()));
carriera.impostaTipo_tratt(tratt);
}
/*int dim = getHome(userContext,carriera).getColumnMap().getMappingForProperty("ds_minicarriera").getColumnSize();
String ds_minicarriera_new = carriera.getDs_minicarriera()+" - "+ incarico.getOggetto();
if (ds_minicarriera_new.length()>dim-1)
ds_minicarriera_new = ds_minicarriera_new.substring(0,dim-1);
carriera.setDs_minicarriera(ds_minicarriera_new);
*/
}catch(it.cnr.jada.persistency.PersistencyException ex){
throw handleException(ex);
}
}
return carriera;
}
/*
public boolean isGestitePrestazioni(UserContext userContext) throws ComponentException {
try {
String attivaPrestazione = ((it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession")).getVal01(userContext, CNRUserContext.getEsercizio(userContext), "*", "GESTIONE_COMPENSI", "ATTIVA_PRESTAZIONE");
if (attivaPrestazione==null)
throw new ApplicationException("Configurazione CNR: non sono stati impostati i valori per GESTIONE_COMPENSI - ATTIVA_PRESTAZIONE");
if (attivaPrestazione.compareTo(new String("Y"))==0)
return true;
else
return false;
} catch (Throwable e) {
throw handleException(e);
}
}
*/
public java.util.Collection findTipiPrestazioneCompenso(UserContext userContext,
MinicarrieraBulk carriera) throws ComponentException {
try {
if (carriera.getTerzo() == null)
return null;
it.cnr.contab.compensi00.tabrif.bulk.Tipo_prestazione_compensoHome home = (it.cnr.contab.compensi00.tabrif.bulk.Tipo_prestazione_compensoHome) getHome(
userContext,
it.cnr.contab.compensi00.tabrif.bulk.Tipo_prestazione_compensoBulk.class);
return home.findTipiPrestazioneCompensoDaMinicarriera(carriera.getCd_tipo_rapporto());
} catch (it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(carriera, ex);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy