Exemple #1
0
        /// <summary>
        /// This function add/update job details
        /// </summary> 
        /// <param name="jobDetails"></param>
        /// <returns></returns>
        // ReSharper disable once FunctionComplexityOverflow
        public PostPutResponse AddUpdateJob(Job jobDetails)
        {
            var context = new dbDataContext();
            int jobId = jobDetails.JobId;
            var response = new PostPutResponse { DisplayError = "", IsError = false, ObjectId = -1 };
            // Create or retrieve the job
            var job = context.tbl_Jobs.FirstOrDefault(t => t.JobId == jobDetails.JobId) ?? new tbl_Job();
            // Assign job values
            job.JobTitle = jobDetails.JobTitle;
            job.ClientId = jobDetails.ClientId;
            job.Ref = jobDetails.Ref;
            job.Benefits = jobDetails.Benefits;
            job.Overview = jobDetails.Overview;
            job.JobDescription = jobDetails.JobDescription;
            job.JobLocation = jobDetails.JobLocation;
            job.JobApplicationPageLink = jobDetails.JobApplicationPageLink;
            job.Published = jobDetails.Published;
            job.Archived = jobDetails.Archived;
            job.Deleted = jobDetails.Deleted;
            job.NotificationEmail = jobDetails.NotificationEmail;
            job.JobType = jobDetails.JobType;
            job.ContractType = jobDetails.ContractType;
            job.PostedBy = jobDetails.PostedBy;
            job.ExpiryDate = jobDetails.ExpiryDate;
            job.LastUpdatedDate = DateTime.Now;
            job.Manager = jobDetails.Manager;
            job.SalaryType = jobDetails.SalaryType;
            job.MinSalary = jobDetails.MinSalary;
            job.MaxSalary = jobDetails.MaxSalary;
            job.SearchLocationType = jobDetails.SearchLocationType;
            job.HoursOrDaysPerWeek = jobDetails.HoursOrDaysPerWeek;
            job.MinSalaryAnnum = CalculateAnnualSalary(job.MinSalary, jobDetails.SalaryType,
                jobDetails.HoursOrDaysPerWeek);
            job.MaxSalaryAnnum = CalculateAnnualSalary(job.MaxSalary, jobDetails.SalaryType,
                jobDetails.HoursOrDaysPerWeek);
            if (!(jobDetails.SalaryType == "hour" || jobDetails.SalaryType == "day"))
                job.HoursOrDaysPerWeek = 0;
            job.StartDate = jobDetails.StartDate;
            job.AllUserAccess = jobDetails.AllUserAccess;

            try
            {
                // Add/Update Job
                if (job.JobId <= 0)
                {
                    job.RefId = Guid.NewGuid().ToString();
                    job.CreatedDate = DateTime.Now;
                    context.tbl_Jobs.InsertOnSubmit(job);
                }
                context.SubmitChanges();
            }
            catch (Exception e)
            {
                response.ActualError = e.ToString();
                response.DisplayError = "Error " + (jobId > 0 ? "updating" : "adding") + " the job!";
                response.IsError = true;
            }

            if (job.JobId > 0)
            {
                jobDetails.JobId = job.JobId;
                // Save Job Locations 
                context.tbl_JobLocations.DeleteAllOnSubmit(context.tbl_JobLocations.Where(t => t.JobId == job.JobId));
                context.SubmitChanges();
                if (jobDetails.LocationIds != null)
                {
                    foreach (
                        var locId in jobDetails.LocationIds.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        context.tbl_JobLocations.InsertOnSubmit(new tbl_JobLocation
                        {
                            JobId = job.JobId,
                            LocationId = int.Parse(locId),
                            Type = job.SearchLocationType
                        });
                    }
                    context.SubmitChanges();
                }

                // Save Job Sectors
                context.tbl_JobSectors.DeleteAllOnSubmit(context.tbl_JobSectors.Where(t => t.JobId == job.JobId));
                context.SubmitChanges();
                if (jobDetails.SectorIds != null)
                {
                    foreach (var secId in jobDetails.SectorIds.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)
                        )
                    {
                        context.tbl_JobSectors.InsertOnSubmit(new tbl_JobSector
                        {
                            JobId = job.JobId,
                            SectorId = int.Parse(secId)
                        });
                    }
                    context.SubmitChanges();
                }

                // Save Job Users
                context.tbl_JobUsers.DeleteAllOnSubmit(context.tbl_JobUsers.Where(t => t.JobId == job.JobId));
                context.SubmitChanges();
                if (jobDetails.JobUserIds != null)
                {
                    foreach (var userId in jobDetails.JobUserIds.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        context.tbl_JobUsers.InsertOnSubmit(new tbl_JobUser
                        {
                            JobId = job.JobId,
                            UserId = int.Parse(userId)
                        });
                    }
                    context.SubmitChanges();
                }

                // Save Job Killer Questions
                if (jobDetails.KillerQuestions != null && jobDetails.KillerQuestions.ToList().Count > 0)
                {
                    var objKillerQuestions = new KillerQuestions();
                    foreach (var killerQuestion in jobDetails.KillerQuestions)
                    {
                        killerQuestion.JobId = job.JobId;
                        objKillerQuestions.AddEditKillerQuestion(killerQuestion);
                    }
                    // re-calculate the killer question score for applications
                    objKillerQuestions.CalculateKillerQuestionScoreForJob(jobDetails.JobId);
                }

                // Save Documents
                if (jobDetails.Documents != null)
                {
                    jobDetails.Documents.ToList().ForEach(t => t.RefId = job.JobId);
                    new Documents().SaveDocuments(jobDetails.Documents);
                }

                // save job - job boards
                if (jobDetails.JobBoards != null)
                {
                    SaveJobJobBoards(jobDetails.JobBoards, jobDetails, job.JobId);
                }

                //add history
                new Histories().AddHistory(new History
                {
                    RefId = job.JobId,
                    RefType = "Job",
                    ClientUserId = jobDetails.ClientUserId,
                    TypeId = jobId < 1 ? 5 : 6,
                    SubRefType = "ClientUser",
                    SubRefId = jobDetails.ClientUserId
                });

                // If new job send notification email to client 
                if (jobId < 1)
                {
                    // TODO - Send Notification Email
                }
                response.ObjectId = jobDetails.JobId;
            }
            return response;
        }