Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / MVC / Proyectos / Sistema de gestión de stock – El Controlador (Parte 5)

Sistema de gestión de stock – El Controlador (Parte 5)

Por jc mouse martes, septiembre 4, 2012

Para terminar el tutorial, debemos unir tanto la VISTA como el MODELO y para eso esta el CONTROLADOR. o.O

El controlador. Responde a los eventos que el usuario realiza a través de la VISTA y en algunos casos directamente en el MODELO. El controlador como su  nombre indica 🙂 , controla los eventos generados por el usuario pasando estos hacia el modelo esperando una respuesta de este para después devolver el resultado en la VISTA que corresponda.

esquema mvc

El paquete correspondiente al controlador en nuestra aplicación, consta de dos clases, la clase controlador.java y el Main.java

troll face

La clase controlador es la siguiente:

package controlador;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Date;
import java.util.Map;
import java.util.HashMap;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
//Logica de aplicación -> MODELO
import modelo.carrito;
import modelo.modelo;
import modelo.producto;
//interfaz de usuario -> VISTA
import vista.frmConsulta;
import vista.frmPrincipal;
import vista.frmProducto;
import vista.frmVenta;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse 
 */
public class jcontrolador implements ActionListener,MouseListener{

    //vista
    private frmPrincipal frmprincipal ;
    private frmProducto frmproducto = new frmProducto();
    private frmVenta frmventa = new frmVenta();
    private frmConsulta frmconsulta = new frmConsulta();
    //modelo
    private modelo mimodelo = new modelo();

    //variable para almacenar los productos de una venta
    private Map carrito_compra = new HashMap();

     //acciones que se ejecuta por los controles de cada VISTA
    public enum Accion
    {
        __VER_PRODUCTOS, //-> Abre VISTA productos
        __VER_NUEVA_VENTA, //abre VISTA nueva venta
        __VER_NUEVA_COMPRA, //abre VISTA nueva compra
        __CONSULTAS, //-> Abre VISTA para realizar consultas

        __AGREGAR_PRODUCTO,//-> Ejecuta consulta
        __ACTUALIZAR_PRODUCTO,//-> Ejecuta consulta

        __NUEVA_VENTA,//-> genera un codigo al azar y limpia controles
        __lista_productos,//->se ejecuta cuando se hace clic en el jcombobox de productos de VISTA frmVenta
        __AGREGAR_A_LISTA,//->asigna un producto al carrito de compras
        __REMOVER_PRODUCTO,//-> remueve un producto del carrito de compras
        __REGISTRAR_VENTA,//-> registra una venta en la base de datos

        __PROCESAR_CONSULTA, //-> Ejecuta consulta -> busqueda de venta por ID
        __PROCESAR_CONSULTA2//-> Ejecuta consulta -> busqueda de venta por rango de fechas 

    }

    /** Constructor de clase */
    public jcontrolador( JFrame padre )
    {
        this.frmprincipal = (frmPrincipal) padre;
    }

    //EVENTOS DEL RATON SOBRE LOS COMPONENTES
    public void mouseClicked(MouseEvent e) {
        if( e.getButton()== 1)//boton izquierdo
        {
             int fila = this.frmproducto.__TABLA_PRODUCTO.rowAtPoint(e.getPoint());
             if (fila > -1){
                this.frmproducto.__id.setText( String.valueOf( this.frmproducto.__TABLA_PRODUCTO.getValueAt(fila, 0) ));
                this.frmproducto.__nombre.setText( String.valueOf( this.frmproducto.__TABLA_PRODUCTO.getValueAt(fila, 1) ));
                this.frmproducto.__precio.setText( String.valueOf( this.frmproducto.__TABLA_PRODUCTO.getValueAt(fila, 2) ));
                this.frmproducto.__cantidad.setText( String.valueOf( this.frmproducto.__TABLA_PRODUCTO.getValueAt(fila, 3) ));
                this.frmproducto.__lista_categorias.setSelectedItem(  String.valueOf( this.frmproducto.__TABLA_PRODUCTO.getValueAt(fila, 4) ) );                
             }
        }
    }

    public void mousePressed(MouseEvent e){/** nada por aqui */}

    public void mouseReleased(MouseEvent e){/** nada por aqui */}

    public void mouseEntered(MouseEvent e){/** nada por aqui */}

    public void mouseExited(MouseEvent e){/** nada por aqui */}

