Пример #1
0
        private void addLP_Click(object sender, EventArgs e)
        {
            var startingYear = 0;

            try
            {
                startingYear = int.Parse(lpStartingYear.Text);
            }
            catch {}

            var newLearningPlan = new LearningPlan()
            {
                name               = lpName.Text,
                speciality_code    = lpSpecialityCode.Text,
                speciality_name    = lpSpecialityName.Text,
                profile            = lpProfile.Text,
                starting_year      = startingYear,
                education_standard = lpEducationStandard.Text,
                faculty_id         = (int)lpFaculty.SelectedValue
            };

            lpRepo.add(newLearningPlan);

            RefreshLearningPlanList();
        }
Пример #2
0
        public double Evaluate(LearningPlan learningPlan, Requisition requisition, Schedule schedule, Meeting meetingToAdd)
        {
            var badMeetings  = GetCollidedMeetings(schedule, meetingToAdd);
            var totalPenalty = UnitPenalty * badMeetings.Count;

            return(totalPenalty);
        }
Пример #3
0
        public double Evaluate(LearningPlan learningPlan, Requisition requisition, Schedule schedule, Meeting meetingToAdd)
        {
            var totalPenalty = 0d;

            foreach (var rule in rules)
            {
                totalPenalty += rule.Evaluate(learningPlan, requisition, schedule, meetingToAdd);
            }

            return(totalPenalty);
        }
        public double Evaluate(LearningPlan learningPlan, Requisition requisition, Schedule schedule, Meeting meetingToAdd)
        {
            var classesInARowDifference = FindClassesInARowDifference(schedule, meetingToAdd);

            if (classesInARowDifference < 0)
            {
                return(0);
            }
            var totalPenalty = UnitPenalty * classesInARowDifference;

            return(totalPenalty);
        }
Пример #5
0
        private void PlansGrid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var studentPlanPeriod = ((List <StudentLearningPlanWithPeriodsView>)PlansGrid.DataSource)[e.RowIndex];

            currentLearningPlan            = lpRepo.get(studentPlanPeriod.learning_plan_id);
            currentLearningPlanDisciplines = lpdRepo.learningPlanAll(currentLearningPlan.id);
            var discIdDict = currentLearningPlanDisciplines.ToDictionary(d => d.id, d => d.name);

            currentLearningPlanDisciplineSemesters = lpdsRepo.learningPlanAll(studentPlanPeriod.learning_plan_id);

            var semesters = currentLearningPlanDisciplineSemesters
                            .Select(lpds => lpds.semester)
                            .OrderBy(sn => sn)
                            .Distinct()
                            .ToList();
            var semesterSpans = semesters.ToDictionary(s => s, s => new Tuple <DateTime, DateTime>(
                                                           new DateTime(currentLearningPlan.starting_year + ((s % 2 == 0) ? 1 : 0) + (int)Math.Floor((double)(s - 1) / 2), (s % 2 == 0) ? 2 : 9, 1),
                                                           new DateTime(currentLearningPlan.starting_year + 1 + (int)Math.Floor((double)(s - 1) / 2), (s % 2 == 0) ? 8 : 1, 31)
                                                           ));

            var studentSemestersWithYear = new List <Tuple <int, int> >();
            var studentSemesters         = new List <int>();

            for (int i = 0; i < semesters.Count; i++)
            {
                var semester = semesters[i];
                if (studentPlanPeriod.from <= semesterSpans[semester].Item2 &&
                    semesterSpans[semester].Item1 <= studentPlanPeriod.to)
                {
                    studentSemesters.Add(semester);
                    studentSemestersWithYear.Add(
                        new Tuple <int, int>(currentLearningPlan.starting_year + (int)Math.Floor((double)(semester - 1) / 2),
                                             (semester % 2 == 1) ? 1 : 2));
                }
            }

            var studentDisciplineSemesters = currentLearningPlanDisciplineSemesters
                                             .Where(sm => studentSemesters.Contains(sm.semester))
                                             .ToList();

            dsViews = DisciplineSemesterView.FromLpdsList(studentDisciplineSemesters, discIdDict);

            var semesterIntList = dsViews
                                  .Select(dsv => dsv.semester)
                                  .Distinct()
                                  .OrderBy(s => s)
                                  .ToList();
            var semesterViews = IntegerView.FromIntegerList(semesterIntList);

            SemestersGrid.DataSource = semesterViews;
            SemestersGrid.Columns["value"].HeaderText = "Семестр";
            SemestersGrid.Columns["value"].Width      = SemestersGrid.Width - 20;
        }
        public void EvaluateWhenNoPracticesInPlan()
        {
            var learningPlanItems = new[] { new LearningPlanItem("FT-202", new Discipline("OOP"), MeetingType.Lecture, GroupSize.HalfGroup, 2) };
            var learningPlan      = new LearningPlan(learningPlanItems);
            var testSchedule      = new Schedule(new Meeting[] { });
            var meetingToAdd      = MeetingCreator.CreateMeeting("OOP 514 Eg 0 2 0 1 FT-202#1");

            var lecturerHasPracticeWithSameFlowRule = new LecturerHasPracticeWithSameFlow();
            var actualPenalty = lecturerHasPracticeWithSameFlowRule.Evaluate(learningPlan, standardRequisition, testSchedule, meetingToAdd);

            Assert.AreEqual(0, actualPenalty);
        }
Пример #7
0
        public static (List <RequisitionItem>, LearningPlan) ConvertToRequisitions(GSRepository repo, string requisitionSheetName, string learningPlanSheetName)
        {
            var PlanData = SheetTableReader.ReadRowsFromSheet(repo, learningPlanSheetName, (1, 0), 6);

            var(planItemsAndLocations, allGroups) = ParseLearningPlanItems(PlanData);
            var learningPlanItems = planItemsAndLocations.Select(x => x.Item1).ToArray();
            var learningPlan      = new LearningPlan(learningPlanItems);
            var RequestionData    = SheetTableReader.ReadRowsFromSheet(repo, requisitionSheetName, (1, 0), 7);
            var requisitions      = ParseRequisitions(RequestionData, planItemsAndLocations, allGroups);

            return(requisitions, learningPlan);
        }
Пример #8
0
 public IActionResult Put(string id, [FromBody] LearningPlan learningPlan)
 {
     try
     {
         // save
         context.PutNote(id, learningPlan);
         return(Ok());
     }
     catch (Exception ex)
     {
         // return error message if there was an exception
         return(BadRequest(new { message = ex.Message }));
     }
 }
Пример #9
0
        public string update(LearningPlan LearningPlan, int id)
        {
            var response =
                ApiHelper.Post(ApiEndpoint + "/learningPlan/" + id.ToString(),
                               new Dictionary <string, string>
            {
                { "name", LearningPlan.name },
                { "speciality_code", LearningPlan.speciality_code },
                { "speciality_name", LearningPlan.speciality_name },
                { "profile", LearningPlan.profile },
                { "starting_year", LearningPlan.starting_year.ToString() },
                { "education_standard", LearningPlan.education_standard },
                { "faculty_id", LearningPlan.faculty_id.ToString() }
            });

            return(response);
        }
Пример #10
0
        public Schedule MakeSchedule(LearningPlan learningPlan, MeetingEvaluator evaluator, Requisition requisition)
        {
            var meetingsToFill = requisition.Items.Select(
                Conversions.RequisitionToMeetingConverter.ConvertRequisitionToMeetingWithoutTime).SelectMany(x => x).ToArray();
            var bestSchedule = new Schedule(new Meeting[0]);
            var bestPenalty  = double.PositiveInfinity;

            for (var i = 0; i < 100; ++i)
            {
                var shuffledMeetingsToFill = meetingsToFill.Shuffled();
                var tryingResult           = TryMakeSchedule(learningPlan, evaluator, shuffledMeetingsToFill, requisition);
                if (bestPenalty > tryingResult.Item2)
                {
                    bestPenalty  = tryingResult.Item2;
                    bestSchedule = tryingResult.Item1;
                }
            }

            return(bestSchedule);
        }
