package vehiculosServlet;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.StringTokenizer;

import javax.servlet.http.HttpSession;

import m05bBD.m05bVehiculos;
import m05bClasses.m05bComun;
import m05bClasses.m05bConexion;
import m05bClasses.m05bConstantes;
import m05bClasses.m05bFileLog;
import m05bClasses.m05bGenerarClave;

public class m05bGrabarVehiculosServlet extends javax.servlet.http.HttpServlet {m05bFileLog miLog = new m05bFileLog();
//Variables Globales
   String sMatricula, sql, sqlAux1;
   String sMarca="", sRango="", sKmAct="0", sSituacion="", sCodDpto="", sDescDpto="", sAutoriApar="", sKmActBD="0", sCodDptoBD="", sSituacionBD="", sCodMod="", sPrecio="0";
   String sKmRevis="0", sMesRevis="0", sColor="", sExpte="", sNSerie="", sCV="0,00", sCR="0,00", sInf1="", sInf2="", sRotulado="", sNota="";
   String fKmAct="", fAlta="", fMatric="", fBaja="", fGarantia="", fCedido="", fBajaTemp="";
   String fIncicioRango="", sImporteTransferencia="0", sAmorAcumulada="", RangoOld="";
   String ImporteBaja="";
   String aparcado="";
   String vcontab="";
   String amoanual="0";
   String amoacum="0";
   String impbaja="0";
   String destino="0";
   String motivbaja="";
   String fadquis="";
   String regadquis="";
   String matricant="";
   String poliza="";
   String vidautil="";
   String sMarcaDesc="";
   String persona="";
   String resultado="";
   String sDescDptoBD="";
   
   int id=0;
   String ArrayLista="";
   java.sql.Connection conn=null;
   PreparedStatement pstmt = null,
                     pstmtInsert = null,
                     pstmtComprobacion = null,
                     pstmtAux1 = null,
                     pstmtAmortizacionTotal = null;
   ResultSet rs = null,
             rsComprobacion = null,
             rsAux1 = null,
             rsAmortizacionTotal = null;
   SimpleDateFormat formatterDate = new SimpleDateFormat ("dd/MM/yyyy");

   m05bGenerarClave miID = new m05bGenerarClave();
   m05bComun miComun = new m05bComun();
   

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

	performTask(request, response);

}
public String getServletInfo() {

	return super.getServletInfo();

}
public void init() {

}

   private void recogerParametros(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response){
   	 HttpSession session = request.getSession(false);  
	 m05bVehiculos vehiculo = (m05bVehiculos)session.getAttribute("m05bVehiculos");
	 sMatricula = request.getParameter("Matricula").toUpperCase();
     miLog.addTraza(persona , "Grabar Vehiculos:  " , "sMatricula: " + sMatricula,m05bConstantes.LOG_NIVEL_BAJO);
	 
	 ArrayLista = request.getParameter("arrayVehiculos");
     persona = (String) session.getAttribute("persona");	 
     miLog.addTraza(persona , "Grabar Vehiculos:  " , "ArrayLista: " + ArrayLista,m05bConstantes.LOG_NIVEL_BAJO);     
     StringTokenizer st = new StringTokenizer(ArrayLista,"@");
		//"FMatriculacion"
	    if (st.hasMoreTokens()) { 
           fMatric=(String)st.nextToken();
	       if (fMatric.equals("#")){
	          fMatric="";
	       }
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "fMatric: " + fMatric,m05bConstantes.LOG_NIVEL_BAJO);
  	        vehiculo.setVeh_fmatric(fMatric);
       }
	   //"FAlta"
	   if (st.hasMoreTokens()) { 
	       fAlta=(String)st.nextToken();
	       if (fAlta.equals("#")){
	           fAlta=miComun.getFechaActual();
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "fAlta: " + fAlta,m05bConstantes.LOG_NIVEL_BAJO);
	           
	       }
	       vehiculo.setVeh_falta(fAlta);
       }
	   //"FBajaTemp"
	   if (st.hasMoreTokens()) { 
	       fBajaTemp=(String)st.nextToken();
	       if (fBajaTemp.equals("#")){
	    	   fBajaTemp="";
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "fBajaTemp: " + fBajaTemp,m05bConstantes.LOG_NIVEL_BAJO);
	           
	       }
	       vehiculo.setVeh_falta(fBajaTemp);
       }
	   
	   //"fCedido"
	   if (st.hasMoreTokens()) { 
		   fCedido=(String)st.nextToken();
	       if (fCedido.equals("#")){
	    	   fCedido="";
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "fCedido: " + fCedido,m05bConstantes.LOG_NIVEL_BAJO);
	           
	       }
	       vehiculo.setVeh_falta(fCedido);
       }

       
 
	   //"FecKmAct"
	   if (st.hasMoreTokens()) { 
           fKmAct=(String)st.nextToken();
	       if (fKmAct.equals("#")){
	           fKmAct="";}
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "fKmAct: " + fKmAct,m05bConstantes.LOG_NIVEL_BAJO);
	           
	       vehiculo.setVeh_fkmact(fKmAct);
       }
       //"CRango"
	   if (st.hasMoreTokens()) { 
	       sRango=(String)st.nextToken();
           vehiculo.setVeh_rango(sRango);
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "sRango: " + sRango,m05bConstantes.LOG_NIVEL_BAJO);
           
       }
       //"Situacion"
	   if (st.hasMoreTokens()) { 
	       sSituacion=(String)st.nextToken();
            miLog.addTraza(persona , "Grabar Vehiculos:  " , "sSituacion: " + sSituacion,m05bConstantes.LOG_NIVEL_BAJO);
	       vehiculo.setVeh_situacion(sSituacion);
       }
       miLog.addTraza(persona , "(sSituacion.equals(T)) ",  sSituacion ,m05bConstantes.LOG_NIVEL_BAJO);
	      if  (!(sSituacion.equals("C"))) 
	    	   fCedido= "";	 
	       if  (!(sSituacion.equals("T"))) 
	    	   fBajaTemp= "";	        
       //"KmActuales"
	   if (st.hasMoreTokens()) { 
	      sKmAct=(String)st.nextToken();
		  if (sKmAct==null)
			sKmAct="0";
		  else {
          sKmAct=miComun.ImportesABasedatos(sKmAct);
          }	   
          miLog.addTraza(persona , "Grabar Vehiculos:  " , "sKmAct2: " + sKmAct,m05bConstantes.LOG_NIVEL_BAJO);		  
	      vehiculo.setVeh_kmact(sKmAct);
       }
       //"Modelo"
	   if (st.hasMoreTokens()) { 
	      sCodMod=(String)st.nextToken();
          if (sCodMod == null)
		     sCodMod = "";
	      vehiculo.setVeh_modelo(sCodMod);
       }
      //"Marca"
	  if (st.hasMoreTokens()) { 
	     sMarca=(String)st.nextToken();
	     if (sMarca == null)
			sMarca = "";
	     vehiculo.setVeh_marca(sMarca);
      }
     //"Dpto"
	 if (st.hasMoreTokens()) { 
	    sCodDpto=(String)st.nextToken();
		vehiculo.setVeh_coddpto(sCodDpto);
     }
     //"DesDpto"
     if (st.hasMoreTokens()) { 
	    sDescDpto=(String)st.nextToken();
		vehiculo.setVeh_desdpto(sDescDpto);
     }
     //"Precio"
	 if (st.hasMoreTokens()) { 
	    sPrecio=(String)st.nextToken();
       miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Precio antes de  ImportesABasedatos" + sPrecio,m05bConstantes.LOG_NIVEL_BAJO);
	    
	    if (sPrecio.equals("#")){
	           sPrecio="0";}
	    else {
        //sPrecio= miComun.ImportesABasedatos(sPrecio);
       miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Precio despues de  ImportesABasedatos" + sPrecio,m05bConstantes.LOG_NIVEL_BAJO);
        
	    }	
		vehiculo.setVeh_precio(sPrecio);
	 }
		// Recuperar inf. de la ventana
		//FecGarantia
		fGarantia=request.getParameter("FecGarantia");
		vehiculo.setVeh_fgarantia(fGarantia);
        //Kms Revision
        sKmRevis=request.getParameter("Kilometros")==null?"0":request.getParameter("Kilometros");
        sKmRevis= miComun.ImportesABasedatos(sKmRevis);
	    if ( (sKmRevis.equals("")) ||  (sKmRevis == null ) )
	    	sKmRevis= "0";	   
		vehiculo.setVeh_kmrevis(sKmRevis);
        //Mes Revision
        sMesRevis=request.getParameter("Meses")==null?"0":request.getParameter("Meses");
        sMesRevis= miComun.ImportesABasedatos(sMesRevis);
	    if ( (sMesRevis.equals("")) ||  (sMesRevis == null ) )
	    	sMesRevis= "0";	           
        
		vehiculo.setVeh_mesrevis(sMesRevis);
		//Color
        sColor=request.getParameter("Color");
		vehiculo.setVeh_color(sColor);
		//Expdte
        sExpte=request.getParameter("Expdte")==null?"":request.getParameter("Expdte").toUpperCase();
		vehiculo.setVeh_expte(sExpte);
        //sAutoriza
        sAutoriApar=request.getParameter("Autoriza");
		vehiculo.setVeh_autaparc(sAutoriApar);
        //NSerie
        sNSerie=request.getParameter("NSerie")==null?"":request.getParameter("NSerie").toUpperCase();
		vehiculo.setVeh_nserie(sNSerie);
		//CVFiscales
        //sCV=request.getParameter("CVFiscales")==null?"":request.getParameter("CVFiscales");
        //sCV=miComun.ImportesABasedatos(sCV);
        
		//vehiculo.setVeh_cvfisc(sCV);
		
		//CVReales
        sCR=request.getParameter("CVReales")==null?"0,00":request.getParameter("CVReales");
        if ( (sCR.equals("")) ||  (sCR == null ) )
        	sCR= "0,00";	           
        miLog.addTraza(persona , "Grabar Vehiculos:  " , "sCR: " +sCR,m05bConstantes.LOG_NIVEL_BAJO);
        //sCR=miComun.ImporteBasedatosAPagina(sCR);
        miLog.addTraza(persona , "Grabar Vehiculos:  " , "sCR: " +sCR,m05bConstantes.LOG_NIVEL_BAJO);        
		vehiculo.setVeh_cvreal(sCR);
		
		//Inf1
        sInf1=request.getParameter("Inf1")==null?"":request.getParameter("Inf1").toUpperCase();
		vehiculo.setVeh_iadic1(sInf1);
		//Inf2
        sInf2=request.getParameter("Inf2")==null?"":request.getParameter("Inf2").toUpperCase();
		vehiculo.setVeh_iadic2(sInf2);
        //Rotulado
        sRotulado=request.getParameter("Rotulado");
		vehiculo.setVeh_rotul(sRotulado);
        //Notas
        sNota=request.getParameter("Notas")==null?"":request.getParameter("Notas");
		vehiculo.setVeh_observ(sNota);
        //ImpTransferencia
        sImporteTransferencia=request.getParameter("ImpTransferencia")==null?"0":request.getParameter("ImpTransferencia");
        sImporteTransferencia=miComun.ImportesABasedatos(sImporteTransferencia);
		vehiculo.setVeh_imptransf(sImporteTransferencia);
	    //Metemos en sesion
	    
	    aparcado = vehiculo.getVeh_aparcado();
	    sCV = vehiculo.getVeh_cvfisc();
	    if ( (sCV.equals("")) ||  (sCV == null ) )
	    	sCV= "0,00";	    
	    vcontab = vehiculo.getVeh_vcontab();
	    amoanual = vehiculo.getVeh_amoanual();
	    if ( (amoanual.equals("")) ||  (amoanual == null ) )
	    	amoanual= "0";
	    
	    amoacum = vehiculo.getVeh_amoacum();
	    if ( (amoacum.equals("")) ||  (amoacum == null ) )
	    	amoacum= "0";
	    destino = vehiculo.getVeh_destino();
	    if ( (destino.equals("")) ||  (destino == null ) )
	    	destino= "0";	    
	    fadquis = vehiculo.getVeh_fadquis();
	    regadquis = vehiculo.getVeh_regadq();
	    //matricant = vehiculo.getVeh_matricant();
	    poliza = vehiculo.getVeh_poliza();
	    vidautil = vehiculo.getVeh_vidautil();
       if ( (vidautil.equals("")) ||  (vidautil == null ) )
	        vidautil= "10";
	    
        session.setAttribute("m05bVehiculos",vehiculo);
       }
       