    /** Inicia todos las acciones y listener de la vista */
    public void iniciar()
    {
        //frmprincipal.setVisible(true); //si no se utiliza SKIN
         // Skin tipo WINDOWS
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            SwingUtilities.updateComponentTreeUI(frmprincipal);
            SwingUtilities.updateComponentTreeUI( this.frmproducto );
            SwingUtilities.updateComponentTreeUI( this.frmventa );
            SwingUtilities.updateComponentTreeUI( this.frmconsulta );
            this.frmprincipal.setLocationRelativeTo(null);
            this.frmprincipal.setTitle("Control de Inventario - https://www.jc-mouse.net/");
            this.frmprincipal.setVisible(true);
        } catch (UnsupportedLookAndFeelException ex) {}
          catch (ClassNotFoundException ex) {}
          catch (InstantiationException ex) {}
          catch (IllegalAccessException ex) {}

        //boton
        this.frmprincipal.__VER_PRODUCTOS.setActionCommand( "__VER_PRODUCTOS" );
        this.frmprincipal.__VER_PRODUCTOS.addActionListener(this);
        //boton
        this.frmprincipal.__VER_NUEVA_VENTA.setActionCommand( "__VER_NUEVA_VENTA" );
        this.frmprincipal.__VER_NUEVA_VENTA.addActionListener(this);
        //boton
        this.frmprincipal.__VER_NUEVA_COMPRA.setActionCommand( "__VER_NUEVA_COMPRA" );
        this.frmprincipal.__VER_NUEVA_COMPRA.addActionListener(this);
        //boton
        this.frmprincipal.__CONSULTAS.setActionCommand("__CONSULTAS");
        this.frmprincipal.__CONSULTAS.addActionListener(this);

         //escucha eventos del raton sobre la tabla
        this.frmproducto.__TABLA_PRODUCTO.addMouseListener(this);
        //comando y listener para boton agregar producto
        this.frmproducto.__AGREGAR_PRODUCTO.setActionCommand("__AGREGAR_PRODUCTO");
        this.frmproducto.__AGREGAR_PRODUCTO.addActionListener(this);
        //comando y listener para boton actualizar producto
        this.frmproducto.__ACTUALIZAR_PRODUCTO.setActionCommand("__ACTUALIZAR_PRODUCTO");
        this.frmproducto.__ACTUALIZAR_PRODUCTO.addActionListener(this);

        //boton VISTA frmVenta
        this.frmventa.__NUEVA_VENTA.setActionCommand("__NUEVA_VENTA");
        this.frmventa.__NUEVA_VENTA.addActionListener(this);
        //jcombobox frmVenta
        this.frmventa.__lista_productos.setActionCommand("__lista_productos");
        this.frmventa.__lista_productos.addActionListener(this);
        //boton frmVenta
        this.frmventa.__AGREGAR_A_LISTA.setActionCommand("__AGREGAR_A_LISTA");
        this.frmventa.__AGREGAR_A_LISTA.addActionListener(this);
        //boton frmVenta
        this.frmventa.__REMOVER_PRODUCTO.setActionCommand("__REMOVER_PRODUCTO");
        this.frmventa.__REMOVER_PRODUCTO.addActionListener(this);
        //botn frmVenta
        this.frmventa.__REGISTRAR_VENTA.setActionCommand("__REGISTRAR_VENTA");
        this.frmventa.__REGISTRAR_VENTA.addActionListener(this);

