public ActionResult JoinCourse(string courseNiceUrl)
        {
            Course course = _coursesContent.GetCourseByNiceUrl(courseNiceUrl);

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

            string             username           = User.Identity.Name;
            SubscriptionStatus subscriptionStatus = _subscriptions.GetSubscriptionStatus(username, course.Id);

            if (subscriptionStatus == SubscriptionStatus.Active)
            {
                IPublishedContent coursesPage = _coursesContent.GetCoursePublishedContentByNiceUrl(courseNiceUrl);
                return(Redirect(coursesPage.Url));
            }
            else if (subscriptionStatus == SubscriptionStatus.AwaitingPayment)
            {
                return(RedirectToAction(nameof(AwaitingPayment), new { courseNiceUrl = courseNiceUrl }));
            }

            JoinCourseViewModel viewModel = new JoinCourseViewModel
            {
                CourseName          = course.Title,
                CoursePrice         = course.Price,
                RequiresBillingInfo = _courses.IsPaidCourse(course)
            };

            if (viewModel.RequiresBillingInfo)
            {
                User user = _users.GetByUsername(username);
                viewModel.BillingInfo = Mapper.Map <BillingInfoViewModel>(user.BillingInfo);
            }

            IPublishedContent legalPage = Umbraco.TypedContentAtRoot().DescendantsOrSelf(nameof(LegalContent)).FirstOrDefault();
            int licenseAgreement        = legalPage.GetPropertyValue <int>(nameof(LegalContent.LicenseTerms));

            if (licenseAgreement != default(int))
            {
                IPublishedContent licenseAgreementPage = Umbraco.TypedContent(licenseAgreement);
                viewModel.LicenseTermsUrl = licenseAgreementPage.Url;
            }



            return(View(viewModel));
        }
        public JoinCourseViewModelValidator(ICoursesContentService coursesContent, ICoursesService courses)
        {
            _coursesContent = coursesContent;
            _courses        = courses;

            RuleFor(x => x.AcceptLicenseTerms).Equal(true).WithMessage("Трябва да приемете общите условия");
            When(
                x =>
            {
                Course course = _coursesContent.GetCourseByNiceUrl(x.CourseNiceUrl);
                return(_courses.IsPaidCourse(course));
            },
                () =>
            {
                RuleFor(x => x.BillingInfo)
                .NotNull()
                .WithMessage("Моля попълнете информацията за фактура");
            });
        }