Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }