//GET People/AddToGroup public ActionResult AddMemberToGroup(int? PersonId) { if (PersonId == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Person person = db.People.Find(PersonId); if (person == null) { return HttpNotFound(); } SelectList allthegroups = new SelectList(db.Groups, "GroupId", "Name"); PersonGroupingViewModel viewmodel = new PersonGroupingViewModel(); viewmodel.PersonId = person.PersonId; viewmodel.FirstName = person.FirstName; viewmodel.LastName = person.LastName; viewmodel.AllGroups = allthegroups; //viewmodel.Memberships cannot be empty AND THEY ARE ALWAYS EMPTY if (person.Memberships == null) { IList<Group> members = new List<Group>(); viewmodel.Memberships = members; } else { viewmodel.Memberships = person.Memberships; } return View(viewmodel); }
public ActionResult AddMemberToGroup(PersonGroupingViewModel viewmodel) { if (ModelState.IsValid) { //add the person to the group int PersonId = viewmodel.PersonId; int GroupId = viewmodel.SelectedGroupId; Person person = db.People.Find(PersonId); Group group = db.Groups.Find(GroupId); group.Members.Add(person); db.SaveChanges(); //add person to group's projects & create ppr with removewithgroup = true List<Person> isingroupalready = new List<Person>(); foreach(Project project in group.Projects) //for every project the group is assigned to { foreach(PersonProjectRecord ppr in project.PersonProjectRecords) //for every ppr on the project { //if they are already on the project and their rwg flag is false add them to this list if (ppr.PersonId == person.PersonId && ppr.RemoveWithGroup == false) { isingroupalready.Add(person); } } //if the list is empty (person not already in group w/ false rwg flag) //then make a new ppr and add them to project with true rwg flag if(isingroupalready.Count == 0) { PersonProjectRecord newrecord = new PersonProjectRecord(); newrecord.PersonId = person.PersonId; newrecord.ProjectId = project.ProjectId; newrecord.RemoveWithGroup = true; db.PersonProjectRecords.Add(newrecord); } } db.SaveChanges(); //create a new viewmodel to pass back to the view with updated memberships (v.important) PersonGroupingViewModel vm = new PersonGroupingViewModel(); SelectList allthegroups = new SelectList(db.Groups, "GroupId", "Name"); vm.PersonId = person.PersonId; vm.FirstName = person.FirstName; vm.LastName = person.LastName; vm.Memberships = person.Memberships; vm.AllGroups = allthegroups; return View(vm); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Something is wrong with the returned viewmodel."); }
public ActionResult RemoveMemberFromGroup(PersonGroupingViewModel viewmodel) { if (ModelState.IsValid) { //remove the person from the group int PersonId = viewmodel.PersonId; int GroupId = viewmodel.SelectedGroupId; Person person = db.People.Find(PersonId); Group group = db.Groups.Find(GroupId); group.Members.Remove(person); db.SaveChanges(); //remove from projects if removewithgroup flag is true List<PersonProjectRecord> pprstoremove = new List<PersonProjectRecord>(); foreach(Project project in group.Projects) //for each project in the group { foreach(PersonProjectRecord ppr in project.PersonProjectRecords) //search pprs in the project { if(ppr.PersonId == person.PersonId && ppr.RemoveWithGroup == true) { //add this person's pprs where rwg = true to a list pprstoremove.Add(ppr); } } } //you've got to remove them this way (via list) because otherwise messes with the enumerator //hella exceptions foreach(PersonProjectRecord ppr in pprstoremove) { db.PersonProjectRecords.Remove(ppr); } db.SaveChanges(); //create a new viewmodel to pass back to the view with updated memberships (v.important) PersonGroupingViewModel vm = new PersonGroupingViewModel(); List<Group> membergroups = new List<Group>(); foreach (Group g in person.Memberships) { membergroups.Add(g); } SelectList membershipgroups = new SelectList(membergroups, "GroupId", "Name"); vm.PersonId = person.PersonId; vm.FirstName = person.FirstName; vm.LastName = person.LastName; vm.Memberships = person.Memberships; vm.AllGroups = membershipgroups; return View(vm); } return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Something is wrong with the returned viewmodel."); }
//GET People/RemoveMemberFromGroup public ActionResult RemoveMemberFromGroup(int? PersonId) { if (PersonId == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Person person = db.People.Find(PersonId); if (person == null) { return HttpNotFound(); } //create a list of groups the member is already in for the selectlist List<Group> membergroups = new List<Group>(); foreach(Group group in person.Memberships) { membergroups.Add(group); } SelectList membershipgroups = new SelectList(membergroups, "GroupId", "Name"); PersonGroupingViewModel viewmodel = new PersonGroupingViewModel(); viewmodel.PersonId = person.PersonId; viewmodel.FirstName = person.FirstName; viewmodel.LastName = person.LastName; viewmodel.AllGroups = membershipgroups; //viewmodel.Memberships cannot be empty if (person.Memberships == null) { IList<Group> members = new List<Group>(); viewmodel.Memberships = members; } else { viewmodel.Memberships = person.Memberships; } return View(viewmodel); }
//GET: EditGroupMemberships public ActionResult EditGroupMemberships(int? PersonId) { if(PersonId == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Person person = db.People.Find(PersonId); if (person == null) { return HttpNotFound(); } List<Group> allgroups = new List<Group>(); foreach (Group g in db.Groups) { allgroups.Add(g); } PersonGroupingViewModel viewmodel = new PersonGroupingViewModel(); viewmodel.PersonId = person.PersonId; viewmodel.FirstName = person.FirstName; viewmodel.LastName = person.LastName; viewmodel.AllAvailableGroups = allgroups; //viewmodel.Memberships cannot be empty AND THEY ARE ALWAYS EMPTY if (person.Memberships == null) { IList<Group> members = new List<Group>(); viewmodel.Memberships = members; } else { viewmodel.Memberships = person.Memberships; } return View(viewmodel); }