|
@@ -1,30 +1,35 @@
|
|
<h1>Statistik sortiert nach Klassen</h1>
|
|
<h1>Statistik sortiert nach Klassen</h1>
|
|
<h3>Durchschnittsnoten FHR, d.h. nur Absolventen werden berücksichtigt</h3>
|
|
<h3>Durchschnittsnoten FHR, d.h. nur Absolventen werden berücksichtigt</h3>
|
|
-Legende: Schulnummer, Anzahl der Schule von abgehender Schule, Schnitt, davon gültige Einträge
|
|
|
|
|
|
+Legende: Schulnummer, Anzahl der Schüler von abgehender Schule, Schnitt, davon gültige Einträge
|
|
<br>
|
|
<br>
|
|
-<button on:click="getSchueler('A')">A-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('B')">B-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('C')">C-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('D')">D-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('E')">E-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('F')">F-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('G')">G-Klassen</button>
|
|
|
|
-<button on:click="getSchueler('H')">H-Klassen</button>
|
|
|
|
|
|
+<button on:click="getKlasse('A')">A-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('B')">B-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('C')">C-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('D')">D-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('E')">E-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('F')">F-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('G')">G-Klassen</button>
|
|
|
|
+<button on:click="getKlasse('H')">H-Klassen</button>
|
|
{#each Object.entries(schulen) as [schule, values]}
|
|
{#each Object.entries(schulen) as [schule, values]}
|
|
<br>{schule}: {values.length} -> Durchschnittsnote: {dsn(values).join(': ')}
|
|
<br>{schule}: {values.length} -> Durchschnittsnote: {dsn(values).join(': ')}
|
|
{/each}
|
|
{/each}
|
|
|
|
|
|
-<script>
|
|
|
|
-const {Schueler} = require('schild/models/Models')
|
|
|
|
-const { Model } = require('objection')
|
|
|
|
-const Knex = require('knex')
|
|
|
|
-const _ = require('lodash')
|
|
|
|
|
|
+<h3>DSN nach Alter bzw. Geburtsjahr</h3>
|
|
|
|
+{#each Object.entries(dsnNachAlter) as [baujahr, values]}
|
|
|
|
+ <br>{baujahr}: {values.length} -> Durchschnittsnote: {dsn(values)[0]}
|
|
|
|
+{/each}
|
|
|
|
+
|
|
|
|
+<h3>FOS11 nach Alter und D,M,E</h3>
|
|
|
|
+{#each Object.entries(dmeNachAlter) as [baujahr, values]}
|
|
|
|
+ <br>{baujahr}: {values.length} -> Durchschnittsnote: {dme(values)}
|
|
|
|
+{/each}
|
|
|
|
|
|
|
|
+<script>
|
|
export default {
|
|
export default {
|
|
setup(Component) {Component.bez = 'Statistik'},
|
|
setup(Component) {Component.bez = 'Statistik'},
|
|
oncreate () {
|
|
oncreate () {
|
|
const { knex } = this.get()
|
|
const { knex } = this.get()
|
|
- Model.knex(Knex({
|
|
|
|
|
|
+ R.objection.Model.knex(R.knex({
|
|
client: 'mysql',
|
|
client: 'mysql',
|
|
useNullAsDefault: true,
|
|
useNullAsDefault: true,
|
|
connection: {
|
|
connection: {
|
|
@@ -37,6 +42,18 @@ export default {
|
|
}))
|
|
}))
|
|
},
|
|
},
|
|
helpers: {
|
|
helpers: {
|
|
|
|
+ dme (a) {
|
|
|
|
+ const arr = R.lodash.filter(a, a => a.abschnitte && a.abschnitte[1] && a.abschnitte[1].noten[0] && a.abschnitte[1].noten[0].NotenKrz)
|
|
|
|
+ let ln = arr.length
|
|
|
|
+ // console.log(arr)
|
|
|
|
+ const r = arr.reduce((total, value) => {
|
|
|
|
+ const noten = R.lodash.filter(value.abschnitte[1].noten, n => ['DEKO', 'EN', 'MA'].includes(n.fach.FachKrz))
|
|
|
|
+ const summe = noten.reduce((t, v) => t + parseFloat(v.NotenKrz), 0)/3
|
|
|
|
+ return total + summe
|
|
|
|
+ }, 0)
|
|
|
|
+ // console.log(r)
|
|
|
|
+ return `${(r / ln)} (${ln}/${a.length})`
|
|
|
|
+ },
|
|
dsn (arr) {
|
|
dsn (arr) {
|
|
let ln = arr.length
|
|
let ln = arr.length
|
|
const r = arr.reduce((total, value) => {
|
|
const r = arr.reduce((total, value) => {
|
|
@@ -49,19 +66,33 @@ export default {
|
|
},
|
|
},
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- async getSchueler (pattern) {
|
|
|
|
- const schueler = await Schueler.query()
|
|
|
|
|
|
+ async getKlasse (pattern) {
|
|
|
|
+ const schueler = await R.models.Schueler.query()
|
|
.where('Klasse', 'like', pattern + '%')
|
|
.where('Klasse', 'like', pattern + '%')
|
|
- .havingNotNull('DurchschnittsnoteFHR')
|
|
|
|
-
|
|
|
|
- this.set({schulen: _.groupBy(schueler, 'LSSchulNr')})
|
|
|
|
- // console.log(schueler)
|
|
|
|
|
|
+ .eager('abschnitte.[noten.fach]')
|
|
|
|
+ this.set({gruppe: schueler})
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ schulen: ({gruppe}) => {
|
|
|
|
+ const dsn = R.lodash.filter(gruppe, 'DurchschnittsnoteFHR')
|
|
|
|
+ return R.lodash.groupBy(dsn, 'LSSchulNr')
|
|
|
|
+ },
|
|
|
|
+ dsnNachAlter: ({gruppe}) => {
|
|
|
|
+ const dsn = R.lodash.filter(gruppe, 'DurchschnittsnoteFHR')
|
|
|
|
+ return R.lodash.groupBy(dsn, (s) => { return new Date(s.Geburtsdatum).getFullYear()})
|
|
|
|
+ // console.log(R.lodash([1,2,3,4])) //, (s) => { return new Date(s.Geburtsdatum).getFullYear()}))
|
|
|
|
+ },
|
|
|
|
+ dmeNachAlter: ({gruppe}) => {
|
|
|
|
+ const fos11 = R.lodash.filter(gruppe, s => s['PruefOrdnung'] === 'APO-BK-11/C-FOS' && s.status === "8")
|
|
|
|
+ return R.lodash.groupBy(fos11, (s) => { return new Date(s.Geburtsdatum).getFullYear()})
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
+ // }
|
|
},
|
|
},
|
|
data () {
|
|
data () {
|
|
return {
|
|
return {
|
|
- schuelerx: [],
|
|
|
|
- schulen: {}
|
|
|
|
|
|
+ gruppe: null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|