/*
 * XXXX 
 *
 * Fecha 14/05/2007
 * 
 *  
 */
 
package com.ejie.p06b.servlet.presentacion.corredores;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.ejie.p06b.general.P06BConstantes;
import com.ejie.p06b.general.P06BPaginas;
import com.ejie.p06b.general.P06BTablas;
import com.ejie.p06b.servlet.P06BServletGenerico;
import com.ejie.p06b.util.P06BFieldsValidations;
import com.ejie.p06b.util.P06BResources;


/**
 *  Esta clase gestiona las peticiones HTTP de la aplicación.
 */
public class P06BCorredorBuscarServlet extends P06BServletGenerico 
{

	//Cambia de idioma en la sesión -> Perfil
	public void ejecutar(HttpServletRequest request, HttpServletResponse response) {
		try {
			if(request.getParameter("accion")==null 
					|| request.getParameter("accion").equals("limpiar")){
				//Si vengo del menú o doy a limpiar -> RESETEO TODOS LOS VALORES 
				//Cuando damos al BUSCAR CORREDOR en el menú entro por este servlet
				//Por tanto debo resetear todas las variables de sesión de la aplicación
				//para optimizar espacio.
				//El parámetro fromMenu no lo tengo en cuenta en este caso (Si en el caso del alta por ej.)
				this.deleteAllTempFromSession(request);
				
				String tramitePendiente = (request.getParameter("TramitePendiente")==null)?"":request.getParameter("TramitePendiente");
//				String sObjetivo = request.getParameter("objetivo"); 
				request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("objetivo")==null)?request.getParameter("objetivo"):request.getParameter("objetivo"));						
//				if (sObjetivo!=null){
//					if (sObjetivo.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARDEC).toString()) || 
//						sObjetivo.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARMODTRAMITAGUNE).toString())	){
//						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO,sObjetivo);						
//					}
//				}
			}else if (request.getParameter("accion").equals("buscar")){
					request.getSession().removeAttribute("AtencionPeticionEnRevision");
					if (request.getParameter("objetivo")==null){
						request.getSession().removeAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO);
					}else{
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO,request.getParameter("objetivo"));							
					}
					if (request.getParameter("TramitePendiente")!=null){
						int tramitePendiente = Integer.parseInt(request.getParameter("TramitePendiente"));
						if (tramitePendiente==P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARMODTRAMITAGUNE){
							request.getSession().setAttribute(P06BConstantes.P06B_AEP_ACCESOEXPPOR, P06BConstantes.P06B_AEP_INCORPMODIF);
						}else if (tramitePendiente==P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_REVISARALTASBAJASTRAMITAGUNE){
							request.getSession().setAttribute(P06BConstantes.P06B_AEP_ACCESOEXPPOR, P06BConstantes.P06B_AEP_REVISIONALTASBAJAS);
						}else{
							request.getSession().removeAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO);							
						}
					}else{
						request.getSession().setAttribute(P06BConstantes.P06B_AEP_ACCESOEXPPOR, P06BConstantes.P06B_AEP_BUSQUEDA);
						request.getSession().removeAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO);
					}
					String sObjetivoC = "";
					String sAEPC = "";
					sObjetivoC = (String)request.getSession().getAttribute(P06BConstantes.P06B_VAR_TEMP+"objetivo"+P06BConstantes.P06B_VAR_TEMP_FILTRO);
					sAEPC = (String)request.getSession().getAttribute(P06BConstantes.P06B_AEP_ACCESOEXPPOR);
					if (sAEPC==null){
//						Parada para verificar situación
						sObjetivoC = sObjetivoC;
					}
					if (sAEPC.equals(P06BConstantes.P06B_AEP_BUSQUEDA) && sObjetivoC != null){
//						Parada para verificar situación
						sObjetivoC = sObjetivoC;
					}
					if (sAEPC.equals(P06BConstantes.P06B_AEP_REVISIONALTASBAJAS) && sObjetivoC != null){
//						Parada para verificar situación
						sObjetivoC = sObjetivoC;
					}
					if (sAEPC.equals(P06BConstantes.P06B_AEP_TRATAMATPETICION) && sObjetivoC != null){
//						Parada para verificar situación
						sObjetivoC = sObjetivoC;
					}
					if (sAEPC.equals(P06BConstantes.P06B_AEP_INCORPMODIF) && !sObjetivoC.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARMODTRAMITAGUNE).toString())){
//						Parada para verificar situación
						sObjetivoC = sObjetivoC;
					}

					if(this.validate(request,response)){
//						if (!"".equals(sObjetivo)){
//						}
						//Debo construir el filtro y pasarselo al servlet listado que 
						//sabrá lo que debe hacer.
						String filtro = this.obtenerFiltro(request);
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"Corredor"+P06BConstantes.P06B_VAR_TEMP_FILTRO,filtro);
						
						//Añadir a sesión los parámetros de la búsqueda para que no se pierdan			
						//request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"ejercicio_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Ejercicio")==null?"":request.getParameter("Ejercicio")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"numExp_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("NumExp")==null?"":request.getParameter("NumExp")));
