Models.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. 'use strict'
  2. // Then you can simply run the snake_casing code in $parseDatabaseJson or $formatJson
  3. // $formatJson is called when you res.send(someModel) or JSON.stringify(someModel).
  4. // const _ = require('lodash')
  5. const { Model } = require('objection')
  6. class Schueler extends Model {
  7. static get tableName () { return 'schueler' }
  8. static get virtualAttributes () {
  9. return ['anrede', 'akt_halbjahr', 'schueler_in', 'studierende_r', 'berufsbezeichnung_mw', 'volljaehrig']
  10. }
  11. // get akt_halbjahr () {
  12. // if (this.abschnitte) {
  13. // return _.last(this.abschnitte)
  14. // }
  15. // }
  16. get anrede () {
  17. return (this.Geschlecht === 3 ? 'Herr' : 'Frau')
  18. }
  19. get schueler_in () {
  20. return (this.Geschlecht === 3 ? 'Schüler' : 'Schülerin')
  21. }
  22. get studierende_r () {
  23. return (this.Geschlecht === 3 ? 'Studierender' : 'Studierende')
  24. }
  25. get berufsbezeichnung_mw () {
  26. if (this.fachklasse) return this.Geschlecht === 3 ? this.fachklasse.Bezeichnung : this.fachklasse.Beschreibung_W
  27. else return 'Keine Fachklasse zugeordnet'
  28. }
  29. get volljaehrig () {
  30. return this.Volljaehrig === '+'
  31. }
  32. volljaehrig_bei (datum) {
  33. if (!datum || !this.Geburtsdatum) return false
  34. var g = new Date(this.Geburtsdatum)
  35. var d = new Date(datum)
  36. return (d.getFullYear() - g.getFullYear() - ((d.getMonth() > g.getMonth() || (d.getMonth() === g.getMonth() && d.getDay() >= g.getDay())) ? 0 : 1)) >= 18
  37. }
  38. static get relationMappings () {
  39. return {
  40. fachklasse: {
  41. relation: Model.BelongsToOneRelation,
  42. modelClass: Fachklasse,
  43. join: { from: 'schueler.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
  44. },
  45. abschnitte: {
  46. relation: Model.HasManyRelation,
  47. modelClass: Abschnitt,
  48. join: { from: 'schueler.ID', to: 'schuelerlernabschnittsdaten.Schueler_ID' }
  49. },
  50. vermerke: {
  51. relation: Model.HasManyRelation,
  52. modelClass: Vermerk,
  53. join: { from: 'schueler.ID', to: 'schuelervermerke.Schueler_ID' }
  54. },
  55. bk_abschluss: {
  56. relation: Model.HasOneRelation,
  57. modelClass: BKAbschluss,
  58. join: { from: 'schueler.ID', to: 'schuelerbkabschluss.Schueler_ID' }
  59. },
  60. bk_abschluss_faecher: {
  61. relation: Model.HasManyRelation,
  62. modelClass: BKAbschlussFach,
  63. join: { from: 'schueler.ID', to: 'schuelerbkfaecher.Schueler_ID' }
  64. },
  65. abi_abschluss: {
  66. relation: Model.HasOneRelation,
  67. modelClass: AbiAbschluss,
  68. join: { from: 'schueler.ID', to: 'schuelerabitur.Schueler_ID' }
  69. },
  70. abi_abschluss_faecher: {
  71. relation: Model.HasManyRelation,
  72. modelClass: AbiAbschlussFach,
  73. join: { from: 'schueler.ID', to: 'schuelerabifaecher.Schueler_ID' }
  74. },
  75. fhr_abschluss: {
  76. relation: Model.HasOneRelation,
  77. modelClass: FHRAbschluss,
  78. join: { from: 'schueler.ID', to: 'schuelerfhr.Schueler_ID' }
  79. },
  80. fhr_abschluss_faecher: {
  81. relation: Model.HasManyRelation,
  82. modelClass: FHRAbschlussFach,
  83. join: { from: 'schueler.ID', to: 'schuelerfhrfaecher.Schueler_ID' }
  84. },
  85. schuelerfoto: {
  86. relation: Model.HasOneRelation,
  87. modelClass: Schuelerfoto,
  88. join: { from: 'schueler.ID', to: 'schuelerfotos.Schueler_ID' }
  89. },
  90. sprachenfolgen: {
  91. relation: Model.HasManyRelation,
  92. modelClass: Sprachenfolge,
  93. join: { from: 'schueler.ID', to: 'schuelersprachenfolge.Schueler_ID' }
  94. },
  95. versetzung: {
  96. relation: Model.HasOneRelation,
  97. modelClass: Versetzung,
  98. join: { from: 'schueler.Klasse', to: 'versetzung.Klasse' }
  99. }
  100. }
  101. }
  102. }
  103. class Fachklasse extends Model {
  104. static get tableName () { return 'eigeneschule_fachklassen' }
  105. }
  106. class Abschnitt extends Model {
  107. static get tableName () { return 'schuelerlernabschnittsdaten' }
  108. static get virtualAttributes () {
  109. return ['v_name_klassenlehrer', 'klassenlehrer_in', 'schuljahr']
  110. }
  111. get v_name_klassenlehrer () {
  112. if (this.lehrer) return `${this.lehrer.Vorname[0]}. ${this.lehrer.Nachname}`
  113. }
  114. get klassenlehrer_in () {
  115. if (this.lehrer) return (this.lehrer.Geschlecht === '3' ? 'Klassenlehrer' : 'Klassenlehrerin')
  116. }
  117. get schuljahr () {
  118. return `${this.Jahr}/${this.Jahr - 1999}`
  119. }
  120. static get relationMappings () {
  121. return {
  122. lehrer: {
  123. relation: Model.BelongsToOneRelation,
  124. modelClass: Lehrer,
  125. join: { from: 'schuelerlernabschnittsdaten.KlassenLehrer', to: 'k_lehrer.Kuerzel' }
  126. },
  127. fachklasse: {
  128. relation: Model.BelongsToOneRelation,
  129. modelClass: Fachklasse,
  130. join: { from: 'schuelerlernabschnittsdaten.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
  131. },
  132. noten: {
  133. relation: Model.HasManyRelation,
  134. modelClass: Note,
  135. join: { from: 'schuelerlernabschnittsdaten.ID', to: 'schuelerleistungsdaten.Abschnitt_ID' }
  136. }
  137. }
  138. }
  139. }
  140. class Jahrgang extends Model {
  141. static get tableName () { return 'eigeneschule_jahrgaenge' }
  142. }
  143. class Versetzung extends Model {
  144. static get tableName () { return 'versetzung' }
  145. static get relationMappings () {
  146. return {
  147. jahrgang: {
  148. relation: Model.BelongsToOneRelation,
  149. modelClass: Jahrgang,
  150. join: { from: 'versetzung.Jahrgang_ID', to: 'eigeneschule_jahrgaenge.ID' }
  151. },
  152. fachklasse: {
  153. relation: Model.BelongsToOneRelation,
  154. modelClass: Fachklasse,
  155. join: { from: 'versetzung.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
  156. },
  157. schueler: {
  158. relation: Model.HasManyRelation,
  159. modelClass: Schueler,
  160. join: { from: 'versetzung.Klasse', to: 'schueler.Klasse' }
  161. }
  162. }
  163. }
  164. }
  165. class Lehrer extends Model {
  166. static get tableName () { return 'k_lehrer' }
  167. }
  168. class Note extends Model {
  169. static get tableName () { return 'schuelerleistungsdaten' }
  170. static get relationMappings () {
  171. return {
  172. fach: {
  173. relation: Model.BelongsToOneRelation,
  174. modelClass: Fach,
  175. join: { from: 'schuelerleistungsdaten.Fach_ID', to: 'eigeneschule_faecher.ID' }
  176. }
  177. }
  178. }
  179. }
  180. class Fach extends Model {
  181. static get tableName () { return 'eigeneschule_faecher' }
  182. static get relationMappings () {
  183. return {
  184. fach_gliederungen: {
  185. relation: Model.HasManyRelation,
  186. modelClass: FachGliederung,
  187. join: { from: 'eigeneschule_faecher.ID', to: 'fach_gliederungen.Fach_ID' }
  188. }
  189. }
  190. }
  191. }
  192. class BKAbschluss extends Model {
  193. static get tableName () { return 'schuelerbkabschluss' }
  194. }
  195. class BKAbschlussFach extends Model {
  196. static get tableName () { return 'schuelerbkfaecher' }
  197. static get relationMappings () {
  198. return {
  199. fach: {
  200. relation: Model.BelongsToOneRelation,
  201. modelClass: Fach,
  202. join: { from: 'schuelerbkfaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
  203. }
  204. }
  205. }
  206. }
  207. class AbiAbschluss extends Model {
  208. static get tableName () { return 'schuelerabitur' }
  209. }
  210. class AbiAbschlussFach extends Model {
  211. static get tableName () { return 'schuelerabifaecher' }
  212. static get relationMappings () {
  213. return {
  214. fach: {
  215. relation: Model.BelongsToOneRelation,
  216. modelClass: Fach,
  217. join: { from: 'schuelerabifaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
  218. }
  219. }
  220. }
  221. }
  222. class FHRAbschluss extends Model {
  223. static get tableName () { return 'schuelerfhr' }
  224. }
  225. class FHRAbschlussFach extends Model {
  226. static get tableName () { return 'schuelerfhrfaecher' }
  227. static get relationMappings () {
  228. return {
  229. fach: {
  230. relation: Model.BelongsToOneRelation,
  231. modelClass: Fach,
  232. join: { from: 'schuelerfhrfaecher.Fach_ID', to: 'eigeneschule_faecher.ID' }
  233. }
  234. }
  235. }
  236. }
  237. class Sprachenfolge extends Model {
  238. static get tableName () { return 'schuelersprachenfolge' }
  239. static get relationMappings () {
  240. return {
  241. fach: {
  242. relation: Model.BelongsToOneRelation,
  243. modelClass: Fach,
  244. join: { from: 'schuelersprachenfolge.Fach_ID', to: 'eigeneschule_faecher.ID' }
  245. }
  246. }
  247. }
  248. }
  249. class FachGliederung extends Model {
  250. static get tableName () { return 'fach_gliederungen' }
  251. static get relationMappings () {
  252. return {
  253. fachklasse: {
  254. relation: Model.BelongsToOneRelation,
  255. modelClass: Fachklasse,
  256. join: { from: 'fach_gliederungen.Fachklasse_ID', to: 'eigeneschule_fachklassen.ID' }
  257. }
  258. }
  259. }
  260. }
  261. class Vermerk extends Model {
  262. static get tableName () { return 'schuelervermerke' }
  263. }
  264. class Schuelerfoto extends Model {
  265. static get tableName () { return 'schuelerfotos' }
  266. }
  267. class Schule extends Model {
  268. static get tableName () { return 'eigeneschule' }
  269. static get virtualAttributes () {
  270. return ['schulleiter_in']
  271. }
  272. get schulleiter_in () {
  273. return this.SchulleiterGeschlecht === 3 ? 'Schulleiter' : 'Schulleiterin'
  274. }
  275. }
  276. class Nutzer extends Model {
  277. static get tableName () { return 'users' }
  278. }
  279. module.exports = {Schueler,
  280. Abschnitt,
  281. Fachklasse,
  282. Versetzung,
  283. Lehrer,
  284. Note,
  285. Fach,
  286. BKAbschluss,
  287. BKAbschlussFach,
  288. AbiAbschluss,
  289. AbiAbschlussFach,
  290. FHRAbschluss,
  291. FHRAbschlussFach,
  292. Sprachenfolge,
  293. FachGliederung,
  294. Vermerk,
  295. Schuelerfoto,
  296. Schule,
  297. Nutzer,
  298. Jahrgang}