package polizaServlet;

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

import javax.servlet.http.HttpSession;

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

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

/**
 * 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 sCodigo="", sPoliza="", sMatricula, sCia="", sCodCia="", sModal="";
       String sFalta="", sFbaja="", sFcaduc="", sFsolic="", sFsolicI="", sFImpreso="";
       //String sModal;
       String sImporte="", sEstado="", sEstadoBD="", sImpreso="", sPolizav="", sPolizaVBD="";
       String sql="", accion="", persona;
       int id;
	   java.sql.Connection conn=null;
	   PreparedStatement pstmt = null;
	   ResultSet rs = null;
	   
	   m05bConexion miConex = new m05bConexion();
	   m05bGenerarClave miID = new m05bGenerarClave();
	   m05bComun miComun = new m05bComun();
	   m05bFileLog miLog = new m05bFileLog();

       try {
	        HttpSession session = request.getSession(true);
			m05bPoliza poliza = (m05bPoliza)session.getAttribute("m05bPoliza");
			persona = (String) session.getAttribute("persona");

	        sMatricula=request.getParameter("Matricula");
			sCodigo = request.getParameter("Codigo");
			poliza.setPol_codigo(sCodigo);
			sFalta=request.getParameter("FAlta")==null?"":request.getParameter("FAlta");
			poliza.setPol_falta(sFalta);
	        sFbaja=request.getParameter("FBaja")==null?"":request.getParameter("FBaja");
			poliza.setPol_fbaja(sFbaja);
	        //sFcaduc=request.getParameter("FCaduc")==null?"":request.getParameter("FCaduc");
			//poliza.setPol_fcaduc(sFcaduc);
	        sFsolic=request.getParameter("FSolic")==null?"":request.getParameter("FSolic");
			poliza.setPol_fsolic(sFalta);
	        sCodCia=request.getParameter("Cia");
    		miLog.addTraza(persona , "GrabarPolizaServlet", "codigo Cia: " + sCodCia,m05bConstantes.LOG_NIVEL_BAJO);
	        sCia=request.getParameter("CiaHid");
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "CiaHid: " + sCia,m05bConstantes.LOG_NIVEL_BAJO);
	        poliza.setPol_cia(sCia);
	        sEstado=request.getParameter("EstadoHid")==null?"":request.getParameter("EstadoHid");
	        poliza.setPol_estado(sEstado);
	        sPoliza=request.getParameter("PolizaHid");
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "PolizaHid: " + sPoliza,m05bConstantes.LOG_NIVEL_BAJO);
	        poliza.setPol_poliza(sPoliza);
	        sModal=request.getParameter("ModalHid");
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "ModalHid: " + sModal,m05bConstantes.LOG_NIVEL_BAJO);
			try{
					conn = miConex.getConnection();
	        if (!(sModal.equals(""))){
					sql =  "select " + m05bConstantes.COL_99_CODDESC +
							   " from " + m05bConstantes.TAB_DESCRIPCIONES  +
							   " where " +  m05bConstantes.COL_99_CODTABLA + " = " + m05bConstantes.DESC_MODALIDADES + " AND "+
					            m05bConstantes.COL_99_DESCRIPCION +" = '"+sModal+"'"   ;
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "sql: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
					
				    pstmt = conn.prepareStatement(sql);
				   	rs = pstmt.executeQuery();
				   	if (rs.next()){  
			       	    sModal = rs.getString(1);}
					if (rs != null)
				        rs.close();
			        if (pstmt != null)
				        pstmt.close();

			}
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "sModal: " + sModal,m05bConstantes.LOG_NIVEL_BAJO);
	        poliza.setPol_modal(sModal);
	        sImporte=request.getParameter("Importe");
	        if (sImporte==null || sImporte.equals("NULL") || sImporte.equals(""))
	        	sImporte="0";	        
	        sImporte=miComun.ImportesABasedatos(sImporte);
	        poliza.setPol_importe(sImporte);
	        sMatricula=request.getParameter("Matricula");
	        poliza.setPol_matricula(sMatricula);
	        sPolizav=request.getParameter("Polizav")==null?"":request.getParameter("Polizav");
	        poliza.setPol_polizav(sPolizav);
	        sImpreso="N";
	        poliza.setPol_impreso(sImpreso);
			accion=request.getParameter("Accion");
    		miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "ACCION: " + accion,m05bConstantes.LOG_NIVEL_BAJO);

				//////////////COMPROBACIONES//////////////////////////////
				//1.-Obtenemos la Fecha de Solicitud, La fehca de caducidad que se recoge de la 
				//tabla de seguros(compañías) y el código de la póliza a partir de el código de
				//la tabla de compañías.
					sql =  "select "+
						   //TO_CHAR(" + 05bConstantes.COL_28_FCADUC + ",'dd/mm/yyyy'), 
						   " TO_CHAR (SYSDATE,'dd/mm/yyyy')," +
						   m05bConstantes.COL_28_POLIZA + 
							   " from " + m05bConstantes.TAB_SEGUROS  +
							   " where " +  m05bConstantes.COL_28_CODSEG + " = '" + sCodCia + "' "   ;
				    miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "select:Solicitud " + sql,m05bConstantes.LOG_NIVEL_BAJO);
				    pstmt = conn.prepareStatement(sql);
				   	rs = pstmt.executeQuery();
				   	if (rs.next()){  
			       	    //sFcaduc = rs.getString(1);
			       	    //if (sFcaduc == null){
			       	    //    sFcaduc= "";}
		        		//poliza.setPol_fcaduc(sFcaduc);
			       	    sFsolicI = rs.getString(1);
			       	    sPoliza= rs.getString(2);}
					// Se recupera el número de póliza-vehículo que tiene asociada el vehículo 
					//para comprobar posteriormente si cambia y en ese caso se registra en la tabla 
					//histórico de vehículos, actualizándose tb la tabla vehículos
					sql = "select " + m05bConstantes.COL_34_POLIZA + 
						      " from " + m05bConstantes.TAB_VEHICULOS  +
							  " where " +  m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'" ;
    				miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "SQL Comprobar Cambio de Póliza: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
				    pstmt = conn.prepareStatement(sql);
				   	rs = pstmt.executeQuery();
				   	if (rs.next()){ 
			       	    			sPolizaVBD = rs.getString(1);
			       	    			if (sPolizaVBD == null)
			       	    				sPolizaVBD= "";
								// Se inserta un registro en el histórico de vehículos 
								// Sólo si hay cambio de polizaV
    								miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "PolizaV: " + sPolizaVBD,m05bConstantes.LOG_NIVEL_BAJO);
		             }	       	 
					// Recuperamos el estado en el que se encuentra la póliza porque en el caso de que pase a ser cancelada 
					//hay que meter un nuevo registro en el histórico.
					sql = "select " + m05bConstantes.COL_13_ESTADO + 
						      " from " + m05bConstantes.TAB_HIST_SEGUROS  +
			                  " where	" + m05bConstantes.COL_13_CODIGO + " = '" + sCodigo + "'" ;
    				miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "SQL Comprobar Cambio de Estado: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
				    pstmt = conn.prepareStatement(sql);
				   	rs = pstmt.executeQuery();
				   	if (rs.next()){  
			       	    			sEstadoBD = rs.getString(1);
			       	    			if (sEstadoBD == null)
			       	    				sEstadoBD= "";
    								miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "EstadoBD: " + sEstadoBD,m05bConstantes.LOG_NIVEL_BAJO);
			       }
					if (((accion.equals(m05bConstantes.ACC_ACTUALIZAR)) && (!(sEstado.equals(m05bConstantes.SEG_CANCELADA)))) || 
					    ((accion.equals(m05bConstantes.ACC_ACTUALIZAR)) && (sEstado.equals(m05bConstantes.SEG_CANCELADA)) && (sEstado.equals(sEstadoBD)))){
		                  if ((sEstadoBD.equals(m05bConstantes.SEG_SOLICITADA)) && (sEstado.equals(m05bConstantes.SEG_ALTA))){
		                  	           //System.out.println("m05b - GrabarSeguros:De Solicitado a Alta "+ sEstado) ;   

		                       if (sFalta.equals("")) {
			                  	   poliza.setPol_falta(sFsolicI);
			        		       sFalta=sFsolicI;}}
							       sql = "update " +m05bConstantes.TAB_HIST_SEGUROS+
										     " set " + m05bConstantes.COL_13_FBAJA + " = to_date('" + sFbaja + "','dd/mm/yyyy')" +
					                         //" , "+m05bConstantes.COL_13_FCADUC + " = to_date('" + sFcaduc + 
					                         //"','dd/mm/yyyy')" +
					                         " , "+m05bConstantes.COL_13_FSOLIC + " = to_date('" + sFsolic + 
					                         "','dd/mm/yyyy')" +
					                         " , "+m05bConstantes.COL_13_FALTA + " = to_date('" + sFalta + 
					                         "','dd/mm/yyyy')" +
					                         " , "+m05bConstantes.COL_13_CIA +  " = '" + sCia + "'" +
					                         " , "+m05bConstantes.COL_13_ESTADO + " = '" + sEstado + "'" +
					                         " , "+m05bConstantes.COL_13_IMPORTE+ " = " + sImporte + 
					                         " , "+m05bConstantes.COL_13_POLIZAV+ " = '" + sPolizav + "'" +
					                         " , "+m05bConstantes.COL_13_MATRICULA+ " = '" + sMatricula + "'" +
					                         " , "+m05bConstantes.COL_13_MODAL+ " = '" + sModal + "'" +
					              		     " , "+m05bConstantes.COL_13_POLIZA+ " = '" + sPoliza + "'" +                       
										     " where	" + m05bConstantes.COL_13_CODIGO + " = '" + sCodigo + "'" ;
	    						miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "UPDATE-13.2: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
								pstmt = conn.prepareStatement(sql);
								pstmt.executeUpdate();
								//Actualizar 
						        sql = "update " +m05bConstantes.TAB_VEHICULOS+
									" set "+m05bConstantes.COL_34_POLIZA + " = '" + sPolizav + "'" +
									" where	" + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'" ;
	    						miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "UPDATE-34.3: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
								pstmt = conn.prepareStatement(sql);
								pstmt.executeUpdate();
	    						miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "UPDATE-34.3: Poliza BD" +  sPolizaVBD +"Poliza"+ sPolizav+"Estado" + sPolizaVBD.equals(sPolizav),m05bConstantes.LOG_NIVEL_BAJO);
						   if  (!(sPolizaVBD.equals(sPolizav))){
						    String Auxiliar44="to_number(" + m05bConstantes.COL_44_ID + ")";
						   	id = miID.getNextId(m05bConstantes.TAB_HIST_VEHICULOS, Auxiliar44);
						    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_FMATRIC + ", " + m05bConstantes.COL_44_FBAJA +
						   			    ", " + 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_CV +
						                ", " + m05bConstantes.COL_44_INF1 +  ", " + m05bConstantes.COL_44_INF2 +
						   			    ", " + m05bConstantes.COL_44_ROTULADO + ", " + m05bConstantes.COL_44_NOTA +
						                ", " + m05bConstantes.COL_44_PRECIO +  ", " + m05bConstantes.COL_44_POLIZA +
						                ", " + m05bConstantes.COL_44_VCONTAB +  ", " + m05bConstantes.COL_44_VIDAUTIL +
						                ", " + m05bConstantes.COL_44_AMOANUAL +  ", " + m05bConstantes.COL_44_AMOACUM+
						                ", " + m05bConstantes.COL_44_IMPBAJA +  ", " + m05bConstantes.COL_44_FADQUIS +
						                ", " + m05bConstantes.COL_44_REGADQUIS +  ", " + m05bConstantes.COL_44_MOTIVBAJA +
						                ", " + m05bConstantes.COL_44_DESTINO +  ", " + m05bConstantes.COL_44_APARCADO +
						                ", " + m05bConstantes.COL_44_MATRIC_ANT +
						                ", " + m05bConstantes.COL_44_FCAMBIO +  ", " + m05bConstantes.COL_44_FFIN + ", " + m05bConstantes.COL_44_CR + " )" +	
						          	    " SELECT "	+ id + "," + 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_FMATRIC + ", "+ m05bConstantes.COL_34_FBAJA + 
										", " + 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_CV + 
										", " + m05bConstantes.COL_34_INF1 + ", " + m05bConstantes.COL_34_INF2 + 
										", " + m05bConstantes.COL_34_ROTULADO + ", " + m05bConstantes.COL_34_NOTA + 
						                ", " + m05bConstantes.COL_34_PRECIO +  ", " + "  '" + sPolizav + "'" +
						                ", " + m05bConstantes.COL_34_VCONTAB +  ", " + m05bConstantes.COL_34_VIDAUTIL +
						                ", " + m05bConstantes.COL_34_AMOANUAL +  ", " + m05bConstantes.COL_34_AMOACUM +
						                ", " + m05bConstantes.COL_34_IMPBAJA +  ", " + m05bConstantes.COL_34_FADQUIS +
						                ", " + m05bConstantes.COL_34_REGADQUIS +  ", " + m05bConstantes.COL_34_MOTIVBAJA +
						                ", " + m05bConstantes.COL_34_DESTINO +  ", " + m05bConstantes.COL_34_APARCADO +
										", " + m05bConstantes.COL_34_MATRIC_ANT +
										", " +  "sysdate," + " to_date('','dd/mm/yyyy')"+
										", " + m05bConstantes.COL_34_CR +	" FROM " + m05bConstantes.TAB_VEHICULOS +
										" WHERE " + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'"	;
    						miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "INSERT-44.3: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
							pstmt = conn.prepareStatement(sql);
							pstmt.executeUpdate();
						}}
						else if ((accion.equals(m05bConstantes.ACC_INSERTAR)) || (sEstado.equals(m05bConstantes.SEG_CANCELADA)))  {
							String sFechaBajaAux=sFbaja;
							String sFechaSolicAux=sFsolic;
							if (sEstado.equals(m05bConstantes.SEG_CANCELADA)) {
			   			         String Auxiliar="to_number(" + m05bConstantes.COL_13_CODIGO + ")";
						   	     id = miID.getNextId(m05bConstantes.TAB_HIST_SEGUROS, Auxiliar);
						   	     sCodigo = "" + id;
						   	     if (sFbaja.equals("")){
			        		     poliza.setPol_fbaja(sFsolicI);
			        		     sFechaBajaAux=sFsolicI;}
				                 sql = "SELECT 1  FROM "+ m05bConstantes.TAB_TARJETAS +
				  	                       " WHERE " + m05bConstantes.COL_31_MATRICULA + "='" + sMatricula +
				  	                       "' AND " + m05bConstantes.COL_31_SITUACION + "='A'" ;
    							 miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "SQL-SEG CANCELADA: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
					             pstmt = conn.prepareStatement(sql);
							     pstmt.executeUpdate();
							     if (!(rs.next())){  
							         sql = "Update "+m05bConstantes.TAB_VEHICULOS+ " set " +m05bConstantes.COL_34_SITUACION +
									           " = 'P'" +
									           " where " + m05bConstantes.COL_34_MATRICULA  +"='" + sMatricula + "'";
			      			         pstmt = conn.prepareStatement(sql);
							         pstmt.executeUpdate();}
						   	 }
						   	 else {
						   	 	 if (sFsolic.equals("")){
			        		     poliza.setPol_fsolic(sFsolicI);
						   	 	 sFechaSolicAux=sFsolicI;}
						   	 }

							//Insertamos el nuevo seguro en la tabla de seguros.
			        		poliza.setPol_fsolic(sFsolicI);
			                sql = "insert into " +m05bConstantes.TAB_HIST_SEGUROS+
								        "("+m05bConstantes.COL_13_CODIGO+","+m05bConstantes.COL_13_MATRICULA+","+
						                m05bConstantes.COL_13_CIA+","+m05bConstantes.COL_13_FALTA+","+
						                m05bConstantes.COL_13_FBAJA+","+
						                //m05bConstantes.COL_13_FCADUC+", "+
						                m05bConstantes.COL_13_FSOLIC+","+m05bConstantes.COL_13_ESTADO+","+
						                m05bConstantes.COL_13_IMPORTE+","+m05bConstantes.COL_13_POLIZAV+", "+
						                m05bConstantes.COL_13_POLIZA+","+m05bConstantes.COL_13_MODAL+", "+                	
									    m05bConstantes.COL_13_IMPRESO+") " +
										" values ('"+ sCodigo +"','" + sMatricula+"','"+sCia +
										"', to_date('" + sFalta + "','dd/mm/yyyy'), " +
										" to_date('" + sFechaBajaAux + "','dd/mm/yyyy'), "+
										//" to_date('" + sFcaduc + "','dd/mm/yyyy'), " + 
										" to_date('" + sFechaSolicAux + "','dd/mm/yyyy'),'"+
										sEstado +"',"+sImporte+",'"+sPolizav+"','"+sPoliza+"','"+sModal+"','"
										+sImpreso  + "')" ;
							pstmt = conn.prepareStatement(sql);
    						miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "INSERT-44.3: " + sql,m05bConstantes.LOG_NIVEL_BAJO);
							pstmt.executeUpdate();
							//registramos en la labla de vehículos el número de póliza del vehículo
			               // sql = "update " +m05bConstantes.TAB_VEHICULOS+
					       //       " set "+m05bConstantes.COL_34_POLIZA + " = '" + sPolizav + "'" +
							//	  " where	" + m05bConstantes.COL_34_MATRICULA + " = '" + sMatricula + "'" ;
							//pstmt = conn.prepareStatement(sql);
							////System.out.println("m05b - Grabar Polizas: UPDATE-34.3: " + sql);
							//	pstmt.executeUpdate();

						}
		   	
					    conn.commit();
    					miLog.addTraza(m05bConstantes.LOG_NO_USER , m05bConstantes.LOG_NO_SRC, "COMMIT",m05bConstantes.LOG_NIVEL_BAJO);
					response.sendRedirect("m05bVehSeguroJsp.jsp?Matricula="+sMatricula);
			} 	catch (Exception SQLException) {
				    conn.rollback();
					miLog.addTraza(SQLException);
					response.sendRedirect("m05bError.jsp");
			} 	finally{
					if (rs != null)
						rs.close();
					if (pstmt != null)
						pstmt.close();
					if (conn != null)
						conn.close();
			}
	} catch(Throwable theException) {
		// uncomment the following line when unexpected exceptions
		// are occuring to aid in debugging the problem.
		miLog.addTraza(theException);
		try {
			response.sendRedirect("m05bError.jsp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			miLog.addTraza(e);
		}
	}
}
}