it.cnr.contab.doccont00.comp.MandatoComponent 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.*;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBase;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBulk;
import it.cnr.contab.anagraf00.tabter.bulk.ComuneBulk;
import it.cnr.contab.anagraf00.tabter.bulk.NazioneBulk;
import it.cnr.contab.anagraf00.tabter.bulk.NazioneHome;
import it.cnr.contab.compensi00.docs.bulk.CompensoBulk;
import it.cnr.contab.compensi00.docs.bulk.ConguaglioBulk;
import it.cnr.contab.compensi00.docs.bulk.ConguaglioHome;
import it.cnr.contab.config00.bulk.Codici_siopeBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrHome;
import it.cnr.contab.config00.bulk.Parametri_cnrBulk;
import it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession;
import it.cnr.contab.config00.esercizio.bulk.EsercizioBulk;
import it.cnr.contab.config00.pdcfin.bulk.Voce_fBulk;
import it.cnr.contab.config00.sto.bulk.*;
import it.cnr.contab.docamm00.docs.bulk.*;
import it.cnr.contab.docamm00.ejb.DocumentoGenericoComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaPassivaComponentSession;
import it.cnr.contab.docamm00.tabrif.bulk.DivisaBulk;
import it.cnr.contab.doccont00.core.bulk.*;
import it.cnr.contab.doccont00.ejb.AccertamentoAbstractComponentSession;
import it.cnr.contab.doccont00.ejb.AccertamentoComponentSession;
import it.cnr.contab.doccont00.ejb.ReversaleComponentSession;
import it.cnr.contab.doccont00.ejb.SaldoComponentSession;
import it.cnr.contab.doccont00.intcass.bulk.V_mandato_reversaleBulk;
import it.cnr.contab.doccont00.tabrif.bulk.CupBulk;
import it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloBulk;
import it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloHome;
import it.cnr.contab.missioni00.docs.bulk.AnticipoBulk;
import it.cnr.contab.prevent00.bulk.Voce_f_saldi_cdr_lineaBulk;
import it.cnr.contab.preventvar00.bulk.Var_bilancioBulk;
import it.cnr.contab.preventvar00.bulk.Var_bilancioHome;
import it.cnr.contab.preventvar00.ejb.VarBilancioComponentSession;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.contab.utenze00.bulk.Utente_indirizzi_mailBulk;
import it.cnr.contab.utenze00.bulk.Utente_indirizzi_mailHome;
import it.cnr.contab.util.ApplicationMessageFormatException;
import it.cnr.contab.util.Utility;
import it.cnr.contab.util.enumeration.EsitoOperazione;
import it.cnr.contab.util.enumeration.StatoVariazioneSostituzione;
import it.cnr.contab.util00.ejb.ProcedureComponentSession;
import it.cnr.jada.DetailedRuntimeException;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.*;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.comp.ICRUDMgr;
import it.cnr.jada.comp.IPrintMgr;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.sql.*;
import it.cnr.jada.util.Config;
import it.cnr.jada.util.SendMail;
import it.cnr.jada.util.ejb.EJBCommonServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MandatoComponent extends it.cnr.jada.comp.CRUDComponent implements
IMandatoMgr, ICRUDMgr, IPrintMgr, Cloneable, Serializable {
public final static String INSERIMENTO_MANDATO_ACTION = "I";
public final static String ANNULLAMENTO_MANDATO_ACTION = "A";
public final static String MODIFICA_MANDATO_ACTION = "M";
public final static String VSX_PROC_NAME = "CNRCTB037.vsx_man_acc";
private transient static final Logger logger = LoggerFactory.getLogger(MandatoComponent.class);
public static final int DS_MANDATO_MAX_LENGTH = 300;
// @@<< CONSTRUCTORCST
public MandatoComponent() {
// >>
// << CONSTRUCTORCSTL
/* Default constructor */
// >>
// << CONSTRUCTORCSTT
}
/**
* creazione riga PreCondition: E' stata creata una nuova riga di mandato
* PostCondition: Vengono recuperati dai dettagli della scadenza
* dell'obbligazione, associata alla riga del mandato, le voci del piano i
* cui saldi devono essere incrementati e viene richiesto alla component che
* gestisce i saldi di effettuare l'aggiornamento delle voci e di verificare
* la disponibilità di cassa per ogni voce modifica riga - annullamento
* PreCondition: E' stata modificata una riga di mandato e lo stato del
* mandato e' annullato PostCondition: Vengono recuperati dai dettagli della
* scadenza dell'obbligazione, associata alla riga del mandato, le voci del
* piano i cui saldi devono essere decrementati e viene richiesto alla
* component che gestisce i saldi di effettuare l'aggiornamento delle voci
* modifica riga - modifica modalità pagamento PreCondition: E' stata
* modificata una riga di mandato, ma il suo importo non e' stato modificato
* PostCondition: Nessun aggiornamento all'importo dei saldi viene
* effettuato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga del mandato da
* modificare
* @param session SaldoComponentSession
*/
/*
* esegue il check di disponibilita di cassa e aggiorna il capitolo saldo
* **Mandato Accreditamento ***** riga.crudStatus = - TO_BE_CREATED alla
* creazione - TO_BE_UPDATED all' annullamento (2) o alla modifica delle
* modalità di pagamento (3) - TO_BE_DELETED mai**Mandato Pagamento *****
* riga.crudStatus = - TO_BE_CREATED alla creazione - TO_BE_UPDATED
* all'annullamento (2) o alla modifica delle modalità di pagamento (3) -
* TO_BE_DELETED mai
*/
protected void aggiornaCapitoloSaldoRiga(UserContext aUC,
Mandato_rigaBulk riga, SaldoComponentSession session)
throws ComponentException {
try {
Mandato_rigaBulk rigaDaDB = null;
Voce_fBulk voce;
java.math.BigDecimal importo, prc;
boolean flConsumo;
if (!riga.isToBeCreated() && !riga.isToBeUpdated()
&& !riga.isToBeDeleted())
return;
if (riga.isToBeUpdated() || riga.isToBeDeleted()) { // rileggo la
// riga dal db
// per vedere se
// e' stato
// modificato
// l'importo
// (29/10/2003 12.40.38) Giorgio Massussi
// Sostituito getHome() con getTempHome() perchè se arrivo da
// annullaMandato può essere che la
// riga del mandato sia stata appena caricata da db e
// successivamente modificata; se uso
// la stessa HomeCache la rilettura mi seppellisce le modifiche!
rigaDaDB = (Mandato_rigaBulk) getTempHome(aUC, riga.getClass())
.findByPrimaryKey(riga);
// non e' stato modificato l'importo della riga e non si tratta
// di un annullamento --> non aggiorno i saldi
if (riga.isToBeUpdated()
&& !riga.isFl_aggiorna_saldi_per_annullamento() && // caso
// 3
rigaDaDB.getIm_mandato_riga().compareTo(
riga.getIm_mandato_riga()) == 0)
return;
}
/* ricerco l'obbligazione */
ObbligazioneBulk obbligazione = (ObbligazioneBulk) getHome(aUC,
ObbligazioneBulk.class).findByPrimaryKey(
new ObbligazioneBulk(riga.getCd_cds(), riga
.getEsercizio_obbligazione(), riga
.getEsercizio_ori_obbligazione(), riga
.getPg_obbligazione()));
/* ricerco la scadenza */
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk) getHome(
aUC, Obbligazione_scadenzarioBulk.class).findByPrimaryKey(
new Obbligazione_scadenzarioBulk(riga.getCd_cds(), riga
.getEsercizio_obbligazione(), riga
.getEsercizio_ori_obbligazione(), riga
.getPg_obbligazione(), riga
.getPg_obbligazione_scadenzario()));
/*
* /* calcolo la percentuale di ripartizione if (
* scadenza.getIm_scadenza().compareTo( new BigDecimal(0)) != 0 )
* prc = riga.getIm_mandato_riga().divide(
* scadenza.getIm_scadenza(), 8,BigDecimal.ROUND_HALF_UP); else
* prc = new java.math.BigDecimal(0);
*/
/* verifico se sono a consumo o a copertura completa */
flConsumo = scadenza.getIm_scadenza().compareTo(riga.getIm_mandato_riga()) != 0;
/* ricerco le scad_voce */
Obbligazione_scad_voceBulk osv = new Obbligazione_scad_voceBulk();
osv.setEsercizio(riga.getEsercizio_obbligazione());
osv.setCd_cds(riga.getCd_cds());
osv.setEsercizio_originale(riga.getEsercizio_ori_obbligazione());
osv.setPg_obbligazione(riga.getPg_obbligazione());
osv.setPg_obbligazione_scadenzario(riga
.getPg_obbligazione_scadenzario());
List result = getHome(aUC, Obbligazione_scad_voceBulk.class).find(
osv);
// per ogni scad_voce recupero il capitolo
for (Iterator i = result.iterator(); i.hasNext(); ) {
osv = (Obbligazione_scad_voceBulk) i.next();
if (flConsumo)
importo = riga.getIm_mandato_riga();
else
importo = osv.getIm_voce();
/*
* importo = osv.getIm_voce().multiply( prc );
*/
voce = new Voce_fBulk(osv.getCd_voce(), osv.getEsercizio(), osv
.getTi_appartenenza(), osv.getTi_gestione());
if (riga.isToBeDeleted()) {
session.aggiornaMandatiReversali(aUC, voce,
osv.getCd_cds(), importo.negate(), riga
.getMandato().getTi_competenza_residuo());
/*
* Aggiorno i Saldi per CDR/Linea
*/
session
.aggiornaMandatiReversali(
aUC,
osv.getCd_centro_responsabilita(),
osv.getCd_linea_attivita(),
voce,
obbligazione.getEsercizio_originale(),
importo.negate(),
obbligazione
.isObbligazioneResiduoImproprio() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO
: Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO);
} else if (riga.isToBeUpdated()) {
if (riga.isFl_aggiorna_saldi_per_annullamento()) { // caso 2
session.aggiornaMandatiReversali(aUC, voce, osv
.getCd_cds(), importo.negate(), riga
.getMandato().getTi_competenza_residuo());
/*
* Aggiorno i Saldi per CDR/Linea
*/
session
.aggiornaMandatiReversali(
aUC,
osv.getCd_centro_responsabilita(),
osv.getCd_linea_attivita(),
voce,
obbligazione.getEsercizio_originale(),
importo.negate(),
obbligazione
.isObbligazioneResiduoImproprio() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO
: Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO);
}
} else if (riga.isToBeCreated()) {
session.aggiornaMandatiReversali(aUC, voce,
osv.getCd_cds(), importo, riga.getMandato()
.getTi_competenza_residuo(), !riga
.getFl_pgiro().booleanValue());
/*
* Aggiorno i Saldi per CDR/Linea
*/
session
.aggiornaMandatiReversali(
aUC,
osv.getCd_centro_responsabilita(),
osv.getCd_linea_attivita(),
voce,
obbligazione.getEsercizio_originale(),
importo,
obbligazione
.isObbligazioneResiduoImproprio() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO
: Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO,
!riga.getFl_pgiro().booleanValue());
}
}
riga.setFl_aggiorna_saldi_per_annullamento(false);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga PreCondition: E' stata creata una nuova riga di mandato
* PostCondition: Viene incrementato l'importo associato ai documenti
* contabili della scadenza di obbligazione pagata con la riga del mandato
* dell'importo della riga del mandato (scadenza.im_associato_doc_contabile
* = scadenza.im_associato_doc_contabile + mandato_riga.im_mandato_riga)
* modifica riga - annullamento PreCondition: E' stata modificata una riga
* di mandato e lo stato del mandato e' annullato PostCondition: Viene
* decrementato l'importo associato ai documenti contabili della scadenza di
* obbligazione pagata con la riga del mandato dell'importo della riga del
* mandato (scadenza.im_associato_doc_contabile =
* scadenza.im_associato_doc_contabile - mandato_riga.im_mandato_riga)
* modifica riga - modifica modalità pagamento PreCondition: E' stata
* modificata una riga di mandato, ma il suo importo non e' stato modificato
* PostCondition: Nessun aggiornamento all'importo della scadenza viene
* effettuato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga del mandato da
* modificare
* @param scadenza Obbligazione_scadenzarioBulk la scadenza
* dell'obbligazione pagata dalla riga del mandato
*/
private void aggiornaImportoObbligazionePerRiga(UserContext userContext,
Mandato_rigaBulk riga, Obbligazione_scadenzarioBulk scadenza)
throws it.cnr.jada.persistency.PersistencyException,
ComponentException {
/*
* **Mandato Accreditamento ***** riga.crudStatus = - TO_BE_CREATED alla
* creazione //- TO_BE_UPDATED alla modifica dell'importo (1) o
* all'annullamento (2) o alla modifica delle modalità di pagamento (3)
* - TO_BE_UPDATED all'annullamento (2) o alla modifica delle modalità
* di pagamento (3) - TO_BE_DELETED mai**Mandato Pagamento *****
* riga.crudStatus = - TO_BE_CREATED alla creazione - TO_BE_UPDATED
* all'annullamento (2) o alla modifica delle modalità di pagamento (3)
* - TO_BE_DELETED mai
*/
if (riga.isToBeCreated())
scadenza.setIm_associato_doc_contabile(scadenza
.getIm_associato_doc_contabile().add(
riga.getIm_mandato_riga()));
else if (riga.isToBeDeleted()) {
// (29/10/2003 12.40.38) Giorgio Massussi
// Sostituito getHome() con getTempHome() perchè se arrivo da
// annullaMandato può essere che la
// riga del mandato sia stata appena caricata da db e
// successivamente modificata; se uso
// la stessa HomeCache la rilettura mi seppellisce le modifiche!
Mandato_rigaBulk rigaDaDB = (Mandato_rigaBulk) getTempHome(
userContext, riga.getClass()).findByPrimaryKey(riga);
scadenza.setIm_associato_doc_contabile(scadenza
.getIm_associato_doc_contabile().subtract(
rigaDaDB.getIm_mandato_riga()));
} else if (riga.isToBeUpdated()) {
java.math.BigDecimal importo = null;
// (29/10/2003 12.40.38) Giorgio Massussi
// Sostituito getHome() con getTempHome() perchè se arrivo da
// annullaMandato può essere che la
// riga del mandato sia stata appena caricata da db e
// successivamente modificata; se uso
// la stessa HomeCache la rilettura mi seppellisce le modifiche!
Mandato_rigaBulk rigaDaDB = (Mandato_rigaBulk) getTempHome(
userContext, riga.getClass()).findByPrimaryKey(riga);
if (riga.getMandato().getStato().equals(
MandatoBulk.STATO_MANDATO_ANNULLATO)) // caso 2 -
// annullamento
importo = rigaDaDB.getIm_mandato_riga().negate();
else if (riga.getIm_mandato_riga().compareTo(
rigaDaDB.getIm_mandato_riga()) == 0) // caso 3 - no modifica
// importo
return;
/*
* else //caso 1 - modifica importo importo =
* riga.getIm_mandato_riga
* ().subtract(rigaDaDB.getIm_mandato_riga());
*/
scadenza.setIm_associato_doc_contabile(scadenza
.getIm_associato_doc_contabile().add(importo));
}
}
/**
* aggiorno importo scadenze obbligazione PreCondition: E' stata
* creato/annullato un mandato ed e' pertanto necessario modificare
* l'importo associtao a doc. contabili di tutte le scadenze di obbligazione
* pagate dal mandato PostCondition: Per ogni riga del mandato viene
* recuperata la scadenza di obbligazione collegata e viene calcolato
* l'importo dell'aggiornamento ( metodo
* aggiornaImportoObbligazionePerRiga); per ogni scadenza di obbligazione
* presente nel mandato, dopo aver messo un lock sulla testata
* dell'obbligazione, ne viene aggiornato l'importo associato a
* doc.contabile
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il Mandato per cui aggiornare le
* scadenze dell'obbligazione
*/
protected void aggiornaImportoObbligazioni(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
PrimaryKeyHashMap obbligazioniTable = new PrimaryKeyHashMap();
PrimaryKeyHashMap obblScadTable = new PrimaryKeyHashMap();
Mandato_rigaBulk riga;
Obbligazione_scadenzarioBulk scadenza;
ObbligazioneBulk obbligazione;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
if (!riga.isToBeCreated() && !riga.isToBeUpdated()
&& !riga.isToBeDeleted())
continue;
// scadenza
scadenza = new Obbligazione_scadenzarioBulk(riga.getCd_cds(),
riga.getEsercizio_obbligazione(), riga
.getEsercizio_ori_obbligazione(), riga
.getPg_obbligazione(), riga
.getPg_obbligazione_scadenzario());
if (obblScadTable.get(scadenza) == null) {
// leggo la scadenza da db
scadenza = (Obbligazione_scadenzarioBulk) getHome(
userContext, Obbligazione_scadenzarioBulk.class)
.findAndLock(scadenza);
obblScadTable.put(scadenza, scadenza);
} else
// scadenza già letto da db
scadenza = (Obbligazione_scadenzarioBulk) obblScadTable
.get(scadenza);
if (scadenza == null)
throw new ApplicationException("Non esiste la scadenza");
// obbligazione
obbligazione = scadenza.getObbligazione();
if (obbligazioniTable.get(obbligazione) == null) {
// leggo l'obbligazione da db
obbligazione = (ObbligazioneBulk) getHome(userContext,
ObbligazioneBulk.class).findAndLock(obbligazione);
obbligazioniTable.put(obbligazione, obbligazione);
} else
// scadenza già letto da db
obbligazione = (ObbligazioneBulk) obbligazioniTable
.get(obbligazione);
aggiornaImportoObbligazionePerRiga(userContext, riga, scadenza);
}
for (Iterator i = obbligazioniTable.values().iterator(); i
.hasNext(); ) {
obbligazione = (ObbligazioneBulk) i.next();
// obbligazione.setUser( userContext.getUser());
// updateBulk( userContext, obbligazione);
lockBulk(userContext, obbligazione);
}
for (Iterator i = obblScadTable.values().iterator(); i.hasNext(); ) {
scadenza = (Obbligazione_scadenzarioBulk) i.next();
scadenza.setUser(userContext.getUser());
if (scadenza.getIm_associato_doc_contabile().compareTo(
scadenza.getIm_associato_doc_amm()) > 0
|| scadenza.getIm_associato_doc_contabile().compareTo(
scadenza.getIm_scadenza()) > 0)
throw new ApplicationException(
"La scadenza "
+ " con esercizio: "
+ scadenza.getEsercizio()
+ " Cds: "
+ scadenza.getCd_cds()
+ " Esercizio impegno: "
+ scadenza.getEsercizio_originale()
+ " Pg impegno: "
+ scadenza.getPg_obbligazione()
+ " Pg scadenza: "
+ scadenza.getPg_obbligazione_scadenzario()
+ " ha importo associato ai doc. contabili maggiore dell'importo associato a doc.amm o dell'importo della scadenza.");
updateBulk(userContext, scadenza);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione sospeso PreCondition: E' stata generata la richiesta di
* creazione una nuova associazione Mandato-Sospeso (Sospeso_det_uscBulk) e
* l'importo specificato dall'utente e' inferiore o uguale all'importo
* disponibile del sospeso (importo disponibile = sospeso.im_sospeso -
* sospeso.im_associati) PostCondition: Viene creata una nuova istanza di
* Sospeso_det_uscBulk e viene incrementato l'importo associato del sospeso
* (sospeso.im_associato) con l'importo che e' stato associato al mandato
* (Sospeso_det_uscBulk.im_associato) creazione sospeso - errore
* PreCondition: E' stata generata la richiesta di creazione una nuova
* associazione Mandato-Sospeso (Sospeso_det_uscBulk) e l'importo
* specificato dall'utente e' superiore all'importo disponibile del sospeso
* (importo disponibile = sospeso.im_sospeso - sospeso.im_associati)
* PostCondition: Viene segnalato all'utente l'impossibilità di creare
* l'associazione Mandato-Sospeso modifica sospeso PreCondition: E' stata
* generata la richiesta di modifica dell'importo di una associazione
* Mandato-Sospeso (Sospeso_det_uscBulk) e la differenza fra l'importo
* specificato ora dall'utente per il Sospeso_det_uscBulk e l'importo che
* aveva in precedenza e' inferiore o uguale all'importo disponibile del
* sospeso (importo disponibile = sospeso.im_sospeso - sospeso.im_associati)
* PostCondition: Viene aggiornato l'importo di Sospeso_det_uscBulk con il
* nuovo importo specificato dall'utente e viene aggiornato l'importo
* associato del SospesoBulk con la differenza fra l'importo specificato ora
* dall'utente e l'importo che aveva in precedenza (sospeso.im_associato =
* sospeso_det_usc.im_associato(ora) - sospeso_det_usc.im_associato(in
* precedenza) modifica sospeso - errore PreCondition: E' stata generata la
* richiesta di modifica dell'importo di una associazione Mandato-Sospeso
* (Sospeso_det_uscBulk) e la differenza fra l'importo specificato ora
* dall'utente per il Sospeso_det_uscBulk e l'importo che aveva in
* precedenza e' superiore all'importo disponibile del sospeso (importo
* disponibile = sospeso.im_sospeso - sospeso.im_associati) PostCondition:
* Viene segnalato all'utente l'impossibilità di aggiornare l'associazione
* Mandato-Sospeso cancellazione sospeso PreCondition: E' stata generata la
* richiesta di cancellazione di una associazione Mandato-Sospeso
* (Sospeso_det_uscBulk) PostCondition: L'istanza di Sospeso_det_uscBulk
* viene cancellata e viene decrementato l'importo associato del sospeso
* (sospeso.im_associato) con l'importo che era stato associato al mandato
* (Sospeso_det_uscBulk.im_associato)
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da aggiornare
* @return mandato MandatoBulk il Mandato aggiornato
*/
private MandatoBulk aggiornaImportoSospesi(UserContext aUC,
MandatoBulk mandato) throws ComponentException {
try {
Sospeso_det_uscBulk sdu, sduFromDb;
SospesoBulk sospeso;
BigDecimal totSospesi = new BigDecimal(0);
for (Iterator i = mandato.getSospeso_det_uscColl().iterator(); i
.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
totSospesi = totSospesi.add(sdu.getIm_associato());
sospeso = sdu.getSospeso();
lockBulk(aUC, sospeso);
if (sdu.isToBeCreated()) {
if (sdu.getIm_associato().compareTo(
sospeso.getIm_disponibile()) > 0)
throw new ApplicationException(
"L'Importo specificato per il sospeso deve essere inferiore all'Ulteriore disponibilità su sospeso");
sospeso.setIm_associato(sospeso.getIm_associato().add(
sdu.getIm_associato()));
} else if (sdu.isToBeDeleted()) {
sduFromDb = (Sospeso_det_uscBulk) getHome(aUC,
Sospeso_det_uscBulk.class).findByPrimaryKey(sdu);
sospeso.setIm_associato(sospeso.getIm_associato().subtract(
sduFromDb.getIm_associato()));
totSospesi = totSospesi.add(sdu.getIm_associato());
} else if (sdu.isToBeUpdated()) {
sduFromDb = (Sospeso_det_uscBulk) getHome(aUC,
Sospeso_det_uscBulk.class).findByPrimaryKey(sdu);
if (sdu.getIm_associato().subtract(
sduFromDb.getIm_associato()).compareTo(
sospeso.getIm_disponibile()) > 0)
throw new ApplicationException(
"L'importo disponibile del sospeso e' stato esaurito");
sospeso.setIm_associato(sospeso.getIm_associato().add(
sdu.getIm_associato().subtract(
sduFromDb.getIm_associato())));
} else
continue;
if (SospesoBulk.STATO_SOSP_IN_SOSPESO.equals(sospeso
.getStato_sospeso())
&& sospeso.getCd_cds_origine() == null)
sospeso.setCds_origine(new CdsBulk(mandato
.getCd_cds_origine()));
sospeso.setToBeUpdated();
sospeso
.setUser(aUC
.getUser());
}
/*
* 24/09/2002 Commentata la chiamata al metodo per l'impostazione
* dell'importo pagato del Mandato, in quanto adesso non si imposta
* più a PAGATO lo stato di un Mandato, quando viene associato ad un
* sospeso
*/
// mandato.setIm_pagato( totSospesi );
// mandato.setToBeUpdated();
// itero anche fra i sospesi che sono stati cancellati
for (Iterator i = mandato.getSospeso_det_uscColl().deleteIterator(); i
.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
sospeso = sdu.getSospeso();
lockBulk(aUC, sospeso);
/*
* if ( sdu.isToBeCreated() ) { if (
* sdu.getIm_associato().compareTo( sospeso.getIm_disponibile()
* ) > 0 ) throw new ApplicationException(
* "L'importo specificato per il sospeso deve essere inferiore all'importo disponibile del sospeso"
* ); sospeso.setIm_associato( sospeso.getIm_associato().add(
* sdu.getIm_associato())); } else
*/
if (sdu.isToBeDeleted()) {
sduFromDb = (Sospeso_det_uscBulk) getHome(aUC,
Sospeso_det_uscBulk.class).findByPrimaryKey(sdu);
sospeso.setIm_associato(sospeso.getIm_associato().subtract(
sduFromDb.getIm_associato()));
} else if (sdu.isToBeUpdated()) {
sduFromDb = (Sospeso_det_uscBulk) getHome(aUC,
Sospeso_det_uscBulk.class).findByPrimaryKey(sdu);
// if ( sdu.getIm_associato().subtract(
// sduFromDb.getIm_associato()).compareTo(
// sospeso.getIm_disponibile() ) > 0 )
// throw new ApplicationException(
// "L'importo disponibile del sospeso e' stato esaurito");
sdu.setIm_associato(sduFromDb.getIm_associato());
sospeso.setIm_associato(sospeso.getIm_associato().subtract(
sduFromDb.getIm_associato()));
} else
continue;
sospeso.setToBeUpdated();
sospeso
.setUser(aUC
.getUser());
}
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione mandato PreCondition: E' stata creata un mandato e sono stati
* associati dei sospesi per un importo pari all'importo del mandato
* PostCondition: Viene richiamata una stored proceduere che aggiorna lo
* stato del mandato a PAGATO, la data di pagamento alla data odierna e
* aggiorna i saldi relativi al pagato delle voci del piano presenti nel
* mandato annullamento PreCondition: E' stato annullato un mandato con
* stato PAGATO PostCondition: Viene richiamata una stored proceduere che
* aggiorna lo stato del mandato a EMESSO, la data di pagamento viene
* resettata e vengono aggiornati i saldi relativi al pagato delle voci del
* piano presenti nel mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk mandato per cui aggiornare lo stato e
* i saldi pagati
* @param action String azione effettuata sul mandato. ( I -
* inserimento, M - modifica, A annullamento)
*/
private void aggiornaSaldoPagato(UserContext userContext,
MandatoBulk mandato, String action) throws ComponentException {
try {
LoggableStatement cs = new LoggableStatement(
getConnection(userContext), "{ call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "CNRCTB037.riscontroMandato(?, ?, ?, ?, ?)}",
false, this.getClass());
try {
cs.setObject(1, mandato.getEsercizio());
cs.setString(2, mandato.getCd_cds());
cs.setObject(3, mandato.getPg_mandato());
cs.setString(4, action);
cs.setString(5, userContext.getUser());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
/*
* try { CallableStatement cs = getConnection( userContext
* ).prepareCall( "{ call " +
* it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
* "CNRCTB300.aggDaSospesoRiscontro(?, ?, ?, ?, ?)}"); try {
* cs.setString( 1, mandato.getCd_cds() ); cs.setObject( 2,
* mandato.getEsercizio() ); cs.setObject( 3, mandato.getPg_mandato() );
* cs.setString( 4, mandato.getCd_tipo_documento_cont() ); cs.setString(
* 5, userContext.getUser()); LoggableStatement.executeQuery(cs); }
* catch ( SQLException e ) { throw handleException(e); } finally {
* cs.close(); } } catch ( SQLException e ) { throw handleException(e);
* }
*/
}
/**
* creazione mandato PreCondition: E' stata creato un nuovo mandato
* PostCondition: Viene richiesta alla component che gestisce i documenti
* amministrativi l'aggiornamento dello stato COFI dei documenti pagati con
* il mandato annullamento mandato PreCondition: E' stata annullato un nuovo
* mandato PostCondition: Viene richiesta alla component che gestisce i
* documenti amministrativi l'aggiornamento dello stato COFI dei documenti
* pagati con il mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato
* @param action String azione che può assumere valori
* inserimento/annullamento
*/
protected void aggiornaStatoFattura(UserContext userContext,
MandatoBulk mandato, String action) throws ComponentException {
try {
createFatturaPassivaComponentSession()
.aggiornaStatoDocumentiAmministrativi(userContext,
mandato.getCd_cds(),
mandato.getCd_unita_organizzativa(),
mandato.getCd_tipo_documento_cont(),
mandato.getEsercizio(), mandato.getPg_mandato(),
action);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiungiDocPassivi PreCondition: E' stata generata la richiesta di
* aggiungere ad un mandato nuovi documenti amministrativi passivi ( fatture
* passive o domenti generici passivi). Tali documenti hanno lo stesso terzo
* e la stessa classe di pagamento. PostCondition: Per ogni documento
* passivo viene creata una o piu' righe di mandato (metodo creaMandatoRiga)
* secondo la seguente regola: - per ogni documento generico viene creata
* una sola riga di mandato - per ogni fattura passiva viene creata una riga
* di mandato ed eventualmente righe aggiuntive se tale fattura e' associata
* a note di debito e/o note di credito Viene creata una istanza di
* MandatoTerzoBulk (metodo creaMandatoTerzo) coi dati del terzo presente
* nei documenti amministrativi errore - beneficiari diversi PreCondition:
* Il codice terzo dei documenti amministrativi passivi da aggiungere al
* mandato non e' lo stesso per tutti i documenti PostCondition: Un
* messaggio di errore segnala all'utente l'impossibilità di aggiungere i
* documenti al mandato errore - classe di pagamento PreCondition: La classe
* di pagamento (Bancario,Postale,etc.) dei documenti amministrativi passivi
* da aggiungere al mandato non e' lo stesso per tutti i documenti.
* PostCondition: Un messaggio di errore segnala all'utente l'impossibilità
* di aggiungere i documenti al mandato errore - mandato di regolarizzazione
* PreCondition: I documenti amministrativi passivi selezionati per essere
* aggiunti ad un mandato di regolarizzazione sono stati contabilizzati in
* parte su obbligazioni relative a capitoli di bilancio e in parte su
* obbligazioni relative a partite di giro. PostCondition: Un messaggio di
* errore segnala all'utente l'impossibilità di aggiungere i documenti al
* mandato
*
* errore - mandato competenza/residuo PreCondition: I documenti
* amministrativi passivi selezionati per essere aggiunti ad un mandato sono
* stati contabilizzati in parte su impegni residui e in parte su impegni di
* competenza PostCondition: Un messaggio di errore segnala all'utente
* l'impossibilità di aggiungere i documenti al mandato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da aggiornare
* @param docPassivi List la lista dei documenti passivi selezionati
* dall'utente
* @return mandato MandatoBulk il Mandato aggiornato
*/
public MandatoBulk aggiungiDocPassivi(UserContext aUC, MandatoBulk mandato,
List docPassivi) throws ComponentException {
Integer cd_terzo;
String ti_pagamento, ti_competenza_residuo;
Boolean pGiro;
V_doc_passivo_obbligazioneBulk docPassivo;
Mandato_rigaBulk riga;
Collection docPassiviCollegati;
try {
if (mandato.getMandato_rigaColl().size() == 0)
mandato.setMandato_terzo(null);
if (mandato.getMandato_terzo() == null) {
cd_terzo = ((V_doc_passivo_obbligazioneBulk) docPassivi.get(0))
.getCodice_terzo_o_cessionario();
ti_pagamento = ((V_doc_passivo_obbligazioneBulk) docPassivi
.get(0)).getTi_pagamento();
pGiro = ((V_doc_passivo_obbligazioneBulk) docPassivi.get(0))
.getFl_pgiro();
ti_competenza_residuo = ((V_doc_passivo_obbligazioneBulk) docPassivi
.get(0)).getTi_competenza_residuo();
} else {
cd_terzo = mandato.getMandato_terzo().getCd_terzo();
ti_pagamento = ((Mandato_rigaIBulk) mandato
.getMandato_rigaColl().get(0)).getBanca()
.getTi_pagamento();
pGiro = ((Mandato_rigaIBulk) mandato.getMandato_rigaColl().get(
0)).getFl_pgiro();
ti_competenza_residuo = mandato.getTi_competenza_residuo();
}
for (Iterator i = docPassivi.iterator(); i.hasNext(); ) {
docPassivo = (V_doc_passivo_obbligazioneBulk) i.next();
if (!cd_terzo
.equals(docPassivo.getCodice_terzo_o_cessionario()))
throw new ApplicationException(
"E' possibile selezionare solo doc passivi relativi ad un unico beneficiario");
if (!MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())
&& !ti_pagamento.equals(docPassivo.getTi_pagamento()))
throw new ApplicationException(
"E' possibile selezionare solo doc passivi relativi ad una stessa classe di pagamento");
/*
* simona 9.10.02 if ( mandato.getTi_mandato().equals(
* mandato.TIPO_REGOLARIZZAZIONE ) &&
* !docPassivo.getFl_pgiro().equals( pGiro )) throw new
* ApplicationException(
* "Per il mandato di regolarizzaione non e' possibile selezionare doc passivi su partite di giro e doc passivi su capitoli di bilancio"
* );
*/
if (!ti_competenza_residuo.equals(docPassivo
.getTi_competenza_residuo()))
throw new ApplicationException(
"E' possibile selezionare solo doc passivi dello stesso tipo COMPETENZA/RESIDUO.");
// creo mandato_riga
riga = creaMandatoRiga(aUC, mandato, docPassivo);
//controllo cap /swift
if (riga.getBanca() != null &&
((Rif_modalita_pagamentoBulk.BANCARIO.equals(riga.getBanca().getTi_pagamento())
|| (Rif_modalita_pagamentoBulk.IBAN.equals(riga.getBanca().getTi_pagamento()))))) {
BancaBulk banca = (BancaBulk) getHome(aUC,
BancaBulk.class).findByPrimaryKey(
new BancaBulk(riga.getCd_terzo(), riga.getPg_banca()));
if (banca != null && banca.getCodice_iban() != null && riga.getBanca().getAbi() != null && banca.getCodice_iban().startsWith("IT")) {
if (riga.getCd_terzo() != null) {
TerzoBulk terzo = (TerzoBulk) getHome(aUC,
TerzoBulk.class).findByPrimaryKey(
new TerzoBulk(riga.getCd_terzo()));
if (terzo.getPg_comune_sede() != null) {
ComuneBulk comune = (ComuneBulk) getHome(aUC,
ComuneBulk.class).findByPrimaryKey(
new ComuneBulk(terzo.getPg_comune_sede()));
if (comune.getTi_italiano_estero().equals(NazioneBulk.ITALIA) && terzo.getCap_comune_sede() == null)
throw new ApplicationException(
"Attenzione per la modalità di pagamento presente sul documento è necessario indicare il cap sul terzo.");
}
}
} else if (banca != null && banca.getCodice_iban() != null && riga.getBanca().getAbi() == null) {
NazioneHome nazioneHome = (NazioneHome) getHome(aUC,
NazioneBulk.class);
SQLBuilder sqlExists = nazioneHome.createSQLBuilder();
sqlExists.addSQLClause("AND", "NAZIONE.CD_ISO", SQLBuilder.EQUALS, banca.getCodice_iban().substring(0, 2));
sqlExists.addSQLClause("AND", "NAZIONE.FL_SEPA", SQLBuilder.EQUALS, "Y");
if (sqlExists.executeCountQuery(getConnection(aUC)) != 0 && riga.getBanca().getCodice_swift() == null)
throw new ApplicationException(
"Attenzione per la modalità di pagamento presente sul documento è necessario indicare il codice swift/bic.");
}
}
// estrae le eventuali note di credito/debito
docPassiviCollegati = ((MandatoIHome) getHome(aUC, mandato
.getClass())).findDocPassiviCollegati(docPassivo);
for (Iterator j = docPassiviCollegati.iterator(); j.hasNext(); )
creaMandatoRigaCollegato(aUC, mandato,
(V_doc_passivo_obbligazioneBulk) j.next(), riga);
}
// creo mandato terzo
if (mandato.getMandato_terzo() == null) {
Mandato_terzoBulk mTerzo = creaMandatoTerzo(aUC, mandato,
cd_terzo);
mandato.setMandato_terzo(mTerzo);
}
mandato.setTi_competenza_residuo(ti_competenza_residuo);
mandato.refreshImporto();
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* ---- non usato ---- Consente di modificare un mandato di accreditamento
* CNR - Cds consentendo la creazione di nuove righe di mandato
*/
public MandatoAccreditamentoBulk aggiungiImpegni(UserContext aUC,
MandatoAccreditamentoBulk mandato, List impegni)
throws ComponentException {
// se nella lista di impegni ci sono sia residuo che competenza e'
// necessario creare un nuovo mandato
V_impegnoBulk impegno;
Mandato_rigaBulk riga = null;
// creo mandato_riga
for (Iterator i = impegni.iterator(); i.hasNext(); ) {
impegno = (V_impegnoBulk) i.next();
// riga = creaMandatoRiga( aUC, mandato, impegno );
mandato.addToMandato_rigaColl(riga, impegno);
}
// creo mandato terzo
if (mandato.getMandato_terzo() == null) {
Mandato_terzoBulk mTerzo = creaMandatoTerzo(aUC, mandato, mandato
.getMandato_terzo().getCd_terzo());
mandato.setMandato_terzo(mTerzo);
}
mandato.refreshImporto();
return mandato;
}
/**
* annullamento PreCondition: E' stata generata la richiesta di annullare un
* Mandato Il Mandato ha tipo diverso da regolarizzazione e accreditamento
* Il Mandato ha originato delle reversali o dei mandati PostCondition:
* Tutti i mandati originati dal mandato da annullare sono stati annullati
* E' stata richiesta alla Component che gestisce la Reversale
* l'annullamento di tutte le reversali originate dal mandato da annullare
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
*/
private void annullaDocContabiliCollegati(UserContext userContext, MandatoBulk mandato) throws ComponentException {
try {
V_ass_doc_contabiliBulk ass;
ReversaleComponentSession revSession = null;
ReversaleBulk reversale;
MandatoBulk manColl;
if (mandato.getDoc_contabili_collColl().size() > 0)
revSession = createReversaleComponentSession();
for (Iterator i = mandato.getDoc_contabili_collColl().iterator(); i.hasNext(); ) {
ass = (V_ass_doc_contabiliBulk) i.next();
if (ass.getCd_tipo_documento_cont().equals(
Numerazione_doc_contBulk.TIPO_MAN)
&& ass.getCd_cds().equals(mandato.getCd_cds())
&& ass.getEsercizio().equals(mandato.getEsercizio())
&& ass.getPg_documento_cont().equals(
mandato.getPg_mandato())
&& ass.getCd_tipo_documento_cont_coll().equals(
Numerazione_doc_contBulk.TIPO_MAN)) {
/** il mandato ha un mandato associato **/
manColl = (MandatoBulk) inizializzaBulkPerModifica(
userContext, new MandatoIBulk(ass.getCd_cds_coll(),
ass.getEsercizio_coll(), ass
.getPg_documento_cont_coll()));
annullaMandato(userContext, manColl, null, false);
} else if (ass.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_MAN)
&& ass.getCd_cds().equals(mandato.getCd_cds())
&& ass.getEsercizio().equals(mandato.getEsercizio())
&& ass.getPg_documento_cont().equals(mandato.getPg_mandato())
&& ass.getCd_tipo_documento_cont_coll().equals(Numerazione_doc_contBulk.TIPO_REV)) {
/** il mandato ha una reversale associata **/
reversale = (ReversaleBulk) revSession.inizializzaBulkPerModifica(userContext,
new ReversaleIBulk(ass.getCd_cds_coll(),
ass.getEsercizio_coll(),
ass.getPg_documento_cont_coll()));
revSession.annullaReversale(userContext, reversale, false);
rimuoviVincoliAlMandato(userContext, mandato);
}
}
} catch (Exception e) {
throw handleException(mandato, e);
}
}
private void rimuoviVincoliAlMandato(UserContext userContext, MandatoBulk mandatoBulk) throws ComponentException, PersistencyException, IntrospectionException {
/**
* Nel caso di Mandato NON ACQUISITO e reversali NON_ESEGUITE ma ACQUISITA
* rimuovo i vincoli
*/
if (Optional.ofNullable(mandatoBulk.getEsitoOperazione())
.filter(s -> s.equalsIgnoreCase(EsitoOperazione.NON_ACQUISITO.value()))
.isPresent()) {
Ass_mandato_reversaleHome ass_mandato_reversaleHome =
Optional.ofNullable(getHome(userContext, Ass_mandato_reversaleBulk.class))
.filter(Ass_mandato_reversaleHome.class::isInstance)
.map(Ass_mandato_reversaleHome.class::cast)
.orElseThrow(() -> new ComponentException(("Ass_mandato_reversaleHome not found")));
final Collection ass = Optional.ofNullable(ass_mandato_reversaleHome.findReversali(userContext, mandatoBulk))
.filter(collection -> !collection.isEmpty())
.orElse(Collections.emptyList());
for (Ass_mandato_reversaleBulk ass_mandato_reversaleBulk : ass) {
ReversaleBulk reversale =
Optional.ofNullable(super.findByPrimaryKey(userContext,
new ReversaleIBulk(ass_mandato_reversaleBulk.getCd_cds_reversale(),
ass_mandato_reversaleBulk.getEsercizio_reversale(),
ass_mandato_reversaleBulk.getPg_reversale())))
.filter(ReversaleBulk.class::isInstance)
.map(ReversaleBulk.class::cast)
.orElse(null);
if (Optional.ofNullable(reversale)
.flatMap(reversaleBulk -> Optional.ofNullable(reversaleBulk.getEsitoOperazione()))
.filter(s -> s.equalsIgnoreCase(EsitoOperazione.ACQUISITO.value()) ||
s.equalsIgnoreCase(EsitoOperazione.NON_ESEGUIBILE.value()))
.isPresent()
) {
ass_mandato_reversaleBulk.setToBeDeleted();
try {
ass_mandato_reversaleHome.delete(ass_mandato_reversaleBulk, userContext);
logger.info("SIOPE+ annulato vincolo al Mandato {}/{} Reversale {}/{}",
mandatoBulk.getEsercizio(),
mandatoBulk.getPg_mandato(),
ass_mandato_reversaleBulk.getEsercizio_reversale(),
ass_mandato_reversaleBulk.getPg_reversale());
} catch (PersistencyException e) {
throw new DetailedRuntimeException(e);
}
}
}
}
}
/**
* annulla documento generico E' stata generata la richiesta di annullare un
* mandato di accreditamento CNR-Cds ed e' pertanto necessario annullare
* anche il documento generico creato in automatico alla creazione del
* mandato. Il servizio viene richiesto alla Component che gestisce i
* documenti generici amministrativi PostCondition: Il documento generico di
* spesa di tipo TRASF_S associato al mandato di accreditamento e' stato
* annullato e le scadenze degli impegni su cui era stato contabilizzato
* sono state aggiornate
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato associato al documento
* generico di spesa
*/
public void annullaDocumentoGenerico(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
Mandato_rigaBulk riga = (Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0);
DocumentoGenericoComponentSession docSession = createDocumentoGenericoComponentSession();
Documento_genericoBulk docGenerico = (Documento_genericoBulk) docSession
.inizializzaBulkPerModifica(userContext,
new Documento_genericoBulk(
riga.getCd_cds_doc_amm(), riga
.getCd_tipo_documento_amm(), riga
.getCd_uo_doc_amm(), riga
.getEsercizio_doc_amm(), riga
.getPg_doc_amm()));
docGenerico_annullaDocumentoGenerico(userContext, docGenerico);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* annulla importo sospesi PreCondition: E' stata generata la richiesta di
* annullare un mandato ed e' pertanto necessario aggiornare l'importo di
* tutti i sospesi che erano sono stati associati a questo mandato
* PostCondition: Per ogni istanza di Sospeso_det_uscBulk presente nel db,
* viene aggiornato l'importo del sospeso associato nel modo seguente:
* sospeso.im_associato = sospeso.im_associato -
* sospeso_det_usc.im_associato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
* @return mandato MandatoBulk il Mandato da annullare
*/
private MandatoBulk annullaImportoSospesi(UserContext aUC,
MandatoBulk mandato) throws ComponentException {
try {
Sospeso_det_uscBulk sdu, sduFromDb;
SospesoBulk sospeso;
for (Iterator i = mandato.getSospeso_det_uscColl().iterator(); i
.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
sospeso = sdu.getSospeso();
lockBulk(aUC, sospeso);
sduFromDb = (Sospeso_det_uscBulk) getHome(aUC,
Sospeso_det_uscBulk.class).findByPrimaryKey(sdu);
if (sduFromDb != null) {
sospeso.setIm_associato(sospeso.getIm_associato().subtract(
sduFromDb.getIm_associato()));
sospeso.setToBeUpdated();
sospeso
.setUser(aUC
.getUser());
}
}
/*
* //itero anche fra i sospesi che sono stati cancellati for (
* Iterator i = mandato.getSospeso_det_uscColl().deleteIterator();
* i.hasNext(); ) { sdu = (Sospeso_det_uscBulk) i.next(); sospeso =
* sdu.getSospeso(); lockBulk( aUC, sospeso ); sduFromDb =
* (Sospeso_det_uscBulk) getHome( aUC, Sospeso_det_uscBulk.class
* ).findByPrimaryKey( sdu ); if ( sduFromDb != null ) {
* sospeso.setIm_associato( sospeso.getIm_associato().subtract(
* sduFromDb.getIm_associato())); sospeso.setToBeUpdated();
* sospeso.setUser( ((it.cnr.contab.utenze00.bp.CNRUserContext)
* aUC).getUser());
*
* } }
*/
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento PreCondition: E' stata generata la richiesta di annullare un
* Mandato PostCondition: Viene annullato il Mandato (metodo annullaMandato)
* specificando che non e' stata effettuata la verifica sui compensi e che
* e' necessario procedere anche all'annullamento dei mandati/reversali
* collegate
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
* @return mandato MandatoBulk il Mandato annullato
*/
public MandatoBulk annullaMandato(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
return annullaMandato(userContext, mandato, null, true);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* annullamento PreCondition: E' stata generata la richiesta di annullare un
* Mandato PostCondition: Viene annullato il Mandato (metodo annullaMandato)
* passando l'informazione se effettuare o meno la verifica sui compensi e
* passando l'informazione che e' necessario procedere anche
* all'annullamento dei mandati/reversali collegate
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
* @param param il parametro che indica se il controllo sul compenso e'
* necessario ( se param = null e' necessario effettuare il
* controllo, altrimenti no)
* @return mandato MandatoBulk il Mandato annullato
*/
public MandatoBulk annullaMandato(UserContext userContext,
MandatoBulk mandato, CompensoOptionRequestParameter param)
throws ComponentException {
try {
return annullaMandato(userContext, mandato, param, true);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* annullamento mandato e collegati PreCondition: E' stata generata la
* richiesta di annullare un Mandato E' stato richiesto l'annullamento dei
* doc. contabili collegati PostCondition: Viene impostata la data di
* annullamento del mandato con la data odierna e lo stato del mandato
* diventa ANNULLATO. Viene impostato lo stato ANNULLATO su tutte le righe
* del mandato. Per ogni riga inoltre viene aggiornato l'importo associato a
* doc.contabili della scadenza di obbligazione legata alla riga (metodo
* aggiornaImportoObbligazione), viene aggiornato lo stato del documento
* amministrativo legato alla riga (metodo aggiornaStatoFattura). Vengono
* aggiornati i saldi dei capitoli (metodo aggiornaCapitoloSaldoRiga). Per
* ogni associzione sospeso-mandato, viene aggiornato l'importo associato
* del sospeso (metodo annullaImportoSospesi). Se il mandato ha associate
* reversali o altri mandati viene eseguito il loro annullamento (metodo
* 'annullaDocContabiliCollegati') annullamento mandato PreCondition: E'
* stata generata la richiesta di annullare un Mandato Non e' necessario
* procedere all'annullamento dei doc. contabili collegati PostCondition:
* Viene impostata la data di annullamento del mandato con la data odierna e
* lo stato del mandato diventa ANNULLATO. Viene impostato lo stato
* ANNULLATO su tutte le righe del mandato. Per ogni riga inoltre viene
* aggiornato l'importo associato a doc.contabili della scadenza di
* obbligazione legata alla riga (metodo aggiornaImportoObbligazione), viene
* aggiornato lo stato del documento amministrativo legato alla riga (metodo
* aggiornaStatoFattura). Vengono aggiornati i saldi dei capitoli (metodo
* aggiornaCapitoloSaldoRiga). Per ogni associzione sospeso-mandato, viene
* aggiornato l'importo associato del sospeso (metodo
* annullaImportoSospesi). Se il mandato ha associate reversali o altri
* mandati NON viene eseguito il loro annullamento annullamento mandato di
* regolarizzazione PreCondition: E' stata generata la richiesta di
* annullare un Mandato di regolarizzazione PostCondition: Oltre alle
* PostCondition dell'annullamento di un mandato normale, viene anche
* annullati sia la reversale di regolarizzazione associata al mandato che
* il documento amministrativo generico di entrata creato dal sistema
* (metodo annullaReversaleRegolarizzazione) annullamento mandato di
* trasferimento PreCondition: E' stata generata la richiesta di annullare
* un Mandato di trasferimento PostCondition: Oltre alle PostCondition
* dell'annullamento di un mandato normale, viene anche annullato il
* documento amm. generico creato in automatico alla creazione del mandato
* (metodo annullaDocumentoGenerico) e viene annullata sia la reversale di
* trasferimento associata al mandato che il relativo documento generico di
* entrata (metodo annullaReversaleTrasferimento) errore riscontri associati
* PreCondition: E' stata generata la richiesta di annullare un Mandato che
* ha riscontri associati PostCondition: Una segnalazione di errore comunica
* all'utente l'impossibilità di eseguire l'annullamento annullamento
* mandato su anticipo associato a missione PreCondition: E' stata generata
* la richiesta di annullare un Mandato Il mandato non supera la validazione
* effettuata dal metodo 'verificaMandatoSuAnticipo' in quanto include un
* anticipo associato a missione PostCondition: Una segnalazione di errore
* comunica all'utente l'impossibilità di eseguire l'annullamento
* annullamento mandato di compenso su riscontro PreCondition: E' stata
* generata la richiesta di annullare un Mandato Il mandato si riferisce a
* compensi inclusi in conguagli PostCondition: Una segnalazione richiede
* all'utente se intende comunque proseguire all'annullamento del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
* @param p il parametro che indica se il controllo sul compenso e'
* necessario
* @param annullaCollegati valore booleano che indica se procedere o meno con
* l'annullamento dei doc. contabili collegati al mandato
* @return mandato MandatoBulk il Mandato annullato
*/
public MandatoBulk annullaMandato(UserContext userContext,
MandatoBulk mandato, CompensoOptionRequestParameter p,
boolean annullaCollegati, boolean riemissione) throws ComponentException {
try {
if (mandato.isAnnullato())
throw new ApplicationException(
"Il mandato e' già stato annullato");
verificaStatoEsercizio(userContext, mandato.getEsercizio(), mandato
.getCd_cds());
BigDecimal totdettagli = ((Sospeso_det_uscHome) getHome(
userContext, Sospeso_det_uscBulk.class))
.calcolaTotDettagli(new V_mandato_reversaleBulk(mandato
.getEsercizio(), mandato
.getCd_tipo_documento_cont(), mandato.getCd_cds(),
mandato.getPg_mandato()));
if (totdettagli.compareTo(new BigDecimal(0)) > 0 &&
Optional.ofNullable(mandato.getStatoVarSos())
.map(s -> !s.equalsIgnoreCase(StatoVariazioneSostituzione.ANNULLATO_PER_SOSTITUZIONE.value()))
.orElse(Boolean.TRUE))
throw new ApplicationException(
"Annullamento impossibile! Il mandato e' già stato associato ad un riscontro");
Sospeso_det_uscBulk sdu;
for (Iterator i = mandato.getSospeso_det_uscColl().iterator(); i
.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
if (sdu.isToBeCreated() || sdu.isToBeUpdated()
|| sdu.isToBeDeleted())
throw new ApplicationException(
"Annullamento impossibile! Sono state fatte delle modifiche ai sospesi che devono essere ancora salvate");
}
if (MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())) {
if (mandato instanceof MandatoIBulk) {
Var_bilancioBulk varBilancio = ((Var_bilancioHome) getHome(
userContext, Var_bilancioBulk.class))
.findByMandato(mandato);
if (varBilancio != null)
throw new ApplicationException(
"Annullamento impossibile! Esiste una variazione di bilancio Ente associata al mandato di regolarizzazione");
}
}
verificaMandatoSuAnticipo(userContext, mandato);
checkAnnullabilita(userContext, mandato);
if (isMandatoCollegatoAnnullodaRiemettere(userContext, mandato).booleanValue())
throw new ApplicationException(
"Annullamento impossibile! Esiste un mandato annullato associato al mandato.");
if (isAnnullabile(userContext, mandato).compareTo("N") == 0)
throw new ApplicationException(
"Verificare lo stato di trasmissione del mandato. Annullamento impossibile!");
lockBulk(userContext, mandato);
// modifica 16/01/2017 messa sempre o sysdate o 31/12
mandato.setDt_annullamento(DateServices
.getTs_valido(userContext));
if (mandato.getStato_coge().equals(MandatoBulk.STATO_COGE_C))
mandato.setStato_coge(MandatoBulk.STATO_COGE_R);
if (!MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())) {
mandato.setFl_riemissione(riemissione);
mandato.setStato_trasmissione_annullo(MandatoIBulk.STATO_TRASMISSIONE_NON_INSERITO);
}
mandato.annulla();
annullaImportoSospesi(userContext, mandato);
Mandato_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
riga.annulla();
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
aggiornaImportoObbligazioni(userContext, mandato);
makeBulkPersistent(userContext, mandato);
aggiornaStatoFattura(userContext, mandato,
ANNULLAMENTO_MANDATO_ACTION);
/*
* 24/09/2002 Commentata la chiamata alla stored procedure per
* l'aggiornamento dei saldi, in quanto adesso non si imposta più a
* PAGATO lo stato di un Mandato, quando viene associato ad un
* sospeso
*/
// if ( mandato.getIm_mandato().compareTo( mandato.getIm_pagato())
// == 0 )
// aggiornaSaldoPagato( userContext, mandato,
// ANNULLAMENTO_MANDATO_ACTION );
if (mandato.getTi_mandato().equals(MandatoBulk.TIPO_ACCREDITAMENTO)
&& mandato.getReversaliColl().size() > 0) {
annullaDocumentoGenerico(userContext, mandato);
annullaReversaleDiTrasferimento(userContext, mandato);
} else if (mandato.getTi_mandato().equals(
MandatoBulk.TIPO_REGOLARIZZAZIONE)
&& mandato.getReversaliColl().size() > 0) {
aggiornaSaldoPagato(userContext, mandato,
ANNULLAMENTO_MANDATO_ACTION);
annullaReversaleDiRegolarizzazione(userContext, mandato);
} else if (mandato.getDoc_contabili_collColl().size() > 0
&& ((MandatoIBulk) mandato).hasFattura_passiva()) {
/**
* Nel caso di annullamento per sostituzione non annullo le reversali collegate
*/
if (Optional.ofNullable(mandato.getStatoVarSos())
.map(s -> !s.equalsIgnoreCase(StatoVariazioneSostituzione.ANNULLATO_PER_SOSTITUZIONE.value()))
.orElse(Boolean.TRUE)) {
annullaReversaleDiIncassoIVA(userContext,
(MandatoIBulk) mandato);
}
} else if (annullaCollegati) {
annullaDocContabiliCollegati(userContext, mandato);
}
return mandato;
} catch (Exception e) {
throw handleException(mandato, e);
}
}
private void annullaReversaleDiIncassoIVA(UserContext userContext,
MandatoIBulk mandato) throws ComponentException {
try {
/* REVERSALE */
Ass_mandato_reversaleBulk ass = (Ass_mandato_reversaleBulk) mandato
.getReversaliColl().get(0);
ReversaleComponentSession revSession = createReversaleComponentSession();
ReversaleIBulk reversale = (ReversaleIBulk) revSession
.inizializzaBulkPerModifica(userContext,
new ReversaleIBulk(ass.getCd_cds_reversale(), ass
.getEsercizio_reversale(), ass
.getPg_reversale()));
revSession.annullaReversaleDiIncassoIVA(userContext, reversale);
rimuoviVincoliAlMandato(userContext, mandato);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* annullamento PreCondition: E' stata generata la richiesta di annullare un
* Mandato di Regolarizzazione PostCondition: Viene richiesta alla Component
* che gestisce la Reversale l'annullamento della reversale di
* regolarizzazione associata al mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di regolarizzazione
* (associato alla reversale) da annullare
*/
private void annullaReversaleDiRegolarizzazione(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
/* REVERSALE */
Ass_mandato_reversaleBulk ass = (Ass_mandato_reversaleBulk) mandato
.getReversaliColl().get(0);
ReversaleComponentSession revSession = createReversaleComponentSession();
ReversaleBulk reversale = (ReversaleBulk) revSession
.inizializzaBulkPerModifica(userContext,
new ReversaleIBulk(ass.getCd_cds_reversale(), ass
.getEsercizio_reversale(), ass
.getPg_reversale()));
revSession.annullaReversaleDiRegolarizzazione(userContext,
reversale);
rimuoviVincoliAlMandato(userContext, mandato);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* annullamento PreCondition: E' stata generata la richiesta di annullare un
* Mandato di Trasferimento PostCondition: Viene richiesta alla Component
* che gestisce la Reversale l'annullamento della reversale di Trasferimento
* associata al mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di trasferimento
* (associato alla reversale) da annullare
*/
private void annullaReversaleDiTrasferimento(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
/* REVERSALE */
Ass_mandato_reversaleBulk ass = (Ass_mandato_reversaleBulk) mandato
.getReversaliColl().get(0);
ReversaleComponentSession revSession = createReversaleComponentSession();
ReversaleIBulk reversale = (ReversaleIBulk) revSession
.inizializzaBulkPerModifica(userContext,
new ReversaleIBulk(ass.getCd_cds_reversale(), ass
.getEsercizio_reversale(), ass
.getPg_reversale()));
revSession.annullaReversaleDiTrasferimento(userContext, reversale);
rimuoviVincoliAlMandato(userContext, mandato);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
protected void callVsx_man_acc(UserContext userContext, Long pg_call)
throws ComponentException {
LoggableStatement cs = null;
try {
try {
cs = new LoggableStatement(getConnection(userContext),
"{ call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema() + VSX_PROC_NAME
+ "( ? ) }", false, this.getClass());
cs.setObject(1, pg_call);
// cs.setObject( 2, ((CNRUserContext)userContext).getUser());
// cs.setObject( 2,
// ((CNRUserContext)userContext).getEsercizio());
// cs.setObject( 4,
// it.cnr.jada.util.ejb.EJBCommonServices.getServerTimestamp());
cs.executeQuery();
} catch (Throwable e) {
throw handleException(e);
} finally {
if (cs != null)
cs.close();
}
} catch (java.sql.SQLException ex) {
throw handleException(ex);
}
}
public it.cnr.jada.util.RemoteIterator cercaImpegni(
UserContext userContext,
it.cnr.jada.persistency.sql.CompoundFindClause clausole,
MandatoBulk mandato) throws it.cnr.jada.comp.ComponentException {
try {
return iterator(userContext, ((MandatoAccreditamentoHome) getHome(
userContext, MandatoAccreditamentoBulk.class))
.selectImpegno(mandato), V_impegnoBulk.class,
getFetchPolicyName("find"));
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* cerca sospesi PreCondition: E' stata richiesta la ricerca dei sospesi di
* spesa da associare ad un mandato PostCondition: Vengono ricercati tutti i
* sospesi di spesa non annullati che non sono ancora stati associati al
* mandato con cds appartenza uguale al cds appartenenza del mandato,
* esercizio uguale all'esercizio di scrivania, importo disponibile (importo
* disponibile = importo iniziale del sospeso - importo già associato a
* mandati) maggiore di zero, stato uguale a ASSOCIATO A CDS
*
* @param userContext lo UserContext che ha generato la richiesta
* @param clausole le clausole specificate dall'utente
* @param mandato MandatoBulk il mandato
* @return il RemoteIterator della lista dei sospesi di spesa
*/
public it.cnr.jada.util.RemoteIterator cercaSospesi(
UserContext userContext,
it.cnr.jada.persistency.sql.CompoundFindClause clausole,
MandatoBulk mandato) throws it.cnr.jada.comp.ComponentException {
try {
return iterator(userContext, ((SospesoHome) getHome(userContext,
SospesoBulk.class)).selectSospesiDiSpesa(mandato, clausole, Utility.createParametriCnrComponentSession().getParametriCnr(userContext, mandato.getEsercizio()).getFl_tesoreria_unica().booleanValue()),
SospesoBulk.class, getFetchPolicyName("find"));
} catch (Throwable e) {
throw handleException(e);
}
}
private void checkAnnullabilita(UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
LoggableStatement cs = new LoggableStatement(
getConnection(userContext), "{ call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "CNRCTB039.checkAnnullabilita(?, ?, ?, ?)}",
false, this.getClass());
try {
cs.setString(1, "M"); // mandato
cs.setObject(2, mandato.getEsercizio());
cs.setString(3, mandato.getCd_cds());
cs.setObject(4, mandato.getPg_mandato());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
}
private void checkDocAmmCambiato(UserContext userContext,
Mandato_rigaBulk riga) throws ComponentException {
try {
LoggableStatement cs = new LoggableStatement(
getConnection(userContext),
"{ call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "CNRCTB300.checkDocAmmCambiato(?, ?, ?, ?, ?, ? )}",
false, this.getClass());
try {
cs.setString(1, riga.getCd_tipo_documento_amm());
cs.setString(2, riga.getCd_cds());
cs.setObject(3, riga.getEsercizio_doc_amm());
cs.setString(4, riga.getCd_uo_doc_amm());
cs.setObject(5, riga.getPg_doc_amm());
cs.setObject(6, riga.getPg_ver_rec_doc_amm());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
}
protected void chiamaVsx(UserContext userContext,
MandatoAccreditamentoBulk mandato) throws ComponentException {
try {
Integer last_par_num = new Integer(1);
Long pg_call = getPg_call(userContext);
V_impegnoBulk impegno;
for (Iterator i = mandato.getImpegniSelezionatiColl().iterator(); i
.hasNext(); ) {
impegno = (V_impegnoBulk) i.next();
last_par_num = inserisciVsx(userContext, pg_call, mandato,
impegno, last_par_num);
}
callVsx_man_acc(userContext, pg_call);
eliminaVsx(userContext, pg_call);
} catch (Throwable e) {
throw handleException(e);
}
}
/**
* creazione PreCondition: E' stata generata la richiesta di creazione un
* Mandato di Trasferimento o di un Mandato di Regolarizzazione
* PostCondition: Viene creata una istanza di Ass_mandato_reversaleBulk con
* i dati del mandato e della reversale associata
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato
* @param reversale ReversaleBulk la reversale associata al mandato
* @return ass Ass_mandato_reversaleBulk L'associazione
* Mandato-Reversale da creare
*/
public Ass_mandato_reversaleBulk creaAss_mandato_reversale(
UserContext userContext, MandatoBulk mandato,
ReversaleBulk reversale) throws ComponentException {
try {
Ass_mandato_reversaleBulk ass = new Ass_mandato_reversaleBulk();
ass.setToBeCreated();
ass.setUser(mandato.getUser());
ass.setMandato(mandato);
ass.setReversale(reversale);
ass.setTi_origine(Ass_mandato_reversaleBulk.TIPO_ORIGINE_SPESA);
insertBulk(userContext, ass);
mandato.getReversaliColl().add(ass);
reversale.getMandatiColl().add(ass);
return ass;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione mandato PreCondition: E' stata generata la richiesta di
* creazione un Mandato e il mandato supera la validazione (metodo
* verificaMandato) PostCondition: Vengono aggiornati gli importi dei
* sospesi eventualmente associati al mandato (metodo
* aggiornaImportoSospesi), vengono aggiornati gli importi associati a
* documenti contabili di tutte le scadenze di obbligazioni specificate
* nelle righe del mandato (metodo aggiornaImportoObbligazione), vengo
* aggiornati i saldi relativi ai capitoli di spesa (metodo
* aggiornaStatoFattura), vengono aggiornati gli stati delle fatture
* specificate nelle righe dei mandati (metodo aggiornaCapitoloSaldoRiga)
* creazione mandato di regolarizzazione PreCondition: E' stata generata la
* richiesta di creazione un Mandato di regolarizzazione e il mandato supera
* la validazione (metodo verificaMandato) PostCondition: Oltre alle
* PostCondition presenti in 'creazione mandato', il mandato viene
* riscontrato (metodo 'aggiornaSaldoPagato') e viene generata in automatico
* una reversale di regolarizzazione (metodo
* creaReversaleDiregolarizzazione) creazione mandato di trasferimento di
* competenza PreCondition: E' stata generata la richiesta di creazione un
* Mandato di trasferimento e l'utente ha selezionato solo impegni di
* competenza PostCondition: Viene richiesto alla Component che gestisce i
* documenti amministrativi generici di creare un documento generico di
* spesa (di tipo TRASF_S) con tante righe quanti sono gli impegni
* selezionati dall'utente, viene creato un mandato di regolarizzazione di
* tipo competenza (metodo creaMandatoRegolarizzazione) con tante righe
* (metodo creaMandatoRiga) quanti sono gli impegni selezionati dall'utente.
* Con il metodo 'aggiornaImportoObbligazione' vengono incrementati gli
* importi (im_associato_doc_contabili) degli impegni selezionati con
* l'importo trasferito nel mandato. Con il metodo
* 'aggiornaCapitoloSaldoRiga' vengono aggiornati i saldi relativi ai
* capitoli di competenza degli impegni selezionati. Viene creata una
* reversale provvisoria di trasferimento per il Cds che beneficia del
* trasferimento (metodo 'creaReversaleDiRegolarizzazione') creazione
* mandato di trasferimento residuo PreCondition: E' stata generata la
* richiesta di creazione un Mandato di trasferimento e l'utente ha
* selezionato solo impegni residui PostCondition: Viene richiesto alla
* Component che gestisce i documenti amministrativi generici di creare un
* documento generico di spesa (di tipo TRASF_S) con tante righe quanti sono
* gli impegni selezionati dall'utente, viene creato un mandato di
* regolarizzazione di tipo residuo (metodo creaMandatoRegolarizzazione) con
* tante righe (metodo creaMandatoRiga) quanti sono gli impegni selezionati
* dall'utente. Con il metodo 'aggiornaImportoObbligazione' vengono
* incrementati gli importi (im_associato_doc_contabili) degli impegni
* selezionati con l'importo trasferito nel mandato. Con il metodo
* 'aggiornaCapitoloSaldoRiga' vengono aggiornati i saldi relativi ai
* capitoli residui degli impegni selezionati. Viene creata una reversale
* provvisoria di trasferimento per il Cds che beneficia del trasferimento
* (metodo 'creaReversaleDiRegolarizzazione') creazione di 2 mandati di
* trasferimento residuo+competenza PreCondition: E' stata generata la
* richiesta di creazione un Mandato di trasferimento e l'utente ha
* selezionato sia impegni residui che di competenza PostCondition: Vengono
* creati 2 mandati uno di competenza e uno residuo e sono da considerarsi
* valide entrambe le postconditions: 'creazione mandato di trasferimento
* residuo' e 'creazione mandato di trasferimento competenza'
*
* creazione di mandati di pagamento fatture estere PreCondition: E' stata
* generata la richiesta di creazione un Mandato Le fatture selezionate sono
* fatture istituzionali di beni dalla Repubblica di san marino e da paesi
* intra UE PostCondition: Oltre alle PostCondition presenti in 'creazione
* mandato', viene generata in automatico una reversale di incasso (metodo
* creaReversaleDiIncassoIVA) dell'iVA
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da creare
* @return wizard il Mandato di Accreditamento creato bulk il Mandato
* (ordinario) creato
*/
public OggettoBulk creaConBulk(UserContext userContext, OggettoBulk bulk)
throws ComponentException {
try {
if (this instanceof MandatoAutomaticoComponent)
return super.creaConBulk(userContext, bulk);
if (bulk instanceof MandatoAccreditamentoWizardBulk) {
MandatoAccreditamentoWizardBulk wizard = (MandatoAccreditamentoWizardBulk) bulk;
MandatoAccreditamentoBulk mandatoCompetenza = null, mandatoResiduo = null;
Documento_genericoBulk docCompetenza = null, docResiduo = null;
Mandato_rigaBulk mRiga;
V_impegnoBulk impegno;
ReversaleBulk reversale;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = wizard.getImpegniSelezionatiColl().iterator(); i
.hasNext(); ) {
impegno = (V_impegnoBulk) i.next();
if (impegno.isCompetenza()) {
if (mandatoCompetenza == null) {
mandatoCompetenza = creaMandatoAccreditamento(
userContext, wizard,
MandatoBulk.TIPO_COMPETENZA);
docCompetenza = docGenerico_creaDocumentoGenerico(
userContext, mandatoCompetenza, wizard
.getImpegniSelezionatiColl());
}
mRiga = creaMandatoRiga(userContext, wizard,
mandatoCompetenza, impegno, docCompetenza);
} else // residuo
{
if (mandatoResiduo == null) {
mandatoResiduo = creaMandatoAccreditamento(
userContext, wizard,
MandatoBulk.TIPO_RESIDUO);
docResiduo = docGenerico_creaDocumentoGenerico(
userContext, mandatoResiduo, wizard
.getImpegniSelezionatiColl());
}
mRiga = creaMandatoRiga(userContext, wizard,
mandatoResiduo, impegno, docResiduo);
}
aggiornaCapitoloSaldoRiga(userContext, mRiga, session);
}
if (mandatoCompetenza != null) {
mandatoCompetenza.refreshImporto();
verificaMandato(userContext, mandatoCompetenza);
aggiornaImportoObbligazioni(userContext, mandatoCompetenza);
super.creaConBulk(userContext, mandatoCompetenza);
aggiornaStatoFattura(userContext, mandatoCompetenza,
INSERIMENTO_MANDATO_ACTION);
wizard.getMandatiColl().add(mandatoCompetenza);
reversale = creaReversaleDiTrasferimento(userContext,
mandatoCompetenza);
}
if (mandatoResiduo != null) {
mandatoResiduo.refreshImporto();
verificaMandato(userContext, mandatoResiduo);
aggiornaImportoObbligazioni(userContext, mandatoResiduo);
super.creaConBulk(userContext, mandatoResiduo);
aggiornaStatoFattura(userContext, mandatoResiduo,
INSERIMENTO_MANDATO_ACTION);
wizard.getMandatiColl().add(mandatoResiduo);
reversale = creaReversaleDiTrasferimento(userContext,
mandatoResiduo);
}
return wizard;
}
/* MANDATO DI ACCREDITAMENTO END */
else {
/* MANDATO NON DI ACCREDITAMENTO BEGIN */
MandatoBulk mandato = (MandatoBulk) bulk;
// check and lock i doc.amm.
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); )
checkDocAmmCambiato(userContext, (Mandato_rigaBulk) i
.next());
aggiornaCausale(userContext, mandato);
verificaMandato(userContext, mandato);
aggiornaImportoSospesi(userContext, mandato);
Mandato_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
aggiornaImportoObbligazioni(userContext, mandato);
if (mandato.getTi_mandato().equals(
MandatoBulk.TIPO_REGOLARIZZAZIONE))
mandato.setIm_pagato(mandato.getIm_mandato());
mandato = (MandatoBulk) super.creaConBulk(userContext, bulk);
final MandatoBulk mandatoAnnPerSostituzione = getMandatoAnnPerSostituzione(userContext, mandato);
if (Optional.ofNullable(mandatoAnnPerSostituzione).isPresent()) {
if (Optional.ofNullable(mandatoAnnPerSostituzione.getPg_mandato_riemissione()).isPresent()) {
Optional mandatoBulk = Optional.ofNullable(super.findByPrimaryKey(userContext,
new MandatoIBulk(mandatoAnnPerSostituzione.getCd_cds(), mandatoAnnPerSostituzione.getEsercizio(), mandatoAnnPerSostituzione.getPg_mandato_riemissione())))
.filter(MandatoBulk.class::isInstance)
.map(MandatoBulk.class::cast);
if (mandatoBulk.isPresent()) {
mandatoBulk.get().setFl_riemissione(Boolean.TRUE);
mandatoBulk.get().setPg_mandato_riemissione(mandato.getPg_mandato());
mandatoBulk.get().setToBeUpdated();
super.modificaConBulk(userContext, mandatoBulk.get());
}
}
}
aggiornaStatoFattura(userContext, mandato,
INSERIMENTO_MANDATO_ACTION);
/*
* 24/09/2002 Commentata la chiamata alla stored procedure per
* l'aggiornamento dei saldi, in quanto adesso non si imposta
* più a PAGATO lo stato di un Mandato, quando viene associato
* ad un sospeso
*/
// if ( mandato.getIm_pagato().compareTo(
// mandato.getIm_mandato()) == 0 )
// aggiornaSaldoPagato( userContext, mandato,
// INSERIMENTO_MANDATO_ACTION );
if (mandato.getTi_mandato().equals(
MandatoBulk.TIPO_REGOLARIZZAZIONE)) {
aggiornaSaldoPagato(userContext, mandato,
INSERIMENTO_MANDATO_ACTION);
/*
* REVERSALE DI REGOLARIZZAZIONE
*/
ReversaleBulk reversale = creaReversaleDiRegolarizzazione(
userContext, mandato);
/*
* VARIAZIONE DI BILANCIO Se il CDS ementte un mandato di
* regolarizzazione su propri capitoli di spesa deve: 1.
* generare sempre la variazione di bilancio se la reversale
* di regolarizzazione emessa è su accertamenti o partite di
* giro dell'Ente 2. mai in tutti gli altri casi
*/
Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHome(
userContext, Unita_organizzativa_enteBulk.class)
.findAll().get(0);
if (!((CNRUserContext) userContext)
.getCd_unita_organizzativa().equals(
ente.getCd_unita_organizzativa()))
if (!((Mandato_rigaIBulk) mandato.getMandato_rigaColl()
.get(0)).getFl_pgiro().booleanValue())
// Il mandato è stato emesso dal CDS su capitoli di
// spesa propri
if (reversale.getCd_unita_organizzativa().equals(
ente.getCd_unita_organizzativa())) {
// Ricarico il mandato che potrebbe essere stato
// aggiornato dalla creazione reversale
bulk = inizializzaBulkPerModifica(
userContext, mandato);
if (Utility.createParametriCnrComponentSession().getParametriCnr(userContext, mandato.getEsercizio()).getFl_tesoreria_unica().booleanValue()) {
((MandatoIBulk) bulk)
.setStato_coge(MandatoIBulk.STATO_COGE_X);
bulk.setToBeUpdated();
bulk = super.modificaConBulk(
userContext, bulk);
mandato = (MandatoIBulk) bulk;
} else {
// La reversale è stata emessa sull'ente
Var_bilancioBulk varBilancio = creaVariazioneBilancioDiRegolarizzazione(
userContext, (MandatoIBulk) bulk);
((MandatoIBulk) bulk)
.setStato_coge(MandatoIBulk.STATO_COGE_X);
bulk.setToBeUpdated();
bulk = super.modificaConBulk(
userContext, bulk);
((MandatoIBulk) bulk)
.setVar_bilancio(varBilancio);
mandato = (MandatoIBulk) bulk;
}
}
}
if (((MandatoIBulk) mandato).getImReversaleDiIncassoIVA().compareTo(new BigDecimal(0)) > 0 && !Optional.ofNullable(mandatoAnnPerSostituzione).isPresent()) {
creaReversaleDiIncassoIVA(userContext, (MandatoIBulk) mandato);
}
}
/* MANDATO NON DI ACCREDITAMENTO END */
/**
* Verifica CIG su fatture
*/
if (bulk instanceof MandatoIBulk) {
verificaCIGSUFatture(userContext, (MandatoIBulk) bulk);
}
return bulk;
} catch (Exception e) {
throw handleException(e);
}
}
private void aggiornaCausale(UserContext userContext, MandatoBulk mandato) {
final String collect = mandato.getMandato_rigaColl()
.stream()
.flatMap(mandato_rigaBulk -> mandato_rigaBulk.getMandato_siopeColl().stream())
.flatMap(mandato_siopeBulk -> mandato_siopeBulk.getMandatoSiopeCupColl().stream())
.map(MandatoSiopeCupBulk::getCdCup)
.distinct()
.filter(s -> !mandato.getDs_mandato().contains(s))
.map(s -> "CUP ".concat(s))
.collect(Collectors.joining(" "));
mandato.setDs_mandato(
Optional.ofNullable(mandato.getDs_mandato())
.map(s -> {
final String concat = collect.concat(" ").concat(s);
return Optional.ofNullable(concat)
.filter(s1 -> s1.length() > DS_MANDATO_MAX_LENGTH)
.map(s1 -> s1.substring(0, DS_MANDATO_MAX_LENGTH))
.orElse(concat);
})
.orElseGet(() -> mandato.getDs_mandato())
);
}
private MandatoBulk getMandatoAnnPerSostituzione(UserContext userContext, MandatoBulk mandato) throws ComponentException {
final BulkList mandato_rigaColl = mandato.getMandato_rigaColl();
Mandato_rigaHome mandato_rigaHome = (Mandato_rigaHome) getHome(userContext, Mandato_rigaBulk.class);
final Stream> mandatiAnnullatiPerSostituzione = mandato_rigaColl.stream()
.map(mandato_rigaBulk -> {
try {
return getDocumentoAmministrativoSpesaBulk(userContext, mandato_rigaBulk);
} catch (ComponentException e) {
return null;
}
})
.map(iDocumentoAmministrativoSpesaBulk -> {
if (Optional.ofNullable(iDocumentoAmministrativoSpesaBulk).isPresent()) {
try {
final List righe = mandato_rigaHome.findRighe(userContext, iDocumentoAmministrativoSpesaBulk);
getHomeCache(userContext).fetchAll(userContext);
return righe.stream()
.map(Mandato_rigaBulk::getMandato)
.filter(mandatoBulk -> Optional.ofNullable(mandatoBulk.getStatoVarSos()).isPresent())
.filter(mandatoBulk -> mandatoBulk.getStatoVarSos().equals(StatoVariazioneSostituzione.ANNULLATO_PER_SOSTITUZIONE.value()))
.collect(Collectors.toList());
} catch (PersistencyException | ComponentException e) {
return Collections.emptyList();
}
}
return Collections.emptyList();
}).flatMap(List::stream);
return mandatiAnnullatiPerSostituzione
.distinct()
.filter(MandatoBulk.class::isInstance)
.map(MandatoBulk.class::cast)
.distinct()
.findAny()
.orElse(null);
}
/*
* creazione mandato di accreditamento PreCondition: E' stata generata la
* richiesta di creazione un Mandato di accreditamento PostCondition: Viene
* creato un mandato di tipo Accreditamento con CDS/UO = Ente e CDS/UO
* origine = CDS/UO di scrivania. Viene creato un mandatoTerzo coi dati
* relativi al terzo CDS verso cui il mandato e' emesso
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param wizard MandatoAccreditamentoWizardBulk il mandato di
* accreditamento
*
* @param ti_competenza_residuo tipologia (competenza/residuo) del mandato
* da creare
*
* @return mandato MandatoAccreditamentoBulk il mandato di
* regolarizzazione creato
*/
private MandatoAccreditamentoBulk creaMandatoAccreditamento(
UserContext userContext, MandatoAccreditamentoWizardBulk wizard,
String ti_competenza_residuo) throws ComponentException {
try {
MandatoAccreditamentoBulk mandato = new MandatoAccreditamentoBulk();
mandato.setToBeCreated();
mandato.setUser(wizard.getUser());
mandato.setEsercizio(wizard.getEsercizio());
mandato.setCodice_cds(wizard.getCodice_cds());
mandato.setCds(wizard.getCds());
mandato.setUnita_organizzativa(wizard.getUnita_organizzativa());
mandato
.setCd_cds_origine(((it.cnr.contab.utenze00.bp.CNRUserContext) userContext)
.getCd_cds());
mandato
.setCd_uo_origine(((it.cnr.contab.utenze00.bp.CNRUserContext) userContext)
.getCd_unita_organizzativa());
mandato.setStato(MandatoBulk.STATO_MANDATO_EMESSO);
mandato.setDt_emissione(wizard.getDt_emissione());
mandato.setIm_mandato(new BigDecimal(0));
mandato.setIm_pagato(new BigDecimal(0));
mandato.setDs_mandato(MandatoAccreditamentoBulk.DS_MANDATO_ACCREDITAMENTO
+ wizard.getCodice_cds());
mandato.setTi_mandato(MandatoBulk.TIPO_ACCREDITAMENTO);
mandato
.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_MAN);
mandato.setTi_competenza_residuo(ti_competenza_residuo);
mandato.setBanca(wizard.getBanca());
mandato.setModalita_pagamento(wizard.getModalita_pagamento());
mandato
.setStato_trasmissione(MandatoBulk.STATO_TRASMISSIONE_NON_INSERITO);
mandato.setStato_coge(MandatoBulk.STATO_COGE_N);
mandato.setIm_ritenute(new java.math.BigDecimal(0));
mandato.setMandato_terzo(new MandatoAccreditamento_terzoBulk(
mandato, wizard.getMandato_terzo()));
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga di mandato di accreditamento PreCondition: E' stata
* generata la richiesta di creazione di una riga di Mandato di
* accreditamento PostCondition: Viene creata una riga di mandato coi dati
* relativi all'impegno selezionato dall'utente e al documento generico di
* spesa (TRASF_S) creato in automatico alla crezione del mandato
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param wizard MandatoAccreditamentoBulk il mandato di
* accreditamento
*
* @param mandato MandatoBulk il mandato
*
* @param impegno V_impegnoBulk l'impegno selezionato
* dall'utente
*
* @param documento Documento_genericoBulk il documento
* generico di spesa
*
* @return riga Mandato_rigaBulk la riga di mandato creata
*/
private Mandato_rigaBulk creaMandatoRiga(UserContext userContext,
MandatoAccreditamentoBulk wizard, MandatoBulk mandato,
V_impegnoBulk impegno, Documento_genericoBulk documento)
throws ComponentException {
try {
MandatoAccreditamento_rigaBulk riga = new MandatoAccreditamento_rigaBulk();
riga.setToBeCreated();
riga.setUser(mandato.getUser());
riga.setStato(Mandato_rigaBulk.STATO_INIZIALE);
riga.setIm_mandato_riga(impegno.getIm_da_trasferire());
riga.setIm_ritenute_riga(new java.math.BigDecimal(0));
riga.setMandato(mandato);
riga.setImpegno(impegno);
riga.setFl_pgiro(new Boolean(false));
riga.setEsercizio_obbligazione(impegno.getEsercizio());
riga
.setEsercizio_ori_obbligazione(impegno
.getEsercizio_originale());
riga.setPg_obbligazione(impegno.getPg_obbligazione());
riga.setPg_obbligazione_scadenzario(impegno
.getPg_obbligazione_scadenzario());
riga.setEsercizio_doc_amm(documento.getEsercizio());
riga.setCd_cds_doc_amm(documento.getCd_cds());
riga.setCd_uo_doc_amm(documento.getCd_unita_organizzativa());
riga.setPg_doc_amm(documento.getPg_documento_generico());
riga.setCd_tipo_documento_amm(documento.getCd_tipo_documento_amm());
riga.setPg_ver_rec_doc_amm(documento.getPg_ver_rec());
riga.setBancaOptions(wizard.getBancaOptions());
riga.setBanca(wizard.getBanca());
riga.setModalita_pagamentoOptions(wizard
.getModalita_pagamentoOptions());
riga.setModalita_pagamento(wizard.getModalita_pagamento());
((MandatoAccreditamentoBulk) mandato).addToMandato_rigaColl(riga,
impegno);
// Carico automaticamente i codici SIOPE e visualizzo quelli ancora
// collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession().getParametriCnr(
userContext, mandato.getEsercizio()).getFl_siope()
.booleanValue()) {
riga = (MandatoAccreditamento_rigaBulk) aggiornaLegameSIOPE(
userContext, riga);
riga = (MandatoAccreditamento_rigaBulk) setCodiciSIOPECollegabili(
userContext, riga);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga di mandato PreCondition: E' stata generata la richiesta di
* creazione di una riga di Mandato PostCondition: Viene creata una riga di
* mandato coi dati relativi alla scadenza di obbligazione selezionata
* dall'utente e al documento ammninistrativo di spesa selezionato
* dall'utente. Vengono inoltre impostati come dati relativi alla banca e
* alla modalità di pagamento quelli presenti nel documento amministrativo
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoBulk il mandato
*
* @param docPassivo V_doc_passivo_obbligazioneBulk il
* documento ammninistrativo di spesa selezionato dall'utente
*
* @return riga Mandato_rigaBulk la riga di mandato creata
*/
protected Mandato_rigaBulk creaMandatoRiga(UserContext userContext,
MandatoBulk mandato, V_doc_passivo_obbligazioneBulk docPassivo)
throws ComponentException {
try {
Mandato_rigaIBulk riga = new Mandato_rigaIBulk();
riga.setToBeCreated();
riga.setUser(mandato.getUser());
riga.setStato(Mandato_rigaBulk.STATO_INIZIALE);
riga.setIm_mandato_riga(docPassivo.getIm_mandato_riga());
if (docPassivo.getFl_fai_reversale().booleanValue()) {
riga.setIm_ritenute_riga(docPassivo.getIm_iva_doc_amm());
((MandatoIBulk) mandato).setFaiReversale(true);
} else
riga.setIm_ritenute_riga(new BigDecimal(0));
riga.setMandato(mandato);
riga.setEsercizio_obbligazione(docPassivo
.getEsercizio_obbligazione());
riga.setEsercizio_ori_obbligazione(docPassivo
.getEsercizio_ori_obbligazione());
riga.setPg_obbligazione(docPassivo.getPg_obbligazione());
riga.setPg_obbligazione_scadenzario(docPassivo
.getPg_obbligazione_scadenzario());
riga.setFl_pgiro(docPassivo.getFl_pgiro());
riga.setCd_uo_doc_amm(docPassivo.getCd_unita_organizzativa());
riga.setCd_cds_doc_amm(docPassivo.getCd_cds());
riga.setEsercizio_doc_amm(docPassivo.getEsercizio());
riga
.setCd_tipo_documento_amm(docPassivo
.getCd_tipo_documento_amm());
riga.setPg_doc_amm(docPassivo.getPg_documento_amm());
riga.setPg_ver_rec_doc_amm(docPassivo.getPg_ver_rec());
riga.setFlCancellazione(docPassivo.getFl_selezione()
.equalsIgnoreCase("Y"));
riga.setTi_fattura(docPassivo.getTi_fattura());
riga.setPg_lettera(docPassivo.getPg_lettera());
riga.setCd_sospeso(docPassivo.getCd_sospeso());
((Mandato_rigaHome) getHome(userContext, riga.getClass()))
.initializeElemento_voce(userContext, riga);
// imposto il terzo
if (docPassivo.getCodice_terzo_cedente() != null) {
TerzoBulk cedente = (TerzoBulk) getHome(userContext,
TerzoBulk.class).findByPrimaryKey(
new TerzoBulk(docPassivo.getCodice_terzo_cedente()));
riga.setTerzo_cedente(cedente);
}
BancaBulk banca = new BancaBulk();
TerzoBulk terzo = new TerzoBulk(docPassivo
.getCodice_terzo_o_cessionario());
banca.setTerzo(terzo);
riga.setBanca(banca);
if (!MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())) {
banca.setPg_banca(docPassivo.getPg_banca());
banca = (BancaBulk) getHome(userContext, BancaBulk.class)
.findByPrimaryKey(banca);
if (banca == null)
throw new ApplicationException(
"Attenzione! Le coordinate bancarie specificate nel doc. amministrativo per il terzo "
+ docPassivo
.getCodice_terzo_o_cessionario()
+ " non sono valide");
riga.setBanca(banca);
riga.setBancaOptions(findBancaOptions(userContext, riga));
Modalita_pagamentoBulk mod_pagamento = new Modalita_pagamentoBulk();
mod_pagamento.setTerzo(terzo);
Rif_modalita_pagamentoBulk rif_modalita_pagamento = new Rif_modalita_pagamentoBulk(
docPassivo.getCd_modalita_pag());
mod_pagamento.setRif_modalita_pagamento(rif_modalita_pagamento);
mod_pagamento = (Modalita_pagamentoBulk) getHome(userContext,
Modalita_pagamentoBulk.class).findByPrimaryKey(
mod_pagamento);
riga.setModalita_pagamento(mod_pagamento);
riga
.setModalita_pagamentoOptions(findModalita_pagamentoOptions(
userContext, riga));
}
((MandatoIBulk) mandato).addToMandato_rigaColl(riga, docPassivo);
if (docPassivo.getCd_sospeso() != null)
((MandatoIBulk) mandato).getSospesiDa1210List().add(
docPassivo.getCd_sospeso());
// Carico automaticamente i codici SIOPE e visualizzo quelli ancora
// collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession().getParametriCnr(
userContext, mandato.getEsercizio()).getFl_siope()
.booleanValue()) {
riga = (Mandato_rigaIBulk) aggiornaLegameSIOPE(userContext,
riga);
riga = (Mandato_rigaIBulk) setCodiciSIOPECollegabili(
userContext, riga);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga collegata di mandato PreCondition: E' stata generata la
* richiesta di creazione di una riga di Mandato relativa ad un documento
* (nota credito/debito) collegato ad una fattura (riga principale già
* creata) PostCondition: Per le fatture passive per le quali è necessario
* generare la reversale di incasso IVA, l'importo relativo alle ritenute
* della riga collegata a fattura (rigaPrincipale) deve essere
* incrementato/decrementato con l'importo delle eventuali note di
* credito/debito collegate a quella fattura. Tutte le righe di mandato
* relative a note di credito/debito hanno gli importi (sia im_riga che
* im_ritenute) a 0 e il loro valore viene sommato sulla riga principale
* relativa alla fattura
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoBulk il mandato
*
* @param docPassivo V_doc_passivo_obbligazioneBulk il
* documento ammninistrativo di tipo nota credito/debito
*
* @param rigaPrincipale Mandato_rigaBulk riga di mandato già
* creata relativa alla fattura passiva da cui il docPassivo dipende
*
* @return riga Mandato_rigaBulk la riga di mandato creata
*/
private Mandato_rigaBulk creaMandatoRigaCollegato(UserContext userContext,
MandatoBulk mandato, V_doc_passivo_obbligazioneBulk docPassivo,
Mandato_rigaBulk rigaPrincipale) throws ComponentException {
try {
if (rigaPrincipale.getIm_ritenute_riga().compareTo(
new BigDecimal(0)) != 0)
// se la riga principale è una fattura passiva con ritenute,
// aggiungo/tolgo le ritenute delle note di credito/debito
{
if (docPassivo.getIm_iva_doc_amm().compareTo(new BigDecimal(0)) != 0)
rigaPrincipale.setIm_ritenute_riga(rigaPrincipale
.getIm_ritenute_riga().add(
docPassivo.getIm_iva_doc_amm()));
}
return creaMandatoRiga(userContext, mandato, docPassivo);
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione mandato terzo PreCondition: E' stata generata la richiesta di
* creazione di un Mandato_terzoBulk PostCondition: Viene creata una istanza
* di Mandato_terzoBulk coi dati del beneficiario del mandato e viene
* impostato il tipo bollo di default.
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoBulk il mandato
*
* @param cd_terzo Il codice del beneficiario del mandato
*
* @return mTerzo l'istanza di Mandato_terzoBulk creata
*/
private Mandato_terzoBulk creaMandatoTerzo(UserContext userContext,
MandatoBulk mandato, Integer cd_terzo) throws ComponentException {
try {
Mandato_terzoIBulk mTerzo = new Mandato_terzoIBulk();
mTerzo.setToBeCreated();
mTerzo.setUser(mandato.getUser());
mTerzo.setMandato(mandato);
// imposto il terzo
TerzoBulk terzo = (TerzoBulk) getHome(userContext, TerzoBulk.class)
.findByPrimaryKey(new TerzoKey(cd_terzo));
mTerzo.setTerzo(terzo);
// imposto il tipo bollo di default
mTerzo.setTipoBollo(((Tipo_bolloHome) getHome(userContext,
Tipo_bolloBulk.class))
.findTipoBolloDefault(Tipo_bolloBulk.TIPO_SPESA));
return mTerzo;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione mandato terzo per Mandato di accreditamento non SAC
* PreCondition: E' stata generata la richiesta di creazione di un
* Mandato_terzoBulk per un Mandato di accreditamento Il Cds beneficiario
* del mandato è un cds con tipo diverso da SAC PostCondition: Viene creata
* una istanza di Mandato_terzoBulk coi dati dell'uo-cds del Cds
* beneficiario del mandato di accreditamento e viene impostato il tipo
* bollo di default.
*
* creazione mandato terzo per Mandato di accreditamento SAC PreCondition:
* E' stata generata la richiesta di creazione di un Mandato_terzoBulk per
* un Mandato di accreditamento Il Cds beneficiario del mandato è un cds con
* tipo uguale a SAC PostCondition: Viene creata una istanza di
* Mandato_terzoBulk coi dati dell'uo specificata in Configurazione CNR per
* il CDS SAC e viene impostato il tipo bollo di default.
*
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoAccreditamentoWizardBulk il mandato di
* accreditamento
*
* @return mTerzo l'istanza di Mandato_terzoBulk creata per un
* Mandato di accreditamento
*/
private Mandato_terzoBulk creaMandatoTerzoPerCds(UserContext userContext,
MandatoAccreditamentoWizardBulk mandato) throws ComponentException {
try {
MandatoAccreditamento_terzoBulk mTerzo = new MandatoAccreditamento_terzoBulk();
mTerzo.setToBeCreated();
mTerzo.setUser(mandato.getUser());
mTerzo.setMandato(mandato);
// verifico se è il cds SAC
boolean isSac = false;
SQLBuilder sql = getHome(userContext, CdsBulk.class)
.createSQLBuilder();
sql.addSQLClause("AND", "CD_UNITA_ORGANIZZATIVA", SQLBuilder.EQUALS,
mandato.getCodice_cds());
sql.addSQLClause("AND", "CD_TIPO_UNITA", SQLBuilder.EQUALS,
Tipo_unita_organizzativaHome.TIPO_UO_SAC);
List result = getHome(userContext, CdsBulk.class).fetchAll(sql);
if (result.size() != 0)
isSac = true;
// cerco l'unità organizzativa
String cd_uo = null;
if (!isSac) {
sql = getHome(userContext, Unita_organizzativaBulk.class)
.createSQLBuilder();
sql.addSQLClause("AND", "CD_UNITA_PADRE", SQLBuilder.EQUALS, mandato
.getCodice_cds());
sql.addSQLClause("AND", "FL_UO_CDS", SQLBuilder.EQUALS, "Y");
result = getHome(userContext, Unita_organizzativaBulk.class)
.fetchAll(sql);
if (result.size() != 1)
throw new ApplicationException(
"Non è possibile identificare l'uo-cds per il Cds "
+ mandato.getCodice_cds());
cd_uo = ((Unita_organizzativaBulk) result.get(0))
.getCd_unita_organizzativa();
} else {
cd_uo = Optional.ofNullable(((Configurazione_cnrHome)getHome(userContext,Configurazione_cnrBulk.class)).getUoAccreditamentoSac(CNRUserContext.getEsercizio(userContext)))
.orElseThrow(()->new ApplicationException("Configurazione CNR: manca la definizione dell'UO_SPECIALE per ACCREDITAMENTO SAC per l'esercizio "+CNRUserContext.getEsercizio(userContext)+"."));
}
// imposto il terzo
sql = getHome(userContext, TerzoBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, cd_uo);
result = getHome(userContext, TerzoBulk.class).fetchAll(sql);
if (result.size() == 0)
throw handleException(new ApplicationException(
" Impossibile emettere il mandato: l'UO " + cd_uo
+ " non e' stata codificata in anagrafica"));
mTerzo.setTerzo((TerzoBulk) result.get(0));
// imposto il tipo bollo di default
mTerzo.setTipoBollo(((Tipo_bolloHome) getHome(userContext,
Tipo_bolloBulk.class))
.findTipoBolloDefault(Tipo_bolloBulk.TIPO_SPESA));
return mTerzo;
} catch (Exception e) {
throw handleException(e);
}
}
private ReversaleBulk creaReversaleDiIncassoIVA(UserContext userContext,
MandatoIBulk mandato) throws ComponentException {
try {
ReversaleComponentSession revSession = createReversaleComponentSession();
ReversaleBulk reversale = revSession.creaReversaleDiIncassoIVA(
userContext, mandato);
creaAss_mandato_reversale(userContext, mandato, reversale);
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione reversale di regolarizzazione PreCondition: E' stata generata
* la richiesta di creazione di una reversale di regolarizzazione
* PostCondition: Viene richiesta alla Component che gestisce le Reversali
* la creazione di una reversale di regolarizzazione a partire dal mandato
* di regolarizzazione. Viene creata una istanza dell'associazione fra
* Mandato-Reversale (metodo creaAss_mandato_reversale)
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoBulk il mandato di regolarizzazione
*
* @return reversale ReversaleBulk la reversale di
* regolarizzazione creata
*/
private ReversaleBulk creaReversaleDiRegolarizzazione(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
ReversaleBulk reversale = null;
ReversaleComponentSession revSession = createReversaleComponentSession();
reversale = revSession.creaReversaleDiRegolarizzazione(userContext,
mandato);
creaAss_mandato_reversale(userContext, mandato, reversale);
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione reversale di trasferimento PreCondition: E' stata generata la
* richiesta di creazione di una reversale di trasferimento PostCondition:
* Viene richiesta alla Component che gestisce le Reversali la creazione di
* una reversale di trasferimento a partire dal mandato di trasferimento.
* Viene creata una istanza dell'associazione fra Mandato-Reversale (metodo
* creaAss_mandato_reversale)
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoAccreditamentoBulk il mandato di
* trasferimento
*
* @return reversale ReversaleBulk la reversale di
* trasferimento creata
*/
private ReversaleBulk creaReversaleDiTrasferimento(UserContext userContext,
MandatoAccreditamentoBulk mandato) throws ComponentException {
try {
ReversaleComponentSession revSession = createReversaleComponentSession();
ReversaleBulk reversale = revSession.creaReversaleDiTrasferimento(
userContext, mandato);
creaAss_mandato_reversale(userContext, mandato, reversale);
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* agli Accertamenti sia su partite di giro che ordinari
*
* @return AccertamentoAbstractComponentSession l'istanza di
* AccertamentoAbstractComponentSession che serve per
* gestire un accertamento
*/
private AccertamentoAbstractComponentSession createAccertamentoAbstractComponentSession()
throws ComponentException {
try {
return (AccertamentoAbstractComponentSession) EJBCommonServices
.createEJB("CNRDOCCONT00_EJB_AccertamentoAbstractComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* agli Accertamenti
*
* @return AccertamentoComponentSession l'istanza di
* AccertamentoComponentSession che serve per gestire
* un accertamento
*/
private AccertamentoComponentSession createAccertamentoComponentSession()
throws ComponentException {
try {
return (AccertamentoComponentSession) EJBCommonServices
.createEJB("CNRDOCCONT00_EJB_AccertamentoComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni di lettura
* della Configurazione CNR
*
* @return Configurazione_cnrComponentSession l'istanza di
* Configurazione_cnrComponentSession che serve per
* leggere i parametri di configurazione del CNR
*/
private Configurazione_cnrComponentSession createConfigurazioneCnrComponentSession()
throws ComponentException {
try {
return (Configurazione_cnrComponentSession) EJBCommonServices
.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* ai Documenti Amministrativi Generici
*
* @return DocumentoGenericoComponentSession l'istanza di
* DocumentoGenericoComponentSession che serve per
* gestire un documento generico
*/
protected DocumentoGenericoComponentSession createDocumentoGenericoComponentSession()
throws ComponentException {
try {
return (DocumentoGenericoComponentSession) EJBCommonServices
.createEJB("CNRDOCAMM00_EJB_DocumentoGenericoComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* alle Fatture Passive
*
* @return FatturaPassivaComponentSession l'istanza di
* FatturaPassivaComponentSession che serve per gestire
* una fattura passiva
*/
private FatturaPassivaComponentSession createFatturaPassivaComponentSession()
throws ComponentException {
try {
return (FatturaPassivaComponentSession) EJBCommonServices
.createEJB("CNRDOCAMM00_EJB_FatturaPassivaComponentSession");
} catch (Exception e) {
throw handleException(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);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* ai Saldi sui capitoli del Piano dei Conti
*
* @return SaldoComponentSession l'istanza di
* SaldoComponentSession che serve per aggiornare un
* saldo
*/
protected it.cnr.contab.doccont00.ejb.SaldoComponentSession createSaldoComponentSession()
throws ComponentException {
try {
return (SaldoComponentSession) EJBCommonServices
.createEJB("CNRDOCCONT00_EJB_SaldoComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento documento amm.generico PreCondition: E' stata generata la
* richiesta di annullamento di un documento generico PostCondition: Vengono
* aggiornati gli importi associati ai documenti amministrativi delle
* scadenze di obbligazione e/o accertamenti che erano stati utilizzati
* nella contabilizzazione del documento annullato. N.B. L'impostazione
* della data di annullamento del documento generico viene effettuata da una
* stored proceduere
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico da
* annullare
* @return documento Documento_genericoBulk il documento
* generico annullato
*/
/* ATTENZIONE E' LO STESSO METODO DELLA REVERSALE */
/*
* ATTENZIONE le modififiche al documento generico vengono fatte dalla
* stored procedure che aggiorna lo stato
*/
public Documento_genericoBulk docGenerico_annullaDocumentoGenerico(
UserContext userContext, Documento_genericoBulk documento)
throws ComponentException {
try {
// documento.setDt_annullamento( getHome(userContext,
// Documento_genericoBulk.class).getServerTimestamp());
// documento.setToBeUpdated();
/*
* Documento_generico_rigaBulk riga; Obbligazione_scadenzarioBulk
* os; Accertamento_scadenzarioBulk as; for ( Iterator i =
* documento.getDocumento_generico_dettColl().iterator();
* i.hasNext(); ) { riga = (Documento_generico_rigaBulk) i.next();
* if ( riga.getAccertamento_scadenziario() != null ) { // as =
* riga.getAccertamento_scadenziario(); as =
* (Accertamento_scadenzarioBulk)getHome( userContext,
* Accertamento_scadenzarioBulk.class ).findAndLock( new
* Accertamento_scadenzarioBulk(
* riga.getAccertamento_scadenziario().getCd_cds(),
* riga.getAccertamento_scadenziario().getEsercizio(),
* riga.getAccertamento_scadenziario().getEsercizio_originale(),
* riga.getAccertamento_scadenziario().getPg_accertamento(),
* riga.getAccertamento_scadenziario
* ().getPg_accertamento_scadenzario())); AccertamentoBulk
* accertamento = (AccertamentoBulk) getHome( userContext,
* AccertamentoBulk.class ).findAndLock( as.getAccertamento()); //
* accertamento.setUser( userContext.getUser()); // updateBulk(
* userContext, accertamento ); lockBulk( userContext, accertamento
* ); as.setIm_associato_doc_amm(
* as.getIm_associato_doc_amm().subtract(riga.getIm_riga()));
* as.setUser( userContext.getUser()); updateBulk( userContext, as
* );
*
* } else if ( riga.getObbligazione_scadenziario() != null ) { os =
* (Obbligazione_scadenzarioBulk)getHome( userContext,
* Obbligazione_scadenzarioBulk.class ).findAndLock( new
* Obbligazione_scadenzarioBulk(
* riga.getObbligazione_scadenziario().getCd_cds(),
* riga.getObbligazione_scadenziario().getEsercizio(),
* riga.getObbligazione_scadenziario().getEsercizio_originale(),
* riga.getObbligazione_scadenziario().getPg_obbligazione(),
* riga.getObbligazione_scadenziario
* ().getPg_obbligazione_scadenzario())); // os =
* riga.getObbligazione_scadenziario(); ObbligazioneBulk
* obbligazione = (ObbligazioneBulk) getHome( userContext,
* ObbligazioneBulk.class ).findAndLock( os.getObbligazione()); //
* obbligazione.setUser( userContext.getUser()); // updateBulk(
* userContext, obbligazione); lockBulk( userContext, obbligazione);
* os.setIm_associato_doc_amm(
* os.getIm_associato_doc_amm().subtract(riga.getIm_riga()));
* os.setUser( userContext.getUser()); updateBulk( userContext, os
* ); }
*
* } // makeBulkPersistent( userContext, documento );
*/
return documento;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione documento amm.generico PreCondition: E' stata generata la
* richiesta di creazione di un documento generico di spesa di tipo TRASF_S
* a partire da un mandato di accreditamento PostCondition: Un documento
* viene creato con un numero di righe pari al numero di impegni selezionati
* dall'utente di tipo uguale al tipo del mandato(competenza o residuo)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di
* accreditamento
* @param impegni La collezione di impegni selezionati dall'utente
* @return documento Documento_genericoBulk il documento
* generico di spesa creato
*/
public Documento_genericoBulk docGenerico_creaDocumentoGenerico(
UserContext userContext, MandatoAccreditamentoBulk mandato,
Collection impegni) throws ComponentException {
try {
V_impegnoBulk impegno;
Documento_generico_rigaBulk dRiga;
Documento_genericoBulk documento = new Documento_genericoBulk();
documento.setToBeCreated();
documento.setUser(mandato.getUser());
documento.setTi_entrate_spese(Documento_genericoBulk.SPESE);
documento.setEsercizio(mandato.getEsercizio());
documento.setCd_cds(mandato.getCd_cds());
documento.setCd_unita_organizzativa(mandato
.getCd_unita_organizzativa());
documento.setCd_cds_origine(mandato.getCd_cds_origine());
documento.setCd_uo_origine(mandato.getCd_uo_origine());
documento.setTipo_documento(new Tipo_documento_ammBulk(
Numerazione_doc_ammBulk.TIPO_TRASF_S));
documento.setTi_istituz_commerc(Documento_genericoBulk.ISTITUZIONALE);
documento.setStato_cofi(Documento_genericoBulk.STATO_CONTABILIZZATO);
documento.setStato_coge(Documento_genericoBulk.NON_REGISTRATO_IN_COGE);
// documento.setFl_modifica_coge(new Boolean( false));
documento.setStato_coan(Documento_genericoBulk.NON_CONTABILIZZATO_IN_COAN);
documento.setStato_pagamento_fondo_eco("N");
documento.setTi_associato_manrev("T");
documento.setData_registrazione(mandato.getDt_emissione());
documento.setDt_a_competenza_coge(mandato.getDt_emissione());
documento.setDt_da_competenza_coge(mandato.getDt_emissione());
documento
.setDs_documento_generico("DOCUMENTO ASSOCIATO A MANDATO DI TRASFERIMENTO");
documento.setIm_totale(mandato.getIm_mandato());
DivisaBulk divisa = new DivisaBulk(
docGenerico_createConfigurazioneCnrComponentSession()
.getVal01(userContext, new Integer(0), "*",
Configurazione_cnrBulk.PK_CD_DIVISA,
Configurazione_cnrBulk.SK_EURO));
documento.setValuta(divisa);
documento.setCambio(new BigDecimal(1));
for (Iterator i = impegni.iterator(); i.hasNext(); ) {
impegno = (V_impegnoBulk) i.next();
if (impegno.isCompetenza()
&& mandato.getTi_competenza_residuo().equals(
MandatoBulk.TIPO_COMPETENZA))
dRiga = docGenerico_creaDocumentoGenericoRiga(userContext,
documento, impegno, mandato);
else if (!impegno.isCompetenza()
&& mandato.getTi_competenza_residuo().equals(
MandatoBulk.TIPO_RESIDUO))
dRiga = docGenerico_creaDocumentoGenericoRiga(userContext,
documento, impegno, mandato);
}
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession()
.creaConBulk(userContext, documento);
return documento;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga di documento amm.generico di spesa PreCondition: E' stata
* generata la richiesta di creazione di una riga di documento generico di
* spesa di tipo TRASF_S a partire da un impegno selezionato dall'utente nel
* mandato di accreditamento PostCondition: Un riga di documento viene
* creata con i dati relativi al terzo (codice terzo, coordinate bancarie,
* modalità di pagamento) derivati da quelli che l'utente ha specificato nel
* mandato e i dati relativi all'importo derivati dall'impegno selezionato
* dall'utente nel mandato; viene inoltre aggiornato l'importo associato ai
* documenti amministrativi della scadenza di obbligazione che rappresenta
* l'impegno( scadenza.im_associato_doc_amm = scadenza.im_associato_doc_amm
* + documento_riga.im_riga)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico di
* spesa
* @param impegno V_impegnoBulk l'impegno selezionato dall'utente
* nel mandato di accreditamento
* @param mandato MandatoAccreditamentoBulk il mandato di
* accreditamento
* @return riga Documento_generico_rigaBulk la riga del
* documento generico di spesa creata
*/
public Documento_generico_rigaBulk docGenerico_creaDocumentoGenericoRiga(
UserContext userContext, Documento_genericoBulk documento,
V_impegnoBulk impegno, MandatoAccreditamentoBulk mandato)
throws ComponentException {
try {
Documento_generico_rigaBulk riga = new Documento_generico_rigaBulk();
riga.setToBeCreated();
riga.setUser(documento.getUser());
riga.setCd_cds(documento.getCd_cds());
riga.setCd_unita_organizzativa(documento
.getCd_unita_organizzativa());
riga.setCd_tipo_documento_amm(documento.getCd_tipo_documento_amm());
riga.setStato_cofi(Documento_generico_rigaBulk.STATO_CONTABILIZZATO);
riga.setDt_a_competenza_coge(documento.getData_registrazione());
riga.setDt_da_competenza_coge(documento.getData_registrazione());
riga.setTerzo(mandato.getMandato_terzo().getTerzo()); // CNR
AnagraficoBulk anagrafico = (AnagraficoBulk) getHome(userContext,
AnagraficoBulk.class).findByPrimaryKey(
riga.getTerzo().getAnagrafico());
riga.getTerzo().setAnagrafico(anagrafico);
riga.setRagione_sociale(anagrafico.getRagione_sociale());
riga.setNome(anagrafico.getNome());
riga.setCognome(anagrafico.getCognome());
riga.setCodice_fiscale(anagrafico.getCodice_fiscale());
riga.setPartita_iva(anagrafico.getPartita_iva());
riga.setModalita_pagamento(mandato.getModalita_pagamento()
.getRif_modalita_pagamento());
riga.setBanca(mandato.getBanca());
riga.setIm_riga(impegno.getIm_da_trasferire());
riga.setIm_riga_divisa(impegno.getIm_da_trasferire());
riga.setTi_associato_manrev("T");
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk) getHome(
userContext, Obbligazione_scadenzarioBulk.class)
.findByPrimaryKey(
new Obbligazione_scadenzarioBulk(impegno
.getCd_cds(), impegno.getEsercizio(),
impegno.getEsercizio_originale(), impegno
.getPg_obbligazione(), impegno
.getPg_obbligazione_scadenzario()));
getHomeCache(userContext).fetchAll(userContext);
riga.setObbligazione_scadenziario(scadenza);
riga.setDocumento_generico(documento);
documento.getDocumento_generico_dettColl().add(riga);
// aggiorno im_assciato_doc_amm della scadenza
lockBulk(userContext, scadenza.getObbligazione());
// scadenza.getObbligazione().setUser(userContext.getUser());
// updateBulk( userContext, scadenza.getObbligazione());
scadenza.setIm_associato_doc_amm(scadenza.getIm_associato_doc_amm()
.add(riga.getIm_riga()));
updateBulk(userContext, scadenza);
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* alla Configurazione CNR
*
* @return Configurazione_cnrComponentSession l'istanza di
* Configurazione_cnrComponentSession che serve per
* leggere i parametri di configurazione del CNR
*/
protected Configurazione_cnrComponentSession docGenerico_createConfigurazioneCnrComponentSession()
throws ComponentException {
try {
return (Configurazione_cnrComponentSession) EJBCommonServices
.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/* non usato */
public void eliminaConBulk(UserContext userContext, OggettoBulk bulk)
throws it.cnr.jada.comp.ComponentException {
}
protected void eliminaVsx(UserContext userContext, Long pg_call)
throws ComponentException {
try {
LoggableStatement ps = new LoggableStatement(
getConnection(userContext), "DELETE FROM "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema() + "VSX_CHIUSURA "
+ "WHERE PG_CALL = ? ", true, this.getClass());
try {
ps.setObject(1, pg_call);
ps.executeUpdate();
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (SQLException e) {
throw handleException(e);
}
}
/**
* cerca accertamento pgiro PreCondition: E' stato caricato/selezionato un
* impegno su partita di giro PostCondition: La controparte in parte entrate
* viene ricercata e inizializzata
*
* @param userContext lo UserContext che ha generato la richiesta
* @param impegno Reversale_rigaIBulk la riga della reversale
* @return List la lista delle banche definite per il terzo della reversale
*/
private AccertamentoPGiroBulk findAccertamentoPGiro(
UserContext userContext, ImpegnoPGiroBulk impegno)
throws it.cnr.jada.persistency.PersistencyException,
ComponentException {
SQLBuilder sql = getHome(userContext, AccertamentoPGiroBulk.class)
.createSQLBuilder();
sql.addTableToHeader("ASS_OBB_ACR_PGIRO");
sql.addJoin("ASS_OBB_ACR_PGIRO.CD_CDS", "ACCERTAMENTO.CD_CDS");
sql.addJoin("ASS_OBB_ACR_PGIRO.ESERCIZIO", "ACCERTAMENTO.ESERCIZIO");
sql.addJoin("ASS_OBB_ACR_PGIRO.ESERCIZIO_ORI_ACCERTAMENTO",
"ACCERTAMENTO.ESERCIZIO_ORIGINALE");
sql.addJoin("ASS_OBB_ACR_PGIRO.PG_ACCERTAMENTO",
"ACCERTAMENTO.ACCERTAMENTO");
sql.addClause("AND", "ASS_OBB_ACR_PGIRO.CD_CDS", SQLBuilder.EQUALS, impegno
.getCd_cds());
sql.addSQLClause("AND", "ASS_OBB_ACR_PGIRO.ESERCIZIO", SQLBuilder.EQUALS,
impegno.getEsercizio());
sql.addClause("AND", "ASS_OBB_ACR_PGIRO.ESERCIZIO_ORI_OBBLIGAZIONE",
SQLBuilder.EQUALS, impegno.getEsercizio_originale());
sql.addClause("AND", "ASS_OBB_ACR_PGIRO.PG_OBBLIGAZIONE", SQLBuilder.EQUALS,
impegno.getPg_obbligazione());
List result = getHome(userContext, AccertamentoPGiroBulk.class)
.fetchAll(sql);
if (result == null || result.size() == 0)
throw new ApplicationException(
"Attenzione! Non esiste la controparte di entrata per l'annotazione di spesa su partita di giro "
+ impegno.getEsercizio_originale()
+ "/"
+ impegno.getPg_obbligazione());
else if (result.size() > 1)
throw new ApplicationException(
"Attenzione! Esiste più di una controparte di entrata per l'annotazione di spesa su partita di giro "
+ impegno.getEsercizio_originale()
+ "/"
+ impegno.getPg_obbligazione());
return (AccertamentoPGiroBulk) result.get(0);
}
/**
* lista le coordinate bancarie PreCondition: E' stato creata una riga di
* mandato con tipologia diversa da quella di regolarizzazione e di
* trasferimento PostCondition: La lista delle coordinate bancarie del terzo
* beneficiario del mandato viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga di mandato
* @return List la lista delle banche definite per il terzo beneficiario del
* mandato
*/
public List findBancaOptions(UserContext userContext, Mandato_rigaBulk riga)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (riga.getMandato() != null
&& MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(riga.getMandato()
.getTi_mandato()))
return null;
SQLBuilder sql = getHome(userContext, BancaBulk.class)
.createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, riga.getCd_terzo());
sql.addSQLClause("AND", "BANCA.CD_TERZO_DELEGATO", SQLBuilder.ISNULL, null);
sql.addSQLClause("AND", "BANCA.FL_CANCELLATO", SQLBuilder.EQUALS, "N");
/* if ( riga instanceof Mandato_rigaIBulk) */
if (riga.getBanca() != null
&& riga.getBanca().getTi_pagamento() != null)
sql.addClause("AND", "ti_pagamento", SQLBuilder.EQUALS, riga.getBanca()
.getTi_pagamento());
return getHome(userContext, BancaBulk.class).fetchAll(sql);
}
/**
* lista le coordinate bancarie PreCondition: E' stato creata una riga di
* mandato di trasferimento PostCondition: La lista delle coordinate
* bancarie del terzo beneficiario del mandato viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di
* trasferimento
* @return result la lista delle banche definite per il terzo beneficiario
* del mandato null non è stata definita nessuna banca per il terzo
* beneficiario del mandato
*/
public List findBancaOptions(UserContext userContext,
MandatoAccreditamentoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (mandato.getMandato_terzo() != null
&& !mandato.isMandatoAccreditamentoBulk()) {
if (mandato.getModalita_pagamentoOptions() != null
&& mandato.getModalita_pagamento().getCd_modalita_pag() == null)
mandato.setModalita_pagamento((Modalita_pagamentoBulk) mandato
.getModalita_pagamentoOptions().get(0));
SQLBuilder sql = getHome(userContext, BancaBulk.class)
.createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, mandato
.getMandato_terzo().getCd_terzo());
sql
.addSQLClause("AND", "BANCA.CD_TERZO_DELEGATO", SQLBuilder.ISNULL,
null);
sql.addSQLClause("AND", "BANCA.FL_CANCELLATO", SQLBuilder.EQUALS, "N");
sql.addOrderBy("FL_CC_CDS DESC");
if (mandato.getModalita_pagamento() != null
&& mandato.getModalita_pagamento().getCd_modalita_pag() != null) {
SQLBuilder sql2 = getHome(userContext,
Modalita_pagamentoBulk.class).createSQLBuilder();
sql2.setHeader("SELECT TI_PAGAMENTO ");
sql2.addTableToHeader("rif_modalita_pagamento");
sql2.addSQLClause("AND", "modalita_pagamento.cd_terzo",
SQLBuilder.EQUALS, mandato.getMandato_terzo().getCd_terzo());
sql2.addSQLClause("AND", "modalita_pagamento.cd_modalita_pag",
SQLBuilder.EQUALS, mandato.getModalita_pagamento()
.getCd_modalita_pag());
sql2.addSQLJoin("modalita_pagamento.cd_modalita_pag",
"rif_modalita_pagamento.cd_modalita_pag");
sql2.addSQLClause("AND",
"MODALITA_PAGAMENTO.CD_TERZO_DELEGATO", SQLBuilder.ISNULL,
null);
sql.addSQLClause("AND", "TI_PAGAMENTO", SQLBuilder.EQUALS, sql2);
}
List result = getHome(userContext, BancaBulk.class).fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException(
"Non esistono coordinate bancarie per il terzo "
+ mandato.getMandato_terzo().getCd_terzo());
return result;
}
if (mandato.getMandato_terzo() != null
&& mandato.isMandatoAccreditamentoBulk()) {
mandato.setModalita_pagamento(new Modalita_pagamentoBulk("BO",
mandato.getMandato_terzo().getCd_terzo()));
SQLBuilder sql = getHome(userContext, BancaBulk.class)
.createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, mandato
.getMandato_terzo().getCd_terzo());
sql
.addSQLClause("AND", "BANCA.CD_TERZO_DELEGATO", SQLBuilder.ISNULL,
null);
sql.addSQLClause("AND", "BANCA.FL_CANCELLATO", SQLBuilder.EQUALS, "N");
sql.addSQLClause("AND", "BANCA.FL_CC_CDS", SQLBuilder.EQUALS, "Y");
if (mandato.getModalita_pagamento() != null
&& mandato.getModalita_pagamento().getCd_modalita_pag() != null) {
SQLBuilder sql2 = getHome(userContext,
Modalita_pagamentoBulk.class).createSQLBuilder();
sql2.setHeader("SELECT TI_PAGAMENTO ");
sql2.addTableToHeader("rif_modalita_pagamento");
sql2.addSQLClause("AND", "modalita_pagamento.cd_terzo",
SQLBuilder.EQUALS, mandato.getMandato_terzo().getCd_terzo());
sql2.addSQLClause("AND", "modalita_pagamento.cd_modalita_pag",
SQLBuilder.EQUALS, mandato.getModalita_pagamento()
.getCd_modalita_pag());
sql2.addSQLJoin("modalita_pagamento.cd_modalita_pag",
"rif_modalita_pagamento.cd_modalita_pag");
sql2.addSQLClause("AND",
"MODALITA_PAGAMENTO.CD_TERZO_DELEGATO", SQLBuilder.ISNULL,
null);
sql.addSQLClause("AND", "TI_PAGAMENTO", SQLBuilder.EQUALS, sql2);
}
List result = getHome(userContext, BancaBulk.class).fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException(
"Non esistono coordinate bancarie per il terzo "
+ mandato.getMandato_terzo().getCd_terzo());
return result;
} else
return null;
}
/**
* find disponibilità di cassa capitolo PreCondition: E' stata richiesta la
* disponibilita di cassa per ogni capitolo della scadenza di obbligazione
* presente nella riga del mandato PostCondition: Viene restituita la
* disponibilità di cassa di ogni capitolo presente nel dettaglio delle
* scadenze dell'obbligazione pagate dalla riga del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga del mandato di cui si
* verifica disponibilità sui capitoli
*/
private List findDisponibilitaDiCassaPerCapitolo(UserContext userContext,
Mandato_rigaBulk riga) throws ComponentException {
try {
BulkHome home = null;
if (riga.getMandato().TIPO_COMPETENZA.equals(riga.getMandato()
.getTi_competenza_residuo()))
home = getHome(userContext,
it.cnr.contab.prevent00.bulk.Voce_f_saldi_cmpBulk.class);
else
home = getHome(
userContext,
it.cnr.contab.prevent00.bulk.Voce_f_saldi_cmp_resBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.setDistinctClause(true);
sql.addTableToHeader("obbligazione_scad_voce", "b");
sql.addSQLClause("AND", "b.cd_cds", SQLBuilder.EQUALS, riga.getCd_cds());
sql.addSQLClause("AND", "b.esercizio", SQLBuilder.EQUALS, riga
.getEsercizio_obbligazione());
sql.addSQLClause("AND", "b.esercizio_originale", SQLBuilder.EQUALS, riga
.getEsercizio_ori_obbligazione());
sql.addSQLClause("AND", "b.pg_obbligazione", SQLBuilder.EQUALS, riga
.getPg_obbligazione());
sql.addSQLClause("AND", "b.pg_obbligazione_scadenzario",
SQLBuilder.EQUALS, riga.getPg_obbligazione_scadenzario());
sql.addSQLJoin("b.esercizio", "voce_f_saldi_cmp.esercizio");
sql.addSQLJoin("b.CD_VOCE", "voce_f_saldi_cmp.cd_voce");
sql.addSQLJoin("b.ti_gestione", "voce_f_saldi_cmp.ti_gestione");
sql.addSQLJoin("b.ti_appartenenza",
"voce_f_saldi_cmp.ti_appartenenza");
sql.addSQLJoin("b.cd_cds", "voce_f_saldi_cmp.cd_cds");
// //sql.addClause( "AND", "ti_competenza_residuo", sql.EQUALS,
// riga.getMandato().getTi_competenza_residuo());
return home.fetchAll(sql);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* find disponibilità di cassa capitolo PreCondition: E' stata richiesta la
* disponibilita di cassa per ogni capitolo di ogni obbligazione pagata del
* mandato PostCondition: Viene restituita la disponibilità di cassa di ogni
* capitolo presente nel dettaglio delle scadenze delle obbligazioni pagate
* da ogni riga del mandato (metodo
* 'findDisponibilitaDiCassaPerCapitolo(Mandato_rigaBulk)')
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato di cui si verifica
* disponibilità di cassa sui capitoli
*/
public List findDisponibilitaDiCassaPerCapitolo(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
List result = new LinkedList();
Mandato_rigaBulk riga;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
if (!riga.getFl_pgiro().booleanValue())
result.addAll(findDisponibilitaDiCassaPerCapitolo(
userContext, riga));
}
// accorpa quelli uguali
HashMap hm = new HashMap();
it.cnr.contab.prevent00.bulk.Voce_f_saldi_cmpKey voce;
for (Iterator i = result.iterator(); i.hasNext(); ) {
voce = (it.cnr.contab.prevent00.bulk.Voce_f_saldi_cmpKey) i
.next();
hm.put(voce.getKey(), voce);
}
result = new LinkedList();
for (Iterator i = hm.values().iterator(); i.hasNext(); ) {
voce = (it.cnr.contab.prevent00.bulk.Voce_f_saldi_cmpKey) i
.next();
result.add(voce);
}
return result;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* find disponibilità di cassa Cds PreCondition: E' stata richiesta la
* disponibilita di cassa di un cds diverso da ente ( disp cassa CDS = fondo
* di cassa iniziale del Cds per l'esercizio di scrivania + mandati di
* accreditamento del CNR emessi a favore di questo Cds - mandati emessi dal
* Cds - modello 1210 emessi dal Cds) PostCondition: Viene restituita la
* disponibilità di cassa del cds
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato emesso dal Cds di cui si
* verifica disponibilità di cassa
*/
private BigDecimal findDisponibilitaDiCassaPerCDS(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
SQLBuilder sql = getHome(userContext, V_disp_cassa_cdsBulk.class)
.createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, mandato
.getEsercizio());
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS,
((CNRUserContext) userContext).getCd_cds());
List result = getHome(userContext, V_disp_cassa_cdsBulk.class)
.fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException(
"Non esiste il record per la disponibilità di cassa del CDS: "
+ mandato.getCd_cds() + " - esercizio: "
+ mandato.getEsercizio());
V_disp_cassa_cdsBulk cassa = (V_disp_cassa_cdsBulk) result.get(0);
return cassa.getIm_disponibilita_cassa();
} catch (Exception e) {
throw handleException(e);
}
}
/**
* find disponibilità di cassa CNR PreCondition: E' stata richiesta la
* disponibilita di cassa dell'ente ( disp cassa CNR = fondo di cassa
* iniziale del CNR per l'esercizio di scrivania + saldo delle reversali
* emesse dal CNR + sospesi di entrata non ancora associati alle reversali -
* saldo dei mandati emessi dal CNR - sospesi di spesa non ancora associati
* ai mandati) PostCondition: Viene restituita la disponibilità di cassa
* dell'ente
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato emesso dal Cds di cui si
* verifica disponibilità di cassa
*/
private BigDecimal findDisponibilitaDiCassaPerCNR(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class)
.findAll().get(0);
SQLBuilder sql = getHome(userContext, V_disp_cassa_cnrBulk.class)
.createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, mandato
.getEsercizio());
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, ente
.getCd_unita_organizzativa());
List result = getHome(userContext, V_disp_cassa_cnrBulk.class)
.fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException(
"Non esiste il record per la disponibilità di cassa del CNR: "
+ mandato.getCd_cds() + " - esercizio: "
+ mandato.getEsercizio());
V_disp_cassa_cnrBulk cassa = (V_disp_cassa_cnrBulk) result.get(0);
return cassa.getIm_disponibilta_cassa();
} catch (Exception e) {
throw handleException(e);
}
}
/**
* find disponibilità di cassa Cds PreCondition: E' stata richiesta la
* disponibilita di cassa di un cds diverso da ente ( disp cassa CDS = fondo
* di cassa iniziale del Cds per l'esercizio di scrivania + mandati di
* accreditamento del CNR emessi a favore di questo Cds - mandati emessi dal
* Cds - modello 1210 emessi dal Cds) PostCondition: Viene restituita la
* disponibilità di cassa del cds
*
* find disponibilità di cassa CNR PreCondition: E' stata richiesta la
* disponibilita di cassa dell'ente ( disp cassa CNR = fondo di cassa
* iniziale del CNR per l'esercizio di scrivania + saldo delle reversali
* emesse dal CNR + sospesi di entrata non ancora associati alle reversali -
* saldo dei mandati emessi dal CNR - sospesi di spesa non ancora associati
* ai mandati) PostCondition: Viene restituita la disponibilità di cassa
* dell'ente
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato emesso dal Cds di cui si
* verifica disponibilità di cassa
*/
private BigDecimal findDisponibilitaDiCassaPerContoCorrente(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class)
.findAll().get(0);
if (!mandato.getCd_cds().equals(ente.getCd_unita_organizzativa())) // mandato
// CDS
return findDisponibilitaDiCassaPerCDS(userContext, mandato);
else
// mandato CNR
return findDisponibilitaDiCassaPerCNR(userContext, mandato);
} catch (Exception e) {
throw handleException(e);
}
}
public List findImpegni(UserContext userContext,
MandatoAccreditamentoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
SQLBuilder sql = getHome(userContext, V_impegnoBulk.class)
.createSQLBuilder();
sql.addTableToHeader("MANDATO_RIGA");
sql.addSQLJoin("MANDATO_RIGA.CD_CDS", "V_IMPEGNO.CD_CDS");
sql.addSQLJoin("MANDATO_RIGA.ESERCIZIO", "V_IMPEGNO.ESERCIZIO");
sql.addSQLJoin("MANDATO_RIGA.ESERCIZIO_ORI_OBBLIGAZIONE",
"V_IMPEGNO.ESERCIZIO_ORIGINALE");
sql.addSQLJoin("MANDATO_RIGA.PG_OBBLIGAZIONE",
"V_IMPEGNO.PG_OBBLIGAZIONE");
sql.addSQLJoin("MANDATO_RIGA.PG_OBBLIGAZIONE_SCADENZARIO",
"V_IMPEGNO.PG_OBBLIGAZIONE_SCADENZARIO");
sql.addSQLClause("AND", "MANDATO_RIGA.ESERCIZIO", SQLBuilder.EQUALS, mandato
.getEsercizio());
sql.addSQLClause("AND", "MANDATO_RIGA.CD_CDS", SQLBuilder.EQUALS, mandato
.getCd_cds());
sql.addSQLClause("AND", "MANDATO_RIGA.PG_MANDATO", SQLBuilder.EQUALS, mandato
.getPg_mandato());
List result = getHome(userContext, V_impegnoBulk.class).fetchAll(sql);
// imposto l'importo da trasferire per ogni impegno
V_impegnoBulk impegno;
Mandato_rigaBulk riga;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
for (Iterator j = result.iterator(); j.hasNext(); ) {
impegno = (V_impegnoBulk) j.next();
if (impegno.getEsercizio().compareTo(riga.getEsercizio()) == 0
&& impegno.getEsercizio_originale().compareTo(
riga.getEsercizio_ori_obbligazione()) == 0
&& impegno.getPg_obbligazione().compareTo(
riga.getPg_obbligazione()) == 0
&& impegno.getPg_obbligazione_scadenzario().compareTo(
riga.getPg_obbligazione_scadenzario()) == 0
&& impegno.getCd_cds().compareTo(riga.getCd_cds()) == 0) {
impegno.setIm_da_trasferire(riga.getIm_mandato_riga());
break;
}
}
}
return result;
}
/**
* lista le modalità di pagamento PreCondition: E' stato creata una riga di
* mandato con tipologia diversa da quella di regolarizzazione e di
* trasferimento PostCondition: La lista delle modalità di pagamento del
* terzo beneficiario, tutte appartenenti alla stessa classe
* (Bancario/Postale/..) per cui si sta emettendo il mandato, viene
* estratta. Vengono escluse le modalità di pagamento riferite a terzi
* cessionari
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga di mandato
* @return List la lista delle modalità di pagamento definite per il terzo
* beneficiario del mandato
*/
public List findModalita_pagamentoOptions(UserContext userContext,
Mandato_rigaBulk riga)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (riga.getMandato() != null
&& MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(riga.getMandato()
.getTi_mandato()))
return null;
SQLBuilder sql = getHome(userContext, Modalita_pagamentoBulk.class)
.createSQLBuilder();
sql.addTableToHeader("RIF_MODALITA_PAGAMENTO");
sql.addSQLJoin("MODALITA_PAGAMENTO.CD_MODALITA_PAG",
"RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG");
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, riga.getCd_terzo());
sql.addClause("AND", "cd_terzo_delegato", SQLBuilder.ISNULL, null);
/* if ( riga instanceof Mandato_rigaIBulk) */
if (riga.getBanca() != null
&& riga.getBanca().getTi_pagamento() != null)
sql.addSQLClause("AND", "RIF_MODALITA_PAGAMENTO.TI_PAGAMENTO",
SQLBuilder.EQUALS, riga.getBanca().getTi_pagamento());
return getHome(userContext, Modalita_pagamentoBulk.class).fetchAll(sql);
}
/**
* lista le modalità di pagamento PreCondition: E' stato creata una riga di
* mandato di trasferimento PostCondition: La lista delle modalità di
* pagamento del terzo beneficiario, tutte appartenenti alla stessa classe
* (Bancario/Postale/..) per cui si sta emettendo il mandato, viene
* estratta.Vengono escluse le modalità di pagamento riferite a terzi
* cessionari
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di
* trasferimento
* @return result la lista delle modalità di pagamento definite per il terzo
* beneficiario del mandato null non è stata definita nessuna
* modalità di pagamento per il terzo beneficiario del mandato
*/
public List findModalita_pagamentoOptions(UserContext userContext,
MandatoAccreditamentoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (mandato.getMandato_terzo() != null) {
SQLBuilder sql = getHome(userContext, Modalita_pagamentoBulk.class)
.createSQLBuilder();
sql.addTableToHeader("RIF_MODALITA_PAGAMENTO");
sql.addSQLJoin("MODALITA_PAGAMENTO.CD_MODALITA_PAG",
"RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG");
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, mandato
.getMandato_terzo().getCd_terzo());
sql.addClause("AND", "cd_terzo_delegato", SQLBuilder.ISNULL, null);
if (mandato.isMandatoAccreditamentoBulk())
sql.addSQLClause("AND", "MODALITA_PAGAMENTO.CD_MODALITA_PAG",
SQLBuilder.EQUALS, "BO");
// if ( riga instanceof Mandato_rigaIBulk)
// sql.addSQLClause( "AND", "RIF_MODALITA_PAGAMENTO.TI_PAGAMENTO",
// sql.EQUALS,
// ((Mandato_rigaIBulk)riga).getDoc_passivo().getTi_pagamento() );
List result = getHome(userContext, Modalita_pagamentoBulk.class)
.fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException(
"Non esistono modalità di pagamento per il terzo "
+ mandato.getMandato_terzo().getCd_terzo());
return result;
} else
return null;
}
/**
* lista le tipologie di bollo PreCondition: E' stato creata una riga di
* mandato di trasferimento PostCondition: La lista delle tipologie di bollo
* di tipo spesa viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di trasferimento
* @return List la lista dei tipi di bollo definiti per il mandato di
* trasferimento
*/
public List findTipoBolloOptions(UserContext userContext,
MandatoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
SQLBuilder sql = getHome(userContext, Tipo_bolloBulk.class)
.createSQLBuilder();
sql.addClause("AND", "ti_entrata_spesa", SQLBuilder.NOT_EQUALS,
Tipo_bolloBulk.TIPO_ENTRATA);
sql.addOrderBy("cd_tipo_bollo");
return getHome(userContext, Tipo_bolloBulk.class).fetchAll(sql);
}
/**
* lista le unità organizzative - scrivania = Ente PreCondition: E' stata
* richiesta una lista delle unità organizzative per cui è possibile
* emettere un mandato e l'unità organizzativa di scrivania e' l'UO Ente
* PostCondition: Una lista comprendente solo l'UO Ente viene restituita
* lista le unità organizzative - scrivania diversa da UO Ente PreCondition:
* E' stata richiesta una lista delle unità organizzative per cui è
* possibile emettere un mandato e l'unità organizzativa di scrivania e'
* diversa dall'UO Ente PostCondition: Una lista comprendente l'UO Ente e
* l'UO di scrivania viene restituita
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato
* @return result la lista delle unità organizzative definite per il mandato
*/
public List findUnita_organizzativaOptions(UserContext userContext,
MandatoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
it.cnr.jada.persistency.IntrospectionException, ComponentException {
SQLBuilder sql = getHome(userContext,
Unita_organizzativa_enteBulk.class).createSQLBuilder();
List result = getHome(userContext, Unita_organizzativa_enteBulk.class)
.fetchAll(sql);
mandato.setCd_uo_ente(((Unita_organizzativaBulk) result.get(0))
.getCd_unita_organizzativa());
if (mandato.getUnita_organizzativa() != null
&& mandato.getUnita_organizzativa().getCd_unita_organizzativa() != null
&& !((Unita_organizzativaBulk) result.get(0))
.getCd_unita_organizzativa().equals(
mandato.getUnita_organizzativa()
.getCd_unita_organizzativa()))
result.add(mandato.getUnita_organizzativa());
return result;
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private Timestamp getDataOdierna(it.cnr.jada.UserContext userContext)
throws ComponentException {
try {
return getHome(userContext, MandatoIBulk.class).getServerDate();
} catch (it.cnr.jada.persistency.PersistencyException ex) {
throw handleException(ex);
}
}
protected Long getPg_call(UserContext userContext)
throws ComponentException {
LoggableStatement cs = null;
Long pg = null;
try {
try {
cs = new LoggableStatement(getConnection(userContext),
"{ ? = call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "IBMUTL020.vsx_get_pg_call() }", false, this
.getClass());
cs.registerOutParameter(1, java.sql.Types.NUMERIC);
cs.executeQuery();
pg = new Long(cs.getLong(1));
} catch (Throwable e) {
throw handleException(e);
} finally {
if (cs != null)
cs.close();
}
} catch (java.sql.SQLException ex) {
throw handleException(ex);
}
if (pg == null)
throw new it.cnr.jada.comp.ApplicationException(
"Impossibile ottenere un progressivo valido per la vista VSX_CHIUSURA!");
return pg;
}
/**
* inizializzazione di una istanza di MandatoBulk PreCondition: E' stata
* richiesta l'inizializzazione di una istanza di MandatoBulk PostCondition:
* Viene impostata la data di emissione del mandato con la data del Server
* inizializzazione di una istanza di MandatoAccreditamentoWizardBulk
* PreCondition: E' stata richiesta l'inizializzazione di una istanza di
* MandatoAccreditamentoWizardBulk, l'oggetto bulk utilizzato come wizard
* per la generazione dei mandati di accreditamento PostCondition: Viene
* impostata la data di emissione del wizard con la data del Server, il Cds
* e l'UO di appartenenza con il Cds e l'UO dell'Ente, il mandato terzo con
* il codice terzo che corrisponde al Cds beneficiario del mandato di
* accreditamento (metodo creaMandatoTerzoPerCds), viene impostata la lista
* degli impegni (metodo listaImpegniCNR) del CNR inizializzazione di una
* istanza di RicercaMandatoAccreditamentoBulk PreCondition: E' stata
* richiesta l'inizializzazione di una istanza di
* RicercaMandatoAccreditamentoBulk, l'oggetto bulk utilizzato per
* visualizzare i dati di tutti i Cds verso cui emettere i mandati di
* accreditamento PostCondition: Viene impostata la disponibilità di cassa
* del CNR e viene inizializzata la lista dei Cds con la loro disponibilità
* di cassa
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da inizializzare per
* l'inserimento
* @return bulk OggettoBulk il Mandato inizializzato per
* l'inserimento
*/
public OggettoBulk inizializzaBulkPerInserimento(UserContext aUC,
OggettoBulk bulk) throws ComponentException {
try {
Unita_organizzativa_enteBulk uoEnte = (Unita_organizzativa_enteBulk) getHome(
aUC, Unita_organizzativa_enteBulk.class).findAll().get(0);
if (bulk instanceof MandatoBulk) {
((MandatoBulk) bulk).setDt_emissione(DateServices
.getDt_valida(aUC));
//Eliminato in quanto sono campi valorizzati ma non utilizzati
// ((MandatoBulk) bulk)
// .setIm_disp_cassa_cds(findDisponibilitaDiCassaPerCDS(
// aUC, (MandatoBulk) bulk));
// ((MandatoBulk) bulk)
// .setIm_disp_cassa_CNR(findDisponibilitaDiCassaPerCNR(
// aUC, (MandatoBulk) bulk));
// accreditamento
if (bulk instanceof MandatoAccreditamentoWizardBulk) {
MandatoAccreditamentoWizardBulk mandato = (MandatoAccreditamentoWizardBulk) bulk;
mandato.setCds((CdsBulk) getHome(aUC, EnteBulk.class)
.findAll().get(0));
mandato.setUnita_organizzativa(uoEnte);
mandato.setMandato_terzo(creaMandatoTerzoPerCds(aUC,
mandato));
bulk = listaImpegniCNR(aUC, mandato);
}
verificaStatoEsercizio(aUC,
((MandatoBulk) bulk).getEsercizio(),
((MandatoBulk) bulk).getCd_cds());
/*
* simona 9/10/02 - inserita gestione mandato accreditamento
* cds-cds //regolarizzazione else if (
* MandatoBulk.TIPO_REGOLARIZZAZIONE.equals( ((MandatoBulk)
* bulk).getTi_mandato())) { ((MandatoBulk) bulk).setCds(
* (CdsBulk)getHome( aUC, EnteBulk.class).findAll().get(0));
* ((MandatoBulk) bulk).setUnita_organizzativa( uoEnte ); if
* (!((CNRUserContext) aUC).getCd_unita_organizzativa().equals(
* uoEnte.getCd_unita_organizzativa())) throw new
* ApplicationException
* ("Funzione non consentita per utente non abilitato a " +
* uoEnte.getCd_unita_organizzativa() ); }
*/
// pagamento
//devono essere visualizzati anche i mandati di pagamento fatti dalla 999 (F24EP)
/*
if (!MandatoBulk.TIPO_REGOLARIZZAZIONE
.equals(((MandatoBulk) bulk).getTi_mandato())
&& !MandatoBulk.TIPO_ACCREDITAMENTO
.equals(((MandatoBulk) bulk).getTi_mandato())
&& ((CNRUserContext) aUC).getCd_unita_organizzativa()
.equals(uoEnte.getCd_unita_organizzativa()))
throw new ApplicationException(
"Funzione non consentita per utente abilitato a "
+ uoEnte.getCd_unita_organizzativa());
*/
bulk = super.inizializzaBulkPerInserimento(aUC, bulk);
return bulk;
} else if (bulk instanceof RicercaMandatoAccreditamentoBulk) {
if (!((CNRUserContext) aUC).getCd_unita_organizzativa().equals(
uoEnte.getCd_unita_organizzativa()))
throw new ApplicationException(
"Funzione non consentita per utente non abilitato a "
+ uoEnte.getCd_unita_organizzativa());
verificaStatoEsercizio(aUC, ((CNRUserContext) aUC)
.getEsercizio(), ((CNRUserContext) aUC).getCd_cds());
RicercaMandatoAccreditamentoBulk ricerca = (RicercaMandatoAccreditamentoBulk) bulk;
ricerca
.setIm_disp_cassa_CNR(((V_disp_cassa_cnrHome) getHome(
aUC, V_disp_cassa_cnrBulk.class))
.findIm_disponibilita_cassaCNR(((it.cnr.contab.utenze00.bp.CNRUserContext) aUC)
.getEsercizio()));
ricerca.setDt_scadenza_obbligazioni(getHome(aUC,
MandatoAccreditamentoBulk.class).getServerTimestamp());
ricerca
.setCentriDiSpesaColl(((V_disp_cassa_cdsHome) getHome(
aUC, V_disp_cassa_cdsBulk.class))
.findDisponibilitaCassa(((it.cnr.contab.utenze00.bp.CNRUserContext) aUC)
.getEsercizio()));
return ricerca;
}
return bulk;
} catch (Exception e) {
throw handleException(bulk, e);
}
}
/**
* inizializzazione di una istanza di MandatoBulk per modifica PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di MandatoBulk
* PostCondition: Viene caricata la collezione delle righe di mandato
* (Mandato_rigaBulk), dei sospesi associati al mandato
* (Sospeso_det_uscBulk), delle associazioni mandato-reversale(
* Ass_mandato_reversaleBulk). Viene caricato i dati del beneficiario del
* mandato (Mandato_terzoBulk)
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da inizializzare per la
* modifica
* @return mandato il Mandato inizializzato per la modifica
*/
public OggettoBulk inizializzaBulkPerModifica(UserContext aUC,
OggettoBulk bulk) throws ComponentException {
MandatoBulk mandato = (MandatoBulk) super.inizializzaBulkPerModifica(
aUC, bulk);
try {
//Eliminato in quanto sono campi valorizzati ma non utilizzati
// mandato.setIm_disp_cassa_cds(findDisponibilitaDiCassaPerCDS(aUC,
// mandato));
// mandato.setIm_disp_cassa_CNR(findDisponibilitaDiCassaPerCNR(aUC,
// mandato));
// carico i mandati riga
mandato.setMandato_rigaColl(new BulkList(((MandatoHome) getHome(
aUC, mandato.getClass())).findMandato_riga(aUC, mandato)));
Mandato_rigaBulk riga;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) super.inizializzaBulkPerModifica(aUC,
(Mandato_rigaBulk) i.next());
// Carico automaticamente i codici SIOPE e visualizzo quelli
// ancora collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession()
.getParametriCnr(aUC, mandato.getEsercizio())
.getFl_siope().booleanValue()) {
riga.setMandato_siopeColl(new BulkList(
((Mandato_rigaHome) getHome(aUC,
Mandato_rigaBulk.class))
.findCodiciCollegatiSIOPE(aUC, riga)));
setCodiciSIOPECollegabili(aUC, riga);
}
// if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, mandato.getEsercizio()).getFl_cup().booleanValue() &&
// Utility.createParametriCnrComponentSession().getParametriCnr(aUC, mandato.getEsercizio()).getFl_siope_cup().booleanValue()){
// Timestamp dataLimite=Utility.createConfigurazioneCnrComponentSession().getDt01(aUC, "DATA_LIMITE_CUP_SIOPE_CUP");
// if(mandato.getDt_emissione().after(dataLimite)){
// for (Iterator j=riga.getMandato_siopeColl().iterator();j.hasNext();){
// Mandato_siopeIBulk rigaSiope = (Mandato_siopeIBulk)j.next();
// rigaSiope.setMandatoSiopeCupColl(new BulkList(((Mandato_siopeHome) getHome( aUC, Mandato_siopeBulk.class)).findCodiciSiopeCupCollegati(aUC, rigaSiope)));
// }
// }else
// {
// riga.setMandatoCupColl(new BulkList(((Mandato_rigaHome) getHome( aUC, Mandato_rigaBulk.class)).findCodiciCupCollegati(aUC, riga)));
// }
//
// }else{
if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, mandato.getEsercizio()).getFl_cup().booleanValue()) {
riga.setMandatoCupColl(new BulkList(((Mandato_rigaHome) getHome(aUC, Mandato_rigaBulk.class)).findCodiciCupCollegati(aUC, riga)));
} else {
if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, mandato.getEsercizio()).getFl_siope_cup().booleanValue()) {
for (Iterator j = riga.getMandato_siopeColl().iterator(); j.hasNext(); ) {
Mandato_siopeIBulk rigaSiope = (Mandato_siopeIBulk) j.next();
rigaSiope.setMandatoSiopeCupColl(new BulkList(((Mandato_siopeHome) getHome(aUC, Mandato_siopeBulk.class)).findCodiciSiopeCupCollegati(aUC, rigaSiope)));
}
}
}
// }
inizializzaTi_fattura(aUC, riga);
((Mandato_rigaHome) getHome(aUC, riga.getClass()))
.initializeElemento_voce(aUC, riga);
}
if (mandato instanceof MandatoAccreditamentoBulk) {
((MandatoAccreditamentoBulk) mandato)
.setModalita_pagamento(((Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0))
.getModalita_pagamento());
((MandatoAccreditamentoBulk) mandato)
.setModalita_pagamentoOptions(((Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0))
.getModalita_pagamentoOptions());
((MandatoAccreditamentoBulk) mandato)
.setBanca(((Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0)).getBanca());
((MandatoAccreditamentoBulk) mandato)
.setBancaOptions(((Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0))
.getBancaOptions());
((MandatoAccreditamentoBulk) mandato)
.setImpegniSelezionatiColl(findImpegni(aUC,
(MandatoAccreditamentoBulk) mandato));
}
if (mandato instanceof MandatoIBulk)
mandato = inizializzaSospesiDa1210(aUC, (MandatoIBulk) mandato);
// carico il mandato terzo
mandato.setMandato_terzo(((MandatoHome) getHome(aUC, mandato
.getClass())).findMandato_terzo(aUC, mandato));
initializeKeysAndOptionsInto(aUC, mandato);
verificaTipoBollo(aUC, mandato);
if (MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())) {
BancaBulk banca = new BancaBulk();
banca.setTerzo(mandato.getMandato_terzo().getTerzo());
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); )
((Mandato_rigaBulk) i.next()).setBanca(banca);
if (mandato instanceof MandatoIBulk) {
Var_bilancioBulk varBilancio = ((Var_bilancioHome) getHome(
aUC, Var_bilancioBulk.class))
.findByMandato(mandato);
if (varBilancio != null)
((MandatoIBulk) mandato).setVar_bilancio(varBilancio);
}
}
// carico i sospeso_det_usc
Sospeso_det_uscBulk sdu;
mandato
.setSospeso_det_uscColl(new BulkList(
((MandatoHome) getHome(aUC, mandato.getClass()))
.findSospeso_det_usc(aUC, mandato)));
// aggiungo nella deleteList i sospesi annullati
for (Iterator i = mandato.getSospeso_det_uscColl().iterator(); i
.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
sdu.setMandato(mandato);
if (sdu.getStato().equals(Sospeso_det_uscBulk.STATO_ANNULLATO))
i.remove();
}
// carico il cd uo ente
SQLBuilder sql = getHome(aUC, Unita_organizzativa_enteBulk.class)
.createSQLBuilder();
List result = getHome(aUC, Unita_organizzativa_enteBulk.class)
.fetchAll(sql);
mandato
.setCd_uo_ente(((Unita_organizzativa_enteBulk) result
.get(0)).getCd_unita_organizzativa());
// carico le reversali associate al mandato di
// regolarizzazione/accreditamento
mandato.setReversaliColl(new BulkList(
((Ass_mandato_reversaleHome) getHome(aUC,
Ass_mandato_reversaleBulk.class)).findReversali(
aUC, mandato)));
// carico i doc. contabili (mandati/reversali) associati al mandato
mandato
.setDoc_contabili_collColl(((V_ass_doc_contabiliHome) getHome(
aUC, V_ass_doc_contabiliBulk.class))
.findDoc_contabili_coll(aUC, mandato));
// per mandato di accreditamento inizializzo il codice cds
if (mandato instanceof MandatoAccreditamentoBulk) {
String cd_uo = mandato.getMandato_terzo().getTerzo()
.getUnita_organizzativa().getCd_unita_organizzativa();
String cd_cds = cd_uo.substring(0, cd_uo.indexOf("."));
((MandatoAccreditamentoBulk) mandato).setCodice_cds(cd_cds);
}
// per mandati a regolamento sospeso con ritenute e reversale
// associate verifico se la reversale è stata generata
// perchè fattura estera istituzuionale di beni intraue o san marino
if (MandatoBulk.TIPO_REGOLAM_SOSPESO.equals(mandato.getTi_mandato())
&& mandato.getIm_ritenute().compareTo(new BigDecimal(0)) > 0)
mandato = inizializzaFlagFaiReversale(aUC,
(MandatoIBulk) mandato);
if (mandato.getPg_mandato_riemissione() != null) {
V_mandato_reversaleBulk man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(mandato.getEsercizio(), Numerazione_doc_contBulk.TIPO_MAN, mandato.getCd_cds_origine(), mandato.getPg_mandato_riemissione()));
if (man_rev != null)
mandato.setV_man_rev(man_rev);
else
man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(mandato.getEsercizio(), Numerazione_doc_contBulk.TIPO_MAN, mandato.getCd_cds(), mandato.getPg_mandato_riemissione()));
if (man_rev != null)
mandato.setV_man_rev(man_rev);
}
} catch (Exception e) {
throw handleException(mandato, e);
}
return mandato;
}
/**
* inizializzazione di una istanza di MandatoAccreditamentoBulk per ricerca
* PreCondition: E' stata richiesta l'inizializzazione di una istanza di
* MandatoAccreditamentoBulk per ricerca PostCondition: Viene inizializzato
* il Cds e l'UO di appartenenza con il Cds e l'UO del mandato
* inizializzazione di una istanza di CdsBilancioBulk per ricerca
* PreCondition: E' stata richiesta l'inizializzazione di una istanza di
* CdsBilancioBulk, l'oggetto bulk che consente la visualizzazione del
* Bilancio entrate/spese del CdS PostCondition: Viene inizializzata la
* collezione delle voci di bilancio di un Cds
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da inizializzare per la
* ricerca
* @return bulk il Mandato inizializzato per la ricerca bilancio istanza di
* CdsBilancioBulk che ha impostate le voci di bilancio
* di quel Cds
*/
public OggettoBulk inizializzaBulkPerRicerca(UserContext aUC,
OggettoBulk bulk) throws ComponentException {
try {
if (bulk instanceof MandatoBulk) {
bulk = super.inizializzaBulkPerRicerca(aUC, bulk);
MandatoBulk mandato = (MandatoBulk) bulk;
// Se uo 999.000 in scrivania: visualizza mandati fatti da Cds
// differenti per l'Ente
Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHome(
aUC, Unita_organizzativa_enteBulk.class).findAll().get(
0);
if (!((CNRUserContext) aUC).getCd_unita_organizzativa().equals(
ente.getCd_unita_organizzativa()))
// se in scrivania ho uo diversa da ente
mandato.setCd_uo_origine(((CNRUserContext) aUC)
.getCd_unita_organizzativa());
//Eliminato in quanto sono campi valorizzati ma non utilizzati
// mandato.setIm_disp_cassa_cds(findDisponibilitaDiCassaPerCDS(
// aUC, mandato));
// mandato.setIm_disp_cassa_CNR(findDisponibilitaDiCassaPerCNR(
// aUC, mandato));
if (mandato instanceof MandatoAccreditamentoBulk
// || MandatoBulk.TIPO_REGOLARIZZAZIONE.equals( ((MandatoBulk)
// bulk).getTi_mandato())
) {
mandato.setCds((CdsBulk) getHome(aUC, EnteBulk.class)
.findAll().get(0));
mandato
.setUnita_organizzativa((Unita_organizzativaBulk) getHome(
aUC, Unita_organizzativa_enteBulk.class)
.findAll().get(0));
}
} else if (bulk instanceof CdsBilancioBulk) {
CdsBilancioBulk bilancio = (CdsBilancioBulk) bulk;
bilancio.setVociBilancioColl(((V_sit_bil_cds_cnrHome) getHome(
aUC, V_sit_bil_cds_cnrBulk.class)).findBilancioCds(
((it.cnr.contab.utenze00.bp.CNRUserContext) aUC)
.getEsercizio(), bilancio.getCd_cds(), bilancio
.getTipoGestione()));
return bilancio;
}
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(e);
}
return bulk;
}
/**
* inizializzazione di una istanza di MandatoAccreditamentoBulk per ricerca
* PreCondition: E' stata richiesta l'inizializzazione di una istanza di
* MandatoAccreditamentoBulk per ricerca PostCondition: Viene inizializzato
* il Cds e l'UO di appartenenza con il Cds e l'UO del mandato
* inizializzazione di una istanza di CdsBilancioBulk per ricerca
* PreCondition: E' stata richiesta l'inizializzazione di una istanza di
* CdsBilancioBulk, l'oggetto bulk che consente la visualizzazione del
* Bilancio entrate/spese del CdS PostCondition: Viene inizializzata la
* collezione delle voci di bilancio di un Cds
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da inizializzare per la
* ricerca
* @return bulk il Mandato inizializzato per la ricerca bilancio istanza di
* CdsBilancioBulk che ha impostate le voci di bilancio
* di quel Cds
*/
public OggettoBulk inizializzaBulkPerRicercaLibera(UserContext aUC,
OggettoBulk bulk) throws ComponentException {
try {
if (bulk instanceof MandatoBulk) {
bulk = super.inizializzaBulkPerRicercaLibera(aUC, bulk);
MandatoBulk mandato = (MandatoBulk) bulk;
// Se uo 999.000 in scrivania: visualizza mandati fatti da Cds
// differenti per l'Ente
Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHome(
aUC, Unita_organizzativa_enteBulk.class).findAll().get(
0);
if (!((CNRUserContext) aUC).getCd_unita_organizzativa().equals(
ente.getCd_unita_organizzativa()))
// se in scrivania ho uo diversa da ente
mandato.setCd_uo_origine(((CNRUserContext) aUC)
.getCd_unita_organizzativa());
//Eliminato in quanto sono campi valorizzati ma non utilizzati
// mandato.setIm_disp_cassa_cds(findDisponibilitaDiCassaPerCDS(
// aUC, mandato));
// mandato.setIm_disp_cassa_CNR(findDisponibilitaDiCassaPerCNR(
// aUC, mandato));
/*
* if ( mandato instanceof MandatoAccreditamentoBulk ||
* MandatoBulk.TIPO_REGOLARIZZAZIONE.equals( ((MandatoBulk)
* bulk).getTi_mandato())) { mandato.setCds( (CdsBulk) getHome(
* aUC, EnteBulk.class).findAll().get(0));
* mandato.setUnita_organizzativa( (Unita_organizzativaBulk)
* getHome( aUC,
* Unita_organizzativa_enteBulk.class).findAll().get(0)); }
*/
if (mandato instanceof MandatoAccreditamentoBulk) {
mandato.setCds((CdsBulk) getHome(aUC, EnteBulk.class)
.findAll().get(0));
mandato
.setUnita_organizzativa((Unita_organizzativaBulk) getHome(
aUC, Unita_organizzativa_enteBulk.class)
.findAll().get(0));
}
}
/*
* else if ( bulk instanceof CdsBilancioBulk ) { CdsBilancioBulk
* bilancio = (CdsBilancioBulk) bulk;
* bilancio.setVociBilancioColl(((V_sit_bil_cds_cnrHome)getHome(
* aUC, V_sit_bil_cds_cnrBulk.class)).findBilancioCds(
* ((it.cnr.contab.utenze00.bp.CNRUserContext)aUC).getEsercizio(),
* bilancio.getCd_cds(), bilancio.getTipoGestione())); return
* bilancio; }
*/
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(e);
}
return bulk;
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext,
Stampa_avviso_pag_mandBulk stampa) throws ComponentException {
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setPgInizioMand(new Long(0));
stampa.setPgFineMand(new Long("9999999999"));
stampa.setPgInizioDist(new Long(0));
stampa.setPgFineDist(new Long("9999999999"));
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));
Configurazione_cnrComponentSession sess = (Configurazione_cnrComponentSession) it.cnr.jada.util.ejb.EJBCommonServices
.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
if (uo.isUoCds() ||
((Configurazione_cnrHome)getHome(userContext,Configurazione_cnrBulk.class)).isUOSpecialeDistintaTuttaSAC(CNRUserContext.getEsercizio(userContext),cd_uo)) {
stampa.setUoEmittenteForPrint(new Unita_organizzativaBulk());
stampa.setFindUOForPrintEnabled(true);
} else {
stampa.setUoEmittenteForPrint(uo);
stampa.setFindUOForPrintEnabled(false);
}
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext,
Stampa_giornale_mandatiBulk stampa) throws ComponentException {
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext
.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
stampa.setPgInizio(new Long(0));
stampa.setPgFine(new Long("9999999999"));
// stampa.setUnita_organizzativa(new Unita_organizzativaBulk());
stampa.setTi_mandato(Stampa_giornale_mandatiBulk.TIPO_TUTTI);
stampa.setStato(Stampa_giornale_mandatiBulk.STATO_MANDATO_TUTTI);
stampa.setStato_trasmissione(Stampa_giornale_mandatiBulk.STATO_TRASMISSIONE_TUTTI);
try {
CdsHome cds_home = (CdsHome) getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk) cds_home
.findByPrimaryKey(new CdsBulk(CNRUserContext
.getCd_cds(userContext)));
if (cds_scrivania.getCd_tipo_unita().equals(
Tipo_unita_organizzativaHome.TIPO_UO_ENTE)) {
stampa.setUoEmittenteForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(false);
} else {
Unita_organizzativaHome uoHome = (Unita_organizzativaHome) getHome(
userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uo = (Unita_organizzativaBulk) uoHome
.findByPrimaryKey(new Unita_organizzativaBulk(
CNRUserContext
.getCd_unita_organizzativa(userContext)));
if (!uo.isUoCds()) {
stampa.setUoEmittenteForPrint(uo);
stampa.setIsUOForPrintEnabled(false);
} else {
stampa
.setUoEmittenteForPrint(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_vpg_mandatoBulk stampa) throws ComponentException {
try {
CdsHome cds_home = (CdsHome) getHome(userContext, CdsBulk.class);
CdsBulk cds_scrivania = (CdsBulk) cds_home
.findByPrimaryKey(new CdsBulk(CNRUserContext
.getCd_cds(userContext)));
if (cds_scrivania.getCd_tipo_unita().equals(
Tipo_unita_organizzativaHome.TIPO_UO_ENTE)) {
stampa.setUoEmittenteForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(false);
} else {
Unita_organizzativaHome uoHome = (Unita_organizzativaHome) getHome(
userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uo = (Unita_organizzativaBulk) uoHome
.findByPrimaryKey(new Unita_organizzativaBulk(
CNRUserContext
.getCd_unita_organizzativa(userContext)));
if (!uo.isUoCds()) {
stampa.setUoEmittenteForPrint(uo);
stampa.setIsUOForPrintEnabled(false);
} else {
stampa
.setUoEmittenteForPrint(new Unita_organizzativaBulk());
stampa.setIsUOForPrintEnabled(true);
}
}
stampa.setEsercizio(CNRUserContext.getEsercizio(userContext));
stampa.setCd_cds(CNRUserContext.getCd_cds(userContext));
stampa.setDataInizio(DateServices.getFirstDayOfYear(CNRUserContext
.getEsercizio(userContext).intValue()));
stampa.setDataFine(getDataOdierna(userContext));
//stampa.setPgInizio(new Long(0));
//stampa.setPgFine(new Long("9999999999"));
stampa.setTerzoForPrint(new TerzoBulk());
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
}
}
/**
* inizializzaBulkPerStampa method comment.
*/
public it.cnr.jada.bulk.OggettoBulk inizializzaBulkPerStampa(
it.cnr.jada.UserContext userContext,
it.cnr.jada.bulk.OggettoBulk bulk)
throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_giornale_mandatiBulk)
inizializzaBulkPerStampa(userContext,
(Stampa_giornale_mandatiBulk) bulk);
else if (bulk instanceof Stampa_vpg_mandatoBulk)
inizializzaBulkPerStampa(userContext, (Stampa_vpg_mandatoBulk) bulk);
else if (bulk instanceof Stampa_avviso_pag_mandBulk)
inizializzaBulkPerStampa(userContext,
(Stampa_avviso_pag_mandBulk) bulk);
return bulk;
}
/**
* verifica se il mandato contiene righe relative a fatture passive
* istituzionali di beni intra ue o san marino (in tal caso alla creazione
* del mandato è stata creata una reversale associata). Questa informazione
* serve ai fini della quadratura dei PreCondition: E' stata richiesta
* l'inizializzazione di una istanza di MandatoBulk di tipo A REGOLAMENTO
* SOSPESO e con importo ritenute > 0 PostCondition: Il flag fai_reversale è
* inizializzato a true nel caso in cui il mandato contenga tali tipi di
* fatture e a false altrimenti
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato da inizializzare
* @return MandatoIBulk il mandato inizializzato
*/
private MandatoIBulk inizializzaFlagFaiReversale(UserContext userContext,
MandatoIBulk mandato) throws ComponentException {
try {
String statement = "SELECT A.FL_FAI_REVERSALE FROM "
+ it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema()
+
/*
* 13.3.2003 tuning della query
* "V_DOC_PASSIVO_OBBLIGAZIONE A, " +
*/
"V_DOC_PASSIVO A, "
+ it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema()
+ "MANDATO_RIGA B "
+ "WHERE "
+ "A.FL_FAI_REVERSALE = ? AND "
+ "B.CD_CDS = ? AND "
+ "B.PG_MANDATO = ? AND "
+ "B.ESERCIZIO = ? AND "
+ "B.CD_CDS = A.CD_CDS_OBBLIGAZIONE AND "
+ "B.ESERCIZIO_OBBLIGAZIONE = A.ESERCIZIO_OBBLIGAZIONE AND "
+ "B.ESERCIZIO_ORI_OBBLIGAZIONE = A.ESERCIZIO_ORI_OBBLIGAZIONE AND "
+ "B.PG_OBBLIGAZIONE = A.PG_OBBLIGAZIONE AND "
+ "B.PG_OBBLIGAZIONE_SCADENZARIO = A.PG_OBBLIGAZIONE_SCADENZARIO AND "
+ "B.CD_CDS_DOC_AMM = A.CD_CDS AND "
+ "B.CD_UO_DOC_AMM = A.CD_UNITA_ORGANIZZATIVA AND "
+ "B.ESERCIZIO_DOC_AMM = A.ESERCIZIO AND "
+ "B.CD_TIPO_DOCUMENTO_AMM = A.CD_TIPO_DOCUMENTO_AMM AND "
+ "B.PG_DOC_AMM = A.PG_DOCUMENTO_AMM ";
LoggableStatement ps = new LoggableStatement(getHomeCache(
userContext).getConnection(), statement, true, this
.getClass());
try {
ps.setString(1, "Y");
ps.setString(2, mandato.getCd_cds());
ps.setObject(3, mandato.getPg_mandato());
ps.setObject(4, mandato.getEsercizio());
ResultSet rs = ps.executeQuery();
try {
while (rs.next()) {
mandato.setFaiReversale(true);
break;
}
} catch (Exception e) {
throw handleException(e);
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} catch (SQLException e) {
throw handleException(e);
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (SQLException e) {
throw handleException(e);
}
return mandato;
}
/**
* inizializzazione della lista dei sospesi associati ai dcoumenti amm. con
* 1210 PreCondition: E' stata richiesta l'inizializzazione di una istanza
* di MandatoBulk PostCondition: La lista dei codici dei sospesi definiti
* per i modelli 1210 inclusi nel mandato e' stata valorizzata
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato da inizializzare
* @return MandatoIBulk il mandato inizializzato
*/
private MandatoIBulk inizializzaSospesiDa1210(UserContext userContext,
MandatoIBulk mandato) throws ComponentException {
try {
String statement = "SELECT DISTINCT cd_sospeso FROM "
+ it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema()
+
/*
* 13.3.2003 tuning della query
* "V_DOC_PASSIVO_OBBLIGAZIONE A, " +
*/
"V_MANDATO_RIGA_DP_SOSP " + "WHERE " + "CD_CDS = ? AND "
+ "PG_MANDATO = ? AND " + "ESERCIZIO = ? ";
LoggableStatement ps = new LoggableStatement(getHomeCache(
userContext).getConnection(), statement, true, this
.getClass());
try {
ps.setString(1, mandato.getCd_cds());
ps.setObject(2, mandato.getPg_mandato());
ps.setObject(3, mandato.getEsercizio());
ResultSet rs = ps.executeQuery();
String cd_sospeso;
try {
while (rs.next()) {
cd_sospeso = rs.getString(1);
if (cd_sospeso != null)
mandato.getSospesiDa1210List().add(cd_sospeso);
}
} catch (Exception e) {
throw handleException(e);
} finally {
try {
rs.close();
} catch (java.sql.SQLException e) {
}
}
} catch (SQLException e) {
throw handleException(e);
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (SQLException e) {
throw handleException(e);
}
return mandato;
}
/**
* inizializzazione dell'attributo ti_fattura di una istanza di
* Mandato_rigaBulk PreCondition: E' stata richiesta l'inizializzazione di
* una istanza di Mandato_rigaBulk La riga del mandato e' relativa ad un
* documento amministrativo di tipo fattura (attiva o passiva)
* PostCondition: Il tipo fattura ( fattura, nota a credito, nota a debito)
* e' stato caricato per la riga del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga del mandato da
* inizializzare
*/
public Mandato_rigaBulk inizializzaTi_fattura(UserContext userContext,
Mandato_rigaBulk riga) throws ComponentException {
try {
if (riga.getCd_tipo_documento_amm() != null
&& (riga.getCd_tipo_documento_amm()
.equals(it.cnr.contab.docamm00.docs.bulk.Numerazione_doc_ammBulk.TIPO_FATTURA_ATTIVA)))
return ((Mandato_rigaHome) getHome(userContext, riga.getClass()))
.initializeTi_fatturaPerFattura(riga, "FATTURA_ATTIVA");
else if (riga.getCd_tipo_documento_amm() != null
&& (riga.getCd_tipo_documento_amm()
.equals(it.cnr.contab.docamm00.docs.bulk.Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA)))
return ((Mandato_rigaHome) getHome(userContext, riga.getClass()))
.initializeTi_fatturaPerFattura(riga, "FATTURA_PASSIVA");
return riga;
} catch (SQLException _ex) {
throw handleException(_ex);
}
}
protected Integer inserisciVsx(UserContext userContext, Long pg_call,
MandatoAccreditamentoBulk mandato, V_impegnoBulk impegno,
Integer last_par_num) throws ComponentException {
try {
LoggableStatement ps = new LoggableStatement(
getConnection(userContext),
"INSERT INTO "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "VSX_MAN_ACC ( "
+ "PG_CALL, "
+ "PAR_NUM, "
+ "ESERCIZIO, "
+ "CD_CDS, "
+ "PG_MANDATO, "
+ "ESERCIZIO_ORI_OBBLIGAZIONE, "
+ "PG_OBBLIGAZIONE, "
+ "PG_OBBLIGAZIONE_SCADENZARIO, "
+ "PG_VER_REC_OBB_SCAD, "
+ "IM_RIGA, "
+ "PROC_NAME, "
+ "PG_VER_REC, "
+ "UTUV, "
+ "UTCR, "
+ "DACR, "
+ "DUVA, "
+ "MESSAGETOUSER ) "
+ "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )",
true, this.getClass());
try {
ps.setObject(1, pg_call);
ps.setObject(2, last_par_num);
ps.setObject(3, mandato.getEsercizio());
ps.setString(4, mandato.getCd_cds());
ps.setObject(5, mandato.getPg_mandato());
ps.setObject(6, impegno.getEsercizio_originale());
ps.setObject(7, impegno.getPg_obbligazione());
ps.setObject(8, impegno.getPg_obbligazione_scadenzario());
ps.setObject(9, impegno.getPg_ver_rec_scadenza());
ps.setObject(10, impegno.getIm_da_trasferire());
ps.setString(11, VSX_PROC_NAME);
ps.setObject(12, new Integer(1));
ps.setString(13, userContext.getUser());
ps.setString(14, userContext.getUser());
Timestamp now = it.cnr.jada.util.ejb.EJBCommonServices
.getServerTimestamp();
ps.setTimestamp(15, now);
ps.setTimestamp(16, now);
ps.setString(17, null);
ps.executeUpdate();
last_par_num = new Integer(last_par_num.intValue() + 1);
return last_par_num;
} finally {
try {
ps.close();
} catch (java.sql.SQLException e) {
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* ricerca documenti attivi per regolarizzazione PreCondition: E' stata
* richiesta la creazione di un mandato di regolarizzazione CNR L'utente ha
* selezionato l'accertamento su cui creare in automatico la reversale di
* regolarizzazione PostCondition: Vengono ricercati tutti i documenti
* attivi che sono stati contabilizzati sulle scadenze dell'accertamento
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato
* @return mandato il Mandato dopo la ricerca dei documenti attivi
*/
public MandatoIBulk listaDocAttiviPerRegolarizzazione(
UserContext userContext, MandatoIBulk mandato)
throws ComponentException {
try {
Collection result = ((MandatoIHome) getHome(userContext, mandato
.getClass())).findDocAttiviPerRegolarizzazione(
(it.cnr.contab.utenze00.bp.CNRUserContext) userContext,
mandato);
Hashtable ht = ((V_doc_attivo_accertamentoHome) getHome(
userContext, V_doc_attivo_accertamentoBulk.class))
.loadTipoDocumentoKeys(new V_doc_attivo_accertamentoBulk());
for (Iterator j = result.iterator(); j.hasNext(); )
((V_doc_attivo_accertamentoBulk) j.next())
.setTipoDocumentoKeys(ht);
mandato.setDocGenericiPerRegolarizzazione(result);
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* ricerca documenti passivi PreCondition: E' stata richiesta la ricerca dei
* documenti passivi per cui e' possibile emettere un mandato PostCondition:
* Vengono ricercati tutti i documenti passivi che verificano le seguenti
* condizioni: - cds e uo origine uguali a cds e uo di scrivania - cds di
* appartenenza uguale al cds per cui si vuole emettere il mandato -
* (im_scadenza-im_associato_doc_contabile) della scadenza di obbligazione
* su cui il documento amm. e' stato contabilizzato maggiore di zero Fra
* tutti i documenti individuati vengono esclusi quelli che eventualmente
* sono già stati selezionati per questo mandato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato
* @return mandato il Mandato emesso dopo la ricerca dei documenti passivi
*/
public MandatoBulk listaDocPassivi(UserContext aUC, MandatoBulk mandato)
throws ComponentException {
Mandato_rigaIBulk riga;
V_doc_passivo_obbligazioneBulk docPassivo;
try {
Collection result = ((MandatoIHome) getHome(aUC, mandato.getClass()))
.findDocPassivi((MandatoIBulk) mandato,
(it.cnr.contab.utenze00.bp.CNRUserContext) aUC);
if (result.size() == 0)
throw new ApplicationException(
"La ricerca non ha fornito alcun risultato.");
// elimino dal risultato i doc passivi già selezionati per questo
// mandato
for (Iterator j = result.iterator(); j.hasNext(); ) {
docPassivo = (V_doc_passivo_obbligazioneBulk) j.next();
docPassivo.setTipoDocumentoKeys((Hashtable) mandato
.getTipoDocumentoKeys());
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaIBulk) i.next();
if (docPassivo.getEsercizio_ori_obbligazione().intValue() == riga
.getEsercizio_ori_obbligazione().intValue()
&& docPassivo.getPg_obbligazione().longValue() == riga
.getPg_obbligazione().longValue()
&& docPassivo.getPg_obbligazione_scadenzario()
.longValue() == riga
.getPg_obbligazione_scadenzario()
.longValue()
&& docPassivo.getEsercizio_obbligazione()
.intValue() == riga
.getEsercizio_obbligazione().intValue()
&& docPassivo.getCd_cds_obbligazione().equals(
riga.getCd_cds())
&& docPassivo.getEsercizio().intValue() == riga
.getEsercizio_doc_amm().intValue()
&& docPassivo.getCd_unita_organizzativa().equals(
riga.getCd_uo_doc_amm())
&& docPassivo.getCd_cds().equals(
riga.getCd_cds_doc_amm())
&& docPassivo.getCd_tipo_documento_amm().equals(
riga.getCd_tipo_documento_amm())
&& docPassivo.getPg_documento_amm().longValue() == riga
.getPg_doc_amm().longValue())
j.remove();
}
}
((MandatoIBulk) mandato).setDocPassiviColl(result);
return mandato;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(mandato, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(mandato, e);
}
}
/**
* ricerca impegni CNR PreCondition: E' stata richiesta la ricerca degli
* impegni del CNR per emettere un mandato di accreditamento verso un Cds
* PostCondition: Vengono ricercati tutti gli impegni che hanno un importo
* disponibile ( importo disponibile = importo iniziale dell'impegno -
* importo già associato ai documenti contabili) e la cui voce del piano
* abbia come cd_proprio il codice del cds beneficiario del mandato di
* accreditamento e appartenga alla parte 1 del piano dei conti CNR parte
* spese
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di accreditamento
* @return mandato il Mandato di accreditamento emesso dopo la ricerca degli
* impegni del CNR
*/
public MandatoAccreditamentoBulk listaImpegniCNR(UserContext aUC,
MandatoAccreditamentoBulk mandato) throws ComponentException {
try {
Collection result = ((MandatoAccreditamentoHome) getHome(aUC,
mandato.getClass())).findImpegni(mandato);
((MandatoAccreditamentoWizardBulk) mandato).setImpegniColl(result);
int size = ((MandatoAccreditamentoWizardBulk) mandato)
.getImpegniColl().size();
if (size == 0)
throw new ApplicationException("Non esistono impegni");
for (Iterator i = ((MandatoAccreditamentoWizardBulk) mandato)
.getImpegniColl().iterator(); i.hasNext(); )
((V_impegnoBulk) i.next()).setNrImpegni(size);
return mandato;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(mandato, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(mandato, e);
}
}
/**
* lista CdS - disp. cassa PreCondition: E' stata richiesta la disponibilità
* di cassa di tutti i Cds PostCondition: Vengono estratte le disponibilità
* di cassa di tutti i Cds per l'esercizio di scrivania calcolate nella
* vista V_DISP_CASSA_CDS
*
* lista CdS - obbligazione PreCondition: E' stata richiesta la situazione
* delle obbligazione non pagate per alcuni Cds selezionati dall'utente
* PostCondition: Vengono sommati gli importi relative a scadenza di
* obbligazioni definitive (sia su partite di giro che non) non ancora
* pagate per una certa data per tutti i cds selezionati dall'utente
*
* @param aUC lo UserContext che ha generato la richiesta
* @param ricerca RicercaMandatoAccreditamentoBulk il mandato di
* accreditamento
* @return ricerca il Mandato di accreditamento aggiornato in base alla
* situazione cassa del Cds
*/
public RicercaMandatoAccreditamentoBulk listaSituazioneCassaCds(
UserContext aUC, RicercaMandatoAccreditamentoBulk ricerca)
throws ComponentException {
try {
if (!ricerca.isFlTuttiCdsCaricati()) // ricerca le obbligazioni solo
// per i Cds selezionati
{
((MandatoAccreditamentoHome) getHome(aUC,
MandatoAccreditamentoBulk.class))
.findSituazioneCassaCds(aUC, ricerca);
ricerca.setCentriDiSpesaColl(ricerca
.getCentriDiSpesaSelezionatiColl());
} else // carica tutti i Cds con la disponibilità di cassa
{
ricerca
.setCentriDiSpesaColl(((V_disp_cassa_cdsHome) getHome(
aUC, V_disp_cassa_cdsBulk.class))
.findDisponibilitaCassa(((it.cnr.contab.utenze00.bp.CNRUserContext) aUC)
.getEsercizio()));
}
return ricerca;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(ricerca, e);
}
}
/**
* modifica mandato PreCondition: E' stata generata la richiesta di modifica
* di un Mandato e il mandato supera la validazione (metodo verificaMandato)
* PostCondition: Vengono aggiornati gli importi dei sospesi eventualmente
* associati al mandato (metodo aggiornaImportoSospesi), e vengono
* aggiornate le eventuali modifiche alle modalità di pagamento e al tipo
* bollo del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da modificare
* @return mandato OggettoBulk il mandato modificato
*/
public OggettoBulk modificaConBulk(UserContext userContext, OggettoBulk bulk)
throws ComponentException {
try {
MandatoBulk mandato = (MandatoBulk) bulk;
verificaStatoEsercizio(userContext, mandato.getEsercizio(), mandato
.getCd_cds());
lockBulk(userContext, mandato);
// mandato.refreshImporto();
if (!mandato.isAnnullato())
verificaMandato(userContext, mandato);
if (mandato instanceof MandatoAccreditamentoBulk) {
// verifica importo = somma delle righe
// verifica che tutti gli impegni selezioanti siano a competenza
// o a residuo
// aggiorna la testata del mandato
// aggiorna le modalità di pagamento se modificate
// chiama la stored procedure che aggiorna le righe del mandato,
// i saldi (anche del pagato), il doc.amm TRASF_S
// inoltre modifica il mandato competenza/residuo
MandatoAccreditamentoBulk manAcc = (MandatoAccreditamentoBulk) mandato;
verificaMandatoAccreditamento(userContext, manAcc);
// copio le info sulle mod.pag. e banca dalla testata alle righe
if (manAcc.getModalita_pagamento() == null
|| manAcc.getModalita_pagamento().getCd_modalita_pag() == null
|| manAcc.getBanca() == null
|| manAcc.getBanca().getPg_banca() == null)
throw new ApplicationException(
"Deve essere selezionata una modalità di pagamento e una coordinata bancaria ");
Mandato_rigaBulk riga = (Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0);
if (!riga.getCd_modalita_pag().equals(
manAcc.getModalita_pagamento().getCd_modalita_pag())
|| !riga.getPg_banca().equals(
manAcc.getBanca().getPg_banca())) {
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
riga.setBanca(manAcc.getBanca());
riga.setModalita_pagamento(manAcc
.getModalita_pagamento());
riga.setToBeUpdated();
}
}
// Carico automaticamente i codici SIOPE e visualizzo quelli
// ancora collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession()
.getParametriCnr(userContext, mandato.getEsercizio())
.getFl_siope().booleanValue()) {
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
// if (riga.isToBeCreated())
riga = aggiornaLegameSIOPE(
userContext, riga);
}
}
makeBulkPersistent(userContext, mandato);
chiamaVsx(userContext, manAcc);
} else {
aggiornaImportoSospesi(userContext, mandato);
if (Optional.ofNullable(mandato.getStatoVarSos())
.map(s -> s.equals(StatoVariazioneSostituzione.VARIAZIONE_DEFINITIVA.value()))
.orElse(Boolean.FALSE)) {
aggiornaImportoObbligazioni(userContext, mandato);
SaldoComponentSession session = createSaldoComponentSession(); //itera su tutte le righe
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); ) {
Mandato_rigaBulk riga = (Mandato_rigaBulk) i.next();
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
mandato = (MandatoBulk) super.modificaConBulk(userContext, bulk);
} else {
mandato = (MandatoBulk) super.modificaConBulk(userContext, bulk);
}
}
return mandato;
} catch (Exception e) {
throw handleException(bulk, e);
}
}
/*
* per le date salvate nel database come timestamp bisogna ridefinire la
* query nel modo seguente: TRUNC( dt_nel_db) operator 'GG/MM/YYYY'
*/
protected void ridefinisciClausoleConTimestamp(UserContext userContext,
CompoundFindClause clauses) {
SimpleFindClause clause;
for (Iterator i = clauses.iterator(); i.hasNext(); ) {
clause = (SimpleFindClause) i.next();
if (clause.getPropertyName().equalsIgnoreCase("dt_trasmissione")
|| clause.getPropertyName().equalsIgnoreCase(
"dt_annullamento")
|| clause.getPropertyName().equalsIgnoreCase(
"dt_ritrasmissione"))
if (clause.getOperator() == SQLBuilder.ISNOTNULL
|| clause.getOperator() == SQLBuilder.ISNULL)
clause.setSqlClause("TRUNC( " + clause.getPropertyName()
+ ") "
+ SQLBuilder.getSQLOperator(clause.getOperator()));
else
clause.setSqlClause("TRUNC( " + clause.getPropertyName()
+ ") "
+ SQLBuilder.getSQLOperator(clause.getOperator())
+ " ? ");
}
}
/**
* ricerca di un mandato di accreditamento PreCondition: E' stata richiesta
* la ricerca di un mandato di accreditamento PostCondition: E' stato creato
* il SQLBuilder che oltre alle clausole implicite (presenti nell'istanza di
* MandatoBulk) su esercizio e uo origine, ha anche le clausole sul tipo
* mandato = ACCREDITAMENTO
*
* @param userContext lo UserContext che ha generato la richiesta
* @param clauses CompoundFindClause le clausole della selezione
* @param bulk OggettoBulk il mandato di accreditamento
* @return sql Query Risultato della selezione
*/
/* in automatico esercizio + cd_uo_origine */
/*
* per le date salvate nel database come timestamp bisogna ridefinire la
* query nel modo seguente: TRUNC( dt_nel_db) operator 'GG/MM/YYYY'
*/
protected Query select(UserContext userContext, CompoundFindClause clauses,
OggettoBulk bulk) throws ComponentException,
it.cnr.jada.persistency.PersistencyException {
/* COMPORTAMENTO DI DEFAULT - INIZIO */
final Optional v_mandato_terzoBulk1 =
Optional.ofNullable(bulk)
.filter(V_mandato_terzoBulk.class::isInstance)
.map(V_mandato_terzoBulk.class::cast);
v_mandato_terzoBulk1
.flatMap(v_mandato_terzoBulk -> Optional.ofNullable(v_mandato_terzoBulk.getMandato_terzo()))
.flatMap(mandato_terzoBulk -> Optional.ofNullable(mandato_terzoBulk.getCd_terzo()))
.ifPresent(cdTerzo -> v_mandato_terzoBulk1.get().setCd_terzo(cdTerzo));
if (clauses == null) {
if (bulk != null)
clauses = bulk.buildFindClauses(null);
} else
clauses = it.cnr.jada.persistency.sql.CompoundFindClause.and(
clauses, bulk.buildFindClauses(Boolean.FALSE));
/* COMPORTAMENTO DI DEFAULT - FINE */
if (clauses != null)
ridefinisciClausoleConTimestamp(userContext, clauses);
SQLBuilder sql = getHome(userContext, bulk).selectByClause(clauses);
if (!(bulk instanceof MandatoAccreditamentoBulk))
sql.addClause("AND", "ti_mandato", SQLBuilder.NOT_EQUALS,
MandatoBulk.TIPO_ACCREDITAMENTO);
// else if ( bulk instanceof MandatoBulk &&
// MandatoBulk((MandatoBulk)bulk).getTi_mandato()
// sql.addClause( "AND", "cd_cds", sql.EQUALS, ((MandatoBulk)
// bulk).getUnita_organizzativa().getUnita_padre().getCd_unita_organizzativa());
// sql.addClause( "AND", "cd_uo_origine", sql.EQUALS, ((MandatoBulk)
// bulk).getUnita_organizzativa().getCd_unita_organizzativa());
if (((CNRUserContext) userContext).getCd_unita_organizzativa().equals(
((MandatoBulk) bulk).getCd_uo_ente()))
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS,
((MandatoBulk) bulk).getCd_uo_ente());
return sql;
}
/**
* ricerca di un accertamento da parte del CNR PreCondition: E' stata
* richiesta la ricerca di un accertamento da utilizzare nel mandato di
* regolarizzazione emesso dal CNR per creare in automatico la reversale di
* regolarizzazione PostCondition: E' stato creato il SQLBuilder per
* selezionare un accertamento con cds di appartenenza uguale a quello del
* CDS del mandato, cds e uo origine qualsiasi, con importo accertamento -
* importo associato a a documenti contabili maggiore di 0
*
* ricerca di un accertamento da parte del CDS PreCondition: E' stata
* richiesta la ricerca di un accertamento da utilizzare nel mandato di
* regolarizzazione emesso da un CDS, diverso dall'Ente, per creare in
* automatico la reversale di regolarizzazione PostCondition: E' stato
* creato il SQLBuilder per selezionare un accertamento con cds di
* appartenenza uguale a quello del CDS del mandato, cds e uo origine uguali
* a quelli di scrivania, non su partita di giro, con importo accertamento -
* importo associato a a documenti contabili maggiore di 0
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato lo MandatoIBulk il mandato di regolarizzazione
* emesso dal CNR
* @param accertamento lo AccertamentoBulk accertamento da utilizzare
* nel mandato di regolarizzazione emesso dal CNR
* @param clauses CompoundFindClause le clausole della selezione
* @return sql SQLBuilder Risultato della selezione
*/
public SQLBuilder selectAccertamentoPerRegolarizzazioneByClause(
UserContext userContext, MandatoIBulk mandato,
AccertamentoBulk accertamento, CompoundFindClause clauses)
throws ComponentException,
it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, AccertamentoBulk.class,
"V_ACCERTAMENTO_IM_REVERSALE").createSQLBuilder();
EnteBulk ente = (EnteBulk) getHome(userContext, EnteBulk.class)
.findAll().get(0);
if (!mandato.getCd_cds().equals(ente.getCd_unita_organizzativa())) // mandato
// CDS
{
sql.openParenthesis("AND");
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, ente
.getCd_unita_organizzativa());
sql.addClause("OR", "cd_cds", SQLBuilder.EQUALS, mandato.getCd_cds());
sql.closeParenthesis();
} else
// mandato CNR
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, mandato.getCd_cds());
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, mandato.getEsercizio());
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.NOT_EQUALS,
Numerazione_doc_contBulk.TIPO_ACR_SIST);
sql.addClause("AND", "cd_tipo_documento_cont", SQLBuilder.NOT_EQUALS,
Numerazione_doc_contBulk.TIPO_ACR_PLUR);
sql.addClause("AND", "dt_cancellazione", SQLBuilder.ISNULL, null);
sql.addSQLClause("AND", "riportato", SQLBuilder.EQUALS, "N");
if (!mandato.getCd_cds().equals(ente.getCd_unita_organizzativa())) // mandato
// CDS
{
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, mandato
.getCd_cds_origine());
sql.addClause("AND", "cd_uo_origine", SQLBuilder.EQUALS, mandato
.getCd_uo_origine());
sql.addSQLClause("AND", "IM_ACCERTAMENTO - IM_REVERSALE",
SQLBuilder.GREATER, new BigDecimal(0));
} else
// mandato CNR
sql.addSQLClause("AND", "IM_ACCERTAMENTO - IM_REVERSALE",
SQLBuilder.GREATER, new BigDecimal(0));
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.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire
* e tutti i parametri della query.
**/
public SQLBuilder selectUoEmittenteForPrintByClause(
UserContext userContext, Stampa_avviso_pag_mandBulk bulk,
Unita_organizzativaBulk uo, CompoundFindClause clauses)
throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome) getHome(
userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", SQLBuilder.EQUALS, bulk.getCd_cds());
sql.addClause(clauses);
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole
* specificate. Aggiunge una clausola a tutte le operazioni di ricerca
* eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa Pre: E' stata
* generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO in base al cds di
* scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param 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.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire
* e tutti i parametri della query.
**/
public SQLBuilder selectUoEmittenteForPrintByClause(
UserContext userContext, Stampa_giornale_mandatiBulk bulk,
Unita_organizzativaBulk uo, CompoundFindClause clauses)
throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome) getHome(
userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", SQLBuilder.EQUALS, bulk.getCd_cds());
sql.addClause(clauses);
return sql;
}
public SQLBuilder selectUoEmittenteForPrintByClause(
UserContext userContext, Stampa_vpg_mandatoBulk bulk,
Unita_organizzativaBulk uo, CompoundFindClause clauses)
throws ComponentException {
Unita_organizzativaHome home = (Unita_organizzativaHome) getHome(
userContext, Unita_organizzativaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_unita_padre", SQLBuilder.EQUALS, bulk.getCd_cds());
sql.addClause(clauses);
return sql;
}
/**
* stampaConBulk method comment.
*/
public it.cnr.jada.bulk.OggettoBulk stampaConBulk(
it.cnr.jada.UserContext aUC, it.cnr.jada.bulk.OggettoBulk bulk)
throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_giornale_mandatiBulk)
validateBulkForPrint(aUC, (Stampa_giornale_mandatiBulk) bulk);
else if (bulk instanceof Stampa_vpg_mandatoBulk)
validateBulkForPrint(aUC, (Stampa_vpg_mandatoBulk) bulk);
else if (bulk instanceof Stampa_avviso_pag_mandBulk)
validateBulkForPrint(aUC, (Stampa_avviso_pag_mandBulk) bulk);
return bulk;
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext,
Stampa_avviso_pag_mandBulk stampa) throws ComponentException {
try {
if (stampa.getPgInizioMand() == null)
throw new ValidationException(
"Attenzione: il campo Numero Inizio Mandato è obbligatorio");
if (stampa.getPgFineMand() == null)
throw new ValidationException(
"Attenzione: il campo Numero Fine Mandato è obbligatorio");
if (stampa.getPgInizioDist() == null)
throw new ValidationException(
"Attenzione: il campo Numero Inizio Distinta è obbligatorio");
if (stampa.getPgFineDist() == null)
throw new ValidationException(
"Attenzione: il campo Numero Fine Distinta è obbligatorio");
if (stampa.getPgInizioMand().compareTo(stampa.getPgFineMand()) > 0)
throw new ValidationException(
"Attenzione: il Numero Inizio Mandato non può essere superiore al Numero Fine Mandato");
if (stampa.getPgInizioDist().compareTo(stampa.getPgFineDist()) > 0)
throw new ValidationException(
"Attenzione: il Numero Inizio Distinta non può essere superiore al Numero Fine Distinta");
} catch (ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext,
Stampa_giornale_mandatiBulk stampa) throws ComponentException {
try {
Timestamp dataOdierna = getDataOdierna(userContext);
if (stampa.getEsercizio() == null)
throw new ValidationException(
"Il campo ESERCIZIO e' obbligatorio");
if (stampa.getCd_cds() == null)
throw new ValidationException("Il campo CDS e' obbligatorio");
if (stampa.getDataInizio() == null)
throw new ValidationException(
"Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine() == null)
throw new ValidationException(
"Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices
.getFirstDayOfYear(stampa.getEsercizio().intValue());
if (stampa.getDataInizio().compareTo(stampa.getDataFine()) > 0)
throw new ValidationException(
"La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
if (stampa.getDataInizio().compareTo(firstDayOfYear) < 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
"dd/MM/yyyy");
throw new ValidationException(
"La DATA di INIZIO PERIODO non può essere inferiore a "
+ formatter.format(firstDayOfYear));
}
if (stampa.getDataFine().compareTo(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));
}
if (stampa.getPgInizio() == null)
throw new ValidationException(
"Il campo NUMERO INIZIO MANDATO è obbligatorio");
if (stampa.getPgFine() == null)
throw new ValidationException(
"Il campo NUMERO FINE MANDATO è obbligatorio");
if (stampa.getPgInizio().compareTo(stampa.getPgFine()) > 0)
throw new ValidationException(
"Il NUMERO INIZIO MANDATO non può essere superiore al NUMERO FINE MANDATO");
// if (stampa.getCdUOEmittenteForPrint()==null)
// throw new
// ValidationException("Il campo UO EMITTENTE è obbligatorio");
} catch (ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext,
Stampa_vpg_mandatoBulk stampa) throws ComponentException {
try {
Timestamp dataOdierna = getDataOdierna(userContext);
if (stampa.getEsercizio() == null)
throw new ValidationException(
"Il campo ESERCIZIO e' obbligatorio");
if (stampa.getCd_cds() == null)
throw new ValidationException("Il campo CDS e' obbligatorio");
if (stampa.getDataInizio() == null)
throw new ValidationException(
"Il campo DATA INIZIO PERIODO è obbligatorio");
if (stampa.getDataFine() == null)
throw new ValidationException(
"Il campo DATA FINE PERIODO è obbligatorio");
java.sql.Timestamp firstDayOfYear = DateServices
.getFirstDayOfYear(stampa.getEsercizio().intValue());
if (stampa.getDataInizio().compareTo(stampa.getDataFine()) > 0)
throw new ValidationException(
"La DATA di INIZIO PERIODO non può essere superiore alla DATA di FINE PERIODO");
if (stampa.getDataInizio().compareTo(firstDayOfYear) < 0) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
"dd/MM/yyyy");
throw new ValidationException(
"La DATA di INIZIO PERIODO non può essere inferiore a "
+ formatter.format(firstDayOfYear));
}
if (stampa.getDataFine().compareTo(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));
}
if (stampa.getPgInizio() == null)
throw new ValidationException(
"Il campo NUMERO INIZIO MANDATO è obbligatorio");
if (stampa.getPgFine() == null)
throw new ValidationException(
"Il campo NUMERO FINE MANDATO è obbligatorio");
if (stampa.getPgInizio().compareTo(stampa.getPgFine()) > 0)
throw new ValidationException(
"Il NUMERO INIZIO MANDATO non può essere superiore al NUMERO FINE MANDATO");
MandatoIHome home = (MandatoIHome) getHome(userContext,
MandatoIBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, stampa
.getCd_cds());
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, stampa
.getEsercizio());
sql.addBetweenClause("AND", "pg_mandato", stampa.getPgInizio(),
stampa.getPgFine());
sql.addBetweenClause("AND", "dt_emissione", stampa.getDataInizio(),
stampa.getDataFine());
Mandato_rigaHome rigaHome = (Mandato_rigaHome) getHome(userContext,
Mandato_rigaBulk.class);
SQLBuilder sqlRiga = rigaHome.createSQLBuilder();
sqlRiga.addSQLJoin("MANDATO.CD_CDS", "MANDATO_RIGA.CD_CDS");
sqlRiga.addSQLJoin("MANDATO.ESERCIZIO", "MANDATO_RIGA.ESERCIZIO");
sqlRiga.addSQLJoin("MANDATO.PG_MANDATO", "MANDATO_RIGA.PG_MANDATO");
sqlRiga.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, stampa
.getTerzoForPrint().getCd_terzo());
sql.addSQLExistsClause("AND", sqlRiga);
Iterator i = home.fetchAll(sql).iterator();
for (; i.hasNext(); ) {
MandatoIBulk mandato = (MandatoIBulk) i.next();
if (contaModalitaPagamento(userContext, mandato) > 1)
throw new ApplicationException(
"Impossibile stampare il Mandato n° "
+ mandato.getPg_mandato()
+ " in quanto le modalità di pagamento dei dettagli sono diverse.");
}
} catch (ValidationException ex) {
throw new ApplicationException(ex);
} catch (PersistencyException ex) {
throw new ApplicationException(ex);
}
}
/**
* verifica 1210 - errore PreCondition: E' stata richiesta la
* creazione/modifica di un mandato che include dei pagamenti 1210 e non
* tutte le scadenze di obbligazione associate al 1210 sono state incluse
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica1210 - ok
* PreCondition: E' stata richiesta la creazione/modifica di un mandato e
* tutti i precedenti controlli sono stati superati PostCondition: Il
* mandato ha superato la validazione e può pertanto essere salvato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di cui si verifica la
* correttezza
*/
private void verifica1210(UserContext userContext, MandatoIBulk mandato)
throws ComponentException {
Mandato_rigaIBulk riga;
Collection docPassivi;
V_doc_passivo_obbligazioneBulk docPassivo;
try {
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaIBulk) i.next();
if (riga.getPg_lettera() != null) {
docPassivi = ((V_doc_passivo_obbligazioneHome) getHome(
userContext, V_doc_passivo_obbligazioneBulk.class))
.find1210Collegati(riga);
for (Iterator j = docPassivi.iterator(); j.hasNext(); ) {
docPassivo = (V_doc_passivo_obbligazioneBulk) j.next();
if (!mandato.isDocPassivoIncluso(docPassivo))
throw new ApplicationException(
"Lettera di pagamento "
+ riga.getPg_lettera()
+ ": e' necessario includere nel mandato anche la scadenza "
+ new java.text.SimpleDateFormat(
"dd.MM.yyyyy")
.format(docPassivo
.getDt_scadenza())
+ " dell'impegno "
+ docPassivo
.getEsercizio_ori_obbligazione()
+ "/"
+ docPassivo.getPg_obbligazione()
+ ".");
}
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* verifica disponibilità di cassa- errore PreCondition: E' stata richiesta
* la creazione di un mandato con tipologia diversa da regolarizzazione e il
* Cds di appartenenza non ha una disponibilità di cassa sufficiente (metodo
* 'findDisponibilitaDiCassaPerContoCorrente') PostCondition: Un messaggio
* di errore viene visualizzato all'utente per segnalare l'impossibilità di
* salvare il mandato
*
* verifica disponibilità di cassa - ok PreCondition: E' stata richiesta la
* creazione di un mandato con tipologia diversa da regolarizzazione e il
* Cds di apparteneza ha una disponibilità di cassa sufficiente
* PostCondition: Il mandato supera la validazione sulla disponibilità di
* cassa del conto corrente ed e' pertanto possibile proseguire con il suo
* salvataggio
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato emesso dal Cds di cui si
* verifica disponibilità di cassa
*/
private void verificaDisponibilitaDiCassaPerContoCorrente(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
java.math.BigDecimal imDispCassa = findDisponibilitaDiCassaPerContoCorrente(
userContext, mandato);
/*
* IMPORTANTE: I mandati di accreditamento aggiornano i saldi sui
* capitoli prima di effettuare questa verifica, pertanto la
* disponibilità di cassa ritonata dalla vista V_DISP_CASSA_CNR
* include l'importo del mandato che si sta emettendo.In questo caso
* la verifica deve essere im_disp_cassa > 0.
*
* In tutti gli altri tipi di mandato sia per cds che per cnr la
* verifica deve essere im_disp_cassa - im_mandato > 0
*/
if (!Utility.createParametriCnrComponentSession().getParametriCnr(userContext, mandato.getEsercizio()).getFl_tesoreria_unica().booleanValue()) {
if (MandatoBulk.TIPO_ACCREDITAMENTO.equals(mandato.getTi_mandato())) {
if (imDispCassa.compareTo(new BigDecimal(0)) < 0)
throw new ApplicationException(
"Mandato superiore alla disponibilità di cassa");
} else {
if (imDispCassa.subtract(mandato.getIm_mandato()).compareTo(
new BigDecimal(0)) < 0)
throw new ApplicationException(
"Mandato superiore alla disponibilità di cassa");
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* verifica mandato - errore dettaglio PreCondition: E' stata richiesta la
* creazione/modifica di un mandato e il mandato non ha dettagli
* (Mandato_rigaBulk) PostCondition: Un messaggio di errore viene
* visualizzato all'utente per segnalare l'impossibilità di salvare il
* mandato verifica mandato - errore regolamento sospeso PreCondition: E'
* stata richiesta la creazione/modifica di un mandato a regolamento di
* sospeso e il mandato non e' stato associato a sospesi PostCondition: Un
* messaggio di errore viene visualizzato all'utente per segnalare
* l'impossibilità di salvare il mandato verifica mandato - errore importo
* regolamento sospeso PreCondition: E' stata richiesta la
* creazione/modifica di un mandato a regolamento di sospeso e la somma dei
* sospesi associati al mandato e' diverso dall'importo del mandato
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica mandato - errore
* data di emissione futura PreCondition: E' stata richiesta la
* creazione/modifica di un mandato con data di emissione futura
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica mandato - errore
* data di emissione superiore alla data ultimo mandato PreCondition: E'
* stata richiesta la creazione/modifica di un mandato con data di emissione
* maggiore della data di emissione dell'ultimo mandato emesso
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica mandato - errore
* disponibilità di cassa PreCondition: E' stata richiesta la
* creazione/modifica di un mandato ma il Cds di appartenenza non ha una
* disponibilità di cassa sufficiente (metodo
* verificaDisponibilitaDiCassaPerContoCorrente) PostCondition: Un messaggio
* di errore viene visualizzato all'utente per segnalare l'impossibilità di
* salvare il mandato verifica mandato - errore modello 1210 PreCondition:
* E' stata richiesta la creazione/modifica di un mandato Il mandato include
* dei pagamenti 1210 Il mandato non include i sospesi definiti per il
* modello 1210 (metodo verificaSospesiDa1210) PostCondition: Un messaggio
* di errore viene visualizzato all'utente per segnalare l'impossibilità di
* salvare il mandato verifica mandato - errore mod. pagamento PreCondition:
* E' stata richiesta la creazione/modifica di un mandato Le righe del
* mandato hanno come tipo di pagamento BANCARIO o POSTALE Le righe del
* mandato hanno coordinate bancarie o postali differenti (metodo
* 'verificaModalitaPagamento') PostCondition: Un messaggio di errore viene
* visualizzato all'utente per segnalare l'impossibilità di salvare il
* mandato verifica mandato - ok PreCondition: E' stata richiesta la
* creazione/modifica di un mandato e tutti i controlli sono stati superati
* PostCondition: Il mandato ha superato la validazione e può pertanto
* essere salvato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di cui si verifica la
* correttezza
*/
protected void verificaMandato(UserContext aUC, MandatoBulk mandato)
throws ComponentException {
MandatoHome mh = (MandatoHome) getHome(aUC, mandato.getClass());
// il mandato deve avere almeno un dettaglio
if (mandato.getMandato_rigaColl().size() == 0)
throw handleException(new ApplicationException(
"E' necessario selezionare almeno un documento passivo"));
// il mandato a regolamento sospeso deve avere dei sospesi associati
if (mandato.getTi_mandato().equals(MandatoBulk.TIPO_REGOLAM_SOSPESO)) {
if (mandato.getSospeso_det_uscColl().size() == 0)
throw handleException(new ApplicationException(
"E' necessario selezionare almeno un sospeso"));
/*
* simona 31.10.03 nel caso di mandato che ha generato una reversale
* di incasso la quadratura della somma dei sospesi deve essere
* fatto con im_mandato-im_reversale
*/
BigDecimal imTotaleSospesi;
if (((MandatoIBulk) mandato).isFaiReversale())
imTotaleSospesi = mandato.getIm_mandato().subtract(
((MandatoIBulk) mandato).getImReversaleDiIncassoIVA());
else
imTotaleSospesi = mandato.getIm_mandato();
if (mandato.getImTotaleSospesi().compareTo(imTotaleSospesi) != 0)
throw handleException(new ApplicationException(
"La somma degli importi dei sospesi deve essere uguale a "
+ imTotaleSospesi));
}
// mandato di regolarizzazione
if (mandato.getTi_mandato().equals(MandatoBulk.TIPO_REGOLARIZZAZIONE))
verificaMandatoDiRegolarizzazione(aUC, (MandatoIBulk) mandato);
try {
// in caso di INSERT: verifica la data di contabilizzazione
if (mandato.isToBeCreated()) {
Timestamp lastDayOfTheYear = DateServices
.getLastDayOfYear(mandato.getEsercizio().intValue());
if (getDataOdierna(aUC).after(lastDayOfTheYear)
&& mandato.getDt_emissione()
.compareTo(lastDayOfTheYear) != 0)
throw new ApplicationException(
"La data di registrazione deve essere "
+ java.text.DateFormat.getDateInstance()
.format(lastDayOfTheYear));
if (mandato.getDt_emissione()
.compareTo(mh.getServerTimestamp()) > 0)
throw new ApplicationException(
"Non è possibile inserire un mandato con data futura");
Timestamp dataUltMandato = ((MandatoHome) getHome(aUC, mandato
.getClass())).findDataUltimoMandatoPerCds(mandato);
if (dataUltMandato != null
&& dataUltMandato.after(mandato.getDt_emissione()))
throw new ApplicationException(
"Non è possibile inserire un mandato con data anteriore a "
+ java.text.DateFormat
.getDateTimeInstance().format(
dataUltMandato));
// verifica disponibilità su CC
if (!mandato.getTi_mandato().equals(
MandatoBulk.TIPO_REGOLARIZZAZIONE))
verificaDisponibilitaDiCassaPerContoCorrente(aUC, mandato);
}
if (mandato instanceof MandatoIBulk) {
if (mandato.isToBeCreated())
verifica1210(aUC, (MandatoIBulk) mandato);
verificaSospesiDa1210(aUC, (MandatoIBulk) mandato);
}
verificaModalitaPagamento(aUC, mandato);
if (mandato.getTi_mandato().equals(MandatoBulk.TIPO_PAGAMENTO))
verificaTracciabilitaPagamenti(aUC, mandato);
} catch (Exception e) {
throw handleException(e);
}
}
private void verificaCIGSUFatture(UserContext userContext, MandatoBulk mandatoBulk) throws ComponentException, IntrospectionException, 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!"));
final List siopeBulks = mandatoHome.findMandato_siope(userContext, mandatoBulk)
.stream()
.filter(Mandato_siopeBulk.class::isInstance)
.map(Mandato_siopeBulk.class::cast)
.collect(Collectors.toList());
Fattura_passivaHome fattura_passivaHome = Optional.ofNullable(getHome(userContext, Fattura_passiva_IBulk.class))
.filter(Fattura_passivaHome.class::isInstance)
.map(Fattura_passivaHome.class::cast)
.orElseThrow(() -> new ComponentException("Home della fattura non trovata!"));
Fattura_passiva_rigaHome fattura_passivaRigaHome = Optional.ofNullable(getHome(userContext, Fattura_passiva_rigaIBulk.class))
.filter(Fattura_passiva_rigaHome.class::isInstance)
.map(Fattura_passiva_rigaHome.class::cast)
.orElseThrow(() -> new ComponentException("Home della fattura non trovata!"));
final Map> codiciSiope = siopeBulks
.stream()
.collect(Collectors.groupingBy(Mandato_siopeBulk::getCd_siope));
for (String codiceSiope : codiciSiope.keySet()) {
List codiciCIG = new ArrayList();
List motiviAssenzaCIG = new ArrayList();
boolean isExistsFatturaEstera = false;
for (Mandato_siopeBulk siopeBulk : codiciSiope.get(codiceSiope)) {
if (siopeBulk.getCd_tipo_documento_amm().equals(Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA)) {
final Fattura_passivaBulk fattura_passivaBulk = Optional.ofNullable(
fattura_passivaHome.findByPrimaryKey(
new Fattura_passiva_IBulk(
siopeBulk.getCd_cds_doc_amm(),
siopeBulk.getCd_uo_doc_amm(),
siopeBulk.getEsercizio_doc_amm(),
siopeBulk.getPg_doc_amm()
)
)
).filter(Fattura_passivaBulk.class::isInstance)
.map(Fattura_passivaBulk.class::cast)
.orElseThrow(() -> new ComponentException("Fattura non trovata!"));
if (!(fattura_passivaBulk.isEstera() ||
fattura_passivaBulk.isSanMarinoConIVA() ||
fattura_passivaBulk.isSanMarinoSenzaIVA())) {
isExistsFatturaEstera = true;
codiciCIG.addAll(fattura_passivaRigaHome.findCodiciCIG(fattura_passivaBulk, mandatoBulk, siopeBulk));
motiviAssenzaCIG.addAll(fattura_passivaRigaHome.findMotiviEsclusioneCIG(fattura_passivaBulk, mandatoBulk, siopeBulk));
}
}
}
codiciCIG = codiciCIG.stream().distinct().collect(Collectors.toList());
motiviAssenzaCIG = motiviAssenzaCIG.stream().distinct().collect(Collectors.toList());
if (isExistsFatturaEstera) {
if (codiciCIG.isEmpty() && motiviAssenzaCIG.isEmpty()) {
throw new ApplicationMessageFormatException("Al mandato e per il codice SIOPE {0} sono associate fatture " +
"commerciali su cui non è posssibile determinare il CIG!", codiceSiope);
}
if (codiciCIG.size() > 0 && motiviAssenzaCIG.size() > 0) {
throw new ApplicationMessageFormatException("Al mandato e per il codice SIOPE {0} sono associate fatture " +
"commerciali sia con CIG che con motivo di assenza CIG!", codiceSiope);
}
if (codiciCIG.size() > 1) {
throw new ApplicationMessageFormatException("Al mandato e per il codice SIOPE {0} sono associate fatture " +
"commerciali con CIG diversi : {1}!",
codiceSiope,
String.join(" - ", codiciCIG.stream().collect(Collectors.toList()))
);
}
if (motiviAssenzaCIG.size() > 1) {
throw new ApplicationMessageFormatException("Al mandato e per il codice SIOPE {0} sono associate fatture " +
"commerciali con motivi di assenza CIG diversi : {1}!",
codiceSiope,
String.join(" - ", motiviAssenzaCIG.stream().collect(Collectors.toList()))
);
}
}
}
}
/**
* verifica mandato di accreditamento PreCondition: E' stata richiesta la
* modifica di un mandato di accreditamento (modifica dei capitoli
* finanziari quindi degli impegni) La somma degli importi associati ai
* nuovi capitoli è uguale all'importo originario di testata del mandato I
* nuovi impegni selezionati sono o tutti di competenza o tutti a residuo
* PostCondition: Il mandato ha superato la validazione e può pertanto
* essere salvato errore importo PreCondition: E' stata richiesta la
* modifica di un mandato di accreditamento (modifica dei capitoli
* finanziari quindi degli impegni) La somma degli importi associati ai
* nuovi capitoli è diverso dall'importo originario di testata del mandato
* PostCondition: Una segnalazione di errore viene emessa per comunicare
* l'impossibilità a salvare il mandato. errore competenza/residuo
* PreCondition: E' stata richiesta la modifica di un mandato di
* accreditamento (modifica dei capitoli finanziari quindi degli impegni) I
* nuovi capitoli selezionati dall'utenet sono in parte di competenza e in
* parte a residuo PostCondition: Una segnalazione di errore viene emessa
* per comunicare l'impossibilità a salvare il mandato.
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di
* accreditamento di cui si verifica la correttezza
*/
private void verificaMandatoAccreditamento(UserContext aUC,
MandatoAccreditamentoBulk mandato) throws ComponentException {
BigDecimal nuovo_imp = new BigDecimal(0);
V_impegnoBulk impegno;
String ti_competenza_residuo = null;
for (Iterator i = mandato.getImpegniSelezionatiColl().iterator(); i
.hasNext(); ) {
impegno = (V_impegnoBulk) i.next();
if (ti_competenza_residuo == null)
ti_competenza_residuo = impegno.getTi_competenza_residuo();
else if (!ti_competenza_residuo.equals(impegno
.getTi_competenza_residuo()))
throw new ApplicationException(
"Sono stati selezionati sia capitoli di competenza che capitoli a residuo");
if (impegno.getIm_da_trasferire() == null)
throw new ApplicationException("L'impegno "
+ impegno.getEsercizio_originale() + "/"
+ impegno.getPg_obbligazione()
+ " ha importo da trasferire nullo");
if (impegno.getIm_da_trasferire().compareTo(new BigDecimal(0)) <= 0)
throw new ApplicationException("L'impegno "
+ impegno.getEsercizio_originale() + "/"
+ impegno.getPg_obbligazione()
+ " ha importo da trasferire minore o uguale a 0");
nuovo_imp = nuovo_imp.add(impegno.getIm_da_trasferire());
}
if (nuovo_imp.compareTo(mandato.getIm_mandato()) != 0)
throw new ApplicationException(
"La somma degli importi da trasferire sui singoli impegni differisce dall'importo del mandato");
}
/**
* verifica mandato di regolarizzazione PreCondition: E' stata richiesta la
* creazione di un mandato di regolarizzazione e l'accertamento selezionato
* dall'utente ha un importo disponibile (somma degli importi delle scadenze
* non associate a doc. amministrativi) da associare ai documenti
* amministrativi/contabili uguale all'importo del mandato PostCondition: Il
* mandato ha superato la validazione e può pertanto essere salvato verifica
* mandato di regolarizzazione - errore PreCondition: E' stata richiesta la
* creazione di un mandato di regolarizzazione e l'accertamento selezionato
* dall'utente ha un importo disponibile (somma degli importi delle scadenze
* non associate a doc. amministrativi) da associare ai documenti
* amministrativi/contabili diverso dall'importo del mandato PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare
* l'impossibilità di salvare il mandato verifica mandato di
* regolarizzazione - errore sospesi PreCondition: E' stata richiesta la
* creazione/modifica di un mandato di regolarizzazione e sono stati
* associati dei sospesi al mandato PostCondition: Un messaggio di errore
* viene visualizzato all'utente per segnalare l'impossibilità di salvare un
* mandato di regolarizzazione con sospesi associati verifica mandato di
* regolarizzazione - errore partite di giro PreCondition: E' stata
* richiesta la creazione/modifica di un mandato di regolarizzazione e sono
* stati associati al mandato sia impegni su partita di giro che impegni
* generici PostCondition: Un messaggio di errore viene visualizzato
* all'utente per segnalare l'impossibilità di salvare un mandato di
* regolarizzazione con sia impegni su partita di giro che impegni generici
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato di regolarizzazione di
* cui si verifica la correttezza
*/
private void verificaMandatoDiRegolarizzazione(UserContext aUC,
MandatoIBulk mandato) throws ComponentException {
try {
if (mandato.isToBeCreated() && !mandato.isGeneraReversaleDaDocAmm()) {
// Locko l'accertamento selezionato dall'utente: in tal modo
// garantisco che nessuno lo modifichi mentre
// vengono effettuati i controlli e, nello stesso tempo, posso
// controllare che il PG_VER_REC dell'accertamento
// non sia cambiato da quando è stato selezionato.
lockBulk(aUC, mandato.getAccertamentoPerRegolarizzazione());
// verifica l'importo dell'accertamento
BigDecimal im_accertamento_disponibile = new BigDecimal(0);
AccertamentoBulk accertamento = (AccertamentoBulk) createAccertamentoAbstractComponentSession()
.inizializzaBulkPerModifica(aUC,
mandato.getAccertamentoPerRegolarizzazione());
mandato.setAccertamentoPerRegolarizzazione(accertamento);
Set newSet = new HashSet();
for (Iterator i = mandato
.getScadenzeAccertamentoSelezionatePerRegolarizzazione()
.iterator(); i.hasNext(); ) {
Accertamento_scadenzarioBulk asMandato = (Accertamento_scadenzarioBulk) i
.next();
Accertamento_scadenzarioBulk asDB = accertamento
.getAccertamento_scadenzarioColl().get(
accertamento
.getAccertamento_scadenzarioColl()
.indexOfByPrimaryKey(asMandato));
if (asDB != null) {
newSet.add(asDB);
if (asDB.getIm_scadenza().subtract(
asDB.getIm_associato_doc_contabile())
.compareTo(new BigDecimal(0)) > 0)
im_accertamento_disponibile = im_accertamento_disponibile
.add(asDB
.getIm_scadenza()
.subtract(
asDB
.getIm_associato_doc_contabile()));
}
}
if (mandato.getIm_mandato().compareTo(
im_accertamento_disponibile) != 0)
throw new ApplicationException(
"L'importo del mandato e l'importo disponibile dell'accertamento non corrispondono");
mandato
.setScadenzeAccertamentoSelezionatePerRegolarizzazione(newSet);
} else if (mandato.isToBeCreated()
&& mandato.isGeneraReversaleDaDocAmm()) {
// verifica l'importo dei doc amm selezioanti e il terzo
BigDecimal im_documento_disponibile = new BigDecimal(0);
Integer cd_terzo = ((V_doc_attivo_accertamentoBulk) mandato
.getDocGenericiSelezionatiPerRegolarizzazione()
.iterator().next()).getCd_terzo();
for (Iterator i = mandato
.getDocGenericiSelezionatiPerRegolarizzazione()
.iterator(); i.hasNext(); ) {
V_doc_attivo_accertamentoBulk docAttivo = (V_doc_attivo_accertamentoBulk) i
.next();
im_documento_disponibile = im_documento_disponibile
.add(docAttivo.getIm_totale_doc_amm());
if (!(cd_terzo.intValue() == docAttivo.getCd_terzo()
.intValue()))
throw new ApplicationException(
"Sono stati selezionati documenti amministrativi intestati a terzi diversi!");
}
if (mandato.getIm_mandato().compareTo(im_documento_disponibile) != 0)
throw new ApplicationException(
"L'importo del mandato e la somma degli importi dei documenti amministrativi selezionati non corrispondono");
/*
* //verifica competenza/residuo String ti_competenza_residuo =
* mandato.getDocGenericiSelezionatiPerRegolarizzazione()(
* Documento_generico_rigaBulk
* )documento.getDocumento_generico_dettColl
* ().get(0)).getAccertamento_scadenziario
* ().getAccertamento().getTi_competenza_residuo(); for (
* Iterator i =
* documento.getDocumento_generico_dettColl().iterator();
* i.hasNext(); ) { Documento_generico_rigaBulk dr =
* (Documento_generico_rigaBulk) i.next(); if (
* !dr.getAccertamento_scadenziario
* ().getAccertamento().getTi_competenza_residuo
* ().equals(ti_competenza_residuo)) throw new
* ApplicationException(
* "Non e' possibile creare la reversale perchè il documento amministrativo selezionato e' stato contabilizzato in parte su accertamenti di competenza e in parte su accertamenti a residuo"
* ); }
*/
}
// non deve essere possibile collegare contemporaneamente impegni su
// partita di giro e impegni normali
Boolean PGiro = null;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
Mandato_rigaBulk riga = (Mandato_rigaBulk) i.next();
ObbligazioneBulk obbligazione = (ObbligazioneBulk) getHome(aUC,
ObbligazioneBulk.class).findByPrimaryKey(
new ObbligazioneBulk(riga.getCd_cds(), riga
.getEsercizio_obbligazione(), riga
.getEsercizio_ori_obbligazione(), riga
.getPg_obbligazione()));
if (PGiro == null)
PGiro = obbligazione.getFl_pgiro();
if (!PGiro.equals(obbligazione.getFl_pgiro()))
throw new ApplicationException(
"Non e' possibile associare ad un mandato di regolarizzazione sia impegni su partita di giro che impegni generici.");
}
if (mandato.getSospeso_det_uscColl().size() > 0)
throw new ApplicationException(
"Il mandato di regolarizzazione non può avere sospesi associati");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento mandato su anticipo associato a missione PreCondition: E'
* stata generata la richiesta di annullare un Mandato Il mandato include un
* anticipo L'anticipo e' associato a missione PostCondition: Una
* segnalazione di errore comunica all'utente l'impossibilità di eseguire
* l'annullamento
*
* annullamento mandato su anticipo non associato a missione PreCondition:
* E' stata generata la richiesta di annullare un Mandato Il mandato include
* un anticipo L'anticipo non e' associato a missione PostCondition: La
* validazione del mandato su anticipo e' stata superata ed e' pertanto
* possibile proseguire con l'annullamento del mandato
*
* annullamento mandato non su anticipo PreCondition: E' stata generata la
* richiesta di annullare un Mandato Il mandato non include un anticipo
* PostCondition: La validazione del mandato su anticipo e' stata superata
* ed e' pertanto possibile proseguire con l'annullamento del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da annullare
* @return mandato MandatoBulk il Mandato annullato
*/
private void verificaMandatoSuAnticipo(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
Mandato_rigaBulk riga;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
if (Numerazione_doc_ammBulk.TIPO_ANTICIPO.equals(riga
.getCd_tipo_documento_amm())) {
AnticipoBulk anticipo = (AnticipoBulk) getHome(userContext,
AnticipoBulk.class).findByPrimaryKey(
new AnticipoBulk(riga.getCd_cds_doc_amm(), riga
.getCd_uo_doc_amm(), riga
.getEsercizio_doc_amm(), riga
.getPg_doc_amm()));
if (anticipo == null)
throw new ApplicationException(
"Attenzione anticipo non trovato");
if (anticipo.getFl_associato_missione() != null
&& anticipo.getFl_associato_missione()
.booleanValue()
&& anticipo
.getStato_pagamento_fondo_eco()
.compareTo(
AnticipoBulk.STATO_REGISTRATO_FONDO_ECO) != 0)
throw new ApplicationException(
"Annullamento impossibile! L'anticipo "
+ anticipo.getPg_anticipo()
+ " presente nel mandato e' associato a missione.");
}
}
} catch (Exception e) {
throw handleException(mandato, e);
}
}
/**
* verifica mandato - errore mod. pagamento bancario PreCondition: E' stata
* richiesta la creazione/modifica di un mandato Le righe del mandato hanno
* come tipo di pagamento BANCARIO Le righe del mandato hanno coordinate
* bancarie (abi, cab, nr conto) differenti PostCondition: Un messaggio di
* errore viene visualizzato all'utente per segnalare l'impossibilità di
* salvare il mandato verifica mandato - errore mod. pagamento postale
* PreCondition: E' stata richiesta la creazione/modifica di un mandato Le
* righe del mandato hanno come tipo di pagamento POSTALE Le righe del
* mandato hanno coordinate postali ( nr conto ) differenti PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare
* l'impossibilità di salvare il mandato verifica mandato - errore mod.
* pagamento quietanza PreCondition: E' stata richiesta la
* creazione/modifica di un mandato Le righe del mandato hanno come tipo di
* pagamento QUIETANZA Le righe del mandato hanno quietanze differenti
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica mandato - errore
* mod. pagamento quietanza PreCondition: E' stata richiesta la
* creazione/modifica di un mandato Le righe del mandato hanno come tipo di
* pagamento ALTRO Le righe del mandato hanno intestazioni differenti
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica mandato - ok
* PreCondition: E' stata richiesta la creazione/modifica di un mandato Le
* righe del mandato hanno la stesse coordinate di pagamento PostCondition:
* Il mandato ha superato la validazione e può pertanto essere salvato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di cui si verifica la
* correttezza
*/
private void verificaModalitaPagamento(UserContext aUC, MandatoBulk mandato)
throws ComponentException {
try {
if (mandato.getMandato_rigaColl().size() == 0)
return;
Mandato_rigaBulk riga = (Mandato_rigaBulk) mandato
.getMandato_rigaColl().get(0);
/*
* if ( riga.getBanca() == null || riga.getBanca().getNumero_conto()
* == null) //mandato di regolarizzazione return;
*/
if (riga.getBanca() == null
|| MandatoBulk.TIPO_REGOLARIZZAZIONE.equals(mandato
.getTi_mandato())) // mandato di regolarizzazione
return;
if (riga.getModalita_pagamento() != null) {
Rif_modalita_pagamentoBulk rifModPag = (Rif_modalita_pagamentoBulk) getHome(aUC,
Rif_modalita_pagamentoBulk.class).findByPrimaryKey(
new Rif_modalita_pagamentoBulk(riga.getModalita_pagamento().getCd_modalita_pag()));
if (rifModPag.isMandatoRegSospeso() && !mandato.isRegolamentoSospeso())
throw new ApplicationException(
"Attenzione per la modalità di pagamento indicata il mandato deve essere a regolamento sospeso.");
if (rifModPag.getCd_modalita_pag().compareTo("F24EP") == 0 && mandato.getDt_pagamento_richiesta() == null)
throw new ApplicationException(
"Attenzione per la modalità di pagamento indicata il mandato deve avere la data pagamento richiesta.");
if (rifModPag.getCd_modalita_pag().compareTo("F24EP") != 0 && mandato.getDt_pagamento_richiesta() != null)
throw new ApplicationException(
"Attenzione per la modalità di pagamento " + rifModPag.getCd_modalita_pag() + " la data pagamento richiesta non deve essere indicata.");
if (rifModPag.getCd_modalita_pag().compareTo("F24EP") == 0 && mandato.getDt_pagamento_richiesta() != null &&
mandato.getDt_emissione() != null && mandato.getDt_pagamento_richiesta().before(mandato.getDt_emissione()))
throw new ApplicationException(
"Attenzione per la modalità di pagamento " + rifModPag.getCd_modalita_pag() + " la data pagamento richiesta non può essere inferiore alla data contabilizzazione.");
if (Optional.ofNullable(rifModPag)
.map(Rif_modalita_pagamentoBase::getTi_pagamento)
.filter(s -> s.equalsIgnoreCase(Rif_modalita_pagamentoBulk.BANCA_ITALIA))
.isPresent() &&
!Arrays.asList(
Rif_modalita_pagamentoBulk.TipoPagamentoSiopePlus.ACCREDITOTESORERIAPROVINCIALESTATOPERTABA.value(),
Rif_modalita_pagamentoBulk.TipoPagamentoSiopePlus.ACCREDITOTESORERIAPROVINCIALESTATOPERTABB.value())
.contains(Optional.ofNullable(rifModPag)
.map(Rif_modalita_pagamentoBase::getTipo_pagamento_siope)
.orElse(null)
)
) {
throw new ApplicationMessageFormatException(
"Attenzione la modalità di pagamento {0} non può essere utilizzata per l''emissione del Mandato!", rifModPag.getCd_modalita_pag());
}
}
if (riga.getBanca() == null
|| Rif_modalita_pagamentoBulk.ALTRO.equals(riga.getBanca()
.getTi_pagamento()))
return;
BancaBulk banca = riga.getBanca();
String abi = riga.getBanca().getAbi();
String cab = riga.getBanca().getCab();
String nrConto = riga.getBanca().getNumero_conto();
String quietanza = riga.getBanca().getQuietanza();
String intestazione = riga.getBanca().getIntestazione();
String cd_modalita_pag = riga.getModalita_pagamento().getCd_modalita_pag();
if (Rif_modalita_pagamentoBulk.IBAN.equals(riga.getBanca().getTi_pagamento())) {
final Optional codiceNazione = Optional.ofNullable(riga.getBanca())
.flatMap(bancaBulk -> Optional.ofNullable(bancaBulk.getCodice_iban()))
.map(s -> s.substring(0, 2));
if (codiceNazione.isPresent()) {
NazioneHome nazioneHome = (NazioneHome) getHome(aUC, NazioneBulk.class);
SQLBuilder sqlExists = nazioneHome.createSQLBuilder();
sqlExists.addSQLClause("AND", "NAZIONE.CD_ISO", SQLBuilder.EQUALS, codiceNazione.get());
sqlExists.addSQLClause("AND", "NAZIONE.FL_SEPA", SQLBuilder.EQUALS, "Y");
if (sqlExists.executeCountQuery(getConnection(aUC)) != 0)
throw new ApplicationMessageFormatException("Attenzione la modalità di pagamento {0} presente sul documento non è " +
"coerente con la nazione {1} del beneficiario!", cd_modalita_pag, codiceNazione.get());
}
return;
}
/*
* verifico che ogni riga abbia le modalità di pagamento e gli
* attributi della banca uguali
*/
/* vengono escluse dal test le note di debito e le note di credito */
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
riga = (Mandato_rigaBulk) i.next();
if (Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA.equals(riga
.getCd_tipo_documento_amm())
&& riga.getTi_fattura().equals(
Fattura_passiva_IBulk.TIPO_NOTA_DI_CREDITO)
&& riga.getIm_mandato_riga().compareTo(
new BigDecimal(0)) == 0)
// si tratta di una nota di credito - non deve essere
// effettuato la verifica delle modalità di pagamento
continue;
if (!riga.getModalita_pagamento().getCd_modalita_pag().equals(
cd_modalita_pag))
throw new ApplicationException(
"Attenzione le righe del mandato devono avere la stessa modalità di pagamento");
// conto bancario
if (Rif_modalita_pagamentoBulk.BANCARIO.equals(riga.getBanca()
.getTi_pagamento())
&& !banca.equalsByPrimaryKey(riga.getBanca()))
throw new ApplicationException(
"Attenzione le righe del mandato devono avere la stessa modalità di pagamento bancario");
else
// postale
if (Rif_modalita_pagamentoBulk.POSTALE.equals(riga.getBanca()
.getTi_pagamento())
&& !banca.equalsByPrimaryKey(riga.getBanca()))
throw new ApplicationException(
"Attenzione le righe del mandato devono avere la stessa modalità di pagamento postale");
else
// quietanza
if (Rif_modalita_pagamentoBulk.QUIETANZA.equals(riga.getBanca()
.getTi_pagamento())
&& !quietanza.equals(riga.getBanca().getQuietanza()))
throw new ApplicationException(
"Attenzione le righe del mandato devono avere la stessa quietanza");
else
// altro
if ((Rif_modalita_pagamentoBulk.ALTRO.equals(riga.getBanca()
.getTi_pagamento()) || Rif_modalita_pagamentoBulk.IBAN
.equals(riga.getBanca().getTi_pagamento()))
&& !intestazione.equals(riga.getBanca()
.getIntestazione()))
throw new ApplicationException(
"Attenzione le righe del mandato devono avere la stessa modalità di pagamento");
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* verifica sospesi da 1210 - errore mandato non a regolamento sospeso
* PreCondition: E' stata richiesta la creazione/modifica di un mandato che
* include dei pagamenti 1210 e il mandato non e' a regolamento sospeso
* PostCondition: Un messaggio di errore viene visualizzato all'utente per
* segnalare l'impossibilità di salvare il mandato verifica sospesi da 1210
* - errore sospeso PreCondition: E' stata richiesta la creazione/modifica
* di un mandato che include dei pagamenti 1210 e il mandato a regolamento
* sospeso non include il sospeso definito nel modello 1210 PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare
* l'impossibilità di salvare il mandato verifica sospesi da 1210 - ok
* PreCondition: E' stata richiesta la creazione/modifica di un mandato e
* tutti i precedenti controlli sono stati superati PostCondition: Il
* mandato ha superato la validazione e può pertanto essere salvato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di cui si verifica la
* correttezza
*/
private void verificaSospesiDa1210(UserContext userContext,
MandatoIBulk mandato) throws ComponentException {
if (mandato.getSospesiDa1210List() != null) {
String cd_sospeso;
Sospeso_det_uscBulk sospesoDet;
boolean found;
for (Iterator i = mandato.getSospesiDa1210List().iterator(); i
.hasNext(); ) {
cd_sospeso = (String) i.next();
found = false;
for (Iterator j = mandato.getSospeso_det_uscColl().iterator(); j
.hasNext(); ) {
sospesoDet = (Sospeso_det_uscBulk) j.next();
if (sospesoDet.getCd_sospeso().equals(cd_sospeso)) {
found = true;
break;
}
}
if (!found)
if (MandatoBulk.TIPO_REGOLAM_SOSPESO.equals(mandato
.getTi_mandato()))
throw new ApplicationException(
"Attenzione! Il mandato deve essere associato al sospeso "
+ cd_sospeso
+ " definito nella lettera di pagamento 1210.");
else
throw new ApplicationException(
"Attenzione! Il mandato deve essere a regolamento sospeso perchè include lettera di pagamento 1210.");
}
}
}
/**
* 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
*/
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!"));
}
/**
* verifica tipo bollo PreCondition: PostCondition:
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di cui si verifica la
* correttezza
*/
private void verificaTipoBollo(UserContext userContext, MandatoBulk mandato)
throws it.cnr.jada.persistency.PersistencyException,
ComponentException {
if (mandato instanceof MandatoIBulk) {
Tipo_bolloBulk bollo;
boolean found = false;
for (Iterator i = ((MandatoIBulk) mandato).getTipoBolloOptions()
.iterator(); i.hasNext(); ) {
bollo = (Tipo_bolloBulk) i.next();
if (bollo.getCd_tipo_bollo().equals(
mandato.getMandato_terzo().getCd_tipo_bollo())) {
found = true;
return;
}
}
if (!found) // probabilmente il tipo bollo ha il flag cancellato
{
bollo = (Tipo_bolloBulk) getHome(userContext,
Tipo_bolloBulk.class).findByPrimaryKey(
mandato.getMandato_terzo().getTipoBollo());
if (bollo == null)
throw new ApplicationException(" Tipo bollo inesistente");
else
((MandatoIBulk) mandato).getTipoBolloOptions().add(bollo);
}
}
}
private int contaModalitaPagamento(it.cnr.jada.UserContext userContext,
it.cnr.contab.doccont00.core.bulk.MandatoBulk mandato)
throws it.cnr.jada.comp.ComponentException {
Mandato_rigaHome home = (Mandato_rigaHome) getHome(userContext,
Mandato_rigaBulk.class);
SQLBuilder sql = home.createSQLBuilder();
sql.setDistinctClause(true);
sql.resetColumns();
sql.addColumn("CD_TERZO");
sql.addColumn("CD_MODALITA_PAG");
sql.addColumn("PG_BANCA");
sql.addColumn("CD_TERZO_CEDENTE");
sql.addClause("AND", "cd_cds", SQLBuilder.EQUALS, mandato.getCd_cds());
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, mandato
.getEsercizio());
sql.addClause("AND", "pg_mandato", SQLBuilder.EQUALS, mandato
.getPg_mandato());
sql.openParenthesis("AND");
sql.openParenthesis("AND");
sql.addClause("AND", "cd_tipo_documento_amm", SQLBuilder.EQUALS,
Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA);
sql.addClause("AND", "im_mandato_riga", SQLBuilder.NOT_EQUALS,
new BigDecimal(0));
sql.closeParenthesis();
sql.addClause("OR", "cd_tipo_documento_amm", SQLBuilder.NOT_EQUALS,
Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA);
sql.closeParenthesis();
try {
return sql.executeCountQuery(getConnection(userContext));
} catch (SQLException e) {
throw new ComponentException(e);
}
}
public void esistonoPiuModalitaPagamento(
it.cnr.jada.UserContext userContext,
it.cnr.contab.doccont00.core.bulk.MandatoBulk mandato)
throws it.cnr.jada.comp.ComponentException {
if (contaModalitaPagamento(userContext, mandato) > 1)
throw new ApplicationException(
"Impossibile stampare. Le modalità di pagamento dei dettagli del mandato sono diverse.");
}
/*
* creazione variazione di bilancio di regolarizzazione PreCondition: E'
* stata generata la richiesta di creazione di una variazione di bilancio
* Ente per ridurre le disponibilità di importi nel bilancio di servizio da
* assegnare a seguito di emissione di una reversale di regolarizzazione
* PostCondition: Viene richiesta alla Component che gestisce le Variazioni
* di Bilancio la creazione di una variazione di regolarizzazione a partire
* dal mandato di regolarizzazione.
*
* @param userContext lo UserContext che ha generato la
* richiesta
*
* @param mandato MandatoBulk il mandato di regolarizzazione
*
* @return reversale Var_bilancioBulk la variazione di bilancio
* di regolarizzazione creata
*/
private Var_bilancioBulk creaVariazioneBilancioDiRegolarizzazione(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
Var_bilancioBulk varBilancio = null;
VarBilancioComponentSession varSession = createVariazioneBilancioComponentSession();
varBilancio = varSession.creaVariazioneBilancioDiRegolarizzazione(
userContext, mandato);
return varBilancio;
} catch (Exception e) {
throw handleException(e);
}
}
public MandatoIBulk esitaVariazioneBilancioDiRegolarizzazione(
UserContext userContext, MandatoIBulk mandato)
throws ComponentException {
try {
if (mandato.getVar_bilancio() != null) {
ProcedureComponentSession varSession = createProcedureComponentSession();
mandato.setVar_bilancio(varSession.salvaDefinitivo(userContext,
mandato.getVar_bilancio()));
}
} catch (Exception e) {
try {
String soggetto = "Si è verificato un errore durante l'approvazione della variazione sul bilancio dell'ente "
+ mandato.getVar_bilancio().getEsercizio()
+ "/"
+ mandato.getVar_bilancio().getPg_variazione();
String preText = "Si è verificato il seguente errore durante l'approvazione della variazione sul bilancio dell'ente "
+ mandato.getVar_bilancio().getEsercizio()
+ "/"
+ mandato.getVar_bilancio().getPg_variazione()
+ "
"
+ "generata in automatico a seguito del Mandato di Regolarizzazione "
+ mandato.getEsercizio()
+ "/"
+ mandato.getPg_mandato()
+ " del CDS "
+ mandato.getCd_cds()
+ ".
"
+ ""
+ e.getMessage()
+ "
"
+ "La Variazione al bilancio dell'Ente rimarrà pertanto PROVVISORIA.
";
generaEMAIL(userContext, mandato, soggetto, preText, null,
"ERR");
mandato.setErroreEsitaVariazioneBilancio(true);
} catch (IntrospectionException e1) {
throw handleException(e1);
} catch (PersistencyException e1) {
throw handleException(e1);
}
}
return mandato;
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* alle Variazioni di Bilancio
*
* @return VarBilancioComponentSession l'istanza di
* VarBilancioComponentSession che serve per gestire
* una variazione
*/
private VarBilancioComponentSession createVariazioneBilancioComponentSession()
throws ComponentException {
try {
return (VarBilancioComponentSession) EJBCommonServices
.createEJB("CNRPREVENTVAR00_EJB_VarBilancioComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Crea la ComponentSession da usare per effettuare le operazioni relative
* alle Variazioni di Bilancio
*
* @return ProcedureComponentSession l'istanza di
* ProcedureComponentSession che serve per gestire una
* variazione con una nuova connessione DB
*/
private ProcedureComponentSession createProcedureComponentSession()
throws ComponentException {
try {
return (ProcedureComponentSession) EJBCommonServices
.createEJB("CNRUTIL00_EJB_ProcedureComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
private void generaEMAIL(UserContext userContext, MandatoIBulk mandato,
String soggetto, String preText, String postText, String tipo)
throws ComponentException, IntrospectionException,
PersistencyException {
String formDate = "dd/MM/yyyy";
SimpleDateFormat formatterDate = new SimpleDateFormat(formDate, Config
.getHandler().getLocale());
String text = "";
Utente_indirizzi_mailHome utente_indirizzi_mailHome = (Utente_indirizzi_mailHome) getHome(
userContext, Utente_indirizzi_mailBulk.class);
if (preText != null)
text += preText + "
";
text = text + "CdS proponente: " + mandato.getCds().getCd_ds_cds()
+ "
";
text = text + "Tipologia: Mandato di Regolarizzazione Contabile
";
text = text + "Data di approvazione: "
+ formatterDate.format(mandato.getDt_emissione()) + "
";
text = text + "
";
text = text + "CdR abilitati a concorrervi:
";
String addressTO = null;
if (tipo.equalsIgnoreCase("ERR")) {
for (java.util.Iterator i = utente_indirizzi_mailHome
.findUtenteMancataApprovazioneVariazioniBilancioEnteComp()
.iterator(); i.hasNext(); ) {
Utente_indirizzi_mailBulk utente_indirizzi = (Utente_indirizzi_mailBulk) i
.next();
if (addressTO == null)
addressTO = "";
else
addressTO = addressTO + ",";
addressTO = addressTO + utente_indirizzi.getIndirizzo_mail();
}
}
if (postText != null)
text += "
" + postText + "
";
if (addressTO != null) {
try {
SendMail.sendMail(soggetto, text, InternetAddress
.parse(addressTO));
} catch (AddressException e) {
}
}
}
/**
* creazione legame Riga Mandato/Codici SIOPE PreCondition: E' stata
* generata la richiesta di caricare in automatico i codici SIOPE alla riga
* del mandato per l'importo complessivo PostCondition: Se esiste un unico
* Codice SIOPE associabile alla riga del mandato viene creata una nuova
* istanza di Mandato_siopeBulk per l'importo complessivo della riga del
* mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga mandato da aggiornare
* @return riga Mandato_rigaBulk la riga mandato aggiornato
*/
private Mandato_rigaBulk aggiornaLegameSIOPE(UserContext userContext,
Mandato_rigaBulk riga) throws ComponentException {
try {
if (riga.getMandato().isRequiredSiope()) {
Mandato_rigaHome mandato_rigaHome = (Mandato_rigaHome) getHome(
userContext, Mandato_rigaBulk.class);
if (riga.isToBeCreated()
|| mandato_rigaHome.findCodiciCollegatiSIOPE(
userContext, riga).isEmpty()) {
BulkList list = new BulkList(mandato_rigaHome
.findCodiciCollegabiliSIOPE(userContext, riga));
if (list.size() == 1) {
Mandato_siopeBulk mandato_siope = null;
if (riga instanceof MandatoAccreditamento_rigaBulk)
mandato_siope = new MandatoAccreditamento_siopeBulk();
else
mandato_siope = new Mandato_siopeIBulk();
mandato_siope.setCodice_siope((Codici_siopeBulk) list
.get(0));
mandato_siope.setImporto(riga.getIm_mandato_riga());
mandato_siope.setToBeCreated();
riga.addToMandato_siopeColl(mandato_siope);
}
}
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* caricamento codici SIOPE collegabili alla riga del mandato PreCondition:
* E' stata generata la richiesta di caricare in automatico i codici SIOPE
* da proporre per l'associazione alla riga del mandato PostCondition:
* Vengono caricati i codici SIOPE disponibili per l'associazione della riga
* del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga mandato da aggiornare
* @return riga Mandato_rigaBulk la riga mandato aggiornato
*/
public Mandato_rigaBulk setCodiciSIOPECollegabili(UserContext userContext,
Mandato_rigaBulk riga) throws ComponentException {
try {
Mandato_rigaHome mandato_rigaHome = (Mandato_rigaHome) getHome(
userContext, Mandato_rigaBulk.class);
Collection codiciCollegatiSIOPE;
if (riga.getMandato_siopeColl().isEmpty() && !riga.isToBeCreated())
codiciCollegatiSIOPE = mandato_rigaHome
.findCodiciCollegatiSIOPE(userContext, riga);
else
codiciCollegatiSIOPE = riga.getMandato_siopeColl();
boolean trovato = false;
riga.setCodici_siopeColl(new BulkList());
for (java.util.Iterator collegabile = mandato_rigaHome
.findCodiciCollegabiliSIOPE(userContext, riga).iterator(); collegabile
.hasNext(); ) {
Codici_siopeBulk codiceCollegabile = (Codici_siopeBulk) collegabile
.next();
trovato = false;
for (java.util.Iterator collegati = codiciCollegatiSIOPE
.iterator(); collegati.hasNext(); ) {
Mandato_siopeBulk codiceCollegato = (Mandato_siopeBulk) collegati
.next();
if (codiceCollegato.getCodice_siope().equalsByPrimaryKey(
codiceCollegabile)) {
trovato = true;
break;
}
}
if (!trovato)
riga.addToCodici_siopeColl(codiceCollegabile);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Ritorna true se il totale SIOPE associato alla riga mandato non
* corrisponde con l'importo della riga stessa PreCondition: E' stata
* generata la richiesta di verificare che la riga del mandato sia associata
* completamente a codici SIOPE PostCondition: Ritorna TRUE se la riga del
* mandato è associata completamente a codici SIOPE
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Mandato_rigaBulk la riga mandato da controllare
* @return Boolean
*/
private java.lang.Boolean isCollegamentoSiopeCompleto(
UserContext userContext, Mandato_rigaBulk riga)
throws ComponentException {
try {
Mandato_rigaHome mandato_rigaHome = (Mandato_rigaHome) getHome(
userContext, riga);
BigDecimal totaleSiope = Utility.ZERO;
for (java.util.Iterator collegati = mandato_rigaHome
.findCodiciCollegatiSIOPE(userContext, riga).iterator(); collegati
.hasNext(); )
totaleSiope = totaleSiope.add(((Mandato_siopeBulk) collegati
.next()).getImporto());
return new Boolean(
totaleSiope.compareTo(riga.getIm_mandato_riga()) == 0);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Ritorna true se il totale SIOPE associato al mandato non corrisponde con
* l'importo del mandato stesso PreCondition: E' stata generata la richiesta
* di verificare che il mandato sia associato completamente a codici SIOPE
* PostCondition: Viene verificato che tutte le righe del mandato siano
* associate a codici SIOPE. Ritorna TRUE se tutte le righe del mandato sono
* associate completamente a codici SIOPE
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato da controllare
* @return Boolean
*/
public java.lang.Boolean isCollegamentoSiopeCompleto(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
MandatoHome mandatoHome = (MandatoHome) getHome(userContext,
mandato.getClass());
mandato = (MandatoBulk) mandatoHome.findByPrimaryKey(mandato);
if (mandato.isRequiredSiope()) {
for (Iterator i = mandatoHome.findMandato_riga(userContext,
mandato).iterator(); i.hasNext(); ) {
if (!this.isCollegamentoSiopeCompleto(userContext,
(Mandato_rigaBulk) i.next()))
return Boolean.FALSE;
}
}
return Boolean.TRUE;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* ricerca scadenze accertamento per regolarizzazione PreCondition: E' stata
* richiesta la creazione di un mandato di regolarizzazione CNR L'utente ha
* selezionato l'accertamento su cui creare in automatico la reversale di
* regolarizzazione PostCondition: Vengono ricercate tutte le scadenze
* dell'accertamento con importo disponibile positivo
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoIBulk il mandato
* @return mandato il Mandato dopo la ricerca delle scadenze
*/
public MandatoIBulk listaScadenzeAccertamentoPerRegolarizzazione(
UserContext userContext, MandatoIBulk mandato)
throws ComponentException {
try {
Collection result = ((MandatoIHome) getHome(userContext, mandato
.getClass())).findScadenzeAccertamentoPerRegolarizzazione(
(it.cnr.contab.utenze00.bp.CNRUserContext) userContext,
mandato);
mandato.setScadenzeAccertamentoPerRegolarizzazione(result);
return mandato;
} catch (Exception e) {
throw handleException(e);
}
}
public SQLBuilder selectCupByClause(UserContext userContext, MandatoCupIBulk mandato, CupBulk cup, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, CupBulk.class).createSQLBuilder();
sql.openParenthesis("AND");
sql.addClause("AND", "dt_canc", SQLBuilder.ISNULL, null);
sql.addClause("OR", "dt_canc", SQLBuilder.GREATER, it.cnr.jada.util.ejb.EJBCommonServices.getServerDate());
sql.closeParenthesis();
sql.addClause(clauses);
return sql;
}
public java.lang.Boolean isDipendenteDaConguaglio(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); ) {
Mandato_rigaBulk riga = (Mandato_rigaBulk) i.next();
if (riga.getCd_tipo_documento_amm().equals(Numerazione_doc_ammBulk.TIPO_COMPENSO)) {
CompensoBulk compenso = new CompensoBulk(
riga.getCd_cds_doc_amm(),
riga.getCd_uo_doc_amm(),
riga.getEsercizio_doc_amm(),
riga.getPg_doc_amm());
ConguaglioHome conguaglioHome = (ConguaglioHome) getHome(userContext, ConguaglioBulk.class);
if (conguaglioHome.findConguaglioAssociatoACompenso(compenso) != null)
return Boolean.TRUE;
}
return Boolean.FALSE;
}
return Boolean.FALSE;
} catch (Exception e) {
throw handleException(e);
}
}
public SQLBuilder selectCupByClause(UserContext userContext, MandatoSiopeCupIBulk bulk, CupBulk cup, CompoundFindClause clauses) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
SQLBuilder sql = getHome(userContext, CupBulk.class).createSQLBuilder();
sql.openParenthesis("AND");
sql.addClause("AND", "dt_canc", SQLBuilder.ISNULL, null);
sql.addClause("OR", "dt_canc", SQLBuilder.GREATER, it.cnr.jada.util.ejb.EJBCommonServices.getServerDate());
sql.closeParenthesis();
sql.addClause(clauses);
return sql;
}
private void verificaTracciabilitaPagamenti(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
if (mandato.getMandato_rigaColl().size() == 0)
return;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i
.hasNext(); ) {
Mandato_rigaBulk riga = (Mandato_rigaBulk) i.next();
if (riga.getCd_modalita_pag() == null || riga.getCd_tipo_documento_amm() == null)
throw new ApplicationException(
"Attenzione! esistono righe del mandato per cui non risulta valorizzata la modalità di pagamento oppure il tipo di documento amministrativo");
try {
LoggableStatement cs = new LoggableStatement(
getConnection(userContext), "{ call "
+ it.cnr.jada.util.ejb.EJBCommonServices
.getDefaultSchema()
+ "CNRCTB037.verificaTracciabilitaPag(?, ?, ?,?,?)}",
false, this.getClass());
try {
cs.setObject(1, mandato.getEsercizio());
cs.setObject(2, mandato.getDt_emissione());
cs.setString(3, riga.getCd_modalita_pag());
cs.setString(4, riga.getCd_tipo_documento_amm());
cs.setObject(5, mandato.getIm_netto());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
}
} catch (Exception e) {
throw handleException(e);
}
}
public List findModPagObbligatorieAssociateAlMandato(UserContext userContext, V_mandato_reversaleBulk mandato_reversaleBulk) throws ComponentException {
SQLBuilder sql = getHome(userContext, Rif_modalita_pagamentoBulk.class).createSQLBuilder();
sql.addClause(FindClause.AND, "fl_all_obbl_mandato", SQLBuilder.EQUALS, true);
sql.addTableToHeader("MANDATO_RIGA");
sql.addSQLJoin("MANDATO_RIGA.CD_MODALITA_PAG", "RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG");
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.CD_CDS", SQLBuilder.EQUALS, mandato_reversaleBulk.getCd_cds());
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.ESERCIZIO", SQLBuilder.EQUALS, mandato_reversaleBulk.getEsercizio());
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.PG_MANDATO", SQLBuilder.EQUALS, mandato_reversaleBulk.getPg_documento_cont());
try {
return getHome(userContext, Rif_modalita_pagamentoBulk.class).fetchAll(sql);
} catch (PersistencyException e) {
throw handleException(e);
}
}
public java.lang.String isAnnullabile(
UserContext userContext, MandatoBulk mandato)
throws ComponentException {
try {
Parametri_cnrBulk parametriCnr = (Parametri_cnrBulk) getHome(userContext, Parametri_cnrBulk.class).findByPrimaryKey(new Parametri_cnrBulk(mandato.getEsercizio()));
if (parametriCnr.getFl_tesoreria_unica()) {
UtenteBulk utente = (UtenteBulk) (getHome(userContext, UtenteBulk.class).findByPrimaryKey(new UtenteBulk(CNRUserContext.getUser(userContext))));
if (mandato.getStato_trasmissione().compareTo(MandatoBulk.STATO_TRASMISSIONE_NON_INSERITO) == 0)
return "S";
else if (mandato.getStato_trasmissione().compareTo(MandatoBulk.STATO_TRASMISSIONE_TRASMESSO) == 0 &&
utente.isSupervisore()) {
return "F";
} else
return "N";
}
return "S";
} catch (Exception e) {
throw handleException(e);
}
}
public Boolean isCollegamentoSospesoCompleto(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
MandatoHome mandatoHome = (MandatoHome) getHome(userContext, mandato.getClass());
mandato = (MandatoBulk) mandatoHome.findByPrimaryKey(mandato);
if (mandato.isRequiredSospeso()) {
mandato.setMandato_rigaColl(new BulkList(((MandatoHome) getHome(
userContext, mandato.getClass())).findMandato_riga(userContext, mandato)));
Sospeso_det_uscBulk sdu;
mandato.setSospeso_det_uscColl(new BulkList(
((MandatoHome) getHome(userContext, mandato.getClass()))
.findSospeso_det_usc(userContext, mandato)));
mandato = inizializzaFlagFaiReversale(userContext,
(MandatoIBulk) mandato);
for (Iterator i = mandato.getSospeso_det_uscColl().iterator(); i.hasNext(); ) {
sdu = (Sospeso_det_uscBulk) i.next();
sdu.setMandato(mandato);
if (sdu.getStato().equals(Sospeso_det_uscBulk.STATO_ANNULLATO))
i.remove();
}
return mandato.isSospesoTotalmenteAssociato();
}
return Boolean.TRUE;
} catch (Exception e) {
throw handleException(e);
}
}
public MandatoBulk annullaMandato(UserContext userContext,
MandatoBulk mandato,
boolean riemissione) throws ComponentException {
try {
return annullaMandato(userContext, mandato, null, true, riemissione);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
@Override
public MandatoBulk annullaMandato(UserContext userContext, MandatoBulk mandato,
CompensoOptionRequestParameter param, boolean annullaCollegati)
throws ComponentException {
try {
return annullaMandato(userContext, mandato, param, true, false);
} catch (Exception e) {
throw handleException(mandato, e);
}
}
public SQLBuilder selectV_man_revByClause(UserContext userContext, MandatoBulk 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();
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", sql.EQUALS, bulk.getCd_cds() );
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_unita_organizzativa());
sql.addClause("AND", "ti_documento_cont", SQLBuilder.NOT_EQUALS, MandatoBulk.TIPO_REGOLARIZZAZIONE);
sql.addClause("AND", "stato", SQLBuilder.EQUALS, MandatoBulk.STATO_MANDATO_EMESSO);
sql.addSQLClause("AND", "dt_trasmissione", SQLBuilder.ISNULL, null);
sql.addClause(clauses);
return sql;
}
public Boolean esisteAnnullodaRiemettereNonCollegato(UserContext userContext,
Integer esercizio, String cds) throws ComponentException {
try {
SQLBuilder sql = getHome(userContext, MandatoIBulk.class).createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, esercizio);
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, cds);
sql.addClause("AND", "stato", SQLBuilder.EQUALS, MandatoBulk.STATO_MANDATO_ANNULLATO);
sql.addSQLClause("AND", "pg_mandato_riemissione", SQLBuilder.ISNULL, null);
sql.addClause(FindClause.AND, "fl_riemissione", SQLBuilder.EQUALS, true);
if (sql.executeCountQuery(getConnection(userContext)) > 0)
return Boolean.TRUE;
else
return Boolean.FALSE;
} catch (Exception e) {
throw handleException(e);
}
}
public Boolean isMandatoCollegatoAnnullodaRiemettere(UserContext userContext,
MandatoBulk mandato) throws ComponentException {
try {
SQLBuilder sql = getHome(userContext, MandatoIBulk.class).createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, mandato.getEsercizio());
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, mandato.getCd_cds_origine());
sql.addClause("AND", "stato", SQLBuilder.EQUALS, MandatoBulk.STATO_MANDATO_ANNULLATO);
sql.addSQLClause("AND", "pg_mandato_riemissione", SQLBuilder.EQUALS, mandato.getPg_mandato());
sql.addClause(FindClause.AND, "fl_riemissione", SQLBuilder.EQUALS, true);
sql.addClause("AND", "stato_trasmissione_annullo", SQLBuilder.NOT_EQUALS, MandatoBulk.STATO_TRASMISSIONE_TRASMESSO);
if (sql.executeCountQuery(getConnection(userContext)) > 0)
return Boolean.TRUE;
else
return Boolean.FALSE;
} catch (Exception e) {
throw handleException(e);
}
}
public Boolean isVerificataModPagMandato(UserContext userContext,
V_mandato_reversaleBulk mandato_reversaleBulk) throws ComponentException {
try {
UtenteBulk utente = (UtenteBulk) (getHome(userContext, UtenteBulk.class).findByPrimaryKey(new UtenteBulk(CNRUserContext.getUser(userContext))));
SQLBuilder sql = getHome(userContext, Rif_modalita_pagamentoBulk.class).createSQLBuilder();
sql.addClause(FindClause.AND, "fl_conto_bi", SQLBuilder.EQUALS, true);
sql.addTableToHeader("MANDATO_RIGA");
sql.addSQLJoin("MANDATO_RIGA.CD_MODALITA_PAG", "RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG");
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.CD_CDS", SQLBuilder.EQUALS, mandato_reversaleBulk.getCd_cds());
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.ESERCIZIO", SQLBuilder.EQUALS, mandato_reversaleBulk.getEsercizio());
sql.addSQLClause(FindClause.AND, "MANDATO_RIGA.PG_MANDATO", SQLBuilder.EQUALS, mandato_reversaleBulk.getPg_documento_cont());
if (sql.executeCountQuery(getConnection(userContext)) > 0 && utente.isSupervisore())
return Boolean.TRUE;
else if (sql.executeCountQuery(getConnection(userContext)) == 0)
return Boolean.TRUE;
else
return Boolean.FALSE;
} catch (SQLException e) {
throw handleException(e);
} catch (PersistencyException e) {
throw handleException(e);
}
}
public IDocumentoAmministrativoSpesaBulk getDocumentoAmministrativoSpesaBulk(UserContext userContext, Mandato_rigaBulk mandatoRiga) throws ComponentException {
return Optional.ofNullable(getHome(userContext, mandatoRiga.getClass()))
.filter(Mandato_rigaHome.class::isInstance)
.map(Mandato_rigaHome.class::cast)
.map(mandatoRigaHome -> mandatoRigaHome.getDocumentoAmministrativoSpesaBulk(userContext, mandatoRiga))
.orElse(null);
}
}