package action.cliente.productos; import com.opensymphony.xwork2.ActionSupport; import dao.ProductoDAO; import java.util.List; import java.util.Map; import model.LineaPedido; import model.Pedido; import model.Producto; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.interceptor.RequestAware; import org.bson.types.ObjectId; public class AnadirProductoCestaAction extends ActionSupport implements RequestAware, SessionAware { /* Session */ private Map session; /* Request */ private Map<String, Object> request; /* Acceso a Datos*/ ProductoDAO productoDAO; /* Parametros */ private String id, cantidad; /* Alerta */ private String alerta; public AnadirProductoCestaAction() { productoDAO = new ProductoDAO(); } public String execute() { session = getSession(); Pedido pedido; if (session.containsKey("cesta")) { pedido = (Pedido) session.get("cesta"); ObjectId oid = new ObjectId(id); List<LineaPedido> carrito = pedido.getCarrito(); boolean encontrado = false; for (LineaPedido lp : carrito) { if (lp.getProducto().getId().equals(oid)) { lp.setCantidad(lp.getCantidad() + Integer.parseInt(cantidad)); lp.setTotal(lp.getCantidad() * lp.getProducto().getPrecio()); encontrado = true; break; } } if (!encontrado) { Producto producto = productoDAO.find(oid); LineaPedido lineapedido = new LineaPedido(); lineapedido.setCantidad(Integer.valueOf(cantidad)); lineapedido.setProducto(producto); lineapedido.setPrecioproducto(producto.getPrecio()); lineapedido.setTotal(Integer.valueOf(cantidad) * producto.getPrecio()); pedido.getCarrito().add(lineapedido); } float total = 0; for (LineaPedido lp : pedido.getCarrito()) { total += lp.getTotal(); } pedido.setPreciototal(total); session.put("cesta", pedido); } else { pedido = new Pedido(); ObjectId oid = new ObjectId(id); Producto producto = productoDAO.find(oid); LineaPedido lineapedido = new LineaPedido(); lineapedido.setCantidad(Integer.valueOf(cantidad)); lineapedido.setProducto(producto); lineapedido.setPrecioproducto(producto.getPrecio()); lineapedido.setTotal(Integer.valueOf(cantidad) * producto.getPrecio()); pedido.getCarrito().add(lineapedido); float total = 0; for (LineaPedido lp : pedido.getCarrito()) { total += lp.getTotal(); } pedido.setPreciototal(total); session.put("cesta", pedido); } alerta = "Se ha aƱadido un producto a su cesta"; return "SUCCESS"; } public ProductoDAO getProductoDAO() { return productoDAO; } public void setProductoDAO(ProductoDAO productoDAO) { this.productoDAO = productoDAO; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCantidad() { return cantidad; } public void setCantidad(String cantidad) { this.cantidad = cantidad; } public String getAlerta() { return alerta; } public void setAlerta(String alerta) { this.alerta = alerta; } @Override public void setSession(Map session) { this.session = session; } public Map getSession() { return session; } @Override public void setRequest(Map<String, Object> map) { this.request = map; } public Map getRequest() { return request; } }