public DireccionController(AngelDbContext Db)
 {
     this.Db     = Db;
     ClDireccion = new DireccionCore(this.Db);
     ClEstado    = new EstadoCore(this.Db);
     ClMunicipio = new MunicipioCore(this.Db);
     CLUsuario   = new UsuarioCore(this.Db);
 }
        public static int GenerarPedido()
        {
            var        Current       = HttpContext.Current;
            PedidoCore ManagerPedido = new PedidoCore();

            var lista                 = (List <PedidoLista>)Current.Session["Pedido"];
            var entregaTipo           = (int)Current.Session["FormaEnvio"];
            var logueado              = (UsuarioEntidad)Current.Session["Usuario"];
            var sucursalesDisponibles = HttpContext.Current.Session["SucursalesDisponibles"];
            var sucursalId            = (int?)Current.Session["Seleccionada"];
            List <PedidoDetalleEntidad> pedidosDetalles = new List <PedidoDetalleEntidad>();
            List <PedidoEntidad>        unasCompras     = new List <PedidoEntidad>();
            DireccionEntidad            unaDireccion;
            UsuarioCore   usuarioManager   = new UsuarioCore();
            DireccionCore ManagerDireccion = new DireccionCore();

            //var direccionEnvio = entregaTipo == (int)FormaEntregaEntidad.Options.Correo
            //                    ? usuarioManager.FindDireccionEnvioPredeterminada(logueado.NombreUsuario).IdDireccion
            //                    : sucursalManager.FindDireccionSucursal(sucursalId.Value).IdDireccion;

            unaDireccion = ManagerDireccion.TraerDireccionPorIdSucursal(sucursalId.Value);



            foreach (PedidoLista item in lista)
            {
                PedidoDetalleEntidad unPedDet = new PedidoDetalleEntidad();
                unPedDet.Cantidad              = item.Cantidad;
                unPedDet.PrecioUnitario        = item.Producto.PrecioUnitario;
                unPedDet.miProducto            = new ProductoEntidad();
                unPedDet.miProducto.IdProducto = item.Producto.IdProducto;
                unPedDet.CUIT = CORE.Helpers.ConfigSection.Default.Site.Cuit;
                pedidosDetalles.Add(unPedDet);
            }

            //lista.ForEach(x => pedidosDetalles.Add(new PedidoDetalleEntidad()
            //{
            //    Cantidad = x.Cantidad,
            //    PrecioUnitario = x.Producto.PrecioUnitario,
            //    IdProducto = x.Producto.IdProducto,
            //    CUIT = CORE.Helpers.ConfigSection.Default.Site.Cuit
            //}));

            Current.Session["DetallesPedido"] = pedidosDetalles;



            var pedido = new PedidoEntidad();

            pedido.FechaPedido             = DateTime.Now;
            pedido.miUsuario               = new UsuarioEntidad();
            pedido.miUsuario.NombreUsuario = logueado.NombreUsuario;
            pedido.miUsuario.CUIT          = CORE.Helpers.ConfigSection.Default.Site.Cuit;
            pedido.misDetalles             = pedidosDetalles;


            pedido.miFormaEntrega = new FormaEntregaEntidad();
            pedido.miFormaEntrega.IdFormaEntrega  = entregaTipo;
            pedido.miDireccionEntrega             = new DireccionEntidad();
            pedido.miDireccionEntrega.IdDireccion = unaDireccion.IdDireccion;
            pedido.DefinirEstado(new Entidades.StatePatron.StatePendientePago());
            ManagerPedido.PedidoSetearEstadoDescripEnMemoria(pedido);

            //Crea el Pedido y descuenta stock de los productos
            pedido = ManagerPedido.Create(pedido, sucursalId);

            //Agrega a "Compras" el pedido generado
            Current.Session["UltimoPedido"] = pedido.IdPedido;
            if (Current.Session["Compras"] != null)
            {
                unasCompras = Current.Session["Compras"] as List <PedidoEntidad>;
            }
            unasCompras.Add(pedido);
            Current.Session["Compras"] = unasCompras;

            //Eliminar las variables de sesión que tenían el pedido en memoria sin confirmar
            //Revisar si hay q eliminar otras
            Current.Session["Pedido"] = null;
            //Current.Session["DetallesPedido"] = null;
            Current.Session["Productos"] = null;

            //Current.Session.Add("IdPedido", pedido.IdPedido.ToString());
            return(pedido.IdPedido);
        }