All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.cnr.contab.config00.action.MacroAction 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.config00.action;

import it.cnr.contab.config00.ejb.CDRComponentSession;
import it.cnr.contab.config00.ejb.Unita_organizzativaComponentSession;
import it.cnr.contab.config00.sto.bulk.CdrBulk;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.pdg00.bp.CRUDRicostruzioneResiduiBP;
import it.cnr.contab.pdg00.bp.CostiDipendenteBP;
import it.cnr.contab.prevent01.action.CRUDPdGAggregatoModuloAction;
import it.cnr.contab.prevent01.bp.CRUDPdGAggregatoModuloBP;
import it.cnr.contab.prevent01.bulk.Pdg_moduloBulk;
import it.cnr.contab.prevent01.ejb.PdgAggregatoModuloComponentSession;
import it.cnr.contab.progettiric00.bp.TestataProgettiRicercaBP;
import it.cnr.contab.progettiric00.core.bulk.ProgettoBulk;
import it.cnr.contab.progettiric00.core.bulk.Progetto_other_fieldBulk;
import it.cnr.contab.progettiric00.core.bulk.Progetto_sipBulk;
import it.cnr.contab.progettiric00.ejb.ProgettoRicercaPadreComponentSession;
import it.cnr.contab.progettiric00.enumeration.StatoProgetto;
import it.cnr.contab.utente00.nav.ejb.GestioneLoginComponentSession;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.utenze00.bp.GestioneUtenteBP;
import it.cnr.contab.utenze00.bp.LoginBP;
import it.cnr.contab.utenze00.bulk.CNRUserInfo;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.contab.utenze00.bulk.UtenteComuneBulk;
import it.cnr.jada.DetailedRuntimeException;
import it.cnr.jada.action.ActionContext;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.action.Forward;
import it.cnr.jada.action.HttpActionContext;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.util.SendMail;
import it.cnr.jada.util.action.BulkAction;
import it.cnr.jada.util.action.FormAction;
import it.cnr.jada.util.action.OptionBP;

import java.rmi.RemoteException;
import java.util.Arrays;
import java.util.Optional;

/**
 * @author mspasiano
 *
 */
public class MacroAction extends BulkAction {

