co.com.codesoftware.logica.inventario.SolicitudLogica.java Source code

Java tutorial

Introduction

Here is the source code for co.com.codesoftware.logica.inventario.SolicitudLogica.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 co.com.codesoftware.logica.inventario;

import co.com.codesoftware.persistence.entities.simple.ProductoSimpleEntity;
import co.com.codesoftware.persistencia.HibernateUtil;
import co.com.codesoftware.persistencia.ReadFunction;
import co.com.codesoftware.persistencia.entidad.inventario.SolicitudEntity;
import co.com.codesoftware.persistencia.entidad.inventario.SolicitudProdEntity;
import co.com.codesoftware.persistencia.utilities.DataType;
import co.com.codesoftware.persistencia.utilities.RespuestaEntity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author john
 */
public class SolicitudLogica implements AutoCloseable {

    private Session sesion;
    private Transaction tx;

    /**
     * metodo que inserta una solicitud
     *
     * @param solicitud
     * @return
     */
    public RespuestaEntity insertaSolicitud(SolicitudEntity solicitud) {
        RespuestaEntity respuesta = new RespuestaEntity();
        try {
            initOperation();
            sesion.save(solicitud);
            //sol = consultaSolicitudXFecha(solicitud.getFecha(), solicitud.getSede().getId(), solicitud.getUsuario().getId());
            respuesta.setMensajeRespuesta("OK");
            respuesta.setCodigoRespuesta(1);
        } catch (Exception e) {
            e.printStackTrace();
            respuesta.setCodigoRespuesta(0);
            respuesta.setMensajeRespuesta(e.getMessage());
            respuesta.setDescripcionRespuesta(e.toString());
        }
        return respuesta;
    }

    /**
     * metodo que inserta los productos de una solicitud
     *
     * @param productos
     * @return
     */
    public RespuestaEntity insertaProductosSolicitud(List<SolicitudProdEntity> productos) {
        RespuestaEntity respuesta = new RespuestaEntity();
        try {
            for (SolicitudProdEntity item : productos) {
                initOperation();
                sesion.save(item);
                close();
            }
            respuesta.setCodigoRespuesta(1);
            respuesta.setMensajeRespuesta("OK");
            respuesta.setDescripcionRespuesta("OK");
        } catch (Exception e) {
            e.printStackTrace();
            respuesta.setCodigoRespuesta(0);
            respuesta.setMensajeRespuesta(e.getMessage());
            respuesta.setDescripcionRespuesta(e.toString());
        }
        return respuesta;
    }

    /**
     * metodo que consulta las solicitudes por los filtros seleccionados
     *
     * @param fechaInicial
     * @param fechaFinal
     * @param estado
     * @param usuario
     * @param sede
     * @return
     */
    public List<SolicitudEntity> consultaSolicitudesXFiltro(Date fechaInicial, Date fechaFinal, String estado,
            Integer usuario, Integer sede) {
        System.out.println(fechaInicial);
        System.out.println(fechaFinal);
        System.out.println(estado);
        System.out.println(sede);
        System.out.println(usuario);
        List<SolicitudEntity> respuesta = null;
        try {
            initOperation();
            Criteria crit = sesion.createCriteria(SolicitudEntity.class);
            if (fechaInicial != null && fechaFinal != null) {
                crit.add(Restrictions.ge("fecha", fechaInicial));
                fechaFinal.setHours(23);
                fechaFinal.setMinutes(59);
                fechaFinal.setSeconds(59);
                crit.add(Restrictions.lt("fecha", fechaFinal));
            }
            if (estado != null && !"".equalsIgnoreCase(estado)) {
                crit.add(Restrictions.eq("estado", estado));
            }
            if (usuario != null && usuario != 0) {
                crit.createAlias("usuario", "usu").add(Restrictions.eq("usu.id", usuario));
            }
            if (sede != null && sede != 0) {
                crit.createAlias("sede", "sede").add(Restrictions.eq("sede.id", sede));
            }
            crit.addOrder(Order.desc("id"));
            respuesta = crit.setFetchMode("sede", FetchMode.JOIN).setFetchMode("usuario", FetchMode.JOIN).list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return respuesta;
    }

    /**
     * metodo que consulta la lista de productos de una solicitud
     *
     * @param solicitud
     * @return
     */
    public List<SolicitudProdEntity> consultaProductosXSoliciud(Integer solicitud) {
        List<SolicitudProdEntity> respuesta = new ArrayList<>();
        try {
            initOperation();
            respuesta = sesion.createCriteria(SolicitudProdEntity.class).createAlias("solicitud", "sol")
                    .add(Restrictions.eq("sol.id", solicitud)).list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return respuesta;
    }

    /**
     * funcion que consulta las solicitudes por fecha
     *
     * @param fecha
     * @param sede
     * @param usuario
     * @return
     */
    public SolicitudEntity consultaSolicitudXFecha(Date fecha, Integer sede, Integer usuario) {
        SolicitudEntity solicitud = new SolicitudEntity();
        try {
            initOperation();
            solicitud = (SolicitudEntity) sesion.createCriteria(SolicitudEntity.class)
                    .add(Restrictions.eq("fecha", fecha)).createAlias("sede", "sed").createAlias("usuario", "usu")
                    .add(Restrictions.eq("sede.id", sede)).add(Restrictions.eq("usu.id", usuario)).uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return solicitud;
    }

    /**
     * metodo que consulta usa solicitud por ID
     *
     * @param id
     * @return
     */
    public SolicitudEntity consultaSolicitudXId(Integer id) {
        SolicitudEntity solicitud = new SolicitudEntity();
        try {
            initOperation();
            solicitud = (SolicitudEntity) sesion.createCriteria(SolicitudEntity.class)
                    .setFetchMode("sede", FetchMode.JOIN).setFetchMode("usuario", FetchMode.JOIN)
                    .add(Restrictions.eq("id", id)).uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return solicitud;
    }

    /**
     * metoddo que actualiza los productos de una solicitud
     *
     * @param productos
     * @return
     */
    public RespuestaEntity actualizaProductosSolicitud(List<SolicitudProdEntity> productos, Integer idUsuario) {
        RespuestaEntity respuesta = new RespuestaEntity();
        try {
            for (SolicitudProdEntity item : productos) {
                initOperation();
                sesion.save(item);
                close();
            }
            //respuesta = actualizaSolicitud("E", productos.get(0).getSolicitud());
            respuesta = ejecutaProcedimientoSolicitud(idUsuario, productos.get(0).getSolicitud().getId());

        } catch (Exception e) {
            e.printStackTrace();
            respuesta.setCodigoRespuesta(0);
            respuesta.setDescripcionRespuesta(e.getMessage());
            respuesta.setMensajeRespuesta(e.toString());
        }
        return respuesta;
    }

    /**
     * metodo que borra los productos de una solicitud
     * @param idSolicitud
     * @return 
     */
    public boolean borraProductosSolicitud(Integer idSolicitud) {
        try {
            initOperation();
            List<SolicitudProdEntity> rta = sesion.createCriteria(SolicitudProdEntity.class)
                    .createAlias("solicitud", "sol").add(Restrictions.eq("sol.id", idSolicitud)).list();
            for (SolicitudProdEntity item : rta) {
                sesion.delete(item);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                close();
            } catch (Exception ex) {
                Logger.getLogger(SolicitudLogica.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * metodo que actualiza una solicitud nuevo comentario
     * @param entidad
     * @return 
     */
    public boolean actualizaSolicitud(SolicitudEntity entidad) {
        try {
            initOperation();
            sesion.update(entidad);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                close();
            } catch (Exception ex) {
                Logger.getLogger(SolicitudLogica.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * metodo que consulta un produnto simple por codigo externo
     *
     * @param codigoExterno
     * @return
     */
    public ProductoSimpleEntity consultaProductoXCodExterno(String codigoExterno) {
        ProductoSimpleEntity rta = new ProductoSimpleEntity();
        try {
            initOperation();
            rta = (ProductoSimpleEntity) sesion.createCriteria(ProductoSimpleEntity.class)
                    .add(Restrictions.eq("codigoExt", codigoExterno)).uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rta;
    }

    /**
     * funcion que actualiza el estado de la solicitud
     *
     * @param estado
     * @param solicitud
     * @return
     */
    public RespuestaEntity actualizaSolicitud(String estado, SolicitudEntity solicitud) {
        RespuestaEntity respuesta = new RespuestaEntity();
        try {
            initOperation();
            solicitud.setEstado(estado);
            sesion.update(solicitud);
            close();
            respuesta.setCodigoRespuesta(1);
            respuesta.setDescripcionRespuesta("OK");
            respuesta.setMensajeRespuesta("OK");
        } catch (Exception e) {
            e.printStackTrace();
            respuesta.setCodigoRespuesta(0);
            respuesta.setDescripcionRespuesta(e.getMessage());
            respuesta.setMensajeRespuesta(e.toString());
        }
        return respuesta;
    }

    /**
     * funcion que llama al procedimiento de solicitudes
     *
     * @param idUsuario
     * @param idSede
     * @return
     */
    public RespuestaEntity ejecutaProcedimientoSolicitud(Integer idUsuario, Integer idSede) {
        RespuestaEntity respuesta = new RespuestaEntity();
        try (ReadFunction rf = new ReadFunction()) {
            rf.setNombreFuncion("FA_ENVIASOLICITUD");
            rf.setNumParam(2);
            rf.addParametro(idUsuario.toString(), DataType.INT);
            rf.addParametro(idSede.toString(), DataType.INT);
            boolean valida = rf.callFunctionJdbc();
            if (valida) {
                if (rf.getRespuestaPg().get(0).startsWith("Error")) {
                    respuesta.setCodigoRespuesta(0);
                } else {
                    respuesta.setCodigoRespuesta(1);
                }
                respuesta.setDescripcionRespuesta(rf.getRespuestaPg().get(0));

            } else {
                respuesta.setDescripcionRespuesta("Error al realizar solicitud ");
                respuesta.setCodigoRespuesta(0);
            }
        } catch (Exception e) {
            respuesta.setDescripcionRespuesta("Error" + e.getMessage());
            respuesta.setCodigoRespuesta(0);
            e.printStackTrace();
        }
        return respuesta;
    }

    /**
     * metodo que inicia la factoria de conexiones hibernate
     *
     * @throws HibernateException
     */
    private void initOperation() throws HibernateException {
        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }

    /**
     * metodo que cierra la factoria de conexiones de hibernate
     *
     * @throws Exception
     */
    @Override
    public void close() throws Exception {
        if (tx != null) {
            tx.commit();
        }
        if (sesion != null) {
            sesion.close();
        }
    }
}