Browse Source

v3 conversion

hmt 6 years ago
parent
commit
98c9dc807e
8 changed files with 141 additions and 147 deletions
  1. 5 9
      Eine Liste.html
  2. 41 29
      Jahreszeugnis.html
  3. 21 29
      Notenliste.html
  4. 6 16
      demo.html
  5. 7 13
      helfer.js
  6. 35 17
      partials/Fussnoten.html
  7. 25 33
      partials/Noten.html
  8. 1 1
      partials/Seitenlogo.html

+ 5 - 9
Eine Liste.html

@@ -1,7 +1,7 @@
 {#each _.chunk(schueler, 10) as slice, i}
   <div class="page grid" orientation="portrait" size="A4">
     <div class="header">
-      <b>Klassenliste der {schueler[0].Klasse} – Stand {heute}</b>
+      <b>Klassenliste der {schueler[0].Klasse} – Stand {datum(new Date())}</b>
     </div>
     <div class="main">
       <Voffset v=1/>
@@ -28,16 +28,12 @@
 {/each}
 
 <script>
+  export let schueler, schule, privat, jahr, abschnitt
+
+  import Pageheader from './partials/Pageheader.html'
+  import Voffset from './partials/Voffset.html'
   import { datum }  from './helfer'
   const _  = R.lodash
-
-	export default {
-    data () { return { heute: new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'}) } },
-    helpers: { datum, _ },
-    components: {
-      Voffset: './partials/Voffset.html'
-    }
-  }
 </script>
 
 <style>

+ 41 - 29
Jahreszeugnis.html

@@ -1,22 +1,37 @@
 {#each schueler as s (s.ID)}
-  {#each s.abschnitte.filter(aktHalbjahr) as hj (hj.ID)}
+  {#each s.abschnitte.filter(aktHalbjahr()) as hj (hj.ID)}
     <div class="page grid" orientation="portrait" size="A4">
       <Seitenlogo logo="{privat.traegerLogo}"/>
       <Pageheader art="daten/zeugnis.svg" logo="{privat.logo}" untertitel="{privat.untertitel}"/>
       <div class="main">
         <div style="font-size: 15pt; line-height: 1.5em">
+          {bg(s, 'Schulform')}
         </div>
         <div style="font-size: 12pt; line-height: 1.2em">
+          {bg(s, 'Bereich')}
+          <br />{s.Geschlecht === '3' ? s.fachklasse.Bezeichnung : s.fachklasse.Beschreibung_W}
+          {#if s.ASDSchulform.startsWith('B')}
+            <br />
+            Abschluss {s.Geschlecht === '3' ? bg(s, 'Berufsbezeichnung_m') : bg(s, 'Berufsbezeichnung_w')}
+          {/if}
         </div>
         <Voffset v="1"/>
         <b>{s.anrede} {s.Vorname} {s.Zusatz || ''} {s.Name},</b>
         <br />geboren am {datum(s.Geburtsdatum)} in {s.Geburtsort},<br />
-        besuchte im {hj.Abschnitt}. Halbjahr des Schuljahres {hj.schuljahr} die Klasse {hj.Klasse}
+        {#if s.ASDSchulform.startsWith('E')}
+          besuchte das Schuljahr {hj.schuljahr} in der Klasse {hj.Klasse}
+        {:else}
+          besuchte im {hj.Abschnitt}. Halbjahr des Schuljahres {hj.schuljahr} die Klasse {hj.Klasse}
+        {/if}
         <Voffset v="2"/>
         Leistungen laut Konferenzbeschluss vom {datum(hj.Konferenzdatum)}:
-        <Noten noten={hj.noten}></Noten>
+        <Noten noten={hj.noten} fachGliederungen={s.fachklasse.fach_gliederungen}></Noten>
         <hr />
-        Fehlstunden: {Number(hj.SumFehlStd) || 0}{#if Number(hj.SumFehlStdU) > 0}, davon unentschuldigt: {hj.SumFehlStdU}<Voffset v="1"/>{/if}
+        {#if !s.ASDSchulform.startsWith('E')}
+          Fehlstunden: {Number(hj.SumFehlStd) || 0}{#if Number(hj.SumFehlStdU) > 0}, davon unentschuldigt: {hj.SumFehlStdU}
+            <Voffset v="1"/>
+          {/if}
+        {/if}
         <Voffset v="1"/>
         <b>{versetzungsvermerk(s,hj)}</b>
         <Voffset v="1"/>
@@ -43,18 +58,20 @@
           </div>
         </div>
         <div class="flex-grid">
-          <div class="col-2"></div>
-          <div class="col-2">
-            <Voffset v="1"/>
-            Die Kenntnisnahme wird bestätigt:
-          </div>
-          <div class="col">
-            <Voffset v="3"/>
-            <hr />
-            <div class="klein text-center">
-              {volljaehrigBei(s, hj.ZeugnisDatum) ? s.schueler_in : 'Erziehungsberechtigte'}
+          {#if !s.ASDSchulform.startsWith('E')}
+            <div class="col-2"></div>
+            <div class="col-2">
+              <Voffset v="1"/>
+              Die Kenntnisnahme wird bestätigt:
             </div>
-          </div>
+            <div class="col">
+              <Voffset v="3"/>
+              <hr />
+              <div class="klein text-center">
+                {volljaehrigBei(s, hj.ZeugnisDatum) ? s.schueler_in : 'Erziehungsberechtigte'}
+              </div>
+            </div>
+          {/if}
         </div>
         <Fussnote schule={schule}></Fussnote>
       </div>
@@ -63,21 +80,16 @@
 {/each}
 
 <script>
-  import { datum, versetzungsvermerk, volljaehrigBei, bemerkungen }  from './helfer'
+  import { datum, versetzungsvermerk, volljaehrigBei, bemerkungen, bg }  from './helfer'
+
+  import Seitenlogo from './partials/Seitenlogo.html'
+  import Pageheader from './partials/Pageheader.html'
+  import Voffset from './partials/Voffset.html'
+  import Noten from './partials/Noten.html'
+  import Fussnote from './partials/Fussnoten.html'
 
-  export default {
-    components: {
-      Seitenlogo: './partials/Seitenlogo.html',
-      Pageheader: './partials/Pageheader.html',
-      Noten: './partials/Noten.html',
-      Fussnote: './partials/Fussnoten.html',
-      Voffset: './partials/Voffset.html'
-    },
-    helpers: { datum, versetzungsvermerk, volljaehrigBei, bemerkungen },
-    computed: {
-      aktHalbjahr: ({jahr, abschnitt}) => { return a => a.Jahr === jahr && a.Abschnitt === abschnitt }
-    }
-  }
+  export let schueler, schule, privat, jahr, abschnitt
+  const aktHalbjahr = () => (a) => a.Jahr === jahr && a.Abschnitt === abschnitt
 </script>
 
 <style>

+ 21 - 29
Notenliste.html

@@ -1,14 +1,14 @@
 {#each _.chunk(schueler, anzahl) as slice, i}
   <div class="page grid" orientation="landscape" size="A4">
     <div class="header">
-      <b>Notenliste der {schueler[0].Klasse} – Stand {heute}</b>
+      <b>Notenliste der {schueler[0].Klasse} – Stand {heute()}</b>
     </div>
     <div class="main">
       <Voffset v=1/>
       <table class="table-bordered">
         <tr>
           <td><b>Nr</b></td><td><b>Name</b></td>
-          {#each Array.from(faecher) as f}
+          {#each Array.from(faecher()) as f}
             <td class="text-center"><b>{f}</b></td>
           {/each}
         </tr>
@@ -16,7 +16,7 @@
           <tr>
             <td><b>{i*10+ii+1}</b></td>
             <td><b>{s.Name}, {s.Vorname}</b></td>
-            {#each Object.entries(noten) as [fach, noten]}
+            {#each Object.entries(noten()) as [fach, noten]}
               <td class="text-center" style={parseInt(noten[i*anzahl+ii]) > 4 ? 'background:tomato;':''}>{noten[i*anzahl+ii]}</td>
             {/each}
           </tr>
@@ -28,33 +28,25 @@
 {/each}
 
 <script>
-  const _  = R.lodash
+  import { datum, versetzungsvermerk, volljaehrigBei, bemerkungen, bg }  from './helfer'
+
+  import Voffset from './partials/Voffset.html'
 
-	export default {
-    data () {
-      return {
-        anzahl: 20,
-        heute: new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'})
-      }
-    },
-    computed: {
-      aktHalbjahr: ({jahr, abschnitt}) => { return a => a.Jahr === jahr && a.Abschnitt === abschnitt },
-      faecher: ({schueler, aktHalbjahr}) => {
-        let faecher = new Set
-        schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => {faecher.add(n.fach.FachKrz)}))
-        return faecher
-      },
-      noten: ({schueler, faecher, aktHalbjahr}) => {
-        let noten = {}
-        faecher.forEach(f => {noten[f] = []})
-        schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => noten[n.fach.FachKrz].push(n.NotenKrz || "–")))
-        return noten
-      }
-    },
-    helpers: { _ },
-    components: {
-      Voffset: './partials/Voffset.html'
-    }
+  export let schueler, schule, privat, jahr, abschnitt
+  const aktHalbjahr = () => (a) => a.Jahr === jahr && a.Abschnitt === abschnitt
+  const _  = R.lodash
+  const heute = () => new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'})
+  const anzahl = 20
+  const faecher = () => {
+    let faecher = new Set
+    schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => {faecher.add(n.fach.FachKrz)}))
+    return faecher
+  }
+  const noten = () => {
+    let noten = {}
+    faecher().forEach(f => {noten[f] = []})
+    schueler.forEach(s => s.abschnitte.find(aktHalbjahr).noten.forEach(n => noten[n.fach.FachKrz].push(n.NotenKrz || "–")))
+    return noten
   }
 </script>
 

+ 6 - 16
demo.html

@@ -70,23 +70,13 @@
   </div>
 </div>
 
-
 <script>
-	export default {
-    data () { return {
-      page: ``
-    }},
-    helpers: {
-      html: text => text
-    },
-    components: {
-      Pageheader: './partials/Pageheader.html',
-      Voffset: './partials/Voffset.html'
-    },
-    computed: {
-      aktHalbjahr: ({jahr, abschnitt}) => { return a => a.Jahr === jahr && a.Abschnitt === abschnitt }
-    }
-  }
+  export let schueler, schule, privat, jahr, abschnitt, page
+  const aktHalbjahr = () => (a) => a.Jahr === jahr && a.Abschnitt === abschnitt
+  const html = (text) => text
+
+  import Pageheader from './partials/Pageheader.html'
+  import Voffset from './partials/Voffset.html'
 </script>
 
 <style>

+ 7 - 13
helfer.js

@@ -1,14 +1,15 @@
 import fkl from './daten/fachklassen.json'
+
 const noten = [null, 'sehr gut', 'gut', 'befriedigend', 'ausreichend', 'mangelhaft', 'ungenügend']
-const enoten = {'E1': 'mit besonderem Erfolg teilgenommen', 'E2': 'mit Erfolg teilgenommen', 'E3': 'teilgenommen'}
+const enoten = { 'E1': 'mit besonderem Erfolg teilgenommen', 'E2': 'mit Erfolg teilgenommen', 'E3': 'teilgenommen' }
 const punkte = {
   15: '1+', 14: '1', 13: '1-',
   12: '2+', 11: '2', 10: '2-',
    9: '3+',  8: '3',  7: '3-',
    6: '4+',  5: '4',  4: '4-',
    3: '5+',  2: '5',  1: '5-',
-             0: '6'}
-  const zahlwort = {1: "eins",2: "zwei",3: "drei",4: "vier",5: "fünf",6: "sechs",7: "sieben",8: "acht",9: "neun",0: "null"}
+             0: '6' }
+const zahlwort = { 1: "eins",2: "zwei",3: "drei",4: "vier",5: "fünf",6: "sechs",7: "sieben",8: "acht",9: "neun",0: "null" }
 
 export const datum = (t) => {
   // gibt ein Datum im deutschen Format zurück
@@ -16,7 +17,7 @@ export const datum = (t) => {
     return new Date(t).toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'})
   } catch (e) {console.log(e); return}
 }
-export const versetzungsvermerk = (s, hj, agz=null) => {
+export const versetzungsvermerk = (s, hj, agz = null) => {
   // gibt, wenn vorhanden den passenden Vermerk zurück
   // wenn es ein agz ist und kein Konferenzdatum feststeht
   if (agz && !hj.Konferenzdatum) return
@@ -30,9 +31,7 @@ export const versetzungsvermerk = (s, hj, agz=null) => {
   }
   return vermerk
 }
-export const bemerkungen = (hj) => {
-  return hj.ZeugnisBem ? hj.ZeugnisBem.replace('\r\n', '<br/>') : 'keine'
-}
+export const bemerkungen = (hj) => hj.ZeugnisBem ? hj.ZeugnisBem.replace('\r\n', '<br/>') : 'keine'
 export const volljaehrigBei = (s, datum) => {
   // gibt an, ob der Schüler *s* zu einem Zeitpunkt *datum* volljährig war
   try {
@@ -47,12 +46,7 @@ export const schulform = (s) => {
     case 'B': return 'Berufsfachschule'
   }
 }
-export const bg = (s,k) => {
-  if (s.fachklasse && s.fachklasse.Kennung && fkl[s.fachklasse.Kennung]) {
-    return fkl[s.fachklasse.Kennung][k]
-  } else
-  return ''
-}
+export const bg = (s, k) => s.fachklasse && s.fachklasse.Kennung && fkl[s.fachklasse.Kennung] ? fkl[s.fachklasse.Kennung][k] : ''
 export const note = (note) => noten[parseInt(note)] || enoten[note]
 export const punkte2note = (p) => punkte[parseInt(p)]
 export const noteInWorten = (n) => n.split('').map(n => n === ',' ? '/' : zahlwort[parseInt(n)]).join(' ')

+ 35 - 17
partials/Fussnoten.html

@@ -3,7 +3,15 @@
 Folgende Attribute werden unterstützt:
 schule:     Hier stehen die SchulNr etc drin. Muss mitgegeben werden
 ger:        Wenn der GER für AGZ oder ASZ verwendet werden soll, mitangeben.
-            true|false Standardwert ist false -->
+            true|false Standardwert ist false
+notenstufen:Wenn die Notenstufen mit angegeben werden sollen.
+            true|false Standardwert ist true
+verordnung :true|false Standartwert true
+bfs:        true|false Standardwert false
+rechtsbehlfsbelehrung :true|false Standartwert true
+
+Beachte, true|false nicht als String setzen, sondern als statement:
+notenstufen={false} -->
 
 <div class="klein eng">
   <Voffset v="2"/>
@@ -12,9 +20,11 @@ ger:        Wenn der GER für AGZ oder ASZ verwendet werden soll, mitangeben.
   </div>
   <hr class="hr-grau" />
   <div class="grau">
-    Notenstufen gemäß § 48 SchulG: 1 = sehr gut, 2 = gut, 3 = befriedigend,
-    4 = ausreichend, 5 = mangelhaft, 6 = ungenügend
-    <Voffset v=".5"/>
+    {#if notenstufen}
+      Notenstufen gemäß § 48 SchulG: 1 = sehr gut, 2 = gut, 3 = befriedigend,
+      4 = ausreichend, 5 = mangelhaft, 6 = ungenügend
+      <Voffset v=".5"/>
+    {/if}
     {#if ger}
       <sup>1</sup>Der Unterricht in den modernen Fremdsprachen hat auf der nach dem Fach in
       Klammern angegebenen Niveaustufe des „Europäischen Referenzrahmens für
@@ -24,21 +34,29 @@ ger:        Wenn der GER für AGZ oder ASZ verwendet werden soll, mitangeben.
       sprachliche Kompetenzerwerb auf diesem Niveau bescheinigt.
       <Voffset v=".5"/>
     {/if}
-    Dem Zeugnis liegen zugrunde: 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).
-    <Voffset v=".5"/>
-    Rechtsbehelfsbelehrung: Gegen dieses Zeugnis kann innerhalb eines Monats
-    nach Bekanntgabe des Zeugnisses Widerspruch eingelegt werden. Der Widerspruch
-    ist beim {schule.Bezeichnung2}, {schule.Strasse}, {schule.PLZ} {schule.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.
+    {#if verordnung}
+      Dem Zeugnis liegen zugrunde: 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).
+    {#if bfs}
+      <br>Die Rahmenvereinbarung über die Berufsfachschulen (Beschluss der
+      Kultusministerkonferenz vom 17.10.2013) in der jeweils geltenden Fassung.
+    {/if}
+      <Voffset v=".5"/>
+    {/if}
+    {#if rechtsbehelfsbelehrung}
+      Rechtsbehelfsbelehrung: Gegen dieses Zeugnis kann innerhalb eines Monats
+      nach Bekanntgabe des Zeugnisses Widerspruch eingelegt werden. Der Widerspruch
+      ist beim {schule.Bezeichnung2}, {schule.Strasse}, {schule.PLZ} {schule.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.
+    {/if}
   </div>
 </div>
 
 <script>
-  export default {
-    components: { Voffset: './Voffset.html' }
-  }
+  export let schule, notenstufen, verordnung, rechtsbehelfsbelehrung = true
+  export let ger, bfs = false
+  import Voffset from './Voffset.html'
 </script>

+ 25 - 33
partials/Noten.html

@@ -19,7 +19,7 @@ fachklasse: muss mitgegeben werden, wenn aus der Fachklassen.json Datei der Stan
 -->
 
 <table class="table-noten">
-  {#each faechergruppen as [gruppen_id, gruppenFaecher]}
+  {#each faechergruppen() as [gruppen_id, gruppenFaecher]}
     <tr>
       <td class="fachgruppe-margin">
         <b>{gruppenbezeichnung(gruppen_id)}</b>
@@ -47,7 +47,7 @@ fachklasse: muss mitgegeben werden, wenn aus der Fachklassen.json Datei der Stan
               {/if}
             </td>
             <!-- Entweder Abschlussnote, wenn gesetzt oder Abschnittsnote oder nix -->
-            <td class="td-fach-note"><span>{f.NoteAbschluss || f.NotenKrz || '–––––'}</span></td>
+            <td class="td-fach-note"><span>{note(f.NoteAbschluss) || note(f.NotenKrz) || '–––––'}</span></td>
           </tr>
         {/if}
       {/each}
@@ -59,42 +59,34 @@ fachklasse: muss mitgegeben werden, wenn aus der Fachklassen.json Datei der Stan
 
 <script>
   import { gruppenIds } from './gruppenIDs'
+  import { note, fremdsprache } from '../helfer'
   const _ = R.lodash
 
-  export default {
-    helpers: {
-      _,
-      gruppenbezeichnung: gruppe => gruppenIds[gruppe],
-      lernbereicheUndFaecher: gruppenFaecher => Object.entries(_.groupBy(gruppenFaecher, f => f.fach.Bezeichnung)),
-      fremdsprache: (fach, fachklasse) => {
-        try {
-          return fach.Lernentw
-        } catch (e) { return 'undefined - Sprachniveau fehlt'}
-      }
-    },
-    computed: {
-      faechergruppen: ({ noten, fachGliederungen }) => {
-        // noten werden im jeweiligen Dokument über das *noten*-Attribut mitgegeben.
-        // z.B. die Abschnittsnote oder die Noten aus *s.bk_abschluss_faecher* und co.
-        // Nutzer über Konsole auf Änderungen in den Fächern hinweisen
-        if (fachGliederungen && fachGliederungen.length > 0) console.log('Es wurden Fachgliederungswerte gesetzt: ', fachGliederungen)
-        // suche in den fachGliederungen, ob für die jeweilige Fachklasse was besonderes festgelegt wurde
-        // vorausgesetzt, fachGliederungen wurde mitgegeben
-        const faecher = fachGliederungen
-          ? noten.map(f => {return {...f, fach: Object.assign(f.fach, fachGliederungen.find(fg => fg.Fach_ID === f.Fach_ID))}})
-          : noten
-        // erstmal alle Fächer sortieren in der passenden Reihenfolge,
-        // dann nach Fachgruppe gruppieren
-        return Object.entries(_.groupBy(_.sortBy(faecher, f => f.fach.SortierungS2), f => f.fach.Fachgruppe_ID))
-      },
+  export let lernfeld, ger = false
+  export let noten, fachGliederungen, fachklasse
+  const gruppenbezeichnung = gruppe => gruppenIds[gruppe]
+  const lernbereicheUndFaecher = gruppenFaecher => Object.entries(_.groupBy(gruppenFaecher, f => f.fach.Bezeichnung))
+  const faechergruppen = () => {
+    // noten werden im jeweiligen Dokument über das *noten*-Attribut mitgegeben.
+    // z.B. die Abschnittsnote oder die Noten aus *s.bk_abschluss_faecher* und co.
+    // Nutzer über Konsole auf Änderungen in den Fächern hinweisen
+    if (fachGliederungen && fachGliederungen.length > 0) console.log('Es wurden Fachgliederungswerte gesetzt: ', fachGliederungen)
+    // suche in den fachGliederungen, ob für die jeweilige Fachklasse was besonderes festgelegt wurde
+    // vorausgesetzt, fachGliederungen wurde mitgegeben
+    const faecher = fachGliederungen
+      ? noten.map(f => {return {...f, fach: Object.assign(f.fach, fachGliederungen.find(fg => fg.Fach_ID === f.Fach_ID))}})
+      : noten
+    // erstmal alle Fächer sortieren in der passenden Reihenfolge,
+    // dann nach Fachgruppe gruppieren
+    return Object.entries(_.groupBy(_.sortBy(faecher, f => f.fach.SortierungS2), f => f.fach.Fachgruppe_ID))
+  }
       // Berufsbezogen kommt neuerdings zuerst, dann berufsübergreifend
       // wenn aber nur eine Note vermerkt ist, dann normal zurück
-      faechergruppenUmsortiert: ({ faechergruppen }) => faechergruppen.length > 1
-        ? [faechergruppen[0], faechergruppen[1]] = [faechergruppen[1], faechergruppen[0]]
-        : faechergruppen
-    }
-  }
+  // const faechergruppenUmsortiert = () => faechergruppen.length > 1
+  //       ? [faechergruppen[0], faechergruppen[1]] = [faechergruppen[1], faechergruppen[0]]
+  //       : faechergruppen
 </script>
+
 <style>
 .table-noten {
   width: 100%;

+ 1 - 1
partials/Seitenlogo.html

@@ -10,4 +10,4 @@
     bottom: 10mm;
     left: 10mm;
   }
-</style>
+</style>