/// <summary>
 /// Метод, обрабатывающий изменение выбранной группы в комбобоксе.
 /// </summary>
 /// <param name="window">Объект окна для получения данных из комбобокса</param>
 public void GroupControlComboBox_SelectionChanged(Window1 window)
 {
     if (window.groupControlComboBox.SelectedItem == null)
     {
         return;
     }
     currentGroup = MTSystem.findGroupById(((Teacher)window.currentUser).getGroupId(window.groupControlComboBox.SelectedIndex));
     RefreshData(window);
 }
        /// <summary>
        /// Метод, инициализирующий комбобокс групп
        /// </summary>
        /// <param name="w">Объект главного окна для вывода результата</param>
        public void InitializeComboBox(Window1 w)
        {
            Teacher t = (Teacher)w.currentUser;

            if (t.GroupIdsCount == 0)
            {
                currentGroup = null;
                return;
            }
            w.groupControlComboBox.Items.Clear();
            for (int i = 0; i < t.GroupIdsCount; i++)
            {
                w.groupControlComboBox.Items.Add(MTSystem.findGroupById(t.getGroupId(i)).Name);
            }
            w.groupControlComboBox.SelectedIndex = 0;
        }
        /// <summary>
        /// Метод, просчитывающий текучку и отработанные часы по данному периоду времени.
        /// </summary>
        /// <param name="w">Объект главного окна для отображения данных</param>
        void CountDataFields(Window1 w)
        {
            int            fulltime = 0, startStudentsCount = 0, endStudentsCount = 0;
            List <Session> l = MTSystem.LoadSessionsByGroupIdByTime(currentGroup.Id, currentDateRange.Start, currentDateRange.End);

            if (l[0] != null)
            {
                for (int i = 0; i < l.Count; i++)
                {
                    fulltime += l[i].Duration;
                }

                startStudentsCount = l[0].StudentsCount;
                endStudentsCount   = l[l.Count - 1].StudentsCount;
                w.loseBlock.Text   = ((startStudentsCount - endStudentsCount) * (-100) / startStudentsCount).ToString() + "%";
            }
            else
            {
                w.loseBlock.Text = "Отсутствуют данные";
            }
            w.hoursBlock.Text = (fulltime / 60) + " час.";
            return;
        }
        /// <summary>
        /// Метод обновления данных в окне. Вызывается при выборе группы в комбобоксе.
        /// </summary>
        /// <param name="window">Объект окна для отображения.</param>
        public void RefreshData(Window1 window)
        {
            if (currentGroup == null)
            {
                return;
            }
            window.idBlock.Text   = currentGroup.Id.ToString();
            window.nameBlock.Text = currentGroup.Name;
            window.groupColorPicker.SelectedColor = currentGroup.Color.Color;
            window.typeBlock.Text      = currentGroup.Type.Name;
            window.levelBlock.Text     = currentGroup.Level.Name;
            window.planHoursBlock.Text = currentGroup.PlanHours.ToString();

            CountDataFields(window);

            window.infoBigGrid.Items.Clear();
            window.infoSmallGrid.Items.Clear();
            if (currentGroup.StudentsCount > 0)
            {
                List <int> studentIds = new List <int>();
                for (int i = 0; i < currentGroup.StudentsCount; i++)
                {
                    studentIds.Add(currentGroup.getStudentId(i));
                }
                List <Student> students = MTSystem.LoadStudents(studentIds);
                for (int i = 0; i < students.Count; i++)
                {
                    SampleGrid sg = students[i].toSample();
                    sg.P5 = (students[i].checkGroupId(currentGroup.Id))?"Ходит":"Выбыл";
                    window.infoBigGrid.Items.Add(sg);
                }
            }
            for (int i = 0; i < currentGroup.TeachersCount; i++)
            {
                window.infoSmallGrid.Items.Add(MTSystem.findTeacherById(currentGroup.getTeacherId(i)).toSample());
            }
        }
        /// <summary>
        /// Метод сохранения группы.
        /// </summary>
        /// <param name="infoBigGrid">Сетка для сохранения учеников группы</param>
        public void SaveGroup(DataGrid infoBigGrid)
        {
            if (currentGroup == null)
            {
                MessageBox.Show("Группа не выбрана!");
                return;
            }
            List <int> students = new List <int>();

            for (int i = 0; i < currentGroup.TeachersCount; i++)
            {
                students.Add(currentGroup.getTeacherId(i));
            }

            currentGroup.ClearStudentIds();


            for (int i = 0; i < infoBigGrid.Items.Count; i++)
            {
                SampleGrid sg = (SampleGrid)infoBigGrid.Items[i];
                Student    s  = sg.toStudent();
                if (sg.P5 == "Ходит")
                {
                    if (!s.checkGroupId(currentGroup.Id))
                    {
                        s.addGroupId(currentGroup.Id);
                        MTSystem.SaveStudent(s);
                    }
                }
                else
                {
                    if (s.checkGroupId(currentGroup.Id))
                    {
                        s.deleteGroupId(currentGroup.Id);
                        MTSystem.SaveStudent(s);
                    }
                }
                currentGroup.addStudentId(s.Id);
            }
            int count = 0;

            for (int i = 0; i < students.Count; i++)
            {
                for (int j = 0; j < currentGroup.StudentsCount; j++)
                {
                    if (students[i] == currentGroup.getStudentId(j))
                    {
                        count = 1;
                        break;
                    }
                }
                if (count == 0)
                {
                    Student s = MTSystem.LoadStudent(students[i]);
                    if (s != null)
                    {
                        if (s.checkGroupId(currentGroup.Id))
                        {
                            s.deleteGroupId(currentGroup.Id);
                            MTSystem.SaveStudent(s);
                        }
                    }
                }
                count = 0;
            }

            if (MTSystem.SaveGroup(currentGroup))
            {
                MessageBox.Show("Сохранение прошло успешно!");
            }
        }