Пример #11
0
        public void Test()
        {
            var learningPlanItem =
                new LearningPlanItem("A", new Discipline("X"), MeetingType.Lecture, GroupSize.FullGroup, 1);
            var learningPlan  = new LearningPlan(new LearningPlanItem[] { learningPlanItem });
            var groupsChoices = new GroupsChoice[]
            { new GroupsChoice(new MeetingGroup[] { new MeetingGroup("A", GroupPart.FullGroup) }) };
            var groupRequisition        = new GroupRequisition[] { new GroupRequisition(groupsChoices) };
            var meetingTimeRequisitions = new MeetingTimeRequisition[]
            { new MeetingTimeRequisition(new MeetingTime[] { new MeetingTime(DayOfWeek.Friday, 5) }) };
            var requisition = new Requisition(new RequisitionItem[]
            {
                new RequisitionItem(learningPlanItem, groupRequisition, "", 1, meetingTimeRequisitions, new Teacher("1"), WeekType.Any)
            });

            var generator = new GreedyScheduleGenerator();
            var evaluator = new MeetingEvaluator(new IRule[0]);
            var schedule  = generator.MakeSchedule(learningPlan, evaluator, requisition);

            Assert.True(schedule.Meetings.Length == 1);
            var actualMeeting = schedule.Meetings[0];

            var expectedMeeting = new Meeting(new Discipline("X"), MeetingType.Lecture,
                                              new MeetingGroup[] { new MeetingGroup("A", GroupPart.FullGroup) })
            {
                MeetingTime = new MeetingTime(DayOfWeek.Friday, 5),
                Teacher     = new Teacher("1"),
                Location    = "",
                WeekType    = WeekType.Any,
            };

            Assert.AreEqual(expectedMeeting.MeetingTime, actualMeeting.MeetingTime);
            Assert.AreEqual(expectedMeeting.Discipline, actualMeeting.Discipline);
            Assert.AreEqual(expectedMeeting.Groups, actualMeeting.Groups);
            Assert.AreEqual(expectedMeeting.Location, actualMeeting.Location);
            Assert.AreEqual(expectedMeeting.MeetingType, actualMeeting.MeetingType);
            Assert.AreEqual(expectedMeeting.Teacher, actualMeeting.Teacher);
            Assert.AreEqual(expectedMeeting.WeekType, actualMeeting.WeekType);
        }
Пример #12
0
        private (Schedule, double) TryMakeSchedule(LearningPlan learningPlan, MeetingEvaluator evaluator, Meeting[] meetingsToFill, Requisition requisition)
        {
            var            penalty         = 0d;
            List <Meeting> currentMeetings = new List <Meeting>();

            foreach (var meeting in meetingsToFill)
            {
                var requisitionItem = GetCorrespondingRequisitionItem(meeting, requisition);
                var bestPenalty     = double.PositiveInfinity;
                var bestMeeting     = default(Meeting);

                foreach (var groupPriority in requisitionItem.GroupPriorities)
                {
                    foreach (var groupsChoice in groupPriority.GroupsChoices)
                    {
                        foreach (var meetingTimePriority in requisitionItem.MeetingTimePriorities)
                        {
                            foreach (var meetingTimeChoice in meetingTimePriority.MeetingTimeChoices)
                            {
                                meeting.MeetingTime = meetingTimeChoice;
                                meeting.Groups      = groupsChoice.Groups;
                                var currentPenalty = evaluator.Evaluate(learningPlan, requisition, new Schedule(currentMeetings.ToArray()), meeting);
                                if (bestPenalty > currentPenalty)
                                {
                                    bestPenalty = currentPenalty;
                                    bestMeeting = meeting.Copy();
                                }
                            }
                        }
                    }
                }
                currentMeetings.Add(bestMeeting);
            }

            return(new Schedule(currentMeetings.ToArray()), penalty);
        }
Пример #13
0
 public IActionResult LPPost([FromBody] LearningPlan newLP)
 {
     try
     {
         // save
         client.client.Cypher
         .Merge("(LP:LearningPlan { LearningPlanId: {id} })")
         .OnCreate()
         .Set("LP = {newLP}")
         .WithParams(new
         {
             id = newLP.LearningPlanId,
             newLP
         })
         .ExecuteWithoutResults();
         return(Ok());
     }
     catch (Exception ex)
     {
         // return error message if there was an exception
         return(BadRequest(new { message = ex.Message }));
     }
     //newUser =new  List<User>();
 }