private boolean ExisteVehiculo() throws java.lang.Exception{
   boolean  verified = true;

   try{  
	   sql = "select " + m05bConstantes.COL_34_KMACTUALES + ", " + m05bConstantes.COL_34_CODDPTO + 
	   "," + m05bConstantes.COL_34_RANGO + ", " + m05bConstantes.COL_34_SITUACION  + ", " + m05bConstantes.COL_34_DESDPTO  +
	   " from " + m05bConstantes.TAB_VEHICULOS  +
	   " where " +  m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'" ;
	   miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Existe Vehículo: sql: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
	   
	   pstmt = conn.prepareStatement(sql);
	   rs = pstmt.executeQuery();
	   if (rs.next()){
	   	  sKmActBD = rs.getString(1);
		  if (sKmActBD == null)
		      sKmActBD= "0";
		  sCodDptoBD = rs.getString(2);
		  if (sCodDptoBD == null)
		   	sCodDptoBD= "0";
		  sSituacionBD = rs.getString(4);
		  sDescDptoBD = rs.getString(5);
		  RangoOld = rs.getString(3);
	      if (RangoOld == null)
		  RangoOld= "";
	      return verified;
	   }
	   return false;
   } catch (Exception ex) {	
	  	throw new Exception(ex);
   } finally{
	   	    try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				
			} catch (SQLException e2) {
                miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Existe Vehículo:Exception: sql: " + e2,m05bConstantes.LOG_NIVEL_BAJO);
                throw new Exception(e2);
			}
	   } 
}
  private boolean ExisteNSerie()throws java.lang.Exception{
  	boolean verified = true;
  
  	try{
	  	 sqlAux1 = "SELECT 1  FROM "+ m05bConstantes.TAB_VEHICULOS +
	  	 " WHERE " + m05bConstantes.COL_34_NSERIE+ "='" + sNSerie + 
	  	 "' AND " + m05bConstantes.COL_34_MATRICULA+ "!='" + sMatricula + "'" ;
	     miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Existe NoSerieo: sql: " + sqlAux1,m05bConstantes.LOG_NIVEL_BAJO);
	  	 
		 pstmtAux1 = conn.prepareStatement(sqlAux1);
		 rsAux1 = pstmtAux1.executeQuery();
		 if ((rsAux1.next()) && (sNSerie != "S/N"))
			 return false;
	     else 
	     	return true;
	  } catch (Exception ex) {
	  		throw new Exception(ex);
	  } finally{
	   	    try {
				if (rsAux1 != null)
					rsAux1.close();
				if (pstmtAux1 != null)
					pstmtAux1.close();
				
			} catch (SQLException e2) {
				miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Existe NoSerieo:Exception: sql: " + e2,m05bConstantes.LOG_NIVEL_BAJO);
				throw new Exception(e2);
   	  }
	}
}

  private boolean ExisteNSerieNuevo() throws java.lang.Exception{
  boolean verified = true;
  
  	try{
	  	 sqlAux1 = "SELECT 1  FROM "+ m05bConstantes.TAB_VEHICULOS +
	  	 " WHERE " + m05bConstantes.COL_34_NSERIE+ "='" + sNSerie + 
	  	 "'" ;
	     miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Existe NoSerieNuevo: sql: " + sqlAux1,m05bConstantes.LOG_NIVEL_BAJO);
	  	 
		 pstmtAux1 = conn.prepareStatement(sqlAux1);
		 rsAux1 = pstmtAux1.executeQuery();
		 if ((rsAux1.next()) && (sNSerie != "S/N"))
			 return false;
	     else 
	     	return true;
  	} catch (Exception ex) {
  		throw new Exception(ex);		
	} finally{
	   	    try {
				if (rsAux1 != null)
					rsAux1.close();
				if (pstmtAux1 != null)
					pstmtAux1.close();
			} catch (SQLException e2) {
				throw new Exception(e2);          
	  		}
	 }
}
  
  private boolean TieneTarjeta() throws java.lang.Exception{
	boolean verified=true;
 	try{
	 	 sql = "select 1" + 			   	             
		 " from " + m05bConstantes.TAB_TARJETAS  +
		 " where " +  m05bConstantes.COL_31_MATRICULA + " = '" + sMatricula + 
		 "' AND " +  m05bConstantes.COL_31_SITUACION +  " = 'A' AND " +  
		 m05bConstantes.COL_31_TIPO +  " = 'G'"  ;
	     miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " Tiene Tarjeta 31 Vehiculo sql: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
		 pstmtComprobacion = conn.prepareStatement(sql);
		 rsComprobacion = pstmtComprobacion.executeQuery();
	     if (!(rsComprobacion.next())) 
	     	 return false;
	 } catch (Exception ex) {
	 	throw new Exception(ex);
	 } finally{
	    try {
			if (rsComprobacion != null)
				rsComprobacion.close();
			if (pstmtComprobacion != null)
				pstmtComprobacion.close();
			
		} catch (SQLException e2) {
			throw new Exception(e2);
		}
	 }
     miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar  Tiene Tarjeta 31 Vehiculo verified: " + verified,m05bConstantes.LOG_NIVEL_BAJO);
     return verified;
  }
  private boolean TieneSeguro () throws java.lang.Exception{
	  boolean verified=true;
	  try {
		  	sql = "select 1" + 			   	            
			" from " + m05bConstantes.TAB_HIST_SEGUROS  +
			" where " +  m05bConstantes.COL_13_MATRICULA + " = '" + sMatricula + 
			"' AND " +  m05bConstantes.COL_13_ESTADO +  " = 'A'"  ;
		    miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " Tiene Seguro 13 Vehiculo: sql: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
			pstmtComprobacion = conn.prepareStatement(sql);
			rsComprobacion = pstmtComprobacion.executeQuery();
		    if (!(rsComprobacion.next())) 
		     	 return false;
	  } catch (Exception ex) {
	  		throw new Exception(ex);		
	  } finally{
	   	    try {
				if (rsComprobacion != null)
					rsComprobacion.close();
				if (pstmtComprobacion != null)
					pstmtComprobacion.close();
				
			} catch (SQLException e2) {
				throw new Exception(e2);	                
	  		}
	  }
	  miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " Tiene Seguro 13 Vehiculo: verified: " + verified,m05bConstantes.LOG_NIVEL_BAJO);
	  return verified;
  }
  private void RegistrarCambioKmDpto(String nuevo)throws java.lang.Exception{
	String sId="";
	try{
		 if (nuevo.equals("1")){
		  sql= " SELECT "+ m05bConstantes.COL_44_ID +
		       " FROM "+ m05bConstantes.TAB_HIST_VEHICULOS +
		       " WHERE " + m05bConstantes.COL_44_MATRICULA +" ='"+sMatricula+"' AND " +  
		        m05bConstantes.COL_44_FFIN + " IS NULL ORDER BY 1 DESC ";
		  pstmtComprobacion = conn.prepareStatement(sql);
		  rsComprobacion = pstmtComprobacion.executeQuery();
		  if (rsComprobacion.next()) {
		  	  sId=rsComprobacion.getString(1);
		  	  
		      sql= " UPDATE "+ m05bConstantes.TAB_HIST_VEHICULOS + 
		  	       " SET " + m05bConstantes.COL_44_FFIN + "= " +
		  	       " TO_DATE(TO_CHAR(SYSDATE,'dd/mm/yyyy'),'dd/mm/yyyy')"+
		           " WHERE " + m05bConstantes.COL_44_ID +" ='"+sId+"' ";
			  pstmt = conn.prepareStatement(sql);
		      miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " Actualizar ffin cambio dpto: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
			  pstmt.executeUpdate();
		  }
			if (rsComprobacion != null)
			    rsComprobacion.close();
			if (pstmtComprobacion != null)
			    pstmtComprobacion.close();
		  // Ejecutar la inserción de los datos obtenidos
		  //sql= " SELECT "+ m05bConstantes.COL_99_DESCRIPCION +
		       //" FROM "+ m05bConstantes.TAB_DESCRIPCIONES +
		       //" WHERE " + m05bConstantes.COL_99_CODTABLA +" ='"+m05bConstantes.DESC_MARCAS+"' AND " +  
		       //m05bConstantes.COL_99_CODDESC + " = '" + sMarca + "'";
		  //pstmtComprobacion = conn.prepareStatement(sql);
		  //rsComprobacion = pstmtComprobacion.executeQuery();
		  //if (rsComprobacion.next()) {
		  	//  sMarcaDesc=rsComprobacion.getString(1);
		  //}
		  }
		  String Auxiliar="to_number(" + m05bConstantes.COL_44_ID + ")";
		  id = miID.getNextId(m05bConstantes.TAB_HIST_VEHICULOS, Auxiliar);
		  
		  sql = " insert into " + m05bConstantes.TAB_HIST_VEHICULOS  + " (" +
		        m05bConstantes.COL_44_ID + ", " + m05bConstantes.COL_44_MATRICULA + ", " + m05bConstantes.COL_44_MARCA +
			    ", " + m05bConstantes.COL_44_RANGO + ", " + m05bConstantes.COL_44_KMACTUALES +
				", " + m05bConstantes.COL_44_FKMACT + ", " + m05bConstantes.COL_44_FALTA +
				", " + m05bConstantes.COL_44_FBAJATEMP + ", " + m05bConstantes.COL_44_FCEDIDO +
				", " + m05bConstantes.COL_44_FMATRIC +
				", " + m05bConstantes.COL_44_SITUACION + ", " + m05bConstantes.COL_44_CODDPTO +
				", " + m05bConstantes.COL_44_DESDPTO + ", " + m05bConstantes.COL_44_MODELO +
				", " + m05bConstantes.COL_44_FGARANTIA + ", " + m05bConstantes.COL_44_KMREVIS +
				", " + m05bConstantes.COL_44_MESREVIS +  ", " + m05bConstantes.COL_44_COLOR +
				", " + m05bConstantes.COL_44_EXPDTE + ", " + m05bConstantes.COL_44_NSERIE +
				", " + m05bConstantes.COL_44_AUTORI_APAR +
				", " + m05bConstantes.COL_44_INF1 +  ", " + m05bConstantes.COL_44_INF2 +
				", " + m05bConstantes.COL_44_ROTULADO + ", " + m05bConstantes.COL_44_NOTA +
				", " + m05bConstantes.COL_44_PRECIO + 					   			       
				", " + m05bConstantes.COL_44_FCAMBIO + 
		        ", " + m05bConstantes.COL_44_APARCADO +      
		        ", " + m05bConstantes.COL_44_VCONTAB +      
		        ", " + m05bConstantes.COL_44_AMOANUAL +      
		        ", " + m05bConstantes.COL_44_AMOACUM +      
		        ", " + m05bConstantes.COL_44_DESTINO  +      
		        ", " + m05bConstantes.COL_44_FADQUIS +      
		        ", " + m05bConstantes.COL_44_REGADQUIS +      
		        ", " + m05bConstantes.COL_44_MATRIC_ANT +      
		        ", " + m05bConstantes.COL_44_POLIZA +      
		        ", " + m05bConstantes.COL_44_VIDAUTIL +      
		        ", " + m05bConstantes.COL_44_CR + 
		        ", " + m05bConstantes.COL_44_CV + 
		        ", " + m05bConstantes.COL_44_IMPBAJA + 
				" ) " +
				" values (" + id + ", '" + sMatricula + "', '" + sMarca + "', '" + sRango + "', " + sKmActBD + 
				", to_date('" + fKmAct + "','dd/mm/yyyy'), to_date('" + fAlta + "','dd/mm/yyyy'), to_date('" + fBajaTemp + "','dd/mm/yyyy')" +
				", to_date('" + fCedido +"','dd/mm/yyyy') " + 
				", to_date('" + fMatric +"','dd/mm/yyyy') " + 
				", '" + sSituacion + "', '" + sCodDpto + "', '" + sDescDpto + "', '" + sCodMod + 
				"', to_date('" + fGarantia + "','dd/mm/yyyy') , " + sKmRevis + ", " + sMesRevis +
				", '" + sColor + "', '" + sExpte + "', '" + sNSerie + "', '" + sAutoriApar + 
				"','" + sInf1 + "', '" + sInf2 + "', '" + sRotulado + "', '" + sNota + "'," + sPrecio +" ,TO_DATE(TO_CHAR(SYSDATE,'dd/mm/yyyy'),'dd/mm/yyyy'),'"+
			    aparcado + "','" + vcontab + "'," +  amoanual + "," +  amoacum + "," + destino +  ", to_date('" +
			    fadquis + "','dd/mm/yyyy'),'" + regadquis + "','" + matricant + "','" + poliza + "','" + vidautil +"','" + sCR + "','" + sCV + "',"+impbaja+ " )";
		        miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " Insert Cambio Departamento: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
			
			pstmtInsert = conn.prepareStatement(sql);
			pstmtInsert.executeUpdate();
			if (pstmtInsert != null)
			    pstmtInsert.close();
	} catch (Exception ex) {
		throw new Exception(ex);	
    } finally{
   	    try {
			if (rsComprobacion != null)
				rsComprobacion.close();
			if (pstmtComprobacion != null)
				pstmtComprobacion.close();
			if (pstmtInsert != null)
				pstmtInsert.close();
			
		} catch (SQLException e2) {
			throw new Exception(e2);	  			
  		}
    }
    miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Insert 44 Cambio Departamento", m05bConstantes.LOG_NIVEL_BAJO);   
  }
	
  private void ActualizarVehiculo(String formatoFecha) throws java.lang.Exception{
  	try {
	     sql = "update " + m05bConstantes.TAB_VEHICULOS +
		       " set " + m05bConstantes.COL_34_MARCA + " = '" + sMarca + "'" +
			   " ," + m05bConstantes.COL_34_RANGO + " = '" + sRango + "'" +
			   " ," + m05bConstantes.COL_34_KMACTUALES + " = " + sKmAct + 
			   " ," + m05bConstantes.COL_34_FKMACT + " = to_date('" + fKmAct + "','"+formatoFecha+"')" +
			   " ," + m05bConstantes.COL_34_FALTA + " = to_date('" + fAlta + "','"+formatoFecha+"')"  +
			   " ," + m05bConstantes.COL_34_FBAJATEMP + " = to_date('" + fBajaTemp + "','"+formatoFecha+"')"  +
			   " ," + m05bConstantes.COL_34_FCEDIDO + " = to_date('" + fCedido + "','"+formatoFecha+"')"  +
			   " ," + m05bConstantes.COL_34_FMATRIC + " = to_date('" + fMatric + "','"+formatoFecha+"')" +
			   " ," + m05bConstantes.COL_34_SITUACION + " = '" + sSituacion + "'" +
			   " ," + m05bConstantes.COL_34_CODDPTO + " = '" + sCodDpto + "'" +
			   " ," + m05bConstantes.COL_34_DESDPTO + " = '" + sDescDpto + "'" +
			   " ," + m05bConstantes.COL_34_MODELO + " = '" + sCodMod + "'" +
			   ", " + m05bConstantes.COL_34_FGARANTIA + " = to_date('" + fGarantia + "','"+formatoFecha+"')" +
			   ", " + m05bConstantes.COL_34_KMREVIS +  " = " + sKmRevis + 
			   ", " + m05bConstantes.COL_34_MESREVIS +  " = " + sMesRevis +
			   ", " + m05bConstantes.COL_34_COLOR +  " = '" + sColor + "'" +
			   ", " + m05bConstantes.COL_34_EXPDTE +  " = '" + sExpte + "'" +
			   ", " + m05bConstantes.COL_34_NSERIE +  " = '" + sNSerie + "'" +
			   ", " + m05bConstantes.COL_34_AUTORI_APAR +  " = '" + sAutoriApar + "'" +
			   //", " + m05bConstantes.COL_34_CV +  " = '" + sCV + "'" +
			   ", " + m05bConstantes.COL_34_INF1 +  " = '" + sInf1 + "'" +
			   ", " + m05bConstantes.COL_34_INF2 +  " = '" + sInf2 + "'" +
			   ", " + m05bConstantes.COL_34_ROTULADO +  " = ?" +
			   ", " + m05bConstantes.COL_34_NOTA +  " = ?" +
			   ", " + m05bConstantes.COL_34_PRECIO +  " = " + sPrecio + 
			   ", " + m05bConstantes.COL_34_CR +  " = '" + sCR +
			   "' where "+m05bConstantes.COL_34_MATRICULA +" = '" + sMatricula + "'" ;
	           miLog.addTraza(persona , "Grabar Vehiculos:  " , "sql: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
			   pstmt = conn.prepareStatement(sql);
			   pstmt.setString(1,sRotulado);
			   pstmt.setString(2,sNota);
	           miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " UPDATE-Vehículo: " + sql,m05bConstantes.LOG_NIVEL_BAJO);   	   
			   pstmt.executeUpdate();
	   } catch (Exception ex) {
	   		throw new Exception(ex); 
	   } finally{
	   	    try {
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				throw new Exception(e2); 
	  		}
	   }
       miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " UPDATE-Vehículo" ,m05bConstantes.LOG_NIVEL_BAJO);   
}

private void InsertarVehiculo() throws java.lang.Exception{
	try {
			sql = "insert into " + m05bConstantes.TAB_VEHICULOS +
			" ( " + m05bConstantes.COL_34_MATRICULA + ", " + m05bConstantes.COL_34_MARCA + ", " + m05bConstantes.COL_34_RANGO +
			", "+ m05bConstantes.COL_34_KMACTUALES + ", " + m05bConstantes.COL_34_FKMACT + ", " + m05bConstantes.COL_34_FALTA + 
			", " + m05bConstantes.COL_34_FBAJATEMP + 
			", " + m05bConstantes.COL_34_FCEDIDO +			
			", "+ m05bConstantes.COL_34_FMATRIC + ", " + m05bConstantes.COL_34_SITUACION + 
			", " + m05bConstantes.COL_34_CODDPTO + ", " + m05bConstantes.COL_34_DESDPTO + ", " + m05bConstantes.COL_34_MODELO +	
			", " + m05bConstantes.COL_34_FGARANTIA + ", " + m05bConstantes.COL_34_KMREVIS + ", " + m05bConstantes.COL_34_MESREVIS +  
			", " + m05bConstantes.COL_34_COLOR + ", " + m05bConstantes.COL_34_EXPDTE + ", " + m05bConstantes.COL_34_NSERIE +
			", " + m05bConstantes.COL_34_AUTORI_APAR + ",  " + m05bConstantes.COL_34_INF1 +  
			", " + m05bConstantes.COL_34_INF2 + ", " + m05bConstantes.COL_34_ROTULADO + ", " + m05bConstantes.COL_34_NOTA + ", " + m05bConstantes.COL_34_PRECIO +
			", " + m05bConstantes.COL_34_VIDAUTIL  + ", "  + m05bConstantes.COL_34_CR  + ", "  + m05bConstantes.COL_34_CV + ", " + m05bConstantes.COL_34_IMPBAJA + ") " +
			" values ('" + sMatricula +"','"+ sMarca+"','"+ sRango+"'," +sKmAct+",to_date('" +fKmAct+"','dd/mm/yyyy'),  to_date(TO_CHAR( sysdate,'ddmmyyyy'),'dd/mm/yyyy'),to_date('"+fBajaTemp+"','dd/mm/yyyy'),to_date('"+fCedido+"','dd/mm/yyyy'),to_date('"+fMatric+"','dd/mm/yyyy'),'"+sSituacion + 
			"','" + sCodDpto + "','" + sDescDpto +"','" + sCodMod +"',to_date('" + fGarantia + "','dd/mm/yyyy')," + sKmRevis+","+sMesRevis + 
			",'"+sColor+"','"+sExpte+"','"+sNSerie+"','"+sAutoriApar+"','"+sInf1+"','"+sInf2+"',?,?," + sPrecio+ ",'" + vidautil + "','"+sCR+ "','"+sCV+ "',"+impbaja+")";
		    miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , " InsertarVehiculos: " + sql,m05bConstantes.LOG_NIVEL_BAJO);   
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1,sRotulado);
			pstmt.setString(2,sNota);
			pstmt.executeUpdate();
	   } catch (Exception ex) {
	   		throw new Exception(ex);
	   } finally{
	   	    try {
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e2) {
				throw new Exception(e2);
	  		}
	   }
}

  private void EjecutarTransferencia() throws java.lang.Exception{
	 String sTabla="";
	 String verified="0";
	 try{
	 	 
		   //1.1Buscar primero si existe FechaHasta para éste vehículo en la tabla transferencias y
		   // coger la última
		   sql = "SELECT TO_CHAR(" +m05bConstantes.COL_40_FHASTA + ",'dd/mm/yyyy') FROM  " + m05bConstantes.TAB_TRANSFERENCIAS +
		         " WHERE " + m05bConstantes.COL_40_MATRICULA +"='" + sMatricula+"' order by " + m05bConstantes.COL_40_CODIGO +" desc";
		   miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Grabar Cambio rango Obtener fecha hasta: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
		   pstmt = conn.prepareStatement(sql);
		   rs = pstmt.executeQuery();
		   if (rs.next()){  
		      fIncicioRango = rs.getString(1);
		      if (fIncicioRango == null)
		         fIncicioRango= fMatric;
		   }
		   else 
		      fIncicioRango= fMatric;
		   //1.2Registrar la transferencia en la tabla Transferencias
		   String Auxiliar1="to_number(" + m05bConstantes.COL_40_CODIGO + ")";
		   id = miID.getNextId( m05bConstantes.TAB_TRANSFERENCIAS,  Auxiliar1  );
		   sql = "INSERT INTO " + m05bConstantes.TAB_TRANSFERENCIAS + "(" +
		         m05bConstantes.COL_40_CODIGO + "," +
		         m05bConstantes.COL_40_MATRICULA + "," +m05bConstantes.COL_40_FDESDE+ "," +
		         m05bConstantes.COL_40_FHASTA+ "," +m05bConstantes.COL_40_RANGO+ "," +
		         m05bConstantes.COL_40_IMPORTE+ ")" +
		         "VALUES ("+ id + ",'"+ sMatricula +"'," + "to_date('" + fIncicioRango + "','dd/mm/yyyy'),"+ 
		         "to_date(TO_CHAR( sysdate-1,'ddmmyyyy'),'dd/mm/yyyy'),'"+ RangoOld+ "'," + sImporteTransferencia+")";
		   miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Grabar Cambio rango  SQL insert transferencias: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
		   verified="2";
		   sTabla="40";
		   pstmt = conn.prepareStatement(sql);
		   rs = pstmt.executeQuery();
		   verified="0";
		   if (pstmt != null)
		       pstmt.close();
		   if (rs != null)
		       rs.close();
		   //1.3Calculo de la amortización acumulada.
		   sql = "SELECT SUM(" +m05bConstantes.COL_39_IMPORTE + ") FROM  " + m05bConstantes.TAB_AMORTIZACION +
		         " WHERE " + m05bConstantes.COL_39_MATRICULA +"='" + sMatricula+"'";
		   miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Grabar Cambio calculo amortizacion acumulada: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
		   pstmt = conn.prepareStatement(sql);
		   rs = pstmt.executeQuery();
		   if (rs.next()){  
		      sAmorAcumulada = rs.getString(1);
		      if (sAmorAcumulada == null)
		          sAmorAcumulada= "0";
		   }
		   else
		       sAmorAcumulada= "0";
		   miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Grabar Cambio rango amortizacion acumulada: " + sAmorAcumulada,m05bConstantes.LOG_NIVEL_BAJO);
		   
		  //1.4Cálculo del importe a amortizar
		  double iPrecio = Double.valueOf(sPrecio).doubleValue();
		  double iAmorAculumado = Double.valueOf(sAmorAcumulada).doubleValue();
		  double ImporteAAmortizar = iPrecio - iAmorAculumado;
		  double ImporteAAmortizarAux = ImporteAAmortizar;
		  String sImporteAAmortizar = ""+ImporteAAmortizar;	 
		  double iImporteBaja = Double.valueOf(sImporteTransferencia).doubleValue();
		  ImporteAAmortizar = ImporteAAmortizar - iImporteBaja;	
		  sImporteAAmortizar = "" + ImporteAAmortizar;	 
		  double ImporteAAmortizarAcum = ImporteAAmortizar + iAmorAculumado;
		  if (pstmt != null)
		       pstmt.close();
		  if (rs != null)
		       rs.close();
		 //1.5Damos de alta la amortizacion
		 if  ((ImporteAAmortizar < 0) && (ImporteAAmortizarAux>0)){
			 ImporteAAmortizar=ImporteAAmortizarAux;
			 sImporteAAmortizar=""+ImporteAAmortizar;	 
			 ImporteAAmortizarAcum=ImporteAAmortizar+iAmorAculumado;
		 }
		 String sImporteAAmortizarAcum=""+ImporteAAmortizarAcum;
		 miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "*** ImporteAAmortizar: " + ImporteAAmortizar,m05bConstantes.LOG_NIVEL_BAJO);
		 miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "sImporteAAmortizarAcum: " + sImporteAAmortizarAcum,m05bConstantes.LOG_NIVEL_BAJO);
		 if ((ImporteAAmortizar >0) ||  ((ImporteAAmortizar < 0) && (ImporteAAmortizarAux>0))){
			   Auxiliar1="to_number(" + m05bConstantes.COL_39_CODIGO + ")";
			   id = miID.getNextId( m05bConstantes.TAB_AMORTIZACION,  Auxiliar1  );
			   sql = "INSERT INTO " + m05bConstantes.TAB_AMORTIZACION + "(" +
		       m05bConstantes.COL_39_CODIGO + "," +                                       	   
		       m05bConstantes.COL_39_MATRICULA + "," +m05bConstantes.COL_39_RANGO+ "," +
		       m05bConstantes.COL_39_FECHA+ "," +m05bConstantes.COL_39_IMPORTE+ "," +
		       m05bConstantes.COL_39_AMORTIZA+ ")" +
		       " VALUES (" + id +",'" + sMatricula +"','" + RangoOld + "',to_date(TO_CHAR( sysdate,'ddmmyyyy'),'dd/mm/yyyy'),"+ 
		       sImporteAAmortizar+","+sImporteAAmortizarAcum+")";
		       miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " ,  "Ejecutar Tranferencia:  " + sql,m05bConstantes.LOG_NIVEL_BAJO);   
		       verified="3";
		       pstmt = conn.prepareStatement(sql);
		       rs = pstmt.executeQuery();
		       verified="0";
		 }
    } catch (Exception ex) {
		if(!verified.equals("0"))
			throw new Exception(verified);
		else
			throw new Exception(ex);
	} finally{
   	    try {
 	     if (rs != null)
   	    	rs.close();
		 if (pstmt != null)
		    pstmt.close();
		} catch (SQLException e2) {
			throw new Exception(e2);
	    }
	}
}

private void InsertarRevisionNuevo() throws java.lang.Exception{
	try {
	      // Hay que crear una revisión realizada para ese vehículo
	      String sFecPre = "";
		  if (!(sMesRevis.equals("0"))){
				Calendar hoy = Calendar.getInstance();
				int iejer = hoy.get(Calendar.YEAR);
				int imes = hoy.get(Calendar.MONTH);
				imes=imes+1;
				int imesRevis = Integer.valueOf(sMesRevis).intValue();
				int masanos = imesRevis / 12;
				int masmeses = imesRevis % 12 ;
				if  ((imes+masmeses) > 12)
				{
					masanos=masanos+1;
					imes=(imes+masmeses-12);
				}else{
					imes=imes + masmeses  ;	
				}
				
				iejer=iejer + masanos;
	     		Integer mes = new Integer(imes);
				Integer ejer = new Integer(iejer);
				Integer dia = new Integer(hoy.get(Calendar.DATE));
				sFecPre = "" + dia.toString() + "/" + mes.toString() + "/" + ejer.toString()+ "";
				sFecPre = miComun.fncBisiesto(sFecPre);
		  }
		  String sKmEnRevis="0";
		  if (!(sKmRevis.equals("0"))){
				int iKmAct = Integer.valueOf(sKmAct).intValue();
				int iKmRevis = Integer.valueOf(sKmRevis).intValue();
				int iKmEnRevis = iKmAct + iKmRevis;
				sKmEnRevis=""+iKmEnRevis;
		  }
	      String Auxiliar="to_number(" + m05bConstantes.COL_35_CODIGO + ")";
		  id = miID.getNextId( m05bConstantes.TAB_REVISIONES,  Auxiliar  );
		  sql="insert into " + m05bConstantes.TAB_REVISIONES +
		      " (" + m05bConstantes.COL_35_CODIGO + ","+ m05bConstantes.COL_35_DESC +
		      "," + m05bConstantes.COL_35_MATRICULA + ","+ m05bConstantes.COL_35_FECHA +
		      "," + m05bConstantes.COL_35_FECPRE + ","+ m05bConstantes.COL_35_KMRE +
		      "," + m05bConstantes.COL_35_KMPRE + "," + m05bConstantes.COL_35_REALIZA + "," +m05bConstantes.COL_35_IMPORTE+") " +
			  " values " +
			  "(" + id + ",'" + m05bConstantes.REV_BAJAVEH + "','" + sMatricula + 
			  "',"+ " TO_DATE(TO_CHAR(SYSDATE,'dd/mm/yyyy'),'dd/mm/yyyy')"+
			  ", to_date('" + sFecPre + "','dd/mm/yyyy')" + 
			  ","+ sKmAct+","+ sKmEnRevis + ", 'S',0 )";
	      pstmt = conn.prepareStatement(sql);
	      miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Ejecutar Tranferencia:  " + sql,m05bConstantes.LOG_NIVEL_BAJO);
		  pstmt.executeUpdate();
	} catch (Exception ex) {
		throw new Exception(ex);
	} finally{
   	    try {
			if (pstmt != null)
				pstmt.close();
		} catch (SQLException e2) {
			throw new Exception(e2);	  			
  		}  		
	}   
}

private void InsertarItvNuevo() throws java.lang.Exception{

	try {
	    // Hay que crear una revisión realizada para ese vehículo
		String Auxiliar="to_number(" + m05bConstantes.COL_27_CODIGO + ")";
		id = miID.getNextId( m05bConstantes.TAB_ITV,  Auxiliar  );
	    sql="insert into " + m05bConstantes.TAB_ITV +
		    " (" + m05bConstantes.COL_27_ANOMALIA + "," + m05bConstantes.COL_27_ESTADO +
	        "," + m05bConstantes.COL_27_MATRICULA + "," + m05bConstantes.COL_27_FINSPEC +
	        "," + m05bConstantes.COL_27_FREPINSP + "," + m05bConstantes.COL_27_FPRXINSPEC +
	        "," + m05bConstantes.COL_27_RESULTADO + "," + m05bConstantes.COL_27_CODIGO + ") " +
			" values " +
			"('','" + m05bConstantes.ITV_NUEVA_ESTADO +"','" + sMatricula + 
			"',"+ " TO_DATE(TO_CHAR(SYSDATE,'dd/mm/yyyy'),'dd/mm/yyyy'),"+
			" ''" + 
			",TO_DATE(TO_CHAR(TO_DATE('"+fMatric+"','dd/mm/yyyy'),'dd/mm')||'/'||TO_CHAR(TO_CHAR(TO_date('"+ fMatric+"','dd/mm/yyyy'),'yyyy') +4),'dd/mm/yyyy')"+
			",'"+ m05bConstantes.ITV_NUEVA_RESULTADO+"',"+ id + ")";
		pstmt = conn.prepareStatement(sql);
		miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "m05b - Grabar Vehiculos Insert Itv: SQL: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
	
		pstmt.executeUpdate(); 
	} catch (Exception ex) {
		throw new Exception(ex);	
	} finally{
   	    try {
			if (pstmt != null)
				pstmt.close();
		} catch (SQLException e2) {
			throw new Exception(e2);
  		}
	}
}



private void RegistrarCambioBajaTempCedido()throws java.lang.Exception{
	try {
		  String Auxiliar="to_number(" + m05bConstantes.COL_44_ID + ")";
		  id = miID.getNextId(m05bConstantes.TAB_HIST_VEHICULOS, Auxiliar);

		  sql = " insert into " + m05bConstantes.TAB_HIST_VEHICULOS  + " (" +
		        m05bConstantes.COL_44_ID + ", " + m05bConstantes.COL_44_MATRICULA + ", " + m05bConstantes.COL_44_MARCA +
			    ", " + m05bConstantes.COL_44_RANGO + ", " + m05bConstantes.COL_44_KMACTUALES +
				", " + m05bConstantes.COL_44_FKMACT + ", " + m05bConstantes.COL_44_FALTA +
				", " + m05bConstantes.COL_44_FBAJATEMP + ", " + m05bConstantes.COL_44_FCEDIDO +
				", " + m05bConstantes.COL_44_FMATRIC +
				", " + m05bConstantes.COL_44_SITUACION + ", " + m05bConstantes.COL_44_CODDPTO +
				", " + m05bConstantes.COL_44_DESDPTO + ", " + m05bConstantes.COL_44_MODELO +
				", " + m05bConstantes.COL_44_FGARANTIA + ", " + m05bConstantes.COL_44_KMREVIS +
				", " + m05bConstantes.COL_44_MESREVIS +  ", " + m05bConstantes.COL_44_COLOR +
				", " + m05bConstantes.COL_44_EXPDTE + ", " + m05bConstantes.COL_44_NSERIE +
				", " + m05bConstantes.COL_44_AUTORI_APAR +
				", " + m05bConstantes.COL_44_INF1 +  ", " + m05bConstantes.COL_44_INF2 +
				", " + m05bConstantes.COL_44_ROTULADO + ", " + m05bConstantes.COL_44_NOTA +
				", " + m05bConstantes.COL_44_PRECIO +
				", " + m05bConstantes.COL_44_FCAMBIO +
		        ", " + m05bConstantes.COL_44_APARCADO +
		        ", " + m05bConstantes.COL_44_VCONTAB +
		        ", " + m05bConstantes.COL_44_AMOANUAL +
		        ", " + m05bConstantes.COL_44_AMOACUM +
		        ", " + m05bConstantes.COL_44_DESTINO  +
		        ", " + m05bConstantes.COL_44_FADQUIS +
		        ", " + m05bConstantes.COL_44_REGADQUIS +
		        ", " + m05bConstantes.COL_44_MATRIC_ANT +
		        ", " + m05bConstantes.COL_44_POLIZA +
		        ", " + m05bConstantes.COL_44_VIDAUTIL +
		        ", " + m05bConstantes.COL_44_CR +
		        ", " + m05bConstantes.COL_44_CV +
		        ", " + m05bConstantes.COL_44_IMPBAJA +
				" ) " +
				" values (" + id + ", '" + sMatricula + "', '" + sMarca + "', '" + sRango + "', " + sKmActBD +
				", to_date('" + fKmAct + "','dd/mm/yyyy'), to_date('" + fAlta + "','dd/mm/yyyy'), to_date('" + fBajaTemp + "','dd/mm/yyyy')" +
				", to_date('" + fCedido +"','dd/mm/yyyy') " +
				", to_date('" + fMatric +"','dd/mm/yyyy') " +
				", '" + sSituacion + "', '" + sCodDpto + "', '" + sDescDpto + "', '" + sCodMod +
				"', to_date('" + fGarantia + "','dd/mm/yyyy') , " + sKmRevis + ", " + sMesRevis +
				", '" + sColor + "', '" + sExpte + "', '" + sNSerie + "', '" + sAutoriApar +
				"','" + sInf1 + "', '" + sInf2 + "', '" + sRotulado + "', '" + sNota + "'," + sPrecio +" ,TO_DATE(TO_CHAR(SYSDATE,'dd/mm/yyyy'),'dd/mm/yyyy'),'" +
			    aparcado + "','" + vcontab + "'," +  amoanual + "," +  amoacum + "," + destino +  ", to_date('" +
			    fadquis + "','dd/mm/yyyy'),'" + regadquis + "','" + matricant + "','" + poliza + "','" + vidautil +"','" + sCR + "','" + sCV + "',"+impbaja+ " )";

		  	miLog.addTraza(persona , "m05b - Grabar Vehiculos:  ", " INSERT RegistrarCambioBajaTempCedido: " + sql, m05bConstantes.LOG_NIVEL_BAJO);

			pstmtInsert = conn.prepareStatement(sql);
			pstmtInsert.executeUpdate();
			if (pstmtInsert != null)
			    pstmtInsert.close();
	} catch (Exception ex) {
		throw new Exception(ex);
    } finally {
   	    try {
   	    	if (pstmtInsert != null)
   	    		pstmtInsert.close();
		} catch (SQLException e2) {
			throw new Exception(e2);
  		}
    }
}

private void EjecutarAmortizacionTotal() throws java.lang.Exception {
	try {
		//1.2 Obtenemos el antiguo rango del vehículo
		sql = "SELECT " + m05bConstantes.COL_34_RANGO + " FROM  " + m05bConstantes.TAB_VEHICULOS +
			  " WHERE " + m05bConstantes.COL_34_MATRICULA + "='" + sMatricula + "'";
		
		//miLog.addTraza(persona , "m05b - GrabarVehiculosServlet - EjecutarAmortizacionTotal: " , "sql1: " + sql, m05bConstantes.LOG_NIVEL_BAJO);
	   
		pstmtAmortizacionTotal = conn.prepareStatement(sql);
		rsAmortizacionTotal = pstmtAmortizacionTotal.executeQuery();
		if (rsAmortizacionTotal.next()) {
			RangoOld = rsAmortizacionTotal.getString(1);
			RangoOld = RangoOld == null ? "" : RangoOld;
		}

		//1.3 Cálculo de la amortización acumulada.
		sql = "SELECT SUM(" + m05bConstantes.COL_39_IMPORTE + ") FROM  " + m05bConstantes.TAB_AMORTIZACION +
			  " WHERE " + m05bConstantes.COL_39_MATRICULA + "='" + sMatricula + "'";
		
		//miLog.addTraza(persona , "m05b - GrabarVehiculosServlet - EjecutarAmortizacionTotal: " , "sql2: " + sql, m05bConstantes.LOG_NIVEL_BAJO);

		pstmtAmortizacionTotal = conn.prepareStatement(sql);
		rsAmortizacionTotal = pstmtAmortizacionTotal.executeQuery();
		if (rsAmortizacionTotal.next()) {
			sAmorAcumulada = rsAmortizacionTotal.getString(1);
			if (sAmorAcumulada == null)
				sAmorAcumulada= "0";
		}
		else {
			sAmorAcumulada= "0";
		}
		
		//Lo vamos a amortizar totalmente:
		sImporteTransferencia = "0";

		//1.4 Cálculo del importe a amortizar
		double iPrecio = Double.valueOf(sPrecio).doubleValue();
		double iAmorAculumado = Double.valueOf(sAmorAcumulada).doubleValue();
		double ImporteAAmortizar = iPrecio - iAmorAculumado;
		String sImporteAAmortizar = "" + ImporteAAmortizar;
		double iImporteBaja = Double.valueOf(sImporteTransferencia).doubleValue();
		ImporteAAmortizar = ImporteAAmortizar - iImporteBaja;
		sImporteAAmortizar = "" + ImporteAAmortizar;
		double ImporteAAmortizarAcum = ImporteAAmortizar + iAmorAculumado;
		if (pstmtAmortizacionTotal != null)
			pstmtAmortizacionTotal.close();
		if (rsAmortizacionTotal != null)
			rsAmortizacionTotal.close();

		//1.5 Damos de alta la amortización
		String sImporteAAmortizarAcum = "" + ImporteAAmortizarAcum;

		if (ImporteAAmortizar >0) {
			String strAux = "TO_NUMBER(" + m05bConstantes.COL_39_CODIGO + ")";
			id = miID.getNextId(m05bConstantes.TAB_AMORTIZACION, strAux);
			sql = "INSERT INTO " + m05bConstantes.TAB_AMORTIZACION + "(" +
					m05bConstantes.COL_39_CODIGO + "," +
					m05bConstantes.COL_39_MATRICULA + "," + m05bConstantes.COL_39_RANGO + "," +
					m05bConstantes.COL_39_FECHA + "," + m05bConstantes.COL_39_IMPORTE + "," +
					m05bConstantes.COL_39_AMORTIZA + ")" +
					" VALUES (" + id + ",'" + sMatricula + "','" + RangoOld + "',TO_DATE(TO_CHAR(sysdate,'ddmmyyyy'),'dd/mm/yyyy')," +
					sImporteAAmortizar + "," + sImporteAAmortizarAcum + ")";

			   //miLog.addTraza(persona , "m05b - GrabarVehiculosServlet - EjecutarAmortizacionTotal: " ,  "EjecutarAmortizacionTotal:  " + sql, m05bConstantes.LOG_NIVEL_BAJO);

	           pstmtAmortizacionTotal = conn.prepareStatement(sql);
	           rsAmortizacionTotal = pstmtAmortizacionTotal.executeQuery();
	           if (pstmtAmortizacionTotal != null)
	        	   pstmtAmortizacionTotal.close();
	           if (rsAmortizacionTotal != null)
	        	   rsAmortizacionTotal.close();
		}
	} catch (Exception ex) {
		throw new Exception(ex);
	} finally {
		try {
			if (rsAmortizacionTotal != null)
				rsAmortizacionTotal.close();
			if (pstmtAmortizacionTotal != null)
				pstmtAmortizacionTotal.close();
		} catch (SQLException e2) {
			throw new Exception(e2);
		}
	}
}



