it.cnr.contab.missioni00.bp.CRUDAnticipoBP 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.missioni00.bp;
import java.util.Iterator;
import java.util.Vector;
import it.cnr.contab.chiusura00.ejb.RicercaDocContComponentSession;
import it.cnr.contab.doccont00.bp.*;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneResBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.missioni00.ejb.*;
import it.cnr.contab.missioni00.docs.bulk.*;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoSpesaBP;
import it.cnr.contab.docamm00.docs.bulk.IDocumentoAmministrativoBulk;
import it.cnr.contab.docamm00.ejb.*;
import it.cnr.jada.action.*;
import it.cnr.jada.util.action.*;
import it.cnr.jada.util.jsp.Button;
/**
* Insert the type's description here.
* Creation date: (21/05/2002 12.24.28)
* @author: Paola sala
*/
public class CRUDAnticipoBP extends it.cnr.jada.util.action.SimpleCRUDBP implements IDefferedUpdateSaldiBP, IDocumentoAmministrativoSpesaBP, IValidaDocContBP
{
private it.cnr.contab.doccont00.core.bulk.OptionRequestParameter userConfirm = null;
// Variabili usate per la gestione del "RIPORTA" documento ad esercizio precedente/successivo
private boolean annoSolareInScrivania = true;
private boolean riportaAvantiIndietro = false;
private boolean carryingThrough = false;
private boolean ribaltato;
/**
* CRUDAnticipoBP constructor comment.
*/
public CRUDAnticipoBP()
{
this("Tr");
}
/**
* CRUDAnticipoBP constructor comment.
* @param function java.lang.String
*/
public CRUDAnticipoBP(String function)
{
super(function+"Tr");
setTab("tab", "tabAnagrafico"); // Mette il fuoco sul primo TAB
}
/**
* Il metodo gestisce l'abilitazione o meno dei bottoni dell'obbligazione.
* Abilitazione :
* - l'anticipo non deve essere pagato ne' associato a missione ne' rimborsato (isEditable)
* - se l'esercizio di scrivania e quello dell'anticipo sono diversi da quello solare l' obbligazione
* non deve essere stata riportata (isROPerChiusura)
*/
public boolean areBottoniObbligazioneAbilitati()
{
AnticipoBulk anticipo = (AnticipoBulk) getModel();
return (anticipo!=null && anticipo.isEditable() &&
!isSearching() && !isViewing() && !anticipo.isROPerChiusura());
}
/**
* Il metodo stabilisce se il documento da visualizzare deve essere aperto in visualizzazione
* o in modifica.
* Il metodo avvisa l'utente con messaggi che descrivono un particolare stato del documento.
*/
public void basicEdit(it.cnr.jada.action.ActionContext context,it.cnr.jada.bulk.OggettoBulk bulk, boolean doInitializeForEdit) throws it.cnr.jada.action.BusinessProcessException
{
super.basicEdit(context, bulk, doInitializeForEdit);
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(getStatus()!=VIEW && anticipo != null)
{
if(anticipo.isCancellatoLogicamente() || anticipo.isCancellatoLogicamente())
{
setMessage("Anticipo annullato.");
setStatus(VIEW);
return;
}
if(anticipo.isAnticipoConMissione())
setMessage("Anticipo legato a missione.");
if(anticipo.hasRimborso())
setMessage("Anticipo rimborsato. Non consentita la modifica.");
}
}
/**
* Il metodo stabilisce le condizioni generali per cui i bottoni di riporta avanti/indietro
* dell'anticipo o del rimborso non devono essere visualizzati.
* Per l'anticipo NON sono visibili :
* - l'anno di scrivania e' uguale aquello solare (isAnnoSolareInScrivania)
* - se l'esercizio di scrivania e/o quello successivo non sono aperti (isRiportaAvantiIndietro)
* - se l'anticipo e' stato pagato
* - se l'anticipo e' satto cancellato
* Per il rimborso NON sono visibili :
* - l'anno di scrivania e' uguale aquello solare (isAnnoSolareInScrivania)
* - se l'esercizio di scrivania e/o quello successivo non sono aperti (isRiportaAvantiIndietro)
* - se l'anticipo e' satto cancellato
*/
protected boolean basicRiportaButtonHidden()
{
AnticipoBulk anticipo = (AnticipoBulk) getModel();
if(!anticipo.hasRimborso())
return isAnnoSolareInScrivania() || !isRiportaAvantiIndietro() ||
isDeleting() || !isEditing() || anticipo.isPagata() ||
anticipo.isCancellatoLogicamente() || anticipo.isAnnullato();
return isAnnoSolareInScrivania() || !isRiportaAvantiIndietro() ||
isDeleting() || !isEditing() || anticipo.isCancellatoLogicamente() || anticipo.isAnnullato();
}
/**
* Il metodo gestisce la creazione del Rimborso previo salvataggio dell'anticipo
*/
public void creaRimborsoCompleto(it.cnr.jada.action.ActionContext context) throws it.cnr.jada.action.BusinessProcessException
{
try
{
completeSearchTools(context,this);
validate(context);
saveChildren(context);
update(context);
((AnticipoComponentSession)createComponentSession()).creaRimborsoCompleto(context.getUserContext(),(AnticipoBulk)getModel());
setMessage("Creazione rimborso eseguita in modo corretto.");
commitUserTransaction();
try
{
basicEdit(context,getModel(),true);
} catch (BusinessProcessException e)
{
setModel(context,null);
setDirty(false);
throw e;
}
}
catch ( Exception e )
{
throw handleException( e ) ;
}
}
/**
* Il metodo gestisce l'operazione di CREATE.
* Tale metodo e' stato reimplementato per gestire il passaggio dei parametri dei saldi per il doc contabile
* una volta che l'utente ha deciso di eseguire lo sfondamento di cassa.
* Vedi action metodo 'onCheckDisponibiltaDiCassaFailed'
*/
public void create(it.cnr.jada.action.ActionContext context) throws it.cnr.jada.action.BusinessProcessException
{
try
{
getModel().setToBeCreated();
setModel(
context,
((AnticipoComponentSession)createComponentSession()).creaConBulk(
context.getUserContext(),
getModel(),
getUserConfirm()));
setUserConfirm(null);
}
catch(Throwable e)
{
throw handleException(e);
}
}
/**
* Il metodo aggiunge alla normale toolbar del CRUD i bottoni di "crea rimborso" e "riporto avanti/indietro".
*/
protected it.cnr.jada.util.jsp.Button[] createToolbar()
{
Button[] toolbar = super.createToolbar();
Button[] newToolbar = new Button[ toolbar.length + 3];
int i;
for ( i = 0; i < toolbar.length; i++ )
newToolbar[i] = toolbar[i];
newToolbar[ i ] = new it.cnr.jada.util.jsp.Button(it.cnr.jada.util.Config.getHandler().getProperties(getClass()),"CRUDToolbar.creaRimborso");
newToolbar[ i+1 ] = new it.cnr.jada.util.jsp.Button(it.cnr.jada.util.Config.getHandler().getProperties(getClass()),"CRUDToolbar.riportaAvanti");
newToolbar[ i+2 ] = new it.cnr.jada.util.jsp.Button(it.cnr.jada.util.Config.getHandler().getProperties(getClass()),"CRUDToolbar.riportaIndietro");
return newToolbar;
}
/**
* Tale metodo e' stato reimplementato per poter reinizializzare la proprietà usata per gestire il
* "riporta indietro" del documento contabile
*/
public void edit(ActionContext context, it.cnr.jada.bulk.OggettoBulk bulk, boolean doInitializeForEdit) throws it.cnr.jada.action.BusinessProcessException
{
setCarryingThrough(false);
super.edit(context, bulk, doInitializeForEdit);
}
/**
* Effettua una operazione di ricerca delle obbligazioni
*
* @param userContext lo userContext che ha generato la richiesta
* @param filtro modello che fa da contesto alla ricerca (il modello del FormController padre del
* controller che ha scatenato la ricerca)
*
* @return un RemoteIterator sul risultato della ricerca o null se la ricerca non ha ottenuto nessun risultato
*
*/
public it.cnr.jada.util.RemoteIterator findObbligazioni(it.cnr.jada.UserContext userContext, it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_obbligazioniVBulk filtro) throws it.cnr.jada.action.BusinessProcessException {
try {
AnticipoComponentSession sess = (AnticipoComponentSession)createComponentSession();
return sess.cercaObbligazioni(userContext, filtro);
} catch (it.cnr.jada.comp.ComponentException e) {
throw handleException(e);
} catch (java.rmi.RemoteException e) {
throw handleException(e);
}
}
/**
* Effettua una operazione di ricerca delle obbligazioni
*
* @param actionContext contesto dell'azione in corso
* @param clauses Albero di clausole da utilizzare per la ricerca
* @param bulk prototipo del modello di cui si effettua la ricerca
* @param context modello che fa da contesto alla ricerca (il modello del FormController padre del
* controller che ha scatenato la ricerca)
* @return un RemoteIterator sul risultato della ricerca o null se la ricerca non ha ottenuto nessun risultato
*
*/
public it.cnr.jada.util.RemoteIterator findObbligazioniAttributes(it.cnr.jada.action.ActionContext actionContext, it.cnr.jada.persistency.sql.CompoundFindClause clauses, it.cnr.jada.bulk.OggettoBulk bulk, it.cnr.jada.bulk.OggettoBulk context, java.lang.String property) throws it.cnr.jada.action.BusinessProcessException {
try {
AnticipoComponentSession sess = (AnticipoComponentSession )createComponentSession();
return it.cnr.jada.util.ejb.EJBCommonServices.openRemoteIterator(
actionContext,
sess.cerca(
actionContext.getUserContext(),
clauses,
bulk,
context,
property));
} catch (it.cnr.jada.comp.ComponentException e) {
throw handleException(e);
} catch (java.rmi.RemoteException e) {
throw handleException(e);
}
}
/**
* Il metodo valida la data di registrazione inserita dall'utente e inizializza le date di competenza
* con la stessa data.
*/
public void gestisciCambioDataRegistrazione(ActionContext context, AnticipoBulk anticipo) throws BusinessProcessException
{
try
{
anticipo.setDt_a_competenza_coge(anticipo.getDt_registrazione());
anticipo.setDt_da_competenza_coge(anticipo.getDt_registrazione());
if(anticipo.getDt_registrazione() == null)
{
anticipo.setCambio(null);
return;
}
// Faccio altri controlli sulla data di registrazione e carico il
// Cambio alla data
AnticipoComponentSession component = (AnticipoComponentSession)createComponentSession("CNRMISSIONI00_EJB_AnticipoComponentSession",AnticipoComponentSession.class);
anticipo = component.gestisciCambioDataRegistrazione(context.getUserContext(), anticipo);
setModel(context, anticipo);
}
catch(Throwable e)
{
throw handleException(e);
}
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP
*/
public it.cnr.contab.doccont00.core.bulk.Accertamento_scadenzarioBulk getAccertamento_scadenziario_corrente()
{
return null;
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
* Tale metodo ritorna l'anticipo corrente
*/
public IDocumentoAmministrativoBulk getBringBackDocAmm()
{
return getDocumentoAmministrativoCorrente();
}
/**
* Metodo richiesto dall' interfaccia IDefferUpdateSaldiBP
* Tale metodo ritorna l'anticipo corrente
*/
public it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi getDefferedUpdateSaldiBulk()
{
return (it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi)getModel();
}
/**
* Metodo richiesto dall' interfaccia IDefferedUpdateSaldiBP
* Tale metodo ritorna il BP corrente
*/
public IDefferedUpdateSaldiBP getDefferedUpdateSaldiParentBP()
{
return (IDefferedUpdateSaldiBP)this;
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP
*/
public it.cnr.contab.docamm00.docs.bulk.Risultato_eliminazioneVBulk getDeleteManager()
{
return null;
}
/**
* Metodo richiesto dall' interfaccia IValidaDocContBP
* Il metodo ritorna l'anticipo corrente
*/
public it.cnr.jada.bulk.OggettoBulk getDocAmmModel()
{
return getModel();
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP
* Il metodo ritorna l'anticipo corrente
*/
public IDocumentoAmministrativoBulk getDocumentoAmministrativoCorrente()
{
return (IDocumentoAmministrativoBulk)getModel();
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP
* Il metodo ritorna la scadenza associata all'anticipo
*/
public it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk getObbligazione_scadenziario_corrente()
{
return ((AnticipoBulk)getModel()).getScadenza_obbligazione();
}
/**
* Il metodo ritorna la scelta dell'utente di proseguire o meno con lo sfondamento di cassa
*/
public it.cnr.contab.doccont00.core.bulk.OptionRequestParameter getUserConfirm() {
return userConfirm;
}
/**
* Il metodo inzializza il BP
* Il metodo verifica se l'unita' organizzativa e' di tipo ENTE. Se cosi' fosse non e' consentito
* creare anticipi
*/
protected void init(Config config, ActionContext context) throws BusinessProcessException
{
try
{
verificoUnitaENTE(context);
}
catch(Throwable e)
{
throw handleException(e);
}
super.init(config,context);
}
/**
* Il metodo inizializza il BP per la modifica di un documento
* Il metodo inizializza degli attributi del BP utili per la gestione del riporta dei documenti
* contabili
*/
public it.cnr.jada.bulk.OggettoBulk initializeModelForEdit(ActionContext context,it.cnr.jada.bulk.OggettoBulk bulk) throws BusinessProcessException
{
AnticipoBulk anticipo = (AnticipoBulk)super.initializeModelForEdit(context,bulk);
return initializePerRiporta(context, anticipo);
}
/**
* Il metodo inizializza il BP per la ricerca libera di un documento
* Il metodo inizializza degli attributi del BP utili per la gestione del riporta dei documenti
* contabili
*/
public it.cnr.jada.bulk.OggettoBulk initializeModelForFreeSearch(ActionContext context,it.cnr.jada.bulk.OggettoBulk bulk) throws BusinessProcessException
{
AnticipoBulk anticipo = (AnticipoBulk)super.initializeModelForFreeSearch(context,bulk);
return initializePerRiporta(context, anticipo);
}
/**
* Il metodo inizializza il BP per la creazione del socumento amministrativo
* Il metodo inizializza degli attributi del BP utili per la gestione del riporta dei documenti
* contabili
*/
public it.cnr.jada.bulk.OggettoBulk initializeModelForInsert(ActionContext context,it.cnr.jada.bulk.OggettoBulk bulk) throws BusinessProcessException
{
AnticipoBulk anticipo = (AnticipoBulk)super.initializeModelForInsert(context,bulk);
return initializePerRiporta(context, anticipo);
}
/**
* Il metodo inizializza il BP per la ricerca di un documento
* Il metodo inizializza degli attributi del BP utili per la gestione del riporta dei documenti
* contabili
*/
public it.cnr.jada.bulk.OggettoBulk initializeModelForSearch(ActionContext context,it.cnr.jada.bulk.OggettoBulk bulk) throws BusinessProcessException
{
AnticipoBulk anticipo = (AnticipoBulk)super.initializeModelForSearch(context,bulk);
return initializePerRiporta(context, anticipo);
}
/**
* Il metodo inizializza degli attributi del BP utili per la gestione del riporta dei documenti
* contabili :
* - annoSolareInScrivania --> TRUE se l'anno solare coincide con quello di scrivania
* - riportaAvantiIndietro --> TRUE se esercizio di scrivania e quello successivo sono aperti
* Il metodo inizializza anche degli attributi dell'anticipo :
* - annoSolare
* - esercizioScrivania
*/
public it.cnr.jada.bulk.OggettoBulk initializePerRiporta(ActionContext context,AnticipoBulk anticipo) throws BusinessProcessException
{
try
{
java.sql.Timestamp tsOdierno = it.cnr.jada.util.ejb.EJBCommonServices.getServerDate();
java.util.GregorianCalendar tsOdiernoGregorian = (java.util.GregorianCalendar) java.util.GregorianCalendar.getInstance();
tsOdiernoGregorian.setTime(tsOdierno);
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
anticipo.setAnnoSolare(tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
anticipo.setEsercizioScrivania(it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext()).intValue());
setAnnoSolareInScrivania(anticipo.getAnnoSolare() == anticipo.getEsercizioScrivania());
setRibaltato(initRibaltato(context));
if (!isAnnoSolareInScrivania())
{
String cds = it.cnr.contab.utenze00.bp.CNRUserContext.getCd_cds(context.getUserContext());
try
{
DocumentoGenericoComponentSession session = (DocumentoGenericoComponentSession)createComponentSession("CNRDOCAMM00_EJB_DocumentoGenericoComponentSession", DocumentoGenericoComponentSession.class );
boolean esercizioScrivaniaAperto = session.verificaStatoEsercizio(context.getUserContext(), new it.cnr.contab.config00.esercizio.bulk.EsercizioBulk(cds, new Integer(anticipo.getEsercizioScrivania())));
boolean esercizioSuccessivoAperto = session.verificaStatoEsercizio(context.getUserContext(), new it.cnr.contab.config00.esercizio.bulk.EsercizioBulk(cds, new Integer(anticipo.getEsercizioScrivania()+1)));
setRiportaAvantiIndietro(esercizioScrivaniaAperto && esercizioSuccessivoAperto&&isRibaltato()&&isRibaltato());
}
catch (Throwable t)
{
// handleException(t);
throw new BusinessProcessException(t);
}
}
else
setRiportaAvantiIndietro(false);
}
catch(javax.ejb.EJBException e)
{
setAnnoSolareInScrivania(false);
throw new BusinessProcessException(e);
}
return anticipo;
}
/**
* Il metodo ritorna il valore della proprietà 'annoSolareInScrivania'
*/
public boolean isAnnoSolareInScrivania() {
return annoSolareInScrivania;
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
*/
public boolean isAutoGenerated()
{
return false;
}
/**
* Il metodo stabilisce se il bottone di 'Aggiorna manuale' della scadenza è abilitato o meno.
* Se l'obbligazione non puo' essere modificata, il bottone "Aggiorna manuale" è comunque abilitato
* per consentire all'utente di aprire la obbligazione in visualizzazione
*/
public boolean isBottoneObbligazioneAggiornaManualeAbilitato()
{
return( getModel() != null && !isSearching());
}
/**
* Il metodo ritorna il valore della proprietà 'carryingThrough'
*/
public boolean isCarryingThrough() {
return carryingThrough;
}
/**
* Il metodo stabilisce se il bottone di creazione del rimborso e' abilitato o meno.
* Le condizioni generali per l'abilitazione sono che l'anticipo sia pagato e non rimborsato.
* Inoltre se l'esercizio dell'anticipo è uguale a quello di scrivania :
* - se anticipo riportato --> non creo rimborso
* - se anticipo non riportato --> creo rimborso
*/
public boolean isCreaRimborsoButtonEnabled()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
boolean flg = false;
flg = isEditing() && !anticipo.hasRimborso() && anticipo.isPagata();
if(flg && anticipo.getEsercizio().intValue() == anticipo.getEsercizioScrivania())
flg = !anticipo.isRiportata();
//Gennaro Borriello/Luisa Farinella - (03/11/2004 19.04.48)
// Fix sul controllo dello "Stato Riportato"
else if(flg && anticipo.getEsercizio().intValue() != anticipo.getEsercizioScrivania())
flg = anticipo.isRiportataInScrivania();
return flg;
}
/**
* Il metodo stabilisce se il bottone di cancellazione dell'anticipo e' abilitato o meno.
* Le condizioni generali per l'abilitazione sono che l'anticipo non sia pagato ne' associato a missione
* ne' rimborsato (isEditable)
* Inoltre se l'esercizio dell'anticipo è diverso dal quello solare :
* - se l'esercizio di scrivania è uguale da quello solare il bottone è abilitato se la scadenza è riportata
* - se l'esercizio di scrivania è diverso da quello solare il bottone è abilitato se la scadenza non è riportata
*/
public boolean isDeleteButtonEnabled()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(anticipo==null)
return super.isDeleteButtonEnabled();
boolean flg = super.isDeleteButtonEnabled() && anticipo.isEditable();
// Chiusura : se carico un anticipo con esercizio precedente a quello solare :
// - esercizio scrivania != anno solare e obbligazione riportata --> disabilito
// - esercizio scrivania != anno solare e obbligazione non riportata --> abilito
// - esercizio scrivania = anno solare e obbligazione riportata --> abilito
// - esercizio scrivania = anno solare e obbligazione non riportata --> disabilito
//if(flg && anticipo.getEsercizio().intValue()!=anticipo.getAnnoSolare())
//{
//if(anticipo.getEsercizioScrivania()==anticipo.getAnnoSolare())
//return anticipo.isRiportata();
//else
//return !anticipo.isRiportata();
//}
// Gennaro Borriello - (05/11/2004 12.23.28)
// Modif. relativa alla nuova gestione di isRiportata()
if (flg){
if (anticipo.getEsercizio().intValue() == anticipo.getEsercizioScrivania())
return !anticipo.isRiportata();
else
return anticipo.isRiportataInScrivania();
}
return flg;
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
*/
public boolean isDeleting()
{
return false;
}
/**
* Il metodo disabilita il bottone di 'ricerca guidata' in caso l'utente entrasse dal Fondo Economale
*/
public boolean isFreeSearchButtonHidden()
{
return super.isFreeSearchButtonHidden() || isSpesaBP();
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
*/
public boolean isManualModify()
{
return true;
}
/**
* Il metodo stabilisce se il bottone di riporto avanti del documento contabile debba essere
* abilitato o meno.
* Per l'anticipo è abilitato se ho appena riportato indietro il documento o se la scadenza non risulta riportata.
* Per il rimborso è abilitato se la scadenza non risulta riportata.
*/
public boolean isRiportaAvantiButtonEnabled()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(!anticipo.hasRimborso())
return isCarryingThrough() || !anticipo.isRiportata();
RimborsoBulk rimborso = anticipo.getRimborso();
return !rimborso.isRiportata();
}
/**
* Il metodo stabilisce se il bottone di riporta avanti debba essere visualizzato
*/
public boolean isRiportaAvantiButtonHidden()
{
return basicRiportaButtonHidden();
}
/**
* Il metodo ritorna il valore dell'attributo 'riportaAvantiIndietro'
* 'riportaAvantiIndietro' --> TRUE se esercizio di scrivania e quello successivo sono aperti
*/
public boolean isRiportaAvantiIndietro() {
return riportaAvantiIndietro;
}
/**
* Il metodo stabilisce se il bottone di riporto indietro del documento contabile debba essere
* abilitato o meno.
* Per l'anticipo è abilitato se non ho modificato l'anticipo e se non l'ho appena riportato indietro
*/
public boolean isRiportaIndietroButtonEnabled()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(!anticipo.hasRimborso())
return isEditing() && !isDeleting() && !isDirty() && !isCarryingThrough();
return isEditing() && !isDeleting() && !isDirty();
}
/**
* Il metodo stabilisce se il bottone di riporta indietro del documento contabile debba essere visualizzato
*/
public boolean isRiportaIndietroButtonHidden()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(!anticipo.hasRimborso())
return basicRiportaButtonHidden() || (anticipo != null && !(anticipo.isRiportata() || isCarryingThrough()));
return basicRiportaButtonHidden() || (anticipo.getRimborso() != null && !anticipo.getRimborso().isRiportata());
}
/**
* Il metodo stabilisce se il bottone di salvataggio dell'anticipo debba essere abilitato.
* E' abilitato :
* - se l'anticipo non e' associato a missione
* - se l'anticipo non e' satto rimborsato
* - se l'esercizio di scrivania e quello dell'anticipo sono diversi da quello solare l' obbligazione
* non deve essere stata riportata (isROPerChiusura)
*/
public boolean isSaveButtonEnabled()
{
AnticipoBulk anticipo = (AnticipoBulk)getModel();
if(anticipo==null)
return super.isSaveButtonEnabled();
return super.isSaveButtonEnabled() &&
!anticipo.isAnticipoConMissione() &&
!anticipo.hasRimborso() &&
//!anticipo.isROPerChiusura()
// GB-LF-MB (08/11/2004 11.35.04)
// Modif. relativa alla nuova gestione di isRiportata()
(!anticipo.isROPerChiusura()
||
carryingThrough);
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
* Il metodo ritorna TRUE se l'anticipo e' stata aperta da Fondo Economale
*/
public boolean isSpesaBP()
{
return getParent() != null && (getParent() instanceof it.cnr.contab.fondecon00.bp.FondoSpesaBP);
}
/**
* Il metodo satbilisce se il bottone Annulla debba essere abilitato
*/
public boolean isUndoBringBackButtonEnabled()
{
return super.isUndoBringBackButtonEnabled() || isViewing();
}
/**
* Tale metodo e' stato reimplementato per poter reinizializzare l'attributo usato per gestire il
* "riporta indietro" del documento contabile
*/
public void reset(ActionContext context) throws BusinessProcessException
{
super.reset(context);
setCarryingThrough(false);
}
/**
* Tale metodo e' stato reimplementato per poter reinizializzare l'attributo usato per gestire il
* "riporta indietro" del documento contabile
*/
public void resetForSearch(ActionContext context) throws BusinessProcessException
{
setCarryingThrough(false);
super.resetForSearch(context);
}
/**
* Il metodo gestisce il 'riporto avanti' del documento contabile dell'anticipo
*/
public void riportaAvanti(ActionContext context) throws it.cnr.jada.bulk.ValidationException,BusinessProcessException
{
try
{
RiportoDocAmmComponentSession session = (RiportoDocAmmComponentSession)createComponentSession("CNRDOCAMM00_EJB_RiportoDocAmmComponentSession", RiportoDocAmmComponentSession.class);
AnticipoBulk anticipoRiportato = (AnticipoBulk)session.riportaAvanti( context.getUserContext(),
(IDocumentoAmministrativoBulk)getModel(),
getUserConfirm());
setModel(context, anticipoRiportato);
}
catch(Exception e)
{
throw handleException(e);
}
finally
{
setUserConfirm(null);
}
}
/**
* Il metodo gestisce il 'riporto indietro' del documento contabile dell'anticipo
*/
public void riportaIndietro(ActionContext context)throws it.cnr.jada.action.BusinessProcessException
{
if (isDirty())
{
setMessage("Il documento è stato modificato! Operazione annullata.");
return;
}
rollbackUserTransaction();
setCarryingThrough(true);
try
{
RiportoDocAmmComponentSession session = (RiportoDocAmmComponentSession)createComponentSession("CNRDOCAMM00_EJB_RiportoDocAmmComponentSession", RiportoDocAmmComponentSession.class);
AnticipoBulk anticipoRiportato = (AnticipoBulk)session.riportaIndietro( context.getUserContext(),
(IDocumentoAmministrativoBulk)getModel());
basicEdit(context, anticipoRiportato, true);
setDirty(true);
}
catch (Throwable t)
{
setCarryingThrough(false);
rollbackUserTransaction();
throw handleException(t);
}
}
/**
* Il metodo gestisce il 'riporto avanti' del documento contabile del rimborso
*/
public void riportaRimborsoAvanti(ActionContext context)throws it.cnr.jada.action.BusinessProcessException
{
if (isDirty())
{
setMessage("Il documento è stato modificato! Operazione annullata.");
return;
}
rollbackUserTransaction();
try
{
AnticipoBulk anticipo = (AnticipoBulk) getModel();
((AnticipoComponentSession)createComponentSession()).riportaRimborsoAvanti(context.getUserContext(),anticipo);
commitUserTransaction();
super.basicEdit(context, anticipo, true);
}
catch (Throwable t)
{
rollbackUserTransaction();
throw handleException(t);
}
}
/**
* Il metodo gestisce il 'riporto indietro' del documento contabile del rimborso
*/
public void riportaRimborsoIndietro(ActionContext context)throws it.cnr.jada.action.BusinessProcessException
{
if (isDirty())
{
setMessage("Il documento è stato modificato! Operazione annullata.");
return;
}
rollbackUserTransaction();
try
{
AnticipoBulk anticipo = (AnticipoBulk) getModel();
((AnticipoComponentSession)createComponentSession()).riportaRimborsoIndietro(context.getUserContext(),anticipo);
commitUserTransaction();
super.basicEdit(context, anticipo, true);
}
catch (Throwable t)
{
rollbackUserTransaction();
throw handleException(t);
}
}
/**
* Annulla le modifiche apportate all'anticipo e ritorna al savepoint impostato in precedenza
*
* Pre-post-conditions:
*
* Nome: Rollback to savePoint
* Pre: Una richiesta di annullare tutte le modifiche apportate e di ritornare al savepoint e' stata generata
* Post: Tutte le modifiche effettuate sull'anticipo sino al savepoint impostato vengono annullate
* @param context il Context che ha generato la richiesta
* @param savePointName il nome del savePoint
*
*/
public void rollbackToSavePoint(ActionContext context, String savePointName) throws BusinessProcessException
{
try
{
AnticipoComponentSession sess = (AnticipoComponentSession)createComponentSession();
sess.rollbackToSavePoint(context.getUserContext(), savePointName);
}
catch (java.rmi.RemoteException e)
{
throw handleException(e);
}
catch (it.cnr.jada.comp.ComponentException e)
{
throw handleException(e);
}
}
/**
* Il metodo gestisce il 'riporto avanti' del documento contabile dell'anticipo.
* Il metodo salva l'anticipo, invoca la procedura per riportare avanti il documento contabile e committa
*/
public void salvaRiportandoAvanti(ActionContext context) throws it.cnr.jada.bulk.ValidationException,BusinessProcessException
{
AnticipoBulk anticipoTemp = (AnticipoBulk)getModel();
try
{
setSavePoint(context, "RIPORTA_AVANTI");
completeSearchTools(context,this);
validate(context);
saveChildren(context);
update(context);
riportaAvanti(context);
}
catch(Throwable e)
{
rollbackToSavePoint(context,"RIPORTA_AVANTI");
setModel(context, anticipoTemp);
throw handleException(e);
}
if (getMessage() == null)
setMessage("Salvataggio e riporto all'esercizio successivo eseguito in modo corretto.");
commitUserTransaction();
setCarryingThrough(false);
try
{
basicEdit(context,getModel(),true);
}
catch (BusinessProcessException e)
{
setModel(context,null);
setDirty(false);
throw e;
}
}
/**
* Tale metodo e' stato reimplementato per poter reinizializzare l'attributo usato per gestire il
* "riporta indietro" del documento contabile
*/
public void save(ActionContext context) throws it.cnr.jada.bulk.ValidationException,BusinessProcessException
{
validate(context);
super.save(context);
setCarryingThrough(false);
}
/**
* Tale metodo imposta il valore dell'attributo 'annoSolareInScrivania'
*/
public void setAnnoSolareInScrivania(boolean newAnnoSolareInScrivania) {
annoSolareInScrivania = newAnnoSolareInScrivania;
}
/**
* Tale metodo imposta il valore dell'attributo 'carryigThrough'
*/
public void setCarryingThrough(boolean newCarryingThrough) {
carryingThrough = newCarryingThrough;
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
*/
public void setIsDeleting(boolean newIsDeleting) {}
/**
* Tale metodo imposta il valore dell'attributo 'riportaAvantiIndietro'
*/
public void setRiportaAvantiIndietro(boolean newRiportaAvantiIndietro) {
riportaAvantiIndietro = newRiportaAvantiIndietro;
}
/**
* Pre-post-conditions:
*
* Nome: Imposta savePoint
* Pre: Una richiesta di impostare un savepoint e' stata generata
* Post: Un savepoint e' stato impostato in modo che le modifiche apportate
* al doc. amministrativo vengono consolidate
*
* @param context il Context che ha generato la richiesta
* @param savePointName il nome del savePoint
*
*/
public void setSavePoint(ActionContext context, String savePointName) throws BusinessProcessException
{
try
{
AnticipoComponentSession sess = (AnticipoComponentSession)createComponentSession();
sess.setSavePoint(context.getUserContext(), savePointName);
}
catch (java.rmi.RemoteException e)
{
throw handleException(e);
}
catch (it.cnr.jada.comp.ComponentException e)
{
throw handleException(e);
}
}
/**
* Tale metodo imposta il valore dell'attributo 'userConfirm'
*/
public void setUserConfirm(it.cnr.contab.doccont00.core.bulk.OptionRequestParameter newUserConfirm) {
userConfirm = newUserConfirm;
}
/**
* Tale metodo e' stato reimplementato per gestire il passaggio dei parametri dei saldi per il doc contabile
* una volta che l'utente ha deciso di eseguire lo sfondamento di cassa.
* Vedi action metodo 'onCheckDisponibiltaDiCassaFailed'
*/
public void update(ActionContext context) throws it.cnr.jada.action.BusinessProcessException
{
try
{
getModel().setToBeUpdated();
setModel( context,
((AnticipoComponentSession)createComponentSession()).modificaConBulk( context.getUserContext(),
getModel(),
getUserConfirm()));
setUserConfirm(null);
}
catch(Throwable e)
{
throw handleException(e);
}
}
/**
* Metodo richiesto dall' interfaccia IDocumentoAmministrativoBP.
* Tale metodo si occupa di validare un'obbligazione appena creata o modificata.
* Il metodo viene chiamato sul riporta dell'Obbligazione in modo da validare istantaneamente l'oggetto creato.
*/
public void validaObbligazionePerDocAmm(ActionContext context, it.cnr.jada.bulk.OggettoBulk bulk) throws BusinessProcessException
{
return;
}
/**
* Il metodo verifica se l'unita' organizzativa e' di tipo ENTE
*/
public void verificoUnitaENTE(ActionContext context) throws it.cnr.jada.comp.ApplicationException
{
it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk unita_organizzativa = null;
unita_organizzativa = it.cnr.contab.utenze00.bulk.CNRUserInfo.getUnita_organizzativa(context);
if(unita_organizzativa.getCd_tipo_unita().compareTo(it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome.TIPO_UO_ENTE)==0)
throw new it.cnr.jada.comp.ApplicationException("Funzione non consentita per utente abilitato a " + unita_organizzativa.getCd_unita_organizzativa() );
}
public boolean initRibaltato(it.cnr.jada.action.ActionContext context) throws it.cnr.jada.action.BusinessProcessException
{
try
{
return (((RicercaDocContComponentSession)createComponentSession("CNRCHIUSURA00_EJB_RicercaDocContComponentSession", RicercaDocContComponentSession.class)).isRibaltato(context.getUserContext()));
} catch(Exception e)
{
throw handleException(e);
}
}
public boolean isRibaltato() {
return ribaltato;
}
public void setRibaltato(boolean b) {
ribaltato = b;
}
public void validaScadenze(AnticipoBulk anticipo, Obbligazione_scadenzarioBulk newScad) throws it.cnr.jada.comp.ApplicationException {
Vector scadCanc = anticipo.getDocumentiContabiliCancellati();
if (scadCanc!=null) {
Iterator it = scadCanc.iterator();
while(it.hasNext()) {
Obbligazione_scadenzarioBulk scad = (Obbligazione_scadenzarioBulk) it.next();
if(scad.getObbligazione() instanceof ObbligazioneResBulk){
if (scad.getObbligazione().equalsByPrimaryKey(newScad.getObbligazione()) && ((ObbligazioneResBulk)scad.getObbligazione()).getObbligazione_modifica()!=null
&& ((ObbligazioneResBulk)scad.getObbligazione()).getObbligazione_modifica().getPg_modifica()!=null) {
throw new it.cnr.jada.comp.ApplicationException("Impossibile collegare una scadenza dell'impegno residuo "+scad.getPg_obbligazione()+" poichè è stata effettuata una modifica in questo documento amministrativo!");
}
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy