it.cnr.contab.doccont00.comp.MandatoAutomaticoComponent 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 .
*/
/*
* Created on Mar 30, 2006
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package it.cnr.contab.doccont00.comp;
import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.BancaBulk;
import it.cnr.contab.anagraf00.core.bulk.Modalita_pagamentoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.anagraf00.core.bulk.V_anagrafico_terzoBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.sto.bulk.CdsBulk;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
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.tabrif.bulk.DivisaBulk;
import it.cnr.contab.doccont00.core.bulk.MandatoAutomaticoWizardHome;
import it.cnr.contab.doccont00.core.bulk.MandatoAutomaticoWizardBulk;
import it.cnr.contab.doccont00.core.bulk.MandatoBulk;
import it.cnr.contab.doccont00.core.bulk.MandatoIBulk;
import it.cnr.contab.doccont00.core.bulk.Mandato_rigaBulk;
import it.cnr.contab.doccont00.core.bulk.Mandato_rigaIBulk;
import it.cnr.contab.doccont00.core.bulk.Mandato_terzoBulk;
import it.cnr.contab.doccont00.core.bulk.Mandato_terzoIBulk;
import it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioHome;
import it.cnr.contab.doccont00.core.bulk.V_doc_passivo_obbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.V_doc_passivo_obbligazione_wizardBulk;
import it.cnr.contab.doccont00.core.bulk.V_obbligazioneBulk;
import it.cnr.contab.doccont00.ejb.ObbligazioneComponentSession;
import it.cnr.contab.doccont00.ejb.SaldoComponentSession;
import it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloBulk;
import it.cnr.contab.doccont00.tabrif.bulk.Tipo_bolloHome;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.persistency.sql.SQLBuilder;
import it.cnr.jada.util.ejb.EJBCommonServices;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class MandatoAutomaticoComponent extends MandatoComponent {
/**
* Crea la ComponentSession da usare per effettuare le operazioni sulle Obbligazioni
*
* @return ObbligazioneComponentSession l'istanza di ObbligazioneComponentSession che serve per
* effettuare le operazioni sulle Obbligazioni
*/
private ObbligazioneComponentSession createObbligazioneComponentSession() throws ComponentException
{
try
{
return (ObbligazioneComponentSession)EJBCommonServices.createEJB("CNRDOCCONT00_EJB_ObbligazioneComponentSession");
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione mandato
* PreCondition:
* E' stata generata la richiesta di creazione un Mandato Automatico da impegni e il mandato supera la validazione
* (metodo verificaMandato)
* PostCondition:
* Vengono aggiornati gli importi dei sospesi eventualmente associati al mandato (metodo aggiornaImportoSospesi),
* vengono aggiornati gli importi associati a documenti contabili di tutte le scadenze di obbligazioni specificate
* nelle righe del mandato (metodo aggiornaImportoObbligazione), vengo aggiornati i saldi relativi ai capitoli di spesa
* (metodo aggiornaStatoFattura), vengono aggiornati gli stati delle fatture specificate nelle righe dei mandati
* (metodo aggiornaCapitoloSaldoRiga)
* creazione mandato automatico da impegno di competenza
* PreCondition:
* E' stata generata la richiesta di creazione un Mandato automatico e l'utente ha selezionato solo
* impegni di competenza
* PostCondition:
* Viene richiesto alla Component che gestisce i documenti amministrativi generici di creare un documento
* generico di spesa (di tipo GENERICO_S) con tante righe quanti sono gli impegni selezionati dall'utente,
* viene creato un mandato di tipo competenza con tante righe (metodo creaMandatoRiga)
* quanti sono gli impegni selezionati dall'utente. Con il metodo 'aggiornaImportoObbligazione'
* vengono incrementati gli importi (im_associato_doc_contabili)
* degli impegni selezionati con l'importo trasferito nel mandato. Con il metodo 'aggiornaCapitoloSaldoRiga' vengono aggiornati i saldi relativi ai
* capitoli di competenza degli impegni selezionati.
* creazione mandato automatico da impegno residuo
* PreCondition:
* E' stata generata la richiesta di creazione un Mandato automatico e l'utente ha selezionato solo
* impegni residui
* PostCondition:
* Viene richiesto alla Component che gestisce i documenti amministrativi generici di creare un documento
* generico di spesa (di tipo GENERICO_S) con tante righe quanti sono gli impegni selezionati dall'utente,
* viene creato un mandato di tipo residuo con tante righe (metodo creaMandatoRiga)
* quanti sono gli impegni selezionati dall'utente. Con il metodo 'aggiornaImportoObbligazione'
* vengono incrementati gli importi (im_associato_doc_contabili)
* degli impegni selezionati con l'importo trasferito nel mandato. Con il metodo 'aggiornaCapitoloSaldoRiga' vengono aggiornati i saldi relativi ai
* capitoli residui degli impegni selezionati.
* creazione di 2 mandati di trasferimento residuo+competenza
* PreCondition:
* E' stata generata la richiesta di creazione un Mandato di trasferimento e l'utente ha selezionato sia
* impegni residui che di competenza
* PostCondition:
* Vengono creati 2 mandati uno di competenza e uno residuo e sono da considerarsi valide entrambe le
* postconditions: 'creazione mandato di trasferimento residuo' e 'creazione mandato di trasferimento competenza'
*
* @param userContext lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da creare
*
* @return wizard il Mandato Automatico creato
*/
public OggettoBulk creaMandatoAutomatico (UserContext userContext,OggettoBulk bulk) throws ComponentException
{
MandatoAutomaticoWizardBulk wizard = (MandatoAutomaticoWizardBulk) bulk;
if (wizard.isAutomatismoDaImpegni())
return creaMandatoAutomaticoDaImpegni(userContext, wizard, wizard.getImpegniSelezionatiColl());
else if (wizard.isAutomatismoDaDocumentiPassivi())
return creaMandatoAutomaticoDaDocPassivi(userContext, wizard, wizard.getDocPassiviSelezionatiColl());
return bulk;
}
private OggettoBulk creaMandatoAutomaticoDaImpegni (UserContext userContext, MandatoAutomaticoWizardBulk wizard, java.util.Collection impegniColl) throws ComponentException
{
try
{
MandatoBulk mandatoCompetenza = null, mandatoResiduo = null;
Documento_genericoBulk docCompetenza = null, docResiduo = null;
Mandato_rigaBulk mRiga;
V_obbligazioneBulk impegno;
SaldoComponentSession session = createSaldoComponentSession();
for ( Iterator i = impegniColl.iterator(); i.hasNext(); )
{
impegno = (V_obbligazioneBulk) i.next();
Obbligazione_scadenzarioBulk os = (Obbligazione_scadenzarioBulk)
((Obbligazione_scadenzarioHome)getHome(userContext,Obbligazione_scadenzarioBulk.class)).findAndLock(new Obbligazione_scadenzarioBulk(impegno.getCd_cds(), impegno.getEsercizio(), impegno.getEsercizio_originale(), impegno.getPg_obbligazione(), impegno.getPg_obbligazione_scadenzario()));
if (os.getIm_scadenza().compareTo(impegno.getIm_scadenza())!=0 ||
os.getIm_associato_doc_amm().compareTo(impegno.getIm_associato_doc_amm())!= 0 ||
os.getIm_associato_doc_contabile().compareTo(impegno.getIm_associato_doc_contabile()) !=0 )
throw new ApplicationException("Operazione non possibile! E' stata utilizzata da un altro utente la scadenza nr." + impegno.getPg_obbligazione_scadenzario() + " dell'impegno " + impegno.getEsercizio_originale() + "/" + impegno.getPg_obbligazione());
if (impegno.getIm_disponibile().compareTo(impegno.getIm_da_trasferire())>0) {
createObbligazioneComponentSession().sdoppiaScadenzaInAutomatico( userContext, os, impegno.getIm_da_trasferire() );
}
if ( impegno.isCompetenza())
{
if (mandatoCompetenza == null )
{
mandatoCompetenza = creaMandatoAutomatico( userContext, wizard, mandatoCompetenza.TIPO_COMPETENZA );
mandatoCompetenza.setMandato_terzo( creaMandatoTerzo( userContext, mandatoCompetenza, wizard.getMandato_terzo().getTerzo(), wizard.getMandato_terzo().getTipoBollo() ) );
docCompetenza = docGenerico_creaDocumentoGenerico( userContext, wizard, mandatoCompetenza );
}
mRiga = creaMandatoRiga( userContext, wizard, mandatoCompetenza, impegno, docCompetenza);
}
else //residuo
{
if (mandatoResiduo == null )
{
mandatoResiduo = creaMandatoAutomatico( userContext, wizard, mandatoResiduo.TIPO_RESIDUO);
mandatoResiduo.setMandato_terzo( creaMandatoTerzo( userContext, mandatoResiduo, wizard.getMandato_terzo().getTerzo(), wizard.getMandato_terzo().getTipoBollo() ) );
docResiduo = docGenerico_creaDocumentoGenerico( userContext, wizard, mandatoResiduo );
}
mRiga = creaMandatoRiga( userContext, wizard, mandatoResiduo , impegno, docResiduo);
}
aggiornaCapitoloSaldoRiga( userContext, mRiga, session );
}
if ( mandatoCompetenza != null )
{
mandatoCompetenza.refreshImporto();
verificaMandato( userContext, mandatoCompetenza );
aggiornaImportoObbligazioni(userContext, mandatoCompetenza );
super.creaConBulk( userContext, mandatoCompetenza);
aggiornaStatoFattura( userContext, mandatoCompetenza, INSERIMENTO_MANDATO_ACTION );
wizard.getMandatiColl().add( mandatoCompetenza );
}
if ( mandatoResiduo != null )
{
mandatoResiduo.refreshImporto();
verificaMandato( userContext, mandatoResiduo );
aggiornaImportoObbligazioni(userContext, mandatoResiduo );
super.creaConBulk( userContext, mandatoResiduo);
aggiornaStatoFattura( userContext, mandatoResiduo, INSERIMENTO_MANDATO_ACTION );
wizard.getMandatiColl().add( mandatoResiduo );
}
return wizard;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
private OggettoBulk creaMandatoAutomaticoDaDocPassivi(UserContext userContext, MandatoAutomaticoWizardBulk wizard, java.util.Collection docPassiviColl) throws ComponentException
{
try
{
MandatoBulk mandatoCompetenza = null, mandatoResiduo = null;
Mandato_rigaBulk mRiga;
V_doc_passivo_obbligazione_wizardBulk docPassivo = null, docTerzo = null;
List docPassiviCompetenzaColl = new ArrayList();
List docPassiviResiduiColl = new ArrayList();
List docTerziSelezionatiColl = new ArrayList();
SaldoComponentSession session = createSaldoComponentSession();
boolean trovato = false;
for ( Iterator i = docPassiviColl.iterator(); i.hasNext(); )
{
docPassivo = (V_doc_passivo_obbligazione_wizardBulk)i.next();
trovato = false;
for ( Iterator j = docTerziSelezionatiColl.iterator(); j.hasNext(); )
{
docTerzo = (V_doc_passivo_obbligazione_wizardBulk)j.next();
if (docTerzo.getCd_terzo().equals(docPassivo.getCd_terzo()) &&
docTerzo.getCd_modalita_pag().equals(docPassivo.getCd_modalita_pag()) &&
docTerzo.getPg_banca().equals(docPassivo.getPg_banca()))
{
trovato = true;
break;
}
}
if (!trovato)
{
docTerziSelezionatiColl.add(docPassivo);
}
}
for ( Iterator i = docTerziSelezionatiColl.iterator(); i.hasNext(); ) {
docTerzo = (V_doc_passivo_obbligazione_wizardBulk)i.next();
docPassiviCompetenzaColl.clear();
docPassiviResiduiColl.clear();
mandatoCompetenza = null;
mandatoResiduo = null;
for ( Iterator j = docPassiviColl.iterator(); j.hasNext(); )
{
docPassivo = (V_doc_passivo_obbligazione_wizardBulk) j.next();
if (docPassivo.getCd_terzo().equals(docTerzo.getCd_terzo()) &&
docPassivo.getCd_modalita_pag().equals(docTerzo.getCd_modalita_pag()) &&
docPassivo.getPg_banca().equals(docTerzo.getPg_banca()))
{
Obbligazione_scadenzarioBulk os = (Obbligazione_scadenzarioBulk)
((Obbligazione_scadenzarioHome)getHome(userContext,Obbligazione_scadenzarioBulk.class)).findAndLock(new Obbligazione_scadenzarioBulk(docPassivo.getCd_cds(), docPassivo.getEsercizio(), docPassivo.getEsercizio_ori_obbligazione(), docPassivo.getPg_obbligazione(), docPassivo.getPg_obbligazione_scadenzario()));
if (os.getIm_scadenza().compareTo(docPassivo.getIm_scadenza())!=0 ||
os.getIm_associato_doc_contabile().compareTo(docPassivo.getIm_associato_doc_contabile()) !=0 )
throw new ApplicationException("Operazione non possibile! E' stata utilizzata da un altro utente la scadenza nr." + docPassivo.getPg_obbligazione_scadenzario() + " dell'impegno " + docPassivo.getEsercizio_ori_obbligazione() + "/" + docPassivo.getPg_obbligazione());
if ( docPassivo.isCompetenza())
docPassiviCompetenzaColl.add(docPassivo);
else
docPassiviResiduiColl.add(docPassivo);
}
}
if ( !docPassiviCompetenzaColl.isEmpty() )
{
mandatoCompetenza = creaMandatoAutomatico( userContext, wizard, mandatoCompetenza.TIPO_COMPETENZA );
mandatoCompetenza.setMandato_terzo( creaMandatoTerzo( userContext, mandatoCompetenza, cercaTerzo(userContext, docPassivo.getCd_terzo()), wizard.getMandato_terzo().getTipoBollo() ) );
mandatoCompetenza = aggiungiDocPassivi(userContext, mandatoCompetenza, docPassiviCompetenzaColl );
}
if ( !docPassiviResiduiColl.isEmpty() )
{
mandatoResiduo = creaMandatoAutomatico( userContext, wizard, mandatoResiduo.TIPO_RESIDUO );
mandatoResiduo.setMandato_terzo( creaMandatoTerzo( userContext, mandatoResiduo, cercaTerzo(userContext, docPassivo.getCd_terzo()), wizard.getMandato_terzo().getTipoBollo() ) );
mandatoResiduo = aggiungiDocPassivi(userContext, mandatoResiduo, docPassiviResiduiColl );
}
if ( mandatoCompetenza != null )
{
mandatoCompetenza.refreshImporto();
verificaMandato( userContext, mandatoCompetenza );
aggiornaImportoObbligazioni(userContext, mandatoCompetenza );
super.creaConBulk( userContext, mandatoCompetenza);
aggiornaStatoFattura( userContext, mandatoCompetenza, INSERIMENTO_MANDATO_ACTION );
wizard.getMandatiColl().add( mandatoCompetenza );
}
if ( mandatoResiduo != null )
{
mandatoResiduo.refreshImporto();
verificaMandato( userContext, mandatoResiduo );
aggiornaImportoObbligazioni(userContext, mandatoResiduo );
super.creaConBulk( userContext, mandatoResiduo);
aggiornaStatoFattura( userContext, mandatoResiduo, INSERIMENTO_MANDATO_ACTION );
wizard.getMandatiColl().add( mandatoResiduo );
}
}
return wizard;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione mandato automatico da impegno
* PreCondition:
* E' stata generata la richiesta di creazione un Mandato di accreditamento
* PostCondition:
* Viene creato un mandato di tipo Accreditamento con CDS/UO = Ente e CDS/UO origine = CDS/UO di scrivania.
* Viene creato un mandatoTerzo coi dati relativi al terzo CDS verso cui il mandato e' emesso
*
* @param userContext lo UserContext che ha generato la richiesta
* @param wizard MandatoAccreditamentoWizardBulk il mandato di accreditamento
* @param ti_competenza_residuo tipologia (competenza/residuo) del mandato da creare
*
* @return mandato MandatoAccreditamentoBulk il mandato di regolarizzazione creato
*/
private MandatoBulk creaMandatoAutomatico (UserContext userContext, MandatoAutomaticoWizardBulk wizard, String ti_competenza_residuo ) throws ComponentException
{
try
{
MandatoIBulk mandato = new MandatoIBulk();
mandato.setToBeCreated();
mandato.setUser( wizard.getUser() );
mandato.setEsercizio( wizard.getEsercizio());
mandato.setCds( wizard.getCds());
mandato.setUnita_organizzativa( wizard.getUnita_organizzativa());
mandato.setCd_cds_origine( ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getCd_cds());
mandato.setCd_uo_origine( ((it.cnr.contab.utenze00.bp.CNRUserContext)userContext).getCd_unita_organizzativa());
mandato.setStato( wizard.STATO_MANDATO_EMESSO);
mandato.setDt_emissione( wizard.getDt_emissione());
mandato.setIm_mandato(new BigDecimal(0));
mandato.setIm_pagato(new BigDecimal(0));
if (wizard.isAutomatismoDaImpegni())
mandato.setDs_mandato("Mandato automatico da impegno");
else
mandato.setDs_mandato("Mandato automatico da documenti passivi");
mandato.setTi_mandato(wizard.TIPO_PAGAMENTO);
mandato.setCd_tipo_documento_cont( Numerazione_doc_contBulk.TIPO_MAN);
mandato.setTi_competenza_residuo( ti_competenza_residuo );
mandato.setStato_trasmissione( wizard.STATO_TRASMISSIONE_NON_INSERITO);
mandato.setStato_coge( wizard.STATO_COGE_N);
mandato.setIm_ritenute( new java.math.BigDecimal(0));
return mandato;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione riga di mandato da Mandato automatico da impegni
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di Mandato
* PostCondition:
* Viene creata una riga di mandato coi dati relativi all'impegno selezionato dall'utente e
* al documento generico di spesa (GENERICO_S) creato in automatico alla crezione del mandato
*
* @param userContext lo UserContext che ha generato la richiesta
* @param wizard MandatoAutomaticoBulk il mandato di accreditamento
* @param mandato MandatoBulk il mandato
* @param impegno V_obbligazioneBulk l'impegno selezionato dall'utente
* @param documento Documento_genericoBulk il documento generico di spesa
*
* @return riga Mandato_rigaBulk la riga di mandato creata
*/
private Mandato_rigaBulk creaMandatoRiga (UserContext userContext, MandatoAutomaticoWizardBulk wizard, MandatoBulk mandato, V_obbligazioneBulk impegno, Documento_genericoBulk documento ) throws ComponentException
{
try
{
Mandato_rigaBulk riga = new Mandato_rigaIBulk();
riga.setToBeCreated();
riga.setUser( mandato.getUser() );
riga.setStato( riga.STATO_INIZIALE);
riga.setIm_mandato_riga( impegno.getIm_da_trasferire());
riga.setIm_ritenute_riga( new java.math.BigDecimal(0));
riga.setMandato( mandato );
// riga.setImpegno( impegno );
riga.setFl_pgiro( new Boolean( false));
riga.setEsercizio_obbligazione( impegno.getEsercizio());
riga.setEsercizio_ori_obbligazione( impegno.getEsercizio_originale());
riga.setPg_obbligazione( impegno.getPg_obbligazione());
riga.setPg_obbligazione_scadenzario( impegno.getPg_obbligazione_scadenzario());
riga.setEsercizio_doc_amm( documento.getEsercizio());
riga.setCd_cds_doc_amm( documento.getCd_cds());
riga.setCd_uo_doc_amm( documento.getCd_unita_organizzativa());
riga.setPg_doc_amm( documento.getPg_documento_generico());
riga.setCd_tipo_documento_amm( documento.getCd_tipo_documento_amm());
riga.setPg_ver_rec_doc_amm( documento.getPg_ver_rec());
riga.setBancaOptions( wizard.getBancaOptions());
riga.setBanca( wizard.getBanca());
riga.setModalita_pagamentoOptions( wizard.getModalita_pagamentoOptions());
riga.setModalita_pagamento( wizard.getModalita_pagamento());
mandato.addToMandato_rigaColl( riga );
return riga;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione mandato terzo
* PreCondition:
* E' stata generata la richiesta di creazione di un Mandato_terzoBulk
* PostCondition:
* Viene creata una istanza di Mandato_terzoBulk coi dati del beneficiario del mandato e viene impostato
* il tipo bollo di default.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAutomaticoBulk il mandato
* @param cd_terzo Il codice del beneficiario del mandato
*
* @return mTerzo l'istanza di Mandato_terzoBulk creata
*/
private Mandato_terzoBulk creaMandatoTerzo (UserContext userContext, MandatoBulk mandato, TerzoBulk terzo, Tipo_bolloBulk bollo ) throws ComponentException
{
Mandato_terzoBulk mTerzo = new Mandato_terzoIBulk();
if (!(mandato instanceof MandatoAutomaticoWizardBulk))
mTerzo.setToBeCreated();
mTerzo.setUser( mandato.getUser() );
mTerzo.setMandato( mandato );
//imposto il terzo
mTerzo.setTerzo( terzo );
//imposto il tipo bollo di default
mTerzo.setTipoBollo( bollo );
return mTerzo;
}
private Mandato_terzoBulk creaMandatoTerzo (UserContext userContext, MandatoBulk mandato, TerzoBulk terzo ) throws ComponentException
{
try
{
return creaMandatoTerzo(userContext, mandato, terzo, ((Tipo_bolloHome)getHome( userContext, Tipo_bolloBulk.class )).findTipoBolloDefault(Tipo_bolloBulk.TIPO_SPESA));
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione documento amm.generico per mandato automatico
* PreCondition:
* E' stata generata la richiesta di creazione di un documento generico di spesa di tipo TRASF_S a partire
* da un mandato automatico
* PostCondition:
* Un documento viene creato con un numero di righe pari al numero di impegni selezionati dall'utente di tipo
* uguale al tipo del mandato(competenza o residuo)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAutomaticoWizardBulk il mandato automatico
* @param impegni La collezione di impegni selezionati dall'utente
*
* @return documento Documento_genericoBulk il documento generico di spesa creato
*/
public Documento_genericoBulk docGenerico_creaDocumentoGenerico (UserContext userContext, MandatoAutomaticoWizardBulk wizard, MandatoBulk mandato ) throws ComponentException
{
try
{
V_obbligazioneBulk impegno;
Documento_generico_rigaBulk dRiga;
Documento_genericoBulk documento = new Documento_genericoBulk();
documento.setToBeCreated();
documento.setUser( mandato.getUser() );
documento.setTi_entrate_spese( documento.SPESE );
documento.setEsercizio( mandato.getEsercizio());
documento.setCd_cds( mandato.getCd_cds());
documento.setCd_unita_organizzativa( mandato.getCd_unita_organizzativa());
documento.setCd_cds_origine( mandato.getCd_cds_origine());
documento.setCd_uo_origine( mandato.getCd_uo_origine());
documento.setTipo_documento( new Tipo_documento_ammBulk( Numerazione_doc_ammBulk.TIPO_DOC_GENERICO_S));
documento.setTi_istituz_commerc( wizard.getModelloDocumento().getTi_istituz_commerc());
documento.setStato_cofi( documento.STATO_CONTABILIZZATO );
documento.setStato_coge( documento.NON_REGISTRATO_IN_COGE);
documento.setStato_coan(documento.NON_CONTABILIZZATO_IN_COAN);
documento.setStato_pagamento_fondo_eco( "N");
documento.setTi_associato_manrev("T");
documento.setData_registrazione( mandato.getDt_emissione());
documento.setDt_a_competenza_coge( wizard.getModelloDocumento().getDt_a_competenza_coge() );
documento.setDt_da_competenza_coge( wizard.getModelloDocumento().getDt_da_competenza_coge() );
documento.setDs_documento_generico( "DOCUMENTO ASSOCIATO A MANDATO AUTOMATICO DA IMPEGNO" );
documento.setIm_totale( mandato.getIm_mandato());
DivisaBulk divisa = new DivisaBulk( docGenerico_createConfigurazioneCnrComponentSession().getVal01(userContext, new Integer(0), "*", Configurazione_cnrBulk.PK_CD_DIVISA,Configurazione_cnrBulk.SK_EURO ));
documento.setValuta( divisa );
documento.setCambio( new BigDecimal(1));
for ( Iterator i = wizard.getImpegniSelezionatiColl().iterator(); i.hasNext(); )
{
impegno = (V_obbligazioneBulk) i.next();
if ( impegno.isCompetenza() && mandato.getTi_competenza_residuo().equals( mandato.TIPO_COMPETENZA))
dRiga = docGenerico_creaDocumentoGenericoRiga( userContext, wizard, mandato, documento, impegno );
else if ( !impegno.isCompetenza() && mandato.getTi_competenza_residuo().equals( mandato.TIPO_RESIDUO ))
dRiga = docGenerico_creaDocumentoGenericoRiga( userContext, wizard, mandato, documento, impegno );
}
documento = (Documento_genericoBulk) createDocumentoGenericoComponentSession().creaConBulk( userContext, documento );
// documento.validate();
return documento;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* creazione riga di documento amm.generico di spesa per mandato automatico da impegno
* PreCondition:
* E' stata generata la richiesta di creazione di una riga di documento generico di spesa di tipo TRASF_S
* a partire da un impegno selezionato dall'utente nel mandato di accreditamento
* PostCondition:
* Un riga di documento viene creata con i dati relativi al terzo (codice terzo, coordinate bancarie, modalità di
* pagamento) derivati da quelli che l'utente ha specificato nel mandato e i dati relativi all'importo derivati dall'impegno selezionato
* dall'utente nel mandato; viene inoltre aggiornato l'importo associato ai documenti amministrativi della scadenza di obbligazione
* che rappresenta l'impegno( scadenza.im_associato_doc_amm = scadenza.im_associato_doc_amm + documento_riga.im_riga)
*
* @param userContext lo UserContext che ha generato la richiesta
* @param documento Documento_genericoBulk il documento generico di spesa
* @param impegno V_impegnoBulk l'impegno selezionato dall'utente nel mandato di accreditamento
* @param mandato MandatoAccreditamentoBulk il mandato di accreditamento
*
* @return riga Documento_generico_rigaBulk la riga del documento generico di spesa creata
*/
public Documento_generico_rigaBulk docGenerico_creaDocumentoGenericoRiga (UserContext userContext, MandatoAutomaticoWizardBulk wizard, MandatoBulk mandato, Documento_genericoBulk documento, V_obbligazioneBulk impegno ) 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( riga.STATO_CONTABILIZZATO );
riga.setDt_a_competenza_coge( documento.getData_registrazione());
riga.setDt_da_competenza_coge( documento.getData_registrazione());
riga.setTerzo( wizard.getMandato_terzo().getTerzo()); //CNR
AnagraficoBulk anagrafico = (AnagraficoBulk) getHome( userContext, AnagraficoBulk.class ).findByPrimaryKey( riga.getTerzo().getAnagrafico());
riga.getTerzo().setAnagrafico( anagrafico );
riga.setRagione_sociale( anagrafico.getRagione_sociale());
riga.setNome( anagrafico.getNome());
riga.setCognome( anagrafico.getCognome());
riga.setCodice_fiscale( anagrafico.getCodice_fiscale());
riga.setPartita_iva( anagrafico.getPartita_iva());
riga.setModalita_pagamento( wizard.getModalita_pagamento().getRif_modalita_pagamento());
riga.setBanca( wizard.getBanca());
riga.setIm_riga( impegno.getIm_da_trasferire());
riga.setIm_riga_divisa( impegno.getIm_da_trasferire());
riga.setTi_associato_manrev("T");
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk) getHome( userContext, Obbligazione_scadenzarioBulk.class ).findByPrimaryKey( new Obbligazione_scadenzarioBulk( impegno.getCd_cds(), impegno.getEsercizio(), impegno.getEsercizio_originale(), impegno.getPg_obbligazione(), impegno.getPg_obbligazione_scadenzario()));
getHomeCache(userContext).fetchAll(userContext);
riga.setObbligazione_scadenziario( scadenza );
riga.setDocumento_generico( documento );
documento.getDocumento_generico_dettColl().add( riga );
//aggiorno im_assciato_doc_amm della scadenza
lockBulk( userContext, scadenza.getObbligazione());
scadenza.setIm_associato_doc_amm( scadenza.getIm_associato_doc_amm().add(riga.getIm_riga()));
updateBulk( userContext, scadenza );
return riga;
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* lista le coordinate bancarie
* PreCondition:
* E' stato creata una riga di mandato di trasferimento
* PostCondition:
* La lista delle coordinate bancarie del terzo beneficiario del mandato viene estratta
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAutomaticoWizardBulk il mandato da creare
*
* @return result la lista delle banche definite per il terzo beneficiario del mandato
* null non è stata definita nessuna banca per il terzo beneficiario del mandato
*/
public List findBancaOptions (UserContext userContext,MandatoAutomaticoWizardBulk mandato) throws it.cnr.jada.persistency.PersistencyException, it.cnr.jada.persistency.IntrospectionException, ComponentException
{
if ( mandato.getMandato_terzo() != null )
{
if ( mandato.getModalita_pagamentoOptions() != null && mandato.getModalita_pagamento().getCd_modalita_pag() == null)
mandato.setModalita_pagamento( (Modalita_pagamentoBulk) mandato.getModalita_pagamentoOptions().get(0));
SQLBuilder sql = getHome( userContext, BancaBulk.class ).createSQLBuilder();
sql.addClause( "AND", "cd_terzo", sql.EQUALS, mandato.getMandato_terzo().getCd_terzo() );
sql.addSQLClause("AND", "BANCA.CD_TERZO_DELEGATO", sql.ISNULL, null);
sql.addSQLClause("AND", "BANCA.FL_CANCELLATO", sql.EQUALS, "N");
sql.addOrderBy("FL_CC_CDS DESC");
if (mandato.getModalita_pagamento() != null && mandato.getModalita_pagamento().getCd_modalita_pag() != null )
{
SQLBuilder sql2 = getHome( userContext, Modalita_pagamentoBulk.class ).createSQLBuilder();
sql2.setHeader( "SELECT DISTINCT TI_PAGAMENTO " );
sql2.addTableToHeader( "rif_modalita_pagamento" );
sql2.addSQLClause( "AND" , "modalita_pagamento.cd_terzo", sql.EQUALS, mandato.getMandato_terzo().getCd_terzo() );
sql2.addSQLClause( "AND" , "modalita_pagamento.cd_modalita_pag", sql.EQUALS, mandato.getModalita_pagamento().getCd_modalita_pag() );
sql2.addSQLJoin( "modalita_pagamento.cd_modalita_pag", "rif_modalita_pagamento.cd_modalita_pag" );
sql2.addSQLClause("AND", "MODALITA_PAGAMENTO.CD_TERZO_DELEGATO", sql.ISNULL, null);
sql.addSQLClause( "AND", "TI_PAGAMENTO" , sql.EQUALS, sql2 );
}
List result = getHome( userContext, BancaBulk.class ).fetchAll( sql );
if ( result.size() == 0 )
throw new ApplicationException("Non esistono coordinate bancarie per il terzo " + mandato.getMandato_terzo().getCd_terzo());
return result;
}
else
return null;
}
/**
* lista le modalità di pagamento
* PreCondition:
* E' stato creata una riga di mandato di trasferimento
* PostCondition:
* La lista delle modalità di pagamento del terzo beneficiario, tutte appartenenti alla stessa classe (Bancario/Postale/..) per cui si sta emettendo il mandato,
* viene estratta.Vengono escluse le modalità di pagamento riferite a terzi cessionari
*
* @param userContext lo UserContext che ha generato la richiesta
* @param mandato MandatoAccreditamentoBulk il mandato di trasferimento
*
* @return result la lista delle modalità di pagamento definite per il terzo beneficiario del mandato
* null non è stata definita nessuna modalità di pagamento per il terzo beneficiario del mandato
*/
public List findModalita_pagamentoOptions (UserContext userContext, MandatoAutomaticoWizardBulk mandato) throws it.cnr.jada.persistency.PersistencyException, it.cnr.jada.persistency.IntrospectionException, ComponentException
{
if ( mandato.getMandato_terzo() != null )
{
SQLBuilder sql = getHome( userContext, Modalita_pagamentoBulk.class ).createSQLBuilder();
sql.addTableToHeader( "RIF_MODALITA_PAGAMENTO");
sql.addSQLJoin("MODALITA_PAGAMENTO.CD_MODALITA_PAG","RIF_MODALITA_PAGAMENTO.CD_MODALITA_PAG" );
sql.addClause( "AND", "cd_terzo", sql.EQUALS, mandato.getMandato_terzo().getCd_terzo() );
sql.addClause( "AND", "cd_terzo_delegato", sql.ISNULL, null );
List result = getHome( userContext, Modalita_pagamentoBulk.class ).fetchAll( sql );
if ( result.size() == 0 )
throw new ApplicationException("Non esistono modalità di pagamento per il terzo " + mandato.getMandato_terzo().getCd_terzo());
return result;
}
else
return null;
}
/**
* inizializzazione di una istanza di MandatoBulk
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di MandatoBulk
* PostCondition:
* Viene impostata la data di emissione del mandato con la data del Server
* inizializzazione di una istanza di MandatoAutomaticoWizardBulk
* PreCondition:
* E' stata richiesta l'inizializzazione di una istanza di MandatoAutomaticoWizardBulk, l'oggetto bulk
* utilizzato come wizard per la generazione dei mandati automatici da impegno
* PostCondition:
* Viene impostata la data di emissione del wizard con la data del Server, il Cds e l'UO di appartenenza con
* il Cds e l'UO collegato, il mandato terzo con il codice terzo che corrisponde al codice terzo
* del mandato automatico (metodo creaMandatoTerzo), viene impostata la lista degli impegni
* (metodo listaImpegniCNR) del CNR
*
* @param aUC lo UserContext che ha generato la richiesta
* @param bulk OggettoBulk il mandato da inizializzare per l'inserimento
*
* @return bulk OggettoBulk il Mandato inizializzato per l'inserimento
*
*/
public OggettoBulk inizializzaBulkPerInserimento (UserContext aUC,OggettoBulk bulk) throws ComponentException
{
try
{
MandatoAutomaticoWizardBulk mandato = (MandatoAutomaticoWizardBulk) bulk;
mandato.setCds( (CdsBulk)getHome( aUC, CdsBulk.class).findByPrimaryKey( new CdsBulk(CNRUserContext.getCd_cds(aUC))));
mandato.setUnita_organizzativa( (Unita_organizzativaBulk)getHome( aUC, Unita_organizzativaBulk.class).findByPrimaryKey( new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(aUC))));
bulk = super.inizializzaBulkPerInserimento( aUC, bulk );
return bulk;
}
catch ( Exception e )
{
throw handleException( bulk, e );
}
}
public OggettoBulk inizializzaMappaAutomatismo (UserContext aUC, OggettoBulk bulk) throws ComponentException
{
try
{
MandatoAutomaticoWizardBulk mandato = (MandatoAutomaticoWizardBulk)bulk;
mandato.getMandatiColl().clear();
if (mandato.isAutomatismoDaImpegni()) {
if (mandato.getFind_doc_passivi().getCd_terzo() == null &&
mandato.getFind_doc_passivi().getCd_precedente() == null &&
mandato.getFind_doc_passivi().getCognome() == null &&
mandato.getFind_doc_passivi().getRagione_sociale() == null &&
mandato.getFind_doc_passivi().getNome() == null &&
mandato.getFind_doc_passivi().getPartita_iva() == null &&
mandato.getFind_doc_passivi().getCodice_fiscale() == null)
throw new ApplicationException( "Attenzione! Deve essere specificato almeno un campo dell'anagrafica." );
else
{
mandato.getImpegniSelezionatiColl().clear();
mandato.getImpegniColl().clear();
mandato.setMandato_terzo( creaMandatoTerzo( aUC, mandato, cercaTerzo( aUC, mandato ) ) );
mandato = listaImpegniTerzo( aUC, mandato );
mandato.setModalita_pagamento((Modalita_pagamentoBulk)findModalita_pagamentoOptions( aUC, mandato).get(0));
mandato.setBanca((BancaBulk)findBancaOptions(aUC, mandato).get(0));
mandato.getModelloDocumento().setDt_da_competenza_coge(mandato.getDt_emissione());
mandato.getModelloDocumento().setDt_a_competenza_coge(mandato.getDt_emissione());
initializeKeysAndOptionsInto(aUC, bulk);
}
}
else if (mandato.isAutomatismoDaDocumentiPassivi())
{
mandato.getDocPassiviColl().clear();
/*
* Necessario per caricare il bollo di default
*/
mandato.setMandato_terzo( creaMandatoTerzo( aUC, mandato, null ) );
bulk = listaDocPassivi( aUC, mandato );
}
return bulk;
}
catch ( Exception e )
{
throw handleException( bulk, e );
}
}
/**
* ricerca impegni Terzo
* PreCondition:
* E' stata richiesta la ricerca degli impegni del Terzo per emettere un mandato di pagamento
* PostCondition:
* Vengono ricercati tutti gli impegni che hanno un importo disponibile ( importo disponibile = importo iniziale
* dell'impegno - importo già associato ai documenti contabili) e il cui Terzo sia quello indicato
*
* @param aUC lo UserContext che ha generato la richiesta
* @param mandato MandatoBulk il mandato di pagamento
*
* @return mandato il Mandato automatico emesso dopo la ricerca degli impegni del CNR
*
*/
public MandatoAutomaticoWizardBulk listaImpegniTerzo (UserContext aUC, MandatoAutomaticoWizardBulk mandato) throws ComponentException
{
try
{
Collection result = ((MandatoAutomaticoWizardHome)getHome( aUC, mandato.getClass())).findImpegni( mandato );
mandato.setImpegniColl(result);
int size = mandato.getImpegniColl().size();
if ( size == 0 )
throw new ApplicationException( "La ricerca degli Impegni non ha fornito alcun risultato.");
for ( Iterator i = mandato.getImpegniColl().iterator(); i.hasNext(); )
((V_obbligazioneBulk) i.next()).setNrImpegni(size );
return mandato;
}
catch ( it.cnr.jada.persistency.PersistencyException e )
{
throw handleException( mandato, e );
}
catch ( it.cnr.jada.persistency.IntrospectionException e )
{
throw handleException( mandato, e );
}
}
private TerzoBulk cercaTerzo (UserContext aUC, MandatoAutomaticoWizardBulk wizard) throws ComponentException
{
try
{
Collection result = ((MandatoAutomaticoWizardHome)getHome( aUC, wizard.getClass())).findTerzi( wizard );
if ( result.size() == 0 )
throw new ApplicationException( "La ricerca dei Terzi non ha fornito alcun risultato.");
if ( result.size() > 1 )
throw new ApplicationException( "Esiste piu' di un terzo che soddisfa i criteri di ricerca.");
return (TerzoBulk)getHome( aUC, TerzoBulk.class).findByPrimaryKey( new TerzoBulk(((V_anagrafico_terzoBulk)result.iterator().next()).getCd_terzo()));
}
catch ( it.cnr.jada.persistency.PersistencyException e )
{
throw handleException( wizard, e );
}
catch ( it.cnr.jada.persistency.IntrospectionException e )
{
throw handleException( wizard, e );
}
}
private TerzoBulk cercaTerzo (UserContext aUC, Integer cd_terzo) throws ComponentException
{
try
{
return (TerzoBulk)getHome( aUC, TerzoBulk.class).findByPrimaryKey( new TerzoBulk(cd_terzo));
}
catch ( it.cnr.jada.persistency.PersistencyException e )
{
throw handleException( e );
}
}
protected Mandato_rigaBulk creaMandatoRiga (UserContext userContext, MandatoBulk mandato, V_doc_passivo_obbligazioneBulk docPassivo ) throws ComponentException
{
Mandato_rigaBulk riga = super.creaMandatoRiga(userContext, mandato, docPassivo);
if (docPassivo instanceof V_doc_passivo_obbligazione_wizardBulk)
((V_doc_passivo_obbligazione_wizardBulk)docPassivo).setMandatoRiga(riga);
return riga;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy