package vehiculosServlet;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import m05bClasses.m05bComun;
import m05bClasses.m05bConexion;
import m05bClasses.m05bConstantes;
import m05bClasses.m05bConstantesInformes;
import m05bClasses.m05bDescrip;
import m05bClasses.m05bFileLog;

import org.apache.fop.apps.Driver;
import org.apache.fop.apps.FOPException;
import org.xml.sax.InputSource;


public class m05bImpVehiculosConsumosServlet extends javax.servlet.http.HttpServlet
{
		java.sql.Connection conn=null;
		String sLinea;
        String sFoFileDir = "/datos/m05b/tmp/";
        File foFileDir ;
        File tmpFoFile ;
		FileOutputStream tmpFoFileStream ;
	    m05bComun miComun = new m05bComun();
		m05bFileLog miLog = new m05bFileLog();
		m05bDescrip miDescrip = new m05bDescrip();
	    
	
	    String sSituacion="";
	    String sGRango="";
	    String sRango="";
	    String sMatricula="";
	    String sMatriculaAnt="";
	    
	    String sFecDesde="";
	    String sFecHasta="";   
	    String sDescripcion=""; 	 
	    String sSituacionDesc="";
	    String sModeloDesc="";
	    String sMarca="",sModelo="",sDescripcionMM="";
  	    
	    public static final String FO_REQUEST_PARAM = "fo";
//    Logger log = null;

   public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
   {
 	   try{
		      doGet(request, response);
		    }catch (Exception e){
		      miLog.addTraza(e);
		    }
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
   {
      performTask(request, response);
   }
//        if(log == null)
//        {
//            Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
//            log = hierarchy.getLoggerFor("fop");
//            log.setPriority(Priority.WARN);
//        }

private void fncAbrirFicheroTemporal() throws java.io.IOException
{
         foFileDir = new File(sFoFileDir);
         tmpFoFile = File.createTempFile("m05b", "Fo", foFileDir);
		 tmpFoFileStream = new FileOutputStream(tmpFoFile);

}	
private void fncImprimirFinPagina()throws java.io.IOException
{
     	    sLinea = "	    </fo:table-body>\n";
          	tmpFoFileStream.write(sLinea.getBytes());			            								            		
            sLinea= "       </fo:table>\n";
           	tmpFoFileStream.write(sLinea.getBytes());   
            sLinea = "      </fo:flow>\n";
            tmpFoFileStream.write(sLinea.getBytes());
            sLinea = "   </fo:page-sequence>\n";
            tmpFoFileStream.write(sLinea.getBytes());
	  
}	

private void fncImprimirComienzoPagina()throws java.io.IOException, javax.naming.NamingException
{
	        sLinea = "<fo:page-sequence master-reference=\"general\">\n";
	        tmpFoFileStream.write(sLinea.getBytes());
            //REGION BEFORE
        	sLinea = "		<fo:static-content flow-name=\"xsl-region-before\" >\n";
        	tmpFoFileStream.write(sLinea.getBytes());
		           // --------------    CABECERA DEL LISTADO    --------------
                        //Cabecera 1
		            sLinea = "      <fo:block text-align=\"end\">\n";
		            tmpFoFileStream.write(sLinea.getBytes());
		            sLinea = "      </fo:block>\n";
		            tmpFoFileStream.write(sLinea.getBytes());
                    sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"10pt\" >\n " + "CONSUMOS" +"</fo:block>\n";
			        tmpFoFileStream.write(sLinea.getBytes());
                    sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"5pt\" font-size=\"9pt\">\n " + "Fecha Desde: "+ sFecDesde+ " Fecha Hasta: "+sFecHasta+"</fo:block>\n";
			        tmpFoFileStream.write(sLinea.getBytes());
			        if (!(sSituacion.equals(""))){
                       sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"5pt\" font-size=\"9pt\">\n " + "Situacion: " +sSituacionDesc+"</fo:block>\n";
                       tmpFoFileStream.write(sLinea.getBytes());
                    }
		            if (((sMarca==null) || (sMarca.equals(""))) && ((sModelo==null) || (sModelo.equals("")))){
					   sLinea = "      <fo:block  text-align=\"left\" font-size=\"9pt\">\n " + "Rango: " +sRango + " "+sDescripcion +"</fo:block>";
					  tmpFoFileStream.write(sLinea.getBytes());
		            }
			        //if (!(sDescripcionMM.equals(""))){
	                       //sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"5pt\" font-size=\"9pt\">\n " + "Marca/Modelo: " +sDescripcionMM +"</fo:block>\n";
	                       //tmpFoFileStream.write(sLinea.getBytes());
	                    //}
			        if (!(sModelo.equals(""))){
	                       sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"5pt\" font-size=\"9pt\">\n " + "Marca/Modelo: " +sModeloDesc+"</fo:block>\n";
	                       tmpFoFileStream.write(sLinea.getBytes());
	                    }					
                    
        	sLinea = " 		</fo:static-content>\n"; 
        	tmpFoFileStream.write(sLinea.getBytes());
            //PIE DE PAGINA Pie
        	sLinea = "		<fo:static-content flow-name=\"xsl-region-after\">\n";
        	tmpFoFileStream.write(sLinea.getBytes());
                        //PIE DE PAGINA Pie
					sLinea = "      <fo:block >\n";
		            tmpFoFileStream.write(sLinea.getBytes());
		            	sLinea= "       <fo:table  table-layout=\"fixed\">\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"80mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"80mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-body font-family=\"Helvetica\" font-size=\"6pt\">\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    <fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    <fo:table-cell >\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block text-align=\"left\">" + miComun.getDetFechaActual(m05bConstantesInformes.IDIOMA_C)+ "</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    <fo:table-cell >\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			    sLinea = "      <fo:block text-align=\"right\">" ; 
                       		            tmpFoFileStream.write(sLinea.getBytes());
		                                sLinea = "Página <fo:page-number/> \n";
                        	            tmpFoFileStream.write(sLinea.getBytes());
							            sLinea=  "</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    </fo:table-body>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());			            								            		
			            sLinea= "       </fo:table>\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            sLinea = "      </fo:block>\n";
		            tmpFoFileStream.write(sLinea.getBytes());
        	     sLinea = " 		</fo:static-content>\n"; 
                 tmpFoFileStream.write(sLinea.getBytes());
                 //BODY
		         sLinea = "	<fo:flow flow-name=\"xsl-region-body\">\n";
		         tmpFoFileStream.write(sLinea.getBytes());
		         Context ctx =  new InitialContext(System.getProperties());
      	         // --------------    DETALLE DEL LISTADO    --------------
		           		sLinea= "        <fo:table  table-layout=\"fixed\" space-after.optimum=\"12pt\">\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"20mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-body font-family=\"Helvetica\" font-size=\"8pt\">\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    <fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            			// Matricula
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\" text-align=\"center\">\n Matricula"+"</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Marca
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Fecha</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
		            			   // Modelo
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Kms.</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // F.Matriculacion
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Fecha</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Km
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Kms.</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // situacion
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Kms.Recorridos</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Centro
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Consumo</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
     			                   // Descripcion
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n Media Litros*100/Km.</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
   		                        sLinea = "	    <fo:table-row >\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            	
}

   public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException
   {
	   java.sql.Connection conn=null;
	   PreparedStatement pstmt = null;
	   ResultSet rs = null;
	   PreparedStatement pstmt2 = null,pstmt3 = null;
	   ResultSet rs2 = null,rs3 = null;
	   m05bComun miComun = new m05bComun();

	    sSituacion="";
	    sGRango="";
	    sRango="";
	    sMatricula="";
	    sMatriculaAnt="";
	    
	    sFecDesde="";
	    sFecHasta="";   
	    sDescripcion=""; 	 
	    sSituacionDesc="";
	    sModeloDesc="";
	    sMarca="";sModelo="";sDescripcionMM="";	   
	   
      try
      {  HttpSession session = request.getSession(true);
			m05bConexion miConex = new m05bConexion();
			conn = miConex.getConnection();
      
      	 // Obtención de información de BD
      	 	 	// Vehículo
      	 //Recogemos la situacion
         sSituacion=request.getParameter("Situacion");
            	if ((sSituacion==null)||(sSituacion.equals(""))){
					sSituacion="";}
			    else {
                    sSituacion=miComun.ListaCaracteres(sSituacion);} 
      	 //Recogemos el Grupo Rango
         sGRango=request.getParameter("GRango");
            	if ((sGRango==null)||(sGRango.equals(""))||(sGRango.equals("***"))){
					sGRango="";}
      	 //Recogemos el Rango
         sRango=request.getParameter("Rango");
            	if ((sRango==null)||(sRango.equals(""))){
					sRango="";}
         //Recogemos la Matricula
         sMarca=request.getParameter("CodMarca");
               if ((sMarca==null)||(sMarca.equals("")) ||(sMarca.equals("***"))){
                    sMarca="";}
         //Recogemos el Modelo
         sModelo=request.getParameter("CodModelo");
     	if ((sModelo==null)||(sModelo.equals(""))){
     		sModelo="";}
	    else {
	    	sModelo=miComun.ListaCaracteres(sModelo);}          
      	 //Recogemos la Matricula
         sMatricula=request.getParameter("Matricula");
            	if (sMatricula==null){
					sMatricula="";}
      	 //Recogemos la fecha Desde 
         sFecDesde=request.getParameter("FecDesde");
            	if (sFecDesde==null){
					sFecDesde="";}
	     //Recogemos la fecha Hasta:
         sFecHasta=request.getParameter("FecHasta");
            	if (sFecHasta==null){
					sFecHasta="";}

	 
	String sUsuario = (String) session.getAttribute("persona");
					
         String sFIniKm = "";
         String sFIniAnteriorKm = "";
	     String sFFinKm= "";
	     String sFFinKm2= "";
	     
	     
	     double dNumero=0.0;
	     String sIniKm = "";
	     String sFinKm = "";
	     String sFinKm2 = "";
	     String sLitros = "";
	     String sTotLitros="";
	     String sDifKm= ""; 
	     String sTotDifKm="";
	     String sConsumo="";
	     String sTotConsumo="";
	     String sRangoAnt=""; 	 
	     String sSentencia3="";
	     String sSituacionD="";
	     String sModeloD="";
	     String sSentenciaTotal="";
	     String sOrden="";
	     
if (!(sSituacion.equals(""))){
     String sSentenciaSituacion=" SELECT " +
		    m05bConstantes.COL_99_DESCRIPCION+
            " FROM "+
		       m05bConstantes.TAB_DESCRIPCIONES+"  S "+
            " WHERE " +
               m05bConstantes.COL_99_CODDESC+ " in ("+sSituacion+") AND " + 
               m05bConstantes.COL_99_CODTABLA+ "='"+ m05bConstantes.DESC_SITUACIONES+"'";	
     pstmt = conn.prepareStatement(sSentenciaSituacion);
     rs = pstmt.executeQuery();
     while (rs.next()){
	     sSituacionD=rs.getString(1);
         if (!(sSituacionDesc.equals(""))){
    	    sSituacionDesc =sSituacionDesc+","+sSituacionD;}
         else{
    	    sSituacionDesc =sSituacionD;}
     }
     if (rs != null)
	 rs.close();
     if (pstmt != null)
	 pstmt.close();
}	 
if (!(sModelo.equals(""))){
    String sSentenciaModelo=" SELECT " +
		    m05bConstantes.COL_17_DESCRIP+
           " FROM "+
		       m05bConstantes.TAB_MODELOS+"  S "+
           " WHERE " +
              m05bConstantes.COL_17_CODMOD+ " in ("+sModelo+")";	
    pstmt = conn.prepareStatement(sSentenciaModelo);
    rs = pstmt.executeQuery();
    while (rs.next()){
    	sModeloD=rs.getString(1);
        if (!(sModeloDesc.equals(""))){
   	    sModeloDesc =sModeloDesc+","+sModeloD;}
        else{
        sModeloDesc =sModeloD;}
    }
    if (rs != null)
	 rs.close();
    if (pstmt != null)
	 pstmt.close();
}	 

String sSentencia=" SELECT " +
	m05bConstantes.COL_34_MATRICULA+","+
	m05bConstantes.COL_90_RANGO+", R."+
    m05bConstantes.COL_99_DESCRIPCION+",TO_CHAR("+ 
	m05bConstantes.COL_90_FINIKM+",'dd/mm/yyyy'),"+ 
	m05bConstantes.COL_90_INIKM+",TO_CHAR("+ 
	m05bConstantes.COL_90_FFINKM+",'dd/mm/yyyy'),"+ 
	m05bConstantes.COL_90_FINKM+","+ 
	m05bConstantes.COL_90_SUMALITROS+","+
	m05bConstantes.COL_34_SITUACION+","+
	m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM+","+ 
    " ROUND(((" +m05bConstantes.COL_90_SUMALITROS  +"*100) /("+m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM+")),2),TO_CHAR("+ 
	m05bConstantes.COL_90_FINIKM+",'yyyymmdd') "+
    " FROM "+
    m05bConstantes.TAB_DESCRIPCIONES+"  R,"+
    m05bConstantes.TAB_VEHICULOS+","+
    m05bConstantes.TAB_TMPVEHICULOS+
    " WHERE " +
    m05bConstantes.COL_34_MATRICULA+"="+m05bConstantes.COL_90_MATRICULA+ " AND "+ 
    m05bConstantes.COL_99_CODTABLA+"='"+m05bConstantes.DESC_RANGOS + "' AND "+ 		
    m05bConstantes.COL_90_RANGO+"= R."+m05bConstantes.COL_99_CODDESC + " AND (("+
    m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM +")<>0) AND " + 
    m05bConstantes.COL_90_USUARIO+"='"+sUsuario + "'";
if  (((sMarca==null) || (sMarca.equals(""))) && ((sModelo==null) || (sModelo.equals("")))){
sSentenciaTotal=" SELECT " + 
m05bConstantes.COL_90_RANGO+","+
" SUM("+
m05bConstantes.COL_90_SUMALITROS+"),"+
" SUM("+
m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM+") ,"+
" ROUND(((SUM("+
m05bConstantes.COL_90_SUMALITROS+"*100) ) /(SUM("+
m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM +"))),2)"+
" FROM "+
m05bConstantes.TAB_VEHICULOS+","+
m05bConstantes.TAB_TMPVEHICULOS+
" WHERE " +
m05bConstantes.COL_34_MATRICULA+"="+m05bConstantes.COL_90_MATRICULA+ " AND (("+ 
m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM +")<>0) AND " +
m05bConstantes.COL_90_USUARIO+"='"+sUsuario + "'";	
}else{
	sSentenciaTotal=" SELECT " +
	" SUM("+
	m05bConstantes.COL_90_SUMALITROS+"),"+
	" SUM("+
	m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM+") ,"+
	" ROUND(((SUM("+
	m05bConstantes.COL_90_SUMALITROS+"*100) ) /(SUM("+
	m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM +"))),2)"+
	" FROM "+
	m05bConstantes.TAB_VEHICULOS+","+
	m05bConstantes.TAB_TMPVEHICULOS+
	" WHERE " +
	m05bConstantes.COL_34_MATRICULA+"="+m05bConstantes.COL_90_MATRICULA+ " AND (("+ 
	m05bConstantes.COL_90_FINKM+"-"+m05bConstantes.COL_90_INIKM +")<>0) AND " +
	m05bConstantes.COL_90_USUARIO+"='"+sUsuario + "'";		
}

if (!(sSituacion.equals(""))){
        //sSituacion=miComun.ListaCaracteres(sSituacion);
    	sSentencia= sSentencia + " AND " + m05bConstantes.COL_34_SITUACION+ " in ("+sSituacion+")";
    	sSentenciaTotal=sSentenciaTotal+ " AND " + m05bConstantes.COL_34_SITUACION+ " in ("+sSituacion+")";}
if (!(sRango.equals(""))){
    	sSentencia= sSentencia + " AND " + m05bConstantes.COL_90_RANGO+ " = '"+sRango+"'" ;
    	sSentenciaTotal= sSentenciaTotal + " AND " + m05bConstantes.COL_90_RANGO+ " = '"+sRango+"'" ;}
    	
else if (!(sGRango.equals(""))){
    	String sSentenciaGrupo=" SELECT "+ m05bConstantes.COL_36_RANGOS+
    	                " FROM " + m05bConstantes.TAB_GRUPOS + 
    	                " WHERE " + m05bConstantes.COL_36_CODIGO + " = '" +sGRango+"'";
    	pstmt = conn.prepareStatement(sSentenciaGrupo);
		rs = pstmt.executeQuery();
        if (rs.next()){
		    sGRango=rs.getString(1)==null ? "":rs.getString(1);	
            sGRango=miComun.ListaCaracteres(sGRango);
    	sSentencia= sSentencia + " AND " + m05bConstantes.COL_90_RANGO+ " in ( "+sGRango + ")";
    	sSentenciaTotal= sSentenciaTotal + " AND " + m05bConstantes.COL_90_RANGO+ " in ( "+sGRango + ")";
    	
            }
}
if (!(sModelo.equals(""))){
    //sSituacion=miComun.ListaCaracteres(sSituacion);
	sSentencia= sSentencia + " AND " + m05bConstantes.COL_34_MODELO+ " in ("+sModelo+")";
	sSentenciaTotal=sSentenciaTotal+ " AND " + m05bConstantes.COL_34_MODELO+ " in ("+sModelo+")";}

	
if (!(sMarca.equals(""))){
   	//sMarca=miComun.ListaCaracteres(sMarca);
	sSentencia= sSentencia + " AND " + m05bConstantes.COL_34_MARCA+ " =  '"+sMarca +"'" ;
	sSentenciaTotal= sSentenciaTotal + " AND " + m05bConstantes.COL_34_MARCA+ "= '"+sMarca +"'" ;
    //miLog.addTraza(sUsuario , "sqlKilometrosServletVehiculos" , "sSentencia: " + sSentencia, m05bConstantes.LOG_NIVEL_BAJO);
	sModeloDesc= miDescrip.getDescripcion(m05bConstantes.DESC_MARCAS, sMarca)+ " "+sModeloDesc;	
        }
if (!(sMatricula.equals(""))){
    	sSentencia= sSentencia + " AND " + m05bConstantes.COL_34_MATRICULA+ " = '"+sMatricula+"'" ;
    	sSentenciaTotal= sSentenciaTotal + " AND " + m05bConstantes.COL_34_MATRICULA+ " = '"+sMatricula+"'" ;}
    	
	    //miLog.addTraza(sUsuario , "ImpVehiculosConsumosServlet" , "sSentenciaTotal: " + sSentenciaTotal, m05bConstantes.LOG_NIVEL_BAJO);
if  (((sMarca==null) || (sMarca.equals(""))) && ((sModelo==null) || (sModelo.equals("")))){
    sOrden= " ORDER BY 2 asc,1 asc";
}else{
	sOrden= " ORDER BY 1 asc";
}
sSentencia = sSentencia+sOrden;
	    //miLog.addTraza(sUsuario , "ImpVehiculosConsumosServlet" , "sSentencia: " + sSentencia, m05bConstantes.LOG_NIVEL_BAJO);
		     
		 pstmt = conn.prepareStatement(sSentencia);
		 rs = pstmt.executeQuery();
//String sSentencia2= "SELECT TO_CHAR("+ m05bConstantes.COL_90_FFINKM + 
	               //",'dd/mm/yyyy') from " +m05bConstantes.TAB_TMPVEHICULOS+" where TO_CHAR("+
	                //m05bConstantes.COL_90_FFINKM+",'yyyymmdd')<= ";		 
         
		 fncAbrirFicheroTemporal();

         sLinea = "<?xml version=\"1.0\" encoding=\"windows-1252\"?>\n";
         tmpFoFileStream.write(sLinea.getBytes());
         
         sLinea = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n";
         tmpFoFileStream.write(sLinea.getBytes());
		 // LAYOUT DEL LISTADO 
	         sLinea = "<fo:layout-master-set>\n";
	         tmpFoFileStream.write(sLinea.getBytes());
		           sLinea = "	<fo:simple-page-master master-name=\"general\"  page-height=\"29.5cm\" page-width=\"21cm\" margin-top=\"2cm\" margin-bottom=\"2cm\" margin-left=\"2.5cm\" margin-right=\"2.5cm\">\n";
			       tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-before extent=\"3cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-body  margin-top=\"3.8cm\" margin-bottom=\"1.5cm\" />\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-after  extent=\"1cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-start extent=\"0cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-end extent=\"0cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         
		            sLinea = "	</fo:simple-page-master>\n";
		          tmpFoFileStream.write(sLinea.getBytes());
		          
	         sLinea = "</fo:layout-master-set>\n";
	         tmpFoFileStream.write(sLinea.getBytes());
			            	int cont=0;
			            	String sSentenciaTotal1="";
			            	String dNumeroS="";
			            	while (rs.next()){
	   		            	sFIniAnteriorKm=sFFinKm;
	       	    			sMatricula = rs.getString(1)==null ? "":rs.getString(1);
		   		    	    sRango=rs.getString(2)==null ? "":rs.getString(2);
		   		    	    sDescripcion=rs.getString(3)==null ? "":rs.getString(3);
	       	    			sFIniKm= rs.getString(4)==null ? "":rs.getString(4);
		   		    	    sFFinKm2=rs.getString(12)==null ? "":rs.getString(12);
		   		    	    //sSentencia3=sSentencia2+"'"+sFFinKm2+"' and "+
	                        //m05bConstantes.COL_90_MATRICULA+ " ='"+sMatricula+
	                        //"' order by "+m05bConstantes.COL_90_FFINKM+" desc ";
	                        //miLog.addTraza(sUsuario , "m05bConsumosServlet" , "sSentencia3: " + sSentencia3, m05bConstantes.LOG_NIVEL_BAJO);
		   		    	    dNumeroS = (rs.getString(5)==null)?"0":rs.getString(5);
						    sIniKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
						    sIniKm = sIniKm.replaceAll(",",".");
						    //pstmt3 = conn.prepareStatement(sSentencia3);
		                    //rs3= pstmt3.executeQuery();
		                        //if (rs3.next()){
                                //   sFIniKm=rs3.getString(1)==null ? "":rs3.getString(1);
                                //}
               				//if (pstmt3 != null)
            					//pstmt3.close();
               				//if (rs3 != null)
            					//rs3.close();
	       	    			sFFinKm = rs.getString(6)==null ? "":rs.getString(6);
	       	    			
	       	    			dNumeroS = (rs.getString(7)==null)?"0":rs.getString(7);
						    sFinKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
						    sFinKm = sFinKm.replaceAll(",",".");
		   		    	    dNumero= rs.getDouble(8);
						    sLitros = miComun.formatearDblMilesDec(dNumero);
	       	    			
						    dNumeroS = (rs.getString(10)==null)?"0":rs.getString(10);
						    sDifKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
						    sDifKm = sDifKm.replaceAll(",",".");
		   		    	    dNumero= rs.getDouble(11);
						    sConsumo = miComun.formatearDblMilesDec(dNumero);
						   if  (((sMarca==null) || (sMarca.equals(""))) && ((sModelo==null) || (sModelo.equals("")))){
	       	    			if (((!(sRango.equals(sRangoAnt))) ) ||(cont==54)){
	       	    			   	if ((sRangoAnt!="") && (!(sRango.equals(sRangoAnt)))) {
							        sSentenciaTotal1=sSentenciaTotal + " AND "+ m05bConstantes.COL_90_RANGO+"='"+ sRangoAnt+"' GROUP BY "+ m05bConstantes.COL_90_RANGO;
	                                pstmt2 = conn.prepareStatement(sSentenciaTotal1);
			                        rs2= pstmt2.executeQuery();
			                        if (rs2.next()){
			                           dNumeroS = (rs2.getString(3)==null)?"0":rs2.getString(3);
							           sTotDifKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
							           sTotDifKm = sTotDifKm.replaceAll(",",".");
							           dNumero= rs2.getDouble(2);
							           sTotLitros = miComun.formatearDblMilesDec(dNumero);
			   		    	           dNumero= rs2.getDouble(4);
							           sTotConsumo = miComun.formatearDblMilesDec(dNumero);
					                   if (pstmt2 != null){
						                   pstmt2.close();}
	   		                        sLinea = "	    <fo:table-row >\n";
				            		tmpFoFileStream.write(sLinea.getBytes());
				            			// Matricula 
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "  +"</fo:block>";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Marca
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Modelo
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// F.Matricula
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Km
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// situacion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotDifKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Centro
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotLitros+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
	  			                        // descripcion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotConsumo+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());	
				            		sLinea = "	    </fo:table-row>\n";
				            		tmpFoFileStream.write(sLinea.getBytes());}
	                                fncImprimirFinPagina(); 
	                                }else if (cont==54){
	                                 fncImprimirFinPagina(); 
	                                }
		       	    			    fncImprimirComienzoPagina();
		       	    			    cont=0;
				            	}else{
		       	    			   	cont=cont+1;   
	   		                        sLinea = "	    <fo:table-row >\n";
				            		tmpFoFileStream.write(sLinea.getBytes());}
		    	    			    sRangoAnt=sRango;
		    	    			    sMatriculaAnt=sMatricula;		            		
				            			// Matricula 
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n " + sMatricula +"</fo:block>";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Marca
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "+ sFIniKm +"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Modelo
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sIniKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// F.Matricula
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sFFinKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Km
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sFinKm+"</fo:block>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// situacion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sDifKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Centro
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sLitros+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
	  			                        // descripcion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sConsumo+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());			            			
				            		sLinea = "	    </fo:table-row>\n";
				            		tmpFoFileStream.write(sLinea.getBytes());
				        }else{
				        	if (cont==54){
                                fncImprimirFinPagina(); 
                                cont=0;
				        	}
				        	if (cont==0){
				        		fncImprimirComienzoPagina();
                                cont=0;
				        	}				        	
 					        if ( (cont!=0)){

   		                        sLinea = "	    <fo:table-row >\n";
			            		tmpFoFileStream.write(sLinea.getBytes());}
       	    			   	     cont=cont+1;   		            		
			            			// Matricula 
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n " + sMatricula +"</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Marca
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n "+ sFIniKm +"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Modelo
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sIniKm+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// F.Matricula
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sFFinKm+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Km
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sFinKm+"</fo:block>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// situacion
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sDifKm+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Centro
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sLitros+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
  			                        // descripcion
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n"+sConsumo+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());			            			
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
                            }
				        	
				        }
			            	if  (((sMarca==null) || (sMarca.equals(""))) && ((sModelo==null) || (sModelo.equals("")))){
						        sSentenciaTotal1=sSentenciaTotal + " AND "+ m05bConstantes.COL_90_RANGO+"='"+ sRango+"' GROUP BY "+ m05bConstantes.COL_90_RANGO;
                                pstmt2 = conn.prepareStatement(sSentenciaTotal1);
		                        rs2= pstmt2.executeQuery();
		                        if (rs2.next()){
		   		    	           dNumeroS= (rs2.getString(3)==null)?"0":rs2.getString(3);
						           sTotDifKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
						           sTotDifKm = sTotDifKm.replaceAll(",",".");
						           dNumero= rs2.getDouble(2);
						           sTotLitros = miComun.formatearDblMilesDec(dNumero);
		   		    	           dNumero= rs2.getDouble(4);
						           sTotConsumo = miComun.formatearDblMilesDec(dNumero);
	   		                        sLinea = "	    <fo:table-row >\n";
				            		tmpFoFileStream.write(sLinea.getBytes());
				            			// Matricula 
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "  +"</fo:block>";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Marca
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Modelo
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// F.Matricula
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Km
				            			sLinea = "	    <fo:table-cell border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// situacion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotDifKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Centro
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotLitros+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
	  			                        // descripcion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotConsumo+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());			            			
				            		sLinea = "	    </fo:table-row>\n";
				            		tmpFoFileStream.write(sLinea.getBytes());   
		                        }
			            	}else{
						        sSentenciaTotal1=sSentenciaTotal;
                                pstmt2 = conn.prepareStatement(sSentenciaTotal1);
		                        rs2= pstmt2.executeQuery();
		                        if (rs2.next()){
		   		    	           dNumeroS= (rs2.getString(2)==null)?"0":rs2.getString(2);
						           sTotDifKm = miComun.formatearDblMiles(new Double(dNumeroS).doubleValue());
						           sTotDifKm = sTotDifKm.replaceAll(",",".");
						           dNumero= rs2.getDouble(1);
						           sTotLitros = miComun.formatearDblMilesDec(dNumero);
		   		    	           dNumero= rs2.getDouble(3);
						           sTotConsumo = miComun.formatearDblMilesDec(dNumero);
	   		                        sLinea = "	    <fo:table-row >\n";
				            		tmpFoFileStream.write(sLinea.getBytes());
				            			// Matricula 
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "  +"</fo:block>";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Marca
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n "+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Modelo
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// F.Matricula
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Km
				            			sLinea = "	    <fo:table-cell border-width=\"0.1mm\" >\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+"</fo:block>\n";
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// situacion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotDifKm+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
				            			// Centro
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotLitros+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
	  			                        // descripcion
				            			sLinea = "	    <fo:table-cell padding-top=\"0.4mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
				            			tmpFoFileStream.write(sLinea.getBytes());
								            sLinea = "      <fo:block  text-align=\"center\">\n"+sTotConsumo+"</fo:block>\n";
								            tmpFoFileStream.write(sLinea.getBytes());
				            			sLinea = "	    </fo:table-cell>\n";
				            			tmpFoFileStream.write(sLinea.getBytes());			            			
				            		sLinea = "	    </fo:table-row>\n";
				            		tmpFoFileStream.write(sLinea.getBytes());   
		                        }	
			            	}


			                    fncImprimirFinPagina();
			                   	rs.close();
         
         sLinea = "</fo:root>\n";
         tmpFoFileStream.write(sLinea.getBytes());
         tmpFoFileStream.close();

         //FileInputStream file = new FileInputStream(sFoFileDir + tmpFoFile.getName());

         //renderFO(new InputSource(file), response);
         generarPDFdesdeFO(sFoFileDir + tmpFoFile.getName(),sFoFileDir,response);         

         //tmpFoFile.delete();

         //response.flushBuffer();


      }
      catch (Exception ex)
      {
      	try {
			response.sendRedirect("m05bError.jsp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			miLog.addTraza(e);
		}
      }
      finally{
	   	    try {
				if (rs != null)
					rs.close();
				if (rs2 != null)
					rs2.close();
				if (rs3 != null)
					rs3.close();
				if (pstmt != null)
					pstmt.close();
				if (pstmt2 != null)
					pstmt2.close();
				if (pstmt3 != null)
					pstmt3.close();
				
				if (conn != null)
					conn.close();
			} catch (SQLException e2) {
				try {
					response.sendRedirect("m05bError.jsp");
				} catch (IOException e) {
					// TODO Auto-generated catch block
					miLog.addTraza(e);
				}
	  		}
	   }
    }

    /**
     * renders an FO inputsource into a PDF file which is rendered
     * directly to the response object's OutputStream
     */
    public void renderFO(InputSource foFile, HttpServletResponse response) throws ServletException
    {
        try
        {
            ByteArrayOutputStream out = new ByteArrayOutputStream();

	    	response.reset();
            OutputStream oOut=response.getOutputStream();
            BufferedOutputStream bOut=new BufferedOutputStream(oOut);
            Driver driver = new Driver(foFile, out);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();

            response.setContentLength(out.size());
	    response.setContentType("application/pdf");


            bOut.write(out.toByteArray());
	    out.close();
	    bOut.flush();
            bOut.close();
//	    response.flushBuffer();
        }
        catch (Exception ex)
        {
            throw new ServletException(ex);
        }
    }
 public void generarPDFdesdeFO(String ficheroFO, String rutaPDF, HttpServletResponse response) throws FOPException {
        try {

            Driver driver = new Driver();

            driver.setRenderer(Driver.RENDER_PDF);

            //Si no existe el directrio lo crea
            File f = new File(rutaPDF);

            if (!f.exists()) {

                f.mkdir();


            }
            //Cargar los datos del .FO
            FileInputStream file = new FileInputStream(ficheroFO);

            BufferedInputStream bfile=new BufferedInputStream(file);

            driver.setInputSource(new InputSource(bfile));


            //Crear un temporal que va a ser el .pdf
            String sPdfFileDir = rutaPDF;
            File   pdfFileDir = new File(sPdfFileDir);
            File   tmpPdfFile = File.createTempFile("m05b", ".pdf", pdfFileDir);


            FileOutputStream fileout = new FileOutputStream(tmpPdfFile);

            BufferedOutputStream bfileout=new BufferedOutputStream(fileout);

            driver.setOutputStream(bfileout);

            driver.run();


 

            bfile.close();

            bfileout.close();
            //Longitus del Fichero PDF.
            Long longitud = new Long(tmpPdfFile.length());            
            String sLongitud=""+ longitud;
            int iLongitud=Integer.parseInt(sLongitud);

            response.setContentLength((int)iLongitud);
	        response.setContentType("application/pdf");
	        
            byte[] fileBytes = new byte[longitud.intValue()];
            FileInputStream fisficheroPdf = new FileInputStream(tmpPdfFile);
            fisficheroPdf.read(fileBytes);
            ServletOutputStream os = response.getOutputStream();
            ((OutputStream)os).write(fileBytes);
            ((OutputStream)os).flush();
            ((OutputStream)os).close();

            // BORRAR EL FICHERO FO

            File fichero = new File(ficheroFO);
            

            boolean borrado = fichero.delete();
            boolean borrado2 = tmpPdfFile.delete();

        } catch (Exception e) {
        }


    }    
}