소스 검색

BK-spezifische Abschlusstabellen hinzugefügt

hmt 9 년 전
부모
커밋
4510e6b162
2개의 변경된 파일109개의 추가작업 그리고 0개의 파일을 삭제
  1. 65 0
      lib/schild.rb
  2. 44 0
      specs/schueler_spec.rb

+ 65 - 0
lib/schild.rb

@@ -69,6 +69,8 @@ module Schild
   class Schueler < Sequel::Model(:schueler)
     many_to_one :fachklasse, :class => :Fachklasse, :key => :Fachklasse_ID
     one_to_many :abschnitte, :class => :Abschnitt
+    one_to_one :bk_abschluss, :class => :BKAbschluss
+    one_to_many :bk_abschluss_leistungen, :class => :BKAbschlussFaecher
   end
 
   # Dient als Assoziation für Schüler und deren Klassenbezeichnung etc.
@@ -99,6 +101,14 @@ module Schild
     one_to_one :noten
   end
 
+  class BKAbschluss < Sequel::Model(:schuelerbkabschluss)
+    one_to_one :schueler
+  end
+
+  class BKAbschlussFaecher < Sequel::Model(:schuelerbkfaecher)
+    many_to_one :schueler
+  end
+
   # Schul-Tabelle
   class Schule < Sequel::Model(:eigeneschule)
   end
@@ -287,6 +297,61 @@ module SchildErweitert
     include SchildTypeSaver
   end
 
+  # Assoziation für BK-Abschlussdaten
+  class BKAbschluss < Schild::BKAbschluss
+    include SchildTypeSaver
+
+    # Ist der Schüler zugelassen?
+    def zulassung?
+      self.Zulassung == "+"
+    end
+
+    # Ist der Schüler für den Berufsabschluss zugelassen?
+    def zulassung_ba?
+      self.ZulassungBA == "+"
+    end
+
+    # Hat der Schüler den Berufsabschluss bestanden?
+    def bestanden_ba?
+      self.BestandenBA == "+"
+    end
+  end
+
+  # Assoziation für die jeweiligen BK-Prüfungsfächer
+  class BKAbschlussFaecher < Schild::BKAbschlussFaecher
+    include SchildTypeSaver
+
+    # Vornote des Prüfungsfachs
+    def vornote
+      self.Vornote.to_i
+    end
+
+    # Wurde das Fach schriftlich geprüft?
+    def fach_schriftlich?
+      self.FachSchriftlich == "+"
+    end
+
+    # Wurde das Fach mündlich geprüft?
+    def fach_muendlich?
+      self.MdlPruefung == "+"
+    end
+
+    # die schriftliche Note des Fachs
+    def note_schriftlich
+      self.NoteSchriftlich.to_i
+    end
+
+    # Die mündliche Note des Fachs
+    def note_muendlich
+      self.NoteMuendlich.to_i
+    end
+
+    # Die berechnete/festgelegte Abschlussnote für das Fach
+    def note_abschluss
+      self.NoteAbschluss.to_i
+    end
+  end
+
   # Schul-Tabelle mit vereinfachtem Zugriff auf Datenfelder.
   class Schule < Schild::Schule
     include SchildTypeSaver

+ 44 - 0
specs/schueler_spec.rb

@@ -43,6 +43,50 @@ describe Schueler do
       fg = @sm.zweites_halbjahr(2013).faechergruppen.flatten.count
       fg.must_equal (@sm.zweites_halbjahr(2013).noten.select{|n|n.AufZeugnis == '+'}).count
     end
+
+    it 'gibt Zulassung zurück' do
+      Schueler[166].bk_abschluss.zulassung?.must_equal true
+      Schueler[19].bk_abschluss.zulassung?.must_equal false
+    end
+
+    it 'gibt Zulassung Berufsabschluss zurück' do
+      Schueler[166].bk_abschluss.zulassung_ba?.must_equal true
+      Schueler[19].bk_abschluss.zulassung_ba?.must_equal false
+    end
+
+    it 'gibt Berufsabschluss bestanden zurück' do
+      Schueler[166].bk_abschluss.bestanden_ba?.must_equal true
+      Schueler[19].bk_abschluss.bestanden_ba?.must_equal false
+    end
+
+    it 'gibt zurück, ob Fach schriftlich' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.fach_schriftlich?.must_equal true
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.fach_schriftlich?.must_equal false
+    end
+
+    it 'gibt zurück, ob Fach mündlich' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.fach_muendlich?.must_equal true
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.fach_muendlich?.must_equal false
+    end
+
+    it 'gibt Note schriftlich zurück' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.note_schriftlich.must_equal 3
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_schriftlich.must_equal 0
+    end
+
+    it 'gibt Note mündlich zurück' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_muendlich.must_equal 6
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_muendlich.must_equal 0
+    end
+
+    it 'gibt Abschlussnote zurück' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "M"}.note_abschluss.must_equal 5
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSFK"}.note_abschluss.must_equal 3
+    end
+
+    it 'gibt Abschlussfächer zurück' do
+      Schueler[145].bk_abschluss_leistungen.find{|l|l.fach_krz == "GSTE"}.vornote.must_equal 4
+    end
   end
 
   describe 'gibt die korrekte Anzahl von Schülern über Klasse zurück' do