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;
}
}