@Override public void borrarProductosCarrito(String username, int idproducto) { session = sessionFactory.openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Producto producto = (Producto) session.get(Producto.class, idproducto); Pedido p = getPedidoCarritoSinSession(username); if (p != null) { List<LineaPedido> lp = session .createCriteria(LineaPedido.class) .add(Restrictions.eq("pedido", p)) .add(Restrictions.eq("producto", producto)) .list(); if (lp.size() != 0) { int cantidad_productos = lp.get(0).getCantidad(); // Si hay mas de 1 producto en el carrito, se borra sólo el producto del carrito if (p.getLineasPedido().size() > 1) { session.delete(lp.get(0)); // Si sólo hay 1 producto en el carrito, se borra el producto del carrito y el carrito } else { session.delete(lp.get(0)); session.delete(p); } producto.setCantidad(producto.getCantidad() + cantidad_productos); session.save(producto); } } transaction.commit(); } catch (HibernateException e) { transaction.rollback(); e.printStackTrace(); } finally { session.close(); } }
@Override public void restaProductosCarrito(String username, int idproducto) { session = sessionFactory.openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Producto producto = (Producto) session.get(Producto.class, idproducto); Pedido p = getPedidoCarritoSinSession(username); if (p != null) { List<LineaPedido> lp = session .createCriteria(LineaPedido.class) .add(Restrictions.eq("pedido", p)) .add(Restrictions.eq("producto", producto)) .list(); if (lp.size() != 0) { // si hay mas de una unidad del producto se resta una unidad a la cantidad de producto if (lp.get(0).getCantidad() > 1) { lp.get(0).setCantidad(lp.get(0).getCantidad() - 1); session.save(lp.get(0)); producto.setCantidad(producto.getCantidad() + 1); session.save(producto); transaction.commit(); session.close(); } else { transaction.commit(); session.close(); borrarProductosCarrito(username, idproducto); } } } } catch (HibernateException e) { transaction.rollback(); e.printStackTrace(); } }
@Override public void addProductosCarrito(String username, int idproducto) { session = sessionFactory.openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Usuario usuario = (Usuario) session.get(Usuario.class, username); Producto producto = (Producto) session.get(Producto.class, idproducto); Pedido p = getPedidoCarritoSinSession(username); Pedido pedido = new Pedido(); LineaPedido lineapedido = new LineaPedido(); lineapedido.setCantidad(1); lineapedido.setPrecio(producto.getPrecio()); // Si no se ha creado el carrito lo creamos if (p == null) { producto.addLineaPedido(lineapedido); pedido.addLineaPedido(lineapedido); pedido.setConfirmado(false); usuario.addPedido(pedido); session.save(usuario); session.save(producto); session.save(pedido); session.save(lineapedido); } else { List<LineaPedido> lp = session .createCriteria(LineaPedido.class) .add(Restrictions.eq("pedido", p)) .add(Restrictions.eq("producto", producto)) .list(); // Si se quiere añadir al carrito un producto del que aún no hay ninguna unidad, se añade if (lp.size() == 0) { p.addLineaPedido(lineapedido); producto.addLineaPedido(lineapedido); session.save(p); session.save(producto); session.save(lineapedido); // Si ya hay unidades del producto, se suma una unidad del producto a la tabla // LineaPedidos } else { lp.get(0).setCantidad(lp.get(0).getCantidad() + 1); session.save(lp.get(0)); } } // Actualizamos la tabla productos producto.setCantidad(producto.getCantidad() - 1); session.save(producto); transaction.commit(); } catch (HibernateException e) { transaction.rollback(); e.printStackTrace(); } finally { session.close(); } }