/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package mx.edu.um.mateo.inscripciones.model.ccobro.ccp; import mx.edu.um.mateo.inscripciones.model.ccobro.poliza.Metodos1; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Map; import java.util.TreeMap; import java.util.Vector; import javax.servlet.http.HttpSession; /** * * @author osoto */ public class Metodos { public Connection conn = null; public Metodos1 metsPoliza; public Metodos(Connection conn) { this.conn = conn; } public ResultSet getCuentasConPresupuesto(String strIDEjercicio, String strCCosto)throws Exception{ String strComando = "SELECT ID_EJERCICIO,ID_CTAMAYOR,ID_CCOSTO "; strComando += "FROM mateo.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "GROUP BY ID_EJERCICIO,ID_CTAMAYOR,ID_CCOSTO "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); return rst; } public double getPresupuestoMesActual(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, int intMes) throws Exception{ double dblCantidad = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND MES <= "+intMes; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return dblCantidad; } /*Toma en cuenta el auxiliar para el caso de los fondos asignados*/ public double getPresupuestoMesActual(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strIDAuxiliar, int intMes) throws Exception{ double dblCantidad = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUXILIAR = '"+strIDAuxiliar+"' "; strComando += "AND MES <= "+intMes; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return dblCantidad; } public double getGastos(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto)throws Exception{ double dblCredito = 0; double dblCargo = 0; dblCargo = metsPoliza.getTotalCargos(strIDEjercicio, strIDCtaMayor, strIDCcosto,"", "01-01-"+getAnnoActual(), getFechaActual("")); dblCredito = metsPoliza.getTotalCreditos(strIDEjercicio, strIDCtaMayor, strIDCcosto,"", "01-01-"+getAnnoActual(), getFechaActual("")); return (dblCargo - dblCredito); } /*Toma en cuenta el auxiliar en el caso de los fondos asignados*/ public double getGastos(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strIDAuxiliar)throws Exception{ double dblCredito = 0; double dblCargo = 0; dblCargo = metsPoliza.getTotalCargos(strIDEjercicio, strIDCtaMayor, strIDCcosto,strIDAuxiliar, "01-01-"+getAnnoActual(), getFechaActual("")); dblCredito = metsPoliza.getTotalCreditos(strIDEjercicio, strIDCtaMayor, strIDCcosto,strIDAuxiliar, "01-01-"+getAnnoActual(), getFechaActual("")); return (dblCargo - dblCredito); } /*Toma en cuenta el auxiliar para el caso de los fondos asignados*/ public double getComprometido(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strIDAuxiliar, String strFechaInicial, String strFechaFinal)throws Exception{ double dblCantidadComprometida = 0, dblCantidadDesComprometida = 0; String strComando = "SELECT COALESCE(SUM(PRECIO_U * CANTIDAD),0) AS IMPORTE "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND FECHA BETWEEN TO_DATE('"+strFechaInicial+"', 'DD/MM/YY') AND TO_DATE('"+strFechaFinal+"', 'DD/MM/YY') "; strComando += ")"; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUXILIAR = '"+strIDAuxiliar+"' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadComprometida = rst.getDouble("IMPORTE"); } rst.close(); strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE "; strComando += "FROM CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND FECHA BETWEEN TO_DATE('"+strFechaInicial+"', 'DD/MM/YY') AND TO_DATE('"+strFechaFinal+"', 'DD/MM/YY') "; strComando += ") "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUXILIAR = '"+strIDAuxiliar+"' " ; strComando += ") "; strComando += "AND STATUS = 'A' "; rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadDesComprometida = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return (dblCantidadComprometida - dblCantidadDesComprometida ); } public double getComprometidoCC ( String strIDEjercicio, String strIDCcosto, String strFechaI, String strFechaF )throws Exception { double dblCantidadComprometida = 0, dblCantidadDesComprometida = 0; String strComando = "SELECT COALESCE(SUM(PRECIO_U * CANTIDAD),0) AS IMPORTE "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND TO_DATE(FECHA, 'DD/MM/YY') "; strComando += "BETWEEN TO_DATE('"+strFechaI+"', 'DD/MM/YY') "; strComando += "AND BETWEEN TO_DATE('"+strFechaF+"', 'DD/MM/YY') "; strComando += ")"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadComprometida = rst.getDouble("IMPORTE"); } rst.close(); //Se buscan aquellas autorizaciones con movimientos en la tabla de descomprometido //entre las fechas indicadas. //Sin embargo, se tiene que validar que las autorizaciones sean de cierto rango de fechas //y que los registros de descomprometido sean tambi?n de dicho rango de fechas strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND TO_DATE(FECHA, 'DD/MM/YY') "; strComando += "BETWEEN TO_DATE('"+strFechaI+"', 'DD/MM/YY') "; strComando += "AND BETWEEN TO_DATE('"+strFechaF+"', 'DD/MM/YY') "; strComando += ")"; strComando += "AND TO_DATE(FECHA, 'DD/MM/YY') "; strComando += "BETWEEN TO_DATE('"+strFechaI+"', 'DD/MM/YY') "; strComando += "AND BETWEEN TO_DATE('"+strFechaF+"', 'DD/MM/YY') "; rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadDesComprometida = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); //System.out.println("GetComprometidoCC "+"@"+strIDEjercicio+"@"+strIDCcosto+"@"+strFechaI+"@"+strFechaF+"@"+String.valueOf(dblCantidadDesComprometida)); return (dblCantidadComprometida - dblCantidadDesComprometida ); } public double getPresupuestoDisponible(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, int intMes)throws Exception{ double dblPresupuesto = getPresupuestoMesActual(strIDEjercicio, strIDCtaMayor, strIDCcosto, intMes); java.util.Calendar gcFechaActual = new java.util.GregorianCalendar(); gcFechaActual.setTime(new java.util.Date()); gcFechaActual.set(java.util.Calendar.MONTH, intMes); gcFechaActual.getActualMaximum(java.util.Calendar.DATE); String strFechaActual = new java.text.SimpleDateFormat("dd/MM/yyyy").format(gcFechaActual.getTime()); double dblComprometido = getComprometido(strIDEjercicio, strIDCtaMayor, strIDCcosto, strFechaActual); double dblGastos = getGastos(strIDEjercicio, strIDCtaMayor, strIDCcosto); return (dblPresupuesto - dblComprometido - dblGastos); } /*Esta funcion toma en cuenta el auxiliar, para el caso de los fondos asignados*/ public double getPresupuestoDisponible(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strIDAuxiliar, int intMes)throws Exception{ double dblPresupuesto = getPresupuestoMesActual(strIDEjercicio, strIDCtaMayor, strIDCcosto, strIDAuxiliar, intMes); java.util.Calendar gcFechaActual = new java.util.GregorianCalendar(); gcFechaActual.setTime(new java.util.Date()); gcFechaActual.set(java.util.Calendar.MONTH, intMes); gcFechaActual.getActualMaximum(java.util.Calendar.DATE); String strFechaActual = new java.text.SimpleDateFormat("dd/MM/yyyy").format(gcFechaActual.getTime()); double dblComprometido = getComprometido(strIDEjercicio, strIDCtaMayor, strIDCcosto, strFechaActual); double dblGastos = getGastos(strIDEjercicio, strIDCtaMayor, strIDCcosto, strIDAuxiliar); return (dblPresupuesto - dblComprometido - dblGastos); } public void grabaAutorizacion(String strIDEjercicio, String strIDAutorizacion, String strIDAutorizacionDet, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, double dblCantidad, String strDescripcion, double dblPUnitario, String strStatus, HttpSession session )throws Exception{ /*Validar el centro de costo, si es una contabilidad, el parametro cuenta de mayor contiene un auxiliar*/ /*de fondos asignados*/ if(((String)session.getAttribute("id_ccosto")).equals((String)session.getAttribute("id_ccosto_ccp"))) { strIDAuxiliar = strIDCtaMayor; strIDCtaMayor = "3.1.02.01"; } //Si la ctaMayor contiene mas de 7 caracteres, indica que no es un auxiliar y mucho menos una ctaMayor //Entonces se espera recibir un string compuesto por una ctaMayor y un auxiliar else if(strIDCtaMayor.length() > 7) { String [] splits = strIDCtaMayor.split("-"); strIDCtaMayor = splits[0]; strIDAuxiliar = splits[1]; } String strComando = "INSERT INTO mateo.CCP_AUTORIZACION_DET(ID_EJERCICIO, "; strComando += "ID_AUTORIZACION, ID_AUTORIZACION_DET, ID_CTAMAYOR, ID_CCOSTO, ID_AUXILIAR, "; strComando += "CANTIDAD, DESCRIPCION, PRECIO_U, STATUS) "; strComando += "VALUES('"+strIDEjercicio+"', '"+strIDAutorizacion+"', "+strIDAutorizacionDet+","; strComando += "'"+strIDCtaMayor+"','"+strIDCCosto+"','"+strIDAuxiliar+"', "+String.valueOf(dblCantidad)+", "; strComando += "'"+strDescripcion+"', "+String.valueOf(dblPUnitario)+", '"+strStatus+"') "; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void grabaEncabezadoAutorizacion(String strIDEjercicio, String strIDAutorizacion, String strIDCCosto, String strFecha, String strMoneda, String strNoDoc, String strClaveEmpleado, String strProveedor, String strServicio, String strUsuarioLogin, String strStatus)throws Exception{ String strComando = "INSERT INTO mateo.CCP_AUTORIZACION(ID_EJERCICIO, "; strComando += "ID_AUTORIZACION, ID_CCOSTO, FECHA, TIPO, NO_DOC, CLAVEEMPLEADO, PROVEEDOR, SERVICIO, USUARIO, STATUS, IMPRESO) "; strComando += "VALUES('"+strIDEjercicio+"', '"+strIDAutorizacion+"', '"+strIDCCosto+"',"; strComando += "TO_DATE('"+strFecha+"', 'dd/mm/yy'),'"+strMoneda+"','"+strNoDoc+"','"+strClaveEmpleado+"','"+strProveedor+"',"; strComando += "'"+strServicio+"','"+strUsuarioLogin+"', '"+strStatus+"', 'N') "; PreparedStatement pstmt = conn.prepareStatement(strComando); pstmt.execute(); pstmt.close(); } public void modificaEncAutorizacion(HttpSession session, String strIDAutorizacion, String strNoDoc, String strClaveEmpleado, String strFecha, String strMoneda, String strProveedor, String strServicio)throws Exception{ String strComando = "UPDATE mateo.CCP_AUTORIZACION "; strComando += "SET NO_DOC = '"+strNoDoc+"', "; strComando += "FECHA = to_date('"+strFecha+"','dd/mm/yy'), "; strComando += "CLAVEEMPLEADO = '"+strClaveEmpleado+"', "; strComando += "TIPO = '"+strMoneda+"', "; strComando += "PROVEEDOR = '"+strProveedor+"', "; strComando += "SERVICIO = '"+strServicio+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strIDAutorizacion+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); } public void modificaDetAutorizacion(HttpSession session, String strIDAutorizacion, String strIDAutorizacionDet, double dblCantidad, String strDescripcion, double dblPrecioU, String strCtaMayor, String strCCosto)throws Exception{ String strAuxiliar = ""; String strComando = "UPDATE mateo.CCP_AUTORIZACION_DET "; strComando += "SET DESCRIPCION = '"+strDescripcion+"', CANTIDAD = "+String.valueOf(dblCantidad)+", PRECIO_U = "+String.valueOf(dblPrecioU)+", "; /*Validar el centro de costo, si es una contabilidad, el parametro cuenta de mayor contiene un auxiliar*/ /*de fondos asignados*/ if(((String)session.getAttribute("id_ccosto")).equals((String)session.getAttribute("id_ccosto_ccp"))) { strAuxiliar = strCtaMayor; strCtaMayor = "3.1.02.01"; } //Si la ctaMayor contiene mas de 7 caracteres, indica que no es un auxiliar y mucho menos una ctaMayor //Entonces se espera recibir un string compuesto por una ctaMayor y un auxiliar else if(strCtaMayor.length() > 7) { String [] splits = strCtaMayor.split("-"); strCtaMayor = splits[0]; strAuxiliar = splits[1]; } else { strAuxiliar = "0000000"; } strComando += " ID_CTAMAYOR = '"+strCtaMayor+"', "; strComando += " ID_AUXILIAR = '"+strAuxiliar+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strIDAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = "+strIDAutorizacionDet; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); } //utilizades public int getDia(java.util.Date dtFecha)throws Exception{ java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("dd"); return Integer.parseInt(sdfFormateer.format(dtFecha)); } //utilizades public int getMes(java.util.Date dtFecha)throws Exception{ java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("MM"); return Integer.parseInt(sdfFormateer.format(dtFecha)); } //utilizades public int getAnno(java.util.Date dtFecha)throws Exception{ java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("yy"); return Integer.parseInt(sdfFormateer.format(dtFecha)); } //utilizades public int getDiaActual()throws Exception{ java.util.Date dtFecha = new java.util.Date(); java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("dd"); return Integer.parseInt(sdfFormateer.format(dtFecha)); } //utilizades public int getMesActual()throws Exception{ java.util.Date dtFecha = new java.util.Date(); java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("MM"); return Integer.parseInt(sdfFormateer.format(dtFecha)); } //utilizades public String getAnnoActual()throws Exception{ java.util.Date dtFecha = new java.util.Date(); java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("yy"); return sdfFormateer.format(dtFecha); } //utilizades public String getFechaActual(String strTemp)throws Exception{ java.util.Date dtFecha = new java.util.Date(); java.text.SimpleDateFormat sdfFormateer = new java.text.SimpleDateFormat("dd-MM-yy"); return (sdfFormateer.format(dtFecha)); } public java.sql.Date getFechaActual()throws Exception{ java.util.Date dtFechaAct = new java.util.Date(); java.sql.Date dtFecha = new java.sql.Date(dtFechaAct.getTime()); return dtFecha; } public String getAutorizacionID(String strIDEjercicio)throws Exception{ String strAutorizacionId = ""; String strComando = "SELECT COALESCE(MAX(ID_AUTORIZACION)+1,'9900001') ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND LENGTH(ID_AUTORIZACION) = 7 "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) strAutorizacionId = rst.getString("ID_AUTORIZACION"); rst.close(); stmt.close(); return strAutorizacionId; } public String getAutorizacionIdDet(String strIDEjercicio, String strIDAutorizacion)throws Exception{ String strAutorizacionIdDet = ""; String strComando = "SELECT COALESCE(MAX(ID_AUTORIZACION_DET),0) + 1 ID_AUTORIZACION_DET "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_AUTORIZACION = '"+strIDAutorizacion+"' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) strAutorizacionIdDet = rst.getString("ID_AUTORIZACION_DET"); rst.close(); stmt.close(); return strAutorizacionIdDet; } //se utiliza para cada departamento public PreparedStatement getAutorizacionesEnc(HttpSession session, String strStatus)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = '"+strStatus+"' "; strComando += "ORDER BY ID_AUTORIZACION "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //se utiliza para obtener autorizaciones independientemente del departamento public PreparedStatement getAutorizacionesEncT(HttpSession session, String strStatus)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = '"+strStatus+"' "; strComando += "ORDER BY ID_AUTORIZACION DESC "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //se utiliza para obtener autorizaciones independientemente del departamento public PreparedStatement getAutorizacionesEncTGral(HttpSession session, String strStatus)throws Exception{ String strComando = "SELECT * FROM CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND STATUS = '"+strStatus+"' "; strComando += "ORDER BY ID_AUTORIZACION DESC "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //se utiliza para obtener autorizaciones independientemente del departamento //y validando que el usuario que autoriz? sea distinto al actual public PreparedStatement getAutorizacionesEncTGralUser(HttpSession session, String strStatus)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND STATUS = '"+strStatus+"' "; strComando += "AND USUARIO_AUT_RECH != '"+(String)session.getAttribute("login")+"' "; strComando += "ORDER BY ID_AUTORIZACION DESC "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //se utiliza para una sola autorizacion public PreparedStatement getAutorizacionEnc(HttpSession session, String strAutorizacion)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public PreparedStatement getAutorizacionesDet(HttpSession session, String strAutorizacion, String strStatus)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND STATUS = '"+strStatus+"'"; Statement stmt = conn.createStatement(); PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public PreparedStatement getAutorizacionesDet(HttpSession session, String strAutorizacion)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public Map <String, Double> getImportesTotalContabilizados(HttpSession session)throws Exception{ Map <String, Double> mReturn = new TreeMap <String, Double> (); double dblImporte = 0; String strComando = "SELECT REFERENCIA2, COALESCE(SUM(IMPORTE),0) IMPORTE "; strComando += "FROM MATEO.CONT_MOVIMIENTO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND REFERENCIA2 LIKE '99%' "; strComando += "GROUP BY ID_EJERCICIO, REFERENCIA2 "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); while(rst.next()){ dblImporte = rst.getDouble("importe"); mReturn.put(rst.getString("referencia2"), dblImporte); } stmt.close(); rst.close(); return mReturn; } public double getImporteTotalContabilizado(HttpSession session, String strAutorizacion)throws Exception{ double dblImporte = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) "; strComando += "FROM MATEO.CONT_MOVIMIENTO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND REFERENCIA2 LIKE '99%' "; strComando += "AND REFERENCIA2 = '%"+strAutorizacion+"%'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble(1); stmt.close(); rst.close(); return dblImporte; } public double getImporteTotalAutorizacion(HttpSession session, String strAutorizacion)throws Exception{ double dblImporte = 0; String strComando = "SELECT COALESCE(SUM(CANTIDAD*PRECIO_U),0) "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble(1); stmt.close(); rst.close(); return dblImporte; } public double getImporteTotalAutorizacionPesos(HttpSession session, String strAutorizacion)throws Exception{ double dblImporte = 0; String strComando = "SELECT COALESCE(SUM(CANTIDAD*PRECIO_U),0) "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble(1); stmt.close(); rst.close(); return dblImporte; } public PreparedStatement getAutorizacionDet(HttpSession session, String strAutorizacion, String strAutorizacionDet)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = '"+strAutorizacionDet+"' "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //se utiliza para cada departamento public boolean getAutorizacionesEncBool(HttpSession session, String strStatus)throws Exception{ int intNumReg = 0; String strComando = "SELECT COUNT(*) FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = '"+strStatus+"'"; strComando += "ORDER BY ID_AUTORIZACION "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) intNumReg = rst.getInt(1); rst.close(); stmt.close(); return (intNumReg > 0); } public boolean getAutorizacionesDetBool(HttpSession session, String strAutorizacion, String strStatus)throws Exception{ int intNumReg = 0; String strComando = "SELECT COUNT(*) FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND STATUS = '"+strStatus+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) intNumReg = rst.getInt(1); rst.close(); stmt.close(); return (intNumReg > 0); } public void borraEncabezadoAutorizacion(HttpSession session, String strAutorizacion)throws Exception{ String strComando = "DELETE FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; //en la db es numerico Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void borraDetalleAutorizacion(HttpSession session, String strAutorizacion, String strAutorizacionDet)throws Exception{ String strComando = "DELETE FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = "+strAutorizacionDet; //en la db es numerico Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void cambiaStatus(HttpSession session, String strEjercicio, String strAutorizacion, String strStatusAct, boolean boolAutomatico)throws Exception{ if(boolAutomatico){ if(strStatusAct.equals("A")) strStatusAct = "OK"; else if(strStatusAct.equals("OK")) strStatusAct = "AT"; else if(strStatusAct.equals("AT")) strStatusAct = "R"; else if(strStatusAct.equals("R")) throw new Error("La autorzacion ya ha sido aceptada, no se pueden hacer cambios"); else if(strStatusAct.equals("X")) throw new Error("La autorzacion ya ha sido rechazada"); else throw new Error("Status desconocido"); } String strUsuario = (String)session.getAttribute("login"); String strTabla1 = "UPDATE mateo.CCP_AUTORIZACION "; String strTabla2 = "UPDATE mateo.CCP_AUTORIZACION_DET "; String strComando = "SET STATUS = '"+strStatusAct+"' "; strComando += "WHERE ID_EJERCICIO = '"+strEjercicio+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(strTabla1+strComando); stmt.executeUpdate(strTabla2+strComando); //Actualizar dato de quien confirma if (strStatusAct.equals("OK")) { strComando = "UPDATE CCP_AUTORIZACION "; strComando += "SET USUARIO_CONFIRMA = '"+strUsuario+"', "; strComando += "FECHA_CONFIRMA = SYSDATE "; strComando += "WHERE ID_EJERCICIO = '"+strEjercicio+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; stmt.executeUpdate(strComando); } //Actualizar dato de quien Autoriza else if (strStatusAct.equals("R")) { //Obtener tipo de cambio Double dblTCambio = new Double(0); String COMANDO = "SELECT TIPO_CAMBIO_DLL "; COMANDO += "FROM mateo.CONT_TIPOCAMBIO "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblTCambio = new Double(rset.getDouble("Tipo_Cambio_Dll")); } pstmt.close(); rset.close(); strComando = "UPDATE CCP_AUTORIZACION "; strComando += "SET USUARIO_AUT_RECH = '"+strUsuario+"', "; strComando += "FECHA_AUT_RECH = SYSDATE, "; strComando += "TIPO_CAMBIO_DLL = " + dblTCambio.toString() + " "; strComando += "WHERE ID_EJERCICIO = '"+strEjercicio+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; stmt.executeUpdate(strComando); } //Actualizar dato de quien Autoriza else if (strStatusAct.equals("X")) { strComando = "UPDATE CCP_AUTORIZACION "; strComando += "SET USUARIO_AUT_RECH = '"+strUsuario+"', "; strComando += "FECHA_AUT_RECH = SYSDATE "; strComando += "WHERE ID_EJERCICIO = '"+strEjercicio+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; stmt.executeUpdate(strComando); } stmt.close(); } public double getLimiteAutorizacion() throws SQLException, Exception { //En caso de que no exista ningun registro, se asigna por default //la cantidad de $1500.00 double dblLimite = 1500; String COMANDO = "SELECT COALESCE(LIMITE_AUTORIZACION, 1500) LIMITE "; COMANDO += "FROM mateo.CCP_PARAMGRAL "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblLimite = rset.getDouble("Limite"); } rset.close(); pstmt.close(); return dblLimite; } //funciones para descomprometido //esta funcion se utiliza en un procedimiento comun solo llamando las principales //para descomprometido manual...... public void descomprometerMovimiento(HttpSession session, String strAutorizacion, String strAutorizacionDet, java.sql.Date dtFecha, String strCtaMayor, String strCCosto, String strAuxiliar, double dblImporte, String strDescripcion)throws Exception{ int intDescomprometidoID = 0; String strComando = ""; double dblImportePorDescomprometer = 0; //obtenemos la cantidad que falta por descomprometer dblImportePorDescomprometer = getCantidadPorDescomprometer(session, strAutorizacion, strAutorizacionDet, strCtaMayor, strCCosto, strAuxiliar); //verifcamos si el importe que se est? tratando de insertar es mayoyr que la cantidad disponible if( dblImportePorDescomprometer < dblImporte) throw new Error ("La cantidad es mayor al importe de la autorizacion."); intDescomprometidoID = getDescomprometidoIDNum(); strComando = "INSERT INTO mateo.CCP_DESCOMPROMETIDO(ID_EJERCICIO, ID_AUTORIZACION, ID_AUTORIZACION_DET, ID_DESCOMPROMETIDO, FECHA, "; strComando += "ID_CTAMAYOR_M, ID_CCOSTO_M, ID_AUXILIAR_M, IMPORTE, DESCRIPCION, USUARIO, STATUS) "; strComando += "VALUES('"+(String)session.getAttribute("id_ejercicio")+"', '"+strAutorizacion+"', '"+strAutorizacionDet+"', "+intDescomprometidoID+", "; strComando += "?, '"+strCtaMayor+"', '"+strCCosto+"', '"+strAuxiliar+"', "+dblImporte+", '"+strDescripcion+"', "; strComando += "'"+(String)session.getAttribute("login")+"', 'A')"; PreparedStatement pstmt = conn.prepareStatement(strComando); pstmt.setDate(1,dtFecha); pstmt.execute(); pstmt.close(); if (dblImportePorDescomprometer == dblImporte) //cuando se descompromete por el total, el movimiento pasa a status D cambiaStatusDescomprometerDet(session, strAutorizacion, strAutorizacionDet, "D"); //si ya no existen movimientos comprometidos se cambia el encabezado a status D if(!getDetallesComprometidos(session, strAutorizacion)) cambiaStatusDescomprometerEnc(session, strAutorizacion, "D"); } //comprometer movimiento //comprometido manual public void comprometerMovimiento(HttpSession session, String strAutorizacion, String strAutorizacionDet, String strCtaMayor, String strCCosto, String strAuxiliar)throws Exception{ //obtener datos del detalle de autorizacion //cambiar el status del encabezado a R if(!getDetallesComprometidos(session, strAutorizacion)) //si todos los movimientos estan descomprometidos se cambia el status del encabezado cambiaStatusDescomprometerEnc(session, strAutorizacion, "R"); //cambiar el status del detalle a R cambiaStatusDescomprometerDet(session, strAutorizacion, strAutorizacionDet, "R"); //borrar los registros de CCP_DESCOMPROMETIDO relacionados con la autorizacion y el detalle borrarDescomprometido(session, strAutorizacion, strAutorizacionDet, strCtaMayor, strCCosto, strAuxiliar); } //para el procedimiento manual public void descomprometerEncabezado(HttpSession session, String strAutorizacion, String strDescripcion)throws Exception{ String strAutorizacionDet = ""; String strCtaMayor = ""; String strCCosto = ""; String strAuxiliar = ""; double dblImporte = 0; java.sql.Date dtFecha = getFechaActual(); PreparedStatement pstmt = getAutorizacionesDet(session, strAutorizacion, "R"); ResultSet rst = pstmt.executeQuery(); while(rst.next()){ strAutorizacionDet = rst.getString("ID_AUTORIZACION_DET"); strCtaMayor = rst.getString("ID_CTAMAYOR"); strCCosto = rst.getString("ID_CCosto"); strAuxiliar = rst.getString("ID_AUXILIAR"); dblImporte = getCantidadPorDescomprometer(session, strAutorizacion, strAutorizacionDet, strCtaMayor, strCCosto, strAuxiliar); descomprometerMovimiento(session, strAutorizacion, strAutorizacionDet, dtFecha, strCtaMayor, strCCosto, strAuxiliar, dblImporte, strDescripcion); cambiaStatusDescomprometerDet(session, strAutorizacion, strAutorizacionDet, "D"); } rst.close(); pstmt.close(); cambiaStatusDescomprometerEnc(session, strAutorizacion, "D"); } //para el proceso manual public double getCantidadPorDescomprometer(HttpSession session, String strAutorizacion, String strAutorizacionDet, String strCtaMayor, String strCCosto, String strAuxiliar)throws Exception{ double dblImporte = 0; double dblImporteD = 0; String strComando = "SELECT COALESCE(CANTIDAD * PRECIO_U,0) IMPORTE "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = '"+strAutorizacionDet+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble("IMPORTE"); rst.close(); //ES NECESARIO QUE SE ADICIONE LA COLUMNA DE ID_AUTORIZACIONDET PARA HACER EL CALCULO CORRECTO strComando = "SELECT COALESCE(SUM(IMPORTE),0) FROM CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = '"+strAutorizacionDet+"' "; strComando += "AND ID_CCOSTO_M = '"+strCCosto+"' "; strComando += "AND ID_CTAMAYOR_M = '"+strCtaMayor+"' "; strComando += "AND ID_AUXILIAR_M = '"+strAuxiliar+"'"; rst = stmt.executeQuery(strComando); if(rst.next()) dblImporteD = rst.getDouble(1); rst.close(); stmt.close(); return (dblImporte - dblImporteD); } public String getDescomprometidoID()throws Exception{ String strDescomprometidoID = ""; String strComando = "SELECT COALESCE(MAX(ID_DESCOMPROMETIDO),0) + 1 ID_DESCOMPROMETIDO "; strComando += "FROM mateo.CCP_DESCOMPROMETIDO "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) strDescomprometidoID = rst.getString("ID_DESCOMPROMETIDO"); rst.close(); stmt.close(); return strDescomprometidoID; } public int getDescomprometidoIDNum()throws Exception{ int intDescomprometidoID = 0; String strComando = "SELECT COALESCE(MAX(ID_DESCOMPROMETIDO),0) + 1 ID_DESCOMPROMETIDO "; strComando += "FROM mateo.CCP_DESCOMPROMETIDO "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) intDescomprometidoID = rst.getInt("ID_DESCOMPROMETIDO"); rst.close(); stmt.close(); return intDescomprometidoID; } public void borrarDescomprometido(HttpSession session, String strAutorizacion, String strAutorizacionDet, String strCtaMayor, String strCCosto, String strAuxiliar)throws Exception{ String strComando = "DELETE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = '"+strAutorizacionDet+"' "; strComando += "AND ID_CCOSTO_M = '"+strCCosto+"' "; strComando += "AND ID_CTAMAYOR_M = '"+strCtaMayor+"' "; strComando += "AND ID_AUXILIAR_M = '"+strAuxiliar+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void cambiaStatusDescomprometerDet(HttpSession session, String strAutorizacion, String strAutorizacionDet, String strStatus)throws Exception{ String strComando = "UPDATE mateo.CCP_AUTORIZACION_DET SET STATUS = '"+strStatus+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_AUTORIZACION_DET = '"+strAutorizacionDet+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void cambiaStatusDescomprometerDet(HttpSession session, String strAutorizacion, String strStatus)throws Exception{ String strComando = "UPDATE mateo.CCP_AUTORIZACION_DET SET STATUS = '"+strStatus+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void cambiaStatusDescomprometerDetDP(HttpSession session, String strAutorizacion, String strStatus)throws Exception{ String strComando = "UPDATE mateo.CCP_AUTORIZACION_DET SET STATUS = '"+strStatus+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND STATUS = 'DP' "; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public void cambiaStatusDescomprometerEnc(HttpSession session, String strAutorizacion, String strStatus)throws SQLException, Exception{ String strComando = "UPDATE mateo.CCP_AUTORIZACION SET STATUS = '"+strStatus+"' "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(strComando); stmt.close(); } public boolean getDetallesComprometidos(HttpSession session, String strAutorizacion)throws Exception{ int intRows = 0; String strComando = "SELECT COUNT(*) FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND STATUS = 'R'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) intRows = rst.getInt(1); rst.close(); stmt.close(); return (intRows > 0); } //funciones para descomprometido //para descomprometido contabilidad public void descomprometerMovimiento(HttpSession session, String strIdlibro, String strCCosto, String strFolio, int intNumMov, String strCCostoM, String strCtaMayorM, String strAuxiliarM, double dblImporte, String strAutorizacion, String strDescripcion)throws Exception{ int intDescomprometidoID = 0; String strComando = ""; intDescomprometidoID = getDescomprometidoIDNum(); strComando = "INSERT INTO mateo.CCP_DESCOMPROMETIDO(ID_EJERCICIO, ID_AUTORIZACION, ID_LIBRO, ID_CCOSTO, "; strComando += "FOLIO, NUMMOVTO, ID_DESCOMPROMETIDO, FECHA, ID_CTAMAYOR_M, ID_CCOSTO_M, ID_AUXILIAR_M, "; strComando += "IMPORTE, DESCRIPCION, USUARIO, STATUS) "; strComando += "VALUES(?, ?, ?, ?, ?, ?, ?, to_date(?, 'dd-MM-yy'), ?, ?, ?, ?, ?, ?, 'A')"; //System.out.println("descomprometerMovimiento "+strAutorizacion); PreparedStatement pstmt = conn.prepareStatement(strComando); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strAutorizacion); pstmt.setString(3, strIdlibro); pstmt.setString(4, strCCosto); pstmt.setString(5, strFolio); pstmt.setInt(6, intNumMov); pstmt.setInt(7, intDescomprometidoID); pstmt.setString(8, getFechaActual("")); pstmt.setString(9, strCtaMayorM); pstmt.setString(10, strCCostoM); pstmt.setString(11, strAuxiliarM); pstmt.setDouble(12, dblImporte); pstmt.setString(13, strDescripcion); pstmt.setString(14, (String)session.getAttribute("login")); pstmt.execute(); pstmt.close(); } //comprometer movimiento //para contabilidad public void comprometerMovimiento(HttpSession session, String strIdlibro, String strCCosto, String strFolio, String strAutorizacion)throws Exception{ //obtener datos del detalle de autorizacion //cambiar el status del encabezado a R if(!getDetallesComprometidos(session, strAutorizacion)) //si todos los movimientos estan descomprometidos se cambia el status del encabezado cambiaStatusDescomprometerEnc(session, strAutorizacion, "R"); //cambiar el status del detalle a R //cambiaStatusDescomprometerDet(session, strAutorizacion, strAutorizacionDet, "R"); //borrar los registros de CCP_DESCOMPROMETIDO relacionados con la autorizacion y el detalle //borrarDescomprometido(session, strAutorizacion, strAutorizacionDet, strCtaMayor, strCCosto, strAuxiliar); } //se llama a la funcion getDatosMovimiento contenida en poliza/metodos.jsp public void descomprometeMovimientosPoliza(HttpSession session, String strLibro, String strCCosto, String strFolio, String strDescripcion)throws Exception{ double dblImporteMovimiento = 0; double dblCantidadPorDescomprometer = 0; int intNumMov = 0; String strReferencias = ""; //se hace provision para el caso de mas de una autorizacion de control String strReferencia = ""; //para una autorizacion de control String strCCostoM = ""; String strCtaMayorM = ""; String strAuxiliarM = ""; PreparedStatement pstmt = metsPoliza.getDatosMovimiento((String)session.getAttribute("id_ejercicio"), strLibro, strCCosto, strFolio); ResultSet rst = pstmt.executeQuery(); while(rst.next()){ int intNumReferencias = 0; dblCantidadPorDescomprometer = 0; strCCostoM = rst.getString("ID_CCOSTOM"); //ponerle a ccosto strCtaMayorM = rst.getString("ID_CTAMAYORM"); //ponerle lo necesario strAuxiliarM = rst.getString("ID_AUXILIARM"); //lo necesario strReferencias = rst.getString("REFERENCIA"); dblImporteMovimiento = rst.getDouble("IMPORTE"); intNumMov = rst.getInt("NUMMOVTO"); java.util.StringTokenizer strtReferencias = new java.util.StringTokenizer(strReferencias, ","); intNumReferencias = strtReferencias.countTokens(); //si no hay tokens verificamos que la referncia solo contega un elemento if(intNumReferencias == 0){ strReferencias.trim(); if(strReferencias.length() > 0) intNumReferencias = 1; } //verificar que no este vacio el campo if(intNumReferencias > 0){ //si es una sola referencia if(intNumReferencias == 1){//verificacion de caso "una referencia" strReferencia = strReferencias; if(esAutorizacionValida(session, strReferencia)){//checar que la referencia sea una autorizacion de control //verificar si existe la cuenta del movimiento en la tabla de autorizaciones if(existeCuenta(session, strReferencia, strCCostoM, strCtaMayorM, strAuxiliarM)){ //se procede a verificar si el importe del movimiento //no sobrepasa lo que falta por descomprometer del detalle de la autorizacion dblCantidadPorDescomprometer = getCantidadPorDescomprometer(session, strReferencia, strCtaMayorM, strCCostoM, strAuxiliarM); if(dblCantidadPorDescomprometer < dblImporteMovimiento) throw new Error("el importe del movimiento es mayor"); //falta poner todos los datos //si todo va bien se descompromete la autorizacion descomprometerMovimiento(session, strLibro, strCCosto, strFolio, intNumMov, strCCostoM, strCtaMayorM, strAuxiliarM, dblImporteMovimiento, strReferencia, strDescripcion); } else{ //si no se encuentra la cuenta se verifica si el importe del movimiento no //sobrepasa lo que falta por descomprometer del total de la autorizacion dblCantidadPorDescomprometer = getCantidadPorDescomprometer(session, strReferencia, "", "", ""); if(dblCantidadPorDescomprometer < dblImporteMovimiento) throw new Error("el del movimiento es mayor"); //falta poner todos los datos //si todo va bien se descompromete la autorizacion descomprometerMovimiento(session, strLibro, strCCosto, strFolio, intNumMov, strCCostoM, strCtaMayorM, strAuxiliarM, dblImporteMovimiento, strReferencia, strDescripcion); } }//fin if checar autorizacion }//fin if verificacion de caso "una referencia" else{//caso multiples referencias double dblImporteTotal = 0; double dblImporteReferencia = 0; //utilizamos un vector para almacener temporalmente las autorizaciones //porque el objeto StringTokenizer no es rebobinable //se utilizan dos vectores uno para cada autorizacion y su importe //el otro para almacenar los vectores individuales java.util.Vector vctReferencias = new java.util.Vector(); for(int i = 0; i < intNumReferencias; i++){ java.util.Vector vctReferencia = new java.util.Vector(); strReferencia = strtReferencias.nextToken(); if(esAutorizacionValida(session, strReferencia)){//checar que la referencia sea una autorizacion de control //sumar cantidad de todos los controles if(existeCuenta(session, strReferencia, strCCostoM, strCtaMayorM, strAuxiliarM)) dblImporteReferencia = getCantidadPorDescomprometer(session, strReferencia, strCtaMayorM, strCCostoM, strAuxiliarM); else dblImporteReferencia = getCantidadPorDescomprometer(session, strReferencia, "", "", ""); dblImporteTotal += dblImporteReferencia; //se adiciona la autorizacion al objeto temporal vctReferencia.add(strReferencia); vctReferencia.add(new Double(dblImporteReferencia)); vctReferencias.add(vctReferencia); }//fin if checar autorizacion }//fin for //aqui se debe verificar que la suma de lso importes de las autorizaciones no sobrepasen //al importe de movimiento if(dblImporteMovimiento < dblImporteTotal) throw new Error("detalles de la poliza y movimientos"); //aqui se utiliza el vector java.util.Vector vctReferencia = new java.util.Vector(); for(int i = 0; i < vctReferencias.size(); i++){ vctReferencia = (java.util.Vector)vctReferencias.get(i); strReferencia = (String)vctReferencia.get(0); dblImporteReferencia = ((Double)vctReferencia.get(1)).doubleValue(); //si no han habido problemas proceder a descomprometer el movimiento descomprometerMovimiento(session, strLibro, strCCosto, strFolio, intNumMov, strCCostoM, strCtaMayorM, strAuxiliarM, dblImporteReferencia, strReferencia, strDescripcion); }//fin segundo for }//fin else para multiples referencias }//fin if de verificacion de existencia de datos }//fin while } //se utiliza esta funcion para obtener el importe que falta por descomprometer con respecto a la autorizacion //esta funcion no esta ligada al id_autorizacion_det acumula por autorizacion y por cuenta public double getCantidadPorDescomprometer(HttpSession session, String strAutorizacion, String strCtaMayor, String strCCosto, String strAuxiliar)throws Exception{ double dblImporte = 0; double dblImporteD = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; if(!strCCosto.equals("") && !strCtaMayor.equals("") && strAuxiliar.equals("")){ strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND ID_CTAMAYOR = '"+strCtaMayor+"' "; strComando += "AND ID_AUXILIAR = '"+strAuxiliar+"'"; } Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble("IMPORTE"); //ES NECESARIO QUE SE ADICIONE LA COLUMNA DE ID_AUTORIZACIONDET PARA HACER EL CALCULO CORRECTO strComando = "SELECT COALESCE(SUM(IMPORTE),0) FROM CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; if(!strCCosto.equals("") && !strCtaMayor.equals("") && strAuxiliar.equals("")){ strComando += "AND ID_CCOSTO_M = '"+strCCosto+"' "; strComando += "AND ID_CTAMAYOR_M = '"+strCtaMayor+"' "; strComando += "AND ID_AUXILIAR_M = '"+strAuxiliar+"'"; } rst = stmt.executeQuery(strComando); if(rst.next()) dblImporteD = rst.getDouble(1); return (dblImporte - dblImporteD); } public boolean esAutorizacionValida(HttpSession session, String strAutorizacion)throws Exception{ boolean boolEsAutorizacionValida = false; int intMedidaString = strAutorizacion.length(); //debe ser 6 String strSubstring = strAutorizacion.substring(0, 2); //se verifica que cuente con las dos pricipales condiciones //que mida 6 caracteres y que empieze con "99" //validamos que empieze con "99" if(strSubstring.equals("99")){ if(intMedidaString == 6){ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) boolEsAutorizacionValida = true; rst.close(); stmt.close(); } else throw new Error("hey que poner descripcion de error"); } return boolEsAutorizacionValida; } //se verifica la existencia de la cuenta en la tabla CCP_AUTORIZACION_DET //nota: se toma por hecho que previamente se ha llamado a la funcion "esAutorizacionValida(session, strAutorizacion)" //para validar la autorizacion public boolean existeCuenta(HttpSession session, String strAutorizacion, String strCCosto, String strCtaMayor, String strAuxiliar)throws Exception{ boolean boolExisteCuenta = false; String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND ID_CTAMAYOR = '"+strCtaMayor+"' "; strComando += "AND ID_AUXILIAR = '"+strAuxiliar+"'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) boolExisteCuenta = true; rst.close(); stmt.close(); return boolExisteCuenta; } //METODOS UTILIZADOS EN LOS REPORTES DE PRESUPUESTO //POR BLOQUES public ResultSet getCuentasConPresupuestoOperativo(String strIDEjercicio, String strCCosto)throws Exception{ String sSql = "SELECT NOMBRE, ID_CTAMAYOR, AUXILIAR "; sSql += "FROM mateo.CONT_CTAMAYOR "; sSql += "WHERE ID_EJERCICIO = ? "; sSql += "AND ID_CTAMAYOR IN "; sSql += "(SELECT ID_CTAMAYOR "; sSql += "FROM mateo.CONT_RELACION "; sSql += "WHERE ID_EJERCICIO = ? "; sSql += "AND ID_CCOSTO = ?) "; sSql += "AND (ID_CTAMAYOR like '2.4%' "; sSql += "OR ID_CTAMAYOR like '2.5%') "; sSql += "AND DETALLE = 'S' "; sSql += "ORDER BY TIPO_CUENTA, ID_CTAMAYOR"; PreparedStatement pstmt = conn.prepareStatement(sSql); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strCCosto); return (pstmt.executeQuery()); } public double getPresupuestoRangoMeses(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, int intMesIni, int intMesFin) throws Exception{ double dblCantidad = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND MES >= "+intMesIni+" "; strComando += "AND MES <= "+intMesFin; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return dblCantidad; } public double getGastos(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strFechaInicial, String strFechaFinal)throws Exception{ double dblCredito = 0; double dblCargo = 0; dblCargo = metsPoliza.getTotalCargos(strIDEjercicio, strIDCtaMayor, strIDCcosto, "0000000", strFechaInicial, strFechaFinal); dblCredito = metsPoliza.getTotalCreditos(strIDEjercicio, strIDCtaMayor, strIDCcosto, "0000000", strFechaInicial, strFechaFinal); return (dblCargo - dblCredito); } //REPORTES public PreparedStatement getEntidadesConPresupuesto(HttpSession session)throws Exception{ String strComando = "SELECT DISTINCT(C.ID_CCOSTO),C.NOMBRE "; strComando += "FROM mateo.CONT_CCOSTO C, mateo.CCP_PRESUPUESTO P "; strComando += "WHERE P.ID_CCOSTO = C.ID_CCOSTO "; strComando += "AND P.ID_EJERCICIO = C.ID_EJERCICIO "; strComando += "AND C.ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND C.DETALLE = 'S'"; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public double getCuentasImporteAcumulado(HttpSession session, String strCCosto, int intMedidaSubstr, String strPatronInicial, String strPatronFinal)throws Exception{//acumulado por tipos double dblCantidad = 0; String strComando = "SELECT P.ID_EJERCICIO, COALESCE(SUM(P.IMPORTE),0) "; strComando += "FROM mateo.CCP_PRESUPUESTO P, mateo.CONT_CTAMAYOR M "; strComando += "WHERE P.ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND M.TIPO_CUENTA = 'R' "; strComando += "AND M.DETALLE = 'S' "; strComando += "AND M.ID_CTAMAYOR = P.ID_CTAMAYOR "; strComando += "AND P.ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND SUBSTR(M.ID_CTAMAYOR,0,"+intMedidaSubstr+") BETWEEN '"+strPatronInicial+"' AND '"+strPatronFinal+"' "; strComando += "AND M.ID_EJERCICIO = P.ID_EJERCICIO "; strComando += "GROUP BY P.ID_EJERCICIO"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblCantidad = rst.getDouble(2); rst.close(); stmt.close(); return dblCantidad; } public double getCuentasImporteAcumulado(HttpSession session, String strCCosto, int intMedidaSubstr, String strPatronInicial, String strPatronFinal, String strMesI, String strMesF)throws Exception{//acumulado por tipos double dblCantidad = 0; String strComando = "SELECT P.ID_EJERCICIO, COALESCE(SUM(P.IMPORTE),0) "; strComando += "FROM mateo.CCP_PRESUPUESTO P, mateo.CONT_CTAMAYOR M "; strComando += "WHERE P.ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND M.TIPO_CUENTA = 'R' "; strComando += "AND M.DETALLE = 'S' "; strComando += "AND M.ID_CTAMAYOR = P.ID_CTAMAYOR "; strComando += "AND P.ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND SUBSTR(M.ID_CTAMAYOR,0,"+intMedidaSubstr+") BETWEEN '"+strPatronInicial+"' AND '"+strPatronFinal+"' "; strComando += "AND M.ID_EJERCICIO = P.ID_EJERCICIO "; strComando += "AND P.MES BETWEEN '"+strMesI+"' AND '"+strMesF+"' "; strComando += "GROUP BY P.ID_EJERCICIO"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblCantidad = rst.getDouble(2); rst.close(); stmt.close(); return dblCantidad; } public PreparedStatement getPresupuesto(String strIDEjercicio, String strCCosto, String mes1, String mes2) throws Exception{ String strComando = "select id_ccosto, ID_CTAMAYOR, id_auxiliar, COALESCE(sum(importe),0) IMPORTE from MATEO.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND MES BETWEEN '"+mes1+"' AND '"+mes2+"' "; strComando += "group by ID_CCOSTO, ID_CTAMAYOR, id_auxiliar "; strComando += "HAVING ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND (ID_CTAMAYOR LIKE '2.4.%' "; strComando += "OR ID_CTAMAYOR LIKE '2.5.%' "; strComando += "OR ID_CTAMAYOR IN ('2.3.18') "; //09-jul-2012 - El CP Arturo Sebastian, solicito que ahora todas las escuelas de FACSA muestren estas cuentas strComando += "OR (ID_CTAMAYOR =any ('2.3.18','2.3.19','2.3.20') AND ID_CCOSTO like ('1.01.2.03%'))) "; //strComando += "OR (ID_CTAMAYOR IN ('2.3.19','2.3.20') AND ID_CCOSTO = '1.01.2.03.01')) "; strComando += "ORDER BY ID_CTAMAYOR"; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public double getGastosMesActual(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String auxiliarId, String strFechaInicial, String strFechaFinal) throws Exception{ double dblCantidad = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE*CASE NATURALEZA WHEN 'C' THEN -1 ELSE 1 END),0) IMPORTE "; strComando += "FROM MATEO.CONT_MOVIMIENTO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTOM = '"+strIDCcosto+"' "; strComando += "AND ID_CTAMAYORM = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUXILIARM = '"+auxiliarId+"' "; strComando += "AND FECHA BETWEEN to_date('"+strFechaInicial+"', 'dd/mm/yy') AND to_date('"+strFechaFinal+"', 'dd/mm/yy') "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); while(rst.next()){ dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); //System.out.println("GastosMesActual "+strIDEjercicio+"@"+strIDCtaMayor+"@"+strIDCcosto+"@"+strFechaInicial+"@"+strFechaFinal+"@"+dblCantidad); return dblCantidad; } public double getComprometido(String strIDEjercicio, String strIDCtaMayor, String strIDCcosto, String strFechaFinal)throws Exception{ double dblCantidadComprometida = 0, dblCantidadDesComprometida = 0; String strComando = "SELECT COALESCE(SUM(PRECIO_U * CANTIDAD),0) AS IMPORTE "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND FECHA <= to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += ") "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadComprometida = rst.getDouble("IMPORTE"); } rst.close(); strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND FECHA <= to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CTAMAYOR = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjercicio+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND FECHA <= to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += ") "; strComando += ") "; strComando += "AND STATUS = 'A' "; rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidadDesComprometida = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return (dblCantidadComprometida - dblCantidadDesComprometida ); } public PreparedStatement getCComprometido(String strIDEjer, String strCCosto, String strFechai, String strFechaf)throws Exception{ String strComando = "SELECT ID_AUTORIZACION, FECHA, NO_DOC, CLAVEEMPLEADO, PROVEEDOR, SERVICIO, USUARIO FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND FECHA BETWEEN TO_DATE('"+strFechai+"','dd/MM/yyyy') AND TO_DATE('"+strFechaf+"','dd/MM/yyyy') "; strComando += "AND STATUS = 'R'"; PreparedStatement stmt = conn.prepareStatement(strComando); return stmt; } public PreparedStatement getCComprometidoDet(String strIDEjer, String strCCosto, String auxiliarId, String strAutorizacion)throws Exception { String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND ID_AUXILIAR = '"+auxiliarId+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; // strComando += "AND STATUS = 'R' "; PreparedStatement stmt = conn.prepareStatement(strComando,ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); return stmt; } public PreparedStatement getAutorizacionesDetP(String strAutorizacion, String strStatus, String strIDEjer, String strCCosto)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND STATUS = '"+strStatus+"'"; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public PreparedStatement getCComprometido(String strStatus, String strIDEjer, String strCCosto)throws Exception{ String strComando = "SELECT * FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND STATUS = '"+strStatus+"'"; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //M?todos para el descomprometido autom?tico public void ccpDescomprometerAut ( String strIDLibro, String strFolio, Integer intNumMovto, String strFecha, String strCtaMayorM, String strCCostoM, String strAuxiliarM, Double dblImporte, String strDescripcion, String strReferencia, HttpSession session ) throws SQLException, Exception { //El parametro autorizacion, puede contener varios numeros de control separados por comas //El centro de costo (contabilidad) y el a?o contable, se encuentran en la session //Los parametros terminados en M, contienen la cuenta contable afectada //Desmembrar autorizaciones java.util.StringTokenizer strTkn = new java.util.StringTokenizer(strReferencia, ","); //Vector para guardar folios java.util.Vector vctAutorizacion = new java.util.Vector(); Integer intTkn = new Integer(strTkn.countTokens()); while(strTkn.hasMoreTokens()) { vctAutorizacion.add(strTkn.nextToken()); } //Validar que cada una de las autorizaciones sea v?lida if (!ccpsonAutorizacionesValidas(vctAutorizacion, session)) { throw new Exception("Folios de ?rdenes de compra/servicio no son v?lidos"); } //Validar que sumatoria de controles sea menor o igual que importe //Obtener saldo autorizado de todos los controles Double dblAutorizacion = ccpgetSumatoriaAutorizacion(vctAutorizacion, session); //Obtener saldo descomprometido de todos los controles Double dblAutorizacionD = ccpgetSumatoriaAutorizacionD(vctAutorizacion, session); //Saldo disponible en las autorizaciones //Al saldo le sumamos el limite de sobregiro multiplicado por el numero de controles Double dblSaldo = new Double(dblAutorizacion.doubleValue() - dblAutorizacionD.doubleValue() + (ccpgetLimiteSobregiro().doubleValue() * intTkn.doubleValue())); //System.out.println(dblSaldo+", "+dblAutorizacion+", "+dblAutorizacionD+", "+ccpgetLimiteSobregiro()+", "+intTkn); if (dblSaldo.compareTo(dblImporte) < 0) { throw new Exception("Importe gastado"+dblImporte+" es mayor que importe autorizado "+dblSaldo); } //Grabar movimientos en CCP_DESCOMPROMETIDO ccpDescomprometidoAlta(strIDLibro, strFolio, intNumMovto, strFecha, strCtaMayorM, strCCostoM, strAuxiliarM, dblImporte, strDescripcion, vctAutorizacion, session); } public boolean ccpsonAutorizacionesValidas ( java.util.Vector vctAutorizacion, HttpSession session ) throws SQLException, Exception { java.util.Enumeration enAutorizacion = vctAutorizacion.elements(); while (enAutorizacion.hasMoreElements()) { Integer intAutorizacion = new Integer(0); String strAutorizacion = ((String)enAutorizacion.nextElement()).trim(); String COMANDO = "SELECT COUNT(*) AUTORIZACION "; COMANDO += "FROM mateo.CCP_AUTORIZACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_AUTORIZACION = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strAutorizacion); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intAutorizacion = new Integer(rset.getInt("Autorizacion")); } pstmt.close(); rset.close(); if (intAutorizacion.compareTo(new Integer(0)) == 0) { throw new Exception("Autorizacion "+strAutorizacion+" no es v?lida!"); } } return true; } public Double ccpgetSumatoriaAutorizacion ( java.util.Vector vctAutorizacion, HttpSession session ) throws SQLException, Exception { java.util.Enumeration enAutorizacion = vctAutorizacion.elements(); Double dblTotal = new Double(0); while(enAutorizacion.hasMoreElements()) { String strAutorizacion = ((String)enAutorizacion.nextElement()).trim(); dblTotal = new Double(dblTotal.doubleValue() + getImporteTotalAutorizacionPesos(session, strAutorizacion)); } return dblTotal; } //Obtiene sumatoria de movimientos descomprometidos public Double ccpgetSumatoriaAutorizacionD ( java.util.Vector vctAutorizacion, HttpSession session ) throws SQLException, Exception { java.util.Enumeration enAutorizacion = vctAutorizacion.elements(); Double dblTotal = new Double(0); while(enAutorizacion.hasMoreElements()) { String strAutorizacion = ((String)enAutorizacion.nextElement()).trim(); dblTotal = new Double(dblTotal.doubleValue() + getImporteTotalAutorizacionD(session, strAutorizacion)); } return dblTotal; } //Obtiene saldo descomprometido en una autorizacion public double getImporteTotalAutorizacionD ( HttpSession session, String strAutorizacion )throws SQLException, Exception { double dblImporte = 0; String strComando = "SELECT COALESCE(SUM(CANTIDAD*PRECIO_U),0) "; strComando += "FROM mateo.CCP_AUTORIZACION_DET "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacion+"'"; strComando += "AND SUBSTR(STATUS,1,1) = 'D' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) dblImporte = rst.getDouble(1); stmt.close(); rst.close(); return dblImporte; } public void ccpDescomprometidoAlta ( String strIDLibro, String strFolio, Integer intNumMovto, String strFecha, String strCtaMayorM, String strCCostoM, String strAuxiliarM, Double dblImporte, String strDescripcion, java.util.Vector vctAutorizacion, HttpSession session ) throws SQLException, Exception { //No tenemos ninguna preferencia por folio alguno, as? que los leemos en el orden //en que se encuentran en el vector java.util.Enumeration enAutorizacion = vctAutorizacion.elements(); while(enAutorizacion.hasMoreElements() && dblImporte.compareTo(new Double(0)) >= 0) { String strAutorizacion = ((String)enAutorizacion.nextElement()).trim(); //Obtener saldo disponible en autorizacion Double dblTotal = new Double(getImporteTotalAutorizacion(session, strAutorizacion)); Double dblTotalD = new Double(getImporteTotalAutorizacionD(session, strAutorizacion)); //Al saldo se le suma el limite de sobregiro Double dblSaldo = new Double(dblTotal.doubleValue() - dblTotalD.doubleValue() + ccpgetLimiteSobregiro().doubleValue()); //Evaluar qu? cantidad se descomprometer? en autorizacion //Si el gasto es menor que el saldo de la orden autorizada if (dblSaldo.compareTo(dblImporte) >= 0) { dblSaldo = new Double(dblImporte.doubleValue()); dblImporte = new Double(-1); } //Si el gasto es mayor que la orden autorizada else if (dblSaldo.compareTo(dblImporte) < 0) { //Restamos al gasto el importe descomprometido dblImporte = new Double(dblImporte.doubleValue() - dblSaldo.doubleValue()); } //Generar registro en descomprometido String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); //Aqu? se utiliza la variable id_ccosto y no id_ccosto_ccp //para obtener el dato del capturista de la poliza String strIDCCosto = (String)session.getAttribute("id_ccosto"); descomprometerMovimiento(session, strIDLibro, strIDCCosto, strFolio, intNumMovto.intValue(), strCCostoM, strCtaMayorM, strAuxiliarM, dblSaldo.doubleValue(), strAutorizacion, strDescripcion); //Obtener saldo disponible en autorizacion dblSaldo = new Double(dblTotal.doubleValue() - dblTotalD.doubleValue() - dblSaldo.doubleValue()); //Si el saldo es mayor que cero, no se hace nada //Si el saldo es igual a cero, se descompromete //Si el saldo es menor que cero, indica que el gasto fue mayor que lo autorizado. En tal caso, //la diferencia no debe de ser mayor que el parametro limite de sobregiro if (dblSaldo.compareTo(new Double(0)) == 0) { //Modificamos el status del encabezado cambiaStatusDescomprometerEnc(session, strAutorizacion, "D"); //Modificamos el status del detalle, indicando la P que se modifico desde polizas cambiaStatusDescomprometerDet(session, strAutorizacion, "DP"); } //Si el saldo es negativo y la suma del saldo y el limite de sobregiro es positivo, //se descompromete. else if (dblSaldo.compareTo(new Double(0)) < 0 && new Double(ccpgetLimiteSobregiro().doubleValue() + dblSaldo.doubleValue()).compareTo(new Double(0)) >= 0) { //Modificamos el status del encabezado cambiaStatusDescomprometerEnc(session, strAutorizacion, "D"); //Modificamos el status del detalle, indicando la P que se modifico desde polizas cambiaStatusDescomprometerDet(session, strAutorizacion, "DP"); } } } public void ccpDescomprometerBorraAut ( String strIDLibro, String strFolio, Integer intNumMovto, HttpSession session ) throws SQLException, Exception { String strAutorizacion = ""; //Obtener folio de autorizacion String COMANDO = "SELECT ID_AUTORIZACION "; COMANDO += "FROM mateo.CCP_DESCOMPROMETIDO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strIDLibro); //Aqu? se utiliza la variable id_ccosto y no id_ccosto_ccp, //para utilizar la contabilidad del capturista de la poliza pstmt.setString(3, (String)session.getAttribute("id_ccosto")); pstmt.setString(4, strFolio); pstmt.setInt(5, intNumMovto.intValue()); ResultSet rset = pstmt.executeQuery(); while (rset.next()) { strAutorizacion = rset.getString("ID_Autorizacion"); //Borrar movimiento de descomprometido COMANDO = "UPDATE mateo.CCP_DESCOMPROMETIDO "; COMANDO += "SET DESCRIPCION = 'CANCELADO POR ' || ? || 'EN ' || TO_CHAR(SYSDATE,'DD/MM/YY'), "; COMANDO += "IMPORTE = 0, STATUS = 'I' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ? "; COMANDO += "AND STATUS = 'A' "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); pstmt.setString(2, (String)session.getAttribute("id_ejercicio")); pstmt.setString(3, strIDLibro); //Aqu? se utiliza id_ccosto y no id_ccosto_ccp, //para obtener la contabilidad del capturista pstmt.setString(4, (String)session.getAttribute("id_ccosto")); pstmt.setString(5, strFolio); pstmt.setInt(6, intNumMovto.intValue()); pstmt.execute(); pstmt.close(); //Modificar el status de la autorizacion a R, ya que si ten?a D indicando //que ya estaba totalmente descomprometida, ahora se desajusto cambiaStatusDescomprometerEnc(session, strAutorizacion, "R"); cambiaStatusDescomprometerDetDP(session, strAutorizacion, "R"); } pstmt.close(); rset.close(); } public Double ccpgetLimiteSobregiro() throws SQLException { Double dblLimiteSobregiro = new Double(0); String COMANDO = "SELECT LIMITE_SOBREGIRO "; COMANDO += "FROM mateo.CCP_PARAMGRAL "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblLimiteSobregiro = new Double(rset.getDouble("Limite_Sobregiro")); } pstmt.close(); rset.close(); return dblLimiteSobregiro; } //Metodo que regresa los centros de costo a los que tiene acceso un empleado public PreparedStatement ccpgetCCostosEmp ( HttpSession session ) throws SQLException, Exception { String strComando = "SELECT ID_EJERCICIO, ID_CCOSTO FROM mateo.CCP_EMPLEADO_CCOSTO "; strComando += "WHERE CLAVEEMPLEADO IN "; strComando += "(SELECT CODIGO_PERSONAL FROM NOE.DATOS_PERSONALES "; strComando += " WHERE LOGIN = '"+((String)session.getAttribute("login")).toUpperCase()+"')"; strComando += " AND ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public PreparedStatement getCComprometidoDet(String strIDEjer, String strCCosto, String strIDAutorizacion, String strFechai, String strFechaf)throws Exception { String strComando = "SELECT D.ID_AUTORIZACION, D.ID_CTAMAYOR, D.ID_CCOSTO, D.CANTIDAD, D.DESCRIPCION, D.PRECIO_U, D.STATUS, A.FECHA, A.NO_DOC, A.PROVEEDOR "; strComando += "FROM mateo.CCP_AUTORIZACION_DET D, mateo.ccp_autorizacion A "; strComando += "WHERE A.ID_EJERCICIO = D.ID_EJERCICIO "; strComando += "AND A.ID_AUTORIZACION = D.ID_AUTORIZACION "; strComando += "AND D.ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND D.ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND A.ID_AUTORIZACION = '"+strIDAutorizacion+"' "; strComando += "AND A.FECHA BETWEEN TO_DATE('"+strFechai+"', 'DD/MM/YYYY') AND TO_DATE('"+strFechaf+"', 'DD/MM/YYYY') "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } public double getCDescomprometido(String strIDEjer, String strCCosto, String strFechai, String strFechaf)throws Exception { double dblCantidad=0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) as IMPORTE "; strComando += "from MATEO.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+strIDEjer+"' "; strComando += "AND ID_CCOSTO = '"+strCCosto+"' "; strComando += "AND FECHA BETWEEN TO_DATE('"+strFechai+"', 'DD/MM/YYYY') AND TO_DATE('"+strFechaf+"', 'DD/MM/YYYY') "; strComando += "AND STATUS = 'A'"; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()){ dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return dblCantidad; } //Obtiene autorizaciones descomprometidas parcialmente public PreparedStatement ccpgetAutorizacionesDP ( HttpSession session, String strFechaInicial, String strFechaFinal )throws SQLException, Exception { String strComando = "SELECT * "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = 'R' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND FECHA BETWEEN to_date('"+strFechaInicial+"', 'dd/mm/yy') "; strComando += "AND to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += "AND STATUS = 'A' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = 'R' "; strComando += ") "; strComando += ") "; strComando += " ORDER BY ID_AUTORIZACION "; PreparedStatement pstmt = conn.prepareStatement(strComando); return pstmt; } //Obtiene autorizaciones sin importe alguno descomprometido public PreparedStatement ccpgetAutorizacionesNoDP ( HttpSession session, String strFechaInicial, String strFechaFinal, String strStatus )throws SQLException, Exception { PreparedStatement pstmt = null; //Si se quieren las ordenes autorizadas, entonces se tiene que validar //que no tengan descomprometido ning?n impote. //O si se quieren ordenes autorizadas no por el usuario actual if (strStatus.equals("R") || strStatus.equals("NU")) { String strComando = "SELECT * "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = 'R' "; //Si quieren ordenes autorizadas no por el usuario actual if (strStatus.equals("NU")) { strComando += "AND USUARIO_AUT_RECH != '"+(String)session.getAttribute("login")+"' "; } strComando += "AND ID_AUTORIZACION NOT IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND FECHA BETWEEN to_date('"+strFechaInicial+"', 'dd/mm/yy') "; strComando += "AND to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += "AND STATUS = 'A' "; strComando += "AND ID_AUTORIZACION IN "; strComando += "( "; strComando += "SELECT ID_AUTORIZACION "; strComando += "FROM mateo.CCP_AUTORIZACION "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+(String)session.getAttribute("id_ccosto_ccp")+"' "; strComando += "AND STATUS = 'R' "; //Si quieren ordenes autorizadas no por el usuario actual if (strStatus.equals("NU")) { strComando += "AND USUARIO_AUT_RECH != '"+(String)session.getAttribute("login")+"' "; } strComando += ") "; strComando += ") "; strComando += " ORDER BY ID_AUTORIZACION "; pstmt = conn.prepareStatement(strComando); } else { pstmt = getAutorizacionesEnc(session, strStatus); } return pstmt; } public Map <String, Double> ccpgetDescomprometidoAutomatico(HttpSession session) throws SQLException { double dblComprometido = 0; Map<String, Double> mReturn = new TreeMap <String, Double> (); String strComando = "SELECT ID_AUTORIZACION, COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND STATUS = 'A' "; strComando += "AND FOLIO IS NOT NULL "; strComando += "GROUP BY ID_AUTORIZACION "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); while(rst.next()) { dblComprometido = rst.getDouble("Importe"); mReturn.put(rst.getString("id_autorizacion"), dblComprometido); } stmt.close(); rst.close(); return mReturn; } public Map <String, Double> ccpgetDescomprometidoManual(HttpSession session) throws SQLException { double dblComprometido = 0; Map<String, Double> mReturn = new TreeMap <String, Double> (); String strComando = "SELECT ID_AUTORIZACION, COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND STATUS = 'A' "; strComando += "AND FOLIO IS NULL "; strComando += "GROUP BY ID_AUTORIZACION "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); while(rst.next()) { dblComprometido = rst.getDouble("Importe"); mReturn.put(rst.getString("id_autorizacion"), dblComprometido); } stmt.close(); rst.close(); return mReturn; } public double ccpgetDescomprometido(HttpSession session, String strAutorizacionID) throws SQLException { double dblComprometido = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND STATUS = 'A' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacionID+"' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) { dblComprometido = rst.getDouble("Importe"); } stmt.close(); rst.close(); return dblComprometido; } public double ccpgetDescomprometido(HttpSession session, String strAutorizacionID, String strFechaInicial, String strFechaFinal) throws SQLException { double dblComprometido = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND FECHA BETWEEN to_date('"+strFechaInicial+"', 'dd/mm/yy') "; strComando += "AND to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += "AND STATUS = 'A' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacionID+"' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) { dblComprometido = rst.getDouble("Importe"); } stmt.close(); rst.close(); return dblComprometido; } public double ccpgetDescomprometido(HttpSession session, String strAutorizacionID, String strIDCtaMayor, String auxiliarId, String strFechaInicial, String strFechaFinal) throws SQLException { double dblComprometido = 0; String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_DESCOMPROMETIDO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND FECHA BETWEEN to_date('"+strFechaInicial+"', 'dd/mm/yy') "; strComando += "AND to_date('"+strFechaFinal+"', 'dd/mm/yy') "; strComando += "AND STATUS = 'A' "; strComando += "AND ID_AUTORIZACION = '"+strAutorizacionID+"' "; strComando += "AND ID_CTAMAYOR_M = '"+strIDCtaMayor+"' "; strComando += "AND ID_AUXILIAR_M = '"+auxiliarId+"' "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) { dblComprometido = rst.getDouble("Importe"); } stmt.close(); rst.close(); stmt = null; rst = null; return dblComprometido; } //Funciones para obtener el presupuesto total de un departamento //Para obtener el presupuesto acumulado, se utiliza la funcion public double ccgetPresupuestoCC ( String strIDCcosto, HttpSession session ) throws Exception { double dblCantidad = 0; java.util.Calendar gcHoy = new java.util.GregorianCalendar(); gcHoy.setTime(new java.util.Date()); String strComando = "SELECT COALESCE(SUM(IMPORTE),0) AS IMPORTE FROM mateo.CCP_PRESUPUESTO "; strComando += "WHERE ID_EJERCICIO = '"+(String)session.getAttribute("id_ejercicio")+"' "; strComando += "AND ID_CCOSTO = '"+strIDCcosto+"' "; strComando += "AND MES <= "+String.valueOf(gcHoy.get(java.util.Calendar.MONTH)+1); strComando += "AND (ID_CTAMAYOR LIKE '2.4.%' "; strComando += "OR ID_CTAMAYOR LIKE '2.5.%' "; strComando += "OR ID_CTAMAYOR IN ('2.3.18') "; //09-jul-2012 - El CP Arturo Sebastian, solicito que ahora todas las escuelas de FACSA muestren estas cuentas strComando += "OR (ID_CTAMAYOR =any ('2.3.18','2.3.19','2.3.20') AND ID_CCOSTO like ('1.01.2.03%'))) "; //strComando += "OR (ID_CTAMAYOR IN ('2.3.19','2.3.20') AND ID_CCOSTO = '1.01.2.03.01')) "; Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery(strComando); if(rst.next()) { dblCantidad = rst.getDouble("IMPORTE"); } rst.close(); stmt.close(); return dblCantidad; } //Funcion para calcular las Autorizaciones hasta hoy public double ccgetComprometidoCC ( String strIDCCosto, HttpSession session ) throws SQLException, Exception { double dblComprometido = 0; String COMANDO = "SELECT COALESCE(SUM(PRECIO_U * CANTIDAD),0) IMPORTE "; COMANDO += "FROM mateo.CCP_AUTORIZACION_DET "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_EJERCICIO || ID_AUTORIZACION IN "; COMANDO += "(SELECT ID_EJERCICIO || ID_AUTORIZACION "; COMANDO += "FROM mateo.CCP_AUTORIZACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND STATUS = 'R' "; COMANDO += "AND TO_DATE(FECHA,'DD/MM/YY') <= TO_DATE(SYSDATE,'DD/MM/YY') ) "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strIDCCosto); pstmt.setString(3, (String)session.getAttribute("id_ejercicio")); pstmt.setString(4, strIDCCosto); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblComprometido = rset.getDouble("Importe"); } pstmt.close(); rset.close(); return dblComprometido; } //Funcion para obtener el descomprometido hasta hoy, //SIN TOMAR EN CUENTA AQUELLOS REGISTROS HECHOS POR CONTABILIDAD //YA QUE AL CALCULAR LOS GASTOS SE DUPLICARIAN public double ccgetDescomprometidoCC ( String strIDCCosto, HttpSession session ) throws SQLException, Exception { double dblDescomprometido = 0; /**************************Query Optimizado*****************************************/ String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM mateo.CCP_DESCOMPROMETIDO D, mateo.CCP_AUTORIZACION A "; COMANDO += "WHERE A.ID_EJERCICIO = ? "; COMANDO += "AND A.ID_CCOSTO = ? "; //COMANDO += "AND A.STATUS = 'R' "; COMANDO += "AND D.STATUS = 'A' " ; COMANDO += "AND A.ID_EJERCICIO = D.ID_EJERCICIO "; COMANDO += "AND A.ID_AUTORIZACION = D.ID_AUTORIZACION "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strIDCCosto); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblDescomprometido = rset.getDouble("Importe"); } pstmt.close(); rset.close(); return dblDescomprometido; } //Funcion para obtener los gastos de un centro de costo public double ccgetGastosCC ( String strIDCCosto, HttpSession session ) throws SQLException, Exception { double dblGastos = 0; String COMANDO = "SELECT COALESCE(SUM(IMPORTE * CASE NATURALEZA WHEN 'C' THEN -1 ELSE 1 END),0) IMPORTE "; COMANDO += "FROM mateo.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND (ID_CTAMAYORM LIKE '2.4.%' "; COMANDO += "OR ID_CTAMAYORM LIKE '2.5.%' "; COMANDO += "OR ID_CTAMAYORM IN ('2.3.18') "; //09-jul-2012 - El CP Arturo Sebastian, solicito que ahora todas las escuelas de FACSA muestren estas cuentas COMANDO += "OR (ID_CTAMAYOR =any ('2.3.18','2.3.19','2.3.20') AND ID_CCOSTO like ('1.01.2.03%'))) "+ //COMANDO += "OR (ID_CTAMAYORM IN ('2.3.19','2.3.20') AND ID_CCOSTOM = '1.01.2.03.01')) " + "AND ID_EJERCICIO || ID_CTAMAYORM IN " + "( " + "SELECT ID_EJERCICIO || ID_CTAMAYOR " + "FROM mateo.CCP_PRESUPUESTO " + "WHERE ID_EJERCICIO = ? " + "AND ID_CCOSTO = ? " + "AND (ID_CTAMAYOR LIKE '2.4.%' " + "OR ID_CTAMAYOR LIKE '2.5.%' " + "OR ID_CTAMAYOR IN ('2.3.18') " + //09-jul-2012 - El CP Arturo Sebastian, solicito que ahora todas las escuelas de FACSA muestren estas cuentas "OR (ID_CTAMAYOR =any ('2.3.18','2.3.19','2.3.20') AND ID_CCOSTO like ('1.01.2.03%'))) "+ //"OR (ID_CTAMAYOR IN ('2.3.19','2.3.20') AND ID_CCOSTO = '1.01.2.03.01')) " + ") "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, strIDCCosto); pstmt.setString(3, (String)session.getAttribute("id_ejercicio")); pstmt.setString(4, strIDCCosto); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblGastos = rset.getDouble("Importe"); } pstmt.close(); rset.close(); return dblGastos; } //Funcion que regresa el presupuesto disponible public double ccgetPresupuestoDispCC ( String strIDCCosto, HttpSession session ) throws Exception { return ccgetPresupuestoCC(strIDCCosto, session) - ((ccgetComprometidoCC(strIDCCosto, session) ) + //El hecho de disminuir los descomprometido ocasiona que se incremente el saldo disponible //- ccgetDescomprometidoCC(strIDCCosto, session)) + ccgetGastosCC(strIDCCosto, session)); } //Funcion que asigna al campo impreso el status S public void ccpsetImpreso ( String strAutorizacionID, HttpSession session ) throws Exception { String COMANDO = "UPDATE mateo.CCP_AUTORIZACION "; COMANDO += "SET IMPRESO = 'S', "; COMANDO += "USUARIO_IMPRESO = ?, "; COMANDO += "FECHA_IMPRESO = SYSDATE "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_AUTORIZACION = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); pstmt.setString(2, (String)session.getAttribute("id_ejercicio")); pstmt.setString(3, strAutorizacionID); pstmt.executeUpdate(); pstmt.close(); } //Funci?n que determina el bloque actual, y obtiene el presupuesto anterior //si es que el bloque actual es el bloque 2 //Para determinar el bloque en el cual ha de buscar el presupuesto, //evalua el rango de las fechas recibidas, el cual es el rango de busqueda actual. public double ccpgetPresupuestoDisponible ( String strIDCtaMayor, String auxiliarId, String fechaInicial, String fechaFinal, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto_ccp"); java.util.Calendar gcFechaInicial = new java.util.GregorianCalendar(); java.util.Calendar gcFechaActual = new java.util.GregorianCalendar(); java.util.Calendar gcFechaFinal = new java.util.GregorianCalendar(); gcFechaActual.setTime(new java.text.SimpleDateFormat("dd/MM/yyyy").parse(fechaInicial)); //System.out.println(fechaInicial+"@"+fechaFinal); if (gcFechaActual.get(java.util.Calendar.MONTH)+1 >= 1 && gcFechaActual.get(java.util.Calendar.MONTH)+1 < 7) { //Obtener presupuesto del Bloque 2 ya que la fecha Inicial del rango de busqueda actual //esta entre los meses correspondientes al bloque 1 gcFechaInicial.setTime(gcFechaActual.getTime()); gcFechaInicial.set(java.util.Calendar.DATE, 1); gcFechaInicial.set(java.util.Calendar.MONTH, 6); gcFechaFinal.setTime(gcFechaActual.getTime()); gcFechaFinal.set(java.util.Calendar.MONTH, 11); int intDias = gcFechaFinal.getActualMaximum(java.util.Calendar.DATE); gcFechaFinal.set(java.util.Calendar.DATE, intDias); } else if (gcFechaActual.get(java.util.Calendar.MONTH)+1 >= 7 && gcFechaActual.get(java.util.Calendar.MONTH)+1 <= 12) { //Obtener presupuesto del Bloque 1 ya que la fecha Inicial del rango de busqueda actual //esta entre los meses correspondientes al bloque 2 gcFechaInicial.setTime(gcFechaActual.getTime()); gcFechaInicial.set(java.util.Calendar.DATE, 1); gcFechaInicial.set(java.util.Calendar.MONTH, 0); gcFechaFinal.setTime(gcFechaActual.getTime()); gcFechaFinal.set(java.util.Calendar.MONTH, 5); int intDias = gcFechaFinal.getActualMaximum(java.util.Calendar.DATE); gcFechaFinal.set(java.util.Calendar.DATE, intDias); } //Obtener presupuesto double dblPresupuesto = getPresupuestoRangoMeses(strIDEjercicio, strIDCtaMayor, strIDCCosto, gcFechaInicial.get(java.util.Calendar.MONTH)+1, gcFechaFinal.get(java.util.Calendar.MONTH)+1); //Obtener gastos del mes actual String strFechaInicial = new java.text.SimpleDateFormat("dd/MM/yyyy").format(gcFechaInicial.getTime()); String strFechaFinal = new java.text.SimpleDateFormat("dd/MM/yyyy").format(gcFechaFinal.getTime()); double dblGastos = getGastosMesActual(strIDEjercicio, strIDCtaMayor, strIDCCosto, auxiliarId, strFechaInicial, strFechaFinal); //Obtener comprometido double dblComprometido = getComprometido(strIDEjercicio, strIDCtaMayor, strIDCCosto, auxiliarId, strFechaInicial, strFechaFinal); return dblPresupuesto - (dblGastos + dblComprometido); } /*Funcion que regresa un rango de centros de costo*/ public java.util.Vector ccpgetRangoCCostos ( String strCCostoI, String strCCostoF, HttpSession session ) throws Exception { java.util.Vector vctCCostos = new java.util.Vector(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String COMANDO = "SELECT ID_CCOSTO "; COMANDO += "FROM mateo.CONT_CCOSTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTO BETWEEN ? AND ? "; COMANDO += "AND DETALLE = 'S' "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strCCostoI); pstmt.setString(3, strCCostoF); ResultSet rset = pstmt.executeQuery(); while(rset.next()) { vctCCostos.add(rset.getString("ID_CCosto")); } pstmt.close(); rset.close(); return vctCCostos; } //Obtener listado de fondos public Vector getFondos(HttpSession session) throws Exception { PreparedStatement pstmt = null; ResultSet rset = null; Vector vctFondos = new Vector(); String COMANDO = "SELECT A.ID_AUXILIAR, A.NOMBRE "; COMANDO += "FROM mateo.CONT_AUXILIAR A, CONT_RELACION R "; COMANDO += "WHERE A.ID_EJERCICIO = R.ID_EJERCICIO "; COMANDO += "AND A.ID_AUXILIAR = R.ID_AUXILIAR "; COMANDO += "AND R.ID_EJERCICIO = ? "; COMANDO += "AND R.ID_CCOSTO = ? "; COMANDO += "AND R.ID_CTAMAYOR = '3.1.02.01' "; COMANDO += "ORDER BY A.ID_AUXILIAR "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("id_ejercicio")); pstmt.setString(2, (String)session.getAttribute("id_ccosto_ccp")); rset = pstmt.executeQuery(); while(rset.next()){ vctFondos.add(rset.getString("ID_Auxiliar")+"@"+rset.getString("Nombre")); } rset.close(); pstmt.close(); return vctFondos; } //Obtiene todas las autorizaciones de compra, menos las canceladas, //con su saldo autorizado y su saldo descomprometido public PreparedStatement ccpgetAutorizacionesTodas(HttpSession session, String fechaInicial, String fechaFinal) throws Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto_ccp"); String COMANDO = "SELECT Z.ID_AUTORIZACION, TO_CHAR(Z.FECHA,'DD/MM/YYYY') FECHA, COALESCE(A.IMPORTE,0) AUTORIZADO, COALESCE(D.IMPORTE,0) DESCOMPROMETIDO "; COMANDO += "FROM mateo.CCP_AUTORIZACION Z, "; COMANDO += "(SELECT ID_EJERCICIO, ID_AUTORIZACION, COALESCE(SUM(precio_u*cantidad),0) IMPORTE "; COMANDO += "FROM mateo.CCP_AUTORIZACION_DET "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND STATUS != 'X' "; COMANDO += "GROUP BY ID_EJERCICIO, ID_AUTORIZACION) A, "; COMANDO += "(SELECT ID_EJERCICIO, ID_AUTORIZACION, coalesce(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM mateo.CCP_DESCOMPROMETIDO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "GROUP BY ID_EJERCICIO, ID_AUTORIZACION) D "; COMANDO += "WHERE A.ID_EJERCICIO = D.ID_EJERCICIO(+) "; COMANDO += "AND A.ID_AUTORIZACION = D.ID_AUTORIZACION(+) "; COMANDO += "AND A.ID_EJERCICIO = Z.ID_EJERCICIO "; COMANDO += "AND A.ID_AUTORIZACION = Z.ID_AUTORIZACION "; COMANDO += "AND Z.ID_EJERCICIO = ? "; COMANDO += "AND Z.ID_CCOSTO = ? "; COMANDO += "AND Z.FECHA BETWEEN TO_DATE(?,'DD/MM/YY') AND TO_DATE(?,'DD/MM/YY') "; COMANDO += "ORDER BY Z.ID_AUTORIZACION "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCCosto); pstmt.setString(5, fechaInicial); pstmt.setString(6, fechaFinal); return pstmt; } }