private IList<int> GetAlleGueltigenSchuelerIds() { var result = new List<int>(); command.CommandText = "SELECT _SCHUELER_ID FROM DSchueler"; using (var cmdResult = command.ExecuteReader()) { var schuelerTable = new SchuelerTableAdapter(); while (cmdResult.Read()) { int schuelerId = cmdResult.GetInt32(0); if (schuelerTable.GetDataById(schuelerId).Count > 0) // Entferne die Schülerdatensätze aus dem Vorjahr oder sonstige Wartelisten- und Spaßdatensätze { result.Add(schuelerId); } } } return result; }
/// <summary> /// Die Methode zum Einlesen der Daten. /// </summary> /// <param name="fileName">Der Dateiname.</param> public static void ReadSchueler(string fileName) { using (StreamReader reader = new StreamReader(fileName, Encoding.GetEncoding("iso-8859-1"))) using (SchuelerTableAdapter tableAdapter = new SchuelerTableAdapter()) using (KlasseTableAdapter klasseTableAdapter = new KlasseTableAdapter()) { while (!reader.EndOfStream) { string line = reader.ReadLine(); if (string.IsNullOrEmpty(line)) { log.Debug("Ignoriere Leerzeile"); continue; } string[] array = line.Split(new string[] { "\t" }, StringSplitOptions.None); string[] cleanArray = array.Select(aString => aString.Trim(new char[] { '\"', ' ', '\n' })).ToArray(); int klasseId = GetKlasseId(klasseTableAdapter, cleanArray[klasseSpalte].Trim()); if (klasseId == -1) { log.Debug("Ignoriere einen Schüler ohne richtige Klasse. Übergebene Klasse war " + cleanArray[klasseSpalte]); continue; } // wenn der Schüler noch nicht vorhanden ist if (tableAdapter.GetDataById(int.Parse(cleanArray[schuelerIdSpalte])).Count == 0) { tableAdapter.Insert( int.Parse(cleanArray[schuelerIdSpalte]), cleanArray[nachnameSpalte], cleanArray[vornameSpalte], klasseId, cleanArray[rufnameSpalte], cleanArray[geschlechtSpalte], ParseDate(cleanArray[geburtsdatumSpalte]), cleanArray[geburtsortSpalte], cleanArray[bekenntnisSpalte], cleanArray[anschr1PlzSpalte], cleanArray[anschr1OrtSpalte], cleanArray[anschr1StrasseSpalte], cleanArray[anschr1TelefonSpalte], ChangeAusbildungsrichtung(cleanArray[ausbildungsrichtungSpalte]), cleanArray[fremdsprache2Spalte], cleanArray[reliOderEthikSpalte], cleanArray[wahlpflichtfachSpalte], cleanArray[wahlfach1Spalte], cleanArray[wahlfach2Spalte], cleanArray[wahlfach3Spalte], cleanArray[wahlfach4Spalte], cleanArray[wdh1JahrgangsstufeSpalte], cleanArray[wdh2JahrgangsstufeSpalte], cleanArray[wdh1GrundSpalte], cleanArray[wdh2GrundSpalte], ParseDate(cleanArray[probezeitBisSpalte]), ParseDate(cleanArray[austrittsdatumSpalte]), cleanArray[schulischeVorbildungSpalte], cleanArray[beruflicheVorbildungSpalte], cleanArray[lrsStoerungSpalte] == "1", cleanArray[lrsSchwaecheSpalte] == "1", ParseDate(cleanArray[lrsBisDatumSpalte]), cleanArray[verwandtschaftsbezeichnungEltern1Spalte], cleanArray[nachnameEltern1Spalte], cleanArray[vornameEltern1Spalte], cleanArray[anredeEltern1Spalte], cleanArray[nachnameEltern2Spalte], cleanArray[vornameEltern2Spalte], cleanArray[anredeEltern2Spalte], cleanArray[verwandtschaftsbezeichnungEltern2Spalte] ); } } } }
/// <summary> /// Methode importiert die Zeugnisnoten des Vorjahres. /// </summary> /// <param name="fileName">Der Dateiname.</param> public static void ImportiereNoten(string fileName) { using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (StreamReader reader = new StreamReader(stream)) { var schuelerAdapter = new SchuelerTableAdapter(); var fpaAdapter = new FpANotenTableAdapter(); Dictionary<string, Kurs> kurse = GetKursverzeichnis(); kurse.Add("G", GetGeschichteKurs()); while (!reader.EndOfStream) { string[] line = reader.ReadLine().Split(SeparatorChar); int schuelerId = int.Parse(line[0]); var schuelerGefunden = schuelerAdapter.GetDataById(schuelerId); if (schuelerGefunden == null || schuelerGefunden.Count == 0) { continue; } var schueler = new Schueler(schuelerGefunden[0]); if (schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Zwoelf) { // nur bei Schülern in der zwölften Klasse wird irgendetwas importiert if (line.Length == 5) { //notenzeile string nachname = line[1]; string fachKuerzel = line[2]; string lehrerKuerzel = line[3]; if (string.IsNullOrEmpty(line[4])) // was das heißt ist aber auch fraglich. keine Note? { continue; } byte zeugnisnote = byte.Parse(line[4]); if (schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Zwoelf) { schueler.MeldeAn(kurse[fachKuerzel.ToUpper()]); BerechneteNote bnote = new BerechneteNote(kurse[fachKuerzel.ToUpper()].Id, schueler.Id); bnote.ErstesHalbjahr = false; bnote.JahresfortgangGanzzahlig = zeugnisnote; bnote.Abschlusszeugnis = zeugnisnote; bnote.writeToDB(); } } else if (line.Length == 3) { //FpA-Zeile string nachname = line[1]; int gesamterfolg = int.Parse(line[2]); fpaAdapter.Insert(schuelerId, "", null, null, null, null, gesamterfolg, null, null); } else throw new InvalidOperationException("Diese Zeile hat " + line.Length + " Spalten. Das ist mir unbekannt"); } } } TrageFehlendeSchülerInDummykurseEin(); }
/// <summary> /// Methode importiert die Zeugnisnoten des Vorjahres. /// </summary> /// <param name="fileName">Der Dateiname.</param> public static void ImportiereNotenAusWinSD(string fileName) { using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) using (StreamReader reader = new StreamReader(stream)) { var schuelerAdapter = new SchuelerTableAdapter(); var fpaAdapter = new FpANotenTableAdapter(); Kurs geschichte = GetGeschichteKurs(); Dictionary<string, Kurs> kurse = new Dictionary<string, Kurs>(); kurse.Add("W11", FindOrCreateDummyKurs("Rechtslehre aus elfter Jahrgangsstufe", "Rl")); kurse.Add("S11", FindOrCreateDummyKurs("Chemie aus elfter Jahrgangsstufe", "C")); kurse.Add("T11", FindOrCreateDummyKurs("TZ aus elfter Jahrgangsstufe", "TZ")); kurse.Add("A11", null); // laut Stundentafel legt der Agrarzweig außer Geschichte nichts ab. while (!reader.EndOfStream) { string[] line = reader.ReadLine().Split(SeparatorChar); if (line.Length == 5) { //notenzeile int schuelerId = int.Parse(line[0]); string faecherspiegel = line[1]; fpaNote fpaNote = OmnisDB.Konstanten.GetFpaNoteFromString(line[2]); byte? geschichteNote = string.IsNullOrEmpty(line[3]) ? (byte?)null : byte.Parse(line[3]); byte? zweitesAbgelegtesFachNote = string.IsNullOrEmpty(line[4]) ? (byte?)null : byte.Parse(line[4]); var schuelerGefunden = schuelerAdapter.GetDataById(schuelerId); if (schuelerGefunden == null || schuelerGefunden.Count == 0) { continue; } var schueler = new Schueler(schuelerGefunden[0]); if (geschichteNote != null) { TrageNoteEin(geschichte, (byte)geschichteNote, schueler); } Kurs zweitesFach = kurse[faecherspiegel]; if (zweitesFach != null && zweitesAbgelegtesFachNote != null) { TrageNoteEin(zweitesFach, (byte)zweitesAbgelegtesFachNote, schueler); } fpaAdapter.Insert(schuelerId, "", null, null, null, null, (int)fpaNote,null,null); } else throw new InvalidOperationException("Diese Zeile hat " + line.Length + " Spalten. Das ist mir unbekannt"); } } TrageFehlendeSchülerInDummykurseEin(); }
/// <summary> /// Konstruktor. /// </summary> /// <param name="sourceFileName">Der Dateiname des Exportfiles der leeren DZeugnis-Tabelle.</param> /// <param name="targetFileName">Der Dateiname des zu erstellenden ImportFiles der DZeugnis-Tabelle.</param> public DZeugnisFileController(string sourceFileName, string targetFileName, Zeitpunkt zeitpunkt) { Faecherspiegel faecher = new Faecherspiegel(); SchuelerTableAdapter ada = new SchuelerTableAdapter(); using (FileStream inStream = new FileStream(sourceFileName, FileMode.Open, FileAccess.Read)) using (StreamReader reader = new StreamReader(inStream, Encoding.GetEncoding("iso-8859-1"))) using (FileStream outStream = new FileStream(targetFileName, FileMode.Create, FileAccess.Write)) using (StreamWriter writer = new StreamWriter(outStream, Encoding.GetEncoding("iso-8859-1"))) { while (!reader.EndOfStream) { var zeile = new VerwalteZeile(reader.ReadLine()); int schuelerId = int.Parse(zeile[Konstanten.schuelerIdCol]); // Prüfe vorher, ob der Schüler existiert (hier kommen tausend Schüler aus den Vorjahren) if (ada.GetDataById(schuelerId).Count == 0) { continue; } Schueler schueler = Zugriff.Instance.SchuelerRep.Find(schuelerId); if (BrauchtZeugnis(schueler, zeitpunkt)) { zeile[Konstanten.fpaCol] = Konstanten.GetFpaString(GetFpaNote(zeitpunkt, schueler)); KlassenzielOderGefaehrdung zielerreichung = GetZielerreichung(zeitpunkt, schueler); zeile[Konstanten.klassenzielOderGefaehrdungCol] = Konstanten.GetKlassenzielOderGefaehrdungString(zielerreichung); if (zeitpunkt == Zeitpunkt.ErstePA || zeitpunkt == Zeitpunkt.ZweitePA || zeitpunkt == Zeitpunkt.DrittePA) { zeile[Konstanten.zeugnisartCol] = zielerreichung == KlassenzielOderGefaehrdung.AbschlusspruefungOhneErfolg ? "J" : "A"; zeile[Konstanten.APBestandenCol] = Konstanten.GetBestandenString(GetBestanden(zeitpunkt, schueler)); } zeile[Konstanten.abweisungCol] = Konstanten.GetAbweisungString(schueler.GefahrDerAbweisung); var seminarfachNote = new SeminarfachnoteTableAdapter().GetDataBySchuelerId(schuelerId); if (seminarfachNote != null && seminarfachNote.Count == 1 && !seminarfachNote[0].IsGesamtnoteNull()) { zeile[Konstanten.seminarfachGesamtnote] = string.Format(CultureInfo.CurrentCulture, "{0:00}", seminarfachNote[0].Gesamtnote); zeile[Konstanten.seminarfachThema] = !string.IsNullOrEmpty(seminarfachNote[0].ThemaKurz) ? seminarfachNote[0].ThemaKurz : seminarfachNote[0].ThemaLang.Substring(0, 128); } string faecherspiegel = zeile[Konstanten.faecherspiegelCol]; if (string.IsNullOrEmpty(faecherspiegel)) { log.Warn("Für den Schüler " + schueler.NameVorname + " gibt es keinen passenden Fächerspiegel!"); continue; } for (int i = 0; i < 30; i++) { zeile[Konstanten.notePflichtfach1Col + i] = faecher.GetFachNoteString(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt); } if (Konstanten.ZeugnisartFromString(zeile[Konstanten.zeugnisartCol]) != Zeugnisart.Zwischenzeugnis) { for (int i = 0; i < 20; i++) { zeile[Konstanten.jahresfortgangPflichtfach1Col + i] = faecher.FindeJahresfortgangsNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt); zeile[Konstanten.APschriftlichPflichtfach1Col + i] = faecher.FindeAPSchriftlichNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt); zeile[Konstanten.APmuendlichPflichtfach1Col + i] = faecher.FindeAPMuendlichNoten(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt); zeile[Konstanten.gesamtNoteMitAPGanzzahlig1Col + i] = faecher.GetFachNoteString(faecherspiegel, i, schueler.getKlasse.Schulart, schueler, zeitpunkt); } } SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach1BezeichnungCol, Konstanten.weiteresFach1NoteCol); SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach2BezeichnungCol, Konstanten.weiteresFach2NoteCol); SucheWahlpflichtfach(zeitpunkt, faecher, zeile, schueler, Konstanten.weiteresFach3BezeichnungCol, Konstanten.weiteresFach3NoteCol); } // rausgeschrieben werden immer alle Zeugnisse, da im Import "ersetzen" angehakt werden muss writer.WriteLine(zeile.ToString()); } } }
/// <summary> /// Die Methode zum Einlesen der Daten. /// </summary> /// <param name="fileName">Der Dateiname.</param> public static void ReadSchueler(string fileName) { using (StreamReader reader = new StreamReader(fileName, Encoding.GetEncoding("iso-8859-1"))) using (SchuelerTableAdapter tableAdapter = new SchuelerTableAdapter()) using (KlasseTableAdapter klasseTableAdapter = new KlasseTableAdapter()) { while (!reader.EndOfStream) { string line = reader.ReadLine(); if (string.IsNullOrEmpty(line)) { log.Debug("Ignoriere Leerzeile"); continue; } string[] array = line.Split(new string[] { "\t" }, StringSplitOptions.None); string[] cleanArray = array.Select(aString => aString.Trim(new char[] { '\"', ' ', '\n' })).ToArray(); //TODO: Schueler nicht in Teilklassen stecken (bei Mischklassen, vor allem FOS/BOS-Mischung problematisch) var klasse = GetKlasseId(klasseTableAdapter, cleanArray[klasseSpalte].Trim()); if (klasse == null) { log.Debug("Ignoriere einen Schüler ohne richtige Klasse. Übergebene Klasse war " + cleanArray[klasseSpalte]); continue; } // wenn der Schüler noch nicht vorhanden ist var table = tableAdapter.GetDataById(int.Parse(cleanArray[schuelerIdSpalte])); diNoDataSet.SchuelerRow row = (table.Count == 0) ? table.NewSchuelerRow() : table[0]; FillRow(cleanArray, klasse, row); if (table.Count == 0) { table.AddSchuelerRow(row); } row.AcceptChanges(); tableAdapter.Update(row); // Diese Zeile meldet den Schüler bei allen notwendigen Kursen seiner Klasse an new Schueler(row).WechsleKlasse(new Klasse(klasse)); } } }