public LeseNotenAusExcel(string afileName, StatusChanged StatusChangedMethod) { fileName = afileName; this.StatusChanged = StatusChangedMethod; Status("Öffne Datei " + afileName); xls = new OpenNotendatei(fileName); // Liste der gespeicherten Sids bereitstellen (alte Sids sollen nicht aus Excel gelöscht werden) for (int i = CellConstant.zeileSIdErsterSchueler; i < CellConstant.zeileSIdErsterSchueler + OpenNotendatei.MaxAnzahlSchueler; i++) { int sid = Convert.ToInt32(xls.ReadValue(xls.sid, CellConstant.SId + i)); if (sid == int.MaxValue) { continue; // Schüler wurde gelöscht } else { if (sid == 0) break; sidList.Add(sid); } } kurs = new Kurs(Convert.ToInt32(xls.ReadValue(xls.sid, CellConstant.KursId))); Status("Synchronisiere Datei " + afileName); Synchronize(); Status("Übertrage Noten aus Datei " + afileName); DeleteAlteNoten(); UebertrageNoten(); success = true; // TODO: Gefährlich, private Variablen zu disposen? xls.Dispose(); xls = null; Status("fertig mit Datei " + afileName); }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> /// <param name="reason">Die Art der Prüfung.</param> /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns> public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res) { base.Check(schueler, reason, res); int anz=0; foreach (var fachNoten in noten.alleFaecher) { // TODO: Nur für Test am Jahresende, da in manchen Fächern keine Datei vorlag /* if (noten.Count == 0) { continue; }*/ // TODO: Anzahl SA direkt aus DB lesen! Schulaufgabenwertung wertung = fachNoten.getFach.GetSchulaufgabenwertung(schueler.getKlasse); Kurs kurs = new Kurs(fachNoten.kursId); //es müssen 2 oder 3 Schulaufgaben zum Ende des Jahres vorliegen - zum Halbjahr min. eine int noetigeAnzahlSchulaufgaben = GetAnzahlSchulaufgaben(wertung); if (noetigeAnzahlSchulaufgaben > 0) { if (reason == Zeitpunkt.HalbjahrUndProbezeitFOS || reason == Zeitpunkt.ProbezeitBOS) noetigeAnzahlSchulaufgaben = 1; anz = fachNoten.getNotenanzahl(Notentyp.Schulaufgabe); if (anz < noetigeAnzahlSchulaufgaben) res.Add(schueler, kurs, "Es " + toText(anz) + " SA vorhanden."); } // egal, bei welcher Entscheidung: Es müssen im ersten Halbjahr min. 2 mündliche Noten vorliegen // am Jahresende bzw. zur PA-Sitzung müssen es entweder 2 Kurzarbeiten/Exen und 2 echte mündliche // die Prüfung unterscheidet wie der bisherige Notenbogen nicht, ob die Note aus einer Ex oder echt mündlich ist - das verantwortet der Lehrer int kurzarbeitenCount = fachNoten.getNotenanzahl(Notentyp.Kurzarbeit); int muendlicheCount = fachNoten.getNotenanzahl(Notentyp.Ex) + fachNoten.getNotenanzahl(Notentyp.EchteMuendliche); if (reason == Zeitpunkt.ProbezeitBOS || reason == Zeitpunkt.HalbjahrUndProbezeitFOS) { if ((kurzarbeitenCount == 0 && muendlicheCount < 2) || muendlicheCount == 0) { res.Add(schueler, kurs, "Es " + toText(muendlicheCount) + " mündliche Noten vorhanden."); } } else if (reason == Zeitpunkt.ErstePA || reason == Zeitpunkt.Jahresende) { if (kurzarbeitenCount == 1) { res.Add(schueler, kurs, "Es " + toText(kurzarbeitenCount) + " Kurzarbeit vorhanden."); } if ((kurzarbeitenCount == 0 && muendlicheCount < 4) || muendlicheCount < 2) { res.Add(schueler, kurs, "Es " + toText(muendlicheCount) + " mündliche Noten vorhanden."); } } // Zweite PA: nur Vorliegen der Prüfungsnoten prüfen else if (reason == Zeitpunkt.ZweitePA) { if (fachNoten.getNotenanzahl(Notentyp.APSchriftlich) == 0) { res.Add(schueler, kurs,"Es liegt keine Note in der schriftlichen Abschlussprüfung vor."); } } } }
/// <summary> /// Aus dem übergebenen Kurs wird eine Exceldatei mit allen Schülerdaten generiert /// </summary> public ErzeugeExcelDatei(diNoDataSet.KursRow aKurs) { kurs = new Kurs(aKurs); if (kurs.getLehrer == null) { return; // es gibt auch Kurse ohne Lehrer, z. B. übernommene Noten aus 11ter Klasse } alleSchueler = kurs.getSchueler(true); // sind bereits via SQL nach Klasse und Namen sortiert if (alleSchueler.Count == 0) { log.WarnFormat("Der Kurs {0} hat keine Schueler ", kurs.Data.Bezeichnung); return; } if (alleSchueler.Count > OpenNotendatei.MaxAnzahlSchueler) { throw new InvalidOperationException("zu viele Schüler " + alleSchueler.Count); } if (string.IsNullOrEmpty(kurs.FachBezeichnung)) { // ignoriere FPA, Seminare und ähnliche Platzhalter log.Debug("Erzeuge keine Datei für das Fach " + kurs.getFach.Kuerzel); return; } CopyExcelFile(); xls = new OpenNotendatei(fileName); FillExcelFile(); SwitchNotenschluessel(); // speichere und schließe Datei xls.workbook.Save(); xls.Dispose(); // Destruktor aufrufen xls = null; }
private static void TrageNoteEin(Kurs kurs, byte note, Schueler schueler) { schueler.MeldeAn(kurs); BerechneteNote bnote = new BerechneteNote(kurs.Id, schueler.Id); bnote.ErstesHalbjahr = false; bnote.JahresfortgangGanzzahlig = note; bnote.Abschlusszeugnis = note; bnote.writeToDB(); }
public NotenCheckContainer(Kurs k,Schueler s, string m) { kurs = k; schueler = s; meldung = m; }
public NotenCheckResult(Klasse kl,Kurs k,string m) { schueler = "...mehrmals..."; klasse = kl.Data.Bezeichnung; lehrer = k!=null && k.getLehrer != null ? k.getLehrer.Kuerzel : ""; fach = k!=null ? k.getFach.Kuerzel : ""; meldung = m; }
public NotenCheckResult(Schueler s,Kurs k,string m) { schueler = s.NameVorname; klasse = s.getKlasse.Data.Bezeichnung; lehrer = k!=null && k.getLehrer != null ? k.getLehrer.Kuerzel : ""; fach = k!=null ? k.getFach.Kuerzel : ""; meldung = m; }
public NotenCheckCounter(Kurs k, string m) { count =1; kurs = k; meldung = m; }
public void Add(Kurs k,string m,bool aUnterpunktungGedruckt=false) { if (aUnterpunktungGedruckt) UnterpunktungGedruckt=aUnterpunktungGedruckt; NotenCheckCounter c; if (k!=null) { chkContainer.Add(new KeyValuePair<string, NotenCheckContainer>(k.Id + "_" +m,new NotenCheckContainer(k,aktSchueler,m))); if (chkCounter.TryGetValue(k.Id + "_" +m,out c)) { c.count++; // so eine ähnliche Meldung gab es schon mal } else { chkCounter.Add(k.Id + "_" +m,new NotenCheckCounter(k,m)); } } else { chkContainer.Add(new KeyValuePair<string, NotenCheckContainer>("",new NotenCheckContainer(k,aktSchueler,m))); } }
public void Add(Schueler s,Kurs k,string m) { list.Add(new NotenCheckResult(s,k,m)); }
// wenn dem Schüler ein neuer Kurs hinzugefügt wird, z.B. kath. Religion, dann wird automatisch das // Feld ReligionOderEthik angepasst, anlog für Französisch etc. public void PasseWahlfachschluesselAn(Kurs k) { string kuerzel = k.getFach.Kuerzel; if (kuerzel=="K") Data.ReligionOderEthik="RK"; else if (kuerzel=="Ev") Data.ReligionOderEthik="EV"; else if (kuerzel=="Eth") Data.ReligionOderEthik="Eth"; else if (kuerzel=="F") Data.Fremdsprache2="F"; else if (kuerzel=="F-Wi" || kuerzel=="WIn" || kuerzel=="Ku" || kuerzel=="F3" ) Data.Wahlpflichtfach=kuerzel; }
public void MeldeAn(Kurs beiKurs) { SchuelerKursTableAdapter skAda = new SchuelerKursTableAdapter(); if (skAda.GetCountBySchuelerAndKurs(this.Id, beiKurs.Id) == 0) { new SchuelerKursTableAdapter().Insert(this.Id, beiKurs.Id); this.Refresh(); } }
public void MeldeAb(Kurs vonKurs) { new SchuelerKursTableAdapter().Delete(this.Id, vonKurs.Id); this.Refresh(); }
// prüft, ob der übergebene Kurs ein potenzielle Kandidat für diesen Schüler ist // berücksichtigt dabei den gewählten Zweig bei Mischklassen public bool KursPasstZumZweig(Kurs k) { string kuerzel = k.getFach.Kuerzel; if (k.Data.IsZweigNull()) return true; if (k.Data.Zweig == "F" || k.Data.Zweig == "B") { if (Data.IsSchulartNull()) return true; return k.Data.Zweig == Data.Schulart; } else { return k.Data.Zweig == Data.Ausbildungsrichtung; } }
// prüft, ob der übergebene Kurs ein potenzielle Kandidat für diesen Schüler ist // berücksichtigt dabei den gewählten Zweig bei Mischklassen, Reliunterricht, Französisch // eignet sich für die Vorbelegung von Kursen beim Schülerimport public bool KursPasstZumSchueler(Kurs k) { string kuerzel = k.getFach.Kuerzel; string reli = getReliKuerzel(); // Ku ist bei uns immer Pflichtfach if (kuerzel == "K" || kuerzel == "Ev" || kuerzel == "Eth") return (kuerzel == reli); else if (kuerzel == "F") return (kuerzel == Data.Fremdsprache2); else if (kuerzel == "F-Wi" && Data.Wahlpflichtfach == "F3") return true; // die Wirtschaftler gehen in Wirtschaftsinformatik, sofern sie nicht franz. fortgeführt als wahlpflichtfach haben else if (kuerzel == "WIn" && Zweig == Zweig.Wirtschaft && (Data.IsWahlpflichtfachNull() || Data.Wahlpflichtfach != "F3")) return true; // Standardfall (oft unbelegt) // alle anderen Zweige müssen den Franz. oder WInf Kurs schon wählen, damit sie reingehen else if (kuerzel == "F-Wi" || kuerzel == "WIn") return (kuerzel == Data.Wahlpflichtfach); else return KursPasstZumZweig(k); }