public bool deleteInviteEmployee(int EmployeID)
        {
            var EmployeeList           = _db.EmployeePerformances.Where(x => x.EmployeeId == EmployeID).ToList();
            var EmployeePerformnceData = _db.PerformanceEmployeeDetails.Where(x => x.EmployeeId == EmployeID && x.IsArchived == false).FirstOrDefault();

            foreach (var item in EmployeeList)
            {
                EmployeePerformance delete = EmployeeList.Where(x => x.Id == item.Id).FirstOrDefault();
                _db.EmployeePerformances.Remove(delete);
                _db.SaveChanges();
                var deleteJSON    = _db.EmployeePerformanceCoreJSONDetails.Where(x => x.PerEmployeedetailId == EmployeePerformnceData.Id).ToList();
                var delateJobRole = _db.EmployeePerformanceJobRoleSegmentJSONDetails.Where(x => x.PerEmployeedetailId == EmployeID && x.Archived == false).ToList();
                foreach (var JSONitem in deleteJSON)
                {
                    EmployeePerformanceCoreJSONDetail coreJSON = deleteJSON.Where(x => x.Id == JSONitem.Id).FirstOrDefault();
                    _db.EmployeePerformanceCoreJSONDetails.Remove(coreJSON);
                }
                foreach (var JSONitem in delateJobRole)
                {
                    EmployeePerformanceJobRoleSegmentJSONDetail jobroleJSON = delateJobRole.Where(x => x.PerEmployeedetailId == EmployeID && x.Archived == false).FirstOrDefault();
                }
            }
            return(true);
        }
        public int saveEmployeePerformance(int PerformanceID, int Flag, string OverallScoreString, string Comments, int EmpId, string JSONCustomerSegment, string JSONJobRoleSegment, int ReviewID, int IsManagerEmployee, int EmpPerfDetailId, int EmployeePerformaceID)
        {
            var ExistPerformance       = _db.PerformanceEmployeeDetails.Where(x => x.Performance_Id == ReviewID && x.EmployeeId == EmpId).ToList();
            JavaScriptSerializer js    = new JavaScriptSerializer();
            EditSegmentViewModel model = new EditSegmentViewModel();
            EmployeePerformanceCoreJSONDetail           custoJSON   = new EmployeePerformanceCoreJSONDetail();
            EmployeePerformanceJobRoleSegmentJSONDetail jobroleJSON = new EmployeePerformanceJobRoleSegmentJSONDetail();
            int EmpPerfDeId = Convert.ToInt32(EmpPerfDetailId);
            int IsManagerID = Convert.ToInt32(IsManagerEmployee);
            //if (ExistPerformance != null && ExistPerformance.Count > 0)
            //{
            //    bool delete = deleteInviteCutomer(EmpId);

            //}
            int ID = 0;
            PerformanceEmployeeDetail perDetails = new PerformanceEmployeeDetail();

            if (Flag == 2)
            {
                var ExistPerformanceData = (from record in _db.PerformanceEmployeeDetails.Where(x => x.ReviewID == ReviewID && x.EmployeeId == EmpId && x.IsArchived == false && x.IsManager_Id == IsManagerEmployee) orderby record.UserIDCreatedDate descending select record).SingleOrDefault();
                if (ExistPerformanceData != null)
                {
                    ExistPerformanceData.OverAllScoreJSON       = OverallScoreString;
                    ExistPerformanceData.Comments               = Comments;
                    ExistPerformanceData.IsArchived             = false;
                    ExistPerformanceData.EmployeeId             = EmpId;
                    ExistPerformanceData.UserIDLastModifiedBy   = SessionProxy.UserId;
                    ExistPerformanceData.UserIDLastModifiedDate = DateTime.Now;
                    _db.Entry(ExistPerformanceData).State       = System.Data.Entity.EntityState.Modified;
                    ExistPerformanceData.IsManager_Id           = IsManagerID;
                    _db.SaveChanges();
                    ID = (from record in _db.PerformanceEmployeeDetails where record.ReviewID == ReviewID && record.EmployeeId == EmpId && record.IsArchived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();


                    //Update OverAllScore Of Employee
                }
                else
                {
                    perDetails.Performance_Id   = EmployeePerformaceID;
                    perDetails.OverAllScoreJSON = OverallScoreString;
                    perDetails.Comments         = Comments;
                    if (IsManagerEmployee == 0)
                    {
                        perDetails.IsManager_Id = IsManagerID;
                        perDetails.EmployeeId   = EmpId;
                    }
                    else if (IsManagerEmployee == 1)
                    {
                        perDetails.IsManager_Id          = IsManagerID;
                        perDetails.Performance_ManagerId = SessionProxy.UserId;
                    }
                    perDetails.IsArchived             = false;
                    perDetails.EmployeeId             = EmpId;
                    perDetails.UserIDLastModifiedBy   = SessionProxy.UserId;
                    perDetails.UserIDLastModifiedDate = DateTime.Now;
                    perDetails.ReviewID        = ReviewID;
                    perDetails.IsFormCompleted = true;
                    _db.PerformanceEmployeeDetails.Add(perDetails);
                    _db.SaveChanges();
                    ID = (from record in _db.PerformanceEmployeeDetails where record.ReviewID == ReviewID && record.EmployeeId == EmpId && record.IsArchived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();
                }
            }
            else if (Flag == 1)
            {
                if (!string.IsNullOrEmpty(JSONCustomerSegment))
                {
                    model.CoreSeg = js.Deserialize <List <CoreSegment> >(JSONCustomerSegment);
                    foreach (var item in model.CoreSeg)
                    {
                        item.CoreQueListData = js.Deserialize <List <QuestionModel> >(item.QueationType);
                    }
                }
                if (model.CoreSeg != null && model.CoreSeg.Count > 0)
                {
                    foreach (var item in model.CoreSeg)
                    {
                        foreach (var data in item.CoreQueListData)
                        {
                            int QueIDCoreSeg        = Convert.ToInt32(data.QueId);
                            var ExistingCoreSegData = (from record in _db.EmployeePerformanceCoreJSONDetails.Where(x => x.ReviewID == ReviewID && x.EmployeeID == EmpId && x.QueId == QueIDCoreSeg && x.CoreId == item.CoreId && x.Archived == false && x.IsManager_Id == IsManagerEmployee) orderby record.UserIdCreatedBy descending select record).SingleOrDefault();
                            if (ExistingCoreSegData != null)
                            {
                                ExistingCoreSegData.Score                  = data.Score;
                                ExistingCoreSegData.Comments               = data.Comments;
                                ExistingCoreSegData.UserIdLastModifiedBy   = SessionProxy.UserId;
                                ExistingCoreSegData.UserIdLastModifiedDate = DateTime.Now;
                                ExistingCoreSegData.IsManager_Id           = IsManagerID;
                                _db.Entry(ExistingCoreSegData).State       = System.Data.Entity.EntityState.Modified;
                                _db.SaveChanges();
                                ID = (from record in _db.EmployeePerformanceCoreJSONDetails where record.ReviewID == ReviewID && record.EmployeeID == EmpId && record.Archived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();
                            }
                            else
                            {
                                if (IsManagerEmployee == 1)
                                {
                                    custoJSON.IsManager_Id       = IsManagerID;
                                    custoJSON.PerManagerDetailId = SessionProxy.UserId;
                                }
                                else
                                {
                                    custoJSON.IsManager_Id = IsManagerID;
                                    //custoJSON.PerManagerDetailId = SessionProxy.UserId;
                                }
                                custoJSON.CoreId = item.CoreId;
                                custoJSON.PerEmployeedetailId = perDetails.Id;
                                custoJSON.QueId                  = Convert.ToInt32(data.QueId);
                                custoJSON.Score                  = data.Score;
                                custoJSON.Comments               = data.Comments;
                                custoJSON.Archived               = false;
                                custoJSON.EmployeeID             = EmpId;
                                custoJSON.UserIdCreatedBy        = SessionProxy.UserId;
                                custoJSON.UserIdCreatedDate      = DateTime.Now;
                                custoJSON.UserIdLastModifiedBy   = SessionProxy.UserId;
                                custoJSON.UserIdLastModifiedDate = DateTime.Now;
                                custoJSON.ReviewID               = ReviewID;
                                custoJSON.IsFormCompleted        = true;
                                _db.EmployeePerformanceCoreJSONDetails.Add(custoJSON);
                                _db.SaveChanges();
                                ID = (from record in _db.EmployeePerformanceCoreJSONDetails where record.ReviewID == ReviewID && record.EmployeeID == EmpId && record.Archived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();
                            }
                        }
                    }
                }
            }
            else if (Flag == 0)
            {
                if (!string.IsNullOrEmpty(JSONJobRoleSegment))
                {
                    model.JobRoleSeg = js.Deserialize <List <JobRoleSegment> >(JSONJobRoleSegment);
                    foreach (var item in model.JobRoleSeg)
                    {
                        item.JobRoleQueListData = js.Deserialize <List <JobRoleQuestionModel> >(item.QueationType);
                    }
                }
                if (model.JobRoleSeg != null && model.JobRoleSeg.Count > 0)
                {
                    foreach (var item in model.JobRoleSeg)
                    {
                        foreach (var data in item.JobRoleQueListData)
                        {
                            int QueIDJobRoleSeg        = Convert.ToInt32(data.QueId);
                            var ExistingJObRoleSegData = (from record in _db.EmployeePerformanceJobRoleSegmentJSONDetails.Where(x => x.ReviewID == ReviewID && x.EmployeeID == EmpId && x.QueId == QueIDJobRoleSeg && x.JobRoleSegId == item.JobRoleIds && x.Archived == false && x.IsManager_Id == IsManagerEmployee) orderby record.UserIdCreatedBy descending select record).SingleOrDefault();
                            if (ExistingJObRoleSegData != null)
                            {
                                ExistingJObRoleSegData.Score            = data.Score;
                                ExistingJObRoleSegData.Comment          = data.Comments;
                                ExistingJObRoleSegData.LastModifiedBy   = SessionProxy.UserId;
                                ExistingJObRoleSegData.LastModifiedDate = DateTime.Now;
                                _db.Entry(ExistingJObRoleSegData).State = System.Data.Entity.EntityState.Modified;
                                ExistingJObRoleSegData.IsManager_Id     = IsManagerID;
                                _db.SaveChanges();
                                ID = (from record in _db.EmployeePerformanceJobRoleSegmentJSONDetails where record.ReviewID == ReviewID && record.EmployeeID == EmpId && record.Archived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();
                            }
                            else
                            {
                                if (IsManagerEmployee == 1)
                                {
                                    jobroleJSON.IsManager_Id       = IsManagerID;
                                    jobroleJSON.PerManagerdetailId = SessionProxy.UserId;
                                }
                                else
                                {
                                    jobroleJSON.IsManager_Id = IsManagerID;
                                    // jobroleJSON.PerManagerdetailId = null;
                                }
                                jobroleJSON.PerEmployeedetailId = perDetails.Id;
                                jobroleJSON.JobRoleSegId        = item.JobRoleIds;
                                jobroleJSON.QueId             = Convert.ToInt32(data.QueId);
                                jobroleJSON.Score             = data.Score;
                                jobroleJSON.Comment           = data.Comments;
                                jobroleJSON.Archived          = false;
                                jobroleJSON.EmployeeID        = EmpId;
                                jobroleJSON.UserIdCreatedBy   = SessionProxy.UserId;
                                jobroleJSON.UserIdCreatedDate = DateTime.Now;
                                jobroleJSON.LastModifiedBy    = SessionProxy.UserId;
                                jobroleJSON.LastModifiedDate  = DateTime.Now;
                                jobroleJSON.ReviewID          = ReviewID;
                                jobroleJSON.IsFormCompleted   = true;
                                _db.EmployeePerformanceJobRoleSegmentJSONDetails.Add(jobroleJSON);
                                _db.SaveChanges();
                                ID = (from record in _db.EmployeePerformanceJobRoleSegmentJSONDetails where record.ReviewID == ReviewID && record.EmployeeID == EmpId && record.Archived == false && record.IsManager_Id == IsManagerEmployee orderby record.Id descending select record.Id).First();
                            }
                        }
                    }
                }

                // Update CoreScore

                var JobRoleScore = _db.EmployeePerformanceJobRoleSegmentJSONDetails.Where(x => x.ReviewID == ReviewID && x.EmployeeID == EmpId && x.Archived == false && x.IsManager_Id == IsManagerEmployee).ToList();
                if (JobRoleScore.Count > 0)
                {
                    int    TotalJobRoleScore  = 0;
                    double AvgQueJobRoleScore = 0;
                    foreach (var item in JobRoleScore)
                    {
                        int check;
                        int.TryParse(item.Score, out check);
                        TotalJobRoleScore = TotalJobRoleScore + check;
                    }
                    AvgQueJobRoleScore = TotalJobRoleScore / JobRoleScore.Count;
                    var EmployeePerf = (from record in _db.EmployeePerformances where record.ReviewId == ReviewID & record.Archived == false orderby record.Id descending select record).FirstOrDefault();
                    //var EmployeePerf = _db.EmployeePerformances.Where(x => x.Id == ReviewID && x.Archived == false).FirstOrDefault();
                    EmployeePerf.JobRoleScore         = Convert.ToString(AvgQueJobRoleScore);
                    EmployeePerf.LastModifiedDate     = DateTime.Now;
                    EmployeePerf.UserIDLastModifiedBy = SessionProxy.UserId;
                    _db.SaveChanges();
                }
            }
            var CalculateCoreScore = _db.EmployeePerformanceCoreJSONDetails.Where(x => x.ReviewID == ReviewID && x.EmployeeID == EmpId && x.Archived == false).ToList();

            if (CalculateCoreScore.Count > 0)
            {
                int    TotalCoreScore  = 0;
                double AvgQueCoreScore = 0;
                foreach (var item in CalculateCoreScore)
                {
                    int chkq;
                    int.TryParse(item.Score, out chkq);
                    TotalCoreScore = TotalCoreScore + chkq;
                }
                AvgQueCoreScore = TotalCoreScore / CalculateCoreScore.Count;
                var EmployeePerf = _db.PerformanceEmployeeDetails.Where(x => x.Id == EmpPerfDeId).FirstOrDefault();
                if (EmployeePerf != null)
                {
                    EmployeePerf.CoreScore = Convert.ToString(AvgQueCoreScore);
                    EmployeePerf.UserIDLastModifiedDate = DateTime.Now;
                    EmployeePerf.UserIDLastModifiedBy   = SessionProxy.UserId;
                }
                _db.SaveChanges();
            }
            if (!string.IsNullOrEmpty(OverallScoreString))
            {
                string[] OverallScoreStringList = OverallScoreString.Split('^');
                int      OverAllScoreValue      = OverallScoreStringList.Length;
                var      EmployeePerf           = (from record in _db.EmployeePerformances where record.ReviewId == ReviewID & record.Archived == false orderby record.Id descending select record).FirstOrDefault();
                EmployeePerf.OverallScore         = Convert.ToString(OverAllScoreValue);
                EmployeePerf.LastModifiedDate     = DateTime.Now;
                EmployeePerf.UserIDLastModifiedBy = SessionProxy.UserId;
                _db.SaveChanges();
            }
            return(ID);
        }