public override void Check(Schueler schueler) { base.Check(schueler); int anz6=0; int anz5=0; string m=""; decimal apg; foreach (var fach in noten.alleFaecher) { if (fach.getSchnitt(Halbjahr.Zweites).PruefungGesamt.HasValue) { apg=fach.getSchnitt(Halbjahr.Zweites).PruefungGesamt.GetValueOrDefault(); if (apg < (decimal)1.0) { anz6++; m+= fach.getFach.Kuerzel + "(" + apg + ") "; } if (apg < (decimal)3.5) { anz5++; m+= fach.getFach.Kuerzel + "(" + apg + ") "; } } } if (anz6 > 0 || anz5>2) { contr.Add(null,"Abiturprüfung nicht bestanden: " + m); } }
/// <summary> /// Methode exportiert alle Noten in eine csv-Datei /// Format: ID;Name;Fachkürzel;Lehrerkürzel;Zeugnisnote /// </summary> /// <param name="fileName">Der Dateiname.</param> public static void ExportiereNoten(string fileName) { using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) using (StreamWriter writer = new StreamWriter(stream)) { var schuelerAdapter = new SchuelerTableAdapter(); foreach (var dbSchueler in schuelerAdapter.GetData()) { Schueler schueler = new Schueler(dbSchueler); foreach (var fachNote in schueler.getNoten.alleFaecher) { var fachKuerzel = fachNote.getFach.Kuerzel; if (IsExportNecessary(fachKuerzel, schueler)) { var lehrer = Zugriff.Instance.KursRep.Find(fachNote.kursId).getLehrer; string lehrerKuerzel = lehrer == null ? "" : lehrer.Kuerzel; var noteImFach = schueler.getNoten.getFach(fachNote.kursId); var note = noteImFach.getRelevanteNote(Zeitpunkt.Jahresende); writer.WriteLine(schueler.Id +""+ Separator + schueler.Name + Separator + noteImFach.getFach.Kuerzel + Separator + lehrerKuerzel + Separator + note); } } if (schueler.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Elf && schueler.getKlasse.Schulart == Schulart.FOS) { var fpa = schueler.FPANoten; if (!fpa.IsErfolgNull()) { writer.WriteLine(schueler.Id + Separator + schueler.Name + Separator + fpa.Erfolg); } } } } }
/// <summary> /// Prüft, ob die Legasthenievermerke der Datenbank mit der Excel-Datei übereinstimmen. /// </summary> /// <param name="schueler">Liste aller Schüler aus der Datenbank.</param> private void CheckLegastheniker(diNoDataSet.SchuelerRow schueler) { Schueler schuelerObj = new Schueler(schueler); if (schuelerObj.IsLegastheniker) // eigentlich auch zum Entfernen gedacht, aber dann werden jedesmal alle Vermerke neu gesetzt (nicht performant). { xls.SetLegasthenievermerk(schuelerObj.Id, schuelerObj.IsLegastheniker); } }
public NotenCheckResults CheckSchueler(Schueler s, IList<INotenCheck> notwendigeNotenchecks) { foreach (var ch in notwendigeNotenchecks) { ch.Check(s, zeitpunkt,res); } return res; }
public BemerkungenDruck(Schueler s) { Inhalt=""; var jg=s.getKlasse.Jahrgangsstufe; if (jg==Jahrgangsstufe.Elf) { if (!s.FPANoten.IsErfolg1HjNull() && !s.FPANoten.IsPunkte1HjNull()) { Inhalt += "Diese wurde im 1. Halbjahr " + ErfolgText(s.FPANoten.Erfolg1Hj) + " (" + s.FPANoten.Punkte1Hj + " Punkte) durchlaufen"; if (!s.FPANoten.IsStelle1HjNull()) Inhalt += " (" + s.FPANoten.Stelle1Hj + ")"; Inhalt += ".<br>"; } if (!s.FPANoten.IsPunkte2HjNull()) { Inhalt += "Im 2. Halbjahr wurden " + s.FPANoten.Punkte2Hj +" Punkte erzielt"; if (!s.FPANoten.IsStelle2HjNull()) Inhalt += " (" + s.FPANoten.Stelle2Hj + ")"; Inhalt += ".<br>"; } if (!s.FPANoten.IsErfolgNull() && !s.FPANoten.IsPunkteNull()) Inhalt += "Insgesamt wurde die FPA <b>" + ErfolgText(s.FPANoten.Erfolg) + "</b> (durchschnittliche Punktzahl " + s.FPANoten.Punkte + ") durchlaufen.<br>"; if (!s.FPANoten.IsBemerkungNull()) Inhalt += s.FPANoten.Bemerkung + "<br>"; if (Inhalt!="") Inhalt = "<b>Fachpraktische Ausbildung</b><br>" + Inhalt; } else if (jg==Jahrgangsstufe.Zwoelf) { if (!s.FPANoten.IsErfolgNull()) Inhalt = "Die fachpraktische Ausbildung wurde in der 11. Klasse " + ErfolgText(s.FPANoten.Erfolg) +" durchlaufen.<br>"; } else if (jg==Jahrgangsstufe.Dreizehn) { if (!s.Seminarfachnote.IsThemaKurzNull()) { Inhalt="<b>Thema der Seminararbeit:</b><br>"; Inhalt += s.Seminarfachnote.ThemaKurz; } } if (!s.Data.IsDNoteNull()) { if (Inhalt!="") Inhalt += "<br>"; Inhalt += "<b>Durchschnittsnote (" + (jg==Jahrgangsstufe.Zwoelf ? "Fachhochschulreife" : "fachgebundene Hochschulreife") + "): " + s.Data.DNote + "</b><br>"; } if (!s.Data.IsDNoteAllgNull()) { Inhalt += "<b>Durchschnittsnote (allgemeine Hochschulreife): " + s.Data.DNoteAllg + "</b><br>"; } }
/// <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 sum=0; foreach (var fach in noten.alleFaecher) sum += fach.getNotenanzahl(Notentyp.Fachreferat); if (sum == 0) res.Add(schueler,null,"Der Schüler hat kein Fachreferat."); else if (sum>1) res.Add(schueler, null, "Der Schüler hat " + sum + " Fachreferate."); }
public void BerechneSchueler(Schueler s) { schueler = s; if ((zeitpunkt == Zeitpunkt.ZweitePA || zeitpunkt == Zeitpunkt.DrittePA) && s.getKlasse.Jahrgangsstufe > Jahrgangsstufe.Elf) { s.berechneDNote(false); if (s.getKlasse.Jahrgangsstufe == Jahrgangsstufe.Dreizehn) s.berechneDNote(true); // DNote für allg. HSR s.Save(); } }
public override void Check(Schueler schueler) { int sumSAP=0; int noteSAP; base.Check(schueler); if (Math.Floor(10*schueler.Data.DNote) > 13 || !schueler.Data.IsDNoteAllgNull() && Math.Floor(10*schueler.Data.DNoteAllg) > 13) // Schnitt mindestens 1.3 return; foreach (var fach in noten.alleFaecher) { if (!fach.getFach.IstSAPFach()) continue; if (fach.getNotenanzahl(Halbjahr.Zweites,Notentyp.APSchriftlich)==0) return; // Note fehlt noteSAP = fach.getNoten(Halbjahr.Zweites,Notentyp.APSchriftlich)[0]; if (noteSAP<10) return; // keine SAP-Note darf einstellig sein. sumSAP += noteSAP; } if (sumSAP>=50) // Schnitt aller SAP muss mindestens 12,5 Punkte sein contr.Add(null,"Vorschlag für Eliteförderung, Durchschnitt: " + schueler.Data.DNote); }
public override void Check(Schueler schueler) { base.Check(schueler); foreach (var fach in noten.alleFaecher) { if (fach.getFach.Kuerzel!="E" && fach.getNotenanzahl(Halbjahr.Zweites,Notentyp.APMuendlich)>0) { contr.Add(null,"MAP in " + fach.getFach.Kuerzel + " mit " + fach.getNoten(Halbjahr.Zweites,Notentyp.APMuendlich)[0] + " Punkten ergibt im Zeugnis: " + fach.getSchnitt(Halbjahr.Zweites).Abschlusszeugnis.GetValueOrDefault()); } } }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> public override void Check(Schueler schueler) { base.Check(schueler); int sum=0; foreach (var fach in noten.alleFaecher) sum += fach.getNotenanzahl(Notentyp.Fachreferat); if (sum == 0) contr.Add(null,"Es ist keine Note für das Fachreferat vorhanden."); else if (sum>1) contr.Add( null, "Es sind " + sum + " Noten für das Fachreferat vorhanden."); }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> public override void Check(Schueler schueler) { if (contr.modus == NotenCheckModus.EigeneNotenVollstaendigkeit && schueler.BetreuerId != Zugriff.Instance.lehrer.Id) return; var fpANoten = schueler.FPANoten; if (contr.zeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS) { if (fpANoten.IsErfolg1HjNull() || fpANoten.IsPunkte1HjNull()) contr.Add(null, "Es liegt keine FpA-Note vor."); else if (fpANoten.Erfolg1Hj == 4) { contr.Add(null, "Die fachpraktische Ausbildung wurde bisher ohne Erfolg durchlaufen."); } } else if (contr.zeitpunkt == Zeitpunkt.Jahresende) { if (fpANoten.IsPunkte2HjNull() || fpANoten.IsErfolgNull() || fpANoten.IsPunkteNull()) contr.Add(null, "Es liegt keine FpA-Note vor."); else if (fpANoten.Erfolg == 4) { contr.Add(null, "Die fachpraktische Ausbildung wurde ohne Erfolg durchlaufen."); } } }
public BriefDaten(Schueler s, bool erzeugeAnrede) { Anrede = s.Data.Geschlecht == "M" ? "Herrn" : "Frau"; VornameName = s.Data.Rufname + " " + s.Data.Name; Name = s.Name; Strasse = s.Data.AnschriftStrasse; Ort = s.Data.AnschriftPLZ + " " + s.Data.AnschriftOrt; Klasse = s.getKlasse.Bezeichnung; //if (Zugriff.Instance.lehrer==null) // ist jetzt immer belegt! // Unterschrift = "(Systemadministration FOS/BOS Kempten)"; //else Unterschrift = Zugriff.Instance.lehrer.Data.Name + ", "+ Zugriff.Instance.lehrer.Data.Dienstbezeichnung; if (erzeugeAnrede) { if (s.Data.Geschlecht == "M") Inhalt = "Sehr geehrter Herr " + s.Data.Name +",<br><br>"; else Inhalt = "Sehr geehrte Frau " + s.Data.Name +",<br><br>"; } }
public SchuelerNoten(Schueler s) { schueler = s; kurse = schueler.Kurse; // ermittle alle Kurse, die der S besucht alleFaecher = new List<FachSchuelerNoten>(); foreach (var kurs in kurse) { alleFaecher.Add(new FachSchuelerNoten(schueler.Id, kurs.Id)); } }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> public virtual void Check(Schueler schueler) { noten = schueler.getNoten; }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> /// <param name="contr.zeitpunkt">Die Art der Prüfung.</param> /// <returns>Array mit Fehler- oder Problemmeldungen. Kann auch leer sein.</returns> public override void Check(Schueler schueler) { base.Check(schueler); SchuelerNoten n = schueler.getNoten; n.SetZeitpunkt(contr.zeitpunkt); if (contr.zeitpunkt == Zeitpunkt.HalbjahrUndProbezeitFOS) { if (n.HatNichtBestanden()) { contr.Add(Vorkommnisart.starkeGefaehrdungsmitteilung,n.Unterpunktungen,true); } else if (n.anz4P > 1 || n.AnzahlNoten(5) > 0) { contr.Add(Vorkommnisart.BeiWeiteremAbsinken,n.Unterpunktungen,true); } if (schueler.Data.IsProbezeitBisNull() || !(schueler.Data.ProbezeitBis > DateTime.Parse("01.02." + (Zugriff.Instance.Schuljahr+1)))) return; // bei Schülern ohne PZ geht es zum Halbjahr nur um Gefährdungen } else if (contr.zeitpunkt == Zeitpunkt.ErstePA) { if (n.AnzahlNoten(6) > 1 || (n.AnzahlNoten(6) + n.AnzahlNoten(5)) > 3) { contr.Add(Vorkommnisart.NichtZurPruefungZugelassen,n.Unterpunktungen,true); } else if (n.AnzahlNoten(6,false) + n.AnzahlNoten(5,false) > 0) contr.Add(null, "Unterpunktet in einem Nichtprüfungsfach " + n.Unterpunktungen,true); return; } else if (contr.zeitpunkt == Zeitpunkt.ZweitePA) { if (n.HatNichtBestanden()) { if (n.MAPmoeglich()) contr.Add(Vorkommnisart.bisherNichtBestandenMAPmoeglich,n.Unterpunktungen,true); else contr.Add(Vorkommnisart.nichtBestandenMAPnichtZugelassen,n.Unterpunktungen,true); if (n.KannAusgleichen()) contr.Add(null,"Notenausgleich möglich"); } return; } // Jahresende, 3. PA, Probezeit (BOS und Hj.) if (schueler.getKlasse.Jahrgangsstufe==Jahrgangsstufe.Vorklasse && contr.zeitpunkt == Zeitpunkt.Jahresende) { // nur bestanden ohne 5er/6er §28(4); Mittlere Reife, falls nur 4er oder 1x5,1x2 oder 1x5,2x3, vgl. §58(5) if (n.AnzahlNoten(6) > 0 || n.AnzahlNoten(5) > 0) { if (n.AnzahlNoten(5) == 1 && (n.AnzahlNoten(1) > 0 || n.AnzahlNoten(2) > 0 || n.AnzahlNoten(3) > 1)) contr.Add(null, "Nicht bestanden, aber mittlere Reife: " + n.Unterpunktungen,true); else contr.Add(null, "Nicht bestanden: " + n.Unterpunktungen,true); } else if (n.Unterpunktungen!="") contr.Add(null, "Unterpunktet in: " + n.Unterpunktungen,true); if (/*schueler.getKlasse.Schulart == Schulart.BOS &&*/ n.HatIn12KeinePZ()) contr.Add(null, "Hat in der 12. Klasse keine Probezeit."); } else if (n.HatNichtBestanden()) { if (n.KannAusgleichen()) contr.Add(null, "Nicht bestanden, Notenausgleich möglich: " + n.Unterpunktungen,true); else { if (contr.zeitpunkt == Zeitpunkt.DrittePA) contr.Add(Vorkommnisart.NichtBestanden,n.Unterpunktungen,true); else if (contr.zeitpunkt == Zeitpunkt.Jahresende) contr.Add(Vorkommnisart.KeineVorrueckungserlaubnis,n.Unterpunktungen,true); else contr.Add(null, "Nicht bestanden: " + n.Unterpunktungen,true); } } }
/// <summary> /// Füllt die Daten des Kurses (Schülernamen, Klasse,...) in die Exceldatei /// </summary> private void FillExcelFile() { var klassen = new List<string>(); // sammelt alle Klassennamen dieses Kurses (z.B. für Ethik spannend) // Schulart, SA-Wertung wird dem ersten Schüler entnommen Schueler ersterSchueler = new Schueler(alleSchueler[0]); // muss existieren, da nur Kurse mit Schülern erzeugt werden Schulart schulart = ersterSchueler.getKlasse.Schulart; Schulaufgabenwertung wertung = kurs.getFach.GetSchulaufgabenwertung(ersterSchueler.Zweig,ersterSchueler.getKlasse.Jahrgangsstufe); // schreibe Notenbogen - Kopf xls.WriteValue(xls.notenbogen, CellConstant.Wertungsart, GetWertungsString(wertung)); xls.WriteValue(xls.notenbogen, CellConstant.Fachbezeichnung, kurs.getFach.Bezeichnung); xls.WriteValue(xls.notenbogen, CellConstant.Lehrer, kurs.getLehrer.Name); xls.WriteValue(xls.notenbogen, CellConstant.Schuljahr, Konstanten.Schuljahr); xls.WriteValueProtectedCell(xls.sid, CellConstant.KursId, kurs.Id.ToString()); int zeile = 5; int zeileFuerSId = CellConstant.zeileSIdErsterSchueler; foreach (var s in alleSchueler) { Schueler schueler = Zugriff.Instance.SchuelerRep.Find(s.Id); if (!klassen.Contains(schueler.getKlasse.Data.Bezeichnung)) { klassen.Add(schueler.getKlasse.Data.Bezeichnung); } // Schüler in die Exceldatei schreiben xls.WriteValueProtectedCell(xls.notenbogen, CellConstant.Nachname + zeile, schueler.Data.Name); xls.WriteValueProtectedCell(xls.notenbogen, CellConstant.Vorname + (zeile + 1), " " + schueler.benutzterVorname); xls.WriteValueProtectedCell(xls.sid, CellConstant.SId + zeileFuerSId, schueler.Id.ToString()); if (schueler.IsLegastheniker && (kurs.getFach.Kuerzel == "E" || kurs.getFach.Kuerzel == "F")) { xls.SetLegasthenievermerkByZeile(zeile, true); } zeile += 2; zeileFuerSId++; } // Klassenbezeichnung wird aus allen Schülern gesammelt xls.WriteValue(xls.notenbogen, CellConstant.Klassenbezeichnung, klassen.Aggregate((x, y) => x + ", " + y)); }
/// <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) { SeminarfachnoteTableAdapter seminarfachAdapter = new SeminarfachnoteTableAdapter(); var seminarfachnoten = seminarfachAdapter.GetDataBySchuelerId(schueler.Id); if (seminarfachnoten.Count == 0) { res.Add(schueler, null,"Es liegt keine Seminarfachnote vor."); } else { var note = seminarfachnoten[0].Gesamtnote; var thema = seminarfachnoten[0].ThemaLang; if (note < 4) { res.Add(schueler, null, "Im Seminarfach wurden " +note+" Punkte erzielt."); } if (string.IsNullOrEmpty(thema)) { res.Add(schueler, null, "Es liegt kein Seminarfachthema vor."); } } }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> /// <param name="reason">Die Art der Prüfung.</param> public override void Check(Schueler schueler, Zeitpunkt reason, NotenCheckResults res) { FpANotenTableAdapter fpAAdapter = new FpANotenTableAdapter(); var fpANoten = fpAAdapter.GetDataBySchuelerId(schueler.Id); if (fpANoten.Count == 0) { res.Add(schueler, null, "Es liegt keine FpA-Note vor."); } else { var note = fpANoten[0].Note; if (note == 3) { res.Add(schueler, null, "Die fachpraktische Ausbildung wurde ohne Erfolg durchlaufen."); } } }
/// <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."); } } } }
public ReportNotendruck(Object dataSource, string Berichtsname) : base() { rptName = Berichtsname; klassenweise = dataSource is ArrayList; if (klassenweise) DSklassen = (ArrayList)dataSource; else DSschueler = (Schueler)dataSource; }
public void LoadSchueler(bool nurAktive=true) { diNoDataSet.SchuelerDataTable sListe; int NotStatus = nurAktive?1:255; // Status=1 bedeutet abgemeldet, var ta = new SchuelerTableAdapter(); if (SiehtAlles) sListe = ta.GetDataByStatus(NotStatus); // alle Schüler reinladen else if (IstNurNormalerLehrer) sListe = ta.GetDataByLehrerId(NotStatus,lehrer.Id); // nur eigene Schüler else sListe = ta.GetDataByLehrerIdFPASem(NotStatus,lehrer.Id); // Lehrer mit erweiterten Rollen AnzahlSchueler = sListe.Count; foreach (var sRow in sListe) { Klasse k; Schueler s = new Schueler(sRow); SchuelerRep.Add(s); // Schüler ins Repository aufnehmen if (KlassenRep.Contains(sRow.KlasseId)) { k = KlassenRep.Find(sRow.KlasseId); } else { k = new Klasse(sRow.KlasseId); Klassen.Add(k); KlassenRep.Add(k); } s.getKlasse = k; // dem Schüler die Klasseninstanz zuweisen, damit die nicht jedesmal neu erzeugt werden muss! k.eigeneSchueler.Add(s); // und umgekehrt dieser Klasse den Schüler hinzufügen } // alles sortieren Klassen.Sort((x, y) => x.Bezeichnung.CompareTo(y.Bezeichnung)); foreach (var klasse in Klassen) { klasse.eigeneSchueler.Sort((x, y) => x.NameVorname.CompareTo(y.NameVorname)); if (klasse.KlassenleiterId == lehrer.Id) eigeneKlasse = klasse; } }
public void Anzeigen(Schueler schueler) { s = schueler; Show(); }
private void CheckKlasse(int schuelerId, Schueler schueler) { command.CommandText = "SELECT KLASSE FROM DSchueler WHERE _SCHUELER_ID =" + schuelerId; using (var einzelresult = command.ExecuteReader()) { if (einzelresult.Read()) { if (!string.Equals(schueler.getKlasse.Bezeichnung, einzelresult.GetString(0), System.StringComparison.OrdinalIgnoreCase)) { log.Warn(schueler.Name + ", " + schueler.Vorname + "(" + schueler.getKlasse.Bezeichnung + ") - " + "KLASSE: " + schueler.getKlasse.Bezeichnung + " (alt) vs. " + einzelresult.GetString(0) + " (neu)"); // Klasse geändert: Manuelle Änderung nötig! } } } }
/// <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 anz5=0,anz6=0,anz4P=0,anz2=0,anz1=0; string m=""; foreach (var fachNoten in noten.alleFaecher) { byte? relevanteNote = fachNoten.getRelevanteNote(reason); if (relevanteNote == null) { res.Add(schueler,new Kurs(fachNoten.kursId) ,"Es konnte keine Note gebildet werden."); } else { if (relevanteNote == 0) anz6++; else if (relevanteNote < 4) anz5++; else if (relevanteNote == 4) anz4P++; else if (relevanteNote >=13) anz1++; else if (relevanteNote >= 10) anz2++; if (relevanteNote <4 || relevanteNote == 4 && reason == Zeitpunkt.HalbjahrUndProbezeitFOS) m = m + fachNoten.getFach.Kuerzel + "(" + relevanteNote +") "; } } if (reason == Zeitpunkt.ErstePA) { if (anz6 > 1 || anz5 > 3) res.Add(schueler, null, "Zum Abitur nicht zugelassen: " + m); } else if (reason == Zeitpunkt.HalbjahrUndProbezeitFOS) { if (anz6>0 || anz5 > 1) res.Add(schueler, null, "Stark gefährdet: " + m); else if (anz5 > 0) res.Add(schueler, null, "Gefährdet: " + m); else if (anz4P > 1) res.Add(schueler, null, "Bei weiterem Absinken: " + m); } else { // TODO: Notenausgleich sauber implementieren if (anz6 > 0 || anz5 > 1) { if (anz2 < 2 || anz1 == 0) res.Add(schueler, null, "Nicht bestanden, kein Notenausgleich möglich: " + m); else res.Add(schueler, null, "Nicht bestanden, Notenausgleich prüfen: " + m); } } }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> public override void Check(Schueler schueler) { base.Check(schueler); //List<string> faecherOhneNoten = new List<string>(); foreach (var fachNoten in noten.alleFaecher) { Kurs kurs = Zugriff.Instance.KursRep.Find(fachNoten.kursId); if (contr.modus == NotenCheckModus.EigeneNotenVollstaendigkeit && (kurs.getLehrer == null || Zugriff.Instance.lehrer.Id != kurs.getLehrer.Id)) continue; // Zweite PA: nur Vorliegen der Prüfungsnoten prüfen // ------------------------------------------------- if (contr.zeitpunkt == Zeitpunkt.ZweitePA) { if (fachNoten.getFach.IstSAPFach() && fachNoten.getNotenanzahl(Notentyp.APSchriftlich) == 0) { contr.Add(kurs, "Es liegt keine Note in der schriftlichen Abschlussprüfung vor."); if (fachNoten.getFach.Kuerzel == "E" && fachNoten.getNotenanzahl(Notentyp.APMuendlich) == 0) { contr.Add(kurs, "Es liegt keine Note in der Gruppenprüfung vor."); } } continue; } // Grunddaten dieses Fachs // ----------------------- int noetigeAnzahlSchulaufgaben = fachNoten.getFach.AnzahlSA(schueler.Zweig,schueler.getKlasse.Jahrgangsstufe); bool istSAFach = noetigeAnzahlSchulaufgaben>0; bool einstuendig = fachNoten.getFach.IstEinstuendig(schueler.getKlasse.Jahrgangsstufe,schueler.getKlasse.Schulart); int noetigeAnzahlEchteMdl = (einstuendig ? 1 : 2); bool meldungKA=false, meldungMdl=false, meldungSA=false; Kurs derKurs = Zugriff.Instance.KursRep.Find(fachNoten.kursId); if (derKurs.getLehrer == null) { // vermutlich ein Dummy-Kurs, der aus der elften Klasse übernommen wurde. Prüfe nur Jahresfortgang und Zeugnisnote byte? relevanteNote = fachNoten.getRelevanteNote(contr.zeitpunkt); if (relevanteNote == null) { contr.Add(kurs, "Es liegt keine Note aus der 11. Klasse vor."); } continue; // in diesen Kursen nicht weiter nach Notenanzahl prüfen } // Halbjahresprüfung // ----------------- Halbjahr hj = Halbjahr.Zweites; if (contr.zeitpunkt==Zeitpunkt.ProbezeitBOS || contr.zeitpunkt==Zeitpunkt.HalbjahrUndProbezeitFOS) hj = Halbjahr.Erstes; // 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(hj,Notentyp.Kurzarbeit); int muendlicheCount = fachNoten.getNotenanzahl(hj,Notentyp.Ex) + fachNoten.getNotenanzahl(hj,Notentyp.EchteMuendliche) + fachNoten.getNotenanzahl(hj,Notentyp.Fachreferat); int schulaufgabenCount = fachNoten.getNotenanzahl(hj,Notentyp.Schulaufgabe); bool hatErsatzpruefung = fachNoten.getNotenanzahl(hj,Notentyp.Ersatzprüfung)>0; // wenn gar nichts da ist... if (kurzarbeitenCount == 0 && muendlicheCount == 0 && schulaufgabenCount == 0 && !hatErsatzpruefung) { contr.Add(kurs, toText(0,"","Note",hj)); continue; } // zur Probezeit BOS muss noch keine SA vorliegen, wenn nur pro HJ eine geschrieben wird if (istSAFach && schulaufgabenCount == 0) if (!(contr.zeitpunkt == Zeitpunkt.ProbezeitBOS && noetigeAnzahlSchulaufgaben <= 2)) { contr.Add(kurs, toText(schulaufgabenCount,"","Schulaufgabe",hj)); meldungSA=true; } // Ist eine Ersatzprüfung da, erübrigen sich KA, mdl. Noten if (!hatErsatzpruefung) { if (contr.zeitpunkt == Zeitpunkt.ProbezeitBOS) { if (!AnzahlMuendlicheNotenOKProbezeitBOS(schulaufgabenCount,kurzarbeitenCount,muendlicheCount,fachNoten)) { contr.Add( kurs, toText(muendlicheCount,"mündliche","Note")); } continue; } if (kurs.schreibtKA && kurzarbeitenCount == 0) { contr.Add( kurs, toText(kurzarbeitenCount,"","Kurzarbeite",hj)); meldungKA=true; } // mündliche Noten (bei einstündigen Fächern reicht 1 Note im Schuljahr (also hier nicht prüfen) if (!einstuendig && (kurs.schreibtKA && muendlicheCount == 0 || !kurs.schreibtKA && muendlicheCount < 2)) { contr.Add( kurs, toText(muendlicheCount,"mündliche","Note",hj)); meldungMdl=true; } } if (hj == Halbjahr.Erstes) continue; // Gesamtjahr nur prüfen, wenn auch das zweite vorliegt // Gesamtjahresprüfung // ------------------- kurzarbeitenCount = fachNoten.getNotenanzahl(Notentyp.Kurzarbeit); muendlicheCount = fachNoten.getNotenanzahl(Notentyp.Ex) + fachNoten.getNotenanzahl(Notentyp.EchteMuendliche) + fachNoten.getNotenanzahl(Notentyp.Fachreferat); schulaufgabenCount = fachNoten.getNotenanzahl(Notentyp.Schulaufgabe); hatErsatzpruefung = fachNoten.getNotenanzahl(Notentyp.Ersatzprüfung)>0; if (!hatErsatzpruefung) { if (schulaufgabenCount < noetigeAnzahlSchulaufgaben && !meldungSA) { contr.Add(kurs, toText(schulaufgabenCount,"","Schulaufgabe")); } if (kurs.schreibtKA && kurzarbeitenCount < 2 && !meldungKA) { contr.Add( kurs, toText(kurzarbeitenCount,"","Kurzarbeit")); } // wenn Exen geschrieben werden, reichen 2 Exen + 2 mdl. pro Schüler (weil ja eine nicht mitgeschrieben werden muss) if (((!kurs.schreibtKA && muendlicheCount < 2+noetigeAnzahlEchteMdl) || muendlicheCount < noetigeAnzahlEchteMdl) && !meldungMdl) { contr.Add( kurs,toText(muendlicheCount,"mündliche","Note")); } } } }
private void CheckLRS(int schuelerId, Schueler schueler) { command.CommandText = "SELECT LRS_Schwaeche, LRS_Stoerung, LRS_BIS FROM DSchueler WHERE _SCHUELER_ID =" + schuelerId; using (var lrsresult = command.ExecuteReader()) { if (lrsresult.Read()) { bool lrsSchwaecheNeu = lrsresult.GetString(0) != "0" && lrsresult.GetString(0) != ""; bool lrsStoerungNeu = lrsresult.GetString(1) != "0" && lrsresult.GetString(1) != ""; DateTime lrsBisDatum = lrsresult.GetString(2) != "" ? lrsresult.GetDateTime(2) : DateTime.MaxValue; bool istLegasthenikerNeu = (lrsStoerungNeu || lrsStoerungNeu) && lrsBisDatum > DateTime.Today; if (schueler.IsLegastheniker != istLegasthenikerNeu) { schueler.IsLegastheniker = istLegasthenikerNeu; log.Info(schueler.Name + ", " + schueler.Vorname + "(" + schueler.getKlasse.Bezeichnung + ") - " + "LRS: " + schueler.IsLegastheniker + " (alt) vs. " + istLegasthenikerNeu + " (neu)"); } } } }
/// <summary> /// Führt den Check durch. /// </summary> /// <param name="schueler">Der Schüler.</param> public override void Check(Schueler schueler) { SeminarfachnoteTableAdapter seminarfachAdapter = new SeminarfachnoteTableAdapter(); var seminarfachnoten = seminarfachAdapter.GetDataBySchuelerId(schueler.Id); if (seminarfachnoten.Count == 0) { contr.Add(null,"Es liegt keine Seminarfachnote vor."); } else { if (seminarfachnoten[0].IsGesamtnoteNull()) { contr.Add(null, "Es liegt keine Seminarfachnote vor."); } else { /* s. UnterpunktungsChecker var note = seminarfachnoten[0].Gesamtnote; if (note < 4) { contr.Add(null, "Im Seminarfach wurden " + note + " Punkte erzielt."); } */ if (seminarfachnoten[0].IsThemaLangNull() && seminarfachnoten[0].IsThemaKurzNull()) { contr.Add(null, "Es liegt kein Seminarfachthema vor."); } } } }
private void treeListView1_SelectedIndexChanged(object sender, EventArgs e) { if (treeListView1.SelectedObject is Schueler) schueler = treeListView1.SelectedObject as Schueler; if (schueler != null) { this.userControlSchueleransicht1.Schueler = schueler; this.userControlVorkommnisse1.Schueler = schueler; this.notenbogen1.Schueler = schueler; this.userControlFPAundSeminar1.Schueler = schueler; nameLabel.Text = schueler.NameVorname; klasseLabel.Text = schueler.KlassenBezeichnung; Image imageToUse = schueler.Data.Geschlecht == "W" ? global::diNo.Properties.Resources.avatarFrau : global::diNo.Properties.Resources.avatarMann; pictureBoxImage.Image = new Bitmap(imageToUse, pictureBoxImage.Size); btnBrief.Enabled = true; labelHinweise.Text = (schueler.IsLegastheniker ? "Legasthenie" : ""); labelHinweise.ForeColor = Color.Red; if (Zugriff.Instance.HatVerwaltungsrechte) { userControlKurszuordnungen1.Schueler = schueler; if (Zugriff.Instance.HatRolle(Rolle.Admin)) userControlAdministration1.Schueler = schueler; } } btnPrint.Enabled = Zugriff.Instance.HatVerwaltungsrechte || schueler != null; }
/// <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 virtual void Check(Schueler schueler, Zeitpunkt reason,NotenCheckResults res) { noten = schueler.getNoten; }
/// <summary> /// Prüft, ob ein Schueler in einem Kurs ist. /// </summary> /// <param name="schueler">Der Schüler.</param> /// <param name="kurs">Der Kurs.</param> /// <returns>true, wenn der Schüler in diesen Kurs gehen soll.</returns> public bool IsInKurs(diNoDataSet.SchuelerRow schueler, diNoDataSet.KursRow kurs) { var fach = new FachTableAdapter().GetDataById(kurs.FachId)[0]; Schueler derSchueler = new Schueler(schueler); if (derSchueler.getKlasse.Zweig == Zweig.Wirtschaft) { if (derSchueler.getKlasse.Schulart == Schulart.FOS) { // Wirtschafts-FOSler müssen zwischen WIn und Französisch (fortgeführt) wählen // wenn der Schüler dieses Fach extra gewählt hat soll er natürlich reingehen if (fach.Kuerzel.Equals("F-Wi", StringComparison.OrdinalIgnoreCase) && schueler.Wahlpflichtfach.Equals("F3", StringComparison.OrdinalIgnoreCase)) { return true; } if (fach.Kuerzel.Equals("WIn", StringComparison.OrdinalIgnoreCase) && schueler.Wahlpflichtfach.Equals("WIn", StringComparison.OrdinalIgnoreCase)) { return true; } return false; } else { // Wirtschafts-BOSler gehen immer in WIn, aber nie in Französisch (fortgeführt) oder Kunst return fach.Kuerzel.Equals("WIn", StringComparison.OrdinalIgnoreCase); } } // Für Soziale gilt: Wer Kunst als Wahlpflichtfach gewählt hat geht in Kunst // wer Französisch als Wahlpflichtfach gewählt hat, geht in Französisch (das macht aber der // Fremdsprachenselector, weil dann Französisch als Sprache2 eingetragen wird) if (derSchueler.getKlasse.Zweig == Zweig.Sozial) { if (fach.Kuerzel.Equals("Ku", StringComparison.OrdinalIgnoreCase) && schueler.Wahlpflichtfach.Equals("Ku", StringComparison.OrdinalIgnoreCase)) { return true; } } return false; }