Logica.Usuario.java Source code

Java tutorial

Introduction

Here is the source code for Logica.Usuario.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 Logica;

import Controllers.DatosformatosJpaController;
import Controllers.EvaluacionprovJpaController;
import Controllers.ItemJpaController;
import Controllers.ItmxordenJpaController;
import Controllers.ItxsolJpaController;
import Controllers.IxpJpaController;
import Controllers.OrdencompraJpaController;
import Controllers.PermisosJpaController;
import Controllers.ProveedorJpaController;
import Controllers.RecepcionJpaController;
import Controllers.SolicitudPrJpaController;
import Controllers.TablamostrarJpaController;
import Controllers.UsuarioJpaController;
import Controllers.exceptions.IllegalOrphanException;
import Controllers.exceptions.NonexistentEntityException;
import Controllers.exceptions.PreexistingEntityException;
import Entities.Datosformatos;
import Entities.Evaluacionprov;
import Entities.Item;
import Entities.Itmxorden;
import Entities.Itxsol;
import Entities.Ixp;
import Entities.Ordencompra;
import Entities.Permisos;
import Entities.Proveedor;
import Entities.Recepcion;
import Entities.SolicitudPr;
import Entities.Tablamostrar;
import EstructurasAux.BuscarUsuario;
import EstructurasAux.solicitudPr;
import EstructurasAux.ItemInventario;
import EstructurasAux.aprobacion;
import EstructurasAux.cotizaciones;
import EstructurasAux.datosFormatos;
import EstructurasAux.descargo;
import EstructurasAux.evProv;
import EstructurasAux.fdc_001;
import EstructurasAux.informeDescargos;
import EstructurasAux.itemRecep;
import EstructurasAux.itemsOrdenCompra;
import EstructurasAux.itemsfdc_001;
import EstructurasAux.itemxproveedor;
import EstructurasAux.permisos;
import EstructurasAux.proveedor;
import EstructurasAux.recepcionProd;
import EstructurasAux.users;
import com.itextpdf.text.xml.simpleparser.EntitiesToSymbol;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import javax.persistence.*;

/**
 *
 * @author Oscar Dario Malagon Murcia
 */
public class Usuario extends UnicastRemoteObject implements interfaces.Usuario, Serializable {

    private Object Entities;

    public Usuario() throws RemoteException {
        super();
    }

    //Gestin Items
    /**
     *
     * @param item
     * @return boolean
     * @throws RemoteException
     *
     * Crea un tem
     */
    @Override
    public boolean crearItem(ItemInventario item) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        ItemJpaController itm = new ItemJpaController(emf);
        Item i = new Item(item.getNumero(), item.getInventario(), item.getDescripcion(), item.getPresentacion(),
                new Double(Float.toString(item.getCantidad())), new Double(Float.toString(item.getPrecio())),
                item.getcCalidad(), item.getCEsp());
        try {
            itm.create(i);
            hecho = true;
            emf.close();
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }

        return hecho;
    }

    /**
     *
     * @param item
     * @return
     * @throws RemoteException
     *
     * Edita la informacin de un tem ya existente.
     */
    @Override
    public boolean editarItem(ItemInventario item) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        ItemJpaController itm = new ItemJpaController(emf);
        Item i = itm.findItem(item.getNumero());
        i.setCinterno(item.getNumero().trim());
        i.setInventario(item.getInventario());
        i.setDescripcion(item.getDescripcion());
        i.setPresentacion(item.getPresentacion());
        i.setCantidad(new Double(Float.toString(item.getCantidad())));
        i.setPrecio(new Double(Float.toString(item.getPrecio())));
        i.setCcalidad(item.getcCalidad());
        i.setCesp(item.getCEsp());
        try {
            itm.edit(i);
            hecho = true;
            emf.close();
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    /**
     *
     * @param cinterno
     * @return
     * @throws RemoteException
     *
     * Buscar la informacin de un tem de acuerdo al cdigo interno ingresado
     */
    @Override
    public ItemInventario buscarInfoItem(String cinterno) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ItemJpaController itm = new ItemJpaController(emf);
        Item findItem = itm.findItem(cinterno);
        if (findItem == null) {
            emf.close();
            return new ItemInventario();
        } else {
            return findItem.EntityToItem(findItem);
        }
    }

    /**
     *
     * @param item
     * @return boolean
     * @throws RemoteException
     *
     * Con el cinterno del objeto obtenido por parmetro se elimina de la base
     * de datos
     */
    @Override
    public boolean eliminarItem(ItemInventario item) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        ItemJpaController itm = new ItemJpaController(emf);
        try {
            itm.destroy(item.getNumero());
            hecho = true;
            emf.close();
        } catch (IllegalOrphanException | NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    /**
     *
     * @return ArrayList
     * @throws RemoteException
     *
     * Devuelve un listado con los ltimos tems que han sido ingresados.
     */
    @Override
    public ArrayList<ItemInventario> ultimos() throws RemoteException {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String numero;
        String lab;
        String descripcion;
        String presentacion;
        float cantidad;
        float precio;
        String cCalidad;
        String cEsp;
        String sucursal;
        ItemInventario in;
        ArrayList<ItemInventario> lista = new ArrayList<>();
        try {
            con = Conexion.conexion.getConnection();
            String statement = "(select * from item where cinterno like '%MMC%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%MT%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%AS%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%B%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%ER%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%I%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%MT%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%MV%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%N%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%PL%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%T%' order by CINTERNO desc limit 1)\n"
                    + "union\n" + "(select * from item where cinterno like '%V%' order by CINTERNO desc limit 1)";
            ps = con.prepareStatement(statement);
            rs = ps.executeQuery();
            while (rs.next()) {
                numero = rs.getString("CINTERNO");
                lab = rs.getString("INVENTARIO");
                descripcion = rs.getString("DESCRIPCION");
                presentacion = rs.getString("PRESENTACION");
                cantidad = rs.getFloat("CANTIDAD");
                precio = rs.getFloat("PRECIO");
                cCalidad = rs.getString("CCALIDAD");
                cEsp = rs.getString("CESP");
                in = new ItemInventario(numero, lab, descripcion, presentacion, cantidad, precio, cCalidad, cEsp,
                        "", new Float(0));
                lista.add(in);
            }
        } catch (SQLException ex) {
            System.out.println("Error en la funcin \"CVer ltimos\"");
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando la conexin");
            }
        }

        return lista;

    }

    /**
     *
     * @return ArrayList
     * @throws RemoteException
     *
     * Genera una lista con todo el inventario existente en la base de datos
     */
    @Override
    public ArrayList<ItemInventario> itemInventarioAdmin() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ArrayList<ItemInventario> lista = new ArrayList<>();
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Item.InventarioAdmin");
        List<Item> resultList = q.getResultList();
        for (Item i : resultList) {
            lista.add(i.EntityToItem(i));
        }
        emf.close();
        return lista;
    }

    /**
     *
     * @param cinterno
     * @param NIT
     * @param precio
     * @return
     * @throws RemoteException
     *
     * Asocia un tem a un proveedor
     */
    @Override
    public boolean asociarItem(String cinterno, String NIT, String precio) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        boolean hecho = false;
        try {
            Query q = em.createNamedQuery("Ixp.findByCinterno_NIT");
            q.setParameter("cinterno", cinterno);
            q.setParameter("nit", NIT);
            IxpJpaController ixpCo = new IxpJpaController(emf);
            List<Ixp> resultList = q.getResultList();
            Ixp itm = new Ixp();
            if (!resultList.isEmpty()) {
                itm = resultList.get(0);
            }
            itm.setCinterno(cinterno);
            itm.setNit(NIT);
            itm.setPrecio(new Double(precio));
            if (resultList.isEmpty()) {
                ixpCo.create(itm);
            } else {
                ixpCo.edit(itm);
            }
            hecho = true;

        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return hecho;
    }

    /**
     *
     * @param cinterno
     * @param NIT
     * @param precio
     * @return
     * @throws RemoteException
     *
     * Asocia un tem a un proveedor
     */
    @Override
    public boolean desasociarItem(String cinterno, String NIT, String precio) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        boolean hecho = false;
        try {
            Query q = em.createNamedQuery("Ixp.findByCinterno_NIT");
            q.setParameter("cinterno", cinterno);
            q.setParameter("nit", NIT);
            IxpJpaController ixpCo = new IxpJpaController(emf);
            List<Ixp> resultList = q.getResultList();
            Ixp itm = new Ixp();
            if (!resultList.isEmpty()) {
                itm = resultList.get(0);
                itm.setCinterno(cinterno);
                itm.setNit(NIT);
                itm.setPrecio(new Double(precio));
                ixpCo.destroy(itm.getId());
            }
            hecho = true;
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return hecho;
    }

    //Gestin Proveedores
    /**
     *
     * @param NIT
     * @param Nombre
     * @param direccion
     * @param telefono
     * @param telefax
     * @param ciudad
     * @param correo
     * @param celular
     * @return boolean
     * @throws RemoteException
     *
     * Crea un proveedor en la base de datos.
     */
    @Override
    public boolean CrearProveedor(String NIT, String Nombre, String direccion, String telefono, String telefax,
            String ciudad, String correo, String celular, String contacto) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean valido = false;
        ProveedorJpaController prov = new ProveedorJpaController(emf);
        Proveedor nuevo = new Proveedor(NIT, Nombre, direccion, correo, telefax, celular, ciudad, contacto);
        try {
            prov.create(nuevo);
            valido = true;
            emf.close();
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return valido;
    }

    /**
     *
     * @param NIT
     * @param Nombre
     * @param direccion
     * @param telefono
     * @param telefax
     * @param ciudad
     * @param correo
     * @param celular
     * @return boolean
     * @throws RemoteException
     *
     * Edita la informacin de un proveedor.
     */
    @Override
    public boolean EditarProveedor(String NIT, String Nombre, String direccion, String telefono, String telefax,
            String ciudad, String correo, String celular, String contacto) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        ProveedorJpaController prov = new ProveedorJpaController(emf);
        Proveedor find = prov.findProveedor(NIT);
        find.setNombre(Nombre);
        find.setDir(direccion);
        find.setTel(telefono);
        find.setFax(telefax);
        find.setCiudad(ciudad);
        find.setCorreo(correo);
        find.setCelular(celular);
        find.setContacto(contacto);
        try {
            prov.edit(find);
            hecho = true;
            emf.close();
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    /**
     *
     * @return ArrayList
     * @throws RemoteException
     *
     * Genera una lista con todos los proveedores que se encuentran en el
     * sistema
     */
    @Override
    public ArrayList<proveedor> todosProveedores() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ArrayList<proveedor> proveedores = new ArrayList<>();
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Proveedor.findAllOrderByName");
        List<Proveedor> resultList = q.getResultList();
        for (Proveedor p : resultList) {
            proveedores.add(new proveedor(p.getNit(), p.getNombre(), p.getDir(), p.getTel(), p.getFax(),
                    p.getCiudad(), p.getCelular(), p.getCorreo(), p.getContacto()));
        }
        emf.close();
        return proveedores;
    }

    /**
     *
     * @param NIT
     * @return proveedor
     * @throws RemoteException
     *
     * Busca los datos de un proveedor de acuerdo al nit recibido
     */
    @Override
    public proveedor getDatosProveedor(String NIT) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ProveedorJpaController prov = new ProveedorJpaController(emf);
        Proveedor find = prov.findProveedor(NIT);
        proveedor p = new proveedor(find.getNit(), find.getNombre(), find.getDir(), find.getTel(), find.getFax(),
                find.getCiudad(), find.getCelular(), find.getCorreo(), find.getContacto());
        emf.close();
        return p;
    }

    /**
     *
     * @param NIT
     * @return boolean
     * @throws RemoteException
     */
    @Override
    public boolean EliminarProveedor(String NIT) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        ProveedorJpaController prov = new ProveedorJpaController(emf);
        try {
            prov.destroy(NIT);
            hecho = true;
            emf.close();
        } catch (IllegalOrphanException | NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    //Gestin Usuarios
    /**
     *
     * @param identificacion
     * @param contrasena
     * @return boolean
     * @throws RemoteException
     *
     * Vlida la existencia del usuario en la base de datos.
     */
    @Override
    public boolean validarUsuario(String identificacion, String contrasena) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean valido = false;
        UsuarioJpaController controller = new UsuarioJpaController(emf);
        Entities.Usuario findUsuario = controller.findUsuario(identificacion);
        if (findUsuario.getPsw().equalsIgnoreCase(this.encriptar(contrasena))) {
            valido = true;
        }
        emf.close();
        return valido;
    }

    /**
     *
     * @param nueva
     * @param id
     * @return boolean
     * @throws RemoteException
     *
     * Cambia la clave del usuario
     */
    @Override
    public boolean cambiarClave(String nueva, String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        try {

            UsuarioJpaController contr = new UsuarioJpaController(emf);
            Entities.Usuario findUsuario = contr.findUsuario(id);
            findUsuario.setPsw(this.encriptar(nueva));
            contr.edit(findUsuario);
            hecho = true;

        } catch (NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return hecho;
    }

    /**
     *
     * @param parametro = nombre o id
     * @param valor = cadena de entrada para realizar la bsqueda
     * @return ArrayList
     * @throws RemoteException
     *
     * Busca todos los usuarios que tienen un "valor" parecido o igual al
     * ingresado
     */
    @Override
    public ArrayList<BuscarUsuario> buscarEmpleado(String parametro, String valor) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query qNombre = em.createNamedQuery("Usuario.findByNombre");
        Query qId = em.createNamedQuery("Usuario.findById");
        ArrayList<BuscarUsuario> lista = new ArrayList<>();
        if (parametro.equalsIgnoreCase("nombre")) {
            qNombre.setParameter("nombre", "%" + valor + "%");
            List<Entities.Usuario> resultList = qNombre.getResultList();
            for (Entities.Usuario u : resultList) {
                lista.add(u.UsuarioToBuscarUsuario(u));
            }
        } else if (parametro.equalsIgnoreCase("id")) {
            qId.setParameter("id", "%" + valor + "%");
            List<Entities.Usuario> resultList = qId.getResultList();
            for (Entities.Usuario u : resultList) {
                lista.add(u.UsuarioToBuscarUsuario(u));
            }
        }
        emf.close();
        return lista;
    }

    /**
     *
     * @param anterior
     * @param id
     * @return boolean
     * @throws RemoteException
     *
     * Verifica la validez de la contrasea anterior, antes de realizar el
     * cambio de clave.
     */
    @Override
    public boolean verificarClave(String anterior, String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        UsuarioJpaController us = new UsuarioJpaController(emf);
        Entities.Usuario findUsuario = us.findUsuario(id);
        emf.close();
        return findUsuario.getPsw().equalsIgnoreCase(this.encriptar(anterior));
    }

    /**
     *
     * @param identificacion
     * @param nombre
     * @param correo
     * @param psw
     * @param area
     * @param id
     * @return boolean
     * @throws RemoteException
     *
     * Crea un usuario completamente nuevo
     */
    @Override
    public boolean crearUsuario(String identificacion, String nombre, String correo, String psw, String area,
            String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean creado = false;
        UsuarioJpaController contr = new UsuarioJpaController(emf);
        Entities.Usuario nuevo = new Entities.Usuario(identificacion, this.encriptar(psw), nombre, correo, area,
                contr.findUsuario(id));
        try {
            contr.create(nuevo);
            creado = true;
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return creado;
    }

    /**
     *
     * @param id
     * @return String
     * @throws RemoteException
     *
     * Busca el nombre de un usuario de acuerdo a su numero de identificacion
     */
    @Override
    public String getUsuario(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        UsuarioJpaController us = new UsuarioJpaController(emf);
        Entities.Usuario f = us.findUsuario(id);
        return f.getNombre();
    }

    /**
     *
     * @return ArrayList
     *
     * Genera una lista con los usuarios actualmente registrados en el sistema.
     */
    @Override
    public ArrayList<users> getUsuarios() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        UsuarioJpaController contr = new UsuarioJpaController(emf);
        List<Entities.Usuario> lst = contr.findUsuarioEntities();
        ArrayList<users> lista = new ArrayList<>();
        for (Entities.Usuario usuario : lst) {
            lista.add(usuario.UsuarioToUsers(usuario));
        }
        emf.close();
        return lista;
    }

    /**
     *
     * @param id
     * @return boolean
     * @throws RemoteException
     *
     * Elimina a un usuario del sistema
     */
    @Override
    public boolean EliminarUsuario(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        UsuarioJpaController us = new UsuarioJpaController(emf);
        try {
            PermisosJpaController p = new PermisosJpaController(emf);
            Permisos findPermisos = p.findPermisos(id.trim());
            if (findPermisos != null) {
                p.destroy(id.trim());
            }
            us.destroy(id.trim());
            hecho = true;
        } catch (IllegalOrphanException | NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return hecho;
    }

    /**
     *
     * @param id
     * @return
     * @throws RemoteException
     */
    @Override
    public users getDatosUsuario(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        UsuarioJpaController us = new UsuarioJpaController(emf);
        Entities.Usuario findUsuario = us.findUsuario(id);
        emf.close();
        return findUsuario.UsuarioToUsers(findUsuario);
    }

    /**
     *
     * @param u
     * @return
     * @throws RemoteException
     */
    @Override
    public boolean EditarUsuario(users u) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        UsuarioJpaController us = new UsuarioJpaController(emf);
        Entities.Usuario findUsuario = us.findUsuario(u.getId().toString());
        findUsuario.setNombre(u.getNombre());
        findUsuario.setCorreo(u.getCorreo());
        findUsuario.setLab(u.getLab());
        try {
            us.edit(findUsuario);
            hecho = true;
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return hecho;
    }

    /**
     *
     * @param p
     * @return
     * @throws RemoteException
     *
     * Asigna los permisos a un usuario
     */
    @Override
    public boolean AsignarPermisos(permisos p) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean hecho = false;
        PermisosJpaController per = new PermisosJpaController(emf);
        Permisos lista = per.findPermisos(p.getId());
        Permisos pp = new Permisos(p.getId());
        pp.setCrearItem((p.isCrearItem() == 1 ? '1' : '0'));
        pp.setCrearProv((p.isCrearProveedor()) == 1 ? '1' : '0');
        pp.setCrearUsuario((p.isCrearUsuario()) == 1 ? '1' : '0');
        pp.setDescargarConsumos((p.isDescargarConsumos()) == 1 ? '1' : '0');
        pp.setRecibirPedido((p.isRecibirPedidos()) == 1 ? '1' : '0');
        pp.setRepDescargos((p.isGenRepDescargos()) == 1 ? '1' : '0');
        pp.setRepInventario((p.isGenRepInventario()) == 1 ? '1' : '0');
        pp.setRepUsuarios((p.isGenRepUsuarios()) == 1 ? '1' : '0');
        pp.setRepProv((p.isGenRepProveedores()) == 1 ? '1' : '0');
        pp.setRepixp((p.isGenRepItemxProveedor()) == 1 ? '1' : '0');
        pp.setSolProd((p.isSolicitarProductos()) == 1 ? '1' : '0');
        pp.setRealizarCot((p.isRealizarCotizaciones()) == 1 ? '1' : '0');
        pp.setAprobarCot((p.isAprobarCotizaciones()) == 1 ? '1' : '0');
        pp.setOcompra((p.isGenerarOrdenesCompra()) == 1 ? '1' : '0');
        pp.setBloqUs((p.isBloquearUsuario()) == 1 ? '1' : '0');
        pp.setGenfdc001((p.getGenfdc001()) == 1 ? '1' : '0');
        if (lista == null) {
            try {
                pp.setUsuario(new UsuarioJpaController(emf).findUsuario(p.getId()));
                per.create(pp);
                hecho = true;
            } catch (PreexistingEntityException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                pp.setUsuario(new UsuarioJpaController(emf).findUsuario(p.getId()));
                per.edit(pp);
                hecho = true;
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        emf.close();
        return hecho;
    }

    /**
     *
     * @param id
     * @return
     * @throws RemoteException
     *
     * Devuelve la lista de permisos correspondientes al usuario con el id
     * ingresado
     */
    @Override
    public permisos lista(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        PermisosJpaController per = new PermisosJpaController(emf);
        Permisos aux = per.findPermisos(id);
        permisos listaPermisos = new permisos();
        if (aux != null) {
            listaPermisos = new permisos(id, (aux.getCrearItem() == '1' ? 1 : 0),
                    (aux.getCrearProv() == '1' ? 1 : 0), (aux.getCrearUsuario() == '1' ? 1 : 0),
                    (aux.getDescargarConsumos() == '1' ? 1 : 0), (aux.getRecibirPedido() == '1' ? 1 : 0),
                    (aux.getRepDescargos() == '1' ? 1 : 0), (aux.getRepInventario() == '1' ? 1 : 0),
                    (aux.getRepUsuarios() == '1' ? 1 : 0), (aux.getRepProv() == '1' ? 1 : 0),
                    (aux.getRepixp() == '1' ? 1 : 0), (aux.getSolProd() == '1' ? 1 : 0),
                    (aux.getRealizarCot() == '1' ? 1 : 0), (aux.getAprobarCot() == '1' ? 1 : 0),
                    (aux.getOcompra() == '1' ? 1 : 0), (aux.getBloqUs() == '1' ? 1 : 0),
                    (aux.getGenfdc001() == '1' ? 1 : 0));

        }
        emf.close();
        return listaPermisos;
    }

    //Descargos
    /**
     *
     * @param descripcion
     * @param presentacion
     * @param inv
     * @return
     * @throws RemoteException
     */
    @Override
    public ArrayList<ItemInventario> busquedaItem(String descripcion, String presentacion, String inv)
            throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Item.busqueda");
        q.setParameter("descripcion", "%" + descripcion + "%");
        q.setParameter("presentacion", "%" + presentacion + "%");
        q.setParameter("inv", "%" + inv + "%");
        List<Item> resultList = q.getResultList();
        if (resultList == null) {
            emf.close();
            return new ArrayList<>();
        } else {
            ArrayList<ItemInventario> lstRetorno = new ArrayList<>();
            for (Item i : resultList) {
                lstRetorno.add(i.EntityToItem(i));
            }
            emf.close();
            return lstRetorno;
        }
    }

    /**
     *
     * @param sol
     * @param itemsSolicitud
     * @return
     * @throws RemoteException
     *
     * Crea la solicitud
     */
    @Override
    public Integer crearSolicitud(solicitudPr sol, ArrayList<ItemInventario> itemsSolicitud)
            throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean solCreada = false;
        boolean itemsEnviados = false;
        SolicitudPr s = new SolicitudPr();
        SolicitudPrJpaController con = new SolicitudPrJpaController(emf);
        s.setIdSolicitante(sol.getIdSolicitante());
        s.setFecha(new java.util.Date(sol.getFecha().getTimeInMillis()));
        s.setObservaciones(sol.getObservaciones());
        s.setRevisado("NO");
        con.create(s);
        solCreada = true;
        Double numSol = 0.0;
        if (solCreada == true) {
            EntityManager em = emf.createEntityManager();
            Query q = em.createNamedQuery("SolicitudPr.getUltima");
            q.setParameter("id", sol.getIdSolicitante());
            numSol = new Double(q.getResultList().get(0).toString());
            ItxsolJpaController conItems = new ItxsolJpaController(emf);
            for (ItemInventario i : itemsSolicitud) {
                if (i.getCantidadSolicitada() <= 0) {
                    itemsEnviados = false;
                } else {
                    conItems.create(new Itxsol(new Double(Float.toString(i.getCantidadSolicitada())), numSol,
                            new Item(i.getNumero()), "NO", 0.0));
                }
            }
            itemsEnviados = true;
            TablamostrarJpaController conTabla = new TablamostrarJpaController(emf);
            Tablamostrar tablamostrar = new Tablamostrar();
            tablamostrar.setIdArchivo(numSol);
            tablamostrar.setIdUsuario(sol.getIdSolicitante());
            tablamostrar.setTipoArchivo("Solicitud");
            tablamostrar.setMostrar("SI");
            conTabla.create(tablamostrar);
            tablamostrar.setTipoArchivo("SolicitudRev");
            tablamostrar.setMostrar("SI");
            conTabla.create(tablamostrar);
            tablamostrar.setTipoArchivo("SolicitudNoRev");
            tablamostrar.setMostrar("SI");
            conTabla.create(tablamostrar);
        }
        if (itemsEnviados == false) {
            try {
                con.destroy(numSol);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        emf.close();
        return (solCreada && itemsEnviados) ? numSol.intValue() : 0;
    }

    /**
     *
     * @param id
     * @return
     * @throws RemoteException
     */
    @Override
    public ArrayList<solicitudPr> getIdSolicitud(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("SolicitudPr.findByIdSolicitante");
        q.setParameter("idSolicitante", id);
        List<SolicitudPr> resultList = q.getResultList();
        ArrayList<solicitudPr> retorno = new ArrayList<>();
        for (SolicitudPr pr : resultList) {
            solicitudPr s = pr.tosolicitudPr(pr, id);
            users datosUsuario = this.getDatosUsuario(id);
            s.setNombreSolicitante(datosUsuario.getNombre());
            s.setArea(datosUsuario.getLab());
            Query qMostrar = em.createNamedQuery("Tablamostrar.findByAllParameters");
            qMostrar.setParameter("idU", id);
            qMostrar.setParameter("idA", new Double(s.getNum_sol().toString()));
            qMostrar.setParameter("tipoA", "Solicitud");
            Tablamostrar get = new Tablamostrar();
            if (qMostrar.getResultList() != null && !qMostrar.getResultList().isEmpty()) {
                get = (Tablamostrar) qMostrar.getResultList().get(0);
                if (get.getMostrar().equalsIgnoreCase("SI") && get.getTipoArchivo().equalsIgnoreCase("Solicitud")) {
                    retorno.add(s);
                }
            }

        }
        emf.close();
        return retorno;
    }

    /**
     *
     * @param id
     * @return
     * @throws RemoteException
     */
    @Override
    public solicitudPr getSolicitud(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        SolicitudPrJpaController contr = new SolicitudPrJpaController(emf);
        SolicitudPr found = contr.findSolicitudPr(new Double(id));
        users datosUsuario = this.getDatosUsuario(found.getIdSolicitante());
        solicitudPr s = found.tosolicitudPr(found, found.getIdSolicitante());
        s.setNombreSolicitante(datosUsuario.getNombre());
        s.setArea(datosUsuario.getLab());
        emf.close();
        return s;
    }

    /**
     *
     * @param numSol
     * @return ArrayList
     * @throws RemoteException
     *
     * Genera el listado de tems solicitados asociados a un numero de
     * solicitud.
     */
    @Override
    public ArrayList<ItemInventario> getItems_numSol(BigDecimal numSol) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ItemJpaController control = new ItemJpaController(emf);
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itxsol.findByNumSol");
        q.setParameter("numSol", new Double(numSol.toString()));
        List<Itxsol> resultList = q.getResultList();
        ArrayList<ItemInventario> retorno = new ArrayList<>();
        for (Itxsol i : resultList) {
            Item findItem = control.findItem(i.getCinterno().getCinterno());
            ItemInventario itm = findItem.EntityToItem(findItem);
            itm.setCantidadSolicitada(new Float(i.getCantidadsol()));
            retorno.add(itm);
        }
        emf.close();
        return retorno;
    }

    /**
     *
     * @return @throws RemoteException
     *
     * Selecciona las solicitudes relacionadas a un usuario
     */
    @Override
    public ArrayList<solicitudPr> numsSol() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ArrayList<solicitudPr> solicitudes = new ArrayList<>();
        SolicitudPrJpaController contr = new SolicitudPrJpaController(emf);
        List<SolicitudPr> findSolicitudPrEntities = contr.findSolicitudPrEntities();
        ItxsolJpaController cont = new ItxsolJpaController(emf);
        for (SolicitudPr f : findSolicitudPrEntities) {
            solicitudPr s = f.tosolicitudPr(f, f.getIdSolicitante());
            users datosUsuario = this.getDatosUsuario(f.getIdSolicitante());
            s.setNombreSolicitante(datosUsuario.getNombre());
            s.setArea(datosUsuario.getLab());
            solicitudes.add(s);
        }
        emf.close();
        return solicitudes;
    }

    /**
     *
     * @param revisado
     * @return
     * @throws RemoteException
     *
     * Genera un listado de solicitudes de acuerdo al parmetro ingresado: todas
     * "", las no revisadas "NO" y las revisadas "SI"
     */
    @Override
    public ArrayList<solicitudPr> getSolicitudes(String revisado, String idUsuario) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ArrayList<solicitudPr> solicitudes = new ArrayList<>();
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("SolicitudPr.findByRevisado");
        q.setParameter("revisado", "%" + revisado + "%");
        List<SolicitudPr> resultList = q.getResultList();
        for (SolicitudPr s : resultList) {
            solicitudPr sol = s.tosolicitudPr(s, s.getIdSolicitante());
            users datosUsuario = this.getDatosUsuario(s.getIdSolicitante());
            sol.setNombreSolicitante(datosUsuario.getNombre());
            sol.setArea(datosUsuario.getLab());
            if ("".equalsIgnoreCase(idUsuario)) {
                solicitudes.add(sol);
            } else {
                Query qMostrar = em.createNamedQuery("Tablamostrar.findByAllParameters");
                qMostrar.setParameter("idU", idUsuario);
                qMostrar.setParameter("idA", s.getNumSol());
                System.out.println(idUsuario + " " + s.getNumSol());
                if (revisado.equalsIgnoreCase("NO")) {
                    qMostrar.setParameter("tipoA", "SolicitudNoRev");
                    Tablamostrar get = new Tablamostrar();
                    if (qMostrar.getResultList() != null && !qMostrar.getResultList().isEmpty()) {
                        get = (Tablamostrar) qMostrar.getResultList().get(0);
                        if (get.getMostrar().equalsIgnoreCase("SI")
                                && get.getTipoArchivo().equalsIgnoreCase("SolicitudNoRev")) {
                            solicitudes.add(sol);
                            System.out.println("entra");
                        }
                    }
                } else {
                    qMostrar.setParameter("tipoA", "SolicitudRev");
                    Tablamostrar get = new Tablamostrar();
                    if (qMostrar.getResultList() != null && !qMostrar.getResultList().isEmpty()) {
                        get = (Tablamostrar) qMostrar.getResultList().get(0);
                        if (get.getMostrar().equalsIgnoreCase("SI")
                                && get.getTipoArchivo().equalsIgnoreCase("SolicitudRev")) {
                            solicitudes.add(sol);
                        }
                    }
                }
            }
        }
        emf.close();
        return solicitudes;
    }

    //Procesamiento de solicitudes
    /**
     *
     * @param numSol
     * @param Aprobado
     * @return
     * @throws RemoteException
     */
    @Override
    public ArrayList<ItemInventario> getItemsAprobado(BigDecimal numSol, String Aprobado) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ItemJpaController control = new ItemJpaController(emf);
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itxsol.findByAprobado");
        q.setParameter("numSol", new Double(numSol.toString()));
        q.setParameter("aprobado", "%" + Aprobado + "%");
        List<Itxsol> resultList = q.getResultList();
        ArrayList<ItemInventario> retorno = new ArrayList<>();
        for (Itxsol i : resultList) {
            Item findItem = control.findItem(i.getCinterno().getCinterno());
            ItemInventario itm = findItem.EntityToItem(findItem);
            itm.setCantidadSolicitada(new Float(i.getCantidadsol()));
            retorno.add(itm);
        }
        emf.close();
        return retorno;
    }

    /**
     *
     * @param items
     * @param sol
     * @param proveedor
     * @return
     * @throws RemoteException
     */
    @Override
    public boolean aprobarItems(ArrayList<ItemInventario> items, solicitudPr sol, ArrayList<String> proveedor)
            throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        boolean itxActualizado = false;
        Double numsol = new Double(sol.getNum_sol().toString());
        try {
            SolicitudPrJpaController contr = new SolicitudPrJpaController(emf);
            SolicitudPr solicitud = contr.findSolicitudPr(numsol);
            solicitud.setIdAo(sol.getIdAO());
            EntityManager em = emf.createEntityManager();
            Query q = em.createNamedQuery("Itxsol.findSol_Item");
            q.setParameter("numSol", numsol);
            ItxsolJpaController con = new ItxsolJpaController(emf);
            int indexProv = 0;
            ArrayList<ItemInventario> itemsAprobado = this.getItemsAprobado(sol.getNum_sol(), "NO");
            for (ItemInventario item : items) {
                ItemJpaController itemJpaController = new ItemJpaController(emf);
                Item findItem = itemJpaController.findItem(item.getNumero());
                findItem.setPrecio(new Double(Float.toString(item.getPrecio())));
                q.setParameter("cinterno", findItem);
                List<Itxsol> resultList = q.getResultList();
                Itxsol get = resultList.get(0);
                Itxsol found = con.findItxsol(get.getId());
                found.setAprobado("SI");
                found.setCantidadaprobada(new Double(item.getCantidadSolicitada()));
                found.setGenerado("NO");
                found.setNitProveedor(proveedor.get(indexProv));
                con.edit(found);
                itxActualizado = true;
                itemJpaController.edit(findItem);
                this.asociarItem(item.getNumero(), proveedor.get(indexProv), Float.toString(item.getPrecio()));
                indexProv++;
                Tablamostrar tablamostrar = new Tablamostrar();
                tablamostrar.setIdArchivo(sol.getNum_sol().doubleValue());
                tablamostrar.setIdUsuario(sol.getIdAO());
                tablamostrar.setTipoArchivo("SolicitudRev");
                tablamostrar.setMostrar("SI");
                TablamostrarJpaController conTabla = new TablamostrarJpaController(emf);
                conTabla.create(tablamostrar);

            }

            if (itemsAprobado.size() == items.size()) {
                solicitud.setRevisado("SI");
                contr.edit(solicitud);
            }

        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return itxActualizado;
    }

    /**
     *
     * @param i
     * @return
     * @throws RemoteException
     */
    @Override
    public ArrayList<itemxproveedor> getProveedorAsociado(itemxproveedor i) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        String cinterno = i.getCinterno();
        Double precio = new Double(Float.toString(i.getPrecio()));
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Ixp.findByCinterno_Precio");
        q.setParameter("cinterno", cinterno);
        q.setParameter("precio", precio);
        List<Ixp> resultList = q.getResultList();
        ArrayList<itemxproveedor> retorno = new ArrayList<>();
        if (!resultList.isEmpty()) {
            for (Ixp ixp : resultList) {
                proveedor datosProveedor = this.getDatosProveedor(ixp.getNit());
                itemxproveedor itx = new itemxproveedor(datosProveedor.getNombre(), new Float(ixp.getPrecio()),
                        ixp.getCinterno());
                itx.setNIT(ixp.getNit());
                retorno.add(itx);
            }
        }
        emf.close();
        return retorno;

    }

    @Override
    public boolean desaprobarItems(ArrayList<ItemInventario> itemsSolicitud, solicitudPr sol,
            ArrayList<String> proveedor) throws RemoteException {
        boolean itxActualizado = false;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        ArrayList<ItemInventario> itemsAprobado = this.getItemsAprobado(sol.getNum_sol(), "SI");
        ArrayList<ItemInventario> itemsAEditar = new ArrayList<>();
        for (ItemInventario i : itemsSolicitud) {
            for (ItemInventario j : itemsAprobado) {
                if (i.getNumero().equalsIgnoreCase(j.getNumero())) {
                    itemsAEditar.add(i);
                }
            }
        }
        try {
            EntityManager em = emf.createEntityManager();
            Query q = em.createNamedQuery("Itxsol.findSol_Item");
            q.setParameter("numSol", sol.getNum_sol());
            ItxsolJpaController con = new ItxsolJpaController(emf);
            int indexProv = 0;
            for (ItemInventario item : itemsAEditar) {
                ItemJpaController itemJpaController = new ItemJpaController(emf);
                Item findItem = itemJpaController.findItem(item.getNumero());
                findItem.setPrecio(0.0);
                q.setParameter("cinterno", findItem);
                List<Itxsol> resultList = q.getResultList();
                Itxsol get = resultList.get(0);
                Itxsol found = con.findItxsol(get.getId());
                found.setAprobado("NO");
                found.setCantidadaprobada(0.0);
                found.setGenerado("NO");
                found.setNitProveedor("");
                con.edit(found);
                itxActualizado = true;
                itemJpaController.edit(findItem);
                this.desasociarItem(item.getNumero(), proveedor.get(indexProv), Float.toString(item.getPrecio()));
                indexProv++;
            }
            SolicitudPrJpaController s = new SolicitudPrJpaController(emf);
            SolicitudPr found = s.findSolicitudPr(new Double(sol.getNum_sol().toString()));
            found.setRevisado("NO");
            s.edit(found);

        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        emf.close();
        return itxActualizado;
    }

    /**
     *
     * @param numSol
     * @param cinterno
     * @return
     * @throws RemoteException
     */
    @Override
    public String getCantAprobada(String numSol, String cinterno) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        ItemJpaController itm = new ItemJpaController(emf);
        Item findItem = itm.findItem(cinterno);
        Query q = em.createNamedQuery("Itxsol.findSol_Item");
        q.setParameter("numSol", new BigDecimal(numSol));
        q.setParameter("cinterno", findItem);
        List<Itxsol> resultList = q.getResultList();
        for (Itxsol r : resultList) {
            System.out.println(r.getCinterno().getCinterno());
        }
        emf.close();
        return resultList.get(0).getCantidadaprobada().toString();
    }

    @Override
    public ArrayList<proveedor> getProveedoresConSolicitudes(String generado) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itxsol.findProveedorByGenerado");
        q.setParameter("generado", "%" + generado + "%");
        ArrayList<proveedor> listaProveedores = new ArrayList<>();
        List<String> resultList = q.getResultList();
        if (!resultList.isEmpty()) {
            for (String i : resultList) {
                proveedor datosProveedor = this.getDatosProveedor(i);
                ArrayList<ItemInventario> itemsAsociados = this.getItemxProveedorSolicitudes(i, "NO");
                if (!itemsAsociados.isEmpty()) {
                    datosProveedor.setItemAsociado(itemsAsociados);
                } else {
                    datosProveedor.setItemAsociado(new ArrayList<ItemInventario>());
                }
                listaProveedores.add(datosProveedor);
            }
            emf.close();
            return listaProveedores;
        } else {
            emf.close();
            return null;
        }

    }

    @Override
    public ArrayList<ItemInventario> getItemxProveedorSolicitudes(String proveedor, String generado)
            throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itxsol.findItemByProveedor");
        q.setParameter("nit", proveedor);
        List<Itxsol> resultList = q.getResultList();
        ArrayList<ItemInventario> listaItems = new ArrayList<>();
        for (Itxsol i : resultList) {
            if (i.getGenerado().equalsIgnoreCase(generado)) {
                Item cinterno = i.getCinterno();
                ItemInventario EntityToItem = cinterno.EntityToItem(cinterno);
                EntityToItem.setNumSolAsociado(Double.toString(i.getNumSol()));
                EntityToItem.setCantidadAprobada(i.getCantidadaprobada().floatValue());
                listaItems.add(EntityToItem);
            }
        }
        if (!resultList.isEmpty()) {
            emf.close();
            return listaItems;
        } else {
            emf.close();
            return null;
        }
    }

    //Ordenes de Compra
    @Override
    public Double generarOCompra(ArrayList<ItemInventario> listaItems, String idAo) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        OrdencompraJpaController oCompra = new OrdencompraJpaController(emf);
        Ordencompra ordencompra = new Ordencompra();
        ordencompra.setAoId(new Double(idAo));
        oCompra.create(ordencompra);
        Query qOcompra = em.createNamedQuery("Ordencompra.findByAoId");
        qOcompra.setParameter("aoId", new Double(idAo));
        Ordencompra get = (Ordencompra) qOcompra.getResultList().get(0);
        Query q = em.createNamedQuery("Itxsol.findByNumsolAndCinterno");
        ItxsolJpaController contr = new ItxsolJpaController(emf);
        ItmxordenJpaController contrOrden = new ItmxordenJpaController(emf);
        Itmxorden itemOrden = new Itmxorden();
        for (ItemInventario i : listaItems) {
            try {
                q.setParameter("numSol", new Double(i.getNumSolAsociado()));
                q.setParameter("cinterno", new ItemJpaController(emf).findItem(i.getNumero()));
                List<Itxsol> resultList = q.getResultList();
                Itxsol findItxsol = contr.findItxsol(resultList.get(0).getId());
                findItxsol.setGenerado("SI");
                contr.edit(findItxsol);
                itemOrden = new Itmxorden(get.getNumOrden().intValue(), i.getCantidadAprobada(), i.getPrecio());
                itemOrden.setItemCinterno(new ItemJpaController(emf).findItem(i.getNumero()));
                itemOrden.setProveedorNit(
                        new ProveedorJpaController(emf).findProveedor(findItxsol.getNitProveedor()));
                itemOrden.setNumSolAsociado(new Double(i.getNumSolAsociado()));
                itemOrden.setRecibido("NO");
                contrOrden.create(itemOrden);
                Tablamostrar tablamostrar = new Tablamostrar();
                tablamostrar.setIdArchivo(get.getNumOrden());
                tablamostrar.setIdUsuario(idAo);
                tablamostrar.setTipoArchivo("Compra");
                tablamostrar.setMostrar("SI");
                TablamostrarJpaController conTabla = new TablamostrarJpaController(emf);
                conTabla.create(tablamostrar);
            } catch (Exception ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        emf.close();
        return get.getNumOrden();
    }

    @Override
    public int buscarOcompra(ItemInventario i, String proveedor) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByAllParameters2");
        q.setParameter("numsol", new Double(i.getNumSolAsociado()));
        q.setParameter("nit", new ProveedorJpaController(emf).findProveedor(proveedor));
        q.setParameter("caprobada", i.getCantidadAprobada());
        q.setParameter("precio", i.getPrecio());
        q.setParameter("cinterno", new ItemJpaController(emf).findItem(i.getNumero()));
        List<Itmxorden> resultList = q.getResultList();
        double numorden = -1;
        if (!resultList.isEmpty() && resultList != null) {
            numorden = resultList.get(0).getNumorden();
        }
        emf.close();
        return new Double(numorden).intValue();
    }

    @Override
    public Double buscarPrecio(ItemInventario i, String proveedor) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByAllParameters3");
        q.setParameter("numsol", new Double(i.getNumSolAsociado()));
        q.setParameter("nit", new ProveedorJpaController(emf).findProveedor(proveedor));
        q.setParameter("caprobada", i.getCantidadAprobada());
        q.setParameter("cinterno", new ItemJpaController(emf).findItem(i.getNumero()));
        List<Itmxorden> resultList = q.getResultList();
        double precio = 0;
        if (!resultList.isEmpty() && resultList != null) {
            precio = resultList.get(0).getPrecioU();
        }
        emf.close();
        return new Double(precio);
    }

    @Override
    public boolean devolverOCompra(ItemInventario itm, double numorden) throws RemoteException {
        boolean hecho = false;
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
            EntityManager em = emf.createEntityManager();
            Query q = em.createNamedQuery("Itmxorden.findByNumorden_item");
            q.setParameter("numorden", numorden);
            Item findItem = new ItemJpaController(emf).findItem(itm.getNumero());
            q.setParameter("cinterno", findItem);
            List<Itmxorden> resultList = q.getResultList();
            ItmxordenJpaController con = new ItmxordenJpaController(emf);
            Itmxorden f = con.findItmxorden(resultList.get(0).getIdOCompra());
            con.destroy(f.getIdOCompra());
            Query qq = em.createNamedQuery("Itxsol.findSol_Item");
            qq.setParameter("numSol", new Double(itm.getNumSolAsociado()));
            qq.setParameter("cinterno", findItem);
            Itxsol get = (Itxsol) qq.getResultList().get(0);
            ItxsolJpaController itxCont = new ItxsolJpaController(emf);
            Itxsol found = itxCont.findItxsol(get.getId());
            found.setGenerado("NO");
            itxCont.edit(found);
            hecho = true;
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    //Datos formatos
    /**
     *
     * @param id
     * @return
     * @throws RemoteException
     *
     * Devuelve los datos de un formulario de acuerdo al id ingresado
     */
    @Override
    public datosFormatos getDatos(String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        DatosformatosJpaController datos = new DatosformatosJpaController(emf);
        Datosformatos found = datos.findDatosformatos(new Integer(id));
        emf.close();
        return new datosFormatos(found.getRevision(), found.getFechaactualizacion(), found.getTitulo());
    }

    //Auxiliar
    @Override
    public String getFecha() throws RemoteException {
        GregorianCalendar hoy = new GregorianCalendar();
        String cadenaFecha = hoy.get(Calendar.DAY_OF_MONTH) + "/" + (hoy.get(Calendar.MONTH) + 1) + "/"
                + hoy.get(Calendar.YEAR);
        return cadenaFecha;
    }

    @Override
    public int buscarOrdenByNumSol(ItemInventario i, String proveedor, String numSol) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByAllParameters2");
        q.setParameter("nit", new ProveedorJpaController(emf).findProveedor(proveedor));
        q.setParameter("caprobada", i.getCantidadAprobada());
        q.setParameter("precio", i.getPrecio());
        q.setParameter("cinterno", new ItemJpaController(emf).findItem(i.getNumero()));
        q.setParameter("numsol", new Double(numSol));
        List<Itmxorden> resultList = q.getResultList();
        double numorden = -1;
        if (resultList != null && !resultList.isEmpty() && resultList.get(0) != null) {
            numorden = resultList.get(0).getNumorden();
        }
        emf.close();
        return new Double(numorden).intValue();
    }

    //Descargos
    /**
     *
     * @param d
     * @return
     * @throws RemoteException
     *
     * Registra el descargo de un tem en la base de datos.
     */
    @Override
    public boolean realizarDescargo(descargo d) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "INSERT INTO DESCARGO(FECHA, ID_usuario, AREA, CANTIDAD, CINTERNO) VALUES (?,?,?,?,?)";
        boolean valido = false;
        try {
            con = Conexion.conexion.getConnection();
            ps = con.prepareStatement(statement);
            ps.setDate(1, new Date(d.getFecha().getTimeInMillis()));
            ps.setString(2, d.getId());
            ps.setString(3, d.getArea());
            ps.setFloat(4, d.getCantidad());
            ps.setString(5, d.getCinterno());
            ps.executeUpdate();
            this.updateCantidad(d.getCinterno(), d.getCantidad() * -1);
            valido = true;

        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }
        }
        return valido;
    }

    /**
     *
     * @param numOrden
     * @param idRec
     * @param articulos
     * @return
     * @throws RemoteException
     *
     * Funcin para recibir el pedido y registrarlo en la base de datos.
     */
    @Override
    public boolean recibirPedido(BigDecimal numOrden, String idRec, ArrayList<itemRecep> articulos)
            throws RemoteException {
        boolean valido = false;
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
            Recepcion r = new Recepcion();
            RecepcionJpaController contr = new RecepcionJpaController(emf);
            Ordencompra orden = new Ordencompra();
            for (itemRecep a : articulos) {

                orden = new OrdencompraJpaController(emf).findOrdencompra(new Double(numOrden.toString()));
                ItemJpaController itemJpaController = new ItemJpaController(emf);
                Item findItem = itemJpaController.findItem(a.getCinterno());
                findItem.setCantidad(findItem.getCantidad() + a.getcAprobada());
                findItem.setCcalidad(a.getcCalidad());
                findItem.setCesp(a.getcEsp());
                itemJpaController.edit(findItem);
                this.updateCantidad(findItem.getCinterno(), a.getcAprobada());
                r = new Recepcion(a.getfLlegada());
                r.setFechavencimiento(a.getfVencimiento());
                r.setCcalidad(a.getcCalidad());
                r.setCesp(a.getcEsp());
                r.setMverificacion(a.getmVerificacion().toString());
                r.setCinterno(findItem);
                r.setIdUsuario(new UsuarioJpaController(emf).findUsuario(idRec));
                r.setNumOrden(orden);
                r.setPrecioanterior(new Double(a.getPrecio()));
                r.setObservaciones(a.getObs());
                contr.create(r);
                EntityManager em = emf.createEntityManager();
                Query q = em.createNamedQuery("Itmxorden.findByNumorden_item");
                q.setParameter("numorden", orden.getNumOrden());
                ItmxordenJpaController itmcontrol = new ItmxordenJpaController(emf);
                q.setParameter("cinterno", findItem);
                List<Itmxorden> resultList = q.getResultList();
                Itmxorden findItmxorden = itmcontrol.findItmxorden(resultList.get(0).getIdOCompra());
                findItmxorden.setRecibido("SI");
                itmcontrol.edit(findItmxorden);
                valido = true;
            }
            emf.close();
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return valido;
    }

    /**
     *
     * @param numOrden
     * @param idRec
     * @param articulos
     * @return
     * @throws RemoteException
     */
    @Override
    public boolean devolverPedido(BigDecimal numOrden, String idRec, ArrayList<itemRecep> articulos)
            throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByNumorden");
        q.setParameter("numorden", new Double(numOrden.toString()));
        q.setParameter("recibido", "SI");
        List<Itmxorden> resultList = q.getResultList();
        ItmxordenJpaController itm = new ItmxordenJpaController(emf);
        for (Itmxorden i : resultList) {
            for (itemRecep rec : articulos) {
                if (i.getItemCinterno().getCinterno().equalsIgnoreCase(rec.getCinterno())) {
                    try {
                        this.updateCantidad(rec.getCinterno(), -rec.getcAprobada());
                        i.setRecibido("NO");
                        itm.edit(i);
                    } catch (Exception ex) {
                        Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
        q = em.createNamedQuery("Recepcion.findByNumorden");
        q.setParameter("numorden", new Ordencompra(new Double(numOrden.toString())));
        List<Recepcion> recepcion = q.getResultList();
        RecepcionJpaController contrRec = new RecepcionJpaController(emf);
        for (Recepcion r : recepcion) {
            for (itemRecep rec : articulos) {
                if (rec.getCinterno().equalsIgnoreCase(rec.getCinterno())) {
                    try {
                        contrRec.destroy(r.getFechallegada());
                    } catch (NonexistentEntityException ex) {
                        Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
        return true;

    }

    /**
     *
     * @param e
     * @throws RemoteException
     */
    @Override
    public void evaluarProv(evProv e) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Evaluacionprov ev = new Evaluacionprov(e.getNit(), e.getNumorden(), e.getEv1(), e.getEv2(), e.getEv3(),
                e.getEv4(), e.getEv5(), e.getEv6(), e.getEv7(), e.getEv8());
        EvaluacionprovJpaController contr = new EvaluacionprovJpaController(emf);
        contr.create(ev);
        emf.close();
    }

    /**
     *
     * @param e
     * @throws RemoteException
     */
    @Override
    public void borrarEvaluacion(evProv e) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Evaluacionprov.findByNumorden");
        q.setParameter("numorden", e.getNumorden());
        List<Evaluacionprov> ev = q.getResultList();
        EvaluacionprovJpaController contr = new EvaluacionprovJpaController(emf);
        for (Evaluacionprov ee : ev) {
            try {
                contr.destroy(ee.getId());
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        emf.close();
    }

    /**
     *
     * @param nit
     * @return ArayList
     * @throws RemoteException
     *
     * Genera un listado con los tems asociados a un proveedor en particular
     */
    @Override
    public ArrayList<ItemInventario> itemxProv(String nit) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "select  item.cinterno, item.descripcion, item.presentacion, item.cantidad, item.precio, item.ccalidad, item.cesp"
                + " from ixp, proveedor, item"
                + " where ixp.cinterno =item.cinterno and ixp.nit = proveedor.nit and proveedor.nit= ?;";
        ItemInventario item = null;
        ArrayList<ItemInventario> lista = new ArrayList<>();

        try {
            con = Conexion.conexion.getConnection();
            ps = con.prepareStatement(statement);
            ps.setString(1, nit);
            rs = ps.executeQuery();
            while (rs.next()) {
                item = new ItemInventario(rs.getString(1), rs.getString(2), rs.getString(3), rs.getFloat(4),
                        rs.getFloat(5), rs.getString(6), "", "", rs.getString(7));
                lista.add(item);
            }

        } catch (SQLException ex) {
            System.out.println("Error funcion \"Item por Proveedor \"");
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }

        }
        return lista;
    }

    /**
     *
     * @param numorden
     * @param id
     * @return
     * @throws RemoteException
     *
     * Retorna los datos completos de una orden de compra.
     */
    @Override
    public recepcionProd getDatosRec(BigDecimal numorden, String id) throws RemoteException {
        recepcionProd rec = null;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByNumorden");
        q.setParameter("numorden", new Double(numorden.toString()));
        q.setParameter("recibido", "NO");
        List<Itmxorden> resultList = q.getResultList();
        ArrayList<itemRecep> items = new ArrayList<>();
        proveedor p = new proveedor();
        for (Itmxorden i : resultList) {
            Proveedor prov = i.getProveedorNit();
            p = new proveedor(prov.getNit(), prov.getNombre(), prov.getDir(), prov.getTel(), prov.getFax(),
                    prov.getCiudad(), prov.getCelular(), prov.getCorreo(), p.getContacto());
            Item itm = i.getItemCinterno();
            items.add(new itemRecep(itm.getCinterno(), "", new Float(i.getCaprobada()), new Float(i.getPrecioU())));
        }
        Query qq = em.createNamedQuery("Ordencompra.findByNumOrden");
        qq.setParameter("numOrden", new Double(numorden.toString()));
        if (qq.getResultList().isEmpty()) {
            return null;
        } else {
            Ordencompra o = (Ordencompra) qq.getResultList().get(0);
            emf.close();
            rec = new recepcionProd(numorden, p, id, items, o.getObservaciones());
            return rec;
        }
    }

    @Override
    public recepcionProd getDatosRec2(BigDecimal numorden, String id) throws RemoteException {
        recepcionProd rec = null;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByNumorden2");
        q.setParameter("numorden", new Double(numorden.toString()));
        List<Itmxorden> resultList = q.getResultList();
        ArrayList<itemRecep> items = new ArrayList<>();
        proveedor p = new proveedor();
        for (Itmxorden i : resultList) {
            Proveedor prov = i.getProveedorNit();
            p = new proveedor(prov.getNit(), prov.getNombre(), prov.getDir(), prov.getTel(), prov.getFax(),
                    prov.getCiudad(), prov.getCelular(), prov.getCorreo(), p.getContacto());
            Item itm = i.getItemCinterno();
            items.add(new itemRecep(itm.getCinterno(), "", new Float(i.getCaprobada()), new Float(i.getPrecioU())));
        }
        Query qq = em.createNamedQuery("Ordencompra.findByNumOrden");
        qq.setParameter("numOrden", new Double(numorden.toString()));
        if (qq.getResultList().isEmpty()) {
            return null;
        } else {
            Ordencompra o = (Ordencompra) qq.getResultList().get(0);
            emf.close();
            rec = new recepcionProd(numorden, p, id, items, o.getObservaciones());
            return rec;
        }
    }

    /**
     *
     * @param numorden
     * @param id
     * @return
     * @throws RemoteException
     *
     * Retorna los datos completos de una orden de compra.
     */
    @Override
    public recepcionProd getDatosPedidoRecibido(BigDecimal numorden, String id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Itmxorden.findByNumorden");
        q.setParameter("numorden", new Double(numorden.toString()));
        q.setParameter("recibido", "SI");
        ArrayList<itemRecep> items = new ArrayList<>();
        List<Itmxorden> resultList = q.getResultList();
        if (!resultList.isEmpty() || resultList != null) {
            Itmxorden get = resultList.get(0);
            proveedor p = new proveedor(get.getProveedorNit().getNit(), get.getProveedorNit().getNombre(),
                    get.getProveedorNit().getDir(), get.getProveedorNit().getTel(), get.getProveedorNit().getFax(),
                    get.getProveedorNit().getCiudad(), get.getProveedorNit().getCelular(),
                    get.getProveedorNit().getCorreo(), get.getProveedorNit().getContacto());
            for (Itmxorden itmxorden : resultList) {
                Item itemCinterno = itmxorden.getItemCinterno();
                Query qq = em.createNamedQuery("Recepcion.findByNumorden");
                qq.setParameter("numorden", new Ordencompra(new Double(numorden.toString())));
                List<Recepcion> recepcion = qq.getResultList();
                for (Recepcion r : recepcion) {
                    if (r.getCinterno().getCinterno().equalsIgnoreCase(itemCinterno.getCinterno())) {
                        itemRecep itmRecibido = new itemRecep(itemCinterno.getCinterno(), r.getFechallegada(),
                                r.getFechavencimiento(), r.getCcalidad(), r.getCesp(), r.getMverificacion(),
                                r.getObservaciones(), new Float(itmxorden.getCaprobada()),
                                new Float(r.getPrecioanterior()));
                        items.add(itmRecibido);
                    }
                }
            }
            recepcionProd recepcionProd = new recepcionProd(numorden, p, "", items, id);
            return recepcionProd;
        } else {
            return null;
        }
    }

    /**
     *
     * @param numorden
     * @return
     * @throws RemoteException
     */
    @Override
    public evProv getEvaluacionProv(double numorden) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Evaluacionprov.findByNumorden");
        q.setParameter("numorden", numorden);
        List<Evaluacionprov> resultList = q.getResultList();
        evProv ev = null;
        for (Evaluacionprov e : resultList) {
            ev = new evProv(e.getNitProv(), e.getNumorden(), e.getEv1(), e.getEv2(), e.getEv3(), e.getEv4(),
                    e.getEv5(), e.getEv6(), e.getEv7(), e.getEv8());
        }
        emf.close();
        return ev;
    }

    /**
     *
     * @return @throws RemoteException
     */
    @Override
    public ArrayList<Integer> numerosDeOrden() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        OrdencompraJpaController contr = new OrdencompraJpaController(emf);
        List<Ordencompra> resultList = contr.findOrdencompraEntities();
        ArrayList<Integer> ordenes = new ArrayList<>();
        for (Ordencompra r : resultList) {
            ordenes.add(r.getNumOrden().intValue());
        }
        emf.close();
        return ordenes;
    }

    @Override
    public ArrayList<Integer> numerosDeOrdenRecibidas() throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createNamedQuery("Recepcion.findAllOrdenes");
        List<Ordencompra> resultList = q.getResultList();
        ArrayList<Integer> numorden = new ArrayList<>();
        for (Ordencompra r : resultList) {
            numorden.add(r.getNumOrden().intValue());
        }
        return numorden;
    }

    /**
     *
     * @param idUsuario
     * @param idRecurso
     * @param tipoRecurso
     * @return
     * @throws RemoteException
     */
    @Override
    public boolean ocultar(String idUsuario, String idRecurso, String tipoRecurso) throws RemoteException {
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
            EntityManager em = emf.createEntityManager();
            Query q = em.createNamedQuery("Tablamostrar.findByAllParameters");
            q.setParameter("idU", idUsuario);
            q.setParameter("idA", new Double(idRecurso));
            q.setParameter("tipoA", tipoRecurso);
            List<Tablamostrar> resultList = q.getResultList();
            Integer idMostrar = resultList.get(0).getIdMostrar();
            TablamostrarJpaController controller = new TablamostrarJpaController(emf);
            Tablamostrar found = controller.findTablamostrar(idMostrar);
            found.setMostrar("NO");
            controller.edit(found);
            return true;
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    /**
     *
     * @param mes
     * @return
     * @throws RemoteException
     *
     * Genera el informe de descargos de acuerdo al mes ingresado
     */
    @Override
    public ArrayList<informeDescargos> generarInforme(String mes) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "create view gInforme1 as(select i.CINTERNO, i.INVENTARIO, i.DESCRIPCION, i.CANTIDAD as enInventario, d.FECHA as fecha, (select nombre from usuario where id = d.id_usuario) as nombre ,d.id_usuario as id, d.AREA\n"
                + "from item  i right outer join DESCARGO d\n" + "on i.CINTERNO = d.CINTERNO);";
        String statement2 = "create view gInforme2 as( select cinterno, inventario, descripcion, eninventario, fecha, nombre, id, area from gInforme1 where gInforme1.fecha like ?);";
        String statement3 = "create view gInforme3 as(select d.CINTERNO, \"\",sum(d.cantidad) as suma from descargo d, descargo dd where dd.id= d.id group by d.CINTERNO);";
        String statement4 = "select distinct  p2.cinterno, p2.inventario, p2.descripcion, p2.eninventario, p3.suma, p2.nombre, p2.id, p2.area\n"
                + " from gInforme2 p2 , gInforme3 p3 where p2.cinterno = p3.CINTERNO; ";
        informeDescargos fila = null;
        ArrayList<informeDescargos> listado = new ArrayList<>();

        System.out.println(statement);
        System.out.println(statement2);
        System.out.println(statement3);
        System.out.println(statement4);
        try {
            con = Conexion.conexion.getConnection();
            mes = "%-" + mes + "-%";
            ps = con.prepareStatement(statement);
            ps.executeUpdate();
            ps = con.prepareStatement(statement2);
            ps.setString(1, mes);
            ps.executeUpdate();
            ps = con.prepareStatement(statement3);
            ps.executeUpdate();
            ps = con.prepareStatement(statement4);
            rs = ps.executeQuery();
            while (rs.next()) {
                fila = new informeDescargos(rs.getString(1), rs.getString(2), rs.getString(3), rs.getFloat(4),
                        rs.getFloat(5), rs.getString(6), rs.getBigDecimal(7), rs.getString(8));
                listado.add(fila);
            }
            ps.executeUpdate("drop view gInforme1;");
            ps.executeUpdate("drop view gInforme2;");
            ps.executeUpdate("drop view gInforme3;");

        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }
        }
        return listado;
    }

    /*
     Retorna un objeto tipo fdc_001 que contiene: fecha, area o proceso solicitante, nombre del solicitante,
     observaciones y el auxiliar de oficina
     */
    @Override
    public ArrayList<informeDescargos> generarInformePorLab(String mes) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "select D.CINTERNO, \"-\", item.DESCRIPCION, item.CANTIDAD, sum(D.CANTIDAD) \n"
                + "from item right outer join DESCARGO d\n" + "on item.CINTERNO = D.CINTERNO and d.FECHA like ?\n"
                + "group by D.CINTERNO, item.DESCRIPCION, item.CANTIDAD\n" + "order by D.CINTERNO";
        informeDescargos fila = null;
        System.out.println(statement);
        ArrayList<informeDescargos> listado = new ArrayList<>();
        try {
            con = Conexion.conexion.getConnection();
            mes = "%-" + mes + "-%";
            ps = con.prepareStatement(statement);
            ps.setString(1, mes);
            rs = ps.executeQuery();
            while (rs.next()) {
                fila = new informeDescargos(rs.getString(1), rs.getString(2), rs.getString(3), rs.getFloat(4),
                        rs.getFloat(5));
                listado.add(fila);
                System.out.println(fila.getCinterno());
                System.out.println(fila.getEninventario());
                System.out.println(fila.getInventario());
                System.out.println(fila.getDescripcion());
                System.out.println(fila.getEmpleado());

            }
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }
        }
        return listado;
    }

    @Override
    public ArrayList<informeDescargos> generarInformePorRA(String area, BigDecimal id) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "select D.CINTERNO, \"-\", item.DESCRIPCION, item.CANTIDAD, sum(D.CANTIDAD), D.FECHA\n"
                + "from item, DESCARGO d\n" + "where item.CINTERNO = D.CINTERNO and D.ID_usuario = ?\n"
                + "group by D.CINTERNO, item.DESCRIPCION, item.CANTIDAD, D.FECHA";
        informeDescargos fila = null;
        System.out.println(statement);
        ArrayList<informeDescargos> listado = new ArrayList<>();
        try {
            con = Conexion.conexion.getConnection();
            ps = con.prepareStatement(statement);
            ps.setBigDecimal(1, id);
            rs = ps.executeQuery();
            while (rs.next()) {
                GregorianCalendar c = new GregorianCalendar();
                c.setTime(rs.getDate(6));
                fila = new informeDescargos(rs.getString(1), rs.getString(2), rs.getString(3), rs.getFloat(4),
                        rs.getFloat(5), c);
                listado.add(fila);

            }
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }
        }
        return listado;
    }

    /**
     *
     * @param cinterno
     * @param cantidad
     * @return
     * @throws RemoteException
     *
     * Actualiza la cantidad de un tem en particular.
     */
    @Override
    public boolean updateCantidad(String cinterno, float cantidad) throws RemoteException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String statement = "update item set cantidad = cantidad +? where CINTERNO =?";
        boolean updated = false;
        try {
            con = Conexion.conexion.getConnection();
            ps = con.prepareStatement(statement);
            ps.setFloat(1, cantidad);
            ps.setString(2, cinterno);
            ps.executeUpdate();
            updated = true;

        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            try {
                if (ps != null) {
                    ps.close();
                }
                if (rs != null) {
                    rs.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println("Error cerrando conexion");
            }
        }
        return updated;
    }

    @Override
    public boolean editarFormato(int formato, datosFormatos datos) throws RemoteException {
        boolean hecho = false;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Biot_ServerPU");
        DatosformatosJpaController controller = new DatosformatosJpaController(emf);
        Datosformatos found = controller.findDatosformatos(formato);
        found.setRevision(datos.getRevision());
        found.setFechaactualizacion(datos.getFechaActualizacion());
        found.setTitulo(datos.getTitulo());
        try {
            controller.edit(found);
            hecho = true;
        } catch (Exception ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hecho;
    }

    private String encriptar(String psw) {
        String md5Hex = DigestUtils.md5Hex(psw);
        return md5Hex;
    }

}