public ActionResult Index(TeamEvaluationSettings model) { Assignment = db.Assignments.Find(model.AssignmentID); if (ModelState.IsValid) { //delete preexisting settings to prevent an FK relation issue TeamEvaluationSettings setting = db.TeamEvaluationSettings.Find(model.AssignmentID); if (setting != null) { db.TeamEvaluationSettings.Remove(setting); } db.SaveChanges(); //...and then re-add it. Assignment.TeamEvaluationSettings = model; db.SaveChanges(); WasUpdateSuccessful = true; } else { WasUpdateSuccessful = false; } return(base.PostBack(Assignment.TeamEvaluationSettings)); }
/// <summary> /// yc: with a given list of assignments, copy them from one course to another. /// </summary> /// <param name="courseDestination"></param> /// <param name="courseSource"></param> /// <param name="previousAssignments"></param> /// <returns></returns> public bool CopyAssignments(Course courseDestination, Course courseSource, List <Assignment> previousAssignments) { try { //calculate # of weeks since start date double difference = courseDestination.StartDate.Subtract(courseSource.StartDate).TotalDays; //for linking purposes, key == previous id, value == the clone course that is teh same Dictionary <int, int> linkHolder = new Dictionary <int, int>(); foreach (Assignment p in previousAssignments) { //disabling assignments that are not finished being handled yet if (p.Type == AssignmentTypes.AnchoredDiscussion || p.Type == AssignmentTypes.CommitteeDiscussion || p.Type == AssignmentTypes.ReviewOfStudentWork) { continue; } int prid = -1, paid = p.ID; //for insert sake of cloned assigntment we must temprarly hold the list of assignments //whos id links to this assignment for temporary holding List <Assignment> previouslyLinked = (from pl in db.Assignments where pl.PrecededingAssignmentID == paid select pl).ToList(); //remove the links for now foreach (Assignment link in previouslyLinked) { link.PrecededingAssignmentID = null; db.Entry(link).State = EntityState.Modified; db.SaveChanges(); } //tmp holders if (p.RubricID != null) { prid = (int)p.RubricID; } //we are now ready for copying Assignment na = new Assignment(p); //na = p; na.CourseID = courseDestination.ID; //rewrite course id na.IsDraft = true; na.AssociatedEvent = null; na.AssociatedEventID = null; na.PrecededingAssignmentID = null; na.AssignmentTeams = new List <AssignmentTeam>(); na.DiscussionTeams = new List <DiscussionTeam>(); na.ReviewTeams = new List <ReviewTeam>(); na.Deliverables = new List <Deliverable>(); SetUpClonedAssignmentTeams(p, na); //recalcualte new offsets for due dates on assignment if (p.CriticalReviewPublishDate != null) { na.CriticalReviewPublishDate = ((DateTime)(p.CriticalReviewPublishDate)).Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); } //CourseController cc = new CourseController(); // to retain the time incase of in differt daylightsavings .. shifts //DateTime dd = cc.convertFromUtc(courseSource.TimeZoneOffset, na.DueDate); //DateTime dt = cc.convertFromUtc(courseSource.TimeZoneOffset, na.DueTime); //DateTime rd = cc.convertFromUtc(courseSource.TimeZoneOffset, na.ReleaseDate); //DateTime rt = cc.convertFromUtc(courseSource.TimeZoneOffset, na.ReleaseTime); DateTime dd = na.DueDate.UTCToCourse(courseSource.ID); DateTime dt = na.DueTime.UTCToCourse(courseSource.ID); DateTime rd = na.ReleaseDate.UTCToCourse(courseSource.ID); DateTime rt = na.ReleaseTime.UTCToCourse(courseSource.ID); dd = dd.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); dt = dt.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); rd = rd.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); rt = rt.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); //convert back to utc //na.DueDate = cc.convertToUtc(courseDestination.TimeZoneOffset, dd); //na.DueTime = cc.convertToUtc(courseDestination.TimeZoneOffset, dt); //na.ReleaseDate = cc.convertToUtc(courseDestination.TimeZoneOffset, rd); //na.ReleaseTime = cc.convertToUtc(courseDestination.TimeZoneOffset, rt); na.DueDate = dd.CourseToUTC(courseDestination.ID); na.DueTime = dt.CourseToUTC(courseDestination.ID); na.ReleaseDate = rd.CourseToUTC(courseDestination.ID); na.ReleaseTime = rt.CourseToUTC(courseDestination.ID); //we now have a base to save db.Assignments.Add(na); db.SaveChanges(); //fix the link now foreach (Assignment link in previouslyLinked) { link.PrecededingAssignmentID = paid; db.Entry(link).State = EntityState.Modified; db.SaveChanges(); } linkHolder.Add(paid, na.ID); //for future assignment links if (p.PrecededingAssignmentID != null) { na.PrecededingAssignmentID = linkHolder[(int)p.PrecededingAssignmentID]; na.PreceedingAssignment = db.Assignments.Find(linkHolder[(int)p.PrecededingAssignmentID]); db.Entry(na).State = EntityState.Modified; db.SaveChanges(); } //copy assignmenttypes if (p.Type == AssignmentTypes.DiscussionAssignment || p.Type == AssignmentTypes.CriticalReviewDiscussion) { DiscussionSetting pds = (from ds in db.DiscussionSettings where ds.AssignmentID == paid select ds).FirstOrDefault(); DiscussionSetting nds = new DiscussionSetting(); nds.InitialPostDueDate = pds.InitialPostDueDate.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); nds.InitialPostDueDueTime = pds.InitialPostDueDueTime.Add(new TimeSpan(Convert.ToInt32(difference), 0, 0, 0)); nds.AssociatedEventID = null; nds.MaximumFirstPostLength = pds.MaximumFirstPostLength; nds.MinimumFirstPostLength = pds.MinimumFirstPostLength; nds.AnonymitySettings = pds.AnonymitySettings; na.DiscussionSettings = nds; db.Entry(na).State = EntityState.Modified; db.SaveChanges(); } //copy critical review settings if (p.Type == AssignmentTypes.CriticalReview) { CriticalReviewSettings pcs = (from ds in db.CriticalReviewSettings where ds.AssignmentID == paid select ds).FirstOrDefault(); if (pcs != null) { CriticalReviewSettings ncs = new CriticalReviewSettings(); ncs.ReviewSettings = pcs.ReviewSettings; na.CriticalReviewSettings = ncs; db.Entry(na).State = EntityState.Modified; db.SaveChanges(); } } //team eval if (p.Type == AssignmentTypes.TeamEvaluation) { TeamEvaluationSettings ptes = (from tes in db.TeamEvaluationSettings where tes.AssignmentID == paid select tes).FirstOrDefault(); if (ptes != null) { TeamEvaluationSettings ntes = new TeamEvaluationSettings(); ntes.DiscrepancyCheckSize = ptes.DiscrepancyCheckSize; ntes.RequiredCommentLength = ptes.RequiredCommentLength; ntes.MaximumMultiplier = ptes.MaximumMultiplier; ntes.AssignmentID = na.ID; na.TeamEvaluationSettings = ntes; db.Entry(na).State = EntityState.Modified; db.SaveChanges(); } } //components //rubrics if (p.RubricID != null) { CopyRubric(p, na); } ///deliverables List <Deliverable> pads = (from d in db.Deliverables where d.AssignmentID == paid select d).ToList(); foreach (Deliverable pad in pads) { Deliverable nad = new Deliverable(); nad.AssignmentID = na.ID; nad.DeliverableType = pad.DeliverableType; nad.Assignment = na; nad.Name = pad.Name; db.Deliverables.Add(nad); db.SaveChanges(); na.Deliverables.Add(nad); db.Entry(na).State = EntityState.Modified; db.SaveChanges(); } //abet stuff should prolly go here } return(true); } catch (Exception ex) { return(false); } }