public IActionResult ChooseCritics(long id)
        {
            if (!User.IsInRole("Admin"))
            {
                return(RedirectToAction("Index", "Home"));
            }

            var version = _paperVersionRepository.GetPaperVersion(id);

            if (version == null)
            {
                StatusMessage = "Error. Paper do not exists.";
                return(RedirectToAction("Index", "PaperVersions"));
            }
            var users = _userRepository.GetAdminsAndCritics();

            ViewBag.Critics = new List <SelectListItem>();
            foreach (var user in users)
            {
                ViewBag.Critics.Add(new SelectListItem {
                    Text = user.Degree + " " + user.FirstName + " " + user.LastName + " (" + user.Email + ')', Value = user.Id
                });
            }
            ;

            var model = new ChooseCriticsViewModel()
            {
                PaperVersion   = version,
                PaperVersionId = version.Id,
                StatusMessage  = StatusMessage
            };

            return(View(model));
        }
        public IActionResult ChooseCritics(ChooseCriticsViewModel model)
        {
            if (!User.IsInRole("Admin"))
            {
                return(RedirectToAction("Index", "Home"));
            }

            if (ModelState.IsValid)
            {
                var version = _paperVersionRepository.GetPaperVersion(model.PaperVersionId);
                if (version == null)
                {
                    StatusMessage = "Error. Paper do not exists.";
                    return(RedirectToAction("Index", "PaperVersions"));
                }
                if (model.FirstCriticId == model.SecondCriticId)
                {
                    StatusMessage = "Error. Two different critics should be chosen!";
                    return(RedirectToAction("ChooseCritics", model.PaperVersionId));
                }
                var firstCritic  = _userRepository.GetApplicationUser(model.FirstCriticId);
                var secondCritic = _userRepository.GetApplicationUser(model.SecondCriticId);
                if (!_userManager.IsInRoleAsync(firstCritic, "Critic").Result&& !_userManager.IsInRoleAsync(firstCritic, "Admin").Result)
                {
                    StatusMessage = "Error. First user cannot become a  critic!";
                    return(RedirectToAction("Index", "PaperVersions"));
                }
                if (!_userManager.IsInRoleAsync(secondCritic, "Critic").Result&& !_userManager.IsInRoleAsync(secondCritic, "Admin").Result)
                {
                    StatusMessage = "Error. Second user cannot become a  critic!";
                    return(RedirectToAction("Index", "PaperVersions"));
                }

                List <ReviewDTO> list = new List <ReviewDTO>();
                list.Add(new ReviewDTO
                {
                    CriticId       = model.FirstCriticId,
                    PaperVersionId = model.PaperVersionId,
                    Deadline       = model.Deadline
                }
                         );
                list.Add(new ReviewDTO
                {
                    CriticId       = model.SecondCriticId,
                    PaperVersionId = model.PaperVersionId,
                    Deadline       = model.Deadline
                });

                IEnumerable <ReviewDTO> reviews = list;

                var result = _reviewRepository.CreateReviews(reviews);
                if (result == 2)
                {
                    _paperVersionRepository.SetStatusWaitingForReview(model.PaperVersionId);

                    StatusMessage = "Critics has been choosen.";
                    return(RedirectToAction("Index", "PaperVersions"));
                }
            }
            StatusMessage = "Error. Entered data is not valid.";
            return(RedirectToAction("Index", "PaperVersions"));
        }