Example #1
0
        public void custom_algorithm(Personalizacion personalizacion, List<Producto> products, Usuario user, string tiendaID)
        {
            Assembly ddl = Assembly.Load(personalizacion.algoritmo);
            var t = ddl.GetType("Chebay.AlgorithmDLL.ChebayAlgorithm");
            dynamic c = Activator.CreateInstance(t);
            DataRecomendacion dr = new DataRecomendacion { UsuarioID = user.UsuarioID };
            Thread timeThread = new Thread(() =>
            {
                try
                {
                    dr.productos = (List<DataProducto>)c.getProducts(products, user);
                    IDALUsuario udal = new DALUsuarioEF();
                    udal.AgregarRecomendacionesUsuario(tiendaID, dr);
                }
                catch (Exception e)
                {
                    //si falla entonces default
                    default_recomendation_algorithm(products, user, tiendaID);
                }
            });

            timeThread.Start();

            bool finished = timeThread.Join(5000);
            if (!finished)
            {
                Debug.WriteLine("ALGORITMO PERSONALIZADO SUSPENDIDO... EXCESO TIEMPO");
                timeThread.Abort();
                default_recomendation_algorithm(products,user,tiendaID);
            }
        }
Example #2
0
        public async Task InsertProducts(string TiendaID, DataRecomendacion dataRecomendacion)
        {
            var db = _client.GetDatabase(_database);
            var collection = db.GetCollection<DataRecomendacion>(TiendaID);
            var docs = collection.Find(new BsonDocument()).FirstOrDefaultAsync();

            await collection.ReplaceOneAsync(d => d.UsuarioID == dataRecomendacion.UsuarioID, 
                dataRecomendacion, new UpdateOptions { IsUpsert = true });           
        }
Example #3
0
        public DataRecomendacion GetRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion)
        {
            var db = _client.GetDatabase(_database);
            var collection = db.GetCollection<BsonDocument>(TiendaID);
            var query =  collection.Find(new BsonDocument("UsuarioID", dataRecomendacion.UsuarioID));
            var count = query.CountAsync();
            count.Wait();
            if(count.Result == 0)
                return null;

            var prod= query.FirstAsync();
            
            List<DataProducto> listDP = new List<DataProducto>();
            string UsuarioID = prod.Result["UsuarioID"].AsString;
            BsonArray ar = prod.Result["productos"].AsBsonArray;
            
            string nombre = "";
            long productoid = 0;
            string descripcion = "";
            int precio_base_subasta = 0;
            int precio_compra = 0;
            DateTime fecha_cierre = DateTime.UtcNow;
            string idOfertante = "";
            foreach (var a in ar)
            {
                if(!a["nombre"].IsBsonNull)
                    nombre = a["nombre"].AsString;
                if(!a["ProductoID"].IsBsonNull)
                    productoid = a["ProductoID"].AsInt64;
                if(!a["descripcion"].IsBsonNull)
                    descripcion = a["descripcion"].AsString;
                if (!a["precio_base_subasta"].IsBsonNull)
                    precio_base_subasta = a["precio_base_subasta"].AsInt32;
                if (!a["precio_compra"].IsBsonNull)
                    precio_compra = a["precio_compra"].AsInt32;
                if (!a["fecha_cierre"].IsBsonNull)
                    fecha_cierre = a["fecha_cierre"].ToUniversalTime();
                if (!a["idOfertante"].IsBsonNull)
                    idOfertante = a["idOfertante"].AsString;

                DataProducto dp = new DataProducto {descripcion=descripcion,
                                                    fecha_cierre=fecha_cierre,
                                                    idOfertante=idOfertante,
                                                    nombre=nombre,
                                                    precio_compra=precio_compra,
                                                    precio_base_subasta=precio_base_subasta,
                                                    ProductoID=productoid 
                                                    };
                listDP.Add(dp);
            }
            return new DataRecomendacion { UsuarioID=UsuarioID, productos=listDP };
        }
