Browse Source

erster commit

burningTyger 7 years ago
commit
0f94cc34fe
33 changed files with 3753 additions and 0 deletions
  1. 299 0
      config/fachklassen.yml
  2. 36 0
      config/textbausteine.yml
  3. 40 0
      lib/helpers.rb
  4. 21 0
      public/bower.json
  5. 25 0
      public/bower_components/normalize-css/.bower.json
  6. 12 0
      public/bower_components/normalize-css/.editorconfig
  7. 2 0
      public/bower_components/normalize-css/.gitattributes
  8. 1 0
      public/bower_components/normalize-css/.gitignore
  9. 3 0
      public/bower_components/normalize-css/.travis.yml
  10. 21 0
      public/bower_components/normalize-css/LICENSE.md
  11. 13 0
      public/bower_components/normalize-css/bower.json
  12. 447 0
      public/bower_components/normalize-css/normalize.css
  13. BIN
      public/images/abiturformel.png
  14. 0 0
      public/images/agz_logo.svg
  15. 873 0
      public/images/agz_logo_ohne_linie_breiter_text_breit.svg
  16. 0 0
      public/images/asz_logo_ohne_linie_breiter_text_breit.svg
  17. 514 0
      public/images/bk_logo.svg
  18. 0 0
      public/images/bk_logo_ohne_text.svg
  19. 873 0
      public/images/bk_logo_ohne_text_kreis_mittig.svg
  20. 15 0
      public/images/traeger_logo.svg
  21. 0 0
      public/images/zeugnis_logo.svg
  22. 52 0
      views/beilage_soa.slim
  23. 6 0
      views/csv.slim
  24. 7 0
      views/layout.slim
  25. 285 0
      views/page.scss
  26. 33 0
      views/partials/p_ahr_noten.slim
  27. 38 0
      views/partials/p_asz_zeugnis_noten.slim
  28. 29 0
      views/partials/p_noten_grid.slim
  29. 8 0
      views/partials/p_zeugnis_bemerkungen_grid.slim
  30. 15 0
      views/partials/p_zeugnis_kopf.slim
  31. 37 0
      views/partials/p_zeugnis_lf_noten.slim
  32. 32 0
      views/partials/p_zeugnis_noten_grid.slim
  33. 16 0
      views/partials/p_zeugnis_unterschrift_pa.slim

+ 299 - 0
config/fachklassen.yml

@@ -0,0 +1,299 @@
+---
+# Erläuterung der fachklassen.yml:
+# erste Zeile ist die Fachklassenkennung, unter der Schild die Ausbildungen sortiert
+# hier müssen alle Schulformen angelegt werden, da viele Informationen nicht in Schild abgelegt sind,
+# bzw. praktischer hier sind.
+# Zusätzliche Strings lassen sich hier ebenfalls anlegen, je nach Bedarf
+#
+# Ändern sich Angaben im Laufe der Zeit, so kann _vor_ den letzten Wert eine Jahreszahl
+# gesetzt werden und Sahib wählt den String, der <= abschnittsjahr ist.
+# z.B.
+# Bereich:
+#   2013: Bereich Erziehung und Soziales
+#   2015: Bereich Erziehung, Hauswirtschaft und Soziales
+#
+#   Für Dokumente ab 2015 wir letzteres gewählt, Dokumente in 2013 und 14 wählen
+#   ersteres.
+#
+default: #Fallback für alle anderen Fachklassen
+  Schulform: Schulform fehlt
+  Bereich: Bereich fehlt
+  Zeugniskopf: ohne Angabe
+  Berufsbezeichnung_m: männliche Berufsbezeichnung
+  Berufsbezeichnung_w:
+    2008: weibliche Berufsbezeichnung 2009
+    2012: weibliche Berufsbezeichnung
+  Fachgruppe:
+    10: üblicherweise allgemeinbildende Fächer
+    20: üblicherweise berufsbezogene Fächer
+    30: üblicherweise Fächer des Differenzierungsbereichs
+
+10-106-00: #Erzieher AHR
+  Schulform: Berufliches Gymnasium, Bereich Gesundheit und Soziales
+  Bereich:
+    2012: Bereich Erziehung und Soziales
+    # 2013: Bereich Gesundheit und Soziales
+    2013: Erzieherin/AHR, Erzieher/AHR
+  Zeugniskopf: Erzieherin/AHR, Erzieher/AHR
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Examen: Berufsabschlussprüfung
+  Berufsbezeichnung_m: Staatlich anerkannter Erzieher
+  Berufsbezeichnung_w: Staatlich anerkannte Erzieherin
+  Fremdsprache:
+    114: (B2/C1)
+
+10-121-00: #Staatlich geprüfter Sozialhelfer/Heilerziehungshelfer
+  Schulform: Berufsfachschule
+  Bereich:
+    2013: Bereich Sozial- und Gesundheitswesen
+    2014: Fachbereich Gesundheit/Erziehung und Soziales
+  Abschluss: true
+  Examen: Berufsabschlussprüfung
+  Zeugniskopf:
+    2013: des Bildungsgangs Berufsfachschule für Sozial- und Gesundheitswesen
+    2014: Berufsfachschule für Gesundheit/Erziehung und Soziales
+  Berufsbezeichnung_m:
+    2013: Staatlich geprüfter Sozialhelfer
+    2014: Staatlich geprüfter Sozialassistent, Schwerpunkt Heilerziehung
+  Berufsbezeichnung_w:
+    2013: Staatlich geprüfte Sozialhelferin
+    2014: Staatlich geprüfte Sozialassistentin, Schwerpunkt Heilerziehung
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B1)
+
+93-103-01: #Staatlich geprüfter Sozialhelfer/Heilerziehungshelfer 2016
+  Schulform: Berufsfachschule
+  Bereich:
+    Fachbereich Gesundheit/Erziehung und Soziales
+  Abschluss: true
+  Examen: Berufsabschlussprüfung
+  Zeugniskopf:
+    Berufsfachschule für Gesundheit/Erziehung und Soziales
+  Berufsbezeichnung_m:
+    Staatlich geprüfter Sozialassistent, Schwerpunkt Heilerziehung
+  Berufsbezeichnung_w:
+    Staatlich geprüfte Sozialassistentin, Schwerpunkt Heilerziehung
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B1)
+
+93-103-00: #Staatlich geprüfter Sozialassistent 2016
+  Schulform: Berufsfachschule
+  Bereich:
+    Fachbereich Gesundheit/Erziehung und Soziales
+  Berufsbezeichnung_m:
+    Staatlich geprüfter Sozialassistent
+  Berufsbezeichnung_w:
+    Staatlich geprüfte Sozialassistentin
+  Abschluss: true
+  Examen: Berufsabschlussprüfung
+  Zeugniskopf: Berufsfachschule für Sozial- und Gesundheitswesen
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B1)
+
+60-151-00: #Staatlich geprüfter Sozialhelfer
+  Schulform: Berufsfachschule
+  Bereich:
+    2013: Bereich Sozial- und Gesundheitswesen
+    2014: Fachbereich Gesundheit/Erziehung und Soziales
+  Berufsbezeichnung_m:
+    2013: Staatlich geprüfter Sozialhelfer
+    2014: Staatlich geprüfter Sozialassistent
+  Berufsbezeichnung_w:
+    2013: Staatlich geprüfte Sozialhelferin
+    2014: Staatlich geprüfte Sozialassistentin
+  Abschluss: true
+  Examen: Berufsabschlussprüfung
+  Zeugniskopf: Berufsfachschule für Sozial- und Gesundheitswesen
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B1)
+
+10-147-00: #Staatlich geprüfter Sozialhelfer
+  Schulform: Berufsfachschule
+  Bereich:
+    2013: Bereich Sozial- und Gesundheitswesen
+    2014: Fachbereich Gesundheit/Erziehung und Soziales
+  Berufsbezeichnung_m:
+    2013: Staatlich geprüfter Sozialhelfer
+    2014: Staatlich geprüfter Sozialassistent
+  Berufsbezeichnung_w:
+    2013: Staatlich geprüfte Sozialhelferin
+    2014: Staatlich geprüfte Sozialassistentin
+  Abschluss: true
+  Examen: Berufsabschlussprüfung
+  Zeugniskopf: Berufsfachschule für Sozial- und Gesundheitswesen
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B1)
+
+10-109-00: #Fachoberschule (FOS 12 und 11)
+  Schulform: Fachoberschule
+  Bereich: Fachrichtung Gesundheit und Soziales
+  Zeugniskopf: Fachoberschule mit dem fachlichen Schwerpunkt Gesundheit und Soziales
+  Fachgruppe:
+    10: Berufsübergreifender Bereich
+    20: Berufsbezogener Bereich
+    30: Differenzierungsbereich
+  Fremdsprache:
+    114: (B2)
+
+100-102-01: #Staatlich anerkannter Erzieher
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Sozialpädagogik
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Bereich
+    30: Differenzierungsbereich
+  Lernbereich: Bildungsbereiche in der Kinder- und Jugendarbeit
+  Lernfeld_Lernbereich: Vertiefung in den Bildungsbereichen
+  Lernfeld_Lernbereich_LF: Lernfelder
+  Zeugniskopf:
+    2012: der Fachschule für Sozialwesen in der Fachrichtung Sozialpädagogik
+    2013: Fachschule des Sozialwesens in der Fachrichtung Sozialpädagogik
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Berufsbezeichnung_m: Staatlich anerkannter Erzieher
+  Berufsbezeichnung_w: Staatlich anerkannte Erzieherin
+  Fremdsprache:
+    19: (B2)
+
+100-102-02: #Staatlich anerkannter Erzieher - Berufspraktikum
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Sozialpädagogik
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Bereich
+    30: Differenzierungsbereich
+  Lernbereich: Bildungsbereiche in der Kinder- und Jugendarbeit
+  Lernfeld_Lernbereich: Vertiefung in den Bildungsbereichen
+  Lernfeld_Lernbereich_LF: Lernfelder
+  Zeugniskopf:
+    2012: der Fachschule für Sozialwesen in der Fachrichtung Sozialpädagogik
+    2013: Fachschule des Sozialwesens in der Fachrichtung Sozialpädagogik
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Berufsbezeichnung_m: Staatlich anerkannter Erzieher
+  Berufsbezeichnung_w: Staatlich anerkannte Erzieherin
+  Fremdsprache:
+    19: (B2)
+
+40-102-05: #Staatlich anerkannter Erzieher - praxisintegrierte Form
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Sozialpädagogik – praxisintegrierte Form
+  Zeugniskopf:
+    2012: der Fachschule für Sozialwesen in der Fachrichtung Sozialpädagogik – praxisintegrierte Form
+    2013: Fachschule des Sozialwesens in der Fachrichtung Sozialpädagogik
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Bereich
+    30: Differenzierungsbereich
+  Lernbereich: Bildungsbereiche in der Kinder- und Jugendarbeit
+  Lernfeld_Lernbereich: Vertiefung in den Bildungsbereichen
+  Lernfeld_Lernbereich_LF: Lernfelder
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Berufsbezeichnung_m: Staatlich anerkannter Erzieher
+  Berufsbezeichnung_w: Staatlich anerkannte Erzieherin
+  Fremdsprache:
+    19: (B2)
+
+10-101-01: #Staatlich anerkannter Heilerziehungspfleger
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Heilerziehungspflege
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Lernbereich
+    30: Differenzierungsbereich
+  Lernbereich: Heilerziehungspflegerische Schwerpunkte
+  Zeugniskopf: Fachschule des Sozialwesens in der Fachrichtung Heilerziehungspflege
+  Berufsbezeichnung_m: Staatlich anerkannter Heilerziehungspfleger
+  Berufsbezeichnung_w: Staatlich anerkannte Heilerziehungspflegerin
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Fremdsprache:
+    19: (B2)
+
+10-101-02: #Staatlich anerkannter Heilerziehungspfleger - Berufspraktikum
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Heilerziehungspflege
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Lernbereich
+    30: Differenzierungsbereich
+  Lernbereich: Heilerziehungspflegerische Schwerpunkte
+  Zeugniskopf: Fachschule des Sozialwesens in der Fachrichtung Heilerziehungspflege
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Berufsbezeichnung_m: Staatlich anerkannter Heilerziehungspfleger
+  Berufsbezeichnung_w: Staatlich anerkannte Heilerziehungspflegerin
+  Fremdsprache:
+    19: (B2)
+
+40-101-05: #Staatlich anerkannter Heilerziehungspfleger- praxisintegrierte Form
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Heilerziehungspflege – praxisintegrierte Form
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Lernbereich
+    30: Differenzierungsbereich
+  Lernbereich: Heilerziehungspflegerische Schwerpunkte
+  Zeugniskopf: Fachschule des Sozialwesens in der Fachrichtung Heilerziehungspflege
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Berufsbezeichnung_m: Staatlich anerkannter Heilerziehungspfleger
+  Berufsbezeichnung_w: Staatlich anerkannte Heilerziehungspflegerin
+  Fremdsprache:
+    19: (B2)
+
+210-111-02: #Staatlich anerkannter Heilpädagoge
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Heilpädagogik
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Bereich
+    30: Differenzierungsbereich
+  Lernbereich: Methoden in der Heilpädagogik und den Bereichen
+  Lernfeld_Lernbereich: Vertiefung in den Bildungsbereichen
+  Lernfeld_Lernbereich_LF: Lernfelder
+  Zeugniskopf: Fachschule des Sozialwesens in der Fachrichtung Heilpädagogik
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Fremdsprache:
+    252: (B2)
+
+10-140-00: #Staatliche geprüfte Fachkraft für die heilpädagogische Förderung mit dem Pferd
+  Schulform: Fachschule des Sozialwesens
+  Bereich: Fachrichtung Heilpädagogik
+  Fachgruppe:
+    10: Fachrichtungsübergreifender Bereich
+    20: Fachrichtungsbezogener Bereich
+    30: Differenzierungsbereich
+  Lernbereich: Methoden in der Heilpädagogik und den Bereichen
+  Lernfeld_Lernbereich: Vertiefung in den Bildungsbereichen
+  Lernfeld_Lernbereich_LF: Lernfelder
+  Zeugniskopf: Fachschule des Sozialwesens, Aufbaubildungsgang<br />heilpädagogische Förderung mit dem Pferd
+  Fehlstunden: false
+  Examen: Fachschulexamen
+  Fremdsprache:
+    252: (B2)

