Esempio n. 1
0
        public ActionResult Create(int projectId, Task task, List<int> requirements)
        {
            var project = _projectRepository.GetNullableById(projectId);

            if (project == null)
            {
                Message = string.Format(Messages.NotFound, "Project", projectId);
                return this.RedirectToAction<ProjectController>(a => a.Index());
            }

            // validate access
            var redirect = _accessValidator.CheckEditAccess(CurrentUser.Identity.Name, project);
            if (redirect != null)
            {
                Message = "Not authorized to edit project.";
                return redirect;
            }

            var taskToCreate = new Task();
            TransferValues(task, taskToCreate, requirements, project);

            if (project.Tasks.Count > 0)
            {
                // set the task id
                // get the highest task id
                var tid = project.Tasks.Select(a => a.Id).Max();
                var maxId = project.Tasks.Where(a => a.Id == tid).Select(a => a.TaskId).FirstOrDefault();
                // parse the int
                var mid = maxId.Substring(1, maxId.Length - 1);
                taskToCreate.TaskId = string.Format("T{0}", Convert.ToInt32(mid) + 1);
            }
            else
            {
                taskToCreate.TaskId = "T1";
            }

            ModelState.Clear();
            taskToCreate.TransferValidationMessagesTo(ModelState);

            if (ModelState.IsValid)
            {
                _taskRepository.EnsurePersistent(taskToCreate);

                Message = "Task Created Successfully";

                return this.RedirectToAction(a => a.Index(projectId));
            }

            var viewModel = TaskViewModel.Create(Repository, project, taskToCreate);

            return View(viewModel);
        }