	public MacroAction() {
		super();
	}
    public Forward doDefault(ActionContext actioncontext){
		try {
			((HttpActionContext)actioncontext).invalidateSession();
			String cd_utente,pwd,cd_uo = null;
			Integer pg_modulo = null;
			ProgettoBulk modulo = null;
			Integer esercizio;			
			String costi_personale = "N";			
			String mode = "M";
			try{							
				esercizio = new Integer(((HttpActionContext)actioncontext).getParameter("esercizio"));
			}catch(NullPointerException e){
				esercizio = new Integer(2006);
			}catch(NumberFormatException e){
			    esercizio = new Integer(2006);
		    }
			try{							
				costi_personale =((HttpActionContext)actioncontext).getParameter("costi_personale");
			}catch(NullPointerException e){
				costi_personale = "N";
			}
			if (costi_personale==null) 
			  costi_personale = "N";
			try{							
				mode =((HttpActionContext)actioncontext).getParameter("mode");
			}catch(NullPointerException e){
				mode = "M";
			}
			if (mode==null) 
			  mode = "M";			
			actioncontext.setUserContext(new CNRUserContext("LOGIN",actioncontext.getSessionId(),esercizio,null,null,null));
			try{				
				cd_utente = ((HttpActionContext)actioncontext).getParameter("cd_utente").toUpperCase();
				pwd = ((HttpActionContext)actioncontext).getParameter("pwd");
			}catch(NullPointerException e){
				setErrorMessage(actioncontext,"Parametri non corretti.");
				return actioncontext.findDefaultForward();				
			}
			//Parametri Opzionali
			/*try{							
				cd_uo = ((HttpActionContext)actioncontext).getParameter("cd_uo").toUpperCase();
			}catch(NullPointerException e){}
			catch(NumberFormatException e){
				setErrorMessage(actioncontext,"Parametri non corretti.");
				return actioncontext.findDefaultForward();				
			}*/
			try{
				if (((HttpActionContext)actioncontext).getParameter("pg_modulo") != null)							
				  pg_modulo = new Integer(((HttpActionContext)actioncontext).getParameter("pg_modulo"));
			}catch(NullPointerException e){}
			catch(NumberFormatException e){
				setErrorMessage(actioncontext,"Parametri non corretti.");
				return actioncontext.findDefaultForward();				
			}
				
			Unita_organizzativaBulk uo = null;
			LoginBP loginbp = (LoginBP)actioncontext.getBusinessProcessRoot(true);
			CNRUserInfo ui = loginbp.getUserInfo();
			UtenteBulk utente = new UtenteBulk();
			utente.setCd_utente(cd_utente);
			utente.setPassword(pwd);
			utente.setLdap_password(pwd);
			ui.setUtente(utente);
			
			Integer[] esercizi = getComponentSession().listaEserciziPerUtente(actioncontext.getUserContext(),utente);
			int annoInCorso = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
			ui.setEsercizi(esercizi);
			
 			utente = getComponentSession().validaUtente(actioncontext.getUserContext(),utente);
			if (utente == null || !(utente instanceof UtenteComuneBulk)) {
				setErrorMessage(actioncontext,"Nome utente o password sbagliati.");
				return actioncontext.findDefaultForward();
			}
			
			if (cd_uo != null)
			  uo = (Unita_organizzativaBulk)getUOComponentSession().findUOByCodice(actioncontext.getUserContext(),cd_uo);
			if(uo == null)  
			  uo = ((UtenteComuneBulk)utente).getCdr().getUnita_padre();
			  
			ui.setUtente(utente);
			ui.setUserid(utente.getCd_utente());
			ui.setUnita_organizzativa(uo);
			ui.setEsercizio(esercizio);
			
			GestioneUtenteBP bp = (GestioneUtenteBP)actioncontext.createBusinessProcess("GestioneUtenteBP");
			actioncontext.addBusinessProcess(bp);
			bp.setUserInfo(ui);
			CNRUserContext userContext = new CNRUserContext(
					utente.getCd_utente(),
					actioncontext.getSessionId(),
					esercizio,
					ui.getUnita_organizzativa().getCd_unita_organizzativa(),
			        ui.getUnita_organizzativa().getCd_cds(),
			        ui.getCdr().getCd_centro_responsabilita());			
			actioncontext.setUserContext(userContext);
			actioncontext.setUserInfo(ui);
			//Se il mode è H allora va in sola visualizzazione altrimenti in modifica			
			mode = mode.equals("H")?"V":"M";
            if (costi_personale.equals("N")){
				Object[] parametri;
				if (pg_modulo != null)
            	  parametri = new Object[] {mode,pg_modulo};
            	else
				  parametri = new Object[] {mode};  
				CRUDPdGAggregatoModuloBP newbp = (CRUDPdGAggregatoModuloBP)actioncontext.getUserInfo().createBusinessProcess(
				                actioncontext,
								"CRUDPdGAggregatoModuloBP",parametri);
                if (mode.equals("M")){
                    newbp.setStatus(CRUDPdGAggregatoModuloBP.EDIT);
                    newbp.setEditable(true);
                }
				if (pg_modulo != null && mode.equals("M") && newbp.isModuloInseribile()){
					Pdg_moduloBulk pdg_modulo = new Pdg_moduloBulk(CNRUserContext.getEsercizio(actioncontext.getUserContext()),ui.getCdr().getCd_centro_responsabilita(),pg_modulo);
					Progetto_sipBulk progetto_sipBulk = new Progetto_sipBulk(esercizio, pg_modulo, ProgettoBulk.TIPO_FASE_PREVISIONE);
					progetto_sipBulk = Optional.ofNullable(progetto_sipBulk)
							.map(progetto -> {
								try {
									return Optional.ofNullable(getProgettoRicercaPadreComponentSession().findByPrimaryKey(userContext, progetto))
											.filter(Progetto_sipBulk.class::isInstance)
											.map(Progetto_sipBulk.class::cast)
											.orElse(null);
								} catch (ComponentException | RemoteException e) {
									throw new DetailedRuntimeException(e);
								}
							})
							.orElse(null);
                    if (!Optional.ofNullable(progetto_sipBulk.getOtherField())
                            .flatMap(progetto_other_fieldBulk -> Optional.ofNullable(progetto_other_fieldBulk.getStato()))
                            .filter(stato -> Arrays.asList(StatoProgetto.STATO_NEGOZIAZIONE.value(), StatoProgetto.STATO_APPROVATO.value()).indexOf(stato) != -1).isPresent()) {
						if (!progetto_sipBulk.getCd_unita_organizzativa().equals(CNRUserContext.getCd_unita_organizzativa(actioncontext.getUserContext()))) {
							setErrorMessage(actioncontext,"Attenzione: il progetto non ha uno stato utile alla previsione! Deve essere completatato dalla UO responsabile!");
							return actioncontext.findDefaultForward();
						} else {
							newbp.setPgModulo(pg_modulo);
							pdg_modulo.setStato(Pdg_moduloBulk.STATO_AC);
							pdg_modulo.setToBeCreated();
							((CdrBulk)newbp.getModel()).addToDettagli(pdg_modulo);
							newbp.evidenziaModulo(actioncontext);
							actioncontext.addBusinessProcess(newbp);
							return openConfirm(actioncontext,"Attenzione: il progetto non ha uno stato utile alla previsione! Vuoi completare le informazioni mancanti?",
									OptionBP.CONFIRM_YES_NO,"doConfermaCompletaProgetto");
						}

                    }
                    if (!Optional.ofNullable(progetto_sipBulk.getOtherField())
                            .flatMap(progetto_other_fieldBulk -> Optional.ofNullable(progetto_other_fieldBulk.getTipoFinanziamento()))
                            .filter(tipoFinanziamentoBulk -> tipoFinanziamentoBulk.getFlPrevEntSpesa() || tipoFinanziamentoBulk.getFlRipCostiPers()).isPresent()) {
                        setErrorMessage(actioncontext,"Attenzione: per il progetto non è consentita la previsione!");
                        return actioncontext.findDefaultForward();
                    }
					try{
						pdg_modulo = getPdgModuloComponentSession().findAndInsertBulkForMacro(actioncontext.getUserContext(),pdg_modulo);
						if (pdg_modulo!=null) {
							newbp.setModel(actioncontext, newbp.initializeModelForEdit(actioncontext, newbp.getModel()));
							newbp.setPgModulo(pg_modulo);
							newbp.evidenziaModulo(actioncontext);
						}
					}catch(ApplicationException e){
						setErrorMessage(actioncontext,e.getMessage());
						return actioncontext.findDefaultForward();					
					}
				}
				actioncontext.addBusinessProcess(newbp);
			}else  if (costi_personale.equals("Y")){
				aggiornaGECO(actioncontext);
				CostiDipendenteBP newbp = (CostiDipendenteBP)actioncontext.getUserInfo().createBusinessProcess(
								actioncontext,
								"CostiDipendenteBP",
								new Object[] {
									mode
								}
							);
				actioncontext.addBusinessProcess(newbp);
			}
			return actioncontext.findDefaultForward();
		} catch(it.cnr.contab.utente00.nav.comp.PasswordScadutaException e) {
			setErrorMessage(actioncontext,"Password scaduta da più di sei mesi.");
			return actioncontext.findForward("password_scaduta");
		} catch(it.cnr.contab.utente00.nav.comp.UtenteNonValidoException e) {
			setErrorMessage(actioncontext,"Utente non più valido");
			return actioncontext.findDefaultForward();
		} catch(it.cnr.contab.utente00.nav.comp.UtenteInDisusoException e) {
			setErrorMessage(actioncontext,"Utente non utilizzato da più di sei mesi.");
			return actioncontext.findDefaultForward();
		} catch(Throwable e) {
			return handleException(actioncontext,e);
		}
	}

