Compare commits

...

283 Commits

Author SHA1 Message Date
Harald Bamberger 81244a06ca antrag_prestudentstatus_whitelist_abmeldung damit Unterbrecher sich auch abmelden koennen 2024-01-12 16:13:19 +01:00
Harald Bamberger 64279bace2 change function type from volatile to stable for public.get_rolle_prestudent 2024-01-09 09:40:56 +01:00
Harald Bamberger fde1623dc0 Merge branch 'feature-35545/Studstatus_Status_Abgemeldet' 2024-01-08 18:23:10 +01:00
Harald Bamberger 3687f63189 Merge branch 'feature-35411/Studstatus_Query_Performance' 2024-01-08 17:42:20 +01:00
cgfhtw 5b62271711 s&d 2024-01-02 09:36:28 +01:00
cgfhtw 43813b3ef0 getActiveStgs 2023-12-27 10:51:57 +01:00
cgfhtw aa5868826f getAntraege 2023-12-27 10:26:42 +01:00
cgfhtw f03d218872 s&d 2023-12-22 14:49:40 +01:00
Harald Bamberger 151012fedf AntragJob: nur Personen die eine Aufforderung oder einen Reminder zur Wiederholung erhalten haben und die Frist abgelaufen ist zum Abbrecher machen 2023-12-22 11:08:56 +01:00
Andreas Österreicher 1530726b0a Merge branch 'feature-20037/reihungstestjob_neue_studienplaene_werden_nicht_korrekt_zugeordnet' 2023-12-21 15:44:58 +01:00
ma0048 250434b806 Merge remote-tracking branch 'origin/master' into feature-20037/reihungstestjob_neue_studienplaene_werden_nicht_korrekt_zugeordnet 2023-12-21 15:41:28 +01:00
Andreas Österreicher 2e742a7913 Merge branch 'feature-29144/Prestudent_status_nach_Bismeldung_sperren_2' 2023-12-21 13:29:02 +01:00
Harald Bamberger 5bfa8ca53c Merge branch 'feature-35066/Studstatus_divers' 2023-12-20 19:57:33 +01:00
Andreas Österreicher 29d7a97ee8 Wording korrigiert 2023-12-20 14:26:30 +01:00
Andreas Österreicher 20f9f52eef Doppelten Composer Eintrag entfernt 2023-12-20 14:11:49 +01:00
Andreas Österreicher 72217d9793 Merge branch 'master' into feature-29144/Prestudent_status_nach_Bismeldung_sperren_2 2023-12-20 14:06:18 +01:00
Andreas Österreicher c400e112fd Merge branch 'feature-35007/Text_zu_UHSTAT_Formular_hinzufuegen' 2023-12-20 13:43:23 +01:00
cgfhtw 3f88bba9bb Negative Prüfungen sortiert und bei bestehenden Anträgen nach Antragsdatum und Stdsem gefiltert 2023-12-20 12:06:45 +01:00
cgfhtw ca55b63e01 Load Language before Anträge 2023-12-20 09:30:44 +01:00
cgfhtw ba7f60b16e Filter Beschriftung 2023-12-20 09:18:44 +01:00
cgfhtw 6c0fa3fed3 Leitungsansicht: Aktiv Default & korrekter Filter beim Neuladen der Seite 2023-12-20 09:14:58 +01:00
Harald Bamberger a02e79a33a fix sancho mail template kurzbz too long 2023-12-19 18:14:08 +01:00
cgfhtw f4194c251a loadActiveForStudiengaenge eigene Funktion 2023-12-18 14:27:32 +01:00
cgfhtw d8dc19ef2f Merge branch 'master' into feature-35066/Studstatus_divers 2023-12-18 14:19:50 +01:00
Andreas Österreicher 7868c2e073 Merge branch 'feature-35019/visual_library_abgabetool_nutzungsbedingungen_fuer_epub' 2023-12-18 13:32:41 +01:00
ma0048 55fbf40374 - abgabetool text anpassungen
- nutzungsbedingungen
- delay config hinzugefuegt
- required inputs hinzugefuegt
2023-12-18 09:20:01 +01:00
cgfhtw e698564202 StudStatus: Toggle "nur aktive anzeigen" 2023-12-14 11:28:19 +01:00
Harald Bamberger adc66695e4 Merge branch 'feature-34727/Studstatus_Studienplaene_w_multiple_languages' 2023-12-13 16:05:04 +01:00
Harald Bamberger 9e59caf7bc Merge branch 'master' into feature-34727/Studstatus_Studienplaene_w_multiple_languages 2023-12-13 15:10:21 +01:00
Andreas Österreicher a75234165b Merge branch 'hotfix_Anrechnungsantraege-in-zukuenftigen-Studiensemester-ermoeglichen' 2023-12-12 14:45:18 +01:00
Andreas Österreicher 18f88b7697 Merge branch 'infocenter_2023_12_04' 2023-12-12 13:27:05 +01:00
Andreas Österreicher 5c3f5b26d3 Composer Lock aktualisiert und neuen Config Eintrag für Zahlungstypen
hinzugefügt
2023-12-12 13:25:10 +01:00
cgfhtw 14c24005fe Wiederholung wenn Studierende das letze Semester wiederholen 2023-12-12 11:02:12 +01:00
Harald Bamberger 9fa7e6e56c modify label of Studiengaenge in Dropdown and Table 2023-12-07 17:12:38 +01:00
Harald Bamberger b6585dc186 add margin-right to prevent scrollbar from overlaying table 2023-12-07 16:05:52 +01:00
cgfhtw b15adf7b23 Revert "task-35010: Abmeldung d. StG Pre-Abbrecher Statusgrund nach zurückgezogen wieder rückgängig machen"
This reverts commit 3e9dcf2911.
2023-12-06 14:32:29 +01:00
cgfhtw b6b21d54fc Pre-Abbrecher Statusgrund nach zurückgezogen wieder rückgängig machen 2023-12-06 14:26:59 +01:00
cgfhtw 3e9dcf2911 task-35010: Abmeldung d. StG Pre-Abbrecher Statusgrund nach zurückgezogen wieder rückgängig machen 2023-12-06 09:46:34 +01:00
cgfhtw 98de634393 s&d 2023-12-05 09:27:20 +01:00
ma0048 f3be186c5a Merge branch 'feature-27398/Offene_Rechnungen_im_Bewerbungstool_anzeigen' into infocenter_2023_12_04 2023-12-04 12:46:16 +01:00
ma0048 ab5d0693eb Merge branch 'feature-16354/TinyMCE_move_to_new_version' into infocenter_2023_12_04
# Conflicts:
#	composer.lock
2023-12-04 12:44:10 +01:00
ma0048 a4417bdd98 Merge remote-tracking branch 'origin/feature-32978/bewerberstatus_cronjob_aktivieren' into infocenter_2023_12_04 2023-12-04 12:33:25 +01:00
ma0048 a8efe3c109 Merge remote-tracking branch 'origin/feature-33037/bewerbungstool_textanpassung' into infocenter_2023_12_04 2023-12-04 12:32:55 +01:00
ma0048 4ceca78ebc Merge remote-tracking branch 'origin/feature-33185/statusfilter_im_fas_fuer_neuen_bewerber_prozess' into infocenter_2023_12_04 2023-12-04 12:32:34 +01:00
ma0048 af1db47e1d Merge remote-tracking branch 'origin/feature-33250/messages_von_reihungstestverwaltungsseite_aus_schicken' into infocenter_2023_12_04 2023-12-04 12:29:43 +01:00
ma0048 fa80c49eba Merge remote-tracking branch 'origin/feature-33714/erhoehter_studienbeitrag_fuer_drittsaatenangehoerig' into infocenter_2023_12_04 2023-12-04 12:29:17 +01:00
Harald Bamberger 483b6171c7 add space between firstname and surname 2023-12-01 09:39:46 +01:00
Harald Bamberger 0e04138480 Merge branch 'feature-34998/Studierendenstatus_Mail_nicht_an_private_Adresse_schicken' 2023-11-30 15:04:10 +01:00
cgfhtw a3963248dd s&d 2023-11-29 14:37:35 +01:00
ma0048 ea14fa1a4b - infocenter kaution spalte angepasst
- infocenter abgewiesen nachricht spalte angepasst
2023-11-29 13:05:49 +01:00
KarpAlex 734ab45264 UHSTAT form: added SVNR text 2023-11-29 01:06:42 +01:00
Cris 1310dea4a5 Changed Tabulators new-Button to btn-primary color 2023-11-28 18:55:14 +01:00
Cris be0e2a6dca Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-11-28 18:49:37 +01:00
Harald Bamberger 0f2f21aa19 Merge branch 'feature-34537/Phrasenmixin_als_Plugin' 2023-11-28 12:56:31 +01:00
Harald Bamberger bbd41f17cc use textarea instead of pre 2023-11-28 12:53:44 +01:00
Harald Bamberger c123ad0578 Merge branch 'master' into feature-34537/Phrasenmixin_als_Plugin 2023-11-28 09:28:02 +01:00
ma0048 6b2d728143 - textänderung 2023-11-28 08:57:30 +01:00
cgfhtw a6f18ae424 Bugfix: parameter missing 2023-11-27 12:21:25 +01:00
Andreas Österreicher 71495877f3 Merge branch 'feature-29767/anpassung_abgabetool_fuer_vl' 2023-11-27 10:09:45 +01:00
Harald Bamberger 28e533fb3c replace pre with textarea to fix reason being overlapped by scroll bar 2023-11-23 17:53:43 +01:00
Harald Bamberger a1aff9bd0c Merge branch 'feature-34883/Studstatus_insertvon__bestaetigtvon_bei_Abbrechern' 2023-11-23 16:29:40 +01:00
Harald Bamberger 66cbe5199a correct phrasestext 2023-11-23 16:17:05 +01:00
Harald Bamberger b0d6212c5e Merge branch 'feature-34922/NeuerAbmeldungsgrundPhrase' 2023-11-23 16:06:54 +01:00
cgfhtw c93a4d2fb5 Studstatus: Wiederholer Reminder 1 wird vermutlich mit einem Tag delay versandt 2023-11-23 15:51:35 +01:00
cgfhtw 4932f21204 s&d 2023-11-23 15:37:01 +01:00
ma0068 2d25e08227 Longtext ZGV ohne Hinweis auf Ausbildungsvertrag 2023-11-23 09:45:29 +01:00
ma0068 d0bebeaa4a neue Phrase MissingZGV, entfernen new lines 2023-11-23 09:16:56 +01:00
Harald Bamberger 594dbdca21 Merge branch 'feature-34883/bestaetigtvon_bei_Abbrechern' 2023-11-22 17:08:20 +01:00
cgfhtw 8142982ac7 s&d 2023-11-22 14:57:24 +01:00
cgfhtw ca2256bb32 Fix: Better handling of uninitialized variables 2023-11-22 14:57:06 +01:00
Harald Bamberger ad8a18ed7d change lvzuweisungurl to use VILESCI_ROOT if defined for Sancho_Mail_Antrag_W_New 2023-11-22 13:08:47 +01:00
cgfhtw 73e8761728 Bugfix: Lvzuweisung - DB Errors in production 2023-11-21 10:46:23 +01:00
cgfhtw cc779f3d27 finish 2023-11-21 08:48:34 +01:00
ma0048 2158e7a28d - wording
- standardwert
- absage infocenter
2023-11-20 11:55:05 +01:00
cgfhtw a82df1058d Phrasen Plugin: async loadCategory function & use Vue.computed() 2023-11-16 15:23:40 +01:00
Harald Bamberger f9cf1a5b32 change perstistenceID to force new settings in browser localstorage 2023-11-14 22:55:29 +01:00
cgfhtw 5b2bfb9340 Code optimizing 2023-11-13 09:52:04 +01:00
Harald Bamberger 89c546f74f fix resize-handle in right column header 2023-11-10 15:29:50 +01:00
Harald Bamberger 18f36c9d23 update tabulator5 to version 5.5.2 to get better behaviour of frozen right column 2023-11-10 15:16:40 +01:00
cgfhtw cb009529af Mixin auf Plugin ändern 2023-11-10 14:46:18 +01:00
cgfhtw e56ccffe8d Bugfixes: Studstatus 2023-11-10 14:30:41 +01:00
cgfhtw 479d1a900f Orgform PDFs 2023-11-09 14:19:36 +01:00
Harald Bamberger 1d2a92f37f Merge branch 'feature-34545/Bug_StudStatus_Orgform_falsch' 2023-11-09 13:46:07 +01:00
cgfhtw 46855c9547 Blacklist für Noten 2023-11-09 13:37:56 +01:00
cgfhtw 85f178fcf3 remove var_dump 2023-11-09 13:26:54 +01:00
Harald Bamberger 4bfc26006b Merge branch 'feature-28886/Filter_Component_vs_Table_Component' 2023-11-09 11:48:51 +01:00
cgfhtw 05744f3921 Bugfix 2023-11-08 09:35:23 +01:00
Andreas Österreicher fad475fb64 Fixed Loading Lehraufträge with Postgresql 15 2023-11-06 09:00:28 +01:00
ma0048 e0a2fba209 - erhoehte studiengebuehr hinzugefuegt & filter 2023-11-03 11:37:58 +01:00
ma0048 6e18d2ee2b - rt verwaltung message an prestudent 2023-11-03 11:22:27 +01:00
Harald Bamberger c7508d2b8c Merge branch 'master' of github.com:FH-Complete/FHC-Core 2023-11-02 16:50:06 +01:00
Harald Bamberger c12169557b rename vuepic/vue-datepicker to vuejs/vuedatepicker 2023-11-02 16:49:38 +01:00
Harald Bamberger f956db5889 Merge branch 'feature-34495/LinkSammelmailStgl' 2023-10-31 13:34:57 +01:00
ma0068 8971f79a77 Verwendung von APP_ROOT 2023-10-31 13:23:56 +01:00
ma0068 fdb4eb5e7d Link Stgl Sammelmail 2023-10-31 13:16:25 +01:00
Cris d37a8f1357 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-10-31 12:58:03 +01:00
Andreas Österreicher ccace2f826 Fehler beim Laden der Lehrauftragsliste korrigiert mit Postgres15 2023-10-31 11:16:53 +01:00
Andreas Österreicher 2254aa3643 Merge branch 'bug-34481/infocenter_bug_rueckstellung' 2023-10-31 08:34:11 +01:00
ma0048 684a741f2a - bugfix 2023-10-31 08:33:10 +01:00
Harald Bamberger f53bca1ba6 Merge branch 'feature-33948/Studstatus_CSV_Export' 2023-10-27 10:47:10 +02:00
Harald Bamberger 2ed6f30bea Merge branch 'feature-33947/Studierendenantraege_SammelmailAnAssistenz' 2023-10-27 10:45:35 +02:00
cgfhtw 73cbaf77f1 CSV Options adjusted for German MS Office 2023-10-24 14:16:13 +02:00
ma0068 aead4f3380 Assistenz als CC zu SammelmailSTGL hinzugefügt 2023-10-24 10:44:17 +02:00
KarpAlex c9331771b3 lock Prestudentstatus after Bismeldestichtag in FAS: possible to edit student with prestudentstatus check permission, all fields are greyed out when not editable, changed BIS-Meldestichtagsverwaltung menu point text 2023-10-23 16:39:33 +02:00
Andreas Österreicher dc496deadd Merge branch 'bug-33290/ZeitsperreEndeDatumFehlenderMaxwert' 2023-10-23 16:18:54 +02:00
Andreas Österreicher ecba22acfc Merge branch 'master' of github.com:FH-Complete/FHC-Core 2023-10-23 15:03:21 +02:00
Andreas Österreicher 01ca583167 Vertragsstunden werden auf 2 Nachkommastellen gerundet anstatt auf 1 2023-10-23 15:02:34 +02:00
ma0048 a1ee027ea4 - phrasen 2023-10-23 09:51:04 +02:00
Harald Bamberger 548a3e39b9 change label 2023-10-20 15:50:48 +02:00
ma0048 6a008fc5da - filter hinzugefuegt 2023-10-17 16:38:05 +02:00
Cris d85bbac19b Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-10-17 11:32:01 +02:00
Harald Bamberger 1bc957821e Merge branch 'bug-29815/ModifyCoodleIcalTerminbestaetigungen' 2023-10-17 07:27:30 +02:00
Andreas Österreicher 22d3b08a06 Escaping von LVs mit Sonderzeichen 2023-10-16 11:08:34 +02:00
Andreas Österreicher 60ee3ec8f0 UID Generierung bei Incoming um Nachname, Vorname ergänzt 2023-10-16 10:26:23 +02:00
Harald Bamberger 52dd2c56a2 Merge branch 'bhdev-studstatus' 2023-10-12 16:24:20 +02:00
Harald Bamberger d06819f25f comment out info_ studierendenantrag phrase 2023-10-12 16:07:20 +02:00
Harald Bamberger b5c0c14e2a fix typo 2023-10-11 19:20:40 +02:00
cgfhtw 56f26e6ebe Bugfix: FilterCmpt: reload function 2023-10-11 15:39:14 +02:00
cgfhtw 9d31cdffe6 Bugfix: handle reload event of Table.js 2023-10-11 14:59:54 +02:00
cgfhtw 95d3b6ac5b Bugfix: Phrasen: local variable has overwritten function parameter 2023-10-11 14:57:44 +02:00
cgfhtw af89ec3942 Bugfix: Phrasen: local variable has overwritten function parameter 2023-10-11 14:44:24 +02:00
cgfhtw c3b6a77dad switch visibility only for not frozen columns with title 2023-10-11 13:18:33 +02:00
cgfhtw 16fdb0de69 cleanup 2023-10-11 13:17:45 +02:00
cgfhtw 9db6874dc4 CSS for tabulator 2023-10-11 13:17:32 +02:00
cgfhtw ebdd6a2040 Bug: Wiederholer Reminder werden nicht versandt - Fehlerquelle Datumsbereich wenn Prüfungen mehr als ein Monat verteilt 2023-10-10 14:16:32 +02:00
cgfhtw 6137cf3347 Remove unnecessary comment 2023-10-10 14:11:21 +02:00
cgfhtw b5ce0ba7ed Remove unnecessary comment 2023-10-10 13:12:51 +02:00
cgfhtw 5010a1653a cleaner config 2023-10-10 13:09:43 +02:00
cgfhtw 0a25982fa2 Do not allow frozen columns to be invisible 2023-10-10 13:09:28 +02:00
cgfhtw c5b246dc8e CSS table row hovering 2023-10-10 13:08:43 +02:00
cgfhtw 17d5cff178 slightly better css 2023-10-09 15:13:00 +02:00
Harald Bamberger c1a53a1be3 do not use phrases from FHC_JS_PHRASES_STORAGE_OBJECT at all 2023-10-09 11:47:02 +02:00
Harald Bamberger 3ab8fd22f4 minor layout changes 2023-10-06 20:22:05 +02:00
ma0068 23aeba4620 Verwendung von datetime-funktionen anstelle von strtotime, Adaptierung config-eintrag, update Phrasen 2023-10-06 12:30:14 +02:00
ma0048 e30ad887c9 - msg an alle moeglich 2023-10-05 10:26:19 +02:00
Andreas Österreicher cda93ce85b Fixed PHP81 Warning on Loading Adresses 2023-10-05 08:14:32 +02:00
Harald Bamberger b618ad247a Merge branch 'feature-33459/Studierendenstatusverwaltung_Unterbrechung_Studiensemester' 2023-10-02 16:45:44 +02:00
ma0048 6c8b3b4ec4 - nur an markierte msg moeglich 2023-10-02 14:12:03 +02:00
cgfhtw ad191f3f90 Optische Verbesserungen select field 2023-10-02 11:06:53 +02:00
cgfhtw 54bcf83781 s&d 2023-10-02 11:06:34 +02:00
Andreas Österreicher c828fe2ee4 Version für Legacy BPK Schnittstelle angepasst 2023-09-29 12:58:30 +02:00
ma0048 dc78660433 - fix for fas 2023-09-29 09:49:12 +02:00
Harald Bamberger a237cb1808 check if there are any entries 2023-09-28 15:58:35 +02:00
Harald Bamberger af3588aa61 revert commented lines for the moment until there is a better solution 2023-09-28 15:45:03 +02:00
Harald Bamberger 867a1e94c7 Merge branch 'feature-27351/Digitalisierung_Formulare_Neu' 2023-09-28 14:37:04 +02:00
Harald Bamberger 137c5f28ec modify Phrasen.js so that it can be used by composition api and does not use legacy categories at all 2023-09-28 14:27:35 +02:00
ma0068 f9af5638f5 Update Config: Format in Tagen für Validierung JS 2023-09-28 09:31:40 +02:00
KarpAlex 285af0a7f4 composer: updated datepicker 2023-09-27 13:52:31 +02:00
ma0048 2d963c92cc - msg aus rtverwaltung moeglich 2023-09-27 10:38:44 +02:00
ma0068 4fcf4a57d1 Adaptierung rdfs mit CDATA 2023-09-27 09:57:39 +02:00
ma0068 1809ff3008 accept days, weeks, month and years in config 2023-09-27 08:30:03 +02:00
Harald Bamberger d8bd100dbb Merge branch 'master' into feature-27351/Digitalisierung_Formulare_Neu 2023-09-25 16:53:33 +02:00
Harald Bamberger 31426d3c5e Merge branch 'master' into feature-27351/Digitalisierung_Formulare_Neu 2023-09-25 16:50:40 +02:00
KarpAlex 972e9b7025 UHSTAT1 form: nations with sperre = true are not loaded 2023-09-25 16:45:39 +02:00
ma0068 be3e4e552b Adapt diffTageMax 2023-09-25 15:44:48 +02:00
ma0068 b1f3916e49 Adaptierung bismax-Validierung 2023-09-25 15:33:17 +02:00
ma0068 746ee76a3b Validierungen Von- und Bis-Felder vilesci 2023-09-25 15:11:14 +02:00
ma0068 f71b0e500e Adaptierung Berechnung diff 2023-09-25 14:15:33 +02:00
ma0068 9eeeeca62c Fix format 2023-09-25 09:54:49 +02:00
ma0068 9b11b19cf9 Zeitsperre: Maxwert bei Bisdatum 2023-09-22 13:33:54 +02:00
ma0068 e886b4742b Neue Mailvorlagen Sancho_Mail_Antrag_U_Student(SB) 2023-09-19 14:56:30 +02:00
ma0048 91f3197c24 - added link option
- styling
2023-09-14 11:56:26 +02:00
ma0048 0e1f4148f5 - anpassungen fuer bewerberautofill 2023-09-07 14:34:20 +02:00
ma0048 07deb7b6c5 - textanpassung 2023-09-04 13:34:42 +02:00
cgfhtw 7f0d716bd8 Finale Finalisierung Emailvariablen 2023-08-31 09:25:17 +02:00
cgfhtw 60246100e6 Bugfix: missing phrases 2023-08-31 09:24:43 +02:00
cgfhtw f81c9939f7 config default wert korrigiert 2023-08-31 08:39:21 +02:00
ma0068 1b1f45e690 bugfix Studiengang 2023-08-31 08:33:17 +02:00
ma0068 20aaefffb1 Finalisierung Emailvariablen 2023-08-29 16:50:02 +02:00
cgfhtw e6be6e19d1 Abmeldung PDF-Vorlage: Studiensemester added 2023-08-22 11:30:54 +02:00
cgfhtw 754ed07621 anzeige Lehrverband nach setUnterrbrecher im Fas 2023-08-22 11:18:47 +02:00
cgfhtw bf6fc52fcf Studierendenseite: Reihenfolge WH, Unterbrechung, Abmeldung; wording von du du auf indirekt 2023-08-22 11:18:35 +02:00
cgfhtw 294bfeb2e4 Sancho Mail Antrag_W_Student
Aufnahme der angerechneten bzw. neu zu absolvierenden LVs
2023-08-22 11:18:05 +02:00
cgfhtw b9bf2487c2 Stg-Ansicht: Status styled as link
Stg-Ansicht: Status styled as link
2023-08-22 11:13:56 +02:00
cgfhtw 8da161120f Abmeldung (Stg): Suche auch nach student_uid 2023-08-22 11:11:38 +02:00
ma0068 b468f01d0e Lv-zuweisung Breite vergrössert, Prestudent Status Unterbrechungssemester vor Vorrückung 2023-08-18 11:34:38 +02:00
ma0068 376ce0e440 WH: nur positive Noten bei intern angerechnet zulassen 2023-08-17 14:13:30 +02:00
ma0068 4a505631de Kein Verzicht bei Wiederholung 2023-08-17 13:54:34 +02:00
ma0068 1d938ea33d Anzeige following Studiensemester Wiedereinstieg 2023-08-17 13:46:58 +02:00
ma0068 70aa0a9c9c neue Mail an Assistenz: AbbrecherStgl 2023-08-17 13:18:06 +02:00
ma0068 743ba83148 Anzeige Studiensemester Abmeldung 2023-08-17 11:18:51 +02:00
ma0068 c7d2608cce Adaptierung Buttons: Zurückziehen Stgl und Ausblenden Anträge STGL nicht genehmigt Studentview 2023-08-17 11:10:09 +02:00
ma0068 672ee59ba5 neuer Hinweistext mit Einspruchsfrist für Abmeldung Stgl 2023-08-17 10:34:28 +02:00
cgfhtw 95e8859896 Bug Hotfix 2023-08-17 09:50:33 +02:00
ma0068 9aa5f701f7 phrasenupdate 2023-08-17 09:24:15 +02:00
ma0068 fcd3733f3c AbmeldungStgl GrundDropdown 2023-08-17 09:12:30 +02:00
KarpAlex 8122ab0292 simplified error message for invalid status dates 2023-08-15 19:27:39 +02:00
KarpAlex 3ea74ab23c Bismeldestichtage GUI: improved datepicker, correct Studiensemester sort, insertamum is set when inserting 2023-08-10 23:15:44 +02:00
cgfhtw 353e2deaf7 AbortController 2023-08-10 11:02:45 +02:00
cgfhtw f9be090bbf Studierendenansicht: nur STGs anzeigen bei denen ein Status "Student" vorhanden ist. 2023-08-08 16:59:42 +02:00
cgfhtw b77e715bdb Font Awesome + Buttons in Studierendenansicht korrigiert 2023-08-08 16:26:15 +02:00
cgfhtw c9e947831e PDF Unterbrechung: Auch in status EmailVersandt abrufbar 2023-08-08 16:16:09 +02:00
cgfhtw 44141ce8d8 PDF Download "Abmeldung durch Stgl" 2023-08-08 16:08:15 +02:00
cgfhtw 9dc36af7fc Umlaute & Genehmigt => Bestätigt 2023-08-08 15:37:20 +02:00
cgfhtw 5c018e204e Lv Popup optische Verbesserungen 2023-08-08 15:12:23 +02:00
cgfhtw 61c6245e1a Phrasen: Antrag => Bekanntgabe 2023-08-08 14:39:05 +02:00
cgfhtw da0dc0e053 Missing Phrase Category in Controller 2023-08-07 13:05:13 +02:00
cgfhtw d0d42a6a15 Unterbrecher - Wiedereintrittssemester Dropdown 2023-08-04 14:11:03 +02:00
Harald Bamberger 9550457b24 Merge branch 'master' into feature-27351/Digitalisierung_Formulare_Neu 2023-08-03 18:20:05 +02:00
Harald Bamberger d1eaebba33 Merge branch 'master' into feature-27351/Digitalisierung_Formulare_Neu 2023-08-03 18:18:43 +02:00
cgfhtw af24ef1517 Bug: neue Unterbrechung 2023-07-31 09:08:33 +02:00
KarpAlex 459f068765 bismeldestichtag gui: added icon to delete button, added id field 2023-07-26 20:59:05 +02:00
cgfhtw 02b64ad6a7 Assistenz kann eigene Abmeldungen Zurückziehen 2023-07-25 13:59:18 +02:00
cgfhtw 7239113847 Optionaler Grund bei Einspruch ablehnen 2023-07-25 13:42:38 +02:00
cgfhtw 8c98cea114 semicolon 2023-07-25 13:37:03 +02:00
ma0068 6eaa8c4c01 Codesniffer and MassDetector 2023-07-24 16:04:46 +02:00
cgfhtw 5d97abc6ac Mails 2023-07-20 16:55:09 +02:00
cgfhtw b4370ece82 Comment added 2023-07-20 15:07:46 +02:00
cgfhtw 8923a099cc Sammelmail Stgl & Calltoactions in Student view 2023-07-20 15:04:49 +02:00
cgfhtw 5670bac3f6 Don't allow canceling of Stg Abmeldungen 2023-07-20 15:04:18 +02:00
cgfhtw 35d01b042e Bug canCancel in abmeldung->edit missing 2023-07-20 15:00:42 +02:00
KarpAlex c2962f51e1 Bismeldestichtag gui: added vue date picker 2023-07-17 21:03:51 +02:00
ma0068 5e6262da56 Config für Datum Start Digitalisierung, finish handleWiederholerDeadline, start Sammelmail an Stgl 2023-07-17 16:29:03 +02:00
KarpAlex c6fee48c8c bismeldestichtage GUI: correct date format on row click 2023-07-17 12:31:45 +02:00
KarpAlex 7ab5d3add6 Bismeldestichtage Management GUI: added row delete button 2023-07-17 12:11:15 +02:00
cgfhtw a96d99bcd1 Sammelmails: draft 2023-07-13 16:51:54 +02:00
cgfhtw a53ca81784 Wording Änderung bei Studierendenansicht Wiederholung 2023-07-13 16:51:14 +02:00
cgfhtw b04aefc105 Unterbrechung nur für das Aktuelle und kommende Semester 2023-07-13 16:13:40 +02:00
cgfhtw 9d0801676d Bug: Studierenden-Ansicht: Abmeldung bearbeiten bei mehrfachen Abmeldungen 2023-07-13 14:44:51 +02:00
cgfhtw c8fc6c747f Table height & Bug: Allowed/Shown Stgs in Component 2023-07-13 13:57:17 +02:00
cgfhtw f8da119ad7 Abmeldung: Einspruch Abgelehnt handling 2023-07-13 11:48:25 +02:00
ma0068 6f1eed6696 Abbrecher 2dos: Änderungen Wordings, neue Statusgründe preabbrecher, durchStgl, durchStud, update setAbbrecher 2023-07-11 17:01:22 +02:00
ma0068 f438d240f9 Update Wording Antrag -> Verwaltung, Genehmigen-> Bestätigen, Überspringen Button Ausblenden 2023-07-11 13:07:54 +02:00
cgfhtw 1aa78386f4 erledigte TODOs entfernt 2023-07-11 08:33:05 +02:00
cgfhtw 2213fed5b2 Phrasen 2023-07-10 16:39:20 +02:00
cgfhtw cb1c4d01e0 phrasen: dokumente 2023-07-10 14:45:31 +02:00
cgfhtw 3219f43e6d Fehlerhafte Anzeige bei Download von Anträgen 2023-07-10 14:36:54 +02:00
cgfhtw 25258f7d87 E-Mail Reminder für Wiederholer sollen an die FH Adresse des Studierenden geschickt werden 2023-07-10 14:27:50 +02:00
cgfhtw 15786dd772 CIS URLs in Sancho mails 2023-07-10 14:03:03 +02:00
cgfhtw e6a1ea621e Bug: Semester in PDFs 2023-07-10 13:52:29 +02:00
cgfhtw eee3aa08e4 Zugriffsrechte für Abbrecher & Unterbrecher 2023-07-10 13:52:05 +02:00
cgfhtw 1006132451 Infomail 2023-07-10 11:19:21 +02:00
cgfhtw 3fce448451 Abmeldung durch Stgl: status => typ 2023-07-10 10:19:06 +02:00
cgfhtw 5eca034911 clean up 2023-07-10 09:29:00 +02:00
cgfhtw 761af30a75 speed up student selection 2023-07-10 09:21:12 +02:00
cgfhtw 573a8d8e33 composer lock 2023-07-10 09:09:46 +02:00
KarpAlex b7a1add2f3 bismeldestichtage gui: removed filters, now just simple tabulator 2023-07-07 02:12:14 +02:00
KarpAlex 8a1de56dc2 Merge branch 'feature-28886/Filter_Component_vs_Table_Component' into feature-29144/Prestudent_status_nach_Bismeldung_sperren 2023-07-06 22:54:48 +02:00
ma0068 1e0e93dfa3 Autocomplete Add-Button Finish 2023-07-05 13:20:46 +02:00
cgfhtw 61856473ea Leitungsansicht Autocomplete 1st draft 2023-07-05 08:30:33 +02:00
cgfhtw 3ca80904ea Verbesserungen Unterbrecher bestätigen 2023-07-04 15:59:43 +02:00
cgfhtw 3798720ee0 +emit: click:new 2023-07-04 14:38:20 +02:00
cgfhtw 7eed07a682 LV zuweisung & anzeige: handle semester above max_semester & anmerkung bug 2023-07-04 13:37:54 +02:00
cgfhtw ff93cb26fe Bug: status 2023-07-04 11:10:26 +02:00
cgfhtw b39fa7667e Remove TODO 2023-07-04 11:09:55 +02:00
cgfhtw 16356d8a5c reverse order setColumns & setData 2023-07-04 10:42:06 +02:00
cgfhtw 64ce3d1f6a Cleaned up commit from 'feature-27351/Digitalisierung_Formulare_Abmeldung_Unterbrechung_Wiederholung' 2023-07-04 10:34:14 +02:00
KarpAlex f6661fabea bismeldestichtage GUI: added delete button again (for now...) 2023-06-30 13:33:52 +02:00
KarpAlex 74814db900 Bismeldestichtag Management: improved GUI layout, studiensemester is optional for "bismeldestichtag reached" check 2023-06-29 19:19:00 +02:00
KarpAlex 18d25069f3 tbl_bismeldestichtag: removed edit permissions for web user 2023-06-29 19:17:38 +02:00
KarpAlex 097010290d Merge branch 'master' into feature-29144/Prestudent_status_nach_Bismeldung_sperren 2023-06-29 11:47:56 +02:00
KarpAlex f29d5a7b50 Bismeldestichtage management: added menu entry, changed size of filter widget table to auto 2023-06-17 21:00:52 +02:00
KarpAlex f865d09033 manage Bismeldestichtage: added possibility to delete a report target date 2023-06-13 16:14:38 +02:00
KarpAlex fe9bf1dc8a Bismeldestichtag: prestudentstatus is displayed as inaktive in FAS list if Stichtag is reached, fixed comments 2023-06-11 11:07:28 +02:00
KarpAlex e6b47266b9 Added GUI for adding Bismeldestichtag 2023-06-10 21:40:28 +02:00
KarpAlex f95c5ec7cf added overview for editing Bismeldestichtage 2023-06-07 19:25:23 +02:00
KarpAlex df64ad30eb Merge branch 'master' into feature-29144/Prestudent_status_nach_Bismeldung_sperren 2023-06-07 18:48:38 +02:00
KarpAlex dd98434522 added new right for editing bismelden property, disabled bismelden checkbox in FAS if no right 2023-06-07 13:33:43 +02:00
KarpAlex c490aa0040 Revert "hide bismelden checkbox if no keine_studstatuspruefung right"
This reverts commit ae1817fc7b.
2023-06-07 13:31:30 +02:00
KarpAlex ae1817fc7b hide bismelden checkbox if no keine_studstatuspruefung right 2023-06-05 16:36:01 +02:00
KarpAlex 42197c39ed FAS prestudents status: check is Meldestichtag is reached and disable input if it is, bismeldestichtag table: added sequence primary key 2023-06-03 15:18:06 +02:00
ma0068 9e883a48a0 Adaptierungen Icalfiles Coole 2023-06-02 09:02:47 +02:00
ma0048 9f13f876ef - swd.php entfernt 2023-06-01 07:39:56 +02:00
ma0048 bf344df8d6 - abgabetool anpassungen 2023-06-01 07:12:40 +02:00
KarpAlex 0a179c963f bismeldestichtag: added meldestichtag_id to table, created bismeldestichtag class, improved comment for prestudentstatuschecks in studentDBML 2023-05-25 16:35:44 +02:00
cgfhtw be331d6200 Styles 2023-05-24 12:05:36 +02:00
KarpAlex f6f2defc8c Bismeldestichtag: added table 2023-05-23 18:48:18 +02:00
cgfhtw 94a15093ac New Button 2023-05-23 15:26:49 +02:00
cgfhtw d10a229b59 Slot for action buttons 2023-05-23 14:56:31 +02:00
cgfhtw 429c595e04 Reload Button 2023-05-22 11:59:26 +02:00
cgfhtw 4154df1704 Property to Enable/disable the download button 2023-05-19 14:47:05 +02:00
cgfhtw 76fd425027 assert valid nw-new-entry listener if side-menu is enabled 2023-05-16 14:12:46 +02:00
cgfhtw 38f2bb89a4 readability 2023-05-16 10:40:58 +02:00
cgfhtw 1568e619a5 Split the component to improve the quality, readability and maintainability 2023-05-16 10:33:31 +02:00
cgfhtw 2b363119c5 Split the component to improve the quality, readability and maintainability 2023-05-16 10:33:05 +02:00
Paolo 39137d1348 Load a model in the filter component controller to have the DB functionalities ready 2023-04-24 17:07:40 +02:00
Paolo 25313a8f52 Code quality check fixes 2023-03-23 14:34:37 +01:00
Paolo 1b53b17b48 Merge branch 'master' into feature-16354/TinyMCE_move_to_new_version 2023-03-22 16:43:56 +01:00
ma0048 406e1bebfe Merge branch 'master' of https://github.com/FH-Complete/FHC-Core into feature-20037/reihungstestjob_neue_studienplaene_werden_nicht_korrekt_zugeordnet 2022-11-15 15:11:44 +01:00
Paolo ac1df7691a - Added new view application/views/system/messages/FAShtmlWriteTemplate.php to be used with FAS/SeaMonkey and TinyMCE3
- Replaced TinyMCE V4 with V5
- Dropped TinyMCE V4
- Added new JS public/js/messaging/fasMessageWrite.js to be included by application/views/system/messages/FAShtmlWriteTemplate.php
2022-11-11 13:54:25 +01:00
Paolo 9c0d70fe89 Removed version 4 of tinymce 2022-11-08 12:01:05 +01:00
ma0048 a2c2eddf0d - sql angepasst 2022-10-12 11:18:05 +02:00
ma0048 1b49ea2a20 - rt job angepasst 2022-10-11 08:23:49 +02:00
174 changed files with 19456 additions and 1159 deletions
+8
View File
@@ -31,6 +31,14 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 20,
'requiredPermissions' => 'admin:w'
),
'bismeldestichtagsverwaltung' => array(
'link' => site_url('codex/Bismeldestichtag'),
'icon' => '',
'description' => 'BIS-Meldestichtagsverwaltung',
'expand' => true,
'sort' => 30,
'requiredPermissions' => 'admin:w'
)
)
),
+170
View File
@@ -0,0 +1,170 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
$config['frist_rueckzahlung_studiengebuer_WS'] = '15.10.';
$config['frist_rueckzahlung_studiengebuer_SS'] = '15.03.';
// TODO(chris): review this!
#$config['unterbrechung_dms'] = ['oe_kurzbz' => null, 'dokument_kurzbz' => null, 'kategorie_kurzbz' => null];
$config['unterbrechung_dms'] = ['oe_kurzbz' => null, 'dokument_kurzbz' => null, 'kategorie_kurzbz' => 'Akte'];
/**
* UPLOAD
*/
/**
* Allowed filetypes for attachment upload in unterbrechung antrag
*
* @var array An array of fileextensions
*/
$config['unterbrechung_dms_filetypes'] = ['jpg', 'pdf'];
/**
* GRADES
*/
/**
* On wiederholung the student must repeat certain lvs.
* This lvs will be graded with this id
*
* @var integer tbl_note.note
*/
$config['wiederholung_note_angerechnet'] = 19;
/**
* On wiederholung the student can not attend certain lvs.
* Those lvs will be graded with this id
*
* @var integer tbl_note.note
*/
$config['wiederholung_note_nicht_zugelassen'] = 20;
/**
* JOBS
*/
/**
* The Job will remind for every Unterbrecher who has a
* wiedereinstieg_datum between the date the Job is run
* and the modified date
* e.g.: If the Job is running on 2023-04-20 and the modifier
* is '+3 days' it will remind of everyone that
* has a wiedereinstiegs_datum between 2023-04-20 and 2023-04-23
*
* @var string A string formated as PHP DateTime modifier
* @see https://www.php.net/manual/de/datetime.modify.php
*/
$config['unterbrechung_job_remind_wiedereinstieg_date_modifier'] = '+3 days';
/**
* The Job will sent a request to everyone who faild the 3rd committee exam
* and respecting the given conditions (not repeated yet, stg not in blacklist)
* to decide if he/she will repeat or not
*
* First request
*
* @var string A string formated as PHP DateTime modifier
* @see https://www.php.net/manual/de/datetime.modify.php
*/
$config['wiederholung_job_request_1_date_modifier'] = '+0 days';
/**
* Second request
*
* @var string A string formated as PHP DateTime modifier
* @see https://www.php.net/manual/de/datetime.modify.php
*/
$config['wiederholung_job_request_2_date_modifier'] = '+3 weeks';
/**
* Final deadline - after this the student will be abgemeldet if he hasn't chosen yet
*
* @var string A string formated as PHP DateTime modifier
* @see https://www.php.net/manual/de/datetime.modify.php
*/
$config['wiederholung_job_deadline_date_modifier'] = '+1 month';
/**
* before this exam dates for Wiederholer will be ignored
*
* @var string A string formated as Date
*
*/
$config['digitalization_start'] = '2022-07-01';
/**
* Objection period - the student will be abgemeldet if he hasn't objected in this period
*
* @var string A string formated as PHP DateTime modifier
* @see https://www.php.net/manual/de/datetime.modify.php
*/
$config['abmeldung_job_deadline_date_modifier'] = '+2 weeks';
/**
* System User - uid of a user that is allowed to set prestudentstatus
*
* @var string
*/
$config['antrag_job_systemuser'] = '';
/**
* WHITELISTS
*/
/**
* List of stati who entitle a prestudent to create an Antrag
*
* @var array Array of tbl_status.status_kurzbz's
*/
$config['antrag_prestudentstatus_whitelist'] = ['Student', 'Diplomand'];
$config['antrag_prestudentstatus_whitelist_abmeldung'] = ['Student', 'Diplomand', 'Unterbrecher'];
/**
* BLACKLISTS
*/
/**
* List of Statusgründe that prevent a prestudent from create an Wiederholungsantrag
*
* @var array An array of tbl_status_grund.statusgrund_id's
*/
$config['status_gruende_wiederholer'] = [16, 15];
/**
* Blacklisted for abmeldung anträge
*
* @var array An array of tbl_studiengang.studiengang_kz's
*/
$config['stgkz_blacklist_abmeldung'] = [];
/**
* Blacklisted for unterbrechung anträge
*
* @var array An array of tbl_studiengang.studiengang_kz's
*/
$config['stgkz_blacklist_unterbrechung'] = [];
/**
* Blacklisted for wiederholung anträge
*
* @var array An array of tbl_studiengang.studiengang_kz's
*/
$config['stgkz_blacklist_wiederholung'] = [];
/**
* Blacklisted noten for negative committee exams
* noten with this ids won't be seen as negative
*
* @var array An array of noten ids
*/
$config['note_blacklist_wiederholung'] = [];
@@ -0,0 +1,140 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Overview on Bismeldestichtage
*/
class Bismeldestichtag extends Auth_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct(
array(
'index' => 'admin:r',
'getStudiensemester' => 'admin:r',
'getBismeldestichtage' => 'admin:r',
'addBismeldestichtag' => 'admin:rw',
'deleteBismeldestichtag' => 'admin:rw'
)
);
// Load models
$this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
// Loads phrases system
$this->loadPhrases(
array(
'bismeldestichtag'
)
);
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Everything has a beginning
*/
public function index()
{
$this->load->view('codex/bismeldestichtag.php');
}
public function getStudiensemester()
{
// load semester list
$semList = array();
$this->StudiensemesterModel->addSelect('studiensemester_kurzbz');
$this->StudiensemesterModel->addOrder('start', 'DESC');
$semRes = $this->StudiensemesterModel->load();
if (hasData($semRes))
{
$semList = getData($semRes);
}
// load current semester
$currSem = null;
$semRes = $this->StudiensemesterModel->getAkt();
if (hasData($semRes))
{
$currSem = getData($semRes)[0]->studiensemester_kurzbz;
}
// output data
$this->outputJsonSuccess(
array('semList' => $semList, 'currSem' => $currSem)
);
}
public function getBismeldestichtage()
{
$this->BismeldestichtagModel->addSelect(
'meldestichtag_id, meldestichtag,
tbl_bismeldestichtag.studiensemester_kurzbz, sem.start AS semester_start,
tbl_bismeldestichtag.insertamum, tbl_bismeldestichtag.insertvon, tbl_bismeldestichtag.updateamum, tbl_bismeldestichtag.updatevon'
);
$this->BismeldestichtagModel->addJoin('public.tbl_studiensemester sem', 'studiensemester_kurzbz', 'LEFT');
$this->BismeldestichtagModel->addOrder('semester_start');
$this->BismeldestichtagModel->addOrder('meldestichtag', 'DESC');
$this->BismeldestichtagModel->addOrder('meldestichtag_id', 'DESC');
$this->outputJson($this->BismeldestichtagModel->load());
}
public function addBismeldestichtag()
{
// get request data
$request = $this->getPostJSON();
// check request data
if (!property_exists($request, 'meldestichtag') || isEmptyString($request->meldestichtag))
$this->terminateWithJsonError('Error occured: Meldestichtag missing');
if (!property_exists($request, 'studiensemester_kurzbz') || isEmptyString($request->studiensemester_kurzbz))
$this->terminateWithJsonError('Error occured: Studiensemester missing');
$meldestichtag = $request->meldestichtag;
$studiensemester_kurzbz = $request->studiensemester_kurzbz;
// check if Bismeldestichtag already exists
$this->BismeldestichtagModel->addSelect('1');
$bismeldestichtagRes = $this->BismeldestichtagModel->loadWhere(
array('meldestichtag' => $meldestichtag, 'studiensemester_kurzbz' => $studiensemester_kurzbz)
);
// return success if already exists
if (hasData($bismeldestichtagRes))
$this->outputJsonSuccess('Bismeldestichtag already exists');
else
{
// insert new if Stichtag does not exist
$this->outputJson($this->BismeldestichtagModel->insert(
array(
'meldestichtag' => $request->meldestichtag,
'studiensemester_kurzbz' => $request->studiensemester_kurzbz,
'insertvon' => getAuthUID()
)
));
}
}
public function deleteBismeldestichtag()
{
// get request data
$request = $this->getPostJSON();
// check request data
if (!property_exists($request, 'meldestichtag_id'))
$this->terminateWithJsonError('Error occured: Meldestichtag Id missing');
$meldestichtag_id = $request->meldestichtag_id;
// deletetion
$this->outputJson($this->BismeldestichtagModel->delete($meldestichtag_id));
}
}
+1 -1
View File
@@ -321,7 +321,7 @@ class UHSTAT1 extends FHC_Controller
$this->NationModel->addSelect("nation_code, $nationTextFieldName AS nation_text");
$this->NationModel->addOrder("nation_text");
$nationRes = $this->NationModel->load();
$nationRes = $this->NationModel->loadWhere('sperre IS NULL OR sperre = FALSE');
if (isError($nationRes)) return $nationRes;
@@ -0,0 +1,218 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \Studierendenantrag_model as Studierendenantrag_model;
/**
*
*/
class Abmeldung extends FHC_Controller
{
/**
* Calls the parent's constructor and loads the FilterCmptLib
*/
public function __construct()
{
parent::__construct();
// Libraries
$this->load->library('AuthLib');
$this->load->library('AntragLib');
// Load language phrases
$this->loadPhrases([
'studierendenantrag'
]);
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Retrieves data of the current studiengang for the current user
*/
public function getDetailsForNewAntrag($prestudent_id)
{
if (!$this->antraglib->isEntitledToCreateAntragFor($prestudent_id, true)) {
$this->output->set_status_header(403);
return $this->outputJsonError('Forbidden');
}
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($prestudent_id);
if (isError($result)) {
$this->output->set_status_header(500);
return $this->outputJsonError(getError($result));
}
$result = $result->retval;
if (!$result) {
$this->output->set_status_header(403);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_no_student'));
}
elseif ($result == -3)
{
$this->output->set_status_header(403);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_stg_blacklist'));
}
elseif ($result == -1)
{
$result = $this->antraglib->getDetailsForLastAntrag(
$prestudent_id,
[
Studierendenantrag_model::TYP_ABMELDUNG,
Studierendenantrag_model::TYP_ABMELDUNG_STGL
]
);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
$data->canCancel = (
$data->status == Studierendenantragstatus_model::STATUS_CREATED &&
$this->antraglib->isEntitledToCancelAntrag($data->studierendenantrag_id)
);
return $this->outputJsonSuccess($data);
}
$result = $this->antraglib->getDetailsForNewAntrag($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$this->outputJsonSuccess(getData($result));
}
public function getDetailsForAntrag($studierendenantrag_id)
{
if (!$this->antraglib->isEntitledToShowAntrag($studierendenantrag_id)) return show_404();
$result = $this->antraglib->getDetailsForAntrag($studierendenantrag_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
if ($data->typ !== Studierendenantrag_model::TYP_ABMELDUNG_STGL && $data->typ !== Studierendenantrag_model::TYP_ABMELDUNG)
return show_404();
$data->canCancel = (
$data->status == Studierendenantragstatus_model::STATUS_CREATED &&
$this->antraglib->isEntitledToCancelAntrag($data->studierendenantrag_id)
);
$this->outputJsonSuccess($data);
}
public function createAntrag()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules('studiensemester', 'Studiensemester', 'required');
$this->form_validation->set_rules('prestudent_id', 'Prestudent ID', 'required');
$this->form_validation->set_rules('grund', 'Grund', 'required');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$grund = $this->input->post('grund');
$studiensemester = $this->input->post('studiensemester');
$prestudent_id = $this->input->post('prestudent_id');
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $result->retval;
if (!$result)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_no_student')]);
}
elseif ($result == -3)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_stg_blacklist')]);
}
elseif ($result < 0)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_antrag_exists')]);
}
$result = $this->antraglib->createAbmeldung($prestudent_id, $studiensemester, getAuthUID(), $grund);
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $this->antraglib->getDetailsForAntrag(getData($result));
if (!hasData($result))
return $this->outputJsonSuccess(true);
$data = getData($result);
$data->canCancel = (boolean)$this->antraglib->isEntitledToCancelAntrag($data->studierendenantrag_id);
$this->outputJsonSuccess($data);
}
public function cancelAntrag()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules('antrag_id', 'Antrag ID', 'required');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$antrag_id = $this->input->post('antrag_id');
if(!$this->antraglib->isEntitledToCancelAntrag($antrag_id))
{
$this->output->set_status_header(403);
return $this->outputJsonError('Forbidden');
}
$result = $this->antraglib->cancelAntrag($antrag_id, getAuthUID());
if(isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $this->antraglib->getDetailsForAntrag($antrag_id);
if (!hasData($result))
return $this->outputJsonSuccess($antrag_id);
$this->outputJsonSuccess(getData($result));
}
public function getStudiengaengeAssistenz()
{
$this->load->library('PermissionLib');
$_POST = json_decode($this->input->raw_input_stream, true);
$query = $this->input->post('query');
$studiengaenge = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag');
$result = $this->antraglib->getAktivePrestudentenInStgs($studiengaenge, $query);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$result = getData($result);
if (!$result) {
return $this->outputJsonSuccess([]);
}
return $this->outputJsonSuccess($result);
}
}
@@ -0,0 +1,389 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \stdClass as stdClass;
/**
*
*/
class Leitung extends FHC_Controller
{
/**
* Calls the parent's constructor and loads the FilterCmptLib
*/
public function __construct()
{
parent::__construct();
// Libraries
$this->load->library('AuthLib');
$this->load->library('AntragLib');
// Load language phrases
$this->loadPhrases([
'studierendenantrag'
]);
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
public function getActiveStgs()
{
$studiengaenge = $this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe') ?: [];
$studiengaenge = array_merge($studiengaenge, $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag') ?: []);
$result = $this->StudierendenantragModel->loadStgsWithAntraege($studiengaenge);
if (isError($result)) {
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
}
$this->outputJson($result);
}
public function getAntraege($studiengang = null, $extra = null)
{
if ($studiengang && $studiengang == 'todo') {
$studiengang = $extra;
$extra = true;
} else {
$extra = false;
}
if ($studiengang) {
$studiengaenge = [$studiengang];
} else {
$studiengaenge =$this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe');
if(!is_array($studiengaenge))
$studiengaenge = [];
$stgsNeuanlage = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag');
if(!is_array($stgsNeuanlage))
$stgsNeuanlage = [];
$studiengaenge = array_unique(array_merge($studiengaenge, $stgsNeuanlage));
}
$antraege = [];
if ($studiengaenge) {
$result = $extra
? $this->StudierendenantragModel->loadActiveForStudiengaenge($studiengaenge)
: $this->StudierendenantragModel->loadForStudiengaenge($studiengaenge);
if (isError($result)) {
$this->output->set_status_header(500);
return $this->outputJson('Internal Server Error');
}
if(hasData($result))
{
$antraege = getData($result);
}
}
$this->outputJson($antraege);
}
public function reopenAntrag()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToReopenAntrag',
[
'isEntitledToReopenAntrag' => $this->p->t('studierendenantrag', 'error_no_right')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->reopenWiederholung($studierendenantrag_id, getAuthUID());
if (isError($result))
return $this->outputJsonError(['studierendenantrag_id' => getError($result)]);
$this->outputJsonSuccess($studierendenantrag_id);
}
public function objectAntrag()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToObjectAntrag|callback_canBeObjected',
[
'isEntitledToObjectAntrag' => $this->p->t('studierendenantrag', 'error_no_right'),
'canBeObjected' => $this->p->t('studierendenantrag', 'error_no_objection')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->objectAbmeldung($studierendenantrag_id, getAuthUID());
if (isError($result))
return $this->outputJsonError(['studierendenantrag_id' => getError($result)]);
$this->outputJsonSuccess($studierendenantrag_id);
}
public function objectionDeny()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToObjectAntrag|callback_isObjected',
[
'isEntitledToObjectAntrag' => $this->p->t('studierendenantrag', 'error_no_right'),
'isObjected' => $this->p->t('studierendenantrag', 'error_not_objected')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$grund = $this->input->post('grund');
$result = $this->antraglib->denyObjectionAbmeldung($studierendenantrag_id, getAuthUID(), $grund);
if (isError($result))
return $this->outputJsonError(['studierendenantrag_id' => getError($result)]);
$this->outputJsonSuccess($studierendenantrag_id);
}
public function objectionApprove()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToObjectAntrag|callback_isObjected',
[
'isEntitledToObjectAntrag' => $this->p->t('studierendenantrag', 'error_no_right'),
'isObjected' => $this->p->t('studierendenantrag', 'error_not_objected')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->cancelAntrag($studierendenantrag_id, getAuthUID());
if (isError($result))
return $this->outputJsonError(['studierendenantrag_id' => getError($result)]);
$this->outputJsonSuccess($studierendenantrag_id);
}
public function isEntitledToReopenAntrag($studierendenantrag_id)
{
return $this->antraglib->isEntitledToReopenAntrag($studierendenantrag_id);
}
public function isEntitledToObjectAntrag($studierendenantrag_id)
{
return $this->antraglib->isEntitledToObjectAntrag($studierendenantrag_id);
}
public function isEntitledToRejectAntrag($studierendenantrag_id)
{
return $this->antraglib->isEntitledToRejectAntrag($studierendenantrag_id);
}
public function canBeObjected($studierendenantrag_id)
{
return $this->antraglib->hasType($studierendenantrag_id, Studierendenantrag_model::TYP_ABMELDUNG_STGL);
}
public function isObjected($studierendenantrag_id)
{
return $this->antraglib->hasStatus($studierendenantrag_id, Studierendenantragstatus_model::STATUS_OBJECTED);
}
public function approveAbmeldung()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToApproveAntrag',
[
'isEntitledToApproveAntrag' => $this->p->t('studierendenantrag', 'error_no_right')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->approveAbmeldung([$studierendenantrag_id], getAuthUID());
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
return $this->outputJsonSuccess($studierendenantrag_id);
}
public function approveAbmeldungStgl()
{
return $this->approveAbmeldung();
}
public function approveUnterbrechung()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToApproveAntrag',
[
'isEntitledToApproveAntrag' => $this->p->t('studierendenantrag', 'error_no_right')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->approveUnterbrechung([$studierendenantrag_id], getAuthUID());
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
return $this->outputJsonSuccess($studierendenantrag_id);
}
public function rejectUnterbrechung()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToRejectAntrag',
[
'isEntitledToRejectAntrag' => $this->p->t('studierendenantrag', 'error_no_right')
]
);
$this->form_validation->set_rules('grund', 'Grund', 'required');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$grund = $this->input->post('grund');
$result = $this->antraglib->rejectUnterbrechung([$studierendenantrag_id], getAuthUID(), $grund);
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
return $this->outputJsonSuccess($studierendenantrag_id);
}
public function approveWiederholung()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
'required|callback_isEntitledToApproveAntrag',
[
'isEntitledToApproveAntrag' => $this->p->t('studierendenantrag', 'error_no_right')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->approveWiederholung($studierendenantrag_id, getAuthUID());
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
return $this->outputJsonSuccess($studierendenantrag_id);
}
public function isEntitledToApproveAntrag($studierendenantrag_id)
{
return $this->antraglib->isEntitledToApproveAntrag($studierendenantrag_id);
}
public function getHistory($studierendenantrag_id)
{
if (!$this->antraglib->isEntitledToSeeHistoryForAntrag($studierendenantrag_id)) {
$this->output->set_status_header(403);
return $this->outputJson('Forbidden');
}
$result = $this->antraglib->getAntragHistory($studierendenantrag_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$this->outputJsonSuccess(getData($result) ?: []);
}
}
@@ -0,0 +1,233 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \Studierendenantrag_model as Studierendenantrag_model;
use \DateTime as DateTime;
/**
*
*/
class Unterbrechung extends FHC_Controller
{
/**
* Calls the parent's constructor and loads the FilterCmptLib
*/
public function __construct()
{
parent::__construct();
// Configs
$this->load->config('studierendenantrag');
// Libraries
$this->load->library('AuthLib');
$this->load->library('AntragLib');
// Load language phrases
$this->loadPhrases([
'studierendenantrag',
'ui'
]);
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
public function getDetailsForNewAntrag($prestudent_id)
{
if (!$this->antraglib->isEntitledToCreateAntragFor($prestudent_id, false)) {
$this->output->set_status_header(403);
return $this->outputJsonError('Forbidden');
}
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($prestudent_id);
if (isError($result)) {
$this->output->set_status_header(500);
return $this->outputJsonError(getError($result));
}
$result = $result->retval;
if (!$result) {
$this->output->set_status_header(403);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_no_student'));
}
elseif ($result == -1)
{
$result = $this->antraglib->getDetailsForLastAntrag($prestudent_id, Studierendenantrag_model::TYP_UNTERBRECHUNG);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
return $this->outputJsonSuccess(getData($result));
}
elseif ($result == -2)
{
$result = $this->antraglib->getDetailsForLastAntrag($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$result = getData($result);
$this->output->set_status_header(400);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_antrag_pending', [
'typ' => $this->p->t('studierendenantrag', 'antrag_typ_' . $result->typ)
]));
}
elseif ($result == -3)
{
$this->output->set_status_header(403);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_stg_blacklist'));
}
$result = $this->antraglib->getDetailsForNewAntrag($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
$data->studiensemester = $this->antraglib->getSemesterForUnterbrechung($data->studiensemester_kurzbz);
$this->outputJsonSuccess($data);
}
public function getDetailsForAntrag($studierendenantrag_id)
{
if (!$this->antraglib->isEntitledToShowAntrag($studierendenantrag_id)) return show_404();
$result = $this->antraglib->getDetailsForAntrag($studierendenantrag_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
if ($data->typ !== Studierendenantrag_model::TYP_UNTERBRECHUNG)
return show_404();
$this->outputJsonSuccess($data);
}
public function createAntrag()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('studiensemester', 'Studiensemester', 'required');
$this->form_validation->set_rules('prestudent_id', 'Prestudent ID', 'required');
$this->form_validation->set_rules('grund', 'Grund', 'required');
$this->form_validation->set_rules(
'datum_wiedereinstieg',
'Datum Wiedereinstieg',
'required|callback_isValidDate|callback_isDateInFuture',
[
'isValidDate' => $this->p->t('ui', 'error_invalid_date'),
'isDateInFuture' => $this->p->t('ui', 'error_invalid_date')
]
);
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$grund = $this->input->post('grund');
$studiensemester = $this->input->post('studiensemester');
$prestudent_id = $this->input->post('prestudent_id');
$datum_wiedereinstieg = $this->input->post('datum_wiedereinstieg');
$dms_id = null;
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $result->retval;
if (!$result)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_no_student')]);
}
elseif ($result == -3)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_stg_blacklist')]);
}
elseif ($result < 0)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_antrag_exists')]);
}
if(isset($_FILES['attachment']) && (!isset($_FILES['attachment']['error']) || $_FILES['attachment']['error'] != UPLOAD_ERR_NO_FILE))
{
$this->load->library('DmsLib');
$dms = $this->config->item('unterbrechung_dms');
if (!count(array_filter($dms, function ($v) {
return $v !== null;
})))
$dms = ['kategorie_kurzbz' => 'Akte'];
$dms['version'] = 0;
$allowed_filetypes = $this->config->item('unterbrechung_dms_filetypes') ?: ['*'];
$result = $this->dmslib->upload($dms, 'attachment', $allowed_filetypes);
if(isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$dms_id = getData($result)['dms_id'];
}
$result = $this->antraglib->createUnterbrechung($prestudent_id, $studiensemester, getAuthUID(), $grund, $datum_wiedereinstieg, $dms_id);
if(isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$antragId = getData($result);
$result = $this->antraglib->getDetailsForAntrag($antragId);
if(!hasData($result))
return $this->outputJsonSuccess($antragId);
$this->outputJsonSuccess(getData($result));
}
public function cancelAntrag()
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules('antrag_id', 'Antrag ID', 'required');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$antrag_id = $this->input->post('antrag_id');
$result = $this->antraglib->cancelAntrag($antrag_id, getAuthUID());
if (isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $this->antraglib->getDetailsForAntrag($antrag_id);
if (!hasData($result))
return $this->outputJsonSuccess($antrag_id);
$this->outputJsonSuccess(getData($result));
}
public function isValidDate($date)
{
try {
new DateTime($date);
} catch (Exception $e) {
return false;
}
return true;
}
public function isDateInFuture($date)
{
return new DateTime() < new DateTime($date);
}
}
@@ -0,0 +1,371 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \REST_Controller as REST_Controller;
/**
*
*/
class Wiederholung extends FHC_Controller
{
/**
* Calls the parent's constructor and loads the FilterCmptLib
*/
public function __construct()
{
parent::__construct();
// Configs
$this->load->config('studierendenantrag');
// Libraries
$this->load->library('AuthLib');
$this->load->library('PermissionLib');
$this->load->library('AntragLib');
$requiredPermissions = [
'saveLvs' => ['student/studierendenantrag:w'],
'getLvsAsRdf' => ['student/studierendenantrag:r', 'student/noten:r'],
'moveLvsToZeugnis' => ['student/studierendenantrag:w', 'student/noten:w']
];
if (isset($requiredPermissions[$this->router->method])) {
if (!$this->permissionlib->isEntitled($requiredPermissions, $this->router->method)) {
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
$this->outputJson('Forbidden');
exit;
}
}
// Load language phrases
$this->loadPhrases([
'global',
'studierendenantrag'
]);
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Retrieves data of the current studiengang for the current user
*/
public function getDetailsForNewAntrag($prestudent_id)
{
if (!$this->antraglib->isEntitledToCreateAntragFor($prestudent_id, false)) {
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
return $this->outputJsonError('Forbidden');
}
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($prestudent_id);
if (isError($result)) {
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJsonError(getError($result));
}
$result = $result->retval;
if (!$result) {
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_no_student_no_failed_exam'));
}
elseif ($result == -1)
{
$result = $this->antraglib->getDetailsForLastAntrag($prestudent_id, Studierendenantrag_model::TYP_WIEDERHOLUNG);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
$result = $this->antraglib->getFailedExamForPrestudent($prestudent_id, $data->datum, $data->studiensemester_kurzbz);
// NOTE(chris): error handling for this function should already happenden in antraglib->getPrestudentWiederholungsBerechtigt()
$pruefungsdata = current(getData($result));
$data->studiensemester_kurzbz = $pruefungsdata->studiensemester_kurzbz;
$data->lvbezeichnung = $pruefungsdata->lvbezeichnung;
$data->pruefungsdatum = $pruefungsdata->datum;
return $this->outputJsonSuccess($data);
}
elseif ($result == -2)
{
$result = $this->antraglib->getDetailsForLastAntrag($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$result = getData($result);
$this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_antrag_pending', [
'typ' => $this->p->t('studierendenantrag', 'antrag_typ_' . $result->typ)
]));
}
elseif ($result == -3)
{
$this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST);
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_stg_blacklist'));
}
$result = $this->antraglib->getDetailsForNewAntrag($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
$result = $this->antraglib->getFailedExamForPrestudent($prestudent_id);
// NOTE(chris): error handling for this function should already happenden in antraglib->getPrestudentWiederholungsBerechtigt()
$pruefungsdata = current(getData($result));
$data->studiensemester_kurzbz = $pruefungsdata->studiensemester_kurzbz;
$data->lvbezeichnung = $pruefungsdata->lvbezeichnung;
$data->pruefungsdatum = $pruefungsdata->datum;
$this->outputJsonSuccess($data);
}
public function createAntrag()
{
$this->createAntragWithStatus(true);
}
public function cancelAntrag()
{
$this->createAntragWithStatus(false);
}
protected function createAntragWithStatus($repeat)
{
$this->load->library('form_validation');
$_POST = json_decode($this->input->raw_input_stream, true);
$this->form_validation->set_rules('prestudent_id', 'Prestudent ID', 'required');
$this->form_validation->set_rules('studiensemester', 'Studiensemester', 'required');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}
$prestudent_id = $this->input->post('prestudent_id');
$studiensemester = $this->input->post('studiensemester');
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($prestudent_id);
if (isError($result)) {
return $this->outputJsonError(['db' => getError($result)]);
}
$result = $result->retval;
if (!$result)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_no_student')]);
}
elseif ($result == -2)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_antrag_exists')]);
}
elseif ($result == -3)
{
return $this->outputJsonError(['db' => $this->p->t('studierendenantrag', 'error_stg_blacklist')]);
}
$result = $this->antraglib->createWiederholung($prestudent_id, $studiensemester, getAuthUID(), $repeat);
if(isError($result))
{
return $this->outputJsonError(['db' => getError($result)]);
}
$antragId = getData($result);
$result = $this->antraglib->getDetailsForAntrag($antragId);
if(!hasData($result))
return $this->outputJsonSuccess(true);
$data = getData($result);
$result = $this->antraglib->getFailedExamForPrestudent($prestudent_id);
// NOTE(chris): error handling for this function should already happenden in antraglib->getPrestudentWiederholungsBerechtigt()
$pruefungsdata = current(getData($result));
$data->studiensemester_kurzbz = $pruefungsdata->studiensemester_kurzbz;
$data->lvbezeichnung = $pruefungsdata->lvbezeichnung;
$data->pruefungsdatum = $pruefungsdata->datum;
$this->outputJsonSuccess($data);
}
public function getLvs($antrag_id)
{
$result = $this->antraglib->getLvsForAntrag($antrag_id);
if (isError($result)) {
$error = getError($result);
if ($error == 'Forbidden')
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
return $this->outputJsonError(getError($result));
}
$lvs = getData($result);
$this->outputJsonSuccess($lvs);
}
public function saveLvs()
{
$result = $this->getPostJSON();
$antragsLvs = array_merge($result->forbiddenLvs, $result->mandatoryLvs);
$insert = array_map(function ($lv) {
return [
'studierendenantrag_id' => $lv->studierendenantrag_id,
'lehrveranstaltung_id' => $lv->lehrveranstaltung_id,
'note' => $lv->zugelassen
? ($lv->zugelassen == 1 ? 0 : $this->config->item('wiederholung_note_angerechnet'))
: $this->config->item('wiederholung_note_nicht_zugelassen'),
'anmerkung' => $lv->anmerkung,
'insertvon' => getAuthUID(),
'studiensemester_kurzbz' => $lv->studiensemester_kurzbz
];
}, $antragsLvs);
$antrag_ids = array_unique(array_map(function ($lv) {
return $lv['studierendenantrag_id'];
}, $insert));
foreach ($antrag_ids as $antrag_id) {
$result = $this->StudierendenantragModel->loadIdAndStatusWhere([
'studierendenantrag_id' => $antrag_id
]);
if (isError($result))
return $this->outputJsonError(getError($result));
if (!hasData($result))
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_no_antrag_found', ['id' => $antrag_id]));
$antrag = current(getData($result));
if ($antrag->status != Studierendenantragstatus_model::STATUS_CREATED && $antrag->status != Studierendenantragstatus_model::STATUS_LVSASSIGNED)
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_antrag_locked'));
}
if(!$antragsLvs)
return $this->outputJsonError($this->p->t('studierendenantrag', 'error_no_lv'));
$result = $this->antraglib->saveLvs($insert);
if (isError($result))
return $this->outputJsonError(getError($result));
$this->outputJsonSuccess(getData($result));
}
public function getLvsAsRdf($prestudent_id)
{
// header für no cache
$this->output->set_header("Cache-Control: no-cache");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
$this->output->set_header("Pragma: no-cache");
$this->output->set_header("Content-type: application/xhtml+xml");
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$sem_akt = $this->variablelib->getVar('semester_aktuell');
$result = $this->antraglib->getLvsForPrestudent($prestudent_id, $sem_akt);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$lvs = getData($result) ?: [];
$rdf_url = 'http://www.technikum-wien.at/antragnote';
$this->load->view('lehre/Antrag/Wiederholung/getLvs.rdf.php', [
'url' => $rdf_url,
'lvs' => $lvs
]);
}
public function moveLvsToZeugnis()
{
$anzahl = $this->input->post('anzahl');
$student_uid = $this->input->post('student_uid');
$this->load->model('education/Studierendenantraglehrveranstaltung_model', 'StudierendenantraglehrveranstaltungModel');
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
$errormsg = array();
for($i=0; $i<$anzahl; $i++)
{
$id = $this->input->post('studierendenantrag_lehrveranstaltung_id_' . $i);
$result =$this->StudierendenantraglehrveranstaltungModel->load($id);
if(isError($result))
{
$errormsg[] = getError($result);
}
elseif(!hasData($result))
{
$errormsg[] = $this->p->t('studierendenantrag', 'error_no_lv_in_application');
}
else
{
$antragLv = getData($result)[0];
$result= $this->ZeugnisnoteModel->load([
'lehrveranstaltung_id'=> $antragLv->lehrveranstaltung_id,
'student_uid'=> $student_uid,
'studiensemester_kurzbz' => $antragLv->studiensemester_kurzbz
]);
if(isError($result))
{
$errormsg[] = getError($result);
}
else
{
if (hasData($result))
{
$result = $this->ZeugnisnoteModel->update(
[
'lehrveranstaltung_id'=> $antragLv->lehrveranstaltung_id,
'student_uid'=> $student_uid,
'studiensemester_kurzbz' => $antragLv->studiensemester_kurzbz
],
[
'note'=> $antragLv->note,
'uebernahmedatum' => date('c'),
'benotungsdatum' => $antragLv->insertamum,
'updateamum' => date('c'),
'bemerkung'=>$antragLv->anmerkung,
'updatevon'=>getAuthUID()
]
);
}
else
{
$result = $this->ZeugnisnoteModel->insert([
'lehrveranstaltung_id'=> $antragLv->lehrveranstaltung_id,
'student_uid'=> $student_uid,
'studiensemester_kurzbz' => $antragLv->studiensemester_kurzbz,
'note'=> $antragLv->note,
'uebernahmedatum' => date('c'),
'benotungsdatum' => $antragLv->insertamum,
'insertamum' => date('c'),
'bemerkung'=>$antragLv->anmerkung,
'insertvon'=>getAuthUID()
]);
}
if(isError($result))
{
$errormsg[] = getError($result);
}
}
}
}
if($errormsg)
$return = false;
else
$return = true;
$this->load->view('lehre/Antrag/Wiederholung/moveLvs.rdf.php', [
'return' => $return,
'errormsg' => $errormsg
]);
}
}
@@ -26,6 +26,9 @@ class Filter extends FHC_Controller
// Loads authentication library and starts authentication
$this->load->library('AuthLib');
// Loads the FiltersModel
$this->load->model('system/Filters_model', 'FiltersModel');
// Loads the FilterCmptLib with HTTP GET/POST parameters
$this->_startFilterCmptLib();
}
@@ -0,0 +1,22 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
*
*/
class Phrasen extends FHC_Controller
{
//------------------------------------------------------------------------------------------------------------------
// Public methods
/**
* @param string $module
*/
public function loadModule($module)
{
$this->load->library('PhrasesLib', [$module], 'pj');
$this->outputJsonSuccess(json_decode($this->pj->getJSON()));
}
}
+627
View File
@@ -0,0 +1,627 @@
<?php
if (!defined("BASEPATH")) exit("No direct script access allowed");
use \DateTime as DateTime;
class AntragJob extends JOB_Controller
{
/**
* API constructor
*/
public function __construct()
{
parent::__construct();
// Configs
$this->load->config('studierendenantrag');
// Loads SanchoHelper
$this->load->helper('hlp_sancho_helper');
// Load Model
$this->load->model('education/Studierendenantrag_model', 'StudierendenantragModel');
$this->load->model('education/Studierendenantragstatus_model', 'StudierendenantragstatusModel');
$this->load->model('education/Pruefung_model', 'PruefungModel');
$this->load->model('person/Kontakt_model', 'KontaktModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
}
/**
* Send infomail to Stgl
*/
public function sendStglSammelmail()
{
$this->load->model('person/Person_model', 'PersonModel');
$this->logInfo('Start Job sendStglSammelmail');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->StudierendenantragModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$this->db->group_start();
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG);
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
$this->db->group_end();
$this->db->or_group_start();
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
$this->db->group_end();
$this->db->or_group_start();
$this->db->where('typ', Studierendenantrag_model::TYP_UNTERBRECHUNG);
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
$this->db->group_end();
$this->db->or_group_start();
$this->db->where('typ', Studierendenantrag_model::TYP_WIEDERHOLUNG);
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_LVSASSIGNED);
$this->db->group_end();
$result = $this->StudierendenantragModel->load();
if(isError($result))
return $this->logError(getError($result));
if(!hasData($result))
return $this->logInfo('End Job sendStglSammelmail: 0 Mails sent');
$antraege = getData($result);
$stgs = array();
$stgLeitungen = array();
foreach ($antraege as $antrag)
{
if (!isset($stgs[$antrag->studiengang_kz]))
{
$result = $this->StudiengangModel->getLeitung($antrag->studiengang_kz);
if (isError($result))
{
$this->logError(getError($result));
continue;
}
if (!hasData($result))
{
$this->logError('Keine Leitung für Studiengang ' . $antrag->studiengang_kz . ' gefunden!');
continue;
}
$leitung = current(getData($result));
if (!isset($stgLeitungen[$leitung->uid]))
{
$stgLeitungen[$leitung->uid] = [ 'Details' => $leitung, 'stgs' => [] ];
}
$stgLeitungen[$leitung->uid]['stgs'][] = $antrag->studiengang_kz;
$result = $this->StudierendenantragModel->getStgAndSem($antrag->studierendenantrag_id);
if (isError($result))
{
$this->logError(getError($result));
continue;
}
if (!hasData($result))
{
$this->logError('Keine Details für Studiengang ' . $antrag->studiengang_kz . ' gefunden!');
continue;
}
$details = current(getData($result));
$stgs[$antrag->studiengang_kz] = [
'Abmeldung' => [],
'Unterbrechung' => [],
'Wiederholung' => [],
'Details' => $details
];
}
$stgs[$antrag->studiengang_kz][str_replace('Stgl', '', $antrag->typ)] = $antrag;
}
$this->load->model('system/Sprache_model', 'SpracheModel');
$result = $this->SpracheModel->loadWhere(['content' => true]);
if (isError($result)) {
$this->logError(getError($result));
$languages = [DEFAULT_LANGUAGE];
} elseif (!hasData($result)) {
$languages = [DEFAULT_LANGUAGE];
} else {
$languages = array_map(function ($row) {
return $row->sprache;
}, getData($result));
}
$count = 0;
foreach ($stgLeitungen as $leitung)
{
$data = [
'name' => trim($leitung['Details']->vorname . ' ' . $leitung['Details']->nachname),
'vorname' => $leitung['Details']->vorname,
'nachname' => $leitung['Details']->nachname
];
foreach ($languages as $lang) {
unset($this->p);
$this->loadPhrases(['studierendenantrag'], $lang);
$table = '';
foreach ($leitung['stgs'] as $studiengang_kz) {
$rows = '';
$stg = $stgs[$studiengang_kz];
foreach (['Abmeldung', 'Unterbrechung', 'Wiederholung'] as $typ) {
$c = count($stg[$typ]);
if ($c) {
$rows .= $this->p->t('studierendenantrag', 'mail_part_x_new_' . $typ, ['count' => $c]);
}
}
$table .= $this->p->t('studierendenantrag', 'mail_part_table', [
'stg_bezeichnung' => $stg['Details']->bezeichnung,
'stg_orgform_kurzbz' => $stg['Details']->orgform_kurzbz,
'rows' => $rows
]);
}
$data['table_' . $lang] = $table;
}
$data['table'] = $data['table_' . DEFAULT_LANGUAGE];
$data['leitungLink'] = APP_ROOT. 'index.ci.php/lehre/Studierendenantrag/leitung';
//Mail an Stgl und Assistenz
$to = $leitung['Details']->uid . '@' . DOMAIN;
$cc = $leitung['Details']->email;
// NOTE(chris): Sancho mail
if (sendSanchoMail("Sancho_Mail_Antrag_Stgl", $data, $to, 'Anträge - Aktion(en) erforderlich', DEFAULT_SANCHO_HEADER_IMG, DEFAULT_SANCHO_FOOTER_IMG, '', $cc))
$count++;
}
$this->logInfo($count . " Emails erfolgreich versandt");
$this->logInfo('End Job sendStglSammelmail');
}
/**
* Send reminder to Assistant for Wiedereinstieg Unterbrecher
*
*/
public function sendReminderWiedereinstieg()
{
$now = new DateTime();
$modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier');
if (!$modifier)
return $this->logError('Konnte Job nicht starten: Config "unterbrechung_job_remind_wiedereinstieg_date_modifiers" nicht gesetzt');
$end = new DateTime();
$end->modify($modifier);
$this->logInfo(sprintf(
'Start Job sendReminderWiedereinstieg (Wiedereinstieg zwischen %s - %s)',
$now->format('Y-m-d'),
$end->format('Y-m-d')
));
$result = $this->StudierendenantragModel->getAntraegeWhereWiedereinstiegBetween($now, $end);
if(isError($result))
{
$this->logError(getError($result));
$this->logInfo('Ende Job sendReminderWiedereinstieg');
return;
}
$antraege = getData($result) ?: [];
$count = 0;
foreach ($antraege as $antrag)
{
$res = $this->StudierendenantragModel->getStgAndSem($antrag->studierendenantrag_id);
$stg = '';
$orgform = '';
if (hasData($res)) {
$studiengang = current(getData($res));
$stg = $studiengang->bezeichnung;
$orgform = $studiengang->orgform_kurzbz;
}
$datum = new DateTime($antrag->datum_wiedereinstieg);
$data = array(
'prestudent' => $antrag->prestudent_id,
'name' => trim($antrag->vorname . ' '. $antrag->nachname),
'datum_wiedereinstieg' => $datum->format('d.m.Y'),
'vorname' => $antrag->vorname,
'nachname' => $antrag->nachname,
'Orgform' => $orgform,
'stg' => $stg
);
$result = $this->StudentModel->loadWhere(['prestudent_id'=> $antrag->prestudent_id]);
if (hasData($result)) {
$student = current(getData($result));
$data['UID'] = $student->student_uid;
}
// NOTE(chris): Sancho mail
if(sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg'))
{
$count++;
$this->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $antrag->studierendenantrag_id,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_REMINDERSENT,
'insertvon' => 'AntragJob'
]);
}
}
$this->logInfo($count . ' Reminder gesendet - Ende Job sendReminderWiedereinstieg');
}
/**
* Set Wiederholer after deadline to Abbrecher
*
*/
public function handleWiederholerDeadline()
{
$this->logInfo('Start Job handleWiederholerDeadline');
$this->load->library('PrestudentLib');
$insertvon = $this->config->item('antrag_job_systemuser');
if (!$insertvon) {
$this->logError('Config "antrag_job_systemuser" nicht gesetzt');
$this->logInfo('Ende Job handleWiederholerDeadline');
return;
}
$modifier_deadline = $this->config->item('wiederholung_job_deadline_date_modifier');
if (!$modifier_deadline) {
$this->logError('Config "wiederholung_job_deadline_date_modifier" nicht gesetzt');
$this->logInfo('Ende Job handleWiederholerDeadline');
return;
}
$digi_start= $this->config->item('digitalization_start');
if($digi_start)
$digi_start = new DateTime($digi_start);
$dateDeadline = new DateTime();
$dateDeadline->sub(DateInterval::createFromDateString($modifier_deadline));
$result = $this->PruefungModel->getAllPrestudentsWhereCommitteeExamFailed(
[
Studierendenantragstatus_model::STATUS_REQUESTSENT_1,
Studierendenantragstatus_model::STATUS_REQUESTSENT_2
],
$dateDeadline,
$digi_start
);
if(isError($result))
{
$this->logError(getError($result));
}
else
{
$prestudents = getData($result) ?: [];
$count = 0;
$prestudents = $this->prestudentsGetUnique($prestudents);
foreach ($prestudents as $prestudent)
{
$result = $this->prestudentlib->setAbbrecher($prestudent->prestudent_id, $prestudent->studiensemester_kurzbz, $insertvon);
if (isError($result))
$this->logError(getError($result));
else
$count++;
}
$this->logInfo($count . " Students set to Abbrecher");
}
$this->logInfo('Ende Job handleWiederholerDeadline');
}
/**
* Set Abmeldungen after deadline to Abbrecher
*
*/
public function handleAbmeldungenStglDeadline()
{
$this->logInfo('Start Job handleAbmeldungenStglDeadline');
$this->load->library('AntragLib');
$insertvon = $this->config->item('antrag_job_systemuser');
if (!$insertvon) {
$this->logError('Config "antrag_job_systemuser" nicht gesetzt');
$this->logInfo('Ende Job handleAbmeldungenStglDeadline');
return;
}
$modifier_deadline = $this->config->item('abmeldung_job_deadline_date_modifier');
if (!$modifier_deadline) {
$this->logError('Config "abmeldung_job_deadline_date_modifier" nicht gesetzt');
$this->logInfo('Ende Job handleAbmeldungenStglDeadline');
return;
}
$dateDeadline = new DateTime();
$dateDeadline->sub(DateInterval::createFromDateString($modifier_deadline));
$this->StudierendenantragModel->addSelect('tbl_studierendenantrag.studierendenantrag_id');
$this->StudierendenantragModel->addSelect('prestudent_id');
$this->StudierendenantragModel->addSelect('studiensemester_kurzbz');
$this->StudierendenantragModel->addSelect('s.insertamum');
$this->StudierendenantragModel->addSelect('s.insertvon');
$this->StudierendenantragModel->db->where_in('public.get_rolle_prestudent(prestudent_id, studiensemester_kurzbz)', $this->config->item('antrag_prestudentstatus_whitelist'));
$result = $this->StudierendenantragModel->getWithLastStatusWhere([
'typ' => Studierendenantrag_model::TYP_ABMELDUNG_STGL,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
's.insertamum <=' => $dateDeadline->format('c')
]);
if(isError($result))
{
$this->logError(getError($result));
}
else
{
$antraege = getData($result) ?: [];
$count = 0;
foreach ($antraege as $antrag)
{
$result = $this->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $antrag->studierendenantrag_id,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_DEREGISTERED,
'insertvon' => 'AntragJob'
]);
if (isError($result))
$this->logError(getError($result));
else {
$deregisterStatus = getData($result);
$result = $this->prestudentlib->setAbbrecher(
$antrag->prestudent_id,
$antrag->studiensemester_kurzbz,
'AntragJob',
'abbrecherStgl',
$antrag->insertamum,
null,
$antrag->insertvon ?: $insertvon
);
if (isError($result)) {
$this->StudierendenantragstatusModel->delete($deregisterStatus);
$this->logError(getError($result));
} else {
$count++;
$result = $this->PrestudentModel->load($antrag->prestudent_id);
if(!hasData($result)) {
$this->logWarning('No Prestudent found');
continue;
}
$prestudent = current(getData($result));
$result = $this->StudiengangModel->load($prestudent->studiengang_kz);
if(!hasData($result)) {
$this->logWarning('No Studiengang found');
continue;
}
$studiengang = current(getData($result));
$result = $this->PersonModel->loadPrestudent($antrag->prestudent_id);
if(!hasData($result))
{
$this->logWarning('No Person found');
continue;
}
$person = current(getData($result));
$email = $studiengang->email;
$dataMail = array(
'prestudent' => $antrag->prestudent_id,
'studiensemester' => $antrag->studiensemester_kurzbz,
'name' => trim($person->vorname . ' '. $person->nachname),
);
if(!sendSanchoMail('Sancho_Mail_Antrag_A_Assist', $dataMail, $email, 'Einspruchsfrist abgelaufen'))
{
$this->logWarning("Failed to send Notification to " . $email);
}
}
}
}
$this->logInfo($count . "/" . count($antraege) . " Students set to Abbrecher");
}
$this->logInfo('Ende Job handleAbmeldungenStglDeadline');
}
/**
* Send Request to Student do Decide between Wiederholung and Verzicht
*
*/
public function sendAufforderungWiederholer()
{
$this->logInfo('Start Job sendAufforderungWiederholer');
$modifier_request_1 = $this->config->item('wiederholung_job_request_1_date_modifier');
$modifier_request_2 = $this->config->item('wiederholung_job_request_2_date_modifier');
$modifier_deadline = $this->config->item('wiederholung_job_deadline_date_modifier');
$digi_start = $this->config->item('digitalization_start');
if ($digi_start) {
try {
$digi_start = new DateTime($digi_start);
} catch(Exception $e) {
}
}
if ($modifier_deadline) {
$dateDeadline = new DateTime();
$dateDeadline->sub(DateInterval::createFromDateString($modifier_deadline));
if ($digi_start)
$dateDeadline = max($digi_start, $dateDeadline);
} else {
$dateDeadline = $digi_start ?: null;
}
//first request
if ($modifier_request_1) {
$dateStichtag = new DateTime();
$dateStichtag->sub(DateInterval::createFromDateString($modifier_request_1));
if (!$dateDeadline || $dateStichtag > $dateDeadline)
$this->sendReminder(
'Request1',
null,
Studierendenantragstatus_model::STATUS_REQUESTSENT_1,
$dateDeadline,
$dateStichtag,
$modifier_deadline,
'Aufforderung: Bekanntgabe Wiederholung'
);
} else
$this->logError('Config "wiederholung_job_request_1_date_modifier" nicht gesetzt');
//second request
if ($modifier_request_2) {
$dateStichtag = new DateTime();
$dateStichtag->sub(DateInterval::createFromDateString($modifier_request_2));
if (!$dateDeadline || $dateStichtag > $dateDeadline)
$this->sendReminder(
'Request2',
Studierendenantragstatus_model::STATUS_REQUESTSENT_1,
Studierendenantragstatus_model::STATUS_REQUESTSENT_2,
$dateDeadline,
$dateStichtag,
$modifier_deadline,
'Reminder Aufforderung: Bekanntgabe Wiederholung'
);
} else
$this->logError('Config "wiederholung_job_request_2_date_modifier" nicht gesetzt');
$this->logInfo('Ende Job sendAufforderungWiederholer');
}
protected function prestudentsGetUnique($prestudents)
{
$result = [];
foreach ($prestudents as $prestudent) {
if (!isset($result[$prestudent->prestudent_id]))
$result[$prestudent->prestudent_id] = $prestudent;
else {
if ($result[$prestudent->prestudent_id]->datum > $prestudent->datum)
$result[$prestudent->prestudent_id] = $prestudent;
}
}
return $result;
}
protected function sendReminder($name, $status_from, $status_to, $deadline, $date_stichtag, $modifier_deadline, $subject)
{
$this->logInfo('Start Job sendAufforderungWiederholer ' . $name);
$result = $this->PruefungModel->getAllPrestudentsWhereCommitteeExamFailed($status_from, $date_stichtag, $deadline);
if(isError($result))
{
$this->logError(getError($result));
}
else
{
$prestudents = getData($result) ?: [];
$count = 0;
$prestudents = $this->prestudentsGetUnique($prestudents);
foreach ($prestudents as $prestudent)
{
$stg_kz = $prestudent->studiengang_kz;
if (in_array($stg_kz, $this->config->item('stgkz_blacklist_wiederholung')))
continue;
$url = site_url('lehre/Studierendenantrag/wiederholung/' . $prestudent->prestudent_id);
$urlCIS = CIS_ROOT . 'index.ci.php/lehre/Studierendenantrag/wiederholung/' . $prestudent->prestudent_id;
$email = $this->StudentModel->getEmailFH($this->StudentModel->getUID($prestudent->prestudent_id));
$fristende = new DateTime($prestudent->datum);
$fristende->add(DateInterval::createFromDateString($modifier_deadline));
$datum_kp = new DateTime($prestudent->datum);
$result = $this->StudiensemesterModel->getNextFrom($prestudent->studiensemester_kurzbz);
$next_sem = "";
$sem_after_next_sem = "";
if (hasData($result)) {
$next_sem = current(getData($result))->studiensemester_kurzbz;
$result = $this->StudiensemesterModel->getNextFrom($next_sem);
if (hasData($result)) {
$sem_after_next_sem = current(getData($result))->studiensemester_kurzbz;
}
}
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$result = $this->PrestudentstatusModel->loadLastWithStgDetails($prestudent->prestudent_id, $prestudent->studiensemester_kurzbz);
if (hasData($result)) {
$ausbildungssemester = current(getData($result))->semester;
}
$dataMail = array(
'name'=> trim($prestudent->vorname . ' '. $prestudent->nachname),
'vorname' => $prestudent->vorname,
'nachname' => $prestudent->nachname,
'pers_kz'=> $prestudent->matrikelnr,
'stg' => $prestudent->bezeichnung,
'lvbezeichnung' => $prestudent->lvbezeichnung,
'datum_kp' => $datum_kp->format('d.m.Y'),
'studiensemester'=> $prestudent->studiensemester_kurzbz,
'Orgform'=> $prestudent->orgform,
'prestudent_id' => $prestudent->prestudent_id,
'url' => $url,
'urlCIS' => $urlCIS,
'fristablauf' => $fristende->format('d.m.Y'),
'pre_wiederholer_sem' => $next_sem,
'wiederholer_sem' => $sem_after_next_sem,
'sem' => $ausbildungssemester
);
// NOTE(chris): Sancho mail
if(sendSanchoMail('Sancho_Mail_Antrag_W_' . $name, $dataMail, $email, $subject))
{
$antrag_id = null;
$result = $this->StudierendenantragModel->loadWhere([
'prestudent_id' => $prestudent->prestudent_id,
'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG
]);
if (isError($result))
$this->logError(getError($result));
elseif (hasData($result))
$antrag_id = current(getData($result) ?: []) -> studierendenantrag_id;
if ($antrag_id == null)
{
$result = $this->StudierendenantragModel->insert([
'prestudent_id' => $prestudent->prestudent_id,
'studiensemester_kurzbz'=> $prestudent->studiensemester_kurzbz,
'datum' => date('c'),
'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG,
'insertvon' => 'AntragJob'
]);
if (isError($result))
$this->logError(getError($result));
else
$antrag_id = getData($result);
}
if ($antrag_id)
{
$result = $this->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $antrag_id,
'studierendenantrag_statustyp_kurzbz' => $status_to,
'insertvon' => 'AntragJob'
]);
if (isError($result))
$this->logError(getError($result));
}
$count++;
}
}
$this->logInfo($count . " Mails '" . $subject . "' sent");
}
$this->logInfo('Ende Job sendAufforderungWiederholer ' . $name);
}
}
@@ -467,7 +467,7 @@ class ReihungstestJob extends JOB_Controller
$this->PrestudentstatusModel->addJoin('public.tbl_person', 'person_id');
$yesterdays_applicants_arr = $this->PrestudentstatusModel->loadWhere('
status_kurzbz = \'Interessent\' AND
status_kurzbz IN (\'Interessent\', \'Bewerber\') AND
typ = \'b\' AND
bestaetigtam = current_date - 1
');
@@ -730,33 +730,27 @@ class ReihungstestJob extends JOB_Controller
tbl_reihungstest.reihungstest_id,
tbl_studienplan.studienplan_id,
tbl_reihungstest.studiensemester_kurzbz,
tbl_studienordnung.studiengang_kz
tbl_studienordnung.studiengang_kz,
tbl_studienplan.orgform_kurzbz
FROM
public.tbl_reihungstest
JOIN public.tbl_rt_studienplan ON(tbl_rt_studienplan.reihungstest_id=tbl_reihungstest.reihungstest_id)
JOIN lehre.tbl_studienplan USING(studienplan_id)
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
JOIN public.tbl_rt_studienplan ON(tbl_rt_studienplan.reihungstest_id=tbl_reihungstest.reihungstest_id)
JOIN lehre.tbl_studienplan USING(studienplan_id)
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE
NOT EXISTS(
SELECT 1 FROM lehre.tbl_studienplan_semester
WHERE studienplan_id=tbl_rt_studienplan.studienplan_id
AND tbl_studienplan_semester.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz
EXISTS (
SELECT studienplan_id
FROM lehre.tbl_studienordnung sordnung
JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
WHERE sordnung.studiengang_kz = tbl_studienordnung.studiengang_kz
AND tbl_studienplan_semester.studiensemester_kurzbz = tbl_reihungstest.studiensemester_kurzbz
AND tbl_studienplan.studienplan_id NOT IN
(
SELECT studienplan_id FROM tbl_rt_studienplan WHERE reihungstest_id = tbl_reihungstest.reihungstest_id
)
)
AND tbl_reihungstest.datum >= now()
AND NOT EXISTS(
SELECT
1
FROM
public.tbl_rt_studienplan rtstp
JOIN lehre.tbl_studienplan stp USING(studienplan_id)
JOIN lehre.tbl_studienordnung sto USING(studienordnung_id)
JOIN lehre.tbl_studienplan_semester stpsem USING(studienplan_id)
WHERE
sto.studiengang_kz=tbl_studienordnung.studiengang_kz
AND rtstp.reihungstest_id=tbl_reihungstest.reihungstest_id
AND stpsem.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz
)
";
AND tbl_reihungstest.datum >= now()";
$db = new DB_Model();
$result_rt = $db->execReadOnlyQuery($qry);
@@ -766,7 +760,9 @@ class ReihungstestJob extends JOB_Controller
// find an active studyplan for the same degree program with is valid in this semester
$result_stpl = $this->StudienplanModel->getStudienplaeneBySemester(
$row_rt->studiengang_kz,
$row_rt->studiensemester_kurzbz
$row_rt->studiensemester_kurzbz,
null,
$row_rt->orgform_kurzbz
);
if (hasData($result_stpl)) {
@@ -0,0 +1,82 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \REST_Controller as REST_Controller;
/**
*/
class Attachment extends FHC_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->load->model('education/Studierendenantrag_model', 'StudierendenantragModel');
$this->load->library('DmsLib');
$this->load->library('AuthLib');
$this->load->library('PermissionLib');
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
* @param integer $dms_id
*
* @return void
*/
public function show($dms_id)
{
$result = $this->StudierendenantragModel->loadWhere(['dms_id' => $dms_id]);
if (!getData($result))
return show_404();
if (!$this->permissionlib->isBerechtigt('student/antragfreigabe'))
{
$isSamePerson = false;
$antraege = getData($result);
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
foreach ($antraege as $antrag)
{
$prestudent = $this->PrestudentModel->load($antrag->prestudent_id);
if(hasData($prestudent))
{
if(current(getData($prestudent))->person_id == getAuthPersonId())
{
$isSamePerson = true;
break;
}
}
}
if ($isSamePerson == false)
{
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN); // set the HTTP header as unauthorized
$this->load->library('EPrintfLib'); // loads the EPrintfLib to format the output
// Prints the main error message
$this->eprintflib->printError('You are not allowed to access to this content');
// Prints the called controller name
$this->eprintflib->printInfo('Controller name: '.$this->router->class);
// Prints the called controller method name
$this->eprintflib->printInfo('Method name: '.$this->router->method);
// Prints the required permissions needed to access to this method
$this->eprintflib->printInfo('Required permissions: student/antragfreigabe');
return show_error('You are not entitled to read this document');
}
}
$result = $this->dmslib->download($dms_id);
if (isError($result))
return show_error(getError($result));
$this->outputFile(getData($result));
}
}
@@ -0,0 +1,48 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
use \Studierendenantrag_model as Studierendenantrag_model;
use \REST_Controller as REST_Controller;
/**
*/
class Wiederholung extends Auth_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct([
'assistenz'=> 'student/studierendenantrag:w'
]);
$this->load->library('AntragLib');
// Load language phrases
$this->loadPhrases([
'studierendenantrag'
]);
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
public function assistenz($antrag_id)
{
$result = $this->antraglib->getDetailsForAntrag($antrag_id);
if (isError($result))
return show_error(getError($result));
if (!hasData($result))
return show_404();
$this->load->view('lehre/Antrag/Wiederholung/Student', [
'antrag_id' => $antrag_id,
'antrag' => getData($result)
]);
}
}
@@ -0,0 +1,188 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \stdClass as stdClass;
/**
*/
class Studierendenantrag extends FHC_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
// Load Libraries
$this->load->library('AuthLib');
$this->load->library('AntragLib');
// Load Models
$this->load->model('education/Studierendenantrag_model', 'StudierendenantragModel');
// Load language phrases
$this->loadPhrases([
'studierendenantrag'
]);
if (strtolower($this->router->method) === 'leitung')
$this->_isAllowed([
'leitung' => ['student/studierendenantrag:r', 'student/antragfreigabe:r']
]);
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
public function index()
{
$dataAntrag = $this->StudierendenantragModel->loadForPerson(getAuthPersonId());
if (isError($dataAntrag))
return show_error(getError($dataAntrag));
$dataAntrag = (getData($dataAntrag) ? : []);
$prestudentenArr = array();
foreach ($dataAntrag as $antrag)
{
if (!isset($prestudentenArr[$antrag->prestudent_id]))
{
$prestudentenArr[$antrag->prestudent_id] = array(
'allowedNewTypes' => array(),
'antraege'=> array(),
'bezeichnungStg' => $antrag->bezeichnung,
'bezeichnungOrgform' => $antrag->orgform
);
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
if (getData($result) == 1)
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
if (getData($result) == 1)
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
if (getData($result) == 1)
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
}
if ($antrag->studierendenantrag_id == null)
continue;
if ($antrag->typ == Studierendenantrag_model::TYP_ABMELDUNG_STGL && (!$antrag->isapproved))
continue;
$prestudentenArr[$antrag->prestudent_id]['antraege'][] = $antrag;
}
$this->load->view('lehre/Antrag/Student/List', [
'antraege' => $prestudentenArr
]);
}
public function leitung()
{
$stgL = $this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe') ?: [];
$stgA = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag') ?: [];
$this->load->view('lehre/Antrag/Leitung/List', [
'stgA' => $stgA,
'stgL' => $stgL
]);
}
public function abmeldung($prestudent_id, $studierendenantrag_id = null)
{
$this->load->view('lehre/Antrag/Create', [
'prestudent_id' => $prestudent_id,
'studierendenantrag_id' => $studierendenantrag_id,
'antrag_type' => 'Abmeldung'
]);
}
public function abmeldungstgl($prestudent_id, $studierendenantrag_id = null)
{
$this->load->view('lehre/Antrag/Create', [
'prestudent_id' => $prestudent_id,
'studierendenantrag_id' => $studierendenantrag_id,
'antrag_type' => 'AbmeldungStgl'
]);
}
public function unterbrechung($prestudent_id, $studierendenantrag_id = null)
{
$this->load->view('lehre/Antrag/Create', [
'prestudent_id' => $prestudent_id,
'studierendenantrag_id' => $studierendenantrag_id,
'antrag_type' => 'Unterbrechung'
]);
}
public function wiederholung($prestudent_id, $studierendenantrag_id = null)
{
$this->load->view('lehre/Antrag/Create', [
'prestudent_id' => $prestudent_id,
'studierendenantrag_id' => $studierendenantrag_id,
'antrag_type' => 'Wiederholung'
]);
}
/**
* Checks if the caller is allowed to access to this content with the given permissions
* If it is not allowed will set the HTTP header with code 401
* Wrapper for permissionlib->isEntitled
*/
private function _isAllowed($requiredPermissions)
{
// Loads permission lib
$this->load->library('PermissionLib');
// Checks if this user is entitled to access to this content
if (!$this->permissionlib->isEntitled($requiredPermissions, $this->router->method))
{
$this->output->set_status_header(REST_Controller::HTTP_UNAUTHORIZED); // set the HTTP header as unauthorized
$this->load->library('EPrintfLib'); // loads the EPrintfLib to format the output
// Prints the main error message
$this->eprintflib->printError('You are not allowed to access to this content');
// Prints the called controller name
$this->eprintflib->printInfo('Controller name: '.$this->router->class);
// Prints the called controller method name
$this->eprintflib->printInfo('Method name: '.$this->router->method);
// Prints the required permissions needed to access to this method
$this->eprintflib->printInfo('Required permissions: '.$this->_rpsToString($requiredPermissions, $this->router->method));
exit; // immediately terminate the execution
}
}
/**
* Converts an array of permissions to a string that contains them as a comma separated list
* Ex: "<permission 1>, <permission 2>, <permission 3>"
*/
private function _rpsToString($requiredPermissions, $method)
{
$strRequiredPermissions = ''; // string that contains all the required permissions needed to access to this method
if (isset($requiredPermissions[$method])) // if the called method is present in the permissions array
{
// If it is NOT then convert it into an array
$rpsMethod = $requiredPermissions[$method];
if (!is_array($rpsMethod))
{
$rpsMethod = array($rpsMethod);
}
// Copy all the permissions into $strRequiredPermissions separated by a comma
for ($i = 0; $i < count($rpsMethod); $i++)
{
$strRequiredPermissions .= $rpsMethod[$i].', ';
}
$strRequiredPermissions = rtrim($strRequiredPermissions, ', ');
}
return $strRequiredPermissions;
}
}
@@ -152,10 +152,10 @@ class requestAnrechnung extends Auth_Controller
return $this->outputJsonError($this->p->t('anrechnung', 'antragBereitsGestellt'));
}
// Exit if application is not for actual studysemester
if (!self::_applicationIsForActualSS($studiensemester_kurzbz))
// Exit if application is a past ( < actual ) studysemester
if (self::_applicationIsPastSS($studiensemester_kurzbz))
{
return $this->outputJsonError($this->p->t('anrechnung', 'antragNurImAktSS'));
return $this->outputJsonError($this->p->t('anrechnung', 'antragNichtFuerVerganganeSS'));
}
// Upload document
@@ -312,18 +312,21 @@ class requestAnrechnung extends Auth_Controller
}
/**
* Check if applications' study semester is actual study semester.
* Check if applications' study semester is < actual study semester.
*
* @param $studiensemester_kurzbz
* @return bool
*/
private function _applicationIsForActualSS($studiensemester_kurzbz)
private function _applicationIsPastSS($studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudiensemesterModel->getNearest();
$actual_ss = getData($result)[0]->studiensemester_kurzbz;
$actual_ss = getData($result)[0];
return $studiensemester_kurzbz == $actual_ss;
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$anrechnung_ss = getData($result)[0];
return $anrechnung_ss->ende < $actual_ss->start;
}
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id)
@@ -37,7 +37,7 @@ class FASMessages extends Auth_Controller
// Loads the view to write a new message with a template
$this->load->view(
'system/messages/htmlWriteTemplate',
'system/messages/FAShtmlWriteTemplate',
$this->CLMessagesModel->prepareHtmlWriteTemplatePrestudents($prestudents)
);
}
@@ -53,7 +53,7 @@ class FASMessages extends Auth_Controller
// Loads the view to write a new message with a template
$this->load->view(
'system/messages/htmlWriteTemplate',
'system/messages/FAShtmlWriteTemplate',
$this->CLMessagesModel->prepareHtmlWriteTemplatePrestudents($prestudents, $message_id, $recipient_id)
);
}
+16
View File
@@ -18,6 +18,8 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
// ------------------------------------------------------------------------
// Collection of utility functions for general purpose
// ------------------------------------------------------------------------
@@ -405,3 +407,17 @@ function findResource($path, $resource, $subdir = false, $extraDir = null)
return null;
}
/**
* check if String can be converted to a date
*/
function isValidDate($dateString)
{
try
{
return (new DateTime($dateString)) !== false;
}
catch(Exception $e)
{
return false;
}
}
File diff suppressed because it is too large Load Diff
+2
View File
@@ -595,6 +595,8 @@ class DmsLib
if (isError($insDmsResult)) return $insDmsResult;
$upload_data['dms_id'] = getData($insDmsResult);
if(isset($upload_data['file_type']) && !isset($dms['mimetype']))
$dms['mimetype'] = $upload_data['file_type'];
// Insert DMS version
$insVersionResult = $this->_ci->DmsVersionModel->insert(
+412
View File
@@ -0,0 +1,412 @@
<?php
/**
* FH-Complete
*
* @package FHC-Helper
* @author FHC-Team
* @copyright Copyright (c) 2023 fhcomplete.net
* @license GPLv3
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
class PrestudentLib
{
/**
* Object initialization
*/
public function __construct()
{
$this->_ci =& get_instance();
// // Configs
// $this->_ci->load->config('studierendenantrag');
// // Models
$this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->_ci->load->model('crm/Student_model', 'StudentModel');
$this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->_ci->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
$this->_ci->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
$this->_ci->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
}
public function setAbbrecher($prestudent_id, $studiensemester_kurzbz, $insertvon = null, $statusgrund_kurzbz = null, $datum = null, $bestaetigtam = null, $bestaetigtvon = null)
{
if (!$insertvon)
$insertvon = getAuthUID();
if (!$bestaetigtvon)
$bestaetigtvon = $insertvon;
$result = $this->_ci->PrestudentstatusModel->getLastStatus($prestudent_id, $studiensemester_kurzbz);
if (isError($result))
return $result;
$result = getData($result);
if (!$result)
return error($this->_ci->p->t('studierendenantrag', 'error_no_prestudent_in_sem', [
'prestudent_id' => $prestudent_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz
]));
$prestudent_status = current($result);
$result = $this->_ci->StudentModel->loadWhere(['prestudent_id' => $prestudent_id]);
if (isError($result))
return $result;
$result = getData($result);
if (!$result)
return error($this->_ci->p->t('studierendenantrag', 'error_no_student_for_prestudent', ['prestudent_id' => $prestudent_id]));
$student = current($result);
if(!$datum)
$datum = date('c');
if(!$bestaetigtam)
$bestaetigtam = date('c');
//Status und Statusgrund updaten
$result = $this->_ci->PrestudentstatusModel->withGrund($statusgrund_kurzbz)->insert([
'prestudent_id' => $prestudent_id,
'status_kurzbz' => Prestudentstatus_model::STATUS_ABBRECHER,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'ausbildungssemester' => $prestudent_status->ausbildungssemester,
'datum' => $datum,
'insertvon' => $insertvon,
'insertamum' => date('c'),
'orgform_kurzbz'=> $prestudent_status->orgform_kurzbz,
'studienplan_id'=> $prestudent_status->studienplan_id,
'bestaetigtvon' => $bestaetigtvon,
'bestaetigtam' => $bestaetigtam
]);
if (isError($result))
return $result;
//Verband anlegen
$result = $this->_ci->LehrverbandModel->load([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'A',
'gruppe' => ''
]);
if (isError($result))
return $result;
$result = getData($result);
if (!$result)
{
$result = $this->_ci->LehrverbandModel->load([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => '',
'gruppe' => ''
]);
if (isError($result))
return $result;
$result = getData($result);
if(!$result)
{
$this->_ci->LehrverbandModel->insert([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => '',
'gruppe' => '',
'bezeichnung' => 'Ab-Unterbrecher',
'aktiv' => true,
]);
}
$this->_ci->LehrverbandModel->insert([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'A',
'gruppe' => '',
'bezeichnung' => 'Abbrecher',
'aktiv' => true
]);
}
//noch nicht eingetragene Zeugnisnoten auf 9 setzen
$result = $this->_ci->ZeugnisnoteModel->getZeugnisnoten($student->student_uid, $studiensemester_kurzbz);
if (isError($result))
return $result;
$result = getData($result) ?: [];
foreach ($result as $lv)
{
if (!$lv->note)
{
$result = $this->_ci->ZeugnisnoteModel->insert([
'note' => 9,
'studiensemester_kurzbz' => $lv->studiensemester_kurzbz,
'student_uid' => $lv->uid,
'lehrveranstaltung_id' => $lv->lehrveranstaltung_id
]);
if (isError($result)) {
$result = $this->_ci->ZeugnisnoteModel->update([
'studiensemester_kurzbz' => $lv->studiensemester_kurzbz,
'student_uid' => $lv->uid,
'lehrveranstaltung_id' => $lv->lehrveranstaltung_id
], [
'note' => 9
]);
if (isError($result))
return $result;
}
}
}
//Update Aktionen
//StudentModel updaten
$this->_ci->StudentModel->update([
'student_uid' => $student->student_uid
], [
'verband' => 'A',
'gruppe' => '',
'semester' => 0,
'updatevon' => $insertvon,
'updateamum' => date('c')
]);
//Studentlehrverband setzen
$this->_ci->StudentlehrverbandModel->update([
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $student->student_uid
], [
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'A',
'gruppe' => '',
'updateamum' => date('c'),
'updatevon' => $insertvon
]);
//Benutzer inaktiv setzen
$this->_ci->BenutzerModel->update([
'uid' => $student->student_uid
], [
'aktiv' => false,
'updateaktivvon' => $insertvon,
'updateaktivam' => date('c'),
'updatevon' => $insertvon,
'updateamum' => date('c')
]);
return success();
}
public function setUnterbrecher($prestudent_id, $studiensemester_kurzbz, $studierendenantrag_id, $insertvon = null)
{
$ausbildungssemester_plus = 0;
if (!$insertvon)
$insertvon = getAuthUID();
$result = $this->_ci->PrestudentstatusModel->getLastStatus($prestudent_id, $studiensemester_kurzbz);
if (isError($result))
return $result;
$result = getData($result);
if (!$result) {
//NOTE(manu): only valid if nextSemester focus max
$result = $this->_ci->PrestudentstatusModel->getLastStatus($prestudent_id);
if (isError($result))
return $result;
$result = getData($result);
//check if ausbildungssemester is last
$this->_ci->StudiengangModel->addJoin('public.tbl_prestudent p', 'studiengang_kz');
$res = $this->_ci->StudiengangModel->loadWhere(['p.prestudent_id' => $prestudent_id]);
if(isError($res))
return $res;
if(!hasData($res))
return error($this->_ci->p->t('studierendenantrag', 'error_no_stg_for_prestudent', [
'prestudent_id' => $prestudent_id
]));
$studiengang = current(getData($res));
$prestudent_status = current($result);
if($prestudent_status->ausbildungssemester + 1 < $studiengang->max_semester)
$ausbildungssemester_plus = 1;
if(!$result)
{
return error($this->_ci->p->t('studierendenantrag', 'error_no_prestudent_in_sem', [
'prestudent_id' => $prestudent_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz
]));
}
}
$prestudent_status = current($result);
$result = $this->_ci->StudentModel->loadWhere(['prestudent_id' => $prestudent_id]);
if (isError($result))
return $result;
$result = getData($result);
if (!$result)
return error($this->_ci->p->t('studierendenantrag', 'error_no_student_for_prestudent', ['prestudent_id' => $prestudent_id]));
$student = current($result);
$resultAntrag = $this->_ci->StudierendenantragModel->load($studierendenantrag_id);
if (isError($resultAntrag))
return $resultAntrag;
$resultAntrag = getData($resultAntrag);
if (!$resultAntrag)
return error($this->_ci->p->t('studierendenantrag', 'error_no_antrag_found', ['id' => $studierendenantrag_id]));
$antrag = current($resultAntrag);
//Status updaten
$result = $this->_ci->PrestudentstatusModel->insert([
'prestudent_id' => $prestudent_id,
'status_kurzbz' => Prestudentstatus_model::STATUS_UNTERBRECHER,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'ausbildungssemester' => $prestudent_status->ausbildungssemester + $ausbildungssemester_plus,
'datum' => date('c'),
'insertvon' => $insertvon,
'insertamum' => date('c'),
'orgform_kurzbz'=> $prestudent_status->orgform_kurzbz,
'studienplan_id'=> $prestudent_status->studienplan_id,
'bestaetigtvon' => $insertvon,
'bestaetigtam' => date('c'),
'anmerkung'=> 'Wiedereinstieg ' . $antrag->datum_wiedereinstieg
]);
if (isError($result))
return $result;
//Verband anlegen
$result = $this->_ci->LehrverbandModel->load([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'B',
'gruppe' => ''
]);
if (isError($result))
return $result;
$result = getData($result);
if (!$result)
{
$result = $this->_ci->LehrverbandModel->load([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => '',
'gruppe' => ''
]);
if (isError($result))
return $result;
$result = getData($result);
if(!$result)
{
$this->_ci->LehrverbandModel->insert([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => '',
'gruppe' => '',
'bezeichnung' => 'Ab-Unterbrecher',
'aktiv' => true,
]);
}
$this->_ci->LehrverbandModel->insert([
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'B',
'gruppe' => '',
'bezeichnung' => 'Unterbrecher',
'aktiv' => true
]);
}
//noch nicht eingetragene Zeugnisnoten auf 9 setzen
$result = $this->_ci->ZeugnisnoteModel->getZeugnisnoten($student->student_uid, $studiensemester_kurzbz);
if (isError($result))
return $result;
$result = getData($result) ?: [];
foreach ($result as $lv)
{
if (!$lv->note)
{
$result = $this->_ci->ZeugnisnoteModel->insert([
'note' => 9,
'studiensemester_kurzbz' => $lv->studiensemester_kurzbz,
'student_uid' => $lv->uid,
'lehrveranstaltung_id' => $lv->lehrveranstaltung_id
]);
if (isError($result)) {
$result = $this->_ci->ZeugnisnoteModel->update([
'studiensemester_kurzbz' => $lv->studiensemester_kurzbz,
'student_uid' => $lv->uid,
'lehrveranstaltung_id' => $lv->lehrveranstaltung_id
], [
'note' => 9
]);
if (isError($result))
return $result;
}
}
}
//Update Aktionen
//StudentModel updaten
$this->_ci->StudentModel->update([
'student_uid' => $student->student_uid
], [
'verband' => 'B',
'gruppe' => '',
'semester' => 0,
'updatevon' => $insertvon,
'updateamum' => date('c')
]);
//Studentlehrverband setzen
$result = $this->_ci->StudentlehrverbandModel->loadWhere([
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $student->student_uid
]);
if (hasData($result)) {
$this->_ci->StudentlehrverbandModel->update([
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $student->student_uid
], [
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'B',
'gruppe' => '',
'updateamum' => date('c'),
'updatevon' => $insertvon
]);
} else {
$this->_ci->StudentlehrverbandModel->insert([
'student_uid' => $student->student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'studiengang_kz' => $student->studiengang_kz,
'semester' => 0,
'verband' => 'B',
'gruppe' => '',
'insertamum' => date('c'),
'insertvon' => $insertvon
]);
}
return success();
}
}
@@ -0,0 +1,14 @@
<?php
class Bismeldestichtag_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_bismeldestichtag';
$this->pk = 'meldestichtag_id';
}
}
+40 -3
View File
@@ -100,8 +100,8 @@ class Konto_model extends DB_Model
public function checkStudienbeitrag($uid, $stsem, $buchungstypen)
{
$query = 'SELECT tbl_konto.buchungsnr,
tbl_konto.buchungsdatum
$query = 'SELECT tbl_konto.buchungsnr,
tbl_konto.buchungsdatum
FROM public.tbl_konto,
public.tbl_benutzer,
public.tbl_student
@@ -117,10 +117,47 @@ class Konto_model extends DB_Model
FROM public.tbl_konto skonto
WHERE skonto.buchungsnr = tbl_konto.buchungsnr_verweis
OR skonto.buchungsnr_verweis = tbl_konto.buchungsnr_verweis
)
)
ORDER BY buchungsnr DESC LIMIT 1
';
return $this->execQuery($query);
}
/**
* check if student has paid studienbeitrag for certain semester
*
* @param $person_id person_id
* @param $stsem stsem
*
* @return boolean
*/
public function checkStudienbeitragFromPerson($person_id, $stsem)
{
$this->addOrder('buchungsnr');
$this->addLimit(1);
$result = $this->loadWhere([
'person_id'=>$person_id,
'studiensemester_kurzbz' => $stsem,
'buchungstyp_kurzbz' => 'Studiengebuehr'
]);
if (!getData($result))
return false;
$data = getData($result)[0];
$this->resetQuery();
$this->addSelect('sum(betrag) as differenz');
$this->db->or_where('buchungsnr', $data->buchungsnr);
$this->db->or_where('buchungsnr_verweis', $data->buchungsnr);
$result = $this->load();
if (!getData($result))
return false;
$data = getData($result)[0];
return $data->differenz >= 0;
}
}
@@ -2,6 +2,10 @@
class Prestudentstatus_model extends DB_Model
{
const STATUS_ABBRECHER = 'Abbrecher';
const STATUS_UNTERBRECHER = 'Unterbrecher';
/**
* Constructor
*/
@@ -226,4 +230,112 @@ class Prestudentstatus_model extends DB_Model
return $this->execQuery($query, $parametersArray);
}
/**
* get Email of relevant Studiengang of prestudent
*/
public function getLastStatusWithStgEmail($prestudent_id, $studiensemester_kurzbz = '', $status_kurzbz = '')
{
$this->addSelect('tbl_prestudentstatus.*,
tbl_studienplan.bezeichnung AS studienplan_bezeichnung,
tbl_orgform.orgform_kurzbz AS orgform,
tbl_studienplan.sprache,
tbl_orgform.bezeichnung_mehrsprachig AS bezeichnung_orgform,
tbl_status.bezeichnung_mehrsprachig,
tbl_status_grund.bezeichnung_mehrsprachig AS bezeichnung_statusgrund,
tbl_studiengang.bezeichnung AS stg_bezeichnung,
tbl_studiengang.email');
$this->addJoin('lehre.tbl_studienplan', 'studienplan_id', 'LEFT');
$this->addJoin('lehre.tbl_studienordnung', 'studienordnung_id', 'LEFT');
$this->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
$this->addJoin('public.tbl_status', 'tbl_status.status_kurzbz = tbl_prestudentstatus.status_kurzbz');
$this->addJoin('public.tbl_status_grund', 'statusgrund_id', 'LEFT');
$this->addJoin('bis.tbl_orgform', 'COALESCE(tbl_studienplan.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) = tbl_orgform.orgform_kurzbz', 'LEFT');
$this->db->where('tbl_status.status_kurzbz = tbl_prestudentstatus.status_kurzbz');
$where = array('prestudent_id' => $prestudent_id);
if ($studiensemester_kurzbz)
$where['studiensemester_kurzbz'] = $studiensemester_kurzbz;
if ($status_kurzbz)
$where['tbl_prestudentstatus.status_kurzbz'] = $status_kurzbz;
$this->addOrder('datum', 'DESC');
$this->addOrder('insertamum', 'DESC');
$this->addOrder('ext_id', 'DESC');
$this->addLimit(1);
return $this->loadWhere($where);
}
public function loadLastWithStgDetails($prestudent_id, $studiensemester_kurzbz = null)
{
$this->load->config('studierendenantrag');
$lang = getUserLanguage();
$this->addSelect($this->dbTable . '.prestudent_id');
$this->addSelect($this->dbTable . '.ausbildungssemester AS semester');
$this->addSelect($this->dbTable . '.studiensemester_kurzbz');
$this->addSelect('s.matrikelnr');
$this->addSelect('ss.studienjahr_kurzbz');
$this->addSelect('pers.vorname');
$this->addSelect('pers.nachname');
$this->addSelect('TRIM(CONCAT(pers.vorname, \' \', pers.nachname)) AS name');
$this->addSelect('pers.person_id');
$this->addSelect('g.studiengang_kz');
$this->addSelect('g.bezeichnung');
$this->addSelect('o.orgform_kurzbz');
$this->addSelect(
'o.bezeichnung_mehrsprachig[(SELECT index FROM public.tbl_sprache WHERE sprache=\'' . $lang . '\')] AS orgform_bezeichnung',
false
);
$this->addJoin('public.tbl_student s', 'prestudent_id');
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addJoin('public.tbl_studiensemester ss', 'studiensemester_kurzbz');
$this->addJoin('public.tbl_person pers', 'person_id');
$this->addJoin('public.tbl_studiengang g', 'p.studiengang_kz=g.studiengang_kz');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz');
$this->addOrder($this->dbTable . '.datum', 'DESC');
$this->addOrder($this->dbTable . '.insertamum', 'DESC');
$this->addOrder($this->dbTable . '.ext_id', 'DESC');
$this->addLimit(1);
$this->db->where_in($this->dbTable . '.status_kurzbz', $this->config->item('antrag_prestudentstatus_whitelist'));
$whereArr = [
$this->dbTable . '.prestudent_id' => $prestudent_id,
'g.aktiv' => true
];
if ($studiensemester_kurzbz !== null)
{
$whereArr[$this->dbTable. '.studiensemester_kurzbz'] = $studiensemester_kurzbz;
}
return $this->loadWhere($whereArr);
}
/**
* call like this:
* $this->PrestudentstatusModel->withGrund('grund_kurzbz')->update($id, $otherData);
* or:
* $this->PrestudentstatusModel->withGrund('grund_kurzbz')->insert($otherData);
* @param string $statusgrund_kurzbz
* @return object $this
*/
public function withGrund($statusgrund_kurzbz)
{
if($statusgrund_kurzbz)
$this->db->set(
'statusgrund_id',
'(SELECT statusgrund_id FROM public.tbl_status_grund WHERE statusgrund_kurzbz =' . $this->db->escape($statusgrund_kurzbz) .')',
false
);
return $this;
}
}
@@ -322,7 +322,7 @@ class Reihungstest_model extends DB_Model
JOIN lehre.tbl_studienplan ON (tbl_prestudentstatus.studienplan_id = tbl_studienplan.studienplan_id)
LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code)
WHERE rt_id = ?
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\'
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) IN (\'Interessent\', \'Bewerber\')
AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz
AND bewerbung_abgeschicktamum IS NOT NULL
AND bestaetigtam IS NOT NULL
@@ -411,7 +411,7 @@ class Reihungstest_model extends DB_Model
JOIN lehre.tbl_studienplan ON (tbl_prestudentstatus.studienplan_id = tbl_studienplan.studienplan_id)
LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code)
WHERE rt.studiengang_kz = ?
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\'
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) IN (\'Interessent\', \'Bewerber\')
AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz
AND bewerbung_abgeschicktamum IS NOT NULL
AND bestaetigtam IS NOT NULL
@@ -462,7 +462,7 @@ class Reihungstest_model extends DB_Model
LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code)
LEFT JOIN PUBLIC.tbl_ort ON (tbl_rt_person.ort_kurzbz = tbl_ort.ort_kurzbz)
WHERE rt_id = ?
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\'
AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) IN (\'Interessent\', \'Bewerber\')
AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz
AND bewerbung_abgeschicktamum IS NOT NULL
AND bestaetigtam IS NOT NULL
@@ -20,7 +20,7 @@ class Rueckstellung_model extends DB_Model
$this->addLimit(1);
$this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
$this->addSelect('*,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . ' as bezeichnung');
$this->addOrder('datum_bis', 'DESC');
$where['person_id'] = $person_id;
+10
View File
@@ -82,4 +82,14 @@ class Student_model extends DB_Model
return $result;
}
/**
* Get the FH-Email for a student (not the private kontakt email)
* @param $student_uid
* @return string
*/
public function getEmailFH($student_uid)
{
return $student_uid . '@' . DOMAIN;
}
}
+222 -1
View File
@@ -29,11 +29,232 @@ class Pruefung_model extends DB_Model
JOIN lehre.tbl_pruefung prfg USING (student_uid)
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
WHERE pers.person_id = ?
AND le.studiensemester_kurzbz = ?
ORDER BY prfg.datum, pruefung_id';
return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz));
}
/**
* NOTE(chris): not used
* @return string
*/
protected function loadWhereThreeExamsFailed()
{
$this->load->config('studierendenantrag');
$this->dbTable = 'lehre.tbl_pruefung p';
$sprache_index = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect('max(p.datum) as datum');
$this->addSelect('pers.vorname');
$this->addSelect('pers.nachname');
$this->addSelect('pers.person_id');
$this->addSelect('s.matrikelnr');
$this->addSelect('g.bezeichnung');
$this->addSelect('g.studiengang_kz');
$this->addSelect('o.bezeichnung_mehrsprachig[(' . $sprache_index . ')] AS orgform', false);
$this->addSelect('ps.prestudent_id');
$this->addSelect('lv.bezeichnung as lvbezeichnung');
$this->addSelect('le.studiensemester_kurzbz');
$this->addSelect('a.typ');
$this->addSelect('campus.get_status_studierendenantrag(a.studierendenantrag_id) status');
$this->addSelect('count(1) as count');
$this->addGroupBy([
'pers.vorname',
'pers.nachname',
'pers.person_id',
's.matrikelnr',
'g.bezeichnung',
'g.studiengang_kz',
'o.bezeichnung_mehrsprachig',
'ps.prestudent_id',
'lv.bezeichnung',
'le.studiensemester_kurzbz',
'a.typ',
'a.studierendenantrag_id'
]);
$this->addJoin('lehre.tbl_note n', 'note');
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin('public.tbl_student s', 'student_uid');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_person pers', 'person_id');
$this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid');
$this->addJoin('public.tbl_studiengang g', 'ps.studiengang_kz=g.studiengang_kz');
$this->addJoin('public.tbl_prestudentstatus pss', 'pss.prestudent_id=ps.prestudent_id AND pss.studiensemester_kurzbz=le.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(ps.prestudent_id, le.studiensemester_kurzbz)', 'LEFT');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz');
$this->db->join('campus.tbl_studierendenantrag a', 'ps.prestudent_id=a.prestudent_id and a.typ = ?', 'LEFT', false);
$this->db->where("n.positiv", false);
/* $this->db->where_in("p.pruefungstyp_kurzbz1", ['kommPruef','zusKommPruef']);*/
$this->db->where_in("get_rolle_prestudent(ps.prestudent_id, null)", $this->config->item('antrag_prestudentstatus_whitelist'));
$this->db->where("g.aktiv", true);
$this->db->where('lv.studiengang_kz not in(
SELECT ps.studiengang_kz
FROM
public.tbl_prestudent ps1
JOIN public.tbl_prestudentstatus pss USING (prestudent_id)
WHERE pss.statusgrund_id in ?
AND ps.prestudent_id = ps1.prestudent_id)', null, false);
// NOTE(chris): is Wiederholer without set statusgrund (legacy?)
$this->db->where(
'(SELECT COUNT(*)
FROM (SELECT DISTINCT studiensemester_kurzbz
FROM tbl_prestudentstatus _s
WHERE ausbildungssemester=get_absem_prestudent(ps.prestudent_id, le.studiensemester_kurzbz)
AND prestudent_id=ps.prestudent_id) a) = 1',
null,
false
);
return $this->db->get_compiled_select($this->dbTable);
}
/**
* @return stdClass
*/
public function loadWhereCommitteeExamsFailed()
{
$this->load->config('studierendenantrag');
$this->dbTable = 'lehre.tbl_pruefung p';
$this->addSelect('p.datum');
$this->addJoin('lehre.tbl_note n', 'note');
$this->db->where("n.positiv", false);
$note_blacklist = $this->config->item('note_blacklist_wiederholung');
if ($note_blacklist)
$this->db->where_not_in("n.note", $note_blacklist);
$this->db->where_in("p.pruefungstyp_kurzbz", ['kommPruef','zusKommPruef']);
$this->addOrder('p.datum', 'DESC');
return $this->load();
}
/**
* @return void
*/
protected function withDetailsForStudierendenAntrag()
{
$this->load->config('studierendenantrag');
$sprache_index = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect('pers.vorname');
$this->addSelect('pers.nachname');
$this->addSelect('pers.person_id');
$this->addSelect('s.matrikelnr');
$this->addSelect('g.bezeichnung');
$this->addSelect('g.studiengang_kz');
$this->addSelect('o.bezeichnung_mehrsprachig[(' . $sprache_index . ')] AS orgform', false);
$this->addSelect('ps.prestudent_id');
$this->addSelect('lv.bezeichnung as lvbezeichnung');
$this->addSelect('le.studiensemester_kurzbz');
$this->addSelect('a.typ');
$this->addSelect('campus.get_status_studierendenantrag(a.studierendenantrag_id) status');
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin('public.tbl_student s', 'student_uid');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_person pers', 'person_id');
$this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid');
$this->addJoin('public.tbl_studiengang g', 'ps.studiengang_kz=g.studiengang_kz');
$this->addJoin('public.tbl_prestudentstatus pss', 'pss.prestudent_id=ps.prestudent_id AND pss.studiensemester_kurzbz=le.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(ps.prestudent_id, le.studiensemester_kurzbz)', 'LEFT');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz');
$this->addJoin('campus.tbl_studierendenantrag a', 'ps.prestudent_id=a.prestudent_id and a.typ=' . $this->escape(Studierendenantrag_model::TYP_WIEDERHOLUNG), 'LEFT');
$this->db->where_in("get_rolle_prestudent(ps.prestudent_id, null)", $this->config->item('antrag_prestudentstatus_whitelist'));
$this->db->where("g.aktiv", true);
$statusgruende = $this->config->item('status_gruende_wiederholer');
if (is_array($statusgruende) && !isEmptyArray($statusgruende)) {
foreach ($statusgruende as $k => $v) {
$statusgruende[$k] = $this->db->escape($v);
}
$this->db->where('lv.studiengang_kz NOT IN(
SELECT ps1.studiengang_kz
FROM
public.tbl_prestudent ps1
JOIN public.tbl_prestudentstatus pss USING (prestudent_id)
WHERE pss.statusgrund_id in (' . implode(',', $statusgruende) . ')
AND ps.prestudent_id = ps1.prestudent_id)', null, false);
}
}
/**
* @param integer $prestudent_id student_uid
*
* @return stdClass
*/
public function loadWhereCommitteeExamFailedForPrestudent($prestudent_id, $max_date = null, $studiensemester_kurzbz = null)
{
$this->withDetailsForStudierendenAntrag();
$this->db->where('ps.prestudent_id', $prestudent_id);
if ($max_date !== null) {
$this->db->where('p.datum <', $max_date);
}
if ($studiensemester_kurzbz !== null) {
$this->db->where('le.studiensemester_kurzbz', $studiensemester_kurzbz);
}
return $this->loadWhereCommitteeExamsFailed();
}
/**
* @param string $status
* @param \DateTime $maxDate
* @param \DateTime $minDate
*
* @return stdClass
*/
public function getAllPrestudentsWhereCommitteeExamFailed($status, $maxDate, $minDate)
{
$this->withDetailsForStudierendenAntrag();
if ($maxDate)
$this->db->where("p.datum <= ", $maxDate->format('Y-m-d'));
if ($minDate)
$this->db->where("p.datum > ", $minDate->format('Y-m-d'));
$this->db->where("b.aktiv", true);
if (is_array($status)) {
if (in_array(null, $status)) {
$status = array_filter($status);
if (count($status)) {
$this->db->group_start();
$this->db->where_in('campus.get_status_studierendenantrag(a.studierendenantrag_id)', $status);
$this->db->or_where('campus.get_status_studierendenantrag(a.studierendenantrag_id)', null);
$this->db->group_end();
} else {
$this->db->where('campus.get_status_studierendenantrag(a.studierendenantrag_id)', null);
}
} else {
$this->db->where_in('campus.get_status_studierendenantrag(a.studierendenantrag_id)', $status);
}
} else {
$this->db->where('campus.get_status_studierendenantrag(a.studierendenantrag_id)', $status);
}
return $this->loadWhereCommitteeExamsFailed();
}
}
@@ -0,0 +1,290 @@
<?php
class Studierendenantrag_model extends DB_Model
{
const TYP_ABMELDUNG = 'Abmeldung';
const TYP_ABMELDUNG_STGL = 'AbmeldungStgl';
const TYP_UNTERBRECHUNG = 'Unterbrechung';
const TYP_WIEDERHOLUNG = 'Wiederholung';
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'campus.tbl_studierendenantrag';
$this->pk = 'studierendenantrag_id';
$this->load->config('studierendenantrag');
$this->load->model('education/Studierendenantragstatus_model', 'StudierendenantragstatusModel');
}
public function loadCreatedForStudiengaenge($studiengaenge, $typ)
{
return $this->loadForStudiengaenge($studiengaenge, $typ, $this->StudierendenantragstatusModel::STATUS_CREATED);
}
public function loadForStudiengaenge($studiengaenge, $typ = null, $status = null, $sql = null)
{
if ($sql == null)
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung AS bezeichnung');
$this->addSelect('bezeichnung_mehrsprachig[(' . $sql . ')] AS orgform', false);
$this->addSelect('s.studierendenantrag_id');
$this->addSelect('matrikelnr');
$this->addSelect('studienjahr_kurzbz');
$this->addSelect('vorname');
$this->addSelect('nachname');
$this->addSelect('p.prestudent_id');
$this->addSelect('p.studiengang_kz');
$this->addSelect('semester');
$this->addSelect($this->dbTable . '.grund');
$this->addSelect($this->dbTable . '.datum');
$this->addSelect('datum_wiedereinstieg');
$this->addSelect($this->dbTable . '.typ');
$this->addSelect('st.studierendenantrag_statustyp_kurzbz as status');
$this->addSelect('dms_id');
$this->addSelect('st.bezeichnung[(' . $sql . ')] as statustyp');
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addJoin('public.tbl_student', 'prestudent_id');
$this->addJoin('public.tbl_person', 'person_id');
$this->addJoin('public.tbl_studiengang stg', 'p.studiengang_kz=stg.studiengang_kz');
$this->addJoin('public.tbl_studiensemester ss', 'studiensemester_kurzbz');
$this->addJoin('public.tbl_prestudentstatus ps', 'ps.prestudent_id=p.prestudent_id AND ps.studiensemester_kurzbz=ss.studiensemester_kurzbz AND ps.status_kurzbz=get_rolle_prestudent(p.prestudent_id, ss.studiensemester_kurzbz)');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, stg.orgform_kurzbz)');
$this->addJoin(
'campus.tbl_studierendenantrag_status as s',
'campus.get_status_id_studierendenantrag('. $this->dbTable .'.studierendenantrag_id) = studierendenantrag_status_id'
);
$this->addJoin('campus.tbl_studierendenantrag_statustyp as st', 'studierendenantrag_statustyp_kurzbz');
$this->db->where_in('p.studiengang_kz', $studiengaenge);
$where = [];
if ($status !== null)
$where['st.studierendenantrag_statustyp_kurzbz'] = $status;
if ($typ !== null)
$where[$this->dbTable . '.typ'] = $typ;
return $this->loadWhere($where);
}
public function loadActiveForStudiengaenge($studiengaenge)
{
// NOTE(chris): get language before changing things in the global db object because getUserLanguage() might use it and it should not have been tampered with
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->db->group_start();
$this->db->where_not_in('s.studierendenantrag_statustyp_kurzbz', [
Studierendenantragstatus_model::STATUS_CANCELLED,
Studierendenantragstatus_model::STATUS_APPROVED,
Studierendenantragstatus_model::STATUS_REJECTED,
Studierendenantragstatus_model::STATUS_OBJECTION_DENIED,
Studierendenantragstatus_model::STATUS_DEREGISTERED
]);
$this->db->or_group_start();
$this->db->where('s.studierendenantrag_statustyp_kurzbz', Studierendenantragstatus_model::STATUS_APPROVED);
$this->db->where('tbl_studierendenantrag.typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
$this->db->group_end();
$this->db->group_end();
return $this->loadForStudiengaenge($studiengaenge, null, null, $sql);
}
public function loadStgsWithAntraege($studiengaenge)
{
$this->addDistinct();
$this->addSelect('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung AS bezeichnung');
$this->addSelect('p.studiengang_kz');
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addJoin('public.tbl_studiengang stg', 'p.studiengang_kz=stg.studiengang_kz');
$this->addOrder('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung');
$this->db->where_in('p.studiengang_kz', $studiengaenge);
return $this->load();
}
public function isInStudiengang($studierendenantrag_id, $studiengaenge)
{
$this->addJoin('public.tbl_prestudent', 'prestudent_id');
$this->db->where_in('studiengang_kz', $studiengaenge);
return $this->load($studierendenantrag_id);
}
public function loadIdAndStatusWhere($where)
{
$this->addSelect('studierendenantrag_id');
$this->addSelect('campus.get_status_studierendenantrag(studierendenantrag_id) status');
return $this->loadWhere($where);
}
public function loadWithStatusWhere($where, $types = null)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$this->addSelect('*');
$this->addSelect('campus.get_status_studierendenantrag(studierendenantrag_id) status');
$this->addSelect('t.bezeichnung[(' . $lang . ')] statustyp');
$this->addJoin(
'campus.tbl_studierendenantrag_statustyp t',
'campus.get_status_studierendenantrag(studierendenantrag_id)=t.studierendenantrag_statustyp_kurzbz'
);
if ($types && is_array($types)) {
$this->db->where_in('typ', $types);
}
$this->addOrder('datum', 'DESC');
return $this->loadWhere($where);
}
/**
* Get the studiengang and ausbildungssemester the student was in
* for the studiensemester the antrag was committed for
*
* @param integer $antrag_id
*
* @return stdClass
*/
public function getStgAndSem($antrag_id)
{
$this->addSelect('p.studiengang_kz');
$this->addSelect('stg.bezeichnung');
$this->addSelect('s.ausbildungssemester');
$this->addSelect('plan.sprache');
$this->addSelect('COALESCE(plan.orgform_kurzbz, s.orgform_kurzbz, stg.orgform_kurzbz) AS orgform_kurzbz');
$this->addJoin(
'public.tbl_prestudentstatus s',
$this->dbTable . '.prestudent_id=s.prestudent_id AND ' . $this->dbTable . '.studiensemester_kurzbz=s.studiensemester_kurzbz'
);
$this->addJoin('public.tbl_prestudent p', $this->dbTable . '.prestudent_id=p.prestudent_id');
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addOrder('s.datum', 'DESC');
$this->addOrder('s.insertamum', 'DESC');
$this->addOrder('s.ext_id', 'DESC');
$this->addLimit(1);
$this->db->where_in('s.status_kurzbz', $this->config->item('antrag_prestudentstatus_whitelist'));
return $this->loadWhere([
$this->pk => $antrag_id
]);
}
/**
* Get the studiengang the student is in
*
* @param integer $antrag_id
*
* @return stdClass
*/
public function getStg($antrag_id)
{
$this->addSelect('p.studiengang_kz');
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addLimit(1);
return $this->load(
$antrag_id
);
}
public function getStgEmail($antrag_id)
{
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addJoin('public.tbl_studiengang sg', 'studiengang_kz');
$this->addSelect('sg.email');
return $this->load($antrag_id);
}
public function loadForPerson($person_id)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$this->addSelect('stg.bezeichnung');
$this->addSelect('bezeichnung_mehrsprachig[(' . $lang . ')] as orgform');
$this->addSelect('p.studiengang_kz');
$this->addSelect('st.studierendenantrag_statustyp_kurzbz as status');
$this->addSelect('st.bezeichnung[(' . $lang . ')] as status_bezeichnung');
$this->addSelect('p.prestudent_id');
$this->addSelect($this->dbTable . '.studierendenantrag_id');
$this->addSelect($this->dbTable . '.studiensemester_kurzbz');
$this->addSelect($this->dbTable . '.datum');
$this->addSelect($this->dbTable . '.typ');
$this->addSelect($this->dbTable . '.insertamum');
$this->addSelect($this->dbTable . '.insertvon');
$this->addSelect($this->dbTable . '.datum_wiedereinstieg');
$this->addSelect($this->dbTable . '.grund');
$this->addSelect($this->dbTable . '.dms_id');
$this->addSelect("(SELECT count(1) FROM campus.tbl_studierendenantrag_status WHERE studierendenantrag_id = " . $this->dbTable . ".studierendenantrag_id AND studierendenantrag_statustyp_kurzbz = 'Genehmigt') AS isapproved", false);
$this->addJoin('public.tbl_prestudent p', 'prestudent_id', 'RIGHT');
$this->addJoin('public.tbl_studiengang stg', 'p.studiengang_kz=stg.studiengang_kz');
$this->addJoin('public.tbl_prestudentstatus ps', 'ps.prestudent_id=p.prestudent_id AND ps.studiensemester_kurzbz=' . $this->dbTable . '.studiensemester_kurzbz AND ps.status_kurzbz=get_rolle_prestudent(p.prestudent_id, ' . $this->dbTable . '.studiensemester_kurzbz)', 'LEFT');
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
$this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, stg.orgform_kurzbz)');
$this->addJoin(
'campus.tbl_studierendenantrag_statustyp st',
'campus.get_status_studierendenantrag(studierendenantrag_id)=st.studierendenantrag_statustyp_kurzbz',
'LEFT'
);
$this->db->where("(SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=p.prestudent_id AND status_kurzbz='Student' LIMIT 1) IS NOT NULL", null, false);
return $this->loadWhere([
'p.person_id' => $person_id
]);
}
public function getAntraegeWhereWiedereinstiegBetween($start, $end)
{
$this->addSelect('sg.email');
$this->addSelect('vorname');
$this->addSelect('nachname');
$this->addSelect($this->dbTable.'.*');
$this->addJoin(
'campus.tbl_studierendenantrag_status s',
'campus.get_status_id_studierendenantrag(' . $this->dbTable . '.studierendenantrag_id)=s.studierendenantrag_status_id'
);
$this->addJoin('public.tbl_prestudent p', 'prestudent_id');
$this->addJoin('public.tbl_person', 'person_id');
$this->addJoin('public.tbl_studiengang sg', 'studiengang_kz');
$this->db->where('datum_wiedereinstieg >=', $start->format('Y-m-d'));
$this->db->where('datum_wiedereinstieg <=', $end->format('Y-m-d'));
return $this->loadWhere([
's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
$this->dbTable.'.typ' => self::TYP_UNTERBRECHUNG,
]);
}
public function getWithLastStatusWhere($where)
{
$this->addJoin(
'campus.tbl_studierendenantrag_status s',
'campus.get_status_id_studierendenantrag(' . $this->dbTable . '.studierendenantrag_id)=s.studierendenantrag_status_id'
);
return $this->loadWhere($where);
}
}
@@ -0,0 +1,104 @@
<?php
class Studierendenantraglehrveranstaltung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'campus.tbl_studierendenantrag_lehrveranstaltung';
$this->pk = 'studierendenantrag_lehrveranstaltung_id';
}
public function insertBatch($data)
{
// Check class properties
if (is_null($this->dbTable)) return error('The given database table name is not valid', EXIT_MODEL);
// DB-INSERT
$insert = $this->db->insert_batch($this->dbTable, $data);
if ($insert)
{
return success();
}
else
{
return error($this->db->error(), EXIT_DATABASE);
}
}
public function deleteWhere($where)
{
if (is_null($this->dbTable)) return error('The given database table name is not valid', EXIT_MODEL);
$delete = $this->db->delete($this->dbTable, $where);
if ($delete)
{
return success();
}
else
{
return error($this->db->error(), EXIT_DATABASE);
}
}
public function getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz)
{
$this->addSelect($this->dbTable . '.*');
$this->addSelect('a.prestudent_id');
$this->addSelect('lv.bezeichnung as lv_bezeichnung');
$this->addSelect('stat.insertamum as freigabedatum');
$this->addSelect('n.bezeichnung as note_bezeichnung');
$this->addSelect('stg.bezeichnung as stg_bezeichnung');
$this->addJoin('campus.tbl_studierendenantrag a', 'studierendenantrag_id');
$this->addJoin('lehre.tbl_note n', 'note');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_studiengang stg', 'ps.studiengang_kz = stg.studiengang_kz');
$this->addJoin(
'campus.tbl_studierendenantrag_status stat',
'stat.studierendenantrag_status_id = campus.get_status_id_studierendenantrag(a.studierendenantrag_id)'
);
$this->addJoin('public.tbl_student s', 'prestudent_id');
// NOTE(chris): last offizell note
$this->addJoin('(
SELECT z.*
FROM lehre.tbl_zeugnisnote z
LEFT JOIN public.tbl_studiensemester zs
USING(studiensemester_kurzbz)
JOIN (
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
FROM lehre.tbl_zeugnisnote zi
LEFT JOIN lehre.tbl_note zin
USING(note)
LEFT JOIN public.tbl_studiensemester zis
USING(studiensemester_kurzbz)
WHERE zin.aktiv AND zin.offiziell
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
) zx
ON (
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
AND z.student_uid=zx.student_uid
AND zs.start = zx.start
)) z', 'z.lehrveranstaltung_id=lv.lehrveranstaltung_id AND z.student_uid=s.student_uid', 'LEFT');
$this->addJoin('lehre.tbl_note zn', 'z.note = zn.note', 'LEFT');
$this->load->config('studierendenantrag');
$note_intern_angerechntet = $this->config->item('wiederholung_note_angerechnet');
return $this->loadWhere([
'ps.prestudent_id' => $prestudent_id,
'a.typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG,
'stat.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
'n.note <> ' => 0,
$this->dbTable . '.studiensemester_kurzbz' => $studiensemester_kurzbz,
'(n.note<>' . $this->db->escape($note_intern_angerechntet) . ' OR (z.note IS NOT NULL AND zn.positiv))' => null
]);
}
}
@@ -0,0 +1,52 @@
<?php
class Studierendenantragstatus_model extends DB_Model
{
const STATUS_CREATED = 'Erstellt';
const STATUS_APPROVED = 'Genehmigt';
const STATUS_REJECTED = 'Abgelehnt';
const STATUS_PASS = 'Verzichtet';
const STATUS_REOPENED = 'Offen';
const STATUS_CANCELLED = 'Zurueckgezogen';
const STATUS_LVSASSIGNED = 'Lvszugewiesen';
const STATUS_REMINDERSENT = 'EmailVersandt';
const STATUS_REQUESTSENT_1 = 'ErsteAufforderungVersandt';
const STATUS_REQUESTSENT_2 = 'ZweiteAufforderungVersandt';
const STATUS_OBJECTED = 'Beeinsprucht';
const STATUS_OBJECTION_DENIED = 'EinspruchAbgelehnt';
const STATUS_DEREGISTERED = 'Abgemeldet';
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'campus.tbl_studierendenantrag_status';
$this->pk = 'studierendenantrag_status_id';
}
public function loadWithTyp($studierendenantrag_status_id)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$this->addSelect($this->dbTable . '.*');
$this->addSelect('bezeichnung[(' . $lang . ')] AS typ');
$this->addJoin('campus.tbl_studierendenantrag_statustyp', 'studierendenantrag_statustyp_kurzbz');
return $this->load($studierendenantrag_status_id);
}
public function loadWithTypWhere($where)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$this->addSelect($this->dbTable . '.*');
$this->addSelect('bezeichnung[(' . $lang . ')] AS typ');
$this->addJoin('campus.tbl_studierendenantrag_statustyp', 'studierendenantrag_statustyp_kurzbz');
return $this->loadWhere($where);
}
}
@@ -102,7 +102,7 @@ class Zeugnisnote_model extends DB_Model
JOIN lehre.tbl_zeugnisnote zgnisnote USING (student_uid)
JOIN lehre.tbl_note note ON zgnisnote.note = note.note
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
WHERE pers.person_id = ?
AND zgnisnote.studiensemester_kurzbz = ?";
@@ -140,4 +140,83 @@ class Zeugnisnote_model extends DB_Model
return $this->execQuery($qry, $params);
}
/**
* Gets courses (Zeugnisnoten) for a student.
* @param string $student_uid,
* @param string $studiensemester_kurzbz
*
* @return object
*/
public function getZeugnisnoten($student_uid, $studiensemester_kurzbz)
{
$params = array();
$where='';
if ($student_uid != null)
{
$where .= " AND uid=?";
$params[] = $student_uid;
}
if ($studiensemester_kurzbz !=null)
{
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
$where2='';
if ($student_uid != null)
{
$where2 .= " AND student_uid=?";
$params[] = $student_uid;
}
if ($studiensemester_kurzbz !=null)
{
$where2 .= " AND studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
$qry = "SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
vw_student_lehrveranstaltung.ects, vw_student_lehrveranstaltung.semesterstunden,
tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id,
vw_student_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung,
vw_student_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
tbl_note.bezeichnung as note_bezeichnung,
tbl_note.positiv as note_positiv,
tbl_zeugnisnote.bemerkung as bemerkung,
vw_student_lehrveranstaltung.sort,
vw_student_lehrveranstaltung.zeugnis,
vw_student_lehrveranstaltung.studiengang_kz,
vw_student_lehrveranstaltung.lv_lehrform_kurzbz,
tbl_lehrveranstaltung.sws
FROM
(
campus.vw_student_lehrveranstaltung LEFT JOIN lehre.tbl_zeugnisnote
ON(uid=student_uid
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_zeugnisnote.studiensemester_kurzbz
AND vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
)
) LEFT JOIN lehre.tbl_note USING(note)
JOIN lehre.tbl_lehrveranstaltung ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
WHERE true $where
UNION
SELECT lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,student_uid AS uid,studiensemester_kurzbz, note, punkte,
uebernahmedatum, benotungsdatum,lehre.tbl_lehrveranstaltung.ects,lehre.tbl_lehrveranstaltung.semesterstunden, tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id, lehre.tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, lehre.tbl_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
tbl_note.bezeichnung as note_bezeichnung, tbl_note.positiv as note_positiv, tbl_zeugnisnote.bemerkung as bemerkung, tbl_lehrveranstaltung.sort, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.studiengang_kz,
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.sws
FROM
lehre.tbl_zeugnisnote
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
JOIN lehre.tbl_note USING(note)
WHERE true $where2
ORDER BY sort";
return $this->execQuery($qry, $params);
}
}
@@ -511,10 +511,10 @@ class Studiengang_model extends DB_Model
public function getStudiengangTyp($studiengang_kz, $typ = null)
{
$query = "SELECT DISTINCT(sgt.*)
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
WHERE studiengang_kz IN ?";
$params[] = $studiengang_kz;
$params = [$studiengang_kz];
if (!is_null($typ))
{
@@ -524,4 +524,80 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, $params);
}
/**
* @param array $studiengang_kzs
* @param array $not_antrag_typ (optional) If the prestudent has an antrag with one of the specified types it will be excluded from the result
* @param array $prestudent_stati (optional)
*
* @return stdClass
*/
public function getAktivePrestudenten($studiengang_kzs, $not_antrag_typ = null, $query = null)
{
$this->load->config('studierendenantrag');
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect($this->dbTable . '.studiengang_kz');
$this->addSelect($this->dbTable . '.bezeichnung');
$this->addSelect('o.orgform_kurzbz');
$this->addSelect('o.bezeichnung_mehrsprachig[(' . $sql . ')] AS orgform', false);
$this->addSelect('ps.ausbildungssemester AS semester');
$this->addSelect('ps.studiensemester_kurzbz');
$this->addSelect('p.prestudent_id');
$this->addSelect('pers.vorname');
$this->addSelect('pers.nachname');
$this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', " . $this->dbTable . ".bezeichnung, ')') AS name");
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
$this->addJoin(
'public.tbl_prestudentstatus ps',
'ps.prestudent_id=p.prestudent_id
AND ps.studiensemester_kurzbz=get_stdsem_prestudent(p.prestudent_id, NULL)
AND ps.ausbildungssemester=get_absem_prestudent(p.prestudent_id, NULL)
AND ps.status_kurzbz=get_rolle_prestudent(p.prestudent_id, NULL)'
);
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id');
$this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz)=o.orgform_kurzbz');
$this->addJoin('public.tbl_person pers', 'person_id');
$this->addJoin('public.tbl_student stud', 'p.prestudent_id=stud.prestudent_id', 'LEFT');
$this->db->where_in($this->dbTable . '.studiengang_kz', $studiengang_kzs);
$this->db->where_in('ps.status_kurzbz', $this->config->item('antrag_prestudentstatus_whitelist'));
$this->db->where($this->dbTable . ".aktiv", true);
if ($not_antrag_typ !== null && is_array($not_antrag_typ)) {
foreach($not_antrag_typ as $k => $v)
$not_antrag_typ[$k] = $this->db->escape($v);
$this->addJoin(
'campus.tbl_studierendenantrag a',
'a.prestudent_id=p.prestudent_id and a.typ in ('.
implode(',', $not_antrag_typ).
") AND campus.get_status_studierendenantrag (a.studierendenantrag_id)<>'" .
Studierendenantragstatus_model::STATUS_CANCELLED . "'",
'LEFT'
);
$this->db->where('a.typ IS NULL');
}
if ($query) {
$query = explode(' ', $query);
$this->db->group_start();
foreach ($query as $q) {
$this->db->group_start();
$this->db->where('pers.vorname ILIKE', "%" . $q . "%");
$this->db->or_where('pers.nachname ILIKE', "%" . $q . "%");
$this->db->or_where('stud.student_uid ILIKE', "%" . $q . "%");
$this->db->or_where($this->dbTable . '.bezeichnung ILIKE', "%" . $q . "%");
if (is_numeric($q))
$this->db->or_where('p.prestudent_id', $q);
$this->db->group_end();
}
$this->db->group_end();
}
$this->addOrder('name');
return $this->load();
}
}
@@ -45,7 +45,7 @@ class Studienplan_model extends DB_Model
$whereArray["tbl_studienplan.sprache"] = $sprache;
}
return $this->StudienplanModel->loadWhere($whereArray);
return $this->loadWhere($whereArray);
}
public function getStudienplanLehrveranstaltung($studienplan_id, $semester)
@@ -53,6 +53,54 @@ class Studienplan_model extends DB_Model
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'studienplan_id');
$this->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
$this->addOrder('tbl_lehrveranstaltung.sort');
return $this->loadWhere(array(
'studienplan_id' => $studienplan_id,
'tbl_studienplan_lehrveranstaltung.semester' => $semester
));
}
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$sql = 'SELECT student_uid FROM public.tbl_student WHERE prestudent_id=' . $this->escape($prestudent_id);
$this->addSelect($this->dbTable . '.*');
$this->addSelect('lv.*');
$this->addSelect('COALESCE(n.bezeichnung_mehrsprachig[(' . $lang . ')], NULL) AS note');
$this->addSelect('n.positiv');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.sort plan_sort');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent');
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'studienplan_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
// NOTE(chris): last offizell note
$this->addJoin('(
SELECT z.*
FROM lehre.tbl_zeugnisnote z
LEFT JOIN public.tbl_studiensemester zs
USING(studiensemester_kurzbz)
JOIN (
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
FROM lehre.tbl_zeugnisnote zi
LEFT JOIN lehre.tbl_note zin
USING(note)
LEFT JOIN public.tbl_studiensemester zis
USING(studiensemester_kurzbz)
WHERE zin.aktiv AND zin.offiziell
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
) zx
ON (
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
AND z.student_uid=zx.student_uid
AND zs.start = zx.start
)) zn', 'zn.lehrveranstaltung_id=lv.lehrveranstaltung_id AND zn.student_uid=( ' . $sql . ')', 'LEFT');
$this->addJoin('lehre.tbl_note n', 'n.note=zn.note', 'LEFT');
$this->addOrder('lehre.tbl_studienplan_lehrveranstaltung.sort');
$this->addOrder('lv.sort');
return $this->loadWhere(array(
'studienplan_id' => $studienplan_id,
'tbl_studienplan_lehrveranstaltung.semester' => $semester
@@ -337,4 +337,17 @@ class Person_model extends DB_Model
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
}
public function loadPrestudent($prestudent_id)
{
$this->addSelect($this->dbTable . '.*');
$this->addJoin('public.tbl_prestudent p', 'person_id');
$this->addLimit(1);
return $this->loadWhere([
'prestudent_id' => $prestudent_id
]);
}
}
@@ -0,0 +1,75 @@
<?php
$includesArray = array(
'title' => 'Bismeldestichtage',
'axios027' => true,
'bootstrap5' => true,
'fontawesome6' => true,
'vue3' => true,
'filtercomponent' => true,
'navigationcomponent' => true,
'tabulator5' => true,
'customCSSs' => array('vendor/vuejs/vuedatepicker_css/main.css'),
'customJSs' => array('vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js'),
'customJSModules' => array('public/js/apps/Bismeldestichtag/Bismeldestichtag.js')
);
$this->load->view('templates/FHC-Header', $includesArray);
?>
<div id="main">
<!-- Navigation component -->
<core-navigation-cmpt></core-navigation-cmpt>
<!-- Fetch component -->
<core-fetch-cmpt
v-bind:api-function="fetchCmptApiFunction"
v-bind:api-function-parameters="fetchCmptApiFunctionParams"
v-bind:refresh="fetchCmptRefresh"
@data-fetched="fetchCmptDataFetched">
</core-fetch-cmpt>
<div id="content">
<!-- input fields -->
<div class="row">
<div class="col-5">
<datepicker v-model="meldestichtag"
v-bind:enable-time-picker="false"
v-bind:placeholder="'Meldestichtag'"
v-bind:text-input="true"
v-bind:auto-apply="true"
locale="de"
format="dd.MM.yyyy"
model-type="yyyy-MM-dd">
</datepicker>
</div>
<div class="col-4">
<select class="form-select" name="studiensemester_kurzbz" v-model="currSem">
<option v-for="sem in semList" :value="sem.studiensemester_kurzbz">
{{ sem.studiensemester_kurzbz }}
</option>
</select>
</div>
<div class="col-3">
<button type="button" class="btn btn-primary" @click="handlerAddBismeldestichtag">
<?php echo $this->p->t('bismeldestichtag', 'stichtagHinzufuegen') ?>
</button>
</div>
</div>
<br />
<!-- Filter component -->
<div class="row">
<div class="col">
<core-filter-cmpt
title="<?php echo $this->p->t('bismeldestichtag', 'stichtageVerwalten') ?>"
ref="bismeldestichtageTable"
:side-menu="false"
:tabulator-options="bismeldestichtagTabulatorOptions"
:tabulator-events="bismeldestichtagTabulatorEventHandlers"
:table-only="true">
</core-filter-cmpt>
</div>
</div>
</div>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
+3
View File
@@ -47,6 +47,9 @@ $saved = isset($saved) && $saved === true;
<p>
<?php echo $this->p->t('uhstat', 'uhstat1AnmeldungEinleitungstext') ?>
</p>
<p>
<?php echo $this->p->t('uhstat', 'uhstat1EinleitungSvnrtext') ?>
</p>
<br>
<?php if ($editPermission): ?>
<?php if (isset($successMessage) && !isEmptyString($successMessage)): ?>
+54
View File
@@ -0,0 +1,54 @@
<?php
$sitesettings = array(
'title' => 'Antrag auf Änderung des Studierendenstatus',
'cis' => true,
'vue3' => true,
'axios027' => true,
'bootstrap5' => true,
'fontawesome6' => true,
'phrases' => array(
),
'customJSModules' => array('public/js/apps/lehre/Antrag.js'),
'customCSSs' => array(
'public/css/Fhc.css',
'vendor/vuejs/vuedatepicker_css/main.css'
),
'customJSs' => array(
)
);
$this->load->view(
'templates/FHC-Header',
$sitesettings
);
?>
<div id="wrapper">
<div class="fhc-header">
<h1 class="h2"><?= $this->p->t('studierendenantrag', 'antrag_header'); ?></h1>
</div>
<div class="fhc-container row">
<div class="col-sm-8 mb-3">
<studierendenantrag-antrag
prestudent-id="<?= $prestudent_id; ?>"
antrag-type="<?= $antrag_type; ?>"
studierendenantrag-id="<?= $studierendenantrag_id; ?>"
v-model:info-array="infoArray"
v-model:status-msg="status.msg"
v-model:status-severity="status.severity"
>
</studierendenantrag-antrag>
</div>
<div class="col-sm-4 mb-3">
<studierendenantrag-status :msg="status.msg" :severity="status.severity"></studierendenantrag-status>
<studierendenantrag-infoblock :infos="infoArray"></studierendenantrag-infoblock>
</div>
</div>
</div>
<?php
$this->load->view(
'templates/FHC-Footer',
$sitesettings
);
@@ -0,0 +1,59 @@
<?php
use \DateTime as DateTime;
$sitesettings = array(
'title' => 'Anträge auf Änderung des Studierendenstatus',
'cis' => true,
'vue3' => true,
'axios027' => true,
'bootstrap5' => true,
'tabulator5' => true,
'fontawesome6' => true,
'primevue3' => true,
'phrases' => array(
'global',
'ui',
'studierendenantrag',
'lehre',
'person',
),
'customJSModules' => array('public/js/apps/lehre/Antrag/Leitung.js'),
'customCSSs' => array(
'public/css/Fhc.css'
),
'customJSs' => array(
)
);
$this->load->view(
'templates/FHC-Header',
$sitesettings
);
?>
<div id="wrapper">
<div class="fhc-header">
<h1><?= $this->p->t('studierendenantrag', 'antrag_header'); ?></h1>
</div>
<div class="fhc-container row">
<div class="col-xs-8">
<studierendenantrag-leitung
:stg-a="<?= htmlspecialchars(json_encode(array_values($stgA))); ?>"
:stg-l="<?= htmlspecialchars(json_encode(array_values($stgL))); ?>"
>
</studierendenantrag-leitung>
</div>
<div class="col-xs-4">
</div>
</div>
</div>
<?php
$this->load->view(
'templates/FHC-Footer',
$sitesettings
);
@@ -0,0 +1,139 @@
<?php
$sitesettings = array(
'title' => 'Antrag auf Änderung des Studierendenstatus',
'cis' => true,
'vue3' => true,
'axios027' => true,
'bootstrap5' => true,
'fontawesome6' => true,
'phrases' => array(
),
'customJSModules' => array('public/js/apps/lehre/Antrag/Student.js'),
'customCSSs' => array(
'public/css/Fhc.css'
),
'customJSs' => array(
)
);
$this->load->view(
'templates/FHC-Header',
$sitesettings
);
?>
<div id="wrapper">
<div class="fhc-header">
<h1 class="h2"><?= $this->p->t('studierendenantrag', 'antrag_header'); ?></h1>
</div>
<div class="fhc-container row">
<div class="col-xs-8">
<?php if ($antraege) { ?>
<?php foreach($antraege as $prestudent_id => $array){ ?>
<h4><?= $array['bezeichnungStg']; ?> (<?= $array['bezeichnungOrgform']; ?>)</h4>
<?php foreach ($array['allowedNewTypes'] as $type) { ?>
<div class="alert alert-secondary">
<p><?= $this->p->t('studierendenantrag', 'calltoaction_' . $type); ?></p>
<hr>
<a href="<?= site_url('lehre/Studierendenantrag/' . strtolower($type) . '/' . $prestudent_id); ?>" class="btn btn-outline-secondary">
<i class="fa fa-plus"></i> <?= $this->p->t('studierendenantrag', 'antrag_typ_' . $type); ?>
</a>
</div>
<?php } ?>
<table class="table">
<thead>
<tr>
<th>#</th>
<th><?= $this->p->t('studierendenantrag', 'antrag_typ'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_status'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_studiensemester'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_erstelldatum'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_datum_wiedereinstieg'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_grund'); ?></th>
<th><?= $this->p->t('studierendenantrag', 'antrag_dateianhaenge'); ?></th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<?php foreach($array['antraege'] as $antrag){ ?>
<tr>
<td><?= $antrag->studierendenantrag_id; ?></td>
<td><?= $this->p->t('studierendenantrag', 'antrag_typ_' . $antrag->typ); ?></td>
<td><?= $antrag->status_bezeichnung; ?></td>
<td><?= $antrag->studiensemester_kurzbz; ?></td>
<td><?= (new DateTime($antrag->datum))->format('d.m.Y'); ?></td>
<td><?= $antrag->datum_wiedereinstieg ? (new DateTime($antrag->datum_wiedereinstieg))->format('d.m.Y') : ''; ?></td>
<td><!-- Button trigger modal -->
<?php if($antrag->grund){ ?>
<a href="#modalgrund<?= $antrag->studierendenantrag_id; ?>" data-bs-toggle="modal">
<?= $this->p->t('studierendenantrag', 'antrag_grund'); ?>
</a>
<!-- Modal -->
<div class="modal fade" id="modalgrund<?= $antrag->studierendenantrag_id; ?>" tabindex="-1" aria-labelledby="modalgrundLabel<?= $antrag->studierendenantrag_id; ?>" aria-hidden="true">
<div class="modal-dialog modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modalgrundLabel<?= $antrag->studierendenantrag_id; ?>"><?= $this->p->t('studierendenantrag', 'antrag_grund'); ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<textarea class="form-control" style="width: 100%; height: 250px;" readonly><?= $antrag->grund; ?></textarea>
</div>
</div>
</div>
</div>
<?php } ?>
</td>
<td>
<?php if($antrag->dms_id) {?>
<a
class="text-decoration-none"
href="<?= site_url('lehre/Antrag/Attachment/show/' . $antrag->dms_id) ?>"
target="_blank">
<i class="fa fa-paperclip" aria-hidden="true"></i> <?= $this->p->t('studierendenantrag', 'antrag_anhang'); ?>
</a>
<?php } ?>
</td>
<td>
<a href="<?= site_url('lehre/Studierendenantrag/' . strtolower($antrag->typ) . '/' . $antrag->prestudent_id . '/' . $antrag->studierendenantrag_id); ?>"><i class="fa-solid fa-pen" title="<?= $this->p->t('studierendenantrag', 'btn_edit'); ?>"></i></a>
<?php if ($antrag->typ != Studierendenantrag_model::TYP_WIEDERHOLUNG && in_array($antrag->status, [
Studierendenantragstatus_model::STATUS_APPROVED,
Studierendenantragstatus_model::STATUS_OBJECTED,
Studierendenantragstatus_model::STATUS_OBJECTION_DENIED,
Studierendenantragstatus_model::STATUS_REMINDERSENT
])) { ?>
<a class="ms-2" target="_blank" href="<?= base_url('cis/private/pdfExport.php?xml=Antrag' . $antrag->typ . '.xml.php&xsl=Antrag' . $antrag->typ . '&id=' . $antrag->studierendenantrag_id . '&uid=' . getAuthUID()); ?>"><i class="fa-solid fa-download" title="<?= $this->p->t('studierendenantrag', 'btn_download_antrag'); ?>"></i></a>
<?php } ?>
<?php if ($antrag->typ == Studierendenantrag_model::TYP_WIEDERHOLUNG && $antrag->status == Studierendenantragstatus_model::STATUS_APPROVED) { ?>
<a class="ms-2" href="#modallv<?= $antrag->studierendenantrag_id; ?>" data-bs-toggle="modal"><?= $this->p->t('studierendenantrag', 'btn_show_lvs'); ?></a>
<lv-popup id="modallv<?= $antrag->studierendenantrag_id; ?>" antrag-id = "<?= $antrag->studierendenantrag_id; ?>">
<?= $this->p->t('studierendenantrag', 'my_lvs'); ?>
</lv-popup>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } ?>
<?php } else { ?>
<p class="alert alert-danger" role="alert">
<?= $this->p->t('studierendenantrag', 'error_no_student'); ?>
</p>
<?php } ?>
</div>
<div class="col-xs-4">
</div>
</div>
</div>
<?php
$this->load->view(
'templates/FHC-Footer',
$sitesettings
);
@@ -0,0 +1,41 @@
<?php
$sitesettings = array(
'title' => 'Antrag Wiederholung vom Studium',
'cis' => true,
'vue3' => true,
'axios027' => true,
'bootstrap5' => true,
'fontawesome6' => true,
'tabulator5' => true,
'phrases' => array(
'ui',
'lehre',
'global'
),
'customJSModules' => array('public/js/apps/lehre/Antrag/Lvzuweisung.js'),
'customCSSs' => array(
),
'customJSs' => array(
)
);
$this->load->view(
'templates/FHC-Header',
$sitesettings
);
?>
<div id="wrapper" class="overflow-hidden">
<div class="fhc-header" v-if="notinframe">
<h1 class="h2"><?= $this->p->t('studierendenantrag', 'title_lvzuweisen', ['name' => $antrag->name]);?></h1>
</div>
<div class="fhc-container row mt-3">
<lv-zuweisung antrag-id="<?= $antrag_id; ?>" initial-status-code="<?= $antrag->status; ?>" initial-status-msg="<?= $antrag->statustyp; ?>"<?= ($antrag->status != Studierendenantragstatus_model::STATUS_CREATED && $antrag->status != Studierendenantragstatus_model::STATUS_LVSASSIGNED) ? ' disabled' : ''; ?>></lv-zuweisung>
</div>
</div>
<?php
$this->load->view(
'templates/FHC-Footer',
$sitesettings
);
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RDF:RDF
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:NOTE="<?= $url; ?>/rdf#"
>
<?php if($lvs) { ?>
<RDF:Seq about="<?= $url; ?>/liste">
<?php foreach($lvs as $row) { ?>
<?php $freigabedatum = new DateTime($row->freigabedatum); ?>
<?php $benotungsdatum = new DateTime($row->insertamum); ?>
<RDF:li>
<RDF:Description id="<?= $row->studierendenantrag_lehrveranstaltung_id; ?>/<?= $row->prestudent_id; ?>/<?= $row->studiensemester_kurzbz; ?>" about="<?= $url; ?>/<?= $row->studierendenantrag_lehrveranstaltung_id; ?>/<?= $row->prestudent_id; ?>/<?= $row->studiensemester_kurzbz; ?>" >
<NOTE:studierendenantrag_lehrveranstaltung_id><![CDATA[<?= $row->studierendenantrag_lehrveranstaltung_id; ?>]]></NOTE:studierendenantrag_lehrveranstaltung_id>
<NOTE:lehrveranstaltung_id><![CDATA[<?= $row->lehrveranstaltung_id; ?>]]></NOTE:lehrveranstaltung_id>
<NOTE:prestudent_id><![CDATA[<?= $row->prestudent_id; ?>]]></NOTE:prestudent_id>
<NOTE:mitarbeiter_uid><![CDATA[<?= $row->insertvon; ?>]]></NOTE:mitarbeiter_uid>
<NOTE:studiensemester_kurzbz><![CDATA[<?= $row->studiensemester_kurzbz; ?>]]></NOTE:studiensemester_kurzbz>
<NOTE:note><![CDATA[<?= $row->note; ?>]]></NOTE:note>
<NOTE:freigabedatum_iso><![CDATA[<?= $freigabedatum->format('c'); ?>]]></NOTE:freigabedatum_iso>
<NOTE:freigabedatum><![CDATA[<?= $freigabedatum->format('d.m.Y'); ?>]]></NOTE:freigabedatum>
<NOTE:benotungsdatum_iso><![CDATA[<?= $benotungsdatum->format('c'); ?>]]></NOTE:benotungsdatum_iso>
<NOTE:benotungsdatum><![CDATA[<?= $benotungsdatum->format('d.m.Y'); ?>]]></NOTE:benotungsdatum>
<NOTE:note_bezeichnung><![CDATA[<?= $row->note_bezeichnung; ?>]]></NOTE:note_bezeichnung>
<NOTE:lehrveranstaltung_bezeichnung><![CDATA[<?= $row->lv_bezeichnung; ?>]]></NOTE:lehrveranstaltung_bezeichnung>
<NOTE:studiengang><![CDATA[<?= $row->stg_bezeichnung; ?>]]></NOTE:studiengang>
</RDF:Description>
</RDF:li>
<?php } ?>
</RDF:Seq>
<?php } ?>
</RDF:RDF>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RDF:RDF
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:DBDML="http://www.technikum-wien.at/dbdml/rdf#"
>
<RDF:Seq RDF:about="http://www.technikum-wien.at/dbdml/msg">
<RDF:li>
<RDF:Description RDF:about="http://www.technikum-wien.at/dbdml/0" >
<DBDML:return><?= $return ? 'true' : 'false'; ?></DBDML:return>
<DBDML:errormsg><![CDATA[<?= implode("/n", $errormsg);?>]]></DBDML:errormsg>
<DBDML:warning><![CDATA[]]></DBDML:warning>
<DBDML:data><![CDATA[]]></DBDML:data>
</RDF:Description>
</RDF:li>
</RDF:Seq>
</RDF:RDF>
@@ -142,7 +142,7 @@ FROM
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC(lema.semesterstunden, 2) AS "stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
@@ -232,7 +232,7 @@ FROM
SELECT
pa.lehreinheit_id,
lv.lehrveranstaltung_id,
pa.projektarbeit_id AS "projektarbeit_id",
pa.projektarbeit_id::text AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
@@ -375,9 +375,9 @@ $filterWidgetArray = array(
orgform_kurzbz: {visible: false, headerFilter:"input"},
person_id: {visible: false, headerFilter:"input"},
lv_oe_kurzbz: {visible: false, headerFilter:"input"},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:2},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}
bottomCalc:"sum", bottomCalcParams:{precision:2}
},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
@@ -149,7 +149,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
(person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC(lema.semesterstunden, 2) AS "stunden",
lema.stundensatz,
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -400,9 +400,9 @@ $filterWidgetArray = array(
person_id: {visible: false, headerFilter:"input"},
lv_oe_kurzbz: {visible: false, headerFilter:"input"},
lektor: {headerFilter:"input", widthGrow: 2},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:2},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
bottomCalc:"sum", bottomCalcParams:{precision:2}},
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
@@ -159,7 +159,7 @@ FROM
(
SELECT
/* lehrauftraege also planned with dummies, therefore personalnummer is needed */
ma.personalnummer,
ma.personalnummer::text,
lema.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
@@ -179,7 +179,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
(person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC(lema.semesterstunden, 2) AS "stunden",
lema.stundensatz,
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -219,7 +219,7 @@ FROM
(SELECT
uid
FROM
public.tbl_benutzer JOIN public.tbl_mitarbeiter ma
public.tbl_benutzer JOIN public.tbl_mitarbeiter ma
ON tbl_benutzer.uid = ma.mitarbeiter_uid
WHERE
person_id = tmp_projektbetreuung.person_id
@@ -272,7 +272,7 @@ FROM
pa.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
pa.projektarbeit_id AS "projektarbeit_id",
pa.projektarbeit_id::text AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
@@ -414,7 +414,7 @@ $filterWidgetArray = array(
row_index: {visible: false},
personalnummer: {visible: false, headerFilter:"input"},
auftrag: {
headerFilter:"input", widthGrow: 2,
headerFilter:"input", widthGrow: 2,
bottomCalc:"count", bottomCalcFormatter:function(cell){return "'. ucfirst($this->p->t('global', 'anzahl')). ': " + cell.getValue();}
},
stg_typ_kurzbz: {headerFilter:"input"},
@@ -432,9 +432,9 @@ $filterWidgetArray = array(
person_id: {visible: false, headerFilter:"input"},
lv_oe_kurzbz: {headerFilter:"input"},
lektor: {headerFilter:"input", widthGrow: 2},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:2},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
bottomCalc:"sum", bottomCalcParams:{precision:2}},
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
+10 -3
View File
@@ -9,7 +9,6 @@
'jqueryui1' => true,
'ajaxlib' => true,
'tablesorter2' => true,
'tinymce4' => true,
'sbadmintemplate3' => true,
'addons' => true,
'navigationwidget' => true,
@@ -126,10 +125,18 @@
</table>
</div>
<div class="col-lg-4 table-responsive">
<form action="<?php echo base_url('soap/datenverbund_client.php?action=pruefeBPK');?>" method="POST" target="_blank">
<form
action="<?php echo base_url('soap/datenverbund_client.php?action=pruefeBPK');?>"
method="POST"
target="_blank"
>
<input type="hidden" name="vorname" value="<?php echo $stammdaten->vorname; ?>"/>
<input type="hidden" name="nachname" value="<?php echo $stammdaten->nachname; ?>"/>
<input type="hidden" name="geburtsdatum" value="<?php echo mb_str_replace('-', '',$stammdaten->gebdatum); ?>"/>
<input
type="hidden"
name="geburtsdatum"
value="<?php echo mb_str_replace('-', '', $stammdaten->gebdatum); ?>"
/>
<input type="hidden" name="geschlecht" value="<?php echo mb_strtoupper($stammdaten->geschlecht); ?>"/>
<input type="submit" value="Namenssuche starten" class="btn btn-default"/>
</form>
@@ -31,21 +31,35 @@ $query = '
ORDER BY l.log_id DESC
LIMIT 1
)
AND '. $LOGDATA_VON .' = (
AND ('. $LOGDATA_VON .' = (
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.person_id = p.person_id
ORDER BY l.log_id DESC
LIMIT 1
)
OR
(
(
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.person_id = p.person_id
ORDER BY l.log_id DESC
LIMIT 1
) IS NULL
)
)
AND l.zeitpunkt >= pss.insertamum
ORDER BY l.log_id DESC
LIMIT 1
) AS "Nachricht",
(
SELECT SUM(konto.betrag)
SELECT
CASE
WHEN COUNT(CASE WHEN konto.betrag != 0 THEN 1 END) = 0 THEN null
ELSE SUM(konto.betrag)
END AS "Kaution"
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
@@ -292,9 +292,12 @@
rueck.datum_bis AS "HoldDate",
rueck.bezeichnung AS "Rueckstellgrund",
(
SELECT SUM(konto.betrag)
SELECT
CASE
WHEN COUNT(CASE WHEN konto.betrag != 0 THEN 1 END) = 0 THEN null
ELSE SUM(konto.betrag)
END AS "Kaution"
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
@@ -8,7 +8,7 @@
'dialoglib' => true,
'ajaxlib' => true,
'tablesorter2' => true,
'tinymce4' => true,
'tinymce5' => true,
'sbadmintemplate3' => true,
'addons' => true,
'navigationwidget' => true,
@@ -267,9 +267,12 @@ $query = '
LIMIT 1
) AS "AktenId",
(
SELECT SUM(konto.betrag)
SELECT
CASE
WHEN COUNT(CASE WHEN konto.betrag != 0 THEN 1 END) = 0 THEN null
ELSE SUM(konto.betrag)
END AS "Kaution"
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
@@ -198,7 +198,11 @@ $query = '
LIMIT 1
) AS "InfoCenterMitarbeiter",
(
SELECT SUM(konto.betrag)
SELECT
CASE
WHEN COUNT(CASE WHEN konto.betrag != 0 THEN 1 END) = 0 THEN null
ELSE SUM(konto.betrag)
END AS "Kaution"
FROM public.tbl_konto konto
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
@@ -10,7 +10,7 @@
'dialoglib' => true,
'ajaxlib' => true,
'tablesorter2' => true,
'tinymce4' => true,
'tinymce5' => true,
'sbadmintemplate3' => true,
'addons' => true,
'navigationwidget' => true,
@@ -131,7 +131,11 @@
<?php echo $this->p->t('infocenter', 'zgvNichtErfuellt') ?>
</button>
<?php if ($studiengang_typ === 'm') : ?>
<button type="button" class="btn btn-default zgvAkzeptierenPruefung" id="zgvAkzeptierenPruefung_<?php echo $prestudent_id ?>">
<button
type="button"
class="btn btn-default zgvAkzeptierenPruefung"
id="zgvAkzeptierenPruefung_<?php echo $prestudent_id ?>"
>
<?php echo $this->p->t('infocenter', 'zgvErfuelltPruefung') ?>
</button>
<?php endif; ?>
@@ -447,7 +447,6 @@
<div class="form-inline">
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
<select name="absgstatusgrund"
<?php echo $disabledStg ?>
<?php echo $disabledPer ?>
class="d-inline float-right"
required>
@@ -460,7 +459,7 @@
</select>
<span class="input-group-btn">
<button type="button"
class="btn btn-default absageBtn" <?php echo $disabledStg . ' ' . $disabledPer?> id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
class="btn btn-default absageBtn" <?php echo $disabledPer?> id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('ui', 'absagen') ?>
</button>
</span>
@@ -0,0 +1,197 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Write a new message or reply using templates',
'jquery3' => true,
'jqueryui1' => true,
'bootstrap3' => true,
'ajaxlib' => true,
'fontawesome4' => true,
'tinymce3' => true,
'sbadmintemplate3' => true,
'dialoglib' => true,
'widgets' => true,
'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'),
'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/fasMessageWrite.js')
)
);
?>
<body>
<div id="wrapper">
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo ucfirst($this->p->t('ui', 'nachrichtSenden')); ?>
</h3>
</div>
</div>
<form id="sendForm" method="post" action="<?php echo site_url('/system/messages/Messages/sendImplicitTemplate'); ?>">
<div class="row">
<div class="form-group">
<div class="col-lg-1 msgfieldcol-left">
<label>
<?php echo ucfirst($this->p->t('global', 'empfaenger')); ?>:
</label>
</div>
<div class="col-lg-11 msgfieldcol-right">
<?php echo $recipientsList; ?>
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-lg-1 msgfield msgfieldcol-left">
<label>
<?php echo ucfirst($this->p->t('global', 'betreff')); ?>:
</label>
</div>
&nbsp;
<div class="col-lg-7">
<input id="subject" class="form-control" type="text" value="<?php echo $subject; ?>" name="subject">
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-lg-9">
<label>
<?php echo ucfirst($this->p->t('global', 'nachricht')); ?>:
</label>
<textarea id="bodyTextArea" class="bodyTextArea" name="body">
<?php echo $body; ?>
</textarea>
</div>
<div class="col-lg-3">
<div class="form-group">
<label>
<?php echo ucfirst($this->p->t('ui', 'felder')); ?>:
</label>
<?php
$size = count($variables) > 19 ? 19 : count($variables);
echo $this->widgetlib->widget(
'MultipleDropdown_widget',
array('elements' => success($variables)),
array(
'name' => 'variables[]',
'id' => 'variables',
'size' => $size,
'multiple' => true
)
);
?>
</div>
<br>
<div class="form-group">
<label>
<?php echo ucfirst($this->p->t('ui', 'meineFelder')); ?>:
</label>
<?php
$size = count($user_fields) > 5 ? 5 : count($user_fields);
echo $this->widgetlib->widget(
'MultipleDropdown_widget',
array('elements' => success($user_fields)),
array(
'name' => 'user_fields[]',
'id' => 'user_fields',
'size' => $size,
'multiple' => true
)
);
?>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-xs-3">
<?php
echo $this->widgetlib->widget(
'Vorlage_widget',
array('oe_kurzbz' => $organisationUnits, 'isAdmin' => $senderIsAdmin),
array('name' => 'vorlage', 'id' => 'vorlageDnD')
);
?>
</div>
<div class="col-xs-6">
<button id="sendButton" class="btn btn-default pull-right" type="button">
<?php echo $this->p->t('ui', 'senden'); ?>
</button>
</div>
</div>
<br>
<hr>
<div class="row">
<div class="col-lg-12">
<label>
<?php echo ucfirst($this->p->t('global', 'vorschau')); ?>:
</label>
</div>
</div>
<div class="well" id="templatePreviewDiv">
<div class="row">
<div class="col-sm-12" style="display: inline">
<div class="form-group form-inline">
<div class="input-group">
<?php
echo $this->widgetlib->widget(
'Dropdown_widget',
array(
'elements' => success($recipientsArray),
'emptyElement' => ucfirst($this->p->t('global', 'empfaenger')).'...'
),
array(
'name' => 'recipients[]',
'id' => 'recipients'
)
);
?>
<span class="input-group-btn">
<a class="btn btn-default" href="#templatePreviewDiv" id="refresh">
<?php echo ucfirst($this->p->t('ui', 'refresh')); ?>
</a>
</span>
</div>
</div>
</div>
</div>
<br>
<textarea id="tinymcePreview" class="tinymcePreview"></textarea>
</div>
<?php echo $recipients_ids; ?>
<?php echo $relationmessage_id; ?>
<?php echo $type; ?>
</form>
</div>
</div>
</div>
</body>
<?php $this->load->view("templates/FHC-Footer"); ?>
@@ -12,7 +12,7 @@
'tabulator4' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tinymce4' => true,
'tinymce5' => true,
'phrases' => array('global', 'ui'),
'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'),
'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/read.js')
@@ -10,7 +10,7 @@
'sbadmintemplate3' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tinymce4' => true,
'tinymce5' => true,
'phrases' => array('global', 'ui'),
'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'),
'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/write.js')
@@ -10,7 +10,7 @@
'sbadmintemplate3' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tinymce4' => true,
'tinymce5' => true,
'phrases' => array('global', 'ui'),
'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'),
'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/writeReply.js')
@@ -6,7 +6,7 @@
'jquery3' => true,
'bootstrap3' => true,
'fontawesome4' => true,
'tinymce4' => true,
'tinymce5' => true,
'sbadmintemplate3' => true,
'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'),
'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/messageWriteReply.js')
@@ -8,7 +8,7 @@
'bootstrap3' => true,
'ajaxlib' => true,
'fontawesome4' => true,
'tinymce4' => true,
'tinymce5' => true,
'sbadmintemplate3' => true,
'dialoglib' => true,
'widgets' => true,
@@ -1,5 +1,5 @@
<?php
$this->load->view('templates/header', array('title' => 'VorlageEdit', 'tinymce4' => true, 'jsonforms' => true));
$this->load->view('templates/header', array('title' => 'VorlageEdit', 'tinymce5' => true, 'jsonforms' => true));
?>
<div class="row">
+2 -2
View File
@@ -23,7 +23,7 @@
$tablesorter2 = isset($tablesorter2) ? $tablesorter2 : false;
$tabulator4 = isset($tabulator4) ? $tabulator4 : false;
$tabulator5 = isset($tabulator5) ? $tabulator5 : false;
$tinymce4 = isset($tinymce4) ? $tinymce4 : false;
$tinymce3 = isset($tinymce3) ? $tinymce3 : false;
$tinymce5 = isset($tinymce5) ? $tinymce5 : false;
$vue3 = isset($vue3) ? $vue3 : false;
$primevue3 = isset($primevue3) ? $primevue3 : false;
@@ -34,6 +34,7 @@
// Internal resources
$ajaxlib = isset($ajaxlib) ? $ajaxlib : false;
$bootstrapper = isset($bootstrapper) ? $bootstrapper : false;
$cis = isset($cis) ? $cis : false;
$dialoglib = isset($dialoglib) ? $dialoglib : false;
$filtercomponent = isset($filtercomponent) ? $filtercomponent : false;
$filterwidget = isset($filterwidget) ? $filterwidget : false;
@@ -43,4 +44,3 @@
$tablewidget = isset($tablewidget) ? $tablewidget : false;
$udfs = isset($udfs) ? $udfs : false;
$widgets = isset($widgets) ? $widgets : false;
+4 -3
View File
@@ -100,14 +100,14 @@
// Tabulator 5 JS
if ($tabulator5 === true) generateJSsInclude('vendor/olifolkerd/tabulator5/dist/js/tabulator.min.js');
// Tinymce 4 JS
if ($tinymce4 === true) generateJSsInclude('vendor/tinymce/tinymce4/tinymce.min.js');
// Tinymce 3 JS
if ($tinymce3 === true) generateJSsInclude('include/tiny_mce/tiny_mce.js');
// Tinymce 5 JS
if ($tinymce5 === true) generateJSsInclude('vendor/tinymce/tinymce5/tinymce.min.js');
// Vue 3 JS
if ($vue3 === true)
if ($vue3 === true)
{
generateJSsInclude('vendor/vuejs/vuejs3/vue.global.prod.js');
generateJSsInclude('vendor/vuejs/vuerouter4/vue-router.global.js');
@@ -122,6 +122,7 @@
generateJSsInclude('vendor/npm-asset/primevue/column/column.min.js');
generateJSsInclude('vendor/npm-asset/primevue/calendar/calendar.min.js');
generateJSsInclude('vendor/npm-asset/primevue/skeleton/skeleton.min.js');
generateJSsInclude('vendor/npm-asset/primevue/autocomplete/autocomplete.min.js');
}
// --------------------------------------------------------------------------------------------------------
+4 -4
View File
@@ -77,10 +77,7 @@
}
// Tabulator 5 CSS
if ($tabulator5 === true) generateCSSsInclude('vendor/olifolkerd/tabulator5/dist/css/tabulator_bootstrap5.min.css');
// Tinymce 4 CSS
if ($tinymce4 === true) generateCSSsInclude('public/css/TinyMCE4.css');
if ($tabulator5 === true) generateCSSsInclude('public/css/Tabulator5.css');
// Tinymce 5 CSS
if ($tinymce5 === true) generateCSSsInclude('public/css/TinyMCE5.css');
@@ -118,6 +115,9 @@
// HTML Widget CSS
if ($widgets === true) generateCSSsInclude('public/css/Widgets.css');
// CIS
if ($cis === true) generateCSSsInclude('public/css/cis_bs5.css');
// Eventually required CSS
generateCSSsInclude($customCSSs); // Eventually required CSS
?>
+1 -1
View File
@@ -95,7 +95,7 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in
<?php endif ?>
<?php if($tinymce) : ?>
<script type="text/javascript" src="<?php echo base_url('vendor/tinymce/tinymce4/tinymce.min.js');?>"></script>
<script type="text/javascript" src="<?php echo base_url('vendor/tinymce/tinymce5/tinymce.min.js');?>"></script>
<?php endif ?>
<?php if($textile) : ?>
+3 -2
View File
@@ -5,5 +5,6 @@
plugins: [<?php echo $plugins; ?>],
toolbar: "<?php echo $toolbar; ?>"
});
</script>
<<?=$selector?> name="<?=$name?>" style="<?=$style?>"><?=$text?></<?=$selector?>>
</script>
<<?=$selector?> name="<?=$name?>" style="<?=$style?>"><?=$text?></<?=$selector?>>
+3 -3
View File
@@ -121,15 +121,15 @@ echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<td><input type="text" name="sprache" id="sprache" value="'.$db->convert_html_chars($row_zd->sprache).'" size="10" maxlength="8" readonly="readonly"></td>
</tr>
<tr>
<td width="30%"><b>'.$p->t('abgabetool/kontrollierteSchlagwoerter').':*</b></td>
<td width="30%"><b>'.$p->t('abgabetool/kontrollierteSchlagwoerter').':</b></td>
<td width="40%"><input type="text" name="kontrollschlagwoerter" id="kontrollschlagwoerter" value="'.$db->convert_html_chars($row_zd->kontrollschlagwoerter).'" size="60" maxlength="150" readonly="readonly"></td>
</tr>
<tr>
<td><b>'.$p->t('abgabetool/deutscheSchlagwoerter').': </b></td>
<td><b>'.$p->t('abgabetool/deutscheSchlagwoerter').':* </b></td>
<td><input type="text" name="schlagwoerter" value="'.$db->convert_html_chars($row_zd->schlagwoerter).'" size="60" maxlength="150" readonly="readonly"></td>
</tr>
<tr>
<td><b>'.$p->t('abgabetool/englischeSchlagwoerter').': </b></td>
<td><b>'.$p->t('abgabetool/englischeSchlagwoerter').':* </b></td>
<td><input type="text" name="schlagwoerter_en" value="'.$db->convert_html_chars($row_zd->schlagwoerter_en).'" size="60" maxlength="150" readonly="readonly"></td>
</tr>
<tr>
-1
View File
@@ -124,7 +124,6 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)."
ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102';
if(!$erg=$db->db_query($sql_query))
{
$errormsg=$p->t('global/fehlerBeimLesenAusDatenbank');
+8 -31
View File
@@ -64,7 +64,6 @@ if(!isset($_POST['uid']))
$fixtermin = false;
$datum = '01.01.1980';
$kurzbz = '';
$kontrollschlagwoerter = '';
$schlagwoerter = '';
$schlagwoerter_en = '';
$abstract = '';
@@ -88,7 +87,6 @@ else
$kurzbz = (isset($_POST['kurzbz'])?$_POST['kurzbz']:'');
$betreuer = (isset($_POST['betreuer'])?$_POST['betreuer']:'-1');
$sprache = (isset($_POST['sprache'])?$_POST['sprache']:'German');
$kontrollschlagwoerter = (isset($_POST['kontrollschlagwoerter'])?$_POST['kontrollschlagwoerter']:'-1');
$schlagwoerter = (isset($_POST['schlagwoerter'])?$_POST['schlagwoerter']:'-1');
$schlagwoerter_en = (isset($_POST['schlagwoerter_en'])?$_POST['schlagwoerter_en']:'-1');
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
@@ -211,23 +209,7 @@ if($command=='add')
{
//zusätzliche Daten bearbeiten
//Check der Eingabedaten
if(strlen($kontrollschlagwoerter)<1)
{
$error=true;
}
if(mb_strlen($kontrollschlagwoerter)>=150)
{
$kontrollschlagwoerter = mb_substr($kontrollschlagwoerter, 0, 146).'...';
}
if(strlen($abstract)<1)
{
$error=true;
}
if(strlen($abstract_en)<1)
{
$error=true;
}
if($seitenanzahl<1)
if((strlen($schlagwoerter) < 1) || (strlen($schlagwoerter_en) < 1) || (strlen($abstract) < 1) || (strlen($abstract_en) < 1) || ($seitenanzahl < 1))
{
$error=true;
}
@@ -237,7 +219,6 @@ if($command=='add')
seitenanzahl = ".$db->db_add_param($seitenanzahl).",
abgabedatum = now(),
sprache = ".$db->db_add_param($sprache).",
kontrollschlagwoerter = ".$db->db_add_param($kontrollschlagwoerter).",
schlagwoerter_en = ".$db->db_add_param($schlagwoerter_en).",
schlagwoerter = ".$db->db_add_param($schlagwoerter).",
abstract = ".$db->db_add_param($abstract).",
@@ -413,19 +394,16 @@ if($command=="update" && $error!=true)
$htmlstr .= "</SELECT> \n";
}
$htmlstr .= "</td></tr>\n";
$htmlstr .= '<tr><td width="30%"><b>'.$p->t('abgabetool/kontrollierteSchlagwoerter').':*</b></td>
<td width="40%"><input type="text" name="kontrollschlagwoerter" id="kontrollschlagwoerter" value="'.$db->convert_html_chars($kontrollschlagwoerter).'" size="60" maxlength="150"></td>
<td width="30%" align="left"><input type="button" name="SWD" value=" SWD " onclick="window.open(\'swd.php\')"></td></tr>'."\n";
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/deutscheSchlagwoerter').':</b></td>
<td><input type="text" name="schlagwoerter" value="'.$db->convert_html_chars($schlagwoerter).'" size="60" maxlength="150"></td></tr>'."\n";
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/englischeSchlagwoerter').':</b></td>
<td><input type="text" name="schlagwoerter_en" value="'.$db->convert_html_chars($schlagwoerter_en).'" size="60" maxlength="150"></td></tr>'."\n";
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/deutscheSchlagwoerter').':*</b></td>
<td><input type="text" name="schlagwoerter" value="'.$db->convert_html_chars($schlagwoerter).'" size="60" maxlength="150" required></td></tr>'."\n";
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/englischeSchlagwoerter').':*</b></td>
<td><input type="text" name="schlagwoerter_en" value="'.$db->convert_html_chars($schlagwoerter_en).'" size="60" maxlength="150" required></td></tr>'."\n";
$htmlstr .= '<tr><td valign="top"><b>'.$p->t('abgabetool/abstract').' </b>'.$p->t('abgabetool/maxZeichen').':*</td>
<td><textarea name="abstract" cols="46" rows="7">'.$db->convert_html_chars($abstract).'</textarea></td></tr>'."\n";
<td><textarea name="abstract" cols="46" rows="7" required>'.$db->convert_html_chars($abstract).'</textarea></td></tr>'."\n";
$htmlstr .= '<tr><td valign="top"><b>'.$p->t('abgabetool/abstractEng').'</b>'.$p->t('abgabetool/maxZeichen').':*</td>
<td><textarea name="abstract_en" cols="46" rows="7">'.$db->convert_html_chars($abstract_en).'</textarea></td></tr>'."\n";
<td><textarea name="abstract_en" cols="46" rows="7" required>'.$db->convert_html_chars($abstract_en).'</textarea></td></tr>'."\n";
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td>
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n";
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4" required></td></tr>'."\n";
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
// If there are info about the signed document
@@ -657,7 +635,6 @@ if($command!="add")
$htmlstr .= '<input type="hidden" name="uid" value="'.$db->convert_html_chars($uid).'">'."\n";
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
$htmlstr .= '<input type="hidden" name="command" value="update">'."\n";
$htmlstr .= '<input type="hidden" name="kontrollschlagwoerter" value="'.$db->convert_html_chars($kontrollschlagwoerter).'">'."\n";
$htmlstr .= '<input type="hidden" name="schlagwoerter" value="'.$db->convert_html_chars($schlagwoerter).'">'."\n";
$htmlstr .= '<input type="hidden" name="schlagwoerter_en" value="'.$db->convert_html_chars($schlagwoerter_en).'">'."\n";
$htmlstr .= '<input type="hidden" name="abstract" value="'.$db->convert_html_chars($abstract).'">'."\n";
-11
View File
@@ -1,11 +0,0 @@
<?php
$url = "https://ognd.bsz-bw.de/";
$zielfeld = "kontrollschlagwoerter";
$url = $url."?zielfeld=".$zielfeld;
header('Content-Type: text/html; charset=utf-8');
$content = file_get_contents($url);
if($content)
print $content;
else
echo "Der Schlagwortdienst ist derzeit nicht erreichbar. Bitte füllen Sie die Schlagwörter manuell aus um den Upload abzuschließen";
?>
+2
View File
@@ -144,6 +144,8 @@ if (isset($_GET['projektarbeit_id']))
$params .= '&projektarbeit_id='. $_GET['projektarbeit_id'];
if (isset($_GET['betreuerart_kurzbz']))
$params .= '&betreuerart_kurzbz='. $_GET['betreuerart_kurzbz'];
if (isset($_GET['id']))
$params .= '&id='. $_GET['id'];
// Logeintrag bei Download von Zahlungsbestaetigungen
+23
View File
@@ -31,6 +31,7 @@ require_once('../../../include/akte.class.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/webservicelog.class.php');
require_once('../../../include/studierendenantrag.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -228,6 +229,28 @@ echo '</SELECT><br /><br />';
// Wenn es für das übergebene Studiensemester keinen PreStudentStatus gibt, werden nur Abschlussdokumente angezeigt
if (in_array($stsem, $stsem_arr))
{
$studierendenantrag = new studierendenantrag();
if ($studierendenantrag->loadUserAntrag($student_studiengang->prestudent_id, $stsem) && $studierendenantrag->result) {
echo '<h2>' . $p->t('studierendenantrag/antraege_header') . '</h2>';
echo '<table class="tablesorter" style="width:auto;">
<thead>
<tr>
<th></th>
<th>'.$p->t('global/name').'</th>
</tr>
</thead>
<tbody>';
foreach ($studierendenantrag->result as $antrag) {
$path = "../pdfExport.php?xsl=Antrag" . $antrag->typ . "&xml=Antrag" . $antrag->typ . ".xml.php&uid=" . $uid . "&id=" . $antrag->studierendenantrag_id;
echo '<tr>';
echo '<td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$path.'">' . $p->t('studierendenantrag/title_' . $antrag->typ) . '</a></td>';
echo '</tr>';
}
echo '</tbody></table>';
}
$konto = new konto();
$buchungstypen = array();
+63 -40
View File
@@ -79,7 +79,12 @@ else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GE
else
$gesperrt_bis = '2015-08-31';
//echo $gesperrt_bis;
//Default-Wert für Max-Intervall in Tagen für Zeitsperre, über Config veränderbar
$maxDauerZS = 730;
if (defined('CIS_ZEITSPERREN_MAX_DAUER') && CIS_ZEITSPERREN_MAX_DAUER != '') {
$maxDauerZS = CIS_ZEITSPERREN_MAX_DAUER;
}
//Stundentabelleholen
if(! $result_stunde=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde"))
@@ -204,66 +209,72 @@ function berechnen()
function checkdatum()
{
if(document.getElementById('vondatum').value.length<10)
if (document.getElementById('vondatum').value.length < 10)
{
alert('<?php echo $p->t('zeitsperre/vonDatumIstUngueltigNullenAngeben');?>');
return false;
}
if(document.getElementById('bisdatum').value.length<10)
if (document.getElementById('bisdatum').value.length < 10)
{
alert('<?php echo $p->t('zeitsperre/bisDatumIstUngueltigNullenAngeben');?>');
return false;
}
var Datum, Tag, Monat,Jahr,vonDatum,bisDatum, diff;
var Datum, Tag, Monat, Jahr, vonDatum, bisDatum, vonDatumDate, bisDatumDate, diff, diffTime, diffmax;
Datum=document.getElementById('vondatum').value;
Tag=Datum.substring(0,2);
Monat=Datum.substring(3,5);
if (parseInt(Monat,10)<1 || parseInt(Monat,10)>12)
{
alert('<?php echo $p->t('zeitsperre/vonDatumMonat');?>'+ document.getElementById('vondatum').value+ ' <?php echo $p->t('zeitsperre/istNichtRichtig');?>.');
Datum = document.getElementById('vondatum').value;
Tag = Datum.substring(0, 2);
Monat = Datum.substring(3, 5);
if (parseInt(Monat, 10) < 1 || parseInt(Monat, 10) > 12)
{
alert('<?php echo $p->t('zeitsperre/vonDatumMonat');?>' + document.getElementById('vondatum').value + ' <?php echo $p->t('zeitsperre/istNichtRichtig');?>.');
document.getElementById('vondatum').focus();
return false;
}
return false;
}
Jahr=Datum.substring(6,10);
Jahr = Datum.substring(6, 10);
vonDatum=Jahr+''+Monat+''+Tag;
vonDatum = Jahr + '' + Monat + '' + Tag;
vonDatumDate = Jahr + '-' + Monat + '-' + Tag;
Datum=document.getElementById('bisdatum').value;
Tag=Datum.substring(0,2);
Monat=Datum.substring(3,5);
if (parseInt(Monat,10)<1 || parseInt(Monat,10)>12)
{
alert('<?php echo $p->t('zeitsperre/bisDatumMonat');?>'+ document.getElementById('bisdatum').value+ ' <?php echo $p->t('zeitsperre/istNichtRichtig');?>.');
Datum = document.getElementById('bisdatum').value;
Tag = Datum.substring(0, 2);
Monat = Datum.substring(3, 5);
if (parseInt(Monat, 10) < 1 || parseInt(Monat, 10) > 12) {
alert('<?php echo $p->t('zeitsperre/bisDatumMonat');?>' + document.getElementById('bisdatum').value + ' <?php echo $p->t('zeitsperre/istNichtRichtig');?>.');
document.getElementById('bisdatum').focus();
return false;
}
return false;
}
Jahr=Datum.substring(6,10);
Jahr = Datum.substring(6, 10);
bisDatum = Jahr + '' + Monat + '' + Tag;
bisDatumDate = Jahr + '-' + Monat + '-' + Tag;
bisDatum=Jahr+''+Monat+''+Tag;
bisDatumDate = new Date(bisDatumDate);
vonDatumDate = new Date(vonDatumDate);
diff=bisDatum-vonDatum;
diffTime = bisDatumDate.getTime() - vonDatumDate.getTime();
diff = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
diffmax = <?php echo $maxDauerZS ;?>
if (vonDatum>bisDatum)
{
alert('<?php echo $p->t('zeitsperre/vonDatum');?> '+ document.getElementById('vondatum').value+ ' <?php echo $p->t('zeitsperre/istGroesserAlsBisDatum');?> '+document.getElementById('bisdatum').value);
if (vonDatum > bisDatum) {
alert('<?php echo $p->t('zeitsperre/vonDatum');?> ' + document.getElementById('vondatum').value + ' <?php echo $p->t('zeitsperre/istGroesserAlsBisDatum');?> ' + document.getElementById('bisdatum').value);
document.getElementById('vondatum').focus();
return false;
}
else if (diff>14)
{
Check = confirm('<?php echo $p->t('zeitaufzeichnung/zeitraumAuffallendHoch');?>');
return false;
}
else if (diff > 14 && diff < diffmax) {
Check = confirm('<?php echo $p->t('zeitaufzeichnung/zeitraumAuffallendHoch');?>');
document.getElementById('bisdatum').focus();
if (Check == false)
return false;
else
return true;
}
if (Check == false)
return false;
else
return true;
} else if (diff >= diffmax) {
alert('<?php echo $p->t('zeitsperre/bisDatumGroesserMax');?> ');
document.getElementById('bisdatum').focus();
return false;
}
return true;
}
@@ -445,7 +456,8 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
$date=explode('.',$_POST['bisdatum']);
if (@checkdate($date[1], $date[0], $date[2]))
{
$bisdatum=$date[2].$date[1].$date[0];
$bisdatum=$date[2].$date[1].$date[0];
$bisdatum_iso = $date[2].'-'.$date[1].'-'.$date[0];
}
else
{
@@ -464,6 +476,17 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
$error_msg .= $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! ';
}
//check if bis-Datum zu weit in der Zukunft
$bis = new DateTime($bisdatum);
$von = new DateTime($vondatum);
$intervall = $bis->diff($von);
if ($intervall->days >= $maxDauerZS)
{
$error=true;
$error_msg = $p->t('zeitsperre/bisDatumGroesserMax');
}
//von-datum pruefen TODO
if($vondatum_iso < $gesperrt_bis && in_array($_POST['zeitsperretyp_kurzbz'],$typen_arr))
{
+16 -1
View File
@@ -229,6 +229,21 @@ $( document ).ready(function()
</script>
';
echo <<<EOSBJS
<script>
$(document).ready(function() {
const scrollDiv = document.createElement('div');
scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
document.body.appendChild(scrollDiv);
const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
var marginright = Math.max((20 - scrollbarWidth), 0);
document.body.style.setProperty('width', 'calc(100% - ' + marginright + 'px)');
});
</script>
EOSBJS;
echo '
<script type="text/javascript">
$(document).ready(function()
@@ -1621,7 +1636,7 @@ if ($projekt->getProjekteMitarbeiter($user, true))
<td '.$style.' align="right"><b>'.$tagessaldo.$erstr.'</b><br>'.date('H:i', ($pausesumme-3600)).'</td>
<td '.$style.' colspan="3" align="right">';
if ($tag > $sperrdatum)
echo '<a href="?von_datum='.$datum->formatDatum($tag,'d.m.Y').'&bis_datum='.$datum->formatDatum($tag,'d.m.Y').'" class="item">&lt;-</a>';
echo '<a href="?von_datum='.$datum->formatDatum($tag,'d.m.Y').'&bis_datum='.$datum->formatDatum($tag,'d.m.Y').'" class="item">&larr;</a>';
echo '</td></tr>';
+48 -45
View File
@@ -571,7 +571,7 @@ if (isset($_GET['resend']))
echo "<div id='coodle_content' >
<form action='' method='POST'>
<table class='table-bordered'>
<tr><td></td>";
// Für Colspan bei Datum
@@ -675,7 +675,6 @@ if (isset($_GET['resend']))
}
else
{
// Ort-Ressourcen ueberspringen
if ($ressource->ort_kurzbz != '')
{
@@ -761,8 +760,8 @@ if (isset($_GET['resend']))
echo ' <td class="'.$class.'" align="center" '.$style.'>
<div class="checkbox">
<label style="font-size: 1.5em; padding-left: 10px">
<input type="checkbox"
value=""
<input type="checkbox"
value=""
'.($checked ? 'checked="checked"' : '').'
'.($termin->datum == '1900-01-01' ? 'id="disableCheckboxes"' : '').'
name="check_'.$ressource->coodle_ressource_id.'_'.$termin->coodle_termin_id.'"
@@ -867,8 +866,8 @@ if (isset($_GET['resend']))
<span class="glyphicon glyphicon-info-sign"></span>
Sie können ihre vorläufigen Terminzusagen in ihr Kalendersystem einbinden.<br>
Importieren Sie dazu die .ics-Datei des folgenden Links in ihren Kalender:<br>
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid, LVPLAN_CYPHER_KEY).'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid, LVPLAN_CYPHER_KEY).'
</a>
<br><br>
Die Datei enthält ihre Terminzusagen aus <b>allen laufenden Umfragen</b> .
@@ -999,7 +998,7 @@ function sendEmail($coodle_id)
else
$partstat = 'TENTATIVE';
$teilnehmer .= 'ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT='.$partstat.';CN='.$name."\n :MAILTO:".$mail."\n";
$teilnehmer .= $coodle->foldContentLine('ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT='.$partstat.';CN='.$name.":MAILTO:".$mail) . "\r\n";
}
}
$date = new DateTime($coodle_help->datum.' '.$coodle_help->uhrzeit);
@@ -1015,44 +1014,48 @@ function sendEmail($coodle_id)
$benutzer = new benutzer();
$benutzer->load($coodle->ersteller_uid);
$erstellername = trim($benutzer->titelpre.' '.$benutzer->vorname.' '.$benutzer->nachname.' '.$benutzer->titelpost);
$beschreibung = "DESCRIPTION:" . strip_tags(html_entity_decode($coodle->beschreibung, ENT_QUOTES, 'UTF-8'), '<br>');
$terminbeschreibung= $coodle->foldContentLine($beschreibung);
// Ical File erstellen
$ical = "BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:Europe/Vienna
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:GMT+02:00
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:GMT+01:00
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER:MAILTO:".$erstellername." <".$coodle->ersteller_uid."@".DOMAIN."
".$teilnehmer."
DTSTART;TZID=Europe/Vienna:".$dtstart."
DTEND;TZID=Europe/Vienna:".$dtend."
LOCATION:".$ort."
TRANSP:OPAQUE
SEQUENCE:0
UID:FHCompleteCoodle".$coodle_id."
DTSTAMP;TZID=Europe/Vienna:".$dtstamp."
DESCRIPTION:".strip_tags(html_entity_decode($coodle->beschreibung, ENT_QUOTES, 'UTF-8'))."
SUMMARY:".strip_tags($coodle->titel)."
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR";
$ical = "BEGIN:VCALENDAR\r\n"
."PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN\r\n"
."VERSION:2.0\r\n"
."METHOD:PUBLISH\r\n"
."BEGIN:VTIMEZONE\r\n"
."TZID:Europe/Vienna\r\n"
."BEGIN:DAYLIGHT\r\n"
."TZOFFSETFROM:+0100\r\n"
."RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\n"
."DTSTART:19810329T020000\r\n"
."TZNAME:GMT+02:00\r\n"
."TZOFFSETTO:+0200\r\n"
."END:DAYLIGHT\r\n"
."BEGIN:STANDARD\r\n"
."TZOFFSETFROM:+0200\r\n"
."RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\n"
."DTSTART:19961027T030000\r\n"
."TZNAME:GMT+01:00\r\n"
."TZOFFSETTO:+0100\r\n"
."END:STANDARD\r\n"
."END:VTIMEZONE\r\n"
."BEGIN:VEVENT\r\n"
.$coodle->foldContentLine("ORGANIZER:MAILTO:".$erstellername." <".$coodle->ersteller_uid."@".DOMAIN)."\r\n"
.rtrim($teilnehmer)."\r\n"
."DTSTART;TZID=Europe/Vienna:".$dtstart."\r\n"
."DTEND;TZID=Europe/Vienna:".$dtend."\r\n"
."LOCATION:".$ort."\r\n"
."TRANSP:OPAQUE\r\n"
."SEQUENCE:0\r\n"
."UID:FHCompleteCoodle".$coodle_id."\r\n"
."DTSTAMP;TZID=Europe/Vienna:".$dtstamp."\r\n"
.$terminbeschreibung."\r\n"
."SUMMARY:".strip_tags($coodle->titel)."\r\n"
."PRIORITY:5\r\n"
."CLASS:PUBLIC\r\n"
."END:VEVENT\r\n"
."END:VCALENDAR\r\n";
if (count($coodle_ressource->result) > 0)
{
@@ -1173,4 +1176,4 @@ function RaumBelegt($ort_kurzbz, $datum, $stunden)
return false;
}
?>
?>
-8
View File
@@ -126,10 +126,6 @@ if (isset($_REQUEST['prestudent']))
$rt->getReihungstestPerson($ps->person_id);
if (isset($rt->result[0]))
$reihungstest_id = $rt->result[0]->reihungstest_id;
else
{
$alertmsg .= '<div class="alert alert-danger">'.$p->t('testtool/reihungstestKannNichtGeladenWerden').'</div>';
}
}
else
{
@@ -138,10 +134,6 @@ if (isset($_REQUEST['prestudent']))
// TODO Was ist wenn da mehrere Zurueckkommen?!
if (isset($rt->result[0]))
$reihungstest_id = $rt->result[0]->reihungstest_id;
else
{
$alertmsg .= '<div class="alert alert-danger">'.$p->t('testtool/reihungstestKannNichtGeladenWerden').'</div>';
}
}
else
{
+29 -18
View File
@@ -230,9 +230,9 @@
"type": "package",
"package": {
"name": "olifolkerd/tabulator5",
"version": "5.2.1",
"version": "5.5.2",
"dist": {
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/5.2.1.zip",
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/5.5.2.zip",
"type": "zip"
}
}
@@ -270,17 +270,6 @@
}
}
},
{
"type": "package",
"package": {
"name": "tinymce/tinymce4",
"version": "4.9.11",
"dist": {
"url": "https://github.com/tinymce/tinymce-dist/archive/refs/tags/4.9.11.zip",
"type": "zip"
}
}
},
{
"type": "package",
"package": {
@@ -348,6 +337,28 @@
}
}
},
{
"type": "package",
"package": {
"name": "vuejs/vuedatepicker_js",
"version": "5.4.0",
"dist": {
"url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/vue-datepicker.iife.js",
"type": "file"
}
}
},
{
"type": "package",
"package": {
"name": "vuejs/vuedatepicker_css",
"version": "5.4.0",
"dist": {
"url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/main.css",
"type": "file"
}
}
},
{
"type": "composer",
"url": "https://asset-packagist.org"
@@ -400,11 +411,11 @@
"nategood/httpful": "0.2.*",
"netcarver/textile": "3.7.*",
"nicolaskruchten/pivottable": "2.23.0",
"npm-asset/primevue": "3.15.*",
"npm-asset/primevue": "3.29.*",
"npm-asset/primeicons": "5.0.0",
"olifolkerd/tabulator4": "4.9.*",
"olifolkerd/tabulator5": "5.2.*",
"olifolkerd/tabulator5": "5.5.*",
"phpseclib/phpseclib": "2.0.*",
@@ -413,14 +424,15 @@
"scottjehl/respond": "1.4.2",
"tapmodo/jcrop": "2.0.4",
"tinymce/tinymce4": "4.9.*",
"tinymce/tinymce5": "5.10.*",
"tomazdragar/simplecropper": "1.0",
"twbs/bootstrap3": "3.4.*",
"twbs/bootstrap5": "5.1.*",
"vuejs/vuejs3": "3.2.33",
"vuejs/vuerouter4": "4.1.3"
"vuejs/vuerouter4": "4.1.3",
"vuejs/vuedatepicker_js": "5.4.0",
"vuejs/vuedatepicker_css": "5.4.0"
},
"config": {
"bin-dir": "vendor/bin"
@@ -432,4 +444,3 @@
"sebastian/phpcpd": "3.*"
}
}
Generated
+447 -60
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "d530cc4d7bd81812535eb64e87ba04f4",
"content-hash": "728ac4542ac39ac1efbcea15134a81f9",
"packages": [
{
"name": "afarkas/html5shiv",
@@ -35,6 +35,10 @@
],
"description": "Defacto way to enable use of HTML5 sectioning elements in legacy Internet Explorer.",
"homepage": "http://paulirish.com/2011/the-history-of-the-html5-shiv/",
"support": {
"issues": "https://github.com/aFarkas/html5shiv/issues",
"source": "https://github.com/aFarkas/html5shiv/tree/3.7.3"
},
"time": "2015-07-20T20:04:00+00:00"
},
{
@@ -130,6 +134,16 @@
"keywords": [
"qr code"
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
"source": "https://github.com/chillerlan/php-qrcode/tree/v2.0.x"
},
"funding": [
{
"url": "https://ko-fi.com/codemasher",
"type": "ko_fi"
}
],
"time": "2020-04-12T07:38:35+00:00"
},
{
@@ -178,6 +192,10 @@
"helper",
"trait"
],
"support": {
"issues": "https://github.com/chillerlan/php-traits/issues",
"source": "https://github.com/chillerlan/php-traits"
},
"abandoned": true,
"time": "2018-06-22T00:30:47+00:00"
},
@@ -218,6 +236,10 @@
],
"description": "REST Server for the CodeIgniter framework",
"homepage": "https://github.com/chriskacerguis/codeigniter-restserver",
"support": {
"issues": "https://github.com/chriskacerguis/codeigniter-restserver/issues",
"source": "https://github.com/chriskacerguis/codeigniter-restserver"
},
"time": "2017-09-23T16:44:55+00:00"
},
{
@@ -236,6 +258,10 @@
},
"type": "library",
"notification-url": "https://packagist.org/downloads/",
"support": {
"issues": "https://github.com/akiyatkin/tablesorter/issues",
"source": "https://github.com/akiyatkin/tablesorter/tree/master"
},
"time": "2016-09-02T11:31:54+00:00"
},
{
@@ -269,6 +295,13 @@
],
"description": "The CodeIgniter framework",
"homepage": "https://codeigniter.com",
"support": {
"forum": "http://forum.codeigniter.com/",
"issues": "https://github.com/bcit-ci/CodeIgniter/issues",
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/bcit-ci/CodeIgniter",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki"
},
"time": "2022-03-03T13:21:49+00:00"
},
{
@@ -573,20 +606,24 @@
],
"description": "Shim repository for Angular.js",
"homepage": "http://angularjs.org",
"support": {
"issues": "https://github.com/components/angular.js/issues",
"source": "https://github.com/components/angular.js/tree/master"
},
"time": "2015-06-07T20:10:38+00:00"
},
{
"name": "components/jquery",
"version": "3.6.0",
"version": "v3.7.1",
"source": {
"type": "git",
"url": "https://github.com/components/jquery.git",
"reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3"
"reference": "8edc7785239bb8c2ad2b83302b856a1d61de60e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/components/jquery/zipball/6cf38ee1fd04b6adf8e7dda161283aa35be818c3",
"reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3",
"url": "https://api.github.com/repos/components/jquery/zipball/8edc7785239bb8c2ad2b83302b856a1d61de60e7",
"reference": "8edc7785239bb8c2ad2b83302b856a1d61de60e7",
"shasum": ""
},
"type": "component",
@@ -615,7 +652,14 @@
],
"description": "jQuery JavaScript Library",
"homepage": "http://jquery.com",
"time": "2021-03-20T19:13:42+00:00"
"support": {
"forum": "http://forum.jquery.com",
"irc": "irc://irc.freenode.org/jquery",
"issues": "https://github.com/jquery/jquery/issues",
"source": "https://github.com/jquery/jquery",
"wiki": "http://docs.jquery.com/"
},
"time": "2023-09-22T01:43:46+00:00"
},
{
"name": "components/jqueryui",
@@ -700,6 +744,10 @@
}
],
"description": "jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library. Whether you're building highly interactive web applications or you just need to add a date picker to a form control, jQuery UI is the perfect choice.",
"support": {
"issues": "https://github.com/components/jqueryui/issues",
"source": "https://github.com/components/jqueryui/tree/master"
},
"time": "2016-09-16T05:47:55+00:00"
},
{
@@ -749,6 +797,10 @@
"captcha",
"security"
],
"support": {
"issues": "https://github.com/dapphp/securimage/issues",
"source": "https://github.com/dapphp/securimage/tree/master"
},
"abandoned": true,
"time": "2018-03-09T06:07:41+00:00"
},
@@ -812,6 +864,12 @@
"rdfa",
"sparql"
],
"support": {
"forum": "http://groups.google.com/group/easyrdf/",
"irc": "irc://chat.freenode.net/easyrdf",
"issues": "http://github.com/njh/easyrdf/issues",
"source": "https://github.com/easyrdf/easyrdf/tree/0.9.1"
},
"time": "2015-02-27T09:45:49+00:00"
},
{
@@ -890,6 +948,10 @@
"faker",
"fixtures"
],
"support": {
"issues": "https://github.com/fzaninotto/Faker/issues",
"source": "https://github.com/fzaninotto/Faker/tree/v1.9.2"
},
"abandoned": true,
"time": "2020-12-11T09:56:16+00:00"
},
@@ -1012,6 +1074,10 @@
"json",
"schema"
],
"support": {
"issues": "https://github.com/justinrainbow/json-schema/issues",
"source": "https://github.com/justinrainbow/json-schema/tree/master"
},
"time": "2014-08-25T02:48:14+00:00"
},
{
@@ -1046,6 +1112,10 @@
}
],
"description": "A framework-agnostic PHP Implementation for generating simple forms based on json-schema",
"support": {
"issues": "https://github.com/kingsquare/json-schema-form/issues",
"source": "https://github.com/kingsquare/json-schema-form/tree/master"
},
"time": "2014-07-10T12:27:19+00:00"
},
{
@@ -1106,6 +1176,10 @@
"keywords": [
"markdown"
],
"support": {
"issues": "https://github.com/michelf/php-markdown/issues",
"source": "https://github.com/michelf/php-markdown/tree/lib"
},
"time": "2015-03-01T12:03:08+00:00"
},
{
@@ -1153,20 +1227,24 @@
"uri",
"url"
],
"support": {
"issues": "https://github.com/lanthaler/IRI/issues",
"source": "https://github.com/lanthaler/IRI/tree/master"
},
"time": "2014-01-21T13:43:39+00:00"
},
{
"name": "ml/json-ld",
"version": "1.2.0",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/lanthaler/JsonLD.git",
"reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93"
"reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93",
"reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93",
"url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/537e68e87a6bce23e57c575cd5dcac1f67ce25d8",
"reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8",
"shasum": ""
},
"require": {
@@ -1202,7 +1280,11 @@
"JSON-LD",
"jsonld"
],
"time": "2020-06-16T17:45:06+00:00"
"support": {
"issues": "https://github.com/lanthaler/JsonLD/issues",
"source": "https://github.com/lanthaler/JsonLD/tree/1.2.1"
},
"time": "2022-09-29T08:45:17+00:00"
},
{
"name": "moment/momentjs",
@@ -1262,6 +1344,14 @@
"sorting",
"table"
],
"support": {
"docs": "https://mottie.github.io/tablesorter/docs/index.html",
"email": "wowmotty@gmail.com",
"irc": "irc://irc.freenode.org/tablesorter",
"issues": "https://github.com/Mottie/tablesorter/issues",
"source": "https://github.com/Mottie/tablesorter",
"wiki": "https://github.com/Mottie/tablesorter/wiki"
},
"time": "2020-03-03T13:46:03+00:00"
},
{
@@ -1312,6 +1402,10 @@
"rest",
"restful"
],
"support": {
"issues": "https://github.com/nategood/httpful/issues",
"source": "https://github.com/nategood/httpful/tree/v0.2.20"
},
"time": "2015-10-26T16:11:30+00:00"
},
{
@@ -1365,6 +1459,12 @@
"plaintext",
"textile"
],
"support": {
"irc": "irc://irc.freenode.net/textile",
"issues": "https://github.com/textile/php-textile/issues",
"source": "https://github.com/textile/php-textile",
"wiki": "https://github.com/textile/php-textile/wiki"
},
"time": "2022-05-01T17:05:16+00:00"
},
{
@@ -1390,10 +1490,10 @@
},
{
"name": "npm-asset/primevue",
"version": "3.15.0",
"version": "3.29.2",
"dist": {
"type": "tar",
"url": "https://registry.npmjs.org/primevue/-/primevue-3.15.0.tgz"
"url": "https://registry.npmjs.org/primevue/-/primevue-3.29.2.tgz"
},
"type": "npm-asset",
"license": [
@@ -1411,25 +1511,25 @@
},
{
"name": "olifolkerd/tabulator5",
"version": "5.2.1",
"version": "5.5.2",
"dist": {
"type": "zip",
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/5.2.1.zip"
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/5.5.2.zip"
},
"type": "library"
},
{
"name": "phpseclib/phpseclib",
"version": "2.0.37",
"version": "2.0.45",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "c812fbb4d6b4d7f30235ab7298a12f09ba13b37c"
"reference": "28d8f438a0064c9de80857e3270d071495544640"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c812fbb4d6b4d7f30235ab7298a12f09ba13b37c",
"reference": "c812fbb4d6b4d7f30235ab7298a12f09ba13b37c",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/28d8f438a0064c9de80857e3270d071495544640",
"reference": "28d8f438a0064c9de80857e3270d071495544640",
"shasum": ""
},
"require": {
@@ -1444,7 +1544,8 @@
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.",
"ext-xml": "Install the XML extension to load XML formatted public keys."
},
"type": "library",
"autoload": {
@@ -1507,7 +1608,25 @@
"x.509",
"x509"
],
"time": "2022-04-04T04:57:45+00:00"
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/2.0.45"
},
"funding": [
{
"url": "https://github.com/terrafrost",
"type": "github"
},
{
"url": "https://www.patreon.com/phpseclib",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
"type": "tidelift"
}
],
"time": "2023-09-15T20:55:47+00:00"
},
{
"name": "rmariuzzo/jquery-checkboxes",
@@ -1587,6 +1706,23 @@
"polyfill",
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-23T09:01:57+00:00"
},
{
@@ -1598,15 +1734,6 @@
},
"type": "library"
},
{
"name": "tinymce/tinymce4",
"version": "4.9.11",
"dist": {
"type": "zip",
"url": "https://github.com/tinymce/tinymce-dist/archive/refs/tags/4.9.11.zip"
},
"type": "library"
},
{
"name": "tinymce/tinymce5",
"version": "5.10.3",
@@ -1706,8 +1833,30 @@
"keywords": [
"templating"
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/1.x"
},
"time": "2020-02-11T05:59:23+00:00"
},
{
"name": "vuejs/vuedatepicker_css",
"version": "5.4.0",
"dist": {
"type": "file",
"url": "https://unpkg.com/@vuepic/vue-datepicker@5.4.0/dist/main.css"
},
"type": "library"
},
{
"name": "vuejs/vuedatepicker_js",
"version": "5.4.0",
"dist": {
"type": "file",
"url": "https://unpkg.com/@vuepic/vue-datepicker@5.4.0/dist/vue-datepicker.iife.js"
},
"type": "library"
},
{
"name": "vuejs/vuejs3",
"version": "3.2.33",
@@ -1779,6 +1928,24 @@
"regex",
"regular expression"
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/1.0.1"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-01-21T20:24:37+00:00"
},
{
@@ -1826,20 +1993,39 @@
"Xdebug",
"performance"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/2.0.5"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-02-24T20:20:32+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.14.0",
"version": "v4.18.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
"reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
"reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
"shasum": ""
},
"require": {
@@ -1878,32 +2064,36 @@
"parser",
"php"
],
"time": "2022-05-31T20:59:12+00:00"
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
},
"time": "2023-12-10T21:03:43+00:00"
},
{
"name": "pdepend/pdepend",
"version": "2.10.3",
"version": "2.16.1",
"source": {
"type": "git",
"url": "https://github.com/pdepend/pdepend.git",
"reference": "da3166a06b4a89915920a42444f707122a1584c9"
"reference": "66ceb05eaa8bf358574143c974b04463911bc700"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pdepend/pdepend/zipball/da3166a06b4a89915920a42444f707122a1584c9",
"reference": "da3166a06b4a89915920a42444f707122a1584c9",
"url": "https://api.github.com/repos/pdepend/pdepend/zipball/66ceb05eaa8bf358574143c974b04463911bc700",
"reference": "66ceb05eaa8bf358574143c974b04463911bc700",
"shasum": ""
},
"require": {
"php": ">=5.3.7",
"symfony/config": "^2.3.0|^3|^4|^5|^6.0",
"symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0",
"symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0"
"symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/polyfill-mbstring": "^1.19"
},
"require-dev": {
"easy-doc/easy-doc": "0.0.0|^1.2.3",
"gregwar/rst": "^1.0",
"phpunit/phpunit": "^4.8.36|^5.7.27",
"squizlabs/php_codesniffer": "^2.0.0"
},
"bin": [
@@ -1925,26 +2115,42 @@
"BSD-3-Clause"
],
"description": "Official version of pdepend to be handled with Composer",
"time": "2022-02-23T07:53:09+00:00"
"keywords": [
"PHP Depend",
"PHP_Depend",
"dev",
"pdepend"
],
"support": {
"issues": "https://github.com/pdepend/pdepend/issues",
"source": "https://github.com/pdepend/pdepend/tree/2.16.1"
},
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend",
"type": "tidelift"
}
],
"time": "2023-12-10T18:38:19+00:00"
},
{
"name": "phpmd/phpmd",
"version": "2.12.0",
"version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/phpmd/phpmd.git",
"reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec"
"reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpmd/phpmd/zipball/c0b678ba71902f539c27c14332aa0ddcf14388ec",
"reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec",
"url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0",
"reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0",
"shasum": ""
},
"require": {
"composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0",
"ext-xml": "*",
"pdepend/pdepend": "^2.10.3",
"pdepend/pdepend": "^2.16.1",
"php": ">=5.3.9"
},
"require-dev": {
@@ -1953,8 +2159,7 @@
"ext-simplexml": "*",
"gregwar/rst": "^1.0",
"mikey179/vfsstream": "^1.6.8",
"phpunit/phpunit": "^4.8.36 || ^5.7.27",
"squizlabs/php_codesniffer": "^2.0"
"squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2"
},
"bin": [
"src/bin/phpmd"
@@ -1991,26 +2196,38 @@
"description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
"homepage": "https://phpmd.org/",
"keywords": [
"dev",
"mess detection",
"mess detector",
"pdepend",
"phpmd",
"pmd"
],
"time": "2022-03-24T13:33:01+00:00"
"support": {
"irc": "irc://irc.freenode.org/phpmd",
"issues": "https://github.com/phpmd/phpmd/issues",
"source": "https://github.com/phpmd/phpmd/tree/2.15.0"
},
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd",
"type": "tidelift"
}
],
"time": "2023-12-11T08:22:20+00:00"
},
{
"name": "phpmetrics/phpmetrics",
"version": "v2.8.1",
"version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpmetrics/PhpMetrics.git",
"reference": "e279f7317390f642339941b693359e9a181817a7"
"reference": "4b77140a11452e63c7a9b98e0648320bf6710090"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/e279f7317390f642339941b693359e9a181817a7",
"reference": "e279f7317390f642339941b693359e9a181817a7",
"url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/4b77140a11452e63c7a9b98e0648320bf6710090",
"reference": "4b77140a11452e63c7a9b98e0648320bf6710090",
"shasum": ""
},
"require": {
@@ -2061,7 +2278,11 @@
"quality",
"testing"
],
"time": "2022-03-24T10:19:51+00:00"
"support": {
"issues": "https://github.com/PhpMetrics/PhpMetrics/issues",
"source": "https://github.com/phpmetrics/PhpMetrics/tree/v2.8.2"
},
"time": "2023-03-08T15:03:36+00:00"
},
{
"name": "phpunit/php-timer",
@@ -2110,6 +2331,10 @@
"keywords": [
"timer"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"source": "https://github.com/sebastianbergmann/php-timer/tree/master"
},
"time": "2017-02-26T11:10:40+00:00"
},
{
@@ -2159,6 +2384,10 @@
"container-interop",
"psr"
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
"source": "https://github.com/php-fig/container/tree/master"
},
"time": "2017-02-14T16:28:37+00:00"
},
{
@@ -2206,6 +2435,9 @@
"psr",
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00"
},
{
@@ -2245,6 +2477,10 @@
],
"description": "FinderFacade is a convenience wrapper for Symfony's Finder component.",
"homepage": "https://github.com/sebastianbergmann/finder-facade",
"support": {
"issues": "https://github.com/sebastianbergmann/finder-facade/issues",
"source": "https://github.com/sebastianbergmann/finder-facade/tree/master"
},
"abandoned": true,
"time": "2017-11-18T17:31:49+00:00"
},
@@ -2296,6 +2532,11 @@
],
"description": "Copy/Paste Detector (CPD) for PHP code.",
"homepage": "https://github.com/sebastianbergmann/phpcpd",
"support": {
"issues": "https://github.com/sebastianbergmann/phpcpd/issues",
"source": "https://github.com/sebastianbergmann/phpcpd/tree/master"
},
"abandoned": true,
"time": "2017-11-16T08:49:28+00:00"
},
{
@@ -2339,6 +2580,10 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
"source": "https://github.com/sebastianbergmann/version/tree/master"
},
"time": "2016-10-03T07:35:21+00:00"
},
{
@@ -2346,12 +2591,12 @@
"version": "3.6.2",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
"reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
"url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
"reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
"shasum": ""
},
@@ -2390,6 +2635,25 @@
"phpcs",
"standards"
],
"support": {
"issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
"source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
},
"funding": [
{
"url": "https://github.com/PHPCSStandards",
"type": "github"
},
{
"url": "https://github.com/jrfnl",
"type": "github"
},
{
"url": "https://opencollective.com/php_codesniffer",
"type": "open_collective"
}
],
"time": "2021-12-12T21:44:58+00:00"
},
{
@@ -2449,6 +2713,23 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-24T10:57:07+00:00"
},
{
@@ -2516,6 +2797,23 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/console/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-24T10:57:07+00:00"
},
{
@@ -2567,6 +2865,23 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"abandoned": "symfony/error-handler",
"time": "2020-10-24T10:57:07+00:00"
},
@@ -2634,6 +2949,23 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-24T10:57:07+00:00"
},
{
@@ -2679,6 +3011,23 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-24T10:57:07+00:00"
},
{
@@ -2723,6 +3072,23 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v3.4.47"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-11-16T17:02:08+00:00"
},
{
@@ -2786,6 +3152,23 @@
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.19.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-23T09:01:57+00:00"
},
{
@@ -2829,6 +3212,10 @@
],
"description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.",
"homepage": "https://github.com/theseer/fDOMDocument",
"support": {
"issues": "https://github.com/theseer/fDOMDocument/issues",
"source": "https://github.com/theseer/fDOMDocument/tree/1.6.7"
},
"abandoned": true,
"time": "2022-01-25T23:10:35+00:00"
}
@@ -2842,5 +3229,5 @@
"php": ">=5.6.40"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.2.0"
}
-1
View File
@@ -294,5 +294,4 @@ define ('DEFAULT_ALLIN_DIENSTVERTRAG',[111]);
//Echter Dienstvertrag
define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,111]);
?>
+3
View File
@@ -47,6 +47,9 @@ define('CIS_PROFIL_STUDIENINFORMATION_ANZEIGEN',true);
// Zeitaufzeichnung gesperrt_bis Datum YYYY-MM-DD
define('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS','');
// maximale Dauer einer Zeitsperre in Tagen
define('CIS_ZEITSPERREN_MAX_DAUER', 730);
// Anzeige des Links zur Noteneingabe in der LVA Uebersicht
define('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN',true);
+7 -1
View File
@@ -276,7 +276,13 @@ define('DOCSBOX_WAITING_SLEEP_TIME', 1);
// Bei folgenden Buchungstypen wird ein Anlegen geprüft ob bereits ein Eintrag für diesen Typ vorhanden ist im selben
// Semester und ggf ein Hinweis ausgegeben
define('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK', serialize(
array('StudiengebuehrAnzahlung', 'Studiengebuehr', 'StudiengebuehrRestzahlung', 'OEH')
array(
'Studiengebuehr' => array('StudiengebuehrErhoeht', 'Studiengebuehr', 'StudiengebuehrAnzahlung', 'StudiengebuehrRestzahlung'),
'StudiengebuehrErhoeht' => array('StudiengebuehrErhoeht', 'Studiengebuehr', 'StudiengebuehrAnzahlung', 'StudiengebuehrRestzahlung'),
'StudiengebuehrAnzahlung' => array('StudiengebuehrErhoeht', 'Studiengebuehr', 'StudiengebuehrAnzahlung'),
'StudiengebuehrRestzahlung' => array('StudiengebuehrErhoeht', 'Studiengebuehr', 'StudiengebuehrRestzahlung'),
'OEH' => array('OEH')
))
));
// Spezialnoten die am Zeunigs und Diplomasupplement ignoriert werden
+28 -7
View File
@@ -140,6 +140,8 @@ foreach($addon_obj->result as $addon)
<command id="menu-dokumente-studienerfolgeng-allesemester-finanzamt:command" oncommand="StudentCreateStudienerfolg(event, 'StudienerfolgEng','finanzamt', '', 'true');"/>
<command id="menu-dokumente-accountinfoblatt:command" oncommand="PrintAccountInfoBlatt(event);"/>
<command id="menu-dokumente-zutrittskarte:command" oncommand="PrintZutrittskarte();"/>
<command id="menu-dokumente-antrag-abmeldung:command" oncommand="StudentPrintAntragAbmeldung(event);"/>
<command id="menu-dokumente-antrag-unterbrechung:command" oncommand="StudentPrintAntragUnterbrechung(event);"/>
<command id="menu-dokumente-studienblatt:command" oncommand="PrintStudienblatt(event);"/>
<command id="menu-dokumente-studienblatt_englisch:command" oncommand="PrintStudienblattEnglisch(event);"/>
<command id="menu-dokumente-pruefungsprotokoll:command" oncommand="StudentAbschlusspruefungPrintPruefungsprotokollMultiple(event,'de');"/>
@@ -507,19 +509,38 @@ foreach($addon_obj->result as $addon)
label = "&menu-dokumente-zutrittskarte.label;"
command = "menu-dokumente-zutrittskarte:command"
accesskey = "&menu-dokumente-zutrittskarte.accesskey;"/>
<menu id="menu-dokumente-antrag" label="&menu-dokumente-antrag.label;" accesskey="&menu-dokumente-antrag.accesskey;">
<menupopup id="menu-dokumente-antrag-popup">
<menuitem
id = "menu-dokumente-antrag-abmeldung"
key = "menu-dokumente-antrag-abmeldung:key"
label = "&menu-dokumente-antrag-abmeldung.label;"
command = "menu-dokumente-antrag-abmeldung:command"
accesskey = "&menu-dokumente-antrag-abmeldung.accesskey;"
/>
<menuitem
id = "menu-dokumente-antrag-unterbrechung"
key = "menu-dokumente-antrag-unterbrechung:key"
label = "&menu-dokumente-antrag-unterbrechung.label;"
command = "menu-dokumente-antrag-unterbrechung:command"
accesskey = "&menu-dokumente-antrag-unterbrechung.accesskey;"
/>
</menupopup>
</menu>
<menuseparator/>
<menuitem
id = "menu-dokumente-inskriptionsbestaetigung"
key = "menu-dokumente-inskriptionsbestaetigung:key"
label = "&menu-dokumente-inskriptionsbestaetigung.label;"
command = "menu-dokumente-inskriptionsbestaetigung:command"
accesskey = "&menu-dokumente-inskriptionsbestaetigung.accesskey;"/>
<menuitem
id = "menu-dokumente-inskriptionsbestaetigung"
key = "menu-dokumente-inskriptionsbestaetigung:key"
label = "&menu-dokumente-inskriptionsbestaetigung.label;"
command = "menu-dokumente-inskriptionsbestaetigung:command"
accesskey = "&menu-dokumente-inskriptionsbestaetigung.accesskey;"/>
<menuitem
id = "menu-dokumente-inskriptionsbestaetigungeng"
key = "menu-dokumente-inskriptionsbestaetigungeng:key"
label = "&menu-dokumente-inskriptionsbestaetigungeng.label;"
command = "menu-dokumente-inskriptionsbestaetigungeng:command"
accesskey = "&menu-dokumente-inskriptionsbestaetigungeng.accesskey;"/>
accesskey = "&menu-dokumente-inskriptionsbestaetigungeng.accesskey;"
/>
<menuitem
id = "menu-statistic-lehrauftraege"
key = "menu-statistic-lehrauftraege:key"
+49 -10
View File
@@ -74,6 +74,7 @@ require_once('../../include/reihungstest.class.php');
require_once('../../include/studienplan.class.php');
require_once('../../include/mobilitaet.class.php');
require_once('../../include/studienordnung.class.php');
require_once('../../include/bismeldestichtag.class.php');
$user = get_uid();
$db = new basis_db();
@@ -383,7 +384,7 @@ function isBuchungAllowedToChange($buchung_obj)
* @param $new_status_ausbildungssemester Ausbildungssemester des neuen/zu ändernen Status
* @param $old_status_studiensemester Studiensemester des alten Status, leer wenn neuer Status
* @param $old_status_ausbildungssemester Ausbildungssemester des alten Status, leer wenn neuer Status
* @return array
* @return array mit error = true und Fehlerbeschreibung wenn ungültig, andernfalls error = false
*/
function checkStatusaenderung(
$prestudent_id, $status_kurzbz, $new_status_studiensemester, $new_status_datum, $new_status_ausbildungssemester,
@@ -417,7 +418,7 @@ function checkStatusaenderung(
$studiensemester->load($new_status_studiensemester);
$new_status_semesterstart = new DateTime($studiensemester->start);
// Alle bisherigen prestudentstatus nach Datum sortiert
// Alle prestudentstatus nach Datum sortiert
$qry = "SELECT status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, sem.start AS studiensemester_start
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
@@ -464,7 +465,7 @@ function checkStatusaenderung(
// Gültige Zeitabfolge, bestehenden Status hinzufügen
$statusArr[] = $row;
}
// oder Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
// oder Neuer/editierter Statuseintrag vor bestehendem Statuseintrag
elseif ($new_status_datum <= $status_datum && $new_status_semesterstart <= $studiensemester_start)
{
// Gültige Zeitabfolge, bestehenden Status hinzufügen
@@ -475,8 +476,7 @@ function checkStatusaenderung(
// Zeitabfolge ungültig, Fehler
return array(
'error' => true,
'errormsg' => 'Datum des Statuseintrags muss nach dem Statusdatum,'
.' Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein'
'errormsg' => 'Ungültige Zeitabfolge der Statuseinträge (Statusdatum oder Semester)'
);
}
}
@@ -994,6 +994,18 @@ if(!$error)
{
$new_status_datum = isset($_POST['datum']) ? $_POST['datum'] : date('Y-m-d');
$bismeldestichtag = new bismeldestichtag();
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($new_status_datum);
if ($meldestichtag_erreicht === true)
{
$return = false;
$error = true;
$errormsg .= 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden.';
$anzahl_fehler++;
}
$check_statusaenderung_result = checkStatusaenderung(
$prestudent_id,
$_POST['status_kurzbz'],
@@ -1204,13 +1216,24 @@ if(!$error)
if(isset($_POST['studiensemester_kurzbz']) && isset($_POST['status_kurzbz']) &&
isset($_POST['prestudent_id']) && is_numeric($_POST['prestudent_id']) &&
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']))
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']) &&
isset($_POST['datum']))
{
if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
$erweiterteBerechtigungen = $rechte->isBerechtigt('admin', null, 'suid') || $rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid');
$bismeldestichtag = new bismeldestichtag();
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($_POST['datum']);
if($_POST['status_kurzbz']=='Student' && !$erweiterteBerechtigungen)
{
$return = false;
$errormsg = 'Studentenrolle kann nur durch den Administrator geloescht werden';
}
elseif ($meldestichtag_erreicht && !$erweiterteBerechtigungen)
{
$return = false;
$errormsg = 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht gelöscht werden.';
}
else
{
$qry = "SELECT count(*) as anzahl FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($_POST['prestudent_id'], FHC_INTEGER);
@@ -1530,6 +1553,17 @@ if(!$error)
$error = true;
$errormsg = isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
}
// Prüfung, ob Meldestichtag erreicht ist
$bismeldestichtag = new bismeldestichtag();
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($_POST['datum']);
if ($meldestichtag_erreicht === true)
{
$return = false;
$error = true;
$errormsg = 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden.';
}
}
if(!$error)
@@ -2502,10 +2536,15 @@ if(!$error)
{
$person_ids = explode(';',$_POST['person_ids']);
$exists = false;
if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && (in_array($_POST['buchungstyp_kurzbz'], unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK))))
if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK'))
{
$konto = new konto();
$exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $_POST['buchungstyp_kurzbz']);
$buchungen = unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK);
$buchung = $_POST['buchungstyp_kurzbz'];
if (isset($buchungen[$buchung]))
{
$konto = new konto();
$exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $buchungen[$buchung]);
}
}
if($exists)
+18 -18
View File
@@ -806,24 +806,24 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<treechildren flex="1" >
<treeitem uri="rdf:*">
<treerow>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#status_kurzbz"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studiensemester_kurzbz"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#ausbildungssemester"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#lehrverband"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#datum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#orgform_kurzbz"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#prestudent_id"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_id"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_bezeichnung"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#anmerkung"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_von"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_am"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bewerbung_abgeschicktamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#status_kurzbz"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studiensemester_kurzbz"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#ausbildungssemester"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#lehrverband"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#datum"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#orgform_kurzbz"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#prestudent_id"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_id"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_bezeichnung"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#anmerkung"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_von"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_am"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bewerbung_abgeschicktamum"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
</treerow>
</treeitem>
</treechildren>
+2 -1
View File
@@ -208,7 +208,8 @@ else
<menupopup id="student-filter-menu-popup" >
<menuitem id="student-toolbar-filter-dokumente" label="fehlende Dokumente" oncommand="InteressentDokumenteFilter()" disabled="false" tooltiptext="Liste aller Studenten mit Fehlenden Dokumenten"/>
<menuitem id="student-toolbar-filter-offenebuchungen" label="offene Buchungen" oncommand="StudentKontoFilterStudenten('konto')" disabled="false" tooltiptext="Liste aller Studenten mit offenen Buchungen"/>
<menuitem id="student-toolbar-filter-studiengebuehr" label="nicht gebuchte Studiengebuehr" oncommand="StudentKontoFilterStudenten('studiengebuehr')" disabled="false" tooltiptext="Liste aller Studenten die noch nicht mit Studienbebuehr belastet wurden" />
<menuitem id="student-toolbar-filter-studiengebuehr" label="nicht gebuchte Studiengebuehr" oncommand="StudentKontoFilterStudenten('studiengebuehr')" disabled="false" tooltiptext="Liste aller Studenten die noch nicht mit der Studiengebühr belastet wurden" />
<menuitem id="student-toolbar-filter-erhoehte-studiengebuehr" label="erhöhten Studienbeitrag" oncommand="StudentKontoFilterStudenten('StudiengebuehrErhoeht')" disabled="false" tooltiptext="Liste aller Studenten denen der erhöhte Studienbeitrag eingebucht wurde" />
<menuitem id="student-toolbar-filter-zgvohnedatum" label="ZGV eingetragen ohne Datum" oncommand="StudentKontoFilterStudenten('zgvohnedatum')" disabled="false" tooltiptext="Liste aller Studenten die ZGV eingetragen haben bei denen aber kein ZGV Datum gesetzt ist" />
<menu label="nach Statusgrund">
<menupopup id="student-filter-statusgrund-menu-popup">
@@ -181,6 +181,8 @@ echo "<?xml-stylesheet href=\"".APP_ROOT."content/bindings.css\" type=\"text/css
<vbox>
<spacer flex="1"/>
<button id="student-note-copy" label="&lt;=" style="font-weight: bold;" oncommand="StudentNotenMove();"/>
<spacer id="student-note-copy-antrag-spacer" flex="2"/>
<button id="student-note-copy-antrag" label="&lt;=" style="font-weight: bold;" oncommand="StudentNotenMoveFromAntrag();"/>
<spacer flex="1"/>
</vbox>
@@ -262,6 +264,83 @@ echo "<?xml-stylesheet href=\"".APP_ROOT."content/bindings.css\" type=\"text/css
</treechildren>
</template>
</tree>
<label id="student-antragnoten-tree-label" value="Wiederholung" hidden="true"/>
<tree id="student-antragnoten-tree" seltype="multi" hidecolumnpicker="false" flex="1"
datasources="rdf:null" ref="http://www.technikum-wien.at/antragnote/liste"
style="margin-bottom:5px;" height="100%" enableColumnDrag="true"
flags="dont-build-content"
>
<treecols>
<treecol id="student-antragnoten-tree-lehrveranstaltung_bezeichnung" label="Lehrveranstaltung" flex="2" hidden="false" primary="true"
class="sortDirectionIndicator"
sortActive="true"
sortDirection="ascending"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#lehrveranstaltung_bezeichnung"
onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-note_bezeichnung" label="Note" flex="5" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#note_bezeichnung" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-mitarbeiter_uid" label="MitarbeiterInUID" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#mitarbeiter_uid" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-benotungsdatum" label="Benotungsdatum" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#benotungsdatum_iso" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-benotungsdatum-iso" label="BenotungsdatumISO" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#benotungsdatum_iso" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-freigabedatum" label="Freigabedatum" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#freigabedatum_iso" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-studiensemester_kurzbz" label="Studiensemester" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#studiensemester_kurzbz" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-note" label="NoteID" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#note" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-prestudent_id" label="PrestudentInID" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#prestudent_id" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-lehrveranstaltung_id" label="LehrveranstaltungID" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#lehrveranstaltung_id" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-antragnoten-tree-studierendenantrag_lehrveranstaltung_id" label="StudierendenantragLehrveranstaltungID" flex="2" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/antragnote/rdf#studierendenantrag_lehrveranstaltung_id" onclick="StudentAntragNotenTreeSort()"/>
<splitter class="tree-splitter"/>
</treecols>
<template>
<treechildren flex="1" >
<treeitem uri="rdf:*">
<treerow>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#lehrveranstaltung_bezeichnung"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#note_bezeichnung"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#mitarbeiter_uid"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#benotungsdatum"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#benotungsdatum_iso"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#freigabedatum"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#studiensemester_kurzbz"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#note"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#prestudent_id"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#lehrveranstaltung_id"/>
<treecell label="rdf:http://www.technikum-wien.at/antragnote/rdf#studierendenantrag_lehrveranstaltung_id"/>
</treerow>
</treeitem>
</treechildren>
</template>
</tree>
</vbox>
</hbox>
<hbox>
+338 -4
View File
@@ -47,6 +47,8 @@ var StudentNotenTreeDatasource; //Datasource des Noten Trees
var StudentNotenSelectLehrveranstaltungID=null; //LehreinheitID des Noten Eintrages der nach dem Refresh markiert werden soll
var StudentLvGesamtNotenTreeDatasource; //Datasource des Noten Trees
var StudentLvGesamtNotenSelectLehrveranstaltungID=null; //LehreinheitID des Noten Eintrages der nach dem Refresh markiert werden soll
var StudentAntragNotenTreeDatasource; //Datasource des Noten Trees
var StudentAntragNotenSelectLehrveranstaltungID=null; //LehreinheitID des Noten Eintrages der nach dem Refresh markiert werden soll
var StudentPruefungTreeDatasource; //Datasource des Pruefung Trees
var StudentPruefungSelectID=null; //ID der Pruefung die nach dem Refresh markiert werden soll
var StudentAnrechnungTreeDatasource; //Datasource des Anrechnung Trees
@@ -56,6 +58,7 @@ var StudentAkteTreeDatasource=null;
var doublerebuildkonto='false';
var StudentNotenTreeloaded=false;
var StudentGesamtNotenTreeloaded=false;
var StudentAntragNotenTreeloaded=false;
// ********** Observer und Listener ************* //
// ****
@@ -342,6 +345,54 @@ var StudentLvGesamtNotenTreeListener =
}
};
// ****
// * Observer fuer LvGesamtNoten Tree
// * startet Rebuild nachdem das Refresh
// * der datasource fertig ist
// ****
var StudentAntragNotenTreeSinkObserver =
{
onBeginLoad : function(pSink) {},
onInterrupt : function(pSink) {},
onResume : function(pSink) {},
onError : function(pSink, pStatus, pError) {},
onEndLoad : function(pSink)
{
StudentAntragNotenTreeloaded=false;
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var dsResources = StudentAntragNotenTreeDatasource.GetAllResources();
if (dsResources.hasMoreElements()) {
document.getElementById('student-antragnoten-tree').hidden = false;
document.getElementById('student-antragnoten-tree-label').hidden = false;
document.getElementById('student-note-copy-antrag').hidden = false;
document.getElementById('student-note-copy-antrag-spacer').hidden = false;
} else {
document.getElementById('student-antragnoten-tree').hidden = true;
document.getElementById('student-antragnoten-tree-label').hidden = true;
document.getElementById('student-note-copy-antrag').hidden = true;
document.getElementById('student-note-copy-antrag-spacer').hidden = true;
}
document.getElementById('student-antragnoten-tree').builder.rebuild();
}
};
// ****
// * Nach dem Rebuild wird der Eintrag wieder
// * markiert
// ****
var StudentAntragNotenTreeListener =
{
willRebuild : function(builder) { },
didRebuild : function(builder)
{
//timeout nur bei Mozilla notwendig da sonst die rows
//noch keine values haben. Ab Seamonkey funktionierts auch
//ohne dem setTimeout
StudentAntragNotenTreeloaded=true;
window.setTimeout(StudentAntragNotenTreeSelectID,10);
}
};
// ****
// * Observer fuer Pruefung Tree
// * startet Rebuild nachdem das Refresh
@@ -1604,6 +1655,35 @@ function StudentAuswahl()
lvgesamtnotentree.database.AddDataSource(StudentLvGesamtNotenTreeDatasource);
StudentLvGesamtNotenTreeDatasource.addXMLSinkObserver(StudentLvGesamtNotenTreeSinkObserver);
lvgesamtnotentree.builder.addListener(StudentLvGesamtNotenTreeListener);
var antragnotentree = document.getElementById('student-antragnoten-tree');
url='<?php echo APP_ROOT;?>index.ci.php/components/Antrag/Wiederholung/getLvsAsRdf/'+prestudent_id+"?"+gettimestamp();
try
{
StudentAntragNotenTreeDatasource.removeXMLSinkObserver(StudentAntragNotenTreeSinkObserver);
antragnotentree.builder.removeListener(StudentAntragNotenTreeListener);
}
catch(e)
{}
//Alte DS entfernen
var oldDatasources = antragnotentree.database.GetDataSources();
while(oldDatasources.hasMoreElements())
{
antragnotentree.database.RemoveDataSource(oldDatasources.getNext());
}
//Refresh damit die entfernten DS auch wirklich entfernt werden
antragnotentree.builder.rebuild();
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
StudentAntragNotenTreeDatasource = rdfService.GetDataSource(url);
StudentAntragNotenTreeDatasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
StudentAntragNotenTreeDatasource.QueryInterface(Components.interfaces.nsIRDFXMLSink);
antragnotentree.database.AddDataSource(StudentAntragNotenTreeDatasource);
StudentAntragNotenTreeDatasource.addXMLSinkObserver(StudentAntragNotenTreeSinkObserver);
antragnotentree.builder.addListener(StudentAntragNotenTreeListener);
}
// ***** KONTAKTE *****
@@ -1796,7 +1876,6 @@ function StudentPrestudentDisableFields(val)
document.getElementById('student-prestudent-menulist-aufnahmeschluessel').disabled=val;
document.getElementById('student-prestudent-checkbox-facheinschlberuf').disabled=val;
document.getElementById('student-prestudent-checkbox-bismelden').disabled=val;
document.getElementById('student-prestudent-menulist-foerderrelevant').disabled=val;
document.getElementById('student-prestudent-checkbox-dual').disabled=val;
document.getElementById('student-prestudent-button-save').disabled=val;
@@ -1843,6 +1922,20 @@ function StudentPrestudentDisableFields(val)
document.getElementById('student-prestudent-menulist-zgvmastercode').disabled=true;
}
// bismelden checkbox deaktivieren wenn Recht nicht vorhanden ist
<?php
$editBismelden = $rechte->isBerechtigt('student/editBismelden') ? 'true' : 'false';
echo ' var editBismelden = '.$editBismelden.';';
?>
if (editBismelden == true)
{
document.getElementById('student-prestudent-checkbox-bismelden').disabled=val;
}
else
{
document.getElementById('student-prestudent-checkbox-bismelden').disabled=true;
}
//Status Tree leeren
rollentree = document.getElementById('student-prestudent-tree-rolle');
@@ -2000,6 +2093,7 @@ function StudentPrestudentRolleDelete()
var studiensemester_kurzbz = getTreeCellText(tree, 'student-prestudent-tree-rolle-studiensemester_kurzbz', tree.currentIndex);
var prestudent_id = getTreeCellText(tree, 'student-prestudent-tree-rolle-prestudent_id', tree.currentIndex);
var ausbildungssemester = getTreeCellText(tree, 'student-prestudent-tree-rolle-ausbildungssemester', tree.currentIndex);
var datum = getTreeCellText(tree, 'student-prestudent-tree-rolle-datum', tree.currentIndex);
studiengang_kz = document.getElementById('student-prestudent-menulist-studiengang_kz').value;
if(confirm('Diese Rolle wirklich loeschen?'))
@@ -2028,6 +2122,7 @@ function StudentPrestudentRolleDelete()
req.add('studiensemester_kurzbz', studiensemester_kurzbz);
req.add('ausbildungssemester', ausbildungssemester);
req.add('studiengang_kz', studiengang_kz);
req.add('datum', datum);
var response = req.executePOST();
@@ -2059,6 +2154,7 @@ function StudentPrestudentRolleDelete()
req.add('studiensemester_kurzbz', studiensemester_kurzbz);
req.add('ausbildungssemester', ausbildungssemester);
req.add('studiengang_kz', studiengang_kz);
req.add('datum', datum);
var response = req.executePOST();
@@ -2151,8 +2247,9 @@ function StudentRolleBearbeiten()
var studiensemester_kurzbz = getTreeCellText(tree, 'student-prestudent-tree-rolle-studiensemester_kurzbz', tree.currentIndex);
var prestudent_id = getTreeCellText(tree, 'student-prestudent-tree-rolle-prestudent_id', tree.currentIndex);
var ausbildungssemester = getTreeCellText(tree, 'student-prestudent-tree-rolle-ausbildungssemester', tree.currentIndex);
var datum = getTreeCellText(tree, 'student-prestudent-tree-rolle-datum', tree.currentIndex);
window.open('<?php echo APP_ROOT?>content/student/studentrolledialog.xul.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester,"Status","status=no, width=500, height=450, centerscreen, resizable");
window.open('<?php echo APP_ROOT?>content/student/studentrolledialog.xul.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester+'&datum='+datum,"Status","status=no, width=500, height=450, centerscreen, resizable");
}
// ****
@@ -2210,7 +2307,7 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
timepart_arr[i] = '00';
}
}
arr = datepart.split('.');
if(arr[0].length==1)
@@ -4383,6 +4480,77 @@ function StudentNotenTreeSelectDifferent()
}
}
// ****
// * Selectiert die Noten im AntragNoteTree welche nicht gleich denen
// * im ZeugnisNoteTree sind
// ****
function StudentAntragNotenTreeSelectDifferent()
{
var zeugnistree = document.getElementById("student-noten-tree");
var antragnotentree = document.getElementById("student-antragnoten-tree");
//bestehende markierung entfernen
antragnotentree.view.selection.clearSelection();
if(StudentNotenTreeloaded && StudentAntragNotenTreeloaded)
{
if(antragnotentree.view)
var antragitems = antragnotentree.view.rowCount; //Anzahl der Zeilen ermitteln
else
return false;
if(zeugnistree.view)
var zeugnisitems = zeugnistree.view.rowCount; //Anzahl der Zeilen ermitteln
else
return false;
for(var i=0;i<antragitems;i++)
{
//Daten aus AntragNotenTree holen
col = antragnotentree.columns ? antragnotentree.columns["student-antragnoten-tree-lehrveranstaltung_id"] : "student-antragnoten-tree-lehrveranstaltung_id";
var antraglehrveranstaltung_id=antragnotentree.view.getCellText(i,col);
col = antragnotentree.columns ? antragnotentree.columns["student-antragnoten-tree-note"] : "student-antragnoten-tree-note";
var antragnote=antragnotentree.view.getCellText(i,col);
col = antragnotentree.columns ? antragnotentree.columns["student-antragnoten-tree-benotungsdatum-iso"] : "student-antragnoten-tree-benotungsdatum-iso";
var antragbenotungsdatum=antragnotentree.view.getCellText(i,col);
found=false;
//Schauen ob die gleiche Zeile im Zeugnisnoten Tree vorkommt
for(var j=0;j<zeugnisitems;j++)
{
col = zeugnistree.columns ? zeugnistree.columns["student-noten-tree-lehrveranstaltung_id"] : "student-noten-tree-lehrveranstaltung_id";
var zeugnislehrveranstaltung_id=zeugnistree.view.getCellText(j,col);
col = zeugnistree.columns ? zeugnistree.columns["student-noten-tree-note"] : "student-noten-tree-note";
var zeugnisnote=zeugnistree.view.getCellText(j,col);
col = zeugnistree.columns ? zeugnistree.columns["student-noten-tree-benotungsdatum-iso"] : "student-noten-tree-benotungsdatum-iso";
var zeugnisbenotungsdatum=zeugnistree.view.getCellText(j,col);
if(zeugnislehrveranstaltung_id==antraglehrveranstaltung_id && zeugnisnote==antragnote && zeugnisbenotungsdatum==antragbenotungsdatum)
{
found=true;
break;
}
//Wenn das benotungsdatum im Zeugnis
//nach dem benotungsdatum des antrags liegt, dann wird die zeile auch nicht markiert.
//damit wird verhindert, dass pruefungsnoten die nur von der assistenz eingetragen wurden,
//durch den alten eintrag des antrags wieder ueberschrieben werden
if(zeugnislehrveranstaltung_id==antraglehrveranstaltung_id
&& zeugnisbenotungsdatum>antragbenotungsdatum)
{
found=true;
break;
}
}
if(!found)
{
//Zeile markieren
antragnotentree.view.selection.rangedSelect(i,i,true);
}
}
}
}
// ****
// * Selectiert den Noten Eintrag nachdem der Tree
// * rebuildet wurde.
@@ -4393,11 +4561,12 @@ function StudentLvGesamtNotenTreeSelectID()
}
// ***
// * Disabled/Enabled die Nodenfelder
// * Disabled/Enabled die Notenfelder
// ***
function StudentNoteDisableFields(val)
{
document.getElementById('student-note-copy').disabled=val;
document.getElementById('student-note-copy-antrag').disabled=val;
}
// ***
@@ -4581,6 +4750,68 @@ function StudentNotenMove()
}
}
// ****
// * Uebernimmt die Noten der Antraege fuer die Zeugnisnote
// ****
function StudentNotenMoveFromAntrag()
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var tree = document.getElementById('student-antragnoten-tree');
var start = new Object();
var end = new Object();
var numRanges = tree.view.selection.getRangeCount();
var paramList= '';
var i = 0;
var url = '<?php echo APP_ROOT ?>index.ci.php/components/Antrag/Wiederholung/moveLvsToZeugnis';
var req = new phpRequest(url,'','');
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t,start,end);
for (var v = start.value; v <= end.value; v++)
{
col = tree.columns ? tree.columns["student-antragnoten-tree-studierendenantrag_lehrveranstaltung_id"] : "student-antragnoten-tree-studierendenantrag_lehrveranstaltung_id";
studierendenantrag_lehrveranstaltung_id = tree.view.getCellText(v,col);
req.add('studierendenantrag_lehrveranstaltung_id_'+i, studierendenantrag_lehrveranstaltung_id);
i++;
}
}
req.add('anzahl', i);
var uid = document.getElementById('student-detail-textbox-uid').value;
req.add('student_uid', uid);
var txt = "?";
for(var q in req.parms) {
txt = txt+'&'+req.parms[q].name+'='+encodeURIComponent(req.parms[q].value);
}
var response = req.executePOST();
var val = new ParseReturnValue(response)
if (!val.dbdml_return)
{
if(val.dbdml_errormsg=='')
alert(response);
else
alert(val.dbdml_errormsg);
StudentNotenTreeDatasource.Refresh(false); //non blocking
SetStatusBarText('Daten wurden gespeichert');
StudentNoteDetailDisableFields(true);
}
else
{
StudentNotenTreeDatasource.Refresh(false); //non blocking
SetStatusBarText('Daten wurden gespeichert');
StudentNoteDetailDisableFields(true);
}
}
// ****
// * Loescht die markierte Note
// ****
@@ -5946,6 +6177,102 @@ function StudentCreateDiplSupplement(event)
window.open('<?php echo APP_ROOT; ?>content/pdfExport.php?xml=diplomasupplement.xml.php&output='+output+'&xsl=DiplSupplement&xsl_stg_kz='+stg_kz+'&uid='+paramList,'DiplomaSupplement', 'height=200,width=350,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');
}
function StudentPrintAntragAbmeldung(event)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var tree = document.getElementById('student-tree');
if (tree.currentIndex==-1)
return alert('Bitte eine/n Studierende/n auswaehlen');
//Uids aller markierten Studenten holen
var start = new Object();
var end = new Object();
var numRanges = tree.view.selection.getRangeCount();
var prestudent_id= '';
var student_uid= '';
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t,start,end);
for (var v = start.value; v <= end.value; v++)
{
var col = tree.columns ? tree.columns["student-treecol-prestudent_id"] : "student-treecol-prestudent_id";
var prestudentId=tree.view.getCellText(v,col);
prestudent_id += ';'+prestudentId;
col = tree.columns ? tree.columns["student-treecol-uid"] : "student-treecol-uid";
var uid=tree.view.getCellText(v,col);
student_uid += ';'+uid;
}
}
if (event.shiftKey)
{
var output='odt';
}
else if (event.ctrlKey)
{
var output='doc';
}
else
{
var output='pdf';
}
window.open('<?php echo APP_ROOT; ?>/content/pdfExport.php?xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&uid='+student_uid+'&prestudent_id='+prestudent_id+'&output='+output,'AntragAbmeldung', 'height=200,width=350,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');
}
function StudentPrintAntragUnterbrechung(event)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var tree = document.getElementById('student-tree');
if (tree.currentIndex==-1)
return alert('Bitte eine/n Studierende/n auswaehlen');
//Uids aller markierten Studenten holen
var start = new Object();
var end = new Object();
var numRanges = tree.view.selection.getRangeCount();
var prestudent_id= '';
var student_uid= '';
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t,start,end);
for (var v = start.value; v <= end.value; v++)
{
var col = tree.columns ? tree.columns["student-treecol-prestudent_id"] : "student-treecol-prestudent_id";
var prestudentId=tree.view.getCellText(v,col);
prestudent_id += ';'+prestudentId;
col = tree.columns ? tree.columns["student-treecol-uid"] : "student-treecol-uid";
var uid=tree.view.getCellText(v,col);
student_uid += ';'+uid;
}
}
if (event.shiftKey)
{
var output='odt';
}
else if (event.ctrlKey)
{
var output='doc';
}
else
{
var output='pdf';
}
window.open('<?php echo APP_ROOT; ?>/content/pdfExport.php?xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&uid='+student_uid+'&prestudent_id='+prestudent_id+'&output='+output,'AntragUnterbrechung', 'height=200,width=350,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');
}
// ****
// * Erstellt den Ausbildungsvertrag fuer einen oder mehrere Studenten
// ****
@@ -6374,6 +6701,13 @@ function StudentLVGesamtNotenTreeSort()
window.setTimeout(StudentNotenTreeSelectDifferent,20);
}
function StudentAntragNotenTreeSort()
{
// Nach dem Sortieren der Noten die Unterschiede erneut markieren
// da sonst nach dem sortieren falsche Eintraege markiert sind
window.setTimeout(StudentAntragNotenTreeSelectDifferent,20);
}
//****
//* Exportiert den Bescheid fuer alle markierten Studierenden
//****
+34 -14
View File
@@ -31,6 +31,7 @@ require_once('../../include/person.class.php');
require_once('../../include/prestudent.class.php');
require_once('../../include/studienplan.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/bismeldestichtag.class.php');
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
@@ -58,8 +59,17 @@ if(isset($_GET['ausbildungssemester']))
else
$ausbildungssemester='';
if(isset($_GET['datum']))
$datum=$_GET['datum'];
else
$datum='';
$vorname = '';
$nachname = '';
$user=get_uid();
$db = new basis_db();
if($prestudent_id!='')
{
$prestudent = new prestudent();
@@ -67,9 +77,16 @@ if($prestudent_id!='')
$vorname = $prestudent->vorname;
$nachname = $prestudent->nachname;
// Prüfen, ob Studnetrolle vor dem aktuellen Meldestichtag ist. In diesem Fall darf die Rolle nicht mehr bearbeitet werden.
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
$bismeldestichtag = new bismeldestichtag();
$disabled = $bismeldestichtag->checkMeldestichtagErreicht($datum) && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid')
? ' disabled="true"'
: '';
}
$db = new basis_db();
$user=get_uid();
?>
<window id="student-rolle-dialog" title="Status"
@@ -83,6 +100,9 @@ $user=get_uid();
<vbox>
<textbox id="student-rolle-textbox-prestudent_id" value="" hidden="true" />
<groupbox id="student-rolle-groupbox" flex="1">
<?php if ($disabled): ?>
<label class="warning">Meldestichtag erreicht - Bearbeiten nicht mehr möglich</label>
<?php endif; ?>
<caption label="Details<?php echo ($nachname!=''?" $nachname $vorname":'');?>"/>
<grid id="student-rolle-grid-detail" style="margin:4px;" flex="1">
<columns >
@@ -112,7 +132,7 @@ $user=get_uid();
<label value="Studiensemester" control="student-rolle-menulist-studiensemester"/>
<menulist id="student-rolle-menulist-studiensemester"
datasources="<?php echo APP_ROOT ?>rdf/studiensemester.rdf.php?order=desc" flex="1"
ref="http://www.technikum-wien.at/studiensemester/liste" >
ref="http://www.technikum-wien.at/studiensemester/liste"<?php echo $disabled ?> >
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/studiensemester/rdf#kurzbz"
@@ -124,7 +144,7 @@ $user=get_uid();
</row>
<row>
<label value="Ausbildungssemester" control="student-rolle-menulist-ausbildungssemester"/>
<menulist id="student-rolle-menulist-ausbildungssemester" >
<menulist id="student-rolle-menulist-ausbildungssemester"<?php echo $disabled ?> >
<menupopup>
<?php
@@ -163,7 +183,7 @@ $user=get_uid();
?>
<row hidden="<?php echo $hidden; ?>">
<label value="Organisationsform" control="student-rolle-menulist-orgform_kurzbz"/>
<menulist id="student-rolle-menulist-orgform_kurzbz" >
<menulist id="student-rolle-menulist-orgform_kurzbz"<?php echo $disabled ?> >
<menupopup>
<menuitem value="" label="-- keine Auswahl --"/>
<?php
@@ -181,13 +201,13 @@ $user=get_uid();
</row>
<row>
<label value="Datum" control="student-rolle-datum-datum"/>
<box class='Datum' id="student-rolle-datum-datum" />
<box class='Datum' id="student-rolle-datum-datum"<?php echo $disabled ?>/>
</row>
<row>
<label value="Bestätigt am" control="student-rolle-datum-bestaetigt_datum"/>
<box class='Datum' id="student-rolle-datum-bestaetigt_datum" />
<box class='Datum' id="student-rolle-datum-bestaetigt_datum"<?php echo $disabled ?> />
</row>
<?php
<?php
$readonly = 'readonly="true"';
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
@@ -196,11 +216,11 @@ $user=get_uid();
?>
<row>
<label value="Bewerbung abgeschickt am" control="student-rolle-datum-bewerbung_abgeschicktamum"/>
<textbox id="student-rolle-datum-bewerbung_abgeschicktamum" <?php echo $readonly ?>/>
<textbox id="student-rolle-datum-bewerbung_abgeschicktamum" <?php echo $readonly ?><?php echo $disabled ?>/>
</row>
<row>
<label value="Studienplan" control="student-rolle-menulist-studienplan"/>
<menulist id="student-rolle-menulist-studienplan" >
<menulist id="student-rolle-menulist-studienplan"<?php echo $disabled ?> >
<menupopup>
<menuitem value="" label="-- keine Auswahl --"/>
<?php
@@ -217,11 +237,11 @@ $user=get_uid();
</row>
<row>
<label value="Anmerkung"/>
<textbox id="student-rolle-textbox-anmerkung" multiline="true" />
<textbox id="student-rolle-textbox-anmerkung" multiline="true"<?php echo $disabled ?> />
</row>
<row>
<label value="Aufnahmestufe"/>
<menulist id="student-rolle-menulist-stufe" disabled="false">
<menulist id="student-rolle-menulist-stufe" <?php echo empty($disabled) ? 'disabled="false"' : $disabled ?>>
<menupopup>
<menuitem value="" label="-- keine Auswahl --"/>
<menuitem value="1" label="1"/>
@@ -234,7 +254,7 @@ $user=get_uid();
<label value="Grund"/>
<menulist id="student-rolle-menulist-statusgrund"
datasources="rdf:null" flex="1"
ref="http://www.technikum-wien.at/statusgrund" >
ref="http://www.technikum-wien.at/statusgrund"<?php echo $disabled ?> >
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/statusgrund/rdf#statusgrund_id"
@@ -248,7 +268,7 @@ $user=get_uid();
</grid>
<hbox>
<spacer flex="1" />
<button id="student-rolle-button-speichern" oncommand="StudentRolleSpeichern()" label="Speichern" />
<button id="student-rolle-button-speichern" oncommand="StudentRolleSpeichern()" label="Speichern"<?php echo $disabled ?> />
</hbox>
</groupbox>
</vbox>
+185
View File
@@ -0,0 +1,185 @@
<?php
/* Copyright (C) 2007 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Alexei Karpenko <karpenko@technikum-wien.at>,
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/studiensemester.class.php');
class bismeldestichtag extends basis_db
{
//Tabellenspalten
public $meldestichtag_id; // integer
public $meldestichtag; // date
public $studiensemester_kurzbz; // varchar(16)
public $insertamum; // timestamp
public $insertvon; // varchar(32)
public $updateamum; // timestamp
public $updatevon; // varchar(32)
// ErgebnisArray
public $result=array();
/**
* Konstruktor - Uebergibt die Connection und laedt optional einen Meldestichtag
* @param $meldestichtag_id Stichtag der geladen werden soll (default=null)
*/
public function __construct($meldestichtag_id=null)
{
parent::__construct();
if(!is_null($meldestichtag_id))
$this->load($meldestichtag_id);
}
/**
* Laedt Meldestichtag mit der uebergebenen ID
* @param $meldestichtag_id ID des Stichtags der geladen werden soll
*/
public function load($meldestichtag_id)
{
$qry = "SELECT * FROM bis.tbl_bismeldestichtag WHERE meldestichtag_id=".$this->db_add_param($meldestichtag_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$this->meldestichtag_id = $row->meldestichtag_id;
$this->meldestichtag = $row->meldestichtag;
$this->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
return true;
}
else
{
$this->errormsg = 'Kein Eintrag gefunden';
return false;
}
}
else
{
$this->errormsg = "Fehler beim Laden des Stichtags";
return false;
}
}
/**
* Prueft die Variablen vor dem Speichern
* auf Gueltigkeit.
* @return true wenn ok, false im Fehlerfall
*/
protected function validate()
{
return true;
}
/**
* Liefert zuletzt erreichten Meldestichtag
*
* @param $studiensemester_kurzbz
* @return boolean
*/
public function getLastReachedMeldestichtag($studiensemester_kurzbz = null)
{
$qry = "SELECT
meldestichtag_id, meldestichtag, studiensemester_kurzbz, insertamum, insertvon, updateamum, updatevon
FROM
bis.tbl_bismeldestichtag
WHERE
meldestichtag < NOW()";
if (isset($studiensemester_kurzbz))
{
$qry .= "
AND
studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
}
$qry .= "
ORDER BY
meldestichtag DESC
LIMIT 1;";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new bismeldestichtag();
$obj->meldestichtag_id = $row->meldestichtag_id;
$obj->meldestichtag = $row->meldestichtag;
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Meldestichtag konnte nicht geladen werden';
return false;
}
}
/**
* Prüft, ob Meldestichtag für ein bestimmtes Statusdatum und Studiensemester erreicht ist.
*
* @param $status_datum
* @param $studiensemester_kurzbz
* @return boolean true wenn erreicht, oder false
*/
public function checkMeldestichtagErreicht($status_datum, $studiensemester_kurzbz = null)
{
$erreicht = false;
if (isset($studiensemester_kurzbz))
{
// Studiensemester ende holen
$studiensemester = new studiensemester();
if ($studiensemester->load($studiensemester_kurzbz))
$studiensemester_ende = new DateTime($studiensemester->ende);
}
// letztes erreichtes Bismeldedatum holen
if ($this->getLastReachedMeldestichtag() && isset($this->result[0]))
$lastReachedMeldestichtag = new DateTime($this->result[0]->meldestichtag);
$statusDatum = new DateTime($status_datum);
// Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen
if (isset($statusDatum))
{
if (isset($lastReachedMeldestichtag))
$erreicht = $statusDatum < $lastReachedMeldestichtag;
if (isset($studiensemester_ende))
$erreicht = $erreicht || $studiensemester_ende < $lastReachedMeldestichtag;
}
return $erreicht;
}
}
?>
+372 -350
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -200,6 +200,10 @@ class dokument_export
chdir($this->temp_folder);
file_put_contents($this->temp_folder . '/content.xml', $contentbuffer);
if ($this->xml_data->firstChild->tagName == 'error') {
$this->errormsg = $this->xml_data->firstChild->textContent;
return false;
}
// styles.xml erstellen
if(!is_null($this->styles_xsl))
{
+1 -1
View File
@@ -41,7 +41,7 @@ class dvb extends basis_db
const DVB_URL_WEBSERVICE_MATRIKELNUMMER = DVB_PORTAL.'/rws/0.2/simpleStudentByMatrikelnummer.xml';
const DVB_URL_WEBSERVICE_RESERVIERUNG = DVB_PORTAL.'/rws/0.6/matrikelreservierung.xml';
const DVB_URL_WEBSERVICE_MELDUNG = DVB_PORTAL.'/rws/0.6/matrikelmeldung.xml';
const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.5/pruefebpk.xml';
const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.6/pruefebpk.xml';
public $authentication;
private $username;
+2 -3
View File
@@ -965,17 +965,16 @@ class konto extends basis_db
}
}
public function checkDoppelteBuchung($person_ids, $stsem, $typ)
public function checkDoppelteBuchung($person_ids, $stsem, $typen)
{
$qry = "SELECT person.vorname, person.nachname
FROM public.tbl_konto konto
JOIN public.tbl_person person USING(person_id)
WHERE konto.person_id IN (".$this->implode4SQL(array_filter($person_ids)).")
AND studiensemester_kurzbz = ".$this->db_add_param($stsem)."
AND buchungstyp_kurzbz = ".$this->db_add_param($typ)."
AND buchungstyp_kurzbz IN (".$this->implode4SQL($typen) .")
GROUP BY person.vorname, person.nachname
ORDER BY person.nachname, person.vorname";
if ($result = $this->db_query($qry))
{
$persons = array();
+39
View File
@@ -906,6 +906,45 @@ class prestudent extends person
AND tbl_reihungstest.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
)";
break;
case "bewerberrtangemeldetteilgenommen":
$qry.=" AND a.rolle='Bewerber'
AND EXISTS (
SELECT
1
FROM
public.tbl_rt_person
JOIN public.tbl_reihungstest ON (rt_id = reihungstest_id)
WHERE
person_id=a.person_id
AND studienplan_id IN (
SELECT studienplan_id FROM lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE tbl_studienordnung.studiengang_kz=a.studiengang_kz
)
AND tbl_reihungstest.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
)
AND reihungstestangetreten = true";
break;
case "bewerberrtangemeldetnichtteilgenommen":
$qry.=" AND a.rolle='Bewerber'
AND EXISTS (
SELECT
1
FROM
public.tbl_rt_person
JOIN public.tbl_reihungstest ON (rt_id = reihungstest_id)
WHERE
person_id=a.person_id
AND studienplan_id IN (
SELECT studienplan_id FROM lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE tbl_studienordnung.studiengang_kz=a.studiengang_kz
)
AND tbl_reihungstest.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
)
AND reihungstestangetreten = false
";
break;
case "zgv":
$stg_obj = new studiengang();
$stg_obj->load($studiengang_kz);
+147
View File
@@ -0,0 +1,147 @@
<?php
/* Copyright (C) 2011 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christopher Gerbrich <christopher.gerbrich@technikum-wien.at> and Manuela Thamer <manuela.thamer@technikum-wien.at
*/
/**
* Klasse Studierendenantrag
*
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
class studierendenantrag extends basis_db
{
public $new;
public $result = array();
//Tabellenspalten
public $studierendenantrag_id; // bigint
public $prestudent_id; // bigint
public $studiensemester_kurzbz; // varchar(32)
public $datum; // timestamp
public $typ; // varchar(32)
public $insertamum; // timestamp
public $insertvon; // varchar(32)
public $datum_wiedereinstieg; // timestamp
public $grund; // text
public $dms_id; // bigint
/**
* Konstruktor - Laedt optional eine Ampel
* @param $amepl_id
*/
public function __construct($studierendenantrag_id=null)
{
parent::__construct();
if(!is_null($studierendenantrag_id))
$this->load($studierendenantrag_id);
}
/**
* Laedt einen Antrag mit der uebergebenen ID
*
* @param $studierendenantrag_id
* @return boolean
*/
public function load($studierendenantrag_id)
{
if(!is_numeric($studierendenantrag_id))
{
$this->errormsg = 'Studierendenantrag ID ist ungueltig';
return false;
}
$qry = "SELECT * FROM campus.tbl_studierendenantrag WHERE studierendenantrag_id=" . $this->db_add_param($studierendenantrag_id, FHC_INTEGER);
if($result = $this->db_query($qry))
{
if($row = $this->db_fetch_object($result))
{
$this->studierendenantrag_id = $row->studierendenantrag_id;
$this->prestudent_id = $row->prestudent_id;
$this->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$this->datum = $row->datum;
$this->typ = $row->typ;
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->datum_wiedereinstieg = $row->datum_wiedereinstieg;
$this->grund = $row->grund;
$this->dms_id = $row->dms_id;
return true;
}
else
{
$this->errormsg = 'Studierendenantrag mit dieser ID exisitert nicht';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Studierendenantrag';
return false;
}
}
/**
* Laedt alle aktuellen Anträge eines Users
*
* @param integer $prestudent_id
* @param string $stsem
*
* @return boolean
*/
public function loadUserAntrag($prestudent_id, $stsem = null)
{
$qry = "SELECT * FROM campus.tbl_studierendenantrag WHERE typ IN ('Abmeldung','AbmeldungStgl','Unterbrechung') AND campus.get_status_studierendenantrag(studierendenantrag_id)='Genehmigt' AND prestudent_id=" . $this->db_add_param($prestudent_id, FHC_INTEGER);
if ($stsem)
{
$qry .= " AND studiensemester_kurzbz=" . $this->db_add_param($stsem, FHC_STRING);
}
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new studierendenantrag();
$obj->studierendenantrag_id = $row->studierendenantrag_id;
$obj->prestudent_id = $row->prestudent_id;
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$obj->datum = $row->datum;
$obj->typ = $row->typ;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->datum_wiedereinstieg = $row->datum_wiedereinstieg;
$obj->grund = $row->grund;
$obj->dms_id = $row->dms_id;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+12
View File
@@ -211,6 +211,18 @@
<!ENTITY menu-dokumente-diplsupplement.label "Diploma Supplement">
<!ENTITY menu-dokumente-diplsupplement.accesskey "S">
<!ENTITY menu-dokumente-antrag.key "N">
<!ENTITY menu-dokumente-antrag.label "Verwaltung des Studierendenstatus">
<!ENTITY menu-dokumente-antrag.accesskey "N">
<!ENTITY menu-dokumente-antrag-abmeldung.key "A">
<!ENTITY menu-dokumente-antrag-abmeldung.label "Abmeldung">
<!ENTITY menu-dokumente-antrag-abmeldung.accesskey "A">
<!ENTITY menu-dokumente-antrag-unterbrechung.key "U">
<!ENTITY menu-dokumente-antrag-unterbrechung.label "Unterbrecher">
<!ENTITY menu-dokumente-antrag-unterbrechung.accesskey "U">
<!ENTITY menu-dokumente-ausbildungsvertrag.key "A">
<!ENTITY menu-dokumente-ausbildungsvertrag.label "Ausbildungsvertrag Deutsch">
<!ENTITY menu-dokumente-ausbildungsvertrag.accesskey "A">
+7
View File
@@ -0,0 +1,7 @@
<?php
$this->phrasen['global/studiengang']='Studiengang';
$this->phrasen['studierendenantrag/antraege_header']='Änderungen des Studierendenstatus';
$this->phrasen['studierendenantrag/title_Abmeldung']='Abmeldung';
$this->phrasen['studierendenantrag/title_AbmeldungStgl']='Abmeldung';
$this->phrasen['studierendenantrag/title_Unterbrechung']='Unterbrechung';
?>
+1 -1
View File
@@ -17,7 +17,7 @@ $this->phrasen['testtool/basic']='Basic';
$this->phrasen['testtool/basisgebiete']='Basisgebiete';
$this->phrasen['testtool/semester']='Semester';
$this->phrasen['testtool/reihungstestNichtFreigeschalten']='Der zuteilte Reihungstest ist noch nicht freigeschaltet';
$this->phrasen['testtool/reihungstestKannNichtGeladenWerden']='Der Reihungstest dem Sie zugeteilt sind, kann nicht geladen werden';
$this->phrasen['testtool/reihungstestKannNichtGeladenWerden']='Der Reihungstest dem Sie zugeteilt sind, kann nicht geladen werden. Melden Sie sich bitte bei der Reihungstestaufsicht.';
$this->phrasen['testtool/geburtsdatumStimmtNichtUeberein']='Ihr Geburtsdatum stimmt nicht mit unseren Daten überein. Bitte wenden Sie sich an die Aufsichtsperson';
$this->phrasen['testtool/home']='Home';
$this->phrasen['testtool/teilnehmerIn']='TeilnehmerIn';
+1
View File
@@ -26,6 +26,7 @@ $this->phrasen['zeitsperre/vonDatumMonat']='Von-Datum Monat';
$this->phrasen['zeitsperre/bisDatumMonat']='Bis-Datum Monat';
$this->phrasen['zeitsperre/istGroesserAlsBisDatum']='ist größer als das Bis-Datum';
$this->phrasen['zeitsperre/vonDatum']='Von-Datum';
$this->phrasen['zeitsperre/bisDatumGroesserMax']='BisDatum liegt zu weit in der Zukunft, nicht zulässig!';
$this->phrasen['zeitsperre/resturlaubstage']='Resturlaubstage';
$this->phrasen['zeitsperre/aktuellerStand']='aktueller Stand';
+7
View File
@@ -0,0 +1,7 @@
<?php
$this->phrasen['global/studiengang']='Studiengang';
$this->phrasen['studierendenantrag/antraege_header']='Changes of student status';
$this->phrasen['studierendenantrag/title_Abmeldung']='De-registration';
$this->phrasen['studierendenantrag/title_AbmeldungStgl']='De-registration';
$this->phrasen['studierendenantrag/title_Unterbrechung']='Interruption';
?>

Some files were not shown because too many files have changed in this diff Show More