示例#1
0
        public PostAdvertResponseMessage PostAdvert(PostAdvertRequestMessage request)
        {
            const string method = "PostAdvert";

            EventSource.Raise(Event.Information, method, Event.Arg("request", request));

            IntegratorUser integratorUser;
            IEmployer      jobPoster;

            CheckUser(request.UserCredentials, out integratorUser, out jobPoster);

            var errors = new List <string>();
            var report = new PostAdvertReport();

            foreach (var postAd in request.PostAdvert.Adverts.PostAdvert)
            {
                report.JobAds++;

                try
                {
                    if (_jobAdIntegrationQuery.GetOpenJobAdIds(integratorUser.Id, postAd.JobReference).Count != 0)
                    {
                        // Already exists as a JobG8 ad

                        var message = string.Format("Job ad to be posted, '{0}', already exists.", postAd.JobReference);
                        EventSource.Raise(Event.Error, method, message, Event.Arg("postAd", postAd));
                        errors.Add(message);
                        report.Duplicates++;
                    }
                    else
                    {
                        var jobAd = MapJobAd(postAd);
                        jobAd.PosterId     = jobPoster.Id;
                        jobAd.Features     = _jobAdIntegrationQuery.GetDefaultFeatures();
                        jobAd.FeatureBoost = _jobAdIntegrationQuery.GetDefaultFeatureBoost();
                        jobAd.Integration.IntegratorUserId = integratorUser.Id;

                        if (_externalJobAdsCommand.CanCreateJobAd(jobAd))
                        {
                            _jobAdsCommand.CreateJobAd(jobAd);

                            // The application form, for now, needs to be directly saved into the database.

                            _jobAdsCommand.CreateApplicationRequirements(jobAd.Id, postAd.ApplicationFormXML);
                            _jobAdsCommand.OpenJobAd(jobAd);

                            report.Posted++;
                        }
                        else
                        {
                            var message = string.Format("Job ad to be posted, '{0}' ([{1}] '{2}')," + " was already posted by another integrator.", postAd.JobReference, postAd.ClientReference, postAd.Position);
                            EventSource.Raise(Event.Error, method, message, Event.Arg("postAd", postAd));
                            errors.Add(message);
                        }
                    }
                }
                catch (ServiceEndUserException e)
                {
                    EventSource.Raise(Event.Error, method, e, null, Event.Arg("postAd", postAd));
                    errors.Add(string.Format("JobReference='{0}': {1}", postAd.JobReference, e.Message));
                    report.Failed++;
                }
                catch (Exception e)
                {
                    EventSource.Raise(Event.Error, method, e, null, Event.Arg("postAd", postAd));
                    errors.Add(string.Format("JobReference='{0}': Unexpected error.", postAd.JobReference));
                    report.Failed++;
                }
            }

            // Record it.

            _jobAdIntegrationReportsCommand.CreateJobAdIntegrationEvent(new JobAdImportPostEvent {
                Success = true, IntegratorUserId = integratorUser.Id, PosterId = jobPoster.Id, JobAds = report.JobAds, Failed = report.Failed, Posted = report.Posted, Duplicates = report.Duplicates
            });

            var response = new PostAdvertResponseMessage
            {
                PostAdvertResponse = new Response {
                    Success = string.Join("\r\n", errors.ToArray())
                }
            };

            EventSource.Raise(Event.Information, method, string.Format("{0} ads processed; {1} new ads, {2} duplicate ads, {3} errors.", report.JobAds, report.Posted, report.Duplicates, report.Failed), Event.Arg("response", response));
            return(response);
        }