    public Forward doConfermaCompletaProgetto(ActionContext context, int opt) throws RemoteException, BusinessProcessException {
        CRUDPdGAggregatoModuloBP bp = (CRUDPdGAggregatoModuloBP) context.getBusinessProcess();
        if (opt == OptionBP.YES_BUTTON) {
            CRUDPdGAggregatoModuloAction crudPdGAggregatoModuloAction = new CRUDPdGAggregatoModuloAction();
            crudPdGAggregatoModuloAction.doCRUD(context, "main.Dettagli.searchtool_progetto_liv2");
			TestataProgettiRicercaBP testataProgettiRicercaBP = Optional.ofNullable(context.getBusinessProcess())
					.filter(TestataProgettiRicercaBP.class::isInstance)
					.map(TestataProgettiRicercaBP.class::cast)
					.orElse(null);
            if (testataProgettiRicercaBP != null) {
				ProgettoBulk progettoBulk = new ProgettoBulk(CNRUserContext.getEsercizio(context.getUserContext()), bp.getPgModulo(), ProgettoBulk.TIPO_FASE_PREVISIONE);
				progettoBulk = Optional.ofNullable(progettoBulk)
						.map(progetto -> {
							try {
								return Optional.ofNullable(getProgettoRicercaPadreComponentSession().findByPrimaryKey(context.getUserContext(), progetto))
										.filter(ProgettoBulk.class::isInstance)
										.map(ProgettoBulk.class::cast)
										.orElse(null);
							} catch (ComponentException | RemoteException e) {
								throw new DetailedRuntimeException(e);
							}
						})
						.orElse(null);
				if (Optional.ofNullable(progettoBulk).isPresent()) {
					testataProgettiRicercaBP.basicEdit(context, progettoBulk, true);
				}
			}
        }
        return context.findDefaultForward();
    }