+ 36 - 0
config/textbausteine.yml

@@ -0,0 +1,36 @@
+---
+Textbausteine:
+  Rechtsbehelfsbelehrung: >
+    Gegen dieses Zeugnis kann innerhalb eines Monats nach Bekanntgabe des
+    Zeugnisses Widerspruch eingelegt werden. Der Widerspruch ist beim
+    #{{Schule.first.bezeichnung2}}, #{Schule.first.strasse},
+    #{Schule.first.plz}, #{Schule.first.ort}, schriftlich oder zur Niederschrift
+    zu erheben. <br>Falls die Frist durch das Verschulden einer/eines
+    Bevollmächtigten versäumt wird, wird dies Verschulden der
+    Widerspruchsführerin/dem Widerspruchsführer zugerechnet.
+  APO: >
+    Die Verordnung über die Ausbildung und Prüfung in den Bildungsgängen des
+    Berufskollegs (Ausbildungs- und Prüfungsordnung Berufskolleg, APO-BK) vom
+    26. Mai 1999 (SGV. NRW. 223/BASS 13 – 33 Nr. 1.1).
+  RV_BFS: >
+    Die Rahmenvereinbarung über die Berufsfachschulen (Beschluss der
+    Kultusministerkonferenz vom 17.10.2013) in der jeweils geltenden Fassung.
+  FS-Vereinbarung: >
+    Die Vereinbarung über Fachschulen (Beschluss der Kultusministerkonferenz
+    vom 07. November 2002 in der jeweils geltenden Fassung).
+  FS-Vereinbarung2: >
+    Der Abschluss der Fachschule entspricht der Rahmenvereinbarung über
+    Fachschulen (Beschluss der KMK vom 7.11.2002 in der jeweils geltenden
+    Fassung) und wird von allen Ländern in der Bundesrepublik Deutschland
+    anerkannt.
+  Notenstufen: >
+    Notenstufen gemäß § 48 SchulG:
+    1 = sehr gut, 2 = gut, 3 = befriedigend, 4 = ausreichend, 5 = mangelhaft,
+    6 = ungenügend
+  Fremdsprachenniveau: >
+    Der Unterricht in den modernen Fremdsprachen hat auf der nach dem Fach in
+    Klammern angegebenen Niveaustufe des „Europäischen Referenzrahmens für
+    Sprachen: Lernen, Lehren, Beurteilen“ stattgefunden. Sind zwei
+    Referenzniveaus ausgewiesen, ist das niedrigere in vollem Umfang, das höhere
+    in Anteilen erreicht. Bei mindestens ausreichenden Leistungen wird der
+    sprachliche Kompetenzerwerb auf diesem Niveau bescheinigt.

+ 40 - 0
lib/helpers.rb

