it.cnr.contab.missioni00.actions.CRUDMissioneAction 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.actions;
import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.BancaBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_inquadramentoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_termini_pagamentoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Tipo_rapportoBulk;
import it.cnr.contab.anagraf00.tabter.bulk.NazioneBulk;
import it.cnr.contab.compensi00.docs.bulk.CompensoBulk;
import it.cnr.contab.compensi00.docs.bulk.V_terzo_per_compensoBulk;
import it.cnr.contab.compensi00.tabrif.bulk.Tipo_trattamentoBulk;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoBP;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoSpesaBP;
import it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_obbligazioniVBulk;
import it.cnr.contab.docamm00.tabrif.bulk.DivisaBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.missioni00.bp.CRUDMissioneBP;
import it.cnr.contab.missioni00.docs.bulk.AnticipoBulk;
import it.cnr.contab.missioni00.docs.bulk.MissioneBulk;
import it.cnr.contab.missioni00.docs.bulk.Missione_dettaglioBulk;
import it.cnr.contab.missioni00.docs.bulk.Missione_tappaBulk;
import it.cnr.contab.missioni00.ejb.MissioneComponentSession;
import it.cnr.contab.missioni00.tabrif.bulk.Missione_rimborso_kmBulk;
import it.cnr.contab.missioni00.tabrif.bulk.Missione_tipo_pastoBulk;
import it.cnr.contab.missioni00.tabrif.bulk.Missione_tipo_spesaBulk;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.jada.action.*;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.PrimaryKeyHashMap;
import it.cnr.jada.bulk.ValidationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.util.action.BulkBP;
import it.cnr.jada.util.action.FormBP;
import it.cnr.jada.util.action.OptionBP;
import it.cnr.jada.util.action.SelezionatoreListaBP;
import java.util.GregorianCalendar;
import java.util.Optional;
/**
* Insert the type's description here.
* Creation date: (07/02/2002 13.23.09)
*
* @author: Paola sala
*/
public class CRUDMissioneAction extends it.cnr.jada.util.action.CRUDAction {
public static final String I_DETTAGLI_DELLA_MISSIONE_VERRANNO_CANCELLATI_PROSEGUIRE = "I dettagli della missione verranno cancellati. Proseguire ??";
/**
* CRUDMissioneAction constructor comment.
*/
public CRUDMissioneAction() {
super();
}
/**
* Il metodo gestisce parte del rientro dall'aggiornamento manuale e dalla creazione della scadenza
* associata alla missione.
* (Validazione terzo, sincronizzazione delle scadenze e lock alla scadenza)
*/
public Forward basicDoBringBackOpenObbligazioniWindow(ActionContext context, Obbligazione_scadenzarioBulk scadenza) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
try {
TerzoBulk creditore = scadenza.getObbligazione().getCreditore();
if (!missione.getTerzo().equalsByPrimaryKey(creditore) &&
!AnagraficoBulk.DIVERSI.equalsIgnoreCase(creditore.getAnagrafico().getTi_entita()))
throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata deve appartenere ad un'obbligazione che ha come creditore il terzo della missione!");
it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);
h.lockScadenza(context.getUserContext(), scadenza);
} catch (Exception e) {
throw new BusinessProcessException(e);
}
missione.gestisciCambioSelezioneScadenza(scadenza);
} catch (Throwable t) {
it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi defSaldiBulk = bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk();
if (scadenza.getObbligazione().getPg_ver_rec().equals((Long) scadenza.getObbligazione().getSaldiInfo().get("pg_ver_rec")))
defSaldiBulk.removeFromDefferredSaldi(scadenza.getObbligazione());
try {
it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
} catch (Exception e) {
throw new BusinessProcessException(e);
}
throw new BusinessProcessException(t);
}
return context.findDefaultForward();
}
/**
* Metodo chiamato dal Fondo Economale per cercare le missioni eleggibili da associare
* alle spese del fondo.
* Tale metodo chiama il metodo "find" della missione
*/
protected Forward basicDoCerca(ActionContext context) throws java.rmi.RemoteException, InstantiationException, javax.ejb.RemoveException {
try {
fillModel(context);
it.cnr.jada.util.action.CRUDBP bp = getBusinessProcess(context);
OggettoBulk model = (OggettoBulk) bp.getModel();
it.cnr.jada.util.RemoteIterator ri = bp.find(context, null, model);
if (ri == null || ri.countElements() == 0) {
it.cnr.jada.util.ejb.EJBCommonServices.closeRemoteIterator(context, ri);
bp.setMessage("La ricerca non ha fornito alcun risultato.");
return context.findDefaultForward();
//}
//else if (ri.countElements() == 1) {
//OggettoBulk bulk = (OggettoBulk)ri.nextElement();
//return basicDoRiportaSelezione(context, bulk);
} else {
bp.setModel(context, model);
SelezionatoreListaBP nbp = (SelezionatoreListaBP) context.createBusinessProcess("Selezionatore");
nbp.setIterator(context, ri);
nbp.setBulkInfo(bp.getBulkInfo());
nbp.setColumns(getBusinessProcess(context).getSearchResultColumns());
context.addHookForward("seleziona", this, "doRiportaSelezione");
return context.addBusinessProcess(nbp);
}
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Metodo chiamato dal Fonfo Economale per riportare la Missione selezionata
*/
protected Forward basicDoRiportaSelezione(ActionContext context, it.cnr.jada.bulk.OggettoBulk selezione) throws java.rmi.RemoteException {
try {
if (selezione != null) {
CRUDMissioneBP bp = (CRUDMissioneBP) context.getBusinessProcess();
bp.edit(context, selezione);
selezione = bp.getModel();
//if (!MissioneBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((MissioneBulk)selezione).getRiportata()))
//throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo risulta riportato! Operazione annullata.");
// Borriello: integrazione Err. CNR 775
Integer esScriv = it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext());
if ((((MissioneBulk) selezione).getEsercizio().compareTo(esScriv) == 0) && ((MissioneBulk) selezione).isRiportata()) {
throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo risulta (parzialmente) riportato! Operazione annullata.");
}
// Gennaro Borriello - (09/11/2004 18.08.57)
// Nuova gestione dello stato getRiportata()
if ((((MissioneBulk) selezione).getEsercizio().compareTo(esScriv) != 0) && (!MissioneBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((MissioneBulk) selezione).getRiportataInScrivania()))) {
throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo non risulta completamente riportato! Operazione annullata.");
}
context.closeBusinessProcess();
HookForward forward = (HookForward) context.findForward("bringback");
forward.addParameter("documentoAmministrativoSelezionato", selezione);
return forward;
}
} catch (Exception e) {
return handleException(context, e);
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce la fine della modalità "modifica/inserimento dettaglio di spesa".
*/
private void basicDoUndoSpesa(ActionContext context) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.undoSpesa(context);
}
/**
* Il metodo gestisce la fine della modalità "modifica/inserimento di una tappa"
*/
private void basicDoUndoTappa(ActionContext context) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.undoTappa(context);
}
/**
* Il metodo gestisce la creazione di una nuova spesa e le relative inizializzazioni
*/
public Forward doAddToCRUDMain_Spesa(ActionContext context) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
try {
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.isInserimentoSpeseModificabile();
// Se ho la diaria ne propongo la cancellazione automatica
// per poter proseguire con la creazione della spesa
if ((missione.getDiariaMissioneColl() != null) && (!missione.getDiariaMissioneColl().isEmpty()))
return openConfirm(context, "La Diaria verra' cancellata. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doCancellaDiariaPerCreazioneSpesa");
else {
// Chiamo il metodo "addDetail" di CRUDMissione_spesaController
bp.getSpesaController().add(context);
missione.setSpeseInserite(false);
}
} catch (Throwable e) {
return handleException(context, e);
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce l'inizializzazione di una nuova tappa (cds, unita organizzativa, esercizio, comune proprio)
*/
public Forward doAddToCRUDMain_Tappa(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.addTappa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce l' aggiornamento della missione (importi calcolati) dopo il rientro dalla creazione/modifica
* del compenso
* Se il compenso ha impostato la linea di attivita' e se la missione ha associato un anticipo
* devo inizializzare la linea di attività dell'anticipo con quella del compenso. Cio' servirà per
* creare il Rimborso.
*/
private void doAggiornaMissionePerCompenso(ActionContext context, MissioneBulk missione) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) context.getBusinessProcess();
if (missione.getCompenso().getCd_linea_attivita_genrc() != null && missione.getAnticipo().getCd_linea_attivita() == null)
bp.updateAnticipo(context, missione);
missione.setFl_associato_compenso(new Boolean(true));
missione.setIm_netto_pecepiente(missione.getCompenso().getIm_netto_percipiente());
missione.setIm_lordo_percepiente(missione.getCompenso().getIm_lordo_percipiente());
missione.setIm_totale_missione(missione.getCompenso().getIm_totale_compenso());
missione.setStato_coge(missione.STATO_COGE_NON_PROCESSARE);
missione.setStato_coan(missione.STATO_COAN_NON_PROCESSARE);
bp.update(context);
bp.ricaricaMissioneInModifica(context);
}
/**
* Il metodo gestisce l'eliminazione dell'associazione missione-anticipo.
* Il metodo effettua le opportune validazioni sull'importo della scadenza eventualmente associata alla missione e
* ricalcola gli importi della missione
*/
public Forward doBlankSearchFind_anticipo(ActionContext context, MissioneBulk missione) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) context.getBusinessProcess();
if (!missione.isMissioneConAnticipo()) {
missione.setAnticipo(new AnticipoBulk());
return context.findDefaultForward();
}
missione.setAnticipo(new AnticipoBulk());
if (missione.isMissioneConObbligazione()) {
missione.calcolaConsuntivi();
if (missione.getImporto_scadenza_obbligazione().compareTo(missione.getObbligazione_scadenzario().getIm_scadenza()) != 0)
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'importo della scadenza deve essere " + missione.getImporto_scadenza_obbligazione().toString());
}
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce l'inizializzazione del terzo della missione.
* Se la missione possiede dei dettagli di spesa/diaria il metodo ne propone la cancellazione prima di proseguire.
* Se l'utente non conferma tale cancellazione l'inizializzazione del terzo verrà annullata.
*/
public Forward doBlankSearchFind_terzo(ActionContext context, MissioneBulk missione) {
try {
if (missione.getDettagliMissioneColl().isEmpty()) {
missione.inizializzaTerzo();
return context.findDefaultForward();
} else {
OptionBP option = openConfirm(context, "I dettagli della missione verranno cancellati. Proseguire ??", OptionBP.CONFIRM_YES_NO, "doConfermaTerzoBlankSearchChange");
return option;
}
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo inizializza gli attributi di un dettaglio di spesa e relativi al Tipo Auto
*/
public Forward doBlankSearchFind_tipo_auto(ActionContext context, Missione_dettaglioBulk aSpesa) {
aSpesa.setTipo_auto(new Missione_rimborso_kmBulk());
aSpesa.setTi_auto(null);
aSpesa.setIm_spesa_divisa(new java.math.BigDecimal(0));
return context.findDefaultForward();
}
/**
* Il metodo inizializza gli attributi di un dettaglio di spesa e relativi al Tipo Pasto
*/
public Forward doBlankSearchFind_tipo_pasto(ActionContext context, Missione_dettaglioBulk aSpesa) {
aSpesa.setTipo_pasto(new Missione_tipo_pastoBulk());
aSpesa.setCd_ti_pasto(null);
return context.findDefaultForward();
}
/**
* Il metodo inizializza gli attributi di un dettaglio di spesa e relativi al Tipo Spesa
*/
public Forward doBlankSearchFind_tipo_spesa(ActionContext context, Missione_dettaglioBulk aSpesa) {
aSpesa.setTipo_spesa(new Missione_tipo_spesaBulk());
aSpesa.setCd_ti_spesa(null);
aSpesa.setPercentuale_maggiorazione(new java.math.BigDecimal(0));
aSpesa.setDs_ti_spesa(null);
aSpesa.setTi_cd_ti_spesa(null);
return context.findDefaultForward();
}
/**
* Il metodo gestisce il rientro dalla creazione/modifica di un compenso :
* - se la missione è provvisoria e la creazione del compenso è stata annullata riporto
* la missione in stato provvisorio
* - sincronizzo l'obbligazione del compenso con quella presente nella proprietà della missione
* "deferredSaldi" (per l'aggiornamento dei saldi)
* - aggiorno la missione con gli importi calcolati dal compenso
*/
public Forward doBringBackCompenso(ActionContext context) {
try {
HookForward caller = (HookForward) context.getCaller();
CompensoBulk compenso = (CompensoBulk) caller.getParameter("bringback");
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (compenso == null) {
if (missione.getMissioneIniziale() != null &&
missione.getMissioneIniziale().getTi_provvisorio_definitivo() != null)
missione.setTi_provvisorio_definitivo(missione.getMissioneIniziale().getTi_provvisorio_definitivo());
else
missione.setTi_provvisorio_definitivo(MissioneBulk.SALVA_TEMPORANEO);
missione.setDeferredSaldi(new PrimaryKeyHashMap());
missione = (MissioneBulk) bp.getModel();
return context.findDefaultForward();
}
missione.setCompenso(compenso);
// Sincronizzo l' obbligazione del compenso (numero positivo)
// con l'obbligazione del compenso salvata nel deferredSaldi della missione
// (numero negativo)
// Stessa cosa per le scadenze cancellate
missione.sincronizzaObbligazioneCompenso(context.getUserContext());
missione.sincronizzaObbligazioniCancellateCompenso(context.getUserContext());
doAggiornaMissionePerCompenso(context, missione); // reinizializza 'missioneIniziale'
bp.commitUserTransaction();
bp.setMessage("Salvataggio terminato con successo.");
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Il metodo gestisce il rientro dalla creazione di un nuovo anagrafico.
* Vengono inizializzati attributi quali : nome, cognome, ragione sociale, codice fiscale, partita iva,
* modalita e termini di pagamento dell'anangrafico associato al Terzo selezionato
*/
public Forward doBringBackCRUDCrea_terzo(ActionContext context, MissioneBulk missione, TerzoBulk aTerzo) throws java.rmi.RemoteException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (Optional.ofNullable(aTerzo).isPresent()) {
try {
MissioneComponentSession component = (MissioneComponentSession) bp.createComponentSession();
missione.setCd_terzo(aTerzo.getCd_terzo());
missione = component.caricaTerzoInModificaMissione(context.getUserContext(), missione);
} catch (BusinessProcessException|ComponentException e) {
return handleException(context, e);
}
}
return doBringBackSearchFind_terzo(context, missione, missione.getV_terzo());
}
/**
* Il metodo gestisce il rientro dall'aggiornamento manuale della scadenza associata alla missione.
*/
public Forward doBringBackOpenObbligazioniWindow(ActionContext context) {
try {
HookForward caller = (HookForward) context.getCaller();
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk) caller.getParameter("bringback");
if (scadenza == null)
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
basicDoBringBackOpenObbligazioniWindow(context, scadenza);
missione.setObbligazione_scadenzario(scadenza);
bp.setDirty(true);
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Il metodo gestisce il rientro dalla finestra di ricerca con filtri o creazione di obbligazioni.
*/
public Forward doBringBackRicercaObbligazioniWindow(ActionContext context) {
try {
HookForward caller = (HookForward) context.getCaller();
Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk) caller.getParameter("obbligazioneSelezionata");
if (scadenza == null)
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
basicDoBringBackOpenObbligazioniWindow(context, scadenza);
missione.setObbligazione_scadenzario(scadenza);
// verifico se la scadenza appena associata l'avevo precedentemente slegata
if (missione.isScadenzaDaRimuovereDaiCancellati()) {
// la rimuovo dalla collection altrimenti l'aggiornamento del suo
// im_associato_doc_amm a zero mi cambierebbe il pg_ver_rec
missione.removeFromDocumentiContabiliCancellati(scadenza);
}
bp.setDirty(true);
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce il rientro dalla ricerca di un anticipo da associare alla missione.
* Se la missione e' associata ad una scadenza si effettuano i seguenti controlli :
* - se importo anticipo > importo missione --> sgancio la scadenza
* - se importo missione - importo anticipo != importo scadenza --> mando msg
*/
public Forward doBringBackSearchFind_anticipo(ActionContext context, MissioneBulk missione, AnticipoBulk anticipo) {
try {
if (anticipo == null)
return context.findDefaultForward();
missione.setAnticipo(anticipo);
missione.calcolaConsuntivi();
if (missione.isMissioneConObbligazione()) {
if (missione.isImportoAnticipoMaggioreDiMissione()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Associazione con la scadenza di impegno rimossa! L'anticipo ha importo maggiore della missione");
missione.addToDocumentiContabiliCancellati(missione.getObbligazione_scadenzario());
missione.setObbligazione_scadenzario(new Obbligazione_scadenzarioBulk());
if (missione.getStato_pagamento_fondo_eco().compareTo(MissioneBulk.FONDO_ECO) == 0)
missione.setStato_pagamento_fondo_eco(MissioneBulk.NO_FONDO_ECO);
} else if (missione.getImporto_scadenza_obbligazione().compareTo(missione.getObbligazione_scadenzario().getIm_scadenza()) != 0)
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'importo della scadenza deve essere " + missione.getImporto_scadenza_obbligazione().toString());
}
return context.findDefaultForward();
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione della divisa di un dettaglio di spesa.
* Se tale divisa risulta uguale a quella inserita nella configurazione della tappa per lo stesso giorno
* propongo di default il cambio di tale tappa
*/
public Forward doBringBackSearchFind_divisa_spesa(ActionContext context, Missione_dettaglioBulk spesa, DivisaBulk aDivisa) {
try {
if (aDivisa == null)
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
spesa.setDivisa_spesa(aDivisa);
bp.setCambioSpesaDefault(context, spesa);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione di una nazione estera di una tappa.
* Vengono inizializzate le seguenti proprietà della tappa :
* - la divisa viene inizializzata con quella letta da tabella MISSIONE_DIARIA per la stessa nazione,
* per l'inquadramento della missione e valida alla data di inizio missione.
* Tale divisa non sara' modificabile.
* - il cambio della divisa trovata valido alla data inizio missione
* Tale cambio può essere modificato.
*/
public Forward doBringBackSearchFind_nazione(ActionContext context, Missione_tappaBulk tappa, NazioneBulk aNazione) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
tappa.setNazione(aNazione);
tappa.setDivisa_tappa(new DivisaBulk());
tappa.setCambio_tappa(new java.math.BigDecimal(0));
if (aNazione != null && aNazione.getCd_area_estera() == null)
throw new it.cnr.jada.comp.ApplicationException("Area Estera non difinita per la nazione !");
//bp.setMessage("Area Estera non difinita per la nazione !");
if (tappa.getNazione() != null)
bp.setDivisaCambioTappaEstera(context, tappa);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce l'inizializzazione di alcuni attributi dell'anticipo relativi al terzo e ai dati
* bancari del terzo (nome, cognome, ragione sociale, codice fiscale, partita iva, modalita e termini di pagamento).
* Vengono inizializzati anche i "Tipi rapporto"; se non presenti l'utente non può proseguire
*/
public Forward doBringBackSearchFind_terzo(ActionContext context, MissioneBulk missione, V_terzo_per_compensoBulk aTerzo) {
try {
if (aTerzo == null)
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneComponentSession component = (MissioneComponentSession) bp.createComponentSession();
missione.inizializzaTerzo();
missione = component.completaTerzo(context.getUserContext(), missione, aTerzo);
if ((missione.getTipi_rapporto() == null) || (missione.getTipi_rapporto().isEmpty()))
bp.setMessage("Impossibile proseguire. Tipi Rapporto non disponibili !");
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Inizializzo l'attributo Tipo Auto del dettaglio di spesa
*/
public Forward doBringBackSearchFind_tipo_auto(ActionContext context, Missione_dettaglioBulk aSpesa, Missione_rimborso_kmBulk tipoAuto) {
try {
if (tipoAuto == null) // Nessuna selezione
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
aSpesa.setTi_auto(tipoAuto.getTi_auto());
aSpesa.setTipo_auto(tipoAuto);
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Inizializzo l'attributo Tipo Pasto del dettaglio di spesa
*/
public Forward doBringBackSearchFind_tipo_pasto(ActionContext context, Missione_dettaglioBulk aSpesa, Missione_tipo_pastoBulk tipoPasto) {
try {
if (tipoPasto == null) // Nessuna selezione
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
aSpesa.setTipo_pasto(tipoPasto);
aSpesa.setCd_ti_pasto(aSpesa.getTipo_pasto().getCd_ti_pasto());
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce il rientro dalla selezione di un "Tipo Spesa".
* Inizializzo alcuni attributi del dettaglio con quelli del Tipo Spesa.
* Se il tipo spesa selezionato e' un rimborsoKm inizializzo la divisa e il cambio della spesa
* con quelli di default (EURO)
*/
public Forward doBringBackSearchFind_tipo_spesa(ActionContext context, Missione_dettaglioBulk aSpesa, Missione_tipo_spesaBulk tipoSpesa) {
try {
if (tipoSpesa == null) // Nessuna selezione
return context.findDefaultForward();
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
aSpesa.setTipo_spesa(tipoSpesa);
aSpesa.setCd_ti_spesa(aSpesa.getTipo_spesa().getCd_ti_spesa());
aSpesa.setPercentuale_maggiorazione(tipoSpesa.getPercentuale_maggiorazione());
aSpesa.setDs_ti_spesa(tipoSpesa.getDs_ti_spesa());
aSpesa.impostaTipologiaSpesa();
if (aSpesa.isRimborsoKm())
missione = bp.inizializzaDivisaCambioPerRimborsoKm(context, aSpesa);
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo effettua una cancellazione della diaria prima di poter proseguire con la cancellazione
* di un dettaglio di spesa
*/
public Forward doCancellaDiariaPerCancellazioneSpesa(ActionContext context, OptionBP option) throws BusinessProcessException, ValidationException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancella Diaria
bp.cancellaDiaria(context);
missione = (MissioneBulk) bp.getModel();
missione.setSpeseInserite(false);
// Chiama il metodo "removeFromSpeseMissioneColl" di MissioneBulk
bp.getSpesaController().remove(context);
}
return context.findDefaultForward();
}
/**
* Il metodo effettua una cancellazione della diaria prima di poter proseguire con la creazione di
* un nuovo dettaglio di spesa
*/
public Forward doCancellaDiariaPerCreazioneSpesa(ActionContext context, OptionBP option) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancella Diaria
bp.cancellaDiaria(context);
missione = (MissioneBulk) bp.getModel();
missione.setSpeseInserite(false);
// Chiamo il metodo "addDetail" di CRUDMissione_spesaController
bp.getSpesaController().add(context);
}
return context.findDefaultForward();
}
/**
* Il metodo effettua una cancellazione della diaria prima di poter proseguire con la modifica di
* un dettaglio di spesa
*/
public Forward doCancellaDiariaPerModificaSpesa(ActionContext context, OptionBP option) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancella Diaria
bp.cancellaDiaria(context);
missione = (MissioneBulk) bp.getModel();
missione.setSpeseInserite(false);
bp.editaSpesa(context);
}
return context.findDefaultForward();
}
/**
* Attiva la ricerca libera di una missione
*/
public Forward doCerca(ActionContext context) throws java.rmi.RemoteException, InstantiationException, javax.ejb.RemoveException {
CRUDMissioneBP bp = (CRUDMissioneBP) context.getBusinessProcess();
// Se chi invoca la ricerca delle missioni e' il Fondo Economale
if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP) bp).isSpesaBP())
return basicDoCerca(context);
return super.doCerca(context);
}
/**
* A fronte della modifica della data di registrazione vengono validati il terzo e i tipi trattamento.
* Se i controlli di validazione non hanno successo l'utente deve confermare o meno se proseguire con
* la modifica della data e quindi con la re-inizializzazione dei dati non piu' validi
* Il metodo gestisce la risposta dell'utente.
*/
public Forward doConfermaDataRegistrazioneChange(ActionContext context, OptionBP optionBP) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
java.sql.Timestamp oldDataRegistrazione = (java.sql.Timestamp) optionBP.getAttribute("dataReg");
int errorCodeTerzo = ((Integer) optionBP.getAttribute("errorCodeTerzo")).intValue();
if (optionBP.getOption() == OptionBP.YES_BUTTON) {
switch (errorCodeTerzo) {
case 2: {
missione.inizializzaTerzo();
break;
}
case 10: {
bp.findTipiTrattamento(context);
break;
}
}
} else
missione.setDt_registrazione(oldDataRegistrazione);
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una modifica in diminuzione della data di fine di una missione con dettagli di spesa/diaria o tappe
* viene chiesto all'utente se proseguire con la cancellazione di questi ultimi o meno.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli e le tappe e modifico la data di fine
* - NO : annullo l amodifica della data
*/
public Forward doConfermaFineMissioneChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello la configurazione delle tappe
bp.cancellaTappeMissione(context);
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
;
missione = (MissioneBulk) bp.getModel();
// Resetto la collection dei giorni in modo da ricostruirla
missione.setCollectionGiorni(null);
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setDt_fine_missione((java.sql.Timestamp) option.getAttribute("oldDataFine"));
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una modifica in aumento della data di fine di una missione con dettagli di spesa/diaria o tappe
* viene chiesto all'utente se proseguire con la cancellazione di questi ultimi o meno.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria, forzo la riconfigurazione delle tappe e modifico la data di fine
* - NO : annullo la modifica della data
*/
public Forward doConfermaFineMissioneInAumentoChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
java.sql.Timestamp oldDataFine = (java.sql.Timestamp) option.getAttribute("oldDataFine");
if (option.getOption() == OptionBP.YES_BUTTON) {
// Se allungo la durata della missione annulla la data fine validita dell'ultima tappa
Missione_tappaBulk ultimaTappa = (Missione_tappaBulk) missione.getTappeMissioneColl().get(missione.getTappeMissioneColl().size() - 1);
if (ultimaTappa != null) {
ultimaTappa.setDt_fine_tappa(null);
missione.setTappeConfigurate(false);
}
// Resetto la collection dei giorni in modo da ricostruirla
missione.setCollectionGiorni(null);
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setDt_fine_missione(oldDataFine);
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una modifica della data di inizio di una missione occorre :
* - ricare i Tipi Rapporto in modo che siano validi alla nuova data inizio missione
* - cancellare le tappe e/o dettagli se presenti
* All'utente viene chiesto se proseguire con queste operazioni o meno.
* Il metodo gestisce la risposta dell'utente e quindi :
*/
public Forward doConfermaInizioMissioneChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Carico i Tipi Rapporto validi alla data inizio missione
missione.setInquadramenti(null);
missione.setRif_inquadramento(null);
missione.setTipi_trattamento(null);
missione.setCd_trattamento(null);
missione.setTipo_trattamento(null);
bp.findTipiRapporto(context);
// Cancello la configurazione delle tappe
bp.cancellaTappeMissione(context);
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
missione = (MissioneBulk) bp.getModel();
missione.setCollectionGiorni(null);
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setDt_inizio_missione((java.sql.Timestamp) option.getAttribute("oldDataIniziale"));
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una nuova selezione dell'inquadramento del terzo viene chiesto all'utente se proseguire con la
* cancellazione dei dettagli di spesa/diaria della missione.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria e modifico l'inquadramento
* - NO : annullo la modifica dell'inquadramento
*/
public Forward doConfermaInquadramentoChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setRif_inquadramento((Rif_inquadramentoBulk) option.getAttribute("oldInquadramento"));
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Alla selezione del bottone "Ricerca" il sistema visualizza il primo Tab
*/
public Forward doConfermaNuovaRicerca(ActionContext context, int option) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.setTab("tab", "tabTestata");
return super.doConfermaNuovaRicerca(context, option);
}
/**
* Il metodo gestisce la fine della modalita modifica/inserimento dettaglio spesa
*/
public Forward doConfermaSpesa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.confermaSpesa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la fine della modalita modifica/inserimento tappa
*/
public Forward doConfermaTappa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.confermaTappa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* A fronte di una inizializzazione del terzo viene chiesto all'utente se proseguire con la cancellazione dei
* dettagli di spesa/diaria della missione.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria e inizializzo il terzo
* - NO : annullo l'inizializzazione del terzo
*/
public Forward doConfermaTerzoBlankSearchChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
// Inizializzo i campi del Terzo
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.inizializzaTerzo();
}
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una nuova selezione del terzo viene chiesto all'utente se proseguire con la cancellazione dei
* dettagli di spesa/diaria della missione.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria e modifico il terzo
* - NO : annullo la modifica del terzo
*/
public Forward doConfermaTerzoFreeSearchChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
return freeSearch(context, bp.getFormField("find_terzo"));
}
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una nuova selezione del terzo viene chiesto all'utente se proseguire con la cancellazione dei
* dettagli di spesa/diaria della missione.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria e modifico il terzo
* - NO : annullo la modifica del terzo
*/
public Forward doConfermaTerzoSearchChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
return search(context, bp.getFormField("find_terzo"), null);
}
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
public Forward doConfermaTerzoSearchChangeForCRUD(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
return doCRUD(context, "main.crea_terzo");
}
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una nuova selezione del Tipo Anagrafico viene chiesto all'utente se reinizializzare in terzo ed
* cancellare i dettagli di spesa/diaria della missione.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria, inizializzo il terzo e modifico il Tipo Anagrafico
* - NO : annullo la modifica del Tipo Anagrafico
*/
public Forward doConfermaTipoAnagraficoChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
missione = (MissioneBulk) bp.getModel();
// Inizializzo i campi del Terzo
missione.inizializzaTerzo();
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setTi_anagrafico((String) option.getAttribute("oldTipoAnagrafico"));
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A fronte di una nuova selezione del Tipo Rapporto viene chiesto all'utente se cancellare i dettagli di spesa/diaria
* e ricaricare gli Inquadramenti e i Tipi Trattamento.
* Il metodo gestisce la risposta dell'utente e quindi :
* - SI : cancello i dettagli di spesa/diaria, inizializzo Inquadramenti e Tipi Trattamento e modifico il
* Tipo Rapporto
* - NO : annullo la modifica del Tipo Rapporto
*/
public Forward doConfermaTipoRapportoChange(ActionContext context, OptionBP option) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (option.getOption() == OptionBP.YES_BUTTON) {
// Cancello i dettagli di spesa/diaria
bp.cancellaDettagliMissione(context);
// Carico gli Inquadramenti e i Tipi trattamento del nuovo Tipo rapporto
bp.findInquadramentiETipiTrattamento(context);
}
// Annullo la modifica
if (option.getOption() == OptionBP.NO_BUTTON)
missione.setTipo_rapporto((Tipo_rapportoBulk) option.getAttribute("oldTipoRapporto"));
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* A seguito della configurazione delle tappe il sistema verifica se mantenere o meno il compenso o la scadenza
* eventualmente associati alla missione :
* - se le tappe sono state configurate in modo da rendere necessaria la creazione
* di un compenso devo cancellare la scadenza di obbligazione eventualmente associata
* alla missione.
* - se invece le tappe sono state configurate in modo da non richiedere l'associazione
* della missione con un compenso devo annullare o cancellare fisicamente il compenso
* eventualmente associato. Sara' la procedura a decidere che tipo cancellazione fare e
* ad eseguirla
*/
public void doControlliPerCompenso(ActionContext context, MissioneBulk missione) throws BusinessProcessException {
if (missione.isCompensoObbligatorio() && missione.isMissioneConObbligazione()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'associazione della missione con la scadenza di impegno e' stata rimossa!");
missione.addToDocumentiContabiliCancellati(missione.getObbligazione_scadenzario());
missione.setObbligazione_scadenzario(new Obbligazione_scadenzarioBulk());
}
if (!missione.isCompensoObbligatorio() && missione.isMissioneConCompenso()) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.cancellaCompensoPhisically(context);
}
}
/**
* Pre-condition : missione con anticipo ed scadenza. Seleziono il bottone di fine inserimento
* spese che ricalcola il totale della missione
* Post-condition : se il nuovo importo della missione e' minore a quello dell'anticipo
* devo scollegare la scadenza
*/
public void doControlliPerFineSpese(ActionContext context, MissioneBulk missione) throws BusinessProcessException {
if (missione.isMissioneConObbligazione() && missione.isImportoAnticipoMaggioreDiMissione()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'associazione della missione con la scadenza di impegno e' stata rimossa!");
missione.addToDocumentiContabiliCancellati(missione.getObbligazione_scadenzario());
missione.setObbligazione_scadenzario(new Obbligazione_scadenzarioBulk());
}
}
/**
* Il metodo gestisce l'apertura della finestra di creazione del compenso ed effettua le opportune
* inizializzazioni del compenso
*/
private Forward doCreaCompenso(ActionContext context) throws BusinessProcessException {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
context.addHookForward("bringback", this, "doBringBackCompenso");
it.cnr.contab.compensi00.bp.CRUDCompensoBP compensoBP = (it.cnr.contab.compensi00.bp.CRUDCompensoBP) context.getUserInfo().createBusinessProcess(context, "CRUDCompensoBP", new Object[]{"MRSWTh"});
compensoBP.reset(context);
CompensoBulk compenso = (CompensoBulk) compensoBP.getModel();
it.cnr.contab.compensi00.ejb.CompensoComponentSession component = (it.cnr.contab.compensi00.ejb.CompensoComponentSession) bp.createComponentSession("CNRCOMPENSI00_EJB_CompensoComponentSession", it.cnr.contab.compensi00.ejb.CompensoComponentSession.class);
compenso = component.inizializzaCompensoPerMissione(context.getUserContext(), compenso, missione);
compensoBP.setModel(context, compenso);
return context.addBusinessProcess(compensoBP);
} catch (Throwable ex) {
throw new BusinessProcessException(ex);
}
}
/**
* Il metodo gestisce l'inizio della modalita modifica dettaglio di spesa verificando
* la fattibilità dell'operazione
*/
public Forward doEditaSpesa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.isInserimentoSpeseModificabile();
// Se ho la diaria ne propongo la cancellazione automatica
// per poter proseguire con la modifica della spesa
if ((missione.getDiariaMissioneColl() != null) && (!missione.getDiariaMissioneColl().isEmpty()))
return openConfirm(context, "La Diaria verra' cancellata. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doCancellaDiariaPerModificaSpesa");
else {
bp.editaSpesa(context);
missione.setSpeseInserite(false);
}
} catch (Throwable e) {
return handleException(context, e);
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce l'inizio modalita modifica tappa
*/
public Forward doEditaTappa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.editaTappa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la modalita alla data della tappa
*/
public Forward doCambiaDataTappa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.setDiariaSiNo(context);
bp.isDiariaEditable(context.getUserContext());
bp.isRimborsoEditable(context.getUserContext());
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce un comando di cancellazione logica/fisica della missione
*/
public Forward doElimina(ActionContext context) throws java.rmi.RemoteException {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (!bp.isEditing()) {
bp.setMessage("Non è possibile cancellare in questo momento");
} else {
bp.delete(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
MissioneComponentSession session = (MissioneComponentSession) bp.createComponentSession();
if (session.isMissioneAnnullata(context.getUserContext(), missione)) {
bp.edit(context, missione);
bp.setMessage("Annullamento effettuato");
} else {
bp.reset(context);
bp.setMessage("Cancellazione effettuata");
}
}
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce l'eliminazione dell'associazione missione-scadenza.
* Se tolgo la relazione tra la missione e una scadenza devo prevedere
* l'aggiornamento/inserimento a db di tale scadenza con im_associato_doc_amm=0
* e se la missione usa il fondo economale devo eliminare questa associazione
*/
public Forward doEliminaScadenzaObbligazione(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (!missione.isMissioneConObbligazione()) {
missione.setObbligazione_scadenzario(new Obbligazione_scadenzarioBulk());
throw new it.cnr.jada.comp.ApplicationException("Non esiste alcuna scadenza da eliminare!");
}
missione.addToDocumentiContabiliCancellati(missione.getObbligazione_scadenzario());
missione.setObbligazione_scadenzario(new Obbligazione_scadenzarioBulk());
if (missione.getStato_pagamento_fondo_eco().compareTo(MissioneBulk.FONDO_ECO) == 0)
missione.setStato_pagamento_fondo_eco(MissioneBulk.NO_FONDO_ECO);
bp.setDirty(true);
return context.findDefaultForward();
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione del bottone di fine configurazione tappe.
* In particolare è gestita :
* - la cancellazione fisica delle tappe se queste sono gia' state salvate in tabella
* (essendo dt_inizio_tappa parte della chiave non mi e' possibile :
* - modificare dt_inizio_tappa (ora) di una tappa gia' salvata
* - cancellare una tappa gia' presente in tabella la cui data di inizio e' cambiata (o resettata)
* - la creazione delle tappe che l'utente non ha configurato facendole ereditare dalla precedente,
* - l'inizializzazione corretta della data/ora di inizio/fine tappa di ogni tappa
* - la predisposizione in base alla nuova configurazione :
* - della cancellazione fisica del compenso se non piu' richiesto
* - della cancellazione dell'obbligazione se e' richiesto il compenso
*/
public Forward doFineConfigurazioneTappa(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (!bp.isEditable() || bp.isSearching())
return context.findDefaultForward();
if (bp.isInputReadonly())
throw new it.cnr.jada.comp.ApplicationException("Missione non modificabile!");
if (missione.getTappeMissioneColl() == null || missione.getTappeMissioneColl().isEmpty())
throw new it.cnr.jada.comp.ApplicationException("Inserire almeno la prima tappa !");
if (missione.isTappeConfigurate()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Tappe gia' configurate!");
return context.findDefaultForward();
}
if (!missione.isTappeEstereCoerenti()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Le tappe estere devono avere tutte la stessa tipologia di Trattamento di missione!");
return context.findDefaultForward();
}
if (missione.getCrudStatus() == OggettoBulk.NORMAL || missione.getCrudStatus() == OggettoBulk.TO_BE_UPDATED) {
bp.cancellaTappePhisically(context);
missione = (MissioneBulk) bp.getModel();
}
doControlliPerCompenso(context, missione);
missione = (MissioneBulk) bp.getModel();
bp.fineConfigurazioneTappa(context);
if (missione.isMissioneConRimborso() && !bp.isRimborsoValidoPerDurataTappeEstere(context)) {
missione.setTappeConfigurate(false);
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "La durata delle tappe estere è inferiore alle 24 ore: Trattamento alternativo di missione non consentito!");
return context.findDefaultForward();
}
// Riseleziono la tappa gia' selezionata (refresh)
bp.getTappaController().setSelection(context, bp.getTappaController().getSelection());
String str = bp.getMessage();
if (str != null)
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, str + "\nConfigurazione terminata con successo.");
else
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Configurazione terminata con successo.");
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione del bottone di fine inserimento spese.
* Viene eseguito un salvataggio temporaneo della missione,viene lanciata la procedura per la
* gestione abbattimenti (spese eleggibili) e per la generazione della diaria
*/
public Forward doFineInserimentoSpese(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
MissioneBulk oldMissione = null;
if (missione.getMissioneIniziale() != null)
oldMissione = (MissioneBulk) missione.getMissioneIniziale().clone();
if ((bp.isEditable()) && (!bp.isSearching())) {
if (bp.isInputReadonly())
throw new it.cnr.jada.comp.ApplicationException("Missione non modificabile!");
if (missione.isSpeseInserite()) {
setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Spese gia' confermate!");
return context.findDefaultForward();
}
// Salvo temporaneamente la missione per potere lanciare le
// procedure di generazione Diaria + Abbattimenti
missione = bp.generaDiaria(context, missione);
// A differenza della diaria, il rimborso viene generato solo se previsto
// Controllo che non sia già inserito (poichè non viene sempre cancellato come la diaria)
if (missione.isMissioneConRimborso() && (missione.getRimborsoMissioneColl() == null || missione.getRimborsoMissioneColl().isEmpty()))
missione = bp.generaRimborso(context, missione);
// Verifico se devo scollegare la scadenza
doControlliPerFineSpese(context, missione);
missione.setSpeseInserite(true);
missione.setMissioneIniziale(oldMissione);
if (missione.isMissioneConRimborso())
doTab(context, "tab", "tabDettaglioRimborso");
else
doTab(context, "tab", "tabDettaglioDiaria");
bp.setModel(context, missione);
}
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione di un terzo.
* Se la missione possiede dei dettagli di spesa/diaria viene chiesto all'utente se proseguire con la loro cancellazione.
*/
public Forward doFreeSearchFind_terzo(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isEditable() && !bp.isSearching() && missione.getDt_inizio_missione() == null)
throw new it.cnr.jada.comp.ApplicationException("Impostare la data di inizio missione");
if (missione.getDettagliMissioneColl().isEmpty())
return freeSearch(context, bp.getFormField("find_terzo"));
else {
OptionBP option = openConfirm(context, "I dettagli della missione verranno cancellati. Proseguire ??", OptionBP.CONFIRM_YES_NO, "doConfermaTerzoFreeSearchChange");
return option;
}
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la ricerca del tipo spesa assicurandosi che l'utente abbia gia' selezionato
* un giorno.
* Il giorno serve per recuperare la configurazione della relativa tappa, che, nel caso di selezione
* multipla dei giorni, avra' area gografica e nazione uguale alle tappe degli altri giorni
*/
public Forward doFreeSearchFind_tipo_spesa(ActionContext context) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
java.sql.Timestamp primoGG = missione.getPrimoGiornoSpesaSelezionato();
if (primoGG == null)
throw new it.cnr.jada.action.MessageToUser("Selezionare il giorno !");
return freeSearch(context, bp.getSpesaController().getFormField("find_tipo_spesa"));
}
/**
* Il metodo gestisce l'apertura della finestra del compenso in compenso
*/
private Forward doModificaCompenso(ActionContext context) throws BusinessProcessException {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
it.cnr.contab.compensi00.bp.CRUDCompensoBP nbp = it.cnr.contab.compensi00.bp.CRUDCompensoBP.getBusinessProcessFor(context, missione.getCompenso(), "MRSWTh");
nbp.edit(context, missione.getCompenso());
missione.setCompenso((CompensoBulk) nbp.getModel());
missione.getCompenso().setStatoCompensoToEseguiCalcolo();
it.cnr.contab.compensi00.ejb.CompensoComponentSession component = (it.cnr.contab.compensi00.ejb.CompensoComponentSession) bp.createComponentSession("CNRCOMPENSI00_EJB_CompensoComponentSession", it.cnr.contab.compensi00.ejb.CompensoComponentSession.class);
CompensoBulk compenso = component.inizializzaCompensoPerMissione(context.getUserContext(), missione.getCompenso(), missione);
nbp.setModel(context, compenso);
context.addHookForward("bringback", this, "doBringBackCompenso");
HookForward hook = (HookForward) context.findForward("bringback");
return context.addBusinessProcess(nbp);
} catch (Throwable ex) {
throw new BusinessProcessException(ex);
}
}
/**
* Il metodo gestisce l'aggiornamento automatico della scadenza associata alla missione.
* Al termine dell'aggiornamento viene messo un lock alla scadenza e vengono sincronizzate le scadenze
* eventualmente elaborate dalla missione corrente
*/
public Forward doModificaScadenzaInAutomatico(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.calcolaConsuntivi();
boolean viewMode = bp.isViewing();
if (!missione.isMissioneConObbligazione())
throw new it.cnr.jada.comp.ApplicationException("Selezionare la scadenza di impegno da modificare!");
if ((missione.getImporto_scadenza_obbligazione() == null) || (missione.getImporto_scadenza_obbligazione().compareTo(new java.math.BigDecimal(0)) == 0))
throw new it.cnr.jada.comp.ApplicationException("L'mporto della missione e' nullo!");
Obbligazione_scadenzarioBulk scadenza = missione.getObbligazione_scadenzario();
it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);
try {
scadenza = (Obbligazione_scadenzarioBulk) h.modificaScadenzaInAutomatico(
context.getUserContext(),
scadenza,
missione.getImporto_scadenza_obbligazione(),
false);
h.lockScadenza(context.getUserContext(), scadenza);
missione.addToDefferredSaldi(scadenza.getObbligazione(), scadenza.getObbligazione().getSaldiInfo());
missione.gestisciCambioSelezioneScadenza(scadenza);
missione.setObbligazione_scadenzario(scadenza);
bp.setDirty(true);
bp.setModel(context, missione);
return context.findDefaultForward();
} catch (it.cnr.jada.comp.ComponentException e) {
if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.CheckDisponibilitaCassaFailed)
throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.SfondamentoPdGException)
throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
throw e;
}
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Alla selezione del bottone di Ricerca il sistema abilita i campi della spesa o della tappa
* nell'eventualità che l'utente si trovasse in stato di Edit su una Spesa o Tappa
*/
public Forward doNuovaRicerca(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
if (bp.getSpesaController().isEditingSpesa())
basicDoUndoSpesa(context);
if (bp.isEditingTappa())
basicDoUndoTappa(context);
return super.doNuovaRicerca(context);
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Alla selezione del bottone "Nuovo" il sistema visualizza il primo Tab
*/
public Forward doNuovo(ActionContext context) {
super.doTab(context, "tab", "tabTestata");
return (super.doNuovo(context));
}
/**
* Il metodo verifica che alla selezione di una banca il compenso eventualmente associato alla missione
* sia modificabile. In caso contrario la selezione viene annulata
*/
public Forward doOnBancaChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
BancaBulk oldBanca = ((MissioneBulk) bp.getModel()).getBanca();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
missione.isCompensoModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setBanca(oldBanca);
return handleException(context, e);
}
} catch (Throwable t) {
return handleException(context, t);
}
return context.findDefaultForward();
}
/**
* Il metodo gestise la mancata disponibilita' di cassa in fase di associazione della missione ad
* una scadenza.
*/
public Forward doOnCheckDisponibilitaCassaFailed(ActionContext context, int option) {
if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
try {
boolean modified = fillModel(context);
OptionRequestParameter userConfirmation = new OptionRequestParameter();
userConfirmation.setCheckDisponibilitaDiCassaRequired(Boolean.FALSE);
bp.setUserConfirm(userConfirmation);
if (bp.isBringBack())
doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
else
doSalva(context);
} catch (Throwable e) {
return handleException(context, e);
}
}
return context.findDefaultForward();
}
/**
* Metodo utilizzato per gestire la conferma dell'inserimento/modifica di una obbligazione che ha sfondato
* la disponibilità per il contratto
*
* @param context ActionContext in uso.
* @param option Esito della risposta alla richiesta di sfondamento
* @return Forward
* @throws RemoteException
*/
public Forward doOnCheckDisponibilitaContrattoFailed(ActionContext context, int option) {
if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
try {
boolean modified = fillModel(context);
OptionRequestParameter userConfirmation = new OptionRequestParameter();
userConfirmation.setCheckDisponibilitaContrattoRequired(Boolean.FALSE);
bp.setUserConfirm(userConfirmation);
if (bp.isBringBack())
doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
else
doSalva(context);
} catch (Throwable e) {
return handleException(context, e);
}
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce la valorizzazione della data di registrazione.
* Nel caso si stia modificando la data di registrazione, il metodo :
* - verifica se la modifica puo' essere effettuata
* - valida la nuova data di registrazione
* - verifica che il terzo e i tipi trattamento siano ancora validi.
* Se la validazione non ha successo e ho associato un compenso non posso proseguire
* Se la validazione non ha successo e non ho un compenso chiedo all'utente se proseguire e
* quindi reinizializzare il terzo e ricaricarire i tipi trattamento
*/
public Forward doOnDataRegistrazioneChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
java.sql.Timestamp oldData = ((MissioneBulk) bp.getModel()).getDt_registrazione();
Rif_inquadramentoBulk aInquadramento = ((MissioneBulk) bp.getModel()).getRif_inquadramento();
it.cnr.contab.compensi00.tabrif.bulk.Tipo_trattamentoBulk aTrattamento = ((MissioneBulk) bp.getModel()).getTipo_trattamento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isSearching())
return context.findDefaultForward();
try {
missione.isDataRegistrazioneModificabile();
bp.validaDataRegistrazione(context);
} catch (Throwable ex) {
missione.setDt_registrazione(oldData);
return handleException(context, ex);
}
int errorCodeTerzo = bp.validaTerzo(context, false);
if (errorCodeTerzo == 2 || errorCodeTerzo == 8 || errorCodeTerzo == 10) {
String msg = null;
switch (errorCodeTerzo) {
case 2: {
msg = "Il terzo selezionato non è più valido!";
break;
}
case 10: {
msg = "Il tipo trattamento selezionato non è più valido!";
break;
}
}
if (missione.isMissioneConCompenso()) {
// Missione legata a compensi. Il messaggio deve essere bloccante
missione.setDt_registrazione(oldData);
throw new it.cnr.jada.comp.ApplicationException(msg + " Operazione non consentita.");
} else {
// Se la missione non e' legata a compenso
// (fase di inserimento) il messaggio deve solo essere informativo
msg = msg + " I dati verranno persi. Vuoi continuare?";
}
OptionBP option = openConfirm(context, msg, OptionBP.CONFIRM_YES_NO, "doConfermaDataRegistrazioneChange");
option.addAttribute("dataReg", oldData);
option.addAttribute("errorCodeTerzo", new Integer(errorCodeTerzo));
return option;
}
bp.findTipiTrattamento(context);
bp.ripristinaSelezioneTipoTrattamento(aTrattamento);
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Il metodo gestisce la modifica degli importi della diaria.
* La modifica non e' fattibile se ho associato un compenso pagato o un anticipo rimborsato
* La modifica deve rispettare alcune regole :
* - la quota esente non deve superare l'importo netto
* - l'importo netto non deve superare l'importo lordo
* Se l'utente ha modificato l'importo netto o la quota esente di un dettaglio di diaria devo
* impostare la flag "fl_diaria_manuale" a Y (cio' significa che il dettaglio e' stato modificato
* manualmente)
*/
public Forward doOnDiariaManuale(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Missione_dettaglioBulk aVecchiaDiaria = (Missione_dettaglioBulk) bp.getDiariaController().getModel().clone();
aVecchiaDiaria.getMissione().isInserimentoSpeseModificabile();
fillModel(context);
Missione_dettaglioBulk aDiaria = (Missione_dettaglioBulk) bp.getDiariaController().getModel();
// Controlli sui valori nulli
if (aDiaria.getIm_diaria_netto() == null)
aDiaria.setIm_diaria_netto(new java.math.BigDecimal(0));
if (aDiaria.getIm_quota_esente() == null)
aDiaria.setIm_quota_esente(new java.math.BigDecimal(0));
// Errore : quota esente > netto
if (aDiaria.getIm_quota_esente().compareTo(aDiaria.getIm_diaria_netto()) > 0) {
aDiaria.setIm_diaria_netto(aVecchiaDiaria.getIm_diaria_netto());
aDiaria.setIm_quota_esente(aVecchiaDiaria.getIm_quota_esente());
throw new it.cnr.jada.comp.ApplicationException("La quota esente non puo' essere superiore all'importo netto della diaria!");
}
// Errore : netto > lordo
if (aDiaria.getIm_diaria_netto().compareTo(aDiaria.getIm_diaria_lorda()) > 0) {
aDiaria.setIm_diaria_netto(aVecchiaDiaria.getIm_diaria_netto());
aDiaria.setIm_quota_esente(aVecchiaDiaria.getIm_quota_esente());
throw new it.cnr.jada.comp.ApplicationException("L'importo netto della diaria non puo' essere superiore all'importo lordo della diaria!");
}
if ((aVecchiaDiaria.getFl_diaria_manuale() != null) &&
(aVecchiaDiaria.getFl_diaria_manuale().booleanValue())) {
return context.findDefaultForward();
}
if (aVecchiaDiaria.getIm_diaria_netto() == null)
aVecchiaDiaria.setIm_diaria_netto(new java.math.BigDecimal(0));
if (aVecchiaDiaria.getIm_quota_esente() == null)
aVecchiaDiaria.setIm_quota_esente(new java.math.BigDecimal(0));
if ((!aDiaria.getIm_diaria_netto().equals(aVecchiaDiaria.getIm_diaria_netto())) ||
(!aDiaria.getIm_quota_esente().equals(aVecchiaDiaria.getIm_quota_esente()))) {
aDiaria.setFl_diaria_manuale(new Boolean(true));
}
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la modifica della data di fine missione, verifica se tale data puo' essere modificata
* e verifica la validità del nuovo periodo di inizio/fine della missione.
* Vengono ricostruite le collection dei giorni della missione.
* Se cambio la data di fine missione :
* - se la modidica e' in aumento l'applicazione propone la cancellazione di eventuali dettagli di
* spesa/diaria e forza la riconfigurazione delle tappe
* - se la modifica e' in diminuzione (mi comporto come se modificassi la data di inizio missione) l'applicazione
* propone la cancellazione di eventuali tappe e dettagli dispesa/diaria
*/
public Forward doOnFineMissioneChange(ActionContext context) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
java.sql.Timestamp oldDataFine = ((MissioneBulk) bp.getModel()).getDt_fine_missione();
try {
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isSearching())
return context.findDefaultForward();
if (((MissioneBulk) bp.getModel()).getDt_fine_missione() == null) {
// cancello la collection dei giorni
if (missione.getCollectionGiorni() != null && !missione.getCollectionGiorni().isEmpty())
missione.setCollectionGiorni(null);
return context.findDefaultForward();
}
try {
missione.isDataFineModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setDt_fine_missione(oldDataFine);
return handleException(context, e);
}
try {
bp.checkValiditaInizioFineMissione(context);
} catch (MessageToUser e) {
missione.setDt_fine_missione(oldDataFine);
return handleException(context, e);
}
GregorianCalendar data_a = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar old_data_a = (GregorianCalendar) GregorianCalendar.getInstance();
data_a.setTime(((MissioneBulk) bp.getModel()).getDt_fine_missione());
if (oldDataFine != null)
old_data_a.setTime(oldDataFine);
int annoCompetenzaA = data_a.get(java.util.GregorianCalendar.YEAR);
int annoOldCompetenzaA = 0;
if (oldDataFine != null)
annoOldCompetenzaA = old_data_a.get(java.util.GregorianCalendar.YEAR);
if (bp.isTerzoCervellone(context.getUserContext(), (MissioneBulk) bp.getModel()) &&
annoOldCompetenzaA != 0 &&
annoCompetenzaA != annoOldCompetenzaA) {
((MissioneBulk) bp.getModel()).setDt_fine_missione(oldDataFine);
throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita. Non è possibile cambiare l'anno di Fine missione poichè il Terzo scelto potrebbe essere soggetto ad Agevolazioni per 'Rientro dei Cervelli'.");
}
if (oldDataFine == null)
return context.findDefaultForward();
GregorianCalendar gcUltimoGiorno = (GregorianCalendar) missione.getGregorianCalendar(oldDataFine).clone();
GregorianCalendar gcFineMissione = missione.getGregorianCalendar(missione.getDt_fine_missione());
if (gcFineMissione != null)
gcFineMissione = (GregorianCalendar) gcFineMissione.clone();
if (gcUltimoGiorno.equals(gcFineMissione))
return context.findDefaultForward();
if ((gcFineMissione != null) && (gcFineMissione.after(gcUltimoGiorno))) {
// Se la data di fine missione è cambiata in aumento e ho dei dettagli di spesa/diaria
// ne propongo la cancellazione
if (missione.getDettagliMissioneColl().size() > 0) {
OptionBP option = openConfirm(context, "La configurazione delle tappe verra' modificata e i dettagli della missione verranno cancellati. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doConfermaFineMissioneInAumentoChange");
option.addAttribute("oldDataFine", oldDataFine);
return option;
} else if ((missione.getTappeMissioneColl() != null) && (missione.getTappeMissioneColl().size() > 0)) {
// Se allungo la durata della missione annulla la data fine validita dell'ultima tappa
Missione_tappaBulk ultimaTappa = (Missione_tappaBulk) missione.getTappeMissioneColl().get(missione.getTappeMissioneColl().size() - 1);
if (ultimaTappa != null) {
ultimaTappa.setDt_fine_tappa(null);
missione.setTappeConfigurate(false);
}
}
// Resetto la collection dei giorni in modo da ricostruirla
missione.setCollectionGiorni(null);
} else {
// Se la data di fine missione è cambiata e in diminuzione e ho delle tappe configurate e dei dettagli di spesa/diaria
// ne propongo la cancellazione
if (missione.getDettagliMissioneColl().size() > 0) {
OptionBP option = openConfirm(context, "La configurazione delle tappe e i dettagli della missione verranno cancellati. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doConfermaFineMissioneChange");
option.addAttribute("oldDataFine", oldDataFine);
return option;
}
// Se la data di fine missione è cambiata in diminuzione e ho delle tappe configurate ne
// propongo la cancellazione
else if ((missione.getTappeMissioneColl() != null) && (missione.getTappeMissioneColl().size() > 0)) {
OptionBP option = openConfirm(context, "La configurazione delle tappe della missione verra' cancellata. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doConfermaFineMissioneChange");
option.addAttribute("oldDataFine", oldDataFine);
return option;
}
// Resetto la collection dei giorni in modo da ricostruirla
if (gcFineMissione != null)
missione.setCollectionGiorni(null);
}
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione di un giorno nel Tab dei consuntivi.
* A fronte della selezione del giorno, l'applicazione evidenzia (seleziona)
* le spese del giorno selezionato e calcola i vari importi di consuntivo
* della missione per quel giorno
*/
public Forward doOnGiornoConsuntivoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
boolean isDirty = bp.isDirty();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
bp.selezionaDettagliConsuntivo(context);
missione.calcolaConsuntiviSpeseDelGiorno();
missione.calcolaConsuntiviDiariaDelGiorno();
missione.calcolaConsuntiviRimborsoDelGiorno();
bp.setDirty(isDirty);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione del giorno relativo al dettaglio di spesa.
* Se l'utente seleziona dei giorni di spesa diversi devo inizializzare
* tutti i campi della spesa perche' il tipo spesa, il tipo pasto e
* il rimborso km sono ricercati in base alla tappa del giorno selezionato.
*
* Se l'utente ha selezionato piu' di un giorno di spesa mi assicuro che
* tutte le relative tappe abbiano stessa area geografica e progressivo nazione
* (Questo serve affinche' i tipi spesa, pasto, rimborso km... siano
* coerenti, cioe' abbiano ad esempio gli stessi massimali per ogni giorno)
*
* Se ho impostato la valuta ma non il cambio alla selezione dei giorni
* propongo il cambio valido alla data del primo giorno selezionato
*/
public Forward doOnGiornoSpesaChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
fillModel(context);
Missione_dettaglioBulk aSpesa = (Missione_dettaglioBulk) bp.getSpesaController().getModel();
MissioneBulk missione = (MissioneBulk) bp.getModel();
// Ripulisco i campi
doBlankSearchFind_tipo_spesa(context, aSpesa);
aSpesa.setCambio_spesa(null);
// Verifico coerenza tappe dei giorni selezionati
if (missione.isSelezioneGiorniSpesaMultipla() && !missione.isSelezioneGiorniSpesaValida()) {
missione.setCollectionGiorniSpeseSelezionati(null);
throw new it.cnr.jada.comp.ApplicationException("Selezione non valida! Le relative tappe non hanno stessa area geografica e/o nazione.");
}
java.sql.Timestamp primoGiorno = missione.getPrimoGiornoSpesaSelezionato();
// Inizializzo il cambio valido al primo giorno della selezione
if (primoGiorno != null && aSpesa.getCd_divisa_spesa() != null &&
(aSpesa.getCambio_spesa() == null || (aSpesa.getCambio_spesa().compareTo(new java.math.BigDecimal(0)) < 1)))
bp.setCambioSpesaDefault(context, aSpesa);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la valorizzazione dell'importo della spesa.
* Se si tratta di una spesa di tipo TRASPORTO devo porre di default l'importo
* base maggiorazione uguale all'importo inserito dall'utente
*/
public Forward doOnImSpesaDivisaChange(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isSearching())
return context.findDefaultForward();
Missione_dettaglioBulk spesa = (Missione_dettaglioBulk) bp.getSpesaController().getModel();
if (spesa != null && spesa.isTrasporto()) {
if (spesa.getIm_spesa_divisa() == null)
spesa.setIm_spesa_divisa(new java.math.BigDecimal(0));
spesa.setIm_base_maggiorazione(spesa.getIm_spesa_divisa());
}
return context.findDefaultForward();
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Il metodo gestisce la valorizzazione della data di inizio missione.
* Il metodo verifica se la data puo' essere modificata e verifica se il periodo inizio/fine
* missione e' ancora valido.
* Per poter modificare la data di inizio missione devo proporre all'utente :
* - di ricaricare i Tipi rapporto la cui validita' dipende dalla data inizio missione
* - la cancellazione delle tappe e/o dettagli se presenti
*/
public Forward doOnInizioMissioneChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
java.sql.Timestamp oldDataIniziale = ((MissioneBulk) bp.getModel()).getDt_inizio_missione();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isSearching())
return context.findDefaultForward();
if (missione.getDt_inizio_missione() == null) {
// cancello la collection dei giorni
if (missione.getCollectionGiorni() != null && !missione.getCollectionGiorni().isEmpty())
missione.setCollectionGiorni(null);
return context.findDefaultForward();
}
if (oldDataIniziale == null)
return context.findDefaultForward();
try {
missione.isDataInizioModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setDt_inizio_missione(oldDataIniziale);
return handleException(context, e);
}
try {
bp.checkValiditaInizioFineMissione(context);
} catch (MessageToUser e) {
missione.setDt_inizio_missione(oldDataIniziale);
return handleException(context, e);
}
if (!missione.isInizioMissioneCambiato(missione.getDt_inizio_missione(), oldDataIniziale))
return context.findDefaultForward();
GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar old_data_da = (GregorianCalendar) GregorianCalendar.getInstance();
data_da.setTime(((MissioneBulk) bp.getModel()).getDt_inizio_missione());
if (oldDataIniziale != null)
old_data_da.setTime(oldDataIniziale);
int annoCompetenzaDa = data_da.get(java.util.GregorianCalendar.YEAR);
int annoOldCompetenzaDa = 0;
if (oldDataIniziale != null)
annoOldCompetenzaDa = old_data_da.get(java.util.GregorianCalendar.YEAR);
if (bp.isTerzoCervellone(context.getUserContext(), (MissioneBulk) bp.getModel()) &&
annoOldCompetenzaDa != 0 &&
annoCompetenzaDa != annoOldCompetenzaDa) {
((MissioneBulk) bp.getModel()).setDt_inizio_missione(oldDataIniziale);
throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita. Non è possibile cambiare l'anno di Inizio missione poichè il Terzo scelto potrebbe essere soggetto ad Agevolazioni per 'Rientro dei Cervelli'.");
}
// Se ho dei dettagli di spesa/diaria (avro' sicuramente anche le tappe) ne propongo la cancellazione
if (!missione.getDettagliMissioneColl().isEmpty()) {
OptionBP option;
option = openConfirm(context, "La configurazione delle tappe e i dettagli della missione verranno cancellati. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doConfermaInizioMissioneChange");
option.addAttribute("oldDataIniziale", oldDataIniziale);
return option;
}
// Se ho delle tappe (ma non i dettagli) ne propongo la cancellazione
else if (missione.getTappeMissioneColl() != null && !missione.getTappeMissioneColl().isEmpty()) {
OptionBP option;
option = openConfirm(context, "La configurazione delle tappe della missione verra' cancellata. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doConfermaInizioMissioneChange");
option.addAttribute("oldDataIniziale", oldDataIniziale);
return option;
}
// Se ho gia' caricato i tipi rapporto li ricarico in base alla nuova data di inizio missione (validita')
// Se i tipi rapporto non sono stati caricati ma il terzo e' gia valorizzato li ricarico (caso in cui
// non erano stati trovati)
if ((missione.getTipi_rapporto() != null && !missione.getTipi_rapporto().isEmpty()) ||
((missione.getTipi_rapporto() == null || missione.getTipi_rapporto().isEmpty()) && missione.areCampiPerRicercaTipiRapportoValorizzati())) {
missione.setInquadramenti(null);
missione.setRif_inquadramento(null);
missione.setTipi_trattamento(null);
missione.setCd_trattamento(null);
missione.setTipo_trattamento(null);
bp.findTipiRapporto(context);
}
// Altrimenti cancello la collection dei giorni
if (missione.getCollectionGiorni() != null && !missione.getCollectionGiorni().isEmpty())
missione.setCollectionGiorni(null);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione dell'inquadramento.
* Se la missione possiede dei dettagli di spesa/diaria devo proporre all'utente la loro cancellazione
* per poeter procedere con la modifica
*/
public Forward doOnInquadramentoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Rif_inquadramentoBulk oldInquadramento = ((MissioneBulk) bp.getModel()).getRif_inquadramento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (!missione.getDettagliMissioneColl().isEmpty() &&
oldInquadramento != null && oldInquadramento.getPg_rif_inquadramento() != null &&
!oldInquadramento.getPg_rif_inquadramento().equals(missione.getPg_rif_inquadramento())) {
OptionBP option = openConfirm(context, "I dettagli della missione verranno cancellati. Proseguire ??", OptionBP.CONFIRM_YES_NO, "doConfermaInquadramentoChange");
option.addAttribute("oldInquadramento", oldInquadramento);
return option;
}
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione della flag "commerciale/istituzionale"
* L'utente non può modificare la missione da Istituzionale a Commerciale o viceversa se l'eventuale
* compenso associato alla missione non e' piu' modificabile o se la missione è collegata ad
* anticipo rimborsato.
* Alla modifica del tipo da istituzionale a commerciale vanno ricaricati i tipi trattamento. Se
* l'applicazione non ne trova di eleggibili annullo la modifica
*/
public Forward doOnIstituzionaleCommercialeChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
String oldTipo = ((MissioneBulk) bp.getModel()).getTi_istituz_commerc();
java.util.Collection oldTipiTrattamento = ((MissioneBulk) bp.getModel()).getTipi_trattamento();
Tipo_trattamentoBulk oldTipoTrattamento = ((MissioneBulk) bp.getModel()).getTipo_trattamento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isSearching())
return context.findDefaultForward();
try {
missione.isIstituzionaleCommercialeModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setTi_istituz_commerc(oldTipo);
return handleException(context, e);
}
missione.setTipi_trattamento(null);
missione.setTipo_trattamento(null);
// Ricerco i tipi trattamento solo se ho tutte le condizioni di ricerca
if (missione.areCampiPerRicercaTipiTrattamentoValorizzati())
bp.findTipiTrattamento(context);
// Se la missione ha collegato un compenso e se la nuova selezione non fornisce
// alcun tipo di trattamento allora ripristino la selezione precedente
if (missione.isMissioneConCompenso() && (missione.getTipi_trattamento() == null || missione.getTipi_trattamento().isEmpty())) {
missione.setTi_istituz_commerc(oldTipo);
missione.setTipo_trattamento(oldTipoTrattamento);
missione.setTipi_trattamento(oldTipiTrattamento);
} else
missione.setCd_trattamento(null);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione di una modalità di pagamento.
* L'utente non può modificare le modalita se ho associato un compenso pagato
* Alla selezione della Modalita di Pagamento l'applicazione ricerca le banche eleggibili
*/
public Forward doOnModalitaPagamentoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Rif_modalita_pagamentoBulk oldModalita = ((MissioneBulk) bp.getModel()).getModalita_pagamento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
missione.isCompensoModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setModalita_pagamento(oldModalita);
return handleException(context, e);
}
if (missione.getModalita_pagamento() != null) {
MissioneComponentSession component = (MissioneComponentSession) bp.createComponentSession();
java.util.Collection coll = component.findListabanche(context.getUserContext(), missione);
// Assegno di default la prima banca tra quelle selezionate
if (coll == null || coll.isEmpty())
missione.setBanca(null);
else
missione.setBanca((it.cnr.contab.anagraf00.core.bulk.BancaBulk) new java.util.Vector(coll).firstElement());
} else {
missione.setBanca(null);
}
bp.setModel(context, missione);
bp.resyncChildren(context);
} catch (Throwable t) {
return handleException(context, t);
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce il salvataggio della missione e l' eventuale salvataggio del compenso
*/
private Forward doOnSalvataggio(ActionContext context, MissioneBulk missione) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk oldMissioneIniziale = null;
try {
if (missione.getMissioneIniziale() == null)
oldMissioneIniziale = new MissioneBulk();
else
oldMissioneIniziale = (MissioneBulk) missione.getMissioneIniziale().clone();
// Salvo la missione.
doSalvaMissione(context, missione); // reinizializza 'missioneIniziale'
// Nel metodo 'doSalvaMissione' e' stato fatto un setModel() ma
// non reinizializzo la variabile 'missione' con un getModel()
// altrimenti mi perderei il valore precedente delle variabili
// che mi servono per capire se salvare o meno il compenso.
// Se facessi un getModel caricherei la missione salvata a DB
// Se il compenso e' obbligatorio e la missione e' definitiva procedo con il suo salvataggio
if (missione.isCompensoObbligatorio() && missione.isMissioneDefinitiva()) {
// Finche' non termina il salvataggio del compenso
// devo tenere in memoria la missione iniziale prima del precente
// salvataggio
((MissioneBulk) bp.getModel()).setMissioneIniziale((MissioneBulk) oldMissioneIniziale.clone());
if (missione.getTipo_trattamento() == null || missione.getTipo_trattamento().getCd_trattamento() == null)
throw new it.cnr.jada.comp.ApplicationException("Selezionare un Tipo Trattamento per poter creare un compenso !");
if (!missione.isMissioneConCompenso())
return doCreaCompenso(context);
else if (missione.isCompensoDaModificareInManuale())
return doModificaCompenso(context);
else if (missione.isCompensoDaModificareInAutomatico())
bp.updateCompenso(context, missione);
}
// Fine salvataggio missione nel caso il compenso non sia previsto
bp.commitUserTransaction();
bp.setCarryingThrough(false);
bp.setMessage("Salvataggio terminato con successo.");
return context.findDefaultForward();
} catch (Throwable e) {
try {
missione = (MissioneBulk) bp.getModel();
if (oldMissioneIniziale.getPg_missione() != null && oldMissioneIniziale.getPg_missione().compareTo(new Long(0)) > 0) {
missione.setMissioneIniziale((MissioneBulk) oldMissioneIniziale.clone());
missione.setTi_provvisorio_definitivo(missione.getMissioneIniziale().getTi_provvisorio_definitivo());
} else {
// Sto creando una missione, quindi non ho quella iniziale
missione.setMissioneIniziale(null);
missione.setTi_provvisorio_definitivo(MissioneBulk.SALVA_TEMPORANEO);
}
bp.setModel(context, missione);
} catch (Throwable a) {
return handleException(context, a);
}
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione dei termini di pagamento.
* La modifica e' ammessa solo se l'eventuale compenso associato e' modificabile (es.non pagato)
*/
public Forward doOnTerminiPagamentoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Rif_termini_pagamentoBulk oldTermini = ((MissioneBulk) bp.getModel()).getTermini_pagamento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
missione.isCompensoModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setTermini_pagamento(oldTermini);
return handleException(context, e);
}
} catch (Throwable t) {
return handleException(context, t);
}
return context.findDefaultForward();
}
/**
* Il metodo gestisce la selezione del Tipo Anagrafico (dipendente/altro).
* Se ho dei dettagli di spesa/diaria il sistema propone all'utente la loro cancellazione.
* Se modifico il Tipo Anagrafico dovro' per forza inizializzare il Terzo
*/
public Forward doOnTipoAnagraficoChange(ActionContext context) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
String oldTipoAnagrafico = ((MissioneBulk) bp.getModel()).getTi_anagrafico();
try {
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (oldTipoAnagrafico == null || oldTipoAnagrafico.compareTo(missione.getTi_anagrafico()) == 0)
return context.findDefaultForward();
if (bp.isSearching())
return context.findDefaultForward();
if (missione.getDettagliMissioneColl().isEmpty()) {
missione.inizializzaTerzo();
return context.findDefaultForward();
} else {
OptionBP option = openConfirm(context, "I dettagli della missione verranno cancellati. Proseguire ??", OptionBP.CONFIRM_YES_NO, "doConfermaTipoAnagraficoChange");
option.addAttribute("oldTipoAnagrafico", oldTipoAnagrafico);
return option;
}
} catch (Throwable t) {
return handleException(context, t);
}
}
public OptionBP openConfirm(ActionContext actioncontext, String message, int type, String action) throws BusinessProcessException {
OptionBP optionbp = createOptionBP(actioncontext, message, FormBP.QUESTION_MESSAGE, type, action);
return (OptionBP) actioncontext.addBusinessProcess(optionbp);
}
public OptionBP createOptionBP(ActionContext actioncontext, String message, int icon, int type, String action) {
try {
OptionBP optionbp = (OptionBP) actioncontext.createBusinessProcess("OptionBP");
optionbp.setMessage(icon, message);
optionbp.setType(type);
HookForward hookforward = actioncontext.addHookForward("option", this, "doOption");
hookforward.addParameter("bp", optionbp);
if (action != null)
hookforward.addParameter("action", action);
return optionbp;
} catch (BusinessProcessException businessprocessexception) {
throw new ActionPerformingError(businessprocessexception);
}
}
/**
* Il metodo gestisce la selezione del Tipo Rapporto.
* La modifica è consentita se l'evetuale compenso associato e' modificabile (es. non pagato)
* Per proseguire con la modifica l'applicazione propone la cancellazione degli eventuali dettagli
* di spesa/diaria.
* Alla selezione del Tipo rapporto l'applicazione ricarica i relativi inquadramenti e tipi trattamento.
*/
public Forward doOnTipoRapportoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Tipo_rapportoBulk oldTipoRapporto = ((MissioneBulk) bp.getModel()).getTipo_rapporto();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
missione.isCompensoModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setTipo_rapporto(oldTipoRapporto);
return handleException(context, e);
}
// La prima volta che seleziono il tipo rapporto carico gli inquadramenti
if ((oldTipoRapporto == null || oldTipoRapporto.getCd_tipo_rapporto() == null) && missione.getTipo_rapporto() != null) {
bp.findInquadramentiETipiTrattamento(context);
return context.findDefaultForward();
}
// Se il tipo rapporto e' cambiato
if (!oldTipoRapporto.getCd_tipo_rapporto().equals(missione.getCd_tipo_rapporto())) {
if (missione.getDettagliMissioneColl().size() > 0) {
// Se ho dei dettagli di spesa/diaria ne propongo la cancellazione
OptionBP option = openConfirm(context, "I dettagli della missione verranno cancellati. Proseguire ??", OptionBP.CONFIRM_YES_NO, "doConfermaTipoRapportoChange");
option.addAttribute("oldTipoRapporto", oldTipoRapporto);
return option;
}
// Altrimenti carico gli inquadramenti e i tipi trattamento del nuovo tipo rapporto
else {
bp.findInquadramentiETipiTrattamento(context);
return context.findDefaultForward();
}
}
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la selezione del Tipo Trattamento.
* La modifica è consentita se l'eventuale compenso associato alla missione è modificabile (es. non pagato).
*/
public Forward doOnTipoTrattamentoChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Tipo_trattamentoBulk oldTipoTrattamento = ((MissioneBulk) bp.getModel()).getTipo_trattamento();
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
try {
missione.isCompensoModificabile();
} catch (it.cnr.jada.comp.ApplicationException e) {
missione.setTipo_trattamento(oldTipoTrattamento);
return handleException(context, e);
}
if (missione.getTipo_trattamento() != null && !missione.getTipo_trattamento().getFl_visibile_a_tutti() && !UtenteBulk.isAbilitatoAllTrattamenti(context.getUserContext())) {
missione.setTipo_trattamento(oldTipoTrattamento);
throw new it.cnr.jada.comp.ApplicationException(
"Utente non abilitato all'utilizzo del trattamento selezionato!");
}
if (missione.getTipo_trattamento() == null)
missione.setCd_trattamento(null);
else
missione.setCd_trattamento(missione.getTipo_trattamento().getCd_trattamento());
// A differenza della diaria, il rimborso viene generato solo se previsto
// Poichè cambia il trattamento devo ricalcolarlo (può cambiare la quota esente)
if (missione.isMissioneConRimborso() && missione.getPg_missione() != null)// && (missione.getRimborsoMissioneColl() == null || missione.getRimborsoMissioneColl().isEmpty()))
{
bp.cancellaRimborso(context);
missione = bp.generaRimborso(context, missione);
}
bp.setModel(context, missione);
bp.resyncChildren(context);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce l'apertura dell'obbligazione per un aggiornamento manuale.
* Se la missione non e' modificabile il metodo aprirà la obbligazione in visualizzazione
*/
public Forward doOpenObbligazioniWindow(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.calcolaConsuntivi();
boolean viewMode = bp.isViewing();
// Se la missione risulta pagata
// devo poter aprire l'obbligazione in visualizzazione
if (!missione.isEditable())
viewMode = true;
if (!missione.isMissioneConObbligazione())
throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno da " + (viewMode ? "visualizzare" : "modificare") + " in manuale!");
if (!viewMode && bp instanceof IDocumentoAmministrativoBP)
viewMode = !((IDocumentoAmministrativoBP) bp).getDocumentoAmministrativoCorrente().isEditable();
String status = viewMode ? "V" : "M";
it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP nbp = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getBusinessProcessFor(context, missione.getObbligazione_scadenzario().getObbligazione(), status + "RSWTh");
nbp.edit(context, missione.getObbligazione_scadenzario().getObbligazione());
nbp.selezionaScadenza(missione.getObbligazione_scadenzario(), context);
context.addHookForward("bringback", this, "doBringBackOpenObbligazioniWindow");
HookForward hook = (HookForward) context.findForward("bringback");
return context.addBusinessProcess(nbp);
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la cancellazione di un dettaglio di spesa e verifica che l'operazione
* sia consentita.
* Per proseguire con tale cancellazione l'applicazione propone all'utente la cancellazione
* della diaria se gia' creata.
*/
public Forward doRemoveFromCRUDMain_Spesa(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
it.cnr.jada.util.action.Selection selection = bp.getSpesaController().getSelection();
if (selection.isEmpty())
throw new it.cnr.jada.comp.ApplicationException("Selezionare la spesa che si desidera eliminare!");
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.isInserimentoSpeseModificabile();
// Se ho la diaria ne propongo la cancellazione automatica
// per poter proseguire con la cancellazione della spesa
if ((missione.getDiariaMissioneColl() != null) && (!missione.getDiariaMissioneColl().isEmpty()))
return openConfirm(context, "La Diaria verra' cancellata. Proseguire ?", OptionBP.CONFIRM_YES_NO, "doCancellaDiariaPerCancellazioneSpesa");
else {
// Chiama il metodo "removeFromSpeseMissioneColl" di MissioneBulk
bp.getSpesaController().remove(context);
missione.setSpeseInserite(false);
}
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la cancellazione di una tappa.
* Quando l'utente cancella una tappa l'applicazione deve reinizializzare le date di inizio/fine di tutte le tappe
* per forzarne la riconfigurazione
*/
public Forward doRemoveFromCRUDMain_Tappa(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
it.cnr.jada.util.action.Selection selection = bp.getTappaController().getSelection();
if (selection.isEmpty())
throw new it.cnr.jada.comp.ApplicationException("Selezionare la tappa che si desidera eliminare!");
bp.removeTappa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione del bottone "Ricerca Libera".
* Il metodo visualizza il primo Tab e abilita i campi della spesa o della tappa nel caso
* l'utente si trovi in modalità di edit su una di esse
*/
public Forward doRicercaLibera(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.setTab("tab", "tabTestata");
if (bp.getSpesaController().isEditingSpesa())
basicDoUndoSpesa(context);
if (bp.isEditingTappa())
basicDoUndoTappa(context);
return super.doRicercaLibera(context);
} catch (Throwable ex) {
return handleException(context, ex);
}
}
/**
* Il metodo gestisce l'apertura della finestra di ricerca con filtri o creazione
* di obbligazioni
*/
public Forward doRicercaScadenzaObbligazione(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
missione.calcolaConsuntivi();
if (missione.getTerzo() == null || missione.getCd_terzo() == null)
throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario impostare un fornitore!");
if (missione.getImporto_scadenza_obbligazione() == null || missione.getImporto_scadenza_obbligazione().compareTo(new java.math.BigDecimal(0)) == 0)
throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario valorizzare l'importo!");
Filtro_ricerca_obbligazioniVBulk filtro = new Filtro_ricerca_obbligazioniVBulk();
filtro.setFornitore(missione.getTerzo());
filtro.setIm_importo(missione.getImporto_scadenza_obbligazione());
filtro.setCd_unita_organizzativa(missione.getCd_unita_organizzativa());
filtro.setFl_importo(Boolean.TRUE);
filtro.setData_scadenziario(null);
filtro.setFl_data_scadenziario(Boolean.FALSE);
filtro.setDs_obbligazione("Impegno per missione");
filtro.setDs_scadenza("Scadenza per missione");
BulkBP robp = (BulkBP) context.getUserInfo().createBusinessProcess(context, "RicercaObbligazioniBP", new Object[]{"MRSWTh"});
robp.setModel(context, filtro);
context.addHookForward("bringback", this, "doBringBackRicercaObbligazioniWindow");
return context.addBusinessProcess(robp);
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione del bottone "Riporta avanti". Ciò implica salvare la missione,
* riportare avanti l'obbligazione e committare
*/
public Forward doRiportaAvanti(ActionContext context) throws java.rmi.RemoteException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = null;
try {
fillModel(context);
missione = (MissioneBulk) bp.getModel();
bp.setSavePoint(context, "RIPORTA_AVANTI");
// Salva missione
doSalvaMissione(context, missione);
bp.riportaAvanti(context);
if (bp.getMessage() == null)
bp.setMessage("Salvataggio e riporto all'esercizio successivo eseguito in modo corretto.");
bp.commitUserTransaction();
bp.setCarryingThrough(false);
bp.ricaricaMissioneInModifica(context);
return context.findDefaultForward();
} catch (Throwable e) {
try {
bp.rollbackToSavePoint(context, "RIPORTA_AVANTI");
bp.setModel(context, missione);
} catch (BusinessProcessException v) {
return handleException(context, v);
}
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione del bottone "Riporta indietro". Ciò implica riportare
* indietro l'obbligazione senza committare
*/
public Forward doRiportaIndietro(ActionContext context) throws java.rmi.RemoteException {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.riportaIndietro(context);
return context.findDefaultForward();
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce il riporto della missione selezionata.
* Nel caso di apertura da spesa per fondo economale, viene riportato l'elemento nel fondo
*/
public Forward doRiportaSelezione(ActionContext context, OggettoBulk bulk) throws java.rmi.RemoteException {
BusinessProcess bp = context.getBusinessProcess();
if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP) bp).isSpesaBP()) {
HookForward caller = (HookForward) context.getCaller();
it.cnr.jada.bulk.OggettoBulk selezione = (it.cnr.jada.bulk.OggettoBulk) caller.getParameter("focusedElement");
return basicDoRiportaSelezione(context, selezione);
}
super.doRiportaSelezione(context, bulk);
return context.findDefaultForward();
}
/**
* Il metodo gestisce la selezione del bottone Salva.
* Quando l'utente sta creando una missione puo' salvarla in modo provvisorio o definitivo.
* Il salvataggio provvisorio consente :
* - di salvare una missione in comune altro senza l'obbligo di associarle una scadenza
* - di salvare una missione in comune proprio o estero senza l'obbligo di creare un compenso
* Una missione DEFINITIVA non puo' essere resa PROVVISORIA
* Se la missione e' in fase di creazione o in stato PROVVISORIO :
* - se l'obbligazione e' obbligatoria ma l'utente non l'ha associata chiedo se vuole
* proseguire con un salvataggio definitivo o provvisorio.
* Se definitivo --> l'utente deve associare una obbligazione
* Se provvisorio --> proseguo con il salvataggio
* - se il compenso e' obbligatorio chiedo all'utente se vuole
* proseguire con un salvataggio definitivo o provvisorio.
* Se definitivo --> salvo la missione e creo un compenso
* Se provvisorio --> salvo la missione e non creo un compenso.
* - se ne il compenso ne l'obbligazione sono obbligatori
* (missione in comune altro con anticipo>=missione)
* salvo direttamente la missione in modo definitivo
*/
public Forward doSalva(ActionContext context) throws java.rmi.RemoteException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
try {
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (missione.isObbligazioneObbligatoria() && !missione.isMissioneConObbligazione())
throw new it.cnr.jada.comp.ApplicationException("Associare una scadenza di impegno alla missione !");
if (!missione.isMissioneDefinitiva()) {
// - La missione e' in stato provvisorio ma l'utente ha finalmente agganciato l'obbligazione
// che risulta essere obbligatoria --> la missione diventa definitiva
// - La missione non prevede ne' compenso ne' obbligazione quindi procedo direttamente con
// un salvataggio definitivo (caso comune altro con anticipo>missione)
missione.setMissioneDefinitiva();
return doOnSalvataggio(context, missione);
}
// La missione e' gia definitiva
return doOnSalvataggio(context, missione);
} catch (Throwable t) {
return handleException(context, t);
}
}
public Forward doSalvaProvvisorio(ActionContext context) throws java.rmi.RemoteException {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
try {
fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (!missione.isMissioneDefinitiva()) {
// La missione e' in fase di creazione o in stato provvisorio
if (missione.isCompensoObbligatorio() || (missione.isObbligazioneObbligatoria() && !missione.isMissioneConObbligazione())) {
missione.setMissioneProvvisoria();
} else {
throw new it.cnr.jada.comp.ApplicationException("Non è possibile salvare una missione in provvisorio quando non sono obbligatori il compenso e l'obbligazione");
}
} else {
throw new it.cnr.jada.comp.ApplicationException("Non è possibile salvare una missione in provvisorio quando è già definitiva");
}
return doOnSalvataggio(context, missione);
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo salva la missione e la ricarica in modifica
*/
private void doSalvaMissione(ActionContext context, MissioneBulk missione) throws BusinessProcessException {
CRUDMissioneBP bp = (CRUDMissioneBP) context.getBusinessProcess();
try {
bp.completeSearchTools(context, bp);
bp.validate(context);
bp.saveChildren(context);
} catch (ValidationException ex) {
throw new BusinessProcessException(ex);
}
if (bp.isInserting() || (missione.getPg_missione().compareTo(new Long(0)) == -1))
bp.create(context); // creo la missione
else if (bp.isEditing())
bp.update(context); // modifico la missione
bp.ricaricaMissioneInModifica(context);
}
/**
* Il metodo gestisce la ricerca di un Terzo.
* Se l'utente cambia il terzo e la missione ha dei dettagli di spesa/diaria l'applicazione ne propone
* la cancellazione.
*/
public Forward doCRUDFind_terzo(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isEditable() && !bp.isSearching() && missione.getDt_inizio_missione() == null)
throw new it.cnr.jada.comp.ApplicationException("Impostare la data di inizio missione");
if (missione.getDettagliMissioneColl().isEmpty())
return doCRUD(context, "main.crea_terzo");
else {
OptionBP option = openConfirm(context, I_DETTAGLI_DELLA_MISSIONE_VERRANNO_CANCELLATI_PROSEGUIRE, OptionBP.CONFIRM_YES_NO, "doConfermaTerzoSearchChangeForCRUD");
return option;
}
} catch (Throwable t) {
return handleException(context, t);
}
}
public Forward doSearchFind_terzo(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
bp.fillModel(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (bp.isEditable() && !bp.isSearching() && missione.getDt_inizio_missione() == null)
throw new it.cnr.jada.comp.ApplicationException("Impostare la data di inizio missione");
if (missione.getDettagliMissioneColl().isEmpty())
return search(context, bp.getFormField("find_terzo"), null);
else {
OptionBP option = openConfirm(context, I_DETTAGLI_DELLA_MISSIONE_VERRANNO_CANCELLATI_PROSEGUIRE, OptionBP.CONFIRM_YES_NO, "doConfermaTerzoSearchChange");
return option;
}
} catch (Throwable t) {
return handleException(context, t);
}
}
/**
* Il metodo gestisce la ricerca del Tipo Spesa.
* L'utente puo' ricercare un Tipo Spesa solo se ha gia' selezionato almeno un giorno.
* Il giorno serve per recuperare la configurazione della relativa tappa, che,
* nel caso di selezione multimpla dei giorni, avra' area gografica e nazione
* uguale alle tappe degli altri giorni
*/
public Forward doSearchFind_tipo_spesa(ActionContext context) {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
java.sql.Timestamp primoGG = missione.getPrimoGiornoSpesaSelezionato();
if (primoGG == null)
throw new it.cnr.jada.action.MessageToUser("Selezionare il giorno !");
return search(context, bp.getSpesaController().getFormField("find_tipo_spesa"), null);
}
/**
* Il metodo gestisce la selezione del bottone di ricerca delle Banche
*/
public Forward doSearchListabanche(ActionContext context) {
MissioneBulk missione = (MissioneBulk) getBusinessProcess(context).getModel();
return search(context, getFormField(context, "main.listabanche"), missione.getModalita_pagamento().getTiPagamentoColumnSet());
}
/**
* Il metodo gestisce l'inizializzazione della nazione, divisa e cambio di una tappa in comune altro
* o proprio con i valori di default (Italia, Euro).
*/
public Forward doSetNazioneDivisaCambioItalia(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Missione_tappaBulk missione_tappa = (Missione_tappaBulk) bp.getTappaController().getModel();
fillModel(context);
if (missione_tappa.getComune().equals(Missione_tappaBulk.COMUNE_PROPRIO)) {
missione_tappa.setFl_comune_proprio(new Boolean(true));
missione_tappa.setFl_comune_altro(new Boolean(false));
missione_tappa.setFl_comune_estero(new Boolean(false));
missione_tappa.setFl_no_diaria(new Boolean(true));
//if (bp.isRimborsoEditable(context.getUserContext()))
missione_tappa.setFl_rimborso(new Boolean(false));
}
if (missione_tappa.getComune().equals(Missione_tappaBulk.COMUNE_ALTRO)) {
missione_tappa.setFl_comune_proprio(new Boolean(false));
missione_tappa.setFl_comune_altro(new Boolean(true));
missione_tappa.setFl_comune_estero(new Boolean(false));
missione_tappa.setFl_no_diaria(new Boolean(true));
//if (bp.isRimborsoEditable(context.getUserContext()))
missione_tappa.setFl_rimborso(new Boolean(false));
}
if (missione_tappa.getComune().equals(Missione_tappaBulk.COMUNE_ESTERO)) {
missione_tappa.setFl_comune_proprio(new Boolean(false));
missione_tappa.setFl_comune_altro(new Boolean(false));
missione_tappa.setFl_comune_estero(new Boolean(true));
//missione_tappa.setFl_no_diaria(new Boolean(false));
missione_tappa.setFl_no_diaria(new Boolean(true));
//if (bp.isRimborsoEditable(context.getUserContext()))
missione_tappa.setFl_rimborso(new Boolean(false));
}
bp.setDiariaSiNo(context);
bp.isDiariaEditable(context.getUserContext());
bp.isRimborsoEditable(context.getUserContext());
bp.setNazioneDivisaCambioItalia(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la selezione dei Tab dell'interfaccia "Missione", verificando che i valori inseriti
* nel Tab origine siano corretti
*/
public Forward doTab(ActionContext context, String tabName, String pageName) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (missione == null)
return super.doTab(context, tabName, pageName);
// Da tab Testata
if (bp.isEditable() && !bp.isSearching() && bp.getTab(tabName).equalsIgnoreCase("tabTestata")) {
missione.validaTabTestata();
if (!pageName.equals("tabAnagrafico"))
missione.validaTabAnagrafico();
}
if ("tabAllegati".equalsIgnoreCase(bp.getTab(tabName))) {
fillModel(context);
}
// Da tab Anagrafico
if (bp.isEditable() && !bp.isSearching() && bp.getTab(tabName).equalsIgnoreCase("tabAnagrafico") &&
!pageName.equals("tabTestata"))
missione.validaTabAnagrafico();
// Da tab Configurazione tappe
if ((bp.isEditable()) && (!bp.isSearching()) && (bp.getTab(tabName).equalsIgnoreCase("tabConfigurazioneTappe"))) {
if ((missione.getTappeMissioneColl() != null) &&
(missione.getTappeMissioneColl().size() > 0) &&
(!missione.isTappeConfigurate()))
throw new it.cnr.jada.action.MessageToUser("Confermare la fine della configurazione delle tappe !");
}
// A tab Configurazione tappe
if (bp.isEditable() && !bp.isSearching() && pageName.equals("tabConfigurazioneTappe")) {
if (missione.getTipo_rapporto() == null && missione.getCd_terzo() != null) {
// Se modifico la data inizio missione ripulisco i rapporti
bp.setTab("tab", "tabAnagrafico");
throw new it.cnr.jada.action.MessageToUser("Selezionare il Tipo Rapporto !");
}
}
// A tab Dettaglio Spese
if (bp.isEditable() && !bp.isSearching() && pageName.equals("tabDettaglioSpese")) {
if (missione.getTipo_rapporto() == null && missione.getCd_terzo() != null) {
// Se modifico la data inizio missione ripulisco i rapporti
bp.setTab("tab", "tabAnagrafico");
throw new it.cnr.jada.action.MessageToUser("Selezionare il Tipo Rapporto !");
}
if (missione.getTappeMissioneColl() == null || missione.getTappeMissioneColl().size() == 0)
throw new it.cnr.jada.action.MessageToUser("Occorre prima configurare le tappe della missione !");
if (missione.getTappeMissioneColl() != null && !missione.getTappeMissioneColl().isEmpty() &&
!missione.isTappeConfigurate())
throw new it.cnr.jada.action.MessageToUser("Occorre prima terminare la configurazione delle tappe della missione !");
}
// A tab Documenti Associati
if (bp.isEditable() && !bp.isSearching() && pageName.equals("tabObbligazione")) {
if (!missione.isSpeseInserite())
throw new it.cnr.jada.action.MessageToUser("Selezionare il bottone di Fine Inserimento Spese !");
}
// A tab Consuntivo
if (pageName.equals("tabConsuntivo")) {
missione.setGiorno_consuntivo(null);
missione.inizializzaGiornoConsuntivo(); // Azzero i consuntivi del giorno
bp.getConsuntivoController().reset(context); // Elimino selezioni dalla table del consuntivo
missione.calcolaConsuntivi();
}
return super.doTab(context, tabName, pageName);
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la fine della modalita modifica/inserimento dettaglio di spesa
*/
public Forward doUndoSpesa(ActionContext context) {
try {
basicDoUndoSpesa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce la fine della modalita modifica/inserimento tappa
*/
public Forward doUndoTappa(ActionContext context) {
try {
basicDoUndoTappa(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce l'apertura dell'anticipo in visualizzazione
*/
public Forward doVisualizzaAnticipo(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if (!missione.isMissioneConAnticipo())
throw new it.cnr.jada.comp.ApplicationException("La missione non ha associato alcun anticipo !");
it.cnr.contab.missioni00.bp.CRUDAnticipoBP bpAnticipo = (it.cnr.contab.missioni00.bp.CRUDAnticipoBP) context.getUserInfo().createBusinessProcess(context, "CRUDAnticipoBP", new Object[]{"VRSW"});
bpAnticipo.edit(context, missione.getAnticipo());
return context.addBusinessProcess(bpAnticipo);
} catch (Exception e) {
return handleException(context, e);
}
}
/**
* Il metodo gestisce l'apertura del compenso in visualizzazione
*/
public Forward doVisualizzaCompenso(ActionContext context) {
try {
fillModel(context);
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
MissioneBulk missione = (MissioneBulk) bp.getModel();
if ((!missione.isMissioneConCompenso()) || (missione.getCompenso() == null))
throw new it.cnr.jada.comp.ApplicationException("La missione non ha associato alcun compenso !");
it.cnr.contab.compensi00.bp.CRUDCompensoBP bpCompenso = (it.cnr.contab.compensi00.bp.CRUDCompensoBP) context.getUserInfo().createBusinessProcess(context, "CRUDCompensoBP", new Object[]{"VRSW"});
bpCompenso.edit(context, missione.getCompenso());
return context.addBusinessProcess(bpCompenso);
} catch (Exception e) {
return handleException(context, e);
}
}
public Forward doOnFlDiariaChange(ActionContext context) {
try {
CRUDMissioneBP bp = (CRUDMissioneBP) getBusinessProcess(context);
Missione_tappaBulk missione_tappa = (Missione_tappaBulk) bp.getTappaController().getModel();
fillModel(context);
if (missione_tappa.getComune().equals(Missione_tappaBulk.COMUNE_ESTERO)) {
missione_tappa.setFl_rimborso(new Boolean(false));
if (missione_tappa.getFl_no_diaria()) {
missione_tappa.setFl_no_diaria(new Boolean(true));
} else {
missione_tappa.setFl_no_diaria(new Boolean(false));
}
}
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
public Forward doSelezionaStatoLiquidazione(ActionContext context) {
try {
fillModel(context);
return context.findDefaultForward();
} catch (Throwable e) {
return handleException(context, e);
}
}
}