123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- 'use strict';
- var Knex = require('knex');
- var objection = require('objection');
- // Then you can simply run the snake_casing code in $parseDatabaseJson or $formatJson
- class Schueler extends objection.Model {
- static get tableName () { return 'schueler' }
- static get virtualAttributes () {
- return ['anrede', 'akt_halbjahr', 'schueler_in', 'studierende_r', 'berufsbezeichnung_mw', 'volljaehrig']
- }
- get anrede () {
- return (this.Geschlecht === 3 ? 'Herr' : 'Frau')
- }
- get schueler_in () {
- return (this.Geschlecht === 3 ? 'Schüler' : 'Schülerin')
- }
- get studierende_r () {
- return (this.Geschlecht === 3 ? 'Studierender' : 'Studierende')
- }
- get berufsbezeichnung_mw () {
- if (this.fachklasse) return this.Geschlecht === 3 ? this.fachklasse.Bezeichnung : this.fachklasse.Beschreibung_W
- else return 'Keine Fachklasse zugeordnet'
- }
- get volljaehrig () {
- return this.Volljaehrig === '+'
- }
- volljaehrig_bei (datum) {
- if (!datum || !this.Geburtsdatum) return false
- var g = new Date(this.Geburtsdatum);
- var d = new Date(datum);
- return (d.getFullYear() - g.getFullYear() - ((d.getMonth() > g.getMonth() || (d.getMonth() === g.getMonth() && d.getDay() >= g.getDay())) ? 0 : 1)) >= 18
- }
- static get relationMappings () {
- return {
- fachklasse: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fachklasse,
- join: { from: 'schueler.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
- },
- abschnitte: {
- relation: objection.Model.HasManyRelation,
- modelClass: Abschnitt,
- join: { from: 'schueler.ID', to: 'schuelerlernabschnittsdaten.Schueler_ID' }
- },
- vermerke: {
- relation: objection.Model.HasManyRelation,
- modelClass: Vermerk,
- join: { from: 'schueler.ID', to: 'schuelervermerke.Schueler_ID' }
- },
- bk_abschluss: {
- relation: objection.Model.HasOneRelation,
- modelClass: BKAbschluss,
- join: { from: 'schueler.ID', to: 'schuelerbkabschluss.Schueler_ID' }
- },
- bk_abschluss_faecher: {
- relation: objection.Model.HasManyRelation,
- modelClass: BKAbschlussFach,
- join: { from: 'schueler.ID', to: 'schuelerbkfaecher.Schueler_ID' }
- },
- abi_abschluss: {
- relation: objection.Model.HasOneRelation,
- modelClass: AbiAbschluss,
- join: { from: 'schueler.ID', to: 'schuelerabitur.Schueler_ID' }
- },
- abi_abschluss_faecher: {
- relation: objection.Model.HasManyRelation,
- modelClass: AbiAbschlussFach,
- join: { from: 'schueler.ID', to: 'schuelerabifaecher.Schueler_ID' }
- },
- fhr_abschluss: {
- relation: objection.Model.HasOneRelation,
- modelClass: FHRAbschluss,
- join: { from: 'schueler.ID', to: 'schuelerfhr.Schueler_ID' }
- },
- fhr_abschluss_faecher: {
- relation: objection.Model.HasManyRelation,
- modelClass: FHRAbschlussFach,
- join: { from: 'schueler.ID', to: 'schuelerfhrfaecher.Schueler_ID' }
- },
- schuelerfoto: {
- relation: objection.Model.HasOneRelation,
- modelClass: Schuelerfoto,
- join: { from: 'schueler.ID', to: 'schuelerfotos.Schueler_ID' }
- },
- sprachenfolgen: {
- relation: objection.Model.HasManyRelation,
- modelClass: Sprachenfolge,
- join: { from: 'schueler.ID', to: 'schuelersprachenfolge.Schueler_ID' }
- },
- versetzung: {
- relation: objection.Model.HasOneRelation,
- modelClass: Versetzung,
- join: { from: 'schueler.Klasse', to: 'versetzung.Klasse' }
- }
- }
- }
- }
- class Fachklasse extends objection.Model {
- static get tableName () { return 'eigeneschule_fachklassen' }
- static get relationMappings () {
- return {
- fach_gliederungen: {
- relation: objection.Model.HasManyRelation,
- modelClass: FachGliederung,
- join: { from: 'eigeneschule_fachklassen.ID', to: 'fach_gliederungen.Fachklasse_ID' }
- }
- }
- }
- }
- class Abschnitt extends objection.Model {
- static get tableName () { return 'schuelerlernabschnittsdaten' }
- static get virtualAttributes () {
- return ['v_name_klassenlehrer', 'klassenlehrer_in', 'schuljahr']
- }
- get v_name_klassenlehrer () {
- return `${this.lehrer?.Vorname?.[0]}. ${this.lehrer?.Nachname}`
- }
- get klassenlehrer_in () {
- return (this.lehrer?.Geschlecht === '3' ? 'Klassenlehrer' : 'Klassenlehrerin')
- }
- get schuljahr () {
- return `${this.Jahr}/${this.Jahr - 1999}`
- }
- static get relationMappings () {
- return {
- lehrer: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Lehrer,
- join: { from: 'schuelerlernabschnittsdaten.KlassenLehrer', to: 'k_lehrer.Kuerzel' }
- },
- fachklasse: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fachklasse,
- join: { from: 'schuelerlernabschnittsdaten.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
- },
- noten: {
- relation: objection.Model.HasManyRelation,
- modelClass: Note,
- join: { from: 'schuelerlernabschnittsdaten.ID', to: 'schuelerleistungsdaten.Abschnitt_ID' }
- }
- }
- }
- }
- class Jahrgang extends objection.Model {
- static get tableName () { return 'eigeneschule_jahrgaenge' }
- }
- class Versetzung extends objection.Model {
- static get tableName () { return 'versetzung' }
- static get relationMappings () {
- return {
- jahrgang: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Jahrgang,
- join: { from: 'versetzung.Jahrgang_ID', to: 'eigeneschule_jahrgaenge.ID' }
- },
- fachklasse: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fachklasse,
- join: { from: 'versetzung.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
- },
- schueler: {
- relation: objection.Model.HasManyRelation,
- modelClass: Schueler,
- join: { from: 'versetzung.Klasse', to: 'schueler.Klasse' }
- }
- }
- }
- }
- class Lehrer extends objection.Model {
- static get tableName () { return 'k_lehrer' }
- }
- class Note extends objection.Model {
- static get tableName () { return 'schuelerleistungsdaten' }
- static get relationMappings () {
- return {
- fach: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fach,
- join: { from: 'schuelerleistungsdaten.Fach_ID', to: 'eigeneschule_faecher.ID' }
- }
- }
- }
- }
- class Fach extends objection.Model {
- static get tableName () { return 'eigeneschule_faecher' }
- static get relationMappings () {
- return {
- fach_gliederungen: {
- relation: objection.Model.HasManyRelation,
- modelClass: FachGliederung,
- join: { from: 'eigeneschule_faecher.ID', to: 'fach_gliederungen.Fach_ID' }
- }
- }
- }
- }
- class BKAbschluss extends objection.Model {
- static get tableName () { return 'schuelerbkabschluss' }
- }
- class BKAbschlussFach extends objection.Model {
- static get tableName () { return 'schuelerbkfaecher' }
- static get relationMappings () {
- return {
- fach: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fach,
- join: { from: 'schuelerbkfaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
- }
- }
- }
- }
- class AbiAbschluss extends objection.Model {
- static get tableName () { return 'schuelerabitur' }
- }
- class AbiAbschlussFach extends objection.Model {
- static get tableName () { return 'schuelerabifaecher' }
- static get relationMappings () {
- return {
- fach: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fach,
- join: { from: 'schuelerabifaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
- }
- }
- }
- }
- class FHRAbschluss extends objection.Model {
- static get tableName () { return 'schuelerfhr' }
- }
- class FHRAbschlussFach extends objection.Model {
- static get tableName () { return 'schuelerfhrfaecher' }
- static get relationMappings () {
- return {
- fach: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fach,
- join: { from: 'schuelerfhrfaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
- }
- }
- }
- }
- class Sprachenfolge extends objection.Model {
- static get tableName () { return 'schuelersprachenfolge' }
- static get relationMappings () {
- return {
- fach: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fach,
- join: { from: 'schuelersprachenfolge.Fach_ID', to: 'eigeneschule_faecher.ID' }
- }
- }
- }
- }
- class FachGliederung extends objection.Model {
- static get tableName () { return 'fach_gliederungen' }
- static get relationMappings () {
- return {
- fachklasse: {
- relation: objection.Model.BelongsToOneRelation,
- modelClass: Fachklasse,
- join: { from: 'fach_gliederungen.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
- }
- }
- }
- }
- class Vermerk extends objection.Model {
- static get tableName () { return 'schuelervermerke' }
- }
- class Schuelerfoto extends objection.Model {
- static get tableName () { return 'schuelerfotos' }
- }
- class Schule extends objection.Model {
- static get tableName () { return 'eigeneschule' }
- static get virtualAttributes () {
- return ['schulleiter_in']
- }
- get schulleiter_in () {
- return this.SchulleiterGeschlecht === 3 ? 'Schulleiter' : 'Schulleiterin'
- }
- }
- class Nutzer extends objection.Model {
- static get tableName () { return 'users' }
- }
- class Schild {
- constructor() {
- this.options = null;
- this.knex = null;
- }
- async connect(knexConfig) {
- try {
- this.knex = await Knex(knexConfig);
- objection.Model.knex(this.knex);
- } catch (e) {
- throw e;
- }
- }
- disconnect() {
- if (this.knex) this.knex.destroy();
- }
- async testConnection() {
- try {
- await this.knex.raw('select 1+1 as result');
- console.log('Testverbindung konnte aufgebaut werden');
- return true;
- } catch (err) {
- console.log(err);
- console.log('Testverbindung konnte nicht aufgebaut werden');
- throw err
- }
- }
- async suche(pattern) {
- const pattern_w = pattern+'%';
- try {
- const sres = await Schueler
- .query()
- .whereRaw(`
- Geloescht='-'
- AND Gesperrt='-'
- AND (CONCAT(Vorname,' ',Name) LIKE ?
- OR CONCAT(Name,', ',Vorname) LIKE ?)
- `
- , [pattern_w, pattern_w])
- .select('Name', 'Vorname', 'Klasse', 'Status', 'AktSchuljahr', 'ID')
- .orderBy('AktSchuljahr', 'desc');
- const schueler = sres.map(s => {
- return {
- value: `${s.Name}, ${s.Vorname} (${s.Klasse})`,
- status: s.Status,
- jahr: s.AktSchuljahr,
- id: s.ID
- };
- });
- const kres = await Versetzung.query().where('Klasse', 'like', pattern + '%').select('Klasse').orderBy('Klasse', 'desc');
- const klassen = kres.map(k => {
- return {
- value: k.Klasse,
- id: k.Klasse
- };
- });
- return schueler.concat(klassen)
- } catch (e) {
- throw e;
- }
- }
- async getSchueler(id) {
- try {
- const res = await Schueler.query()
- .where(function () {
- this.where('Geloescht', '-')
- .andWhere('Gesperrt', '-')
- .andWhere('ID', id);})
- .withGraphFetched(`
- [abschnitte.[noten.fach, lehrer],
- fachklasse.[fach_gliederungen], versetzung, bk_abschluss,
- bk_abschluss_faecher.fach, fhr_abschluss, fhr_abschluss_faecher.fach,
- abi_abschluss, abi_abschluss_faecher.fach, vermerke, sprachenfolgen.fach]
- `)
- .modifyGraph('abschnitte', builder => {
- builder.orderBy('ID');
- }).first();
- return res.toJSON()
- } catch (e) {
- throw e;
- }
- }
- async getKlasse(klasse) {
- try {
- const res = await Versetzung.query()
- .where('Klasse', klasse)
- .withGraphFetched(`
- [schueler.[abschnitte.[noten.fach, lehrer],
- fachklasse.[fach_gliederungen], versetzung, bk_abschluss,
- bk_abschluss_faecher.fach, fhr_abschluss, fhr_abschluss_faecher.fach,
- abi_abschluss, abi_abschluss_faecher.fach, vermerke, sprachenfolgen.fach], fachklasse,
- jahrgang]
- `)
- .modifyGraph('schueler', builder => {
- builder.where(function () {
- this.where('Geloescht', '-')
- .andWhere('Gesperrt', '-');})
- .orderBy('Name');
- })
- .first();
- return res.toJSON()
- } catch (e) {
- throw e;
- }
- }
- async getSchule() {
- try {
- const res = await Schule.query().first();
- delete res.SchulLogo;
- delete res.Einstellungen;
- delete res.Einstellungen2;
- return res.toJSON()
- } catch (e) {
- throw e;
- }
- }
- async getSchuelerfoto(id) {
- try {
- const data = await Schuelerfoto.query().where('Schueler_ID', id).first();
- return Buffer.from(data.Foto, 'binary').toString('base64');
- } catch (e) {
- throw e;
- }
- }
- async getNutzer(username) {
- try {
- const res = await Nutzer.query().where('US_LoginName', username).first();
- return res.toJSON()
- } catch (e) {
- throw e;
- }
- }
- }
- exports.AbiAbschluss = AbiAbschluss;
- exports.AbiAbschlussFach = AbiAbschlussFach;
- exports.Abschnitt = Abschnitt;
- exports.BKAbschluss = BKAbschluss;
- exports.BKAbschlussFach = BKAbschlussFach;
- exports.FHRAbschluss = FHRAbschluss;
- exports.FHRAbschlussFach = FHRAbschlussFach;
- exports.Fach = Fach;
- exports.FachGliederung = FachGliederung;
- exports.Fachklasse = Fachklasse;
- exports.Jahrgang = Jahrgang;
- exports.Lehrer = Lehrer;
- exports.Note = Note;
- exports.Nutzer = Nutzer;
- exports.Schild = Schild;
- exports.Schueler = Schueler;
- exports.Schuelerfoto = Schuelerfoto;
- exports.Schule = Schule;
- exports.Sprachenfolge = Sprachenfolge;
- exports.Vermerk = Vermerk;
- exports.Versetzung = Versetzung;
|