// User || admin
  @POST
  @Path("/create")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public Response addProducto(@QueryParam("mongo") Boolean mongo, DataProducto dp) {
    Producto p = new Producto();

    p.setNombre(dp.getNombre());
    p.setDescripcion(dp.getDescripcion());
    Categoria cat = em.find(Categoria.class, dp.getCategoria());
    if (cat == null) {
      DataResponse dr = new DataResponse();
      dr.setMensaje("Categoria " + dp.getCategoria() + " no existe");
      return Response.status(500).entity(dr).build();
    }
    p.setCategoria(cat);
    p.setGenerico(dp.getIsgenerico());
    try {
      em.persist(p);
      em.flush();
      dp.setID(p.getId());

      // MONGO
      if (mongo == null || mongo) new MongoController().upsertProduct(dp);

      return Response.status(201).entity(dp).build();

    } catch (Exception e) {
      DataResponse dr = new DataResponse();
      dr.setMensaje("Error inesperado.");
      dr.setDescripcion(e.getMessage());
      return Response.status(409).build();
    }
  }
  // if producto generico admin
  // else user
  @PUT
  @Path("{id}")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public Response updateProducto(@PathParam(value = "id") Long id, DataProducto dp) {
    Producto p = em.find(Producto.class, id);
    p.setNombre(dp.getNombre());
    p.setDescripcion(dp.getDescripcion());
    p.setGenerico(dp.getIsgenerico());
    Categoria cat = em.find(Categoria.class, dp.getCategoria());
    if (cat == null) {
      DataResponse dr = new DataResponse();
      dr.setMensaje("Categoria " + dp.getCategoria() + " no existe");
      return Response.status(500).entity(dr).build();
    }
    p.setCategoria(cat);

    em.merge(p);

    // mongo thread
    dp.setID(p.getId());
    new MongoController().upsertProduct(dp);

    return Response.status(200).build();
  }
 @POST
 @Path("/unificar")
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 public Response doGenerico(DataUnificar du) {
   Producto nuevo = new Producto();
   nuevo.setNombre(du.getNombre());
   nuevo.setCategoria(em.find(Categoria.class, du.getCategoria()));
   nuevo.setDescripcion(du.getDescripcion());
   nuevo.setGenerico(true);
   nuevo.setCarritoProductos(new ArrayList<CarritoProducto>());
   for (Long productoid : du.getProductos()) {
     Producto p = em.find(Producto.class, productoid);
     nuevo.getCarritoProductos().addAll(p.getCarritoProductos());
     nuevo.getReportesMovimientoStocks().addAll(p.getReportesMovimientoStocks());
     nuevo.getStocks().addAll(p.getStocks());
   }
   return Response.status(200).build();
 }