public boolean setStock(List<DetailDTO> dtl) {
    for (DetailDTO detailDTO : dtl) {
      // NEW com.server.entity.beans.TblMaterial(c.idtblMaterial, c.stock )
      //     Query query = em.createQuery("SELECT c.idtblMaterial, c.stock,
      // c.idTipomaterial.idTipomaterial, c.subFamiliasidsubFam.idsubFam, c.idArea.idArea, c.costo,
      // c.noParte, c.descripcion, c.imagen, c.nombre"
      //            + "    FROM TblMaterial c WHERE c.idtblMaterial = :id ");
      //   query.setParameter("id", detailDTO.getIdMaterial());

      // Object[] res = (Object[]) query.getSingleResult();
      TypedQuery<TblMaterial> query =
          em.createNamedQuery("TblMaterial.findByIdtblMaterial", TblMaterial.class);
      query.setParameter("idtblMaterial", detailDTO.getIdMaterial());
      TblMaterial temp = query.getSingleResult();
      //   temp.setIdtblMaterial((Integer) res[0]);
      int oldStock = temp.getStock();
      temp.setStock(oldStock + detailDTO.getRegresados());
      //  temp.setStock((Integer) res[1] + detailDTO.getCantidad());
      //   temp.setIdTipomaterial(new TblTipomaterial((Integer) res[2]));
      //  temp.setSubFamiliasidsubFam(new Subfamilias((Integer) res[3]));
      // temp.setIdArea(new TblArea((Integer) res[4]));

      //  temp.setCosto((Long) res[5]);
      // temp.setNoParte((String) res[6]);
      // temp.setDescripcion((String) res[7]);
      // temp.setImagen((String) res[8]);
      // temp.setNombre((String) res[9]);
      this.edit(temp);
    }
    em.flush();
    return false;
  }
  public boolean aplyChange(TblDetalleprestamo dl) {

    TypedQuery<TblMaterial> query =
        em.createQuery(
            "SELECT c FROM TblMaterial c WHERE c.idtblMaterial = :ml", TblMaterial.class);
    query.setParameter("ml", dl.getIdMaterial().getIdtblMaterial());
    TblMaterial temp = query.getSingleResult();

    if (temp != null) {
      temp.getStock();
      System.out.println(dl);
      if (dl != null) {

        int newStock = temp.getStock() - dl.getCantidad();
        temp.setStock(newStock);
      }
      // System.out.println("CAMACHO OBESO NELVA");
      // System.out.println("stock asignado: " + newStock);
      // this.edit(temp);
    }

    // em.flush();
    return false;
  }
  public boolean modificar(
      int id,
      String nombre,
      String noParte,
      String descripcion,
      String cantidad,
      String costo,
      String unidadmedida,
      String marca,
      String serie,
      String estado,
      String ubicacion,
      String responsable,
      String probedor,
      String noFactura,
      String ordenDcompra,
      String zip,
      String financiamiento,
      String tipodecompra,
      String idUABC,
      String fecharecepcion,
      String area,
      String tipodematerial,
      String subfamilia,
      String almacen,
      String imagen,
      TblArea area2,
      TblTipomaterial tipo,
      Subfamilias sub,
      boolean showinquery,
      boolean inventariable) {
    boolean existe = true;

    TblMaterial busc;
    // Query search = em.createQuery("SELECT t FROM TblMaterial t WHERE t.noParte = :noparte OR
    // t.codigoSip = :sip OR t.idUabc = :uabc");
    Query search = em.createQuery("SELECT t FROM TblMaterial t WHERE t.noParte = :noparte");
    search.setParameter("noparte", noParte);
    //  search.setParameter("sip", zip);
    //  search.setParameter("uabc", idUABC);
    try {
      busc = (TblMaterial) search.getSingleResult();
      //  if
      // (noFactura.equals(busc.getNoParte())||zip.equals(busc.getCodigoSip())||idUABC.equals(busc.getIdUabc())) {
      if (noParte.equals(busc.getNoParte())) {
        TblMaterial mat = em.find(TblMaterial.class, id);
        TblArea ar = new TblArea();
        TblTipomaterial tm = new TblTipomaterial();
        Subfamilias sf = new Subfamilias();
        Almacen al = new Almacen();
        Date date1 = new Date();
        mat.setNombre(nombre);
        mat.setNoParte(noParte);
        mat.setDescripcion(descripcion);
        int ajuste = mat.getTotal() - mat.getStock();
        // calculando y ajustando diferencia
        mat.setTotal(Integer.parseInt(cantidad));
        int diff = mat.getTotal() - mat.getStock();

        mat.setStock(mat.getStock() + diff - ajuste);

        // End ajuste total y stock
        mat.setCosto(Long.valueOf(costo));
        mat.setUnidadMedida(unidadmedida);
        mat.setMarca(marca);
        mat.setSerie(serie);
        mat.setEstado(estado);
        mat.setUbicacionActual(ubicacion);
        mat.setResponsable(responsable);
        mat.setProveedor(probedor);
        mat.setNumeroFactura(noFactura);
        mat.setOrdenCompra(ordenDcompra);
        mat.setCodigoSip(zip);
        mat.setFinanciamiento(financiamiento);
        mat.setTipoCompra(tipodecompra);
        mat.setIdUabc(idUABC);
        mat.setFechaRecepcion(date1);
        mat.setImagen(imagen);
        mat.setShowInQuery(showinquery);
        mat.setInventariable(inventariable);

        if (!(almacen == null || almacen.trim().equals(""))) {
          al.setIdalmacen(Integer.parseInt(almacen));
          mat.setAlmacenIdalmacen(al);
        }

        // tm.setIdTipomaterial(tipo);
        // sf.setIdsubFam(Integer.parseInt(subfamilia));
        mat.setIdTipomaterial(tipo);
        mat.setSubFamiliasidsubFam(sub);
        mat.setIdArea(area2);

        getEntityManager().merge(mat);
        System.out.println("MATERIAL MODIFICADO");
        existe = false;

      } else {
        existe = true;
      }

    } catch (Exception e) {
      TblMaterial mat = em.find(TblMaterial.class, id);
      TblArea ar = new TblArea();
      TblTipomaterial tm = new TblTipomaterial();
      Subfamilias sf = new Subfamilias();
      Almacen al = new Almacen();
      Date date1 = new Date();
      mat.setNombre(nombre);
      mat.setNoParte(noParte);
      mat.setDescripcion(descripcion);
      mat.setStock(Integer.parseInt(cantidad));
      mat.setCosto(Long.valueOf(costo));
      mat.setUnidadMedida(unidadmedida);
      mat.setMarca(marca);
      mat.setSerie(serie);
      mat.setEstado(estado);
      mat.setUbicacionActual(ubicacion);
      mat.setResponsable(responsable);
      mat.setProveedor(probedor);
      mat.setNumeroFactura(noFactura);
      mat.setOrdenCompra(ordenDcompra);
      mat.setCodigoSip(zip);
      mat.setFinanciamiento(financiamiento);
      mat.setTipoCompra(tipodecompra);
      mat.setIdUabc(idUABC);
      mat.setFechaRecepcion(date1);
      mat.setImagen(imagen);
      mat.setShowInQuery(showinquery);
      if (!(almacen == null || almacen.trim().equals(""))) {
        al.setIdalmacen(Integer.parseInt(almacen));
        mat.setAlmacenIdalmacen(al);
      }

      // tm.setIdTipomaterial(tipo);
      // sf.setIdsubFam(Integer.parseInt(subfamilia));
      mat.setIdTipomaterial(tipo);
      mat.setSubFamiliasidsubFam(sub);
      mat.setIdArea(area2);
      getEntityManager().merge(mat);
      existe = false;
      System.out.println("MATERIAL MODIFICADO");
      System.out.println("ERROR IN Question FACADE:" + e.getMessage());
    }
    return existe;
  }
  public boolean agregar11(
      String nombre,
      String noParte,
      String descripcion,
      String cantidad,
      String costo,
      String unidadmedida,
      String marca,
      String serie,
      String estado,
      String ubicacion,
      String responsable,
      String probedor,
      String noFactura,
      String ordenDcompra,
      String zip,
      String financiamiento,
      String tipodecompra,
      String idUABC,
      String fecharecepcion,
      String area,
      String tipodematerial,
      String subfamilia,
      String almacen,
      String imagen,
      TblArea area2,
      TblTipomaterial tipo,
      Subfamilias sub,
      boolean showinquery,
      boolean invent) {

    // TblMaterial mt2 = null;
    // Query search1 = em.createQuery("SELECT t FROM TblMaterial t WHERE t.noParte = :nopart ");
    // search1.setParameter("nopart", noParte);

    /*   try {
    mt2 = (TblMaterial) search1.getSingleResult();
    return false;
    } catch (Exception e) {*/
    TblMaterial mat = new TblMaterial();
    Almacen al = new Almacen();
    Date date1 = new Date();
    mat.setNombre(nombre);
    mat.setNoParte(noParte);
    mat.setDescripcion(descripcion);
    mat.setStock(Integer.parseInt(cantidad));
    mat.setCosto(Long.parseLong(costo));
    mat.setUnidadMedida(unidadmedida);
    mat.setMarca(marca);
    mat.setSerie(serie);
    mat.setEstado(estado);
    mat.setUbicacionActual(ubicacion);
    mat.setResponsable(responsable);
    mat.setProveedor(probedor);
    mat.setNumeroFactura(noFactura);
    mat.setOrdenCompra(ordenDcompra);
    mat.setCodigoSip(zip);
    mat.setFinanciamiento(financiamiento);
    mat.setTipoCompra(tipodecompra);
    mat.setIdUabc(idUABC);
    mat.setFechaRecepcion(date1);
    mat.setImagen(imagen);
    mat.setShowInQuery(showinquery);
    mat.setInventariable(invent);
    mat.setTotal(Integer.parseInt(cantidad));
    // ar.setIdArea(Integer.parseInt(area));

    if (!(almacen == null || almacen.trim().equals(""))) {
      al.setIdalmacen(Integer.parseInt(almacen));
      mat.setAlmacenIdalmacen(al);
    }

    // tm.setIdTipomaterial(tipo);
    // sf.setIdsubFam(Integer.parseInt(subfamilia));
    mat.setIdTipomaterial(tipo);
    mat.setSubFamiliasidsubFam(sub);
    mat.setIdArea(area2);

    em.persist(mat);

    return true;
    // }

  }
  public boolean agregar(
      String nombre,
      String noParte,
      String descripcion,
      String cantidad,
      String costo,
      String unidadmedida,
      String marca,
      String serie,
      String estado,
      String ubicacion,
      String responsable,
      String probedor,
      String noFactura,
      String ordenDcompra,
      String zip,
      String financiamiento,
      String tipodecompra,
      String idUABC,
      String fecharecepcion,
      String area,
      String tipodematerial,
      String subfamilia,
      String almacen,
      String imagen) {

    try {
      TblMaterial mat = new TblMaterial();
      TblArea ar = new TblArea();
      TblTipomaterial tm = new TblTipomaterial();
      Subfamilias sf = new Subfamilias();
      Almacen al = new Almacen();
      Date date1 = new Date();
      mat.setNombre(nombre);
      mat.setNoParte(noParte);
      mat.setDescripcion(descripcion);
      mat.setStock(Integer.parseInt(cantidad));
      mat.setCosto(Long.valueOf(costo));
      mat.setUnidadMedida(unidadmedida);
      mat.setMarca(marca);
      mat.setSerie(serie);
      mat.setEstado(estado);
      mat.setUbicacionActual(ubicacion);
      mat.setResponsable(responsable);
      mat.setProveedor(probedor);
      mat.setNumeroFactura(noFactura);
      mat.setOrdenCompra(ordenDcompra);
      mat.setCodigoSip(zip);
      mat.setFinanciamiento(financiamiento);
      mat.setTipoCompra(tipodecompra);
      mat.setIdUabc(idUABC);
      mat.setFechaRecepcion(date1);
      mat.setImagen(imagen);
      ar.setIdArea(Integer.parseInt(area));
      al.setIdalmacen(Integer.parseInt(almacen));
      tm.setIdTipomaterial(Integer.parseInt(tipodematerial));
      sf.setIdsubFam(Integer.parseInt(subfamilia));

      mat.setAlmacenIdalmacen(al);
      mat.setIdTipomaterial(tm);
      mat.setSubFamiliasidsubFam(sf);
      mat.setIdArea(ar);

      em.persist(mat);

      return true;
    } catch (Exception e) {
      return false;
    }
  }
  public TblMaterial getBasicInfo(String noParte) {
    Query query =
        em.createQuery(
            "SELECT  c.idtblMaterial,c.noParte,c.nombre,c.descripcion,c.stock,c.costo,c.imagen, c.idArea.idArea, c.idTipomaterial.idTipomaterial,c.subFamiliasidsubFam.idsubFam, c.idArea.descripcion, c.idTipomaterial.descripcion, c.subFamiliasidsubFam.nombre  FROM TblMaterial c WHERE c.noParte = :noParte");
    query.setParameter("noParte", noParte);

    Object[] object = (Object[]) query.getSingleResult();
    TblMaterial temp = new TblMaterial();
    temp.setIdtblMaterial((Integer) object[0]);
    temp.setNoParte((String) (object[1]));
    temp.setNombre((String) (object[2]));
    temp.setDescripcion((String) (object[3]));
    temp.setStock((Integer) (object[4]));
    temp.setCosto((Long) (object[5]));
    temp.setImagen((String) (object[6]));

    TblArea area = new TblArea((Integer) (object[7]));
    area.setDescripcion((String) object[10]);
    temp.setIdArea(area);

    TblTipomaterial tipo = new TblTipomaterial((Integer) (object[8]));
    tipo.setDescripcion((String) object[11]);
    temp.setIdTipomaterial(tipo);

    Subfamilias sub = new Subfamilias((Integer) (object[9]));
    sub.setNombre((String) object[12]);
    temp.setSubFamiliasidsubFam(sub);

    return temp;
  }
  private List<TblMaterial> mtlResults(Query query) {
    List<TblMaterial> data = new ArrayList<>();
    List list = query.getResultList();
    for (Iterator it = list.iterator(); it.hasNext(); ) {
      Object[] object = (Object[]) it.next();
      TblMaterial temp = new TblMaterial();
      temp.setIdtblMaterial((Integer) object[0]);
      temp.setNoParte((String) (object[1]));
      temp.setNombre((String) (object[2]));
      temp.setDescripcion((String) (object[3]));
      temp.setStock((Integer) (object[4]));
      temp.setCosto((Long) (object[5]));
      temp.setImagen((String) (object[6]));

      TblArea area = new TblArea((Integer) (object[7]));
      area.setDescripcion((String) object[10]);
      temp.setIdArea(area);

      TblTipomaterial tipo = new TblTipomaterial((Integer) (object[8]));
      tipo.setDescripcion((String) object[11]);
      temp.setIdTipomaterial(tipo);

      Subfamilias sub = new Subfamilias((Integer) (object[9]));
      sub.setNombre((String) object[12]);
      temp.setSubFamiliasidsubFam(sub);
      temp.setInventariable((Boolean) object[13]);
      data.add(temp);
    }
    return data;
  }