public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {

  String forward = "";      
  try{
  	miLog.addTraza(persona , "m05b - Grabar Vehiculos","Recoger Parametros Inicio",m05bConstantes.LOG_NIVEL_BAJO);
  	  
    recogerParametros(request,response);
    miLog.addTraza(persona , "m05b - Grabar Vehiculos","Recoger Parametros fin",m05bConstantes.LOG_NIVEL_BAJO);
    
	m05bConexion miConex = new m05bConexion();
	conn = miConex.getConnection();
	conn.setAutoCommit(false);  
	//Al final si todo ha ido bien se hace commit
	HttpSession session = request.getSession(true);
	
   	
   	Locale idiomaLocal = (Locale)session.getAttribute("Local");
		String idiomaSes = ((idiomaLocal.getLanguage()==null)?"es":idiomaLocal.getLanguage());	
	
     String campoTexto="";
     String formatoFecha="dd/MM/yyyy";
     if(!idiomaSes.equals("es")){
			campoTexto="E";
			formatoFecha="yyyy/MM/dd";
     }
	//GENERAR AMORTIZACION POR CAMBIO DE RANGO.
    //Obtenemos el antiguo rango del vehículo
    //Comprobar si el vehiculo es nuevo
		  
		  if (ExisteVehiculo()){  // IF - 1 VEHICULO MODIFICADO
		  	 if (!ExisteNSerie())
		  	 	forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje=" + m05bConstantes.MSG_EXISTEBASTIDOR;
			 else { // ELSE - 2 
				if ( (sSituacionBD.equals("P")) && (sSituacion.equals("A"))) { // IF - 3
			   		  if (!TieneTarjeta()) 
			   		  		forward = "m05bVehiculosJsp.jsp?Matricula="+sMatricula +  "&Mensaje=" + m05bConstantes.MSG_NOEXISTETARJETA;
	                  else {
			   		        if (!TieneSeguro()) 
			   		        	forward ="m05bVehiculosJsp.jsp?Matricula="+sMatricula +  "&Mensaje=" + m05bConstantes.MSG_NOEXISTESEGURO;
		    		        else {
		    		             if ( (!(sKmActBD.equals(sKmAct))) || (!(sCodDptoBD.equals(sCodDpto))) )
		    		             	RegistrarCambioKmDpto("1");
			       	             ActualizarVehiculo(formatoFecha);
		       		             if ((!(RangoOld.equals(""))) && (!(sRango.equals(RangoOld)))){
		       		  	            try{
		       		  	            	EjecutarTransferencia();
		       		  	            }catch(Exception ex){
		       		  	            	if(ex.getMessage()!=null &&
		       		  	            			ex.getMessage().equals("2"))
												forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje="+m05bConstantes.MSG_EXISTETRANS;
										else if(ex.getMessage()!=null &&
		       		  	            			ex.getMessage().equals("3"))
												forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje="+m05bConstantes.MSG_EXISTEAMOR;	
		       		  	            }	
	                             }                             	    
	                             forward = "m05bVehiculosJsp.jsp?Matricula="+sMatricula + "&Mensaje="+m05bConstantes.MSG_GRABACION_OK;
		       		        } 
		    		   }             
                }// FIN IF - 3
				else{ // ELSE - 4
					  if  ( (!(sSituacionBD.equals(sSituacion))) && ((sSituacion.equals("T")) || (sSituacion.equals("C")))) { // IF - 3{
						  
						  miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: sSituacionBD: " + sSituacionBD, m05bConstantes.LOG_NIVEL_BAJO);
						  
						  RegistrarCambioBajaTempCedido();
						  
						  miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: Ahora procedemos a efectuar la AMORTIZACIÓN TOTAL...", m05bConstantes.LOG_NIVEL_BAJO);
						  
						  this.EjecutarAmortizacionTotal();
						
						  miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: Ahora procedemos a efectuar la AMORTIZACIÓN TOTAL...ejecutada!!!", m05bConstantes.LOG_NIVEL_BAJO);
						
					  }
	                  if ( (!(sKmActBD.equals(sKmAct))) || (!(sCodDptoBD.equals(sCodDpto))) ) {
		    		     RegistrarCambioKmDpto("1");
		    		  }
	                  
			       	  ActualizarVehiculo(formatoFecha);
			       	  
		       		  if ((!(RangoOld.equals(""))) && (!(sRango.equals(RangoOld)))) {
		       		  	try {
		  	            	EjecutarTransferencia();
		  	            } catch(Exception ex) {
		  	            	if(ex.getMessage()!=null &&
  	            			   ex.getMessage().equals("2"))
		  	            		forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje="+m05bConstantes.MSG_EXISTETRANS;
		  	            	else if(ex.getMessage()!=null &&
		  	            			ex.getMessage().equals("3"))
								forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje="+m05bConstantes.MSG_EXISTEAMOR;	
		  	            }	
	                  }
		       		  
	                  forward = "m05bVehiculosJsp.jsp?Matricula="+sMatricula+ "&Mensaje="+m05bConstantes.MSG_GRABACION_OK;
	                  
	           }// FIN ELSE - 4
			 } // FIN ELSE - 2 
	      }// FIN IF - 1
		  else{ // ELSE - 5 VEHICULO NUEVO
                if (!ExisteNSerieNuevo())
                	forward = "m05bVehiculosJsp.jsp?Matricula=" + sMatricula + "&Mensaje=" + m05bConstantes.MSG_EXISTEBASTIDOR2;
				else {// ELSE - 6 
				    InsertarVehiculo();
			     	RegistrarCambioKmDpto("0"); 
			     	InsertarRevisionNuevo();
		            InsertarItvNuevo();
	                forward = "m05bVehiculosJsp.jsp?Matricula="+sMatricula+ "&Mensaje="+m05bConstantes.MSG_GRABACION_OK;
           	    }// FIN ELSE - 6
           	 }// FIN ELSE - 5
	   }catch(java.io.IOException ioex) {
	   		miLog.addTraza(persona , "m05b - Grabar Vehiculos","Exception1-Sin accion"+ioex,m05bConstantes.LOG_NIVEL_BAJO);
	   		try {
	   			conn.rollback();  
			} catch (SQLException e) {
				miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: EXCEPTION-2:" + e,m05bConstantes.LOG_NIVEL_BAJO);
			}
			forward ="m05bError.jsp";
	   }catch (Exception ex) {
			try {
				conn.rollback();  
	  			// Ha habido problemas, se deshacen todos los cambios
	  		} catch (SQLException e2){
                miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: EXCEPTION-2:" + e2,m05bConstantes.LOG_NIVEL_BAJO);
	  		}
	  		forward ="m05bError.jsp";
	   }catch(Throwable thex)	{
			try {
				conn.rollback();  
	  			//Ha habido problemas, se deshacen todos los cambios
	  		} catch (SQLException e3){
                miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: EXCEPTION-3:" + e3,m05bConstantes.LOG_NIVEL_BAJO);
	  		}
	  		forward ="m05bError.jsp";
	  }finally {
  			try {
	  			conn.commit();
	  			// Ha ido todo OK
				if (conn != null)
					conn.close();
	  		} catch (SQLException e) {
	  			forward ="m05bError.jsp";
	  			miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: EXCEPTION-2:" + e,m05bConstantes.LOG_NIVEL_BAJO);
		  	}
	  		try {
	  			//Si todo ha ido bien se actualizan los cambios en la BD
	  			response.sendRedirect(forward);
	  		} catch (IOException e1) {
	  			miLog.addTraza(persona , "m05b - Grabar Vehiculos:  " , "Actualizar/Insertar Vehiculo: EXCEPTION-redirect!!!:" + e1,m05bConstantes.LOG_NIVEL_BAJO);
	  		}
	  }
  }
}