Пример #14
0
        public ActionResult InsertSyll(Syll data)
        {
            List <Syllab> kita     = new List <Syllab>();
            Syllab        res      = new Syllab();
            Syllab        syllabus = new Syllab();



            syllabus.User_ID   = logID;
            syllabus.Course_ID = 1;
            //IList<Syllab> syllablist = new List<Syllab>();
            db.Syllabs.Add(syllabus);


            kita = db.Syllabs.ToList();

            foreach (var sud in kita)
            {
                if (sud.Course_ID == syllabus.Course_ID)
                {
                    res = sud;
                    break;
                }
            }

            foreach (PEO p in data.Lpeo)
            {
                if (p.Peo_CODE != null && p.Peo_CVA != null && p.Peo_DESC != null)
                {
                    PEO peo = new PEO();
                    peo.Peo_CODE    = p.Peo_CODE;
                    peo.Peo_DESC    = p.Peo_DESC;
                    peo.Peo_CVA     = p.Peo_CVA;
                    peo.Syllabus_ID = res.Syllabus_ID;

                    db.PEOs.Add(peo);

                    db.SaveChanges();
                }
            }

            foreach (ClassroomAndLabPolicy p in data.Lclp)
            {
                if (p.CLP_desc != null)
                {
                    ClassroomAndLabPolicy classroomAndLabPolicies = new ClassroomAndLabPolicy();
                    classroomAndLabPolicies.CLP_desc    = p.CLP_desc;
                    classroomAndLabPolicies.Syllabus_ID = res.Syllabus_ID;
                    db.ClassroomAndLabPolicies.Add(classroomAndLabPolicies);
                    db.SaveChanges();
                }
            }

            foreach (CourseDeliverableOutputsAndRequirement p in data.Lcodor)
            {
                if (p.OutputReq != null && p.OutputReqDesc != null && p.ToA != null && p.Cilo_Add != null)
                {
                    CourseDeliverableOutputsAndRequirement courseDeliverableOutputsAndRequirements = new CourseDeliverableOutputsAndRequirement();
                    courseDeliverableOutputsAndRequirements.OutputReq     = p.OutputReq;
                    courseDeliverableOutputsAndRequirements.OutputReqDesc = p.OutputReqDesc;
                    courseDeliverableOutputsAndRequirements.Cilo_Add      = p.Cilo_Add;
                    courseDeliverableOutputsAndRequirements.ToA           = p.ToA;
                    courseDeliverableOutputsAndRequirements.Syllabus_ID   = res.Syllabus_ID;
                    db.CourseDeliverableOutputsAndRequirements.Add(courseDeliverableOutputsAndRequirements);
                    db.SaveChanges();
                }
            }
            foreach (CourseOutcome p in data.Lco)
            {
                if (p.CO_Code != null && p.CO_CVA != null && p.CO_DESC != null && p.CO_DOLLevel != null & p.CO_POactivated != null)
                {
                    CourseOutcome courseOutcomes = new CourseOutcome();

                    courseOutcomes.CO_Code        = p.CO_Code;
                    courseOutcomes.CO_DESC        = p.CO_DESC;
                    courseOutcomes.CO_CVA         = p.CO_CVA;
                    courseOutcomes.CO_POactivated = p.CO_POactivated;
                    courseOutcomes.CO_DOLLevel    = p.CO_DOLLevel;
                    courseOutcomes.Syllabus_ID    = res.Syllabus_ID;

                    db.CourseOutcomes.Add(courseOutcomes);

                    db.SaveChanges();
                }
            }
            foreach (GradingSystem p in data.Lgs)
            {
                if (p.GRD_outputs != null && p.GRD_type != null && p.GRD_weight != null)
                {
                    GradingSystem gradingSystem = new GradingSystem();

                    gradingSystem.GRD_outputs = p.GRD_outputs;
                    gradingSystem.GRD_type    = p.GRD_type;
                    gradingSystem.GRD_weight  = p.GRD_weight;

                    gradingSystem.Syllabus_ID = res.Syllabus_ID;

                    db.GradingSystems.Add(gradingSystem);

                    db.SaveChanges();
                }
            }
            foreach (LearningPlan p in data.Llplan)
            {
                if (p.activityL != null && p.activityT != null & p.LPlan_Asses != null && p.LPlan_No_hours != 0 && p.LPlan_Outcome != null && p.LPlan_Topics != null)
                {
                    LearningPlan learningPlan = new LearningPlan();
                    learningPlan.LPlan_Outcome  = p.LPlan_Outcome;
                    learningPlan.LPlan_No_hours = p.LPlan_No_hours;
                    learningPlan.LPlan_Topics   = p.LPlan_Topics;
                    learningPlan.LPlan_Asses    = p.LPlan_Asses;
                    learningPlan.activityL      = p.activityL;
                    learningPlan.activityT      = p.activityT;
                    learningPlan.Syllabus_ID    = res.Syllabus_ID;

                    db.LearningPlans.Add(learningPlan);

                    db.SaveChanges();
                }
            }

            foreach (ProgramOutcome p in data.Lpo)
            {
                if (p.PO_Code != null && p.PO_attr != null & p.PO_CVA != null && p.PO_Desc != null)
                {
                    ProgramOutcome programOutcome = new ProgramOutcome();
                    programOutcome.PO_Code     = p.PO_Code;
                    programOutcome.PO_attr     = p.PO_attr;
                    programOutcome.PO_Desc     = p.PO_Desc;
                    programOutcome.PO_CVA      = p.PO_CVA;
                    programOutcome.Syllabus_ID = res.Syllabus_ID;

                    db.ProgramOutcomes.Add(programOutcome);

                    db.SaveChanges();
                }
            }
            foreach (Rubric p in data.Lr)
            {
                if (p.marginal != null && p.notAcceptable != null & p.outstanding != null && p.competent != null && p.criteria != null)
                {
                    Rubric rubric = new Rubric();
                    rubric.competent     = p.competent;
                    rubric.criteria      = p.criteria;
                    rubric.marginal      = p.marginal;
                    rubric.notAcceptable = p.notAcceptable;
                    rubric.outstanding   = p.outstanding;
                    rubric.Syllabus_ID   = res.Syllabus_ID;

                    db.Rubrics.Add(rubric);

                    db.SaveChanges();
                }
            }



            return(View());
        }
        public double Evaluate(LearningPlan learningPlan, Requisition requisition, Schedule schedule, Meeting meetingToAdd)
        {
            var hasPracticeWithSameFlow = CheckTeacherHasPracticeWithSameFlow(schedule, meetingToAdd, learningPlan);

            return(hasPracticeWithSameFlow ? 0 : UnitPenalty);
        }
Пример #16
0
 public LearningPlanView(LearningPlan lp)
 {
     id      = lp.id;
     summary = lp.speciality_code + " " + lp.speciality_name + " (" + lp.starting_year + ")";
 }
        public static bool CheckTeacherHasPracticeWithSameFlow(Schedule schedule, Meeting meetingToAdd, LearningPlan learningPlan)
        {
            var planItemsWithSameDiscipline = learningPlan.Items.Where(m => m.Discipline.Equals(meetingToAdd.Discipline)).ToList();
            var planedLectures  = planItemsWithSameDiscipline.Where(m => m.MeetingType == MeetingType.Lecture);
            var planedPractices = planItemsWithSameDiscipline
                                  .Where(m => m.MeetingType == MeetingType.ComputerLab || m.MeetingType == MeetingType.Seminar);

            if (!planedLectures.Any() || !planedPractices.Any())
            {
                return(true);
            }

            var meetingsWithSameDiscipline           = schedule.Meetings.Where(m => m.Discipline.Equals(meetingToAdd.Discipline));
            var meetingsWithSameTeacherAndDiscipline = meetingsWithSameDiscipline.Where(m => m.Teacher.Equals(meetingToAdd.Teacher));

            var lectures = meetingsWithSameTeacherAndDiscipline
                           .Where(m => m.MeetingType == MeetingType.Lecture)
                           .ToHashSet();
            var practices = meetingsWithSameTeacherAndDiscipline
                            .Where(m => m.MeetingType == MeetingType.ComputerLab || m.MeetingType == MeetingType.Seminar)
                            .ToHashSet();

            if (meetingToAdd.MeetingType == MeetingType.Lecture)
            {
                if (practices.Count == 0)
                {
                    return(true);
                }
                lectures.Add(meetingToAdd);
            }
            else
            {
                if (lectures.Count == 0)
                {
                    return(true);
                }
                practices.Add(meetingToAdd);
            }

            var lectureGroups  = new HashSet <string>();
            var practiceGroups = new HashSet <string>();

            foreach (var lecture in lectures)
            {
                // Should be exactly one group specified by meeting
                foreach (var meetingGroup in lecture.Groups)
                {
                    lectureGroups.Add(meetingGroup.GroupName);
                }
            }

            foreach (var practice in practices)
            {
                // Should be exactly one group specified by meeting
                foreach (var meetingGroup in practice.Groups)
                {
                    practiceGroups.Add(meetingGroup.GroupName);
                }
            }

            var intersection            = lectureGroups.Intersect(practiceGroups);
            var hasPracticeWithSameFlow = intersection.Any();

            return(hasPracticeWithSameFlow);
        }
