public ActionResult OnBoard(int id)
 {
     try
     {
         var detail = db.RequirementDetails.Include(d => d.Resource).Include(d => d.Requirement).Where(d => d.RequirementDetailId == id).FirstOrDefault();
         var model  = new ResourceOnBoardModel
         {
             RequirementDetailId = detail.RequirementDetailId,
             RequirementId       = detail.RequirementId,
             ResourceId          = detail.ResourceId.Value,
             RecruiterId         = detail.RecruiterId,
             BuyRate             = detail.Requirement.HourlyBuyRate,
             BillingRate         = detail.Requirement.HourlyBillingRate,
             FinalRate           = detail.Requirement.HourlyBuyRate
         };
         var projectDetail = db.ProjectDetails.Where(p => p.RequirementId == model.RequirementId && p.ResourceId == model.ResourceId).FirstOrDefault();
         if (projectDetail != null)
         {
             model.ProjectStartDate = projectDetail.StartDate;
             model.ProjectEndDate   = projectDetail.EndDate;
             model.PlacementDate    = projectDetail.PlacementDate;
         }
         return(View(model));
     }
     catch (Exception exp)
     {
         Logger.LogException(exp);
         return(RedirectToAction("AppError", "Error"));
     }
 }
        public ActionResult OnBoard([Bind(Include = "RequirementDetailId,ResourceId,RequirementId,RecruiterId,ProjectStartDate,ProjectEndDate,PlacementDate,FinalRate")] ResourceOnBoardModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var projectDetail = db.ProjectDetails.Where(p => p.RequirementId == model.RequirementId && p.ResourceId == model.ResourceId).FirstOrDefault();
                    var requirement   = db.Requirements.Find(model.RequirementId);
                    // update project details.
                    if (projectDetail != null)
                    {
                        projectDetail.StartDate       = model.ProjectStartDate.Value;
                        projectDetail.EndDate         = model.ProjectEndDate;
                        projectDetail.PlacementDate   = model.PlacementDate.Value;
                        db.Entry(projectDetail).State = EntityState.Modified;
                    }
                    else
                    {
                        projectDetail = new ProjectDetail
                        {
                            RequirementId    = model.RequirementId,
                            ResourceId       = model.ResourceId,
                            RecruiterId      = model.RecruiterId,
                            StartDate        = model.ProjectStartDate.Value,
                            EndDate          = model.ProjectEndDate,
                            PlacementDate    = model.PlacementDate.Value,
                            AccountManagerId = requirement.AccountManagerId
                        };
                        db.ProjectDetails.Add(projectDetail);
                    }
                    db.SaveChanges();

                    //update final buy rate in requirement
                    requirement.RequirementId    = model.RequirementId;
                    requirement.HourlyBuyRate    = model.FinalRate;
                    requirement.UpdatedBy        = User.Identity.GetUserId();
                    requirement.UpdatedTimestamp = DateTime.Now;
                    db.Requirements.Attach(requirement);
                    db.Entry(requirement).Property(r => r.HourlyBuyRate).IsModified    = true;
                    db.Entry(requirement).Property(r => r.UpdatedBy).IsModified        = true;
                    db.Entry(requirement).Property(r => r.UpdatedTimestamp).IsModified = true;
                    db.Configuration.ValidateOnSaveEnabled = false;
                    db.SaveChanges();

                    //update project end date and client for the resource.
                    var resource = new Resource();
                    resource.ResourceId     = model.ResourceId;
                    resource.ClientId       = requirement.Tier1ClientId;
                    resource.ProjectEndDate = model.ProjectEndDate;
                    resource.UpdatedBy      = User.Identity.GetUserId();
                    resource.UpdatedTime    = DateTime.Now;
                    db.Resources.Attach(resource);
                    db.Entry(resource).Property(r => r.ProjectEndDate).IsModified = true;
                    db.Entry(resource).Property(r => r.UpdatedBy).IsModified      = true;
                    db.Entry(resource).Property(r => r.UpdatedTime).IsModified    = true;
                    db.Entry(resource).Property(r => r.ClientId).IsModified       = true;
                    db.Configuration.ValidateOnSaveEnabled = false;
                    db.SaveChanges();

                    return(RedirectToAction("Index", "Requirement", new { requirementId = model.RequirementId }));
                }
                return(View(model));
            }
            catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                                    .SelectMany(x => x.ValidationErrors)
                                    .Select(x => x.ErrorMessage);

                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);

                // Combine the original exception message with the new one.
                var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);

                Logger.LogMessage(exceptionMessage);
                return(RedirectToAction("AppError", "Error"));
            }
            catch (Exception exp)
            {
                Logger.LogException(exp);
                return(RedirectToAction("AppError", "Error"));
            }
        }