//						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"codMS_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("CodMS")==null?"":request.getParameter("CodMS")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"tipoPersona_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("TipoPersona")==null?"":request.getParameter("TipoPersona")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"razSoc_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("RazSoc")==null?"":request.getParameter("RazSoc")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"estado_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Estado")==null?"":request.getParameter("Estado")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"DNI_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("DNI")==null?"":request.getParameter("DNI")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"nombre_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Nombre")==null?"":request.getParameter("Nombre")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"ape1_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Ape1")==null?"":request.getParameter("Ape1")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"ape2_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Ape2")==null?"":request.getParameter("Ape2")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"origen_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("Origen")==null?"":request.getParameter("Origen")));
						request.getSession().setAttribute(P06BConstantes.P06B_VAR_TEMP+"tramitePendiente_busqueda"+P06BConstantes.P06B_VAR_TEMP_FILTRO,(request.getParameter("TramitePendiente")==null?"":request.getParameter("TramitePendiente")));
								
						forward (request, response, P06BPaginas.P06B_JSP_SERVLETCORREDORLISTADO);
						return;
					}
			}
			//Redireccionamos a la página de buscar corredor
			forward (request, response, P06BPaginas.P06B_JSP_CORREDOR_BUSCAR);
		}catch (Exception e){
	      	manejarErrores (request, response, e);
	        return;
	    }
	}
	
	//Validamos campos del formulario
	private boolean validate(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ArrayList errors = new ArrayList();
		boolean resultado = true;
		String idioma = this.getIdioma(request,response);
		//Con la información obtenida realizo las validaciones
		P06BResources res = (P06BResources)request.getSession().getAttribute(P06BConstantes.P06B_RES_SES_ETIQUETAS); 
		
		//Eliminadooooooo!!!!
		//1. Campo Ejercicio -> Entero
		//errors=P06BFieldsValidations.validation(errors,P06BFieldsValidations.ENTERO,res.get("pantallas.literal.ejercicio"),request.getParameter("Ejercicio"),idioma);
		
		//Comprobamos que haya algún error
		if(!errors.isEmpty())
			resultado = false;
		request.setAttribute("errors",errors);
		return resultado;
	}
	
	//Obtenemos el filtro para obtener y gestionar el listado
	private String obtenerFiltro(HttpServletRequest request) throws Exception {
		String filtro = "";
		boolean primero = true;
		
		//String ejercicio = (request.getParameter("Ejercicio")==null)?"":request.getParameter("Ejercicio");
		String numExp = (request.getParameter("NumExp")==null)?"":request.getParameter("NumExp");
//		String codMS = (request.getParameter("CodMS")==null)?"":request.getParameter("CodMS");
		String tipoPersona = (request.getParameter("TipoPersona")==null)?"":request.getParameter("TipoPersona");
		String estado = (request.getParameter("Estado")==null)?"":request.getParameter("Estado");
		String dni = (request.getParameter("DNI")==null)?"":request.getParameter("DNI");
		String razsoc = (request.getParameter("RazSoc")==null)?"":request.getParameter("RazSoc");
		String nombre = (request.getParameter("Nombre")==null)?"":request.getParameter("Nombre");
		String ape1 = (request.getParameter("Ape1")==null)?"":request.getParameter("Ape1");
		String ape2 = (request.getParameter("Ape2")==null)?"":request.getParameter("Ape2");
		String origen = (request.getParameter("Origen")==null)?"":request.getParameter("Origen");
		String tramitePendiente = (request.getParameter("TramitePendiente")==null)?"":request.getParameter("TramitePendiente");
		
		/*if(!ejercicio.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_EXPEDI + " LIKE '%/"+ejercicio.toUpperCase()+" %'";
		}*/
		if(!numExp.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_NUMEXP + " LIKE '%"+numExp.toUpperCase()+"%'";
		}
		
//		if(!codMS.equals("")){
//			if(!primero)
//				filtro+=" AND ";
//			else{ 
//				primero = false;
//				filtro+="WHERE ";
//			}
//			filtro+= P06BTablas.P06B_P06B20_CODMS + " LIKE '%"+codMS.toUpperCase()+"%'";
//		}
		
		
		if(!tipoPersona.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_CLASE + " = '"+ tipoPersona.toUpperCase() +"'";
		}
		if(!estado.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_ESTADO + " = '"+ estado.toUpperCase() +"'";
		}
		if(!dni.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_IDENTIFICADOR + " LIKE '%"+dni.toUpperCase()+"%'";
		}
		if(!razsoc.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_RAZSOC + " LIKE '%"+razsoc.toUpperCase()+"%'";
		}
		if(!nombre.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_NOMBRE + " LIKE '%"+nombre.toUpperCase()+"%'";
		}
		if(!ape1.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_APE1 + " LIKE '%"+ape1.toUpperCase()+"%'";
		}
		if(!ape2.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_APE2 + " LIKE '%"+ape2.toUpperCase()+"%'";
		}
		if(!origen.equals("")){
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_ORIGEN + " = '"+ origen.toUpperCase() +"'";
		}
		
		if(!tramitePendiente.equals("")){
			String subselect = "";
			if (tramitePendiente.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_CODCARGOS).toString())){
				subselect = "select DISTINCT P06B20_NUMEXP from P06B24T00_ORGANOSDIREXP B, P06B20T00_CORREDORES A where B.P06B24_NUMEXP = A.P06B20_NUMEXP AND B.P06B24_IDCARGO = 0";
			}else if (tramitePendiente.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_ASOCCLAVEDGS).toString())){
				subselect = "select DISTINCT P06B20_NUMEXP from P06B23T00_ENT_ASEGURADORAS C, P06B61T00_ENT_VINCULADAS B, P06B20T00_CORREDORES A where B.P06B61_EV_NUMEXP = A.P06B20_NUMEXP AND C.P06B23_EA_CLAVE(+) = B.P06B61_EV_CLAVECAT AND C.P06B23_EA_CLAVE IS NULL";
			}else if (tramitePendiente.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARDEC).toString())){
				subselect = "SELECT DISTINCT P06B32_NUMEXP FROM P06B20T00_CORREDORES, P06B32T00_DEC_MODELO01Y02 WHERE P06B20_NUMEXP = P06B32_NUMEXP AND (P06B20_ULTEJERINCORPORADO IS NULL OR P06B32_EJERCICIO > P06B20_ULTEJERINCORPORADO) GROUP BY P06B32_NUMEXP";
			}else if (tramitePendiente.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_INCORPORARMODTRAMITAGUNE).toString())){
				subselect = "SELECT DISTINCT P06B20_NUMEXP FROM P06B20T00_CORREDORES, P06B70T00_CORREDORES, P06B64T00_ATENDERPETICION WHERE P06B64_AP_FINALIZADA = 1 AND P06B70_CO_CORRELATENCPETIC = P06B64_AP_CORRELATENCPETIC AND P06B20_NUMEXP = P06B70_CO_NUMEXP AND (P06B20_ATENCPETICINCORPORADA IS NULL OR P06B70_CO_CORRELATENCPETIC > P06B20_ATENCPETICINCORPORADA)";
			}else if (tramitePendiente.equals(((Integer)P06BConstantes.P06B_BUSQCORR_TRAMITEPENDIENTE_REVISARALTASBAJASTRAMITAGUNE).toString())){
				subselect = "SELECT DISTINCT P06B20_NUMEXP FROM P06B20T00_CORREDORES WHERE P06B20_ESTADO IN ('" + P06BConstantes.P06B_CORREDORES_ESTADO_PDTE_ALTA + "', '" + P06BConstantes.P06B_CORREDORES_ESTADO_PDTE_BAJA + "')";
			}
			
			if(!primero)
				filtro+=" AND ";
			else{ 
				primero = false;
				filtro+="WHERE ";
			}
			filtro+= P06BTablas.P06B_P06B20_NUMEXP + " IN (" + subselect + ")";
		}
//		else{
//			if(!primero)
//				filtro+=" AND ";
//			else{ 
//				primero = false;
//				filtro+="WHERE ";
//			}
//			filtro+= P06BTablas.P06B_P06B20_ESTADO + " != '"+ P06BConstantes.P06B_CORREDORES_ESTADO_PDTE_ALTA +"'";
//			if(!primero)
//				filtro+=" AND ";
//			else{ 
//				primero = false;
//				filtro+="WHERE ";
//			}
//			filtro+= P06BTablas.P06B_P06B20_ESTADO + " != '"+ P06BConstantes.P06B_CORREDORES_ESTADO_PDTE_BAJA +"'";
//			
//		}
		
		return filtro;
	}
}