	public static GestioneLoginComponentSession getComponentSession() throws javax.ejb.EJBException, java.rmi.RemoteException {
		return (GestioneLoginComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRUTENZE00_NAV_EJB_GestioneLoginComponentSession",GestioneLoginComponentSession.class);
	}
	public static CDRComponentSession getCdrComponentSession() throws javax.ejb.EJBException, java.rmi.RemoteException {
		return (CDRComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_CDRComponentSession",CDRComponentSession.class);
	}
	public static Unita_organizzativaComponentSession getUOComponentSession() throws javax.ejb.EJBException, java.rmi.RemoteException {
		return (Unita_organizzativaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Unita_organizzativaComponentSession",Unita_organizzativaComponentSession.class);
	}
	public static PdgAggregatoModuloComponentSession getPdgModuloComponentSession() throws javax.ejb.EJBException, java.rmi.RemoteException {
		return (PdgAggregatoModuloComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRPREVENT01_EJB_PdgAggregatoModuloComponentSession",PdgAggregatoModuloComponentSession.class);
	}
	public static ProgettoRicercaPadreComponentSession getProgettoRicercaPadreComponentSession() throws javax.ejb.EJBException, java.rmi.RemoteException {
		return (ProgettoRicercaPadreComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRPROGETTIRIC00_EJB_ProgettoRicercaPadreComponentSession",ProgettoRicercaPadreComponentSession.class);
	}	
	public void aggiornaGECO(ActionContext context){
		try {
			getProgettoRicercaPadreComponentSession().aggiornaGECO(context.getUserContext());
		} catch (Exception e) {
			String text = "Errore interno del Server Utente:"+CNRUserContext.getUser(context.getUserContext())+" UO:"+CNRUserContext.getCd_unita_organizzativa(context.getUserContext());
			SendMail.sendErrorMail(text,e.toString());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy