/* * 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 mx.edu.um.mateo.inscripciones.model.ccobro.ccp.Metodos; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.NoSuchElementException; import java.util.StringTokenizer; import javax.servlet.http.HttpSession; import mx.edu.um.mateo.inscripciones.model.ccobro.utils.Constants; 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 Metodos1 extends Conexion{ // Atributos de clase de la p?liza String atrstrIDEjercicio = null; String atrstrIDLibro = null; String atrstrFolio = null; String atrstrFecha = null; String atrstrDescripcion = null; String atrstrIDUsuario = null; String atrstrRevisadoPor = null; String atrstrStatus = null; String atrstrStatusInd = null; metodos2 metodos2; metodos3 metodos3; //Atributos de clase del movimiento String atrstrIDEjercicioMov = null; String atrstrIDLibroMov = null; String atrstrFolioMov = null; Integer atrintNumMov = null; String atrstrFechaMov = null; String atrstrDescripcionMov = null; String atrstrNaturalezaMov = null; Double atrdblImporteMov = null; String atrstrReferenciaMov = null; String atrstrReferencia2Mov = null; String atrstrCtaMayorMov = null; String atrstrCCostoMov = null; String atrstrAuxiliarMov = null; String atrstrStatusMov = null; Metodos metsCCP; public Metodos1(){ } public Metodos1(Connection conn){ this.conn=conn; metodos3 = new metodos3(conn); metodos2 = new metodos2(conn); metsCCP = new Metodos(conn); } public void initMetodos(){ metodos3 = new metodos3(conn); metodos2 = new metodos2(conn); } // M?todos p?blicos, para el manejo de p?lizas //Se espera que ya exista la variable conn //M?todos del caso de uso Alta de Encabezado de P?liza public void creaEncabezadoPoliza ( String strFecha, String strDescripcion, HttpSession session ) throws SQLException, Exception { //El encabezado debe tener los siguientes campos: //Ejercicio contable, libro contable, folio de p?liza, //fecha, descripci?n, usuario String COMANDO = null; PreparedStatement pstmt = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); Long idUsuario = ((Long)session.getAttribute(Constants.SESSION_USER_ID)); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //Validar que el usuario, tenga derechos de creaci?n de p?lizas if (!metodos3.esUsuarioValido(session)) { throw new Error("Usuario sin derechos a crear p?lizas"); } //Obtener c_poliza String strFolio = getFolioPolizaActual(session); //Validar que no exista alguna poliza con el folio = c_poliza if (getExistePolizaActual(session)) throw new Error("Poliza con folio "+ strFolio +", ya existe!"); //Registrar el encabezado de la p?liza COMANDO = "INSERT INTO MATEO.CONT_POLIZA "; COMANDO += " (ID_EJERCICIO, ID_LIBRO, ID_CCOSTO, FOLIO, FECHA, DESCRIPCION, ID_USUARIO, STATUS, ID_EJERCICIO2) "; COMANDO += " VALUES "; COMANDO += " (?, ?, ?, ?, TO_DATE(?, 'dd-mm-yy'), ?, ?, 'A',?) "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setString(5, strFecha); pstmt.setString(6, strDescripcion); pstmt.setLong(7, idUsuario); pstmt.setString(8, strIDEjercicio); pstmt.execute(); pstmt.close(); } // M?todos del caso de uso Modifica Encabezado de P?liza public void modificaEncabezadoPoliza ( String strFolio, String strDescripcion, String strFecha, boolean blnModificaMovimientos, HttpSession session ) throws SQLException, Exception { //Se modifica la Fecha de la p?liza, y a su vez se modifican la fecha //de los movimientos de la misma p?liza si ModificaMovimientos es true //Se pasan los campos de la llave primaria para identificar la p?liza String COMANDO = null; PreparedStatement pstmt = null; String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar que el usuario, tenga derechos de acceso a p?lizas if (!metodos3.esUsuarioValido(session)) { throw new Error("Usuario sin accesos a p?lizas"); } //Solo los usuarios: //Capturista de p?lizas, Revisa P?lizas, Director de Contabilidad //Validar en base al status de la p?liza si el usuario puede modificar //la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); if (strStatus.equals("A")) {//Si la p?liza est? abierta, los tres usuarios pueden modificarla //Valdar que sean uno de los tres usuarios que est?n entrando if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos de modificar p?liza"); } COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += " SET FECHA = TO_DATE(?, 'DD/MM/YY'), "; COMANDO += " DESCRIPCION = ? "; COMANDO += " WHERE ID_EJERCICIO = ? "; COMANDO += " AND ID_LIBRO = ? "; COMANDO += " AND ID_CCOSTO = ? "; COMANDO += " AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setString(2, strDescripcion); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strFolio); pstmt.execute(); pstmt.close(); //Si Modifica Movimientos es true if (blnModificaMovimientos) { COMANDO = "UPDATE mateo.CONT_MOVIMIENTO "; COMANDO += "SET FECHA = TO_DATE(?, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.execute(); pstmt.close(); } } else if (strStatus.equals("R")) {//si la p?liza est? en revisi?n, solo el revisa p?lizas y //el director de contabilidad pueden modificar la p?liza if (!(metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos de modificar p?liza"); } //Verificar que el usuario no sea capturista de p?lizas COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += " SET FECHA = TO_DATE(?, 'DD/MM/YY'), "; COMANDO += " DESCRIPCION = ? "; COMANDO += " WHERE ID_EJERCICIO = ? "; COMANDO += " AND ID_LIBRO = ? "; COMANDO += " AND ID_CCOSTO = ? "; COMANDO += " AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setString(2, strDescripcion); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strFolio); pstmt.execute(); pstmt.close(); //Si Modifica Movimientos es true if (blnModificaMovimientos) { COMANDO = "UPDATE mateo.CONT_MOVIMIENTO "; COMANDO += "SET FECHA = TO_DATE(?, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.execute(); pstmt.close(); } } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada, ning?n usuario puede modificar lo p?liza throw new Error("Esta p?liza solo puede ser modifica si el Director de Contabilidad la abre"); } else if (strStatus.equals("D")) {//Si la p?liza est? cerrada definitivamente, //ning?n usuario puede modificar lo p?liza throw new Error("Esta p?liza ya no puede ser modificada bajo ninguna circunstancia"); } else if (strStatus.equals("I")) {//Si la p?liza est? cancelada, ning?n usuario puede modificar lo p?liza throw new Error("Esta p?liza ya no puede ser modificada bajo ninguna circunstancia"); } } // M?todos del caso de uso Abrir Encabezado de P?liza public void abrirEncabezado ( String strIDEjercicio, String strIDLibro, String strFolio, HttpSession session ) throws SQLException, Exception {//Este m?todo abre el encabezado de la p?liza modificando el status del mismo //en base al usuario de contabilidad que genera la operaci?n. //Usuario Director de Contabilidad, puede abrir una p?liza Cerrada o en Revisi?n //Usuario Revisa P?lizas, puede abrir una p?liza en Revisi?n //Usuario Capturista de P?lizas, no puede abrir p?lizas PreparedStatement pstmt = null; String COMANDO = null; String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario, solo puede ser Director de Contabilidad, Revisa P?lizas, //Capturista P?lizas if (!metodos3.esUsuarioValido(session)) { throw new Error("Usuario sin derechos para abrir una p?liza"); } //Solo los usuarios: //Capturista de p?lizas, Revisa P?lizas, Director de Contabilidad //Validar en base al status de la p?liza si el usuario puede modificar //la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); if (strStatus.equals("A")) { //Si la p?liza est? abierta, no hay nada que hacer throw new Error("P?liza previamente abierta."); } else if (strStatus.equals("R")) { //Si la p?liza est? en revisi?n, solo el Director de Contabilidad //y el Revisa P?lizas pueden abrir la p?liza, pasando esta a status A //Validar que usuario sea Director de Contabilidad o Revisa P?lizas if (!(metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos para abrir p?liza en revisi?n"); } //Modificar status de la p?liza COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += "SET STATUS = 'A' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } else if (strStatus.equals("C")) { //Si la p?liza est? cerrada, solo el Director de Contabilidad puede abrir //la p?liza, pasando esta a status 'R' //Validar que usuario sea Director de Contabilidad if (!metodos3.esTipoUsuarioValido(session, "06")) { throw new Error("Usuario sin derechos para abrir un p?liza cerrada"); } //Modificar status de la p?liza COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += "SET STATUS = 'R' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } else if (strStatus.equals("D")) { //Si la ,p?liza est? cerrada definitivamente, no se puede abrir throw new Error("No se puede abrir una p?liza que est? cerrada de manera definitiva"); } else if (strStatus.equals("I")) { //Si la p?liza est? cancelada, no se puede abrir throw new Error("No se puede abrir una p?liza que est? cancelada"); } } // M?todos del caso de uso Cerrar Encabezado de P?liza public void cerrarEncabezado ( String strIDEjercicio, String strIDLibro, String strFolio, HttpSession session ) throws SQLException, Exception {//Este m?todo cierra el encabezado de la p?liza modificando el status del mismo //en base al usuario de contabilidad que genera la operaci?n. //Usuario Director de Contabilidad, puede cerrar una p?liza Abierta o en Revisi?n //Usuario Revisa P?lizas, puede cerrar una p?liza en Revisi?n o Abierta //Usuario Capturista de P?lizas puede cerrar una p?liza Abierta //Una p?liza solo puede ser cerrada si tiene movimientos y estos cuadran PreparedStatement pstmt = null; String COMANDO = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario, solo puede ser Director de Contabilidad, Revisa P?lizas, //Capturista P?lizas if (!metodos3.esUsuarioValido(session)) { throw new Error("Usuario sin derechos para cerrar una p?liza"); } getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); //Validar que la p?liza no tenga ning?n movimiento en espera de ser cancelado //por auditor?a (Status T) if (polizaConMovsT(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) throw new Error("P?liza imposible de cerrar, ya que tiene movimientos <br> marcados para cancelar por Auditoria"); if (strStatus.equals("A")) { //Si la p?liza est? abierta, cualquiera de los tres usuarios v?lidos puede if (polizaCuadra(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) {//Si la p?liza cuadra, cerrar la p?liza para su revisi?n if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06") || metodos3.esTipoUsuarioValido(session, "01") || metodos3.esTipoUsuarioValido(session, "02"))) { throw new Error("Usuario sin derechos de cerrar p?liza"); } COMANDO = "UPDATE MATEO.CONT_POLIZA "; COMANDO += "SET STATUS = 'D' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); //Modificar c_poliza polizaModificaActual(getFolioPoliza(strIDLibro, session),strIDLibro, session); } else { throw new Error("La poliza "+strFolio+" del usuario "+strUsuario+" no cuadra! <br> Imposible cerrarla"); } } else if (strStatus.equals("D")) { //Si la p?liza est? cerrada definitivamente, no se puede cerrar throw new Error("P?liza previamente cerrada de manera definitiva"); } else if (strStatus.equals("I")) { //Si la p?liza est? cancelada, no se puede cerrar throw new Error("No se puede cerrar una p?liza que est? cancelada"); } } // M?todos del caso de uso Cancela Encabezado P?liza public void cancelaEncabezado ( String strFolio, HttpSession session ) throws SQLException, Exception {//Este m?todo cancela una p?liza. //Si la p?liza tiene status A, esta acci?n la borra f?sicamente. //Si la p?liza tiene status R o C, esta acci?n le modifica el status a I, //modificando la descripci?n de la p?liza y los movimientos, as? como //modificar el importe a cero de los movimientos. //El usuario Capturista de P?lizas, solo puede cancelar p?lizas abiertas //El usuario Revisa P?lizas, puede cancelar p?lizas en revisi?n y abiertas //El usuario Director de Contabilidad, puede cancelar p?lizas cerradas, //en revisi?n y abiertas PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; Long idUsuario = (Long)session.getAttribute(Constants.SESSION_USER_ID); String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario, solo puede ser Director de Contabilidad, Revisa P?lizas, //Capturista P?lizas if (!metodos3.esUsuarioValido(session)) { throw new Error("Usuario sin derechos para cancelar una p?liza"); } getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); if (strStatus.equals("A")) { //Si la p?liza est? abierta, cualquiera de los tres usuarios v?lidos pueden //cancelar la p?liza if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos de cancelar p?liza"); } //Si quien quiere borrar la p?liza no es alquien que revisa las p?lizas, ni el director de contabilidad if (!metodos3.esTipoUsuarioValido(session,"05") && !metodos3.esTipoUsuarioValido(session, "06")) { //Verificar si es el creador de la p?liza que pretende borrar COMANDO = "SELECT COUNT(*) NReg "; COMANDO += "FROM mateo.CONT_POLIZA "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_USUARIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setLong(5, idUsuario); rset = pstmt.executeQuery(); int intNReg = 0; if (rset.next()) { intNReg = rset.getInt("NReg"); } rset.close(); pstmt.close(); if (intNReg == 0) throw new Error("Imposible borrar una p?liza no creada por "+strUsuario); } //Si la p?liza tiene movimientos se borran los movimientos if (polizaConMovimientos(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) { COMANDO = "DELETE "; COMANDO += "FROM mateo.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } //Borrar encabezado de la p?liza COMANDO = "DELETE "; COMANDO += "FROM mateo.CONT_POLIZA "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } else if (strStatus.equals("R")) { //Si la p?liza est? en revisi?n, solo el Director de Contabilidad //y el Revisa P?lizas pueden cancelar la p?liza if (!(metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos de cancelar p?liza"); } //Si la p?liza tiene movimientos se modifican if (polizaConMovimientos(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) { String strDescripcion = "MOVIMIENTO CANCELADO POR "+strUsuario+" EN "; COMANDO = "UPDATE mateo.CONT_MOVIMIENTO "; COMANDO += "SET STATUS = 'I', "; COMANDO += "IMPORTE = 0, "; COMANDO += "DESCRIPCION = ? || TO_CHAR(SYSDATE, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strDescripcion); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.execute(); pstmt.close(); } //Cancelar encabezado de la p?liza String strDescripcion = "POLIZA CANCELADA POR "+strUsuario+" EN "; COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += "SET STATUS = 'I', "; COMANDO += "DESCRIPCION = ? || TO_CHAR(SYSDATE, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strDescripcion); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.execute(); pstmt.close(); } else if (strStatus.equals("C")) { //Si la p?liza est? cerrada y el usuario es el Director de Contabilidad //Validar el usuario if (!metodos3.esTipoUsuarioValido(session, "06")) { throw new Error("El usuario no tiene derechos de cancelar una p?liza cerrada"); } //Si la p?liza tiene movimientos se modifican if (polizaConMovimientos(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) { COMANDO = "UPDATE mateo.CONT_MOVIMIENTO "; COMANDO += "SET STATUS = 'I', "; COMANDO += "IMPORTE = 0, "; COMANDO += "DESCRIPCION = "; COMANDO += "'MOVIMIENTO CANCELADO POR ' || strUsuario || ' EN ' || TO_CHAR(SYSDATE, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } //Cancelar encabezado de la p?liza COMANDO = "UPDATE mateo.CONT_POLIZA "; COMANDO += "SET STATUS = 'I', "; COMANDO += "DESCRIPCION = "; COMANDO += "'POLIZA CANCELADA POR ' || strUsuario || 'EN' || TO_CHAR(SYSDATE, 'DD/MM/YY') "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.execute(); pstmt.close(); } else if (strStatus.equals("D")) { //Si la p?liza est? cerrada definitivamente, no se puede cerrar throw new Error("P?liza est? cerrada de manera definitiva. No se puede cancelar"); } else if (strStatus.equals("I")) { //Si la p?liza est? cancelada, no se puede cerrar throw new Error("P?liza previamente cancelada."); } } // M?todos del caso de uso Alta Movimiento public void movimientoAlta ( String strFolio, Integer concepto, String strDescripcion, double dblImporte, String strNaturaleza, String strReferencia, String strReferencia2, String strIDCtaMayor, String strIDCCostoMov, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception {//Este m?todo permite dar de alta un movimiento de una p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario //Solo los usuarios registrados en el sistema de contabilidad pueden capturar //movimientos, entre ellos otros sistemas if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derecho de crear movimientos"); } //Validar que la entidad del movimiento sea la misma que la entidad de la p?liza if (!strIDCCosto.equals(getEntidadValida(strIDEjercicio, strIDCCostoMov))) throw new Error("Entidad de movimiento distinta a entidad de poliza! "+strIDCCosto+" "+strIDEjercicio+" "+strIDCCostoMov+" "+strIDAuxiliar); //Validar si la cuenta existe en la tabla de cont_relacion if (!metodos2.rctaExisteCuenta(strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, session).booleanValue()) throw new Error("Puede que la cuenta no este tecleada correctamente, ya que no existe!<br>"+strIDCtaMayor+"-"+strIDCCostoMov+"-"+strIDAuxiliar); //Validar el status de la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); //la obtencion y modifcacion del recibo actual se hara en grabaCaja.jsp //porque se insertan dos movimientos //Validar si la cuenta de mayor tiene su auxiliar, si es que lo debe llevar tieneCtaMayor_Auxiliar(strIDCtaMayor, strIDAuxiliar, session); if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; if (strStatus.equals("A")) {//Cualquier usuario de contabilidad puede agregar movimientos Integer intNMov = new Integer(0); //Obtener el numero de movimiento COMANDO = "SELECT (COALESCE(MAX(NUMMOVTO),0)+1) NUMMOVTO "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if (rset.next()) { intNMov = new Integer(rset.getInt("NumMovto")); } rset.close(); pstmt.close(); //El campo Fecha del movimiento, se asignan //en el trigger de inserci?n de cont_movimiento COMANDO = "INSERT INTO MATEO.CONT_MOVIMIENTO "; COMANDO += "(ID_EJERCICIO, ID_LIBRO, ID_CCOSTO, FOLIO, NUMMOVTO, FECHA, CONCEPTO_ID, DESCRIPCION, "; COMANDO += "IMPORTE, NATURALEZA, REFERENCIA, REFERENCIA2, ID_CTAMAYORM, "; COMANDO += "ID_CCOSTOM, ID_AUXILIARM, ID_EJERCICIOM, ID_EJERCICIOM2, ID_EJERCICIOM3, "; COMANDO += "TIPO_CUENTA, ID_EJERCICIO2 ) "; COMANDO += "VALUES "; COMANDO += "(?, ?, ?, ?, ?, to_date(?,'dd/mm/yy'), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNMov.intValue()); pstmt.setString(6, getFechaPoliza()); pstmt.setInt (7, concepto.intValue ()); pstmt.setString(8, strDescripcion); pstmt.setDouble(9, dblImporte); pstmt.setString(10, strNaturaleza); pstmt.setString(11, strReferencia); pstmt.setString(12, strReferencia2); pstmt.setString(13, strIDCtaMayor); pstmt.setString(14, strIDCCostoMov); pstmt.setString(15, strIDAuxiliar); pstmt.setString(16, strIDEjercicio); pstmt.setString(17, strIDEjercicio); pstmt.setString(18, strIDEjercicio); pstmt.setString(19, new CtaMayor().getTipoCuenta(strIDEjercicio, strIDCtaMayor)); pstmt.setString(20, strIDEjercicio); pstmt.execute(); pstmt.close(); if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0,2).equals("99")) { String strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); try{ //Verificar si el dato capturado en Referencia2 es un control presupuestal metsCCP.ccpDescomprometerAut(strIDLibro, strFolio, intNMov, strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, new Double(dblImporte), strDescripcion, strReferencia2, session); }catch(Exception e){ e.printStackTrace(); movimientoCancela(strFolio, intNMov, session); throw new Exception("Error al intentar registar el movimiento <br> "+e); } } } } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada "+strFolio); } else if (getStatusPolizaInd().equals("D")) {//Si la p?liza est? cerrada definitivamente, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada definitivamente"); } else if (getStatusPolizaInd().equals("I")) {//Si la p?liza est? cancelada, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cancelada"); } } // M?todos del caso de uso Alta Movimiento Acumulando importe de cuentas iguales public void movimientoAltaAcumulado ( String strFolio, Integer concepto, String strDescripcion, double dblImporte, String strNaturaleza, String strReferencia, String strReferencia2, String strIDCtaMayor, String strIDCCostoMov, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception {//Este m?todo permite dar de alta un movimiento de una p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; int intNReg = 0; Integer intNMov = new Integer(0); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario //Solo los usuarios registrados en el sistema de contabilidad pueden capturar //movimientos, entre ellos otros sistemas if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derecho de crear movimientos"); } //Validar que la entidad del movimiento sea la misma que la entidad de la p?liza if (!strIDCCosto.equals(getEntidadValida(strIDEjercicio, strIDCCostoMov))) throw new Error("Entidad de movimiento distinta a entidad de poliza!"); //Validar si la cuenta existe en la tabla de cont_relacion if (!metodos2.rctaExisteCuenta(strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, session).booleanValue()) throw new Error("Puede que la cuenta no este tecleada correctamente, ya que no existe!<br>"+strIDCtaMayor+"-"+strIDCCostoMov+"-"+strIDAuxiliar); //Validar el status de la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); //la obtencion y modifcacion del recibo actual se hara en grabaCaja.jsp //porque se insertan dos movimientos //Validar si la cuenta de mayor tiene su auxiliar, si es que lo debe llevar tieneCtaMayor_Auxiliar(strIDCtaMayor, strIDAuxiliar, session); if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; if (strStatus.equals("A")) {//Cualquier usuario de contabilidad puede agregar movimientos //Validar si ya existe un movimiento con esta cuenta y naturaleza COMANDO = "SELECT COALESCE(NUMMOVTO,0) NREG "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND NATURALEZA = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setString(5, strIDCtaMayor); pstmt.setString(6, strIDCCostoMov); pstmt.setString(7, strNaturaleza); pstmt.setString(8, strIDAuxiliar); rset = pstmt.executeQuery(); if (rset.next()) { intNReg = rset.getInt("NReg"); } pstmt.close(); rset.close(); if (intNReg == 0) { //Obtener el numero de movimiento COMANDO = "SELECT (COALESCE(MAX(NUMMOVTO),0)+1) NUMMOVTO "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if (rset.next()) { intNMov = new Integer(rset.getInt("NumMovto")); } rset.close(); pstmt.close(); //Los campos NumMovto y Fecha del movimiento, se asignan //en el trigger de inserci?n de cont_movimiento COMANDO = "INSERT INTO MATEO.CONT_MOVIMIENTO "; COMANDO += "(ID_EJERCICIO, ID_LIBRO, ID_CCOSTO, FOLIO, NUMMOVTO, CONCEPTO_ID, DESCRIPCION, IMPORTE, "; COMANDO += " NATURALEZA, REFERENCIA, REFERENCIA2, ID_CTAMAYORM, ID_CCOSTOM, "; COMANDO += " ID_AUXILIARM, ID_EJERCICIOM, ID_EJERCICIOM2, ID_EJERCICIOM3, "; COMANDO += " TIPO_CUENTA, ID_EJERCICIO2 )"; COMANDO += " VALUES "; COMANDO += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNMov.intValue()); pstmt.setInt(6, concepto.intValue ()); pstmt.setString(7, strDescripcion); pstmt.setDouble(8, dblImporte); pstmt.setString(9, strNaturaleza); pstmt.setString(10, strReferencia); pstmt.setString(11,strReferencia2); pstmt.setString(12, strIDCtaMayor); pstmt.setString(13, strIDCCostoMov); pstmt.setString(14, strIDAuxiliar); pstmt.setString(15, strIDEjercicio); pstmt.setString(16, strIDEjercicio); pstmt.setString(17, strIDEjercicio); pstmt.setString(18, new CtaMayor().getTipoCuenta(strIDEjercicio, strIDCtaMayor)); pstmt.setString(19, strIDEjercicio); pstmt.execute(); pstmt.close(); } else { intNMov = intNReg; COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET IMPORTE = IMPORTE + ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND NATURALEZA = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setDouble(1, dblImporte); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.setString(6, strIDCtaMayor); pstmt.setString(7, strIDCCostoMov); pstmt.setString(8, strNaturaleza); pstmt.setString(9, strIDAuxiliar); pstmt.execute(); pstmt.close(); } if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0,2).equals("99")) { String strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); try{ //Verificar si el dato capturado en Referencia2 es un control presupuestal metsCCP.ccpDescomprometerAut(strIDLibro, strFolio, intNMov, strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, new Double(dblImporte), strDescripcion, strReferencia2, session); }catch(Exception e){ e.printStackTrace(); movimientoCancela(strFolio, intNMov, session); throw new Exception("Error al intentar registar el movimiento <br> "+e); } } } } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada"); } else if (getStatusPolizaInd().equals("D")) {//Si la p?liza est? cerrada definitivamente, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada definitivamente"); } else if (getStatusPolizaInd().equals("I")) {//Si la p?liza est? cancelada, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cancelada"); } } // M?todos del caso de uso Alta Movimiento Acumulando importe de cuentas iguales //tomando en cuenta la naturaleza y descripcion del movimiento. //Se utiliza en el caso de quere acumular importes en cuentas iguales pero bajo //conceptos diferentes. public void movimientoAltaAcumuladoD ( String strFolio, Integer concepto, String strDescripcion, double dblImporte, String strNaturaleza, String strReferencia, String strReferencia2, String strIDCtaMayor, String strIDCCostoMov, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception {//Este m?todo permite dar de alta un movimiento de una p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; int intNReg = 0; Integer intNMov = new Integer(0); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario //Solo los usuarios registrados en el sistema de contabilidad pueden capturar //movimientos, entre ellos otros sistemas if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derecho de crear movimientos"); } //Validar que la entidad del movimiento sea la misma que la entidad de la p?liza if (!strIDCCosto.equals(getEntidadValida(strIDEjercicio, strIDCCostoMov))) throw new Error("Entidad de movimiento distinta a entidad de poliza!"); //Validar si la cuenta existe en la tabla de cont_relacion if (!metodos2.rctaExisteCuenta(strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, session).booleanValue()) throw new Error("Puede que la cuenta no este tecleada correctamente, ya que no existe!<br>"+strIDCtaMayor+"-"+strIDCCostoMov+"-"+strIDAuxiliar); //Validar el status de la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); //la obtencion y modifcacion del recibo actual se hara en grabaCaja.jsp //porque se insertan dos movimientos //Validar si la cuenta de mayor tiene su auxiliar, si es que lo debe llevar tieneCtaMayor_Auxiliar(strIDCtaMayor, strIDAuxiliar, session); if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; if (strStatus.equals("A")) { //Cualquier usuario de contabilidad puede agregar movimientos //Validar si ya existe un movimiento con esta cuenta y naturaleza COMANDO = "SELECT COALESCE(NUMMOVTO,0) NREG "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND NATURALEZA = ? "; COMANDO += "AND DESCRIPCION = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setString(5, strIDCtaMayor); pstmt.setString(6, strIDCCostoMov); pstmt.setString(7, strNaturaleza); pstmt.setString(8, strDescripcion); pstmt.setString(9, strIDAuxiliar); rset = pstmt.executeQuery(); if (rset.next()) { intNReg = rset.getInt("NReg"); } pstmt.close(); rset.close(); if (intNReg == 0) { //Obtener el numero de movimiento COMANDO = "SELECT (COALESCE(MAX(NUMMOVTO),0)+1) NUMMOVTO "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if (rset.next()) { intNMov = new Integer(rset.getInt("NumMovto")); } rset.close(); pstmt.close(); if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0, 2).equals("99")) { String strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); try { //Verificar si el dato capturado en Referencia2 es un control presupuestal metsCCP.ccpDescomprometerAut(strIDLibro, strFolio, intNMov, strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, new Double(dblImporte), strDescripcion, strReferencia2, session); } catch (Exception e) { e.printStackTrace(); //movimientoCancela(strFolio, intNMov, session); throw new Exception("Error al intentar registar el movimiento <br> " + e); } } } //Los campos NumMovto y Fecha del movimiento, se asignan //en el trigger de inserci?n de cont_movimiento COMANDO = "INSERT INTO MATEO.CONT_MOVIMIENTO "; COMANDO += "(ID_EJERCICIO, ID_LIBRO, ID_CCOSTO, FOLIO, NUMMOVTO, CONCEPTO_ID, DESCRIPCION, IMPORTE, "; COMANDO += " NATURALEZA, REFERENCIA, REFERENCIA2, ID_CTAMAYORM, ID_CCOSTOM, "; COMANDO += " ID_AUXILIARM, ID_EJERCICIOM, ID_EJERCICIOM2, ID_EJERCICIOM3, "; COMANDO += " TIPO_CUENTA, ID_EJERCICIO2 )"; COMANDO += " VALUES "; COMANDO += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNMov.intValue()); pstmt.setInt (6, concepto.intValue ()); pstmt.setString(7, strDescripcion); pstmt.setDouble(8, dblImporte); pstmt.setString(9, strNaturaleza); pstmt.setString(10, strReferencia); pstmt.setString(11, strReferencia2); pstmt.setString(12, strIDCtaMayor); pstmt.setString(13, strIDCCostoMov); pstmt.setString(14, strIDAuxiliar); pstmt.setString(15, strIDEjercicio); pstmt.setString(16, strIDEjercicio); pstmt.setString(17, strIDEjercicio); pstmt.setString(18, new CtaMayor().getTipoCuenta(strIDEjercicio, strIDCtaMayor)); pstmt.setString(19, strIDEjercicio); pstmt.execute(); pstmt.close(); } else { intNMov = intNReg; if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0, 2).equals("99")) { String strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); try { //Verificar si el dato capturado en Referencia2 es un control presupuestal metsCCP.ccpDescomprometerAut(strIDLibro, strFolio, intNMov, strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, new Double(dblImporte), strDescripcion, strReferencia2, session); } catch (Exception e) { e.printStackTrace(); //movimientoCancela(strFolio, intNMov, session); throw new Exception("Error al intentar registar el movimiento <br> " + e); } } } COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET IMPORTE = IMPORTE + ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND NATURALEZA = ? "; COMANDO += "AND DESCRIPCION = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setDouble(1, dblImporte); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.setString(6, strIDCtaMayor); pstmt.setString(7, strIDCCostoMov); pstmt.setString(8, strNaturaleza); pstmt.setString(9, strDescripcion); pstmt.setString(10, strIDAuxiliar); pstmt.execute(); pstmt.close(); } } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada"); } else if (getStatusPolizaInd().equals("D")) {//Si la p?liza est? cerrada definitivamente, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cerrada definitivamente"); } else if (getStatusPolizaInd().equals("I")) {//Si la p?liza est? cancelada, no se pueden agregar movimientos throw new Error("No se puede crear movimiento en p?liza cancelada"); } } // M?todos del caso de uso Modifica Movimiento public void movimientoModifica ( String strFolio, int intNumMovto, String strFecha, Integer concepto, String strDescripcion, double dblImporte, String strNaturaleza, String strReferencia, String strReferencia2, String strIDCtaMayor, String strIDCCostoMov, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception {//Este m?todo permite modificar un movimiento de una p?liza PreparedStatement pstmt = null; String COMANDO = null; String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario //Solo los usuarios capturista de p?lizas, revisa p?lizas y director de contabilidad //pueden modificar una p?liza if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derecho de modificar movimientos"); } //Validar que la entidad del movimiento sea la misma que la entidad de la p?liza if (!strIDCCosto.equals(getEntidadValida(strIDEjercicio, strIDCCostoMov))) throw new Error("Entidad de movimiento distinta a entidad de poliza!"); //Validar si la cuenta existe en la tabla de cont_relacion if (!metodos2.rctaExisteCuenta(strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, session).booleanValue()) throw new Error("Puede que la cuenta no este tecleada correctamente, ya que no existe!"); //Validar el status de la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); //Validar si la cuenta de mayor tiene su auxiliar, si es que lo debe llevar tieneCtaMayor_Auxiliar(strIDCtaMayor, strIDAuxiliar, session); if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; if (strStatus.equals("A")) {//Cualquiera de los tres usuarios puede modificar un movimiento if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos de modificar movimientos en una poliza"); } COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET FECHA = TO_DATE(?, 'dd-mm-yyyy'), "; COMANDO += "CONCEPTO_ID = ? "; COMANDO += "DESCRIPCION = ?, IMPORTE = ?, "; COMANDO += "NATURALEZA = ?, REFERENCIA = ?, "; COMANDO += "REFERENCIA2 = ?, ID_CTAMAYORM = ?, "; COMANDO += "ID_CCOSTOM = ?, ID_AUXILIARM = ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setInt(2, concepto.intValue ()); pstmt.setString(3, strDescripcion); pstmt.setDouble(4, dblImporte); pstmt.setString(5, strNaturaleza); pstmt.setString(6, strReferencia); pstmt.setString(7, strReferencia2); pstmt.setString(8, strIDCtaMayor); pstmt.setString(9, strIDCCostoMov); pstmt.setString(10, strIDAuxiliar); pstmt.setString(11, strIDEjercicio); pstmt.setString(12, strIDLibro); pstmt.setString(13, strIDCCosto); pstmt.setString(14, strFolio); pstmt.setInt(15, intNumMovto); pstmt.execute(); pstmt.close(); //Borrar cualquier movimiento de descomprometido en control presupuestal //ccpDescomprometerBorraAut(strIDLibro, strFolio, new Integer(intNumMovto), session); if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0,2).equals("99")) { strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); //Verificar si el dato capturado en Referencia2 es un control presupuestal //ccpDescomprometerAut(strIDLibro, strFolio, new Integer(intNumMovto), strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, //new Double(dblImporte), strDescripcion, strReferencia2, session); } } } else if (strStatus.equals("R")) {//Solo el revisa p?lizas y el director de contabilidad pueden modificar movimientos //Validar usuario if (!(metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos para modificar movimientos en p?liza en revisi?n"); } COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET FECHA = TO_DATE(?, 'dd-mm-yyyy'), "; COMANDO += "DESCRIPCION = ?, IMPORTE = ?, "; COMANDO += "NATURALEZA = ?, REFERENCIA = ?, "; COMANDO += "REFERENCIA2 = ?, ID_CTAMAYOR = ?, "; COMANDO += "ID_CCOSTOM = ?, ID_AUXILIAR = ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFecha); pstmt.setString(2, strDescripcion); pstmt.setDouble(3, dblImporte); pstmt.setString(4, strNaturaleza); pstmt.setString(5, strReferencia); pstmt.setString(6, strReferencia2); pstmt.setString(7, strIDCtaMayor); pstmt.setString(8, strIDCCostoMov); pstmt.setString(9, strIDAuxiliar); pstmt.setString(10, strIDEjercicio); pstmt.setString(11, strIDLibro); pstmt.setString(12, strIDCCosto); pstmt.setString(13, strFolio); pstmt.setInt(14, intNumMovto); pstmt.execute(); pstmt.close(); //Borrar cualquier movimiento de descomprometido en control presupuestal //ccpDescomprometerBorraAut(strIDLibro, strFolio, new Integer(intNumMovto), session); if (strReferencia2 != null && strReferencia2.length() > 2) { if (strReferencia2.substring(0,2).equals("99")) { strFecha = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); //Verificar si el dato capturado en Referencia2 es un control presupuestal //ccpDescomprometerAut(strIDLibro, strFolio, new Integer(intNumMovto), strFecha, strIDCtaMayor, strIDCCostoMov, strIDAuxiliar, //new Double(dblImporte), strDescripcion, strReferencia2, session); } } } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada no se pueden modificar movimientos throw new Error("No se puede modificar movimiento en p?liza cerrada"); } else if (strStatus.equals("D")) {//Si la p?liza est? cerrada definitivamente, no se pueden modificar movimientos throw new Error("No se puede modificar movimiento en p?liza cerrada definitivamente"); } else if (strStatus.equals("I")) {//Si la p?liza est? cancelada, no se pueden modificar movimientos throw new Error("No se puede modificar movimiento en p?liza cancelada"); } } // M?todos del caso de uso Cancela Movimiento public void movimientoCancela ( String strFolio, int intNumMovto, HttpSession session ) throws SQLException, Exception {//Este m?todo permite cancelar o borrar un movimiento dependiendo del status de la p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); Long idUsuario = (Long)session.getAttribute(Constants.SESSION_USER_ID); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strStatus = null; //Validar usuario //Solo los usuarios capturista de p?lizas, revisa p?lizas y director de contabilidad //pueden modificar una p?liza if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derecho de cancelar movimientos"); } //Validar el status de la p?liza getDatosPoliza(strIDEjercicio, strIDLibro, strIDCCosto, strFolio); strStatus = getStatusPolizaInd(); if (strStatus.equals("A")) //si el usuario no es de caja se borra el movimiento {//Cualquiera de los tres usuarios puede BORRAR un movimiento if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06") || metodos3.esTipoUsuarioValido(session, "01") || metodos3.esTipoUsuarioValido(session, "00"))) { throw new Error("Usuario sin derechos de borrar movimientos"); } if (metodos3.esTipoUsuarioValido(session, "01")) //si el usuario es de caja se cancela el movimiento { COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET STATUS = 'T' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNumMovto); pstmt.execute(); pstmt.close(); } else if (metodos3.esTipoUsuarioValido(session, "00")) //si el usuario es de auditoria se cancela el movimiento { String strDescripcion = "Cancelado por "+ strUsuario +" en "+ (new java.util.Date()).toString(); COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET STATUS = 'I', "; COMANDO += "IMPORTE = 0, "; COMANDO += "DESCRIPCION = ? "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strDescripcion); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strFolio); pstmt.setInt(6, intNumMovto); pstmt.execute(); pstmt.close(); } else { //Si quien quiere borrar la p?liza no es alquien que revisa las p?lizas, ni el director de contabilidad if (!metodos3.esTipoUsuarioValido(session,"05") && !metodos3.esTipoUsuarioValido(session, "06")) { //Verificar si es el creador de la p?liza que pretende borrar COMANDO = "SELECT COUNT(*) NReg "; COMANDO += "FROM mateo.CONT_POLIZA "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND ID_USUARIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setLong(5, idUsuario); rset = pstmt.executeQuery(); int intNReg = 0; if (rset.next()) { intNReg = rset.getInt("NReg"); } rset.close(); pstmt.close(); if (intNReg == 0) throw new Error("Imposible borrar una p?liza no creada por "+strUsuario); } //Borrar cualquier movimiento de descomprometido en control presupuestal metsCCP.ccpDescomprometerBorraAut(strIDLibro, strFolio, new Integer(intNumMovto), session); //Cuando la p?liza est? abierta, la acci?n de cancelar movimiento //ocasiona que se borre f?sicamente el movimiento COMANDO = "DELETE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNumMovto); pstmt.execute(); pstmt.close(); } } else if (strStatus.equals("R")) {//Solo el revisa p?lizas y el director de contabilidad pueden CANCELAR movimientos //Cuando la p?liza est? en revisi?n, los movimientos se cancelan, no se borran //Validar usuario if (!(metodos3.esTipoUsuarioValido(session, "04") || metodos3.esTipoUsuarioValido(session, "05") || metodos3.esTipoUsuarioValido(session, "06"))) { throw new Error("Usuario sin derechos para cancelar movimientos en p?liza en revisi?n"); } COMANDO = "UPDATE MATEO.CONT_MOVIMIENTO "; COMANDO += "SET STATUS = 'I' "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ?"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNumMovto); pstmt.execute(); pstmt.close(); //Borrar cualquier movimiento de descomprometido en control presupuestal //ccpDescomprometerBorraAut(strIDLibro, strFolio, new Integer(intNumMovto), session); } else if (strStatus.equals("C")) {//Si la p?liza est? cerrada no se pueden modificar movimientos throw new Error("No se puede cancelar movimiento en p?liza cerrada"); } else if (strStatus.equals("D")) {//Si la p?liza est? cerrada definitivamente, no se pueden modificar movimientos throw new Error("No se puede cancelar movimiento en p?liza cerrada definitivamente"); } else if (strStatus.equals("I")) {//Si la p?liza est? cancelada, no se pueden modificar movimientos throw new Error("P?liza previamente cancelada"); } } /* public ArrayList getLibros(String login, String ejercicio, String cCosto) throws SQLException{ //Funcion que te devuelve los libros de un usuario PreparedStatement ps = null; ResultSet rs = null; StringBuffer query = new StringBuffer(); ArrayList libros= new ArrayList(); DiferentesDatosVO libro; query.append("SELECT F.ID_LIBRO , L.NOMBRE FROM MATEO.CONT_FOLIO F,MATEO.CONT_LIBRO L "); query.append("WHERE F.ID_LIBRO=L.ID_LIBRO AND F.ID_EJERCICIO =L.ID_EJERCICIO AND "); query.append("F.LOGIN=? AND F.ID_EJERCICIO=? AND ID_CCOSTO=? "); try{ ps=conn.prepareStatement(query.toString()); ps.setString(1,login); ps.setString(2,ejercicio); ps.setString(3,cCosto); rs = ps.executeQuery(); while(rs.next()){ libro=new DiferentesDatosVO(); libro.setId(rs.getString("ID_LIBRO")); libro.setDato(rs.getString("NOMBRE")); libros.add(libro); } }finally { if (rs != null) { try { rs.close(); } catch(Exception e) {}} if (ps != null) { try { ps.close(); } catch(Exception e) {}} } return libros; } */ // M?todos de uso general private boolean polizaCuadra ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception{//Este m?todo verifica si cuadran los movimientos de la p?liza boolean blnSw = false; if (!polizaConMovimientos(strIDEjercicio, strIDLibro, strIDCCosto, strFolio)) { throw new Error("Esta p?liza no tiene movimientos"); } //Calcular cr?ditos String COMANDO = "SELECT COALESCE(SUM(IMPORTE * CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END),-1) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { //System.out.println("Poliza "+ strIDCCosto+"-"+strIDLibro+strFolio +": $"+rset.getDouble("Importe")); if(new Double(rset.getDouble("Importe")).compareTo(new Double(0.5)) < 0 && new Double(rset.getDouble("Importe")).compareTo(new Double(-0.5)) > 0) blnSw = true; // Se permite que exista una diferencia de medio peso // if (strIDLibro.equals("20")){ // if(new Double(rset.getDouble("Importe")).compareTo(new Double(0.5)) < 0 && // new Double(rset.getDouble("Importe")).compareTo(new Double(-0.5)) > 0) // blnSw = true; // } // else{ // if(new Double(rset.getDouble("Importe")).compareTo(new Double(0)) == 0) // blnSw = true; // } } rset.close(); pstmt.close(); return blnSw; } // M?todos de uso general public boolean existePoliza ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo verifica si cuadran los movimientos de la p?liza int intNReg = 0; //Verificamos si la p?liza tiene movimientos String COMANDO = "SELECT COUNT(*) AS NREG "; COMANDO += "FROM MATEO.CONT_POLIZA "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNReg = rset.getInt("NReg"); } rset.close(); pstmt.close(); if (intNReg == 0) { return false; } else { return true; } } public boolean polizaConMovimientos ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo verifica si cuadran los movimientos de la p?liza int intNReg = 0; //Verificamos si la p?liza tiene movimientos String COMANDO = "SELECT COUNT(*) AS NREG "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNReg = rset.getInt("NReg"); } rset.close(); pstmt.close(); if (intNReg == 0) { return false; } else { return true; } } // M?todos de uso general public boolean polizaConMovsT ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo verifica si existen movimientos en status T, en espera de ser cancelados por Auditoria int intNReg = 0; //Leer movimientos String COMANDO = "SELECT COUNT(*) AS NREG "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE STATUS = 'T' "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNReg = rset.getInt("NReg"); } rset.close(); pstmt.close(); if (intNReg == 0) { return false; } else { return true; } } // M?todos de uso general public String getFolioPoliza ( String strIDLibro, HttpSession session ) throws SQLException, Exception {//Este m?todo obtiene el primer folio disponible para que el usuario pueda crear una p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derechos para crear una p?liza"); } //Obtener el siguiente n?mero de p?liza v?lido para el usuario COMANDO = "SELECT SUBSTR(COALESCE(MAX(C_POLIZA),'00000')+100001,2,5) C_POLIZA "; COMANDO += "FROM MATEO.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Poliza"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("Usuario con rango de p?lizas inv?lido"); } return strFolio; } //M?todos de uso general public String getFolioPolizaActual ( HttpSession session ) throws SQLException, Exception {//Este m?todo obtiene el folio del campo C_Poliza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no esta registrado en el sistema de contabilidad"); } //Obtener el n?mero de p?liza actual COMANDO = "SELECT COALESCE(C_POLIZA,'00000') C_POLIZA "; COMANDO += "FROM MATEO.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Poliza"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("Usuario sin rango de p?lizas"); } return strFolio; } // M?todos de uso general public boolean getExistePolizaActual ( HttpSession session ) throws SQLException, Exception {//Este m?todo regresa true si hay una p?liza con el folio = c_poliza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no esta registrado en el sistema de contabilidad"); } //Obtener el n?mero de p?liza actual COMANDO = "SELECT COALESCE(C_POLIZA,'00000') C_POLIZA "; COMANDO += "FROM MATEO.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Poliza"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("Usuario sin rango de p?lizas"); } return getExistePoliza(strFolio, session); } // M?todos de uso general public boolean getExistePoliza ( String strFolio, HttpSession session ) throws SQLException, Exception {//Este m?todo regresa true si hay una p?liza con el folio = c_poliza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; Integer intNReg = null; boolean blnSw = false; String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no esta registrado en el sistema de contabilidad"); } COMANDO = "SELECT COUNT(*) NREG "; COMANDO += "FROM MATEO.CONT_POLIZA "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if (rset.next()) { intNReg = new Integer(rset.getInt("NReg")); } rset.close(); pstmt.close(); if (intNReg.compareTo(new Integer(0)) == 1) blnSw = true; else if (intNReg.compareTo(new Integer(0)) == 0) blnSw = false; else throw new Error("Error critico en polizas! <br> Comunicarse a la Direccion de Sistemas"); return blnSw; } // M?todos de uso general public void getDatosPoliza ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo, obtiene los datos de la p?liza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; //Limpiar atributos de clase limpiarAtributos(); //Obtener datos de la p?liza COMANDO = "SELECT TO_CHAR(FECHA, 'dd-mm-yyyy') FECHA, "; COMANDO += "DESCRIPCION, U.USERNAME ID_USUARIO, "; COMANDO += "CASE P.STATUS WHEN 'A' THEN 'Abierto' WHEN 'R' THEN 'En Revisióon' "; COMANDO += "WHEN 'C' THEN 'Cerrada' WHEN 'D' THEN 'Cierre Definitivo' WHEN 'I' THEN 'Cancelada' "; COMANDO += "ELSE 'Estatus Erróneo' END AS Status, "; COMANDO += "STATUS STATUSIND, REVISADO_POR "; COMANDO += "FROM MATEO.CONT_POLIZA P, NOE.APP_USER U "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND P.ID_USUARIO = U.ID "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if(rset.next()) { atrstrFecha = rset.getString("Fecha"); atrstrStatus = rset.getString("Status"); atrstrIDUsuario = rset.getString("ID_Usuario"); atrstrDescripcion = rset.getString("Descripcion"); atrstrIDEjercicio = strIDEjercicio; atrstrIDLibro = strIDLibro; atrstrFolio = strFolio; atrstrStatusInd = rset.getString("StatusInd"); atrstrRevisadoPor = rset.getString("Revisado_Por"); } rset.close(); pstmt.close(); if (atrstrStatusInd == null) { new Error("P?liza inv?lida! " + strIDEjercicio + " " + strIDLibro + " " + strIDCCosto + " " + strFolio); } } // M?todos de uso general public String getStatusPoliza() throws Exception {//Este m?todo, regresa el status de la p?liza return atrstrStatus; } //M?todos de uso general public String getStatusPolizaInd() throws Exception {//Este m?todo, regresa el status de la p?liza return atrstrStatusInd; } // M?todos de uso general public String getCreadorPoliza () throws Exception {//Este m?todo, regresa el creador de la p?liza return atrstrIDUsuario; } // M?todos de uso general public String getRevisaPoliza () throws Exception {//Este m?todo, regresa el login de quien revis? la p?liza if (atrstrRevisadoPor == null) atrstrRevisadoPor = ""; return atrstrRevisadoPor; } // M?todos de uso general public String getFechaPoliza () throws Exception {//Este m?todo, regresa la fecha de la p?liza return atrstrFecha; } //M?todos de uso general public String getDescripcionPoliza() throws Exception {//Este m?todo, regresa la descripcion de la p?liza return atrstrDescripcion; } //M?todos de uso general public String getIDEjercicioPoliza () throws Exception {//Este m?todo, regresa el ejercicio de la p?liza return atrstrIDEjercicio; } // M?todos de uso general public String getIDLibroPoliza () throws Exception {//Este m?todo, regresa libro de la p?liza return atrstrIDLibro; } //M?todos de uso general public String getFolioPoliza() throws Exception {//Este m?todo, regresa el folio de la p?liza return atrstrFolio; } // M?todos de uso general public String getNombreLibro (String strIDLibro) throws SQLException, Exception { String COMANDO = null; PreparedStatement pstmt = null; ResultSet rset = null; String strLibro = null; COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_LIBRO "; COMANDO += "WHERE ID_LIBRO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDLibro); rset = pstmt.executeQuery(); if(rset.next()) { strLibro = rset.getString("Nombre"); } if(rset.wasNull()) { new Error("Libro inv?lido!"); } rset.close(); pstmt.close(); return strLibro; } // M?todos de uso general public void limpiarAtributos () throws Exception { atrstrIDEjercicio = null; atrstrIDLibro = null; atrstrFolio = null; atrstrFecha = null; atrstrDescripcion = null; atrstrIDUsuario = null; atrstrStatus = null; atrstrStatusInd = null; } // M?todos de uso general public Integer getNumeroMovimiento ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo, obtiene el siguiente n?mero de movimiento PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; Integer intNumMovto = null; //Obtener datos de la p?liza COMANDO = "SELECT COALESCE(MAX(NUMMOVTO),0)+1 NUMMOVTO "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); rset = pstmt.executeQuery(); if(rset.next()) { intNumMovto = new Integer(rset.getInt("NumMovto")); } if (rset.wasNull()) { new Error("P?liza inv?lida!"); } rset.close(); pstmt.close(); return intNumMovto; } // Limpiar atributos de movimiento public void limpiarAtributosMov() { atrstrFechaMov = null; atrstrStatusMov = null; atrstrDescripcionMov = null; atrstrIDEjercicioMov = null; atrstrIDLibroMov = null; atrstrFolioMov = null; atrstrNaturalezaMov = null; atrdblImporteMov = null; atrstrReferenciaMov = null; atrstrReferencia2Mov = null; atrstrCtaMayorMov = null; atrstrCCostoMov = null; atrstrAuxiliarMov = null; } // M?todos de uso general public void getDatosMovimiento ( String strFolio, Integer intNumMov, HttpSession session ) throws SQLException, Exception {//Este m?todo, obtiene los datos de la p?liza String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDLibro = (String)session.getAttribute("id_libro"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; //Limpiar atributos de clase limpiarAtributosMov(); //Obtener datos de la p?liza COMANDO = "SELECT TO_CHAR(FECHA, 'dd-mm-yyyy') FECHA, "; COMANDO += "DESCRIPCION, IMPORTE, NATURALEZA, "; COMANDO += "COALESCE(REFERENCIA, '-') REFERENCIA, "; COMANDO += "COALESCE(REFERENCIA2, '-') REFERENCIA2, "; COMANDO += "ID_CTAMAYORM, ID_CCOSTOM, "; COMANDO += "COALESCE(ID_AUXILIARM, '-') ID_AUXILIARM, "; COMANDO += "CASE STATUS WHEN 'A' THEN 'Abierto' WHEN 'R' THEN 'En Revisióon' "; COMANDO += "WHEN 'C' THEN 'Cerrada' WHEN 'D' THEN 'Cierre Definitivo' WHEN 'I' THEN 'Cancelada' "; COMANDO += "ELSE 'Estatus Erróneo' END AS Status "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NUMMOVTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); pstmt.setInt(5, intNumMov.intValue()); rset = pstmt.executeQuery(); if(rset.next()) { atrstrFechaMov = rset.getString("Fecha"); atrstrStatusMov = rset.getString("Status"); atrstrDescripcionMov = rset.getString("Descripcion"); atrstrIDEjercicioMov = strIDEjercicio; atrstrIDLibroMov = strIDLibro; atrstrFolioMov = strFolio; atrstrNaturalezaMov = rset.getString("Naturaleza"); atrdblImporteMov = new Double(rset.getDouble("Importe")); atrstrReferenciaMov = rset.getString("Referencia"); atrstrReferencia2Mov = rset.getString("Referencia2"); atrstrCtaMayorMov = rset.getString("ID_CtaMayorM"); atrstrCCostoMov = rset.getString("ID_CCostoM"); atrstrAuxiliarMov = rset.getString("ID_AuxiliarM"); } rset.close(); pstmt.close(); if (atrstrCCostoMov == null) { new Error("P?liza inv?lida!"); } } // M?todos de uso general public String getFechaMov() { return atrstrFechaMov; } // M?todos de uso general public String getDescripcionMov() { return atrstrDescripcionMov; } //M?todos de uso general public double getImporteMov() { return atrdblImporteMov.doubleValue(); } //M?todos de uso general public String getNaturalezaMov() { return atrstrNaturalezaMov; } //M?todos de uso general public String getReferenciaMov() { if (atrstrReferenciaMov.equals("-")) atrstrReferenciaMov = ""; return atrstrReferenciaMov; } // M?todos de uso general public String getReferencia2Mov() { if (atrstrReferencia2Mov.equals("-")) atrstrReferencia2Mov = ""; return atrstrReferencia2Mov; } //M?todos de uso general public String getCtaMayorMov() { return atrstrCtaMayorMov; } //M?todos de uso general public String getCCostoMov() { return atrstrCCostoMov; } //M?todos de uso general public String getAuxiliarMov() { if (atrstrAuxiliarMov.equals("-")) atrstrAuxiliarMov = ""; return atrstrAuxiliarMov; } //M?todos de uso general public String getStatusMov() { return atrstrStatusMov; } // M?todos de uso general public PreparedStatement getDatosMovimiento ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo, obtiene los datos de la p?liza PreparedStatement pstmt = null; String COMANDO = null; //Obtener datos de la p?liza COMANDO = "SELECT NUMMOVTO, TO_CHAR(FECHA, 'dd-mm-yyyy') FECHA, "; COMANDO += "DESCRIPCION, IMPORTE, NATURALEZA, "; COMANDO += "COALESCE(REFERENCIA, '-') REFERENCIA, "; COMANDO += "COALESCE(REFERENCIA2, '-') REFERENCIA2, "; COMANDO += "ID_CTAMAYORM, ID_CCOSTOM, "; COMANDO += "COALESCE(ID_AUXILIARM, '-') ID_AUXILIARM, "; COMANDO += "CASE STATUS WHEN 'A' THEN 'Abierto' WHEN 'R' THEN 'En Revisióon' "; COMANDO += "WHEN 'C' THEN 'Cerrada' WHEN 'D' THEN 'Cierre Definitivo' WHEN 'I' THEN 'Cancelada' "; COMANDO += "ELSE 'Estatus Erróneo' END AS Status, "; COMANDO += "STATUS STATUSIND "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); return pstmt; } // M?todos de uso general public PreparedStatement getDatosMovimientoConAvisos ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception {//Este m?todo, obtiene los datos de la p?liza PreparedStatement pstmt = null; String COMANDO = null; //Obtener datos de la p?liza COMANDO = "SELECT M.NUMMOVTO, TO_CHAR(M.FECHA, 'dd-mm-yyyy') FECHA, "; COMANDO += "M.DESCRIPCION, M.IMPORTE, M.NATURALEZA, "; COMANDO += "COALESCE(M.REFERENCIA, '-') REFERENCIA, "; COMANDO += "COALESCE(M.REFERENCIA2, '-') REFERENCIA2, "; COMANDO += "M.ID_CTAMAYORM, M.ID_CCOSTOM, "; COMANDO += "COALESCE(M.ID_AUXILIARM, '-') ID_AUXILIARM, "; COMANDO += "CASE M.STATUS WHEN 'A' THEN 'Abierto' WHEN 'R' THEN 'En Revisióon' "; COMANDO += "WHEN 'C' THEN 'Cerrada' WHEN 'D' THEN 'Cierre Definitivo' WHEN 'I' THEN 'Cancelada' "; COMANDO += "ELSE 'Estatus Erróneo' END AS Status "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO M, CONT_CTAMAYOR C "; COMANDO += "WHERE C.ID_EJERCICIO = M.ID_EJERCICIO "; COMANDO += "AND C.ID_CTAMAYOR = M.ID_CTAMAYORM "; COMANDO += "AND C.AVISO = 'S' "; COMANDO += "AND C.DETALLE = 'S' "; COMANDO += "AND M.ID_EJERCICIO = ? "; COMANDO += "AND M.ID_LIBRO = ? "; COMANDO += "AND M.ID_CCOSTO = ? "; COMANDO += "AND M.FOLIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); return pstmt; } // M?todos de uso general public PreparedStatement getMovimientos ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strTipo, String strFechaI, String strFechaF ) throws SQLException, Exception {//Este m?todo, obtiene los movimientos de la cuenta dependiendo del tipo //El tipo, indica si se requieren movimientos de p?lizas abiertas y en revisi?n, //o de p?lizas cerradas, o de cualquier p?liza. //Validando el rango de fechas PreparedStatement pstmt = null; String COMANDO = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener datos de la p?liza COMANDO = "SELECT M.ID_LIBRO, M.FOLIO, M.NUMMOVTO, TO_CHAR(M.FECHA, 'dd-mm-yyyy') FECHA, "; COMANDO += "M.DESCRIPCION, M.IMPORTE, M.NATURALEZA, "; COMANDO += "COALESCE(M.REFERENCIA, '-') REFERENCIA, "; COMANDO += "COALESCE(M.REFERENCIA2, '-') REFERENCIA2, "; COMANDO += "CASE M.STATUS WHEN 'A' THEN 'Abierto' WHEN 'R' THEN 'En Revisióon' "; COMANDO += "WHEN 'C' THEN 'Cerrada' WHEN 'D' THEN 'Cierre Definitivo' WHEN 'I' THEN 'Cancelada' "; COMANDO += "ELSE 'Estatus Erróneo' END AS Status "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO M, CONT_POLIZA P "; COMANDO += "WHERE M.ID_EJERCICIO = P.ID_EJERCICIO "; COMANDO += "AND M.ID_LIBRO = P.ID_LIBRO "; COMANDO += "AND M.ID_CCOSTO = P.ID_CCOSTO "; COMANDO += "AND M.FOLIO = P.FOLIO "; if (strTipo.equals("T")) { //Todos los movimientos, incluyendo polizas abiertas y cerradas } else if (strTipo.equals("P")) { //Movimientos por afectar, solo polizas abiertas y en revision COMANDO += "AND P.STATUS IN ('A', 'R') "; } else if (strTipo.equals("A")) { //Movimientos que ya afectaron, solo polizas cerradas y definitivamente cerradas COMANDO += "AND P.STATUS IN ('C', 'D') "; } else throw new Error("Tipo de busqueda invalido"); COMANDO += "AND TO_DATE(M.FECHA, 'dd-mm-yy') BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND M.ID_EJERCICIO = ? "; COMANDO += "AND M.ID_CTAMAYORM = ? "; COMANDO += "AND M.ID_CCOSTOM = ? "; if (strIDAuxiliar.equals("0000000")) { COMANDO += "ORDER BY TO_DATE(FECHA,'dd-mm-yy'), FOLIO, NUMMOVTO "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); } else { COMANDO += "AND M.ID_AUXILIARM = ? "; COMANDO += "ORDER BY TO_DATE(FECHA,'dd-mm-yy'), FOLIO, NUMMOVTO "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); } return pstmt; } // M?todos de uso general public String getFolioRecibo ( String strIDLibro, HttpSession session ) throws SQLException, Exception {//Este m?todo obtiene el primer folio disponible para que el usuario pueda crear un recibo PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derechos para crear una recibo"); } //Obtener el siguiente n?mero de p?liza v?lido para el usuario COMANDO = "SELECT SUBSTR(COALESCE(MAX(C_RECIBO),'00000')+1000001,2,6) C_RECIBO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Recibo"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("Usuario con rango de recibos inv?lido"); } return strFolio; } // M?todos de uso general public String getFolioReciboActual ( HttpSession session ) throws SQLException, Exception {//Este m?todo obtiene el primer folio disponible para que el usuario pueda crear un recibo PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derechos para crear una recibo"); } //Obtener el siguiente n?mero de p?liza v?lido para el usuario COMANDO = "SELECT COALESCE(C_RECIBO,'000000') C_RECIBO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Recibo"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("Usuario con rango de recibos inv?lido"); } return strFolio; } // Cambiar el numero de recibo actual public void reciboModificaActual ( String strRecibo, String strIDLibro, HttpSession session ) throws Exception {//Este modifica el recibo actual PreparedStatement pstmt = null; String COMANDO = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //modificar el recibo actual COMANDO = "UPDATE mateo.CONT_FOLIO "; COMANDO += "SET C_RECIBO = ? "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strRecibo); pstmt.setString(2, strUsuario.toUpperCase()); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.executeUpdate(); pstmt.close(); } // Cambiar el numero de recibo actual public void reciboModificaActual ( String strRecibo, HttpSession session ) throws Exception {//Este modifica el recibo actual PreparedStatement pstmt = null; String COMANDO = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //modificar el recibo actual COMANDO = "UPDATE mateo.CONT_FOLIO "; COMANDO += "SET C_RECIBO = ? "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strRecibo); pstmt.setString(2, strUsuario.toUpperCase()); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.executeUpdate(); pstmt.close(); } //Cambiar el numero de poliza actual public void polizaModificaActual ( String strPoliza, String strIDLibro, HttpSession session ) throws SQLException, Exception {//Este modifica la poliza actual PreparedStatement pstmt = null; String COMANDO = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //modificar el recibo actual COMANDO = "UPDATE MATEO.CONT_FOLIO "; COMANDO += "SET C_POLIZA = ? "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strPoliza); pstmt.setString(2, strUsuario.toUpperCase()); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.execute(); pstmt.close(); } // Cambiar el numero de poliza actual public void polizaModificaActual ( String strPoliza, HttpSession session ) throws SQLException, Exception {//Este modifica la poliza actual PreparedStatement pstmt = null; String COMANDO = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); String strIDLibro = (String)session.getAttribute("id_libro"); //modificar el recibo actual COMANDO = "UPDATE mateo.CONT_FOLIO "; COMANDO += "SET C_POLIZA = ? "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strPoliza); pstmt.setString(2, strUsuario.toUpperCase()); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDLibro); pstmt.setString(5, strIDCCosto); pstmt.execute(); pstmt.close(); } // M?todos de uso general public String getFolioPolizaC ( String strIDLibro, HttpSession session ) throws SQLException, Exception {//Este m?todo obtiene el folio actual de la poliza PreparedStatement pstmt = null; ResultSet rset = null; String COMANDO = null; String strFolio = null; String strUsuario = ((String)session.getAttribute("login")).toUpperCase(); String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); String strIDCCosto = (String)session.getAttribute("id_ccosto"); //Validar que usuario tenga derechos para sistema de contabilidad if (!metodos3.esUsuarioValido(session)) { throw new Error("El usuario no tiene derechos para crear una p?liza"); } //Obtener el siguiente n?mero de p?liza v?lido para el usuario COMANDO = "SELECT SUBSTR(COALESCE(MAX(C_POLIZA),'00000')+100000,2,5) C_POLIZA "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE UPPER(LOGIN) = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario.toUpperCase()); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strIDCCosto); rset = pstmt.executeQuery(); if (rset.next()) { strFolio = rset.getString("C_Poliza"); } pstmt.close(); rset.close(); if (strFolio == null) { throw new Error("No existe la poliza o los datos son incorrectos"); } return strFolio; } // M?todos de uso general public String getEntidadValida ( String strIDEjercicio, String strIDCCosto ) throws SQLException, Exception { //Obtiene el nivel contable del ejercicio actual, //y obtiene la entidad del CCosto Integer intNContable = null; String COMANDO = "SELECT NIVEL_CONTABLE "; COMANDO += "FROM MATEO.CONT_EJERCICIO "; COMANDO += "WHERE ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intNContable = new Integer(rset.getInt("Nivel_Contable")); } if (rset.wasNull()) { throw new Error("Ejercicio contable inv?lido"); } pstmt.close(); rset.close(); String strEntidad = ""; try{ StringTokenizer strTkn = new StringTokenizer(strIDCCosto, "."); int intCont = 1; while (strTkn.hasMoreTokens() && intCont <= intNContable.intValue()) { strEntidad += strTkn.nextToken()+"."; intCont += 1; } strEntidad = strEntidad.substring(0,strEntidad.length()-1); }catch (NoSuchElementException e) { throw new Error("Contabilidad invalida! <br> No cumple con el nivel contable"); } return strEntidad; } // M?todos de uso general public String getTAuxiliarValido ( String strIDEjercicio, String strIDAuxiliar ) throws SQLException, Exception { //Obtiene el nivel de tipo de auxiliar del ejercicio actual, //y obtiene el tipo de auxiliar del auxiliar Integer intTAuxiliar = null; String COMANDO = "SELECT NIVEL_TAUXILIAR "; COMANDO += "FROM mateo.CONT_EJERCICIO "; COMANDO += "WHERE ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { intTAuxiliar = new Integer(rset.getInt("Nivel_TAuxiliar")); } pstmt.close(); rset.close(); if (intTAuxiliar == null) { throw new Error("Ejercicio contable invalido <br> No tiene tipo de auxiliar"); } String strAuxiliar = ""; try{ StringTokenizer strTkn = new StringTokenizer(strIDAuxiliar, "."); int intCont = 1; while (strTkn.hasMoreTokens() && intCont <= intTAuxiliar.intValue()) { strAuxiliar += strTkn.nextToken()+"."; intCont += 1; } strAuxiliar = strAuxiliar.substring(0,strAuxiliar.length()-1); }catch (NoSuchElementException e) { throw new Error("Auxiliar invalido! <br> No cumple con el tipo de auxiliar"); } return strAuxiliar; } // Obtener Entidad de una p?liza public String getEntidadPoliza ( String strIDEjercicio, String strIDLibro, String strFolioPoliza, String strUsuario ) throws SQLException, Exception { String strIDCCosto = null; String COMANDO = "SELECT ID_CCOSTO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE LOGIN = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND C_POLIZA = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strUsuario); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDLibro); pstmt.setString(4, strFolioPoliza); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strIDCCosto = rset.getString("ID_CCosto"); } if (strIDCCosto == null) throw new Error("Poliza Actual "+ strFolioPoliza +" invalida para el usuario "+ strUsuario); pstmt.close(); rset.close(); return getEntidadValida(strIDEjercicio, strIDCCosto); } public void guardarDatosArchivo(String strArchivo, String strLibro, String strPoliza, HttpSession session )throws Exception{ java.io.BufferedWriter bw = new java.io.BufferedWriter(new java.io.FileWriter(strArchivo, true)); bw.write((String)session.getAttribute("id_ejercicio")); bw.write('\t'); bw.write(strLibro); bw.write('\t'); bw.write(strPoliza); bw.write('\t'); bw.write((String)session.getAttribute("strFechaFormat")); bw.write('\t'); bw.write((String)session.getAttribute("strDescripcion")); bw.write('\t'); bw.write((String)session.getAttribute("dblImporte")); bw.write('\t'); bw.write((String)session.getAttribute("strNumRecibo")); bw.write('\t'); bw.write((String)session.getAttribute("strAuxiliar")); bw.write('\t'); bw.write((String)session.getAttribute("strCTAMayor")); bw.write('\t'); bw.write((String)session.getAttribute("strCCosto")); bw.write('\t'); bw.write((String)session.getAttribute("strAuxiliar")); bw.newLine(); bw.close(); } // Obtener nombre de centro de costo public String getNombreCCosto ( String strIDEjercicio, String strIDCCosto ) throws SQLException, Exception { String strNombre = null; 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"); } rset.close(); pstmt.close(); if(strNombre == null) throw new Error("El centro de costo no existe"); return strNombre; } // Obtener nombre de cuenta de mayor public String getNombreCtaMayor ( String strIDEjercicio, String strIDCtaMayor ) throws SQLException, Exception { String strNombre = null; String COMANDO = "SELECT NOMBRE "; 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()) { strNombre = rset.getString("Nombre"); } rset.close(); pstmt.close(); if(strNombre == null) throw new Error("La cuenta de mayor "+strIDCtaMayor+" no existe"); return strNombre; } // Obtener nombre de centro de auxiliar public String getNombreAuxiliar ( String strIDEjercicio, String strIDAuxiliar ) throws SQLException, Exception { String strNombre = null; String COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_AUXILIAR "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_AUXILIAR = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strNombre = rset.getString("Nombre"); } rset.close(); pstmt.close(); if(strNombre == null) throw new Error("La cuenta de auxiliar no existe"); return strNombre; } // Obtener nombre de cuenta public String getNombreCuenta ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar ) throws SQLException, Exception { String strNombre = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; String COMANDO = "SELECT NOMBRE "; 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()) { strNombre = rset.getString("Nombre"); } rset.close(); pstmt.close(); if(strNombre == null) throw new Error("La cuenta "+strIDCtaMayor+"-"+strIDCCosto+"-"+strIDAuxiliar+" no existe"); return strNombre; } // Obtener el atributo Auxiliar de la cuenta de mayor public Boolean getLlevaAuxiliar ( 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"); } pstmt.close(); rset.close(); if (strLlevaAuxiliar == null) throw new Error("Cuenta de mayor invalida"); if (strLlevaAuxiliar.equals("S")) return new Boolean(true); else if (strLlevaAuxiliar.equals("N")) return new Boolean("false"); else return null; } // Validar si la cuenta de mayor tiene su auxiliar, si es que lo debe tener public void tieneCtaMayor_Auxiliar ( String strIDCtaMayor, String strIDAuxiliar, HttpSession session ) throws SQLException, Exception { if (strIDAuxiliar == null || strIDAuxiliar.equals("0000000") || strIDAuxiliar.equals("-")) strIDAuxiliar = ""; //Validar que si la cuenta de mayor tiene su auxiliar, si es que lo debe llevar if (getLlevaAuxiliar(strIDCtaMayor, session).booleanValue() && strIDAuxiliar.length() == 0) throw new Error("La cuenta de mayor debe tener un auxiliar <br> "+ "Imposible grabar movimiento sin auxiliar"); //De lo contrario if (!getLlevaAuxiliar(strIDCtaMayor, session).booleanValue() && strIDAuxiliar.length() > 0) throw new Error("La cuenta de mayor no debe tener un auxiliar <br> "+ "Imposible grabar movimiento con auxiliar"); } // Obtener atributo Status public double getPolizaImporte ( String strIDEjercicio, String strIDLibro, String strIDCCosto, String strFolio ) throws SQLException, Exception { double dblImporte = 0; String COMANDO = "SELECT COALESCE(SUM(IMPORTE*CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); pstmt.setString(2, strIDLibro); pstmt.setString(3, strIDCCosto); pstmt.setString(4, strFolio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); if (dblImporte == 0) throw new Error("Numero de poliza invalido"); return dblImporte; } // Obtener Saldo anterior de la cuenta indicada public double getEdoCtaSaldoAnterior ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaInicial, String strTipo ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; String COMANDO = "SELECT COALESCE(SUM(M.IMPORTE*CASE M.NATURALEZA WHEN 'D' THEN -1 ELSE 1 END ),0) AS IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO M, CONT_POLIZA P "; COMANDO += "WHERE M.ID_EJERCICIO = P.ID_EJERCICIO "; COMANDO += "AND M.ID_LIBRO = P.ID_LIBRO "; COMANDO += "AND M.ID_CCOSTO = P.ID_CCOSTO "; COMANDO += "AND M.FOLIO = P.FOLIO "; if (strTipo.equals("T")) { } else if (strTipo.equals("P")) { //Movimientos que no han afectado, que son de polizas abiertas o en revision COMANDO += "AND P.STATUS IN ('A', 'R') "; } else if (strTipo.equals("A")) { //Movimientos que ya afectaron, solo polizas cerradas y definitivamente cerradas COMANDO += "AND P.STATUS IN ('C', 'D') "; } else throw new Error("Tipo de busqueda invalido"); COMANDO += "AND M.FECHA < TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND M.ID_EJERCICIO = ? "; COMANDO += "AND M.ID_CTAMAYORM = ? "; COMANDO += "AND M.ID_CCOSTOM = ? "; if (strIDAuxiliar.equals("0000000")) { pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaInicial); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDCtaMayor); pstmt.setString(4, strIDCCosto); } else { COMANDO += "AND M.ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaInicial); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDCtaMayor); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strIDAuxiliar); } ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } // Obtener importe subtotal de la cuenta indicada public double getEdoCtaSubTotal ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaInicial, String strFechaFinal, String strTipo ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; String COMANDO = "SELECT COALESCE(SUM(IMPORTE*CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; if (strTipo.equals("T")) { //Todos los movimientos, incluyendo polizas abiertas y cerradas COMANDO += "WHERE ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO IN "; COMANDO += "(SELECT ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO "; COMANDO += " FROM MATEO.CONT_POLIZA "; COMANDO += " WHERE STATUS IN ('A', 'R', 'C', 'D')) "; } else if (strTipo.equals("P")) { //Movimientos por afectar, solo polizas abiertas y en revision COMANDO += "WHERE ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO IN "; COMANDO += "(SELECT ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO "; COMANDO += " FROM MATEO.CONT_POLIZA "; COMANDO += " WHERE STATUS IN ('A', 'R')) "; } else if (strTipo.equals("A")) { //Movimientos que ya afectaron, solo polizas cerradas y definitivamente cerradas COMANDO += "WHERE ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO IN "; COMANDO += "(SELECT ID_EJERCICIO || ID_LIBRO || ID_CCOSTO || FOLIO "; COMANDO += " FROM MATEO.CONT_POLIZA "; COMANDO += " WHERE STATUS IN ('C', 'D')) "; } else throw new Error("Tipo de busqueda invalido"); COMANDO += "AND FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; if (strIDAuxiliar.equals("0000000")) { pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaInicial); pstmt.setString(2, strFechaFinal); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); } else { COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaInicial); pstmt.setString(2, strFechaFinal); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); } ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } // Obtener importe total de una cuenta public double getImporteTotal ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI, String strFechaF ) throws SQLException, Exception { double dblImporte = 0; double dblSAnterior = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Saldo Anterior String COMANDO = "SELECT COALESCE(SUM(IMPORTE*CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE FECHA < TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDCtaMayor); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblSAnterior = rset.getDouble("Importe"); } rset.close(); pstmt.close(); //Obtener Importe del rango COMANDO = "SELECT COALESCE(SUM(IMPORTE*CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblSAnterior + dblImporte; } // Obtener importe total de creditos de una cuenta public double getTotalCreditos ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI, String strFechaF ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Importe del rango String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE NATURALEZA = 'C' "; COMANDO += "AND FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } // Obtener importe total de cargos de una cuenta public double getTotalCargos ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI, String strFechaF ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Importe del rango String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE NATURALEZA = 'D' "; COMANDO += "AND FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } // Obtener importe total de cargos de una cuenta public double getSaldoAnterior ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Importe del rango String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE NATURALEZA = 'D' "; COMANDO += "AND FECHA < TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strIDEjercicio); pstmt.setString(3, strIDCtaMayor); pstmt.setString(4, strIDCCosto); pstmt.setString(5, strIDAuxiliar); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } // Obtener nombre del ejercicio contable public String getNombreEjercicio ( String strIDEjercicio ) throws SQLException, Exception { String strNombre = null; String COMANDO = "SELECT NOMBRE "; COMANDO += "FROM mateo.CONT_EJERCICIO "; COMANDO += "WHERE STATUS = 'A' "; COMANDO += "AND ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { strNombre = rset.getString("Nombre"); } rset.close(); pstmt.close(); if(strNombre == null) throw new Error("El ejercicio no existe "+strIDEjercicio); return strNombre; } // Obtener listado de folios dependiendo los datos de la session public PreparedStatement getFoliosSession ( HttpSession session ) throws SQLException, Exception { String COMANDO = "SELECT ID_EJERCICIO, ID_CCOSTO, ID_LIBRO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE LOGIN = ? "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CCOSTO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); pstmt.setString(2, (String)session.getAttribute("id_ejercicio")); pstmt.setString(3, (String)session.getAttribute("id_ccosto")); return pstmt; } //Obtener listado de ejercicios y contabilidades activos del usuario public PreparedStatement getContabilidades ( HttpSession session ) throws SQLException, Exception { String COMANDO = "SELECT DISTINCT ID_CCOSTO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE LOGIN = ? "; COMANDO += "AND ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); pstmt.setString(2, (String)session.getAttribute("ejercicio")); return pstmt; } //Obtener listado de ejercicios y contabilidades activos del usuario public PreparedStatement getContabilidades ( String ejercicio, HttpSession session ) throws SQLException, Exception { String COMANDO = "SELECT DISTINCT ID_CCOSTO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE LOGIN = ? "; COMANDO += "AND ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); pstmt.setString(2, ejercicio); return pstmt; } // Obtener listado de ejercicios y contabilidades activos del usuario public PreparedStatement getContabilidades ( String ejercicio ) throws SQLException, Exception { String COMANDO = "SELECT DISTINCT ID_CCOSTO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE ID_EJERCICIO = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, ejercicio); return pstmt; } // Obtener listado de ejercicios y contabilidades activos del usuario public PreparedStatement getEjercicios ( HttpSession session ) throws SQLException, Exception { String COMANDO = "SELECT DISTINCT ID_EJERCICIO "; COMANDO += "FROM mateo.CONT_FOLIO "; COMANDO += "WHERE LOGIN = ? "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, (String)session.getAttribute("login")); return pstmt; } // Validar si la cuenta tiene longitud valida public boolean getEsCuentaLengthValida(String strCtaMayor, String strCCosto, String strAuxiliar,HttpSession session) throws SQLException, Exception { String strTipoCta = null; String strMascCtaMayor = null; String strMascCCosto = null; String strMascAuxiliar = null; String strNivelContable = null; boolean blnSw = true; //Obtener ejercicio de la session String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); //Obtener tipo de 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, strCtaMayor); ResultSet rset = pstmt.executeQuery(); if (rset.next()) strTipoCta = rset.getString("Tipo_Cuenta"); else throw new Error("Cta. de mayor invalida!"); pstmt.close(); rset.close(); //Obtener mascara de la cuenta de mayor //Si tipo de cuenta es Balance if (strTipoCta.equals("B")) { //Obtener la mascara de la cuenta de balance COMANDO = "SELECT MASC_BALANCE MASC "; } //Si tipo de cuenta es de resultados else if (strTipoCta.equals("R")) { //Obtener la mascara de la cuenta de resultados COMANDO = "SELECT MASC_RESULTADO MASC "; } COMANDO += "FROM mateo.CONT_EJERCICIO "; COMANDO += "WHERE ID_EJERCICIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); rset = pstmt.executeQuery(); if (rset.next()) strMascCtaMayor = rset.getString("Masc"); else throw new Error("Ejercicio invalido"); pstmt.close(); rset.close(); //Obtener mascara del centro de costo COMANDO = "SELECT MASC_CCOSTO MASC, NIVEL_CONTABLE "; COMANDO += "FROM mateo.CONT_EJERCICIO "; COMANDO += "WHERE ID_EJERCICIO = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); rset = pstmt.executeQuery(); if (rset.next()) { strMascCCosto = rset.getString("Masc"); strNivelContable = rset.getString("Nivel_Contable"); } else throw new Error("Ejercicio invalido"); pstmt.close(); rset.close(); //Si la cuenta de mayor debe llevar auxiliar if (metodos2.rctaLlevaAuxiliar(strCtaMayor, session).booleanValue()) { //Por ahora la mascara del auxiliar quedara fija a 7 strMascAuxiliar = "7"; } //Obtener longitud que debe tener el centro de costo if (getLongitudMascara(strCtaMayor, strMascCtaMayor)) throw new Error("Cuenta de Mayor es incorrecta, favor de volverla a teclear"); if (strTipoCta.equals("B")) { if (getLongitudMascara(strCCosto, strMascCCosto, strNivelContable)) throw new Error("Contabilidad es incorrecta, favor de volverla a teclear"); } else if (strTipoCta.equals("R")) { if (getLongitudMascara(strCCosto, strMascCCosto)) throw new Error("Cuenta de centro de costo es incorrecta, favor de volverla a teclear"); } else throw new Error("Tipo de cuenta de mayor invalido"); if (getLongitudMascara(strAuxiliar, strMascAuxiliar)) throw new Error("Cuenta de auxiliar es incorrecta, favor de volverla a teclear"); return blnSw; } // Validar si la longitud de la cuenta coincide con la longitud especificada en la mascara de la cuenta public boolean getLongitudMascara ( String strCuenta, String strMascara ) throws SQLException, Exception { //Obtener la longitud de la mascara Integer intConta = new Integer(0); Integer intAcum = new Integer(0); while (intConta.compareTo(new Integer(strMascara.length())) < 0 ) { //Obtener un digito de la mascara y acumularlo intAcum = new Integer(intAcum.intValue() + new Integer(strMascara.substring(intConta.intValue(), 1)).intValue()); intConta = new Integer(intConta.intValue() + 1); } //Agregar al acumulado, la logitud de la mascara - 1, para sustituir los puntos intAcum = new Integer(intAcum.intValue() + strMascara.length() - 1); //Regresar el valor boolean que se obtiene de comparar la longitud de la cuenta con el valor acumulado return (intAcum.compareTo(new Integer(strCuenta.length())) == 0 ); } // Validar si la longitud de la cuenta coincide con la longitud especificada en la mascara de la cuenta //hasta el nivel contable public boolean getLongitudMascara ( String strCuenta, String strMascara, String strNivelContable ) throws SQLException, Exception { //Obtener la longitud de la mascara Integer intConta = new Integer(0); Integer intAcum = new Integer(0); //Validamos contra el nivel contable, para obtener solo el numero de digitos especificado por este while (intConta.compareTo(new Integer(strNivelContable)) < 0 ) { //Obtener un digito de la mascara y acumularlo intAcum = new Integer(intAcum.intValue() + new Integer(strMascara.substring(intConta.intValue(), 1)).intValue()); intConta = new Integer(intConta.intValue() + 1); } //Agregar al acumulado, la logitud de la mascara - 1, para sustituir los puntos intAcum = new Integer(intAcum.intValue() + strMascara.length() - 1); //Regresar el valor boolean que se obtiene de comparar la longitud de la cuenta con el valor acumulado return (intAcum.compareTo(new Integer(strCuenta.length())) == 0 ); } //Generar listado de polizas que no cuadran public java.util.Vector getPolizasNoCuadradas ( HttpSession session ) throws SQLException, Exception { String strIDEjercicio = (String)session.getAttribute("id_ejercicio"); java.util.Vector vctPolizas = new java.util.Vector(); String COMANDO = "SELECT ID_LIBRO, ID_CCOSTO, FOLIO, U.USERNAME ID_USUARIO, "; COMANDO += "COALESCE(REVISADO_POR,'.') REVISADO_POR, STATUS, TO_DATE(FECHA,'DD/MM/YY') FECHA "; COMANDO += "FROM MATEO.CONT_POLIZA P, NOE.APP_USER U "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND P.ID_USUARIO = U.ID "; COMANDO += "ORDER BY TO_NUMBER(ID_LIBRO), ID_CCOSTO, TO_NUMBER(FOLIO), STATUS "; PreparedStatement pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strIDEjercicio); ResultSet rset = pstmt.executeQuery(); while (rset.next()) { String strFolio = rset.getString("Folio"); String strIDLibro = rset.getString("ID_Libro"); String strIDCCosto = rset.getString("ID_CCosto"); String strStatus = rset.getString("Status"); String strFecha = rset.getString("Fecha"); String strIDUsuario = rset.getString("ID_Usuario"); String strRevisadoPor = rset.getString("Revisado_Por"); COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NATURALEZA = 'C' "; double dblCreditos = 0; PreparedStatement pstmt2 = conn.prepareStatement(COMANDO); pstmt2.setString(1, strIDEjercicio); pstmt2.setString(2, strIDLibro); pstmt2.setString(3, strIDCCosto); pstmt2.setString(4, strFolio); ResultSet rset2 = pstmt2.executeQuery(); if (rset2.next()) dblCreditos = rset2.getDouble("Importe"); pstmt2.close(); rset2.close(); double dblCargos = 0; COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE ID_EJERCICIO = ? "; COMANDO += "AND ID_LIBRO = ? "; COMANDO += "AND ID_CCOSTO = ? "; COMANDO += "AND FOLIO = ? "; COMANDO += "AND NATURALEZA = 'D' "; pstmt2 = conn.prepareStatement(COMANDO); pstmt2.setString(1, strIDEjercicio); pstmt2.setString(2, strIDLibro); pstmt2.setString(3, strIDCCosto); pstmt2.setString(4, strFolio); rset2 = pstmt2.executeQuery(); if (rset2.next()) dblCargos = rset2.getDouble("Importe"); pstmt2.close(); rset2.close(); if (dblCargos != dblCreditos) { vctPolizas.add(strIDEjercicio+"@"+ strIDLibro+"@"+ strIDCCosto+"@"+ strFolio+"@"+ strStatus+"@"+ strFecha+"@"+ strIDUsuario+"@"+ strRevisadoPor+"@"+ String.valueOf(dblCargos)+"@"+ String.valueOf(dblCreditos)); } } pstmt.close(); rset.close(); return vctPolizas; } /** * Obtiene los creditos de una cuenta de alumno, ya que valida que las polizas leidas no sean de inscripcion. * Esta validacion la realiza mediante el campo referencia2 * @param strIDEjercicio * @param strIDCtaMayor * @param strIDCCosto * @param strIDAuxiliar * @param strFechaI * @param strFechaF * @param strCargaId * @param bloque * @return * @throws SQLException * @throws Exception */ public double getTotalCreditosAlumnos ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI, String strFechaF, String strCargaId, Integer bloque ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Importe del rango String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE NATURALEZA = 'C' "; COMANDO += "AND FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; COMANDO += "AND COALESCE(REFERENCIA2,'-') != ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); pstmt.setString(7, strCargaId+bloque); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } /** * Obtiene los cargos de una cuenta de alumno, ya que valida que las polizas leidas no sean de inscripcion. * Esta validacion la realiza mediante el campo referencia2 * @param strIDEjercicio * @param strIDCtaMayor * @param strIDCCosto * @param strIDAuxiliar * @param strFechaI * @param strFechaF * @param strCargaId * @param bloque * @return * @throws SQLException * @throws Exception */ public double getTotalCargosAlumnos ( String strIDEjercicio, String strIDCtaMayor, String strIDCCosto, String strIDAuxiliar, String strFechaI, String strFechaF, String strCargaId, Integer bloque ) throws SQLException, Exception { double dblImporte = 0; PreparedStatement pstmt = null; if (strIDAuxiliar == null || strIDAuxiliar.length() == 0 || strIDAuxiliar.equals("-")) strIDAuxiliar = "0000000"; //Obtener Importe del rango String COMANDO = "SELECT COALESCE(SUM(IMPORTE),0) IMPORTE "; COMANDO += "FROM MATEO.CONT_MOVIMIENTO "; COMANDO += "WHERE NATURALEZA = 'D' "; COMANDO += "AND FECHA BETWEEN TO_DATE(?, 'dd-mm-yy') AND TO_DATE(?, 'dd-mm-yy') "; COMANDO += "AND ID_EJERCICIO = ? "; COMANDO += "AND ID_CTAMAYORM = ? "; COMANDO += "AND ID_CCOSTOM = ? "; COMANDO += "AND ID_AUXILIARM = ? "; COMANDO += "AND COALESCE(REFERENCIA2,'-') != ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, strFechaI); pstmt.setString(2, strFechaF); pstmt.setString(3, strIDEjercicio); pstmt.setString(4, strIDCtaMayor); pstmt.setString(5, strIDCCosto); pstmt.setString(6, strIDAuxiliar); pstmt.setString(7, strCargaId+bloque); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { dblImporte = rset.getDouble("Importe"); } rset.close(); pstmt.close(); return dblImporte; } }