예제 #1
0
        public ActionResult ApplyWithUploadedResume(Guid jobAdId, Guid fileReferenceId, bool useForProfile, string coverLetterText)
        {
            try
            {
                var jobAd = GetJobAd(jobAdId, JobAdProcessing.ManagedExternally, JobAdProcessing.ManagedInternally);
                if (jobAd == null)
                {
                    return(JsonNotFound("job ad"));
                }

                // Check the file exists.

                var fileReference = _filesQuery.GetFileReference(fileReferenceId);
                if (fileReference == null)
                {
                    return(JsonNotFound("file"));
                }

                // Process the application.

                var applicationId = jobAd.Application.Questions.IsNullOrEmpty()
                    ? _memberJobAdApplicationsCommand.SubmitApplicationWithResume(CurrentMember, jobAd, fileReferenceId, useForProfile, coverLetterText)
                    : _memberJobAdApplicationsCommand.CreateApplicationWithResume(CurrentMember, jobAd, fileReferenceId, useForProfile, coverLetterText);
                return(Json(new JsonApplicationResponseModel {
                    Id = applicationId
                }));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonResponseModel()));
        }
예제 #2
0
        public ActionResult DownloadResume(Guid fileReferenceId)
        {
            try
            {
                var member = CurrentMember;

                // Make sure the file is on of the member's resume files.

                var resumeFileReference = _candidateResumeFilesQuery.GetResumeFile(member.Id, fileReferenceId);
                if (resumeFileReference == null)
                {
                    return(HttpNotFound());
                }

                var fileReference = _filesQuery.GetFileReference(fileReferenceId);
                if (fileReference == null)
                {
                    return(HttpNotFound());
                }

                return(File(_filesQuery.OpenFile(fileReference), fileReference.MediaType, fileReference.FileName));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(View("Error"));
        }
예제 #3
0
        private string GetJobApplication(InternalApplication application, Member member)
        {
            var candidate = _candidatesQuery.GetCandidate(member.Id);
            var resume    = application.ResumeId == null || candidate.ResumeId == null
                ? null
                : _resumesQuery.GetResume(candidate.ResumeId.Value);

            var file = application.ResumeFileId != null
                ? _filesQuery.GetFileReference(application.ResumeFileId.Value)
                : null;

            return(GetResponseXml(member, resume, file));
        }
예제 #4
0
        public void TestUploadPhoto()
        {
            var member = CreateMember(0);

            LogIn(member);

            Get(HttpStatusCode.NotFound, _photoUrl);

            // Upload.

            var filePath = FileSystem.GetAbsolutePath(@"Test\Data\Photos\ProfilePhoto.jpg", RuntimeEnvironment.GetSourceFolder());
            var model    = UploadPhoto(filePath);

            AssertJsonSuccess(model);
            Assert.IsNotNull(model.PhotoId);

            // Get the new photo.

            Get(_photoUrl);
            Assert.AreEqual("image/jpeg", Browser.ResponseHeaders["Content-Type"]);

            // Check the member.

            member = _membersQuery.GetMember(member.Id);
            Assert.IsNotNull(member.PhotoId);

            // Check the file.

            var fileReference = _filesQuery.GetFileReference(member.PhotoId.Value);

            Assert.AreEqual(Path.GetFileName(filePath), fileReference.FileName);
            Assert.AreEqual("image/jpeg", fileReference.MediaType);
            Assert.AreEqual(".jpg", fileReference.FileData.FileExtension);
            Assert.AreEqual(FileType.ProfilePhoto, fileReference.FileData.FileType);
        }
예제 #5
0
        private Guid GetResumeFileId(Guid memberId, Guid fileReferenceId, bool useForProfile)
        {
            // Make sure the id is valid.

            var fileReference = _filesQuery.GetFileReference(fileReferenceId);

            if (fileReference == null)
            {
                throw new NoResumeFileException();
            }

            // Create or update the resume file reference.

            var resumeFileReference = _candidateResumeFilesQuery.GetResumeFile(memberId, fileReference.Id);

            if (resumeFileReference != null)
            {
                _candidateResumeFilesCommand.UpdateLastUsedTime(resumeFileReference);
            }
            else
            {
                resumeFileReference = new ResumeFileReference {
                    FileReferenceId = fileReference.Id
                };
                _candidateResumeFilesCommand.CreateResumeFile(memberId, resumeFileReference);
            }

            if (useForProfile)
            {
                CreateResume(memberId, fileReference);
            }

            return(fileReferenceId);
        }
예제 #6
0
        private ResumeFileModel GetLastUsedResumeFile(IHasId <Guid> member)
        {
            if (member == null)
            {
                return(null);
            }
            var resumeFile = _candidateResumeFilesQuery.GetLastUsedResumeFile(member.Id);

            if (resumeFile == null)
            {
                return(null);
            }
            var fileReference = _filesQuery.GetFileReference(resumeFile.FileReferenceId);

            if (fileReference == null)
            {
                return(null);
            }

            return(new ResumeFileModel
            {
                FileReferenceId = resumeFile.FileReferenceId,
                FileName = fileReference.FileName,
            });
        }
예제 #7
0
        private ActionResult GetResumeFile(Guid fileId)
        {
            const string method = "Resume";

            try
            {
                // Look for the file first.

                var file = _filesQuery.GetFileReference(fileId);
                if (file == null || file.FileData.FileType != FileType.Resume)
                {
                    return(HttpNotFound());
                }

                // Authenticate.

                _serviceAuthenticationManager.AuthenticateRequest(HttpContext, IntegratorPermissions.GetJobApplication);

                return(File(_filesQuery.OpenFile(file), file.MediaType, file.FileName));
            }
            catch (Exception ex)
            {
                EventSource.Raise(Event.Error, method, "Cannot process the request.", ex, new StandardErrorHandler());
                return(new TextResult("Error: " + ex.Message));
            }
        }
예제 #8
0
        public ActionResult Photo(Guid candidateId)
        {
            // Get the employer.

            var employer = CurrentEmployer;

            // Get the view to the member.

            var view = _employerMemberViewsQuery.GetProfessionalView(employer, candidateId);

            if (view.PhotoId == null)
            {
                return(HttpNotFound());
            }

            // Return the file.

            var fileReference = _filesQuery.GetFileReference(view.PhotoId.Value);

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

            return(File(_filesQuery.OpenFile(fileReference), fileReference.MediaType));
        }
예제 #9
0
        public void TestSave()
        {
            Guid fileReferenceId;

            var filePath = FileSystem.GetAbsolutePath(@"Test\Data\Photos\ProfilePhoto.jpg", RuntimeEnvironment.GetSourceFolder());

            using (var stream = File.Open(filePath, FileMode.Open))
            {
                fileReferenceId = _employerLogosCommand.SaveLogo(new StreamFileContents(stream), filePath).Id;
            }

            var fileReference = _filesQuery.GetFileReference(fileReferenceId);

            Assert.AreEqual(Path.GetFileName(filePath), fileReference.FileName);
            Assert.AreEqual("image/jpeg", fileReference.MediaType);
            Assert.AreEqual(".jpg", fileReference.FileData.FileExtension);
            Assert.AreEqual(FileType.CompanyLogo, fileReference.FileData.FileType);
        }
예제 #10
0
        private void AssertFile(string expectedFileName, string expectedMimeType, Guid fileReferenceId)
        {
            var fileReference = _filesQuery.GetFileReference(fileReferenceId);

            Assert.AreEqual(expectedFileName, fileReference.FileName);
            Assert.AreEqual(expectedMimeType, fileReference.MediaType);
            Assert.AreEqual(Path.GetExtension(expectedFileName), fileReference.FileData.FileExtension);
            Assert.AreEqual(FileType.Resume, fileReference.FileData.FileType);
        }
예제 #11
0
        private void AssertAttachment(JsonFileModel model, MemberMessageAttachment attachment)
        {
            Assert.AreEqual(model.Id, attachment.Id);
            var fileReference = _filesQuery.GetFileReference(attachment.FileReferenceId);

            Assert.IsNotNull(fileReference);
            Assert.AreEqual(model.Name, fileReference.FileName);
            Assert.AreEqual(model.Size, fileReference.FileData.ContentLength);
        }
예제 #12
0
        private void SendEmailWithResumeFile(InternalApplication application, ICommunicationUser member, JobAd jobAd)
        {
            var fileReference = _filesQuery.GetFileReference(application.ResumeFileId.Value);
            var stream        = _filesQuery.OpenFile(fileReference);

            // Send the email.

            _emailsCommand.TrySend(new JobApplicationEmail(member, application, jobAd, stream, fileReference.FileName));
        }
예제 #13
0
        private void AssertFileReference(string expectedFileName, Guid fileReferenceId)
        {
            var expectedFileNameExtension = Path.GetExtension(expectedFileName);
            var file = _filesQuery.GetFileReference(fileReferenceId);

            Assert.IsNotNull(file);
            Assert.AreEqual(expectedFileName, file.FileName);
            Assert.AreEqual(expectedFileNameExtension, file.FileData.FileExtension);
            Assert.AreEqual(expectedFileNameExtension == ".doc" ? "application/msword" : "application/octet-stream", file.MediaType);
            Assert.AreEqual(FileType.Resume, file.FileData.FileType);
        }
예제 #14
0
        private void SendResumeFile(InternalApplication application, ICommunicationUser member, JobAdEntry jobAd, IEnumerable <ApplicationAnswer> answers)
        {
            // Open the file and send it.

            var resumeFileReference = _filesQuery.GetFileReference(application.ResumeFileId.Value);

            using (var stream = _filesQuery.OpenFile(resumeFileReference))
            {
                _sendJobG8Command.SendApplication(member, jobAd, resumeFileReference.FileName, new StreamFileContents(stream), application, answers);
            }
        }
예제 #15
0
        private void AssertFile(Guid fileId, string filePath)
        {
            var file      = _filesQuery.GetFileReference(fileId);
            var extension = Path.GetExtension(filePath);

            Assert.IsNotNull(file);
            Assert.AreEqual(Path.GetFileName(filePath), file.FileName);
            Assert.AreEqual(extension == ".jpg" ? "image/jpeg" : "image/png", file.MediaType);
            Assert.AreEqual(extension, file.FileData.FileExtension);
            Assert.AreEqual(FileType.CompanyLogo, file.FileData.FileType);
        }
예제 #16
0
        private string GetLastUsedResumeFileName(Guid applicantId)
        {
            var resumeFile = _candidateResumeFilesQuery.GetLastUsedResumeFile(applicantId);

            if (resumeFile == null)
            {
                return(null);
            }
            var fileReference = _filesQuery.GetFileReference(resumeFile.FileReferenceId);

            return(fileReference == null ? null : fileReference.FileName);
        }
예제 #17
0
        public ActionResult Photo(Guid id)
        {
            // Get the file reference.

            var file = _filesQuery.GetFileReference(id);

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

            // Write the file out.

            return(File(_filesQuery.OpenFile(file), file.MediaType));
        }
예제 #18
0
        public ActionResult Logo(Guid fileId)
        {
            // Look for the file.
            // No checks are made etc to determine whether the current user uploaded the logo.

            var fileReference = _filesQuery.GetFileReference(fileId);

            if (fileReference == null || fileReference.FileData.FileType != FileType.CompanyLogo)
            {
                return(HttpNotFound());
            }

            // Return the file.

            return(File(_filesQuery.OpenFile(fileReference), fileReference.MediaType));
        }
예제 #19
0
        public ActionResult Logo(Guid jobAdId)
        {
            var jobAd = _jobAdsQuery.GetJobAd <JobAd>(jobAdId);

            if (jobAd == null || jobAd.LogoId == null || !jobAd.Features.IsFlagSet(JobAdFeatures.Logo))
            {
                return(HttpNotFound());
            }

            var fileReference = _filesQuery.GetFileReference(jobAd.LogoId.Value);

            if (fileReference == null || fileReference.FileData.FileType != FileType.CompanyLogo)
            {
                return(HttpNotFound());
            }

            // Return the file.

            return(File(_filesQuery.OpenFile(fileReference), fileReference.MediaType));
        }
예제 #20
0
        public ActionResult Photo(Guid friendId)
        {
            var friend = _membersQuery.GetMember(friendId);

            if (friend == null || friend.PhotoId == null)
            {
                return(HttpNotFound());
            }

            var fileReference = _filesQuery.GetFileReference(friend.PhotoId.Value);

            if (fileReference == null || fileReference.FileData.FileType != FileType.ProfilePhoto)
            {
                return(HttpNotFound());
            }

            // Return the file.

            return(File(_filesQuery.OpenFile(fileReference), fileReference.MediaType));
        }
예제 #21
0
        public ActionResult Parse(Guid fileReferenceId)
        {
            try
            {
                var member    = CurrentMember;
                var candidate = _candidatesQuery.GetCandidate(member.Id);

                // Load the resume.

                var fileReference = _filesQuery.GetFileReference(fileReferenceId);
                if (fileReference == null)
                {
                    return(JsonNotFound("file"));
                }

                // Parse it.

                var parsedResume = _parseResumesCommand.ParseResume(fileReference);
                if (parsedResume.Resume == null || parsedResume.Resume.IsEmpty)
                {
                    throw new InvalidResumeException();
                }

                // Save the parsed resume.

                var resume = parsedResume.Resume;
                _candidateResumesCommand.CreateResume(candidate, resume, fileReference);

                return(Json(new JsonProfileModel {
                    Profile = CreateProfileModel(member, candidate, resume)
                }));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonResponseModel()));
        }
