示例#1
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;
        }