it.cnr.contab.doccont00.comp.ReversaleComponent 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_pagamentoBulk;
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.Documento_genericoBulk;
import it.cnr.contab.docamm00.docs.bulk.Documento_generico_rigaBulk;
import it.cnr.contab.docamm00.docs.bulk.Numerazione_doc_ammBulk;
import it.cnr.contab.docamm00.docs.bulk.Tipo_documento_ammBulk;
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.AccertamentoComponentSession;
import it.cnr.contab.doccont00.ejb.AccertamentoPGiroComponentSession;
import it.cnr.contab.doccont00.ejb.MandatoComponentSession;
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.prevent00.bulk.Voce_f_saldi_cdr_lineaBulk;
import it.cnr.contab.reports.bulk.Print_spoolerBulk;
import it.cnr.contab.reports.bulk.Print_spooler_paramBulk;
import it.cnr.contab.reports.bulk.Report;
import it.cnr.contab.reports.service.PrintService;
import it.cnr.contab.service.SpringUtil;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.contab.util.Utility;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.BulkList;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.PrimaryKeyHashMap;
import it.cnr.jada.bulk.ValidationException;
import it.cnr.jada.comp.*;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.sql.*;
import it.cnr.jada.util.ejb.EJBCommonServices;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class ReversaleComponent extends it.cnr.jada.comp.CRUDComponent implements IReversaleMgr, ICRUDMgr, IPrintMgr, Cloneable, Serializable {
public final static String INSERIMENTO_REVERSALE_ACTION = "I";
public final static String ANNULLAMENTO_REVERSALE_ACTION = "A";
public final static String MODIFICA_REVERSALE_ACTION = "M";
private static final DateFormat PDF_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
//@@<< CONSTRUCTORCST
public ReversaleComponent() {
//>>
//<< CONSTRUCTORCSTL
/*Default constructor*/
//>>
//<< CONSTRUCTORCSTT
}
public static java.sql.Timestamp getLastDayOfYear(int year) {
java.util.Calendar calendar = java.util.GregorianCalendar.getInstance();
calendar.set(java.util.Calendar.DAY_OF_MONTH, 31);
calendar.set(java.util.Calendar.MONTH, 11);
calendar.set(java.util.Calendar.YEAR, year);
calendar.set(java.util.Calendar.HOUR, 0);
calendar.set(java.util.Calendar.MINUTE, 0);
calendar.set(java.util.Calendar.SECOND, 0);
calendar.set(java.util.Calendar.MILLISECOND, 0);
calendar.set(java.util.Calendar.AM_PM, java.util.Calendar.AM);
return new java.sql.Timestamp(calendar.getTime().getTime());
}
/**
* creazione riga
* PreCondition:
* E' stata creata una nuova riga di reversale
* PostCondition:
* Vengono recuperati dai dettagli della scadenza dell'accertamento, associata alla riga della reversale,
* 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
* (metodo aggiornaMandatiReversali)
* modifica riga - annullamento
* PreCondition:
* E' stata modificata una riga di reversale e lo stato della reversale e' annullato
* PostCondition:
* Vengono recuperati dai dettagli della scadenza dell'accertamento, associata alla riga della reversale,
* 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 (metodo aggiornaMandatiReversali)
* modifica riga - cancellazione
* PreCondition:
* E' stata cancellata una riga di reversale provvisoria
* PostCondition:
* Vengono recuperati dai dettagli della scadenza dell'accertamento, associata alla riga della reversale,
* 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 (metodo aggiornaMandatiReversali)
*
* @param aUC lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga della reversale da modificare
* @param session SaldoComponentSession
*/
/* status riga:
- TO_BE_CREATED alla creazione
- TO_BE_UPDATED quando la riga e' stata annullata oppure e' stato modificata la mod. pagamento
- TO_BE_DELETED alla cancellazione di una reversale provvisoria
Attenzione: l'importo della riga non viene mai modificato
*
*
* @param aUC lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga della reversale da modificare
* @param session SaldoComponentSession
*
*/
private void aggiornaCapitoloSaldoRiga(UserContext aUC, Reversale_rigaBulk riga, SaldoComponentSession session) throws ComponentException {
try {
Reversale_rigaBulk rigaDaDB = null;
Voce_fBulk voce;
boolean flConsumo;
java.math.BigDecimal importo;
if (!riga.isToBeCreated() && !riga.isToBeUpdated() && !riga.isToBeDeleted())
return;
/* ricerco l'accertamento */
AccertamentoBulk acr = new AccertamentoBulk(riga.getCd_cds(), riga.getEsercizio_accertamento(), riga.getEsercizio_ori_accertamento(), riga.getPg_accertamento());
acr = (AccertamentoBulk) getHome(aUC, AccertamentoBulk.class).findByPrimaryKey(acr);
/* ricerco lo sacdenzario */
Accertamento_scadenzarioBulk scadenzario = (Accertamento_scadenzarioBulk)
getHome(aUC, Accertamento_scadenzarioBulk.class).findByPrimaryKey(
new Accertamento_scadenzarioBulk(riga.getCd_cds(), riga.getEsercizio_accertamento(), riga.getEsercizio_ori_accertamento(), riga.getPg_accertamento(), riga.getPg_accertamento_scadenzario()));
/* verifico se sono a consumo o a copertura completa */
flConsumo = scadenzario.getIm_scadenza().compareTo(riga.getIm_reversale_riga()) != 0;
voce = new Voce_fBulk(acr.getCd_voce(), acr.getEsercizio(), acr.getTi_appartenenza(), acr.getTi_gestione());
/* ricerco le scad_voce */
Accertamento_scad_voceBulk asv = new Accertamento_scad_voceBulk();
asv.setEsercizio(riga.getEsercizio_accertamento());
asv.setCd_cds(riga.getCd_cds());
asv.setEsercizio_originale(riga.getEsercizio_ori_accertamento());
asv.setPg_accertamento(riga.getPg_accertamento());
asv.setPg_accertamento_scadenzario(riga.getPg_accertamento_scadenzario());
List result = getHome(aUC, Accertamento_scad_voceBulk.class).find(asv);
//per ogni scad_voce recupero il capitolo
for (Iterator i = result.iterator(); i.hasNext(); ) {
asv = (Accertamento_scad_voceBulk) i.next();
if (flConsumo)
importo = riga.getIm_reversale_riga();
else
importo = asv.getIm_voce();
/*
* Aggiorno i Saldi per CDR/Linea
*/
if (riga.isToBeCreated()) {
session.aggiornaMandatiReversali(aUC, asv.getCd_centro_responsabilita(), asv.getCd_linea_attivita(), voce, acr.getEsercizio_originale(), importo, acr.isAccertamentoResiduo() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO : Voce_f_saldi_cdr_lineaBulk.TIPO_COMPETENZA);
} else if (riga.isToBeUpdated() && riga.isFl_aggiorna_saldi_per_annullamento()) //e' sempre un annullamento
{
session.aggiornaMandatiReversali(aUC, asv.getCd_centro_responsabilita(), asv.getCd_linea_attivita(), voce, acr.getEsercizio_originale(), importo.negate(), acr.isAccertamentoResiduo() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO : Voce_f_saldi_cdr_lineaBulk.TIPO_COMPETENZA);
} else if (riga.isToBeDeleted()) { // cancellazione di una reversale provvisoria
session.aggiornaMandatiReversali(aUC, asv.getCd_centro_responsabilita(), asv.getCd_linea_attivita(), voce, acr.getEsercizio_originale(), importo.negate(), acr.isAccertamentoResiduo() ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO : Voce_f_saldi_cdr_lineaBulk.TIPO_COMPETENZA);
}
}
if (riga.isToBeCreated()) {
session.aggiornaMandatiReversali(aUC, voce, acr.getCd_cds(), riga.getIm_reversale_riga(), riga.getReversale().getTi_competenza_residuo());
} else if (riga.isToBeUpdated() && riga.isFl_aggiorna_saldi_per_annullamento()) //e' sempre un annullamento
{
session.aggiornaMandatiReversali(aUC, voce, acr.getCd_cds(), riga.getIm_reversale_riga().negate(), riga.getReversale().getTi_competenza_residuo());
riga.setFl_aggiorna_saldi_per_annullamento(false);
} else if (riga.isToBeDeleted()) { // cancellazione di una reversale provvisoria
session.aggiornaMandatiReversali(aUC, voce, acr.getCd_cds(), riga.getIm_reversale_riga().negate(), riga.getReversale().getTi_competenza_residuo());
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga
* PreCondition:
* E' stata creata una nuova riga di reversale
* PostCondition:
* Viene incrementato l'importo associato ai documenti contabili della scadenza di accertamento
* pagata con la riga della reversale dell'importo della riga della reversale
* (scadenza.im_associato_doc_contabile = scadenza.im_associato_doc_contabile + reversale_riga.im_reversale_riga)
* (metodo aggiornaImportoAccertamentoPerRiga)
* modifica riga - annullamento
* PreCondition:
* E' stata modificata una riga di reversale e lo stato della reversale e' annullato
* PostCondition:
* Viene decrementato l'importo associato ai documenti contabili della scadenza di accertamento
* pagata con la riga della reversale dell'importo della riga della reversale
* (scadenza.im_associato_doc_contabile = scadenza.im_associato_doc_contabile - reversale_riga.im_reversale_riga)
* (metodo aggiornaImportoAccertamentoPerRiga)
* modifica riga - modifica modalità pagamento
* PreCondition:
* E' stata modificata una riga di reversale, 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 reversale ReversaleBulk la reversale da modificare
*/
private void aggiornaImportoAccertamenti(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
PrimaryKeyHashMap accertamentiTable = new PrimaryKeyHashMap();
PrimaryKeyHashMap accertScadTable = new PrimaryKeyHashMap();
Reversale_rigaBulk riga;
Accertamento_scadenzarioBulk scadenza;
AccertamentoBulk accertamento;
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
if (!riga.isToBeCreated() && !riga.isToBeUpdated() && !riga.isToBeDeleted())
continue;
//scadenza
scadenza = new Accertamento_scadenzarioBulk(riga.getCd_cds(), riga.getEsercizio_accertamento(), riga.getEsercizio_ori_accertamento(), riga.getPg_accertamento(), riga.getPg_accertamento_scadenzario());
if (accertScadTable.get(scadenza) == null) {
//leggo la scadenza da db
scadenza = (Accertamento_scadenzarioBulk) getHome(userContext, Accertamento_scadenzarioBulk.class).findAndLock(scadenza);
accertScadTable.put(scadenza, scadenza);
} else
// scadenza già letto da db
scadenza = (Accertamento_scadenzarioBulk) accertScadTable.get(scadenza);
if (scadenza == null)
throw new ApplicationException("Non esiste la scadenza");
//accertamento
accertamento = scadenza.getAccertamento();
if (accertamentiTable.get(accertamento) == null) {
//leggo l'accertamento da db
accertamento = (AccertamentoBulk) getHome(userContext, AccertamentoBulk.class).findAndLock(accertamento);
accertamentiTable.put(accertamento, accertamento);
} else
// scadenza già letta da db
accertamento = (AccertamentoBulk) accertamentiTable.get(accertamento);
aggiornaImportoAccertamentoPerRiga(userContext, riga, scadenza);
}
for (Iterator i = accertamentiTable.values().iterator(); i.hasNext(); ) {
accertamento = (AccertamentoBulk) i.next();
//accertamento.setUser( userContext.getUser());
//updateBulk(( userContext, accertamento );
lockBulk(userContext, accertamento);
}
for (Iterator i = accertScadTable.values().iterator(); i.hasNext(); ) {
scadenza = (Accertamento_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 accertamento: " + scadenza.getEsercizio_originale() +
" Pg accertamento: " + scadenza.getPg_accertamento() +
" Pg scadenza: " + scadenza.getPg_accertamento_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 riga
* PreCondition:
* E' stata creata una nuova riga di reversale
* PostCondition:
* Viene incrementato l'importo associato ai documenti contabili della scadenza di accertamento
* pagata con la riga della reversale dell'importo della riga della reversale
* (scadenza.im_associato_doc_contabile = scadenza.im_associato_doc_contabile + reversale_riga.im_reversale_riga)
* modifica riga - annullamento
* PreCondition:
* E' stata modificata una riga di reversale e lo stato della reversale e' annullato
* PostCondition:
* Viene decrementato l'importo associato ai documenti contabili della scadenza di accertamento
* pagata con la riga della reversale dell'importo della riga della reversale
* (scadenza.im_associato_doc_contabile = scadenza.im_associato_doc_contabile - reversale_riga.im_reversale_riga)
* modifica riga - modifica modalità pagamento
* PreCondition:
* E' stata modificata una riga di reversale, 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 Reversale_rigaBulk la riga della reversale da modificare
* @param scadenza Accertamento_scadenzarioBulk la scadenza dell'accertamento associato alla reversale
* da modificare
*/
private void aggiornaImportoAccertamentoPerRiga(UserContext userContext, Reversale_rigaBulk riga, Accertamento_scadenzarioBulk scadenza) throws it.cnr.jada.persistency.PersistencyException, ComponentException {
if (riga.isToBeCreated())
scadenza.setIm_associato_doc_contabile(scadenza.getIm_associato_doc_contabile().add(riga.getIm_reversale_riga()));
else if (riga.isToBeDeleted()) {
Reversale_rigaBulk rigaDaDB = (Reversale_rigaBulk) getHome(userContext, riga.getClass()).findByPrimaryKey(riga);
scadenza.setIm_associato_doc_contabile(scadenza.getIm_associato_doc_contabile().subtract(rigaDaDB.getIm_reversale_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!
Reversale_rigaBulk rigaDaDB = (Reversale_rigaBulk) getTempHome(userContext, riga.getClass()).findByPrimaryKey(riga);
if (riga.getReversale().getStato().equals(ReversaleBulk.STATO_REVERSALE_ANNULLATO)) //caso 2 - annullamento
importo = rigaDaDB.getIm_reversale_riga().negate();
else if (riga.getIm_reversale_riga().compareTo(rigaDaDB.getIm_reversale_riga()) == 0) //caso 3 - no modifica importo
return;
/* else //caso 1 - modifica importo
importo = riga.getIm_reversale_riga().subtract(rigaDaDB.getIm_reversale_riga());
*/
scadenza.setIm_associato_doc_contabile(scadenza.getIm_associato_doc_contabile().add(importo));
}
}
/**
* creazione sospeso
* PreCondition:
* E' stata generata la richiesta di creazione di una nuova associazione Reversale-Sospeso (Sospeso_det_etrBulk) 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_etrBulk e viene incrementato l'importo associato del sospeso
* (sospeso.im_associato) con l'importo che e' stato associato alla reversale (Sospeso_det_etrBulk.im_associato)
* creazione sospeso - errore
* PreCondition:
* E' stata generata la richiesta di creazione di una nuova associazione Reversale-Sospeso (Sospeso_det_etrBulk) 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 Reversale-Sospeso
* modifica sospeso
* PreCondition:
* E' stata generata la richiesta di modifica dell'importo di una associazione Reversale-Sospeso (Sospeso_det_etrBulk) e
* la differenza fra l'importo specificato ora dall'utente per il Sospeso_det_etrBulk 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_etrBulk 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_etr.im_associato(ora) - sospeso_det_etr.im_associato(in precedenza)
* modifica sospeso - errore
* PreCondition:
* E' stata generata la richiesta di modifica dell'importo di una associazione Reversale-Sospeso (Sospeso_det_etrBulk) e
* la differenza fra l'importo specificato ora dall'utente per il Sospeso_det_etrBulk 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 Reversale-Sospeso
* cancellazione sospeso
* PreCondition:
* E' stata generata la richiesta di cancellazione di una associazione Reversale-Sospeso (Sospeso_det_etrBulk)
* PostCondition:
* L'istanza di Sospeso_det_etrBulk viene cancellata e viene decrementato l'importo associato del sospeso
* (sospeso.im_associato) con l'importo che era stato associato alla reversale (Sospeso_det_etrBulk.im_associato)
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da aggiornare
* @return reversale ReversaleBulk la Reversale aggiornata
*/
private ReversaleBulk aggiornaImportoSospesi(UserContext aUC, ReversaleBulk reversale) throws ComponentException {
try {
Sospeso_det_etrBulk sde, sdeFromDb;
SospesoBulk sospeso;
BigDecimal totSospesi = new BigDecimal(0);
for (Iterator i = reversale.getSospeso_det_etrColl().iterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
sospeso = sde.getSospeso();
lockBulk(aUC, sospeso);
totSospesi = totSospesi.add(sde.getIm_associato());
if (sde.isToBeCreated()) {
if (sde.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(sde.getIm_associato()));
} else if (sde.isToBeDeleted()) {
sdeFromDb = (Sospeso_det_etrBulk) getHome(aUC, Sospeso_det_etrBulk.class).findByPrimaryKey(sde);
sospeso.setIm_associato(sospeso.getIm_associato().subtract(sdeFromDb.getIm_associato()));
} else if (sde.isToBeUpdated()) {
sdeFromDb = (Sospeso_det_etrBulk) getHome(aUC, Sospeso_det_etrBulk.class).findByPrimaryKey(sde);
if (sde.getIm_associato().subtract(sdeFromDb.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(sde.getIm_associato().subtract(sdeFromDb.getIm_associato())));
} else
continue;
if (SospesoBulk.STATO_SOSP_IN_SOSPESO.equals(sospeso.getStato_sospeso()) && sospeso.getCd_cds_origine() == null)
sospeso.setCds_origine(new CdsBulk(reversale.getCd_cds_origine()));
sospeso.setToBeUpdated();
sospeso.setUser(aUC.getUser());
}
/* 24/09/2002
Commentata la chiamata al metodo per l'impostazione dell'importo incassato della
Reversale, in quanto adesso non si imposta più a INCASSATO lo stato di una Reversale,
quando viene associata ad un sospeso */
// reversale.setIm_incassato( totSospesi );
// reversale.setToBeUpdated();
//itero anche fra i sospesi che sono stati cancellati
for (Iterator i = reversale.getSospeso_det_etrColl().deleteIterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
sospeso = sde.getSospeso();
lockBulk(aUC, sospeso);
/*
if ( sde.isToBeCreated() )
{
if ( sde.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( sde.getIm_associato()));
}
else */
if (sde.isToBeDeleted()) {
sdeFromDb = (Sospeso_det_etrBulk) getHome(aUC, Sospeso_det_etrBulk.class).findByPrimaryKey(sde);
sospeso.setIm_associato(sospeso.getIm_associato().subtract(sdeFromDb.getIm_associato()));
} else if (sde.isToBeUpdated()) {
sdeFromDb = (Sospeso_det_etrBulk) getHome(aUC, Sospeso_det_etrBulk.class).findByPrimaryKey(sde);
// if ( sde.getIm_associato().subtract( sdeFromDb.getIm_associato()).compareTo( sospeso.getIm_disponibile() ) > 0 )
// throw new ApplicationException( "L'importo disponibile del sospeso e' stato esaurito");
sde.setIm_associato(sdeFromDb.getIm_associato());
sospeso.setIm_associato(sospeso.getIm_associato().subtract(sdeFromDb.getIm_associato()));
} else
continue;
if (SospesoBulk.STATO_SOSP_IN_SOSPESO.equals(sospeso.getStato_sospeso()) && sospeso.getCd_cds_origine() == null)
sospeso.setCd_cds_origine(reversale.getCd_cds_origine());
sospeso.setToBeUpdated();
sospeso.setUser(aUC.getUser());
}
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione reversale
* PreCondition:
* E' stata creata una reversale e sono stati associati dei sospesi per un importo pari all'importo della reversale
* PostCondition:
* Viene richiamata una stored procedure (aggDaSospesoRiscontro) che aggiorna lo stato della reversale a INCASSATO,
* la data di incasso alla data odierna e aggiorna i saldi relativi all'incassato delle voci del piano presenti nella
* reversale
* annullamento
* PreCondition:
* E' stata annullata una reversale con stato INCASSATO
* PostCondition:
* Viene richiamata una stored procedure (aggDaSospesoRiscontro) che aggiorna lo stato della reversale a EMESSO,
* la data di incasso viene resettata e vengono aggiornati i saldi relativi all'incassato delle voci del piano presenti
* nella reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk reversale per cui aggiornare lo stato e i saldi incassati
* @param action String azione effettuata sulla reversale. ( I - inserimento, M - modifica, A annullamento)
*/
private void aggiornaSaldoIncassato(UserContext userContext, ReversaleBulk reversale, String action) throws ComponentException {
try {
LoggableStatement cs = new LoggableStatement(getConnection(userContext),
"{ call " +
it.cnr.jada.util.ejb.EJBCommonServices.getDefaultSchema() +
"CNRCTB037.riscontroReversale(?, ?, ?, ?, ?)}", false, this.getClass());
try {
cs.setObject(1, reversale.getEsercizio());
cs.setString(2, reversale.getCd_cds());
cs.setObject(3, reversale.getPg_reversale());
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);
}
}
/**
* creazione reversale
* PreCondition:
* E' stata creata una nuova reversale
* PostCondition:
* Viene richiesta alla component che gestisce i documenti amministrativi l'aggiornamento dello stato COFI dei
* documenti pagati con la reversale
* annullamento reversale
* PreCondition:
* E' stata annullata una nuova reversale
* PostCondition:
* Viene richiesta alla component che gestisce i documenti amministrativi l'aggiornamento dello stato COFI dei
* documenti pagati con la reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param action String azione che può assumere valori inserimento/annullamento
*/
private void aggiornaStatoFattura(UserContext userContext, ReversaleBulk reversale, String action) throws ComponentException {
try {
createFatturaPassivaComponentSession().aggiornaStatoDocumentiAmministrativi(
userContext,
reversale.getCd_cds(),
reversale.getCd_unita_organizzativa(),
reversale.getCd_tipo_documento_cont(),
reversale.getEsercizio(),
reversale.getPg_reversale(),
action);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* aggiungiDocAttivi
* PreCondition:
* E' stata generata la richiesta di aggiungere ad una reversale nuovi documenti amministrativi attivi ( fatture
* attive o domenti generici attivi). Tali documenti hanno lo stesso terzo e la stessa classe di pagamento.
* PostCondition:
* Per ogni documento attivo viene creata una o piu' righe di reversale (metodo creaReversaleRiga)
* secondo la seguente regola:
* - per ogni documento generico viene creata una sola riga di reversale
* - per ogni fattura attiva viene creata una riga di reversale ed eventualmente righe aggiuntive se
* tale fattura e' associata a note di debito e/o note di credito
* Viene creata una istanza di ReversaleTerzoBulk (metodo creaReversaleTerzo) coi dati del terzo presente
* nei documenti amministrativi
* errore - debitori diversi
* PreCondition:
* Il codice terzo dei documenti amministrativi attivi da aggiungere alla reversale non e'
* lo stesso per tutti i documenti
* PostCondition:
* Un messaggio di errore segnala all'utente l'impossibilità di aggiungere i documenti alla reversale
* errore - classe di pagamento
* PreCondition:
* La classe di pagamento (Bancario,Postale,etc.) dei documenti amministrativi attivi da aggiungere alla reversale
* non e' lo stesso per tutti i documenti.
* PostCondition:
* Un messaggio di errore segnala all'utente l'impossibilità di aggiungere i documenti alla reversale
* errore - reversale di regolarizzazione
* PreCondition:
* I documenti amministrativi attivi selezionati per essere aggiunti ad una reversale di regolarizzazione sono stati
* contabilizzati in parte su accertamenti relativi a capitoli di bilancio e in parte su accertamenti
* relativi a partite di giro.
* PostCondition:
* Un messaggio di errore segnala all'utente l'impossibilità di aggiungere i documenti alla reversale
* errore - Tipo competenza/residuo
* PreCondition:
* Il tipo (Competenza,Residuo) dei documenti amministrativi attivi da aggiungere alla reversale
* non e' lo stesso per tutti i documenti.
* PostCondition:
* Un messaggio di errore segnala all'utente l'impossibilità di aggiungere i documenti alla reversale
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da aggiornare
* @param docAttivi List la lista dei documenti attivi
* @return reversale ReversaleBulk la Reversale aggiornata
*/
public ReversaleBulk aggiungiDocAttivi(UserContext aUC, ReversaleBulk reversale, List docAttivi) throws ComponentException {
Integer cd_terzo;
String ti_pagamento;
Boolean pGiro;
V_doc_attivo_accertamentoBulk docAttivo;
Reversale_rigaBulk riga;
Collection docAttiviCollegati;
String ti_competenza_residuo;
try {
if (reversale.getReversale_rigaColl().size() == 0)
reversale.setReversale_terzo(null);
if (reversale.getReversale_terzo() == null) {
cd_terzo = ((V_doc_attivo_accertamentoBulk) docAttivi.get(0)).getCd_terzo();
ti_pagamento = ((V_doc_attivo_accertamentoBulk) docAttivi.get(0)).getTi_pagamento();
pGiro = ((V_doc_attivo_accertamentoBulk) docAttivi.get(0)).getFl_pgiro();
ti_competenza_residuo = ((V_doc_attivo_accertamentoBulk) docAttivi.get(0)).getTi_competenza_residuo();
} else {
cd_terzo = reversale.getReversale_terzo().getCd_terzo();
ti_pagamento = ((Reversale_rigaIBulk) reversale.getReversale_rigaColl().get(0)).getBanca().getTi_pagamento();
pGiro = ((Reversale_rigaIBulk) reversale.getReversale_rigaColl().get(0)).getFl_pgiro();
ti_competenza_residuo = reversale.getTi_competenza_residuo();
}
for (Iterator i = docAttivi.iterator(); i.hasNext(); ) {
docAttivo = (V_doc_attivo_accertamentoBulk) i.next();
if (!cd_terzo.equals(docAttivo.getCd_terzo()))
throw new ApplicationException("E' possibile selezionare solo doc attivi relativi ad un unico beneficiario");
if (!ti_pagamento.equals(docAttivo.getTi_pagamento()))
throw new ApplicationException("E' possibile selezionare solo doc attivi relativi ad una stessa classe di pagamento");
if (reversale.getTi_reversale().equals(ReversaleBulk.TIPO_REGOLARIZZAZIONE) && !docAttivo.getFl_pgiro().equals(pGiro))
throw new ApplicationException("Per la reversale di regolarizzazione non e' possibile selezionare doc attivi su partite di giro e doc attivi su capitoli di bilancio");
if (!ti_competenza_residuo.equals(docAttivo.getTi_competenza_residuo()))
throw new ApplicationException("E' possibile selezionare solo doc attivi dello stesso tipo COMPETENZA/RESIDUO.");
//creo reversale_riga
riga = creaReversaleRigaConModalitaPag(aUC, reversale, docAttivo);
//estrae le eventuali note di credito/debito
docAttiviCollegati = ((ReversaleIHome) getHome(aUC, reversale.getClass())).findDocAttiviCollegati(docAttivo);
for (Iterator j = docAttiviCollegati.iterator(); j.hasNext(); )
riga = creaReversaleRigaConModalitaPag(aUC, reversale, (V_doc_attivo_accertamentoBulk) j.next());
}
//creo reversale terzo
if (reversale.getReversale_terzo() == null) {
Reversale_terzoBulk rTerzo = creaReversaleTerzo(aUC, reversale, cd_terzo);
reversale.setReversale_terzo(rTerzo);
}
reversale.setTi_competenza_residuo(ti_competenza_residuo);
reversale.refreshImporto();
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
public boolean isChiudibileReversaleProvvisoria(UserContext aUC, ReversaleBulk reversale) throws PersistencyException, IntrospectionException, ComponentException {
Collection reversaleRighe;
boolean pgiroLiqIvaCentroAperte = false;
reversaleRighe = ((ReversaleIHome) getHome(aUC, reversale.getClass())).findReversale_riga(aUC, reversale);
for (Iterator j = reversaleRighe.iterator(); j.hasNext(); ) {
try {
Reversale_rigaBulk reversaleRigaCorrente = (Reversale_rigaBulk) j.next();
pgiroLiqIvaCentroAperte = ((Ass_obb_acr_pgiroHome) getHome(aUC, Ass_obb_acr_pgiroBulk.class)).findPgiroLiqIvaCentroAperte(aUC, reversaleRigaCorrente);
} catch (SQLException e) {
throw new ComponentException(e);
}
if (pgiroLiqIvaCentroAperte) {
return false;
}
}
return true;
}
public boolean isRevProvvLiquidCoriCentroAperta(UserContext aUC, ReversaleBulk reversale) throws PersistencyException, IntrospectionException, ComponentException {
Collection reversaleRighe;
boolean pgiroLiqIvaCentroAperte = false;
reversaleRighe = ((ReversaleIHome) getHome(aUC, reversale.getClass())).findReversale_riga(aUC, reversale);
for (Iterator j = reversaleRighe.iterator(); j.hasNext(); ) {
try {
Reversale_rigaBulk reversaleRigaCorrente = (Reversale_rigaBulk) j.next();
pgiroLiqIvaCentroAperte = ((Ass_obb_acr_pgiroHome) getHome(aUC, Ass_obb_acr_pgiroBulk.class)).findPgiroLiqIvaCentroAperte(aUC, reversaleRigaCorrente);
} catch (SQLException e) {
throw new ComponentException(e);
}
if (pgiroLiqIvaCentroAperte) {
return true;
}
}
return false;
}
/**
* annullamento
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale
* La Reversale ha tipo diverso da regolarizzazione e accreditamento
* La reversale ha originato delle reversali o dei mandati
* PostCondition:
* Tutte le reversali originate dalla reversale da annnullare sono state annullate
* E' stata richiesta alla Component che gestisce il Mandato l'annullamento di tutti i mandati originati dalla reversale da annullare
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da annullare
*/
private void annullaDocContabiliCollegati(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
V_ass_doc_contabiliBulk ass;
MandatoComponentSession manSession = null;
MandatoBulk mandato;
ReversaleBulk revColl;
if (reversale.getDoc_contabili_collColl().size() > 0)
manSession = createMandatoComponentSession();
for (Iterator i = reversale.getDoc_contabili_collColl().iterator(); i.hasNext(); ) {
ass = (V_ass_doc_contabiliBulk) i.next();
if (ass.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV) &&
ass.getCd_cds().equals(reversale.getCd_cds()) &&
ass.getEsercizio().equals(reversale.getEsercizio()) &&
ass.getPg_documento_cont().equals(reversale.getPg_reversale()) &&
ass.getCd_tipo_documento_cont_coll().equals(Numerazione_doc_contBulk.TIPO_MAN)) { //la reversale ha un mandato associato
mandato = (MandatoBulk) manSession.inizializzaBulkPerModifica(userContext, new MandatoIBulk(ass.getCd_cds_coll(), ass.getEsercizio_coll(), ass.getPg_documento_cont_coll()));
manSession.annullaMandato(userContext, mandato, null, false);
} else if (ass.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV) &&
ass.getCd_cds().equals(reversale.getCd_cds()) &&
ass.getEsercizio().equals(reversale.getEsercizio()) &&
ass.getPg_documento_cont().equals(reversale.getPg_reversale()) &&
ass.getCd_tipo_documento_cont_coll().equals(Numerazione_doc_contBulk.TIPO_REV)) { //la reversale ha una reversale associata --- non si dovrebbe mai verificare
revColl = (ReversaleBulk) inizializzaBulkPerModifica(userContext, new ReversaleIBulk(ass.getCd_cds_coll(), ass.getEsercizio_coll(), ass.getPg_documento_cont_coll()));
annullaReversale(userContext, revColl, false);
}
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annulla importo sospesi
* PreCondition:
* E' stata generata la richiesta di annullare una reversale ed e' pertanto necessario aggiornare l'importo
* di tutti i sospesi che erano sono stati associati a questa reversale
* PostCondition:
* Per ogni istanza di Sospeso_det_etrBulk presente nel db, viene aggiornato l'importo del sospeso associato
* nel modo seguente:
* sospeso.im_associato = sospeso.im_associato - sospeso_det_etr.im_associato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da annullare
* @return reversale ReversaleBulk la Reversale da annullare
*/
private ReversaleBulk annullaImportoSospesi(UserContext aUC, ReversaleBulk reversale) throws ComponentException {
try {
Sospeso_det_etrBulk sde, sdeFromDb;
SospesoBulk sospeso;
for (Iterator i = reversale.getSospeso_det_etrColl().iterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
sospeso = sde.getSospeso();
lockBulk(aUC, sospeso);
sdeFromDb = (Sospeso_det_etrBulk) getHome(aUC, Sospeso_det_etrBulk.class).findByPrimaryKey(sde);
if (sdeFromDb != null) {
sospeso.setIm_associato(sospeso.getIm_associato().subtract(sdeFromDb.getIm_associato()));
sospeso.setToBeUpdated();
sospeso.setUser(aUC.getUser());
}
}
//itero anche fra i sospesi che sono stati cancellati
/*
for ( Iterator i = reversale.getSospeso_det_etrColl().deleteIterator(); i.hasNext(); )
{
sde = (Sospeso_det_etrBulk) i.next();
sospeso = sde.getSospeso();
lockBulk( aUC, sospeso );
sdeFromDb = (Sospeso_det_etrBulk) getHome( aUC, Sospeso_det_etrBulk.class ).findByPrimaryKey( sde );
if ( sdeFromDb != null )
{
sospeso.setIm_associato( sospeso.getIm_associato().subtract( sdeFromDb.getIm_associato()));
sospeso.setToBeUpdated();
sospeso.setUser( ((it.cnr.contab.utenze00.bp.CNRUserContext) aUC).getUser());
}
}
*/
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale
* PostCondition:
* Viene annullata la Reversale (metodo annullaReversale) specificando che e' necessario procedere
* anche all'annullamento dei mandati/reversali collegate
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da annullare
* @return reversale ReversaleBulk la Reversale annullata
*/
public ReversaleBulk annullaReversale(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
return annullaReversale(userContext, reversale, true);
} catch (Exception e) {
throw handleException(reversale, e);
}
}
/**
* annullamento reversale e doc. contabili collegati
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale
* La reversale non ha riscontri associati
* E' stato richiesta di annullare anche i doc. contabili collegati alla reversale
* PostCondition:
* Viene impostata la data di annullamento della reversale con la data odierna e lo stato della reversale
* diventa ANNULLATO. Viene impostato lo stato ANNULLATO su tutte le righe della reversale.
* Per ogni riga inoltre viene aggiornato l'importo associato a doc.contabili della scadenza di
* accertamento legata alla riga (metodo aggiornaImportoAccertamenti), viene aggiornato lo stato
* del documento amministrativo legato alla riga (metodo aggiornaStatoFattura). Vengono aggiornati i
* saldi dei capitoli (metodo aggiornaCapitoloSaldoRiga). Per ogni associazione sospeso-reversale, viene
* aggiornato l'importo associato del sospeso (metodo annullaImportoSospesi). Se la reversale ha associati mandati
* o altre reversali viene eseguito il loro annullamento (metodo 'annullaDocContabiliCollegati').
*
* annullamento reversale
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale
* La reversale non ha riscontri associati
* E' stato richiesta di non annullare anche i doc. contabili collegati alla reversale
* PostCondition:
* Viene impostata la data di annullamento della reversale con la data odierna e lo stato della reversale
* diventa ANNULLATO. Viene impostato lo stato ANNULLATO su tutte le righe della reversale.
* Per ogni riga inoltre viene aggiornato l'importo associato a doc.contabili della scadenza di
* accertamento legata alla riga (metodo aggiornaImportoAccertamenti), viene aggiornato lo stato
* del documento amministrativo legato alla riga (metodo aggiornaStatoFattura). Vengono aggiornati i
* saldi dei capitoli (metodo aggiornaCapitoloSaldoRiga). Per ogni associazione sospeso-reversale, viene
* aggiornato l'importo associato del sospeso (metodo annullaImportoSospesi). Se la reversale ha associati mandati
* o altre reversali NON viene eseguito il loro annullamento (metodo 'annullaDocContabiliCollegati').
*
* errore riscontri associati
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale che ha riscontri associati
* PostCondition:
* Una segnalazione di errore comunica all'utente l'impossibilità di eseguire l'annullamento
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da annullare
* @param annullaCollegati valore booleano che indica se procedere o meno all'annullamento dei doc. contabili associati alla reversale
* @return reversale ReversaleBulk la Reversale annullata
*/
public ReversaleBulk annullaReversale(UserContext userContext, ReversaleBulk reversale, boolean annullaCollegati, boolean riemissione) throws ComponentException {
try {
if (reversale.isAnnullato())
throw handleException(new ApplicationException("La reversale e' già stata annullata"));
verificaStatoEsercizio(userContext, reversale.getEsercizio(), reversale.getCd_cds());
BigDecimal totdettagli = ((Sospeso_det_etrHome) getHome(userContext, Sospeso_det_etrBulk.class)).calcolaTotDettagli(new V_mandato_reversaleBulk(reversale.getEsercizio(), reversale.getCd_tipo_documento_cont(), reversale.getCd_cds(), reversale.getPg_reversale()));
if (totdettagli.compareTo(new BigDecimal(0)) > 0)
throw new ApplicationException("Annullamento impossibile! La reversale e' già stata associata ad un riscontro");
// verificaReversale( userContext, reversale, true );
Sospeso_det_etrBulk sde;
for (Iterator i = reversale.getSospeso_det_etrColl().iterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
if (sde.isToBeCreated() || sde.isToBeUpdated() || sde.isToBeDeleted())
throw new ApplicationException("Annullamento impossibile! Sono state fatte delle modifiche ai sospesi che devono essere ancora salvate");
}
checkAnnullabilita(userContext, reversale);
if (isReversaleCollegataAnnullodaRiemettere(userContext, reversale).booleanValue())
throw new ApplicationException(
"Annullamento impossibile! Esiste una reversale annullata associata alla reversale.");
if (isAnnullabile(userContext, reversale).compareTo("N") == 0)
throw new ApplicationException(
"Verificare lo stato di trasmissione della reversale. Annullamento impossibile!");
lockBulk(userContext, reversale);
// if(DateServices.isAnnoMaggEsScriv(userContext)) {
// // Se la data di annullamento NON E' NULLA, e siamo in esercizio successivo, metto
// // la data di trasmissione = ad istante successivo a quella di annullamento
// if(reversale.getDt_trasmissione() != null) {
// reversale.setDt_annullamento( DateServices.getNextMinTs( userContext,reversale.getDt_trasmissione()));
// } else {
// reversale.setDt_annullamento( DateServices.getMidDayTs( DateServices.getTs_valido( userContext)));
// }
// } else {
// reversale.setDt_annullamento( DateServices.getTs_valido( userContext));
// }
reversale.setDt_annullamento(DateServices.getTs_valido(userContext));
if (reversale.getStato_coge().equals(MandatoBulk.STATO_COGE_C))
reversale.setStato_coge(MandatoBulk.STATO_COGE_R);
if (!ReversaleBulk.TIPO_REGOLARIZZAZIONE.equals(reversale.getTi_reversale())) {
reversale.setFl_riemissione(riemissione);
reversale.setStato_trasmissione_annullo(MandatoIBulk.STATO_TRASMISSIONE_NON_INSERITO);
}
reversale.annulla();
annullaImportoSospesi(userContext, reversale);
Reversale_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
riga.annulla();
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
aggiornaImportoAccertamenti(userContext, reversale);
makeBulkPersistent(userContext, reversale);
aggiornaStatoFattura(userContext, reversale, ANNULLAMENTO_REVERSALE_ACTION);
if (annullaCollegati)
annullaDocContabiliCollegati(userContext, reversale);
/* 24/09/2002
Commentata la chiamata alla stored procedure per l'aggiornamento dei saldi,
in quanto adesso non si imposta più a INCASSATO lo stato di una Reversale,
quando viene associata ad un sospeso */
// if ( reversale.getIm_reversale().compareTo( reversale.getIm_incassato()) == 0 )
// aggiornaSaldoPagato( userContext, reversale, ANNULLAMENTO_REVERSALE_ACTION );
return reversale;
} catch (Exception e) {
throw handleException(reversale, e);
}
}
public void annullaReversaleDiIncassoIVA(it.cnr.jada.UserContext userContext, it.cnr.contab.doccont00.core.bulk.ReversaleBulk reversale) throws it.cnr.jada.comp.ComponentException {
try {
/* REVERSALE */
annullaReversale(userContext, reversale, false);
/* DOC GENERICO */
Reversale_rigaBulk rRiga = (Reversale_rigaBulk) reversale.getReversale_rigaColl().get(0);
Documento_genericoBulk docGenerico = new Documento_genericoBulk(rRiga.getCd_cds(), rRiga.getCd_tipo_documento_amm(), rRiga.getCd_uo_doc_amm(), rRiga.getEsercizio_doc_amm(), rRiga.getPg_doc_amm());
DocumentoGenericoComponentSession docSession = createDocumentoGenericoComponentSession();
docGenerico = (Documento_genericoBulk) docSession.inizializzaBulkPerModifica(userContext, docGenerico);
/*????? annulla documento contabile */
// docSession.eliminaConBulk( userContext, docGenerico );
docGenerico_annullaDocumentoGenerico(userContext, docGenerico);
/* ACR_PGIRO */
Documento_generico_rigaBulk dRiga;
AccertamentoPGiroBulk accertamento;
AccertamentoPGiroComponentSession acrSession = createAccertamentoPGiroComponentSession();
for (Iterator i = docGenerico.getDocumento_generico_dettColl().iterator(); i.hasNext(); ) {
dRiga = (Documento_generico_rigaBulk) i.next();
accertamento = new AccertamentoPGiroBulk(dRiga.getAccertamento_scadenziario().getCd_cds(), dRiga.getAccertamento_scadenziario().getEsercizio(), dRiga.getAccertamento_scadenziario().getEsercizio_originale(), dRiga.getAccertamento_scadenziario().getPg_accertamento());
accertamento = (AccertamentoPGiroBulk) acrSession.inizializzaBulkPerModifica(userContext, accertamento);
acrSession.eliminaConBulk(userContext, accertamento);
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale di Regolarizzazione
* PostCondition:
* Viene richiesta alla Component che gestisce il Documento Generico l'annullamento della
* reversale di regolarizzazione (metodo annullaReversale) e di eventuali documenti
* generici associati alla reversale (metodo docGenerico_annullaDocumentoGenerico).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale di regolarizzazione da annullare
*/
public void annullaReversaleDiRegolarizzazione(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
/* REVERSALE */
annullaReversale(userContext, reversale);
/* DOC GENERICO */
/*
Reversale_rigaBulk rRiga = (Reversale_rigaBulk) reversale.getReversale_rigaColl().get(0);
Documento_genericoBulk docGenerico = new Documento_genericoBulk( rRiga.getCd_cds(), rRiga.getCd_tipo_documento_amm(), rRiga.getCd_uo_doc_amm(), rRiga.getEsercizio_doc_amm(), rRiga.getPg_doc_amm());
DocumentoGenericoComponentSession docSession = createDocumentoGenericoComponentSession();
docGenerico = (Documento_genericoBulk) docSession.inizializzaBulkPerModifica( userContext, docGenerico );
//????? annulla documento contabile
// docSession.eliminaConBulk( userContext, docGenerico );
docGenerico_annullaDocumentoGenerico( userContext, docGenerico );
*/
aggiornaSaldoIncassato(userContext, reversale, ANNULLAMENTO_REVERSALE_ACTION);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* annullamento
* PreCondition:
* E' stata generata la richiesta di annullare una Reversale di Trasferimento
* PostCondition:
* Viene richiesta alla Component che gestisce il Documento Generico l'annullamento della
* reversale di Trasferimento (metodo annullaReversale) e di eventuali documenti
* generici associati alla reversale (metodo docGenerico_annullaDocumentoGenerico).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale di trasferimento da annullare
*/
public void annullaReversaleDiTrasferimento(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
/* REVERSALE */
annullaReversale(userContext, reversale);
/* DOC GENERICO */
Reversale_rigaBulk rRiga = (Reversale_rigaBulk) reversale.getReversale_rigaColl().get(0);
Documento_genericoBulk docGenerico = new Documento_genericoBulk(rRiga.getCd_cds(), rRiga.getCd_tipo_documento_amm(), rRiga.getCd_uo_doc_amm(), rRiga.getEsercizio_doc_amm(), rRiga.getPg_doc_amm());
DocumentoGenericoComponentSession docSession = createDocumentoGenericoComponentSession();
docGenerico = (Documento_genericoBulk) docSession.inizializzaBulkPerModifica(userContext, docGenerico);
/*????? annulla documento contabile */
// docSession.eliminaConBulk( userContext, docGenerico );
docGenerico_annullaDocumentoGenerico(userContext, docGenerico);
/* ACR_SISTEMA */
Documento_generico_rigaBulk dRiga;
AccertamentoCdsBulk accertamento;
AccertamentoComponentSession acrSession = createAccertamentoComponentSession();
for (Iterator i = docGenerico.getDocumento_generico_dettColl().iterator(); i.hasNext(); ) {
dRiga = (Documento_generico_rigaBulk) i.next();
accertamento = new AccertamentoCdsBulk(dRiga.getAccertamento_scadenziario().getCd_cds(), dRiga.getAccertamento_scadenziario().getEsercizio(), dRiga.getAccertamento_scadenziario().getEsercizio_originale(), dRiga.getAccertamento_scadenziario().getPg_accertamento());
accertamento = (AccertamentoCdsBulk) acrSession.inizializzaBulkPerModifica(userContext, accertamento);
acrSession.annullaAccertamento(userContext, accertamento);
//acrSession.eliminaConBulk( userContext, accertamento );
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* ricerca sospesi
* PreCondition:
* E' stata richiesta la ricerca dei sospesi di entrata da associare ad una reversale
* PostCondition:
* Vengono ricercati tutti i sospesi di entrata che non sono ancora stati associati alla reversale
* con cds appartenza uguale al cds appartenenza della reversale,
* uo origine uguale all'uo di scrivania, importo disponibile (importo disponibile = importo iniziale del sospeso -
* importo già associato a reversali) maggiore di zero (metodo findSospesiDiEntrata)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param clausole le clausole specificate dall'utente
* @param reversale ReversaleBulk la reversale
* @return il RemoteIterator della lista dei sospesi
*/
public it.cnr.jada.util.RemoteIterator cercaSospesi(UserContext userContext, it.cnr.jada.persistency.sql.CompoundFindClause clausole, ReversaleBulk reversale) throws it.cnr.jada.comp.ComponentException {
try {
return iterator(
userContext,
((SospesoHome) getHome(userContext, SospesoBulk.class)).selectSospesiDiEntrata(reversale, clausole, Utility.createParametriCnrComponentSession().getParametriCnr(userContext, reversale.getEsercizio()).getFl_tesoreria_unica().booleanValue()),
SospesoBulk.class,
getFetchPolicyName("find"));
} catch (Throwable e) {
throw handleException(e);
}
}
private void checkAnnullabilita(UserContext userContext, ReversaleBulk reversale) 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, "R"); //reversale
cs.setObject(2, reversale.getEsercizio());
cs.setString(3, reversale.getCd_cds());
cs.setObject(4, reversale.getPg_reversale());
cs.executeQuery();
} catch (SQLException e) {
throw handleException(e);
} finally {
cs.close();
}
} catch (SQLException e) {
throw handleException(e);
}
}
private void checkDocAmmCambiato(UserContext userContext, Reversale_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);
}
}
/**
* creazione
* PreCondition:
* E' stata generata la richiesta di creazione una Reversale Definitiva di Trasferimento
* a partire da una reversale provvisoria di trasferimento
* PostCondition:
* Viene creata una istanza di Ass_mandato_reversaleBulk con il progressivo della reversale definitiva
* e del mandato di trasferimento associato
*
* @param uc lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale definitiva
* @param cd_cds_man Il centro di spesa del mandato
* @param esercizio_man L'esercizio del mandato
* @param pg_man Il numero del mandato
* @return ass_man_rev Ass_mandato_reversaleBulk L'associazione mandato-reversale da creare
*/
public Ass_mandato_reversaleBulk creaAss_mandato_reversale(UserContext uc, ReversaleBulk reversale, String cd_cds_man, Integer esercizio_man, Long pg_man) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
Ass_mandato_reversaleBulk ass_man_rev = new Ass_mandato_reversaleBulk();
ass_man_rev.setUser(uc.getUser());
ass_man_rev.setToBeCreated();
// campi chiave dell'Associazione mandato_reversale
ass_man_rev.setReversale(reversale);
ass_man_rev.setCd_cds_mandato(cd_cds_man);
ass_man_rev.setEsercizio_mandato(esercizio_man);
ass_man_rev.setPg_mandato(pg_man);
// altri campi
ass_man_rev.setTi_origine(Tipo_bolloBulk.TIPO_SPESA);
makeBulkPersistent(uc, ass_man_rev);
return ass_man_rev;
}
/**
* creazione reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale e deve essere verificata la sua
* data di emissione
* PostCondition:
* Viene richiamato il metodo creaConBulk specificando di verificare la data di emissione della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da creare
* @return OggettoBulk la Reversale creata
*/
/*
REVERSALE
1 - verifica reversale
2 - inserisce record reversale, terzo, riga
3 - aggiorna accertamento_scadenzario per im_associato_doc_contabili
4 - aggiorna stato cofi della fattura
5 - aggiorna saldi per im_incassato
*/
public OggettoBulk creaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
return creaConBulk(userContext, bulk, true);
}
/**
* creazione reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale e la reversale supera la validazione
* (metodo verificaReversale)
* PostCondition:
* Vengono aggiornati gli importi dei sospesi eventualmente associati alla reversale (metodo aggiornaImportoSospesi),
* vengono aggiornati gli importi associati a documenti contabili di tutte le scadenze di accertamenti specificate
* nelle righe della reversale (metodo aggiornaImportoAccertamenti), vengono aggiornati i saldi relativi ai capitoli di entrata
* (metodo aggiornaCapitoloSaldoRiga), vengono aggiornati gli stati delle fatture specificate nelle righe delle reversali
* (metodo aggiornaStatoFattura).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da creare
* @param verificaDt_emissione booleano che indica se è necessario o meno verificare la dt_emissione della reversale
* @return OggettoBulk la Reversale creata
*/
/*
REVERSALE
1 - verifica reversale
2 - inserisce record reversale, terzo, riga
3 - aggiorna accertamento_scadenzario per im_associato_doc_contabili
4 - aggiorna stato cofi della fattura
5 - aggiorna saldi per im_incassato
*/
public OggettoBulk creaConBulk(UserContext userContext, OggettoBulk bulk, boolean verificaDt_emissione) throws ComponentException {
ReversaleBulk reversale = (ReversaleBulk) bulk;
//check and lock i doc.amm.
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); )
checkDocAmmCambiato(userContext, (Reversale_rigaBulk) i.next());
verificaReversale(userContext, reversale, verificaDt_emissione);
aggiornaImportoSospesi(userContext, reversale);
Reversale_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
aggiornaImportoAccertamenti(userContext, reversale);
reversale = (ReversaleBulk) super.creaConBulk(userContext, bulk);
aggiornaStatoFattura(userContext, reversale, INSERIMENTO_REVERSALE_ACTION);
/* 24/09/2002
Commentata la chiamata alla stored procedure per l'aggiornamento dei saldi,
in quanto adesso non si imposta più a INCASSATO lo stato di una Reversale,
quando viene associata ad un sospeso */
// if ( reversale.getIm_incassato().compareTo( reversale.getIm_reversale()) == 0 )
// aggiornaSaldoPagato( userContext, reversale, INSERIMENTO_REVERSALE_ACTION );
return reversale;
}
/*
* creazione reversale definitiva
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale definitiva
* PostCondition:
* Viene creata una reversale definitiva nel momento in cui le vengono associati
* dei sospesi.
* Vengono create tante righe di reversale quante sono quelle della reversale
* provvisoria di partenza.
* Viene creata una reversaleTerzo con i dati relativi alla reversaleTerzo di
* partenza.
* Vengono create tante righe di sospesi quanti sono i sospesi selezionati dall'utente.
*
* @param uc lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale provvisoria
*
* @return reversaleDef ReversaleBulk la reversale definitiva creata
*/
public ReversaleBulk creaReversaleDefinitiva(UserContext uc, ReversaleBulk reversale) throws ComponentException {
try {
ReversaleIBulk reversaleDef = new ReversaleIBulk();
reversaleDef.setUser(reversale.getUser());
reversaleDef.setToBeCreated();
// campi chiave
reversaleDef.setEsercizio(reversale.getEsercizio());
reversaleDef.setCds(reversale.getCds());
// altri campi...
reversaleDef.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_REV);
reversaleDef.setUnita_organizzativa(reversale.getUnita_organizzativa());
reversaleDef.setCd_cds_origine(reversale.getCd_cds_origine());
reversaleDef.setCd_uo_origine(reversale.getCd_uo_origine());
reversaleDef.setTi_reversale(reversale.getTi_reversale());
reversaleDef.setTi_competenza_residuo(reversale.getTi_competenza_residuo());
reversaleDef.setDs_reversale(reversale.getDs_reversale());
reversaleDef.setStato(reversale.getStato());
reversaleDef.setIm_reversale(reversale.getIm_reversale());
reversaleDef.setIm_incassato(reversale.getIm_incassato());
/* segnalazione 539 */
// reversaleDef.setDt_emissione( reversale.getDt_emissione() );
reversaleDef.setDt_emissione(DateServices.getDt_valida(uc));
reversaleDef.setStato_trasmissione(ReversaleBulk.STATO_TRASMISSIONE_NON_INSERITO);
reversaleDef.setStato_coge(reversale.getStato_coge());
Reversale_rigaBulk riga;
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
riga = creaReversaleRiga(uc, reversaleDef, riga);
reversaleDef.addToReversale_rigaColl(riga);
}
Reversale_terzoBulk rTerzo = creaReversaleTerzo(uc, reversaleDef, reversale.getReversale_terzo().getCd_terzo());
reversaleDef.setReversale_terzo(rTerzo);
Sospeso_det_etrBulk sde;
for (Iterator i = reversale.getSospeso_det_etrColl().iterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
sde.setReversale(reversaleDef);
sde.setToBeCreated();
reversaleDef.getSospeso_det_etrColl().add(sde);
}
reversaleDef = (ReversaleIBulk) creaConBulk(uc, reversaleDef, false);
return reversaleDef;
} catch (Exception e) {
throw handleException(e);
}
}
public ReversaleBulk creaReversaleDiIncassoIVA(UserContext userContext, MandatoBulk mandato) throws ComponentException {
try {
AccertamentoPGiroBulk accertamento;
Documento_generico_rigaBulk dRiga;
BigDecimal importo = ((MandatoIBulk) mandato).getImReversaleDiIncassoIVA();
BigDecimal importoSplit = new java.math.BigDecimal(0);
Mandato_rigaIBulk riga;
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); ) {
riga = (Mandato_rigaIBulk) i.next();
if (it.cnr.contab.docamm00.docs.bulk.Numerazione_doc_ammBulk.TIPO_FATTURA_PASSIVA.equals(riga.getCd_tipo_documento_amm())
&& riga.getIm_ritenute_riga().compareTo(new BigDecimal(0)) > 0)
if (mandato.getMandato_terzo().getTerzo().getAnagrafico() != null)
mandato.getMandato_terzo().getTerzo().setAnagrafico((AnagraficoBulk) getHome(userContext, AnagraficoBulk.class).findByPrimaryKey(new AnagraficoBulk(mandato.getMandato_terzo().getTerzo().getAnagrafico().getCd_anag())));
if (mandato.getMandato_terzo().getTerzo().getAnagrafico().isItaliano())
importoSplit = importoSplit.add(riga.getIm_ritenute_riga());
}
//REVERSALE
ReversaleIBulk reversale = new ReversaleIBulk();
reversale.setToBeCreated();
reversale.setUser(mandato.getUser());
reversale.setEsercizio(mandato.getEsercizio());
reversale.setCds(mandato.getCds());
reversale.setUnita_organizzativa(mandato.getUnita_organizzativa());
reversale.setCd_cds_origine(mandato.getCd_cds());
reversale.setCd_uo_origine(mandato.getCd_unita_organizzativa());
reversale.setTi_reversale(ReversaleBulk.TIPO_INCASSO);
reversale.setTi_competenza_residuo(mandato.getTi_competenza_residuo());
reversale.setDs_reversale("REVERSALE IVA");
reversale.setStato(ReversaleBulk.STATO_REVERSALE_EMESSO);
reversale.setIm_reversale(importo);
reversale.setIm_incassato(new BigDecimal(0));
reversale.setDt_emissione(mandato.getDt_emissione());
reversale.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_REV);
reversale.setStato_trasmissione(ReversaleBulk.STATO_TRASMISSIONE_NON_INSERITO);
reversale.setStato_coge(MandatoBulk.STATO_COGE_N);
//REVERSALE_TERZO
Reversale_terzoBulk rTerzo = creaReversaleTerzo(userContext, reversale, mandato.getMandato_terzo());
//DOCUMENTO_GENERICO
Documento_genericoBulk documento = docGenerico_creaDocumentoGenerico(userContext, reversale, Numerazione_doc_ammBulk.TIPO_GEN_IVA_E);
//CREA UN ACCERTAMENTO con una scadenza
accertamento = createAccertamentoPGiroComponentSession().creaAccertamentoDiIncassoIVA(userContext, reversale, importoSplit.compareTo(new java.math.BigDecimal(0)) != 0);
//CREA UNA RIGA DEL DOCUMENTO CONTABILIZZATA SULLA SCADENZA DELL'ACCERTAMENTO
docGenerico_creaDocumentoGenericoRiga(userContext, documento, accertamento.getAccertamento_scadenzarioColl().get(0), ((MandatoIBulk) mandato).getImReversaleDiIncassoIVA(), (Mandato_rigaBulk) mandato.getMandato_rigaColl().get(0));
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession().creaConBulk(userContext, documento);
for (Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext(); )
creaReversaleRiga(userContext, reversale, (Documento_generico_rigaBulk) i.next());
reversale = (ReversaleIBulk) creaConBulk(userContext, 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 creata una reversale di regolarizzazione a partire dal mandato di
* regolarizzazione associato.
* Viene creata una reversaleTerzo (metodo creaReversaleTerzo).
* Viene creato un documento generico attivo (metodo docGenerico_creaDocumentoGenerico). Viene creata una
* riga di documento generico (metodo docGenerico_creaDocumentoGenericoRiga) per ogni scadenza dell'accertamento
* (specificato dall'utente) non ancora associata a documenti amministrativi.
* Vengono create tante righe di reversale quante sono quelle del documento generico (metodo creaReversaleRiga).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato
*
* @return reversale ReversaleBulk la reversale di regolarizzazione creata
*/
public ReversaleBulk creaReversaleDiRegolarizzazione(UserContext userContext, MandatoBulk mandato) throws ComponentException {
try {
AccertamentoBulk accertamento = null;
Accertamento_scadenzarioBulk scadenza;
Mandato_rigaBulk mRiga;
Documento_generico_rigaBulk dRiga;
Boolean fl_pgiro;
//REVERSALE
ReversaleIBulk reversale = new ReversaleIBulk();
reversale.setToBeCreated();
reversale.setUser(mandato.getUser());
reversale.setEsercizio(mandato.getEsercizio());
//La reversale viene creata sulla Uo e Cds di appartenenza dell'accertamento
//usato per la regolarizzazione
reversale.setCds(((MandatoIBulk) mandato).getAccertamentoPerRegolarizzazione().getCds());
reversale.setUnita_organizzativa(((MandatoIBulk) mandato).getAccertamentoPerRegolarizzazione().getUnita_organizzativa());
reversale.setCd_cds_origine(mandato.getCd_cds_origine());
reversale.setCd_uo_origine(mandato.getCd_uo_origine());
reversale.setTi_reversale(ReversaleBulk.TIPO_REGOLARIZZAZIONE);
reversale.setTi_competenza_residuo(((MandatoIBulk) mandato).getAccertamentoPerRegolarizzazione().getTi_competenza_residuo());
reversale.setDs_reversale("REVERSALE DI REGOLARIZZAZIONE");
reversale.setStato(ReversaleBulk.STATO_REVERSALE_EMESSO);
reversale.setIm_reversale(mandato.getIm_mandato());
reversale.setIm_incassato(mandato.getIm_mandato());
reversale.setDt_emissione(mandato.getDt_emissione());
reversale.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_REV);
reversale.setStato_trasmissione(ReversaleBulk.STATO_TRASMISSIONE_NON_INSERITO);
List result = getHome(userContext, Unita_organizzativa_enteBulk.class).findAll();
reversale.setCd_uo_ente(((Unita_organizzativaBulk) result.get(0)).getCd_unita_organizzativa());
reversale.setStato_coge(MandatoBulk.STATO_COGE_N);
//REVERSALE_TERZO
Reversale_terzoBulk rTerzo = creaReversaleTerzo(userContext, reversale, mandato.getMandato_terzo());
if (!((MandatoIBulk) mandato).isGeneraReversaleDaDocAmm()) {
Documento_genericoBulk documento = null;
for (Iterator i = ((MandatoIBulk) mandato).getScadenzeAccertamentoSelezionatePerRegolarizzazione().iterator(); i.hasNext(); ) {
scadenza = (Accertamento_scadenzarioBulk) i.next();
//sui dettagli senza documento creo la riga di documento e successivamente la riga di reversale
if (scadenza.getIm_scadenza().subtract(scadenza.getIm_associato_doc_amm()).compareTo(new java.math.BigDecimal(0)) > 0) {
if (documento == null)
documento = docGenerico_creaDocumentoGenerico(userContext, reversale, Numerazione_doc_ammBulk.TIPO_REGOLA_E);
dRiga = docGenerico_creaDocumentoGenericoRiga(userContext, documento, scadenza, scadenza.getIm_scadenza().subtract(scadenza.getIm_associato_doc_amm()));
} else if (scadenza.getIm_scadenza().subtract(scadenza.getIm_associato_doc_contabile()).compareTo(new java.math.BigDecimal(0)) > 0) {
//sui dettagli con documento generico creo direttamente la riga di reversale
V_doc_attivo_accertamentoBulk dr = new V_doc_attivo_accertamentoBulk();
dr.setCd_cds_accertamento(scadenza.getCd_cds());
dr.setEsercizio_accertamento(scadenza.getEsercizio());
dr.setEsercizio_ori_accertamento(scadenza.getEsercizio_originale());
dr.setPg_accertamento(scadenza.getPg_accertamento());
dr.setPg_accertamento_scadenzario(scadenza.getPg_accertamento_scadenzario());
for (Iterator y = getHome(userContext, V_doc_attivo_accertamentoBulk.class).find(dr).iterator(); y.hasNext(); ) {
V_doc_attivo_accertamentoBulk drBulk = (V_doc_attivo_accertamentoBulk) y.next();
if (drBulk != null)
creaReversaleRigaSenzaModalitaPag(userContext, reversale, drBulk);
}
}
}
if (documento != null) {
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession().creaConBulk(userContext, documento);
// creo una reversale riga per ogni riga di doc. generico
for (Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext(); )
creaReversaleRiga(userContext, reversale, (Documento_generico_rigaBulk) i.next());
}
} else {
V_doc_attivo_accertamentoBulk dr;
for (Iterator i = ((MandatoIBulk) mandato).getDocGenericiSelezionatiPerRegolarizzazione().iterator(); i.hasNext(); ) {
dr = (V_doc_attivo_accertamentoBulk) i.next();
creaReversaleRigaSenzaModalitaPag(userContext, reversale, dr);
}
}
reversale = (ReversaleIBulk) creaConBulk(userContext, reversale);
aggiornaSaldoIncassato(userContext, reversale, INSERIMENTO_REVERSALE_ACTION);
/* GESTIONE DISTINTA PER PARTITA DI GIRO E NON
fl_pgiro = ((Mandato_rigaBulk) mandato.getMandato_rigaColl().get(0)).getFl_pgiro();
//SU PGIRO: creo una riga di documento generico per ogni riga di mandato
if ( fl_pgiro.booleanValue() )
{
for ( Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); )
{
mRiga = (Mandato_rigaBulk)i.next();
scadenza = ((ImpegnoPGiroHome)getHome( userContext, ImpegnoPGiroBulk.class )).findAccertamentoScadenzarioPGiro( mRiga.getEsercizio_obbligazione(), mRiga.getCd_cds(), mRiga.getEsercizio_ori_obbligazione(), mRiga.getPg_obbligazione());
//CREA UNA RIGA DEL DOCUMENTO CONTABILIZZATA SULLA SCADENZA DELL'ACCERTAMENTO
dRiga = docGenerico_creaDocumentoGenericoRiga( userContext, documento, scadenza, mRiga.getIm_mandato_riga() );
}
}
else //NON SU PGIRO: creo una riga di documento generico per ogni scadenza della obbligazione
{
for ( Iterator i = ((MandatoIBulk)mandato).getAccertamentoPerRegolarizzazione().getAccertamento_scadenzarioColl().iterator(); i.hasNext(); )
{
scadenza = (Accertamento_scadenzarioBulk) i.next();
if ( scadenza.getIm_associato_doc_amm().compareTo( new java.math.BigDecimal(0)) == 0 )
dRiga = docGenerico_creaDocumentoGenericoRiga( userContext, documento, scadenza, scadenza.getIm_scadenza() );
}
}
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession().creaConBulk( userContext, documento );
// creo una reversale riga per ogni riga di doc. generico
for ( Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext(); )
creaReversaleRiga( userContext, reversale, (Documento_generico_rigaBulk) i.next(), fl_pgiro );
reversale = (ReversaleIBulk) creaConBulk( userContext, 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 creata una reversale di trasferimento a partire dal mandato di
* accreditamento associato.
* Viene creata una reversaleTerzo (metodo creaReversaleTerzo).
* Viene creato un documento generico con le relative righe (metodo docGenerico_creaDocumentoGenerico).
* Vengono create tante righe di reversale quante sono quelle del documento generico (metodo creaReversaleRiga).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di accreditamento
*
* @return reversale ReversaleBulk la reversale di trasferimento creata
*/
public ReversaleBulk creaReversaleDiTrasferimento(UserContext userContext, MandatoAccreditamentoBulk mandato) throws ComponentException {
try {
AccertamentoBulk accertamento;
MandatoAccreditamento_rigaBulk mRiga;
Documento_generico_rigaBulk dRiga;
//REVERSALE
ReversaleIBulk reversale = new ReversaleIBulk();
reversale.setToBeCreated();
reversale.setUser(mandato.getUser());
reversale.setEsercizio(mandato.getEsercizio());
CdsBulk cds = (CdsBulk) getHome(userContext, CdsBulk.class).findByPrimaryKey(new CdsBulk(mandato.getCodice_cds()));
reversale.setCds(cds);
Unita_organizzativaBulk uo = findUnita_organizzativa(userContext, mandato);
reversale.setUnita_organizzativa(uo);
// reversale.setCd_cds_origine( mandato.getCd_cds_origine());
// reversale.setCd_uo_origine(mandato.getCd_uo_origine());
reversale.setCd_cds_origine(reversale.getCd_cds());
reversale.setCd_uo_origine(reversale.getCd_unita_organizzativa());
reversale.setTi_reversale(ReversaleBulk.TIPO_TRASFERIMENTO);
reversale.setTi_competenza_residuo(ReversaleBulk.TIPO_COMPETENZA);
reversale.setDs_reversale("REVERSALE DI TRASFERIMENTO DA CNR");
reversale.setStato(ReversaleBulk.STATO_REVERSALE_EMESSO);
reversale.setIm_reversale(mandato.getIm_mandato());
reversale.setIm_incassato(new BigDecimal(0));
reversale.setDt_emissione(mandato.getDt_emissione());
if (Utility.createParametriCnrComponentSession().getParametriCnr(userContext, mandato.getEsercizio()).getFl_siope().equals(Boolean.TRUE))
reversale.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_REV);
else
reversale.setCd_tipo_documento_cont(Numerazione_doc_contBulk.TIPO_REV_PROVV);
reversale.setStato_trasmissione(ReversaleBulk.STATO_TRASMISSIONE_NON_INSERITO);
reversale.setStato_coge(MandatoBulk.STATO_COGE_X);
//REVERSALE_TERZO
Reversale_terzoBulk rTerzo = creaReversaleTerzo(userContext, reversale, mandato.getCd_unita_organizzativa());
//DOCUMENTO_GENERICO
Documento_genericoBulk documento = docGenerico_creaDocumentoGenerico(userContext, reversale, Numerazione_doc_ammBulk.TIPO_TRASF_E);
for (Iterator i = mandato.getMandato_rigaColl().iterator(); i.hasNext(); ) {
mRiga = (MandatoAccreditamento_rigaBulk) i.next();
//CREA UN ACCERTAMENTO con una scadenza
accertamento = createAccertamentoComponentSession().creaAccertamentoDiSistema(userContext, mRiga, uo);
// accertamento = accertamento_creaAccertamentoDiSistema( userContext, mRiga, uo );
//CREA UNA RIGA DEL DOCUMENTO CONTABILIZZATA SULLA SCADENZA DELL'ACCERTAMENTO
dRiga = docGenerico_creaDocumentoGenericoRiga(userContext, documento, accertamento.getAccertamento_scadenzarioColl().get(0), mRiga);
}
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession().creaConBulk(userContext, documento);
for (Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext(); )
creaReversaleRiga(userContext, reversale, (Documento_generico_rigaBulk) i.next(), new Boolean(false));
reversale = (ReversaleIBulk) creaConBulk(userContext, reversale);
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga di reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Reversale di regolarizzazione
* PostCondition:
* Viene creata una riga di reversale richiamando il metodo 'creaReversaleRiga' e passando come
* parametro del fl_pgiro il valore che tale flag assume nell'accertamento su cui e' stata contabilizzata la riga
* del documento amministrativo
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param dRiga Documento_generico_rigaBulk la riga del documento generico
*
* @return riga Reversale_rigaBulk la riga della reversale creata
*/
private Reversale_rigaBulk creaReversaleRiga(UserContext userContext, ReversaleBulk reversale, Documento_generico_rigaBulk dRiga) throws ComponentException {
return creaReversaleRiga(userContext, reversale, dRiga, dRiga.getAccertamento_scadenziario().getAccertamento().getFl_pgiro());
}
/*
* creazione riga di reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Reversale di regolarizzazione o di trasferimento
* PostCondition:
* Viene creata una riga di reversale coi dati relativi al documento generico di entrata
* creato in automatico alla creazione della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param dRiga Documento_generico_rigaBulk la riga del documento generico
* @param fl_pgiro il flag che determina se si tratta di partita di giro
*
* @return riga Reversale_rigaBulk la riga della reversale creata
*/
private Reversale_rigaBulk creaReversaleRiga(UserContext userContext, ReversaleBulk reversale, Documento_generico_rigaBulk dRiga, Boolean fl_pgiro) throws ComponentException {
try {
if (!dRiga.getStato_cofi().equals(Documento_generico_rigaBulk.STATO_CONTABILIZZATO))
return null;
Reversale_rigaBulk riga = new Reversale_rigaIBulk();
riga.setToBeCreated();
riga.setUser(reversale.getUser());
riga.setStato(Reversale_rigaBulk.STATO_INIZIALE);
riga.setIm_reversale_riga(dRiga.getIm_riga());
riga.setReversale(reversale);
//accertamento
riga.setEsercizio_accertamento(dRiga.getAccertamento_scadenziario().getEsercizio());
riga.setEsercizio_ori_accertamento(dRiga.getAccertamento_scadenziario().getEsercizio_originale());
riga.setPg_accertamento(dRiga.getAccertamento_scadenziario().getPg_accertamento());
riga.setPg_accertamento_scadenzario(dRiga.getAccertamento_scadenziario().getPg_accertamento_scadenzario());
riga.setFl_pgiro(fl_pgiro);
//doc amm
riga.setEsercizio_doc_amm(dRiga.getEsercizio());
riga.setCd_cds_doc_amm(dRiga.getCd_cds());
riga.setCd_uo_doc_amm(dRiga.getCd_unita_organizzativa());
riga.setCd_tipo_documento_amm(dRiga.getCd_tipo_documento_amm());
riga.setPg_doc_amm(dRiga.getPg_documento_generico());
riga.setPg_ver_rec_doc_amm(dRiga.getDocumento_generico().getPg_ver_rec());
//imposto il terzo
riga.setCd_terzo(dRiga.getTerzo().getCd_terzo()); //CNR
BancaBulk banca = new BancaBulk(dRiga.getCd_terzo_uo_cds(), dRiga.getPg_banca_uo_cds());
riga.setBanca(banca);
//imposto le modalità di pagamento del terzo uo
Modalita_pagamentoBulk mod_pagamento = new Modalita_pagamentoBulk(dRiga.getCd_modalita_pag_uo_cds(), dRiga.getCd_terzo_uo_cds());
riga.setModalita_pagamento(mod_pagamento);
reversale.getReversale_rigaColl().add(riga);
//Carico automaticamente i codici SIOPE e visualizzo quelli ancora collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession().getParametriCnr(userContext, reversale.getEsercizio()).getFl_siope().booleanValue()) {
riga = aggiornaLegameSIOPE(userContext, riga);
riga = setCodiciSIOPECollegabili(userContext, riga);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga di reversale (definitiva)
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Reversale definitiva a partire da una Provvisoria
* PostCondition:
* Viene creata una riga di reversale (definitiva) a partire dalle righe di quella
* provvisoria
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversaleDef ReversaleBulk la reversale definitiva
* @param rigaProvv Reversale_rigaBulk la riga della reversale provvisoria
*
* @return riga Reversale_rigaBulk la riga della reversale creata
*/
private Reversale_rigaBulk creaReversaleRiga(UserContext userContext, ReversaleBulk reversaleDef, Reversale_rigaBulk rigaProvv) throws ComponentException {
try {
Reversale_rigaIBulk riga = new Reversale_rigaIBulk();
riga.setToBeCreated();
riga.setUser(userContext.getUser());
riga.setStato(Reversale_rigaBulk.STATO_INIZIALE);
riga.setIm_reversale_riga(rigaProvv.getIm_reversale_riga());
riga.setReversale(reversaleDef);
riga.setEsercizio_accertamento(rigaProvv.getEsercizio_accertamento());
riga.setEsercizio_ori_accertamento(rigaProvv.getEsercizio_ori_accertamento());
riga.setPg_accertamento(rigaProvv.getPg_accertamento());
riga.setPg_accertamento_scadenzario(rigaProvv.getPg_accertamento_scadenzario());
riga.setFl_pgiro(rigaProvv.getFl_pgiro());
riga.setCd_uo_doc_amm(rigaProvv.getCd_uo_doc_amm());
riga.setCd_cds_doc_amm(rigaProvv.getCd_cds_doc_amm());
riga.setEsercizio_doc_amm(rigaProvv.getEsercizio_doc_amm());
riga.setCd_tipo_documento_amm(rigaProvv.getCd_tipo_documento_amm());
riga.setPg_doc_amm(rigaProvv.getPg_doc_amm());
V_doc_attivo_accertamentoBulk docAttivo = new V_doc_attivo_accertamentoBulk();
docAttivo.setCd_cds(riga.getCd_cds_doc_amm());
docAttivo.setCd_unita_organizzativa(riga.getCd_uo_doc_amm());
docAttivo.setCd_tipo_documento_amm(riga.getCd_tipo_documento_amm());
docAttivo.setEsercizio(riga.getEsercizio_doc_amm());
docAttivo.setPg_documento_amm(riga.getPg_doc_amm());
docAttivo.setCd_cds_accertamento(riga.getCd_cds());
docAttivo.setEsercizio_accertamento(riga.getEsercizio_accertamento());
docAttivo.setEsercizio_ori_accertamento(riga.getEsercizio_ori_accertamento());
docAttivo.setPg_accertamento(riga.getPg_accertamento());
docAttivo.setPg_accertamento_scadenzario(riga.getPg_accertamento_scadenzario());
List result = getHome(userContext, V_doc_attivo_accertamentoBulk.class).find(docAttivo);
if (result == null || result.size() == 0)
throw new ApplicationException("Non trovato doc.amm." + docAttivo.getCd_tipo_documento_amm() + ": " + docAttivo.getPg_documento_amm());
riga.setPg_ver_rec_doc_amm(((V_doc_attivo_accertamentoBulk) result.get(0)).getPg_ver_rec());
//imposto il terzo
riga.setCd_terzo(rigaProvv.getCd_terzo());
riga.setBanca(rigaProvv.getBanca());
riga.setBancaOptions(rigaProvv.getBancaOptions());
riga.setModalita_pagamento(rigaProvv.getModalita_pagamento());
riga.setModalita_pagamentoOptions(rigaProvv.getModalita_pagamentoOptions());
for (Iterator i = rigaProvv.getReversale_siopeColl().iterator(); i.hasNext(); ) {
Reversale_siopeBulk siopeProvv = (Reversale_siopeIBulk) i.next();
Reversale_siopeBulk reversale_siope = new Reversale_siopeIBulk();
reversale_siope.setCodice_siope(siopeProvv.getCodice_siope());
reversale_siope.setImporto(siopeProvv.getImporto());
reversale_siope.setToBeCreated();
riga.addToReversale_siopeColl(reversale_siope);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione reversale terzo per Reversale di trasferimento
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale_terzoBulk per una Reversale di trasferimento
* PostCondition:
* Viene creata una istanza di Reversale_terzoBulk coi dati del Cds beneficiario del mandato di accreditamento e viene impostato
* il tipo bollo di default.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param mTerzo l'istanza di Mandato_terzoBulk
*
* @return rTerzo l'istanza di Reversale_terzoBulk creata
*/
/*
* creazione riga di reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Reversale dall'on-line
* PostCondition:
* Viene creata una riga di reversale (metodo 'creaReversaleRigaSenzaModalitaPag')
* 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 reversale ReversaleBulk la reversale
* @param docAttivo V_doc_attivo_accertamentoBulk il documento attivo
* @param cd_terzo Il codice del terzo della reversale
*
* @return riga Reversale_rigaBulk la riga della reversale creata
*/
private Reversale_rigaBulk creaReversaleRigaConModalitaPag(UserContext userContext, ReversaleBulk reversale, V_doc_attivo_accertamentoBulk docAttivo) throws ComponentException {
try {
Reversale_rigaIBulk riga = (Reversale_rigaIBulk) creaReversaleRigaSenzaModalitaPag(userContext, reversale, docAttivo);
//imposto le coordinate bancarie del terzo uo
/* SQLBuilder sql = getHome( userContext, TerzoBulk.class ).createSQLBuilder();
sql.addClause( "AND", "cd_unita_organizzativa", sql.LIKE, reversale.getCd_cds()+".%");
List result = getHome( userContext, TerzoBulk.class ).fetchAll( sql );
if ( result.size() == 0 )
throw handleException( new ApplicationException(" Impossibile emettere la reversale: il Cds non e' stato codificato in anagrafica"));
*/
TerzoBulk terzo_uo = new TerzoBulk(docAttivo.getCd_terzo_uo_cds());
BancaBulk banca = new BancaBulk();
banca.setTerzo(terzo_uo);
banca.setPg_banca(docAttivo.getPg_banca());
banca = (BancaBulk) getHome(userContext, BancaBulk.class).findByPrimaryKey(banca);
riga.setBanca(banca);
riga.setBancaOptions(findBancaOptions(userContext, riga));
//imposto le modalità di pagamento del terzo uo
Modalita_pagamentoBulk mod_pagamento = new Modalita_pagamentoBulk();
mod_pagamento.setTerzo(terzo_uo);
Rif_modalita_pagamentoBulk rif_modalita_pagamento = new Rif_modalita_pagamentoBulk(docAttivo.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));
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione riga di reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Reversale dall'on-line o dall'automatismo
* che genera la reversale di regolarizzazione (con doc.amm.attivi selezionati)
* PostCondition:
* Viene creata una riga di reversale coi dati relativi al documento ammninistrativo di spesa
* selezionato dall'utente.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param docAttivo V_doc_attivo_accertamentoBulk il documento attivo
* @param cd_terzo Il codice del terzo della reversale
*
* @return riga Reversale_rigaBulk la riga della reversale creata
*/
private Reversale_rigaBulk creaReversaleRigaSenzaModalitaPag(UserContext userContext, ReversaleBulk reversale, V_doc_attivo_accertamentoBulk docAttivo) throws ComponentException {
try {
Reversale_rigaIBulk riga = new Reversale_rigaIBulk();
riga.setToBeCreated();
riga.setUser(reversale.getUser());
riga.setStato(Reversale_rigaBulk.STATO_INIZIALE);
riga.setIm_reversale_riga(docAttivo.getIm_totale_doc_amm());
riga.setReversale(reversale);
riga.setEsercizio_accertamento(docAttivo.getEsercizio_accertamento());
riga.setEsercizio_ori_accertamento(docAttivo.getEsercizio_ori_accertamento());
riga.setPg_accertamento(docAttivo.getPg_accertamento());
riga.setPg_accertamento_scadenzario(docAttivo.getPg_accertamento_scadenzario());
riga.setFl_pgiro(docAttivo.getFl_pgiro());
riga.setCd_uo_doc_amm(docAttivo.getCd_unita_organizzativa());
riga.setCd_cds_doc_amm(docAttivo.getCd_cds());
riga.setEsercizio_doc_amm(docAttivo.getEsercizio());
riga.setCd_tipo_documento_amm(docAttivo.getCd_tipo_documento_amm());
riga.setPg_doc_amm(docAttivo.getPg_documento_amm());
riga.setPg_ver_rec_doc_amm(docAttivo.getPg_ver_rec());
riga.setFlCancellazione(docAttivo.getFl_selezione().equalsIgnoreCase("Y"));
riga.setTi_fattura(docAttivo.getTi_fattura());
riga.setCd_terzo(docAttivo.getCd_terzo());
((ReversaleIBulk) reversale).addToReversale_rigaColl(riga, docAttivo);
//Carico automaticamente i codici SIOPE e visualizzo quelli ancora collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession().getParametriCnr(userContext, reversale.getEsercizio()).getFl_siope().booleanValue()) {
riga = (Reversale_rigaIBulk) aggiornaLegameSIOPE(userContext, riga);
riga = (Reversale_rigaIBulk) setCodiciSIOPECollegabili(userContext, riga);
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
private Reversale_terzoBulk creaReversaleTerzo(UserContext userContext, ReversaleBulk reversale, Mandato_terzoBulk mTerzo) throws ComponentException {
try {
Reversale_terzoBulk rTerzo = new Reversale_terzoBulk();
rTerzo.setToBeCreated();
rTerzo.setUser(reversale.getUser());
rTerzo.setReversaleI((ReversaleIBulk) reversale);
rTerzo.setTerzo(mTerzo.getTerzo());
//imposto il tipo bollo esente
rTerzo.setTipoBollo(mTerzo.getTipoBollo());
reversale.setReversale_terzo(rTerzo);
return rTerzo;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione reversale terzo
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale_terzoBulk
* PostCondition:
* Viene creata una istanza di Reversale_terzoBulk coi dati del terzo della reversale e viene impostato
* il tipo bollo di default.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param cd_terzo Il codice del terzo della reversale
*
* @return rTerzo l'istanza di Reversale_terzoBulk creata
*/
private Reversale_terzoBulk creaReversaleTerzo(UserContext userContext, ReversaleBulk reversale, Integer cd_terzo) throws ComponentException {
try {
Reversale_terzoBulk rTerzo = new Reversale_terzoBulk();
rTerzo.setToBeCreated();
rTerzo.setUser(reversale.getUser());
rTerzo.setReversaleI((ReversaleIBulk) reversale);
//imposto il terzo
TerzoBulk terzo = (TerzoBulk) getHome(userContext, TerzoBulk.class).findByPrimaryKey(new TerzoKey(cd_terzo));
rTerzo.setTerzo(terzo);
//imposto il tipo bollo di default
rTerzo.setTipoBollo(((it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloHome) getHome(userContext, Tipo_bolloBulk.class)).findTipoBolloDefault(Tipo_bolloBulk.TIPO_ENTRATA));
return rTerzo;
} catch (Exception e) {
throw handleException(e);
}
}
/*
* creazione reversale terzo per Reversale
* PreCondition:
* E' stata generata la richiesta di creazione di una Reversale_terzoBulk per una Reversale
* PostCondition:
* Viene creata una istanza di Reversale_terzoBulk con unità organizzativa del Cnr e viene impostato
* il tipo bollo di default.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param cd_unita_organizzativa Il codice dell'unità organizzativa della reversale
*
* @return rTerzo l'istanza di Reversale_terzoBulk creata
*/
private Reversale_terzoBulk creaReversaleTerzo(UserContext userContext, ReversaleBulk reversale, String cd_unita_organizzativa) throws ComponentException {
try {
Reversale_terzoBulk rTerzo = new Reversale_terzoBulk();
rTerzo.setToBeCreated();
rTerzo.setUser(reversale.getUser());
rTerzo.setReversaleI((ReversaleIBulk) reversale);
//imposto il terzo
SQLBuilder sql = getHome(userContext, TerzoBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, cd_unita_organizzativa); //CNR
List result = getHome(userContext, TerzoBulk.class).fetchAll(sql);
if (result.size() == 0)
throw new ApplicationException("Non e' stato codificato il CNR come terzo in anagrafica");
rTerzo.setTerzo((TerzoBulk) result.get(0));
//imposto il tipo bollo esente
rTerzo.setTipoBollo(((it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloHome) getHome(userContext, Tipo_bolloBulk.class)).findTipoBolloEsente());
reversale.setReversale_terzo(rTerzo);
return rTerzo;
} 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 it.cnr.contab.doccont00.ejb.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 relative agli Accertamenti
*
* @return AccertamentoComponentSession l'istanza di AccertamentoComponentSession che serve per gestire un accertamento
*/
private it.cnr.contab.doccont00.ejb.AccertamentoPGiroComponentSession createAccertamentoPGiroComponentSession() throws ComponentException {
try {
return (AccertamentoPGiroComponentSession) EJBCommonServices.createEJB("CNRDOCCONT00_EJB_AccertamentoPGiroComponentSession");
} 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
*/
private 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
*/
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 ai Mandati
*
* @return MandatoComponentSession l'istanza di MandatoComponentSession che serve per gestire un mandato
*/
private it.cnr.contab.doccont00.ejb.MandatoComponentSession createMandatoComponentSession() throws ComponentException {
try {
return (MandatoComponentSession) EJBCommonServices.createEJB("CNRDOCCONT00_EJB_MandatoComponentSession");
} 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
*/
private 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:
* Viene impostata la data di annullamento del documento generico e vengono aggiornati gli importi associati ai documenti
* amministrativi delle scadenze di obbligazione e/o accertamenti che erano stati utilizzati nella contabilizzazione
* del documento annullato
*
* @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 DEL MANDATO */
/* 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 = riga.getObbligazione_scadenziario();
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()));
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 entrata a partire
* da una reversale di regolarizzazione o di trasferimento
* PostCondition:
* Un documento amm.generico viene creato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @param cd_tipo_documento_amm Il codice del tipo di documento amministrativo
* @return documento Documento_genericoBulk il documento generico creato
*/
public Documento_genericoBulk docGenerico_creaDocumentoGenerico(UserContext userContext, ReversaleBulk reversale, String cd_tipo_documento_amm) throws ComponentException {
try {
Documento_genericoBulk documento = new Documento_genericoBulk();
documento.setToBeCreated();
documento.setUser(reversale.getUser());
documento.setTi_entrate_spese(Documento_genericoBulk.ENTRATE);
documento.setEsercizio(reversale.getEsercizio());
documento.setCd_cds(reversale.getCd_cds());
documento.setCd_unita_organizzativa(reversale.getCd_unita_organizzativa());
documento.setCd_cds_origine(reversale.getCd_cds_origine());
documento.setCd_uo_origine(reversale.getCd_uo_origine());
documento.setTipo_documento(new Tipo_documento_ammBulk(cd_tipo_documento_amm));
documento.setTi_istituz_commerc(Documento_genericoBulk.ISTITUZIONALE);
documento.setStato_cofi(Documento_genericoBulk.STATO_CONTABILIZZATO);
documento.setStato_coge(Documento_genericoBulk.NON_REGISTRATO_IN_COGE);
documento.setData_registrazione(reversale.getDt_emissione());
documento.setDt_a_competenza_coge(reversale.getDt_emissione());
documento.setDt_da_competenza_coge(reversale.getDt_emissione());
documento.setDs_documento_generico("DOCUMENTO CREATO IN AUTOMATICO ASSOCIATO A REVERSALE DI " +
((String) reversale.getTipoReversaleKeys().get(reversale.getTi_reversale())).toUpperCase());
documento.setIm_totale(reversale.getIm_reversale());
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));
// 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");
return documento;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga di documento amm.generico di entrata
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di documento generico di entrata
* a partire da una reversale di trasferimento
* PostCondition:
* Un riga di documento amm.generico viene creata.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico
* @param scadenza Accertamento_scadenzarioBulk la scadenza dell'accertamento
* @param mRiga Mandato_rigaBulk la riga del mandato
* @return riga Documento_generico_rigaBulk la riga del documento generico creata
*/
//documento generico di entrata creato alla creazione della reversale di trasferimento */
public Documento_generico_rigaBulk docGenerico_creaDocumentoGenericoRiga(UserContext userContext, Documento_genericoBulk documento, Accertamento_scadenzarioBulk scadenza, Mandato_rigaBulk mRiga) 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(scadenza.getAccertamento().getDebitore()); //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());
/* tutti duplicati perchè altrimenti non funziona */
riga.setCd_terzo_uo_cds(mRiga.getCd_terzo()); //CDS
riga.setTerzo_uo_cds(new TerzoBulk(mRiga.getCd_terzo()));
riga.setCd_modalita_pag_uo_cds(mRiga.getCd_modalita_pag());
riga.setModalita_pagamento_uo_cds(new Rif_modalita_pagamentoBulk(mRiga.getCd_modalita_pag()));
riga.setPg_banca_uo_cds(mRiga.getPg_banca());
riga.setBanca_uo_cds(new BancaBulk(mRiga.getCd_terzo(), mRiga.getPg_banca()));
riga.setIm_riga(mRiga.getIm_mandato_riga());
riga.setIm_riga_divisa(mRiga.getIm_mandato_riga());
//ridondati altrimenti non funziona
riga.setAccertamento_scadenziario(scadenza);
riga.setEsercizio_accertamento(scadenza.getEsercizio());
riga.setCd_cds_accertamento(scadenza.getCd_cds());
riga.setEsercizio_ori_accertamento(scadenza.getEsercizio_originale());
riga.setPg_accertamento(scadenza.getPg_accertamento());
riga.setPg_accertamento_scadenzario(scadenza.getPg_accertamento_scadenzario());
riga.setTi_associato_manrev("T");
//
riga.setDocumento_generico(documento);
documento.getDocumento_generico_dettColl().add(riga);
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga di documento amm.generico di entrata
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di documento generico di entrata
* a partire da una reversale di regolarizzazione
* PostCondition:
* Un riga di documento amm.generico viene creata.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico
* @param scadenza Accertamento_scadenzarioBulk la scadenza dell'accertamento
* @param importo L'importo della reversale di regolarizzazione
* @return riga Documento_generico_rigaBulk la riga del documento generico creata
*/
//documento generico di entrata creato alla creazione della reversale di regolarizzazione */
public Documento_generico_rigaBulk docGenerico_creaDocumentoGenericoRiga(UserContext userContext, Documento_genericoBulk documento, Accertamento_scadenzarioBulk scadenza, BigDecimal importo) 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(scadenza.getAccertamento().getDebitore()); //CNR
AnagraficoBulk anagrafico = (AnagraficoBulk) getHome(userContext, AnagraficoBulk.class).findByPrimaryKey(riga.getTerzo().getAnagrafico());
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.setIm_riga(importo);
riga.setIm_riga_divisa(importo);
//ridondati altrimenti non funziona
riga.setAccertamento_scadenziario(scadenza);
riga.setEsercizio_accertamento(scadenza.getEsercizio());
riga.setCd_cds_accertamento(scadenza.getCd_cds());
riga.setEsercizio_ori_accertamento(scadenza.getEsercizio_originale());
riga.setPg_accertamento(scadenza.getPg_accertamento());
riga.setPg_accertamento_scadenzario(scadenza.getPg_accertamento_scadenzario());
riga.setTi_associato_manrev("T");
riga.setDocumento_generico(documento);
documento.getDocumento_generico_dettColl().add(riga);
//aggiorno im_assciato_doc_amm della scadenza
AccertamentoBulk accertamento = (AccertamentoBulk) getHome(userContext, AccertamentoBulk.class).findAndLock(scadenza.getAccertamento());
// accertamento.setUser( userContext.getUser());
// updateBulk( userContext, accertamento );
lockBulk(userContext, accertamento);
scadenza.setIm_associato_doc_amm(scadenza.getIm_associato_doc_amm().add(riga.getIm_riga()));
scadenza.setUser(userContext.getUser());
updateBulk(userContext, scadenza);
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* creazione riga di documento di entrata x incasso IVA da fatture estere
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di documento amministrativo di entrata
* a partire da una reversale di incasso IVA x fattura estera
* PostCondition:
* Un riga di documento amministrativo viene creata.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico
* @param scadenza Accertamento_scadenzarioBulk la scadenza dell'accertamento
* @param importo L'importo della reversale di regolarizzazione
* @param mRiga Mandato_rigaBulk da cui dedurre le modalita di pagamento
* @return riga Documento_generico_rigaBulk la riga del documento generico creata
*/
public Documento_generico_rigaBulk docGenerico_creaDocumentoGenericoRiga(UserContext userContext, Documento_genericoBulk documento, Accertamento_scadenzarioBulk scadenza, BigDecimal importo, Mandato_rigaBulk mRiga) throws ComponentException {
try {
Documento_generico_rigaBulk riga = docGenerico_creaDocumentoGenericoRiga(userContext, documento, scadenza, importo);
//terzo uo
SQLBuilder sql = getHome(userContext, TerzoBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, documento.getCd_unita_organizzativa());
sql.addClause("AND", "dt_canc", SQLBuilder.ISNULL, null);
List result = getHome(userContext, TerzoBulk.class).fetchAll(sql);
if (result == null || result.size() == 0)
throw handleException(new ApplicationException(" Impossibile emettere la reversale: l'unità organizzativa " + documento.getCd_unita_organizzativa() + " non e' stata codificata in anagrafica"));
TerzoBulk terzo_uo = (TerzoBulk) result.get(0);
riga.setCd_terzo_uo_cds(terzo_uo.getCd_terzo());
riga.setTerzo_uo_cds(terzo_uo);
//modalità pagamento
sql = getHome(userContext, Modalita_pagamentoBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, terzo_uo.getCd_terzo());
sql.addClause("AND", "cd_terzo_delegato", SQLBuilder.ISNULL, null);
sql.addTableToHeader("RIF_MODALITA_PAGAMENTO");
sql.addSQLJoin("RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG", "MODALITA_PAGAMENTO.CD_MODALITA_PAG");
sql.addSQLClause("AND", "TI_PAGAMENTO", SQLBuilder.EQUALS, Rif_modalita_pagamentoBulk.BANCARIO);
result = getHome(userContext, Modalita_pagamentoBulk.class).fetchAll(sql);
if (result == null || result.size() == 0)
throw handleException(new ApplicationException(" Impossibile emettere la reversale: l'unità organizzativa " + documento.getCd_unita_organizzativa() + " non ha modalità di pagamento associate"));
Modalita_pagamentoBulk mp = (Modalita_pagamentoBulk) result.get(0);
riga.setCd_modalita_pag_uo_cds(mp.getCd_modalita_pag());
riga.setModalita_pagamento_uo_cds(new Rif_modalita_pagamentoBulk(mp.getCd_modalita_pag()));
sql = getHome(userContext, BancaBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, terzo_uo.getCd_terzo());
sql.addClause("AND", "ti_pagamento", SQLBuilder.EQUALS, Rif_modalita_pagamentoBulk.BANCARIO);
sql.addClause("AND", "fl_cancellato", SQLBuilder.EQUALS, Boolean.FALSE);
sql.addSQLClause("AND", "CODICE_IBAN", SQLBuilder.ISNOTNULL, null);
sql.addSQLClause("AND", "cd_terzo_delegato", SQLBuilder.ISNULL, null);
try {
if (!Utility.createParametriCnrComponentSession().getParametriCnr(userContext, CNRUserContext.getEsercizio(userContext)).getFl_tesoreria_unica().booleanValue())
sql.addSQLClause("AND", "BANCA.FL_CC_CDS", SQLBuilder.EQUALS, "Y");
else {
Configurazione_cnrBulk config = new Configurazione_cnrBulk(
"CONTO_CORRENTE_SPECIALE",
"ENTE",
"*",
new Integer(0));
it.cnr.contab.config00.bulk.Configurazione_cnrHome home = (it.cnr.contab.config00.bulk.Configurazione_cnrHome) getHome(userContext, config);
List configurazioni = home.find(config);
if ((configurazioni != null) && (configurazioni.size() == 1)) {
Configurazione_cnrBulk configBanca = (Configurazione_cnrBulk) configurazioni.get(0);
sql.addSQLClause("AND", "BANCA.ABI", SQLBuilder.EQUALS, configBanca.getVal01());
sql.addSQLClause("AND", "BANCA.CAB", SQLBuilder.EQUALS, configBanca.getVal02());
sql.addSQLClause("AND", "BANCA.NUMERO_CONTO", SQLBuilder.CONTAINS, configBanca.getVal03());
}
}
} catch (Exception e) {
throw handleException(e);
}
result = getHome(userContext, BancaBulk.class).fetchAll(sql);
if (result == null || result.size() == 0)
throw handleException(new ApplicationException(" Impossibile emettere la reversale: l'unità organizzativa " + documento.getCd_unita_organizzativa() + " non ha coordinate bancarie associate"));
BancaBulk banca = (BancaBulk) result.get(0);
riga.setPg_banca_uo_cds(banca.getPg_banca());
riga.setBanca_uo_cds(banca);
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
*/
private Configurazione_cnrComponentSession docGenerico_createConfigurazioneCnrComponentSession() throws ComponentException {
try {
return (Configurazione_cnrComponentSession) EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
} catch (Exception e) {
throw handleException(e);
}
}
/**
* eliminazione
* PreCondition:
* E' stata generata la richiesta di eliminazione dell'associazione Mandato-Reversale
* PostCondition:
* Viene eliminato l'oggetto Ass_mandato_reversaleBulk con i dati del mandato e della reversale associata
*
* @param userContext lo UserContext che ha generato la richiesta
* @param ass_man_rev Ass_mandato_reversaleBulk l'associazione mandato-reversale da cancellare
*/
// serve x eliminare un oggetto bulk
public void eliminaAss_mandato_reversale(UserContext userContext, Ass_mandato_reversaleBulk ass_man_rev) throws it.cnr.jada.persistency.PersistencyException, ComponentException {
ass_man_rev.setToBeDeleted();
makeBulkPersistent(userContext, ass_man_rev);
}
/**
* eliminazione reversale provvisoria
* PreCondition:
* E' stata generata la richiesta di cancellare fisicamente una reversale provvisoria
* PostCondition:
* La reversale provvisoria coi suoi dettagli e' stata eliminata.
* I saldi dei capitoli di entrata dell'accertamento di sistema a cui si riferisce sono stati aggiornati
* (metodo aggiornaCapitoloSaldoRiga).
* Vengono aggiornati lo stato della fattura (metodo aggiornaStatoFattura) e l'importo degli
* accertamenti associati alla reversale (metodo aggiornaImportoAccertamenti).
* eliminazione reversale definitiva
* PreCondition:
* E' stata generata la richiesta di eliminare una reversale definitiva
* PostCondition:
* La reversale viene annullata in quanto ha dei sospesi associati (metodo annullaReversale).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da cancellare
*/
public void eliminaConBulk(UserContext userContext, OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
try {
ReversaleBulk reversale = (ReversaleBulk) bulk;
verificaStatoEsercizio(userContext, ((ReversaleBulk) bulk).getEsercizio(), ((CNRUserContext) userContext).getCd_cds());
lockBulk(userContext, reversale);
//REVERSALE DEFINITIVA
if (reversale.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV)) {
annullaReversale(userContext, reversale);
return;
}
//REVERSALE PROVVISORIA
reversale.setToBeDeleted();
Reversale_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
// riga.annulla();
// updateBulk( userContext, riga);
aggiornaCapitoloSaldoRiga(userContext, riga, session);
}
/* simona 9.12.2002 commentato perchè altrimenti il doc. generico TRASF_E veniva annullato
e successivamente non si riusciva più ad annullare il mandato di accreditamento collegato alla reversale
aggiornaStatoFattura( userContext, reversale, ANNULLAMENTO_REVERSALE_ACTION );
*/
aggiornaImportoAccertamenti(userContext, reversale);
super.eliminaConBulk(userContext, reversale);
} catch (Exception e) {
throw handleException(bulk, e);
}
}
/**
* lista le coordinate bancarie
* PreCondition:
* E' stato creata una riga di reversale con tipologia diversa da quella di regolarizzazione e di trasferimento
* PostCondition:
* La lista delle coordinate bancarie del terzo debitore della reversale viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaIBulk la riga della reversale
* @return List la lista delle banche definite per il terzo della reversale
*/
public List findBancaOptions(UserContext userContext, Reversale_rigaIBulk riga) throws it.cnr.jada.persistency.PersistencyException, it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (riga.getReversale() != null && ReversaleBulk.TIPO_REGOLARIZZAZIONE.equals(riga.getReversale().getTi_reversale()))
return null;
SQLBuilder sql = getHome(userContext, BancaBulk.class).createSQLBuilder();
sql.addClause("AND", "cd_terzo", SQLBuilder.EQUALS, riga.getCd_terzo_uo());
sql.addSQLClause("AND", "BANCA.CD_TERZO_DELEGATO", SQLBuilder.ISNULL, null);
sql.addClause("AND", "ti_pagamento", SQLBuilder.EQUALS, riga.getBanca().getTi_pagamento());
sql.addSQLClause("AND", "BANCA.FL_CANCELLATO", SQLBuilder.EQUALS, "N");
return getHome(userContext, BancaBulk.class).fetchAll(sql);
}
/**
* lista le modalità di pagamento
* PreCondition:
* E' stato creata una riga di reversale con tipologia diversa da quella di regolarizzazione e di trasferimento
* PostCondition:
* La lista delle modalità di pagamento del terzo debitore, tutte appartenenti alla stessa classe (Bancario/Postale/..)
* per cui si sta emettendo la reversale, viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaIBulk la riga della reversale
* @return List la lista delle modalità di pagamento definite per il terzo della reversale
*/
public List findModalita_pagamentoOptions(UserContext userContext, Reversale_rigaIBulk riga) throws it.cnr.jada.persistency.PersistencyException, it.cnr.jada.persistency.IntrospectionException, ComponentException {
if (riga.getReversale() != null && ReversaleBulk.TIPO_REGOLARIZZAZIONE.equals(riga.getReversale().getTi_reversale()))
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_uo());
sql.addSQLClause("AND", "MODALITA_PAGAMENTO.CD_TERZO_DELEGATO", SQLBuilder.ISNULL, null);
if (riga.getBanca() == null)
throw new ApplicationException("Reversale: " + riga.getPg_reversale() + " Esercizio: " + riga.getEsercizio() + " Cds: " + riga.getCd_cds() + " - Non esistono le coordinate bancarie! ");
sql.addSQLClause("AND", "RIF_MODALITA_PAGAMENTO.TI_PAGAMENTO", SQLBuilder.EQUALS, riga.getBanca().getTi_pagamento());
return getHome(userContext, Modalita_pagamentoBulk.class).fetchAll(sql);
}
/**
* lista le tipologie di bollo
* PreCondition:
* E' stato creata una riga di reversale di trasferimento
* PostCondition:
* La lista delle tipologie di bollo di tipo entrata viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @return List la lista dei tipi di bollo definiti per la reversale
*/
public List findTipoBolloOptions(UserContext userContext, ReversaleBulk reversale) 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_SPESA);
sql.addOrderBy("cd_tipo_bollo");
return getHome(userContext, Tipo_bolloBulk.class).fetchAll(sql);
}
/**
* ricerca uo a cui assegnare la reversale per cds diverso da SAC
* PreCondition:
* E' stato generata la richiesta di creazione di una reversale di trasferimento
* Il Cds beneficiario dell'accreditamento è diverso dal SAC
* PostCondition:
* L'UO-cds del Cds beneficiario dell'accreditamento viene restituito
*
* ricerca uo a cui assegnare la reversale per cds uguale a SAC
* PreCondition:
* E' stato generata la richiesta di creazione di una reversale di trasferimento
* Il Cds beneficiario dell'accreditamento è uguale al SAC
* PostCondition:
* Viene letta da Configurazione CNR il codice dell'uo per l'accreditamento SAC e vengono resituiti
* i dati di tale UO
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di accreditamento da generare
* @return Unita_organizzativaBulk l'uo a cui assegnare la reversale di trasferimento
*/
private Unita_organizzativaBulk findUnita_organizzativa(UserContext userContext, MandatoAccreditamentoBulk mandato) throws ComponentException {
try {
//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;
if (!isSac) {
//cerco l'uo-cds
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());
return ((Unita_organizzativaBulk) result.get(0));
} else {
//cerco l'uo in configurazione CNR
String cdUo = 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)+"."));
return (Unita_organizzativaBulk) getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(cdUo));
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* lista le unità organizzative - scrivania = Ente
* PreCondition:
* E' stata richiesta una lista delle unità organizzative per cui è possibile emettere una reversale 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 una reversale 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 reversale ReversaleBulk la reversale
* @return List la lista delle unità organizzative definite per la reversale
*/
public List findUnita_organizzativaOptions(UserContext userContext, ReversaleBulk reversale) 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);
reversale.setCd_uo_ente(((Unita_organizzativaBulk) result.get(0)).getCd_unita_organizzativa());
if (!reversale.getCd_uo_ente().equals(((CNRUserContext) userContext).getCd_unita_organizzativa())) {
Unita_organizzativaBulk uo = (Unita_organizzativaBulk) getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(reversale.getCd_uo_origine()));
result.add(uo);
}
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);
}
}
/**
* inizializzazione di una istanza di ReversaleBulk
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk
* PostCondition:
* Viene impostata la data di emissione della reversale con la data del Server
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da inizializzare per l'inserimento
* @return bulk OggettoBulk la Reversale inizializzata per l'inserimento
*/
public OggettoBulk inizializzaBulkPerInserimento(UserContext aUC, OggettoBulk bulk) throws ComponentException {
try {
ReversaleBulk reversale = (ReversaleBulk) bulk;
Unita_organizzativa_enteBulk ente = (Unita_organizzativa_enteBulk) getHome(aUC, Unita_organizzativa_enteBulk.class).findAll().get(0);
reversale.setUnita_organizzativa(ente);
reversale.setCd_cds(ente.getCd_unita_padre());
verificaStatoEsercizio(aUC, reversale.getEsercizio(), reversale.getCd_cds_origine());
reversale.setDt_emissione(DateServices.getDt_valida(aUC));
return super.inizializzaBulkPerInserimento(aUC, reversale);
} catch (Exception e) {
throw handleException(bulk, e);
}
}
/**
* inizializzazione di una istanza di ReversaleBulk per modifica
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk
* PostCondition:
* Viene caricata la collezione delle righe di reversale (Reversale_rigaBulk), dei sospesi associati alla reversale (Sospeso_det_etrBulk),
* delle associazioni mandato-reversale( Ass_mandato_reversaleBulk). Vengono caricati i dati del terzo della reversale (Reversale_terzoBulk)
* e viene verificato il tipo bollo (metodo verificaTipoBollo)
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da inizializzare per la modifica
* @return reversale la Reversale inizializzata per la modifica
*/
/*
1 - carica le reversali riga
2 - carica la reversale terzo
*/
public OggettoBulk inizializzaBulkPerModifica(UserContext aUC, OggettoBulk bulk) throws ComponentException {
ReversaleBulk reversale = (ReversaleBulk) super.inizializzaBulkPerModifica(aUC, bulk);
try {
//carico le reversali riga
Reversale_rigaBulk riga;
reversale.setReversale_rigaColl(new BulkList(((ReversaleHome) getHome(aUC, reversale.getClass())).findReversale_riga(aUC, reversale)));
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) super.inizializzaBulkPerModifica(aUC, (Reversale_rigaBulk) i.next());
//Carico automaticamente i codici SIOPE e visualizzo quelli ancora collegabili se la gestione è attiva
if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_siope().booleanValue()) {
riga.setReversale_siopeColl(new BulkList(((Reversale_rigaHome) getHome(aUC, Reversale_rigaBulk.class)).findCodiciCollegatiSIOPE(aUC, riga)));
setCodiciSIOPECollegabili(aUC, riga);
}
// if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_cup().booleanValue() &&
// Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_siope_cup().booleanValue()){
// Timestamp dataLimite=Utility.createConfigurazioneCnrComponentSession().getDt01(aUC, "DATA_LIMITE_CUP_SIOPE_CUP");
// if(reversale.getDt_emissione().after(dataLimite)){
// for (Iterator j=riga.getReversale_siopeColl().iterator();j.hasNext();){
// Reversale_siopeIBulk rigaSiope = (Reversale_siopeIBulk)j.next();
// rigaSiope.setReversaleSiopeCupColl(new BulkList(((Reversale_siopeHome) getHome( aUC,Reversale_siopeBulk.class)).findCodiciSiopeCupCollegati(aUC, rigaSiope)));
// }
// }else
// {
// riga.setReversaleCupColl(new BulkList(((Reversale_rigaHome) getHome( aUC, Reversale_rigaBulk.class)).findCodiciCupCollegati(aUC, riga)));
// }
//
// }else{
if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_cup().booleanValue()) {
riga.setReversaleCupColl(new BulkList(((Reversale_rigaHome) getHome(aUC, Reversale_rigaBulk.class)).findCodiciCupCollegati(aUC, riga)));
} else {
if (Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_siope_cup().booleanValue()) {
for (Iterator j = riga.getReversale_siopeColl().iterator(); j.hasNext(); ) {
Reversale_siopeIBulk rigaSiope = (Reversale_siopeIBulk) j.next();
rigaSiope.setReversaleSiopeCupColl(new BulkList(((Reversale_siopeHome) getHome(aUC, Reversale_siopeBulk.class)).findCodiciSiopeCupCollegati(aUC, rigaSiope)));
}
}
}
// }
inizializzaTi_fattura(aUC, riga);
((Reversale_rigaHome) getHome(aUC, riga.getClass())).initializeElemento_voce(aUC, riga);
}
//carico la reversale terzo
reversale.setReversale_terzo(((ReversaleHome) getHome(aUC, reversale.getClass())).findReversale_terzo(aUC, reversale));
verificaTipoBollo(aUC, reversale);
//carico i sospeso_det_etr
Sospeso_det_etrBulk sde;
reversale.setSospeso_det_etrColl(new BulkList(((ReversaleHome) getHome(aUC, reversale.getClass())).findSospeso_det_etr(aUC, reversale)));
//aggiungo nella deleteList i sospesi annullati
for (Iterator i = reversale.getSospeso_det_etrColl().iterator(); i.hasNext(); ) {
sde = (Sospeso_det_etrBulk) i.next();
sde.setReversale(reversale);
if (sde.getStato().equals(Sospeso_det_etrBulk.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);
reversale.setCd_uo_ente(((Unita_organizzativa_enteBulk) result.get(0)).getCd_unita_organizzativa());
// carico i mandati associati alla reversale
/* sql = getHome( aUC, Ass_mandato_reversaleBulk.class ).createSQLBuilder();
sql.addClause("AND","esercizio",sql.EQUALS, reversale.getEsercizio() );
sql.addClause("AND","cd_cds",sql.EQUALS, reversale.getCds().getCd_unita_organizzativa() );
sql.addClause("AND","pg_reversale",sql.EQUALS, reversale.getPg_reversale() );
result = getHome( aUC, Ass_mandato_reversaleBulk.class ).fetchAll( sql );
if ( result.size() == 0 )
throw new ApplicationException("Non esiste associazione fra mandati e reversali");
reversale.setMandatiColl( new BulkList(result) );
*/
reversale.setMandatiColl(new BulkList(((Ass_mandato_reversaleHome) getHome(aUC, Ass_mandato_reversaleBulk.class)).findMandati(aUC, reversale)));
// carico i doc. contabili (mandati/reversali) associati alla reversale
reversale.setDoc_contabili_collColl(((V_ass_doc_contabiliHome) getHome(aUC, V_ass_doc_contabiliBulk.class)).findDoc_contabili_coll(reversale));
if (reversale.getPg_reversale_riemissione() != null) {
V_mandato_reversaleBulk man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(reversale.getEsercizio(), Numerazione_doc_contBulk.TIPO_REV, reversale.getCd_cds_origine(), reversale.getPg_reversale_riemissione()));
if (man_rev != null)
reversale.setV_man_rev(man_rev);
else
man_rev = (V_mandato_reversaleBulk) getHome(aUC, V_mandato_reversaleBulk.class).findByPrimaryKey(new V_mandato_reversaleBulk(reversale.getEsercizio(), Numerazione_doc_contBulk.TIPO_REV, reversale.getCd_cds(), reversale.getPg_reversale_riemissione()));
if (man_rev != null)
reversale.setV_man_rev(man_rev);
}
} catch (Exception e) {
throw handleException(reversale, e);
}
return reversale;
}
/**
* inizializzazione di una istanza di ReversaleBulk per ricerca
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk per ricerca
* PostCondition:
* Viene inizializzata l'istanza di ReversaleBulk
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da inizializzare per la ricerca
* @return reversale la Reversale inizializzata per la ricerca
*/
public OggettoBulk inizializzaBulkPerRicerca(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
ReversaleBulk reversale = (ReversaleBulk) bulk;
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()))
//se in scrivania ho uo diversa da ente
reversale.setCd_uo_origine(((CNRUserContext) userContext).getCd_unita_organizzativa());
reversale.setUnita_organizzativa(ente);
reversale = (ReversaleBulk) super.inizializzaBulkPerRicerca(userContext, bulk);
return reversale;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* inizializzazione di una istanza di ReversaleBulk per ricerca libera
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk per ricerca libera
* PostCondition:
* Viene inizializzata l'istanza di ReversaleBulk
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da inizializzare per la ricerca
* @return reversale la Reversale inizializzata per la ricerca
*/
public OggettoBulk inizializzaBulkPerRicercaLibera(UserContext userContext, OggettoBulk bulk) throws ComponentException {
return inizializzaBulkPerRicerca(userContext, bulk);
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_giornale_reversaliBulk stampa) throws it.cnr.jada.comp.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());
String cd_uo = CNRUserContext.getCd_unita_organizzativa(userContext);
try {
Unita_organizzativaHome uoHome = (Unita_organizzativaHome) getHome(userContext, Unita_organizzativaBulk.class);
Unita_organizzativaBulk uo = (Unita_organizzativaBulk) uoHome.findByPrimaryKey(new Unita_organizzativaBulk(cd_uo));
if (!uo.isUoCds()) {
stampa.setUoEmittenteForPrint(uo);
stampa.setFindUOForPrintEnabled(false);
} else {
stampa.setUoEmittenteForPrint(new Unita_organizzativaBulk());
stampa.setFindUOForPrintEnabled(true);
}
} catch (it.cnr.jada.persistency.PersistencyException pe) {
throw new ComponentException(pe);
}
stampa.setTi_reversale(Stampa_giornale_reversaliBulk.TIPO_TUTTI);
stampa.setStato(Stampa_giornale_reversaliBulk.STATO_REVERSALE_TUTTI);
stampa.setStato_trasmissione(Stampa_giornale_reversaliBulk.STATO_TRASMISSIONE_TUTTI);
}
/**
* inizializzaBulkPerStampa method comment.
*/
private void inizializzaBulkPerStampa(UserContext userContext, Stampa_vpg_reversaleBulk stampa) throws it.cnr.jada.comp.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.setTerzoForPrint(new TerzoBulk());
}
/**
* inizializzaBulkPerStampa method comment.
*/
public it.cnr.jada.bulk.OggettoBulk inizializzaBulkPerStampa(UserContext userContext, it.cnr.jada.bulk.OggettoBulk bulk) throws it.cnr.jada.comp.ComponentException {
if (bulk instanceof Stampa_giornale_reversaliBulk)
inizializzaBulkPerStampa(userContext, (Stampa_giornale_reversaliBulk) bulk);
else if (bulk instanceof Stampa_vpg_reversaleBulk)
inizializzaBulkPerStampa(userContext, (Stampa_vpg_reversaleBulk) bulk);
return bulk;
}
/**
* inizializzazione dell'attributo ti_fattura di una istanza di Reversale_rigaBulk
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di Reversale_rigaBulk
* La riga della reversale 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 della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga della reversale da inizializzare
*/
private void inizializzaTi_fattura(UserContext userContext, Reversale_rigaBulk riga) throws SQLException, ComponentException {
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)))
((Reversale_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)))
((Reversale_rigaHome) getHome(userContext, riga.getClass())).initializeTi_fatturaPerFattura(riga, "FATTURA_PASSIVA");
}
/* per le date salvate nel database come timestamp bisogna ridefinire la query nel modo seguente:
TRUNC( dt_nel_db) operator 'GG/MM/YYYY'
*/
/**
* ricerca documenti attivi
* PreCondition:
* E' stata richiesta la ricerca dei documenti attivi per cui e' possibile emettere una reversale
* PostCondition:
* Vengono ricercati tutti i documenti attivi 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 la reversale
* - (im_scadenza-im_associato_doc_contabile) della scadenza di accertamento 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 questa reversale
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale
* @return reversale la Reversale aggiornata dopo la ricerca dei documenti attivi
*/
public ReversaleBulk listaDocAttivi(UserContext aUC, ReversaleBulk reversale) throws ComponentException {
Reversale_rigaIBulk riga;
V_doc_attivo_accertamentoBulk docAttivo;
try {
Collection result = ((ReversaleIHome) getHome(aUC, reversale.getClass())).findDocAttivi((ReversaleIBulk) reversale, (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 attivi già selezionati per questa reversale
for (Iterator j = result.iterator(); j.hasNext(); ) {
docAttivo = (V_doc_attivo_accertamentoBulk) j.next();
docAttivo.setTipoDocumentoKeys((Hashtable) reversale.getTipoDocumentoKeys());
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaIBulk) i.next();
if (docAttivo.getEsercizio_ori_accertamento().intValue() == riga.getEsercizio_ori_accertamento().intValue() &&
docAttivo.getPg_accertamento().longValue() == riga.getPg_accertamento().longValue() &&
docAttivo.getPg_accertamento_scadenzario().longValue() == riga.getPg_accertamento_scadenzario().longValue() &&
docAttivo.getEsercizio_accertamento().intValue() == riga.getEsercizio_accertamento().intValue() &&
docAttivo.getCd_cds_accertamento().equals(riga.getCd_cds()) &&
docAttivo.getEsercizio().intValue() == riga.getEsercizio_doc_amm().intValue() &&
docAttivo.getCd_unita_organizzativa().equals(riga.getCd_uo_doc_amm()) &&
docAttivo.getCd_cds().equals(riga.getCd_cds_doc_amm()) &&
docAttivo.getCd_tipo_documento_amm().equals(riga.getCd_tipo_documento_amm()) &&
docAttivo.getPg_documento_amm().longValue() == riga.getPg_doc_amm().longValue())
j.remove();
}
}
((ReversaleIBulk) reversale).setDocAttiviColl(result);
return reversale;
} catch (it.cnr.jada.persistency.PersistencyException e) {
throw handleException(reversale, e);
} catch (it.cnr.jada.persistency.IntrospectionException e) {
throw handleException(reversale, e);
}
}
/**
* modifica reversale
* PreCondition:
* E' stata generata la richiesta di modifica di una Reversale (TIPO_REV) e la reversale supera la validazione
* (metodo verificaReversale)
* PostCondition:
* Vengono aggiornati gli importi dei sospesi eventualmente associati alla reversale (metodo aggiornaImportoSospesi)
* e vengono aggiornate le eventuali modifiche alle modalità di pagamento e al tipo bollo della reversale
* modifica reversale provvisoria
* PreCondition:
* E' stata generata la richiesta di modifica di una Reversale provvisoria (TIPO_REV_PROVV) e la reversale supera la
* validazione (metodo verificaReversale)
* PostCondition:
* Viene eliminata la precedente associazione tra reversale e mandati (metodo eliminaAss_mandato_reversale),
* viene eliminata la reversale provvisoria. Vengono quindi create una nuova reversale definitiva coi relativi
* sospesi associati (metodo creaReversaleDefinitiva), e la nuova associazione reversale/mandato
* (metodo creaAss_mandato_reversale).
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk la reversale da modificare
* @return bulk OggettoBulk la Reversale modificata
*/
/*
1 - verifica reversale
2 - inserisce record reversale, terzo, riga
3 - per le righe aggiunte o cancellate aggiorna accertamento_scadenzario per im_associato_doc_contabili
4 - per le righe aggiunte o cancellate aggiorna stato cofi della fattura
5 - aggiorna saldi per delta im_incassato
*/
public OggettoBulk modificaConBulk(UserContext userContext, OggettoBulk bulk) throws ComponentException {
try {
ReversaleBulk reversale = (ReversaleBulk) bulk;
verificaStatoEsercizio(userContext, ((ReversaleBulk) bulk).getEsercizio(), ((CNRUserContext) userContext).getCd_cds());
lockBulk(userContext, reversale);
if (!reversale.isAnnullato()) {
reversale.refreshImporto();
verificaReversale(userContext, reversale, false);
}
// verifico se si tratta di una reversale provvisoria o definitiva
if (reversale.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV_PROVV)) {
boolean hasAssociazione = true;
String cd_cds_man = null;
Integer esercizio_man = null;
Long pg_man = null;
if (reversale.getSospeso_det_etrColl() != null && !reversale.getSospeso_det_etrColl().isEmpty()) {
if (reversale.getMandatiColl().size() == 0)
hasAssociazione = false;
if (hasAssociazione) {
cd_cds_man = ((Ass_mandato_reversaleBulk) reversale.getMandatiColl().get(0)).getCd_cds_mandato();
esercizio_man = ((Ass_mandato_reversaleBulk) reversale.getMandatiColl().get(0)).getEsercizio_mandato();
pg_man = ((Ass_mandato_reversaleBulk) reversale.getMandatiColl().get(0)).getPg_mandato();
eliminaAss_mandato_reversale(userContext, (Ass_mandato_reversaleBulk) reversale.getMandatiColl().get(0));
}
eliminaConBulk(userContext, reversale);
ReversaleBulk reversaleDef = creaReversaleDefinitiva(userContext, reversale);
if (hasAssociazione) {
Ass_mandato_reversaleBulk ass_man_rev = creaAss_mandato_reversale(userContext, reversaleDef, cd_cds_man, esercizio_man, pg_man);
reversaleDef.getMandatiColl().add(ass_man_rev);
}
return reversaleDef;
} else
throw handleException(new ApplicationException("Non e' possibile salvare una reversale provvisoria senza aver specificato i sospesi"));
}
aggiornaImportoSospesi(userContext, reversale);
/*
Reversale_rigaBulk riga;
SaldoComponentSession session = createSaldoComponentSession();
//itera su tutte le righe
for ( Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); )
{
riga = (Reversale_rigaBulk) i.next();
aggiornaImportoAccertamento(userContext, riga );
aggiornaCapitoloSaldoRiga( userContext, riga, session );
}
aggiornaStatoFattura( userContext, mandato );
*/
reversale = (ReversaleBulk) super.modificaConBulk(userContext, reversale);
return bulk;
} catch (Exception e) {
throw handleException(e);
}
}
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 una reversale
* PreCondition:
* E' stata richiesta la ricerca di una reversale
* PostCondition:
* E' stato creato il SQLBuilder con le clausole implicite (presenti nell'istanza di ReversaleBulk) su esercizio e uo origine
*
* @param userContext lo UserContext che ha generato la richiesta
* @param clauses CompoundFindClause le clausole della selezione
* @param bulk OggettoBulk la reversale
* @return sql Query Risultato della selezione.
*/
protected Query select(UserContext userContext, CompoundFindClause clauses, OggettoBulk bulk) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
/* COMPORTAMENTO DI DEFAULT - INIZIO */
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 (((CNRUserContext) userContext).getCd_unita_organizzativa().equals(((ReversaleBulk) bulk).getCd_uo_ente()))
sql.addClause("AND", "cd_unita_organizzativa", SQLBuilder.EQUALS, ((ReversaleBulk) bulk).getCd_uo_ente());
// verificaStatoEsercizio( userContext, ((ReversaleBulk)bulk).getEsercizio(), ((CNRUserContext)userContext).getCd_cds() );
return sql;
}
/**
* Costruisce l'struzione SQL corrispondente ad una ricerca con le clausole specificate.
* Aggiunge una clausola a tutte le operazioni di ricerca eseguite sulla Unita Organizzativa
*
* Nome: Richiesta di ricerca di una Unita Organizzativa
* Pre: E' stata generata la richiesta di ricerca delle UO associate al Cds di scrivania
* Post: Viene restituito l'SQLBuilder per filtrare le UO
* in base al cds di scrivania
*
* @param userContext lo userContext che ha generato la richiesta
* @param bulk l'OggettoBulk che rappresenta il contesto della ricerca.
* @param uo l'OggettoBulk da usare come prototipo della ricerca; sul prototipo vengono
* costruite delle clausole aggiuntive che vengono aggiunte in AND alle clausole specificate.
* @return Un'istanza di SQLBuilder contenente l'istruzione SQL da eseguire e tutti i parametri
* della query.
* @param clauses L'albero logico delle clausole da applicare alla ricerca
**/
public SQLBuilder selectUoEmittenteForPrintByClause(UserContext userContext, Stampa_giornale_reversaliBulk 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_reversaliBulk)
validateBulkForPrint(aUC, (Stampa_giornale_reversaliBulk) bulk);
else if (bulk instanceof Stampa_vpg_reversaleBulk)
validateBulkForPrint(aUC, (Stampa_vpg_reversaleBulk) bulk);
return bulk;
}
/**
* Validazione dell'oggetto in fase di stampa
*/
private void validateBulkForPrint(it.cnr.jada.UserContext userContext, Stampa_giornale_reversaliBulk 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 REVERSALE è obbligatorio");
if (stampa.getPgFine() == null)
throw new ValidationException("Il campo NUMERO FINE REVERSALE è obbligatorio");
if (stampa.getPgInizio().compareTo(stampa.getPgFine()) > 0)
throw new ValidationException("Il NUMERO INIZIO REVERSALE non può essere superiore al NUMERO FINE REVERSALE");
//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_reversaleBulk 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");
} catch (ValidationException ex) {
throw new ApplicationException(ex);
}
}
/**
* verifica reversale - errore modalità di pagamento
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno come tipo di pagamento BANCARIO o POSTALE o QUIETANZA o ALTRO
* Le righe della reversale hanno modalità di pagamento differenti
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore mod. pagamento bancario
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno come tipo di pagamento BANCARIO
* Le righe della reversale hanno coordinate bancarie (abi, cab, nr conto) differenti
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore mod. pagamento postale
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno come tipo di pagamento POSTALE
* Le righe della reversale hanno coordinate postali ( nr conto ) differenti
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore mod. pagamento quietanza
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno come tipo di pagamento QUIETANZA
* Le righe della reversale hanno quietanze differenti
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore mod. pagamento quietanza
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno come tipo di pagamento ALTRO
* Le righe della reversale hanno intestazioni differenti
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - ok
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale
* Le righe della reversale hanno la stesse coordinate di pagamento
* PostCondition:
* La reversale ha superato la validazione e può pertanto essere salvata
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale di cui si verifica la correttezza
*/
private void verificaModalitaPagamento(UserContext aUC, ReversaleBulk reversale) throws ComponentException {
try {
if (reversale.getReversale_rigaColl().size() == 0)
return;
Reversale_rigaBulk riga = (Reversale_rigaBulk) reversale.getReversale_rigaColl().get(0);
/* if ( riga.getBanca() == null ||
riga.getBanca().getNumero_conto() == null) //reversale di regolarizzazione
return;
if ( Rif_modalita_pagamentoBulk.ALTRO.equals( riga.getBanca().getTi_pagamento()) ||
Rif_modalita_pagamentoBulk.IBAN.equals( riga.getBanca().getTi_pagamento()) ||
Rif_modalita_pagamentoBulk.QUIETANZA.equals( riga.getBanca().getTi_pagamento()))
return;
*/
if (riga.getBanca() == null ||
ReversaleBulk.TIPO_REGOLARIZZAZIONE.equals(reversale.getTi_reversale())) //reversale di regolarizzazione
return;
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();
/* 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 = reversale.getReversale_rigaColl().iterator(); i.hasNext(); ) {
riga = (Reversale_rigaBulk) i.next();
// if ( Numerazione_doc_ammBulk.TIPO_FATTURA_ATTIVA.equals( riga.getCd_tipo_documento_amm() ) &&
// riga.getTi_fattura().equals( Fattura_passiva_IBulk.TIPO_NOTA_DI_CREDITO ) )
// // si tratta di una nota di credito - non deve essere effettuato la verifica delle modalità di pagamento
// continue;
//
//modalità di pagamento
if (!riga.getModalita_pagamento().getCd_modalita_pag().equals(cd_modalita_pag))
throw new ApplicationException("Attenzione le righe della reversale devono avere la stessa modalità di pagamento");
//conto bancario
if (Rif_modalita_pagamentoBulk.BANCARIO.equals(riga.getBanca().getTi_pagamento()) &&
(!abi.equals(riga.getBanca().getAbi()) ||
!cab.equals(riga.getBanca().getCab()) ||
!nrConto.equals(riga.getBanca().getNumero_conto())))
throw new ApplicationException("Attenzione le righe della reversale devono avere la stessa modalità di pagamento bancario");
else
//postale
if (Rif_modalita_pagamentoBulk.POSTALE.equals(riga.getBanca().getTi_pagamento()) &&
!nrConto.equals(riga.getBanca().getNumero_conto()))
throw new ApplicationException("Attenzione le righe della reversale 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 della reversale 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 della reversale devono avere la stessa modalità di pagamento");
}
} catch (Exception e) {
throw handleException(e);
}
}
/**
* verifica reversale - errore dettaglio
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale e la reversale non ha dettagli (Reversale_rigaBulk)
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore data di emissione futura
* PreCondition:
* E' stato richiesto di verificare la data di emissione della reversale
* La reversale ha una data di emissione futura
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale - errore data di emissione superiore alla data ultima reversale
* PreCondition:
* E' stato richiesto di verificare la data di emissione della reversale
* La reversale ha una data di emissione maggiore della data di emissione dell'ultima reversale emessa
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare la reversale
* verifica reversale di regolarizzazione/Incasso - errore sospesi
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale di regolarizzazione o di incasso
* e dei sospesi di entrata sono stati associati alla reversale
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare una reversale di regolarizzazione
* o di incasso con sospesi di entrata
* verifica reversale a regolamento sospeso/accreditamento definitiva - errore sospesi
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale a regolamento sospeso o di accreditamento definitiva
* e nessun sospeso e' stato associato alla reversale
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare una reversale a regolamento
* o una reversale definitiva di accreditamento senza sospesi di entrata
* verifica reversale a regolamento sospeso/accreditamento definitiva - errore importo sospesi
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale a regolamento sospeso o di accreditamento definitiva
* e la somma degli importi dei sospesi associati e' diverso dall'importo della reversale
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare una reversale a regolamento
* o una reversale definitiva di accreditamento con sospesi di entrata che non coprono completamente l'importo della reversale
* stessa
* verifica reversale a regolamento sospeso/accreditamento definitiva - errore modalità di pagamento
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale a regolamento sospeso o di accreditamento definitiva
* e le modalità di pagamento dei sospesi d'entrata CNR associati sono diverse dalle modalità di pagamento della reversale
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare l'impossibilità di salvare una reversale a regolamento
* o una reversale definitiva di accreditamento con sospesi di entrata CNR che provengono da Banca d'Italia mentre la reversale
* ha modalità di pagamento diverse dai sospesi o viceversa
* verifica reversale - ok
* PreCondition:
* E' stata richiesta la creazione/modifica di una reversale e tutti i controlli sono stati superati
* PostCondition:
* La reversale ha superato la validazione e può pertanto essere salvata
*
* @param aUC lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale di cui si verifica la correttezza
*/
private void verificaReversale(UserContext aUC, ReversaleBulk reversale, boolean verificaDt_emissione) throws ComponentException {
ReversaleHome rh = (ReversaleHome) getHome(aUC, reversale.getClass());
//la reversale deve avere almeno un dettaglio
if (reversale.getReversale_rigaColl().size() == 0)
throw handleException(new ApplicationException("E' necessario selezionare almeno un documento attivo"));
//le reverali di regoalarizz/incasso non possono avere sospesi associati
if ((ReversaleBulk.TIPO_REGOLARIZZAZIONE.equals(reversale.getTi_reversale()) ||
ReversaleBulk.TIPO_INCASSO.equals(reversale.getTi_reversale())) &&
reversale.getSospeso_det_etrColl().size() > 0)
throw handleException(new ApplicationException("Non e' consentito associare sospesi ad una reversale di regolarizzazione"));
boolean isSiopeAttivo = false;
try {
isSiopeAttivo = Utility.createParametriCnrComponentSession().getParametriCnr(aUC, reversale.getEsercizio()).getFl_siope().booleanValue();
} catch (Exception e) {
throw handleException(e);
}
//la reversale a regolamento sospeso deve avere dei sospesi associati
if (reversale.getTi_reversale().equals(ReversaleBulk.TIPO_REGOLAM_SOSPESO) ||
(reversale.getTi_reversale().equals(ReversaleBulk.TIPO_TRASFERIMENTO) &&
reversale.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_REV) &&
!isSiopeAttivo)) {
if (reversale.getSospeso_det_etrColl().size() == 0)
throw handleException(new ApplicationException("E' necessario selezionare almeno un sospeso"));
//verifica sull'importo sospesi
if (reversale.getImTotaleSospesi().compareTo(reversale.getIm_reversale()) != 0)
throw new ApplicationException("La somma degli importi dei sospesi deve essere uguale all'importo della reversale.");
//verifico mod. pagamento sospesi/riscontri associati
if (reversale.getCd_unita_organizzativa().equals(reversale.getCd_uo_ente())) {
if (reversale.getSospeso_det_etrColl() != null && reversale.getSospeso_det_etrColl().size() > 0) {
Sospeso_det_etrBulk sospeso = (Sospeso_det_etrBulk) reversale.getSospeso_det_etrColl().get(0);
if (sospeso.getSospeso().getTi_cc_bi().equals(SospesoBulk.TIPO_CC) &&
reversale.isBanca_italia())
throw new ApplicationException("Attenzione! Il sospeso non proviene da Banca d'Italia mentre le modalità di pagamento della reversale sono di Banca d'Italia");
else if (sospeso.getSospeso().getTi_cc_bi().equals(SospesoBulk.TIPO_BANCA_ITALIA) &&
!reversale.isBanca_italia())
throw new ApplicationException("Attenzione! Il sospeso proviene da Banca d'Italia mentre le modalità di pagamento della reversale sono diverse da Banca d'Italia");
}
}
}
//verifica la data di contabilizzazione
try {
if (verificaDt_emissione) {
Timestamp lastDayOfTheYear = DateServices.getLastDayOfYear(reversale.getEsercizio().intValue());
if (getDataOdierna(aUC).after(lastDayOfTheYear) &&
reversale.getDt_emissione().compareTo(lastDayOfTheYear) != 0)
throw new ApplicationException("La data di registrazione deve essere " +
java.text.DateFormat.getDateInstance().format(lastDayOfTheYear));
if (reversale.getDt_emissione().compareTo(rh.getServerTimestamp()) > 0)
throw new ApplicationException("Non è possibile inserire una reversale con data futura");
Timestamp dataUltReversale = ((ReversaleHome) getHome(aUC, reversale.getClass())).findDataUltimaReversalePerCds(reversale);
if (dataUltReversale != null && dataUltReversale.after(reversale.getDt_emissione()))
throw new ApplicationException("Non è possibile inserire una reversale con data anteriore a " +
java.text.DateFormat.getDateTimeInstance().format(dataUltReversale));
}
verificaModalitaPagamento(aUC, reversale);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Verifica dello stato dell'esercizio
*
* @param userContext UserContext
* @return FALSE se per il cds interessato non è stato inserito nessun esercizio o se l'esercizio non è in stato di "aperto"
* TRUE in tutti gli altri casi
*/
protected void verificaStatoEsercizio(UserContext userContext, Integer es, String cd_cds) throws ComponentException, it.cnr.jada.persistency.PersistencyException {
EsercizioBulk esercizio = (EsercizioBulk) getHome(userContext, EsercizioBulk.class).findByPrimaryKey(
new EsercizioBulk(cd_cds, es));
if (esercizio == null)
throw handleException(new ApplicationException("Operazione impossibile: esercizio inesistente!"));
if (!EsercizioBulk.STATO_APERTO.equals(esercizio.getSt_apertura_chiusura()))
throw handleException(new ApplicationException("Operazione impossibile: esercizio non aperto!"));
}
/**
* verifica tipo bollo
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk e il tipo bollo
* selezionato è corretto
* PostCondition:
* La reversale è valida. E' consentito procedere alla sua inizializzazione.
* verifica tipo bollo - errore
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di ReversaleBulk e il tipo bollo
* selezionato è stato cancellato fisicamente dal database.
* PostCondition:
* Un messaggio di errore viene visualizzato all'utente per segnalare che il tipo bollo è
* inesistente
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale di cui si verifica la correttezza
*/
private void verificaTipoBollo(UserContext userContext, ReversaleBulk reversale) throws it.cnr.jada.persistency.PersistencyException, ComponentException {
if (reversale instanceof ReversaleIBulk) {
Tipo_bolloBulk bollo;
boolean found = false;
for (Iterator i = ((ReversaleIBulk) reversale).getTipoBolloOptions().iterator(); i.hasNext(); ) {
bollo = (Tipo_bolloBulk) i.next();
if (bollo.getCd_tipo_bollo().equals(reversale.getReversale_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(reversale.getReversale_terzo().getTipoBollo());
if (bollo == null)
throw new ApplicationException(" Tipo bollo inesistente");
else
((ReversaleIBulk) reversale).getTipoBolloOptions().add(bollo);
}
}
}
/**
* creazione legame Riga Reversale/Codici SIOPE
* PreCondition:
* E' stata generata la richiesta di caricare in automatico i codici SIOPE alla riga della reversale
* per l'importo complessivo
* PostCondition:
* Se esiste un unico Codice SIOPE associabile alla riga della reversale viene creata una nuova
* istanza di Reversale_siopeBulk per l'importo complessivo della riga della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga reversale da aggiornare
* @return riga Reversale_rigaBulk la riga reversale aggiornata
*/
private Reversale_rigaBulk aggiornaLegameSIOPE(UserContext userContext, Reversale_rigaBulk riga) throws ComponentException {
try {
if (riga.getReversale().isRequiredSiope()) {
Reversale_rigaHome reversale_rigaHome = (Reversale_rigaHome) getHome(userContext, Reversale_rigaBulk.class);
if (riga.isToBeCreated() || reversale_rigaHome.findCodiciCollegatiSIOPE(userContext, riga).isEmpty()) {
BulkList list = new BulkList(reversale_rigaHome.findCodiciCollegabiliSIOPE(userContext, riga));
if (list.size() == 1) {
Reversale_siopeIBulk reversale_siope = new Reversale_siopeIBulk();
reversale_siope.setCodice_siope((Codici_siopeBulk) list.get(0));
reversale_siope.setImporto(riga.getIm_reversale_riga());
reversale_siope.setToBeCreated();
riga.addToReversale_siopeColl(reversale_siope);
}
}
}
return riga;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* caricamento codici SIOPE collegabili alla riga della reversale
* PreCondition:
* E' stata generata la richiesta di caricare in automatico i codici SIOPE da proporre per l'associazione
* alla riga della reversale
* PostCondition:
* Vengono caricati i codici SIOPE disponibili per l'associazione della riga della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga reversale da aggiornare
* @return riga Reversale_rigaBulk la riga reversale aggiornata
*/
private Reversale_rigaBulk setCodiciSIOPECollegabili(UserContext userContext, Reversale_rigaBulk riga) throws ComponentException {
try {
Reversale_rigaHome reversale_rigaHome = (Reversale_rigaHome) getHome(userContext, Reversale_rigaBulk.class);
Collection codiciCollegatiSIOPE;
if (riga.getReversale_siopeColl().isEmpty() && !riga.isToBeCreated())
codiciCollegatiSIOPE = reversale_rigaHome.findCodiciCollegatiSIOPE(userContext, riga);
else
codiciCollegatiSIOPE = riga.getReversale_siopeColl();
boolean trovato = false;
riga.setCodici_siopeColl(new BulkList());
for (java.util.Iterator collegabile = reversale_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(); ) {
Reversale_siopeBulk codiceCollegato = (Reversale_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 reversale non corrisponde con l'importo della riga stessa
* PreCondition:
* E' stata generata la richiesta di verificare che la riga della reversale sia associata completamente a codici SIOPE
* PostCondition:
* Ritorna TRUE se la riga della reversale è associata completamente a codici SIOPE
*
* @param userContext lo UserContext che ha generato la richiesta
* @param riga Reversale_rigaBulk la riga reversale da controllare
* @return Boolean
*/
private java.lang.Boolean isCollegamentoSiopeCompleto(UserContext userContext, Reversale_rigaBulk riga) throws ComponentException {
try {
Reversale_rigaHome reversale_rigaHome = (Reversale_rigaHome) getHome(userContext, riga);
BigDecimal totaleSiope = Utility.ZERO;
for (java.util.Iterator collegati = reversale_rigaHome.findCodiciCollegatiSIOPE(userContext, riga).iterator(); collegati.hasNext(); )
totaleSiope = totaleSiope.add(((Reversale_siopeBulk) collegati.next()).getImporto());
return new Boolean(totaleSiope.compareTo(riga.getIm_reversale_riga()) == 0);
} catch (Exception e) {
throw handleException(e);
}
}
/**
* Ritorna true se il totale SIOPE associato alla reversale non corrisponde con l'importo della reversale stessa
* PreCondition:
* E' stata generata la richiesta di verificare che la reversale sia associata completamente a codici SIOPE
* PostCondition:
* Viene verificato che tutte le righe della reversale siano associate a codici SIOPE.
* Ritorna TRUE se tutte le righe della reversale sono associate completamente a codici SIOPE
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da controllare
* @return Boolean
*/
public java.lang.Boolean isCollegamentoSiopeCompleto(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
try {
ReversaleHome reversaleHome = (ReversaleHome) getHome(userContext, reversale.getClass());
reversale = (ReversaleBulk) reversaleHome.findByPrimaryKey(reversale);
if (reversale.isRequiredSiope()) {
for (Iterator i = reversaleHome.findReversale_riga(userContext, reversale).iterator(); i.hasNext(); ) {
if (!this.isCollegamentoSiopeCompleto(userContext, (Reversale_rigaBulk) i.next()))
return Boolean.FALSE;
}
}
return Boolean.TRUE;
} catch (Exception e) {
throw handleException(e);
}
}
/**
* caricamento codici SIOPE collegabili a tutte le righe della reversale
* PreCondition:
* E' stata generata la richiesta di caricare in automatico i codici SIOPE da proporre per l'associazione
* alle righe della reversale
* PostCondition:
* Vengono caricati i codici SIOPE disponibili per l'associazione sulla righe della reversale
*
* @param userContext lo UserContext che ha generato la richiesta
* @param reversale ReversaleBulk la reversale da aggiornare
* @return riga ReversaleBulk la reversale aggiornata
*/
public ReversaleBulk setCodiciSIOPECollegabili(UserContext userContext, ReversaleBulk reversale) throws ComponentException {
for (Iterator i = reversale.getReversale_rigaColl().iterator(); i.hasNext(); )
setCodiciSIOPECollegabili(userContext, (Reversale_rigaBulk) i.next());
return reversale;
}
public SQLBuilder selectCupByClause(UserContext userContext, ReversaleCupIBulk reversale, 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 java.sql.Timestamp getFirstDayOfYear(int year) {
java.util.Calendar calendar = java.util.GregorianCalendar.getInstance();
calendar.set(java.util.Calendar.DAY_OF_MONTH, 1);
calendar.set(java.util.Calendar.MONTH, 0);
calendar.set(java.util.Calendar.YEAR, year);
calendar.set(java.util.Calendar.HOUR, 0);
calendar.set(java.util.Calendar.MINUTE, 0);
calendar.set(java.util.Calendar.SECOND, 0);
calendar.set(java.util.Calendar.MILLISECOND, 0);
calendar.set(java.util.Calendar.AM_PM, java.util.Calendar.AM);
return new java.sql.Timestamp(calendar.getTime().getTime());
}
public SQLBuilder selectCupByClause(UserContext userContext, ReversaleSiopeCupIBulk 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;
}
public byte[] lanciaStampa(UserContext userContext, String cds, Integer esercizio, Long pgReversale)
throws PersistencyException, ComponentException, RemoteException, javax.ejb.EJBException, ParseException {
ReversaleIHome home = (ReversaleIHome) getHome(userContext, ReversaleIBulk.class);
SQLBuilder sql = home.createSQLBuilder();
String cdsEnte = "999";
String tipoReversaleSospeso = "S"; // S = Sospeso. Reversale a regolamento di sospeso
String statoIncassato = "P"; // P = Incassata. La reversale risulta incassata
sql.addSQLClause("AND", "ESERCIZIO", SQLBuilder.EQUALS, esercizio);
sql.addSQLClause("AND", "CD_CDS", SQLBuilder.EQUALS, cdsEnte);
sql.addSQLClause("AND", "PG_REVERSALE", SQLBuilder.EQUALS, pgReversale);
sql.addSQLClause("AND", "CD_CDS_ORIGINE", SQLBuilder.EQUALS, cds);
sql.addSQLClause("AND", "TI_REVERSALE", SQLBuilder.EQUALS, tipoReversaleSospeso);
sql.addSQLClause("AND", "STATO", SQLBuilder.EQUALS, statoIncassato);
java.util.List list = home.fetchAll(sql);
if (list.isEmpty())
throw new FatturaNonTrovataException("Reversale non trovata");
try {
java.sql.Timestamp dataInizio = getFirstDayOfYear(esercizio);
Timestamp dataFine = getLastDayOfYear(esercizio);
File output = new File(System.getProperty("tmp.dir.SIGLAWeb") + "/tmp/", File.separator + getOutputFileName("vpg_reversale.jasper", cds, esercizio, pgReversale));
Print_spoolerBulk print = new Print_spoolerBulk();
Print_spooler_paramBulk printparam = new Print_spooler_paramBulk();
print.setPgStampa(UUID.randomUUID().getLeastSignificantBits());
print.setFlEmail(false);
print.setReport("/doccont/doccont/vpg_reversale.jasper");
print.setNomeFile(getOutputFileName("vpg_reversale.jasper", cds, esercizio, pgReversale));
print.setUtcr(userContext.getUser());
print.addParam("aCd_cds", cdsEnte, String.class);
print.addParam("aEs", esercizio, Integer.class);
print.addParam("aPg_da", pgReversale, Long.class);
print.addParam("aPg_a", pgReversale, Long.class);
printparam = new Print_spooler_paramBulk();
printparam.setNomeParam("aDt_da");
printparam.setValoreParam(new SimpleDateFormat("yyyy/MM/dd").format(dataInizio));
printparam.setParamType("java.util.Date");
print.addParam(printparam);
printparam = new Print_spooler_paramBulk();
printparam.setNomeParam("aDt_a");
printparam.setValoreParam(new SimpleDateFormat("yyyy/MM/dd").format(dataFine));
printparam.setParamType("java.util.Date");
print.addParam(printparam);
print.addParam("aCd_terzo", "%", String.class);
Report report = SpringUtil.getBean("printService", PrintService.class).executeReport(userContext, print);
FileOutputStream f = new FileOutputStream(output);
f.write(report.getBytes());
f.flush();
f.close();
return report.getBytes();
} catch (IOException e) {
throw new GenerazioneReportException("Generazione Stampa non riuscita", e);
}
}
private String getOutputFileName(String reportName, String cds, Integer esercizio, Long pgReversale) {
String fileName = reportName;
fileName = fileName.replace('/', '_');
fileName = fileName.replace('\\', '_');
if (fileName.startsWith("_"))
fileName = fileName.substring(1);
if (fileName.endsWith(".jasper"))
fileName = fileName.substring(0, fileName.length() - 7);
fileName = fileName + ".pdf";
fileName = PDF_DATE_FORMAT.format(new java.util.Date()) + '_' + fileName + '_' + esercizio + '_' + cds + '_' + pgReversale;
return fileName;
}
public String isAnnullabile(
UserContext userContext, ReversaleBulk reversale)
throws ComponentException {
try {
Parametri_cnrBulk parametriCnr = (Parametri_cnrBulk) getHome(userContext, Parametri_cnrBulk.class).findByPrimaryKey(new Parametri_cnrBulk(reversale.getEsercizio()));
if (parametriCnr.getFl_tesoreria_unica()) {
UtenteBulk utente = (UtenteBulk) (getHome(userContext, UtenteBulk.class).findByPrimaryKey(new UtenteBulk(CNRUserContext.getUser(userContext))));
if (reversale.getStato_trasmissione().compareTo(ReversaleBulk.STATO_TRASMISSIONE_NON_INSERITO) == 0)
return "S";
else if (reversale.getStato_trasmissione().compareTo(ReversaleBulk.STATO_TRASMISSIONE_TRASMESSO) == 0 &&
utente.isSupervisore()) {
return "F";
} else
return "N";
}
return "S";
} catch (Exception e) {
throw handleException(e);
}
}
@Override
public ReversaleBulk annullaReversale(UserContext userContext,
ReversaleBulk reversale, boolean annullaCollegati)
throws ComponentException {
try {
return annullaReversale(userContext, reversale, annullaCollegati, false);
} catch (Exception e) {
throw handleException(reversale, e);
}
}
public SQLBuilder selectV_man_revByClause(UserContext userContext, ReversaleBulk 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_REV);
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, bulk.getEsercizio());
//sql.addClause( "AND", "cd_cds", sql.EQUALS, bulk.getCd_cds() );
sql.addClause("AND", "cd_uo_origine", SQLBuilder.EQUALS, ((CNRUserContext) userContext).getCd_unita_organizzativa());
sql.addClause("AND", "ti_documento_cont", SQLBuilder.NOT_EQUALS, ReversaleBulk.TIPO_REGOLARIZZAZIONE);
sql.addClause("AND", "stato", SQLBuilder.EQUALS, ReversaleBulk.STATO_REVERSALE_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, ReversaleIBulk.class).createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, esercizio);
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, cds);
sql.addClause("AND", "stato", SQLBuilder.EQUALS, ReversaleBulk.STATO_REVERSALE_ANNULLATO);
sql.addSQLClause("AND", "pg_reversale_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 isReversaleCollegataAnnullodaRiemettere(UserContext userContext,
ReversaleBulk reversale) throws ComponentException {
try {
SQLBuilder sql = getHome(userContext, ReversaleIBulk.class).createSQLBuilder();
sql.addClause("AND", "esercizio", SQLBuilder.EQUALS, reversale.getEsercizio());
sql.addClause("AND", "cd_cds_origine", SQLBuilder.EQUALS, reversale.getCd_cds_origine());
sql.addClause("AND", "stato", SQLBuilder.EQUALS, ReversaleBulk.STATO_REVERSALE_ANNULLATO);
sql.addSQLClause("AND", "pg_reversale_riemissione", SQLBuilder.EQUALS, reversale.getPg_reversale());
sql.addClause(FindClause.AND, "fl_riemissione", SQLBuilder.EQUALS, true);
sql.addClause("AND", "stato_trasmissione_annullo", SQLBuilder.NOT_EQUALS, ReversaleBulk.STATO_TRASMISSIONE_TRASMESSO);
if (sql.executeCountQuery(getConnection(userContext)) > 0)
return Boolean.TRUE;
else
return Boolean.FALSE;
} catch (Exception e) {
throw handleException(e);
}
}
}