public string CriarQuestPost(QuestViewModel model) { if (ModelState.IsValid) { var quest = new Quest() { Nome = model.Nome, Descricao = model.Descricao, Cor = model.Cor.Contains("#")? model.Cor : "#" + model.Cor }; if (model.TasksViewModel != null) { foreach (var tsk in model.TasksViewModel) { var task = tsk.CriarTask(); quest.Tasks.Add(task); if (tsk.UsuarioResponsavelId != null) { int Id; if (int.TryParse(Util.Decrypt(tsk.UsuarioResponsavelId), out Id)) { task.UsuarioResponsavelId = Id; } else { return("Algo deu errado"); } } foreach (var fileViewModel in tsk.Files) { int Id; if (int.TryParse(Util.Decrypt(fileViewModel.Id), out Id)) { var file = db.File.Find(Id); task.Files.Add(file); file.IsValid = true; db.Entry(file).State = System.Data.Entity.EntityState.Modified; } else { return("Algo deu errado"); } } } } if (model.GrupoCriadorId == null) { quest.UsuarioCriadorId = User.Identity.GetUserId <int>(); } else { int Id; if (int.TryParse(Util.Decrypt(model.GrupoCriadorId), out Id)) { if (User.Identity.IsAdm(Id)) { quest.GrupoCriador = db.Grupo.Find(Id); } else { return("Você não pode executar esta ação"); } } else { return("Formlário inválido"); } } db.Quest.Add(quest); db.SaveChanges(); TempData["Alerta"] = "Criado com sucesso"; TempData["Classe"] = "green-alert"; return("true"); } else { return("false"); } }
public string AtualizarQuest(QuestViewModel quest) { if (ModelState.IsValid) { int Id; if (int.TryParse(Util.Decrypt(quest.Id), out Id)) { if (!User.Identity.HasQuest(quest.Id)) { return("Você não pode executar esta ação"); } var qst = db.Quest.Find(Id); qst.Nome = quest.Nome; qst.Descricao = quest.Descricao; qst.Cor = quest.Cor; db.Entry(qst).State = System.Data.Entity.EntityState.Modified; foreach (var tsk in quest.TasksViewModel) { Task task; if (int.TryParse(Util.Decrypt(tsk.Id), out Id)) { task = db.Task.Find(Id); task.Nome = tsk.Nome; task.Descricao = tsk.Descricao; task.Dificuldade = tsk.Dificuldade; if (task.Status == 0) { if (tsk.Status == 1) { task.DataInicio = DateTime.Now; } else if (tsk.Status == 2) { task.DataInicio = DateTime.Now; task.DataConclusao = DateTime.Now; } } else if (task.Status == 1) { if (tsk.Status == 2) { task.DataConclusao = DateTime.Now; } } task.Status = tsk.Status; task.DataConclusao = tsk.DataConclusao; if (tsk.UsuarioResponsavelId != null) { if (int.TryParse(Util.Decrypt(tsk.UsuarioResponsavelId), out Id)) { task.UsuarioResponsavelId = Id; } else { return("Formulário inválido"); } } else { task.UsuarioResponsavelId = null; } db.Entry(task).State = System.Data.Entity.EntityState.Modified; } else { task = new Task() { Nome = tsk.Nome, Descricao = tsk.Descricao, Dificuldade = tsk.Dificuldade, Status = tsk.Status, DataConclusao = tsk.DataConclusao, QuestId = qst.Id, }; db.Task.Add(task); } foreach (var file in tsk.Files) { if (int.TryParse(Util.Decrypt(file.Id), out Id)) { var fle = db.File.Find(Id); fle.TaskId = task.Id; fle.IsValid = true; db.Entry(fle).State = System.Data.Entity.EntityState.Modified; } else { return("Algo deu errado"); } } if (tsk.FeedbackViewModel != null) { if (!db.Feedback.Any(q => q.TaskId == task.Id)) { Feedback feedback = new Feedback() { TaskId = task.Id, Resposta = tsk.FeedbackViewModel.Resposta, Nota = tsk.FeedbackViewModel.Nota, DataCriacao = DateTime.Now }; db.Feedback.Add(feedback); if (qst.GrupoCriador != null) { if (task.UsuarioResponsavel == null) { foreach (var user in qst.GrupoCriador.Users) { db.PontoUsuario.Add(new PontoUsuario() { Task = task, Usuario = user, Valor = feedback.Nota * (task.Dificuldade + 1) }); } } else { db.PontoUsuario.Add(new PontoUsuario() { Task = task, Usuario = task.UsuarioResponsavel, Valor = feedback.Nota * (task.Dificuldade + 1) }); } } } else { Feedback feedback = task.Feedbacks.First(); feedback.Resposta = tsk.FeedbackViewModel.Resposta; feedback.Nota = tsk.FeedbackViewModel.Nota; feedback.DataCriacao = DateTime.Now; db.Entry(feedback).State = System.Data.Entity.EntityState.Modified; if (qst.GrupoCriador != null) { if (task.UsuarioResponsavel == null) { foreach (var user in qst.GrupoCriador.Users) { var exp = db.PontoUsuario.Find(task.Id, user.Id); exp.Valor = feedback.Nota * (task.Dificuldade + 1); db.Entry(exp).State = System.Data.Entity.EntityState.Modified; } } else { var exp = db.PontoUsuario.Find(task.Id, task.UsuarioResponsavelId); exp.Valor = feedback.Nota * (task.Dificuldade + 1); db.Entry(exp).State = System.Data.Entity.EntityState.Modified; } } } } else { foreach (var feb in db.Feedback.Where(q => q.TaskId == task.Id)) { db.Feedback.Remove(feb); } } } foreach (var task in db.Task.Where(q => q.QuestId == qst.Id)) { if (!quest.TasksViewModel.Any(q => q.Id == Util.Encrypt(task.Id.ToString()))) { db.Task.Remove(task); } } bool saveFailed; do { saveFailed = false; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { saveFailed = true; // Update original values from the database var entry = ex.Entries.Single(); entry.OriginalValues.SetValues(entry.GetDatabaseValues()); } } while (saveFailed); TempData["Alerta"] = "Atualizado com sucesso"; TempData["Classe"] = "green-alert"; return("true"); } else { return("Algo deu errado"); } } return("Formulário inválido"); }