package action.cliente.pedidos; import com.google.code.morphia.Key; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.opensymphony.xwork2.ActionSupport; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.core.util.MultivaluedMapImpl; import dao.PedidoDAO; import dao.UsuarioDAO; import java.util.Date; import java.util.Iterator; import java.util.Map; import javax.ws.rs.core.MultivaluedMap; import model.Cliente; import model.Direccion; import model.Pedido; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import org.bson.types.ObjectId; import restservices.response.GeolocalizacionOSMResponse; import util.Services; public class CrearPedidoAction extends ActionSupport implements RequestAware, SessionAware { /* Session */ private Map session; /* Request */ private Map<String, Object> request; /* Acceso a Datos */ UsuarioDAO usuarioDAO; PedidoDAO pedidoDAO; /* Alerta */ String alerta = null; String error = null; public CrearPedidoAction() { usuarioDAO = new UsuarioDAO(); pedidoDAO = new PedidoDAO(); } public String execute() { session = getSession(); Cliente cliente = (Cliente) session.get("user"); if (cliente == null) { error = "Conéctese para realizar un pedido"; return "ERROR"; } Pedido pedido = (Pedido) session.get("cesta"); if(pedido!= null) { cliente.getPedidos().add(pedido); pedido.setCliente(cliente); Date ahora = new Date(); pedido.setCreacion(ahora); pedido.setCliente(cliente); if (session.containsKey("direccion")) { pedido.setDireccion((Direccion) session.get("direccion")); } else { pedido.setDireccion(cliente.getDireccion()); } Key<Pedido> key = pedidoDAO.save(pedido); ObjectId oid = (ObjectId) key.getId(); Pedido pedidorealizado = pedidoDAO.find(oid); usuarioDAO.save(cliente); alerta = "Su pedido se ha realizado con éxito"; session.remove("cesta"); String calle=pedido.getDireccion().getTipo()+" "+pedido.getDireccion().getNombre()+" "+pedido.getDireccion().getNumero()+" "+pedido.getDireccion().getLocalidad(); GeolocalizacionOSMResponse localizacion=Services.localizarPedidoPorCalle(calle); pedidorealizado.setLatitud(localizacion.getLat()); pedidorealizado.setLongitud(localizacion.getLon()); pedidoDAO.save(pedidorealizado); request.put("geolocalizacion", localizacion); request.put("pedidoDetallado", pedidorealizado); return "SUCCESS"; } else { error="Un error ha ocurrido en la aplicación"; return "ERROR"; } } public Map<String, Object> getRequest() { return request; } @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 String getAlerta() { return alerta; } public void setAlerta(String alerta) { this.alerta = alerta; } public String getError() { return error; } public void setError(String error) { this.error = error; } }