private static Attendee MapAttendee( Attendance attendance, Person person, AttendanceType attendanceType, Location location ) { var checkState = MappingService.GetCheckState(attendance: attendance); return(new() { AttendanceId = attendance.Id, FamilyId = person.FamilyId, FirstName = person.FirstName, LastName = person.LastName, AttendanceTypeId = (Shared.AttendanceTypeId)attendanceType.Id, SecurityCode = attendance.SecurityCode, LocationGroupId = location.LocationGroupId, Location = location.Name, CheckState = checkState, InsertDate = attendance.InsertDate, CheckInDate = attendance.CheckInDate, CheckOutDate = attendance.CheckOutDate }); }
/// <summary> /// 员工考勤状态 /// </summary> /// <param name="attenDt">考勤日期</param> /// <param name="attendanceType">考勤类型</param> /// <returns></returns> public string GetAttenDateStatu(DateTime attenDt, AttendanceType attendanceType) { string StrOnJob = IsOnTheJob(attenDt); if (StrOnJob == "已离职" || StrOnJob == "未入职") { return(string.Empty); } if (!string.IsNullOrEmpty(StrOnJob)) { return(StrOnJob); } Attendance EmployeAtten = new Attendance(this, attenDt, m_DbOperator); switch (attendanceType) { case AttendanceType.NoAmAtten: return(GetNoAmAttenString(EmployeAtten, attenDt)); case AttendanceType.NoAtten: return(GetOverTime(EmployeAtten, attenDt)); case AttendanceType.NoPmAtten: return(GetNoPmAttenString(EmployeAtten, attenDt)); case AttendanceType.NormalAtten: return(GetNormalAttrn(EmployeAtten, attenDt)); } return(string.Empty); }
public int CreateWorkSchedule(int employeeId, AttendanceType attCode, DateTime datetime) { try { if (attCode == AttendanceType.ClockIn) { var attendace = new Attendance() { ClockIn = datetime, ClockOut = null, EmployeeId = employeeId }; _attendanceRepository.Add(attendace); } else if (attCode == AttendanceType.ClockOut) { var attendance = _attendanceRepository.GetLastAttendance(employeeId); attendance.ClockOut = datetime; _attendanceRepository.Update(attendance); } _unitOfWork.Commit(); return(0); } catch (Exception ex) { return(-1); } }
public ObjectId AttendUserToEvent(ObjectId userId, ObjectId eventId, AttendanceType attendanceType) { Require.NotNull(userId, nameof(userId)); Require.NotNull(eventId, nameof(eventId)); var sameAttendances = _attendanceRepository.GetByPredicate(attendance => attendance.UserId == userId && attendance.EventId == eventId); if (sameAttendances.Count() > 1) { throw new PolicyException("More than one attendance of same user to same event"); } if (sameAttendances.Count() == 1) { ChangeAttendanceType(userId, eventId, attendanceType); } return(_attendanceRepository.Create(new Attendance { UserId = userId, EventId = eventId, AttendanceType = attendanceType })); }
public JsonResult InsertAttendanceType(AttendanceType type) { try { db.AttendanceTypes.Add(type); type.CreateBy = AppUtils.GetLoginUserID(); type.CreateDate = AppUtils.GetDateTimeNow(); type.Status = AppUtils.TableStatusIsActive; db.AttendanceTypes.Add(type); db.SaveChanges(); AttendanceTypeViewModel AttendanceTypeInfo = new AttendanceTypeViewModel { AttendanceTypeID = type.AttendanceTypeID, AttendanceName = type.AttendanceName, UpdateAttendanceType = ISP_ManagementSystemModel.AppUtils.HasAccessInTheList(ISP_ManagementSystemModel.AppUtils.Update_Attendance_Type) ? true : false, }; return(Json(new { SuccessInsert = true, AttendanceTypeInfo = AttendanceTypeInfo }, JsonRequestBehavior.AllowGet)); } catch { return(Json(new { SuccessInsert = false }, JsonRequestBehavior.AllowGet)); } }
public ActionResult _CreateFor([Bind(Include = "AttendanceTypeID,Name")] AttendanceType attendanceType, string frompage) { errordata data = new errordata(); data.type = "error"; Session["err"] = "Error, Please Check Input Fields"; Session["msg"] = ""; if (ModelState.IsValid) { AttendanceType attendanceTypeexist = db.AttendanceTypes.Where(c => c.Name == attendanceType.Name).FirstOrDefault(); if (attendanceTypeexist != null) { Session["err"] = "AttendanceType name already exists"; data.message = Session["err"].ToString(); return(Json(data, JsonRequestBehavior.AllowGet)); } db.AttendanceTypes.Add(attendanceType); db.SaveChanges(); ModelState.Clear(); Session["err"] = ""; Session["msg"] = "Created Successfully"; return(RedirectToAction("_AttendanceTypePartial", frompage, new { id = attendanceType.AttendanceTypeID })); } data.message = Session["err"].ToString(); return(Json(data, JsonRequestBehavior.AllowGet)); }
public ActionResult UpdateAttendanceType(AttendanceType type) { try { AttendanceType dbAttendanceType = new AttendanceType(); dbAttendanceType = db.AttendanceTypes.Find(type.AttendanceTypeID); dbAttendanceType.AttendanceName = type.AttendanceName; dbAttendanceType.UpdateBy = AppUtils.GetLoginUserID(); dbAttendanceType.UpdateDate = AppUtils.GetDateTimeNow(); db.Entry(dbAttendanceType).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); var AttendacnceType = new AttendanceTypeViewModel() { AttendanceTypeID = type.AttendanceTypeID, AttendanceName = type.AttendanceName, UpdateAttendanceType = ISP_ManagementSystemModel.AppUtils.HasAccessInTheList(ISP_ManagementSystemModel.AppUtils.Update_Attendance_Type) ? true : false, }; var JSON = Json(new { UpdateSuccess = true, AttenDanceTypeInformation = AttendacnceType }, JsonRequestBehavior.AllowGet); JSON.MaxJsonLength = int.MaxValue; return(JSON); } catch { return(Json(new { UpdateSuccess = false, EMPLH = "" }, JsonRequestBehavior.AllowGet)); } }
public EventAttendance GetEntity() { return(new EventAttendance { Id = Id, EventRef = Event.GetEntity(), AttendanceTypeRef = AttendanceType.GetEntity(), Price = Price }); }
/// <summary> /// 添加考勤规则 /// </summary> /// <param name="attendanceType"></param> /// <returns></returns> public static int Add(AttendanceType attendanceType) { using (EFContext Context = new EFContext()) { DbEntityEntry <AttendanceType> person = Context.Entry <AttendanceType>(attendanceType); person.State = System.Data.Entity.EntityState.Added; return(Context.SaveChanges()); } }
public PartialViewResult DisplayTimeInOut(int id, AttendanceType attCode, string timeInOut) { var viewModel = new LogInViewModel { Datetime = timeInOut.DeserializeDate(), AttendanceCode = attCode, EmployeeId = id }; return(PartialView(viewModel)); }
public void Get(int id, string ipAddress, AttendanceType attCode, string timeInOut) { var connection = _loginDisplayClientRepository.Find(x => x.IpAddress == ipAddress).FirstOrDefault(); if (connection != null) { var context = GlobalHost.ConnectionManager.GetHubContext <PayrollHub>(); context.Clients.Client(connection.ClientId).broadcastMessage(id, attCode, timeInOut); } else { } }
public static void AddAttendance(int uid, DateTime actionTime, AttendanceType actionType) { Attendance ate = new Attendance(); ate.Valid = true; ate.UzerId = uid; ate.ActionTime = actionTime; ate.ActionType = (int)actionType; SmallSimpleOAContext ctx = new SmallSimpleOAContext(); ctx.Add(ate); ctx.SaveChanges(); }
public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } AttendanceType attendanceType = db.AttendanceTypes.Find(id); if (attendanceType == null) { return(HttpNotFound()); } ViewBag.Existing = attendanceType.Name; return(View(attendanceType)); }
public ActionResult DeleteConfirm(int id) { Session["err"] = "Error, Can't Delete, Please check Dependency Data"; Session["msg"] = ""; try { AttendanceType attendanceType = db.AttendanceTypes.Find(id); db.AttendanceTypes.Remove(attendanceType); db.SaveChanges(); Session["err"] = ""; Session["msg"] = "Deleted Successfully"; } catch { } return(RedirectToAction("Index")); }
/// <summary> /// 修改考勤规则 /// </summary> /// <param name="attendanceType"></param> /// <returns></returns> public static int Update(AttendanceType attendanceType) { using (EFContext Context = new EFContext()) { AttendanceType type = new AttendanceType() { ATID = attendanceType.ATID }; AttendanceType a = Context.AttendanceType.Attach(type); a.MBeginTime = attendanceType.MBeginTime; a.MEndTime = attendanceType.MEndTime; a.ABeginTime = attendanceType.ABeginTime; a.AEndTime = attendanceType.AEndTime; a.Remark = attendanceType.Remark; return(Context.SaveChanges()); } }
public ActionResult DeleteAttendanceType(int AttendanceTypeID) { AttendanceType attendanceType = new AttendanceType(); attendanceType = db.AttendanceTypes.Find(AttendanceTypeID); attendanceType.DeleteBy = AppUtils.GetLoginUserID(); attendanceType.DeleteDate = AppUtils.GetDateTimeNow(); attendanceType.Status = AppUtils.TableStatusIsDelete; db.Entry(attendanceType).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); var JSON = Json(new { DeleteSuccess = true, AttendanceTypeID = attendanceType.AttendanceTypeID }, JsonRequestBehavior.AllowGet); JSON.MaxJsonLength = int.MaxValue; return(JSON); }
public void ChangeAttendanceType(ObjectId userId, ObjectId eventId, AttendanceType newAttendanceType) { Require.NotNull(userId, nameof(userId)); Require.NotNull(eventId, nameof(eventId)); var sameAttendances = _attendanceRepository.GetByPredicate(attendance => attendance.UserId == userId && attendance.EventId == eventId); if (sameAttendances.Count() != 1) { throw new PolicyException("There are no one attendance on this event for this user"); } var attendanceToUpdate = sameAttendances.Single(); attendanceToUpdate.AttendanceType = newAttendanceType; _attendanceRepository.Update(attendanceToUpdate); }
private string GetAttenTypeStr(object typeValue) { if (typeValue == DBNull.Value) { return(string.Empty); } int AttenType = 0; if (!int.TryParse(typeValue.ToString(), out AttenType)) { return(string.Empty); } AttendanceType attendanceType = (AttendanceType)AttenType; foreach (string key in m_dicAttenType.Keys) { if (m_dicAttenType[key] == attendanceType) { return(key); } } return(string.Empty); }
public ActionResult Edit([Bind(Include = "AttendanceTypeID,Name")] AttendanceType attendanceType, string existing) { Session["err"] = "Error, Please Check Input Fields"; Session["msg"] = ""; if (ModelState.IsValid) { if (attendanceType.Name != existing) { AttendanceType attendanceTypeexisting = db.AttendanceTypes.Where(s => s.Name == attendanceType.Name).FirstOrDefault(); if (attendanceTypeexisting != null) { Session["err"] = "AttendanceType name already exists"; ViewBag.Existing = existing; ViewBag.Message = Session["msg"]; ViewBag.Error = Session["err"]; Session["err"] = ""; Session["msg"] = ""; return(View(attendanceType)); } } db.Entry(attendanceType).State = EntityState.Modified; db.SaveChanges(); Session["err"] = ""; Session["msg"] = "Modified Successfully"; return(RedirectToAction("Index")); } ViewBag.Existing = existing; ViewBag.Message = Session["msg"]; ViewBag.Error = Session["err"]; Session["err"] = ""; Session["msg"] = ""; return(View(attendanceType)); }
async Task ParseEventData_2(ILogEnd log, MyDbContext data, Event evt, string htmlText, long eventTawId) { // this page is so badly coded the HTML is invalid, chrome shows it correctly though, kudos to it // but HtmlAgilityPack just fails on it var eventInfoText = htmlText.TakeStringBetween("<table cellpadding=\"20\" cellspacing=\"5\">", "</table>"); var eventInfoDoc = new HtmlDocument(); eventInfoDoc.LoadHtml(eventInfoText); var eventInfo = new HtmlTwoColsStringTable(eventInfoDoc.DocumentNode); /* * Name GRAW Practice -- Saber Squad Thursday Night (NA-SA) * Description GRAW Practice -- Saber Squad Thursday Night (NA-SA) * Type Practice * Unit Ghost Recon * When From: 6/3/2016 04:00:00 +02:00 to: 6/3/2016 05:00:00 +02:00 * Mandatory Yes * Cancelled No */ evt.Name = eventInfo["Name"]; evt.Description = eventInfo["Description"]; evt.Type = eventInfo["Type"]; evt.Mandatory = eventInfo["Mandatory"] == "Yes"; evt.Cancelled = eventInfo["Cancelled"] == "Yes"; var when = eventInfo["When"]; var strFrom = when.TakeStringBetween("from:", "to:", StringComparison.InvariantCultureIgnoreCase).Trim(); if (strFrom != null) { evt.From = ParseUSDateTime(strFrom); } var strTo = when.TakeStringAfter("to:", StringComparison.InvariantCultureIgnoreCase).Trim(); if (strTo != null) { evt.To = ParseUSDateTime(strTo); } var attendeesText = htmlText.TakeStringBetween("<table width=100%>", "</table>"); var attendessDoc = new HtmlDocument(); attendessDoc.LoadHtml(attendeesText); var attendeesTable = new HtmlTable(attendessDoc.DocumentNode); var newPersonEvents = new List <PersonEvent>(); var personEvents = evt.Attended.ToList(); foreach (var row in attendeesTable) { var name = row[0]?.InnerText?.Trim(); var nameHref = row[0]?.SelectSingleNode("a")?.GetAttributeValue("href", ""); // http://taw.net/event/66327.aspx last row, unit name has no link if (nameHref != null && nameHref.StartsWith("/member")) { if (name.IsNullOrWhiteSpace()) { // a deleted member attended event, so there is a row of event attendee with empty name } else { var person = await GetPersonFromName(data, name); var personToEvent = personEvents.FirstOrDefault(p => p.EventId == evt.EventId && p.PersonId == person.PersonId); if (personToEvent == null) { personToEvent = new PersonEvent(); personToEvent.EventId = evt.EventId; personToEvent.PersonId = person.PersonId; personEvents.Add(personToEvent); newPersonEvents.Add(personToEvent); } var attendanceStr = row[1]?.InnerText?.Trim(); AttendanceType attendanceType = AttendanceType.Unknown; if (attendanceStr != null && Enum.TryParse(attendanceStr.ToLowerInvariant(), true, out attendanceType)) { personToEvent.AttendanceType = attendanceType; } var timestampStr = row[2]?.InnerText?.Trim(); if (!timestampStr.Contains("--")) { personToEvent.TimeStamp = ParseUSDateTime(timestampStr); } } } else if (nameHref != null && nameHref.StartsWith("/unit")) { var unitTawIdStr = nameHref.Split('/', '\\').Last().RemoveFromEnd(".aspx".Length); var unitTawId = int.Parse(unitTawIdStr); var unit = await GetUnit(data, unitTawId, name); evt.Units.Add(unit); } else if (nameHref == null) { // event with no unit } else { throw new Exception("something is wrong, found unexpected data, taw event id:" + eventTawId); } } newPersonEvents.ForEach(pe => data.PersonEvents.Add(pe)); }
public static string GetName(AttendanceType ID) { return(items[ID].ToString()); }
/// <summary> /// 添加考勤规则 /// </summary> /// <param name="attendanceType"></param> /// <returns></returns> public static int Add(AttendanceType attendanceType) { return(AttendanceTypeDal.Add(attendanceType)); }
public static List <Attendance> FindAttendanceByUserAndDateAndType(int uid, DateTime dateTime, AttendanceType type) { int year = dateTime.Year; int month = dateTime.Month; int day = dateTime.Day; DateTime timeStart = new DateTime(year, month, day, 0, 0, 0); DateTime timeEnd = timeStart.AddDays(1); SmallSimpleOAContext ctx = new SmallSimpleOAContext(); return(ctx.Attendance.Where(a => a.UzerId.Equals(uid) && a.ActionTime >= timeStart && a.ActionTime < timeEnd && a.ActionType == (int)type && a.Valid == true).ToList()); }
/// <summary> /// 修改考勤规则 /// </summary> /// <param name="attendanceType"></param> /// <returns></returns> public static int Update(AttendanceType attendanceType) { return(AttendanceTypeDal.Update(attendanceType)); }
public ActionResult Save(long studentid, DateTime?date, DateTime?dateTo, DateTime?dateFrom, AttendanceDateType datetype, AttendanceStatus status, AttendanceType type_group, int?eca, string reason) { // strip hours, minutes and seconds if (date.HasValue) { date = new DateTime(date.Value.Year, date.Value.Month, date.Value.Day); } if (dateTo.HasValue) { dateTo = new DateTime(dateTo.Value.Year, dateTo.Value.Month, dateTo.Value.Day); } if (dateFrom.HasValue) { dateFrom = new DateTime(dateFrom.Value.Year, dateFrom.Value.Month, dateFrom.Value.Day); } var usr = repository.GetUser(studentid); if (usr == null) { return(SendJsonErrorResponse("Unable to find student")); } if (!dateFrom.HasValue && !date.HasValue) { return(Json("Date not specified".ToJsonFail())); } var currentDate = date.HasValue ? date.Value : dateFrom.Value; int?classid = null; switch (type_group) { case AttendanceType.ECA: if (!eca.HasValue) { return(Json("ECA not selected".ToJsonFail())); } // TODO: check that this is ECA teacher // handle ranges later if (datetype == AttendanceDateType.SINGLEDAY) { if (!date.HasValue) { return(Json("Date not specified".ToJsonFail())); } var at = repository.GetEcaAttendance(studentid, eca.Value, date.Value); if (at == null) { at = new ioschools.DB.attendance() { date = date.Value, ecaid = eca, reason = reason, status = status.ToString(), creator = sessionid.Value }; usr.attendances.Add(at); } else { return(Json("Attendance already taken".ToJsonFail())); } } break; case AttendanceType.SCHOOLCLASS: var year = date.HasValue ? date.Value.Year : dateFrom.Value.Year; var usrclass = usr.classes_students_allocateds.SingleOrDefault(x => x.year == year); if (usrclass == null) { return(Json("Student does not have a class assigned".ToJsonFail())); } // if teacher, make sure student is in their class if (auth.group == UserGroup.TEACHER) { if (!repository.IsStudentInMyClass(sessionid.Value, studentid, year)) { return(Json("Student is not in your class".ToJsonFail())); } } classid = usrclass.classid; // handle ranges later if (datetype == AttendanceDateType.SINGLEDAY) { if (!date.HasValue) { return(Json("Date not specified".ToJsonFail())); } var att = repository.GetClassAttendance(studentid, classid.Value, date.Value); if (att == null) { att = new ioschools.DB.attendance() { date = date.Value, classid = classid, reason = reason, status = status.ToString(), creator = sessionid.Value }; usr.attendances.Add(att); } else { return(Json("Attendance already taken".ToJsonFail())); } } break; } // handle date ranges if (datetype == AttendanceDateType.RANGE) { if (!dateFrom.HasValue || !dateTo.HasValue) { return(Json("Date not specified".ToJsonFail())); } // validate dates if (dateTo < dateFrom) { return(Json("Invalid date range specified".ToJsonFail())); } switch (type_group) { case AttendanceType.SCHOOLCLASS: if (!classid.HasValue) { return(SendJsonErrorResponse("Unable to add attendance for the specified range")); } while (dateFrom <= dateTo) { var att = repository.GetClassAttendance(studentid, classid.Value, dateFrom.Value); if (att == null) { att = new ioschools.DB.attendance() { date = dateFrom.Value, classid = classid, reason = reason, status = status.ToString(), creator = sessionid.Value }; usr.attendances.Add(att); } dateFrom = dateFrom.Value.AddDays(1); } break; case AttendanceType.ECA: while (dateFrom <= dateTo) { var at = repository.GetEcaAttendance(studentid, eca.Value, dateFrom.Value); if (at == null) { at = new ioschools.DB.attendance() { date = dateFrom.Value, ecaid = eca, reason = reason, status = status.ToString(), creator = sessionid.Value }; usr.attendances.Add(at); } dateFrom = dateFrom.Value.AddDays(1); } break; } } // invalidate user cache usr.updated = DateTime.Now; try { repository.Save(); } catch (Exception ex) { return(SendJsonErrorResponse(ex)); } // check if there is more than 3 entries this week // only include late/absent entries var incidents = usr.attendances .Where(x => x.status != AttendanceStatus.EXCUSED.ToString()) .ToTotalThisWeek(currentDate); if (incidents >= Constants.ATTENDANCE_TRIGGER_LEVEL) { // create viewmodel var viewmodel = new EmailAttendanceViewModel { days = incidents, offender = usr.ToName(), link = string.Concat(Constants.HTTP_HOST, "/users/", studentid) }; // send email to head of school var schoolid = usr.classes_students_allocateds.Single(x => x.year == currentDate.Year).school_class.schoolid; var admins = repository.GetUsers(null, null, schoolid, null, UserGroup.HEAD, null, null, null, currentDate.Year, null); foreach (var admin in admins) { var receiverEmail = admin.email; if (!string.IsNullOrEmpty(receiverEmail)) { viewmodel.receiver = admin.ToName(); this.SendEmail( EmailViewType.ADMIN_ATTENDANCE, viewmodel, " School Attendance Info", receiverEmail, viewmodel.receiver); } } } return(Json("Attendance updated successfully".ToJsonOKMessage())); }
public AttendanceTypeViewModel(AttendanceType attendanceType) { Id = attendanceType.Id; Name = attendanceType.Name; }
public static SearchPhrase ToEntity(this AddEditSearchPhraseModel model, ProviderPortalEntities db) { SearchPhrase searchPhrase = new SearchPhrase(); if (model.SearchPhraseId.HasValue) { searchPhrase = db.SearchPhrases.Find(model.SearchPhraseId); if (searchPhrase == null) { return(null); } } searchPhrase.Phrase = model.SearchPhrase; searchPhrase.RemovePhraseFromSearch = model.RemovePhraseFromSearch; if (model.SearchPhraseId.HasValue) { searchPhrase.ModifiedByUserId = Permission.GetCurrentUserId(); searchPhrase.ModifiedDateTimeUtc = DateTime.UtcNow; } else { searchPhrase.CreatedByUserId = Permission.GetCurrentUserId(); searchPhrase.CreatedDateTimeUtc = DateTime.UtcNow; Int32 nextOrdinal = 1; SearchPhrase maxOrdinal = db.SearchPhrases.OrderByDescending(x => x.Ordinal).FirstOrDefault(); if (maxOrdinal != null) { nextOrdinal = maxOrdinal.Ordinal + 1; } searchPhrase.Ordinal = nextOrdinal; searchPhrase.RecordStatusId = (Int32)Constants.RecordStatus.Live; } // Remove any existing and not selected Qualification Levels List <QualificationLevel> existingQualificationLevels = searchPhrase.QualificationLevels.ToList(); foreach (QualificationLevel qualificationLevel in existingQualificationLevels.Where(x => !model.SelectedQualificationLevels.Contains(x.QualificationLevelId))) { searchPhrase.QualificationLevels.Remove(qualificationLevel); } // Add any new Qualification Levels foreach (Int32 qlId in model.SelectedQualificationLevels) { QualificationLevel ql = searchPhrase.QualificationLevels.FirstOrDefault(x => x.QualificationLevelId == qlId); if (ql == null) { ql = db.QualificationLevels.Find(qlId); if (ql != null) { searchPhrase.QualificationLevels.Add(ql); } } } // Remove any existing and not selected Study Modes List <StudyMode> existingStudyModes = searchPhrase.StudyModes.ToList(); foreach (StudyMode studyMode in existingStudyModes.Where(x => !model.SelectedStudyModes.Contains(x.StudyModeId))) { searchPhrase.StudyModes.Remove(studyMode); } // Add any new Study Modes foreach (Int32 smId in model.SelectedStudyModes) { StudyMode sm = searchPhrase.StudyModes.FirstOrDefault(x => x.StudyModeId == smId); if (sm == null) { sm = db.StudyModes.Find(smId); if (sm != null) { searchPhrase.StudyModes.Add(sm); } } } // Remove any existing and not selected Attendance Types List <AttendanceType> existingAttendanceTypes = searchPhrase.AttendanceTypes.ToList(); foreach (AttendanceType attendanceType in existingAttendanceTypes.Where(x => !model.SelectedAttendanceTypes.Contains(x.AttendanceTypeId))) { searchPhrase.AttendanceTypes.Remove(attendanceType); } // Add any new Attendance Types foreach (Int32 atId in model.SelectedAttendanceTypes) { AttendanceType at = searchPhrase.AttendanceTypes.FirstOrDefault(x => x.AttendanceTypeId == atId); if (at == null) { at = db.AttendanceTypes.Find(atId); if (at != null) { searchPhrase.AttendanceTypes.Add(at); } } } // Remove any existing and not selected Attendance Patterns List <AttendancePattern> existingAttendancePatterns = searchPhrase.AttendancePatterns.ToList(); foreach (AttendancePattern attendancePattern in existingAttendancePatterns.Where(x => !model.SelectedAttendancePatterns.Contains(x.AttendancePatternId))) { searchPhrase.AttendancePatterns.Remove(attendancePattern); } // Add any new Attendance Patterns foreach (Int32 apId in model.SelectedAttendancePatterns) { AttendancePattern ap = searchPhrase.AttendancePatterns.FirstOrDefault(x => x.AttendancePatternId == apId); if (ap == null) { ap = db.AttendancePatterns.Find(apId); if (ap != null) { searchPhrase.AttendancePatterns.Add(ap); } } } return(searchPhrase); }