예제 #1
0
        public void Test1()
        {
            var credentialDirPath = Environment.GetEnvironmentVariable(CredentialsEnvVar);
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var url  = "https://docs.google.com/spreadsheets/d/1-CFNA5rFSKmrs5jdJm5xg2b1cQDbCJ8LA1FRrdBBRyg/edit#gid=1607674973";
            var repo = new GSRepository(ApplicationName, credentialPath, url);

            var requisitions = SheetToRequisitionConverter.ConvertToRequisitions(repo, "Requisition", "Plan");
        }
예제 #2
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);
        }
예제 #3
0
        public void PaintErrorsWhenNoMergerCells()
        {
            var credentialDirPath = Environment.GetEnvironmentVariable(CredentialsEnvVar);
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var repo = new GSRepository(ApplicationName, credentialPath, url);


            var errors = new List <((int, int), string)>()
            {
                ((0, 0), "error msg1"), ((1, 1), "error msg2"), ((4, 2), "error msg3")
            };

            SheetTableErrorPainter.PaintErrors(repo, sheetName, (1, 0), errors);
            Assert.Pass();
        }
        public void Test1()
        {
            var testSchedule = new Schedule(new[] {
                MeetingCreator.CreateMeeting("Math 623 Fil 0 3 0 0 FT-202#0 FT-201#0 KN-201#2"),
                MeetingCreator.CreateMeeting("DM 622 Str 0 0 0 0 FT-202#0 KN-201#0"),
                MeetingCreator.CreateMeeting("OOP 526 Eg 0 2 0 0 FT-202#1 FT-202#0 FT-201#1 FT-201#2"),
                MeetingCreator.CreateMeeting("Net 150 Ber 0 1 1 0 FT-202#0"),
                MeetingCreator.CreateMeeting("Net 150 Ber 0 1 0 0 FT-201#1"),
            });
            var credentialDirPath = Environment.GetEnvironmentVariable(CredentialsEnvVar);
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var url       = "https://docs.google.com/spreadsheets/d/1JxL_CTuc-NLaBRdY5F4vz3yn6WJe8bp-7Mn7ViycjtQ/edit#gid=0";
            var repo      = new GSRepository(ApplicationName, credentialPath, url);
            var converter = new ScheduleSpreadsheetConverter(repo, repo.CurrentSheetInfo.Sheets.Keys.First());

            converter.Build(testSchedule);

            Assert.Pass();
        }
예제 #5
0
        public void PaintErrorsAndClear()
        {
            var credentialDirPath = Environment.GetEnvironmentVariable(CredentialsEnvVar);
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var repo = new GSRepository(ApplicationName, credentialPath, url);

            var errors = new List <((int, int), string)>()
            {
                ((0, 0), "error msg1"), ((1, 1), "error msg2"), ((4, 2), "error msg3")
            };

            SheetTableErrorPainter.PaintErrors(repo, sheetName, (5, 0), errors);

            var coordsToClear = errors.Select(e => e.Item1);

            SheetTableErrorPainter.ClearErrorPaint(repo, sheetName, (5, 0), coordsToClear);

            Assert.Pass();
        }
예제 #6
0
        public void Test1()
        {
            var ApplicationName   = "MyApp";
            var credentialDirPath = Environment.GetEnvironmentVariable("GoogleApiCredentials");
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var url  = "https://docs.google.com/spreadsheets/d/1ncJ77JJJapPJpTeDpvWIsmuavStz5aXwQLs7fc89Rgo/edit#gid=0";
            var repo = new GSRepository(ApplicationName, credentialPath, url);

            repo.ChangeTable(url);
            var readed = repo.ReadCell(repo.CurrentSheetInfo.Sheets.Keys.First(), (1, 1));

            var dataToWrite = new List <List <string> >()
            {
                new List <string>()
                {
                    "11", "12"
                },
                new List <string>()
                {
                    "21", "22"
                },
                new List <string>()
                {
                    "31", "32"
                },
            };

            repo.ModifySpreadSheet(repo.CurrentSheetInfo.Sheets.Keys.First())
            .WriteRange((1, 2), dataToWrite)
            .Execute();

            var valRange = repo.ReadCellRange(repo.CurrentSheetInfo.Sheets.Keys.First(), (1, 2), (3, 4));

            for (int r = 0; r < valRange.Count; r++)
            {
                for (int c = 0; c < valRange[r].Count; c++)
                {
                    Assert.AreEqual(dataToWrite[r][c], valRange[r][c]);
                }
            }
        }
예제 #7
0
        public void SetUpHeadersOnClearSheet()
        {
            var credentialDirPath = Environment.GetEnvironmentVariable(CredentialsEnvVar);
            var credentialPath    = credentialDirPath + "\\client_secrets.json";
            var repo = new GSRepository(ApplicationName, credentialPath, url);

            var headers = new List <string>()
            {
                "Преподавател", "Предмет", "Тип занятия", "Количество повторений каждого занятия",
                "Приоритеты групп, в которых назначать занятия", "Время", "Четность"
            };

            var comments = new List <string>()
            {
                "Имя преподавателя",
                "Название предмета (например Матанализ)",
                "Лекция/Семинар/КомпПрактика",
                "Количество подряд идущих занятий с той же группой",
                @"через + объединяются группы в один поток. Через запятую те группы, в которые можно назначать. В разных строках можно задавать предпочтения - чем ниже, тем менее предпочтительно.

Например:

ФИИТ-101, ФИИТ-102
ФИИТ-103

означает, что хочу вести в 101 или 102, если не получится, то 103 тоже подойдет. 104 не предлагать.",
                @"варианты в строчках, по уменьшению желаемости. Список дней недели, список номеров пар.
Например:
пн-чт, 1-3 пара
пт, 3-4 пара

означает, что желательно пару не в пятницу поставить в диапазон 1-3. Если не получится, то поставить в пятницу 3 или 4.",
                "четная/нечетная (можно не указывать)"
            };

            HeaderPatternCreator.SetUpHeaders(repo, sheetName, (5, 1), headers, comments);

            var actualHeaders = repo.ReadCellRange(sheetName, (5, 1), (5, 8))[0];
예제 #8
0
 public static void SetUpHeaders(GSRepository repo, string sheetName,
                                 (int row, int col) start, List <string> headers, List <string> comments = null)
 public static List <List <string> > ReadRowsFromSheet(GSRepository repo, string SheetName, (int row, int col) start, int width)
 public static void PaintErrors(GSRepository repo, string sheetName,
                                (int row, int col) offset, List <((int row, int col) coords, string msg)> errors)
 public ScheduleSpreadsheetConverter(GSRepository repo, string sheetName)
 {
     repository     = repo;
     this.sheetName = sheetName;
 }