Пример #1
0
        public ActionResult AddWork(int projectId, string backUrl)
        {
            if (!AccessControll())
            {
                return(RedirectToAction("AccesError"));
            }

            var vm = new WorkWievModel(-1, projectId, backUrl);

            return(View(vm));
        }
Пример #2
0
        public ActionResult Work(int projectId)
        {
            if (!AccessControll())
            {
                return(RedirectToAction("AccesError"));
            }

            var vm = new WorkWievModel(projectId, -1);

            return(View(vm));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }