Пример #1
0
        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");
            }
        }
Пример #2
0
        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");
        }