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, }); }
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); }
protected ReadOnlyUrl GetPaymentUrl(Guid jobAdId, JobAdFeaturePack featurePack) { return(new ReadOnlyApplicationUrl( true, "~/employers/jobads/jobad/payment", new ReadOnlyQueryString( "jobAdId", jobAdId.ToString(), "featurePack", featurePack.ToString()))); }
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()); }
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), }); }
JobAdFeatureBoost IEmployerOrdersQuery.GetJobAdFeatureBoost(JobAdFeaturePack featurePack) { switch (featurePack) { case JobAdFeaturePack.FeaturePack2: return(JobAdFeatureBoost.High); case JobAdFeaturePack.FeaturePack1: return(JobAdFeatureBoost.Low); default: return(JobAdFeatureBoost.None); } }
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); } }
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; }
public ActionResult PaymentCancel(Guid jobAdId, JobAdFeaturePack featurePack) { return(RedirectToRoute(JobAdsRoutes.Preview, new { jobAdId, featurePack })); }
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, })); }
protected void AssertPaymentPage(Guid jobAdId, JobAdFeaturePack featurePack) { AssertUrl(GetPaymentUrl(jobAdId, featurePack)); }