public HttpResponseMessage GetApplicationById(int id)
        {
            Result result = new Result();

            result = _jobApplicationManager.GetJobApplicationByApplicationId(id);

            //If failed
            if (!result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }
            //If if not found
            if (result.Entity == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound, result));
            }

            // Authentication verify block
            object objuser = null;

            Request.Properties.TryGetValue("user", out objuser);
            var user = objuser as UserEntity;

            object objemployer = null;

            Request.Properties.TryGetValue("employer", out objemployer);
            var employer = objemployer as EmployerEntity;

            var application = (JobApplicationEntity)result.Entity;

            var response = new ApplicationWithInfo();

            response.jobApplicationEntity = application;
            if (user != null)
            {
                // User logged in
                if (user.UserId != application.UserId)
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized, result));
                }
            }
            else if (employer != null)
            {
                var listing = (JobListingEntity)_jobListingManager.GetListingById(application.JobListingId).Entity;


                if (employer.EmployerId != listing.EmployerId || application.IsDraft)
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized, new Result(false)));
                }
            }



            if (!application.IsDraft && (application.IsShortlisted == true) && (application.IsDeclined != true))
            {
                // get details only if the application is shortlisted;
                var nurseEntity  = (UserEntity)_usersManager.GetSecuredUserDetails(application.UserId).Entity;
                var nurseDetails = new UserModelSecured();
                PropertyCopier <UserEntity, UserModelSecured> .Copy(nurseEntity, nurseDetails);

                var employerEntity  = (EmployerEntity)_employersManager.GetEmployerById(application.EmployerId).Entity;
                var employerDetails = new EmployerModelSecured();
                PropertyCopier <EmployerEntity, EmployerModelSecured> .Copy(employerEntity, employerDetails);

                var quizAnswers = (List <NurseSelfAssessmentAnswersEntity>)_nurseSelfAssessmentAnswersManager.GetAnswersbyUserQuizzId(nurseEntity.defaultQuizId).Entity;
                response.jobApplicationEntity.PreferedQuizz = quizAnswers;
                response.employerInfo = employerDetails;
                response.nurseInfo    = nurseDetails;
            }

            //If it is good

            result.Entity = response;
            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
        public HttpResponseMessage Post([FromBody] JobApplicationEntity jobApplication)
        {
            Result result = new Result();

            // Authentication verify block
            object objuser = null;

            Request.Properties.TryGetValue("user", out objuser);
            if (objuser == null)
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, result));
            }
            var user = objuser as UserEntity;

            // check if listing is valid
            var jobListingEntity_Result = _jobListingManager.GetListingById(jobApplication.JobListingId);

            if (!jobListingEntity_Result.Success || jobListingEntity_Result.Entity == null)
            {
                result.Entity  = null;
                result.Message = "Job Listing not exists";
                result.Success = false;
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }
            var jobListingEntity = (JobListingEntity)jobListingEntity_Result.Entity;

            // check if listing expired
            if (DateTime.Compare(jobListingEntity.ApplicationDeadline, DateTime.Now) < 0)
            {
                result.Entity  = null;
                result.Message = "Job Listing expired";
                result.Success = false;
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            if (jobApplication.IsDraft)
            {
                jobApplication.ApplicationStatus = ApplicationStatus.Draft.ToString();
            }
            else
            {
                jobApplication.ApplicationStatus = ApplicationStatus.Submitted.ToString();
            }

            jobApplication.EmployerId       = jobListingEntity.EmployerId;
            jobApplication.UserId           = user.UserId;
            jobApplication.AppliedDate      = DateTime.Now;
            jobApplication.LastModifiedDate = jobApplication.AppliedDate;
            jobApplication.IsShortlisted    = false;
            jobApplication.IsDeclined       = false;
            result = _jobApplicationManager.CreateJobApplication(jobApplication);



            // return failed
            if (!result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            // if success
            var response = new ApplicationWithInfo();

            response.jobApplicationEntity = (JobApplicationEntity)result.Entity;


            result.Entity = response;
            return(Request.CreateResponse(HttpStatusCode.Created, result));
        }