/* * Created on Jun 24, 2004 * * TODO 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; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import mx.edu.um.mateo.inscripciones.model.ccobro.common.Conexion; import java.math.BigDecimal; import mx.edu.um.mateo.inscripciones.model.ccobro.exception.UMException; /** * @author osoto * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class Movimiento implements Constant{ private String matricula; private String carga_id; private Integer bloque; private String tipoMov; private String descripcion; private Double importe; private String naturaleza; private String contabiliza; private String aplica_en; private String id_ctaMayor; private String id_ccosto; private String id_auxiliar; private Connection conn; /** * @return Returns the aplica_en. */ public String getAplica_en() { return aplica_en; } /** * @param aplica_en The aplica_en to set. */ public void setAplica_en(String aplica_en) { this.aplica_en = aplica_en; } /** * @return Returns the bloque. */ public Integer getBloque() { return bloque; } /** * @param bloque The bloque to set. */ public void setBloque(Integer bloque) { this.bloque = bloque; } /** * @return Returns the carga_id. */ public String getCarga_id() { return carga_id; } /** * @param carga_id The carga_id to set. */ public void setCarga_id(String carga_id) { this.carga_id = carga_id; } /** * @return Returns the contabiliza. */ public String getContabiliza() { return contabiliza; } /** * @param contabiliza The contabiliza to set. */ public void setContabiliza(String contabiliza) { this.contabiliza = contabiliza; } /** * @return Returns the descripcion. */ public String getDescripcion() { return descripcion; } /** * @param descripcion The descripcion to set. */ public void setDescripcion(String descripcion) { this.descripcion = descripcion; } /** * @return Returns the id_auxiliar. */ public String getId_auxiliar() { return id_auxiliar; } /** * @param id_auxiliar The id_auxiliar to set. */ public void setId_auxiliar(String id_auxiliar) { this.id_auxiliar = id_auxiliar; } /** * @return Returns the id_ccosto. */ public String getId_ccosto() { return id_ccosto; } /** * @param id_ccosto The id_ccosto to set. */ public void setId_ccosto(String id_ccosto) { this.id_ccosto = id_ccosto; } /** * @return Returns the id_ctaMayor. */ public String getId_ctaMayor() { return id_ctaMayor; } /** * @param id_ctaMayor The id_ctaMayor to set. */ public void setId_ctaMayor(String id_ctaMayor) { this.id_ctaMayor = id_ctaMayor; } /** * @return Returns the importe. */ public Double getImporte() { return importe; } /** * @param importe The importe to set. */ public void setImporte(Double importe) { this.importe = importe; } /** * @return Returns the matricula. */ public String getMatricula() { return matricula; } /** * @param matricula The matricula to set. */ public void setMatricula(String matricula) { this.matricula = matricula; } /** * @return Returns the naturaleza. */ public String getNaturaleza() { return naturaleza; } /** * @param naturaleza The naturaleza to set. */ public void setNaturaleza(String naturaleza) { this.naturaleza = naturaleza; } /** * @return Returns the tipoMov. */ public String getTipoMov() { return tipoMov; } /** * @param tipoMov The tipoMov to set. */ public void setTipoMov(String tipoMov) { this.tipoMov = tipoMov; } /** * @param matricula * @param carga_id * @param bloque */ public Movimiento(String matricula, String carga_id, Integer bloque) { super(); this.matricula = matricula; this.carga_id = carga_id; this.bloque = bloque; } /** * @param matricula * @param carga_id * @param bloque * @param tipoMov * @param descripcion * @param importe * @param naturaleza * @param contabiliza * @param aplica_en */ public Movimiento(String matricula, String carga_id, Integer bloque, String tipoMov, String descripcion, Double importe, String naturaleza, String contabiliza, String aplica_en, String idCCosto) throws Exception { this.matricula = matricula; this.carga_id = carga_id; this.bloque = bloque; this.tipoMov = tipoMov; this.descripcion = descripcion; this.importe = importe; this.naturaleza = naturaleza; this.contabiliza = contabiliza; this.aplica_en = aplica_en; this.id_auxiliar = "0000000"; /*Cualquier movimiento cuyo importe sea cero, no contabiliza*/ if (this.importe.compareTo(new Double(0)) == 0) { this.contabiliza = "N"; } if(contabiliza.equals("S")){ if(idCCosto == null) throw new UMException("Un movimiento del alumno "+matricula+" que debe contabilizar tiene contabilidad invalida "+idCCosto); this.id_ccosto = idCCosto; } /*Evaluar el tipo de movimiento para asignar la cuenta respectiva*/ /*Ya debe estar asignado el valor de la entidad del alumno*/ if (this.tipoMov.equals(ccfstrMatriculaID)) this.id_ctaMayor = "2.1.02.01"; else if (this.tipoMov.equals(ccfstrEnsenanzaID)) this.id_ctaMayor = "2.1.02.01"; else if (this.tipoMov.equals(ccfstrInternadoID)) this.id_ctaMayor = "2.1.02.01"; else if (this.tipoMov.equals(ccfstrManejoPagareID)) this.id_ctaMayor = "2.1.02.01"; else if (this.tipoMov.equals(ccfstrMExtemporaneaID)) this.id_ctaMayor = "2.1.02.01"; else if (this.tipoMov.equals(ccfstrDesctoContadoID)) this.id_ctaMayor = "2.1.02.05"; else if (this.tipoMov.equals(ccfstrDesctoObreroID)) this.id_ctaMayor = "2.1.02.05"; else if (this.tipoMov.equals(ccfstrDesctoHObreroID)) this.id_ctaMayor = "2.1.02.05"; else if (this.tipoMov.equals(ccfstrBecasID)) this.id_ctaMayor = "2.1.02.04"; else if (this.tipoMov.equals(ccfstrDesctoMExtID)) this.id_ctaMayor = "2.1.02.05"; } /*Calcular costo bloque*/ public Double getCostoBloque(Map mMovimientos) throws Exception { Double dblCreditos = new Double(0); Double dblCargos = new Double(0); //Leer solo aquellos movimientos del calculo de cobro que contienen //conceptos que se despliegan como parte del costo total del bloque. Iterator iMovimientos = mMovimientos.keySet().iterator(); while (iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get((String)iMovimientos.next()); if(!movimiento.getAplica_en().equals("T")){ if (movimiento.getNaturaleza().equals("C")) dblCreditos = new Double(dblCreditos.doubleValue() + movimiento.getImporte().doubleValue()); else if (movimiento.getNaturaleza().equals("D")) dblCargos = new Double(dblCargos.doubleValue() + movimiento.getImporte().doubleValue()); } } return new Double(dblCreditos.doubleValue() - dblCargos.doubleValue()); } /*Este metodo permite obtener el importe acumulado de cualquier tipo de movimiento, dependiendo del atributo aplica_en*/ public Double getImporte(Map mMovimientos, String tipo_mov, String naturaleza, String contabiliza, String aplica_en) throws Exception { Iterator iMovimientos = mMovimientos.keySet().iterator(); Double importe = new Double(0); while (iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get((String)iMovimientos.next()); if(movimiento.getAplica_en().equals(aplica_en)){ if(movimiento.getContabiliza().equals(contabiliza)){ if (movimiento.getNaturaleza().equals(naturaleza)) importe = new Double(importe.doubleValue() + movimiento.getImporte().doubleValue()); else if (movimiento.getNaturaleza().equals(naturaleza)) importe = new Double(importe.doubleValue() + movimiento.getImporte().doubleValue()); } } } return importe; } /*Este metodo permite obtener el importe acumulado de cualquier tipo de movimiento, dependiendo del atributo aplica_en*/ public Double getImporte(Map mMovimientos, Map mTipo_mov, String aplica_en, String naturaleza) throws Exception { Iterator iMovimientos = mMovimientos.keySet().iterator(); Double importe = new Double(0); while (iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get((String)iMovimientos.next()); Iterator iTipo_mov = mTipo_mov.keySet().iterator(); while (iTipo_mov.hasNext()){ String tipo_mov = (String)mTipo_mov.get((String)iTipo_mov.next()); if(tipo_mov.equals(movimiento.getTipoMov())){ if(movimiento.getAplica_en().equals(aplica_en)){ if (movimiento.getNaturaleza().equals(naturaleza)) importe = new Double(importe.doubleValue() + movimiento.getImporte().doubleValue()); else if (movimiento.getNaturaleza().equals(naturaleza)) importe = new Double(importe.doubleValue() + movimiento.getImporte().doubleValue()); } } } } return importe; } /** * Este metodo permite obtener el importe acumulado de cualquier tipo de movimiento, dependiendo del atributo aplica_en * Si negacion es true, indica que al comparar aplica_en se negara el resultado * @param mMovimientos * @param aplica_en * @param negacion * @return * @throws Exception */ public Double getImporte(Map mMovimientos, String aplica_en, Boolean negacion) throws Exception { Iterator iMovimientos = mMovimientos.keySet().iterator(); Double importe = new Double(0); while (iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get((String)iMovimientos.next()); Boolean evalua = new Boolean(movimiento.getAplica_en().equals(aplica_en)); //Si se debe evaluar que el valor sea distinto if(negacion){ evalua = new Boolean(!evalua); } if (evalua){ if (movimiento.getNaturaleza().equals("C")) importe = new Double(importe.doubleValue() + movimiento.getImporte().doubleValue()); else if (movimiento.getNaturaleza().equals("D")) importe = new Double(importe.doubleValue() - movimiento.getImporte().doubleValue()); } } //Si el importe es a favor del estudiante, en el concepto de pago inicial... System.out.print("Movimiento "+importe); if(importe.compareTo(new Double(0)) > 0){ importe = 0.0; } System.out.print("Movimiento-after "+importe); return importe; } /** * */ public Movimiento() { super(); // TODO Auto-generated constructor stub } public static void limpiaTabla (Connection conn, String matricula, String carga_id, Integer bloque) throws Exception { PreparedStatement pstmt = null; try{ String COMANDO = "DELETE " + "FROM MATEO.FES_CC_MOVIMIENTO " + "WHERE MATRICULA = ? " + "AND CARGA_ID = ? " + "AND BLOQUE = ? "; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); pstmt.execute(); pstmt.close(); }catch(Exception e){ throw new UMException("Error al inicializar los movimientos del alumno "+matricula+" "+e); }finally{ if(pstmt != null) {pstmt.close(); pstmt = null;} } } /*Grabar movimientos del alumno en la base de datos*/ public static void grabaTabla (Connection conn, Map mMovimientos, Alumno alumno) throws Exception{ PreparedStatement pstmt = null; try{ Iterator iMovimientos = mMovimientos.keySet().iterator(); while(iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get((String)iMovimientos.next()); if(movimiento.getMatricula().equals(alumno.getMatricula ())){ /*Insertar movimiento*/ String COMANDO = "INSERT INTO MATEO.FES_CC_MOVIMIENTO "; COMANDO += "(ID, MATRICULA, CARGA_ID, BLOQUE, TIPOMOV, "; COMANDO += "DESCRIPCION, IMPORTE, NATURALEZA, CONTABILIZA, "; COMANDO += "APLICA_EN, ID_CTAMAYOR, ID_CCOSTO, ID_AUXILIAR, CCOBRO_ID, VERSION) "; COMANDO += "VALUES "; COMANDO += "((SELECT COALESCE(MAX(ID),0)+1 FROM MATEO.FES_CC_MOVIMIENTO), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, movimiento.getMatricula()); pstmt.setString(2, movimiento.getCarga_id()); pstmt.setInt(3, movimiento.getBloque().intValue()); pstmt.setString(4, movimiento.getTipoMov()); pstmt.setString(5, movimiento.getDescripcion()); pstmt.setDouble(6, movimiento.getImporte().doubleValue()); pstmt.setString(7, movimiento.getNaturaleza()); pstmt.setString(8, movimiento.getContabiliza()); pstmt.setString(9, movimiento.getAplica_en()); pstmt.setString(10, movimiento.getId_ctaMayor()); pstmt.setString(11, movimiento.getId_ccosto()); pstmt.setString(12, movimiento.getId_auxiliar()); pstmt.setInt (13, alumno.getId ().intValue ()); pstmt.execute(); pstmt.close(); } } }catch(Exception e){ throw new UMException("Error al insertar los movimientos del calculo de cobro del alumno "+alumno.getMatricula ()+" "+e); }finally{ if(pstmt != null) {pstmt.close(); pstmt = null;} } } /** * Obtener los movimientos del calculo de cobro * @param matricula * @param carga_id * @param bloque * @param seccion * 1. CB - Obtener los movimientos del costo del bloque * 2. CI - Obtener los movimientos del costo de inscripcion * 3. OT - Obtener los otros movimientos * 4. TODOS - Obtener todos los movimientos * 5. CONT - Obtener los movimientos que contabilizan * @return * @throws Exception */ public Map getMovimientosCC (String matricula, String carga_id, Integer bloque, String seccion) throws Exception { PreparedStatement pstmt = null; ResultSet rset = null; Map mMovimientos = new TreeMap(); try{ if(conn == null || conn.isClosed()) conn = new Conexion().getConexionMateo(new Boolean(false)); //Obtener movimientos del costo de bloque if (seccion.equals("CB")) { String COMANDO = "SELECT TIPOMOV, DESCRIPCION, "; COMANDO += "IMPORTE * CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END AS IMPORTE, "; COMANDO += "NATURALEZA, CONTABILIZA, APLICA_EN, ID_CCOSTO "; COMANDO += "FROM mateo.FES_CC_MOVIMIENTO "; COMANDO += "WHERE MATRICULA = ? "; COMANDO += "AND CARGA_ID = ? "; COMANDO += "AND BLOQUE = ? "; COMANDO += "AND TIPOMOV BETWEEN '01' AND '19' "; COMANDO += "ORDER BY TIPOMOV"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); } //Obtener movimientos de la cuota de inscripci?n else if (seccion.equals("CI")) { String COMANDO = "SELECT TIPOMOV, DESCRIPCION, "; COMANDO += "IMPORTE * CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END AS IMPORTE, "; COMANDO += "NATURALEZA, CONTABILIZA, APLICA_EN, ID_CCOSTO "; COMANDO += "FROM mateo.FES_CC_MOVIMIENTO "; COMANDO += "WHERE MATRICULA = ? "; COMANDO += "AND CARGA_ID = ? "; COMANDO += "AND BLOQUE = ? "; COMANDO += "AND TIPOMOV BETWEEN '20' AND '39' "; COMANDO += "ORDER BY TIPOMOV"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); } //Obtener movimientos de los otros movimientos else if (seccion.equals("OT")) { String COMANDO = "SELECT TIPOMOV, DESCRIPCION, "; COMANDO += "IMPORTE * CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END AS IMPORTE, "; COMANDO += "NATURALEZA, CONTABILIZA, APLICA_EN, ID_CCOSTO "; COMANDO += "FROM mateo.FES_CC_MOVIMIENTO "; COMANDO += "WHERE MATRICULA = ? "; COMANDO += "AND CARGA_ID = ? "; COMANDO += "AND BLOQUE = ? "; COMANDO += "AND TIPOMOV BETWEEN '50' AND '70' "; COMANDO += "ORDER BY TIPOMOV"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); } else if (seccion.equals("TODOS")) { String COMANDO = "SELECT TIPOMOV, DESCRIPCION, "; COMANDO += "IMPORTE, "; COMANDO += "NATURALEZA, CONTABILIZA, APLICA_EN, ID_CCOSTO "; COMANDO += "FROM mateo.FES_CC_MOVIMIENTO "; COMANDO += "WHERE MATRICULA = ? "; COMANDO += "AND CARGA_ID = ? "; COMANDO += "AND BLOQUE = ? "; COMANDO += "ORDER BY TIPOMOV"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); } else if (seccion.equals("CONT")) { String COMANDO = "SELECT TIPOMOV, DESCRIPCION, "; COMANDO += "IMPORTE, "; COMANDO += "NATURALEZA, CONTABILIZA, APLICA_EN, ID_CCOSTO "; COMANDO += "FROM mateo.FES_CC_MOVIMIENTO "; COMANDO += "WHERE MATRICULA = ? "; COMANDO += "AND CARGA_ID = ? "; COMANDO += "AND BLOQUE = ? "; COMANDO += "AND CONTABILIZA = 'S' "; COMANDO += "ORDER BY TIPOMOV"; pstmt = conn.prepareStatement(COMANDO); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque.intValue()); } rset = pstmt.executeQuery(); Integer contador = new Integer(1); while(rset.next()){ Movimiento movimiento = new Movimiento(matricula, carga_id, bloque, rset.getString("TipoMov"), rset.getString("Descripcion"), new Double(rset.getDouble("Importe")), rset.getString("Naturaleza"), rset.getString("Contabiliza"), rset.getString("Aplica_En"), rset.getString("id_ccosto")); mMovimientos.put(matricula+carga_id+bloque+contador,movimiento); contador = new Integer(contador.intValue()+1); } pstmt.close(); rset.close(); }catch(Exception e){ throw new UMException("Error al obtener los movimientos del alumno "+matricula+" en la carga "+carga_id+" y el bloque "+bloque+"<br>"+e); }finally{ if(pstmt != null) {pstmt.close(); pstmt = null;} if(rset != null) {rset.close(); rset = null;} if(!conn.isClosed()) {conn.close(); conn = null;} } return mMovimientos; } /** * Recorre el map de movimientos y regresa el importe del movimiento solicitado * En caso de que el tipo de movimiento se repita, se regresara solo el primer movimiento * @param mMovimientos * @param tipoMov * @return Double * @throws Exception */ public Double getMovimiento(Map mMovimientos, String tipoMov) throws Exception{ Double importe = null; Iterator iMovimientos = mMovimientos.keySet().iterator(); while(iMovimientos.hasNext()){ Movimiento movimiento = (Movimiento)mMovimientos.get(iMovimientos.next()); if(movimiento.getTipoMov().equals(tipoMov)){ importe = movimiento.getImporte(); break; } } return importe; } public static BigDecimal getCuotaInscripcion(Connection conn, String matricula, String carga_id, Integer bloque) throws Exception{ PreparedStatement pstmt = null; ResultSet rset = null; BigDecimal returnValue = new BigDecimal("0.0"); try{ StringBuilder COMANDO = new StringBuilder(); COMANDO.append("SELECT sum(IMPORTE * CASE NATURALEZA WHEN 'D' THEN -1 ELSE 1 END) AS IMPORTE "); COMANDO.append("FROM mateo.FES_CC_MOVIMIENTO "); COMANDO.append("WHERE MATRICULA = ? " ); COMANDO.append("AND CARGA_ID = ? "); COMANDO.append("AND BLOQUE = ? "); COMANDO.append("AND TIPOMOV BETWEEN '20' AND '39' " ); pstmt = conn.prepareStatement(COMANDO.toString()); pstmt.setString(1, matricula); pstmt.setString(2, carga_id); pstmt.setInt(3, bloque); rset = pstmt.executeQuery(); if(rset.next()){ returnValue = new BigDecimal(rset.getString("importe")); } }catch(Exception e){ throw new UMException("Error al obtener los movimientos del alumno "+matricula+" en la carga "+carga_id+" y el bloque "+bloque+"<br>"+e); }finally{ if(pstmt != null) {pstmt.close(); pstmt = null;} if(rset != null) {rset.close(); rset = null;} } return returnValue; } }