示例#1
0
        //private static List<List<string>> ReadRowsUsingBoundary(GSRepository repo, string SheetName, (int row, int col) start, int width)
        //{
        //    var sheetObj = repo.CurrentSheetInfo.spreadsheet.Sheets.Where(s => s.Properties.Title == SheetName).First();
        //    var actualRowCount = sheetObj.Properties.GridProperties.RowCount;
        //    var rowCountToRead = Math.Min((int)actualRowCount, 300);
        //    var testData = repo.ReadCellRange(SheetName, start, (rowCountToRead + 1, width - 1));
        //    var rowsWithDataCount = testData.Count;
        //    var dotBoundary = Enumerable.Repeat(new List<string>() { "." }, rowsWithDataCount).ToList();
        //    repo.ModifySpreadSheet(SheetName).WriteRange((start.row, width), dotBoundary).Execute();
        //    var sheetData = repo.ReadCellRange(SheetName, start, (rowsWithDataCount, width));
        //    return sheetData;
        //}

        //private static List<List<string>> ReadRowsFromSheet(GSRepository repo, string SheetName, (int row, int col) start, int width)
        //{
        //    var sheetObj = repo.CurrentSheetInfo.spreadsheet.Sheets.Where(s => s.Properties.Title == SheetName).First();
        //    var actualRowCount = sheetObj.Properties.GridProperties.RowCount;
        //    var rowCountToRead = Math.Min((int)actualRowCount, 300);
        //    var testData = repo.ReadCellRange(SheetName, start, (rowCountToRead + 1, width - 1));
        //    var rowsWithDataCount = testData.Count;
        //    var sheetData = repo.ReadCellRange(SheetName, start, (rowsWithDataCount, width));
        //    foreach (var row in sheetData)
        //    {
        //        for (var i = width - row.Count; i > 0; i--)
        //        {
        //            row.Add("");
        //        }
        //    }
        //    return sheetData;
        //}

        private static (List <(LearningPlanItem, string)>, HashSet <string>) ParseLearningPlanItems(List <List <string> > sheetData)
        {
            var learningPlanItems = new List <(LearningPlanItem, string)>();
            var allGroups         = new HashSet <string>();

            foreach (var row in sheetData)
            {
                var groupsRow              = row[0];
                var disciplineRow          = row[1];
                var meetingTypeRow         = row[2];
                var groupSizeRow           = row[3];
                var meetingCountPerWeekRow = row[4];
                // Use it with LearningPlanItem
                var locationRow = row[5];

                var groups = groupsRow.Split(',').Select(s => s.Trim()).ToList();
                foreach (var group in groups)
                {
                    allGroups.Add(group);
                }
                var discipline          = new Discipline(disciplineRow);
                var meetingType         = meetingTypeDict[meetingTypeRow];
                var groupSize           = groupSizeDict.ContainsKey(groupSizeRow) ? groupSizeDict[groupSizeRow] : GroupSize.FullGroup;
                var meetingCountPerWeek = double.Parse(meetingCountPerWeekRow, CultureInfo.InvariantCulture);
                foreach (var groupName in groups)
                {
                    // Need to add locaton to Learning Plan Item through constructor
                    var leargningPlanItem = new LearningPlanItem(groupName, discipline, meetingType, groupSize, meetingCountPerWeek);
                    learningPlanItems.Add((leargningPlanItem, locationRow));
                }
            }

            return(learningPlanItems, allGroups);
        }
示例#2
0
 public RequisitionItem(LearningPlanItem planItem, GroupRequisition[] groupPriorities, string location, int repetitionsCount, MeetingTimeRequisition[] meetingTimePriorities, Teacher teacher, WeekType weekType)
 {
     PlanItem              = planItem;
     GroupPriorities       = groupPriorities;
     Location              = location;
     RepetitionsCount      = repetitionsCount;
     MeetingTimePriorities = meetingTimePriorities;
     Teacher  = teacher;
     WeekType = weekType;
 }
示例#3
0
        public void ConvertRequisitionToMeetingWithoutTimeCorrect()
        {
            var learningPlanItem = new LearningPlanItem("FT-202", new Discipline("OOP"), MeetingType.Seminar, GroupSize.FullGroup, 2);
            var requisition      = new RequisitionItem(
                learningPlanItem,
                new[] { new GroupRequisition(new[] { new GroupsChoice(new[] { new MeetingGroup("FT-202", GroupPart.FullGroup) }) }) },
                "150",
                2,
                new[] { new MeetingTimeRequisition(new[] { new MeetingTime(DayOfWeek.Tuesday, 2) }) },
                new Teacher("Pavel Egorov"),
                WeekType.Any);
            var meetings = RequisitionToMeetingConverter.ConvertRequisitionToMeetingWithoutTime(requisition);

            Assert.AreEqual(2, meetings.Count);
            var actualMeeting = meetings.First();

            Assert.AreEqual("OOP", actualMeeting.Discipline.Name);
        }
示例#4
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);
        }