package personalServlet;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import m05bClasses.m05bConexion;
import m05bClasses.m05bConstantes;
import m05bClasses.m05bFileLog;
import m05bClasses.m05bGenerarClave;


/**
 * Inserte aquí la descripción del tipo.
 * Fecha de creación: (07/12/04)
 */
public class m05bCargarGIPServlet extends javax.servlet.http.HttpServlet {m05bFileLog miLog = new m05bFileLog();
/**
 * Process incoming HTTP POST requests
 *
 * @param request Object that encapsulates the request to the servlet
 * @param response Object that encapsulates the response from the servlet
 */    

	java.sql.Connection conn=null;
	java.sql.Connection connJ47=null;
	
    String actualizarTerceros = "";

	
    String dniGIP = "", nombreGIP = "", telefonoGIP = "", direccionGIP = "", centroGIP = "";
    String cargo="", coddptoGIP="", descdptoGIP="";
    
    String[] codDepartM05 = new String[99];   // Formato 99999
    String[] codDepartGIP = new String[99];   // Formato 99
    String[] descCastDepartGIP = new String[99];
    String[] descEuskDepartGIP = new String[99];
    int contDepart= 0;
    
    	   
    int idDptos = 0;  		// Contador de histórico de departamentos
    int idPersonas = 0;  	// Contador de histórico de personas


public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

	performTask(request, response);

}
/**
 * Returns the servlet info string.
 */
public String getServletInfo() {

	return super.getServletInfo();

}
/**
 * Initializes the servlet.
 */
public void init() {

}  // Fin funcion init


public void obtenerConexiones() {
		
		// Establecer Conexiones
			try {
					m05bConexion miConex = new m05bConexion();
					conn = miConex.getConnection();
					conn.setAutoCommit(false);  // Al final si todo ha ido bien se hace commit
					//connJ47 = miConex.getConnectionJ47();
					//System.out.println("CONEXIONES OK");
   			} catch (Exception SQLException) {
					try {
			  			conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
			  		} catch (SQLException e2){
			  			System.err.println("Exception: OutletMaintenanceS.service: " + e2);
			  		}
				miLog.addTraza(SQLException);
			} 
}  // Fin funcion init


public void limpiarCampos() throws java.lang.Exception  {
       	    	dniGIP = "";
       	    	nombreGIP = "";
   				telefonoGIP = "";
   				coddptoGIP = "";
		   		descdptoGIP="";
   				direccionGIP = "";
   				centroGIP = "";
}