@@ -0,0 +1,40 @@
+module Helpers
+  def noten_set(gruppe, fachklasse, notenquelle=nil)
+    faecher = gruppe.map do |f|
+      fach = Hash.new
+      gliederung = f.fach.gliederungen.find{|f|f.fachklasse == fachklasse}
+      fach[:gliederung] = f.fach.gliederungen.find{|f|f.fachklasse == fachklasse}
+      fach[:fachgruppe] = f.fachgruppe_ID
+      fach[:sortierung] = (gliederung && gliederung.sortierung) || f.fach.sortierung_s2
+      fach[:zeugnisbez] = (gliederung && gliederung.zeugnis_bez) || f.fach.zeugnisbez
+      fach[:gewichtung] = (gliederung && gliederung.gewichtung_ab) || f.fach.gewichtung_fhr
+      fach[:bezeichnung]= f.fach.bezeichnung
+      fach[:lernentw]   = f.Lernentw if (f.Lernentw && f.fach.ist_sprache == "-")
+      if f.fach.ist_sprache == "+"
+        fach[:sprachniveau] = f.Lernentw || settings.repo.fachklasse_info(Abschnitt[f.abschnitt_id], "Fremdsprache", f.fach_id)
+        fach[:sprachniveau] += "<sup>1</sup>" unless fach[:sprachniveau].nil?
+      else
+        fach[:sprachniveau] = ""
+      end
+      if notenquelle.nil?
+        fach[:note] = f.note || "––––––"
+      else
+        s = Abschnitt[f.abschnitt_id].schueler
+        fach[:note] = s.bk_abschluss_leistungen_dataset.where(:Fach_ID => fach.fach_id).first.note(notenquelle) || "––––––" rescue (Warnung.add(s.name, "Einige Fächer sind ohne eingetragene Note in der BK-Abschlussberechnung.");"FEHLER")
+      end
+      fach[:noten_krz] = f.noten_krz
+      fach
+    end
+
+    faecher.sort_by!{|f| f[:sortierung]}
+    h=Hash.new
+    faecher.group_by{|f| f[:bezeichnung]}.each_pair do |k,v|
+      if v.first[:zeugnisbez] != v.first[:bezeichnung]
+        h[v.first[:bezeichnung]] = v
+      else
+        h[v.first[:sortierung]] = v
+      end
+    end
+    return h
+  end
+end

+ 21 - 0
public/bower.json

@@ -0,0 +1,21 @@
+{
+  "name": "public",
+  "authors": [
+    "hmt <dev@hmt.im>"
+  ],
+  "description": "",
+  "main": "",
+  "license": "MIT",
+  "homepage": "",
+  "private": true,
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "dependencies": {
+    "normalize-css": "^7.0.0"
+  }
+}

+ 25 - 0
public/bower_components/normalize-css/.bower.json

@@ -0,0 +1,25 @@
+{
+  "name": "normalize-css",
+  "description": "A modern alternative to CSS resets",
+  "main": "normalize.css",
+  "license": "MIT",
+  "ignore": [
+    "CHANGELOG.md",
+    "CONTRIBUTING.md",
+    "package.json",
+    "README.md",
+    "test.html"
+  ],
+  "homepage": "https://github.com/necolas/normalize.css",
+  "version": "7.0.0",
+  "_release": "7.0.0",
+  "_resolution": {
+    "type": "version",
+    "tag": "7.0.0",
+    "commit": "cd79468238394513cf481338c9dcb9aa8bd9b59c"
+  },
+  "_source": "https://github.com/necolas/normalize.css.git",
+  "_target": "^7.0.0",
+  "_originalSource": "normalize-css",
+  "_direct": true
+}

+ 12 - 0
public/bower_components/normalize-css/.editorconfig

@@ -0,0 +1,12 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 2 - 0
public/bower_components/normalize-css/.gitattributes

@@ -0,0 +1,2 @@
+normalize.css linguist-vendored=false
+test.html linguist-vendored

+ 1 - 0
public/bower_components/normalize-css/.gitignore

@@ -0,0 +1 @@
+node_modules

+ 3 - 0
public/bower_components/normalize-css/.travis.yml

@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+  - stable

+ 21 - 0
public/bower_components/normalize-css/LICENSE.md

@@ -0,0 +1,21 @@
+# The MIT License (MIT)
+
+Copyright © Nicolas Gallagher and Jonathan Neal
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 13 - 0
public/bower_components/normalize-css/bower.json

@@ -0,0 +1,13 @@
+{
+  "name": "normalize-css",
+  "description": "A modern alternative to CSS resets",
+  "main": "normalize.css",
+  "license": "MIT",
+  "ignore": [
+    "CHANGELOG.md",
+    "CONTRIBUTING.md",
+    "package.json",
+    "README.md",
+    "test.html"
+  ]
+}

+ 447 - 0
public/bower_components/normalize-css/normalize.css

