Exemplo n.º 1
0
        private PreviewJobAdModel GetPreviewJobAdModel(IUser employer, JobAd jobAd, JobAdFeaturePack featurePack)
        {
            var canBeOpened = _jobAdsCommand.CanBeOpened(jobAd);
            var expiryTime  = canBeOpened ? GetExpiryTime(jobAd.ExpiryTime, jobAd.Features) : GetExpiryTime(null, jobAd.Features);

            // For the purposes of previewing the job ad treat it as if it is open no matter what its real status is.

            var status = jobAd.Status;

            jobAd.Status = JobAdStatus.Open;

            // Preview the job ad as an anonymous member.

            var view = _memberJobAdViewsQuery.GetMemberJobAdView(null, jobAd);

            return(new PreviewJobAdModel
            {
                JobAd = view,
                JobAdCredits = GetJobAdCredits(employer),
                Status = status,
                ExpiryTime = expiryTime,
                CanBeOpened = canBeOpened,
                JobPoster = employer,
                FeaturePack = featurePack,
                Features = GetFeatures(),
                OrganisationCssFile = employer is IEmployer?HttpContext.GetOrganisationJobAdCssFile(((IEmployer)employer).Organisation.Id) : null,
            });
        }
Exemplo n.º 2
0
        public ActionResult Payment(Guid jobAdId, JobAdFeaturePack featurePack)
        {
            var employer = CurrentEmployer;

            var jobAd = GetJobAd(employer.Id, jobAdId);

            if (jobAd == null)
            {
                return(NotFound("job ad", "id", jobAdId));
            }

            var product = _employerOrdersQuery.GetJobAdFeaturePackProduct(featurePack);

            if (product == null)
            {
                return(NotFound("feature pack", "featurePack", featurePack));
            }

            var creditCard = new CreditCard {
                ExpiryDate = GetDefaultExpiryDate()
            };
            var order = _employerOrdersCommand.PrepareOrder(new[] { product.Id }, null, null, GetCreditCardType(creditCard));

            return(View(new PaymentJobAdModel
            {
                AuthoriseCreditCard = false,
                CouponCode = null,
                CreditCard = creditCard,
                OrderDetails = _employerOrdersQuery.GetOrderDetails(_creditsQuery, order, _productsQuery.GetProducts()),
                Product = product,
            }));
        }
        private Order AssertOrder(Guid employerId, JobAdFeaturePack featurePack)
        {
            var orders = _ordersQuery.GetOrders(employerId);

            Assert.AreEqual(1, orders.Count);
            var order = orders[0];

            Assert.AreEqual(featurePack == JobAdFeaturePack.FeaturePack1 ? 10m : 20m, order.Price);
            Assert.AreEqual(featurePack == JobAdFeaturePack.FeaturePack1 ? 11m : 22m, order.AdjustedPrice);
            Assert.AreEqual(employerId, order.OwnerId);
            Assert.AreEqual(employerId, order.PurchaserId);

            Assert.AreEqual(1, order.Adjustments.Count);
            var adjustment = order.Adjustments[0];

            Assert.AreEqual(featurePack == JobAdFeaturePack.FeaturePack1 ? 11m : 22m, adjustment.AdjustedPrice);
            Assert.AreEqual(featurePack == JobAdFeaturePack.FeaturePack1 ? 10m : 20m, adjustment.InitialPrice);

            Assert.AreEqual(1, order.Items.Count);
            var item = order.Items[0];

            Assert.AreEqual(featurePack == JobAdFeaturePack.FeaturePack1 ? 10m : 20m, item.Price);

            var product = _employerOrdersQuery.GetJobAdFeaturePackProduct(featurePack);

            Assert.AreEqual(product.Id, item.ProductId);

            return(order);
        }
Exemplo n.º 4
0
 protected ReadOnlyUrl GetPaymentUrl(Guid jobAdId, JobAdFeaturePack featurePack)
 {
     return(new ReadOnlyApplicationUrl(
                true,
                "~/employers/jobads/jobad/payment",
                new ReadOnlyQueryString(
                    "jobAdId", jobAdId.ToString(),
                    "featurePack", featurePack.ToString())));
 }
Exemplo n.º 5
0
        Product IEmployerOrdersQuery.GetJobAdFeaturePackProduct(JobAdFeaturePack featurePack)
        {
            // Get all products for employers.

            var products = _productsQuery.GetProducts(UserType.Employer);

            return((from p in products
                    where p.Name == featurePack.ToString()
                    select p).SingleOrDefault());
        }
