/* * Created on 30/10/2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package mx.edu.um.mateo.inscripciones.model.ccobro.poliza; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.http.HttpSession; import mx.edu.um.mateo.inscripciones.model.ccobro.cuenta.CtaMayor; import mx.edu.um.mateo.inscripciones.model.ccobro.common.Conexion; /** * @author Alberto * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class metodos2 extends Conexion{ public metodos2(){ } public metodos2(Connection conn){ this.conn=conn; } //Obtener la naturaleza de la cuenta public String rctagetNaturaleza ( String strIDCtaMayor, String strTipoCuenta ) throws SQLException, Exception { String strNaturaleza = null; //Obtener naturaleza de la cuenta if (strTipoCuenta.equals("B")) { if (strIDCtaMayor.substring(0,1).equals("1")) strNaturaleza = "D"; else if (strIDCtaMayor.substring(0,1).equals("2") || strIDCtaMayor.substring(0,1).equals("3")) strNaturaleza = "C"; else throw new Error("Cuenta de mayor invalida"+strIDCtaMayor+"-"+strIDCtaMayor.substring(0,1)); } else if (strTipoCuenta.equals("R")) { if (strIDCtaMayor.substring(0,1).equals("1")) strNaturaleza = "C"; else if (strIDCtaMayor.substring(0,1).equals("2") || strIDCtaMayor.substring(0,1).equals("3")) strNaturaleza = "D"; else throw new Error("Cuenta de mayor invalida"+strIDCtaMayor+"-"+strIDCtaMayor.substring(0,1)); } else throw new Error("Tipo de cuenta invalido! <br> No se puedo determinar una naturaleza"); return strNaturaleza; } //Obtener la naturaleza de la cuenta public String rctagetNaturaleza ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar ) throws SQLException, Exception { String strNaturaleza = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; String COMANDO = "SELECT NATURALEZA "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strNaturaleza = rset.getString("Naturaleza"); } pstmt.close(); rset.close(); if (strNaturaleza == null) throw new Error("Cuenta invalida"); return strNaturaleza; } //Obtener la naturaleza de la cuenta, regresando el importe con signo public Double rctagetNaturaleza ( String strIDEjercicio, String strIDCtaMayor, Double dblImporte, String strNaturalezaImporte ) throws SQLException, Exception { //Si el importe viene positivo, indica que su naturaleza es acreedora, //Si el importe viene negativo, indica que su naturaleza es deudora String strTipoCuenta = null; //Obtener el tipo de la cuenta de mayor (B,R) String COMANDO = "SELECT TIPO_CUENTA "; COMANDO += "FROM mateo.CONT_CTAMAYOR "; COMANDO += "WHERE DETALLE = 'S' "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strTipoCuenta = rset.getString("Tipo_Cuenta"); } pstmt.close(); rset.close(); if (strTipoCuenta == null) throw new Error("Cuenta invalida"); if (rctagetNaturaleza(strIDCtaMayor, strTipoCuenta).equals("C")) { if (strNaturalezaImporte.equals("C")) { //Si la naturaleza del importe es acreedora //El importe queda igual (positivo) } else { //Si la naturaleza del importe es deudora //El importe se convierte a negativo dblImporte = new Double(dblImporte.doubleValue() * (-1)); //para indicar que debe ser un cargo } } else { if (strNaturalezaImporte.equals("D")) { //Si la naturaleza del importe es acreedora //El importe queda igual (positivo) } else { //Si la naturaleza del importe es deudora //El importe se convierte a positivo dblImporte = new Double(dblImporte.doubleValue() * (-1)); //para indicar que debe ser un credito } } return dblImporte; } //Crear relaci?n de centro de costo con cuenta de mayor public void rctaRelacionarCC_CtaMayor ( String strIDCtaMayor, String strIDCCosto, String strNombre, String strTipoCuenta, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); //Obtener nombre del centro de costo String COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_CCOSTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCCosto); ResultSet rset = pstmt.executeQuery(); if (rset.next()) strNombre = rset.getString("Nombre"); else throw new Error("Cuenta de centro de costo invalida"); pstmt.close(); rset.close(); //Obtener nombre de la cuenta de mayor COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_CTAMAYOR "; COMANDO += "WHERE DETALLE = 'S' "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); rset = pstmt.executeQuery(); if (rset.next()) strNombre += " " + rset.getString("Nombre"); else throw new Error("Cuenta de mayor invalida"); pstmt.close(); rset.close(); if (strNombre.length() > 60) strNombre = strNombre.substring(0, 59); //Relacionar cuenta con el centro de costo COMANDO = "INSERT INTO mateo.CONT_RELACION "; COMANDO += "(ID_EJERCICIO, ID_CTAMAYOR, ID_CCOSTO, ID_AUXILIAR, NOMBRE, NATURALEZA, STATUS, TIPO_CUENTA, ID_EJERCICIO2, ID_EJERCICIO3) "; COMANDO += "VALUES "; COMANDO += "(?, ?, ?, '0000000', ?, ?, 'A',?,?,?) "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strNombre); pstmt.setString(5, rctagetNaturaleza(strIDCtaMayor, strTipoCuenta)); pstmt.setString(6, new CtaMayor().getTipoCuenta(strIDEjercicio, strIDCtaMayor)); pstmt.setString(7, strIDEjercicio); pstmt.setString(8, strIDEjercicio); pstmt.execute(); pstmt.close(); } //Quitar relaci?n de un centro de costo y una cuenta de mayor public void rctaQuitarRelacionCC_CtaMayor ( String strIDCtaMayor, String strIDCCosto, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); Integer intNReg = null; PreparedStatement pstmt2 = null; //Cancelar la relaci?n de la cuenta, si existen movimientos con dicha cuenta //o eliminar f?sicamente la cuenta, si no existen movimientos con la cuenta String COMANDO = "SELECT COUNT(*) NREG "; COMANDO += "FROM mateo.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNReg = new Integer(rset.getInt("NReg")); } pstmt.close(); rset.close(); COMANDO = "SELECT ROWID "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); rset = pstmt.executeQuery(); while (rset.next()) { if (intNReg.compareTo(new Integer(0)) > 0) { COMANDO = "UPDATE mateo.CONT_RELACION "; COMANDO += "SET STATUS = 'I' "; COMANDO += "WHERE ROWID = ? "; pstmt2 = conn.prepareStatement(COMANDO); pstmt2.setString(1, rset.getString("RowID")); pstmt2.execute(); pstmt2.close(); } else { COMANDO = "DELETE "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ROWID = ? "; pstmt2 = conn.prepareStatement(COMANDO); pstmt2.setString(1, rset.getString("RowID")); pstmt2.execute(); pstmt2.close(); } } } //Crear relaci?n de centro de costo con cuenta de mayor y auxiliar public void rctaRelacionarCC_CM_Auxiliar ( String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strNombre, HttpSession session ) throws SQLException, Exception { //Verificar si la cuenta de mayor debe llevar auxiliar if (!rctaLlevaAuxiliar(strIDCtaMayor, session).booleanValue()) { throw new Error("La cuenta de mayor "+strIDCtaMayor+" no puede relacionar con ningun auxiliar"); } String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strNombreCtaMayor = null; String strTipoCuenta = null; String strNombreTemp = null; Integer intNReg = null; //Verificar si existe la cuenta con status desactivado String COMANDO = "SELECT COUNT(*) NREG "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNReg = new Integer(rset.getInt("NReg")); } rset.close(); pstmt.close(); if (intNReg.compareTo(new Integer(0)) > 0) { //La cuenta ya existe, solo prendemos el status COMANDO = "UPDATE mateo.CONT_RELACION "; COMANDO += "SET STATUS = 'A' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strIDAuxiliar); pstmt.executeUpdate(); pstmt.close(); } else { //Verificar si existe la relacion del centro de costo, la cuenta de mayor //y el auxiliar '0000000', si no entonces crearla COMANDO = "SELECT COUNT(*) NREG "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = '0000000' "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) intNReg = new Integer(rset.getInt("NReg")); else throw new Error("Cuenta de Mayor y Centro de Costo invalidos"); pstmt.close(); rset.close(); //Si la relaci?n entre el centro de costo y la cuenta de mayor no existe if (intNReg.compareTo(new Integer(0)) == 0) { //Obtener nombre y tipo de cuenta COMANDO = "SELECT NOMBRE, TIPO_CUENTA "; COMANDO += "FROM mateo.CONT_CTAMAYOR "; COMANDO += "WHERE DETALLE = 'S' "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); rset = pstmt.executeQuery(); if(rset.next()) { strNombreCtaMayor = rset.getString("Nombre"); strTipoCuenta = rset.getString("Tipo_Cuenta"); } else throw new Error("Cuenta de mayor invalida!"); pstmt.close(); rset.close(); //Relacionar Centro de costo y cuenta de mayor rctaRelacionarCC_CtaMayor(strIDCtaMayor, strIDCCosto, strNombreCtaMayor, strTipoCuenta, session); } //Relacionar centro de costo, cuenta de mayor y el auxiliar //Obtener nombre del auxiliar COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_AUXILIAR "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDAuxiliar); rset = pstmt.executeQuery(); if (rset.next()) strNombre = rset.getString("Nombre"); else throw new Error("Auxiliar invalido"); pstmt.close(); rset.close(); //Obtener nombre de la relacion, para validar longitud COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_RELACION "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = '0000000' "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) strNombreTemp = rset.getString("Nombre"); pstmt.close(); rset.close(); strNombreTemp += strNombre; if (strNombreTemp.length() > 60) strNombreTemp = strNombreTemp.substring(0,59); COMANDO = "UPDATE mateo.CONT_RELACION "; COMANDO += "SET ID_AUXILIAR = ?, "; COMANDO += "NOMBRE = ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = '0000000' "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDAuxiliar); pstmt.setString(2, strNombreTemp); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.execute(); pstmt.close(); }//Fin else } //Quitar relaci?n de un centro de costo, una cuenta de mayor y un auxiliar //No se quita la relacion centro de costo y cuenta de mayor public void rctaQuitarRelacionCC_CM_Auxiliar ( String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); //Asignar auxiliar 0000000 para indicar que hace falta auxiliar String COMANDO = "UPDATE mateo.CONT_RELACION "; COMANDO += "SET STATUS = 'I' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strIDAuxiliar); pstmt.execute(); pstmt.close(); } //Obtener el atributo Auxiliar de la cuenta de mayor public Boolean rctaLlevaAuxiliar ( String strIDCtaMayor, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strLlevaAuxiliar = null; String COMANDO = "SELECT AUXILIAR "; COMANDO += "FROM mateo.CONT_CTAMAYOR "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strLlevaAuxiliar = rset.getString("Auxiliar"); } else throw new Error("Cuenta de mayor invalida"); pstmt.close(); rset.close(); if (strLlevaAuxiliar.equals("S")) return new Boolean(true); else return new Boolean("false"); } //Obtener listado de auxiliares public PreparedStatement rctagetAuxiliares ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto ) throws SQLException, Exception { String COMANDO = "SELECT A.ID_AUXILIAR, A.NOMBRE "; COMANDO += "FROM mateo.CONT_AUXILIAR A, mateo.CONT_RELACION R "; COMANDO += "WHERE A.ID_AUXILIAR = R.ID_AUXILIAR "; COMANDO += "AND R.ID_EJERCICIO = ? "; COMANDO += "AND R.ID_CTAMAYOR = ? "; COMANDO += "AND R.ID_CCOSTO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); return pstmt; } //Obtener el atributo Auxiliar de la cuenta de mayor public Boolean rctaExisteCuenta ( String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); PreparedStatement pstmt = null; boolean blnSw = false; String COMANDO = "SELECT COUNT(*) NREG "; COMANDO += "FROM MATEO.CONT_RELACION "; COMANDO += "WHERE STATUS = 'A' "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYOR = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDCtaMayor); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { if (rset.getInt("NReg") > 0) blnSw = true; } pstmt.close(); rset.close(); return new Boolean(blnSw); } }