//public string CategoryNames { get; set; }

        public static LocationDetailsViewModel GetLocationDetailsViewModel(ApplicationDbContext context, int locationId)
        {
            LocationDetailsViewModel locationDetailsViewModel = new LocationDetailsViewModel();

            Models.Location location = context.Locations
                                       .Include(l => l.LocationCategories)
                                       .FirstOrDefault(l => l.Id == locationId);


            List <Models.Review> reviews = context.Reviews
                                           .Where(r => r.LocationID == locationId)
                                           .ToList();

            var selectedCategories = context.LocationCategories
                                     .Where(locationCategory => locationCategory.LocationId == locationId)
                                     .ToList();

            List <Category> categories = context.Categories
                                         .ToList();

            selectedCategories.ForEach(selectedCategory =>
                                       selectedCategory.Category = categories.Single(category =>
                                                                                     category.Id == selectedCategory.CategoryId
                                                                                     )
                                       );



            //IList<Models.LocationCategory> categories = location.LocationCategories;

            IList <ReviewDetailsViewModel> reviewDetailsViewModels = new List <ReviewDetailsViewModel>();

            foreach (Models.Review review in reviews)
            {
                ReviewDetailsViewModel reviewDetailsViewModel = new ReviewDetailsViewModel();
                reviewDetailsViewModel.Rating  = review.Rating;
                reviewDetailsViewModel.Comment = review.Comment;
                reviewDetailsViewModels.Add(reviewDetailsViewModel);
            }



            List <CategoryDetailsViewModel> categoryDetailsViewModels = new List <CategoryDetailsViewModel>();

            foreach (Models.LocationCategory selectedCategory in selectedCategories)
            {
                CategoryDetailsViewModel categoryDetailsViewModel = new CategoryDetailsViewModel();
                categoryDetailsViewModel.Name = selectedCategory.Category.CategoryName;
                categoryDetailsViewModels.Add(categoryDetailsViewModel);
            }

            return(new LocationDetailsViewModel()
            {
                Name = location.Name,
                Description = location.Description,
                Id = location.Id,
                ReviewDetailsViewModels = reviewDetailsViewModels.ToList(),
                CategoryDetailsViewModels = categoryDetailsViewModels.ToList()
            });
        }
        public ActionResult Edit(int id)
        {
            Review_Details reviewDetail = reviewDetailsBL.GetReviewDetailsById(id);
            //ViewBag.Departments = new SelectList(departmentBL.GetDepartments(), "DepartmentID", "DepartmentName");
            //ViewBag.Designation = new SelectList(designationBL.GetDesignations(), "DesignationID", "DesignationName");
            List <SelectListItem>  reviewerDepartments    = new List <SelectListItem>();
            ReviewDetailsViewModel reviewDetailsViewModel = new ReviewDetailsViewModel();

            List <Departments> states = departmentBL.GetDepartments();

            states.ForEach(x =>
            {
                reviewerDepartments.Add(new SelectListItem {
                    Text = x.DepartmentName, Value = x.DepartmentId.ToString()
                });
            });
            ViewBag.Departments = new SelectList(departmentBL.GetDepartments(), "DepartmentID", "DepartmentName");
            reviewDetailsViewModel.Departments = reviewerDepartments;
            ReviewDetailsViewModel employeeViewModel = new ReviewDetailsViewModel();

            // employeeViewModel = AutoMapper.Mapper.Map<ReviewDetail, ReviewDetailsViewModel>(reviewDetail);
            employeeViewModel.Id                    = reviewDetail.Id;
            employeeViewModel.Reviewername          = reviewDetail.Reviewername;
            employeeViewModel.ReviewerDesignationId = reviewDetail.ReviewerDesignationId;
            employeeViewModel.ReviewerDepartmentId  = reviewDetail.ReviewerDepartmentId;
            employeeViewModel.Revieweename          = reviewDetail.Revieweename;
            employeeViewModel.RevieweeDesignationId = reviewDetail.RevieweeDesignationId;
            employeeViewModel.RevieweeDepartmentId  = reviewDetail.RevieweeDepartmentId;
            employeeViewModel.Date                  = reviewDetail.Date;
            return(View(employeeViewModel));
        }
        public IActionResult Delete(ReviewDetailsViewModel reviewViewModel)
        {
            var review = _mapper.Map <Review>(reviewViewModel);

            _reviewRepository.Delete(review);
            return(RedirectToAction(nameof(Index)));
        }
        public ActionResult Details(string button, ReviewDetailsViewModel vm)
        {
            var selections = (int[])Session["revids"];

            if (button == null)
            {
                var ids = selections.ToList();
                PatService.DeleteReviews(ids, User.Identity.Name.RemoveDomain());
                TempData[CommonConstants.FlashMessageTypeInfo] = string.Format("{0} Reviews deleted", ids.Count);
                return(RedirectToAction("Details", "Upload", new { id = vm.Review.UploadId }));
            }
            if (button == "next")
            {
                SessionHelper.SetSessionBulkReviewOutcomes(Session, vm);
                var nextId = GetNextId(vm.Review.ReviewId, selections);
                return(RedirectToAction("Details", "Review", new { id = nextId }));
            }
            if (button == "previous")
            {
                SessionHelper.SetSessionBulkReviewOutcomes(Session, vm);
                var prevId = GetPreviousId(vm.Review.ReviewId, selections);
                return(RedirectToAction("Details", "Review", new { id = prevId }));
            }
            if (ModelState.IsValid)
            {
                if (vm.Review.AssessmentCode == DataConstants.AssessmentValid ||
                    vm.Review.AssessmentCode == DataConstants.AssessmentValidwithQualification)
                {
                    vm.Review.OutcomeCode = DataConstants.FinalOutcomeValid_NFA;
                }
                if (vm.Review.AssessmentCode != vm.OldAssessmentOutcome)
                {
                    vm.Review.AssessmentDate = DateTime.Now;
                }
                if (vm.Review.RecoveryReason != vm.OldRecoveryReason)
                {
                    vm.Review.RecoveryReasonDate = DateTime.Now;
                }
                if (vm.Review.OutcomeCode != vm.OldOutcomeCode)
                {
                    vm.Review.FinalOutcomeDate = DateTime.Now;
                }
                if (vm.Review.AssessmentAction != vm.OldAssessmentAction)
                {
                    vm.Review.AssessmentActionDate = DateTime.Now;
                }
                //  save the update
                vm.Review.UpdatedBy = User.Identity.Name.RemoveDomain();
                PatService.BulkOutcome(selections, vm.Review, vm.Review.UpdatedBy);
                SessionHelper.SetSessionBulkReviewOutcomes(Session, null);
                TempData[CommonConstants.FlashMessageTypeInfo] = string.Format("{0} Reviews updated", selections.Count());
                return(RedirectToAction("Details", "Upload", new { id = vm.Review.UploadId }));
            }

            //  get the View Data back
            ViewData["review-details"] = AppHelper.GetSessionReviewDetails(Session);
            ViewData["related-data"]   = AppHelper.GetSessionRelatedData(Session);
            return(View(vm));
        }
        public ActionResult Details(int id)
        {
            try
            {
                var projectId = AppHelper.GetSessionProjectId(Session);
                var project   = PatService.GetProject(projectId);
                var review    = PatService.GetReview(id);
                var upload    = PatService.GetUploadById(review.UploadId);
                var vm        = SessionHelper.GetSessionBulkOutcomes(Session);
                if (vm.Review == null)
                {
                    vm = new ReviewDetailsViewModel
                    {
                        ProjectId      = project.ProjectId,
                        ProjectName    = project.ProjectName,
                        UploadName     = upload.Name,
                        OutOfScope     = upload.IsOutOfScope(),
                        OutOfScopeFlag = !upload.InScope,
                        Additional     = upload.AdditionalOrNot(),
                        AdditionalFlag = upload.AdditionalReview,
                        Review         = review,
                        ChangesMade    = "N"
                    };
                }

                ViewBag.IsProjectContractMonitoringOrContractSiteVisit = project != null && project.IsContractMonitoringOrContractSiteVisit();

                ViewData["review-details"] = GenerateReviewDetails(review);
                ViewData["related-data"]   = GenerateRelatedData(review.ClaimId, review.ClaimSequenceNumber);
                if (vm.Review != null)
                {
                    vm.OldAssessmentOutcome = vm.Review.AssessmentCode;
                    vm.OldRecoveryReason    = vm.Review.RecoveryReason;
                    vm.OldOutcomeCode       = vm.Review.OutcomeCode;
                }
                else
                {
                    vm.Review = review;
                }

                vm.Review.ReviewId = id;
                var selections = (int[])Session["revids"];
                vm.Nav = PositionOf(id, selections);
                vm.NumberOfSelections = SelectionsMessageFor(selections, id);
                vm.DeleteMessage      = CheckForOutcomes(selections);

                return(View(vm));
            }
            catch (Exception ex)
            {
                ErrorLog.GetDefault(null).Log(new Error(ex));

                return(View("Error", new HandleErrorInfo(ex, "Review", "Details")));
            }
        }
        public ActionResult Details(int?id)
        {
            if (!this._service.ReviewExists(id))
            {
                return(this.RedirectToAction("All", "Products"));
            }
            var currentUserId           = this.User.Identity.GetUserId();
            ReviewDetailsViewModel rdvm = this._service.GetReviewDetails(currentUserId, id);

            return(this.View(rdvm));
        }
Example #7
0
        public IActionResult DeleteReview(int id)
        {
            ReviewDetailsViewModel review = this.reviewService.GetReview(id);

            if (review == null)
            {
                return(RedirectToAction(RedirectConstants.IndexSuffix));
            }

            return(this.View(review));
        }
Example #8
0
        public ViewResult Details(int id)
        {
            var review  = _context.Reviews.Include(r => r.FilmItem).FirstOrDefault(r => r.Id == id);
            var replies = _context.Reviews.Where(r => r.ShoutId == review.Id).OrderBy(r => r.CreatedAt).ToList();

            ReviewDetailsViewModel reviewDetailsViewModel = new ReviewDetailsViewModel
            {
                Review  = review,
                Replies = replies
            };

            return(View(reviewDetailsViewModel));
        }
        public async Task <ReviewDetailsViewModel> GetReviewDetailsAsync(string id, int pageNumber, int itemsToShow = 5)
        {
            var game = await this.gameRepository
                       .AllAsNoTracking()
                       .Include(x => x.Ratings)
                       .FirstOrDefaultAsync(x => x.Id == id);

            if (game == null)
            {
                throw new ArgumentException("Game does not exist.");
            }

            var totalRatings = game.RatingsCount;

            var fiveStarRating  = ((double)game.Ratings.Where(x => x.Value == 5).Count() / totalRatings) * 100;
            var fourStarRating  = ((double)game.Ratings.Where(x => x.Value == 4).Count() / totalRatings) * 100;
            var threeStarRating = ((double)game.Ratings.Where(x => x.Value == 3).Count() / totalRatings) * 100;
            var twoStarRating   = ((double)game.Ratings.Where(x => x.Value == 2).Count() / totalRatings) * 100;
            var oneStarRating   = ((double)game.Ratings.Where(x => x.Value == 1).Count() / totalRatings) * 100;

            var viewModel = new ReviewDetailsViewModel
            {
                GameName               = game.Name,
                GameId                 = game.Id,
                AverageRating          = this.ratingsService.GetAverageRating(id),
                OneStarRatingPercent   = oneStarRating.ToString("N1") + "%",
                TwoStarRatingPercent   = twoStarRating.ToString("N1") + "%",
                ThreeStarRatingPercent = threeStarRating.ToString("N1") + "%",
                FourStarRatingPercent  = fourStarRating.ToString("N1") + "%",
                FiveStarRatingPercent  = fiveStarRating.ToString("N1") + "%",
                UserReviews            = await this.reviewRepository
                                         .AllAsNoTracking()
                                         .Where(x => x.GameId == id)
                                         .OrderByDescending(x => x.CreatedOn)
                                         .Select(x => new AllUserReviewsViewModel
                {
                    Id         = x.Id,
                    ReviewerId = x.ReviewedBy.Id,
                    Image      = x.ReviewedBy.ProfilePicture,
                    Username   = x.ReviewedBy.UserName,
                    CreatedOn  = x.CreatedOn.ToString("dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture),
                    Text       = x.Text,
                    Rating     = x.Rating.Value,
                })
                                         .Skip((pageNumber - 1) * itemsToShow)
                                         .Take(itemsToShow)
                                         .ToListAsync(),
            };

            return(viewModel);
        }
        public ActionResult ScheduleReview()
        {
            List <SelectListItem>  reviewerDepartments    = new List <SelectListItem>();
            ReviewDetailsViewModel reviewDetailsViewModel = new ReviewDetailsViewModel();

            List <Departments> states = departmentBL.GetDepartments();

            states.ForEach(x =>
            {
                reviewerDepartments.Add(new SelectListItem {
                    Text = x.DepartmentName, Value = x.DepartmentId.ToString()
                });
            });
            reviewDetailsViewModel.Departments = reviewerDepartments;
            return(View(reviewDetailsViewModel));
        }
        public ActionResult Details(int id)
        {
            var review = _context.Reviews.SingleOrDefault(c => c.Id == id);

            if (review == null)
            {
                return(HttpNotFound());
            }

            var viewModel = new ReviewDetailsViewModel
            {
                WrittenBy   = review.GetUser().UserName,
                Comment     = review.Comment,
                Rating      = review.Rating,
                DateWritten = review.DateWritten,
            };

            return(View(viewModel));
        }
        public async Task <IActionResult> RejectReviewing(ReviewDetailsViewModel model)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);

            var result = _reviewRepository.RemoveReview(model.Id);

            if (result == 1)
            {
                var version = _paperVersionRepository.GetPaperVersion(model.PaperVersionId);
                if (version.Reviews.Count() == 0)
                {
                    _paperVersionRepository.SetStatusDocumentRecieved(model.PaperVersionId);
                }

                StatusMessage = "Critic canceled.";
                return(RedirectToAction(nameof(Index)));
            }
            StatusMessage = "Error. Something went wrong.";
            return(RedirectToAction(nameof(Index)));
        }
        public IActionResult CancelCritic(ReviewDetailsViewModel model)
        {
            if (!User.IsInRole("Admin"))
            {
                return(RedirectToAction("Index", "Home"));
            }
            var result = _reviewRepository.RemoveReview(model.Id);

            if (result == 1)
            {
                var version = _paperVersionRepository.GetPaperVersion(model.PaperVersionId);
                if (version.Reviews.Count() == 0)
                {
                    _paperVersionRepository.SetStatusDocumentRecieved(model.PaperVersionId);
                }

                StatusMessage = "Critic canceled.";
                return(RedirectToAction(nameof(Index)));
            }
            StatusMessage = "Error. Something went wrong.";
            return(RedirectToAction(nameof(Index)));
        }
Example #14
0
        public IActionResult Details(int id)
        {
            if (id == 0)
            {
                return(NotFound());
            }

            Review review = reviewService.GetByID(id);

            if (review == null)
            {
                return(NotFound());
            }

            ReviewDetailsViewModel viewModel = new ReviewDetailsViewModel()
            {
                Review         = review,
                ReviewComments = review.ReviewComments
            };

            return(View(viewModel));
        }
Example #15
0
        public ReviewDetailsViewModel GetReviewDetails(string currentUserId, int?id)
        {
            var customer = this.Context.Customers.FirstOrDefault(c => c.UserId == currentUserId);
            var review   = this.Context.Reviews.Find(id);
            ReviewDetailsViewModel rdvm = Mapper.Instance.Map <ReviewDetailsViewModel>(review);

            rdvm.ContentParagraphs = review.Content.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            if (customer != null)
            {
                rdvm.VisitorIsAlsoReviewPublisher   = currentUserId == review.Reviewer.UserId;
                rdvm.IsVisitorAllowedToPostComments = customer.Warnings <= 3;
            }
            else
            {
                rdvm.IsVisitorAllowedToPostComments = true;
            }
            if (review.Reviewer.User.ProfilePictureFileName != null)
            {
                rdvm.ReviewerImageData = this.GetUserProfilePicture(review.Reviewer.User.ProfilePictureFileName,
                                                                    review.Reviewer.User.UserName);
            }
            rdvm.ReviewComments = Mapper.Instance.Map <IEnumerable <ReviewCommentViewModel> >(review.Comments);
            return(rdvm);
        }
        public ActionResult Edit(int id)
        {
            try
            {
                var loggedInUser = new PatUser(Request.LogonUserIdentity);
                var projectId    = AppHelper.GetSessionProjectId(Session);

                if (projectId == 0)
                {
                    return(RedirectToProjectsList());
                }

                var project = PatService.GetProject(projectId);

                ViewBag.IsProjectContractMonitoringOrContractSiteVisit = project != null && project.IsContractMonitoringOrContractSiteVisit();
                ViewBag.CanEditCheckList = project != null && project.CanEditCheckList(User.Identity.Name.RemoveDomain());

                var questionnaire = PatService.GetReviewQuestionnaire(id);
                ViewBag.AnyQuestionsAndAnswers = questionnaire != null;

                var review = PatService.GetReview(id);
                if (project != null && review.CanEdit(loggedInUser, project.ResourcesSetShort()))
                {
                    var upload = PatService.GetUploadById(review.UploadId);
                    var vm     = new ReviewDetailsViewModel
                    {
                        ProjectId      = project.ProjectId,
                        ProjectName    = project.ProjectName,
                        UploadName     = upload.Name,
                        OutOfScope     = upload.IsOutOfScope(),
                        OutOfScopeFlag = !upload.InScope,
                        Additional     = upload.AdditionalOrNot(),
                        AdditionalFlag = upload.AdditionalReview,
                        Review         = review,
                        CanDelete      = review.CanDelete(loggedInUser),
                        CanEdit        = true,
                        ChangesMade    = "N"
                    };

                    ViewData["review-details"] = GenerateReviewDetails(review);
                    ViewData["related-data"]   = GenerateRelatedData(review.ClaimId, review.ClaimSequenceNumber);
                    vm.OldAssessmentOutcome    = vm.Review.AssessmentCode;
                    vm.OldRecoveryReason       = vm.Review.RecoveryReason;
                    vm.OldOutcomeCode          = vm.Review.OutcomeCode;
                    vm.OldAssessmentAction     = vm.Review.AssessmentAction;
                    vm.DeleteMessage           = "Are you sure you want to delete this review?";
                    if (vm.Review.Status().Equals("Completed"))
                    {
                        vm.DeleteMessage = "Are you sure you want to delete this review? as it has outcomes recorded.";
                    }

                    // keep the existing (`not current`) adw code displayed
                    ViewBag.OldAssessmentOutcomeList = PatService.GetAdwCode(DataConstants.AdwListCodeForAssessmentCodes, vm.OldAssessmentOutcome, true);
                    ViewBag.OldRecoveryReasonList    = PatService.GetAdwCode(DataConstants.AdwListCodeForRecoveryReasonCodes, vm.OldRecoveryReason, true);
                    ViewBag.OldAssessmentActionList  = PatService.GetAdwCode(DataConstants.AdwListCodeForAssessmentActionCodes, vm.OldAssessmentAction, true);
                    ViewBag.OldFinalOutcomeList      = PatService.GetAdwCode(DataConstants.AdwListCodeForOutcomeCodes, vm.OldOutcomeCode, true);

                    return(View(vm));
                }
                TempData[CommonConstants.FlashMessageTypeWarning] =
                    "You must be part of the Project resource groups to edit its' reviews.";
                return(RedirectToProjectDetailsPageTab(projectId, CommonConstants.ProjectTab_Details));
            }
            catch (Exception ex)
            {
                ErrorLog.GetDefault(null).Log(new Error(ex));

                return(View("Error", new HandleErrorInfo(ex, "Review", "Edit")));
            }
        }
Example #17
0
 public static void SetSessionBulkReviewOutcomes(HttpSessionStateBase session, ReviewDetailsViewModel vm)
 {
     session[CommonConstants.SessionBulkOutcomes] = vm;
 }
        public ActionResult Edit(string button, ReviewDetailsViewModel vm)
        {
            try
            {
                var loggedInUser = new PatUser(Request.LogonUserIdentity);
                if (button == "delete" || button == null)
                {
                    PatService.DeleteReview(vm.Review, loggedInUser.LoginName);
                    TempData[CommonConstants.FlashMessageTypeInfo] = string.Format("Review {0} deleted", vm.Review.ReviewId);
                    return(RedirectToAction("Details", "Upload", new { id = vm.Review.UploadId }));
                }
                if (ModelState.IsValid)
                {
                    if (vm.Review.AssessmentCode == DataConstants.AssessmentValid ||
                        vm.Review.AssessmentCode == DataConstants.AssessmentValidwithQualification)
                    {
                        vm.Review.OutcomeCode = DataConstants.FinalOutcomeValid_NFA;
                    }

                    if (vm.Review.AssessmentCode != vm.OldAssessmentOutcome)
                    {
                        vm.Review.AssessmentDate = DateTime.Now;
                    }
                    if (vm.Review.RecoveryReason != vm.OldRecoveryReason)
                    {
                        vm.Review.RecoveryReasonDate = DateTime.Now;
                    }
                    if (vm.Review.OutcomeCode != vm.OldOutcomeCode)
                    {
                        vm.Review.FinalOutcomeDate = DateTime.Now;
                    }
                    if (vm.Review.AssessmentAction != vm.OldAssessmentAction)
                    {
                        vm.Review.AssessmentActionDate = DateTime.Now;
                    }
                    //  save the update
                    vm.Review.UpdatedBy = loggedInUser.LoginName;
                    PatService.UpdateReview(vm.Review);
                    TempData[CommonConstants.FlashMessageTypeInfo] = string.Format("Review {0} successfully updated", vm.Review.ReviewId);
                    return(RedirectToAction("Details", "Upload", new { id = vm.Review.UploadId }));
                }

                var projectId = AppHelper.GetSessionProjectId(Session);
                if (projectId == 0)
                {
                    return(RedirectToProjectsList());
                }
                var project = PatService.GetProject(projectId);

                ViewBag.IsProjectContractMonitoringOrContractSiteVisit = project != null && project.IsContractMonitoringOrContractSiteVisit();
                ViewBag.CanEditCheckList = project != null && project.CanEditCheckList(User.Identity.Name.RemoveDomain());

                var questionnaire = PatService.GetReviewQuestionnaire(vm.Review.ReviewId);
                ViewBag.AnyQuestionsAndAnswers = questionnaire != null;

                //  get the View Data back
                ViewData["review-details"] = AppHelper.GetSessionReviewDetails(Session);
                ViewData["related-data"]   = AppHelper.GetSessionRelatedData(Session);
                return(View(vm));
            }
            catch (Exception ex)
            {
                ErrorLog.GetDefault(null).Log(new Error(ex));

                return(View("Error", new HandleErrorInfo(ex, "Review", "Edit")));
            }
        }
        /// <summary>
        /// Gets the details view model.
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <returns>The view model.</returns>
        private ReviewDetailsViewModel GetDetailsViewModel(int id)
        {
            // Get the application data
            var providerApplication = new ProviderApplicationDTO();

            providerApplication.ProviderApplicationId = id;

            providerApplication = _providerApplicationService.ReadProviderApplication(providerApplication);

            var bo = new ProviderApplicationBO(providerApplication);

            bo.CheckAccess(this.User);

            // Get form data
            var formDataCriteria = new FormDataQueryDTO();

            formDataCriteria.FormDataId = providerApplication.FormDataId.Value;

            var formData = _formDataService.ReadFormDataDetails(formDataCriteria);

            var serializer    = new JavaScriptSerializer();
            var formViewModel = serializer.Deserialize <FormViewModel>(serializer.Serialize(formData));

            // Get profile data
            var profile = new ProviderProfileDTO();

            profile.ProviderProfileId = providerApplication.ProviderProfileId;
            profile = this._providerService.SearchProviderProfiles(profile).FirstOrDefault();

            // Get the provider profile extra data
            var profileExtra = new ProviderProfileExtraDTO();

            profileExtra.ProviderProfileId = providerApplication.ProviderProfileId;
            profileExtra = this._providerProfileExtraService.ReadProviderProfileExtra(profileExtra);

            // get comments
            var commentCriteria = new CommentDTO();

            commentCriteria.LinkId     = id;
            commentCriteria.LinkTypeId = (int)LinkType.ProviderApplication;

            var comments = _commentService.ReadCommentList(commentCriteria);

            // Build our return model
            var applicationViewModel = new ApplicationViewModel();

            applicationViewModel.ProgramYearId = providerApplication.ProgramYearId.Value;

            // Get the provider profile contact information
            var contactInformation = this._providerService.ReadProviderContactInfo(profile);

            applicationViewModel.ProfileViewModel.ProviderContactName  = contactInformation.ContactName;
            applicationViewModel.ProfileViewModel.ProviderContactPhone = contactInformation.ContactPhone;
            applicationViewModel.ProfileViewModel.ProviderContactEmail = contactInformation.ContactEmail;

            applicationViewModel.AcknowledgementViewModel              = new AcknowledgementViewModel();
            applicationViewModel.AcknowledgementViewModel.ContactName  = providerApplication.ContactName;
            applicationViewModel.AcknowledgementViewModel.ContactEmail = providerApplication.ContactEmail;
            applicationViewModel.AcknowledgementViewModel.ContactTitle = providerApplication.ContactTitle;

            applicationViewModel.FormViewModel = formViewModel;

            applicationViewModel.InstructorViewModel = new InstructorViewModel
            {
                Instructors = this._classroomInstructorService.SearchInstructors(new InstructorDTO
                {
                    ProviderProfileId = profile.ProviderProfileId
                })
            };

            applicationViewModel.ClassroomViewModel = new ClassroomViewModel
            {
                Classrooms = this._classroomInstructorService.SearchClassrooms(new ClassroomDTO
                {
                    ProviderProfileId = profile.ProviderProfileId
                })
            };

            applicationViewModel.ClassroomInstructorsViewModel = new ClassroomInstructorsViewModel
            {
                ClassroomInstructors = new List <ClassroomInstructorDTO>()
            };

            // Get associations and flatten our the relationship
            foreach (var instructor in applicationViewModel.InstructorViewModel.Instructors)
            {
                var classroomInstructors = this._classroomInstructorService.ListForInstructor(new ClassroomInstructorDTO
                {
                    Instructor        = instructor,
                    ProviderProfileId = instructor.ProviderProfileId
                });

                foreach (var cassroomInstructor in classroomInstructors)
                {
                    var assignment = new ClassroomInstructorDTO
                    {
                        Instructor     = instructor,
                        Classroom      = cassroomInstructor.Classroom,
                        LeadInstructor = cassroomInstructor.LeadInstructor
                    };

                    if (assignment != null)
                    {
                        applicationViewModel.ClassroomInstructorsViewModel.ClassroomInstructors.Add(assignment);
                    }
                }
            }

            var model       = new ReviewDetailsViewModel();
            var statusModel = new ReviewStatusModel(this.Role, providerApplication);

            model.ProviderID            = providerApplication.ProviderId.ToString();
            model.ProviderApplicationId = providerApplication.ProviderApplicationId.Value;

            if (comments != null)
            {
                model.CommentList = comments.ToList();
            }

            if (providerApplication.SubmissionStatus == ApplicationSubmissionStatus.AccessDenied &&
                !string.IsNullOrEmpty(providerApplication.ScreeningData))
            {
                model.Screening =
                    DOE.OELPFP.Common.Serialization.JsonSerializer.DeserializeFromString <ProviderApplicationScreeningDTO>(
                        providerApplication.ScreeningData);
            }

            model.PovertyTract = (bool)profile.IsPovertyTract ? "Yes" : "No";

            model.SubmissionStatus          = providerApplication.SubmissionStatus.GetValueOrDefault();
            model.SubmissionStatusDate      = providerApplication.SubmissionStatusDate;
            model.FormattedSubmissionStatus = statusModel.FormattedSubmissionStatus;

            if (providerApplication.SubmissionStatus == ApplicationSubmissionStatus.Completed && providerApplication.ReviewStatus.HasValue)
            {
                model.ReviewStatus          = providerApplication.ReviewStatus.Value;
                model.ReviewStatusDate      = providerApplication.ReviewStatusDate;
                model.FormattedReviewStatus = statusModel.FormattedReviewStatus;
            }

            model.Application = applicationViewModel;

            if (profile != null)
            {
                model.ELCCoalitionId   = profile.ELCCoalitionId.Value;
                model.ELCCoalitionName = profile.ELCCoalitionName;
                applicationViewModel.AcknowledgementViewModel.ProviderName = profile.ProviderName;

                if (profile.EligibilityOverrideDate.HasValue)
                {
                    model.Screening =
                        DOE.OELPFP.Common.Serialization.JsonSerializer.DeserializeFromString <ProviderApplicationScreeningDTO>(
                            providerApplication.ScreeningData);

                    model.EligibilityOverrideDate = profile.EligibilityOverrideDate;
                    model.EligibilityOverrideUser = profile.EligibilityOverrideUser;
                }

                model.SelectedProgramYearId = Convert.ToInt32(profile.ProgramYearId);
            }

            // Load the extra fields
            if (profileExtra != null)
            {
                applicationViewModel.ProfileViewModel.IsGoldSeal                  = (bool)profileExtra.IsGoldSeal;
                applicationViewModel.ProfileViewModel.AccreditingAssociation      = profileExtra.AccreditingAssociation;
                applicationViewModel.ProfileViewModel.OtherAccreditingAssociation = profileExtra.OtherAccreditingAssociation;
                applicationViewModel.ProfileViewModel.IsLicenseExempt             = profileExtra.LicenseExempt;
                applicationViewModel.ProfileViewModel.ChildAssessmentSystem       = profileExtra.ChildAssessmentSystem;
                applicationViewModel.ProfileViewModel.IsInQRIS = profileExtra.IsInQRIS;
            }

            if ((User.IsInRole(BusinessRole.OELReviewer) || User.IsInRole(BusinessRole.Administrator)) && Session["ApplicationSearch:iELCCoalitionId"] != null)
            {
                model.SelectedCoalitionId = Convert.ToInt32(Session["ApplicationSearch:iELCCoalitionId"]);
            }
            else
            {
                model.SelectedCoalitionId = model.ELCCoalitionId;
            }

            // Get all of the previous applications for the provider
            var previousApplications = _providerApplicationService.ListPreviousProviderApplications(new ProviderApplicationDTO
            {
                ProviderId    = profile.ProviderId,
                ProgramYearId = profile.ProgramYearId
            });

            foreach (var prevApp in previousApplications)
            {
                model.PreviousApplications.Add(new PreviousApplicationReviewDetailViewModel
                {
                    ProgramYearDesc = prevApp.ProgramYearDesc,
                    HasApplication  = prevApp.ProviderApplicationId.HasValue,
                    AppReviewStatus = prevApp.ReviewStatus
                });
            }

            //determine if application selection window is open
            var processControlService = new ProcessControlService();

            var applicationReviewQuery = new AvailableBusinessProcessQueryDTO();

            applicationReviewQuery.Roles = new[] { BusinessRole.Coalition };
            applicationReviewQuery.BusinessProcessType = BusinessProcessType.Review;

            var applicationReviewControls =
                processControlService.SearchAvailableBusinessProcesses(applicationReviewQuery)
                .Where(x => x.ProviderApplicationTypeId == this.ProviderApplicationTypeId)
                .OrderByDescending(x => x.AvailableStart)
                .ToList();

            var applicationReviewControl =
                applicationReviewControls.FirstOrDefault(
                    x => x.AvailableStart <= DateTime.Now && (x.AvailableEnd == null || x.AvailableEnd > DateTime.Now));

            if (applicationReviewControl == null)
            {
                model.IsApplicationSelectionWindowOpen = false;
            }
            else
            {
                model.IsApplicationSelectionWindowOpen = true;
            }

            //determine if application submission window is open

            var applicationSubmitQuery = new AvailableBusinessProcessQueryDTO();

            applicationSubmitQuery.Roles = new[] { BusinessRole.Provider };
            applicationSubmitQuery.BusinessProcessType = BusinessProcessType.Create;

            var applicationSubmitControls =
                processControlService.SearchAvailableBusinessProcesses(applicationSubmitQuery)
                .OrderByDescending(x => x.AvailableStart)
                .ToList();

            var applicationSubmitControl =
                applicationSubmitControls.FirstOrDefault(
                    x => x.AvailableStart <= DateTime.Now && (x.AvailableEnd == null || x.AvailableEnd > DateTime.Now));

            if (!(applicationSubmitControl == null) && profile.IsCurrentProgramYear)
            {
                model.IsApplicationSubmissionWindowOpen = true;
            }
            else
            {
                model.IsApplicationSubmissionWindowOpen = false;
            }

            return(model);
        }