Exemplo n.º 6
0
        private JobAdFeaturesModel GetFeatures(JobAdFeaturePack featurePack)
        {
            var features = _employerOrdersQuery.GetJobAdFeatures(featurePack);

            return(new JobAdFeaturesModel
            {
                ShowLogo = features.IsFlagSet(JobAdFeatures.Logo),
                IsHighlighted = features.IsFlagSet(JobAdFeatures.Highlight),
                ExpiryTime = GetExpiryTime(null, features),
            });
        }
Exemplo n.º 7
0
        JobAdFeatureBoost IEmployerOrdersQuery.GetJobAdFeatureBoost(JobAdFeaturePack featurePack)
        {
            switch (featurePack)
            {
            case JobAdFeaturePack.FeaturePack2:
                return(JobAdFeatureBoost.High);

            case JobAdFeaturePack.FeaturePack1:
                return(JobAdFeatureBoost.Low);

            default:
                return(JobAdFeatureBoost.None);
            }
        }
Exemplo n.º 8
0
        JobAdFeatures IEmployerOrdersQuery.GetJobAdFeatures(JobAdFeaturePack featurePack)
        {
            switch (featurePack)
            {
            case JobAdFeaturePack.FeaturePack2:
                return(JobAdFeatures.Logo | JobAdFeatures.ExtendedExpiry | JobAdFeatures.Refresh | JobAdFeatures.Highlight);

            case JobAdFeaturePack.FeaturePack1:
                return(JobAdFeatures.Logo | JobAdFeatures.ExtendedExpiry);

            default:
                return(JobAdFeatures.None);
            }
        }
Exemplo n.º 9
0
        private void UpdateJobAd(JobAd jobAd, JobAdModel jobAdModel)
        {
            // Validate it first after updating the content.

            jobAdModel.Summary = HtmlUtil.TextToHtml(jobAdModel.Summary);
            jobAdModel.Content = HtmlUtil.TextToHtml(jobAdModel.Content);

            IList <ValidationError> errors = new List <ValidationError>();

            try
            {
                jobAdModel.Validate();
            }
            catch (ValidationErrorsException ex)
            {
                // If there are errors then need to put things back the way they were.

                jobAdModel.Summary = HtmlUtil.HtmlToText(jobAdModel.Summary);
                jobAdModel.Content = HtmlUtil.HtmlToText(jobAdModel.Content);

                errors = ex.Errors.ToList();
            }

            // Need to explicitly check these.

            if (jobAdModel.ContactDetails == null || string.IsNullOrEmpty(jobAdModel.ContactDetails.EmailAddress))
            {
                errors.Add(new RequiredValidationError("email address"));
            }

            if (jobAdModel.ContactDetails != null && !string.IsNullOrEmpty(jobAdModel.ContactDetails.PhoneNumber))
            {
                IValidator validator = new PhoneNumberValidator();
                if (!validator.IsValid(jobAdModel.ContactDetails.PhoneNumber))
                {
                    errors = errors.Concat(validator.GetValidationErrors("PhoneNumber")).ToList();
                }
            }

            if (jobAdModel.ContactDetails != null && !string.IsNullOrEmpty(jobAdModel.ContactDetails.FaxNumber))
            {
                IValidator validator = new PhoneNumberValidator();
                if (!validator.IsValid(jobAdModel.ContactDetails.FaxNumber))
                {
                    errors = errors.Concat(validator.GetValidationErrors("FaxNumber")).ToList();
                }
            }

            if (jobAdModel.IndustryIds.IsNullOrEmpty())
            {
                errors.Add(new RequiredValidationError("industry"));
            }

            if (jobAdModel.JobTypes == JobTypes.None)
            {
                errors.Add(new RequiredValidationError("job type"));
            }

            if (jobAdModel.Location == null || string.IsNullOrEmpty(jobAdModel.Location.ToString()))
            {
                errors.Add(new RequiredValidationError("location"));
            }

            const JobAdFeaturePack featurePack = JobAdFeaturePack.BaseFeaturePack;
            var features          = _employerOrdersQuery.GetJobAdFeatures(featurePack);
            var defaultExpiryTime = _jobAdsCommand.GetDefaultExpiryTime(features);

            if (jobAdModel.ExpiryTime != null)
            {
                if (jobAdModel.ExpiryTime.Value > defaultExpiryTime)
                {
                    errors.Add(new JobAdExpiryValidationError("ExpiryTime", (defaultExpiryTime - DateTime.Now).Days + 1));
                }
            }

            if (errors.Count > 0)
            {
                throw new ValidationErrorsException(errors);
            }

            // Assign.

            jobAd.Title          = jobAdModel.Title;
            jobAd.ContactDetails = jobAdModel.ContactDetails;
            jobAd.Features       = features;
            jobAd.FeatureBoost   = _employerOrdersQuery.GetJobAdFeatureBoost(featurePack);

            // If the date has not been changed from the default then let it remain the default.

            jobAd.ExpiryTime = jobAd.ExpiryTime == null && jobAdModel.ExpiryTime != null && jobAdModel.ExpiryTime.Value.Date == defaultExpiryTime.Date
                ? null
                : jobAdModel.ExpiryTime;

            jobAd.Visibility.HideCompany        = jobAdModel.HideCompany;
            jobAd.Visibility.HideContactDetails = jobAdModel.HideContactDetails;

            jobAd.Integration.ExternalReferenceId = jobAdModel.ExternalReferenceId;

            jobAd.LogoId = jobAdModel.Logo == null ? null : jobAdModel.Logo.FileReferenceId;

            jobAd.Description.Content           = jobAdModel.Content;
            jobAd.Description.CompanyName       = jobAdModel.CompanyName;
            jobAd.Description.PositionTitle     = jobAdModel.PositionTitle;
            jobAd.Description.ResidencyRequired = jobAdModel.ResidencyRequired;
            jobAd.Description.JobTypes          = jobAdModel.JobTypes;
            jobAd.Description.Industries        = jobAdModel.IndustryIds == null
                ? new List <Industry>()
                : (from i in jobAdModel.IndustryIds select _industriesQuery.GetIndustry(i)).ToList();
            jobAd.Description.Summary      = jobAdModel.Summary;
            jobAd.Description.Salary       = jobAdModel.Salary;
            jobAd.Description.Package      = jobAdModel.Package;
            jobAd.Description.BulletPoints = jobAdModel.BulletPoints;
            jobAd.Description.Location     = jobAdModel.Location;
        }
Exemplo n.º 10
0
 public ActionResult PaymentCancel(Guid jobAdId, JobAdFeaturePack featurePack)
 {
     return(RedirectToRoute(JobAdsRoutes.Preview, new { jobAdId, featurePack }));
 }
Exemplo n.º 11
0
        public ActionResult PaymentPurchase(Guid jobAdId, JobAdFeaturePack featurePack, Guid?couponId, CreditCard creditCard, CheckBoxValue authoriseCreditCard)
        {
            var employer = CurrentEmployer;

            var jobAd = GetJobAd(employer.Id, jobAdId);

            if (jobAd == null)
            {
                return(NotFound("job ad", "id", jobAdId));
            }

            var product = _employerOrdersQuery.GetJobAdFeaturePackProduct(featurePack);

            if (product == null)
            {
                return(NotFound("feature pack", "featurePack", featurePack));
            }

            var coupon = GetCoupon(couponId);
            var order  = _employerOrdersCommand.PrepareOrder(new[] { product.Id }, coupon, null, GetCreditCardType(creditCard));

            try
            {
                // Validate the coupon first.

                ValidateCoupon(product.Id, couponId, coupon);

                // Check that the terms have been accepted but process the other fields as well.

                if (!authoriseCreditCard.IsChecked)
                {
                    ModelState.AddModelError(new[] { new CreditCardAuthorisationValidationError("authoriseCreditCard") }, new NewOrderErrorHandler());
                }

                // Validate the coupon.

                if (couponId != null && coupon == null)
                {
                    ModelState.AddModelError(new[] { new NotFoundValidationError("coupon", couponId) }, new NewOrderErrorHandler());
                }

                // Validate the credit card.

                creditCard.Validate();

                if (authoriseCreditCard.IsChecked && (couponId == null || coupon != null))
                {
                    // Purchase the order.

                    _employerOrdersCommand.PurchaseOrder(employer.Id, order, CreatePurchaser(employer), creditCard);

                    // Publish the job ad with the appropriate features.

                    jobAd.Features     = _employerOrdersQuery.GetJobAdFeatures(featurePack);
                    jobAd.FeatureBoost = _employerOrdersQuery.GetJobAdFeatureBoost(featurePack);
                    _employerJobAdsCommand.UpdateJobAd(employer, jobAd);

                    return(Publish(employer, jobAd, order.Id));
                }
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new NewOrderErrorHandler());
            }

            // Show the user the errors.

            return(View(new PaymentJobAdModel
            {
                AuthoriseCreditCard = authoriseCreditCard != null && authoriseCreditCard.IsChecked,
                CouponCode = coupon == null ? null : coupon.Code,
                CreditCard = creditCard,
                OrderDetails = _employerOrdersQuery.GetOrderDetails(_creditsQuery, order, _productsQuery.GetProducts()),
                Product = product,
            }));
        }
Exemplo n.º 12
0
 protected void AssertPaymentPage(Guid jobAdId, JobAdFeaturePack featurePack)
 {
     AssertUrl(GetPaymentUrl(jobAdId, featurePack));
 }