예제 #1
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        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);
              }
        }
예제 #2
0
        /// <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);
            }
              }
            }
              }
        }
예제 #3
0
 /// <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);
       }
 }
예제 #4
0
        public NotenCheckResults CheckSchueler(Schueler s, IList<INotenCheck> notwendigeNotenchecks)
        {
            foreach (var ch in notwendigeNotenchecks)
            {
                ch.Check(s, zeitpunkt,res);
            }

            return res;
        }
예제 #5
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
        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>";
              }
        }
예제 #6
0
        /// <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.");
        }
예제 #7
0
파일: Berechnungen.cs 프로젝트: FOSBOS/diNo
        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();
              }
        }
예제 #8
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        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);
        }
예제 #9
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        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());
            }
              }
        }
예제 #10
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        /// <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.");
        }
예제 #11
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        /// <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.");
            }
            }
        }
예제 #12
0
파일: Brief.cs 프로젝트: FOSBOS/diNo
 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>";
       }
 }
예제 #13
0
 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));
     }
 }
예제 #14
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
 /// <summary>
 /// Führt den Check durch.
 /// </summary>
 /// <param name="schueler">Der Schüler.</param>    
 public virtual void Check(Schueler schueler)
 {
     noten = schueler.getNoten;
 }
예제 #15
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        /// <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);
              }
            }
        }
예제 #16
0
        /// <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));
        }
예제 #17
0
        /// <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.");
            }
            }
        }
예제 #18
0
 /// <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.");
     }
     }
 }
예제 #19
0
        /// <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.");
                }
            }
            }
        }
예제 #20
0
 public ReportNotendruck(Object dataSource, string Berichtsname)
     : base()
 {
     rptName = Berichtsname;
       klassenweise = dataSource is ArrayList;
       if (klassenweise)
     DSklassen = (ArrayList)dataSource;
       else
     DSschueler = (Schueler)dataSource;
 }
예제 #21
0
파일: Zugriff.cs 프로젝트: FOSBOS/diNo
        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;
              }
        }
예제 #22
0
파일: Brief.cs 프로젝트: FOSBOS/diNo
 public void Anzeigen(Schueler schueler)
 {
     s = schueler;
       Show();
 }
예제 #23
0
 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!
       }
     }
       }
 }
예제 #24
0
        /// <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);
            }
            }
        }
예제 #25
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        /// <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"));
              }
            }
              }
        }
예제 #26
0
        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)");
              }
            }
              }
        }
예제 #27
0
파일: NotenCheck.cs 프로젝트: FOSBOS/diNo
        /// <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.");
              }
            }
            }
        }
예제 #28
0
        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;
        }
예제 #29
0
 /// <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;
 }
예제 #30
0
        /// <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;
        }