예제 #1
0
        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);
        }
예제 #2
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.");
                }
            }
            }
        }
예제 #3
0
        /// <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;
        }
예제 #4
0
 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();
 }
예제 #5
0
 public NotenCheckContainer(Kurs k,Schueler s, string m)
 {
     kurs = k;
     schueler = s;
     meldung = m;
 }
예제 #6
0
 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;
 }
예제 #7
0
 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;
 }
예제 #8
0
 public NotenCheckCounter(Kurs k, string m)
 {
     count =1;
     kurs = k;
     meldung = m;
 }
예제 #9
0
 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)));
       }
 }
예제 #10
0
 public void Add(Schueler s,Kurs k,string m)
 {
     list.Add(new NotenCheckResult(s,k,m));
 }
예제 #11
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
 // 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;
 }
예제 #12
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
 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();
       }
 }
예제 #13
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
 public void MeldeAb(Kurs vonKurs)
 {
     new SchuelerKursTableAdapter().Delete(this.Id, vonKurs.Id);
       this.Refresh();
 }
예제 #14
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
 // 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;
       }
 }
예제 #15
0
파일: Schueler.cs 프로젝트: FOSBOS/diNo
        // 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);
        }