administracion.actions.GestorOperacionesDatosRestaurante.java Source code

Java tutorial

Introduction

Here is the source code for administracion.actions.GestorOperacionesDatosRestaurante.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package administracion.actions;

import administracion.modelo.Impuesto;
import administracion.modelo.Mesa;
import administracion.modelo.Restaurante;
import hibernate.HibernateUtil;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

/**
 *
 * @author juang
 */
public class GestorOperacionesDatosRestaurante {

    private static final int OPERACION_SUCCESS = 1;
    private static final int OPERACION_NO_POSIBLE = -1;
    private static final int OPERACION_ERROR = 0;
    private static final String ESTADO_MESA = "libre";

    public Restaurante obtenerDatosRestaurante() {
        Session sesion = null;
        Restaurante restaurante = null;
        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "SELECT cif,nombre_local,direccion,telefono FROM datos_local";
            SQLQuery query = sesion.createSQLQuery(sql).addEntity(Restaurante.class);
            List<Restaurante> lista = query.list();
            sesion.getTransaction().commit();
            restaurante = lista.get(0);
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            System.out.println("Error obtener datos restaurante: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return restaurante;
    }

    public List<Impuesto> obtenerImpuestos() {
        Session sesion = null;
        List<Impuesto> lista = null;
        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "SELECT nombre_impuesto,id_impuesto,valor FROM impuesto WHERE id_impuesto IN (SELECT MAX(id_impuesto) FROM impuesto GROUP BY nombre_impuesto) and valor > 0 ORDER BY nombre_impuesto";
            SQLQuery query = sesion.createSQLQuery(sql).addEntity(Impuesto.class);
            lista = query.list();
            sesion.getTransaction().commit();
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            System.out.println("Error obtener impuestos: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return lista;
    }

    public int obtenerNumeroMesas() {
        Session sesion = null;
        int numeroMesa = 0;
        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "SELECT MAX(numero_mesa) AS numero_mesa,estado_mesa,activo FROM mesa WHERE activo = true"; //Nos interesa el numero de mesas activas
            SQLQuery query = sesion.createSQLQuery(sql).addEntity(Mesa.class);
            List<Mesa> lista = query.list();
            numeroMesa = lista.get(0).getNumero();
            sesion.getTransaction().commit();
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            System.out.println("Error obtener numero de mesas: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return numeroMesa;
    }

    public int actualizarDatosRestaurante(Restaurante restaurante) {
        Session sesion = null;
        int resultadoOperacion = 0;

        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "UPDATE datos_local SET nombre_local = '" + restaurante.getNombre() + "', direccion = '"
                    + restaurante.getDireccion() + "', telefono = " + restaurante.getTelefono() + "  WHERE cif = '"
                    + restaurante.getCif() + "'";
            SQLQuery query = sesion.createSQLQuery(sql);
            query.executeUpdate();
            sesion.getTransaction().commit();
            resultadoOperacion = OPERACION_SUCCESS;
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            resultadoOperacion = OPERACION_ERROR;
            System.out.println("Error modificar datos restaurante: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return resultadoOperacion;
    }

    public int actualizarNumeroMesas(int numeroMesasInicial, int numeroMesasNuevo) {

        int resultadoOperacion = 0;
        int diferencia = 0;
        Session sesion = null;
        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();

            if (numeroMesasNuevo > numeroMesasInicial) { //En este caso queremos ampliar el numero de mesas
                diferencia = numeroMesasNuevo - numeroMesasInicial; //Obtenemos la diferencia

                //Obtenemos el numero de mesas total. Teniendo en cuenta las activas + las no activas (si las hay)
                String sql = "SELECT numero_mesa,estado_mesa,activo FROM mesa";
                SQLQuery query = sesion.createSQLQuery(sql).addEntity(Mesa.class);
                int numeroMesasTotal = (int) query.list().size();

                for (int i = numeroMesasInicial + 1; i <= numeroMesasNuevo; i++) { //Itreamos desde el mayor numero de mesa activo actualmente hasta el numero de mesas final que queremos                   
                    if (numeroMesasTotal > i) { //Quiere decir que la mesa ya existia pero estaba deshabilitada                       
                        String sql1 = "UPDATE mesa SET activo = true WHERE numero_mesa = " + i; //Actualizamos su estado
                        SQLQuery query1 = sesion.createSQLQuery(sql1);
                        query1.executeUpdate();
                    } else { //La mesa no exite y la creamos                 
                        Mesa mesa = new Mesa(); //Creamos la mesa
                        mesa.setNumero(i);
                        mesa.setEstado(ESTADO_MESA);
                        mesa.setActivo(true);
                        sesion.save(mesa); //Hacemos el INSERT
                    }
                }
                sesion.getTransaction().commit();
                resultadoOperacion = OPERACION_SUCCESS;

            } else { //En este caso queremos reducir el numero de mesas
                List<Mesa> listaMesas = obtenerListadoMesas(); //Obtenemos el listado de mesas (nos interesa para ver el estado)
                boolean reducir = true; //Indica si podemos realizar la operacion para reducir el numero de mesas          
                diferencia = numeroMesasInicial - numeroMesasNuevo; //Numero de mesas que queremos reducir
                for (int i = numeroMesasInicial - 1; i >= numeroMesasNuevo; i--) { //Iteremos por las mesas que queremos desactivar
                    if (!listaMesas.get(i).getEstado().equals(ESTADO_MESA)) { //Si la mesa no esta libre
                        reducir = false; //NO PERMITIMOS LA OPERACION
                        resultadoOperacion = OPERACION_NO_POSIBLE;
                        break;
                    }
                }
                if (reducir) { //Si todas las mesas que queremos desactivar estan libres
                    for (int i = numeroMesasInicial - 1; i >= numeroMesasNuevo; i--) { //Las recorremos y las desactivamos
                        String sql = "UPDATE mesa SET activo = false WHERE numero_mesa = " + (i + 1);
                        SQLQuery query = sesion.createSQLQuery(sql);
                        query.executeUpdate();
                    }
                    sesion.getTransaction().commit();
                    resultadoOperacion = OPERACION_SUCCESS;
                }
            }
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            resultadoOperacion = OPERACION_ERROR;
            System.out.println("Error actualizar numero de mesas: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return resultadoOperacion;
    }

    public List<Mesa> obtenerListadoMesas() {
        Session sesion = null;
        List<Mesa> lista = null;
        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "SELECT numero_mesa,estado_mesa,activo FROM mesa WHERE activo = true"; //En este caso siempre nos van a interesar las mesas que esten en estado activo=true
            SQLQuery query = sesion.createSQLQuery(sql).addEntity(Mesa.class);
            lista = query.list();
            sesion.getTransaction().commit();
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            System.out.println("Error obtener lista de mesas: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }

        return lista;
    }

    public int insertarImpuesto(Impuesto dato) {
        Session sesion = null;
        int resultadoOperacion = 0;

        try {
            HibernateUtil hb = new HibernateUtil();
            sesion = hb.getSessionFactory().openSession();
            sesion.beginTransaction();
            String sql = "INSERT INTO impuesto (nombre_impuesto, valor) VALUES ('" + dato.getNombre() + "', "
                    + dato.getValor() + ")";
            SQLQuery query = sesion.createSQLQuery(sql);
            query.executeUpdate();
            sesion.getTransaction().commit();
            resultadoOperacion = OPERACION_SUCCESS;
        } catch (HibernateException e) {
            System.out.println("Error en la conexion con la base de datos: " + e);
            throw e;
        } catch (Exception e) {
            resultadoOperacion = OPERACION_ERROR;
            System.out.println("Error insertar impuesto: " + e);
        } finally {
            if (sesion != null) {
                sesion.close();
            }
        }
        return resultadoOperacion;
    }
}