schild.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict'
  2. const Knex = require('knex')
  3. let knex
  4. const { Model } = require('objection')
  5. const {Schueler, Schule, Schuelerfoto, Versetzung} = require('./models/Models')
  6. /*
  7. Vorhandene Models:
  8. Abschnitt, Fachklasse, Versetzung, Lehrer, Note, Fach, BKAbschluss, BKAbschlussFach, AbiAbschluss, AbiAbschlussFach,
  9. FHRAbschluss, FHRAbschlussFach, Sprachenfolge, FachGliederung, Vermerk, Schuelerfoto, Schule, Nutzer
  10. */
  11. const Schild = {
  12. suche: async function (pattern) {
  13. const schueler = await Schueler.query()
  14. .where(function () { this.where('Geloescht', '-').andWhere('Gesperrt', '-') })
  15. .andWhere(function () { this.where('Vorname', 'like', pattern + '%').orWhere('Name', 'like', pattern + '%') })
  16. .select('Name', 'Vorname', 'Klasse', 'Status', 'AktSchuljahr', 'ID')
  17. .orderBy('AktSchuljahr', 'desc')
  18. .map(s => {
  19. return {
  20. value: `${s.Name}, ${s.Vorname} (${s.Klasse})`,
  21. status: s.Status,
  22. jahr: s.AktSchuljahr,
  23. id: s.ID
  24. }
  25. })
  26. const klasse = await Versetzung.query()
  27. .where('Klasse', 'like', pattern + '%')
  28. .select('Klasse')
  29. .orderBy('Klasse', 'desc')
  30. .map(k => {
  31. return { value: k.Klasse, id: k.Klasse }
  32. })
  33. return schueler.concat(klasse)
  34. },
  35. getSchueler: async function (id) {
  36. return Schueler.query()
  37. .where('ID', id)
  38. .eager('[abschnitte.[noten.fach, lehrer], fachklasse, versetzung, bk_abschluss, bk_abschluss_faecher.fach, fhr_abschluss, fhr_abschluss_faecher.fach, abi_abschluss, abi_abschluss_faecher.fach, vermerke]')
  39. .modifyEager('abschnitte', builder => { builder.orderBy('ID') })
  40. .first()
  41. },
  42. getKlasse: async function (klasse, jahr, abschnitt) {
  43. return Versetzung.query()
  44. .where('Klasse', klasse)
  45. // 2 = aktiv, 8 = mit Abschluss entlassen
  46. // .where(function() {
  47. // this.where('Status', 2).orWhere('Status', 8)
  48. // })
  49. .eager('[schueler.[abschnitte.[noten.fach, lehrer], fachklasse, versetzung, bk_abschluss, bk_abschluss_faecher.fach, fhr_abschluss, fhr_abschluss_faecher.fach, abi_abschluss, abi_abschluss_faecher.fach, vermerke], fachklasse, jahrgang]')
  50. .modifyEager('schueler', builder => { builder.orderBy('Name') })
  51. .first()
  52. },
  53. getSchule: async function () {
  54. return Schule.query().first()
  55. },
  56. getSchuelerfoto: async function (id) {
  57. const data = await Schuelerfoto.query()
  58. .where('Schueler_ID', id).first()
  59. return Buffer.from(data.Foto, 'binary').toString('base64')
  60. },
  61. connect: function (knexConfig, env = process.env.NODE_ENV) {
  62. knex = Knex(knexConfig[env])
  63. Model.knex(knex)
  64. return knex
  65. },
  66. disconnect: function () {
  67. if (knex) knex.destroy()
  68. },
  69. testConnection: function () {
  70. return knex.raw('select 1+1 as result')
  71. .then(res => {
  72. console.log('Testverbindung konnte aufgebaut werden')
  73. return true
  74. })
  75. .catch(err => {
  76. console.log(err)
  77. console.log('Testverbindung konnte nicht aufgebaut werden')
  78. return false
  79. })
  80. }
  81. }
  82. module.exports = Schild