static void Main(string[] args)
        {
            Global.Output = new List <string>();

            try
            {
                Console.WriteLine(" Webuntisnoten2Atlantis | Published under the terms of GPLv3 | Stefan Bäumer " + DateTime.Now.Year + " | Version 20210507");
                Console.WriteLine("=====================================================================================================");
                Console.WriteLine(" *Webuntisnoten2Atlantis* erstellt eine SQL-Datei mit entsprechenden Befehlen zum Import in Atlantis.");
                Console.WriteLine(" ACHTUNG: Wenn der Lehrer es versäumt hat, mindestens 1 Teilleistung zu dokumentieren, wird keine Ge-");
                Console.WriteLine(" samtnote von Webuntis übergeben!");
                Console.WriteLine("=====================================================================================================");

                if (Properties.Settings.Default.DBUser == "")
                {
                    Settings();
                }

                string  targetPath  = SetTargetPath();
                Process notepadPlus = new Process();
                notepadPlus.StartInfo.FileName = "notepad++.exe";
                notepadPlus.Start();
                Thread.Sleep(1500);
                string targetAbsenceTimesTotal = CheckFile(targetPath, User, "AbsenceTimesTotal");
                string targetMarksPerLesson    = CheckFile(targetPath, User, "MarksPerLesson");
                string targetSql = Path.Combine(targetPath, Zeitstempel + "_webuntisnoten2atlantis_" + User + ".SQL");

                Leistungen alleAtlantisLeistungen = new Leistungen(ConnectionStringAtlantis + Properties.Settings.Default.DBUser, AktSj, User);
                Leistungen alleWebuntisLeistungen = new Leistungen(targetMarksPerLesson);

                Abwesenheiten alleAtlantisAbwesenheiten = new Abwesenheiten(ConnectionStringAtlantis + Properties.Settings.Default.DBUser, AktSj[0] + "/" + AktSj[1]);
                Abwesenheiten alleWebuntisAbwesenheiten = new Abwesenheiten(targetAbsenceTimesTotal);

                Leistungen    webuntisLeistungen    = new Leistungen();
                Abwesenheiten webuntisAbwesenheiten = new Abwesenheiten();
                Leistungen    atlantisLeistungen    = new Leistungen();
                Abwesenheiten atlantisAbwesenheiten = new Abwesenheiten();

                FocusMe();

                var interessierendeKlassen = new List <string>();
                interessierendeKlassen = alleAtlantisLeistungen.GetIntessierendeKlassen(alleWebuntisLeistungen, AktSj);

                webuntisLeistungen.AddRange((from a in alleWebuntisLeistungen where interessierendeKlassen.Contains(a.Klasse) select a).OrderBy(x => x.Klasse).ThenBy(x => x.Fach).ThenBy(x => x.Name));
                atlantisLeistungen.AddRange((from a in alleAtlantisLeistungen where interessierendeKlassen.Contains(a.Klasse) select a).OrderBy(x => x.Klasse).ThenBy(x => x.Fach).ThenBy(x => x.Name));

                List <string> abschlussklassen = (from t in alleAtlantisLeistungen where t.Abschlussklasse where interessierendeKlassen.Contains(t.Klasse) select t.Klasse).Distinct().ToList();

                atlantisAbwesenheiten.AddRange((from a in alleAtlantisAbwesenheiten where interessierendeKlassen.Contains(a.Klasse) where !abschlussklassen.Contains(a.Klasse) select a));
                webuntisAbwesenheiten.AddRange((from a in alleWebuntisAbwesenheiten where interessierendeKlassen.Contains(a.Klasse) where !abschlussklassen.Contains(a.Klasse) select a));

                if (webuntisLeistungen.Count == 0)
                {
                    throw new Exception("[!] Es liegt kein einziger Leistungsdatensatz für Ihre Auswahl vor. Ist evtl. die Auswahl in Webuntis eingeschränkt? ");
                }

                // Alte Noten holen

                webuntisLeistungen.AddRange(alleAtlantisLeistungen.HoleAlteNoten(webuntisLeistungen, interessierendeKlassen, AktSj));

                // Sortieren

                webuntisLeistungen.OrderBy(x => x.Klasse).ThenBy(x => x.Fach).ThenBy(x => x.Name);
                atlantisLeistungen.OrderBy(x => x.Klasse).ThenBy(x => x.Fach).ThenBy(x => x.Name);

                // Korrekturen durchführen

                webuntisLeistungen.WidersprechendeGesamtnotenKorrigieren(interessierendeKlassen);
                Zuordnungen fehlendezuordnungen = webuntisLeistungen.FächerZuordnen(atlantisLeistungen);
                webuntisLeistungen.ReligionsabwählerBehandeln(atlantisLeistungen);
                webuntisLeistungen.BindestrichfächerZuordnen(atlantisLeistungen);
                atlantisLeistungen.FehlendeZeugnisbemerkungBeiStrich(webuntisLeistungen, interessierendeKlassen);
                atlantisLeistungen.GetKlassenMitFehlendenZeugnisnoten(interessierendeKlassen, alleWebuntisLeistungen);

                fehlendezuordnungen.ManuellZuordnen(webuntisLeistungen, atlantisLeistungen);

                // Add-Delete-Update

                atlantisLeistungen.Add(webuntisLeistungen, interessierendeKlassen);
                atlantisLeistungen.Delete(webuntisLeistungen, interessierendeKlassen, AktSj);
                atlantisLeistungen.Update(webuntisLeistungen, interessierendeKlassen);

                atlantisAbwesenheiten.Add(webuntisAbwesenheiten);
                atlantisAbwesenheiten.Delete(webuntisAbwesenheiten);
                atlantisAbwesenheiten.Update(webuntisAbwesenheiten);

                alleAtlantisLeistungen.ErzeugeSqlDatei(new List <string>()
                {
                    targetAbsenceTimesTotal, targetMarksPerLesson, targetSql
                });

                Console.WriteLine("");
                Console.WriteLine("  -----------------------------------------------------------------");
                Console.WriteLine("  Verarbeitung abgeschlossen. Programm beenden mit Enter.");
                Console.ReadKey();
                Environment.Exit(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ooops! Es ist etwas schiefgelaufen! Die Verarbeitung wird gestoppt.");
                Console.WriteLine("");
                Console.WriteLine(ex);
                Console.ReadKey();
                Environment.Exit(0);
            }
        }
Exemple #2
0
        public void ManuellZuordnen(Leistungen webuntisleistungen, Leistungen atlantisleistungen)
        {
            var gespeicherteZuordnungen = new Zuordnungen();

            foreach (var item in Properties.Settings.Default.Zuordnungen.Split(','))
            {
                if (item != "")
                {
                    var quelle = item.Split(';')[0];
                    var ziel   = item.Split(';')[1];

                    Zuordnung zuordnung = new Zuordnung();
                    zuordnung.Quellklasse = quelle.Split('|')[0];
                    zuordnung.Quellfach   = quelle.Split('|')[1];
                    zuordnung.Zielfach    = ziel.Split('|')[0];
                    gespeicherteZuordnungen.Add(zuordnung);
                }
            }

            //

            foreach (var t in this)
            {
                var x = (from g in gespeicherteZuordnungen where g.Quellklasse == t.Quellklasse where g.Quellfach == t.Quellfach where g.Zielfach != null select g).FirstOrDefault();
                if (x != null)
                {
                    // Nur wenn es diese Zuordnung noch immer gibt:

                    if ((from a in atlantisleistungen where a.Klasse == t.Quellklasse where a.Fach == x.Zielfach select a).Any())
                    {
                        t.Zielfach = x.Zielfach;
                    }
                }
            }

            // Wenn keine Zuordnung vorgenommen werden konnte

            var liste = new List <string>();

            if (this.Count > 0)
            {
                string x;

                Console.Clear();

                do
                {
                    Console.WriteLine("Folgende Fächer können keinem Atlantisfach zugeordnet werden oder wurden bereits manuell zugeordnet:");

                    liste = new List <string>();

                    for (int i = 0; i < this.Count; i++)
                    {
                        Console.Write((" " + (i + 1).ToString().PadLeft(2) + ". " + this[i].Quellklasse.PadRight(6) + "|" + this[i].Quellfach.PadRight(6) + (this[i].Zielfach != null ? "   ->  " + this[i].Zielfach : "")).PadRight(34));
                        if ((i + 1) % 3 == 0)
                        {
                            Console.WriteLine("");
                        }
                        liste.Add((" " + (i + 1).ToString().PadLeft(2) + ". " + this[i].Quellklasse.PadRight(6) + "|" + this[i].Quellfach.PadRight(6) + (this[i].Zielfach != null ? "   ->  " + this[i].Zielfach : "")).PadRight(32));
                    }
                    Console.WriteLine("");
                    Console.Write("Wollen Sie eine Zuordnung manuell vornehmen? Wählen Sie [1" + (this.Count > 1 ? ", ..., " + this.Count : "") + "] oder ENTER, falls keine Änderung gewünscht ist: ");

                    x = Console.ReadLine();

                    Console.WriteLine("");
                    int n;

                    if (int.TryParse(x, out n))
                    {
                        var eingabe = int.Parse(x);

                        if (eingabe > 0 && eingabe <= this.Count)
                        {
                            Console.Write("Wie heißt das Atlantisfach in der Klasse " + this[eingabe - 1].Quellklasse + ", dem Sie das Untis-Fach *" + this[eingabe - 1].Quellfach + "* zuordnen wollen? ");

                            var xx = Console.ReadLine();
                            xx = xx.ToUpper();

                            Console.WriteLine("");
                            Console.Clear();

                            if ((from a in atlantisleistungen where a.Klasse == this[eingabe - 1].Quellklasse where a.Fach == xx select a).Any() || xx == "")
                            {
                                this[eingabe - 1].Zielfach = xx;
                                Console.WriteLine("Die Zuordnung des Faches " + xx + " wurde erfolgreich vorgenommen.");

                                if (xx == "")
                                {
                                    this[eingabe - 1].Zielfach = null;
                                    Console.WriteLine("Die Zuordnung wird entfernt.");
                                }
                            }
                            else
                            {
                                Console.WriteLine("[FEHLER] Ihre Zuordnung war nicht möglich. Das Fach *" + xx + "* gibt es in Atlantis nicht. Die Fächer sind:");

                                var verschiedeneFächer = (from a in atlantisleistungen
                                                          where a.Klasse == this[eingabe - 1].Quellklasse
                                                          select a.Fach).Distinct().ToList();

                                for (int i = 0; i < verschiedeneFächer.Count; i++)
                                {
                                    Console.Write("  " + verschiedeneFächer[i].PadRight(7));

                                    if ((i + 1) % 7 == 0)
                                    {
                                        Console.WriteLine("");
                                    }
                                }
                                Console.WriteLine("");
                            }
                        }
                    }
                } while (x != "");

                // ZUordnung zu den Properties und den Webuntisfächern

                Properties.Settings.Default.Zuordnungen = "";
                Properties.Settings.Default.Save();

                int vorgenommeneZuordnung = 0;
                int keineZuordnung        = 0;
                foreach (var item in this)
                {
                    if (item.Quellfach == "EUS F")
                    {
                        string aaaa = "";
                    }

                    if (item.Zielfach != null)
                    {
                        if ((from a in atlantisleistungen where a.Klasse == item.Quellklasse where a.Fach == item.Zielfach select a).Any())
                        {
                            Properties.Settings.Default.Zuordnungen += item.Quellklasse + "|" + item.Quellfach + ";" + item.Zielfach + ",";

                            var we = (from w in webuntisleistungen where w.Klasse == item.Quellklasse where w.Fach == item.Quellfach select w).ToList();

                            foreach (var w in we)
                            {
                                w.Beschreibung += w.Fach + " -> " + item.Zielfach;

                                w.Fach = item.Zielfach;
                            }
                            vorgenommeneZuordnung++;
                        }
                    }
                    else
                    {
                        keineZuordnung++;
                    }
                }

                Properties.Settings.Default.Zuordnungen = Properties.Settings.Default.Zuordnungen.TrimEnd(',');
                Properties.Settings.Default.Save();

                string aus = "Es wurden " + vorgenommeneZuordnung + "x Fächer aus Webuntis einem Atlantisfach zugeordnet. " + keineZuordnung + "x wurde keine Zuordnung vorgenommen:";

                if (keineZuordnung == 0)
                {
                    aus = "Es wurden alle Fächer aus Webuntis einem Atlantisfach wie folgt zugeordnet:";
                }


                new Leistungen().AusgabeSchreiben(aus, liste);
            }
        }