Example #4
0
        //default algorithm return the mosts visited product
        public void default_recomendation_algorithm(List<Producto> products, Usuario user, String tiendaID)
        {
            IDALUsuario udal = new DALUsuarioEF();

            var query = from p in products
                        orderby (p.visitas.Count) descending
                        select p;
            DataRecomendacion dr = new DataRecomendacion { UsuarioID = user.UsuarioID, productos = new List<DataProducto>() };

            foreach (var p in query.ToList())
            {
                dr.productos.Add(new DataProducto(p));
            }
            udal.AgregarRecomendacionesUsuario(tiendaID, dr);
        }
Example #5
0
        public ActionResult Index(string urlTienda)
        {
            try
            {
                Tienda t = cT.ObtenerTienda(urlTienda);
                //Si cambio de tienda destruimos la sesion
                if (Session["Tienda_Nombre"] != null && Session["Tienda_Anterior"] != null && Session["Tienda_Nombre"].ToString() != Session["Tienda_Anterior"].ToString())
                {
                    FormsAuthentication.SignOut();
                    Session.Abandon(); //Destruye todos los objetos de la sesion

                    //Eliminar cookies (relacionados con la tienda anterior)
                    int cookieCount = Request.Cookies.Count;
                    for (var i = 0; i < cookieCount; i++)
                    {
                        var cookie = Request.Cookies[i];
                        if (cookie != null)
                        {
                            var cookieName = cookie.Name;
                            var expiredCookie = new HttpCookie(cookieName) { Expires = DateTime.Now.AddDays(-1) };
                            Response.Cookies.Add(expiredCookie); // overwrite it
                        }
                    }
                    // eliminar cookies server side
                    Request.Cookies.Clear();

                    Response.Redirect(Request.Url.ToString(), true);
                }
                ViewBag.Message = urlTienda;
                Session["Tienda_Nombre"] = urlTienda;
                List<DataProducto> prodsRec = new List<DataProducto>();
                List<DataProducto> prodsFav = new List<DataProducto>();
                bool hayFav = false;
                bool hayRec = false;
                int counter = 0;
                if (User.Identity.IsAuthenticated)
                {
                    String user = User.Identity.Name;
                    DataRecomendacion dr = new DataRecomendacion{
                        UsuarioID = user,
                        productos = prodsRec
                    };
                    try
                    {
                        //Recomendados para el usuario
                        DataRecomendacion drRes = cU.ObtenerRecomendacionesUsuario(urlTienda, dr);
                        if (drRes != null)
                        {
                            foreach (DataProducto dp in drRes.productos)
                            {
                                if (dp.fecha_cierre >= DateTime.UtcNow && counter < 3)
                                {
                                    prodsRec.Add(dp);
                                    counter++;
                                    hayRec = true;
                                }
                            }
                        }

                        ViewBag.productosRec = prodsRec;
                        ViewBag.hayRecomendados = hayRec;
                        //Favoritos del usuario
                        List<DataProducto> dpFav = controladorSubasta.ObtenerProductosFavoritos(user, urlTienda);
                        if (dpFav.Count > 0)
                        {
                            if (dpFav.Count > 2)
                            {
                                prodsFav = dpFav.GetRange(0, 2);
                            }
                            else
                            {
                                prodsFav = dpFav;
                            }
                            hayFav = true;
                        }
                        ViewBag.hayFavoritos = hayFav;
                        ViewBag.productosFav = prodsFav;
                    }
                    catch (Exception eRec)
                    {
                        prodsRec = controladorSubasta.ObtenerProductosPorTerminar(3, urlTienda);
                        ViewBag.productosRec = prodsRec;
                        if (prodsRec.Count > 0)
                        {
                            hayRec = true;
                        }
                        ViewBag.hayRecomendados = hayRec;
                        ViewBag.hayFavoritos = hayFav;
                        return View();
                    }

                }
                else
                {
                    ViewBag.hayRecomendados = false;
                    ViewBag.hayFavoritos = false;
                }
            }
            catch (Exception e)
            {
                ViewBag.ErrorMessage = e.Message;
                return View("Error");
            }
            return View();
        }
Example #6
0
 public async Task AgregarRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion)
 {
     MongoDB db = new MongoDB();
     await db.InsertProducts(TiendaID, dataRecomendacion);
 }
Example #7
0
 public DataRecomendacion ObtenerRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion)
 {
     MongoDB db = new MongoDB();
     return db.GetRecomendacionesUsuario(TiendaID, dataRecomendacion);
 }