Пример #18
0
        private void PlansGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var studentPlanPeriod = ((List <StudentLearningPlanWithPeriodsView>)PlansGridView.DataSource)[e.RowIndex];

            currentLearningPlan            = lpRepo.get(studentPlanPeriod.learning_plan_id);
            currentLearningPlanDisciplines = lpdRepo.learningPlanAll(currentLearningPlan.id);
            var discIdDict = currentLearningPlanDisciplines.ToDictionary(d => d.id, d => d.name);

            currentLearningPlanDisciplineSemesters = lpdsRepo.learningPlanAll(studentPlanPeriod.learning_plan_id);

            var semesters = currentLearningPlanDisciplineSemesters
                            .Select(lpds => lpds.semester)
                            .OrderBy(sn => sn)
                            .Distinct()
                            .ToList();
            var semesterSpans = semesters.ToDictionary(s => s, s => new Tuple <DateTime, DateTime>(
                                                           new DateTime(currentLearningPlan.starting_year + ((s % 2 == 0) ? 1 : 0) + (int)Math.Floor((double)(s - 1) / 2), (s % 2 == 0) ? 2 : 9, 1),
                                                           new DateTime(currentLearningPlan.starting_year + 1 + (int)Math.Floor((double)(s - 1) / 2), (s % 2 == 0) ? 8 : 1, 31)
                                                           ));

            var studentSemestersWithYear = new List <Tuple <int, int> >();
            var studentSemesters         = new List <int>();

            for (int i = 0; i < semesters.Count; i++)
            {
                var semester = semesters[i];
                if (studentPlanPeriod.from <= semesterSpans[semester].Item2 &&
                    semesterSpans[semester].Item1 <= studentPlanPeriod.to)
                {
                    studentSemesters.Add(semester);
                    studentSemestersWithYear.Add(
                        new Tuple <int, int>(currentLearningPlan.starting_year + (int)Math.Floor((double)(semester - 1) / 2),
                                             (semester % 2 == 1) ? 1 : 2));
                }
            }

            var studentDisciplineSemesters = currentLearningPlanDisciplineSemesters
                                             .Where(sm => studentSemesters.Contains(sm.semester))
                                             .OrderBy(s => s.semester)
                                             .ThenBy(s => discIdDict[s.learning_plan_discipline_id])
                                             .ToList();
            var dsViews = DisciplineSemesterView.FromLpdsList(studentDisciplineSemesters, discIdDict);

            PlanGridView.DataSource = dsViews;
            FormatSemesterView();

            var studentCardItems = new List <TeacherCardAndItem>();

            for (int i = 0; i < studentSemestersWithYear.Count; i++)
            {
                var semesterStudentCardItems = tciRepo.yearSemesterStudentIdAll(
                    studentSemestersWithYear[i].Item1,
                    studentSemestersWithYear[i].Item2,
                    studentPlanPeriod.student_id);

                studentCardItems.AddRange(semesterStudentCardItems);
            }

            var teachersDict = tRepo.all().ToDictionary(t => t.id, t => t);

            for (int i = 0; i < studentCardItems.Count; i++)
            {
                studentCardItems[i].semester = studentCardItems[i].semester + (studentCardItems[i].starting_year - currentLearningPlan.starting_year) * 2;

                if (teachersDict.ContainsKey(studentCardItems[i].teacher_id))
                {
                    var teacher = teachersDict[studentCardItems[i].teacher_id];
                    studentCardItems[i].teacher_fio = teacher.f + " " + teacher.i + " " + teacher.o;
                }

                if (teachersDict.ContainsKey(studentCardItems[i].real_teacher_id))
                {
                    var realTeacher = teachersDict[studentCardItems[i].real_teacher_id];
                    studentCardItems[i].real_teacher_fio = realTeacher.f + " " + realTeacher.i + " " + realTeacher.o;
                }
            }

            studentCardItems = studentCardItems
                               .OrderBy(i => i.semester)
                               .ThenBy(i => i.discipline_name)
                               .ToList();

            CardsGridView.DataSource = studentCardItems;

            FormatCardsView();

            var eprst = 999;
        }