internal SDScsv GetSDScsv()
        {
            Console.WriteLine(string.Format("School Data Sync CSV samenstellen..."));
            // https://support.office.com/nl-nl/article/CSV-bestanden-voor-synchronisatie-van-schoolgegevens-9f3c3c2b-7364-4f6e-a959-e8538feead70

            SDScsv _sdscsv = new SDScsv();

            List <School>            Schools            = GetSchools().ToList();
            List <Section>           Sections           = GetSections().ToList();
            List <Teacher>           Teachers           = GetTeachers().ToList();
            List <Student>           Students           = GetStudents().ToList();
            List <TeacherRoster>     TeacherRosters     = GetTeacherRosters();
            List <StudentEnrollment> StudentEnrollments = GetStudentEnrollments(Sections);


            _sdscsv.Schools            = Schools;
            _sdscsv.Sections           = Sections;
            _sdscsv.Teachers           = Teachers;
            _sdscsv.Students           = Students;
            _sdscsv.TeacherRosters     = TeacherRosters;
            _sdscsv.StudentEnrollments = StudentEnrollments;
            Console.WriteLine();

            return(_sdscsv);
        }
        private static void StartProgram()
        {
            eh.WriteLog("Sync gestart", EventLogEntryType.Information, 100);
            ServiceHelper sh = new ServiceHelper(umServiceBrinNr, umServiceUsername, umServicePassword, umServiceSchooljaar);

            List <UmService.wisVestiging> vestigingenList = sh.GetVestigingen(booleanFilterBylocation, includedLocationCode);

            if (vestigingenList.Count > 0)
            {
                List <VestigingLesgroepModel> vestigingLesgroepen = sh.GetLesgroepVestiging(vestigingenList);
                if (vestigingLesgroepen.Count > 0)
                {
                    List <UserLesgroepModel> leerlingLesgroepen = sh.GetStudentInfo(vestigingLesgroepen);
                    if (leerlingLesgroepen.Count > 0)
                    {
                        List <UserLesgroepModel> docentLesgroepen = sh.GetTeacherInfo(vestigingLesgroepen);
                        if (docentLesgroepen.Count > 0)
                        {
                            FileHelper fh = new FileHelper();
                            if (seperateOutputDirectoryForEachLocation)
                            {
                                foreach (VestigingLesgroepModel vestigingLesgroep in vestigingLesgroepen)
                                {
                                    SDScsvHelper lh = new SDScsvHelper(
                                        vestigingLesgroepen.Where(v => v.Vestiging == vestigingLesgroep.Vestiging).ToList(),
                                        docentLesgroepen.Where(v => v.VestigingLesgroep.Vestiging == vestigingLesgroep.Vestiging).ToList(),
                                        leerlingLesgroepen.Where(v => v.VestigingLesgroep.Vestiging == vestigingLesgroep.Vestiging).ToList());
                                    SDScsv schoolDataSyncCSV = lh.GetSDScsv();
                                    fh.WriteSDStoFiles(OutputDirectory + vestigingLesgroep.Vestiging.afkorting + "\\", schoolDataSyncCSV);
                                }
                            }
                            else
                            {
                                SDScsvHelper lh = new SDScsvHelper(vestigingLesgroepen, docentLesgroepen, leerlingLesgroepen);
                                SDScsv       schoolDataSyncCSV = lh.GetSDScsv();
                                fh.WriteSDStoFiles(OutputDirectory, schoolDataSyncCSV);
                            }
                        }
                        else
                        {
                            eh.WriteLog("Geen docentinformatie kunnen downloaden", EventLogEntryType.Warning, 100);
                        }
                    }
                    else
                    {
                        eh.WriteLog("Geen leerlinginformatie kunnen downloaden", EventLogEntryType.Warning, 100);
                    }
                }
                else
                {
                    eh.WriteLog("Geen lesgroepen gevonden", EventLogEntryType.Warning, 100);
                }
            }
            else
            {
                eh.WriteLog("Geen vestigingen gevonden", EventLogEntryType.Warning, 100);
            }

            Console.WriteLine("======================================");
            eh.WriteLog("Sync voltooid", EventLogEntryType.Information, 100);
            Thread.Sleep(10000);
        }
        internal bool WriteSDStoFiles(string path, SDScsv sdscsv)
        {
            EventLogHelper eh = new EventLogHelper();
            if (sdscsv.Schools.Count() > 0 &&
                                   sdscsv.Sections.Count() > 0 &&
                                   sdscsv.Teachers.Count() > 0 &&
                                   sdscsv.Students.Count() > 0 &&
                                   sdscsv.TeacherRosters.Count() > 0 &&
                                   sdscsv.StudentEnrollments.Count > 0)
            {
                if (!Directory.Exists(path))
                {
                    eh.WriteLog(String.Format("Output directory bestaat niet, maar wordt nu aangemaakt: {0} ", path), EventLogEntryType.Information, 100);
                    Directory.CreateDirectory(path);
                }
                Console.Write(string.Format("CSV-bestanden schrijven... "));

                using (TextWriter writer = new StreamWriter(path + @"School.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<SchoolCSVMap>();
                    csv.WriteRecords(sdscsv.Schools); // where values implements IEnumerable
                }

                using (TextWriter writer = new StreamWriter(path + @"Section.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<SectionCSVMap>();
                    csv.WriteRecords(sdscsv.Sections); // where values implements IEnumerable
                }

                using (TextWriter writer = new StreamWriter(path + @"Student.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<StudentCSVMap>();
                    csv.WriteRecords(sdscsv.Students); // where values implements IEnumerable
                }

                using (TextWriter writer = new StreamWriter(path + @"Teacher.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<TeacherCSVMap>();
                    csv.WriteRecords(sdscsv.Teachers); // where values implements IEnumerable
                }

                using (TextWriter writer = new StreamWriter(path + @"TeacherRoster.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<TeacherRosterCSVMap>();
                    csv.WriteRecords(sdscsv.TeacherRosters); // where values implements IEnumerable
                }

                using (TextWriter writer = new StreamWriter(path + @"StudentEnrollment.csv"))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.RegisterClassMap<StudentEnrollmentCSVMap>();
                    csv.WriteRecords(sdscsv.StudentEnrollments); // where values implements IEnumerable
                }
                if (sdscsv.Schools.Count == 1)
                {
                    eh.WriteLog(String.Format("CSV-bestanden geschreven: {0}, {1} Lesgroepen, {2} Docenten, {3} Leerlingen, {4} Docentlesgroepen, {5} Leerlinglesgroepen, naar {6}",
                    sdscsv.Schools[0].Name, sdscsv.Sections.Count, sdscsv.Teachers.Count, sdscsv.Students.Count, sdscsv.TeacherRosters.Count, sdscsv.StudentEnrollments.Count, path), EventLogEntryType.Information, 200);
                }
                else
                {
                    eh.WriteLog(String.Format("CSV-bestanden geschreven: {0} Scholen, {1} Lesgroepen, {2} Docenten, {3} Leerlingen, {4} Docentlesgroepen, {5} Leerlinglesgroepen, naar {6}",
                       sdscsv.Schools.Count, sdscsv.Sections.Count, sdscsv.Teachers.Count, sdscsv.Students.Count, sdscsv.TeacherRosters.Count, sdscsv.StudentEnrollments.Count, path), EventLogEntryType.Information, 200);
                }
            }
            else
            {
                if (sdscsv.Schools.Count == 1)
                {
                    eh.WriteLog(String.Format("Te weinig informatie om naar CSV te schrijven: {0}, {1} Lesgroepen, {2} Docenten, {3} Leerlingen, {4} Docentlesgroepen, {5} Leerlinglesgroepen",
                    sdscsv.Schools[0].Name, sdscsv.Sections.Count, sdscsv.Teachers.Count, sdscsv.Students.Count, sdscsv.TeacherRosters.Count, sdscsv.StudentEnrollments.Count), EventLogEntryType.Warning, 100);
                }
                else
                {
                    eh.WriteLog(String.Format("Te weinig informatie om naar CSV te schrijven: {0} Scholen, {1} Lesgroepen, {2} Docenten, {3} Leerlingen, {4} Docentlesgroepen, {5} Leerlinglesgroepen",
                        sdscsv.Schools.Count, sdscsv.Sections.Count, sdscsv.Teachers.Count, sdscsv.Students.Count, sdscsv.TeacherRosters.Count, sdscsv.StudentEnrollments.Count), EventLogEntryType.Warning, 100);
                }

            }
            return true;
        }