it.cnr.contab.doccont00.comp.SospesoRiscontroComponent Maven / Gradle / Ivy
/*
* Copyright (C) 2019 Consiglio Nazionale delle Ricerche
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
package it.cnr.contab.doccont00.comp;
import it.cnr.contab.anagraf00.core.bulk.BancaBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBulk;
import it.cnr.contab.config00.esercizio.bulk.EsercizioBulk;
import it.cnr.contab.config00.esercizio.bulk.EsercizioHome;
import it.cnr.contab.config00.sto.bulk.*;
import it.cnr.contab.docamm00.docs.bulk.Lettera_pagam_esteroBulk;
import it.cnr.contab.doccont00.core.bulk.*;
import it.cnr.contab.doccont00.ejb.ReversaleComponentSession;
import it.cnr.contab.doccont00.intcass.bulk.*;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.util.enumeration.EsitoOperazione;
import it.cnr.contab.util.enumeration.StatoVariazioneSostituzione;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.BulkList;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.ValidationException;
import it.cnr.jada.comp.*;
import it.cnr.jada.persistency.sql.*;
import it.cnr.jada.util.DateUtils;
import it.cnr.jada.util.RemoteIterator;
import it.cnr.jada.util.ejb.EJBCommonServices;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
public class SospesoRiscontroComponent extends it.cnr.jada.comp.CRUDComponent implements ISospesoRiscontroMgr, ICRUDMgr, Cloneable, Serializable, IPrintMgr {
/**
* SospesoRiscontroComponent constructor comment.
*/
public SospesoRiscontroComponent() {
super();
}
/**
* aggiornamento Documenti Contabili e Saldi da sospeso
* PreCondition:
* Nel caso un riscontro sia stato annullato ed il doc. contabile sia stato pagato oppure
* nel caso il riscontro sia stato inserito e il doc. contabile non sia stato pagato, occorre
* aggiornare tutti quei documenti contabili o saldi che fanno riferimento al
* riscontro stesso.
* PostCondition:
* Vengono quindi aggiornati documenti contabili o saldi tramite una stored procedure
* (aggDaSospesoRiscontro)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param v_man_rev V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al sospeso
*/
private void aggiornaDaSospesoRiscontro(UserContext userContext, V_mandato_reversaleBulk v_man_rev) throws ComponentException {
try {
LoggableStatement cs = null;
if (Numerazione_doc_contBulk.TIPO_MAN.equals(v_man_rev.getCd_tipo_documento_cont()))
cs = new LoggableStatement(getConnection(userContext), "{ call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB037.riscontroMandato(?, ?, ?, ?, ?)}", false, this.getClass());
else
cs = new LoggableStatement(getConnection(userContext), "{ call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB037.riscontroReversale(?, ?, ?, ?, ?)}", false, this.getClass());
try {
cs.setObject(1, v_man_rev.getEsercizio());
cs.setString(2, v_man_rev.getCd_cds());
cs.setObject(3, v_man_rev.getPg_documento_cont());
cs.setString(4, MandatoComponent.MODIFICA_MANDATO_ACTION);
cs.setString(5, userContext.getUser());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
}
/**
* aggiornamento Importo incassato di una Reversale
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo incassato della reversale
* associata al riscontro
* PostCondition:
* Nel caso il dettaglio d'entrata del riscontro sia stato annullato, viene calcolato
* l'importo del riscontro, sottraendo dallo stesso l'importo associato del dettaglio
* d'entrata del riscontro
* In tutti gli altri casi viene impostato l'importo del riscontro con l'importo
* associato del dettaglio d'entrata.
* Viene poi aggiornato l'importo della reversale associata al riscontro
* (metodo aggiornaImReversale)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param det_etr Sospeso_det_etrBulk il dettaglio d'entrata del riscontro da aggiornare
* @param v_man_rev V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
*/
private void aggiornaIm_pagato_incassato(UserContext userContext, Sospeso_det_etrBulk det_etr, V_mandato_reversaleBulk v_man_rev) throws ComponentException {
try {
BigDecimal im_sospeso;
if (Sospeso_det_etrBulk.STATO_ANNULLATO.equals(det_etr.getStato()))
im_sospeso = det_etr.getIm_associato().negate();
else
im_sospeso = det_etr.getIm_associato();
aggiornaImReversale(userContext, v_man_rev, im_sospeso);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Importo pagato di un Mandato
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo pagato del mandato
* associato al riscontro
* PostCondition:
* Nel caso il dettaglio di spesa del riscontro sia stato annullato, viene calcolato
* l'importo del riscontro, sottraendo dallo stesso l'importo associato del dettaglio
* di spesa del riscontro
* In tutti gli altri casi viene impostato l'importo del riscontro con l'importo
* associato del dettaglio di spesa.
* Viene poi aggiornato l'importo del mandato associato (metodo aggiornaImMandato)
* aggiornamento Importo pagato di un Mandato di Accreditamento
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo pagato del mandato
* di accreditamento associato al riscontro
* PostCondition:
* Nel caso il dettaglio di spesa del riscontro sia stato annullato, viene calcolato
* l'importo del riscontro, sottraendo dallo stesso l'importo associato del dettaglio
* di spesa del riscontro
* In tutti gli altri casi viene impostato l'importo del riscontro con l'importo
* associato del dettaglio di spesa.
* Viene poi aggiornato l'importo del mandato di accreditamento associato
* (metodo aggiornaImMandatoAccreditamento)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param det_usc Sospeso_det_uscBulk il dettaglio di spesa del riscontro da aggiornare
* @param v_man_rev V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
*/
private void aggiornaIm_pagato_incassato(UserContext userContext, Sospeso_det_uscBulk det_usc, V_mandato_reversaleBulk v_man_rev) throws ComponentException {
try {
BigDecimal im_sospeso;
if (Sospeso_det_uscBulk.STATO_ANNULLATO.equals(det_usc.getStato()))
im_sospeso = det_usc.getIm_associato().negate();
else
im_sospeso = det_usc.getIm_associato();
if (v_man_rev != null && v_man_rev.getTi_documento_cont().equals(MandatoBulk.TIPO_ACCREDITAMENTO))
aggiornaImMandatoAccreditamento(userContext, v_man_rev, im_sospeso);
else
aggiornaImMandato(userContext, v_man_rev, im_sospeso);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Importo di un Mandato
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo del mandato associato al riscontro
* PostCondition:
* Viene aggiornato l'importo pagato del mandato a cui viene aggiunto l'importo del riscontro
* ad esso associato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param docContabile V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
* @param im_riscontro BigDecimal l'importo del riscontro
*/
private void aggiornaImMandato(UserContext userContext, V_mandato_reversaleBulk docContabile, BigDecimal im_riscontro) throws ComponentException {
try {
MandatoBulk mandato = (MandatoBulk) getHome(userContext, MandatoIBulk.class).findAndLock(
new MandatoIBulk(
docContabile.getCd_cds(),
docContabile.getEsercizio(),
docContabile.getPg_documento_cont()));
// verifico che il mandato da associare al riscontro nel frattempo non sia stato modificato
if (!docContabile.getPg_ver_rec().equals(mandato.getPg_ver_rec()))
throw new ApplicationException("Risorsa non più valida.");
mandato.setIm_pagato(mandato.getIm_pagato().add(im_riscontro));
mandato.setUser(userContext.getUser());
updateBulk(userContext, mandato);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Importo di un Mandato di Accreditamento
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo del mandato di accreditamento
* associato al riscontro
* PostCondition:
* Viene aggiornato l'importo pagato del mandato di accreditamento a cui viene aggiunto
* l'importo del riscontro ad esso associato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param docContabile V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
* @param im_riscontro BigDecimal l'importo del riscontro
*/
private void aggiornaImMandatoAccreditamento(UserContext userContext, V_mandato_reversaleBulk docContabile, BigDecimal im_riscontro) throws ComponentException {
try {
MandatoBulk mandato = (MandatoBulk) getHome(userContext, MandatoAccreditamentoBulk.class).findAndLock(
new MandatoAccreditamentoBulk(
docContabile.getCd_cds(),
docContabile.getEsercizio(),
docContabile.getPg_documento_cont()));
// verifico che il mandato di accreditamento da associare al riscontro nel frattempo non sia stato modificato
if (!docContabile.getPg_ver_rec().equals(mandato.getPg_ver_rec()))
throw new ApplicationException("Risorsa non più valida.");
mandato.setIm_pagato(mandato.getIm_pagato().add(im_riscontro));
mandato.setUser(userContext.getUser());
updateBulk(userContext, mandato);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Importo di una Reversale
* PreCondition:
* E' stata generata la richiesta di aggiornare l'importo della reversale associata al riscontro
* PostCondition:
* Viene aggiornato l'importo incassato della reversale a cui viene aggiunto l'importo del riscontro
* ad esso associato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param docContabile V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
* @param im_riscontro BigDecimal l'importo del riscontro
*/
private void aggiornaImReversale(UserContext userContext, V_mandato_reversaleBulk docContabile, BigDecimal im_riscontro) throws ComponentException {
try {
ReversaleBulk reversale = (ReversaleBulk) getHome(userContext, ReversaleIBulk.class).findAndLock(
new ReversaleIBulk(
docContabile.getCd_cds(),
docContabile.getEsercizio(),
docContabile.getPg_documento_cont()));
// verifico che la reversale da associare al riscontro nel frattempo non sia stata modificata
if (!docContabile.getPg_ver_rec().equals(reversale.getPg_ver_rec()))
throw new ApplicationException("Risorsa non più valida.");
reversale.setIm_incassato(reversale.getIm_incassato().add(im_riscontro));
reversale.setUser(userContext.getUser());
updateBulk(userContext, reversale);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Stato di una Reversale
* PreCondition:
* E' stata generata la richiesta di aggiornare lo stato della reversale associata al riscontro
* PostCondition:
* Viene calcolata la somma degli importi dei singoli riscontri associati alla stessa
* reversale (metodo calcolaTotDettagli)
* Vengono poi aggiornati documenti contabili o saldi in relazione al sospeso, nel caso che
* quest'ultimo sia stato annullato e la reversale sia stata incassata oppure
* nel caso il sospeso sia stato inserito e la reversale non sia stata incassata
* (metodo aggiornaDaSospesoRiscontro)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param dettaglio Sospeso_det_etrBulk il dettaglio del sospeso d'entrata
* @param v_man_rev V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
*/
private void aggiornaStatoDocContabile(UserContext userContext, Sospeso_det_etrBulk dettaglio, V_mandato_reversaleBulk v_man_rev) throws ComponentException {
try {
java.math.BigDecimal totDettagli = new BigDecimal(0);
Sospeso_det_etrHome sospeso_det_etrHome = (Sospeso_det_etrHome) getHome(userContext, Sospeso_det_etrBulk.class);
totDettagli = sospeso_det_etrHome.calcolaTotDettagli(v_man_rev);
// se il riscontro e' stato annullato ed il doc. contabile era incassato oppure
// se il riscontro e' stato inserito e il doc. contabile non era incassato
if ((v_man_rev.getIm_pagato_incassato().compareTo(v_man_rev.getIm_documento_cont()) == 0 &&
Sospeso_det_etrBulk.STATO_ANNULLATO.equals(dettaglio.getStato())) ||
(!Sospeso_det_etrBulk.STATO_ANNULLATO.equals(dettaglio.getStato()) &&
v_man_rev.getIm_pagato_incassato().compareTo(v_man_rev.getIm_documento_cont()) < 0 &&
totDettagli.compareTo(v_man_rev.getIm_documento_cont()) == 0)) {
// chiamata alla stored procedure
aggiornaDaSospesoRiscontro(userContext, v_man_rev);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiornamento Stato di un Mandato
* PreCondition:
* E' stata generata la richiesta di aggiornare lo stato del mandato associato al riscontro
* PostCondition:
* Viene calcolata la somma degli importi dei singoli riscontri associati allo stesso
* mandato (metodo calcolaTotDettagli)
* Vengono poi aggiornati documenti contabili o saldi in relazione al sospeso, nel caso che
* quest'ultimo sia stato annullato ed il mandato sia stato pagato oppure
* nel caso il sospeso sia stato inserito e il mandato non sia stato pagato
* (metodo aggiornaDaSospesoRiscontro)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param dettaglio Sospeso_det_uscBulk il dettaglio del sospeso di spesa
* @param v_man_rev V_mandato_reversaleBulk oggetto V_mandato_reversaleBulk per
* recuperare alcuni dati relativi al documento contabile associato al riscontro
*/
private void aggiornaStatoDocContabile(UserContext userContext, Sospeso_det_uscBulk dettaglio, V_mandato_reversaleBulk v_man_rev) throws ComponentException {
try {
java.math.BigDecimal totDettagli = new BigDecimal(0);
Sospeso_det_uscHome sospeso_det_uscHome = (Sospeso_det_uscHome) getHome(userContext, Sospeso_det_uscBulk.class);
totDettagli = sospeso_det_uscHome.calcolaTotDettagli(v_man_rev);
// se il riscontro e' stato annullato ed il doc. contabile era pagato oppure
// se il riscontro e' stato inserito e il doc. contabile non era pagato
if ((v_man_rev.getIm_pagato_incassato().compareTo(v_man_rev.getIm_documento_cont()) == 0 &&
Sospeso_det_uscBulk.STATO_ANNULLATO.equals(dettaglio.getStato())) ||
(!Sospeso_det_uscBulk.STATO_ANNULLATO.equals(dettaglio.getStato()) &&
v_man_rev.getIm_pagato_incassato().compareTo(v_man_rev.getIm_documento_cont()) < 0 &&
totDettagli.compareTo(v_man_rev.getIm_documento_cont()) == 0)) {
// chiamata alla stored procedure
aggiornaDaSospesoRiscontro(userContext, v_man_rev);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento Dettaglio d'Entrata di un Riscontro
* PreCondition:
* E' stata generata la richiesta di annullare il dettaglio d'Entrata di un riscontro
* PostCondition:
* Viene impostato lo stato del dettaglio a ANNULLATO
* Viene aggiornato l'importo incassato della reversale associata al riscontro che sta
* per essere annullato (metodo aggiornaIm_pagato_incassato)
* Viene aggiornato lo stato della reversale associata al riscontro che sta per essere
* annullato (metodo aggiornaStatoDocContabile)
* annullamento Dettaglio di Spesa di un Riscontro
* PreCondition:
* E' stata generata la richiesta di annullare il dettaglio di Spesa di un riscontro
* PostCondition:
* Viene impostato lo stato del dettaglio a ANNULLATO.
* Viene aggiornato l'importo pagato del mandato associato al riscontro che sta
* per essere annullato (metodo aggiornaIm_pagato_incassato)
* Viene aggiornato lo stato del mandato associato al riscontro che sta per essere
* annullato (metodo aggiornaStatoDocContabile)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk SospesoBulk il riscontro da annullare
*/
private void annullaDettaglioSospeso(UserContext userContext, SospesoBulk sospeso) throws ComponentException {
try {
if (sospeso.getDettaglio_etr() != null) {
sospeso.getDettaglio_etr().setStato(Sospeso_det_etrBulk.STATO_ANNULLATO);
sospeso.getDettaglio_etr().setUser(userContext.getUser());
updateBulk(userContext, sospeso.getDettaglio_etr());
V_mandato_reversaleBulk v_man_rev = (V_mandato_reversaleBulk) getHome(userContext, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(sospeso.getDettaglio_etr().getEsercizio(), Numerazione_doc_contBulk.TIPO_REV, sospeso.getDettaglio_etr().getCd_cds(), sospeso.getDettaglio_etr().getPg_reversale()));
aggiornaIm_pagato_incassato(userContext, sospeso.getDettaglio_etr(), v_man_rev);
aggiornaStatoDocContabile(userContext, sospeso.getDettaglio_etr(), v_man_rev);
} else if (sospeso.getDettaglio_usc() != null) {
sospeso.getDettaglio_usc().setStato(Sospeso_det_uscBulk.STATO_ANNULLATO);
sospeso.getDettaglio_usc().setUser(userContext.getUser());
updateBulk(userContext, sospeso.getDettaglio_usc());
V_mandato_reversaleBulk v_man_rev = (V_mandato_reversaleBulk) getHome(userContext, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(sospeso.getDettaglio_usc().getEsercizio(), Numerazione_doc_contBulk.TIPO_MAN, sospeso.getDettaglio_usc().getCd_cds(), sospeso.getDettaglio_usc().getPg_mandato()));
aggiornaIm_pagato_incassato(userContext, sospeso.getDettaglio_usc(), v_man_rev);
aggiornaStatoDocContabile(userContext, sospeso.getDettaglio_usc(), v_man_rev);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* stato IN SOSPESO
* PreCondition:
* E' stata generata la richiesta di modificare lo stato INIZIALE di un insieme di Sospesi di Entrata CNR nello stato
* IN SOSPESO
* PostCondition:
* Ad ogni Sospeso d'Entrata del CNR viene impostato lo stato a IN SOSPESO
* stato ASSOCIATO A CDS
* PreCondition:
* E' stata generata la richiesta di modificare lo stato INIZIALE di un insieme di Sospesi di Entrata CNR nello stato
* ASSOCIATO A CDS ed e' stato specificato il Cds a cui assegnare il sospeso
* PostCondition:
* Ad ogni Sospeso d'Entrata del CNR viene impostato lo stato a ASSOCIATO A CDS e viene impostato il codice del Cds origine
* al valore specificato dall'utente
*
* @param userContext lo UserContext che ha generato la richiesta
* @param sospesi la collezione di SospesoBulk per cui cambiare lo stato
* @param nuovoStato il nuovo stato (IN SOSPESO o ASSOCIATO A CDS) da impostare al sospeso
* @param cd_cds il codice del cds da impostare al cd_cds_origine del sospeso nel caso di nuovoStato = ASSOCIATO A CDS
* null nel caso di nuovoStato = IN SOSPESO
*/
public void cambiaStato(it.cnr.jada.UserContext userContext, Collection sospesi, String nuovoStato, String cd_cds) throws ComponentException {
SospesoBulk sospeso;
try {
for (Iterator i = sospesi.iterator(); i.hasNext(); ) {
sospeso = (SospesoBulk) i.next();
sospeso.setStato_sospeso(nuovoStato);
if (SospesoBulk.STATO_SOSP_ASS_A_CDS.equals(nuovoStato))
sospeso.setCd_cds_origine(cd_cds);
sospeso.setUser(userContext.getUser());
updateBulk(userContext, sospeso);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Esegue una operazione di ricerca di un OggettoBulk con clausole.
*
* Pre-post-conditions:
*
* Nome: Clausole non specificate
* Pre: L'albero delle clausole non è specficato (nullo)
* Post: Viene generato un albero di clausole usando tutti i valori non nulli degli
* attributi dell'OggettoBulk specificato come prototipo. L'elenco degli
* attributi da utilizzare per ottenere le clausole è estratto dal
* BulkInfo dell'OggettoBulk
*
* Nome: Tutti i controlli superati
* Pre: Albero delle clausole di ricerca specificato (non nullo)
* Post: Viene effettuata una ricerca di OggettoBulk compatibili con il bulk specificato.
* La ricerca deve essere effettuata utilizzando le clausole specificate da "clausole".
* L'operazione di lettura viene effettuata con una FetchPolicy il cui nome è
* ottenuto concatenando il nome della component con la stringa ".find"
*
* @param uc lo UserContext che ha generato la richiesta
* @param clausole Una CompoundFindClause che descrive l'albero di clausole
* da applicare nella ricerca
* @param bulk l'OggettoBulk che è stato usato come prototipo per la generazione
* delle clausole di ricerca.
* @return Un RemoteIterator sul risultato della ricerca
*/
public it.cnr.jada.util.RemoteIterator cerca(UserContext userContext, it.cnr.jada.persistency.sql.CompoundFindClause clausole, OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
try {
if (bulk instanceof SelezionaSospesiCNRBulk)
return iterator(userContext,
select(userContext, clausole, bulk),
SospesoBulk.class,
getFetchPolicyName("find"));
else if (bulk instanceof ListaSospesiBulk)
return iterator(userContext,
select(userContext, clausole, bulk),
SospesoBulk.class,
getFetchPolicyName("find"));
return super.cerca(userContext, clausole, bulk);
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* creazione Sospeso
* PreCondition:
* E' stata generata la richiesta di creazione di un Sospeso e il sospeso supera la validazione
* (metodo verificaSospesoRiscontro)
* PostCondition:
* Per i Sospesi del CNR vengono resettati il cds di origine e l'unità organizzativa di
* origine e viene impostato lo stato del sospeso a INIZIALE.
* In tutti gli altri casi viene resettata l'unità organizzativa di origine, viene impostato il cds
* di origine con quello di scrivania e lo stato del sospeso a ASSOCIATO A CDS.
* Creazione di un Sospeso - errore
* PreCondition:
* la richiesta di creazione di un sospeso e' stata generata ed esiste un altro sospeso con la stessa chiave
* PostCondition:
* una ComponentException viene generata per segnalare all'utente l'impossibilità ad effettuare l'inserimento
* creazione Riscontro
* PreCondition:
* E' stata generata la richiesta di creazione di un Riscontro e il riscontro supera la validazione
* (metodo verificaSospesoRiscontro)
* PostCondition:
* Viene aggiornato l'importo del riscontro associato al documento contabile (mandato o reversale).
* Viene poi creato un dettaglio di riscontro (metodo creaDettaglioSospeso), di tipo spesa o entrata, a seconda se
* il riscontro è stato associato rispettivamente a un mandato o a una reversale
* Creazione di un Riscontro - errore
* PreCondition:
* la richiesta di creazione di un riscontro e' stata generata ed esiste un altro riscontro con la stessa chiave
* PostCondition:
* una ComponentException viene generata per segnalare all'utente l'impossibilità ad effettuare l'inserimento
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da creare
* @return OggettoBulk il Sospeso o Riscontro creato
*/
public OggettoBulk creaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
SospesoBulk sospeso = (SospesoBulk) bulk;
validaCreaConBulk(userContext, bulk);
verificaSospesoRiscontro(userContext, sospeso);
if (SospesoBulk.TI_RISCONTRO.equals(sospeso.getTi_sospeso_riscontro()))
sospeso.setIm_associato(sospeso.getIm_sospeso());
//sospeso
if (SospesoBulk.TI_SOSPESO.equals(sospeso.getTi_sospeso_riscontro())) {
SQLBuilder sql = getHome(userContext, EnteBulk.class).createSQLBuilder();
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class).fetchAll(sql).get(0);
//crea sospeso figlio
SospesoBulk figlio = new SospesoBulk();
int index = sospeso.addToSospesiFigliColl(figlio);
figlio = (SospesoBulk) sospeso.getSospesiFigliColl().get(0);
if (figlio != null)
figlio.setIm_sospeso(sospeso.getIm_sospeso());
if (!sospeso.getCd_cds().equals(ente.getCd_unita_organizzativa())) {
figlio.setCd_cds_origine(sospeso.getCd_cds());
figlio.setCd_uo_origine(null);
figlio.setStato_sospeso(SospesoBulk.STATO_SOSP_ASS_A_CDS);
}
}
makeBulkPersistent(userContext, sospeso);
if (sospeso.getTi_sospeso_riscontro().equals(SospesoBulk.TI_RISCONTRO))
creaDettaglioSospeso(userContext, sospeso);
return sospeso;
} catch (CRUDDuplicateKeyException e) {
throw handleException(new ApplicationException("Errore di chiave duplicata per Sospeso/Riscontro."));
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione Dettaglio di un riscontro (Entrata)
* PreCondition:
* E' stata generata la richiesta di creazione del dettaglio di un riscontro
* PostCondition:
* Viene creato un dettaglio d'entrata nel caso il riscontro sia stato associato a
* una Reversale (metodo creaDettaglioSospesoEtr).
* creazione Dettaglio di un riscontro (Spesa)
* PreCondition:
* E' stata generata la richiesta di creazione del dettaglio di un riscontro
* PostCondition:
* Viene creato un dettaglio di spesa nel caso il riscontro sia stato associato a
* un Mandato (metodo creaDettaglioSospesoUsc).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk SospesoBulk il riscontro corrente
*/
private void creaDettaglioSospeso(UserContext userContext, SospesoBulk sospeso) throws ComponentException {
if (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA))
creaDettaglioSospesoEtr(userContext, sospeso);
else if (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_SPESA))
creaDettaglioSospesoUsc(userContext, sospeso);
}
/**
* creazione Dettaglio di Entrata di un riscontro
* PreCondition:
* E' stata generata la richiesta di creazione del dettaglio di entrata
* di un riscontro
* PostCondition:
* Viene creato un dettaglio d'entrata del riscontro che contiene i dati
* del riscontro appena creato e viene impostato lo stato a DEFAULT.
* Viene aggiornato l'importo incassato della reversale associata al riscontro
* (metodo aggiornaIm_pagato_incassato).
* Viene aggiornato lo stato della reversale associata al riscontro
* (metodo aggiornaStatoDocContabile).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk SospesoBulk il riscontro corrente
*/
private void creaDettaglioSospesoEtr(UserContext userContext, SospesoBulk sospeso) throws ComponentException {
try {
Sospeso_det_etrBulk det_etr;
Collection result = ((SospesoHome) getHome(userContext, sospeso.getClass())).findSospeso_det_etrCollEsteso(sospeso);
for (Iterator i = result.iterator(); i.hasNext(); ) {
det_etr = (Sospeso_det_etrBulk) i.next();
if (det_etr.getPg_reversale().compareTo(sospeso.getV_man_rev().getPg_documento_cont()) == 0) {
det_etr.setStato(Sospeso_det_etrBulk.STATO_DEFAULT);
det_etr.setUser(userContext.getUser());
updateBulk(userContext, det_etr);
aggiornaIm_pagato_incassato(userContext, det_etr, sospeso.getV_man_rev());
aggiornaStatoDocContabile(userContext, det_etr, sospeso.getV_man_rev());
return;
}
}
det_etr = new Sospeso_det_etrBulk();
det_etr.setToBeCreated();
det_etr.setUser(sospeso.getUser());
det_etr.setCd_cds(sospeso.getCd_cds());
det_etr.setEsercizio(sospeso.getEsercizio());
det_etr.setPg_reversale(sospeso.getV_man_rev().getPg_documento_cont());
det_etr.setTi_entrata_spesa(sospeso.getTi_entrata_spesa());
det_etr.setTi_sospeso_riscontro(SospesoBulk.TI_RISCONTRO);
det_etr.setCd_sospeso(sospeso.getCd_sospeso());
det_etr.setIm_associato(sospeso.getIm_sospeso());
det_etr.setStato(Sospeso_det_etrBulk.STATO_DEFAULT);
det_etr.setCd_cds_reversale(sospeso.getV_man_rev().getCd_cds());
insertBulk(userContext, det_etr);
aggiornaIm_pagato_incassato(userContext, det_etr, sospeso.getV_man_rev());
aggiornaStatoDocContabile(userContext, det_etr, sospeso.getV_man_rev());
} catch (Exception e) {
throw handleException(sospeso, e);
}
}
/**
* creazione Dettaglio di Spesa di un riscontro
* PreCondition:
* E' stata generata la richiesta di creazione del dettaglio di spesa
* di un riscontro
* PostCondition:
* Viene creato un dettaglio di spesa del riscontro che contiene i dati
* del riscontro appena creato e viene impostato lo stato a DEFAULT.
* Viene aggiornato l'importo pagato del mandato associato al riscontro
* (metodo aggiornaIm_pagato_incassato).
* Viene aggiornato lo stato del mandato associato al riscontro
* (metodo aggiornaStatoDocContabile).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk SospesoBulk il riscontro corrente
*/
private void creaDettaglioSospesoUsc(UserContext userContext, SospesoBulk sospeso) throws ComponentException {
try {
Sospeso_det_uscBulk det_usc;
Collection result = ((SospesoHome) getHome(userContext, sospeso.getClass())).findSospeso_det_uscCollEsteso(sospeso);
for (Iterator i = result.iterator(); i.hasNext(); ) {
det_usc = (Sospeso_det_uscBulk) i.next();
if (det_usc.getPg_mandato().compareTo(sospeso.getV_man_rev().getPg_documento_cont()) == 0) {
det_usc.setStato(Sospeso_det_uscBulk.STATO_DEFAULT);
det_usc.setUser(userContext.getUser());
updateBulk(userContext, det_usc);
aggiornaIm_pagato_incassato(userContext, det_usc, sospeso.getV_man_rev());
aggiornaStatoDocContabile(userContext, det_usc, sospeso.getV_man_rev());
return;
}
}
det_usc = new Sospeso_det_uscBulk();
det_usc.setToBeCreated();
det_usc.setUser(sospeso.getUser());
det_usc.setCd_cds(sospeso.getCd_cds());
det_usc.setEsercizio(sospeso.getEsercizio());
det_usc.setPg_mandato(sospeso.getV_man_rev().getPg_documento_cont());
det_usc.setTi_entrata_spesa(SospesoBulk.TIPO_SPESA);
det_usc.setTi_sospeso_riscontro(SospesoBulk.TI_RISCONTRO);
det_usc.setCd_sospeso(sospeso.getCd_sospeso());
det_usc.setIm_associato(sospeso.getIm_sospeso());
det_usc.setStato(Sospeso_det_uscBulk.STATO_DEFAULT);
det_usc.setCd_cds_mandato(sospeso.getV_man_rev().getCd_cds());
insertBulk(userContext, det_usc);
aggiornaIm_pagato_incassato(userContext, det_usc, sospeso.getV_man_rev());
aggiornaStatoDocContabile(userContext, det_usc, sospeso.getV_man_rev());
} catch (Exception e) {
throw handleException(sospeso, e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative alle Reversali
*
* @return ReversaleComponentSession l'istanza di ReversaleComponentSession che serve per gestire una reversale
*/
private ReversaleComponentSession createReversaleComponentSession() throws ComponentException {
try {
return (ReversaleComponentSession) EJBCommonServices.createEJB("CNRDOCCONT00_EJB_ReversaleComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* eliminazione Sospeso
* PreCondition:
* E' stata generata la richiesta di eliminare un sospeso e il sospeso supera la validazione
* (metodo validaEliminaConBulk)
* PostCondition:
* Viene impostato il flag stornato del sospeso a TRUE.
* eliminazione Riscontro
* PreCondition:
* E' stata generata la richiesta di eliminare un riscontro e il riscontro supera la validazione
* (metodo validaEliminaConBulk)
* PostCondition:
* Viene impostato il flag stornato del riscontro a TRUE.
* Viene annullato l'eventuale dettaglio del riscontro che sta per essere cancellato
* (metodo annullaDettaglioSospeso)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da cancellare
*/
public void eliminaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
SospesoBulk sospeso = (SospesoBulk) bulk;
validaEliminaConBulk(userContext, sospeso);
sospeso.setFl_stornato(Boolean.TRUE);
sospeso.setDt_storno(DateUtils.truncate(EJBCommonServices.getServerDate()));
sospeso.setUser(userContext.getUser());
updateBulk(userContext, sospeso);
//annullo anche i figli
SospesoBulk figlio;
for (Iterator i = sospeso.getSospesiFigliColl().iterator(); i.hasNext(); ) {
figlio = (SospesoBulk) i.next();
figlio.setFl_stornato(Boolean.TRUE);
figlio.setDt_storno(DateUtils.truncate(EJBCommonServices.getServerDate()));
figlio.setUser(sospeso.getUser());
updateBulk(userContext, figlio);
}
if (SospesoBulk.TI_RISCONTRO.equals(sospeso.getTi_sospeso_riscontro()))
annullaDettaglioSospeso(userContext, sospeso);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private Timestamp getDataOdierna(it.cnr.jada.UserContext userContext) throws ComponentException {
try {
return getHome(userContext, SospesoBulk.class).getServerDate();
} catch (it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(ex);
}
}
/**
* inizializzazione di una istanza di SospesoBulk
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di SospesoBulk
* PostCondition:
* Vengono impostati l'esercizio con l'esercizio di scrivania, il flag
* stornato a FALSE, il cds e il cds origine rispettivamente con il cds
* e il cds origine di scrivania, l'importo associato a documenti contabili
* e l'importo associato a modello 1210 a 0, la data di registrazione con la
* data del Server
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da inizializzare per l'inserimento
* @return sospeso OggettoBulk il sospeso o riscontro inizializzato per l'inserimento
*/
public OggettoBulk inizializzaBulkPerInserimento(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
bulk = super.inizializzaBulkPerInserimento(userContext, bulk);
SospesoBulk sospeso = (SospesoBulk) bulk;
sospeso.setEsercizio(((CNRUserContext) userContext).getEsercizio());
sospeso.setFl_stornato(new Boolean(false));
sospeso.setCds((CdsBulk) getHome(userContext, CdsBulk.class).findByPrimaryKey(new CdsBulk(((CNRUserContext) userContext).getCd_cds())));
verificaStatoEsercizio(userContext, sospeso.getEsercizio(), sospeso.getCd_cds());
/* ?????
sospeso.setCd_cds_origine( ((CNRUserContext) userContext ).getCd_cds());
*/
// sospeso.setCd_uo_origine( ((CNRUserContext) userContext).getCd_unita_organizzativa());
sospeso.setIm_associato(new BigDecimal(0));
sospeso.setIm_ass_mod_1210(new BigDecimal(0));
sospeso.setDt_registrazione(DateServices.getDt_valida(userContext));
return sospeso;
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* inizializzazione di una istanza di SospesoBulk per modifica
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di SospesoBulk
* PostCondition:
* Viene caricata la collezione dei dettagli d'entrata o di spesa del riscontro
* (rispettivamente Sospeso_det_etrBulk e Sospeso_det_uscBulk) e delle
* associazioni mandato-reversale( Ass_mandato_reversaleBulk).
* inizializzazione di una istanza di SospesoBulk per modifica - errore dettaglio d'Entrata
* PreCondition:
* E' stata richiesta l'inizializzazione di un riscontro d'entrata
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare che non è stata
* associata nessuna reversale al riscontro
* inizializzazione di una istanza di SospesoBulk per modifica - errore associazione mandato-reversale
* PreCondition:
* E' stata richiesta l'inizializzazione di un riscontro d'entrata
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare che non esiste
* nessuna associazione mandato-reversale per il riscontro
* inizializzazione di una istanza di SospesoBulk per modifica - errore dettaglio di Spesa
* PreCondition:
* E' stata richiesta l'inizializzazione di un riscontro di spesa
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare che non è stato
* associato nessun mandato al riscontro
* inizializzazione di una istanza di SospesoBulk per modifica - errore associazione mandato-reversale
* PreCondition:
* E' stata richiesta l'inizializzazione di un riscontro di spesa
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare che non esiste
* nessuna associazione mandato-reversale per il riscontro
* inizializzazione di una istanza di Sospeso CNR per modifica
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di Sospeso d'Entrata CNR
* PostCondition:
* Viene caricato il sospeso CNR con i relativi accertamenti e
* reversali ad esso associati. Sono inoltre visualizzate le unità organizzative
* che hanno utilizzato il sospeso e la voce di bilancio CNR degli accertamenti
* imputati.
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da inizializzare per la modifica
* @return sospeso OggettoBulk il sospeso o riscontro inizializzato per la modifica
*/
public OggettoBulk inizializzaBulkPerModifica(UserContext aUC, OggettoBulk bulk) throws ComponentException {
SospesoBulk sospeso = (SospesoBulk) super.inizializzaBulkPerModifica(aUC, bulk);
try {
if (sospeso.getTi_sospeso_riscontro().equals(SospesoBulk.TI_RISCONTRO)) {
SospesoHome sospesoHome = (SospesoHome) getHome(aUC, sospeso.getClass());
if (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA)) {
//carico i sospesi associati alla reversale selezionata
List result = (List) sospesoHome.findSospeso_det_etrColl(sospeso);
if (result.size() != 1)
throw new ApplicationException("Non è stata associata nessuna reversale al riscontro.");
sospeso.setDettaglio_etr((Sospeso_det_etrBulk) result.get(0));
V_mandato_reversaleBulk man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(sospeso.getEsercizio(), Numerazione_doc_contBulk.TIPO_REV, sospeso.getCd_cds(), sospeso.getDettaglio_etr().getPg_reversale()));
if (man_rev == null)
throw new ApplicationException("Non è stata associata nessuna reversale al riscontro.");
sospeso.setV_man_rev(man_rev);
sospeso.setManRevRiportato(isAssocRiscontroEntrataDocContAnnullabile(aUC, sospeso));
} else if (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_SPESA)) {
//carico i sospesi associati al mandato selezionato
List result = (List) sospesoHome.findSospeso_det_uscColl(sospeso);
if (result.size() != 1)
throw new ApplicationException("Non è stato associato nessun mandato al riscontro.");
sospeso.setDettaglio_usc((Sospeso_det_uscBulk) result.get(0));
V_mandato_reversaleBulk man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(sospeso.getEsercizio(), Numerazione_doc_contBulk.TIPO_MAN, sospeso.getCd_cds(), sospeso.getDettaglio_usc().getPg_mandato()));
if (man_rev == null)
throw new ApplicationException("Non è stato associato nessun mandato al riscontro.");
sospeso.setV_man_rev(man_rev);
sospeso.setManRevRiportato(isAssocRiscontroSpesaDocContAnnullabile(aUC, sospeso));
}
} else if (sospeso.getTi_sospeso_riscontro().equals(SospesoBulk.TI_SOSPESO)) {
//carico la lista dei sospesi figli
sospeso.setSospesiFigliColl(new BulkList(((SospesoHome) getHome(aUC, SospesoBulk.class)).findSospesiFigliColl(aUC, sospeso)));
//carico la lista delle reversali e degli accertamenti associati al sospeso
if (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA)) {
SQLBuilder sql = getHome(aUC, V_sospeso_rev_accertBulk.class).createSQLBuilder();
sql.setDistinctClause(true);
sql.addSQLClause("AND", "esercizio", SQLBuilder.EQUALS, sospeso.getEsercizio());
sql.addSQLClause("AND", "cd_cds", SQLBuilder.EQUALS, sospeso.getCd_cds());
sql.addSQLClause("AND", "ti_sospeso_riscontro", SQLBuilder.EQUALS, sospeso.getTi_sospeso_riscontro());
sql.addSQLClause("AND", "ti_entrata_spesa", SQLBuilder.EQUALS, sospeso.getTi_entrata_spesa());
sql.addSQLClause("AND", "cd_sospeso_padre", SQLBuilder.EQUALS, sospeso.getCd_sospeso());
sospeso.setReversaliAccertamentiColl(getHome(aUC, V_sospeso_rev_accertBulk.class).fetchAll(sql));
} else {
//carico la lista dei mandati e degli impegni associati al sospeso
SQLBuilder sql = getHome(aUC, V_sospeso_man_impBulk.class).createSQLBuilder();
sql.setDistinctClause(true);
sql.addSQLClause("AND", "esercizio", SQLBuilder.EQUALS, sospeso.getEsercizio());
sql.addSQLClause("AND", "cd_cds", SQLBuilder.EQUALS, sospeso.getCd_cds());
sql.addSQLClause("AND", "ti_sospeso_riscontro", SQLBuilder.EQUALS, sospeso.getTi_sospeso_riscontro());
sql.addSQLClause("AND", "ti_entrata_spesa", SQLBuilder.EQUALS, sospeso.getTi_entrata_spesa());
sql.addSQLClause("AND", "cd_sospeso_padre", SQLBuilder.EQUALS, sospeso.getCd_sospeso());
sospeso.setMandatiImpegniColl(getHome(aUC, V_sospeso_man_impBulk.class).fetchAll(sql));
SQLBuilder sql1210 = getHome(aUC, Lettera_pagam_esteroBulk.class).createSQLBuilder();
sql1210.setDistinctClause(true);
sql1210.addSQLClause("AND", "esercizio", SQLBuilder.EQUALS, sospeso.getEsercizio());
sql1210.addSQLClause("AND", "cd_cds_sospeso", SQLBuilder.EQUALS, sospeso.getCd_cds());
sql1210.addSQLClause("AND", "ti_sospeso_riscontro", SQLBuilder.EQUALS, sospeso.getTi_sospeso_riscontro());
sql1210.addSQLClause("AND", "ti_entrata_spesa", SQLBuilder.EQUALS, sospeso.getTi_entrata_spesa());
sql1210.addSQLClause("AND", "cd_sospeso", SQLBuilder.CONTAINS, sospeso.getCd_sospeso());
sospeso.setLettereColl(getHome(aUC, Lettera_pagam_esteroBulk.class).fetchAll(sql1210));
}
}
} catch (Exception e) {
throw handleException(sospeso, e);
}
return sospeso;
}
/**
* inizializzazione di una istanza di SospesoBulk per ricerca
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di SospesoBulk per ricerca
* PostCondition:
* Viene inizializzata l'istanza di SospesoBulk, impostando l'esercizio e il cds
* rispettivamente con l'esercizio e il cds di scrivania e flag stornato a FALSE.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da inizializzare per la ricerca
* @return sospeso OggettoBulk il sospeso o riscontro inizializzato per la ricerca
*/
public OggettoBulk inizializzaBulkPerRicerca(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
bulk = super.inizializzaBulkPerRicerca(userContext, bulk);
if (bulk instanceof SospesoBulk) {
SospesoBulk sospeso = (SospesoBulk) bulk;
sospeso.setEsercizio(((CNRUserContext) userContext).getEsercizio());
sospeso.setFl_stornato(new Boolean(false));
sospeso.setCds((CdsBulk) getHome(userContext, CdsBulk.class).findByPrimaryKey(new CdsBulk(((CNRUserContext) userContext).getCd_cds())));
// sospeso.setCd_cds_origine( ((CNRUserContext) userContext ).getCd_cds());
// sospeso.setCd_uo_origine( ((CNRUserContext) userContext).getCd_unita_organizzativa());
}
/*
else if ( bulk instanceof ListaSospesiBulk )
{
Unita_organizzativa_enteBulk uoEnte = (Unita_organizzativa_enteBulk)getHome( userContext, Unita_organizzativa_enteBulk.class).findAll().get(0);
if (!((CNRUserContext) userContext).getCd_unita_organizzativa().equals( uoEnte.getCd_unita_organizzativa()))
throw new ApplicationException("Funzione non consentita per utente non abilitato a " + uoEnte.getCd_unita_organizzativa() );
((ListaSospesiBulk) bulk).setSospesi_cnrColl( ((SospesoHome)getHome( userContext, SospesoBulk.class)).findSospesiCNR( ((CNRUserContext)userContext).getEsercizio()));
}
*/
return bulk;
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* inizializzazione di una istanza di SospesoBulk per ricerca libera
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di SospesoBulk per ricerca libera
* PostCondition:
* Viene inizializzata l'istanza di SospesoBulk, impostando l'esercizio e il cds
* rispettivamente con l'esercizio e il cds di scrivania e flag stornato a FALSE.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da inizializzare per la ricerca libera
* @return sospeso OggettoBulk il sospeso o riscontro inizializzato per la ricerca libera
*/
public OggettoBulk inizializzaBulkPerRicercaLibera(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
bulk = super.inizializzaBulkPerRicerca(userContext, bulk);
SospesoBulk sospeso = (SospesoBulk) bulk;
sospeso.setEsercizio(((CNRUserContext) userContext).getEsercizio());
sospeso.setFl_stornato(new Boolean(false));
sospeso.setCds((CdsBulk) getHome(userContext, CdsBulk.class).findByPrimaryKey(new CdsBulk(((CNRUserContext) userContext).getCd_cds())));
// sospeso.setCd_cds_origine( ((CNRUserContext) userContext ).getCd_cds());
// sospeso.setCd_uo_origine( ((CNRUserContext) userContext).getCd_unita_organizzativa());
return sospeso;
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_riscontriVBulk stampa) throws it.cnr.jada.comp.ComponentException {
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setTi_entrata_spesa(Stampa_sospesi_riscontriVBulk.TIPO_ENTRATA_SPESA);
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_sospesi_cnr_assoc_cdsVBulk stampa) throws it.cnr.jada.comp.ComponentException {
String cd_cds_scrivania = CNRUserContext.getCd_cds(userContext);
stampa.setCd_cds(cd_cds_scrivania);
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setTi_entrata_spesa(Stampa_sospesi_riscontriVBulk.TIPO_ENTRATA_SPESA);
try {
CdsHome cds_home = (CdsHome) getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk) cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
if (cds_scrivania.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)) {
stampa.setIsCdsEnte(true);
stampa.setCdsForPrint(new CdsBulk());
} else {
stampa.setIsCdsEnte(false);
}
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_sospesi_cnr_assoc_manVBulk stampa) throws it.cnr.jada.comp.ComponentException {
String cd_cds_scrivania = CNRUserContext.getCd_cds(userContext);
stampa.setCd_cds(cd_cds_scrivania);
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
try {
CdsHome cds_home = (CdsHome) getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk) cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
if (cds_scrivania.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)) {
stampa.setIsCdsEnte(true);
stampa.setCdsForPrint(new CdsBulk());
} else {
stampa.setIsCdsEnte(false);
}
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_sospesi_cnr_assoc_revVBulk stampa) throws it.cnr.jada.comp.ComponentException {
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
String cd_uo = CNRUserContext.getCd_unita_organizzativa(userContext);
try {
Unita_organizzativaHome uoHome = (Unita_organizzativaHome) getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uo = (Unita_organizzativaBulk) uoHome.findByPrimaryKey(new Unita_organizzativaBulk(cd_uo));
if (!uo.isUoCds()) {
stampa.setUoForPrint(uo);
stampa.setIsUOForPrintEnabled(false);
} else {
stampa.setUoForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(true);
}
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_sospesi_da_assegnareVBulk stampa) throws it.cnr.jada.comp.ComponentException {
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
// Se l'esercizio di scrivania < esercizio attuale, imposta dt_fine = 31/12 dell'esercizio
// di scrivania; altrimenti la dt_fine = data odierna.
try {
if (DateServices.isAnnoMaggEsScriv(userContext)) {
stampa.setDataFine(DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
} else {
stampa.setDataFine(getDataOdierna(userContext));
}
} catch (javax.ejb.EJBException e) {
throw handleException(e);
}
stampa.setTi_entrata_spesa(Stampa_sospesi_riscontriVBulk.TIPO_ENTRATA_SPESA);
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_sospesiVBulk stampa) throws it.cnr.jada.comp.ComponentException {
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setTi_entrata_spesa(Stampa_sospesi_riscontriVBulk.TIPO_ENTRATA_SPESA);
}
/**
* inizializzaBulkPerStampa method comment.
*/
public it.cnr.jada.bulk.OggettoBulk inizializzaBulkPerStampa(UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_riscontriVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_riscontriVBulk) bulk);
else if (bulk instanceof Stampa_sospesiVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_sospesiVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_revVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_sospesi_cnr_assoc_revVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_cdsVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_sospesi_cnr_assoc_cdsVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_manVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_sospesi_cnr_assoc_manVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_da_assegnareVBulk)
inizializzaBulkPerStampa(userContext, (Stampa_sospesi_da_assegnareVBulk) bulk);
return bulk;
}
/**
*
*/
protected boolean isAssocRiscontroEntrataDocContAnnullabile(UserContext userContext, SospesoBulk riscontro) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select b.riportato " +
"from reversale_riga a, accertamento b " +
"where " +
"a.cd_cds = b.cd_cds and " +
"a.esercizio_accertamento = b.esercizio and " +
"a.esercizio_ori_accertamento = b.esercizio_originale and " +
"a.pg_accertamento = b.pg_accertamento and " +
"a.esercizio = ? and " +
"a.cd_cds = ? and " +
"a.pg_reversale = ? ", true, this.getClass());
try {
ps.setObject(1, riscontro.getV_man_rev().getEsercizio());
ps.setString(2, riscontro.getV_man_rev().getCd_cds());
ps.setObject(3, riscontro.getV_man_rev().getPg_documento_cont());
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
String riportato = rs.getString(1);
return (!"N".equals(riportato));
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
return true;
}
/**
*
*/
protected boolean isAssocRiscontroSpesaDocContAnnullabile(UserContext userContext, SospesoBulk riscontro) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select b.riportato " +
"from mandato_riga a, obbligazione b " +
"where " +
"a.cd_cds = b.cd_cds and " +
"a.esercizio_obbligazione = b.esercizio and " +
"a.esercizio_ori_obbligazione = b.esercizio_originale and " +
"a.pg_obbligazione = b.pg_obbligazione and " +
"a.esercizio = ? and " +
"a.cd_cds = ? and " +
"a.pg_mandato = ? ", true, this.getClass());
try {
ps.setObject(1, riscontro.getV_man_rev().getEsercizio());
ps.setString(2, riscontro.getV_man_rev().getCd_cds());
ps.setObject(3, riscontro.getV_man_rev().getPg_documento_cont());
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
//int esercizio = rs.getInt(1);
//String cd_cds = rs.getString(2);
//long pg_obbligazione = rs.getLong(3);
//String fl_pgiro = rs.getString(4);
String riportato = rs.getString(1);
return (!"N".equals(riportato));
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
return true;
}
/**
* Controllo se l'esercizio di scrivania e' aperto per il Cds specificato
*
* Nome: Controllo chiusura esercizio
* Pre: E' stata richiesta l'assegnazione di un sospeso ad un Cds
* Post: Viene chiamata una stored procedure che restituisce
* - 'Y' se il campo stato della tabella CHIUSURA_COEP vale C
* - 'N' altrimenti
* Se l'esercizio e' chiuso e' impossibile proseguire
*
* @param userContext UserContext
* @return boolean : TRUE se stato = C
* FALSE altrimenti
*/
private boolean isEsercizioChiusoFor(UserContext userContext, String cd_cds) throws ComponentException {
try {
Integer esercizio = CNRUserContext.getEsercizio(userContext);
EsercizioHome home = (EsercizioHome) getHome(userContext, EsercizioBulk.class);
return home.isEsercizioChiuso(userContext, esercizio, cd_cds);
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(e);
}
}
/**
* modifica Sospeso
* PreCondition:
* E' stata generata la richiesta di modifica di un Sospeso e il sospeso supera la validazione
* (metodo verificaSospesoRiscontro)
* PostCondition:
* Vengono aggiornate le eventuali modifiche alla descrizione o alla causale del sospeso
* modifica Riscontro
* PreCondition:
* E' stata generata la richiesta di modifica di un Riscontro e il riscontro supera la validazione
* (metodo verificaSospesoRiscontro)
* PostCondition:
* Nel caso il documento contabile (mandato o reversale) inserito dall'utente sia diverso da quello
* precedentemente associato al riscontro, viene annullato il dettaglio di spesa o d'entrata del
* doc. contabile precedente (metodo annullaDettaglioSospeso) e viene creato un nuovo dettaglio di
* riscontro (metodo creaDettaglioSospeso).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da modificare
* @return sospeso OggettoBulk il sospeso o riscontro modificato
*/
public OggettoBulk modificaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
SospesoBulk sospeso = (SospesoBulk) bulk;
if (SospesoBulk.TI_SOSPESO.equals(sospeso.getTi_sospeso_riscontro()) &&
sospeso.getSospesiFigliColl().size() == 0)
throw new ApplicationException("Deve essere definito almeno un dettaglio.");
if (sospeso.isToBeUpdated()) {
//se il sospeso è stato modificato, aggiorno anche i figli
SospesoBulk figlio;
for (Iterator i = sospeso.getSospesiFigliColl().iterator(); i.hasNext(); ) {
figlio = (SospesoBulk) i.next();
figlio.setCausale(sospeso.getCausale());
figlio.setDs_anagrafico(sospeso.getDs_anagrafico());
figlio.setToBeUpdated();
}
}
verificaSospesoRiscontro(userContext, sospeso);
makeBulkPersistent(userContext, sospeso);
if (sospeso.getTi_sospeso_riscontro().equals(SospesoBulk.TI_RISCONTRO)) {
if ((sospeso.getDettaglio_etr() != null && sospeso.getDettaglio_etr().getPg_reversale().compareTo(
sospeso.getV_man_rev().getPg_documento_cont()) != 0) ||
(sospeso.getDettaglio_usc() != null && sospeso.getDettaglio_usc().getPg_mandato().compareTo(
sospeso.getV_man_rev().getPg_documento_cont()) != 0)) {
annullaDettaglioSospeso(userContext, sospeso);
creaDettaglioSospeso(userContext, sospeso);
}
}
return sospeso;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca eseguite su sospesi o riscontri
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di un sospeso
* Pre: E' stata generata la richiesta di ricerca di un sospeso
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente
*
* Nome: Richiesta di ricerca di un riscontro
* Pre: E' stata generata la richiesta di ricerca di un riscontro
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, se l'
* utente ha valorizzato il campo del codice relativo al documento contabile, viene eseguita una ricerca
* in join sulle rispettive tabelle di dettaglio d'entrata o di spesa del riscontro, a seconda che l'utente
* abbia inserito il codice di una reversale o di un mandato
*
* Nome: Richiesta di ricerca di un riscontro - errore
* Pre: E' stata generata la richiesta di ricerca di un riscontro e l'utente ha inserito un codice di documento
* contabile non esistente nel database
* Post: Un messaggio di errore viene visualizzato all'utente per segnalare che non esiste nessun documento
* contabile (mandato o reversale) con tale codice
*
* Nome: Richiesta di ricerca di un riscontro - errore
* Pre: E' stata generata la richiesta di ricerca di un riscontro e l'utente ha inserito un codice di documento
* contabile corrispondente a più documenti contabili
* Post: Un messaggio di errore viene visualizzato all'utente per segnalare che esistono più documenti
* contabili con tale codice
*
* @param userContext lo userContext che ha generato la richiesta
* @param clauses clausole di ricerca gia' specificate dall'utente
* @param bulk istanza di SospesoBulk che deve essere utilizzata per la ricerca
* @return sql Query con le clausole aggiuntive
*/
public Query select(UserContext userContext, CompoundFindClause clauses, OggettoBulk bulk) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
if (bulk instanceof SospesoBulk) {
SospesoBulk sospeso = (SospesoBulk) bulk;
SQLBuilder sql = (SQLBuilder) super.select(userContext, clauses, sospeso);
sql.addSQLClause("AND", "cd_sospeso_padre", SQLBuilder.ISNULL, null);
if (sospeso.getV_man_rev() != null && sospeso.getV_man_rev().getPg_documento_cont() != null) {
if (sospeso.getV_man_rev().getCrudStatus() != OggettoBulk.NORMAL) {
CompoundFindClause clause = sospeso.getV_man_rev().buildFindClauses(null);
//SospesoHome sHome = (SospesoHome) getHome( userContext, sospeso.getClass());
V_mandato_reversaleHome vHome = (V_mandato_reversaleHome) getHome(userContext, V_mandato_reversaleBulk.class);
SQLBuilder sql2 = selectV_man_rev_for_searchByClause(userContext, sospeso, sospeso.getV_man_rev(), clause);
List result = vHome.fetchAll(sql2);
if (result.size() == 0) {
if (SospesoBulk.TIPO_ENTRATA.equals(sospeso.getTi_entrata_spesa()))
throw new ApplicationException(" Non esiste nessuna reversale con progressivo " + sospeso.getV_man_rev().getPg_documento_cont());
else if (SospesoBulk.TIPO_SPESA.equals(sospeso.getTi_entrata_spesa()))
throw new ApplicationException(" Non esiste nessun mandato con progressivo " + sospeso.getV_man_rev().getPg_documento_cont());
else
throw new ApplicationException(" Non esiste nessuna mandato/reversale con progressivo " + sospeso.getV_man_rev().getPg_documento_cont());
} else if (result.size() > 1)
throw new ApplicationException(" Esistono più documenti contabili con progressivo " + sospeso.getV_man_rev().getPg_documento_cont());
sospeso.setV_man_rev((V_mandato_reversaleBulk) result.get(0));
}
if (sospeso.getV_man_rev().getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_MAN)) {
sql.addTableToHeader("SOSPESO_DET_USC");
sql.addSQLJoin("SOSPESO_DET_USC.ESERCIZIO", "SOSPESO.ESERCIZIO");
sql.addSQLJoin("SOSPESO_DET_USC.CD_CDS", "SOSPESO.CD_CDS");
sql.addSQLJoin("SOSPESO_DET_USC.TI_ENTRATA_SPESA", "SOSPESO.TI_ENTRATA_SPESA");
sql.addSQLJoin("SOSPESO_DET_USC.TI_SOSPESO_RISCONTRO", "SOSPESO.TI_SOSPESO_RISCONTRO");
sql.addSQLJoin("SOSPESO_DET_USC.CD_SOSPESO", "SOSPESO.CD_SOSPESO");
sql.addSQLClause("AND", "SOSPESO_DET_USC.PG_MANDATO", SQLBuilder.EQUALS, sospeso.getV_man_rev().getPg_documento_cont());
} else if (sospeso.getV_man_rev().getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV)) {
sql.addTableToHeader("SOSPESO_DET_ETR");
sql.addSQLJoin("SOSPESO_DET_ETR.ESERCIZIO", "SOSPESO.ESERCIZIO");
sql.addSQLJoin("SOSPESO_DET_ETR.CD_CDS", "SOSPESO.CD_CDS");
sql.addSQLJoin("SOSPESO_DET_ETR.TI_ENTRATA_SPESA", "SOSPESO.TI_ENTRATA_SPESA");
sql.addSQLJoin("SOSPESO_DET_ETR.TI_SOSPESO_RISCONTRO", "SOSPESO.TI_SOSPESO_RISCONTRO");
sql.addSQLJoin("SOSPESO_DET_ETR.CD_SOSPESO", "SOSPESO.CD_SOSPESO");
sql.addSQLClause("AND", "SOSPESO_DET_ETR.PG_REVERSALE", SQLBuilder.EQUALS, sospeso.getV_man_rev().getPg_documento_cont());
}
}
return sql;
} else if (bulk instanceof SelezionaSospesiCNRBulk) {
SelezionaSospesiCNRBulk seleziona = (SelezionaSospesiCNRBulk) bulk;
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class).findAll().get(0);
if (((CNRUserContext) userContext).getCd_cds().equals(ente.getCd_unita_organizzativa()))
throw new ApplicationException("La ricerca è abilitata solo per i CDS");
SQLBuilder sql = getHome(userContext, SospesoBulk.class).createSQLBuilder();
sql.addSQLClause("AND", "esercizio", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getEsercizio());
sql.addSQLClause("AND", "cd_cds", SQLBuilder.EQUALS, ente.getCd_unita_organizzativa());
sql.addSQLClause("AND", "fl_stornato", SQLBuilder.EQUALS, "N");
sql.addSQLClause("AND", "ti_sospeso_riscontro", SQLBuilder.EQUALS, SospesoBulk.TI_SOSPESO);
sql.addSQLClause("AND", "IM_SOSPESO - IM_ASSOCIATO", SQLBuilder.GREATER, new java.math.BigDecimal(0));
sql.addSQLClause("AND", "IM_ASS_MOD_1210", SQLBuilder.EQUALS, new java.math.BigDecimal(0));
if (seleziona.getTi_entrata_spesa().equals(SelezionaSospesiCNRBulk.TIPO_ENTRATA))
sql.addSQLClause("AND", "ti_entrata_spesa", SQLBuilder.EQUALS, SospesoBulk.TIPO_ENTRATA);
else if (seleziona.getTi_entrata_spesa().equals(SelezionaSospesiCNRBulk.TIPO_SPESA))
sql.addSQLClause("AND", "ti_entrata_spesa", SQLBuilder.EQUALS, SospesoBulk.TIPO_SPESA);
sql.openParenthesis("AND");
int nrClausoleStato = 0;
if (seleziona.getRicercaSospesiAssegnati().booleanValue()) {
if (nrClausoleStato == 0)
sql.openParenthesis("AND");
else
sql.openParenthesis("OR");
sql.addClause("AND", "stato_sospeso", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_ASS_A_CDS);
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_cds());
sql.closeParenthesis();
nrClausoleStato++;
}
if (seleziona.getRicercaSospesiInSospeso().booleanValue()) {
if (nrClausoleStato == 0)
sql.openParenthesis("AND");
else
sql.openParenthesis("OR");
sql.addClause("AND", "stato_sospeso", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_IN_SOSPESO);
sql.addClause("AND", "cd_cds_origine", SQLBuilder.ISNULL, null);
sql.closeParenthesis();
}
if (seleziona.getRicercaSospesiInSospesoSelezionati().booleanValue()) {
if (nrClausoleStato == 0)
sql.openParenthesis("AND");
else
sql.openParenthesis("OR");
sql.addClause("AND", "stato_sospeso", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_IN_SOSPESO);
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_cds());
sql.closeParenthesis();
}
sql.closeParenthesis();
return sql;
} else if (bulk instanceof ListaSospesiBulk) {
SQLBuilder sql = (SQLBuilder) selectForListaSospesi(userContext, clauses, bulk);
//sql.addSQLClause( "AND", "sospeso.fl_stornato", SQLBuilder.EQUALS, "N" );
return sql;
}
return null;
}
private Query selectForListaSospesi(UserContext userContext, CompoundFindClause clauses, OggettoBulk bulk) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
Unita_organizzativa_enteBulk uoEnte = (Unita_organizzativa_enteBulk) getHome(userContext, Unita_organizzativa_enteBulk.class).findAll().get(0);
if (!((CNRUserContext) userContext).getCd_unita_organizzativa().equals(uoEnte.getCd_unita_organizzativa()))
throw new ApplicationException("Funzione non consentita per utente non abilitato a " + uoEnte.getCd_unita_organizzativa());
verificaStatoEsercizio(userContext, ((CNRUserContext) userContext).getEsercizio(), ((CNRUserContext) userContext).getCd_cds());
// ((ListaSospesiBulk) bulk).setSospesi_cnrColl( ((SospesoHome)getHome( userContext, SospesoBulk.class)).findSospesiCNR( ((CNRUserContext)userContext).getEsercizio()));
SQLBuilder sql = getHome(userContext, SospesoBulk.class).createSQLBuilder();
sql.addClause(clauses);
sql.addSQLClause("AND", "sospeso.esercizio", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getEsercizio());
sql.addSQLClause("AND", "sospeso.cd_cds", SQLBuilder.EQUALS, uoEnte.getCd_unita_padre());
// sql.addSQLClause( "AND", "sospeso.fl_stornato", sql.EQUALS, "N" );
// sql.addSQLClause( "AND", "sospeso.ti_entrata_spesa", sql.EQUALS, SospesoBulk.TIPO_ENTRATA );
sql.addSQLClause("AND", "sospeso.ti_sospeso_riscontro", SQLBuilder.EQUALS, SospesoBulk.TI_SOSPESO);
// sql.addSQLClause( "AND", "stato_sospeso", sql.EQUALS, SospesoBulk.STATO_SOSP_INIZIALE );
sql.addTableToHeader("V_SOSPESO_IM_FIGLI");
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.esercizio", "SOSPESO.ESERCIZIO");
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.cd_cds", "SOSPESO.cd_cds");
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.ti_sospeso_riscontro", "SOSPESO.ti_sospeso_riscontro");
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.ti_entrata_spesa", "SOSPESO.ti_entrata_spesa");
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.cd_sospeso", "SOSPESO.cd_sospeso");
return sql;
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca dei Centri di Spesa
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di un Cds da associare a Sospesi d'Entrata CNR
* Pre: E' stata generata la richiesta di ricerca di un Cds da associare a Sospesi d'Entrata CNR
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole specificate dall'utente.
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk istanza di ListaSospesiBulk
* @param cds istanza di CdsBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con le clausole aggiuntive
*/
public SQLBuilder selectCdsByClause(UserContext userContext, ListaSospesiBulk bulk, CdsBulk cds, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, cds.getClass()).createSQLBuilder();
sql.addClause(clauses);
return sql;
}
public SQLBuilder selectMandatoRiaccreditoByClause(UserContext userContext, SospesoBulk bulk, MandatoBulk mandatoBulk, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
MandatoIHome mandatoHome = Optional.ofNullable(getHome(userContext, MandatoIBulk.class))
.filter(MandatoIHome.class::isInstance)
.map(MandatoIHome.class::cast)
.orElseThrow(() -> new ComponentException("Home del mandato non trovata!"));
SQLBuilder sql = mandatoHome.createSQLBuilder();
sql.addClause(FindClause.AND, "esercizio", SQLBuilder.EQUALS, bulk.getEsercizio());
sql.addClause(FindClause.AND, "cds", SQLBuilder.EQUALS, bulk.getCds_origine());
sql.addClause(FindClause.AND, "dt_trasmissione", SQLBuilder.LESS_EQUALS, bulk.getDt_registrazione());
sql.addClause(FindClause.AND, "esitoOperazione", SQLBuilder.EQUALS, EsitoOperazione.PAGATO.value());
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sul Cds
*
* Nome: Richiesta di ricerca di un Cds
* Pre: E' stata generata la richiesta di ricerca di un Cds. Il Cds di scrivania è di tipo ENTE
* Post: Viene restituito l'SQLBuilder
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk l'OggettoBulk che rappresenta il contesto della ricerca.
* @param cds l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
**/
public SQLBuilder selectCdsForPrintByClause(UserContext userContext, Stampa_sospesi_cnr_assoc_cdsVBulk bulk, CdsBulk cds, CompoundFindClause clauses) throws ComponentException {
SQLBuilder sql = getHome(userContext, CdsBulk.class).createSQLBuilder();
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sul Cds
*
* Nome: Richiesta di ricerca di un Cds
* Pre: E' stata generata la richiesta di ricerca di un Cds. Il Cds di scrivania è di tipo ENTE
* Post: Viene restituito l'SQLBuilder
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
**/
public SQLBuilder selectCdsForPrintByClause(UserContext userContext, Stampa_sospesi_cnr_assoc_manVBulk bulk, CdsBulk cds, CompoundFindClause clauses) throws ComponentException {
SQLBuilder sql = getHome(userContext, CdsBulk.class).createSQLBuilder();
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
**/
public SQLBuilder selectUoForPrintByClause(UserContext userContext, Stampa_sospesi_cnr_assoc_revVBulk bulk, Unita_organizzativaBulk uo, CompoundFindClause clauses) throws ComponentException {
// Recupera il Cd_Cds di scrivania
String cd_cds_scrivania = it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cds(userContext);
CdsHome cds_home = (CdsHome) getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania;
try {
// Costruisce il CdsBulk di scrivania
cds_scrivania = (CdsBulk) cds_home.findByPrimaryKey(new CdsBulk(cd_cds_scrivania));
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw handleException(pe);
}
Unita_organizzativaHome home = (Unita_organizzativaHome) getHome(userContext, Unita_organizzativaBulk.class);
SQLBuilder sql;
// Verifica se il Cds di scrivania è di tipo ENTE
if (cds_scrivania.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)) {
sql = home.createSQLBuilderEsteso();
} else {
sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", SQLBuilder.EQUALS, bulk.getCd_cds());
}
sql.addClause(clauses);
return sql;
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca dei documenti contabili (reversale o mandato)
* che si possono associare al riscontro
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di un Documento Contabile
* Pre: E' stata generata la richiesta di ricerca di un documento contabile (reversale o mandato)
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che il doc. contabile, sia esso una reversale o un mandato, abbia l'esercizio, il cds e l'unità
* organizzativa rispettivamente come l'esercizio, il cds e l'unità organizzativa di scrivania,
* che NON sia di tipo a regolamento sospeso o di regolarizzazione, che abbia lo stato a EMESSO e che
* rispetti la condizione che la differenza tra il suo importo e l'importo incassato o pagato sia maggiore di 0.
*
* Nome: Richiesta di ricerca di una Reversale
* Pre: E' stata generata la richiesta di ricerca di una reversale
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la reversale abbia l'esercizio, il cds e l'unità organizzativa rispettivamente come
* l'esercizio, il cds e l'unità organizzativa di scrivania, che NON sia di tipo a regolamento sospeso
* o di regolarizzazione, che abbia lo stato a EMESSO e che rispetti la condizione che la differenza tra
* il suo importo e l'importo incassato sia maggiore di 0.
*
* Nome: Richiesta di ricerca di un Mandato
* Pre: E' stata generata la richiesta di ricerca di un mandato
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che il mandato abbia l'esercizio, il cds e l'unità organizzativa rispettivamente come
* l'esercizio, il cds e l'unità organizzativa di scrivania, che NON sia di tipo a regolamento sospeso
* o di regolarizzazione, che abbia lo stato a EMESSO e che rispetti la condizione che la differenza tra
* il suo importo e l'importo pagato sia maggiore di 0.
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk istanza di SospesoBulk
* @param v_man_rev istanza di V_mandato_reversaleBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con le clausole aggiuntive
*/
public SQLBuilder selectV_man_rev_for_searchByClause(UserContext userContext, SospesoBulk bulk, V_mandato_reversaleBulk v_man_rev, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, V_mandato_reversaleBulk.class).createSQLBuilder();
/*
* Se il sospeso è di tipo entrata, eseguo il caricamento delle reversali
* Se il sospeso è di tipo spesa, eseguo il caricamento dei mandati
* Se non definisco il tipo di sospeso, eseguo indistintamente il caricamento
* di reversali e di mandati
*/
if (bulk.getTi_entrata_spesa() != null && (bulk.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA))) // sospeso di tipo entrata: ricerca reversali
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.EQUALS, Numerazione_doc_contBulk.TIPO_REV);
else if (bulk.getTi_entrata_spesa() != null && (bulk.getTi_entrata_spesa().equals(SospesoBulk.TIPO_SPESA))) // sospeso di tipo spesa: ricerca mandati
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.EQUALS, Numerazione_doc_contBulk.TIPO_MAN);
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, bulk.getEsercizio());
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, bulk.getCd_cds());
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_unita_organizzativa());
/* SIMONA 24/9/2002 --- anche ai mandati/reversali a regolamento sospeso e' necessario associare i riscontri */
/* sql.addClause( "AND", "ti_documento_cont", sql.NOT_EQUALS, MandatoBulk.TIPO_REGOLAM_SOSPESO ); */
sql.addClause("AND", "ti_documento_cont", SQLBuilder.NOT_EQUALS, MandatoBulk.TIPO_REGOLARIZZAZIONE);
sql.addSQLClause("AND", "im_pagato_incassato > 0");
// sql.addClause( "AND", "stato", sql.EQUALS, MandatoBulk.STATO_MANDATO_EMESSO );
// sql.addSQLClause( "AND", "im_documento_cont - im_pagato_incassato > 0");
/* SIMONA 10/2/2003 --- aggiunta clausola sulla dt_trasmissione per errore 469*/
// sql.addSQLClause( "AND", "dt_trasmissione" , sql.ISNOTNULL, null );
sql.addClause(clauses);
return sql;
}
/*
* Aggiunge alcune clausole a tutte le operazioni di ricerca dei documenti contabili (reversale o mandato)
* che si possono associare al riscontro
*
* Pre-post-conditions:
*
* Nome: Richiesta di ricerca di un Documento Contabile
* Pre: E' stata generata la richiesta di ricerca di un documento contabile (reversale o mandato)
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che il doc. contabile, sia esso una reversale o un mandato, abbia l'esercizio, il cds e l'unità
* organizzativa rispettivamente come l'esercizio, il cds e l'unità organizzativa di scrivania,
* che NON sia di tipo a regolamento sospeso o di regolarizzazione, che abbia lo stato a EMESSO e che
* rispetti la condizione che la differenza tra il suo importo e l'importo incassato o pagato sia maggiore di 0.
*
* Nome: Richiesta di ricerca di una Reversale
* Pre: E' stata generata la richiesta di ricerca di una reversale
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che la reversale abbia l'esercizio, il cds e l'unità organizzativa rispettivamente come
* l'esercizio, il cds e l'unità organizzativa di scrivania, che NON sia di tipo a regolamento sospeso
* o di regolarizzazione, che abbia lo stato a EMESSO e che rispetti la condizione che la differenza tra
* il suo importo e l'importo incassato sia maggiore di 0.
*
* Nome: Richiesta di ricerca di un Mandato
* Pre: E' stata generata la richiesta di ricerca di un mandato
* Post: Viene restituito il SQLBuilder con l'elenco delle clausole selezionate dall'utente e, in aggiunta, le
* clausole che il mandato abbia l'esercizio, il cds e l'unità organizzativa rispettivamente come
* l'esercizio, il cds e l'unità organizzativa di scrivania, che NON sia di tipo a regolamento sospeso
* o di regolarizzazione, che abbia lo stato a EMESSO e che rispetti la condizione che la differenza tra
* il suo importo e l'importo pagato sia maggiore di 0.
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk istanza di SospesoBulk
* @param v_man_rev istanza di V_mandato_reversaleBulk che deve essere utilizzata per la ricerca
* @param clauses clausole di ricerca gia' specificate dall'utente
* @return il SQLBuilder con le clausole aggiuntive
*/
public SQLBuilder selectV_man_revByClause(UserContext userContext, SospesoBulk bulk, V_mandato_reversaleBulk v_man_rev, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, V_mandato_reversaleBulk.class).createSQLBuilder();
/*
* Se il sospeso è di tipo entrata, eseguo il caricamento delle reversali
* Se il sospeso è di tipo spesa, eseguo il caricamento dei mandati
* Se non definisco il tipo di sospeso, eseguo indistintamente il caricamento
* di reversali e di mandati
*/
if (bulk.getTi_entrata_spesa() != null && (bulk.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA))) // sospeso di tipo entrata: ricerca reversali
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.EQUALS, Numerazione_doc_contBulk.TIPO_REV);
else if (bulk.getTi_entrata_spesa() != null && (bulk.getTi_entrata_spesa().equals(SospesoBulk.TIPO_SPESA))) // sospeso di tipo spesa: ricerca mandati
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.EQUALS, Numerazione_doc_contBulk.TIPO_MAN);
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, bulk.getEsercizio());
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, bulk.getCd_cds());
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_unita_organizzativa());
/* SIMONA 24/9/2002 --- anche ai mandati/reversali a regolamento sospeso e' necessario associare i riscontri */
/* sql.addClause( "AND", "ti_documento_cont", sql.NOT_EQUALS, MandatoBulk.TIPO_REGOLAM_SOSPESO ); */
sql.addClause("AND", "ti_documento_cont", SQLBuilder.NOT_EQUALS, MandatoBulk.TIPO_REGOLARIZZAZIONE);
// sql.addClause( "AND", "cd_uo_origine", sql.EQUALS, bulk.getCd_uo_origine() );
sql.addClause("AND", "stato", SQLBuilder.EQUALS, MandatoBulk.STATO_MANDATO_EMESSO);
sql.addSQLClause("AND", "im_documento_cont - im_pagato_incassato > 0");
/* SIMONA 10/2/2003 --- aggiunta clausola sulla dt_trasmissione per errore 469*/
sql.addSQLClause("AND", "dt_trasmissione", SQLBuilder.ISNOTNULL, null);
sql.addClause(clauses);
return sql;
}
/**
* stampaConBulk method comment.
*/
public it.cnr.jada.bulk.OggettoBulk stampaConBulk(it.cnr.jada.UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_riscontriVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_riscontriVBulk) bulk);
else if (bulk instanceof Stampa_sospesiVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_sospesiVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_cdsVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_sospesi_cnr_assoc_cdsVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_revVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_sospesi_cnr_assoc_revVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_cnr_assoc_manVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_sospesi_cnr_assoc_manVBulk) bulk);
else if (bulk instanceof Stampa_sospesi_da_assegnareVBulk)
validateBulkForPrintSospesi_Riscontri(userContext, (Stampa_sospesi_da_assegnareVBulk) bulk);
return bulk;
}
/**
* Tutti controlli superati
* PreCondition:
* Il sospeso non è associato a nessun documento contabile
* PostCondition:
* Il sospeso è valido. E' consentito eseguire l'attività di eliminazione.
* Documento contabile associato è una Reversale
* PreCondition:
* Il sospeso è stata associato a una reversale e si vuole procedere alla sua cancellazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il sospeso è associato ad una reversale.
* L'attività di eliminazione del sospeso non è consentita.
* Documento contabile associato è un Mandato
* PreCondition:
* Il sospeso è stato associato a un mandato e si vuole procedere alla sua cancellazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il sospeso è associato ad un mandato.
* L'attività di eliminazione del sospeso non è consentita.
* Documento contabile associato è una Lettera 1210
* PreCondition:
* Il sospeso è stato associato a una Lettera 1210 e si vuole procedere alla sua cancellazione
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che il sospeso è associato ad una Lettera 1210,
* poichè l'importo associato del sospeso è maggiore di 0. L'attività di eliminazione del sospeso non è
* consentita.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il sospeso o riscontro da validare, prima di procedere alla cancellazione
*/
protected void validaEliminaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
SospesoBulk sospeso = (SospesoBulk) bulk;
try {
if (SospesoBulk.TI_SOSPESO.equals(sospeso.getTi_sospeso_riscontro())) {
/*
if ( sospeso.TIPO_ENTRATA.equals( sospeso.getTi_entrata_spesa()) )
{
Collection result = ((SospesoHome)getHome( userContext, SospesoBulk.class )).findSospeso_det_etrColl( sospeso );
if ( result.size() > 0 )
throw new ApplicationException(" Annullamento impossibile! Il sospeso e' associato alla Reversale " + ((Sospeso_det_etrBulk) result.iterator().next()).getPg_reversale());
}
else if ( sospeso.TIPO_SPESA.equals( sospeso.getTi_entrata_spesa()) )
{
Collection result = ((SospesoHome)getHome( userContext, SospesoBulk.class )).findSospeso_det_uscColl( sospeso );
if ( result.size() > 0 )
throw new ApplicationException(" Annullamento impossibile! Il sospeso e' associato al Mandato " + ((Sospeso_det_uscBulk) result.iterator().next()).getPg_mandato());
}
if( sospeso.getIm_ass_mod_1210().compareTo(new BigDecimal(0)) != 0 )
throw new ApplicationException(" Annullamento impossibile! Il sospeso e' associato ad una Lettera di Pagamento Estero.");
*/
/*se il sospeso o uno dei suoi figli è stato associato a mandati/reversali/lettere 1210 */
if (sospeso.isAssociato())
throw new ApplicationException(" Annullamento impossibile! Il sospeso e' associato ad un documento contabile o ad una Lettera di Pagamento Estero.");
}
if (SospesoBulk.TI_RISCONTRO.equals(sospeso.getTi_sospeso_riscontro()))
if (SospesoBulk.TIPO_SPESA.equals(sospeso.getTi_entrata_spesa()))
verificaAnnullabilitaRiscontroSpesa(userContext, sospeso);
else
verificaAnnullabilitaRiscontroEntrata(userContext, sospeso);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrintSospesi_Riscontri(it.cnr.jada.UserContext userContext, Stampa_sospesi_da_assegnareVBulk stampa) throws ComponentException {
try {
Timestamp dataOdierna = getDataOdierna(userContext);
/**** Controlli sulle Date DA A *****/
if (stampa.getDataInizio() == null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine() == null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
// La Data di Inizio Periodo è superiore alla data di Fine Periodo
if (stampa.getDataInizio().compareTo(stampa.getDataFine()) > 0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
// La Data di Inizio Periodo è ANTECEDENTE al 1 Gennaio dell'Esercizio di scrivania
if (stampa.getDataInizio().compareTo(firstDayOfYear) < 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di INIZIO PERIODO non può essere inferiore a " + formatter.format(firstDayOfYear));
}
try {
if (DateServices.isAnnoMaggEsScriv(userContext)) {
Timestamp lastDayOfYear = DateServices.getLastDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
// L'esercizio di scrivania è minore dell'esercizio attuale:
// la Data di Fine periodo deve essere inferiore o uguale al 31/12 dell'esercizio
// di scrivania.
if (stampa.getDataFine().compareTo(lastDayOfYear) > 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(lastDayOfYear));
}
} else {
// La Data di Fine periodo è SUPERIORE alla data odierna
if (stampa.getDataFine().compareTo(dataOdierna) > 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(dataOdierna));
}
}
} catch (javax.ejb.EJBException e) {
throw handleException(e);
}
} catch (ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrintSospesi_Riscontri(it.cnr.jada.UserContext userContext, Stampa_sospesi_riscontriVBulk stampa) throws ComponentException {
try {
Timestamp dataOdierna = getDataOdierna(userContext);
/**** Controlli sulle Date DA A *****/
if (stampa.getDataInizio() == null)
throw new ValidationException("Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine() == null)
throw new ValidationException("Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices.getFirstDayOfYear(CNRUserContext.getEsercizio(userContext).intValue());
// La Data di Inizio Periodo è superiore alla data di Fine Periodo
if (stampa.getDataInizio().compareTo(stampa.getDataFine()) > 0)
throw new ValidationException("La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
// La Data di Inizio Periodo è ANTECEDENTE al 1 Gennaio dell'Esercizio di scrivania
if (stampa.getDataInizio().compareTo(firstDayOfYear) < 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di INIZIO PERIODO non può essere inferiore a " + formatter.format(firstDayOfYear));
}
// La Data di Fine periodo è SUPERIORE alla data odierna
if (stampa.getDataFine().compareTo(dataOdierna) > 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ValidationException("La DATA di FINE PERIODO non può essere superiore a " + formatter.format(dataOdierna));
}
} catch (ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* name: riscontro di entrata annullabile 1
* pre: il riscontro di entrata è associato ad una reversale che paga accertamenti (non su pgiro) non riportati all'esercizio successivo
* post: il riscontro supera la validazione e può essere annullato
*
* name: riscontro di entrata annullabile 2
* pre: il riscontro di entrata è associato ad una reversale che paga accertamenti su pgiro non riportati all'esercizio successivo
* anche la controparte in parte spese delle partite di giro non è stata riportata all'esercizio successsivo (metodo 'verificaAnnulabilitaRiscontroEntrataPGiro')
* post: il riscontro supera la validazione e può essere annullato
*
* name: riscontro di entrata - errore 1
* pre: il riscontro di entrata è associato ad una reversale che paga accertamenti (su pgiro o non) riportati all'esercizio successivo
* post: una segnalazione di errore viene sollevata per indicare all'utente l'impossibilità di procedere con l'annullamento
*
* name: riscontro di entrata - errore 2
* pre: il riscontro di entrata è associato ad una reversale che paga accertamenti su pgiro non riportati all'esercizio successivo
* però la controparte in parte spese delle partite di giro è stata riportata all'esercizio successsivo (metodo 'verificaAnnulabilitaRiscontroEntrataPGiro')
* post: una segnalazione di errore viene sollevata per indicare all'utente l'impossibilità di procedere con l'annullamento
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riscontro SospesoBulk di tipo riscontro da validare, prima di procedere alla cancellazione
*/
protected void verificaAnnullabilitaRiscontroEntrata(UserContext userContext, SospesoBulk riscontro) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select a.esercizio, A.cd_cds, a.esercizio_ori_accertamento, a.pg_accertamento, b.fl_pgiro, b.riportato " +
"from reversale_riga a, accertamento b " +
"where " +
// "b.riportato = ? and " +
"a.cd_cds = b.cd_cds and " +
"a.esercizio_accertamento = b.esercizio and " +
"a.esercizio_ori_accertamento = b.esercizio_originale and " +
"a.pg_accertamento = b.pg_accertamento and " +
"a.esercizio = ? and " +
"a.cd_cds = ? and " +
"a.pg_reversale = ? ", true, this.getClass());
try {
// ps.setString(1, "Y");
ps.setObject(1, riscontro.getV_man_rev().getEsercizio());
ps.setString(2, riscontro.getV_man_rev().getCd_cds());
ps.setObject(3, riscontro.getV_man_rev().getPg_documento_cont());
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
int esercizio = rs.getInt(1);
String cd_cds = rs.getString(2);
int esercizio_ori_accertamento = rs.getInt(3);
long pg_accertamento = rs.getLong(4);
String fl_pgiro = rs.getString(5);
String riportato = rs.getString(6);
if ("Y".equals(riportato))
throw new ApplicationException("Annullamento impossibile perchè l'accertamento " + esercizio_ori_accertamento + "/" + pg_accertamento +
" del Cds " + cd_cds + " con esercizio " + esercizio +
" è già stato riportato all'esercizio successivo");
else if ("Y".equals(fl_pgiro))
verificaAnnullabilitaRiscontroEntrataPGiro(userContext, esercizio, cd_cds, esercizio_ori_accertamento, pg_accertamento);
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* @param userContext lo UserContext che ha generato la richiesta
* @param riscontro SospesoBulk di tipo riscontro da validare, prima di procedere alla cancellazione
*/
protected void verificaAnnullabilitaRiscontroEntrataPGiro(UserContext userContext, int esercizio, String cd_cds, int esercizio_ori_accertamento, long pg_accertamento) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select d.esercizio, d.cd_cds, d.esercizio_originale, d.pg_obbligazione, d.riportato " +
"from accertamento b, ass_obb_acr_pgiro c, obbligazione d " +
"where " +
// "b.riportato = ? and " +
"b.cd_cds = ? and " +
"b.esercizio = ? and " +
"b.esercizio_originale = ? and " +
"b.pg_accertamento = ? and " +
"b.cd_cds = c.CD_CDS and " +
"b.esercizio = c.esercizio and " +
"b.esercizio_originale = c.esercizio_ori_accertamento and " +
"b.pg_accertamento = c.PG_accertamento and " +
"d.cd_cds = c.CD_CDS and " +
"d.esercizio = c.esercizio and " +
"d.esercizio_originale = c.esercizio_ori_obbligazione and " +
"d.pg_obbligazione = c.PG_obbligazione", true, this.getClass());
try {
// ps.setString(1, "Y");
ps.setString(1, cd_cds);
ps.setObject(2, new Integer(esercizio));
ps.setObject(3, new Integer(esercizio_ori_accertamento));
ps.setObject(4, new Long(pg_accertamento));
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
int es = rs.getInt(1);
String cds = rs.getString(2);
int esOri = rs.getInt(3);
long pg_obbligazione = rs.getLong(4);
String riportato = rs.getString(5);
if ("Y".equals(riportato))
throw new ApplicationException("Annullamento impossibile perchè l'impegno " + esOri + "/" + pg_obbligazione +
" del Cds " + cds + " con esercizio " + es +
" è già stata riportata all'esercizio successivo");
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* name: riscontro di spesa annullabile 1
* pre: il riscontro di spesa è associato ad un mandato che paga obbligazioni (non su pgiro) non riportate all'esercizio successivo
* post: il riscontro supera la validazione e può essere annullato
*
* name: riscontro di spesa annullabile 2
* pre: il riscontro di spesa è associato ad un mandato che paga obbligazioni su pgiro non riportate all'esercizio successivo
* anche la controparte in parte entrate delle partite di giro non è stata riportata all'esercizio successsivo (metodo 'verificaAnnulabilitaRiscontroSpesaPGiro')
* post: il riscontro supera la validazione e può essere annullato
*
* name: riscontro di spesa - errore 1
* pre: il riscontro di spesa è associato ad un mandato che paga obbligazioni (su pgiro o non) riportate all'esercizio successivo
* post: una segnalazione di errore viene sollevata per indicare all'utente l'impossibilità di procedere con l'annullamento
*
* name: riscontro di spesa - errore 2
* pre: il riscontro di spesa è associato ad un mandato che paga obbligazioni su pgiro non riportate all'esercizio successivo
* però la controparte in parte entrate delle partite di giro è stata riportata all'esercizio successsivo (metodo 'verificaAnnulabilitaRiscontroSpesaPGiro')
* post: una segnalazione di errore viene sollevata per indicare all'utente l'impossibilità di procedere con l'annullamento
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riscontro SospesoBulk di tipo riscontro da validare, prima di procedere alla cancellazione
*/
protected void verificaAnnullabilitaRiscontroSpesa(UserContext userContext, SospesoBulk riscontro) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select a.esercizio, A.cd_cds, a.esercizio_ori_obbligazione, a.pg_obbligazione, b.fl_pgiro, b.riportato " +
"from mandato_riga a, obbligazione b " +
"where " +
// "b.riportato = ? and " +
"a.cd_cds = b.cd_cds and " +
"a.esercizio_obbligazione = b.esercizio and " +
"a.esercizio_ori_obbligazione = b.esercizio_originale and " +
"a.pg_obbligazione = b.pg_obbligazione and " +
"a.esercizio = ? and " +
"a.cd_cds = ? and " +
"a.pg_mandato = ? ", true, this.getClass());
try {
// ps.setString(1, "Y");
ps.setObject(1, riscontro.getV_man_rev().getEsercizio());
ps.setString(2, riscontro.getV_man_rev().getCd_cds());
ps.setObject(3, riscontro.getV_man_rev().getPg_documento_cont());
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
int esercizio = rs.getInt(1);
String cd_cds = rs.getString(2);
int esercizio_originale = rs.getInt(3);
long pg_obbligazione = rs.getLong(4);
String fl_pgiro = rs.getString(5);
String riportato = rs.getString(6);
if ("Y".equals(riportato))
throw new ApplicationException("Annullamento impossibile perchè l'impegno " + esercizio_originale + "/" + pg_obbligazione +
" del Cds " + cd_cds + " con esercizio " + esercizio +
" è già stata riportata all'esercizio successivo");
else if ("Y".equals(fl_pgiro))
verificaAnnullabilitaRiscontroSpesaPGiro(userContext, esercizio, cd_cds, esercizio_originale, pg_obbligazione);
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* @param userContext lo UserContext che ha generato la richiesta
* @param riscontro SospesoBulk di tipo riscontro da validare, prima di procedere alla cancellazione
*/
protected void verificaAnnullabilitaRiscontroSpesaPGiro(UserContext userContext, int esercizio, String cd_cds, int esercizio_ori_obbligazione, long pg_obbligazione) throws ComponentException {
try {
String schema = it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema();
LoggableStatement ps = null;
ps = new LoggableStatement(getConnection(userContext),
"select d.esercizio, d.cd_cds, d.esercizio_originale, d.pg_accertamento, d.riportato " +
"from obbligazione b, ass_obb_acr_pgiro c, accertamento d " +
"where " +
// "b.riportato = ? and " +
"b.cd_cds = ? and " +
"b.esercizio = ? and " +
"b.esercizio_originale = ? and " +
"b.pg_obbligazione = ? and " +
"b.cd_cds = c.CD_CDS and " +
"b.esercizio = c.esercizio and " +
"b.esercizio_originale = c.esercizio_ori_obbligazione and " +
"b.pg_obbligazione = c.PG_OBBLIGAZIONE and " +
"d.cd_cds = c.CD_CDS and " +
"d.esercizio = c.esercizio and " +
"d.esercizio_originale = c.esercizio_ori_accertamento and " +
"d.pg_accertamento = c.PG_accertamento", true, this.getClass());
try {
// ps.setString(1, "Y");
ps.setString(1, cd_cds);
ps.setObject(2, new Integer(esercizio));
ps.setObject(3, new Integer(esercizio_ori_obbligazione));
ps.setObject(4, new Long(pg_obbligazione));
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
int es = rs.getInt(1);
String cds = rs.getString(2);
int esOri = rs.getInt(3);
long pg_accertamento = rs.getLong(3);
String riportato = rs.getString(4);
if ("Y".equals(riportato))
throw new ApplicationException("Annullamento impossibile perchè l'accertamento " + esOri + "/" + pg_accertamento +
" del Cds " + cd_cds + " con esercizio " + esercizio +
" è già stato riportato all'esercizio successivo");
}
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
}
private void verificaRiscontroEntrataCNR(UserContext userContext, SospesoBulk sospeso) throws ComponentException {
try {
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class).findAll().get(0);
if (!sospeso.getCd_cds().equals(ente.getCd_unita_organizzativa()))
return;
SQLBuilder sql = getHome(userContext, BancaBulk.class).createSQLBuilder();
sql.addTableToHeader("REVERSALE_RIGA");
sql.addSQLJoin("BANCA.CD_TERZO", "REVERSALE_RIGA.CD_TERZO_UO");
sql.addSQLJoin("BANCA.pg_banca", "REVERSALE_RIGA.PG_BANCA");
sql.addSQLClause("AND", "REVERSALE_RIGA.cd_cds", SQLBuilder.EQUALS, sospeso.getV_man_rev().getCd_cds());
sql.addSQLClause("AND", "REVERSALE_RIGA.esercizio", SQLBuilder.EQUALS, sospeso.getV_man_rev().getEsercizio());
sql.addSQLClause("AND", "REVERSALE_RIGA.pg_reversale", SQLBuilder.EQUALS, sospeso.getV_man_rev().getPg_documento_cont());
List result = getHome(userContext, BancaBulk.class).fetchAll(sql);
BancaBulk banca = (BancaBulk) result.get(0);
if (banca.getTi_pagamento().equals(Rif_modalita_pagamentoBulk.BANCA_ITALIA) &&
sospeso.getTi_cc_bi().equals(SospesoBulk.TIPO_CC))
throw new ApplicationException("Attenzione! Il riscontro non proviene da Banca d'Italia mentre le modalità di pagamento della reversale sono di Banca d'Italia");
else if (!banca.getTi_pagamento().equals(Rif_modalita_pagamentoBulk.BANCA_ITALIA) &&
sospeso.getTi_cc_bi().equals(SospesoBulk.TIPO_BANCA_ITALIA))
throw new ApplicationException("Attenzione! Il riscontro proviene da Banca d'Italia mentre le modalità di pagamento della reversale sono diverse da Banca d'Italia");
} catch (Exception e) {
throw handleException(e);
}
}
private void verificaSospesiFigliPerEsercizio(UserContext aUC, SospesoBulk sospeso) throws ComponentException {
SospesoBulk figlio;
for (Iterator i = sospeso.getSospesiFigliColl().iterator(); i.hasNext(); ) {
figlio = (SospesoBulk) i.next();
if (SospesoBulk.STATO_SOSP_ASS_A_CDS.equals(figlio.getStato_sospeso()) &&
figlio.getCd_cds_origine() != null) {
if (isEsercizioChiusoFor(aUC, figlio.getCd_cds_origine())) {
throw new ApplicationException("Attenzione: l'esercizio risulta chiuso per il CdS " + figlio.getCd_cds_origine());
}
}
}
}
/**
* Tutti controlli superati
* PreCondition:
* L'importo del riscontro è uguale a quello del documento contabile associato
* Il tipo C/C-Banca d'Italia del sospeso è uguale a quello del documento contabile associato
* PostCondition:
* Il sospeso o riscontro sono validi. E' consentito eseguire l'attività di salvataggio.
* Importi dei riscontri associati allo stesso doc. contabile (Entrata)
* PreCondition:
* Alla stessa reversale sono stati associati uno o più riscontri la cui somma degli importi
* supera l'importo della reversale stessa
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la somma degli importi dei singoli riscontri
* associati alla reversale selezionata è maggiore dell'importo della reversale stessa. L'attività non è consentita.
* Importi dei riscontri associati allo stesso doc. contabile (Spesa)
* PreCondition:
* Allo stesso mandato sono stati associati uno o più riscontri la cui somma degli importi
* supera l'importo del mandato stesso
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che la somma degli importi dei singoli riscontri
* associati al mandato selezionato è maggiore dell'importo del mandato stesso. L'attività non è consentita.
* Tipo C/C-Banca d'Italia di un riscontro d'entrata
* PreCondition:
* Il tipo C/C-Banca d'Italia del riscontro è diverso da quello della reversale associata
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che non è possibile creare un riscontro per la
* Reversale associata. L'attività non è consentita. Viene inoltre chiamato il metodo verificaRiscontroEntrataCNR()
* per fare un'ulteriore verifica sulle modalità di pagamento delle righe della reversale rispetto a quelle del
* riscontro.
* Tipo C/C-Banca d'Italia di un riscontro di spesa
* PreCondition:
* Il tipo C/C-Banca d'Italia del riscontro è diverso da quello del mandato associato
* PostCondition:
* Il metodo utilizza un Throw Exception per comunicare che non è possibile creare un riscontro per il
* Mandato associato. L'attività non è consentita.
*
* @param aUC lo UserContext che ha generato la richiesta
* @param sospeso SospesoBulk il sospeso o riscontro da validare
*/
private void verificaSospesoRiscontro(UserContext aUC, SospesoBulk sospeso) throws ComponentException {
try {
EnteBulk ente = (EnteBulk) getHome(aUC, EnteBulk.class).findAll().get(0);
if (sospeso.isToBeCreated()) {
Timestamp lastDayOfTheYear = DateServices.getLastDayOfYear(sospeso.getEsercizio().intValue());
Timestamp today = it.cnr.jada.util.ejb.EJBCommonServices.getServerDate();
if (today.after(lastDayOfTheYear) &&
sospeso.getDt_registrazione().compareTo(lastDayOfTheYear) != 0)
throw new ApplicationException("La data di registrazione deve essere " +
java.text.DateFormat.getDateInstance().format(lastDayOfTheYear));
// Rospuc 08/05/2014
if (SospesoBulk.TI_RISCONTRO.equals(sospeso.getTi_sospeso_riscontro())) {
// Prefisso di numerazione automatica dei riscontri effettuati via interfaccia cassiere
if (sospeso.getCd_sospeso() != null && sospeso.getCd_sospeso().toUpperCase().startsWith("XSRC"))
throw new ApplicationException("Il campo codice può iniziare con XSRC solo per gli inserimenti automatici.");
}
}
java.math.BigDecimal totDettagli;
if (SospesoBulk.TI_RISCONTRO.equals(sospeso.getTi_sospeso_riscontro())) {
V_mandato_reversaleHome v_man_revHome = (V_mandato_reversaleHome) getHome(aUC, V_mandato_reversaleBulk.class);
List result;
if ((sospeso.getTi_entrata_spesa() != null) && (sospeso.getTi_entrata_spesa().equals(SospesoBulk.TIPO_ENTRATA))) {
if (sospeso.getDettaglio_etr() == null ||
(sospeso.getDettaglio_etr() != null &&
sospeso.getDettaglio_etr().getPg_reversale().compareTo(sospeso.getV_man_rev().getPg_documento_cont()) != 0)) {
if (sospeso.getV_man_rev().getIm_documento_cont().subtract(sospeso.getV_man_rev().getIm_pagato_incassato()).compareTo(sospeso.getIm_sospeso()) < 0)
throw handleException(new ApplicationException("Attenzione! L'importo residuo da incassare della reversale è inferiore all'importo del riscontro."));
Sospeso_det_etrHome sospeso_det_etrHome = (Sospeso_det_etrHome) getHome(aUC, Sospeso_det_etrBulk.class);
totDettagli = sospeso_det_etrHome.calcolaTotDettagli(sospeso.getV_man_rev());
totDettagli = totDettagli.add(sospeso.getIm_sospeso());
if (totDettagli.compareTo(sospeso.getV_man_rev().getIm_documento_cont()) > 0)
throw handleException(new ApplicationException("Attenzione! La somma degli importi dei riscontri associati alla reversale selezionata è maggiore dell'importo della reversale."));
result = (List) v_man_revHome.findRiscontriDiEntrata(sospeso.getV_man_rev());
if (result.size() != 0) {
if (!((SospesoBulk) result.get(0)).getTi_cc_bi().equals(sospeso.getTi_cc_bi()))
throw handleException(new ApplicationException("Attenzione! Non è possibile creare un riscontro su " + sospeso.getTi_cc_biKeys().get(sospeso.getTi_cc_bi()) + " per la Reversale " + sospeso.getV_man_rev().getPg_documento_cont()));
}
}
//poichè in V_MANDATO_REVERSALE il TI_CC_BI = 'C' sempre (non si sa il motivo!!!!!!!)
//per le reversali di liquidazione tramite F24EP non deve essere effettuato il controllo successivo
if (!(sospeso.getV_man_rev().getCd_cds().equals(ente.getCd_unita_organizzativa()) &&
sospeso.getV_man_rev().getCd_cds().equals(sospeso.getV_man_rev().getCd_cds_origine()))) {
if (sospeso.getV_man_rev().getTi_cc_bi() != null &&
!sospeso.getV_man_rev().getTi_cc_bi().equals(sospeso.getTi_cc_bi()))
throw new ApplicationException("Una reversale con sospesi di tipo " + sospeso.getTi_cc_biKeys().get(sospeso.getV_man_rev().getTi_cc_bi()) +
" non può essere associata ad un riscontro di tipo " + sospeso.getTi_cc_biKeys().get(sospeso.getTi_cc_bi()));
}
verificaRiscontroEntrataCNR(aUC, sospeso);
} else if ((sospeso.getTi_entrata_spesa() != null) && SospesoBulk.TIPO_SPESA.equals(sospeso.getTi_entrata_spesa())) {
if (sospeso.getDettaglio_usc() == null ||
(sospeso.getDettaglio_usc() != null &&
sospeso.getDettaglio_usc().getPg_mandato().compareTo(sospeso.getV_man_rev().getPg_documento_cont()) != 0)) {
if (sospeso.getV_man_rev().getIm_documento_cont().subtract(sospeso.getV_man_rev().getIm_pagato_incassato()).compareTo(sospeso.getIm_sospeso()) < 0)
throw handleException(new ApplicationException("Attenzione! L'importo residuo da pagare del mandato è inferiore all'importo del riscontro."));
Sospeso_det_uscHome sospeso_det_uscHome = (Sospeso_det_uscHome) getHome(aUC, Sospeso_det_uscBulk.class);
totDettagli = sospeso_det_uscHome.calcolaTotDettagli(sospeso.getV_man_rev());
totDettagli = totDettagli.add(sospeso.getIm_sospeso());
if (totDettagli.compareTo(sospeso.getV_man_rev().getIm_documento_cont()) > 0)
throw handleException(new ApplicationException("Attenzione! La somma degli importi dei riscontri associati al mandato selezionato è maggiore dell'importo del mandato."));
result = (List) v_man_revHome.findRiscontriDiSpesa(sospeso.getV_man_rev());
if (result.size() != 0) {
if (!((SospesoBulk) result.get(0)).getTi_cc_bi().equals(sospeso.getTi_cc_bi()))
throw handleException(new ApplicationException("Attenzione! Non è possibile creare un riscontro su " + sospeso.getTi_cc_biKeys().get(sospeso.getTi_cc_bi()) + " per il Mandato " + sospeso.getV_man_rev().getPg_documento_cont()));
}
}
if (sospeso.getV_man_rev().getTi_cc_bi() != null &&
!sospeso.getV_man_rev().getTi_cc_bi().equals(sospeso.getTi_cc_bi()))
throw new ApplicationException("Un mandato con sospesi di tipo " + sospeso.getTi_cc_biKeys().get(sospeso.getV_man_rev().getTi_cc_bi()) +
" non può essere associato ad un riscontro di tipo " + sospeso.getTi_cc_biKeys().get(sospeso.getTi_cc_bi()));
}
}
// Verifica l'Esercizio dei CdS per i figli
verificaSospesiFigliPerEsercizio(aUC, sospeso);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Verifica dello stato dell'esercizio
*
* @param userContext UserContext
* @return FALSE se per il cds interessato non è stato inserito nessun esercizio o se l'esercizio non è in stato di "aperto"
* TRUE in tutti gli altri casi
*/
protected void verificaStatoEsercizio(UserContext userContext, Integer es, String cd_cds) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
EsercizioBulk esercizio = (EsercizioBulk) getHome(userContext, EsercizioBulk.class).findByPrimaryKey(
new EsercizioBulk(cd_cds, es));
if (esercizio == null)
throw handleException(new ApplicationException("Inserimento impossibile: esercizio inesistente!"));
if (!EsercizioBulk.STATO_APERTO.equals(esercizio.getSt_apertura_chiusura()))
throw handleException(new ApplicationException("Inserimento impossibile: esercizio non aperto!"));
}
public RemoteIterator cercaSospesiPerStato(UserContext usercontext, CompoundFindClause compoundfindclause, OggettoBulk oggettobulk, String statoForSearch) throws ComponentException {
try {
SQLBuilder sql = null;
if (oggettobulk instanceof ListaSospesiBulk) {
sql = (SQLBuilder) selectForListaSospesi(usercontext, compoundfindclause, oggettobulk);
if ("ANN".equals(statoForSearch))
sql.addSQLClause(FindClause.AND, "sospeso.fl_stornato", SQLBuilder.EQUALS, "Y");
else if (!SospesoBulk.STATO_DOCUMENTO_TUTTI.equals(statoForSearch)) {
sql.addSQLClause(FindClause.AND, "sospeso.fl_stornato", SQLBuilder.EQUALS, "N");
SQLBuilder sqlExists = getHome(usercontext, SospesoBulk.class).createSQLBuilder();
sqlExists.setFromClause(sqlExists.getFromClause().append(" SOSPESO_FIGLIO"));
sqlExists.addSQLJoin("SOSPESO_FIGLIO.esercizio", "SOSPESO.esercizio");
sqlExists.addSQLJoin("SOSPESO_FIGLIO.cd_cds", "SOSPESO.cd_cds");
sqlExists.addSQLJoin("SOSPESO_FIGLIO.ti_entrata_spesa", "SOSPESO.ti_entrata_spesa");
sqlExists.addSQLJoin("SOSPESO_FIGLIO.ti_sospeso_riscontro", "SOSPESO.ti_sospeso_riscontro");
sqlExists.addSQLJoin("SOSPESO_FIGLIO.cd_sospeso_padre", "SOSPESO.cd_sospeso");
SQLBuilder sqlNotExists = getHome(usercontext, SospesoBulk.class).createSQLBuilder();
sqlNotExists.setFromClause(sqlNotExists.getFromClause().append(" SOSPESO_FIGLIO"));
sqlNotExists.addSQLJoin("SOSPESO_FIGLIO.esercizio", "SOSPESO.esercizio");
sqlNotExists.addSQLJoin("SOSPESO_FIGLIO.cd_cds", "SOSPESO.cd_cds");
sqlNotExists.addSQLJoin("SOSPESO_FIGLIO.ti_entrata_spesa", "SOSPESO.ti_entrata_spesa");
sqlNotExists.addSQLJoin("SOSPESO_FIGLIO.ti_sospeso_riscontro", "SOSPESO.ti_sospeso_riscontro");
sqlNotExists.addSQLJoin("SOSPESO_FIGLIO.cd_sospeso_padre", "SOSPESO.cd_sospeso");
if (SospesoBulk.STATO_SOSP_INIZIALE.equals(statoForSearch)) {
sqlExists.addSQLClause(FindClause.AND, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_INIZIALE);
sqlNotExists.addSQLClause(FindClause.AND, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_IN_SOSPESO);
sql.addSQLExistsClause(FindClause.AND, sqlExists);
sql.addSQLNotExistsClause(FindClause.AND, sqlNotExists);
} else if (SospesoBulk.STATO_SOSP_IN_SOSPESO.equals(statoForSearch)) {
sqlExists.addSQLClause(FindClause.AND, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_IN_SOSPESO);
sql.addSQLExistsClause(FindClause.AND, sqlExists);
} else if (SospesoBulk.STATO_SOSP_ASS_A_CDS.equals(statoForSearch)) {
sqlExists.addSQLClause(FindClause.AND, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_ASS_A_CDS);
sqlNotExists.openParenthesis(FindClause.AND);
sqlNotExists.addSQLClause(FindClause.OR, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_INIZIALE);
sqlNotExists.addSQLClause(FindClause.OR, "SOSPESO_FIGLIO.STATO_SOSPESO", SQLBuilder.EQUALS, SospesoBulk.STATO_SOSP_IN_SOSPESO);
sqlNotExists.closeParenthesis();
sql.addSQLExistsClause(FindClause.AND, sqlExists);
sql.addSQLNotExistsClause(FindClause.AND, sqlNotExists);
} else if ("LIBERO".equals(statoForSearch)) {
sql.addSQLJoin("V_SOSPESO_IM_FIGLI.IM_ASSOCIATO_FIGLI", SQLBuilder.NOT_EQUALS, "SOSPESO.IM_SOSPESO");
sqlExists.addSQLClause(FindClause.AND, "SOSPESO_FIGLIO.IM_ASS_MOD_1210", SQLBuilder.EQUALS, BigDecimal.ZERO);
sql.addSQLExistsClause(FindClause.AND, sqlExists);
}
}
} else
sql = (SQLBuilder) select(usercontext, compoundfindclause, oggettobulk);
return iterator(usercontext, sql, SospesoBulk.class, getFetchPolicyName("find"));
} catch (Throwable throwable) {
throw handleException(throwable);
}
}
}