//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); }
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; }
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); }
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); }