        //boton frmConsulta
        this.frmconsulta.__PROCESAR_CONSULTA.setActionCommand("__PROCESAR_CONSULTA");
        this.frmconsulta.__PROCESAR_CONSULTA.addActionListener(this);
        //boton frmConsulta
        this.frmconsulta.__PROCESAR_CONSULTA2.setActionCommand("__PROCESAR_CONSULTA2");
        this.frmconsulta.__PROCESAR_CONSULTA2.addActionListener(this);
    }

    /** Gestion de accciones */
    public void actionPerformed(ActionEvent e) {

        switch ( Accion.valueOf( e.getActionCommand() ) )
        {
            case __VER_PRODUCTOS:
                this.frmproducto.setLocationRelativeTo(null);
                this.frmproducto.setTitle("PRODUCTOS - https://www.jc-mouse.net/");
                this.frmproducto.setVisible(true);
                this.frmproducto.__TABLA_PRODUCTO.setModel( this.mimodelo.getTablaProducto() );
                this.frmproducto.__lista_categorias.setModel( this.mimodelo.getListaCategorias() );
                break;
            case __VER_NUEVA_VENTA:
                this.frmventa.setLocationRelativeTo(null);
                this.frmventa.setTitle("VENTA DE PRODUCTOS - https://www.jc-mouse.net/");
                this.frmventa.__id_venta.setText( this.mimodelo.getRandomCode() );
                this.frmventa.__fecha_venta.setText( this.mimodelo.getFecha() );
                this.frmventa.__lista_productos.setModel( this.mimodelo.getListaProductos() );
                this.frmventa.__lista_clientes.setModel( this.mimodelo.getListaClientes() );
                this.carrito_compra.clear();
                this.frmventa.__detalle_productos.setModel(new DefaultComboBoxModel());
                this.frmventa.setVisible(true);
                break;
            case __VER_NUEVA_COMPRA:
                JOptionPane.showMessageDialog(null,"you can do it");
                break;
            case __CONSULTAS:
                this.frmconsulta.setLocationRelativeTo(null);
                this.frmconsulta.setTitle("Consultas - https://www.jc-mouse.net/");
                this.frmconsulta.__fecha1.setDateFormatString("yyyy-MM-dd");
                this.frmconsulta.__fecha2.setDateFormatString("yyyy-MM-dd");
                this.frmconsulta.__fecha1.setDate( new Date() );
                this.frmconsulta.__fecha2.setDate( new Date() );
                this.frmconsulta.setVisible(true);
                break;
//----------------------------------------------------------------- Soy una barra separadora pobre :)
            case __AGREGAR_PRODUCTO:
                //obtiene ID de producto
                String cat[] = this.frmproducto.__lista_categorias.getSelectedItem().toString().split("-");
                if ( this.mimodelo.NuevoProducto(
                        this.frmproducto.__id.getText(),
                        this.frmproducto.__nombre.getText() ,
                        this.frmproducto.__precio.getText(),
                        this.frmproducto.__cantidad.getText() ,
                        cat[0].trim()
                      ) )
                {
                    this.frmproducto.__TABLA_PRODUCTO.setModel( this.mimodelo.getTablaProducto() ); //actualiza JTable
                    JOptionPane.showMessageDialog(null,"Nuevo producto agregado");
                }
                else
                    JOptionPane.showMessageDialog(null,"Error: Verifique los datos del nuevo producto");
                break;
            case __ACTUALIZAR_PRODUCTO:
                String cat2[] = this.frmproducto.__lista_categorias.getSelectedItem().toString().split("-");
                if( this.mimodelo.ActualizarProducto(
                        this.frmproducto.__id.getText(),
                        this.frmproducto.__nombre.getText() ,
                        this.frmproducto.__precio.getText(),
                        this.frmproducto.__cantidad.getText() ,
                        cat2[0].trim()
                        ))
                {
                    this.frmproducto.__TABLA_PRODUCTO.setModel( this.mimodelo.getTablaProducto() ); //actualiza JTable
                    JOptionPane.showMessageDialog(null,"Registro actualizado");
                }
                break;
//----------------------------------------------------------------- Soy una barra separadora pobre :)
            case __NUEVA_VENTA:
                //asigna un nuevo codigo aleatorio al control
                this.frmventa.__id_venta.setText( this.mimodelo.getRandomCode() );
                //muestra la fecha actual en el control
                this.frmventa.__fecha_venta.setText( this.mimodelo.getFecha() );
                //limpia carrito MAP, jcombobox y demas controles
                this.carrito_compra.clear();
                this.frmventa.__detalle_productos.setModel(new DefaultComboBoxModel());
                this.frmventa.__cantidad.setText("0");
                this.frmventa.__idp.setText("");
                this.frmventa.__stock.setText("0");
                this.frmventa.__precio_unidad.setText("0");
                this.frmventa.__total.setText("0" );
                this.frmventa.__detalle.setText("");
                this.frmventa.__REGISTRAR_VENTA.setEnabled(true);
                break;
            case __lista_productos://cuando se hace clic en algun producto del form VENTA
                //obtiene datos de producto
                producto tmp = this.mimodelo.getProducto( this.frmventa.__lista_productos.getSelectedItem().toString() );
                //coloca los datos en los controles
                this.frmventa.__idp.setText( String.valueOf( tmp.getId() ) );
                this.frmventa.__stock.setText( String.valueOf( tmp.getStock()) );
                this.frmventa.__precio_unidad.setText( String.valueOf( tmp.getPrecio() ) );
                break;
            case __AGREGAR_A_LISTA:
                //controla que se halla seleccionado un producto y
                if( !this.frmventa.__idp.getText().equals("") && !this.frmventa.__cantidad.getText().equals("0"))
                {
                    //controla stock de producto
                    if( Integer.valueOf(this.frmventa.__stock.getText()) > Integer.valueOf(this.frmventa.__cantidad.getText()) )
                    {
                        //nueva instancia a carrito de compras, se cargan datos en la clase
                        carrito tmp_carrito = new carrito();
                        tmp_carrito.setIdproducto( this.frmventa.__idp.getText() );
                        tmp_carrito.setDescripcion( this.frmventa.__lista_productos.getSelectedItem().toString() );
                        tmp_carrito.setPrecio( this.frmventa.__precio_unidad.getText() );
                        tmp_carrito.setCantidad( this.frmventa.__cantidad.getText() );
                        //se añade clase a MAP
                        this.carrito_compra.put( this.frmventa.__idp.getText() , tmp_carrito);
                        //segun el MAP se actualiza la vista del jcombobox
                        this.frmventa.__detalle_productos.setModel( this.mimodelo.ListaProductos(carrito_compra) );
                        //asigna el total de la venta en control
                        this.frmventa.__total.setText( "" + this.mimodelo.getTotalVenta(carrito_compra) );
                    }
                    else JOptionPane.showMessageDialog(null,"Error: No existe stock suficiente para este producto.");
                }
                else JOptionPane.showMessageDialog(null,"Error: Verifique sus datos");
                break;
            case __REMOVER_PRODUCTO:
                JOptionPane.showMessageDialog(null,"you can do it");
                break;
            case __REGISTRAR_VENTA:
                //comprueba que existan productos en el carrito
                if( !this.carrito_compra.isEmpty())
                {
                    //obtiene ID del cliente
                    String idcliente[] = this.frmventa.__lista_clientes.getSelectedItem().toString().split("-");
                    if ( this.mimodelo.RegistrarVenta(this.frmventa.__id_venta.getText(),
                                             carrito_compra,
                                             this.frmventa.__total.getText(),
                                             this.frmventa.__detalle.getText(),
                                             idcliente[1].trim()
                                             ))
                    {
                        JOptionPane.showMessageDialog(null,"Nueva Venta registrada");
                        this.frmventa.__REGISTRAR_VENTA.setEnabled(false);
                    }
                }
                else JOptionPane.showMessageDialog(null,"Error: Sin productos.");
                break;
//----------------------------------------------------------------- Soy una barra separadora pobre :)
            case __PROCESAR_CONSULTA:
                String r = this.mimodelo.getDatosVenta(this.frmconsulta.__idventa.getText());
                if( !r.equals("") )
                {
                    this.frmconsulta.__resultadoTabla.setModel( this.mimodelo.getTablaVenta( this.frmconsulta.__idventa.getText() ) );
                    this.frmconsulta.__resultadoTexto.setText( r );
                }
                else
                {
                    this.frmconsulta.__resultadoTabla.setModel( new DefaultTableModel() );
                    this.frmconsulta.__resultadoTexto.setText( "" );
                    JOptionPane.showMessageDialog(null,"No existen registros");
                }
                break;
            case __PROCESAR_CONSULTA2:
                this.frmconsulta.__resultadoTabla.setModel(
                        this.mimodelo.getDatosVentaxFechas( this.frmconsulta.__fecha1.getDate(), this.frmconsulta.__fecha2.getDate() ) );
                this.frmconsulta.__resultadoTexto.setText("");
                break;
        }//-> fin case

    }

}