public void actualizarDepartamento( ) throws java.lang.Exception  {	

	   String sql;
	   PreparedStatement pstmt = null, pstmtGrabar = null;
	   ResultSet rs = null;
	   
	   String descCastDptoM05 = "", descEuskDptoM05 = "", anteriorCod="";
	   
	   try   {

// Comprobar si existe en parque móvil con la descripcion del GIP y diferente codigo
			   	sql = "select " + m05bConstantes.COL_06_CODDPTO + 
					" from " + m05bConstantes.TAB_DEPARTAMENTOS  +
					" where " + m05bConstantes.COL_06_DESCDPTO + "= '" + descCastDepartGIP[contDepart] + 
						"' and " + m05bConstantes.COL_06_EDESCDPTO + " = '" + descEuskDepartGIP[contDepart] + 
						"' and " + m05bConstantes.COL_06_CODDPTO +  " != '" + codDepartM05[contDepart] + "'";
				//System.out.println("m05b - Cargar GIP: SQL: " + sql);
            	pstmt = conn.prepareStatement(sql);
	        	rs = pstmt.executeQuery();
	   			if (rs.next()) {
	   					anteriorCod = rs.getString(1);
		   				sql = " insert into " + m05bConstantes.TAB_HIST_DPTOS  +
							" ( " + m05bConstantes.COL_11_ID + ", " + m05bConstantes.COL_11_CODDPTOANT + 
								", " + 	m05bConstantes.COL_11_DESDPTOANT + ", " + m05bConstantes.COL_11_CODDPTONUE + 
								"," + m05bConstantes.COL_11_DESDPTONUE + ", " + m05bConstantes.COL_11_FCAMBIO + 
								", " + m05bConstantes.COL_11_EDESDPTOANT + ", " + m05bConstantes.COL_11_EDESDPTONUE + ")" +
						 	" values ('" + idDptos + "', '" + anteriorCod + 
								"', '" + descCastDepartGIP[contDepart] + "', '" + codDepartM05[contDepart] + 
								"', '" + descCastDepartGIP[contDepart] + "', sysdate, '" + descEuskDepartGIP[contDepart] +
								"', '" + descEuskDepartGIP[contDepart] + "')"; 
				//System.out.println("m05b - Cargar GIP: INSERT: " + sql);
						
			    		pstmtGrabar = conn.prepareStatement(sql);
						pstmtGrabar.executeUpdate();
						++idDptos;
		   				sql = "delete from " + m05bConstantes.TAB_DEPARTAMENTOS + 
		   					" where " + m05bConstantes.COL_06_DESCDPTO + " = '" + descCastDepartGIP[contDepart] + 
							"' and " + m05bConstantes.COL_06_EDESCDPTO + " = '" + descEuskDepartGIP[contDepart] + "'";						
	            		pstmtGrabar = conn.prepareStatement(sql);
	   				    pstmtGrabar.executeUpdate();
	   				    //System.out.println("DPTO " + anteriorCod + " cambia codigo a " + codDepartM05[contDepart]);
	   				// Si ya existía con el nuevo codigo
	   				    sql = "select " + m05bConstantes.COL_06_DESCDPTO + ", " + m05bConstantes.COL_06_EDESCDPTO +
								" from " + m05bConstantes.TAB_DEPARTAMENTOS +
								" where " + m05bConstantes.COL_06_CODDPTO + " = '" + codDepartM05[contDepart] + "'";
		          		pstmt = conn.prepareStatement(sql);
			       		rs = pstmt.executeQuery();
			   			if (rs.next()) {
					   	    descCastDptoM05=rs.getString(1);
					   	    descEuskDptoM05=rs.getString(2);
			   				sql = " insert into " + m05bConstantes.TAB_HIST_DPTOS +
								" ( " + m05bConstantes.COL_11_ID + ", " + m05bConstantes.COL_11_CODDPTOANT + 
									", " + m05bConstantes.COL_11_DESDPTOANT + "," + m05bConstantes.COL_11_CODDPTONUE + 
									"," +  m05bConstantes.COL_11_DESDPTONUE  + ", fcambio_11, e_desdptant_11, e_desdptnue_11)" +
					 		 	" values ('" + idDptos + "', '" + codDepartM05[contDepart] + 
					 				"', '" + descCastDptoM05 + "', '', '', sysdate, '" + descEuskDptoM05 +
					 				"', '')"; 
			    			pstmtGrabar = conn.prepareStatement(sql);
							pstmtGrabar.executeUpdate();
							++idDptos;
							sql = " update " + m05bConstantes.TAB_DEPARTAMENTOS +
						 		" set " + m05bConstantes.COL_06_DESCDPTO + " = '" + descCastDepartGIP[contDepart] + "'" +
						 			" , " + m05bConstantes.COL_06_EDESCDPTO + " = '" + descEuskDepartGIP[contDepart] + "'" +
				 		 		" where " + m05bConstantes.COL_06_CODDPTO +  " = '" + codDepartM05[contDepart] + "'";
		       			   pstmtGrabar = conn.prepareStatement(sql);
						   pstmtGrabar.executeUpdate();
						   //System.out.println("      DPTO " + codDepartM05[contDepart] + " ya existia");
			   			}   // Fin ahora existe con el mismo codigo
	   			}   // Fin de misma descripción	y distinto codigo 
				else  {			
	// Comprobar si existe en parque móvil con el código del GIP
					   	sql = "select " + m05bConstantes.COL_06_DESCDPTO + ", " + m05bConstantes.COL_06_EDESCDPTO + 
								" from " + m05bConstantes.TAB_DEPARTAMENTOS +
								" where " + m05bConstantes.COL_06_CODDPTO +  " = '" + codDepartM05[contDepart] + "'";
		            	pstmt = conn.prepareStatement(sql);
			        	rs = pstmt.executeQuery();
		   				if (rs.next()) {
					   	    descCastDptoM05=rs.getString(1);
					   	    descEuskDptoM05=rs.getString(2);
			 	    // Si existe con diferente información  ---> ACTUALIZAR y GENERAR HISTORICO
					   	    if ((!(descCastDepartGIP[contDepart].equals(descCastDptoM05))) || 
					   	    		(!(descEuskDepartGIP[contDepart].equals(descEuskDptoM05))))  {
							   	    // Obtener el sgte Id a almacenar en la tabla de histórico de dptos
				       	    	   sql = " insert into m0511t00"  +
										" ( " + m05bConstantes.COL_11_ID + ", " + m05bConstantes.COL_11_CODDPTOANT + 
											", " + m05bConstantes.COL_11_DESDPTOANT + ", " + m05bConstantes.COL_11_CODDPTONUE + 
											"," + m05bConstantes.COL_11_DESDPTONUE + ", " + m05bConstantes.COL_11_FCAMBIO + 
											", " + m05bConstantes.COL_11_EDESDPTOANT + ", " +  m05bConstantes.COL_11_EDESDPTONUE + ")" +
						 			 	" values ('" + idDptos + "', '" + codDepartM05[contDepart] + 
						 					"', '" + descCastDptoM05 + "', '" + codDepartM05[contDepart] + 
						 					"', '" + descCastDepartGIP[contDepart] + "', sysdate, '" + descEuskDptoM05 +
						 					"', '" + descEuskDepartGIP[contDepart] + "')"; 
				       			   pstmtGrabar = conn.prepareStatement(sql);
								   pstmtGrabar.executeUpdate();
								   ++idDptos;
								// Actualizar el registro actual
				   	    		   sql = " update M0506T00 " +
								 		" set " + m05bConstantes.COL_06_DESCDPTO + " = '" + descCastDepartGIP[contDepart] + "'" +
								 		" , " + m05bConstantes.COL_06_EDESCDPTO + " = '" + descEuskDepartGIP[contDepart] + "'" +
						 		 		" where " + m05bConstantes.COL_06_CODDPTO +  " = '" + codDepartM05[contDepart] + "'";
				       			   pstmtGrabar = conn.prepareStatement(sql);
								   pstmtGrabar.executeUpdate();
								   //System.out.println("DPTO " + codDepartM05[contDepart] + " cambia descripcion");
							}	// Fin if - mismo codigo y distinta descripción
							else  {
								   //System.out.println("DPTO " + codDepartM05[contDepart] + " no cambia");
							}
				   	    }  // fin if - rs.next()
			// No existe  en parque móvil con código del GIP --->  INSERTAR
						sql = "select " + m05bConstantes.COL_06_DESCDPTO + ", " + m05bConstantes.COL_06_EDESCDPTO +
								" from M0506T00 " +
								" where " + m05bConstantes.COL_06_CODDPTO +  " = '" + codDepartM05[contDepart] + "'";
		            	pstmt = conn.prepareStatement(sql);
			        	rs = pstmt.executeQuery();
		   				if (rs.next()) {  }
		   				else  {
							sql = " insert into M0506T00" +
									 	" ( " + m05bConstantes.COL_06_CODDPTO +  ", " + m05bConstantes.COL_06_DESCDPTO + 
										", " + m05bConstantes.COL_06_EDESCDPTO + ")" +
				 					 " values ( '" + codDepartM05[contDepart] + 
				 				 		"', '" + descCastDepartGIP[contDepart] + 
				 				 		"', '" + descEuskDepartGIP[contDepart] + "')" ;
			    			pstmtGrabar = conn.prepareStatement(sql);
							pstmtGrabar.executeUpdate();
							//System.out.println("DPTO " + codDepartM05[contDepart] + " es nuevo");
						}   // fin No Existe
				}   // Fin else	
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} finally{
	   	    try {
	   	    	if (rs != null)
	   	    		rs.close();
				if (pstmt != null)
					pstmt.close();
				if (pstmtGrabar != null)
					pstmtGrabar.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	    }
}  // Fin funcion actualizarDepartamento


public void recodificarDptos( ) throws java.lang.Exception  {
	   
	   // Recodificacion de Dptos previa al proceso de carga de terceros
	   	   
	   String sql;
	   PreparedStatement pstmt = null;
	   ResultSet rs = null;
	   
	   try
	   {   
  		   m05bGenerarClave miClave = new m05bGenerarClave();
   	       idDptos=miClave.getNextId(m05bConstantes.TAB_HIST_DPTOS, m05bConstantes.COL_11_ID);

	   	//System.out.println("********************************   RECODIFICAR DEPARTAMENTOS ***************************" );
		   sql = "select substr( " + m05bConstantes.J47_ESTRUCTURA + ",0,2) || '000', " + m05bConstantes.J47_CODDPTO + ", " +
				m05bConstantes.J47_DESCRIPCION + ", " + m05bConstantes.J47_EDESCRIPCION +
				" from " + m05bConstantes.J47_VIS_ORGANIGRAMAS + ", " + m05bConstantes.J47_VIS_GENERAL +
				" where " + m05bConstantes.J47_CODDPTO + " = " + m05bConstantes.J47_CODIGO  +
				" and " + m05bConstantes.J47_SUBCODIGO + " = " + m05bConstantes.J47_SUBC_20 +
				" order by 1, " + m05bConstantes.J47_FINICIO + " DESC";
	       //System.out.println("SELECT DPTOS GIP: " + sql );
            pstmt = conn.prepareStatement(sql);
	        rs = pstmt.executeQuery();
	        if (rs.next()) {
	   	        // Tratar el primer departamento
	        	codDepartM05[contDepart]=rs.getString(1);
	        	codDepartGIP[contDepart]=rs.getString(2); //Para recuperar desc dpto al grabar persona
			   	descCastDepartGIP[contDepart]=rs.getString(3);
			   	descEuskDepartGIP[contDepart]=rs.getString(4);
			   	actualizarDepartamento();
			   	++contDepart;
			   	// Tratar el resto de departamento
		   		while (rs.next()){
		   			// Obtener sólo el primer valor para tomar el dpto actual
		   			if ((!(rs.getString(1).equals(codDepartM05[contDepart-1])))
		   			                && (codDepartM05[contDepart-1] != null)) {
		   			    codDepartM05[contDepart]=rs.getString(1);
	        			codDepartGIP[contDepart]=rs.getString(2); //Para recuperar desc dpto al grabar persona
			   			descCastDepartGIP[contDepart]=rs.getString(3);
			   			descEuskDepartGIP[contDepart]=rs.getString(4);
			   			// Actualizar departamentos del parque móvil
						actualizarDepartamento();
			   			++contDepart;
			   		}      //  Fin if
		   		}   //  Fin while
		    }   // Fin if
	   } catch (Exception ex) {
			try {
	  			conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
	  			throw new Exception(ex);
	  		} catch (SQLException e1){
	  			System.err.println("Exception: OutletMaintenanceS.service: " + e1);
	  		}
	   } finally{
	   	    try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	   }
}   // Fin funcion recodificarDptos



/*public String obtenerCargo(String dni) throws java.lang.Exception  {	
	   // Graba un registro histórico a partir de los datos del vehiculo al que se ha cambiado la matricula
	   String sql;
	   String cargo="";
	   java.sql.Statement pstmt = null;
	   ResultSet rs = null;
	   
	   try
	   {   
		// Obtener los datos del vehiculo correspondiente a esa matrícula
			   sql = "select " + m05bConstantes.J47_DESCRIPCION +
					" from " + m05bConstantes.J47_VIS_RELACIONES + " R" +
							", " + m05bConstantes.J47_VIS_GENERAL + " G" +
					" where G." + m05bConstantes.J47_PUESTO + " = R." + m05bConstantes.J47_PUESTO +
					" and G." + m05bConstantes.J47_SUBCODIGO + " = '" + m05bConstantes.J47_SUBC_24 + "'" + 
					" and R." + m05bConstantes.J47_DNI + " = '" + dni + "'";
		       //System.out.println("SQL PERSONAS: " + sql );
		       	pstmt = conn.createStatement();
				//pstmt = connJ47.createStatement();
		   		pstmt.execute(sql);
		   		rs = pstmt.getResultSet();
		   		if (rs.next()) {
			   		cargo=rs.getString(1);
		        }
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} finally{
	   	    try {
	   	    	if (rs != null)
	   	    		rs.close();
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	    }
		return cargo;
}*/

public String obtenerCodDpto( ) throws java.lang.Exception  {	
	   // Graba un registro histórico a partir de los datos del vehiculo al que se ha cambiado la matricula

	   String sql;
	   java.sql.Statement pstmt = null;
	   ResultSet rs = null;
	   String coddpto="";
	   
	   try
	   {   
		// Obtener el código de departamento de la tabla de organigramas
			   sql = "select substr(" + m05bConstantes.J47_ESTRUCTURA + ",0,2)" +
					" from " + m05bConstantes.J47_VIS_ORGANIGRAMAS +
					" where " + m05bConstantes.J47_CODCTRO + " = '" + centroGIP + "'";
		       //System.out.println("SQL PERSONAS: " + sql );
		       	pstmt = conn.createStatement();
				//pstmt = connJ47.createStatement();
		   		pstmt.execute(sql);
		   		rs = pstmt.getResultSet();
		   		if (rs.next()) {
			   		coddpto=rs.getString(1) + "000";
		        }
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} finally{
	   	    try {
	   	    	if (rs != null)
	   	    		rs.close();
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	    }
		return coddpto;
}  // Fin funcion obtenerCodDpto

public String obtenerDescDpto() throws java.lang.Exception  {	
	   // Graba un registro histórico a partir de los datos del vehiculo al que se ha cambiado la matricula

	   String sql;
	   java.sql.Statement pstmt = null;
	   ResultSet rs = null;
	   String dpto="";
	   
	   try
	   {   
		// Obtener el código de departamento de la tabla de organigramas
			   sql = "select " + m05bConstantes.J47_DESCRIPCION +
					" from " + m05bConstantes.J47_VIS_GENERAL + 
					" where " + m05bConstantes.J47_CODIGO + " = " + coddptoGIP +
					" and " + m05bConstantes.J47_SUBCODIGO + " = '" + m05bConstantes.J47_SUBC_20 + "'" ;
		       //System.out.println("SQL DESC DPTO: " + sql );
		       	pstmt = conn.createStatement();
				//pstmt = connJ47.createStatement();
		   		pstmt.execute(sql);
		   		rs = pstmt.getResultSet();
		   		if (rs.next()) {
			   		dpto=rs.getString(1);
		        }
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} finally{
	   	    try {
	   	    	if (rs != null)
	   	    		rs.close();
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	    }
		return dpto;
}  // Fin funcion obtenerDescDpto


public void obtenerDatosDpto( ) throws java.lang.Exception  {	
        int i;

        for (i = 0;
             (i < contDepart) && (!(codDepartGIP[i].equals(coddptoGIP)));
             ++i);

        if (i == contDepart) {
        	//System.out.println("        Dpto GIP inexistente: " + coddptoGIP);
        	coddptoGIP="";
			descdptoGIP="";
        }
        else {
			coddptoGIP=codDepartM05[i];
			descdptoGIP=descCastDepartGIP[i];
		}
}   // Fin funcion obtenerDatosDpto


public void actualizarPersona( ) throws java.lang.Exception  {	

	   String sql;
	   java.sql.Statement pstmt = null;
	   PreparedStatement pstmtGrabar = null;
	   ResultSet rs = null;
	   
	   String estadoPersonaM05=m05bConstantes.PERS_NOEXISTE;
       String nombreM05 = "", telefonoM05 = "", direccionM05 = "", centroM05 = "";
       String actM05= "", cargo="", coddptoM05="", descdptoM05="";
	   
	   try
	  {   
		// Obtener los datos de la persona en el parque móvil
			   sql = "select " + m05bConstantes.COL_21_ACTUALIZA + ", " + m05bConstantes.COL_21_NOMBRE +
			   		", " + m05bConstantes.COL_21_TELEF + ", " + m05bConstantes.COL_21_CODDPTO +
			   		", " + m05bConstantes.COL_21_DIREC + 
					" from " + m05bConstantes.TAB_PERSONAL +
					" where " + m05bConstantes.COL_21_DNI + " = '" + dniGIP + "'";
		       	pstmt = conn.createStatement();
		   		pstmt.execute(sql);
		   		rs = pstmt.getResultSet();


		// Comprobar si hay que modificar la BD para esta persona
			 // Ver si la persona es nueva o actualizable
		   		if (rs.next()) {
			   		estadoPersonaM05=rs.getString(1);
		       	    nombreM05 = rs.getString(2);
		   			telefonoM05 = rs.getString(3)==null?"":rs.getString(3);
		   			coddptoM05 = rs.getString(4);
		   			direccionM05 = rs.getString(5);
			   		if ( estadoPersonaM05.equals("S") ||
			   				(estadoPersonaM05.equals("N") && actualizarTerceros.equals("T"))) {
		   			    obtenerDatosDpto();
			   		    // Comprobar si los datos han cambiado
			   		    if ((nombreM05 == nombreGIP) && (direccionM05 == direccionGIP) &&
			   		    	 	(telefonoM05 == telefonoGIP) && (coddptoM05 == coddptoGIP)) {
			   		    	 		actM05=m05bConstantes.PERS_ACTUALIZABLE;
 					   		    	//System.out.println(" -----------  ACTUALIZABLE SIN MODIFICACIONES: " + dniGIP + "  ----------- ");
			   		    }
			   		    else  {  // No se han modificado los datos
			   		    	actM05=m05bConstantes.PERS_NOACTUALIZABLE;
	   		    	 		//System.out.println(" ### -----------------------  ACTUALIZABLE: " + dniGIP + "  ----------------------- ### ");
			   		    }	
			   		}
			   		else  {
			   			actM05=m05bConstantes.PERS_NOACTUALIZABLE;
  				    	//System.out.println(" -----------  NO ACTUALIZABLE: " + dniGIP + "  ----------- ");
			   		}
		        }
		        else {
		        	actM05=m05bConstantes.PERS_NOEXISTE;
		        	//System.out.println(" ***** ------------------------------------  NO EXISTE: " + dniGIP + "  ------------------------------------ ***** ");
		        } 
		// Modificar BD
		       	// La persona no existe en BD de parque móvil  ---> INSERTARLA
				if (actM05 == m05bConstantes.PERS_NOEXISTE) {
		   			       obtenerDatosDpto();
		       	    		// Insertar datos
   	    		    	   sql = " insert into " + m05bConstantes.TAB_PERSONAL  +
							 " ( " + m05bConstantes.COL_21_RANGO + ", " + m05bConstantes.COL_21_NOMBRE +
							  ", " + m05bConstantes.COL_21_DIREC + ", " + m05bConstantes.COL_21_TELEF + 
							  ", " + m05bConstantes.COL_21_DNI + ", " + m05bConstantes.COL_21_CODCARGO +
							  ", " + m05bConstantes.COL_21_CODDPTO + ", " + m05bConstantes.COL_21_ACTUALIZA + ")" +
		 					 " values (' ', '" + nombreGIP + "', '" + direccionGIP + "', '" + telefonoGIP +
		 					 "', '" + dniGIP + "', '" + cargo + "', '" + coddptoGIP + "', 'S')" ;
	       				   pstmtGrabar = conn.prepareStatement(sql);
						   pstmtGrabar.executeUpdate();
		       	}
				else {
		       	    		if ((actM05 ==  m05bConstantes.PERS_ACTUALIZABLE) || (actualizarTerceros =="T")) {
	       	    			// La persona existe en BD de parque móvil  ---> ACTUALIZARLA
	       	    				// Insertar el registro histórico
	       	    				sql = " insert into " + m05bConstantes.TAB_HIST_PERSONAL  +
										" ( " + m05bConstantes.COL_12_ID + ", " + m05bConstantes.COL_12_FCAMBIO +
										", " + m05bConstantes.COL_12_RANGO + ", " + m05bConstantes.COL_12_NOMBRE +
										", " + m05bConstantes.COL_12_DIREC + ", " + m05bConstantes.COL_12_TELEF + 
									  	", " + m05bConstantes.COL_12_DNI + ", " + m05bConstantes.COL_12_CODCARGO +
									  	", " + m05bConstantes.COL_12_CODDPTO + ", " + m05bConstantes.COL_12_ACTUALIZA + ")" +
			 						 	" values ('" + idPersonas +  "', sysdate,' ','" + nombreGIP + "', '" + direccionGIP + "', '" + telefonoGIP +
				 					 	"', '" + dniGIP + "', '" + cargo + "', '" + coddptoGIP + "', 'S')" ;	       	    				// Actualizar el registro actual
	    	   					//	//System.out.println("INSERT PERSONAS HISTORICO: " + sql );
	       				   		pstmtGrabar = conn.prepareStatement(sql);
						   		pstmtGrabar.executeUpdate();
						   		++idPersonas;
						   		// Actualizar el registro actual
	   	    		    	    sql = " update " + m05bConstantes.TAB_PERSONAL  +
								 		" set " + m05bConstantes.COL_21_NOMBRE + " = '" + nombreGIP + "'" +
								 		" , " + m05bConstantes.COL_21_DIREC + " = '" + direccionGIP + "'" +
								 		" , " + m05bConstantes.COL_21_TELEF + " = '" + telefonoGIP + "'" +
								 		" , " + m05bConstantes.COL_21_CODCARGO + " = '" + cargo + "'" +
								 		" , " + m05bConstantes.COL_21_CODDPTO + " = '" + coddptoGIP + "'" +								
			 					 		" where " + m05bConstantes.COL_21_DNI + " = '" + dniGIP + "'" ;
	    	   					////System.out.println("UPDATE PERSONAS: " + sql );
	       				   		pstmtGrabar = conn.prepareStatement(sql);
						   		pstmtGrabar.executeUpdate();
	       	    			}
		       	}
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} finally{
	   	    try {
	   	    	if (rs != null)
	   	    		rs.close();
				if (pstmt != null)
					pstmt.close();
				if (pstmtGrabar != null)
					pstmtGrabar.close();
			} catch (SQLException e2) {
				System.err.println("Exception: OutletMaintenanceS.service: " + e2);
	  		}
	    }
}  // Fin funcion actualizarPersona


public void cargarTerceros( ) throws java.lang.Exception  {
	
	   String sql;
	   java.sql.Statement pstmt = null;
	   ResultSet rs = null;

 //  	   String dniGIP = "", nombreGIP = "", telefonoGIP = "", direccionGIP = "", centroGIP = "";
   //	   String actGIP= "", cargo="", coddptoGIP="", descdptoGIP="";

	   try
	   {  
   			m05bGenerarClave miID = new m05bGenerarClave();
  			idPersonas = miID.getNextId(m05bConstantes.TAB_HIST_PERSONAL, m05bConstantes.COL_12_ID);
   	   
   	       //System.out.println("***********************   CARGAR TERCEROS  *************************" );
		// Obtener la situación actual de cada DNI válido 
			   /*sql = "select distinct(b." + m05bConstantes.J47_DNI + ", " + m05bConstantes.J47_NOMBRE +
					", " + m05bConstantes.J47_TELEFONO + ", " + m05bConstantes.J47_CODDPTO + 
					", " + m05bConstantes.J47_DIRECCION + ", " + m05bConstantes.J47_CODCTRO + 
				" from " + m05bConstantes.J47_VIS_PERSONAS  ;*/
				sql = "select distinct(b." + m05bConstantes.J47_DNI + "), b." + m05bConstantes.J47_SITADMIN + 
						", min(a." + m05bConstantes.J47_NOMBRE + "), min(a." + m05bConstantes.J47_TELEFONO + "), " +
						" min(a." + m05bConstantes.J47_CODDPTO + ")," + 
						" min(a." + m05bConstantes.J47_DIRECCION + "), min(a." + m05bConstantes.J47_CODCTRO + ") " + 
					" from " + m05bConstantes.J47_VIS_PERSONAS + 
						" a, " + m05bConstantes.J47_VIS_RELACIONES + " b " +  
					" where b." + m05bConstantes.J47_DNI + " = a." + m05bConstantes.J47_DNI + 
						" and b." + m05bConstantes.J47_CAUSACESE + " = '  ' " +
						" and b." + m05bConstantes.J47_PUESTO + " not in ('999999','999555') " + // se excluyen los puestos ficticios
					" group by b." + m05bConstantes.J47_DNI + ", b." + m05bConstantes.J47_SITADMIN + 
					" order by b." + m05bConstantes.J47_DNI + ", b." + m05bConstantes.J47_SITADMIN ;
		       //System.out.println("SQL J47 PERSONAS: " + sql );
		       	pstmt = conn.createStatement();
				//pstmt = connJ47.createStatement();
		   		pstmt.execute(sql);
		   		rs = pstmt.getResultSet();
		   		if (rs.next()) {
			   		while (rs.next()){
			   			// Datos globales obtenidos de vista PERSONAS
			   			limpiarCampos();
		       	    	dniGIP = rs.getString(1);
		       	    	nombreGIP = rs.getString(3);
		   				telefonoGIP = rs.getString(4)==null?"":rs.getString(4);
		   				coddptoGIP = rs.getString(5);
		   				direccionGIP = rs.getString(6);
		   				centroGIP = rs.getString(7);
		   				// Actualizar tablas BD
		   				actualizarPersona( );
		            }                // fin bucle while
		        }           // fin if rs.next()
	    } catch (Exception ex) {
			   try {
					conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
					throw new Exception(ex);
			   } catch (SQLException e1){
					System.err.println("Exception: OutletMaintenanceS.service: " + e1);
			   }
		} 	finally{
					if (rs != null)
						rs.close();
					if (pstmt != null)
						pstmt.close();
		}  
}  // Fin funcion cargarTerceros


/**
 * Process incoming requests for information
 *
 * @param request Object that encapsulates the request to the servlet
 * @param response Object that encapsulates the response from the servlet
 */
public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {

       String sql;

       try
	   {
	   	   
   	   	   actualizarTerceros = request.getParameter("Actualizacion")==null?"T":request.getParameter("Actualizacion");
	       //System.out.println("Todos (T) / Solo Seleccionados (S): " + actualizarTerceros);
			try{
					obtenerConexiones();
					recodificarDptos();
					//recodificarCargos();
					cargarTerceros( );
					//System.out.println("COMMIT");
				    conn.commit();  //Si todo ha ido bien se actualizan los cambios en la BD
					response.sendRedirect("m05bCargaGIPJsp.jsp?Mensaje=" + m05bConstantes.MSG_OK);
			} catch (Exception SQLException) {
					try {
			  			conn.rollback();  // Ha habido problemas, se deshacen todos los cambios
			  		} catch (SQLException e2){
			  			response.sendRedirect("m05bError.jsp");
			  		}
				miLog.addTraza(SQLException);
			} 	finally {  // Cerrar conexiones
					if (conn != null)
						conn.close();
					/*if (connJ47 != null)
						connJ47.close();*/
					//System.out.println("DESCONEXION");
			}  
	} catch(Throwable theException)	{
		miLog.addTraza(theException);
		try {
			response.sendRedirect("m05bError.jsp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			miLog.addTraza(e);
		}
	}
}    //  Fin funcion performTask

}  // Fin clase m05bCargarGIPServlet
