package it.csi.demo.democomp.business.miaapp;

import java.util.*;

import it.csi.demo.democomp.dto.*;
import it.csi.demo.democomp.dto.common.*;
import it.csi.demo.democomp.dto.nspersona.*;

import org.apache.log4j.*;
import it.csi.demo.democomp.util.*;
import it.csi.demo.democomp.business.*;

/*PROTECTED REGION ID(R-1673167378) ENABLED START*/
import it.csi.demo.democomp.business.mgr.GestoreLimitiAmm;
import it.csi.demo.democomp.business.mgr.GestorePersona;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.CittadinoDto;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.CittadinoPk;
import it.csi.demo.democomp.business.business.dao.refappdao.exceptions.CittadinoDaoException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.math.BigDecimal;
/*PROTECTED REGION END*/

public class CPBECpDettaglioCittadino {

	/**  */
	protected static final Logger log = Logger
			.getLogger(Constants.APPLICATION_CODE + ".business");

	//////////////////////////////////////////////////////////////////////////////
	/// Costanti identificative degli Application Data
	//////////////////////////////////////////////////////////////////////////////

	public final static String APPDATA_CITTADINO_CODE = "appDatacittadino";

	public final static String APPDATA_FILTROPERSONA_CODE = "appDatafiltroPersona";

	public final static String APPDATA_PERSONE_CODE = "appDatapersone";

	public final static String APPDATA_PROVINCE_CODE = "appDataprovince";

	public final static String APPDATA_REGIONI_CODE = "appDataregioni";

	public final static String APPDATA_COMUNI_CODE = "appDatacomuni";

	public final static String APPDATA_COMUNI2_CODE = "appDatacomuni2";

	public final static String APPDATA_PROVINCE2_CODE = "appDataprovince2";

	public final static String APPDATA_SELETTOREOPERAZIONE_CODE = "appDataselettoreOperazione";

	public final static String APPDATA_SELTABELLAIDPERSONA_CODE = "appDataselTabellaIdPersona";

	//////////////////////////////////////////////////////////////////////////////
	/// Metodi associati alla U.I.
	//////////////////////////////////////////////////////////////////////////////

	// nome del content panel associato al bean
	public final static String CPNAME = "cpDettaglioCittadino";

	/** 
	 * Restituisce il tab correntemente visibile in un determinato tab set
	 */
	private String getCurrentTab(Map session, String tabSetName) {
		String value = (String) session.get(CPNAME + "_" + tabSetName
				+ "_selectedMultiPanel");
		return value;
	}

	////////////////////////////////////////////////////////////////////////////////////

	public ExecResults salvaDatiCittadino(

	it.csi.demo.democomp.dto.miaapp.CpDettaglioCittadinoModel theModel

	) throws BEException {
		/// definizione costanti di outcome
		final String SALVADATICITTADINO_OUTCOME_CODE__OK = "Ok";
		///
		try {
			ExecResults result = new ExecResults();
			/*PROTECTED REGION ID(R-1824915609) ENABLED START*/
			// inserire qui la logica applicativa da eseguire:

			//			if (theModel.getAppDatacittadino().getIdComuneNascita())

			if (theModel.getAppDatacittadino() != null) {
				Cittadino c = new Cittadino();
				c = theModel.getAppDatacittadino();

				if (theModel.getAppDataselettoreOperazione().equals("INS")) {
					getGestorePersona().salvaNuovoCittadino(c);
				}

				if (theModel.getAppDataselettoreOperazione().equals("UPD")) {
					getGestorePersona().modificaCittadino(c);
				}

				theModel.setAppDatapersone(getGestorePersona()
						.getElencoPersone(theModel.getAppDatafiltroPersona()));

			}

			// impostazione del result code
			result.setResultCode(SALVADATICITTADINO_OUTCOME_CODE__OK);
			// modifica degli attributi del model (che verranno propagati allo strato
			// di presentation). si puo' agire anche direttamente sull'attributo "session".

			result.setModel(theModel);
			return result;
			/*PROTECTED REGION END*/
		} catch (Exception e) {
			log.error(
					"[BackEndFacade::salvaDatiCittadino] Errore occorso nell'esecuzione del metodo:"
							+ e, e);
			throw new BEException("Errore occorso nell'esecuzione del metodo:"
					+ e, e);
		}
	}

	////////////////////////////////////////////////////////////////////////////////////

