public ActionResult AddWork(int projectId, string backUrl) { if (!AccessControll()) { return(RedirectToAction("AccesError")); } var vm = new WorkWievModel(-1, projectId, backUrl); return(View(vm)); }
public ActionResult Work(int projectId) { if (!AccessControll()) { return(RedirectToAction("AccesError")); } var vm = new WorkWievModel(projectId, -1); return(View(vm)); }
public ActionResult AddWork(string projectId, string projectName, string projectStart, string projectEnd, string projectDescription, int?personId, string submit, string backUrl) { if (string.IsNullOrWhiteSpace(projectName)) { ModelState.AddModelError("ProjectName", "Навание работы не может быть пустым"); } if (string.IsNullOrWhiteSpace(projectStart)) { ModelState.AddModelError("ProjectStart", "Дата начала не может быть пустой"); } DateTime start = new DateTime(); try { start = Convert.ToDateTime(projectStart); } catch (FormatException e) { ModelState.AddModelError("ProjectStart", "Дата начала не является датой"); } if (string.IsNullOrWhiteSpace(projectEnd)) { ModelState.AddModelError("ProjectEnd", "Дата окончания не может быть пустой"); } DateTime end = new DateTime(); try { end = Convert.ToDateTime(projectEnd); } catch (FormatException e) { ModelState.AddModelError("ProjectEnd", "Дата окончания не является датой"); } if (start > end) { ModelState.AddModelError("ProjectLength", "Дата начала должна быть до даты окончания"); } int id = Convert.ToInt32(projectId); Project project = _DataManager.projectRepository.GetProjectById(id); if (start < project.startDateTime || start > project.endDateTime || end < project.startDateTime || end > project.endDateTime) { ModelState.AddModelError("ProjectLength", "Начало или конец работы выходят за пределы проекта"); } if (CheckPersonTime(start, end, Convert.ToInt32(personId), id)) { ModelState.AddModelError("ProjectLength", "Исполнитель на это время уже занят в другой работе"); } if (!personId.HasValue) { ModelState.AddModelError("PersonId", "Исполнитель не выбран"); } if (ModelState.IsValid) { var p = _DataManager.projectRepository.AddProject(projectName, projectDescription, start, end, 0, 0, id); _DataManager.teamRepository.AddTeam(Convert.ToInt32(personId.Value), p.IdProject); if (p.parrentProject.parrentProject != null) { _DataManager.teamRepository.DeleteTeam(_DataManager.teamRepository.GetTeamByWork(p.parrentProject.IdProject)?.IdTeam); } //Отправить уведомление на почту исполнителя var mailSender = new MailSender(); string personMail = _DataManager.personRepository.GetPersonById(personId.Value).email; mailSender.Send(new NewWorkTemplate(personMail, p)); if (p.parrentProject == null) { return(RedirectToAction("Project", new { idProject = p.IdProject })); } else { return(RedirectToAction("Work", new { projectId = p.IdProject })); } } var vm = new WorkWievModel(-1, project.IdProject, backUrl); return(View(vm)); }
public ActionResult Work(string projectId, string projectName, string projectStart, string projectEnd, string projectDescription, int?team, string submit) { if (string.IsNullOrWhiteSpace(projectName)) { ModelState.AddModelError("ProjectName", "Навание работы не может быть пустым"); } if (string.IsNullOrWhiteSpace(projectStart)) { ModelState.AddModelError("ProjectStart", "Дата начала не может быть пустой"); } DateTime start = new DateTime(); try { start = Convert.ToDateTime(projectStart); } catch (FormatException e) { ModelState.AddModelError("ProjectStart", "Дата начала не является датой"); } if (string.IsNullOrWhiteSpace(projectEnd)) { ModelState.AddModelError("ProjectEnd", "Дата окончания не может быть пустой"); } DateTime end = new DateTime(); try { end = Convert.ToDateTime(projectEnd); } catch (FormatException e) { ModelState.AddModelError("ProjectEnd", "Дата окончания не является датой"); } if (start > end) { ModelState.AddModelError("ProjectLength", "Дата начала должна быть до даты окончания"); } int id = Convert.ToInt32(projectId); Project parrentProject = _DataManager.projectRepository.GetProjectById(id).parrentProject; if (start < parrentProject.startDateTime || start > parrentProject.endDateTime || end < parrentProject.startDateTime || end > parrentProject.endDateTime) { ModelState.AddModelError("ProjectLength", "Начало или конец работы выходят за пределы проекта"); } if (ModelState.IsValid) { Project p = _DataManager.projectRepository.EditProject(id, projectName, projectDescription, start, end, 0, 0); //Отправить уведомление об изменинии в работе if (team != null) { _DataManager.teamRepository.DeleteTeam(_DataManager.teamRepository.GetTeamByWork(id).IdTeam); _DataManager.teamRepository.AddTeam(team.Value, id); MailSender sender = new MailSender(); string email = _DataManager.personRepository.GetPersonById(team.Value).email; var work = _DataManager.projectRepository.GetProjectById(id); sender.Send(new WorkChangedMail(email, work)); } if (p.parrentProject?.parrentProject == null) { return(RedirectToAction("Project", new { idProject = p.parrentProject.IdProject })); } else { return(RedirectToAction("Work", new { projectId = p.parrentProject.IdProject })); } } // Во view отправляется неизмененная работа, как раньше. // Todo Надо переделать так, чтобы во view отправлялась работа с теми же значениями полей. // Для этого можно улучшить структуру view model: // создать группу "валидных" значений, с которыми можно делать логику, // и группу значений "для показа", в которую смогут входить как валидные, так и не валидные, с этой группой не будет никакой логики. // Для этого нужно будет убрать валидацию модели из контроллеров var vm = new WorkWievModel(_DataManager.projectRepository.GetProjectById(id)); return(View(vm)); }