@@ -0,0 +1,447 @@
+/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in
+ *    IE on Windows Phone and in iOS.
+ */
+
+html {
+  line-height: 1.15; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+   ========================================================================== */
+
+/**
+ * Remove the margin in all browsers (opinionated).
+ */
+
+body {
+  margin: 0;
+}
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+article,
+aside,
+footer,
+header,
+nav,
+section {
+  display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in IE.
+ */
+
+figcaption,
+figure,
+main { /* 1 */
+  display: block;
+}
+
+/**
+ * Add the correct margin in IE 8.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * 1. Remove the gray background on active links in IE 10.
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+ */
+
+a {
+  background-color: transparent; /* 1 */
+  -webkit-text-decoration-skip: objects; /* 2 */
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57- and Firefox 39-.
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+  border-bottom: none; /* 1 */
+  text-decoration: underline; /* 2 */
+  text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+
+b,
+strong {
+  font-weight: inherit;
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font style in Android 4.3-.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Add the correct background and color in IE 9-.
+ */
+
+mark {
+  background-color: #ff0;
+  color: #000;
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+audio,
+video {
+  display: inline-block;
+}
+
+/**
+ * Add the correct display in iOS 4-7.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Remove the border on images inside links in IE 10-.
+ */
+
+img {
+  border-style: none;
+}
+
+/**
+ * Hide the overflow in IE.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers (opinionated).
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: sans-serif; /* 1 */
+  font-size: 100%; /* 1 */
+  line-height: 1.15; /* 1 */
+  margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input { /* 1 */
+  overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+  text-transform: none;
+}
+
+/**
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+ *    controls in Android 4.
+ * 2. Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+html [type="button"], /* 1 */
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ *    `fieldset` elements in all browsers.
+ */
+
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/**
+ * 1. Add the correct display in IE 9-.
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/* Interactive
+   ========================================================================== */
+
+/*
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ */
+
+details, /* 1 */
+menu {
+  display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+  display: list-item;
+}
+
+/* Scripting
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+canvas {
+  display: inline-block;
+}
+
+/**
+ * Add the correct display in IE.
+ */
+
+template {
+  display: none;
+}
+
+/* Hidden
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 10-.
+ */
+
+[hidden] {
+  display: none;
+}

BIN
public/images/abiturformel.png


File diff suppressed because it is too large
+ 0 - 0
public/images/agz_logo.svg


File diff suppressed because it is too large
+ 873 - 0
public/images/agz_logo_ohne_linie_breiter_text_breit.svg


File diff suppressed because it is too large
+ 0 - 0
public/images/asz_logo_ohne_linie_breiter_text_breit.svg


File diff suppressed because it is too large
+ 514 - 0
public/images/bk_logo.svg


File diff suppressed because it is too large
+ 0 - 0
public/images/bk_logo_ohne_text.svg


File diff suppressed because it is too large
+ 873 - 0
public/images/bk_logo_ohne_text_kreis_mittig.svg


File diff suppressed because it is too large
+ 15 - 0
public/images/traeger_logo.svg


File diff suppressed because it is too large
+ 0 - 0
public/images/zeugnis_logo.svg


+ 52 - 0
views/beilage_soa.slim

@@ -0,0 +1,52 @@
+#doc-einstellungen data-json='{"logo_top":"bk_logo.svg","logo_seite":"traeger_logo.svg","Name":"ASZ Beilage SOA/LF","Ignoriere-Abschnitt":1, "Gruppen":["B"]}'
+link rel="stylesheet" href=url("/css/page.css")
+  -schueler.each_with_index do |s,i|
+    -hj=s.halbjahr(jahr, abschnitt)
+    page.grid size="A4" orientation="portrait"
+      .seitenlogo
+        img src=url("/images/#{doc.get("logo_seite")}") height="160px" data-failover=url("/images/#{Document.default "logo_seite"}")
+      .header
+        img src=url("/images/#{doc.get("logo_top")}") width="50%" data-failover=url("/images/#{Document.default "logo_top"}")
+        hr.hr-rot
+      .main
+        ="Beilage des Zeugnisses für #{s.anrede}#{s.geschlecht == 3 ? "n":""} #{s.vorname} #{s.name}"
+        .voffset-2
+          -lf={\
+              lf1:"Sich im Berufsfeld orientieren, auf Anforderungen einlassen und die eigene Person darstellen",\
+              lf2:"Bedürfnisse und Potentiale wahrnehmen, beobachten und analysieren",\
+              lf3:"Mit Konzepten in sozialpädagogischen Einrichtungen arbeiten",\
+              lf4:"Beziehungen in der sozialpädagogischen und pflegerischen Arbeit gestalten",\
+              lf5:"Sozialpflegerische Handlungsprozesse systematisch planen, umsetzen, dokumentieren und evaluieren",\
+              lf6:"Pflegekonzepte als Grundlage der pflegerischen Tätigkeiten anwenden",\
+              lf7:"Kompetenzen, Ressourcen und Potentiale erkennen und fördern",\
+              lf8:"Gesunde Lebensführung fördern",\
+              lf9:"Gestaltungsprinzipien und Gestaltungsmittel in Räumen sozialpflegerischer Einrichtungen",\
+              lf10:"Rechte und Pflichten des Sozialassistenten kennen und wahrnehmen",\
+              lf11:"Außendarstellung der sozialpädagogischen bzw. -pflegerischen Einrichtungen unterstützen",\
+              lf12:"Wirtschaftlich mit Materialien umgehen"\
+            }
+        table.table.table-bordered style="width: 100%"
+          tr
+            th width="35%" Bereichsspezifische Fächer
+            th Zugeordnete Lernfelder
+          tr
+            td Erziehung und Soziales
+            td
+              ul.dashes
+                -[lf[:lf2], lf[:lf3], lf[:lf4], lf[:lf9]].each do |l|
+                  li =l
+          tr
+            td Gesundheitsförderung und Pflege
+            td
+              ul.dashes
+                -[lf[:lf5], lf[:lf6], lf[:lf7], lf[:lf8]].each do |l|
+                  li =l
+          tr
+            td Arbeitsorganisation und Recht
+            td
+              ul.dashes
+                -[lf[:lf1], lf[:lf10], lf[:lf11], lf[:lf12]].each do |l|
+                  li =l
+      .footer
+        .klein.grau
+          .schulnummer Schulnummer: #{Schule.schulnummer}

+ 6 - 0
views/csv.slim

@@ -0,0 +1,6 @@
+#doc-einstellungen data-json='{"Layout":"false"; "Name":"Schülerliste CSV"}'
+pre
+  -schueler.each do |s|
+    =s.name+","+s.vorname
+    br
+

+ 7 - 0
views/layout.slim

@@ -0,0 +1,7 @@
+doctype 5
+html lang="en"
+  head
+    meta charset="utf-8"
+    meta name="viewport" content="width=device-width, initial-scale=1.0"
+  body
+    ==yield

+ 285 - 0
views/page.scss

@@ -0,0 +1,285 @@
+@import "../bower_components/normalize-css/normalize.css";
+$font-stack: "Tex Gyre Heros";
+$font-color-light: #c0c0c0;
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url('/fonts/texgyreheros-regular-webfont.woff') format('woff');
+  font-style: normal;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url('/fonts/texgyreheros-bold-webfont.woff') format('woff');
+  font-style: normal;
+  font-weight: bold;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url('/fonts/texgyreheros-italic-webfont.woff') format('woff');
+  font-style: italic;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url('/fonts/texgyreheros-bolditalic-webfont.woff') format('woff');
+  font-style: italic;
+  font-weight: bold;
+}
+
+html {
+  font-size: 62.5%; }
+body {
+  font-size: 1.33em; /* currently ems cause chrome bug misinterpreting rems on body element */
+  line-height: 1.5;
+  font-weight: normal;
+  font-family: $font-stack;
+  color: #333;
+}
+/* Typography
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+h1, h2, h3, h4, h5, h6 {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-weight: 400;
+}
+h1 { font-size: 4.0rem; line-height: 1.2;  letter-spacing: -.1rem;}
+h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
+h3 { font-size: 3.0rem; line-height: 1.3;  letter-spacing: -.1rem; }
+h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
+h5 { font-size: 1.8rem; line-height: 1.5;  letter-spacing: -.05rem; }
+h6 { font-size: 1.5rem; line-height: 1.6;  letter-spacing: 0; }
+p  { margin-top: 0; }
+
+page {
+  position: relative;
+  padding: 10mm 25mm 10mm 25mm;
+  display: block;
+  border: 1px solid black;
+  -webkit-box-shadow: 5px 5px 4px 0px rgba(192,192,192,1);
+  -moz-box-shadow: 5px 5px 4px 0px rgba(192,192,192,1);
+  box-shadow: 5px 5px 4px 0px rgba(192,192,192,1);
+}
+page[size="A4"][orientation="portrait"] {
+  width: 210mm;
+  height: 296.8mm;
+}
+page[size="A4"][orientation="landscape"] {
+  width: 296.8mm;
+  height: 210mm;
+}
+page[size="A3"][orientation="portrait"] {
+  width: 296.8mm;
+  height: 420mm;
+}
+page[size="A3"][orientation="landscape"] {
+  width: 420mm;
+  height: 296.8mm;
+}
+page[size="A5"][orientation="portrait"] {
+  width: 14.8cm;
+  height: 21cm;
+}
+page[size="A5"][orientation="landscape"] {
+  width: 21cm;
+  height: 14.8cm;
+}
+
+.grid {
+  display: grid;
+  grid-gap: 0px;
+  align-content: start;
+  grid-template-columns: auto;
+  grid-template-rows: auto 1fr auto;
+  grid-template-areas: "header"
+                       "main"
+                       "footer";
+}
+.header {
+  grid-area: header;
+  align-self: start;
+}
+.main {
+  grid-area: main;
+  align-self: start;
+}
+.footer {
+  grid-area: footer;
+  align-self: end;
+}
+.main-grid {
+  grid-area: main;
+  display: grid;
+  grid-column-gap: 25mm;
+  grid-template-columns: 1fr 1fr;
+  grid-template-rows: auto 1fr auto;
+  grid-template-areas: "header-left header-right"
+                       "main-left main-right"
+                       "footer-left footer-right";
+}
+.main-left { grid-area: main-left; }
+.main-right { grid-area: main-right; }
+.footer-grid {
+  grid-area: footer;
+  display: grid;
+  grid-column-gap: 25mm;
+  grid-template-columns: 1fr 1fr;
+  grid-template-rows: auto;
+  grid-template-areas: "footer-left footer-right";
+}
+.footer-left  { grid-area: footer-left;  }
+.footer-right { grid-area: footer-right; }
+
+.flex-grid { display: flex; }
+.col   { flex: 1; }
+.col-2 { flex: 2; }
+
+
+.voffset-halb { margin-top: 0.5rem; }
+@for $i from 1 through 20 {
+  .voffset-#{$i} {
+    margin-top: #{$i}rem
+}}
+
+.text-center { text-align: center !important; }
+
+hr {
+  border: 0;
+  border-top: 1px solid #eee;
+  border-color: #000;
+  height: 1px;
+  margin: 3px 0;
+  &.hr-rot {
+    border-color: #ff2700;
+    margin: 8px 0;
+  }
+  &.hr-grau {
+    border-color: rgb(100,100,100) !important;
+  }
+}
+.table-eng {
+  margin-bottom: 0 !important;
+}
+.table-noten {
+  width: 100%;
+  border: none;
+  border-collapse: collapse;
+  margin-bottom: 1em;
+}
+.table-bordered {
+  border-collapse: collapse;
+  tr {
+    border-bottom: thin solid #333;
+  }
+}
+.fach-bezeichnung {
+  padding-left: 10mm;
+  &.padding-5 {
+    padding-left: 2em;
+  }
+}
+.td-fach-note {
+  padding-bottom: .5rem;
+  width: 12em;
+  span {
+    background-color: #dcdcdc !important;
+    text-align: center;
+    width: 10em;
+    display: block;
+    vertical-align: middle;
+    margin:0 auto;
+    &.e-note {
+      background-color: white !important;
+      width: 17em;
+      margin: 0;
+    }
+  }
+}
+.td-padding-extra {
+  padding: 2mm 0 2mm 0;
+}
+.fachgruppe-margin {
+  padding-top: 0.3em;
+}
+.fett {
+  font-weight: bolder;
+}
+.lernfeld-lernbereich {
+  padding-left: 2em;
+  padding-bottom:0;
+}
+.lernbereich {
+  padding-left: 20mm;
+}
+.klein {
+  font-size: smaller;
+}
+.eng {
+  line-height: 1.3em;
+}
+.grau *{
+  color: rgb(100,100,100) !important;
+}
+ul.dashes {
+  margin: 0;
+  list-style-type: none;
+  padding-left: 1em;
+  li:before {
+    content: "–";
+    position: absolute;
+    margin-left: -1em;
+  }
+}
+.schulnummer {
+  text-align: right;
+}
+.wasserzeichen {
+  position: absolute;
+  opacity: 0.5;
+  z-index: 99;
+  color: red;
+  font-size: 96pt;
+}
+
+.seitenlogo {
+  position: absolute;
+  bottom: 10mm;
+  left: 10mm;
+}
+* {
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+}
+table.fixed {
+  table-layout: fixed;
+  table th, table td {
+    overflow: hidden;
+  }
+}
+
+@media print {
+  * {
+    //alles was Farbe hat mitdrucken
+    -webkit-print-color-adjust: exact;
+  }
+  page {
+    page-break-after: always;
+    margin: 0px;
+    border: none;
+    margin-bottom: 0px;
+    -webkit-box-shadow:initial;
+    -moz-box-shadow:initial;
+    box-shadow: initial;
+  }
+  @page {
+    page[size="A4"][orientation="portrait"] {
+      size: A4 portrait;
+    }
+    page[size="A4"][orientation="landscape"] {
+      size: A4 landscape;
+    }
+    page[size="A3"][orientation="portrait"] {
+      size: A3 portrait;
+    }
+    page[size="A3"][orientation="landscape"] {
+      size: A3 landscape;
+    }
+  }
+}

+ 33 - 0
views/partials/p_ahr_noten.slim

@@ -0,0 +1,33 @@
+.row
+  .col-xs-11
+    table.table.table-bordered.table-eng
+      tr
+        td rowspan="2"
+          |Fach
+          sup 1
+        td rowspan="2" width="20px"
+          |Aufg.- feld
+          sup 2
+        td rowspan="2" width="20px"
+          |Abitur- fach
+          sup 3
+        td rowspan="2" width="20px"
+          |Fach der Berufs- abschlussprüfung
+        td colspan="4"
+          |Leistungen im Halbjahr
+          sup 4, 5
+      tr
+        td.text-center 12.1
+        td.text-center 12.2
+        td.text-center 13.1
+        td.text-center 13.2
+      -s.abi_abschluss_leistungen.sort_by{|f|f.f_sortierung}.each do |f|
+        tr
+          td =f.fach.bezeichnung
+          td.text-center ="I"*(f.fach.aufgabenfeld).to_i
+          td.text-center =f.abi_fach
+          td.text-center ="+" if f.abi_fach.to_i.between?(1,3) || f.fach_krz == "DM"
+          td.text-center =f.P12_1 || "–"
+          td.text-center =f.P12_2 || "–"
+          td.text-center =f.P13_1 || "–"
+          td.text-center =f.P13_2 || "–"

+ 38 - 0
views/partials/p_asz_zeugnis_noten.slim

@@ -0,0 +1,38 @@
+-notenquelle ||= :note_abschluss
+.row
+  .col-xs-12
+    table.col-xs-12.table-noten
+      -hj.faechergruppen.each do |gruppe|
+        -unless gruppe.empty?
+          tr
+            td.fachgruppe-margin
+              b =repo.fachklasse_info(hj, 'Fachgruppe', gruppe.first.fachgruppe_ID)
+            td
+          -lernbereich_ab = gruppe.index{ |f| f.fach.SortierungS2.to_s[-1] == "1"}
+          -gruppe.each_with_index do |fach,i|
+            -fach_gliederung=fach.fach.gliederungen.find{|f|f.fachklasse == s.fachklasse}
+            -fach_gliederung ? (zeugnisbez, gewichtung = fach_gliederung.zeugnis_bez, fach_gliederung.gewichtung_ab) : (zeugnisbez, gewichtung = fach.fach.zeugnisbez, fach.fach.gewichtung_fhr)
+            -if i == lernbereich_ab
+              tr
+                td.fach-bezeichnung colspan="2"
+                  =repo.fachklasse_info(hj, "Lernbereich")
+            tr
+              td.fach-bezeichnung class=("lernbereich" if fach.fach.SortierungS2.to_s[-1] == "1") class=("fett" if fach.bezeichnung == "Projektarbeiten" && fach.fach.ist_sprache == "-")
+                ==zeugnisbez
+                -sprache= fach._lernentw || repo.fachklasse_info(hj, "Fremdsprache", fach.fach_id)
+                -unless sprache.nil? || fach.fach.ist_sprache == "-"
+                  =<sprache
+                  sup 1
+                -if s.asd_schulform.start_with?("C") and gewichtung == 0 || !gewichtung
+                  -if s.bk_abschluss.bestanden == "+" || s.bk_abschluss.bestanden_ba == "+"
+                    sup ="*"
+                -if s.asd_schulform.start_with?("E") && gewichtung >= 1 && s._entlassart == "6J"
+                  sup ="*"
+              td.td-fach-note
+                span class=("e-note" if (fach.noten_krz.start_with?("E") || (s.asd_schulform.start_with?("D")) && (fach.fachgruppe_ID == 30) && (fach.noten_krz == "NB") ))
+                  =s.bk_abschluss_leistungen_dataset.where(:Fach_ID => fach.fach_id).first.note(notenquelle) || "––––––" rescue (Warnung.add(s.name, "Einige Fächer sind ohne eingetragene Note in der BK-Abschlussberechnung.");"FEHLER")
+              -projektarbeitstitel_abschnitt=s.abschnitte.map{|a| a.noten.find{|n|n.fach.bezeichnung=="Projektarbeiten" && n._lernentw}}.find{|a|a}
+              -projektarbeitstitel = projektarbeitstitel_abschnitt.lernentw if projektarbeitstitel_abschnitt
+              -if fach.fach.bezeichnung == "Projektarbeiten" && fach.fach.ist_sprache == "-"
+                tr
+                  td.fach-bezeichnung ==projektarbeitstitel

+ 29 - 0
views/partials/p_noten_grid.slim

@@ -0,0 +1,29 @@
+-notenquelle ||= nil
+table.table-noten class=("table-eng" if s.asd_schulform.start_with?("E"))
+  -gr=hj.faechergruppen
+  /berufs- und berufsübergreifenden Bereich tauschen
+  -gr[0], gr[1] = gr[1], gr[0] if s.asd_schulform.start_with?("E")
+  -gr.each do |gruppe|
+    -next if gruppe.empty?
+    tr
+      td.fachgruppe-margin
+        b =repo.fachklasse_info(hj, 'Fachgruppe', gruppe.first.fachgruppe_ID)
+    -noten_set(gruppe, s.fachklasse).each_pair do |faecherbereich,faecher|
+      tr
+      -if String === faecherbereich
+          td colspan="2" =faecherbereich
+      -faecher.each do |fach|
+        tr
+          td class=("lernfeld-lernbereich" if String === faecherbereich) class=("fach-bezeichnung" unless s.asd_schulform.start_with?("E"))
+            ==fach[:lernentw] || fach[:zeugnisbez]
+            -if notenquelle
+              ==<fach[:sprachniveau]
+              -if s.asd_schulform.start_with?("C") and fach[:gewichtung] == 0 || !fach[:gewichtung]
+                -if s.bk_abschluss.bestanden == "+" || s.bk_abschluss.bestanden_ba == "+"
+                  sup ="*"
+              -if s.asd_schulform.start_with?("E") && fach[:gewichtung] >= 1 && s._entlassart == "6J"
+                sup ="*"
+          td.td-fach-note
+            //korrigieren, wenn längere e-Noten auftauchen
+            span class=("e-note" if (fach[:noten_krz].start_with?("E") || (s.asd_schulform.start_with?("D")) && (fach[:fachgruppe] == 30) && (fach[:noten_krz] == "NB") ))
+              =fach[:note]

+ 8 - 0
views/partials/p_zeugnis_bemerkungen_grid.slim

@@ -0,0 +1,8 @@
+hr
+b Bemerkungen
+br/
+-if !hj.zeugnis_bem.empty?
+  ==(hj.zeugnis_bem).gsub("\r\n","<br/>")
+-else
+  |keine
+

+ 15 - 0
views/partials/p_zeugnis_kopf.slim

@@ -0,0 +1,15 @@
+.row
+  .col-xs-12
+    /.voffset-3
+    b #{s.anrede} #{s.vorname} #{s.zusatz} #{s.name},
+    br /
+    |geboren am #{(s.geburtsdatum).strftime("%d.%m.%Y")} in #{s.geburtsort},
+    br /
+    'war vom #{s.beginn_bildungsgang.strftime("%d.%m.%Y")} bis zur Aushändigung des Zeugnisses
+    |#{s.schueler_studierende} des Bildungsgangs
+    br/
+    b ==repo.fachklasse_info(hj, 'Zeugniskopf')
+    .voffset-2
+    |Der allgemeine Prüfungsausschuss stellte in seiner Abschlusskonferenz am #{(hj.konferenzdatum).strftime("%-d.%-m.%Y")} fest:
+    .voffset-1
+    b Leistungen

+ 37 - 0
views/partials/p_zeugnis_lf_noten.slim

@@ -0,0 +1,37 @@
+.row style='font: 9pt "Tex Gyre Heros"'
+  .col-xs-12
+    table.col-xs-12.table-noten
+      -gr=hj.faechergruppen
+      /berufs- und berufsübergreifenden Bereich tauschen
+      -gr[0], gr[1] = gr[1], gr[0]
+      -gr.each do |gruppe|
+        -unless gruppe.empty?
+          -faechergruppenbezeichnung=""
+          -gruppe.sort_by! do |f|
+            -fach_gliederung=f.fach.gliederungen.find{|f|f.fachklasse == s.fachklasse}
+            -(fach_gliederung && fach_gliederung.sortierung) || f.fach.sortierung_s2
+          tr
+            td.fachgruppe-margin
+              div style="font-size: 10pt"
+                b =repo.fachklasse_info(hj, 'Fachgruppe', gruppe.first.fachgruppe_ID)
+            td
+
+          -gruppe.each_with_index do |fach,i|
+            -if fach.fach.bezeichnung != fach.fach.zeugnisbez && (faechergruppenbezeichnung == "" || faechergruppenbezeichnung != fach.fach.bezeichnung)
+              -faechergruppenbezeichnung = fach.fach.bezeichnung
+              tr
+                td colspan="2" =faechergruppenbezeichnung
+            -elsif fach.fach.bezeichnung == fach.fach.zeugnisbez
+              -faechergruppenbezeichnung = ""
+            tr
+              td class=("lernfeld-lernbereich" if fach.fach.bezeichnung != fach.fach.zeugnisbez)
+                //class=("fett" if fach.Lernentw)
+                -if fach.Lernentw && fach.fach.ist_sprache == "-"
+                  ==fach.Lernentw
+                -else
+                  ==fach.fach.zeugnisbez
+              td.td-fach-note
+                //korrigieren, wenn längere e-Noten auftauchen
+                span class=("e-note" if fach.noten_krz.start_with? "EXXX")
+                  =fach.note || "––––––"
+                  =>fach.lernentw if fach.fach.ist_sprache == "+"

+ 32 - 0
views/partials/p_zeugnis_noten_grid.slim

@@ -0,0 +1,32 @@
+.row
+  .col-xs-12
+    table.col-xs-12.table-noten
+      -gr=hj.faechergruppen
+      /berufs- und berufsübergreifenden Bereich tauschen
+      -gr[0], gr[1] = gr[1], gr[0]
+      -gr.each do |gruppe|
+        -unless gruppe.empty?
+          -gruppe.sort_by! do |f|
+            -fach_gliederung=f.fach.gliederungen.find{|f|f.fachklasse == s.fachklasse}
+            -(fach_gliederung && fach_gliederung.sortierung) || f.fach.sortierung_s2
+          tr
+            td.fachgruppe-margin
+              b =repo.fachklasse_info(hj, 'Fachgruppe', gruppe.first.fachgruppe_ID)
+            td
+          -lernbereich_ab = gruppe.index{ |f| f.fach.bezeichnung != f.fach.zeugnisbez}
+          -gruppe.each_with_index do |fach,i|
+            -if i == lernbereich_ab
+              tr
+                td.fach-bezeichnung colspan="2"
+                  =fach.fach.bezeichnung
+            tr
+              td.fach-bezeichnung class=("lernbereich" if fach.fach.bezeichnung != fach.fach.zeugnisbez) class=("fett" if fach._lernentw && fach.fach.ist_sprache == "-")
+                ==fach.fach.zeugnisbez
+                ==< "#{fach.lernentw}<sup>1</sup>" if fach.fach.ist_sprache == "+" && fach._lernentw
+              /td=fach.fach.SortierungS2
+              td.td-fach-note
+                span class=("e-note" if (fach.noten_krz.start_with?("E") || (s.asd_schulform.start_with?("D")) && (fach.fachgruppe_ID == 30) && (fach.noten_krz == "NB") ))
+                  =fach.note || "––––––"
+              -if fach.Lernentw && fach.fach.ist_sprache == "-"
+                tr
+                  td.fach-bezeichnung #{fach._lernentw || repo.fachklasse_info(hj, "Fremdsprache", fach.fach_id)}

+ 16 - 0
views/partials/p_zeugnis_unterschrift_pa.slim

@@ -0,0 +1,16 @@
+.row
+  .col-xs-6
+    |#{Schule.ort}, den #{hj.zeugnis_datum.strftime("%d.%m.%Y")}
+    .voffset-3
+.row.klein
+  .text-center Siegel
+  .col-xs-5
+    hr
+    .text-center
+      =>"#{Schule.first.schulleiter_vorname} #{Schule.first.schulleiter_name}"
+      |– Vorsitzender des allgemeinen Prüfungsausschusses
+  .col-xs-5.col-xs-offset-2
+    .text-center
+      hr
+      =>"#{Schule.first.schulleiter_vorname} #{Schule.first.schulleiter_name}"
+      ="– #{Schule.schulleiter_in}"

Some files were not shown because too many files changed in this diff