public async Task <IActionResult> Edit(int id, Estabelecimento estabelecimento)
        {
            if (!ModelState.IsValid) //verifica se os campos foram preenchidos, se n for válido, retorna a view novamente
            {
                var categorias = await _categoriaService.FindAllAsync();

                var viewModel = new EstabelecimentoFormViewModel {
                    Estabelecimento = estabelecimento, Categorias = categorias
                };
                return(View(viewModel));
            }
            if (id != estabelecimento.Id)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id incompatível" }));
            }
            try
            {
                await _estabelecimentoService.UpdateAsync(estabelecimento);

                return(RedirectToAction(nameof(Index)));
            }
            catch (ApplicationException e)
            {
                return(RedirectToAction(nameof(Error), new { message = e.Message })); //mensagem da própria exceção
            }
        }
        public ActionResult Salvar(Estabelecimento estabelecimento)
        {
            ModelState.Remove("estabelecimento.Categoria.Nome");
            if (!ModelState.IsValid)
            {
                var viewModel = new EstabelecimentoFormViewModel
                {
                    Estabelecimento = estabelecimento,
                    Categorias      = _context.Categorias.ToList(),
                };
                return(View("EstabelecimentoForm", viewModel));
            }

            int?categoriaId = 0;

            if (!String.IsNullOrWhiteSpace(estabelecimento.Categoria.Nome))
            {
                categoriaId = _context.Categorias.
                              SingleOrDefault(c => c.Nome == estabelecimento.Categoria.Nome).Id;
            }
            estabelecimento.Categoria = null;

            if (categoriaId == 0)
            {
                categoriaId = null;
            }

            if (estabelecimento.Id == 0)
            {
                estabelecimento.CategoriaId = categoriaId;
                _context.Estabelecimentos.Add(estabelecimento);
            }
            else
            {
                var estabelecimentoInDb = _context.Estabelecimentos.
                                          Single(e => e.Id == estabelecimento.Id);

                estabelecimentoInDb.Agencia      = estabelecimento.Agencia;
                estabelecimentoInDb.CategoriaId  = categoriaId;
                estabelecimentoInDb.Cidade       = estabelecimento.Cidade;
                estabelecimentoInDb.CNPJ         = estabelecimento.CNPJ;
                estabelecimentoInDb.Conta        = estabelecimento.Conta;
                estabelecimentoInDb.DataCadastro = estabelecimento.DataCadastro;
                estabelecimentoInDb.Email        = estabelecimento.Email;
                estabelecimentoInDb.Endereco     = estabelecimento.Endereco;
                estabelecimentoInDb.Estado       = estabelecimento.Estado;
                estabelecimentoInDb.NomeFantasia = estabelecimento.NomeFantasia;
                estabelecimentoInDb.RazaoSocial  = estabelecimento.RazaoSocial;
                estabelecimentoInDb.Status       = estabelecimento.Status;
                estabelecimentoInDb.Telefone     = estabelecimento.Telefone;
            }

            _context.SaveChanges();

            return(RedirectToAction("Index", "Estabelecimentos"));
        }
        public ActionResult NovoEstabelecimento()
        {
            var viewModel = new EstabelecimentoFormViewModel
            {
                Categorias      = _context.Categorias.ToList(),
                Estabelecimento = new Estabelecimento()
            };

            return(View("EstabelecimentoForm", viewModel));
        }
        public async Task <IActionResult> Create()
        {
            var categorias = await _categoriaService.FindAllAsync(); //carregar as categorias cadastradas no banco

            var viewModel = new EstabelecimentoFormViewModel {
                Categorias = categorias
            };                                                                            //carregar o formulário

            return(View(viewModel));
        }
        [ValidateAntiForgeryToken] //evitar ataques
        public async Task <IActionResult> Create(Estabelecimento estabelecimento)
        {
            if (!ModelState.IsValid) //verifica se os campos foram preenchidos, se n for válido, retorna a view novamente
            {
                var categorias = await _categoriaService.FindAllAsync();

                var viewModel = new EstabelecimentoFormViewModel {
                    Estabelecimento = estabelecimento, Categorias = categorias
                };
                return(View(viewModel));
            }
            await _estabelecimentoService.InsertAsync(estabelecimento);

            return(RedirectToAction(nameof(Index)));
        }
        public ActionResult Editar(int id)
        {
            var estabelecimento = _context.Estabelecimentos.SingleOrDefault(e => e.Id == id);

            if (estabelecimento == null)
            {
                return(RedirectToAction("Index", "Estabelecimentos"));
            }

            var categorias = _context.Categorias.ToList();

            var listaStringCategorias = EstabelecimentoFormViewModel.TransformarEmString(categorias);

            var viewModel = new EstabelecimentoFormViewModel
            {
                Categorias      = _context.Categorias.ToList(),
                Estabelecimento = estabelecimento
            };

            return(View("EstabelecimentoForm", viewModel));
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id não encontrado" }));
            }

            var obj = await _estabelecimentoService.FindByIdAsync(id.Value);

            if (obj == null)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id não encontrado" }));
            }
            List <Categoria> categorias = await _categoriaService.FindAllAsync(); //carregar as categorias para edição

            EstabelecimentoFormViewModel viewModel = new EstabelecimentoFormViewModel {
                Estabelecimento = obj, Categorias = categorias
            };                                                                                                                            //preenche o formulário com os dados do objeto

            return(View(viewModel));
        }