package itourbaskServlet;

import itourbaskClases.q53BorrarRespuestasClass;
import itourbaskClases.q53RespuestaTablaClass;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.StringTokenizer;

import q53_util.q53Constantes;
import q53_util.q53LogEstadisticas;
import q53_util.q53Util;

import com.cidat.proclets.PSP;
import com.cidat.proclets.ProcletException;
import com.cidat.proclets.ProcletServiceData;


/**
 * DOCUMENT ME!
 *
 *  
 * @version $Revision$
 */
public class q53usrGuardarTablaServlet extends q53Servlet {
    /**
     * Procleto que guarda la encuesta rellenada y muestra de nuevo la encuesta
     * para rellenar
     *
     * @param sd DOCUMENT ME!
     *
     * @throws ProcletException DOCUMENT ME!
     */

    public void pspProcess(ProcletServiceData sd) throws ProcletException {
    	q53LogEstadisticas.printLog("ENTRA EN EL SERVLET");
        // establece el contentType del response
        sd.res.setContentType("text/html");
        sd.res.setHeader("Pragma", "no-cache");
        sd.res.setHeader("Cache-Control", "no-cache");
        sd.res.setHeader("Expires", "0");
        // tratar las cookies
        q53_tratarCookies(sd);
        String perfilUser = "NO";
        
        if (q53Util.esPerfil(sd, q53Constantes.PERFIL_USRO)) {
            perfilUser = "SI";
            q53LogEstadisticas.printLog("Perfil es Usuario");
        }
        
        String perfilCoord = "NO";
        
        if (q53Util.esPerfil(sd, q53Constantes.PERFIL_COOR)) {
            perfilCoord = "SI";
            q53LogEstadisticas.printLog("Perfil es Coordinador");
        }
        
        String perfilAdmin = "NO";
        
        if (q53Util.esPerfil(sd, q53Constantes.PERFIL_ADMO)) {
            perfilAdmin = "SI";
            q53LogEstadisticas.printLog("Perfil es Administrador");
        }
        
        sd.setVal("perfilUser", perfilUser);
        sd.setVal("perfilCoord", perfilCoord);
        sd.setVal("perfilAdmin", perfilAdmin);
        
        if (q53Util.esPerfil(sd, q53Constantes.PERFIL_USRO) ||
                q53Util.esPerfil(sd, q53Constantes.PERFIL_ADMO) ||
                q53Util.esPerfil(sd, q53Constantes.PERFIL_COOR)) {
            // es_recogida_datos se utiliza en el jsp q53_usr_guardar.jsp para
            // saber si hay que mostrar como título "Recogida de datos" o el
            // nombre de la encuesta.
			PSP.paramProclet(sd,"total_filas()");	
			int total_filas=sd.gI("total_filas");
			for(int cont=1;cont<=total_filas;cont++){                   
				PSP.paramProclet(sd,
					"es_recogida_datos(),cod_encuesta(),cod_version(),encuesta_descripcion(),encuestas_terminadas(),terminarActivo()," +
					"gv_cod_encuesta(),gv_cod_version(),proc_local_6(),personasProc"+cont+"()," +
					"grp_2_2_1"+cont+"(0),grp_2_2_2"+cont+"(0),grp_5_4_1"+cont+"(0),grp_5_4_2"+cont+"(0),grp_5_4_3"+cont+"(0),grp_5_4_4"+cont+"(0),grp_5_4_5"+cont+"(0),"+
					"sinConcretar"+cont+"(0),encuesta(),cposProc"+cont+"(),id"+cont+"(),totvis1(),opt_check_7"+cont+"(),opt_check_8"+cont+"(),opt_12"+cont+"(),local"+cont+"()");

				if (sd.gOS("encuesta").equals("pres")){
					int lineaA=cont-1;
					int lineaAA=cont-2;
					String personasProc = "";
					String grp_2_2_1 = "";
					String grp_2_2_2 = "";
					String grp_5_4_1 = "";
					String grp_5_4_2 = "";
					String grp_5_4_3 = "";
					String grp_5_4_4 = "";
					String sinConcretar = "";
					q53LogEstadisticas.printLog("opt_12"+cont+":"+ "->"+ sd.gOS("opt_12"+cont)+ "<-");
					q53LogEstadisticas.printLog("personasProc"+cont+":"+ "->"+ sd.gOS("personasProc"+cont)+ "<-");
					personasProc = sd.gOS("personasProc"+cont);
					q53LogEstadisticas.printLog("personasProc:"+ "->"+ personasProc+ "<-");
					grp_2_2_1 = sd.gOS("grp_2_2_1"+cont);   
					q53LogEstadisticas.printLog("grp_2_2_1:"+ "->"+ grp_2_2_1+ "<-");
					grp_2_2_2 = sd.gOS("grp_2_2_2"+cont);   
					q53LogEstadisticas.printLog("grp_2_2_2:"+ "->"+ grp_2_2_2+ "<-");
					grp_5_4_1 = sd.gOS("grp_5_4_1"+cont);   
					q53LogEstadisticas.printLog("grp_5_4_1:"+ "->"+ grp_5_4_1+ "<-");
					grp_5_4_2 = sd.gOS("grp_5_4_2"+cont);   
					q53LogEstadisticas.printLog("grp_5_4_2:"+ "->"+ grp_5_4_2+ "<-");
					grp_5_4_3 = sd.gOS("grp_5_4_3"+cont);   
					q53LogEstadisticas.printLog("grp_5_4_3:"+ "->"+ grp_5_4_3+ "<-");
					grp_5_4_4 = sd.gOS("grp_5_4_4"+cont);   
					q53LogEstadisticas.printLog("grp_5_4_4:"+ "->"+ grp_5_4_4+ "<-");
					sinConcretar = sd.gOS("grp_5_4_5"+cont);
					q53LogEstadisticas.printLog("sinConcretar:"+ "->"+ sinConcretar+ "<-");
					if (grp_2_2_1.equals("") || grp_2_2_1==null) grp_2_2_1="0";
					if (grp_2_2_2.equals("") || grp_2_2_2==null) grp_2_2_2="0";
					if (grp_5_4_1.equals("") || grp_5_4_1==null) grp_5_4_1="0";
					if (grp_5_4_2.equals("") || grp_5_4_2==null) grp_5_4_2="0";
					if (grp_5_4_3.equals("") || grp_5_4_3==null) grp_5_4_3="0";
					if (grp_5_4_4.equals("") || grp_5_4_4==null) grp_5_4_4="0";
					if (sinConcretar.equals("") || sinConcretar==null) sinConcretar="0";
					q53LogEstadisticas.printLog("recalculamos las personas totales proc:"+ "->"+ personasProc+ "<-");
					if (personasProc.equals("") || personasProc==null) {
						q53LogEstadisticas.printLog("Dentro del if");
						int intHombres = Integer.parseInt(grp_2_2_1);
						q53LogEstadisticas.printLog("hombres:"+ "->"+ intHombres + "<-");
						int intMujeres =  Integer.parseInt(grp_2_2_2);
						q53LogEstadisticas.printLog("mujeres:"+ "->"+ intMujeres+ "<-");
						int intTotalPersonas = intHombres + intMujeres;
						q53LogEstadisticas.printLog("Total personas:"+ "->"+ intTotalPersonas+ "<-");
						personasProc =  Integer.toString(intTotalPersonas);
						q53LogEstadisticas.printLog("personasProc:"+ "->"+ personasProc+ "<-");
					} else {
						q53LogEstadisticas.printLog("No entra en el if");					
					}

					q53LogEstadisticas.printLog("Meto en sesion los valores");					
					PSP.setValInSessionProclet(sd, "personasProc"+cont, personasProc);
					q53LogEstadisticas.printLog("personasProc"+cont+":"+ "->"+ sd.gOS("personasProc"+cont)+ "<-");
					PSP.setValInSessionProclet(sd, "n_Hombres", grp_2_2_1);
					PSP.setValInSessionProclet(sd, "n_Mujeres", grp_2_2_2);
					PSP.setValInSessionProclet(sd, "n_Menor27", grp_5_4_1);
					PSP.setValInSessionProclet(sd, "n_Entre27_45", grp_5_4_2);
					PSP.setValInSessionProclet(sd, "n_Entre46_65", grp_5_4_3);
					PSP.setValInSessionProclet(sd, "n_Mas65", grp_5_4_4);
					PSP.setValInSessionProclet(sd, "sinConcretar", sinConcretar);
						
					q53LogEstadisticas.printLog("Ya se han metido en sesion");
						
					// Inicializar variables a cero
					q53LogEstadisticas.printLog("Inicializar a cero las variables de asignacion");						
					PSP.setValInSessionProclet(sd, "hombresAsig", "0");
					PSP.setValInSessionProclet(sd, "mujeresAsig", "0");
					PSP.setValInSessionProclet(sd, "menor27Asig", "0");
					PSP.setValInSessionProclet(sd, "entre27_45Asig", "0");
					PSP.setValInSessionProclet(sd, "entre46_65Asig", "0");
					PSP.setValInSessionProclet(sd, "mas65Asig", "0");
					PSP.setValInSessionProclet(sd, "sinConcretarAsig", "0");
				}
				PSP.paramProclet(sd,
					"es_recogida_datos(),cod_encuesta(),cod_version(),encuesta_descripcion(),encuestas_terminadas(),terminarActivo()," +
					"gv_cod_encuesta(),gv_cod_version(),proc_local_6(),personasProc"+cont+"()," +
					"grp_2_2_1"+cont+"(0),grp_2_2_2"+cont+"(0),grp_5_4_1"+cont+"(0),grp_5_4_2"+cont+"(0),grp_5_4_3"+cont+"(0),grp_5_4_4"+cont+"(0),grp_5_4_5"+cont+"(0),"+
					"sinConcretar"+cont+"(0),encuesta(),cposProc"+cont+"(),id"+cont+"(),totvis1(),opt_check_7"+cont+"(),opt_check_8"+cont+"(),opt_12"+cont+"(),local"+cont+"()");
					q53LogEstadisticas.printLog("personasProc"+cont+":"+ "->"+ sd.gOS("personasProc"+cont)+ "<-");

				// recoger parametros de encuesta gv
				// si hay encuesta_gv -> coger las preguntas de la base de datos.
				// para cada pregunta -> tratarla dependiendo de su tipo.
				//      coger los parámetros necesarios
				//      guardar la respuesta en la base de datos
				// PSP.paramProclet(sd, "gv_cod_encuesta(),gv_cod_version()");
				String gvCodEncuesta = sd.gOS("gv_cod_encuesta");
				String gvCodVersion = sd.gOS("gv_cod_version");
				String codOficina = sd.gOS("q53_cki.q53_oficina");
				String usuario = sd.gOS("q53_cki.q53_usuario");
				q53LogEstadisticas.printLog("gvCodEncuesta:"+gvCodEncuesta);
				q53LogEstadisticas.printLog("gvCodVersion:"+gvCodVersion);
				q53LogEstadisticas.printLog("codOficina:"+codOficina);
				q53LogEstadisticas.printLog("usuario:"+usuario);
				q53LogEstadisticas.printLog("cont:"+cont);
				q53LogEstadisticas.printLog("personasProc"+cont+":"+ "->"+ sd.gOS("personasProc"+cont)+ "<-");

				q53LogEstadisticas.printLog("Tipo de encuesta : " + sd.gOS("encuesta"));
				q53LogEstadisticas.printLog("Código postal::::"+sd.gOS("cpos"));  

				//
				  
				//si es comunidad autónoma solo se graba su campo
				//si es Territorio solo se graba su campo
				//si es pais solo se graba su campo         
				if (!gvCodEncuesta.equals("")) {
					// hay encuesta gv
					sd.setVal("pagina", q53Constantes.PAG_RECOGIDA_DATOS);
					//INSERTAMOS LA RESPUESTA EN LA b.d.
					q53LogEstadisticas.printLog("Insertamos la respuesta en la base de datos");
					//String codRespuesta = q53RespuestaTablaClass.setRespuestaEncGV(sd,
					//        codOficina, usuario, gvCodEncuesta, gvCodVersion);
					int lineaA=cont+1;
					int lineaAA=cont+2;                
					StringTokenizer st7 = new StringTokenizer(sd.gOS("opt_check_7"+cont), ",");			
					String token7;                                                                  
					Hashtable ht7 = new Hashtable();                                                
					int i=1;
					
					while(st7.hasMoreTokens()) {				                                            
						token7 = st7.nextToken().trim();                                              
						boolean existe=false;
						Enumeration claves=ht7.keys();
						while(claves.hasMoreElements()){
							String clave=	claves.nextElement().toString();
							String elem=ht7.get(clave).toString();
							if(elem.equals(token7)){
								existe=true;
								break;	
							}
						}
						if(!existe) ht7.put("opcion"+i, token7);	
						i++;                                                                          
					}                                                                               
						
					lineaA=cont+1;
					lineaAA=cont+2;                
					StringTokenizer st8 = new StringTokenizer(sd.gOS("opt_check_8"+cont), ",");			
					String token8;
					Hashtable ht8 = new Hashtable();
					int a=1;
					while(st8.hasMoreTokens()) {				
						token8 = st8.nextToken().trim();
						boolean existe=false;
						Enumeration claves=ht8.keys();
						while(claves.hasMoreElements()){
							String clave=	claves.nextElement().toString();
							String elem=ht8.get(clave).toString();
							if(elem.equals(token8)){
								existe=true;
								break;	
							}
						}
						if(!existe)	 ht8.put("opcion"+a, token8);
						a++;
					}
				
					String encuesta=sd.gOS("encuesta");
					String codRespuesta="";
					if(cont>0 && !sd.gOS("id"+cont).equals("")){ 	
						codRespuesta = q53RespuestaTablaClass.setRespuestaEncGV(sd,
							codOficina, usuario, gvCodEncuesta, gvCodVersion,encuesta,cont);    
					}  	
							
					// recorrer pregunta por pregunta para coger la info. de los campos
					// que dependen del tipo de pregunta
					q53LogEstadisticas.printLog("Recorrer cada pregunta y guardarla");
					if(cont>0 && !sd.gOS("id"+cont).equals("")){
						q53RespuestaTablaClass.guardarRespuestasEncGV(sd, gvCodEncuesta,
							gvCodVersion, codRespuesta, cont);
					}                
					// guardo el codigo de la respuesta, que será el código de respuesta
					// de recogida de datos asociada al resto de respuestas del visitante
					sd.setVal("respuesta_rd_asociada",sd.gOS("preg_gv_cod_rpta.cod_respuesta"));
				}
						
				// recoger parametros de encuesta ofi
				// si hay encuesta_ofi, hacer lo mismo.
				PSP.paramProclet(sd, "ofi_cod_encuesta(),ofi_cod_version()");
				q53LogEstadisticas.printLog("ofi_cod_encuesta recuperado: " + sd.gOS("ofi_cod_encuesta"));
				q53LogEstadisticas.printLog("terminarActivo recuperado: " + sd.gOS("terminarActivo"));
				q53LogEstadisticas.printLog("Antes de if ofi_cod_encuesta y terminarAmbas");
				if (sd.gOS("ofi_cod_encuesta") != null && !sd.gOS("ofi_cod_encuesta").equals("") &&
						sd.gOS("terminarActivo") != null && sd.gOS("terminarActivo").equals("0")) {
					String codEncuestaOfi = sd.gOS("ofi_cod_encuesta");
					String codVersionEncOfi = sd.gOS("ofi_cod_version");
					String encuesta=sd.gOS("encuesta");
					   
					if(cont>0 && !sd.gOS("id"+cont).equals("")){
						sd.setVal("pagina", "otras_encuestas");
						PSP.paramProclet(sd, "respuesta_rd_asociada()");
							
						String respRDAsociada = sd.gOS("respuesta_rd_asociada");
						//INSERTAMOS LA RESPUESTA propia de la oficina EN LA b.d.
							
						q53LogEstadisticas.printLog("Antes de q53RespuestaTablaClass.setRespuestaEncOfi");
						String codRespEncOfi = q53RespuestaTablaClass.setRespuestaEncOfi(sd,
							codOficina, usuario, codEncuestaOfi, codVersionEncOfi,
							respRDAsociada,encuesta);
							
						q53LogEstadisticas.printLog("Antes de q53RespuestaTablaClass.setRespuestaEncOfi");
							
						//Tenemos que volver a la pagina de recogida de datos necesitamos la encuesta visible de la oficina
						// recorrer pregunta por pregunta para coger la info. de los campos
						// que dependen del tipo de pregunta
						q53LogEstadisticas.printLog("Antes de q53RespuestaTablaClass.guardarRespuestasEncOfi");
						q53RespuestaTablaClass.guardarRespuestasEncOfi(sd, codEncuestaOfi,
							codVersionEncOfi, codRespEncOfi, cont);
						q53LogEstadisticas.printLog("Despues de q53RespuestaTablaClass.guardarRespuestasEncOfi");
					}
				}

			}            
				  
			/* 16.11.2007 FIN de comentado para la redirecicon al servlet q53usrEncuestaServlet*/
			q53LogEstadisticas.printLog("Antes de Redirigir a /q53ItourbaskWar/q53usrEncuestaServlet");
			q53LogEstadisticas.printLog("********** FIN **********");
			sd.req.getSession(true).removeAttribute("mapanopresencial");
			sd.req.getSession(true).removeAttribute("mapapresencial");	
			if (sd.gOS("encuesta").equals("pres")){
				q53BorrarRespuestasClass.borrarTabla(sd, "pres",sd.gOS("q53_cki.q53_usuario"));
				q53_redirigir(sd, "/q53ItourbaskWar/q53usrEncuestaPresencialTablaServlet");
			}else{
				q53BorrarRespuestasClass.borrarTabla(sd, "nopres",sd.gOS("q53_cki.q53_usuario"));
		        q53_redirigir(sd, "/q53ItourbaskWar/q53usrEncuestaNoPresencialTablaServlet");
			}          
			q53LogEstadisticas.printLog("Después de Redirigir a /q53ItourbaskWar/q53usrEncuestaServlet");
		} else {
            // el usuario no tiene el perfil necesario. seguramente es porque
            // se ha perdido la sesión y hay que redirigirlo al login, para que
            // vuelva a meter su usuario y contraseña
            sd.setVal("pagina", "q53_gen_login");
            q53LogEstadisticas.printLog(":q53ItourbaskWar/q53_gen_login.jsp?es_usuario_no_sesion");
            q53LogEstadisticas.printLog("********** FIN **********");
            q53_redirigir(sd, "/q53ItourbaskWar/q53_gen_login.jsp?es_usuario_no_sesion");
        }
    }
}