	public ExecResults tornaIndietro(

	it.csi.demo.democomp.dto.miaapp.CpDettaglioCittadinoModel theModel

	) throws BEException {
		/// definizione costanti di outcome
		final String TORNAINDIETRO_OUTCOME_CODE__OK = "Ok";
		///
		try {
			ExecResults result = new ExecResults();
			/*PROTECTED REGION ID(R-547692501) ENABLED START*/
			// inserire qui la logica applicativa da eseguire:

			// impostazione del result code
			result.setResultCode(TORNAINDIETRO_OUTCOME_CODE__OK);
			// modifica degli attributi del model (che verranno propagati allo strato
			// di presentation). si puo' agire anche direttamente sull'attributo "session".

			result.setModel(theModel);
			return result;
			/*PROTECTED REGION END*/
		} catch (Exception e) {
			log.error(
					"[BackEndFacade::tornaIndietro] Errore occorso nell'esecuzione del metodo:"
							+ e, e);
			throw new BEException("Errore occorso nell'esecuzione del metodo:"
					+ e, e);
		}
	}

	////////////////////////////////////////////////////////////////////////////////////

	public ExecResults gestisciComboDettaglio(

	it.csi.demo.democomp.dto.miaapp.CpDettaglioCittadinoModel theModel

	) throws BEException {
		/// definizione costanti di outcome
		final String GESTISCICOMBODETTAGLIO_OUTCOME_CODE__OK = "Ok";
		///
		try {
			ExecResults result = new ExecResults();
			/*PROTECTED REGION ID(R1469562881) ENABLED START*/
			// inserire qui la logica applicativa da eseguire:
			if (theModel.getAppDatacittadino() == null) {
				theModel.setAppDatacittadino(new Cittadino());
				// aggiunta per test
				//theModel.setAppDataprovince(getGestoreLimitiAmm()
				//		.getAllProvince());	
				//aggiunta per test
			}

			if ((theModel.getAppDataprovince() == null)
					|| (theModel.getAppDataprovince().size() <= 0)) {
				theModel.setAppDataprovince(getGestoreLimitiAmm()
						.getAllProvince());
				theModel.setAppDatacomuni(new ArrayList<Comune>());
			} else {
				if (theModel.getAppDatacittadino().getIdProvinciaNascita() == null) {
					theModel.setAppDatacomuni(new ArrayList<Comune>());
				} else {
					theModel.setAppDatacomuni(getGestoreLimitiAmm()
							.getComuniByProvincia(
									theModel.getAppDatacittadino()
											.getIdProvinciaNascita()));
				}
			}

			if ((theModel.getAppDataprovince2() == null)
					|| (theModel.getAppDataprovince2().size() <= 0)) {
				theModel.setAppDataprovince2(getGestoreLimitiAmm()
						.getAllProvince());
				theModel.setAppDatacomuni2(new ArrayList<Comune>());
			} else {
				if (theModel.getAppDatacittadino().getIdProvinciaResid() == null) {
					theModel.setAppDatacomuni2(new ArrayList<Comune>());
				} else {
					theModel.setAppDatacomuni2(getGestoreLimitiAmm()
							.getComuniByProvincia(
									theModel.getAppDatacittadino()
											.getIdProvinciaResid()));
				}
			}

			// impostazione del result code
			result.setResultCode(GESTISCICOMBODETTAGLIO_OUTCOME_CODE__OK);
			// modifica degli attributi del model (che verranno propagati allo strato
			// di presentation). si puo' agire anche direttamente sull'attributo "session".

			result.setModel(theModel);
			return result;
			/*PROTECTED REGION END*/
		} catch (Exception e) {
			log.error(
					"[BackEndFacade::gestisciComboDettaglio] Errore occorso nell'esecuzione del metodo:"
							+ e, e);
			throw new BEException("Errore occorso nell'esecuzione del metodo:"
					+ e, e);
		}
	}

	//////////////////////////////////////////////////////////////////////////////
	/// Metodi statici per il reset delle tabelle
	//////////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////////
	/// Property aggiuntive del bean
	//////////////////////////////////////////////////////////////////////////////
	/*PROTECTED REGION ID(R667578886) ENABLED START*/
	//// inserire qui le property che si vogliono iniettare in questo bean (es. dao, proxy di pd, ...) 
	GestoreLimitiAmm gestoreLimitiAmm = null;

	public GestoreLimitiAmm getGestoreLimitiAmm() {
		return gestoreLimitiAmm;
	}

	public void setGestoreLimitiAmm(GestoreLimitiAmm gestoreLimitiAmm) {
		this.gestoreLimitiAmm = gestoreLimitiAmm;
	}

	GestorePersona gestorePersona = null;

	public GestorePersona getGestorePersona() {
		return gestorePersona;
	}

	public void setGestorePersona(GestorePersona gestorePersona) {
		this.gestorePersona = gestorePersona;
	}

	/*PROTECTED REGION END*/
}
