public ActionResult Create(Carrito carrito)
        {
            if (!carrito.Lineas.Any())
            {
                return(RedirectToAction("List", "Producto"));
            }
            Compra Compra = new Compra
            {
                IdUsuario   = Int32.Parse(User.Identity.GetHaynyUserID()),
                ItemsCompra = new List <ItemCompra>()
            };

            foreach (LineaCarrito linea in carrito.Lineas)
            {
                Compra.ItemsCompra.Add(new ItemCompra
                {
                    Cantidad    = linea.Cantidad,
                    Producto    = linea.Producto,
                    PrecioTotal = linea.Producto.Precio * linea.Cantidad,
                    ProductoID  = linea.Producto.ProductoID
                });
            }
            try
            {
                //Get current exchange rate of USD
                WebRequest request = WebRequest.Create("https://openexchangerates.org/api/latest.json?app_id=ac7c178cc4d14703b579f6fcc49410b2&base=USD&symbols=DOP");
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout     = 30000;
                using (WebResponse response = request.GetResponse())
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        CurrencyResponse currencyresponse = JsonConvert.DeserializeObject <CurrencyResponse>(reader.ReadToEnd());
                        double           Costo            = (double)carrito.ComputeTotalValue() / currencyresponse.rates.DOP;
                        ViewBag.TotalUSD = Math.Round(Costo, 2);
                    }
                }

                return(View(Compra));
            }
            catch (Exception e)
            {
                LogFileCreator LogError = new LogFileCreator();
                LogError.ErrorLog(Server.MapPath("~/Logs"), e.Message);
                return(RedirectToAction("Index", "Home"));
            }
        }
        public ActionResult BorrarArticulo(int?id)
        {
            Retorno retorno = new Retorno()
            {
                Success = true, Message = "Articulo Borrado correctamente"
            };
            var      user           = db.Users.Find(User.Identity.GetUserId());
            var      usuarioHayny   = db.Usuarios.Find(user.Usuario.IdUsuario);
            Articulo articulo       = db.Articulos.Find(id);
            Imagen   imagenArticulo = articulo.Imagen;

            using (var dbTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    if (articulo.Imagen != null)
                    {
                        string path = Path.Combine(Server.MapPath("~/ImagenesSubidas/"), articulo.Imagen.IdImagen + articulo.Imagen.Formato);

                        try
                        {
                            if (System.IO.File.Exists(path))
                            {
                                System.IO.File.Delete(path);
                                db.Imagenes.Remove(articulo.Imagen);
                            }
                        }
                        catch (Exception e)
                        {
                            LogFileCreator LogError = new LogFileCreator();
                            LogError.ErrorLog(Server.MapPath("~/Logs"), e.Message);
                            retorno = new Retorno()
                            {
                                Success = false, Message = "Ocurrió un error al subir el archivo"
                            };
                            return(Json(retorno, JsonRequestBehavior.AllowGet));
                        }
                    }

                    foreach (EtiquetaArticulo e in articulo.EtiquetaArticulo.ToList())
                    {
                        db.EtiquetaArticulo.Remove(e);
                    }
                    db.Articulos.Remove(articulo);
                    db.SaveChanges();

                    dbTransaction.Commit();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        LogFileCreator LogError = new LogFileCreator();

                        foreach (var ve in eve.ValidationErrors)
                        {
                            var mensaje = String.Format("  \"{0}\"  , {1} , {2}", eve.Entry.Entity.GetType().Name, ve.PropertyName, ve.ErrorMessage);
                            LogError.ErrorLog(Server.MapPath("/Logs"), mensaje);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogFileCreator LogError = new LogFileCreator();
                    LogError.ErrorLog(Server.MapPath("/Logs"), e.Message);
                    dbTransaction.Rollback();
                }
            }


            return(RedirectToAction("Index"));
        }
        public ActionResult GuardarArticulo(GuardarArticuloViewModel model)
        {
            Retorno retorno = new Retorno()
            {
                Success = true, Message = "Articulo añadido correctamente"
            };
            var             user           = db.Users.Find(User.Identity.GetUserId());
            var             usuarioHayny   = db.Usuarios.Find(user.Usuario.IdUsuario);
            List <Etiqueta> etiquetas      = JsonConvert.DeserializeObject <List <Etiqueta> >(model.Etiquetas);
            Imagen          imagenArticulo = null;

            using (var dbTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    if (Request.Files.Count > 0)
                    {
                        var file          = Request.Files[0];
                        var fileName      = Path.GetFileName(file.FileName);
                        var fileExtension = Path.GetExtension(file.FileName);
                        if (HttpPostedFileBaseExtensions.IsImage(file))
                        {
                            try
                            {
                                Stream stream = file.InputStream;
                                System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                                imagenArticulo = new Imagen()
                                {
                                    Usuario     = usuarioHayny,
                                    FechaSubida = DateTime.Now,
                                    Height      = image.Height,
                                    Width       = image.Width,
                                    Formato     = fileExtension,
                                    Title       = fileName
                                };
                                db.Imagenes.Add(imagenArticulo);
                                db.SaveChanges();
                                string path = Path.Combine(Server.MapPath("~/ImagenesSubidas/"), imagenArticulo.IdImagen + fileExtension);
                                file.SaveAs(path);
                            }
                            catch (Exception e)
                            {
                                LogFileCreator LogError = new LogFileCreator();
                                LogError.ErrorLog(Server.MapPath("/Logs"), e.Message);
                                retorno = new Retorno()
                                {
                                    Success = false, Message = "Ocurrió un error al subir el archivo"
                                };
                                return(Json(retorno, JsonRequestBehavior.AllowGet));
                            }
                        }
                        else
                        {
                            retorno = new Retorno()
                            {
                                Success = false, Message = "El archivo subido no es una imagen válida"
                            };
                            return(Json(retorno, JsonRequestBehavior.AllowGet));
                        }
                    }


                    Articulo articulo = new Articulo()
                    {
                        Titulo      = model.Titulo,
                        Contenido   = model.Contenido,
                        FechaSubida = DateTime.Now,
                        Usuario     = usuarioHayny,
                        Imagen      = imagenArticulo
                    };
                    db.Articulos.Add(articulo);
                    foreach (Etiqueta etiq in etiquetas)
                    {
                        etiq.Nombre = etiq.Nombre.ToLowerInvariant();
                        db.Etiquetas.Add(etiq);
                        EtiquetaArticulo etar = new EtiquetaArticulo()
                        {
                            Articulo = articulo, Etiqueta = etiq
                        };
                        db.EtiquetaArticulo.Add(etar);
                    }
                    db.SaveChanges();
                    dbTransaction.Commit();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        LogFileCreator LogError = new LogFileCreator();

                        foreach (var ve in eve.ValidationErrors)
                        {
                            var mensaje = String.Format("  \"{0}\"  , {1} , {2}", eve.Entry.Entity.GetType().Name, ve.PropertyName, ve.ErrorMessage);
                            LogError.ErrorLog(Server.MapPath("/Logs"), mensaje);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogFileCreator LogError = new LogFileCreator();
                    LogError.ErrorLog(Server.MapPath("/Logs"), e.Message);
                    dbTransaction.Rollback();
                }
            }


            return(Json(retorno, JsonRequestBehavior.AllowGet));
        }
        public ActionResult GuardarProducto(Producto p)
        {
            Retorno retorno = new Retorno()
            {
                Success = true, Message = "Producto añadido correctamente"
            };
            var    user           = db.Users.Find(User.Identity.GetUserId());
            var    usuarioHayny   = db.Usuarios.Find(user.Usuario.IdUsuario);
            Imagen imagenProducto = null;

            using (var dbTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    if (Request.Files.Count > 0)
                    {
                        HttpPostedFileBase file          = Request.Files[0];
                        string             fileName      = Path.GetFileName(file.FileName);
                        string             fileExtension = Path.GetExtension(file.FileName);

                        if (HttpPostedFileBaseExtensions.IsImage(file))
                        {
                            try
                            {
                                Stream stream = file.InputStream;
                                System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
                                imagenProducto = new Imagen()
                                {
                                    Usuario     = usuarioHayny,
                                    FechaSubida = DateTime.Now,
                                    Height      = image.Height,
                                    Width       = image.Width,
                                    Formato     = fileExtension,
                                    Title       = fileName
                                };
                                db.Imagenes.Add(imagenProducto);
                                db.SaveChanges();
                                string path = Path.Combine(Server.MapPath("~/ImagenesSubidas/"), imagenProducto.IdImagen + fileExtension);
                                file.SaveAs(path);
                            }
                            catch (Exception e)
                            {
                                LogFileCreator LogError = new LogFileCreator();
                                LogError.ErrorLog(Server.MapPath("/Logs"), e.Message);
                                retorno = new Retorno()
                                {
                                    Success = false, Message = "Ocurrió un error al subir el archivo"
                                };
                                return(Json(retorno, JsonRequestBehavior.AllowGet));
                            }
                        }
                        else
                        {
                            retorno = new Retorno()
                            {
                                Success = false, Message = "El archivo subido no es una imagen válida"
                            };
                            return(Json(retorno, JsonRequestBehavior.AllowGet));
                        }
                    }
                    else
                    {
                        retorno.Success = false;
                        retorno.Message = "Debe incluir una imagen para agregar el producto";
                    }

                    p.Imagen        = imagenProducto;
                    p.FechaCreacion = DateTime.Now;
                    db.Productos.Add(p);
                    db.SaveChanges();
                    dbTransaction.Commit();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        LogFileCreator LogError = new LogFileCreator();

                        foreach (var ve in eve.ValidationErrors)
                        {
                            var mensaje = String.Format("  \"{0}\"  , {1} , {2}", eve.Entry.Entity.GetType().Name, ve.PropertyName, ve.ErrorMessage);
                            LogError.ErrorLog(Server.MapPath("/Logs"), mensaje);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogFileCreator LogError = new LogFileCreator();
                    LogError.ErrorLog(Server.MapPath("/Logs"), e.Message);
                    dbTransaction.Rollback();
                }
            }

            return(Json(retorno, JsonRequestBehavior.AllowGet));
        }