private void AssignClass(DataItemMegaItem data, ViewItemExam view)
 {
     if (data.MegaItemType == PowerPlannerSending.MegaItemType.Event)
     {
         view.Class = _semester.NoClassClass;
     }
     else
     {
         view.Class = _semester.Classes.First(i => i.Identifier == data.UpperIdentifier);
     }
 }
示例#2
0
        /// <summary>
        /// Returns null if none of the expected types
        /// </summary>
        /// <param name="semester"></param>
        /// <returns></returns>
        public BaseViewItemHomeworkExam CreateViewItemTaskOrEvent(IEnumerable <ViewItemClass> classes, ViewItemClass noClassClass)
        {
            BaseViewItemHomeworkExam view;

            switch (MegaItemType)
            {
            case MegaItemType.Homework:
            case MegaItemType.Task:
                view = new ViewItemHomework(this);
                break;

            case MegaItemType.Exam:
            case MegaItemType.Event:
                view = new ViewItemExam(this);
                break;

            default:
                return(null);
            }

            if (view is ViewItemHomework)
            {
                var h = view as ViewItemHomework;
                if (this.MegaItemType == MegaItemType.Task)
                {
                    h.Class = noClassClass;
                }
                else
                {
                    h.Class = classes.First(i => i.Identifier == this.UpperIdentifier);
                }
            }
            else if (view is ViewItemExam)
            {
                var e = view as ViewItemExam;
                if (this.MegaItemType == MegaItemType.Event)
                {
                    e.Class = noClassClass;
                }
                else
                {
                    e.Class = classes.First(i => i.Identifier == this.UpperIdentifier);
                }
            }

            return(view);
        }
示例#3
0
        protected override void OnDataChangedEvent(DataChangedEvent e)
        {
            base.OnDataChangedEvent(e);

            if (_semester != null)
            {
                // Look through edited items
                if (Class.HomeworkAndExams != null)
                {
                    foreach (var edited in e.EditedItems.OfType <DataItemMegaItem>())
                    {
                        var matched = Class.HomeworkAndExams.FirstOrDefault(i => i.Identifier == edited.Identifier);

                        // If found matching
                        if (matched != null)
                        {
                            // If no longer under this class, we need to re-assign the class
                            if (matched is ViewItemHomework)
                            {
                                var h = matched as ViewItemHomework;
                                if (h.Class.Identifier != edited.UpperIdentifier)
                                {
                                    if (edited.UpperIdentifier == _semester.NoClassClass.Identifier)
                                    {
                                        h.Class = _semester.NoClassClass;
                                    }
                                    else
                                    {
                                        h.Class = _semester.Classes.FirstOrDefault(i => i.Identifier == edited.UpperIdentifier);
                                    }
                                }
                            }
                            else if (matched is ViewItemExam)
                            {
                                var exam = matched as ViewItemExam;
                                if (exam.Class.Identifier != edited.UpperIdentifier)
                                {
                                    if (edited.UpperIdentifier == _semester.NoClassClass.Identifier)
                                    {
                                        exam.Class = _semester.NoClassClass;
                                    }
                                    else
                                    {
                                        exam.Class = _semester.Classes.FirstOrDefault(i => i.Identifier == edited.UpperIdentifier);
                                    }
                                }
                            }
                        }
                    }
                }

                // Re-assigning classes needs to be done before, otherwise we'll no longer have a reference to the object
                _semester.HandleDataChangedEvent(e);

                // Only calculates if needed
                if (IsGradesLoaded)
                {
                    Class.CalculateEverything();
                }

                // If we previously didn't have old items, see whether we do now
                if (!HasPastCompletedHomework)
                {
                    bool hasPastCompleted = e.EditedItems.Concat(e.NewItems).OfType <DataItemMegaItem>().Any(
                        h => IsPastCompletedHomeworkFunction(_classId, TodayAsUtc).Invoke(h));

                    if (hasPastCompleted)
                    {
                        HasPastCompletedHomework = true;
                    }
                }

                if (!HasPastCompletedExams)
                {
                    bool hasPastCompleted = e.EditedItems.Concat(e.NewItems).OfType <DataItemMegaItem>().Any(
                        exam => IsPastCompletedExamFunction(_classId, TodayAsUtc).Invoke(exam));

                    if (hasPastCompleted)
                    {
                        HasPastCompletedExams = true;
                    }
                }

                if (UnassignedItems != null)
                {
                    // Remove any deleted
                    if (e.DeletedItems.Any())
                    {
                        UnassignedItems.RemoveWhere(i => e.DeletedItems.Contains(i.Identifier));
                    }

                    List <DataItemMegaItem> potentialNew = new List <DataItemMegaItem>(e.NewItems.OfType <DataItemMegaItem>());

                    // Look through edited
                    foreach (var edited in e.EditedItems.OfType <DataItemMegaItem>())
                    {
                        var matching = UnassignedItems.FirstOrDefault(i => i.Identifier == edited.Identifier);
                        if (matching != null)
                        {
                            // If it should be removed
                            if (!IsUnassignedChild(edited))
                            {
                                UnassignedItems.Remove(matching);
                            }

                            // Otherwise it needs to be updated and then re-sorted
                            else
                            {
                                matching.PopulateFromDataItem(edited);
                                UnassignedItems.Remove(matching);
                                UnassignedItems.InsertSorted(matching);
                            }
                        }

                        // New
                        else
                        {
                            potentialNew.Add(edited);
                        }
                    }

                    foreach (var newItem in potentialNew)
                    {
                        if (IsUnassignedChild(newItem))
                        {
                            BaseViewItemHomeworkExam newViewItem;
                            if (newItem.MegaItemType == PowerPlannerSending.MegaItemType.Homework)
                            {
                                newViewItem = new ViewItemHomework(newItem)
                                {
                                    Class          = this.Class,
                                    WeightCategory = ViewItemWeightCategory.UNASSIGNED
                                };
                            }
                            else if (newItem.MegaItemType == PowerPlannerSending.MegaItemType.Exam)
                            {
                                newViewItem = new ViewItemExam(newItem)
                                {
                                    Class          = this.Class,
                                    WeightCategory = ViewItemWeightCategory.UNASSIGNED
                                };
                            }
                            else
                            {
                                continue;
                            }

                            UnassignedItems.InsertSorted(newViewItem);
                        }
                    }

                    HasUnassignedItems = UnassignedItems.Count > 0;
                }
            }
        }
示例#4
0
 private void AssignClass(DataItemMegaItem data, ViewItemExam view)
 {
     view.Class = Semester.Classes.FirstOrDefault(i => i.Identifier == data.UpperIdentifier);
 }