org.openbizview.util.Bvt011.java Source code

Java tutorial

Introduction

Here is the source code for org.openbizview.util.Bvt011.java

Source

/*
 *  Copyright (C) 2011  ANDRES DOMINGUEZ
    
Este programa es software libre: usted puede redistribuirlo y/o modificarlo 
bajo los terminos de la Licencia Pblica General GNU publicada 
por la Fundacion para el Software Libre, ya sea la version 3 
de la Licencia, o (a su eleccion) cualquier version posterior.
    
Este programa se distribuye con la esperanza de que sea til, pero 
SIN GARANTiA ALGUNA; ni siquiera la garantia implicita 
MERCANTIL o de APTITUD PARA UN PROPoSITO DETERMINADO. 
Consulte los detalles de la Licencia Pblica General GNU para obtener 
una informacion mas detallada. 
    
Deberia haber recibido una copia de la Licencia Pblica General GNU 
junto a este programa. 
En caso contrario, consulte <http://www.gnu.org/licenses/>.
 */

package org.openbizview.util;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.openbizview.getset.Periodos;
import org.openbizview.util.PntGenerica;

/**
 *
 * @author Andres
 */
@ManagedBean
@ViewScoped
public class Bvt011 extends Bd {

    @PostConstruct
    public void init() {
        try {
            select();
        } catch (ClassNotFoundException | SQLException | NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private String bcodciaorigen = "";
    private String bcodciadestino = "";
    private String anocal = "";
    private String numper = "";
    private Date fecini;
    private Date fecfin;
    private String descrip = "";
    private String percopia = " - "; //Localidad para copiar
    private List<Periodos> list = new ArrayList<Periodos>();
    private List<Periodos> filtro;
    private int rows = 0;

    /**
     * @return the anocal
     */
    public String getAnocal() {
        return anocal;
    }

    /**
     * @param anocal the anocal to set
     */
    public void setAnocal(String anocal) {
        this.anocal = anocal;
    }

    /**
     * @return the numper
     */
    public String getNumper() {
        return numper;
    }

    /**
     * @param numper the numper to set
     */
    public void setNumper(String numper) {
        this.numper = numper;
    }

    /**
     * @return the descrip
     */
    public String getDescrip() {
        return descrip;
    }

    /**
     * @param descrip the descrip to set
     */
    public void setDescrip(String descrip) {
        this.descrip = descrip;
    }

    /**
        * @return the fecini
        */
    public Date getFecini() {
        return fecini;
    }

    /**
     * @param fecini the fecini to set
     */
    public void setFecini(Date fecini) {
        this.fecini = fecini;
    }

    /**
     * @return the fecfin
     */
    public Date getFecfin() {
        return fecfin;
    }

    /**
     * @param fecfin the fecfin to set
     */
    public void setFecfin(Date fecfin) {
        this.fecfin = fecfin;
    }

    /**
        * @return the bcodciadestino
        */
    public String getBcodciadestino() {
        return bcodciadestino;
    }

    /**
     * @param bcodciadestino the bcodciadestino to set
     */
    public void setBcodciadestino(String bcodciadestino) {
        this.bcodciadestino = bcodciadestino;
    }

    /**
        * @return the percopia
        */
    public String getPercopia() {
        return percopia;
    }

    /**
     * @param percopia the percopia to set
     */
    public void setPercopia(String percopia) {
        this.percopia = percopia;
    }

    /**
    * @return the list
    */
    public List<Periodos> getList() {
        return list;
    }

    /**
     * @param list the list to set
     */
    public void setList(List<Periodos> list) {
        this.list = list;
    }

    /**
     * @return the filtro
     */
    public List<Periodos> getFiltro() {
        return filtro;
    }

    /**
     * @param filtro the filtro to set
     */
    public void setFiltro(List<Periodos> filtro) {
        this.filtro = filtro;
    }

    /**
     * @return the bcodciaorigen
     */
    public String getBcodciaorigen() {
        return bcodciaorigen;
    }

    /**
     * @param bcodciaorigen the bcodciaorigen to set
     */
    public void setBcodciaorigen(String bcodciaorigen) {
        this.bcodciaorigen = bcodciaorigen;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Variables seran utilizadas para capturar mensajes de errores de Oracle y parametros de metodos
    FacesMessage msj = null;
    PntGenerica consulta = new PntGenerica();
    boolean vGacc; //Validador de opciones del men
    private String login = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("usuario"); //Usuario logeado

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //Coneccion a base de datos
    //Pool de conecciones JNDI
    //Coneccion a base de datos
    //Pool de conecciones JNDIFARM
    Connection con;
    PreparedStatement pstmt = null;
    ResultSet r;

    private int validarOperacion = 0;

    public int getValidarOperacion() {
        return validarOperacion;
    }

    public void setValidarOperacion(int validarOperacion) {
        this.validarOperacion = validarOperacion;
    }

    /**
    * Inserta categoria1.
    * <p>
    * <b>Parametros del Metodo:<b> String codcia1, String descia1 unidos como un solo string.<br>
    * String pool, String login.<br><br>
    **/
    private void insert() throws NamingException {

        BigDecimal[] conver = new BigDecimal[2];
        conver[0] = new BigDecimal(anocal);
        conver[1] = new BigDecimal(numper);

        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);

            con = ds.getConnection();
            //Class.forName(getDriver());
            //con = DriverManager.getConnection(
            //      getUrl(), getUsuario(), getClave());
            String query = "INSERT INTO bvt011 VALUES (" + conver[0] + "," + conver[1] + ",'"
                    + sdfecha.format(fecini) + "','" + sdfecha.format(fecfin) + "',?,?,'" + getFecha() + "',?,'"
                    + getFecha() + "')";
            ////System.out.println(query);

            pstmt = con.prepareStatement(query);
            pstmt.setString(1, descrip.toUpperCase());
            pstmt.setString(2, login);
            pstmt.setString(3, login);
            ////System.out.println(query);
            try {
                //Avisando
                pstmt.executeUpdate();
                limpiarValores();
                list.clear();
                select();
                msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnInsert"), "");
            } catch (SQLException e) {
                msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
            }
            pstmt.close();
            con.close();

        } catch (Exception e) {
        }

        FacesContext.getCurrentInstance().addMessage(null, msj);
    }

    /**
     * Borra Paises
     * <p>
     * Parametros del metodo: String codpai. Pool de conecciones
     **/
    public void delete() throws NamingException {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
                .getRequest();
        String[] chkbox = request.getParameterValues("toDelete");

        if (chkbox == null) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("del"), "");
        } else {
            try {
                Context initContext = new InitialContext();
                DataSource ds = (DataSource) initContext.lookup(JNDI);

                con = ds.getConnection();

                String param = "'" + StringUtils.join(chkbox, "','") + "'";

                String query = "DELETE bvt011 WHERE anocal||numper in (" + param + ")";
                pstmt = con.prepareStatement(query);
                ////System.out.println(query);
                //Antes de insertar verifica si el rol del usuario tiene permisos para insertar

                try {
                    pstmt.executeUpdate();
                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDelete"), "");
                    limpiarValores();
                    list.clear();
                    select();

                } catch (SQLException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }

                pstmt.close();
                con.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        FacesContext.getCurrentInstance().addMessage(null, msj);
    }

    /**
     * Actualiza categoria1
     * <b>Parametros del Metodo:<b> String codcia1, String descia1 unidos como un solo string.<br>
     * String pool, String login.<br><br>
     **/
    public void update() throws NamingException {
        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);

            con = ds.getConnection();
            //Class.forName(getDriver());
            //con = DriverManager.getConnection(
            //      getUrl(), getUsuario(), getClave());
            String query = "UPDATE bvt011";
            query += " SET fecini = '" + sdfecha.format(fecini) + "', fecfin = '" + sdfecha.format(fecfin)
                    + "', descrip = ?, usract = ?, fecact='" + getFecha() + "'";
            query += " WHERE  anocal = ? and numper = ?";
            //System.out.println(query);
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, descrip.toUpperCase());
            pstmt.setString(2, login.toUpperCase());
            pstmt.setString(3, anocal);
            pstmt.setString(4, numper);
            // Antes de ejecutar valida si existe el registro en la base de Datos.
            // Antes de ejecutar valida si existe el registro en la base de Datos.
            try {
                //Avisando
                pstmt.executeUpdate();
                if (pstmt.getUpdateCount() == 0) {
                    msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("msnNoUpdate"), "");
                } else {
                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnUpdate"), "");
                }
                validarOperacion = 0;
                bcodciaorigen = "";
                bcodciadestino = "";
                fecini = null;
                fecfin = null;
                descrip = "";
                percopia = " - "; //Localidad para copiar
                validarOperacion = 0;
                list.clear();
                select();

            } catch (SQLException e) {
                msj = new FacesMessage(FacesMessage.SEVERITY_INFO, e.getMessage(), "");
            }
            pstmt.close();
            con.close();
        } catch (Exception e) {
        }
        FacesContext.getCurrentInstance().addMessage(null, msj);
    }

    public void guardar() throws NamingException, SQLException, ClassNotFoundException {
        if (validarOperacion == 0) {
            insert();
        } else {
            update();
        }
    }

    /**
     * Leer Datos de paises
     * @throws NamingException 
    * @throws IOException 
     **/
    public void select() throws SQLException, ClassNotFoundException, NamingException {

        Context initContext = new InitialContext();
        DataSource ds = (DataSource) initContext.lookup(JNDI);
        con = ds.getConnection();

        //Reconoce la base de datos de coneccin para ejecutar el query correspondiente a cada uno
        DatabaseMetaData databaseMetaData = con.getMetaData();
        productName = databaseMetaData.getDatabaseProductName();//Identifica la base de datos de coneccin

        String query = "";

        switch (productName) {
        case "Oracle":
            query += " SELECT anocal, numper, to_char(fecini,'dd/mm/yyyy'), to_char(fecfin,'dd/mm/yyyy'), descrip";
            query += " FROM bvt011";
            query += " where anocal  like trim('" + anocal + "%')";
            query += " and numper  like trim('" + numper + "%')";
            query += " ORDER BY 1 desc";
            break;
        case "PostgreSQL":
            query += " SELECT anocal, numper, to_char(fecini,'dd/mm/yyyy'), to_char(fecfin,'dd/mm/yyyy'), descrip";
            query += " FROM bvt011";
            query += " where anocal  like trim('" + anocal + "%')";
            query += " and numper  like trim('" + numper + "%')";
            query += " ORDER BY 1 desc";
            break;
        case "Microsoft SQL Server":
            query += " SELECT ";
            query += " ANOCAL, ";
            query += " NUMPER, ";
            query += " CONVERT(VARCHAR,FECINI,103) FECINI, ";
            query += " CONVERT(VARCHAR,FECFIN,103) FECFIN, ";
            query += " DESCRIP ";
            query += " FROM BVT011 ";
            query += " WHERE ANOCAL  LIKE '" + anocal + "%'";
            query += " AND NUMPER  LIKE '" + numper + "%'";
            query += " ORDER BY 1 DESC ";
            break;
        }

        //Consulta paginada

        pstmt = con.prepareStatement(query);
        ////System.out.println(query);

        r = pstmt.executeQuery();

        while (r.next()) {
            Periodos select = new Periodos();
            select.setVanocal(r.getString(1));
            select.setVnumper(r.getString(2));
            select.setVfecini(r.getString(3));
            select.setVfecfin(r.getString(4));
            select.setVdescrip(r.getString(5));
            //Agrega la lista
            list.add(select);
            rows = list.size();
        }
        //Cierra las conecciones
        pstmt.close();
        con.close();

    }

    /**
       * @return the rows
       */
    public int getRows() {
        return rows;
    }

    public void buscar() throws ClassNotFoundException, SQLException, NamingException {
        list.clear();
        select();
    }

    /**Este metodo copia sucursales de una compaia a otra
     * <p>
     * Parametros:
     * Origen: p_codcia(Origen), codsuc (origen) si deja en blanco trae todas.
     * <p>
     * Destino: p_codcia (Destino).
     * <p>
     * Si el campo de vecValores[1] (Sucursal) realiza un select para calcular
     * la diferencia de los registros que existen en una tabla y que no existen
     * en otra y solo copiar lo que no este. De lo contrario tomaria todos los
     * registros. Y si existieran daria un error de constraint.
     * */

    public void copiar() throws NamingException {

        String campos = "b_codcia, anocal, numper, fecini, fecfin, descrip, USRCRE, FECCRE, USRACT, FECACT";

        String[] veccodcia = bcodciaorigen.split("\\ - ", -1);
        String[] veccodciadestino = bcodciadestino.split("\\ - ", -1);
        String[] vecpercopia = percopia.split("\\ - ", -1);

        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);

            con = ds.getConnection();
            //Class.forName(getDriver());
            //con = DriverManager.getConnection(
            //        getUrl(), getUsuario(), getClave());
            String query = "INSERT INTO bvt011 (" + campos + ")";
            query += " SELECT '" + veccodciadestino[0] + "' ,anocal, numper, fecini, fecfin, descrip";
            query += " , 'BI', '" + getFecha() + "' , 'BI', '" + getFecha() + "'";
            query += " FROM bvt011";
            query += " WHERE b_codcia= TRIM('" + veccodcia[0] + "')";
            if (vecpercopia[0].equals("")) {
                query += " AND anocal||numper NOT IN (SELECT anocal||numper FROM bvt011 WHERE b_codcia='"
                        + veccodciadestino[0] + "')";
            } else {
                query += " AND anocal||numper NOT IN (SELECT anocal||numper FROM bvt011 WHERE b_codcia='"
                        + veccodciadestino[0] + "') AND anocal||numper= TRIM('" + vecpercopia[0] + "')";
            }
            pstmt = con.prepareStatement(query);
            try {
                ////System.out.println(query);
                //Avisando
                pstmt.executeUpdate();
                if (pstmt.getUpdateCount() == 0) {
                    msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("nocopias"), "");
                    percopia = " - ";
                } else if (pstmt.getUpdateCount() <= 1) {
                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("copia"), "");
                    percopia = " - ";
                }
                limpiarValores();
                list.clear();
                select();
            } catch (SQLException e) {
                e.printStackTrace();
                msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
            }
            pstmt.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        FacesContext.getCurrentInstance().addMessage(null, msj);
    }

    private void limpiarValores() {
        bcodciaorigen = "";
        bcodciadestino = "";
        anocal = "";
        numper = "";
        fecini = null;
        fecfin = null;
        descrip = "";
        percopia = " - "; //Localidad para copiar
        validarOperacion = 0;
    }

}