public ActionResult Busca(string buscar, string cod, string cidade)
        {
            try
            {
                ViewData["nome"] = buscar;
                ViewData["cod"] = cod;
                ViewData["cidade"] = cidade;

                int codigo = 0;
                if (IsDigitsOnly(cod) && cod != "0")
                    codigo = Convert.ToInt16(cod);

                List<Produto> lstproduto = new List<Produto>();
                if (buscar == null) //menu principal
                {
                    if (cod == "0")
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade)).ToList();
                    else if (!IsDigitsOnly(cod))
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade) && a.categoria.categoriaPai == cod).ToList();
                    else
                    {
                        int codcat = Convert.ToInt16(cod);
                        string nomecat = db.Categorias.SingleOrDefault(a => a.categoriaCod == codcat).categoriaNome;
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade) && (a.categoria.categoriaCod == codigo || a.categoria.categoriaPai == nomecat)).ToList();
                    }
                }
                else
                {
                    if (cod == "0")
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Nome.Contains(buscar) && a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade)).ToList();
                    else if (!IsDigitsOnly(cod))
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Nome.Contains(buscar) && a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade) && a.categoria.categoriaPai == cod).ToList();
                    else
                    {
                        int codcat = Convert.ToInt16(cod);
                        string nomecat = db.Categorias.SingleOrDefault(a => a.categoriaCod == codcat).categoriaNome;
                        lstproduto = db.Produtos.Include("categoria").Include("Cidade").Where(a => a.Nome.Contains(buscar) && a.Status == 0 && a.Cidade.cidadeNome.Contains(cidade) && (a.categoria.categoriaCod == codigo || a.categoria.categoriaPai == nomecat)).ToList();
                    }
                }

                return View("Buscar", lstproduto);
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro buscar2";
                email.Body = "Busca(string buscar, string cod, string cidade)" + buscar + cod + cidade + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
 public ActionResult Criar()
 {
     try
     {
         Produto prod = new Produto();
         if (ModelState.IsValid)
         {
             List<SelectListItem> li = new List<SelectListItem>();
             li.Add(new SelectListItem { Text = "Categoria", Value = "0" });
             li.Add(new SelectListItem { Text = "Acessórios para Veículos", Value = "4" });
             li.Add(new SelectListItem { Text = "Comidas/Bebidas/Cigarros", Value = "24" });
             li.Add(new SelectListItem { Text = "Animais", Value = "5" });
             li.Add(new SelectListItem { Text = "Arte", Value = "17" });
             li.Add(new SelectListItem { Text = "Bebês", Value = "6" });
             li.Add(new SelectListItem { Text = "Bolsas", Value = "20" });
             li.Add(new SelectListItem { Text = "Calçados, roupas e bolsas", Value = "7" });
             li.Add(new SelectListItem { Text = "Câmbio", Value = "23" });
             li.Add(new SelectListItem { Text = "Câmeras e Acessórios", Value = "8" });
             li.Add(new SelectListItem { Text = "Celulares e Telefone", Value = "10" });
             li.Add(new SelectListItem { Text = "Eletrodomésticos", Value = "11" });
             li.Add(new SelectListItem { Text = "Eletrônicos", Value = "21" });
             li.Add(new SelectListItem { Text = "Esportes", Value = "12" });
             li.Add(new SelectListItem { Text = "Games", Value = "13" });
             li.Add(new SelectListItem { Text = "Imóveis", Value = "2" });
             li.Add(new SelectListItem { Text = "Informática", Value = "14" });
             li.Add(new SelectListItem { Text = "Ingressos", Value = "22" });
             li.Add(new SelectListItem { Text = "Instrumentos Musicais", Value = "15" });
             li.Add(new SelectListItem { Text = "Joias e Relógios", Value = "16" });
             li.Add(new SelectListItem { Text = "Móveis", Value = "9" });
             li.Add(new SelectListItem { Text = "Roupas", Value = "19" });
             li.Add(new SelectListItem { Text = "Saúde e Beleza", Value = "18" });
             li.Add(new SelectListItem { Text = "Serviços", Value = "3" });
             li.Add(new SelectListItem { Text = "Veículos", Value = "1" });
             ViewData["country"] = li;
             ViewData["cidade"] = "";
             return View(prod);
         }
     }
     catch (Exception ex)
     {
         Mail email = new Mail();
         email.Subject = "erro criar";
         email.Body = "Criar()" + ex.StackTrace;
         SendMailerController a = new SendMailerController();
         a.Index(email);
     }
     return View("Error");
 }
        public ActionResult GeneroCategorias(string nome, string cod)
        {
            try
            {
                List<Categoria> lstproduto = new List<Categoria>();
                List<Cidade> lstcidade = new List<Cidade>();

                //carregando categorias
                int codigo = 0;
                if (IsDigitsOnly(cod) && cod != "0")
                    codigo = Convert.ToInt16(cod);

                if (nome == null || nome == "")
                {
                    if (cod == "0")//só tem o nome pra buscar
                    {
                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Status == 0).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Status == 0).Select(b => b.Cidade).ToList();
                    }
                    else if (!IsDigitsOnly(cod)) //busca nas subcategorias
                    {
                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Status == 0 && a.categoria.categoriaPai == cod).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Status == 0 && a.categoria.categoriaPai == cod).Select(b => b.Cidade).ToList();
                    }
                    else //busca entre as categorias
                    {
                        int codcat = Convert.ToInt16(cod);
                        string nomecat = db.Categorias.SingleOrDefault(a => a.categoriaCod == codcat).categoriaNome;// Where(a=> a.categoriaCod == cod).Select()

                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Status == 0 && (a.categoria.categoriaCod == codigo || a.categoria.categoriaPai == nomecat)).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Status == 0 && (a.categoria.categoriaCod == codigo || a.categoria.categoriaPai == nomecat)).Select(b => b.Cidade).ToList();
                    }
                }
                else
                {
                    if (cod == "0")//só tem o nome pra buscar
                    {
                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Nome.Contains(nome) && a.Status == 0).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Nome.Contains(nome) && a.Status == 0).Select(b => b.Cidade).ToList();
                    }
                    else if (!IsDigitsOnly(cod)) //busca nas subcategorias
                    {
                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Nome.Contains(nome) && a.Status == 0 && a.categoria.categoriaPai == cod).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Nome.Contains(nome) && a.Status == 0 && a.categoria.categoriaPai == cod).Select(b => b.Cidade).ToList();
                    }
                    else //busca entre as categorias
                    {
                        lstproduto = db.Produtos.Include("categoria").Where(a => a.Nome.Contains(nome) && a.Status == 0 && a.categoria.categoriaCod == codigo).Select(b => b.categoria).ToList();
                        lstcidade = db.Produtos.Include("Cidade").Where(a => a.Nome.Contains(nome) && a.Status == 0 && a.categoria.categoriaCod == codigo).Select(b => b.Cidade).ToList();
                    }
                }
                PesquisaViewModel pesquisa = new PesquisaViewModel();
                pesquisa.categorias = new List<Categoria>();
                foreach (var item in lstproduto)
                {
                    pesquisa.categorias.Add(item);
                }

                //carregando cidades
                pesquisa.cidades = new List<Cidade>();

                foreach (var item in lstcidade)
                {
                    pesquisa.cidades.Add(item);
                }

                ViewData["nome"] = nome;
                if (cod == null)
                {
                    ViewData["cod"] = 0;
                }
                else
                {
                    ViewData["cod"] = cod;
                }
                return PartialView(pesquisa);
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro genero2";
                email.Body = "GeneroCategorias(string nome, string cod)" + nome + cod + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
        public ActionResult GeneroCategoriaprinc()
        {
            try
            {
                PesquisaViewModel pesquisa = new PesquisaViewModel();
                pesquisa.categorias = new List<Categoria>();
                pesquisa.categorias = db.Categorias.Where(a => a.categoriaPai == "0").ToList();

                return PartialView("GeneroCategorias", pesquisa);
            }
            catch (Exception ex)
            {

                Mail email = new Mail();
                email.Subject = "errogenero1";
                email.Body = " GeneroCategoriaprinc()" + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
        public ActionResult Detalhar(int cod)
        {
            try
            {
                Produto prod = db.Produtos.Include("Usuario").SingleOrDefault(a => a.produtoID == cod);

                FacebookPicture pic = db.ProfilePictures.SingleOrDefault(a => a.Usuario.Id == prod.Usuario.Id);
                prod.Usuario.ProfilePicture = new FacebookConnection<FacebookPicture>();
                prod.Usuario.ProfilePicture.Data = pic;
                return View(prod);
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = ex.Message;
                email.Body = " Detalhar(int cod)" + cod + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
        public async Task<ActionResult> Index(FacebookContext context)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var user = await context.Client.GetCurrentUserAsync<MyAppUser>();
                    if (user.Location != null)
                        Session["location"] = user.Location.id;

                    Session["picture"] = user.ProfilePicture;
                    Session["user"] = user.Id;

                    MyAppUser Usuario = new MyAppUser();
                    Cidade cidade = new Cidade();
                    string[] acentos = new string[] { "ç", "Ç", "á", "é", "í", "ó", "ú", "ý", "Á", "É", "Í", "Ó", "Ú", "Ý", "à", "è", "ì", "ò", "ù", "À", "È", "Ì", "Ò", "Ù", "ã", "õ", "ñ", "ä", "ë", "ï", "ö", "ü", "ÿ", "Ä", "Ë", "Ï", "Ö", "Ü", "Ã", "Õ", "Ñ", "â", "ê", "î", "ô", "û", "Â", "Ê", "Î", "Ô", "Û" };
                    string[] semAcento = new string[] { "c", "C", "a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "Y", "a", "e", "i", "o", "u", "A", "E", "I", "O", "U", "a", "o", "n", "a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "A", "O", "N", "a", "e", "i", "o", "u", "A", "E", "I", "O", "U" };
                    if (user.Location != null)
                    {
                        string location = user.Location.name;
                        for (int i = 0; i < acentos.Length; i++)
                        {
                            location = location.Replace(acentos[i], semAcento[i]);
                        }
                        cidade = db.Cidades.SingleOrDefault(a => a.cidadeNome.ToString() == location);
                        if (cidade == null)
                        {

                            cidade = new Cidade
                            {
                                cidadeCod = Convert.ToInt64(user.Location.id),
                                cidadeNome = location
                            };

                            db.Cidades.Add(cidade);
                        }
                    }

                    Usuario = db.Usuarios.SingleOrDefault(a => a.Id == user.Id);
                    FacebookPicture fbPic = new FacebookPicture();
                    if (Usuario == null)
                    {
                        fbPic.Usuario = user;
                        fbPic.Url = user.ProfilePicture.Data.Url;

                        if (user.Location != null)
                        {
                            Cidade cdd = new Cidade();
                            cdd = db.Cidades.SingleOrDefault(a => a.cidadeCod.ToString() == user.Location.id.ToString());
                            if (cdd != null)
                                db.Entry(user.Location).State = System.Data.Entity.EntityState.Unchanged;
                        }
                        db.Usuarios.Add(user);
                        db.ProfilePictures.Add(fbPic);
                    }
                    else
                    {
                        fbPic = db.ProfilePictures.SingleOrDefault(b => b.Usuario.Id == Usuario.Id);
                        Usuario.ProfilePicture = new FacebookConnection<FacebookPicture>();
                        Usuario.ProfilePicture.Data = fbPic;
                        string urlatual = user.ProfilePicture.Data.Url;
                        string url = Usuario.ProfilePicture.Data.Url;
                        if (urlatual.Trim() != url.Trim())
                        {
                            fbPic = new FacebookPicture();
                            fbPic.Usuario = new MyAppUser();
                            fbPic.Usuario = Usuario;
                            fbPic.Url = user.ProfilePicture.Data.Url;
                            db.ProfilePictures.Add(fbPic);
                            if (Usuario.ProfilePicture != null)
                                db.ProfilePictures.Remove(Usuario.ProfilePicture.Data);
                        }
                        Usuario.Location = user.Location;
                        Usuario.Email = user.Email;
                        Usuario.Name = user.Name;
                        if (user.Location != null)
                        {
                            Cidade cdd = new Cidade();
                            cdd = db.Cidades.SingleOrDefault(a => a.cidadeCod.ToString() == user.Location.id.ToString());
                            if (cdd != null)
                                db.Entry(user.Location).State = System.Data.Entity.EntityState.Unchanged;
                        }
                    }
                    db.SaveChanges();

                    List<Produto> lstproduto = new List<Produto>();
                    int produtosAPegar = 0;
                    produtosAPegar = Convert.ToInt16(ConfigurationManager.AppSettings["ProdutosAPegar"]);

                    lstproduto = db.Produtos.OrderByDescending(abc => abc.produtoID).Where(adc => adc.Status == 0).Take(produtosAPegar).ToList();
                    return View(lstproduto);
                }
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro home.index";
                email.Body = " Home.Index(FacebookContext context)" + context + ex.StackTrace + ex.Message;
                if (ex.InnerException != null)
                    email.Body += ex.InnerException.InnerException.Message;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
 public ActionResult Sugestao(string body)
 {
     Mail email = new Mail();
     email.Subject = "Sugestão";
     email.Body = body;
     SendMailerController a = new SendMailerController();
     a.Index(email);
     return RedirectToAction("Sugestao");
 }
        public ActionResult Criarr(Produto prod, string State, int selectedObjects, string[] Hiddens)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    List<Imagem> lstImagens = new List<Imagem>();
                    int aux = 0;
                    foreach (string img in Hiddens)
                    {
                        aux++;
                        if (img != "")
                        {
                            var imagem = new Imagem
                            {
                                imgBin = img
                            };
                            if (aux != selectedObjects)
                                lstImagens.Add(imagem);
                        }
                    }
                    prod.Usuario = new MyAppUser();
                    string id = Session["user"].ToString();
                    prod.Usuario = db.Usuarios.SingleOrDefault(a => a.Id.ToString() == id);
                    prod.Imagens = lstImagens;

                    Categoria cat = new Categoria();
                    int codigo = Convert.ToInt16(State);
                    cat = db.Categorias.Single(a => a.categoriaCod == codigo);
                    prod.categoria = cat;
                    long cod = 0;
                    if (Session["location"] != null)
                        cod = Convert.ToInt64(Session["location"].ToString());
                    else
                        cod = 0;

                    prod.Cidade = db.Cidades.SingleOrDefault(a => a.cidadeCod == cod);

                    db.Produtos.Add(prod);
                    db.SaveChanges();

                    //salvar a imagem principal no disco
                    byte[] bytes = Convert.FromBase64String(Hiddens[selectedObjects - 1].Substring(23));
                    Image image;
                    using (MemoryStream ms = new MemoryStream(bytes))
                    {
                        image = Image.FromStream(ms);
                    }
                    var prodAux = db.Produtos.SingleOrDefault(a => a.Nome == prod.Nome && a.Preco == prod.Preco && a.Usuario.Id == prod.Usuario.Id && a.Status == 0).produtoID;
                    string path = Path.Combine(Server.MapPath("~/Content/Images/Principais/"), prodAux.ToString() + ".jpg");

                    Bitmap tempBmp = new Bitmap(image.Width, image.Height);
                    Graphics g = Graphics.FromImage(tempBmp);
                    //draw the original image on tempBmp
                    g.DrawImage(image, 0, 0, image.Width, image.Height);
                    g.Dispose();
                    image.Dispose();
                    tempBmp.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);

                    Session["produtoid"] = prodAux.ToString();
                    Session["titulo"] = prod.Nome;
                    Session["descricao"] = prod.Descricao;

                    return RedirectToAction("Index");
                }
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro criar2";

                email.Body = "Criarr(Produto prod, string State, string selectedObjects, string[] Hiddens)" + prod + State + selectedObjects + Hiddens + ex.StackTrace + ex.Message;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
 public ActionResult Index()
 {
     try
     {
         if (Session["user"] == null)
             return RedirectToAction("Index", "Home"); ;
         var user = Session["user"].ToString();
         var produtos = db.Produtos.Where(a => a.Usuario.Id == user && a.Status == 0).ToList();
         if (Session["produtoid"] != null && Session["produtoid"] != "")
         {
             ViewData["titulo"] = Session["titulo"].ToString();
             ViewData["produtoid"] = Session["produtoid"].ToString();
             ViewData["descricao"] = Session["descricao"].ToString();
             Session.Remove("titulo");
             Session.Remove("produtoid");
             Session.Remove("descricao");
         }
         return View(produtos);
     }
     catch (Exception ex)
     {
         Mail email = new Mail();
         email.Subject = "erro manage.index";
         email.Body = "Manage.Index()" + ex.StackTrace;
         SendMailerController a = new SendMailerController();
         a.Index(email);
     }
     return View("Error");
 }
        public ActionResult Editar(Produto prod)
        {
            try
            {

                Produto produVelho = new Produto();
                produVelho = db.Produtos.SingleOrDefault(a => a.produtoID == prod.produtoID);
                produVelho.Descricao = prod.Descricao;
                produVelho.Nome = prod.Nome;
                produVelho.Preco = prod.Preco;
                db.SaveChanges();
                //return View("Index");
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro editar2";
                email.Body = "Editar(Produto prod)" + prod + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
        public ActionResult Editar(int id)
        {
            try
            {

                var produto = db.Produtos.SingleOrDefault(a => a.produtoID == id);
                return View(produto);
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro editar";
                email.Body = "Editar(int id)" + id + ex.StackTrace;
                SendMailerController a = new SendMailerController();
                a.Index(email);
            }
            return View("Error");
        }
        public ActionResult Delete(int id)
        {
            try
            {

                Produto prod = db.Produtos.SingleOrDefault(a => a.produtoID == id);
                prod.Status = 1;
                db.SaveChanges();
                var user = Session["user"].ToString();
                var produtos = db.Produtos.Where(a => a.Usuario.Id == user && a.Status == 0).ToList();
                return View("Index", produtos);
            }
            catch (Exception ex)
            {
                Mail email = new Mail();
                email.Subject = "erro delete";
                email.Body = "Delete(int id)" + id + ex.StackTrace;
                SendMailerController a = new SendMailerController();

                a.Index(email);
            }
            return View("Error");
        }