public IActionResult AddCritic(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 AddCriticViewModel()
            {
                PaperVersion   = version,
                PaperVersionId = version.Id,
                StatusMessage  = StatusMessage
            };

            return(View(model));
        }
        public IActionResult AddCritic(AddCriticViewModel 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"));
                }
                var critic = _userRepository.GetApplicationUser(model.CriticId);
                if (!_userManager.IsInRoleAsync(critic, "Critic").Result&& !_userManager.IsInRoleAsync(critic, "Admin").Result)
                {
                    StatusMessage = "Error. This user cannot become a  critic!";
                    return(RedirectToAction("Index", "PaperVersions"));
                }
                if (version.Reviews.FirstOrDefault(r => r.CriticId == critic.Id) != null)
                {
                    StatusMessage = "Error. " + critic.FirstName + " " + critic.LastName + " is already assigned to this version!";
                    var a = version.Reviews.Where(r => r.CriticId == critic.Id);
                    return(RedirectToAction("AddCritic", "Reviews", new { Id = model.PaperVersionId }));
                }

                var review = new ReviewDTO
                {
                    CriticId       = model.CriticId,
                    PaperVersionId = model.PaperVersionId,
                    Deadline       = model.Deadline
                };

                var result = _reviewRepository.CreateReview(review);
                if (result == 1)
                {
                    _paperVersionRepository.SetStatusWaitingForReview(model.PaperVersionId);

                    StatusMessage = "Critic has been choosen.";
                    return(RedirectToAction("Index", "PaperVersions"));
                }
            }
            StatusMessage = "Error. Entered data is not valid.";
            return(RedirectToAction("Index", "PaperVersions"));
        }
 public AddCritic()
 {
     InitializeComponent();
     DataContext = new AddCriticViewModel(this);
 }