예제 #22
0
        public ActionResult Parse(Guid fileReferenceId)
        {
            Guid?parsedResumeId = null;

            try
            {
                // Load the resume.

                var fileReference = _filesQuery.GetFileReference(fileReferenceId);
                if (fileReference == null)
                {
                    return(JsonNotFound("file"));
                }

                var stream       = _filesQuery.OpenFile(fileReference);
                var parsedResume = _parseResumesCommand.ParseResume(stream, fileReference.FileName);

                // Save the parsed resume.

                _parsedResumesCommand.CreateParsedResume(parsedResume);
                parsedResumeId = parsedResume.Id;

                if (parsedResume.Resume == null || parsedResume.Resume.IsEmpty)
                {
                    throw new InvalidResumeException();
                }
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonParsedResumeModel
            {
                Id = parsedResumeId,
            }));
        }
예제 #23
0
        private void UpdateMember(Member member, PersonalDetailsMemberModel memberModel)
        {
            var candidate = _candidatesQuery.GetCandidate(member.Id);

            member.FirstName      = memberModel.FirstName;
            member.LastName       = memberModel.LastName;
            member.EmailAddresses = new List <EmailAddress> {
                new EmailAddress {
                    Address = memberModel.EmailAddress
                }
            };

            // Address.

            member.Address = new Address {
                Location = _locationQuery.ResolveLocation(_locationQuery.GetCountry(memberModel.CountryId), memberModel.Location)
            };

            // Phone number.

            if (member.PhoneNumbers == null || member.PhoneNumbers.Count == 0)
            {
                member.PhoneNumbers = new List <PhoneNumber>
                {
                    new PhoneNumber {
                        Number = memberModel.PhoneNumber, Type = memberModel.PhoneNumberType
                    }
                };
            }
            else
            {
                member.PhoneNumbers[0].Number = memberModel.PhoneNumber;
                member.PhoneNumbers[0].Type   = memberModel.PhoneNumberType;
            }

            // Visibility. Start with the current and then ensure each is set as appropriate.

            var visibility = member.VisibilitySettings.Professional.EmploymentVisibility;

            visibility = visibility.SetFlag(ProfessionalVisibility.Resume, memberModel.Visibility.IsFlagSet(ProfessionalVisibility.Resume));
            if (visibility.IsFlagSet(ProfessionalVisibility.Resume))
            {
                visibility = visibility.SetFlag(ProfessionalVisibility.Name, memberModel.Visibility.IsFlagSet(ProfessionalVisibility.Name));
                visibility = visibility.SetFlag(ProfessionalVisibility.PhoneNumbers, memberModel.Visibility.IsFlagSet(ProfessionalVisibility.PhoneNumbers));
                visibility = visibility.SetFlag(ProfessionalVisibility.RecentEmployers, memberModel.Visibility.IsFlagSet(ProfessionalVisibility.RecentEmployers));
            }
            else
            {
                visibility = visibility.ResetFlag(ProfessionalVisibility.Name);
                visibility = visibility.ResetFlag(ProfessionalVisibility.PhoneNumbers);
                visibility = visibility.ResetFlag(ProfessionalVisibility.RecentEmployers);
            }

            visibility = visibility.SetFlag(ProfessionalVisibility.Salary, memberModel.Visibility.IsFlagSet(ProfessionalVisibility.Salary));

            member.VisibilitySettings.Professional.EmploymentVisibility = visibility;

            // Update the member.

            _memberAccountsCommand.UpdateMember(member);

            // Status.

            candidate.Status        = memberModel.Status ?? Defaults.CandidateStatus;
            candidate.DesiredSalary = memberModel.SalaryLowerBound == null
                ? null
                : new Salary {
                LowerBound = memberModel.SalaryLowerBound, Currency = Currency.AUD, Rate = memberModel.SalaryRate
            };

            // Update the candidate.

            _candidatesCommand.UpdateCandidate(candidate);

            // Save the uploaded resume for the member.

            if (Pageflow.FileReferenceId != null)
            {
                var fileReference = _filesQuery.GetFileReference(Pageflow.FileReferenceId.Value);
                if (fileReference != null)
                {
                    if (Pageflow.ParsedResumeId != null && Pageflow.IsResumeValid)
                    {
                        var parsedResume = _resumesQuery.GetParsedResume(Pageflow.ParsedResumeId.Value);
                        _candidateResumesCommand.CreateResume(candidate, parsedResume.Resume.Clone(), fileReference);
                    }
                    else
                    {
                        _candidateResumesCommand.CreateResumeFile(candidate, fileReference);
                    }
                }
            }
        }