public ActionResult Produto(MercadoriaViewModel mercadoriaViewModel, FormCollection form)
        {
            var mercadoria = repositorioDeMercadorias.Obter(mercadoriaViewModel.Id);
            var merViewModel = Mapper.Map<Mercadoria, MercadoriaViewModel>(mercadoria);
            var tamDisponiveis = merViewModel.TamanhosDisponiveis();

            if ((tamDisponiveis.Count > 1) && (form["TamanhoEscolhido"] == "nenhum"))
            {
                ViewBag.FalhouTamanho = true;
                ViewData[MercadoriasViewModel.Mercadorias] = new MercadoriasViewModel(repositorioDeCategorias.ObterTodos());
                return View(merViewModel);

            }

            var tamanhoEscolhido = string.Empty;

            if (tamDisponiveis.Count == 1)
                tamanhoEscolhido = tamDisponiveis[0];
            else
            {
                for (int i = 0; i < tamDisponiveis.Count; i++)
                {
                    var tam = "tamanho" + i;
                    if (tam != form["TamanhoEscolhido"]) continue;
                    tamanhoEscolhido = tamDisponiveis[i];
                    break;
                }
            }

            var produto = mercadoria.Produtos.FirstOrDefault(prod => prod.Tamanho == tamanhoEscolhido);

            return RedirectToAction("AdicionarProduto", "Carrinho", produto);
        }
        public ActionResult Adicionar(MercadoriaViewModel mercadoriaViewModel, FormCollection form,
                                      HttpPostedFileBase file)
        {
            if (form[MercadoriasViewModel.CategoriasSelecionadas] != null)
            {
                var ids = form[MercadoriasViewModel.CategoriasSelecionadas].Split(',');
                mercadoriaViewModel.Categorias = new List<Categoria>();

                foreach (var id in ids)
                {
                    mercadoriaViewModel.Categorias.Add(repositorioDeCategorias.Obter(Guid.Parse(id)));
                }
            }

            if (mercadoriaViewModel.QuantidadeDeTamanhos != null)
            {
                mercadoriaViewModel.Tamanhos = new List<KeyValuePair<string, string>>((int)mercadoriaViewModel.QuantidadeDeTamanhos);
                for (int i = 0; i < mercadoriaViewModel.QuantidadeDeTamanhos; i++)
                {
                    if ((form["tamanho" + (i + 1)] != null) && (form["quantidadeTamanho" + (i + 1)] != null))
                    {
                        mercadoriaViewModel.Tamanhos.Add(new KeyValuePair<string, string>(form["tamanho" + (i + 1)],
                                                                                          form["quantidadeTamanho" + (i + 1)
                                                                                              ]));
                    }
                }
            }

            mercadoriaViewModel.Arquivos = new List<HttpPostedFileWrapper>();
            for (int i = 0; i < Request.Files.Count; i++)
            {
                var imagem = Request.Files[i] as HttpPostedFileWrapper;
                if ((imagem != null) && (imagem.ContentLength > 0))
                {
                    mercadoriaViewModel.Arquivos.Add(imagem);
                }
            }

            mercadoriaViewModel.Imagens.AddRange(FabricaDeImagem.Instancia().CriarImagens(mercadoriaViewModel.Arquivos));

            for (int i = 0; i < MercadoriasViewModel.NumeroDeFotosPermitidas; i++)
            {
                var imagem = "imagem" + i;
                var nomeImagem = imagem + "Nome";
                var conteudoImagem = imagem + "Conteudo";
                var tamanhoImagem = imagem + "Tamanho";
                var formatoImagem = imagem + "Formato";

                if ((form[imagem] != null) && (form[imagem] != string.Empty))
                {
                    mercadoriaViewModel.Imagens.Add(FabricaDeImagem.Instancia().CriarImagem(form[nomeImagem],
                                                                                            form[formatoImagem],
                                                                                            form[conteudoImagem],
                                                                                            form[tamanhoImagem]));
                }
            }

            if ((mercadoriaViewModel.Categorias == null) || (mercadoriaViewModel.Categorias.Count == 0))
                ModelState.AddModelError("Cat", "* É necessário selecionar pelo menos uma Categoria.");

            if ((mercadoriaViewModel.Cores == null) || (mercadoriaViewModel.Cores.Count == 0))
                ModelState.AddModelError("Cor", "* É necessário selecionar pelo menos uma Cor.");

            foreach (var tamanho in mercadoriaViewModel.Tamanhos)
            {
                int quantidade;

                try
                {
                    quantidade = Convert.ToInt32(tamanho.Value);
                }
                catch
                {
                    ModelState.AddModelError("Tamanho",
                                             "* A quantidade especificada para o tamanho " + tamanho.Key +
                                             " é inválida.");
                    continue;
                }

                if (quantidade < 0)
                    ModelState.AddModelError("Tamanho", "* A quantidade especificada para o tamanho " + tamanho.Key + " deve ser maior que zero.");

            }

            if (mercadoriaViewModel.Imagens.Count == 0)
                ModelState.AddModelError("Foto", "* É necessário carregar pelo menos uma Foto.");

            if (!ModelState.IsValid)
            {
                ViewData[MercadoriasViewModel.Mercadorias] = new MercadoriasViewModel(repositorioDeCategorias.ObterTodos());
                return View(mercadoriaViewModel);
            }

            var mercadoria = Mapper.Map<MercadoriaViewModel, Mercadoria>(mercadoriaViewModel);

            FabricaDeMercadoria.Instancia()
                               .CriarMercadoria(mercadoria, mercadoriaViewModel.Tamanhos, mercadoriaViewModel.Arquivos);

            bool adicionado = false;

            for (int i = 0; i < mercadoriaViewModel.Categorias.Count; i++)
            {
                var categoria = repositorioDeCategorias.Obter(mercadoriaViewModel.Categorias[i].Id);
                categoria.AdicionarMercadoria(mercadoria);
                if (repositorioDeCategorias.Editar(categoria))
                    adicionado = true;
                else
                {
                    adicionado = false;
                    break;
                }
            }

            if (adicionado)
                return RedirectToAction("Listar");

            ViewBag.Errou = true;
            ViewBag.Mensagem = "Não foi possível cadastrar a Mercadoria. Por favor informe ao administrador do sistema.";
            ViewData[MercadoriasViewModel.Mercadorias] = new MercadoriasViewModel(repositorioDeCategorias.ObterTodos());
            return View(mercadoriaViewModel);
        }
 public ActionResult Adicionar()
 {
     ViewData[MercadoriasViewModel.Mercadorias] = new MercadoriasViewModel(repositorioDeCategorias.ObterTodos());
     MercadoriaViewModel mercadoriaViewModel = new MercadoriaViewModel();
     return View(mercadoriaViewModel);
 }