public async Task <ActionResult> Delete(int?id) { if (id == null) { MensagemParaUsuarioViewModel.MensagemErro("Não foi especificado um item para excluir", TempData, ModelState); return(RedirectToAction("index")); } try { ProjectNode projectNode = await db.ProjectNodes.FindAsync(id); if (projectNode == null) { return(HttpNotFound()); } return(View(projectNode)); } catch (Exception err) { MensagemParaUsuarioViewModel.MensagemErro(LogServices.ConcatenaExceptions(err), TempData, ModelState); return(RedirectToAction("index")); } }
public async Task <JsonResult> Salvar([Bind(Include = "Id, Nome, Descricao, HorasEstimadas, IdPai, IdNodeLabel, NomeNodeLabel")] ProjectNodeViewModel projectNodeVm) { MensagemParaUsuarioViewModel result = new MensagemParaUsuarioViewModel(); if (ModelState.IsValid) { try { var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == projectNodeVm.IdPai && x.Nome == projectNodeVm.Nome && x.Id != projectNodeVm.Id); if (existente) { result.Titulo = "Nome Duplicado."; result.Mensagem = "Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó."; result.Sucesso = false; return(Json(result)); } } catch (Exception err) { result.Titulo = "Erro."; result.Mensagem = "Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err);; result.Sucesso = false; return(Json(result)); } ProjectNode pn = new ProjectNode(); if (projectNodeVm.Id > 0) { pn = db.ProjectNodes.Find(projectNodeVm.Id) ?? new ProjectNode(); } else { //só procura o pai para novos if ((projectNodeVm.IdPai ?? 0) > 0) { ProjectNode pai = db.ProjectNodes.Where(x => x.Id == projectNodeVm.IdPai).FirstOrDefault(); if (pai != null) { pn.Pai = pai; } } db.ProjectNodes.Add(pn); } pn.HorasEstimadas = projectNodeVm.HorasEstimadas; pn.Nome = projectNodeVm.Nome; pn.Descricao = projectNodeVm.Descricao; if ((projectNodeVm.IdNodeLabel ?? 0) > 0) { NodeLabel nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel); if (nl != null) { pn.NodeLabel = nl; projectNodeVm.NomeNodeLabel = nl.Nome; } } try { await db.SaveChangesAsync(); result.Titulo = "Salvar nó de projeto."; result.Mensagem = "Salvo com sucesso!"; //atualiza o projectNodeVm para os dados voltarem para o node da treeview projectNodeVm.Id = pn.Id; projectNodeVm.IdPai = pn.Pai != null ? pn.Pai.Id : new Nullable <int>(); result.Objeto = projectNodeVm; result.Sucesso = true; } catch (DbUpdateConcurrencyException duce) { result.Titulo = "Erro de concorrência ao salvar."; result.Mensagem = "Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce); result.Sucesso = false; } catch (Exception err) { result.Titulo = "Erro ao salvar."; result.Mensagem = "Esse registro não pôde ser salvo.\r\n " + LogServices.ConcatenaExceptions(err);; result.Sucesso = false; } } else { result.Titulo = "Estado inválido"; result.Mensagem = "Favor corrigir erros de preenchimento do formulário"; result.Sucesso = false; } return(Json(result)); }
public async Task <ActionResult> Create([Bind(Include = "Id, Nome, HorasEstimadas, IdPai, IdNodeLabel")] ProjectNodeViewModel projectNodeVm) { if (ModelState.IsValid) { try { var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == (projectNodeVm.IdPai ?? 0) && x.Nome == projectNodeVm.Nome); if (existente) { MensagemParaUsuarioViewModel.MensagemErro("Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó.", TempData, ModelState); CarregaNodeLabels(); return(View(projectNodeVm)); } } catch (Exception err) { MensagemParaUsuarioViewModel.MensagemErro("Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState); CarregaNodeLabels(); return(View(projectNodeVm)); } ProjectNode pn = new ProjectNode(); pn.HorasEstimadas = projectNodeVm.HorasEstimadas; pn.Nome = projectNodeVm.Nome; if ((projectNodeVm.IdPai ?? 0) > 0) { ProjectNode pai = db.ProjectNodes.Where(x => x.Id == projectNodeVm.IdPai).FirstOrDefault(); if (pai != null) { pn.Pai = pai; } } if ((projectNodeVm.IdNodeLabel ?? 0) > 0) { NodeLabel nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel); if (nl != null) { pn.NodeLabel = nl; } } db.ProjectNodes.Add(pn); try { await db.SaveChangesAsync(); return(RedirectToAction("Index", new { Id = projectNodeVm.IdPai ?? 0 })); } catch (DbUpdateConcurrencyException duce) { MensagemParaUsuarioViewModel.MensagemErro("Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce), TempData, ModelState); } catch (Exception err) { MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser salvo. \r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState); } } CarregaNodeLabels(); return(View(projectNodeVm)); }
public async Task <ActionResult> DeleteConfirmed(int id) { ProjectNode projectNode = await db.ProjectNodes.FindAsync(id); if (projectNode == null) { MensagemParaUsuarioViewModel.MensagemErro("Registro não encontrado", TempData, ModelState); return(RedirectToAction("Index")); } if (projectNode.Filhos.Count > 0) { MensagemParaUsuarioViewModel.MensagemAlerta("Este projeto não pode ser excluído porque tem projetos filhos associados a ele.", TempData); return(RedirectToAction("Index")); } if (projectNode.Atividades.Count > 0) { MensagemParaUsuarioViewModel.MensagemAlerta("Este projeto não pode ser excluído porque já tem atividades lançadas para ele.", TempData); return(RedirectToAction("Index")); } if (projectNode.UsuariosDesteNode.Count > 0) { MensagemParaUsuarioViewModel.MensagemAlerta("Este projeto não pode ser excluído porque está designado a usuários nas configurações do usuário.", TempData); return(RedirectToAction("Index")); } try { db.Entry(projectNode).State = EntityState.Deleted; await db.SaveChangesAsync(); MensagemParaUsuarioViewModel.MensagemSucesso("Registro Excluido.", TempData); return(RedirectToAction("Index")); } catch (DbUpdateConcurrencyException duce) { MensagemParaUsuarioViewModel.MensagemErro(" Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce), TempData, ModelState); } catch (Exception err) { MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser excluído. \r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState); } return(View(projectNode)); }
public async Task <ActionResult> Edit(int?id) { if (id == null) { MensagemParaUsuarioViewModel.MensagemErro("Não foi especificado um item para editar", TempData, ModelState); return(RedirectToAction("index")); } try { ProjectNode projectNode = await db.ProjectNodes.FindAsync(id); if (projectNode == null) { MensagemParaUsuarioViewModel.MensagemErro("O item não foi encontrado", TempData, ModelState); return(RedirectToAction("index")); } ProjectNodeViewModel projectVm = new ProjectNodeViewModel { HorasEstimadas = projectNode.HorasEstimadas, Id = projectNode.Id, IdNodeLabel = projectNode.NodeLabel != null ? projectNode.NodeLabel.Id : new Nullable <int>(), IdPai = projectNode.Pai != null ? projectNode.Pai.Id : new Nullable <int>(), Pai = projectNode.Pai, Nome = projectNode.Nome }; CarregaNodeLabels(projectNode.NodeLabel != null ? projectNode.NodeLabel.Id : 0); return(View(projectVm)); } catch (Exception err) { MensagemParaUsuarioViewModel.MensagemErro("Erro ao procurar nó de projeto: < br />\r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState); return(RedirectToAction("index")); } }