Y finalmente la clase Main.java que lanza toda la aplicación.

package controlador;
/**
* @web https://www.jc-mouse.net/
 * @author Mouse
 */
import vista.frmPrincipal;
public class Main {

    public static void main(String[] args) {
        //se ejecuta controlador
        new jcontrolador( new frmPrincipal() ).iniciar();
    }

}

Solo nos queda ejecutar el proyecto y ver si tenemos algún error.

gestion de stock java

Todas las clases están comentadas y espero que todo lo explicado en estos 5 post pueda ser entendido sin problemas para que puedan desarrollar el proyecto, sino 🙂 espero que se diviertan averiguando como funciona la aplicación 🙂

El código del proyecto AQUI 🙂

Tags

Artículos similares

Búsqueda dinámica en JList

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari[...]

Ejemplo de Pruebas Unitarias en Java

Una Prueba Unitaria, es una forma de comprobar que nuestro código, hace lo que se supone debe hacer; es decir, se asegur[...]

El indice TIOBE

El índice TIOBE (TIOBE, The Importance of Being Earnest – «La importancia de ser honesto» – referencia a la[...]

Sumar 2 numeros

Una vez que terminamos el obligatorio 🙂 «Hola mundo«, podemos crear aplicaciones un tanto más elaboradas, pero para nada[...]

Encriptación simétrica en java

En este post veremos un ejemplo sencillo de encriptación/desencriptación simétrica que el API de Java nos permite realiz[...]

SQLite: Encriptación de datos

SQLite es un sistema de gestión de bases de datos relacional,  escrita en C, si se desea hacer uso de encriptación con S[...]