package ordentrabajoServlet;


import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Locale;

import javax.naming.InitialContext;
import javax.servlet.http.HttpSession;

import m05bBD.m05bOrdenesTrabajo;
import m05bClasses.m05bComun;
import m05bClasses.m05bConexion;
import m05bClasses.m05bConstantes;
import m05bClasses.m05bFileLog;
import m05bOrdenesTrabajoEJB.m05OrdenesTrabajo;
import m05bOrdenesTrabajoEJB.m05OrdenesTrabajoHome;
import m05bOrdenesTrabajoEJB.m05OrdenesTrabajoPK;

public class m05bGrabarOrdenTrabajoServlet extends javax.servlet.http.HttpServlet{

	m05bFileLog miLog = new m05bFileLog();
/**
 * Process incoming HTTP POST requests
 *
 * @param request Object that encapsulates the request to the servlet
 * @param response Object that encapsulates the response from the servlet
 */
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

	performTask(request, response);

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

	return super.getServletInfo();

}
/**
 * Initializes the servlet.
 */
public void init() {
	// insert code to initialize the servlet here

}

/**
 * Process incoming requests for information
 *
 * @param request Object that encapsulates the request to the servlet
 * @param response Object that encapsulates the response from the servlet
 *
*/

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

       String sqlBD="", accion, sURL;
       m05bComun comun = new m05bComun();
       java.sql.Connection conn=null;
       PreparedStatement pstmt = null;
       ResultSet rs = null;
       StringBuffer sql= new StringBuffer();
       boolean finalizado = false;
       String sNOrden=request.getParameter("NOrden");
       String sAbierta=request.getParameter("Abierta");
       String sTelefono=request.getParameter("Telefono");
       String sImporte=request.getParameter("FormatImporte");
       if ((sImporte==null)|| sImporte.equals("")){
       	   sImporte="0";
       }
       //if(sImporte!=null && !sImporte.equals("")){
       //		if(sImporte.indexOf(".")>0){
       //			sImporte=sImporte.replace('.',',');
       //		}
       //}
       
       sImporte=comun.ImportesABasedatos(sImporte);
       miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "sImporte2: " + sImporte, m05bConstantes.LOG_NIVEL_BAJO);       
       String sNombre=request.getParameter("Nombre")==null?"":request.getParameter("Nombre").toUpperCase();
       String sFentrada=request.getParameter("FEntrada");
       String sHentrada=request.getParameter("HEntrada");
	   if (sHentrada == null)
	    	sHentrada="000000";
       String sKmsalida=request.getParameter("KmSalida");
       if ((sKmsalida==null)|| sKmsalida.equals("")){
       	sKmsalida="0";
        }       
       sKmsalida=comun.ImportesABasedatos(sKmsalida);
       String sKmEntrada=request.getParameter("KmEntrada");
       if ((sKmEntrada==null)|| sKmEntrada.equals("")){
       	sKmEntrada="0";
       }              
       sKmEntrada=comun.ImportesABasedatos(sKmEntrada);
       
       String sNFactura=request.getParameter("NFactura")==null?"":request.getParameter("NFactura").toUpperCase();
       String sFFactura=request.getParameter("FFactura");
       	   
       String sGarantia=request.getParameter("Garantia");
       String sHSalida=request.getParameter("HSalida");
       String sFSalida=request.getParameter("FSalida");
	   if (sHSalida == null)
	    	sHSalida="235900";
       String sNotas=request.getParameter("Notas")==null?"":request.getParameter("Notas").toUpperCase();
       String sRepEfectuar=request.getParameter("Repefectuar");
       String sDpto=request.getParameter("Dpto");
       String sMatricula=request.getParameter("Matricula").toUpperCase();
       String sCodTaller=request.getParameter("CodTaller");

       try 	{
			HttpSession session = request.getSession(true);
			Locale idiomaLocal = (Locale)session.getAttribute("Local");
			String idiomaSes = ((idiomaLocal.getLanguage()==null)?"es":idiomaLocal.getLanguage());	
		
	        String campoTexto="C";
	        String formatoFecha="dd/MM/yyyy";
	        if(!idiomaSes.equals("es")){
				campoTexto="E";
				formatoFecha="yyyy/MM/dd";
	        }
			String persona = (String) session.getAttribute("persona");
			miLog.addTraza(persona,"Grabar OT","INICIO", m05bConstantes.LOG_NIVEL_BAJO);

	        m05bOrdenesTrabajo ordtrabajo = (m05bOrdenesTrabajo)session.getAttribute("m05bOrdenesTrabajo");
	        sFSalida=comun.FechaBD(sFSalida,sHSalida);
			miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "FECHA SALIDA: " + sFSalida, m05bConstantes.LOG_NIVEL_BAJO);
	        sFentrada=comun.FechaBD(sFentrada,sHentrada,campoTexto);
	        sGarantia=comun.FechaBD(sGarantia,"00:00",campoTexto);
	        sFFactura=comun.FechaBD(sFFactura,"00:00",campoTexto);
	        
	        accion=request.getParameter("Accion");

			try{
					m05bConexion miConex = new m05bConexion();
					conn = miConex.getConnection();

			        if (sNFactura == null) {
		       	   		sNFactura="";
			        }

			        //20130319 Inigo
			        //Ahora no realizamos la comprobación de si existe alguna orden
			        //distinta a la nuestra para el mismo taller y número de factura
			        /*
					if (!(accion.equals(m05bConstantes.ACC_ELIMINAR)))  {
			       	   // Chequear que no hay otra OT con ese taller y NFactura
						sqlBD=  " Select 1 from " + m05bConstantes.TAB_ORDENESTRAB +
								" where " + m05bConstantes.COL_20_CODIGO + " != '" + sNOrden + "'" +
								" and " + m05bConstantes.COL_20_CODTALLER + " = '" + sCodTaller + "'" +
								" and " + m05bConstantes.COL_20_FACTURA + " = '" + sNFactura + "'";
						pstmt = conn.prepareStatement(sqlBD);
						miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "SQL: " + sqlBD, m05bConstantes.LOG_NIVEL_BAJO);
						rs=pstmt.executeQuery();
	                    if (rs.next()) {
	            			response.sendRedirect("m05bOrdenesTrabajoJsp.jsp?Codigo=" + sNOrden + "&Mensaje=exdatos" );
	            			finalizado = true;
	                    }
					}
					*/

					if (accion.equals(m05bConstantes.ACC_ACTUALIZAR))  {
							sql=sql.append(" update	").append(m05bConstantes.TAB_ORDENESTRAB);
							sql=sql.append(" set ").append(m05bConstantes.COL_20_IMPORTE).append(" = ").append(sImporte);
		                    sql=sql.append(",").append(m05bConstantes.COL_20_FACTURA).append(" = '").append(sNFactura);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_KM_ENTRADA).append(" = ").append(sKmEntrada);
		                    sql=sql.append(",").append(m05bConstantes.COL_20_KM_SALIDA).append(" = ").append(sKmsalida);
		                    sql=sql.append(",").append(m05bConstantes.COL_20_CODTALLER).append(" = '").append(sCodTaller);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_MATRICULA).append(" = '").append(sMatricula);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_PERSONA).append(" = '").append(sAbierta);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_TELEF).append(" = '").append(sTelefono);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_DESDPTO).append(" = '").append(sDpto);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_DESCRIP).append(" = ?");
		                    sql=sql.append(",").append(m05bConstantes.COL_20_NOTAS).append(" = ?");
		                    sql=sql.append(",").append(m05bConstantes.COL_20_CONDUCTOR).append(" = '").append(sNombre);
		                    sql=sql.append("',").append(m05bConstantes.COL_20_FENTRADA).append(" =  TO_DATE ('").append(sFentrada);
		                    sql=sql.append("','YYYYMMDDHH24MISS'),").append(m05bConstantes.COL_20_FSALIDA).append(" =  TO_DATE ('").append(sFSalida);
		                    sql=sql.append("','YYYYMMDDHH24MISS'),").append(m05bConstantes.COL_20_GARANTIA).append(" =  TO_DATE ('").append(sGarantia);
		                    sql=sql.append("','YYYYMMDDHH24MISS'),").append(m05bConstantes.COL_20_FFACTURA).append(" =  TO_DATE ('").append(sFFactura);	                    
		                    sql=sql.append("','YYYYMMDDHH24MISS') WHERE ").append(m05bConstantes.COL_20_CODIGO).append("= '").append(sNOrden);
		                    sql=sql.append("'");
							miLog.addTraza(m05bConstantes.LOG_NO_USER,m05bConstantes.LOG_NO_SRC,"SQL: " + sql.toString(), m05bConstantes.LOG_NIVEL_BAJO);
		                pstmt = conn.prepareStatement(sql.toString());
		                //pstmt.setString(1,sImporte);
		                pstmt.setString(1,sRepEfectuar);
		                pstmt.setString(2,sNotas);
						pstmt.executeUpdate();
						// Actualizar los km y la fecha actuales del vehiculo
						if ( (sKmsalida != "" )  && (sFSalida != "" )) {
						    sqlBD="update	" + m05bConstantes.TAB_VEHICULOS +
									" set " + m05bConstantes.COL_34_KMACTUALES + " = '" + sKmsalida +
									"' ,  " + m05bConstantes.COL_34_FKMACT + "= TO_DATE ('" + request.getParameter("FSalida") + "','"+formatoFecha+"') " +
						            " where " + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "' AND TO_CHAR("+
			                        m05bConstantes.COL_34_FKMACT+",'YYYY/mm/dd')<=TO_CHAR(TO_DATE('"+ request.getParameter("FSalida")+"','"+formatoFecha+"'),'yyyy/mm/dd') AND  "+m05bConstantes.COL_34_KMACTUALES +
				                    "<='"+sKmsalida+"'";
							
							miLog.addTraza(m05bConstantes.LOG_NO_USER,m05bConstantes.LOG_NO_SRC,"SQL: " + sqlBD, m05bConstantes.LOG_NIVEL_BAJO);
							pstmt = conn.prepareStatement(sqlBD);
						}else{
			                sqlBD="update	" + m05bConstantes.TAB_VEHICULOS +
							" set " + m05bConstantes.COL_34_KMACTUALES + " = " + sKmEntrada + 
							" ,  " + m05bConstantes.COL_34_FKMACT + "= TO_DATE ('" + sFentrada + "','YYYYMMDDHH24MISS') " +
							" where " + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "' AND TO_CHAR("+
			                m05bConstantes.COL_34_FKMACT+",'YYYY/mm/dd')<=TO_CHAR(TO_DATE('"+ request.getParameter("FEntrada")+"','"+formatoFecha+"'),'yyyy/mm/dd') AND "+  m05bConstantes.COL_34_KMACTUALES +
		                    "<='"+sKmEntrada+"'";
							;
					        miLog.addTraza(m05bConstantes.LOG_NO_USER,m05bConstantes.LOG_NO_SRC,"SQL: " + sqlBD, m05bConstantes.LOG_NIVEL_BAJO);
	                        pstmt = conn.prepareStatement(sqlBD);							
						}
					} else if (accion.equals(m05bConstantes.ACC_INSERTAR))  {
		                 int orden=Integer.parseInt(sNOrden);
		                 sqlBD="insert into " + m05bConstantes.TAB_ORDENESTRAB +
								" ("+m05bConstantes.COL_20_CODIGO+","+m05bConstantes.COL_20_CODTALLER+","+
		                    	m05bConstantes.COL_20_CONDUCTOR+","+m05bConstantes.COL_20_DESCRIP+
								","+m05bConstantes.COL_20_NOTAS+","+
		                   	    m05bConstantes.COL_20_FACTURA+","+m05bConstantes.COL_20_FFACTURA+","+
		                    	m05bConstantes.COL_20_DESDPTO+","+m05bConstantes.COL_20_FENTRADA+","+
		                    	m05bConstantes.COL_20_FSALIDA+","+m05bConstantes.COL_20_GARANTIA+","+
		                    	m05bConstantes.COL_20_IMPORTE+","+m05bConstantes.COL_20_KM_ENTRADA+","+
		                    	m05bConstantes.COL_20_KM_SALIDA+","+m05bConstantes.COL_20_MATRICULA+","+
		                    	m05bConstantes.COL_20_PERSONA+","+m05bConstantes.COL_20_TELEF+") " +
		                    	" values " +"("+orden+",'"+sCodTaller+"','"+sNombre+"',?,?" +
		                    	" ,'"+sNFactura+"',TO_DATE('"+sFFactura+"','YYYYMMDDHH24MISS') ,'"+sDpto+"',TO_DATE('"+sFentrada+"','YYYYMMDDHH24MISS'),TO_DATE('"+sFSalida+"','YYYYMMDDHH24MISS')"+
		                    	" ,TO_DATE('"+sGarantia+"','YYYYMMDDHH24MISS') ,"+sImporte+" ,"+sKmEntrada+","+sKmsalida+",'"+sMatricula+
		                    	"' ,'"+sAbierta+"','"+sTelefono+"' )" ;
							miLog.addTraza(m05bConstantes.LOG_NO_USER,m05bConstantes.LOG_NO_SRC,"SQL: " + sqlBD, m05bConstantes.LOG_NIVEL_BAJO);
							pstmt = conn.prepareStatement(sqlBD);
							pstmt.setString(1,sRepEfectuar);
			                pstmt.setString(2,sNotas);
							pstmt.executeUpdate();
					  // Actualizar los km y la fecha actuales del vehiculo
			                sqlBD="update	" + m05bConstantes.TAB_VEHICULOS +
									" set " + m05bConstantes.COL_34_KMACTUALES + " = " + sKmEntrada + 
									" ,  " + m05bConstantes.COL_34_FKMACT + "= TO_DATE ('" + sFentrada + "','YYYYMMDDHH24MISS') " +
									" where " + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'AND TO_CHAR("+
			                m05bConstantes.COL_34_FKMACT+",'"+formatoFecha+"')<=TO_CHAR(TO_DATE('"+ request.getParameter("FEntrada")+"','"+formatoFecha+"'),'yyyy/mm/dd')";
							miLog.addTraza(m05bConstantes.LOG_NO_USER,m05bConstantes.LOG_NO_SRC,"SQL: " + sqlBD, m05bConstantes.LOG_NIVEL_BAJO);
			                pstmt = conn.prepareStatement(sqlBD);
					} else   {
						pstmt = conn.prepareStatement(
							"delete from " +m05bConstantes.TAB_ORDENESTRAB+
							" where "+m05bConstantes.COL_20_CODIGO+" =  ? " );
						pstmt.setString(1, sNOrden);
					}
					if(!finalizado){
						pstmt.executeUpdate();
						if (!(accion.equals(m05bConstantes.ACC_ELIMINAR)))  {
				            m05OrdenesTrabajoPK primaryKey = new m05OrdenesTrabajoPK();
							primaryKey.ord_codigo = sNOrden;
							InitialContext ctx2 = new InitialContext();
							m05OrdenesTrabajoHome ordentrabajoEBHome = (m05OrdenesTrabajoHome) ctx2.lookup("m05OrdenesTrabajo");
							m05OrdenesTrabajo ordentrabajoEB = ordentrabajoEBHome.findByPrimaryKey(primaryKey);
							m05bOrdenesTrabajo ordentrabajo = ordentrabajoEB.getOrdenesTrabajo();
							session.setAttribute("m05bOrdenesTrabajo", ordentrabajo);
					    	//sURL = response.encodeRedirectURL("m05bOrdenesTrabajoJsp.jsp?Codigo=" + sNOrden +  "&Mensaje=false");
				            //sURL = response.encodeRedirectURL("m05bGenerarOrdenTrabajoServlet?Codigo=" + sNOrden +  "&Mensaje=false");
						    //RequestDispatcher rd;
						    //rd = request.getRequestDispatcher(sURL);
						}		
						if (accion.equals(m05bConstantes.ACC_ELIMINAR))  {
			            	response.sendRedirect("m05bOrdenesTrabajoJsp.jsp" );
						} else {
			            	response.sendRedirect("m05bOrdenesTrabajoJsp.jsp?Codigo=" + sNOrden + "&Mensaje=true" );
						}
					}
			} catch (Exception ex) {
				miLog.addTraza(ex);
				response.sendRedirect("m05bError.jsp");
			} finally {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
	            if (conn != null)
					conn.close();
			}
	} catch(Throwable theException) {
			miLog.addTraza(theException);
			try {
				response.sendRedirect("m05bError.jsp");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				miLog.addTraza(e);
			}
	}
}
}