Compare commits

...

179 Commits

Author SHA1 Message Date
Harald Bamberger c989cfc563 Merge branch 'master' into feature-26336/Composer_Twig_Dependency_Security_Issue 2023-05-15 16:43:04 +02:00
Andreas Österreicher d3be5a7805 Merge branch 'feature-29051/DokumentvorlageAufSonderzeichenUeberpruefen' 2023-05-15 16:32:22 +02:00
Andreas Österreicher 06f62b19b4 Merge branch 'feature-27043/cis_lvinfo_cis_private_lehre_ects_preview_fehlt' 2023-05-15 16:06:55 +02:00
Andreas Österreicher 4844da317f Merge branch 'feature-25917/studienbeastigung_in_englischer_sprache' 2023-05-15 15:42:06 +02:00
Andreas Österreicher 00f555b141 Vorlage umbenannt 2023-05-15 15:34:32 +02:00
Andreas Österreicher d3ec6cad1d Merge branch 'master' into feature-25917/studienbeastigung_in_englischer_sprache 2023-05-15 15:13:47 +02:00
Andreas Österreicher a64fafb6ad Merge branch 'feature-28402/popper_in_bootstrap5' 2023-05-15 14:58:02 +02:00
Andreas Österreicher 9180244e0d Merge branch 'feature-27362/fas_filter_status_bestaetigt_reihungstestanmeldung' 2023-05-15 14:52:36 +02:00
Andreas Österreicher 5c79951f00 Merge branch 'feature-27107/Vilesci_Erfassung_Abwesenheiten_Reinigung' 2023-05-15 14:07:41 +02:00
Manfred 388a265db7 Neues Template "contentmittitel_filterwidget" in Suche ergänzt 2023-05-15 12:11:01 +02:00
Manfred c5e1674264 FAS-Studentensuche verbessert, um Personen ohne Vorname zu findenwerden 2023-05-11 18:14:24 +02:00
Manfred e96a3506a8 Coodle ics für Terminzusagen jetzt mit verschlüsseltem Token
Details zur Umfrage in den Kalenderdaten
2023-05-11 18:02:17 +02:00
ma0068 28baa49f6d Validierung Sonderzeichen Dokumentvorlagen 2023-05-10 08:18:05 +02:00
Andreas Österreicher e97d2d89d6 Added Config to Enable/Disable Signature Check in Abgabetool 2023-05-08 16:54:46 +02:00
Andreas Österreicher 2cb4ee9879 Merge branch 'feature-19172/Abgabetool_digitale_signatur_pruefen' 2023-05-08 15:50:59 +02:00
Andreas Österreicher 4c5241dd95 Bei fehlender Signatur in Enduploads wird ein Mail an den Studiengang
geschickt
2023-05-08 15:37:30 +02:00
Andreas Österreicher 1b57df7a52 Korrektur der Ermittlung des Sommersemesters wenn die Personalmeldung
für vergangene Semester erstellt wird.
2023-05-05 17:19:35 +02:00
Andreas Österreicher 451a21e84e Zugriffsberechtigungen korrigiert damit der Zugriff auf die eigenen
Zeitsperren nicht möglich ist ohne Berechtigung
2023-05-05 16:57:22 +02:00
Andreas Österreicher f7ec0c4ce0 Merge branch 'feature-27946/infocenter_zusaetzliche_spalte_fuer_kaution' 2023-05-05 08:53:17 +02:00
Andreas Österreicher 6c1a47955f Merge branch 'feature-27949/infocenter_evaluieren_des_zurueckstellens_mit_einem_grund_zb_fuer_drittstaaten' 2023-05-05 07:48:53 +02:00
Andreas Österreicher 3b1d913006 Merge branch 'TechnikumWienAcademy-ku-prod-hotfix-221118' 2023-05-04 09:46:02 +02:00
ma0068 58bae0953f dbupdate 2023-05-03 07:57:48 +02:00
Andreas Österreicher fdc3265e97 Merge branch 'ku-prod-hotfix-221118' of https://github.com/TechnikumWienAcademy/FHC-Core-Academy into TechnikumWienAcademy-ku-prod-hotfix-221118 2023-05-02 11:28:15 +02:00
ma0068 f2479c6f36 dbupdate für neue Zeitsperre 2023-04-28 08:05:30 +02:00
Andreas Österreicher 9a4c61d1c3 Fixed Abgabetool Lecturer View 2023-04-27 17:50:03 +02:00
Andreas Österreicher a528018761 Merge branch 'master' into feature-19172/Abgabetool_digitale_signatur_pruefen 2023-04-27 09:57:40 +02:00
ma0048 eefffa8a0e - kaution spalte
- fas abgeschickt am timestamp automatisch ausfuellen
- zgvuberpruefung zeigt abgewiesene nicht an
2023-04-27 09:08:26 +02:00
ma0068 5bdfd447ac Berechtigungspruefung mittels mitarbeiter/zeitsperre:begrenzt, Update Berechtigung für Anzeige in Vilesci-Menue, Einbau Redirect 2023-04-26 16:17:23 +02:00
Harald Bamberger 5519f6af57 Merge branch 'merged_Anrechnungen_26625_27388_28278_28557' 2023-04-24 14:49:29 +02:00
Harald Bamberger d16a670726 Merge branch 'sonstiges-28665/Tabulator-PersistenceID-einbauen' into merged_Anrechnungen_26625_27388_28278_28557 2023-04-24 14:42:21 +02:00
Harald Bamberger 54864da770 Merge branch 'bugfix-28557/Alte-Anrechnungen-lassen-sich-nicht-oeffnen' into merged_Anrechnungen_26625_27388_28278_28557 2023-04-24 12:12:05 +02:00
Harald Bamberger 64aa3c1250 Merge branch 'feature-28278/Anrechnung_Neue-Begruendung-bei-Ablehnung' into merged_Anrechnungen_26625_27388_28278_28557 2023-04-24 11:31:39 +02:00
Harald Bamberger a663fa9436 Merge branch 'feature-27388/Anrechnungen_Zeitfenster-pflegen' into merged_Anrechnungen_26625_27388_28278_28557 2023-04-24 11:30:32 +02:00
Harald Bamberger aa572e8a22 Merge branch 'feature-26625/Anrechnungen-BFI-Änderungen-und-Sonstige' into merged_Anrechnungen_26625_27388_28278_28557 2023-04-24 11:26:45 +02:00
Harald Bamberger 48798e8309 Merge branch 'master' into feature-27388/Anrechnungen_Zeitfenster-pflegen 2023-04-24 11:20:53 +02:00
Harald Bamberger 01ca8f6fb9 Merge branch 'master' into feature-26625/Anrechnungen-BFI-Änderungen-und-Sonstige 2023-04-24 11:18:40 +02:00
Harald Bamberger 80eb64e418 Merge branch 'master' into feature-28278/Anrechnung_Neue-Begruendung-bei-Ablehnung 2023-04-24 10:36:32 +02:00
Harald Bamberger ea79b92beb Merge branch 'master' into bugfix-28557/Alte-Anrechnungen-lassen-sich-nicht-oeffnen 2023-04-24 10:35:22 +02:00
Andreas Österreicher 42d6ea9bed Merge branch 'feature-28426/DiplomaSupplementMinimalVersionSS2023' 2023-04-24 08:31:15 +02:00
Manfred 48172216cc Zeilenzähler bei Statistik 2023-04-19 15:43:18 +02:00
Manfred 1fa215103c Insert- und Update-Daten bei Prestudentstatus im FAS 2023-04-19 15:42:51 +02:00
ma0068 88c8b13208 Anzeige Urlaubsverwaltung Vilesci ausschließlich für user mit Oes mit Leitungsfunktionen 2023-04-18 08:10:42 +02:00
Paolo 8eb423414a Merge branch 'master' into feature-19172/Abgabetool_digitale_signatur_pruefen 2023-04-17 10:21:09 +02:00
Andreas Österreicher 5d668791f9 Projektphase in der Zeiterfassung werden temporär 7 Monate in die Vergangenheit anzgezeigt um die Erfassung von alten Einträgen zu ermöglichen 2023-04-14 14:37:52 +02:00
Manfred 9c801d2723 Merge branch 'benutzerberechtigungGUIneu' 2023-04-11 13:24:56 +02:00
Manfred dce81d614e Merge branch 'master' into benutzerberechtigungGUIneu 2023-04-11 13:23:09 +02:00
Andreas Österreicher f325daab43 Merge branch 'bug-28917/AnwesenheitenLadezeiten' 2023-04-05 16:30:55 +02:00
Andreas Österreicher 326b53544a Übernahme Optimierung der Anwesenheitsabfrage von BFI 2023-04-05 16:28:19 +02:00
Andreas Österreicher 1a3d651759 Merge branch 'feature-27403/DVUH_Plausicheck_fuer_Personen_ohne_Konto_Buchungen' 2023-04-05 15:33:36 +02:00
Paolo e46d5a2433 application/views/templates/FHC-Footer.php now includes the bootstrap5 bundle JS 2023-04-05 15:22:49 +02:00
Andreas Österreicher 995b3ecb18 Merge branch 'feature-28539/Projektarbeitsbeurteilung_Anpassungen' 2023-04-05 15:10:54 +02:00
ma0068 43f613b0bc Änderung FHStG auf FHG 2023-04-05 13:32:32 +02:00
Manfred 5226da2652 Neues Template Content mit Titel und Filterwidget 2023-04-04 17:37:47 +02:00
Manfred 15049640c6 Input-styling 2023-04-04 17:37:01 +02:00
Manfred 0d5a7aee35 Aktive als Default 2023-04-04 17:36:36 +02:00
Manfred cfa71c852c Styleanpassung inaktive 2023-04-04 17:36:18 +02:00
ma0048 d93c19913b - spalte fuer kaution hinzugefuegt 2023-04-04 15:07:23 +02:00
Cris 9e4489093c Adapted & updated Tabulator default options (PersistenceID now changeable / Updates for options in Tabulator 4.9)
. Adapted
.. PersistenceID now changeable
.. check: only set default option if not set in tabulator

. Updates in version 4.9:
.. persistentLayout => persistence
.. getVisibility() => isVisible()
2023-03-29 10:29:06 +02:00
Cris 772e60c944 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-03-28 13:52:23 +02:00
Manfred 9527fd006f Rechte-Detailansicht 2023-03-27 17:08:22 +02:00
Cris bbd5962fd4 Deleted deprecated FBL-files 2023-03-27 11:19:34 +02:00
Cris 47fba23a5e Enhanced queries 2023-03-27 11:11:03 +02:00
Cris 75aff023d3 Corrected Mehrsprachigkeits-variable 2023-03-27 11:08:07 +02:00
Cris 8183144251 Corrected query to retrieve Leitung 2023-03-27 11:06:22 +02:00
Cris 1e00f2683e Corrected check 'isEmpfehlungsberechtigt'
Fachbereichsleiter are always empfehlungsberechtigt.
2023-03-27 11:05:03 +02:00
Cris d8fc724b10 Changed: Now passing config-variable to views
...instead of loading config into view.
2023-03-27 11:02:24 +02:00
Cris 8feec18ff7 Changed query to get Leitung of Lehrveranstaltung-Organisationseinheit (instead of 'Fachbereich') 2023-03-27 10:58:59 +02:00
Manfred cff3cab075 Merge branch 'master' into benutzerberechtigungGUIneu 2023-03-27 10:55:58 +02:00
Manfred 84b1f1c81a Multi-Endedatum setzen, Jquery Checkboxes adaptiert 2023-03-27 10:50:00 +02:00
Cris fbcf9d9778 Fixed: Now flagging correctly ALL Studiengänge with Schreibberechtigung
Before Schreibberechtigung was not set correctly true/false and displayed wrong in table.
Therefore fixed query.
2023-03-23 09:10:04 +01:00
Cris b7661b200e Removed unnecessary code 2023-03-22 15:45:06 +01:00
Cris 26ed20b1f5 Changed 'Schreibberechtigt'-column for STGL: Now showing ALL by default 2023-03-22 15:44:00 +01:00
Cris f94274ae1c Optimized Mehrsprachigkeit-query
Removed unnessecary type conversions
2023-03-22 14:08:46 +01:00
Cris a78b4507da Added missing phrasen 2023-03-22 09:42:04 +01:00
ma0048 651bd9e37a - nicht notwendige permission fuer funktion geloescht 2023-03-21 16:57:33 +01:00
ma0048 7336525021 - rueckstelldatum default zwei wochen 2023-03-21 16:56:35 +01:00
Cris 8035176e8b Fixed: Old Anrechnungen sometimes failed to open
...this is fixed now
2023-03-20 13:48:23 +01:00
Cris e4fca1b823 Merge branch 'master' into feature-28278/Anrechnung_Neue-Begruendung-bei-Ablehnung 2023-03-20 11:32:14 +01:00
Cris b59b00dbe4 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-03-20 11:31:33 +01:00
Cris 455d7e9aa2 Restored general Ablehnungstext in Lector & STGL Overview with explenation 2023-03-20 11:30:05 +01:00
Cris ca502488b7 Small text adaption of phrases 2023-03-20 11:20:37 +01:00
Cris 7f99b26e48 Added new phrases
.genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis
.empfehlungNegativKenntnisseNichtGleichwertigWeilHinweis
2023-03-20 11:05:57 +01:00
KarpAlex b827d8cbea Projektarbeit Abgabetool: Text is displayed for student instead of note if Projektarbeit Benotung is saved, but not abgeschickt (sent) 2023-03-17 17:33:18 +01:00
ma0048 598f6b4b09 - nur zukuenftige eintraege markieren 2023-03-16 17:16:31 +01:00
ma0048 2c4dc542b6 - parken und zustellen anzeige in eine spalte zsmgefasst 2023-03-16 17:09:00 +01:00
ma0048 c365896865 - log eintrag hinzugefuegt, beim setzen auf park... 2023-03-16 13:57:17 +01:00
KarpAlex 813cca99e2 improved plausicheck getOrgformStgUngleichOrgformPrestudent, so it checks orgform for current prestudent, is valid only for mischform, includes more prestudent statuses 2023-03-16 10:15:40 +01:00
Cris d606418072 Set focus on all Begruendungs-textareas
This makes it easier to directly add and complete Begruendungen.
Changed in STGL and Lecotors Overview and Detailview
2023-03-16 09:05:49 +01:00
Cris d69788e8d2 Added 'Andere Begründung' to STGL and Lector Detailview 2023-03-16 09:02:43 +01:00
Cris 4a009f3cef Set ZGV-column visible 2023-03-16 09:01:24 +01:00
Cris 792d1980fe Removed general Ablehnungstext in Lector & STGL Overview
Ablehnungstext was changed in former commit in order to make sure to add personal reason.
This is done in Detail sites.
Therefore the generally written Ablehnungstext is now removed from Overview sites.
2023-03-15 14:49:34 +01:00
ma0048 22cd1e075a - rueckstellgruende umbenannt
- sort in der tabelle hinzugefuegt
- anzeige angepasst
2023-03-14 10:19:07 +01:00
Cris 1da8881905 Added new Ablehnungstext and checks to Lector Detail View
. Changed Ablehnungstext
. Trim text and focus on textarea to fasten editing
. Check if forgot to add own Begründungstext
2023-03-09 16:11:37 +01:00
Cris 3e092bf375 Added new Ablehnungstext and checks to STGL Detail View
. Changed Ablehnungstext
. Trim text and focus on textarea to fasten editing
. Check if forgot to add own Begründungstext
2023-03-09 16:11:04 +01:00
Cris 8a7bcab2c6 Added new phrases to reject Empfehlung / Anrechnung 2023-03-09 16:05:27 +01:00
Cris 6644564738 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-03-09 09:31:53 +01:00
Cris 31b6ff9954 Removed unnecessary code and added phrase
Unnecessary since implementation of tabulator
2023-03-09 09:27:16 +01:00
Manfred 81f279964c Tooltip für Anmerkung 2023-03-08 15:03:31 +01:00
Manfred 9830025853 Merge branch 'master' into benutzerberechtigungGUIneu 2023-03-08 14:58:46 +01:00
Cris bae6675efe Removed config vars start and end of Application period
Removed
.'submit_application_start'
.'submit_application_ende'
2023-03-08 13:02:08 +01:00
Cris ef32586d86 Merge branch 'master' into feature-27388/Anrechnungen_Zeitfenster-pflegen 2023-03-08 13:00:03 +01:00
Cris 4a5e83fece Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-03-08 12:58:29 +01:00
Cris ba0e084311 Integrated into FH Complete Navigation 2023-03-07 18:40:54 +01:00
Cris a7f02548b0 Formatted date (of Anrechnungszeitraum Start and -Ende) 2023-03-07 17:57:39 +01:00
Cris 9882065b20 Removed tablesorter script
Not used.
2023-03-07 17:56:26 +01:00
Cris 058d01b6be Added Berechtigung lehre/anrechnungszeitfenster 2023-03-07 17:37:50 +01:00
Cris 68a6554d19 Removed loading config Anrechnung
Not needed anymore. Using tbl_anrechnungszeitfenster now.
2023-03-07 17:20:20 +01:00
Cris f8349a2a9b Changed Bootstrap 5 -> Bootstrap 3
Tablewidget is not working fine with Bootstrap 5 by now.
2023-03-07 17:18:21 +01:00
Cris c78e715c3e Added phrases 'bearbeitetVon', 'bearbeitetAm' 2023-03-07 14:07:14 +01:00
Cris ba31a0b5b0 Changed HTML table to Tablewidget 2023-03-07 14:06:00 +01:00
Cris 479feea8aa Changed way of checkíng Anrechnungszeitraum
Changed function isExpired to check Anrechnungszeitraeume of tbl_anrechnungszeitraum instead of using config entries.
2023-03-06 15:26:12 +01:00
Cris 043f09892a Deleted hidden testing field 2023-03-06 15:22:56 +01:00
Cris 9e15668c37 Created page-header class
page-header class was dropped since Bootstrap 4.
Therefore added to css style
2023-03-06 13:25:14 +01:00
Cris 9c85877d3d Added new phrases
.anrechnungenVerwalten
.anrechnungszeitraumFestlegen
.anrechnungszeitraumHinzufuegen
.anrechnungszeitraumSpeichern
.anrechnungszeitraumStart
.anrechnungszeitraumEnde
.errorStartdatumNichtInStudiensemester
.errorEndedatumNichtInStudiensemester
.errorStartdatumNachEndedatum
.frageSicherLoeschen
2023-03-06 13:24:03 +01:00
Cris f8fb59e806 Created js to handle Anrechnungszeitraum
Handle:
. modals to add / update Anrechnungszeitraume
. AJAX calls to add / update / delete
2023-03-06 13:21:37 +01:00
Cris d3f88597d9 Created Model Anrechnungszeitraum_model
Inserts / Updates / Deletes Anrechnungszeitraum
2023-03-06 13:19:15 +01:00
Cris 727d0b5876 Created GUI to admin Anrechnungszeitraume
Add / Update / Delete Anrechnungszeitraume
2023-03-06 13:18:23 +01:00
Cris 87a1b3647d Created Controller AdminAnrechnung to admin Anrechnungszeitraume
Add / Update / Delete Anrechnungszeitraume
2023-03-06 13:16:27 +01:00
Cris 35c68d98a1 Created lehre.tbl_anrechnungszeitraum 2023-03-06 13:15:16 +01:00
ma0048 3076753a19 - preview.php verlinkung entfernt
- lvincoming.php entfernt
2023-02-28 08:59:30 +01:00
ma0048 22fbe098ec - studienbestaetigung fuer abbrecher angepasst 2023-02-27 15:01:18 +01:00
ma0048 6d1d4cb74b - uebernahme von zurueckgestellten und geparkten personen hinzugefuegt 2023-02-27 11:32:55 +01:00
ma0048 62550423a3 - geparkt und onhold von der log tabelle in eine eigene tabelle verschoben
- nicht mehr benoetigte funktionen entfernt
- infocentertool angepasst
- bewerbungstool angepasst
- phrasen hinzugefuegt
2023-02-23 16:07:52 +01:00
Cris fe7cd05d57 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-02-22 10:10:10 +01:00
Cris 844f72d3d4 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-02-21 16:05:06 +01:00
KarpAlex 88dee31289 added Plausicheck CORE_STUDENTSTATUS_0015 for finding persons without Konto Buchungen (charges), Plausichecks GUI: generic plausicheck error text is displayed if not defined erroroccured, instead of success message 2023-02-20 11:40:55 +01:00
Manfred feb14a9f39 Anpassung Speicherbutton, Tooltips, Alertmessages 2023-02-13 11:27:54 +01:00
ma0048 44bfe52529 - fas filter hinzugefuegt 2023-01-26 11:35:22 +01:00
Manfred f0b1c14ea4 Contents unchanged 2023-01-17 15:57:01 +01:00
Cris 5872612d86 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2023-01-16 13:10:33 +01:00
Cris 8bd007b6ea Merged Fachbereichsleitungs-files into core files
. approveAnrechnungUebersichtData_fbl.php into approveAnrechnungUebersichtData.php
. reviewAnrechnungUebersichtData_fbl.php into reviewAnrechnungUebersichtData.php
2023-01-12 09:38:41 +01:00
Cris f2231fcba2 Disabled recommendation buttons if Lector is not empfehlungsberechtigt
If lector should see Anrechnung but not give a recommendation (because is not the LV-Leitung),
then recommendation buttons are disabled.
2023-01-11 18:13:14 +01:00
Cris 3f4efbcd16 Added function isEmpfehlungsberechtigt to AnrechnungLib
Checks if user is allowed to recommend Anrechnung.
2023-01-11 18:05:49 +01:00
Cris fb4f9981f0 Corrected: Anzeige aller LV-Leitungen, an die Empfehlung gesendet wurde
In der STGL Anrechnungs-Detailsicht wurde bisher nur die erste LV-Leitung
aus dem Ergebnisarray ausgelesen. Nun werden alle angezeigt.
2023-01-11 13:52:44 +01:00
Cris d1319a23ad Added: STGLs sehen jetzt nur Anrechnungen von STGs, für die sie eine Berechtigung haben
Es gibt eine neue Spalte 'schreibberechtigt' in der Anrechnungentabelle.
Defaultmäßig werden nur 'schreibberechtigte' Anrechnungen angezeigt, wo STGL
die Berechtigung auf die OE hat.
Über den Filter können aber auch alle angezeigt werden.
2023-01-11 13:47:23 +01:00
Cris 29f1760a7c Added: LektorInnen sehen jetzt nur Anrechnungen, für die sie eine Empfehlung abgeben dürfen
Es gibt eine neue Spalte 'empfehlungsberechtigt' in der Anrechnungentabelle.
Defaultmäßig werden nur 'empfehlungsberechtigt' Anrechnungen angezeigt, wo LektorIn:
- LV Leitung der LV ist ODER
- die LV keine LV-Leitung hat
Über den Filter können aber auch alle angezeigt werden.
2023-01-11 13:45:18 +01:00
Manfred db53de363c Merge branch 'master' into benutzerberechtigungGUIneu 2022-12-12 10:07:03 +01:00
Cris 8d221be050 Adapt view to use Fachbereichsleitung-DataView 2022-12-06 15:53:15 +01:00
Cris 40c7e1c9f0 Created new Approve Anrechnung Uebersicht for Fachbereichsleitung 2022-12-06 15:52:30 +01:00
Cris 32bdeec02e Added date check for Fachbereichsleitung in Tabulator query 2022-12-06 15:49:04 +01:00
Cris 91a2bf4f21 Merge branch 'bugfix/STGL-kann-alte-Anrechnungen-nicht-sehen' into feature-26625/Anrechnungen-BFI-Änderungen-und-Sonstige 2022-12-06 14:15:15 +01:00
Cris c3e3d8e9d7 Added Fachbereichsleitung permission check to read Anrechnung and download Document 2022-12-06 14:05:42 +01:00
Cris 8735318545 Enhanced code readability 2022-12-06 14:03:22 +01:00
Cris 21060b31dc Bugfixed error message when LV has no lectors and only one recommendation is requested 2022-12-06 14:01:24 +01:00
Cris e148d8c2f4 Added function to get Fachbereich as mail receivers 2022-12-06 13:54:56 +01:00
Cris d3a1ed222c Adapted to send mails only if config['mail'] is TRUE 2022-12-06 13:43:11 +01:00
Cris 0197e5b175 Adapted STGL Views to display Fachbereichsleitung (as 'Empfaenger') after recommendation 2022-12-06 13:33:28 +01:00
Cris fe2601b29a Adapt view to use Fachbereichsleitungs-DataView 2022-12-06 13:25:25 +01:00
Cris 4a87fb49e9 Created new Review Anrechnung Uebersicht Tabulator for Fachbereichsleitung 2022-12-06 13:22:48 +01:00
Cris 88246c443a Added function getFachbereichleitung to AnrechnungLib
...plus adaptation to getEmpfehlungData to use this function.
2022-12-06 10:53:21 +01:00
Cris 10ed780b6c Added method getFachbereichsleitungByLv to Lehrveranstaltung_model
Gets all fachbereichsleiter of a Lehrveranstaltung
2022-12-06 10:50:08 +01:00
Cris cee15a68ba Added config['fbl'] and config['send_mail'] to anrechnungen
. config['fbl'] enables Fachbereichsleitung instead of LektorInnen
. config['send_mail'] enables sending Info Mails
2022-12-06 10:48:52 +01:00
Paolo e3a63eb491 - Dropped the Vorlage editor from Vilesci
- Removed brutusin/json-forms and kingsquare/json-schema-form
- Updated composer.lock
- Removed not anymore used files and widgets
2022-11-30 17:27:28 +01:00
Cris ca217f1869 Fixed: Downloadlink erzeugt nach Page Reload keine Fehlermeldung mehr 2022-11-29 18:10:39 +01:00
Cris 7cdb7688c4 Fixed: Vergangene Anrechnungen können jetzt eingesehen werden
Manche vergangene Anrechnungen konnten nicht eingesehen werden, weil
die Zuordnung der Studenten zu den Lehrveranstaltungen aufgelöst bzw. geändert werden.
Gefixt, indem nun bei einer bestehenden Anrechnung die bei der Anrechnung hinterlegten Lehrveranstaltung
herangezogen wird.
2022-11-28 17:27:39 +01:00
Cris 72c0f97218 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-11-28 10:28:01 +01:00
Nikolaus Krondraf 1ec742b8fe typo 2022-11-18 10:05:38 +01:00
Nikolaus Krondraf 01107e361f Studierende können sich frühestens 2 Monate vor Prüfung anmelden 2022-11-18 10:01:39 +01:00
Cris deeb1cdb5e Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-11-17 10:42:13 +01:00
ma0048 180e24b916 - studienbestaetigung in englischer sprache hinzugefuegt
- odt files angepasst im core
2022-11-04 10:37:38 +01:00
Cris 7b5e5562b5 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-11-02 10:56:55 +01:00
Manfred 73dd6e6dc1 Autocomplete in Berechtigungrolle 2022-10-24 14:27:54 +02:00
Manfred 5e9b5b2ce5 Direktlink auf Rolle 2022-10-24 14:27:34 +02:00
Manfred aadd6b0d92 Anzahl Rechte zählen 2022-10-18 16:48:27 +02:00
Cris 82cbc63096 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-10-11 09:51:45 +02:00
Manfred 5f8a530857 Merge branch 'master' into benutzerberechtigungGUIneu 2022-10-05 17:51:27 +02:00
Manfred d82426cd91 Autocomplete für Kostenstelle 2022-10-05 17:42:45 +02:00
Manfred b293673ee9 Updateamum nur bei geänderten Datensätzen
Kostenstelle Autocomplete
Counter für Anzahl Zeilen
Anmerkungsfeld verbreitert
2022-10-05 17:42:24 +02:00
Manfred a27ad33e0e Merge branch 'master' into benutzerberechtigungGUIneu 2022-09-21 11:09:27 +02:00
Nikolaus Krondraf ec07c4154d Problem behoben wodurch die Anrechnungen im FAS nicht angezeigt werden wenn diese ohne Anrechnungstool im FAS erfasst werden 2022-09-20 14:31:51 +02:00
Manfred 450b0b6433 Initial commit 2022-09-14 15:55:07 +02:00
Paolo 8880e07bf2 include/dokument_export.class.php now checks the new signature server response structure 2022-05-24 12:22:30 +02:00
Paolo 7f2025c414 Added signature config entries to config/cis.config-default.inc.php 2022-05-24 11:27:24 +02:00
Paolo c354c69e21 Fixed Zwischenabgabe file upload 2022-05-24 11:23:48 +02:00
Paolo 94a1534c14 - Warning Wrap on small Screens in Leturer side
- Perform Signatur Check only on Files from Type Endupload
2022-05-23 14:42:59 +02:00
Paolo 2d23836396 Translated german phrase 2022-05-16 16:23:15 +02:00
Paolo 22bba685ff Added new style to the warning 2022-05-16 16:15:48 +02:00
Paolo d4042228d9 - Better code and comments in application/libraries/SignatureLib->list
- cis/private/lehre/abgabe_lektor_details.php and cis/private/lehre/abgabe_student_details.php check if the uploaded document contains digital signares and display a phrase
- Added new phrase to locale/de-AT/abgabetool.php and locale/en-US/abgabetool.php
2022-05-13 20:11:31 +02:00
Paolo 2a8b61c07f - Added new library application/libraries/SignatureLib.php
- Changed configs for the signature server in config/vilesci.config-default.inc.php
- Changed include/dokument_export.class.php to make use of the new configs
2022-05-11 18:29:10 +02:00
113 changed files with 6622 additions and 3007 deletions
+6 -5
View File
@@ -6,10 +6,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
// Deadline for Application given as Time-Interval after Semesterstart.
$config['interval_blocking_application'] = 'P1M';
// Application submission period given by start- and enddate.
$config['submit_application_start'] = '05.09.2022';
$config['submit_application_end'] = '22.09.2022';
// Lehrveranstaltungen with these grades will be blocked for application
$config['grades_blocking_application'] = array(
5, // nicht genügend
@@ -19,4 +15,9 @@ $config['grades_blocking_application'] = array(
14, // nicht bestanden,
15, // nicht teilgenommen
18 // unentschuldigt
);
);
//Enables Fachbereichsleiter instead of LV Leiter
$config['fbl'] = FALSE;
//Enables Info Mails
$config['send_mail'] = TRUE;
+17 -1
View File
@@ -164,7 +164,14 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 20,
'requiredPermissions' => 'system/developer:r'
)
),
'anrechnungen' => array(
'link' => site_url('lehre/anrechnung/AdminAnrechnung'),
'description' => 'Anrechnungen',
'expand' => true,
'sort' => 30,
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
)
)
)
)
@@ -184,6 +191,15 @@ $config['navigation_menu']['Vilesci/index'] = array(
)
);
$config['navigation_menu']['Vilesci/index'] = array(
'dashboard' => array(
'link' => '#',
'description' => 'Dashboard',
'icon' => 'dashboard',
'sort' => 1
)
);
$config['navigation_menu']['organisation/Reihungstest/index'] = array(
'reihungstestverwalung' => array(
'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
@@ -44,6 +44,7 @@ class IssueResolver extends IssueResolver_Controller
'CORE_STUDENTSTATUS_0012' => 'CORE_STUDENTSTATUS_0012',
'CORE_STUDENTSTATUS_0013' => 'CORE_STUDENTSTATUS_0013',
'CORE_STUDENTSTATUS_0014' => 'CORE_STUDENTSTATUS_0014',
'CORE_STUDENTSTATUS_0015' => 'CORE_STUDENTSTATUS_0015',
'CORE_PERSON_0001' => 'CORE_PERSON_0001',
'CORE_PERSON_0002' => 'CORE_PERSON_0002',
'CORE_PERSON_0003' => 'CORE_PERSON_0003',
@@ -0,0 +1,187 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AdminAnrechnung extends Auth_Controller
{
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnungszeitfenster:rw',
'save' => 'lehre/anrechnungszeitfenster:rw',
'edit' => 'lehre/anrechnungszeitfenster:rw',
'delete' => 'lehre/anrechnungszeitfenster:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'lehre',
'anrechnung',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
// Set nearest Studiensemester as default
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = hasData($result) ? getData($result)[0]->studiensemester_kurzbz : '';
// Get existing Anrechnungszeitraeume
$this->AnrechnungszeitraumModel->addOrder('anrechnungszeitraum_id', 'DESC');
$result = $this->AnrechnungszeitraumModel->load();
$anrechnungszeitraum_arr = hasData($result) ? getData($result) : array();
$viewData = array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungszeitraum_arr' => $anrechnungszeitraum_arr
);
$this->load->view('lehre/anrechnung/adminAnrechnung.php', $viewData);
}
/**
* Save new Anrechnungszeitraum.
*/
public function save()
{
$this->_validate($this->input->post());
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$anrechnungstart = $this->input->post('anrechnungstart');
$anrechnungende = $this->input->post('anrechnungende');
$result = $this->AnrechnungszeitraumModel->insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Edit Anrechnungszeitraum.
*/
public function edit()
{
$this->_validate($this->input->post());
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$anrechnungstart = $this->input->post('anrechnungstart');
$anrechnungende = $this->input->post('anrechnungende');
$result = $this->AnrechnungszeitraumModel->updateAzr(
$anrechnungszeitraum_id,
$studiensemester_kurzbz,
$anrechnungstart,
$anrechnungende
);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Delete Anrechnungszeitraum.
*/
public function delete()
{
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
$result = $this->AnrechnungszeitraumModel->deleteAzr($anrechnungszeitraum_id);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Validates post parameters.
*
* @param $post
*/
private function _validate($post)
{
$studiensemester_kurzbz = $post['studiensemester_kurzbz'];
$anrechnungstart = $post['anrechnungstart'];
$anrechnungende = $post['anrechnungende'];
if (isEmptyString($studiensemester_kurzbz)
|| isEmptyString($anrechnungstart)
|| isEmptyString($anrechnungende))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
if ($anrechnungstart > $anrechnungende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNachEndedatum'));
}
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$studiensemester = getData($result)[0];
if ($anrechnungstart < $studiensemester->start || $anrechnungstart > $studiensemester->ende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNichtInStudiensemester'));
}
if ($anrechnungende < $studiensemester->start || $anrechnungende > $studiensemester->ende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorEndedatumNichtInStudiensemester'));
}
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
}
@@ -33,6 +33,9 @@ class approveAnrechnungDetail extends Auth_Controller
)
);
//Load configs
$this->load->config('anrechnung');
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -90,7 +93,8 @@ class approveAnrechnungDetail extends Auth_Controller
$antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
$anrechnungData->lehrveranstaltung_id,
$anrechnungData->anrechnung_id
);
// Get Empfehlung data
@@ -209,48 +213,46 @@ class approveAnrechnungDetail extends Auth_Controller
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
$anrechnung_id = $this->input->post('anrechnung_id');
if(isEmptyArray($data))
if(isEmptyString($anrechnung_id))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
$retval = array();
$counter = 0;
// Check if Anrechnungs-LV has lector
if (!$this->anrechnunglib->LVhasLector($anrechnung_id))
{
$this->terminateWithJsonError('LV has no lector');
}
foreach ($data as $item)
{
// Check if Anrechnungs-LV has lector
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id']))
{
// Count up LV with no lector
$counter++;
// Get Fachbereichsleitung or LV Leitung.
if($this->config->item('fbl') === TRUE)
{
$result = $this->anrechnunglib->getLeitungOfLvOe($anrechnung_id);
}
else
{
// If LV Leitung is not present, gets all LV lectors.
$result = $this->anrechnunglib->getLectors($anrechnung_id);
}
// Break, if LV has no lector
break;
}
$empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
// Get full name of LV Leitung.
// If LV Leitung is not present, get full name of LV lectors.
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
// Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
{
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
'empfehlung_anrechnung' => null,
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
);
}
}
// Request Recommendation
if($this->anrechnunglib->requestRecommendation($anrechnung_id))
{
$retval[]= array(
'anrechnung_id' => $anrechnung_id,
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
'empfehlung_anrechnung' => null,
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
);
}
/**
* Send mails to lectors
@@ -259,21 +261,24 @@ class approveAnrechnungDetail extends Auth_Controller
* */
if (!isEmptyArray($retval))
{
self::_sendSanchoMailToLectors($retval);
if ($this->config->item('send_mail') === TRUE)
{
$this->_sendSanchoMailToLectors($anrechnung_id);
}
// Output json to ajax
return $this->outputJsonSuccess($retval);
}
// Output json to ajax
if (isEmptyArray($retval) && $counter > 0)
if (isEmptyArray($retval))
{
return $this->outputJsonError(
$this->terminateWithJsonError(
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
);
}
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
$this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
/**
@@ -467,39 +472,33 @@ class approveAnrechnungDetail extends Auth_Controller
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
* @param $anrechnung_id
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
private function _sendSanchoMailToLectors($anrechnung_id)
{
// Get Lehrveranstaltungen
$anrechnung_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
$anrechnung_arr[]= array(
'lehrveranstaltung_id' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->lehrveranstaltung_id,
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
);
}
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
$lehrveranstaltung_id = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->lehrveranstaltung_id;
$studiensemester_kurzbz = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->studiensemester_kurzbz;
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Get mail receivers.
* If config is default (lectors): prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/
$lector_arr = $this->_getLectors($anrechnung_arr);
if ($this->config->item('fbl') === TRUE)
{
$receiver_arr = $this->_getLeitungOfLvOe($lehrveranstaltung_id);
}
else
{
$receiver_arr = $this->_getLectors($studiensemester_kurzbz, $lehrveranstaltung_id);
}
// Send mail to lectors
foreach ($lector_arr as $lector)
// Send mail
foreach ($receiver_arr as $receiver)
{
$to = $lector->uid;
$vorname = $lector->vorname;
$to = $receiver->uid. '@'. DOMAIN;;
$vorname = $receiver->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
@@ -537,35 +536,30 @@ class approveAnrechnungDetail extends Auth_Controller
* @param $anrechnung_arr
* @return array
*/
private function _getLectors($anrechnung_arr)
private function _getLectors($studiensemester_kurzbz, $lehrveranstaltung_id)
{
$lector_arr = array();
// Get lectors
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
$result = $this->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id);
if (!$result = getData($result))
{
show_error('Failed retrieving lectors of Lehrveranstaltung');
}
if (!$result = getData($result))
{
show_error('Failed retrieving lectors of Lehrveranstaltung');
}
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one
if ($key !== false)
{
$lector_arr[]= $result[$key];
}
// ...otherwise keep all lectors
else
{
$lector_arr = array_merge($lector_arr, $result);
}
}
// If lv has LV-Leitung, keep only the one
if ($key !== false)
{
$lector_arr[]= $result[$key];
}
// ...otherwise keep all lectors
else
{
$lector_arr = array_merge($lector_arr, $result);
}
/**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
@@ -584,6 +578,14 @@ class approveAnrechnungDetail extends Auth_Controller
}
// Get Leitungen of Lehrveranstaltungs-Organisationseinheit
private function _getLeitungOfLvOe($lehrveranstaltung_id)
{
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
return hasData($result) ? getData($result) : show_error('Failed retrieving Leitung of Lehrveranstaltungs-Organisationseinheit');
}
private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id)
{
$this->load->model('person/Notiz_model', 'NotizModel');
@@ -606,8 +608,5 @@ class approveAnrechnungDetail extends Auth_Controller
trim($empfehlungstext),
$this->_uid
);
}
}
@@ -28,6 +28,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
)
);
// Load configs
$this->load->config('anrechnung');
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -78,6 +81,19 @@ class approveAnrechnungUebersicht extends Auth_Controller
show_error(getError($studiengang_kz_arr));
}
// Get oes the user is entitled for
$oe_kurzbz_arr_schreibberechtigt = array();
if ($oe_arr = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
foreach($oe_arr as $oe)
{
$berechtigt = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $oe);
if ($berechtigt) $oe_kurzbz_arr_schreibberechtigt[]= $oe;
}
}
// Check if permission is readonly
$hasReadOnlyAccess =
$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's')
&& !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid');
@@ -87,9 +103,11 @@ class approveAnrechnungUebersicht extends Auth_Controller
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr,
'studiengaenge_entitled' => $studiengang_kz_arr, // alle STG mit Lese- und Schreibberechtigung
'oes_schreibberechtigt' => $oe_kurzbz_arr_schreibberechtigt, // alle STG nur mit Schreibberechtigung
'hasReadOnlyAccess' => $hasReadOnlyAccess,
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess,
'configFachbereichsleitung' => $this->config->item('fbl')
);
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
@@ -207,14 +225,20 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
{
// Get full name of LV Leitung.
// If LV Leitung is not present, get full name of LV lectors.
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
// Get full name of Fachbereichsleitung or LV Leitung.
if($this->config->item('fbl') === TRUE)
{
$result = $this->anrechnunglib->getLeitungOfLvOe($item['anrechnung_id']);
}
else
{
// If LV Leitung is not present, get full name of LV lectors.
$result = $this->anrechnunglib->getLectors($item['anrechnung_id']);
}
$retval[]= array(
$empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
@@ -226,19 +250,27 @@ class approveAnrechnungUebersicht extends Auth_Controller
}
/**
* Send mails to lectors
* Send mails
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!isEmptyArray($retval))
{
self::_sendSanchoMailToLectors($retval);
if ($this->config->item('send_mail') === TRUE)
{
$this->_sendSanchoMail($retval);
}
}
// Output json to ajax
if (isEmptyArray($retval) && $counter == 0)
if (isEmptyArray($retval))
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
if ($counter > 0)
{
$this->terminateWithJsonError('Bei '. $counter.' LV sind keine LektorInnen zugeteilt.');
}
$this->terminateWithJsonError('Es wurden keine Empfehlungen angefordert');
}
return $this->outputJsonSuccess($retval);
@@ -316,7 +348,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
* @param $mail_params
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
private function _sendSanchoMail($mail_params)
{
// Get Lehrveranstaltungen
$anrechnung_arr = array();
@@ -332,18 +364,25 @@ class approveAnrechnungUebersicht extends Auth_Controller
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/
$lector_arr = $this->_getLectors($anrechnung_arr);
/**
* Get mail receivers.
* If retrieving lectors: prio for LV-Leitung, if not present to all lectors of LV.
* This function will receive a unique array to avoid sending more mails to one and the same user.
**/
if($this->config->item('fbl') === TRUE)
{
$receiver_arr = $this->_getLeitungOfLvOe($anrechnung_arr);
}
else
{
$receiver_arr = $this->_getLectors($anrechnung_arr);
}
// Send mail to lectors
foreach ($lector_arr as $lector)
foreach ($receiver_arr as $receiver)
{
$to = $lector->uid;
$vorname = $lector->vorname;
$to = $receiver->uid. '@'. DOMAIN;
$vorname = $receiver->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
@@ -427,4 +466,34 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $lector_arr;
}
/**
* Get Leitungen of Lehrveranstaltungs-Organisationseinheit with unique uids.
*
* @param $anrechnung_arr
* @return array
*/
private function _getLeitungOfLvOe($anrechnung_arr)
{
$oeLeitung_arr = array();
// Get Leitungen
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($anrechnung['lehrveranstaltung_id']);
if (!hasData($result))
{
show_error('No Leitung found');
}
$oeLeitung_arr = array_merge($oeLeitung_arr, getData($result));
}
// Make array unique
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
return $oeLeitung_arr;
}
}
@@ -80,11 +80,7 @@ class requestAnrechnung extends Auth_Controller
$prestudent_id = getData($result)[0]->prestudent_id;
// Check if application deadline is expired
$is_expired = self::_isExpired(
$this->config->item('submit_application_start'),
$this->config->item('submit_application_end'),
$studiensemester_kurzbz
);
$is_expired = $this->_isExpired($studiensemester_kurzbz);
// Check if Lehrveranstaltung was already graded with application blocking grades
$is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id);
@@ -93,7 +89,7 @@ class requestAnrechnung extends Auth_Controller
$anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
// Get Antrag data
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id);
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id, $anrechnungData->anrechnung_id);
$viewData = array(
'antragData' => $antragData,
@@ -234,32 +230,30 @@ class requestAnrechnung extends Auth_Controller
* @return bool True if deadline is expired
* @throws Exception
*/
private function _isExpired($start, $ende, $studiensemester_kurzbz)
private function _isExpired($studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$today = new DateTime('today midnight');
// If start is not given, set to Semesterstart.
if (!isset($start) || isEmptyString($start))
{
$this->StudiensemesterModel->addSelect('start');
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$start = getData($result)[0]->start;
}
// Load all Anrechnungszeitfenster for this Studiensemester
$this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
$result = $this->AnrechnungszeitraumModel->loadWhere(array('studiensemester_kurzbz' => $studiensemester_kurzbz));
// If ende is not given, set to Semesterende.
if (!isset($ende) || isEmptyString($ende))
{
$this->StudiensemesterModel->addSelect('ende');
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$ende = getData($result)[0]->ende;
}
if (hasData($result))
{
// Loop through Anrechnungszeitfenster
foreach (getData($result) as $azrObj)
{
$start = new DateTime($azrObj->anrechnungstart);
$ende = new DateTime($azrObj->anrechnungende);
$today = new DateTime('today midnight');
$start = new DateTime($start);
$ende = new DateTime($ende);
// Return false if today is at least within one Anrechnungszeitraum
if (($today >= $start && $today <= $ende)) return false;
// True if expired
return ($today < $start || $today > $ende);
}
}
// Return true if today is in none Anrechnungszeitraum
return true;
}
/**
@@ -28,6 +28,9 @@ class reviewAnrechnungDetail extends Auth_Controller
)
);
// Load configs
$this->load->config('anrechnung');
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -84,16 +87,21 @@ class reviewAnrechnungDetail extends Auth_Controller
$antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
$anrechnungData->lehrveranstaltung_id,
$anrechnungData->anrechnung_id
);
// Get Empfehlung data
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id);
// False if LV-Leitung is present and user is not LV-Leitung. Otherwise always true.
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($anrechnung_id);
$viewData = array(
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData
'empfehlungData' => $empfehlungData,
'isEmpfehlungsberechtigt' => $isEmpfehlungsberechtigt
);
$this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData);
@@ -140,10 +148,13 @@ class reviewAnrechnungDetail extends Auth_Controller
* Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */
if (!$this->_sendSanchoMails($json, true))
{
return $this->outputJsonError('Failed sending emails');
}
if ($this->config->item('send_mail') === TRUE)
{
if (!$this->_sendSanchoMails($json, true))
{
return $this->outputJsonError('Failed sending emails');
}
}
return $this->outputJsonSuccess($json);
}
@@ -191,10 +202,13 @@ class reviewAnrechnungDetail extends Auth_Controller
if (isset($json) && !isEmptyArray($json))
{
// Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false))
{
return $this->outputJsonError('Failed sending emails');
}
if ($this->config->item('send_mail') === TRUE)
{
if (!$this->_sendSanchoMails($json, false))
{
return $this->outputJsonError('Failed sending emails');
}
}
return $this->outputJsonSuccess($json);
}
@@ -253,8 +267,14 @@ class reviewAnrechnungDetail extends Auth_Controller
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($this->config->item('fbl') === TRUE)
{
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result))
{
@@ -282,14 +302,20 @@ class reviewAnrechnungDetail extends Auth_Controller
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($this->config->item('fbl') === TRUE)
{
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
$entitled_uid_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
if (in_array($this->_uid, $entitled_uid_arr))
{
return;
}
@@ -26,6 +26,9 @@ class reviewAnrechnungUebersicht extends Auth_Controller
)
);
// Load configs
$this->load->config('anrechnung');
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -72,7 +75,8 @@ class reviewAnrechnungUebersicht extends Auth_Controller
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz
'studiensemester_selected' => $studiensemester_kurzbz,
'configFachbereichsleitung' => $this->config->item('fbl')
);
$this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData);
@@ -111,16 +115,19 @@ class reviewAnrechnungUebersicht extends Auth_Controller
* Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */
if (!$this->_sendSanchoMails($json, true))
{
show_error('Failed sending emails');
}
if ($this->config->item('send_mail') === TRUE)
{
if (!$this->_sendSanchoMails($json, true))
{
show_error('Failed sending emails');
}
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
$this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -154,10 +161,13 @@ class reviewAnrechnungUebersicht extends Auth_Controller
if (isset($json) && !isEmptyArray($json))
{
// Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false))
{
show_error('Failed sending emails');
}
if ($this->config->item('send_mail') === TRUE)
{
if (!$this->_sendSanchoMails($json, false))
{
show_error('Failed sending emails');
}
}
return $this->outputJsonSuccess($json);
}
@@ -217,14 +227,20 @@ class reviewAnrechnungUebersicht extends Auth_Controller
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if ($this->config->item('fbl') === TRUE)
{
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
$entitled_uid_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
if (in_array($this->_uid, $entitled_uid_arr))
{
return;
}
@@ -142,12 +142,6 @@ class InfoCenter extends Auth_Controller
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'park' => 'infocenter:rw',
'unpark' => 'infocenter:rw',
'setOnHold' => 'infocenter:rw',
'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw',
@@ -164,6 +158,7 @@ class InfoCenter extends Auth_Controller
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('system/Message_model', 'MessageModel');
@@ -606,7 +601,7 @@ class InfoCenter extends Auth_Controller
}
/**
* Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang
* Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang
*/
private function sendZgvMail($mail, $typ, $person){
$data = array(
@@ -697,7 +692,7 @@ class InfoCenter extends Auth_Controller
/**
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
* Falls es erfolgreich war, sendet er die Mail raus
* Falls es erfolgreich war, wird eine Mail rausgeschickt
*/
public function zgvRueckfragen()
{
@@ -751,7 +746,8 @@ class InfoCenter extends Auth_Controller
$this->sendZgvMail($mail, $typ, $person);
elseif (isError($insert))
$this->terminateWithJsonError('Fehler beim Speichern');
}else
}
else
{
$insert = $this->ZGVPruefungModel->insert(
array(
@@ -781,7 +777,7 @@ class InfoCenter extends Auth_Controller
}
$hold = false;
if ($this->personloglib->getOnHoldDate($person_id) !== null)
if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv')))
$hold = true;
$this->outputJsonSuccess(
@@ -1162,107 +1158,7 @@ class InfoCenter extends Auth_Controller
->set_output($aktecontent->retval)
->_display();
}
/**
* Gets the date until which a person is parked
* @param $person_id
*/
public function getPostponeDate($person_id)
{
$result = array(
'type' => null,
'date' => null
);
$parkedDate = $this->personloglib->getParkedDate($person_id);
if (isset($parkedDate))
{
$result['type'] = 'parked';
$result['date'] = $parkedDate;
}
else
{
$onholdDate = $this->personloglib->getOnHoldDate($person_id);
if (isset($onholdDate))
{
$result['type'] = 'onhold';
$result['date'] = $onholdDate;
}
}
$this->outputJsonSuccess($result);
}
/**
* Initializes parking of a person, i.e. a person is not expected to do any actions while parked
*/
public function park()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('parkdate');
$result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removes parking of a person
*/
public function unPark()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->unPark($person_id);
$this->outputJson($result);
}
/**
* Sets a person on hold ("zurückstellen")
*/
public function setOnHold()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('onholddate');
$result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removed on hold status of a person
*/
public function removeOnHold()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->removeOnHold($person_id);
$this->outputJson($result);
}
/**
* Gets the End date of the current Studienjahr
*/
public function getStudienjahrEnd()
{
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
$result = $this->StudienjahrModel->getCurrStudienjahr();
$json = null;
if (hasData($result))
{
$json = $result->retval[0]->ende;
}
$this->outputJsonSuccess(array($json));
}
/**
* Wrapper for setNavigationMenu, returns JSON message
@@ -1484,7 +1380,6 @@ class InfoCenter extends Auth_Controller
if($nachreichungAm < $today)
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
if (hasData($akte)) {
@@ -0,0 +1,135 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Rueckstellung extends Auth_Controller
{
private $_ci; // Code igniter instance
private $_uid;
public function __construct()
{
parent::__construct(
array(
'get' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'set' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw')
)
);
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->library('PersonLogLib');
$this->_setAuthUID(); // sets property uid
$this->_ci =& get_instance(); // get code igniter instance
}
public function get($person_id)
{
$result = null;
$rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id);
if (isError($rueckstellung))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
if (hasData($rueckstellung))
{
$rueckstellung = getData($rueckstellung)[0];
$fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon));
$result = array(
'von' => $fullName,
'bezeichnung' => $rueckstellung->bezeichnung,
'bis' => $rueckstellung->datum_bis,
'status_kurzbz' => $rueckstellung->status_kurzbz
);
if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d'))
{
$this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked'));
$result = null;
}
}
$this->outputJsonSuccess($result);
}
public function set()
{
$person_id = $this->input->post('person_id');
$datum_bis = $this->input->post('datum_bis');
$status_kurzbz = $this->input->post('status_kurzbz');
$result = $this->_ci->RueckstellungModel->insert(
array('person_id' => $person_id,
'status_kurzbz' => $status_kurzbz,
'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'),
'insertvon' => $this->_uid
)
);
if (isError($result))
$this->terminateWithJsonError(getError($result));
$this->_log($person_id, $status_kurzbz);
$this->outputJson($result);
}
public function delete()
{
$person_id = $this->input->post('person_id');
$status = $this->input->post('status');
$result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern'));
$this->outputJson($result);
}
public function getStatus($aktiv = true)
{
$this->_ci->RueckstellungStatusModel->addOrder('sort');
$result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
$this->outputJsonSuccess(getData($result));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
private function _log($person_id, $status_kurzbz)
{
$message = "Person $person_id set to $status_kurzbz";
$this->_ci->personloglib->log(
$person_id,
'Action',
array(
'name' => 'Person status set',
'message' => $message,
'success' => true
),
'bewerbung',
'infocenter',
null,
$this->_uid
);
}
}
@@ -4,6 +4,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class Plausichecks extends Auth_Controller
{
const GENERIC_ISSUE_OCCURED_TEXT = 'Issue aufgetreten';
public function __construct()
{
parent::__construct(
@@ -78,20 +80,27 @@ class Plausichecks extends Auth_Controller
// optionally replace fehler parameters in text, output the fehlertext
if (hasData($fehlerRes))
{
// use issue fehler text from database if present
$fehlerText = getData($fehlerRes)[0]->fehlertext;
if (!isEmptyArray($fehlertext_params))
{
// replace placeholder with params, if present
if (count($fehlertext_params) != substr_count($fehlerText, '%s'))
$this->terminateWithJsonError('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehler_kurzbz);
$fehlerText = vsprintf($fehlerText, $fehlertext_params);
}
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
$issueTexts[$fehler_kurzbz][] = $fehlerText;
}
else // if no issue text found, use generic text
{
$fehlerText = self::GENERIC_ISSUE_OCCURED_TEXT;
}
// add generic parameters to issue text
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
$issueTexts[$fehler_kurzbz][] = $fehlerText;
}
}
}
+91 -17
View File
@@ -37,19 +37,30 @@ class AnrechnungLib
* @param $lv_id
* @return StdClass
*/
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id)
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id, $anrechnung_id = null)
{
$antrag_data = new StdClass();
// Get students UID.
$uid = $this->ci->StudentModel->getUID($prestudent_id);
// Get lehrveranstaltung data. Break, if course is not assigned to student.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
// If Anrechnung exists
if (is_numeric($anrechnung_id))
{
show_error('You are not assigned to this course yet.');
// Just load LV by lv_id
$result = $this->ci->LehrveranstaltungModel->load($lv_id);
$lv = getData($result)[0];
}
// If Anrechnung not exists
else
{
// Load LV, but check if student is assigned to that LV. Break, if not.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
{
show_error('You are not assigned to this course yet.');
}
}
// Get the students personal data
if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0])
{
@@ -274,14 +285,21 @@ class AnrechnungLib
if (hasData($result))
{
$empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y');
// Get lectors who received request for recommendation
$lector_arr = self::getLectors($anrechnung_id);
if (!isEmptyArray($lector_arr))
{
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($lector_arr, 'fullname'));
}
// Get users who received request for recommendation
if($this->ci->config->item('fbl') === TRUE)
{
$res = $this->getLeitungOfLvOe($anrechnung_id);
}
else
{
$res = $this->getLectors($anrechnung_id);
}
if (!isEmptyArray($res))
{
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($res, 'fullname'));
}
}
if (is_null($anrechnung->empfehlung_anrechnung))
@@ -741,6 +759,25 @@ class AnrechnungLib
// Continue, if LV has no lector (there is no one to ask for recommendation)
return hasData($result) ? true : false;
}
/**
* Check if user is allowed to recommend Anrechnung.
*
* @param $anrechnung_id
* @return bool
*/
public function isEmpfehlungsberechtigt($anrechnung_id)
{
if($this->ci->config->item('fbl') === TRUE)
{
return true;
}
// Get lv-leitungen or, if not present, all lectors of lv.
$lector_arr = $this->getLectors($anrechnung_id);
// Return false if lv-leitung is present and user is not lv-leitung. Otherways return always true.
return in_array(getAuthUID(), array_column($lector_arr, 'uid'));
}
/**
* Get LV Leitung. If not present, get all LV lectors.
@@ -774,11 +811,14 @@ class AnrechnungLib
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one
// If lv has 1 or more LV-Leitungen, keep only them
if ($key !== false)
{
$lector_arr[]= $result[$key];
foreach ($result as $lector)
{
if ($lector->lvleiter) $lector_arr[]= $lector;
}
}
// ...otherwise keep all lectors
else
@@ -803,6 +843,40 @@ class AnrechnungLib
return $lector_arr;
}
/**
* Get Leitung of Lehrveranstaltungs-Organisationseinheit.
*
* @param $anrechnung_id
* @return false|mixed|null
*/
public function getLeitungOfLvOe($anrechnung_id)
{
$this->ci->AnrechnungModel->addSelect('lehrveranstaltung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
$lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id;
// Get Leitungen
$result = $this->ci->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
if (!hasData($result))
{
return false;
}
$oeLeitung_arr = getData($result);
foreach ($oeLeitung_arr as $oeLeitung)
{
$oeLeitung->fullname = $oeLeitung->vorname. ' '. $oeLeitung->nachname;
}
// Now make the array unique
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
return $oeLeitung_arr;
}
// Return an object with Anrechnungdata
private function _setAnrechnungDataObject($anrechnung)
{
-165
View File
@@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class PersonLogLib
{
const PARKED_LOGNAME = 'Parked';
const ONHOLD_LOGNAME = 'Onhold';
/**
* Constructor
*/
@@ -78,168 +75,6 @@ class PersonLogLib
else
show_error(getError($result));
}
/**
* Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent)
* Done by adding a logentry in the future
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return insert object
*/
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$onhold = $this->getOnHoldDate($person_id);
if (hasData($onhold))
return error("Person already on hold");
$logjson = array(
'name' => self::PARKED_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Unparks a person, i.e. removes all log entries in the future with logname for parking
* @param $person_id
* @return array with deleted logids
*/
public function unPark($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is parked
* @param $person_id
* @return the date if person is parked, null otherwise
*/
public function getParkedDate($person_id)
{
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
$parkeddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$parkeddate = $log->zeitpunkt;
break;
}
}
}
return $parkeddate;
}
/**
* Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
* Done by adding a logentry with a special name. can be undone only manually by clicking button.
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return array
*/
public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$parked = $this->getParkedDate($person_id);
if (hasData($parked))
return error("Person already parked");
$logjson = array(
'name' => self::ONHOLD_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Removes on hold status, i.e. removes all log entries with logname for on hold
* @param $person_id
* @return array
*/
public function removeOnHold($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->filterLog($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is on hold
* @param $person_id
* @return the date if person is on hold, null otherwise
*/
public function getOnHoldDate($person_id)
{
$result = $this->ci->PersonLogModel->filterLog($person_id);
$onholddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$onholddate = $log->zeitpunkt;
break;
}
}
}
return $onholddate;
}
/**
* Saves a processstate log with specified parameters, including a specified log date.
* @param $person_id
+75
View File
@@ -0,0 +1,75 @@
<?php
/**
* Copyright (C) 2022 fhcomplete.net
*
* 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.
*
*/
require_once(dirname(__FILE__).'/../../vendor/nategood/httpful/bootstrap.php');
/**
* Simple client to call the signature server
*/
class SignatureLib
{
// -------------------------------------------------------------------------------------------------
// Public static methods
/**
* Returns the list of signature inside the given file
*/
public static function list($inputFileName)
{
try
{
// Get the content of the given file
$inputFileContent = file_get_contents($inputFileName);
if ($inputFileContent === false) // if failed
{
error_log('An error occurred while getting the content from: '.$inputFileName);
}
else
{
// Posts the given file content + file name and expects a response in JSON format
$resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
->sendsJson()
->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
->expectsJson()
->send();
}
}
catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
{
error_log($cee->getMessage());
}
catch (Exception $e) // any other exception
{
error_log($e->getMessage());
}
// If the response is fine
if (isset($resultPost->body) && is_object($resultPost->body)
&& isset($resultPost->body->retval) && is_array($resultPost->body->retval))
{
return $resultPost->body->retval;
}
// Otherwise return a null as error
return null;
}
}
@@ -86,16 +86,22 @@ class PlausicheckLib
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid)
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id)
WHERE
benutzer.aktiv = true
AND status.status_kurzbz='Student'
AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent')
AND studiengang.studiengang_kz < 10000
AND status.studiensemester_kurzbz = ?
AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE)
AND NOT EXISTS(
SELECT 1 FROM lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
SELECT 1
FROM
lehre.tbl_studienplan
JOIN
lehre.tbl_studienordnung USING(studienordnung_id)
WHERE
tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
tbl_studienplan.studienplan_id = stpl.studienplan_id
AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)";
if (isset($prestudent_id))
@@ -106,7 +112,7 @@ class PlausicheckLib
if (isset($studiengang_kz))
{
$qry .= " AND stg.studiengang_kz = ?";
$qry .= " AND studiengang.studiengang_kz = ?";
$params[] = $studiengang_kz;
}
@@ -879,6 +885,57 @@ class PlausicheckLib
return $this->_db->execReadOnlyQuery($qry, $params);
}
/**
* Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value.
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
* @param studiengang_kz int if check is to be executed for certain Studiengang
* @param prestudent_id int if check is to be executed only for one prestudent
* @return success with prestudents or error
*/
public function getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
{
$params = array($studiensemester_kurzbz);
$qry = "
SELECT
DISTINCT ON (pre.prestudent_id)
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
FROM
public.tbl_prestudent pre
JOIN public.tbl_person pers USING(person_id)
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
JOIN public.tbl_studiengang stg USING(studiengang_kz)
WHERE
status.studiensemester_kurzbz = ?
AND status.status_kurzbz IN ('Student', 'Incoming')
AND NOT EXISTS (
SELECT 1
FROM
public.tbl_konto
WHERE
person_id = pers.person_id
AND studiensemester_kurzbz = status.studiensemester_kurzbz
AND buchungsnr_verweis IS NULL
AND betrag <= 0
)
AND stg.melderelevant
AND pre.bismelden";
if (isset($studiengang_kz))
{
$qry .= " AND stg.studiengang_kz = ?";
$params[] = $studiengang_kz;
}
if (isset($prestudent_id))
{
$qry .= " AND pre.prestudent_id = ?";
$params[] = $prestudent_id;
}
return $this->_db->execReadOnlyQuery($qry, $params);
}
//------------------------------------------------------------------------------------------------------------------
// Person checks
@@ -18,6 +18,7 @@ class PlausicheckProducerLib
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
'AktSemesterNull' => 'AktSemesterNull',
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
'AktiverStudentstatusOhneKontobuchung' => 'AktiverStudentstatusOhneKontobuchung',
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
@@ -0,0 +1,50 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
require_once('PlausiChecker.php');
/**
* Student with active status should have been charged, i.e. have a Kontobuchung with negative or zero value.
*/
class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
{
public function executePlausiCheck($params)
{
$results = array();
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
$prestudentRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
if (hasData($prestudentRes))
{
$prestudents = getData($prestudentRes);
// populate results with data necessary for writing issues
foreach ($prestudents as $prestudent)
{
$results[] = array(
'person_id' => $prestudent->person_id,
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
'fehlertext_params' => array(
'prestudent_id' => $prestudent->prestudent_id,
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz
),
'resolution_params' => array(
'prestudent_id' => $prestudent->prestudent_id,
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz
)
);
}
}
// return the results
return success($results);
}
}
@@ -0,0 +1,36 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Student with active status should have been charged, i.e. have a Kontobuchung with negative or zero value.
*/
class CORE_STUDENTSTATUS_0015 implements IIssueResolvedChecker
{
public function checkIfIssueIsResolved($params)
{
if (!isset($params['prestudent_id']) || !is_numeric($params['prestudent_id']))
return error('Prestudent Id missing, issue_id: '.$params['issue_id']);
if (!isset($params['studiensemester_kurzbz']) || isEmptyString($params['studiensemester_kurzbz']))
return error('Studiensemester missing, issue_id: '.$params['issue_id']);
$this->_ci =& get_instance(); // get code igniter instance
$this->_ci->load->library('issues/PlausicheckLib');
// check if issue persists
$checkRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung(
$params['studiensemester_kurzbz'],
null,
$params['prestudent_id']
);
if (isError($checkRes)) return $checkRes;
if (hasData($checkRes))
return success(false); // not resolved if issue is still present
else
return success(true); // resolved otherwise
}
}
@@ -0,0 +1,14 @@
<?php
class RueckstellungStatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung_status';
$this->pk = 'status_kurzbz';
}
}
@@ -0,0 +1,33 @@
<?php
class Rueckstellung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung';
$this->pk = 'rueckstellung_id';
$this->hasSequence = true;
}
public function getByPersonId($person_id, $status = null)
{
$language_index = getUserLanguage() == 'German' ? 0 : 1;
$this->addLimit(1);
$this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
$this->addSelect('*,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
$this->addOrder('datum_bis', 'DESC');
$where['person_id'] = $person_id;
if (!isEmptyString($status))
$where['status_kurzbz'] = $status;
return $this->loadWhere($where);
}
}
@@ -0,0 +1,87 @@
<?php
class Anrechnungszeitraum_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnungszeitraum';
$this->pk = 'anrechnungszeitraum_id';
}
/**
* Save new Anrechnungszeitraum.
*
* @param $studiensemester_kurzbz
* @param $anrechnungstart
* @param $anrechnungende
* @return array|stdClass
*/
public function insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
{
$result = $this->insert(array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungstart' => $anrechnungstart,
'anrechnungende' => $anrechnungende,
'insertvon' => getAuthUID()
));
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum speichern.');
}
// Return new anrechnungszeitraum_id
return success($result->retval);
}
/**
* Delete Anrechnungszeitraum.
*
* @param $anrechnungszeitraum_id
* @return array|stdClass
*/
public function deleteAzr($anrechnungszeitraum_id)
{
$result = $this->delete(array('anrechnungszeitraum_id' => $anrechnungszeitraum_id));
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum löschen.');
}
return success($result->retval);
}
/**
* Update existing Anrechnungszeitraum.
*
* @param $anrechnungszeitraum_id
* @param $studiensemester_kurzbz
* @param $anrechnungstart
* @param $anrechnungende
* @return array|stdClass
*/
public function updateAzr($anrechnungszeitraum_id, $studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
{
$result = $this->update(
$anrechnungszeitraum_id,
array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungstart' => $anrechnungstart,
'anrechnungende' => $anrechnungende
)
);
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum update.');
}
return success($result->retval);
}
}
@@ -200,6 +200,28 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz));
}
/**
* Gets all Leiter of Lehrveranstaltungsorganisationseinheit
* @param $lehrveranstaltung_id
* @return array|null
*/
public function getLeitungOfLvOe($lehrveranstaltung_id)
{
$query = "select distinct vorname, nachname, uid
FROM
lehre.tbl_lehrveranstaltung lv
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
join public.tbl_benutzer b using (uid)
join public.tbl_person p using (person_id)
where
bf.datum_von <= now()::date
and (bf.datum_bis >= now()::date or bf.datum_bis is null)
and bf.funktion_kurzbz = 'Leitung' -- Leitung of LV-OE
and lehrveranstaltung_id = ?";
return $this->execQuery($query, array($lehrveranstaltung_id));
}
/**
* Gets Lehrveranstaltungen of a student
@@ -0,0 +1,137 @@
<?php
$includesArray = array(
'title' => $this->p->t('anrechnung', 'anrechnungenVerwalten'),
'jquery3' => true,
'jqueryui1' => true,
'bootstrap3' => true,
'fontawesome6' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tabulator4' => true,
'tablewidget' => true,
'sbadmintemplate3' => true,
'navigationwidget' => true,
'phrases' => array(
'anrechnung' => array(
'anrechnungenVerwalten',
'anrechnungszeitraumFestlegen',
'anrechnungszeitraumHinzufuegen',
'anrechnungszeitraumSpeichern',
'anrechnungszeitraumStart',
'anrechnungszeitraumEnde'
),
'ui' => array(
'aktion',
'geloescht',
'gespeichert',
'frageSicherLoeschen',
'spaltenEinstellen'
),
'lehre' => array('studiensemester'),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/adminAnrechnung.js'
),
'customCSSs' => array(
'public/css/sbadmin2/tablesort_bootstrap.css'
)
);
$this->load->view('templates/FHC-Header', $includesArray);
?>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<!--Titel-->
<div class="page-header">
<h3><?php echo $this->p->t('anrechnung', 'anrechnungenVerwalten'); ?></h3>
</div><br>
<!--Untertitel-->
<h4><?php echo $this->p->t('anrechnung', 'anrechnungszeitraumFestlegen'); ?></h4><br>
<div class="row">
<div class="col-xs-4">
<button class="btn btn-primary azrOpenModal" data-toggle="modal" data-target="#azrModal">
<i class="fa fa-plus"></i> <?php echo $this->p->t('anrechnung', 'anrechnungszeitraumHinzufuegen'); ?>
</button>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-lg-12">
<?php $this->load->view('lehre/anrechnung/adminAnrechnungData.php'); ?>
</div>
</div>
<!-- Modal (für insert und update von Anrechnungszeitraum)-->
<div class="modal fade" id="azrModal" tabindex="-1" role="dialog" aria-labelledby="azrModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="azrModalLabel"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<div class="row">
<input type="hidden" id="anrechnungszeitraum_id" value="">
<input type="hidden" id="defaultStudiensemester_kurzbz" value="<?php echo $studiensemester_kurzbz ?>">
<div class="col-xs-4">
<label for="studiensemester" class="small">Studiensemester</label>
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_kurzbz
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<div class="col-xs-4">
<label for="azrStart" class="small">Anr.-Zeitraum Start</label>
<input type="date" id="azrStart" value="" class="form-control" required>
</div>
<div class="col-xs-4">
<label for="azrEnde" class="small">Anr.-Zeitraum Ende</label>
<input type="date" id="azrEnde" value="" class="form-control" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" id="azrInsertBtn" class="btn btn-primary" value=""><?php echo $this->p->t('ui', 'speichern'); ?></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
@@ -0,0 +1,45 @@
<?php
$query = '
SELECT *
FROM lehre.tbl_anrechnungszeitraum
ORDER BY anrechnungstart DESC
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'adminAnrechnung',
'requiredPermissions' => 'lehre/anrechnungszeitfenster',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'AzrID',
ucfirst($this->p->t('lehre', 'studiensemester')),
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumStart')),
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumEnde')),
ucfirst($this->p->t('ui', 'bearbeitetAm')),
ucfirst($this->p->t('ui', 'bearbeitetVon')),
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitDataFill",
persistentLayout:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnungszeitraum_id", // assign specific column as unique id (important for row indexing)
selectable: false, // allow row selection
tableWidgetHeader: true,
tableBuilt: function(){
func_tableBuilt(this);
},
}',
'datasetRepFieldsDefs' => '{
anrechnungszeitraum_id: {visible: false, headerFilter:"input"},
studiensemester_kurzbz: {headerFilter:"input"},
anrechnungstart: {headerFilter:"input", formatter: formatDate},
anrechnungende: {headerFilter:"input", formatter: formatDate},
insertamum: {visible: false, headerFilter:"input"},
insertvon: {visible: false, headerFilter:"input"}
}'
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
@@ -23,6 +23,7 @@ $this->load->view(
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'bitteBegruendungVervollstaendigen',
'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt',
@@ -322,14 +323,6 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
@@ -338,6 +331,14 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeil'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
@@ -346,6 +347,9 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item" onclick="{ $(this).closest('div').find('textarea').val('').focus()}">
<span><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></span>
</li>
</ul>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
@@ -124,7 +124,7 @@ $this->load->view(
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
</div>
</div>
<!-- Genehmigen / Ablehnen Panel -->
@@ -145,18 +145,13 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item disabled"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?></li>
</ol>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2"
@@ -3,8 +3,9 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled); // alle STG mit Lese- und Schreibberechtigung
$ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT = "'". implode('\',\'', $oes_schreibberechtigt). "'"; // alle OE nur mit Schreibberechtigung; singlequote für jeden string notwendig
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = '
WITH anrechnungen AS
@@ -14,6 +15,10 @@ $query = '
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
anrechnung.dms_id,
CASE
WHEN stg.typ || stg.kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE
ELSE FALSE
END "schreibberechtigt",
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS stg_bezeichnung,
@@ -35,8 +40,8 @@ $query = '
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -71,6 +76,7 @@ $query = '
anrechnungen.lehrveranstaltung_id,
anrechnungen.begruendung_id,
anrechnungen.dms_id,
anrechnungen.schreibberechtigt,
anrechnungen.studiensemester_kurzbz,
anrechnungen.studiengang_kz,
anrechnungen.stg_bezeichnung,
@@ -89,7 +95,7 @@ $query = '
anrechnungen.antragsdatum,
anrechnungen.empfehlung_anrechnung,
anrechnungen.status_kurzbz,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
anrechnungstatus.bezeichnung_mehrsprachig[' . $LANGUAGE_INDEX . '] AS "status_bezeichnung",
anrechnungen.prestudent_id,
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
@@ -101,8 +107,39 @@ $query = '
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC
LIMIT 1)
END "empfehlungsanfrageAm",
CASE
END "empfehlungsanfrageAm",';
if ($configFachbereichsleitung === TRUE)
{
$query.= ' CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \')
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) bf.uid, vorname, nachname
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
JOIN public.tbl_benutzer benutzer ON bf.uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
and bf.datum_von <= now()
and (bf.datum_bis >= now() or bf.datum_bis is null)
AND bf.funktion_kurzbz = \'Leitung\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, nachname, vorname
) as tmp_empfehlungsanfrageEmpfaenger
)
END "empfehlungsanfrageAn"';
}
else
{
$query.= ' CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
@@ -122,10 +159,12 @@ $query = '
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren
) as tmp_empfehlungsanfrageEmpfaenger
)
END "empfehlungsanfrageAn"
FROM anrechnungen
END "empfehlungsanfrageAn"';
}
$query.= ' FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
@@ -141,6 +180,7 @@ $filterWidgetArray = array(
'lehrveranstaltung_id',
'begruendung_id',
'dms_id',
'Schreibberechtigt',
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
@@ -167,9 +207,7 @@ $filterWidgetArray = array(
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentLayout:true,
persistentSort:true,
persistentFilter:true,
persistenceID: "approveAnrechnungUebersicht_V1",
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
@@ -200,6 +238,10 @@ $filterWidgetArray = array(
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"},
dms_id: {visible: false, headerFilter:"input"},
schreibberechtigt: {
formatter:"tickCross", align:"center",
headerFilter:"tickCross", headerFilterParams:{tristate: true}, headerFilterFunc: hf_schreibberechtigt
},
studiensemester_kurzbz: {visible: false, headerFilter:"input"},
studiengang_kz: {visible: false, headerFilter:"input"},
stg_bezeichnung: {headerFilter:"input"},
@@ -212,7 +254,7 @@ $filterWidgetArray = array(
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
begruendung: {headerFilter:"input", visible: true},
student: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
zgv: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez},
anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
@@ -2,7 +2,7 @@
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = '
SELECT pst.prestudent_id,
@@ -14,8 +14,8 @@ $query = '
nachname,
vorname,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -21,6 +21,7 @@ $this->load->view(
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'bitteBegruendungVervollstaendigen',
'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen'
),
@@ -234,13 +235,16 @@ $this->load->view(
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp;
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertigWeil'); ?></span>&emsp;
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item" onclick="{ $(this).closest('div').find('textarea').val('').focus()}">
<span><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></span>
</li>
</ul>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
@@ -287,12 +291,12 @@ $this->load->view(
<div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo (is_null($empfehlungData->empfehlung) && $isEmpfehlungsberechtigt) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo (is_null($empfehlungData->empfehlung) && $isEmpfehlungsberechtigt) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button>
</div>
@@ -117,7 +117,7 @@ $this->load->view(
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php'); ?>
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php');?>
</div>
</div>
<!-- Empfehlung / Nicht Empfehlung Panel -->
@@ -139,12 +139,8 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
<li class="list-group-item disabled">
<?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?>
</li>
</ul>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
@@ -1,12 +1,12 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$LEKTOR_UID = getAuthUID();
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = '
WITH anrechnungen AS
(
SELECT DISTINCT
SELECT DISTINCT ON (anrechnung_id)
anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
@@ -21,8 +21,8 @@ $query = '
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -37,7 +37,8 @@ $query = '
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
) AS status_kurzbz,
anrechnungstatus.bezeichnung_mehrsprachig[' . $LANGUAGE_INDEX . '] AS "status_bezeichnung"
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
@@ -46,25 +47,83 @@ $query = '
LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
)
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus USING (status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
-- Order to distinct on last anrechnungstatus
ORDER BY anrechnung.anrechnung_id, lehre.tbl_anrechnung_anrechnungstatus.insertamum DESC
),
-- Allen Lektoren einer LV und flag, welche LV-Leitung innehaben
tbl_lvleitungen AS
(
SELECT DISTINCT ON (benutzer.uid, lehrveranstaltung_id) lehrveranstaltung_id, uid,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE
ELSE FALSE
END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN anrechnungen USING (lehrveranstaltung_id) -- LVs auf Anrechnungen beschränken
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE tbl_lehreinheit.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY lehrveranstaltung_id, benutzer.uid, lehrfunktion_kurzbz DESC
)';
SELECT DISTINCT ON (anrechnungen.*, lema.mitarbeiter_uid) anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
WHERE anrechnungen.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz
AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\'
AND le.lehre = TRUE
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
';
if ($configFachbereichsleitung === TRUE)
{
$query.= '
SELECT
-- immer empfehlungsberechtigt, da hier nur Leitungen der LV-OE eine Empfehlungsanfrage erhalten
TRUE AS empfehlungsberechtigt,
anrechnungen.*
FROM anrechnungen
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
JOIN public.tbl_organisationseinheit og using (oe_kurzbz) -- OE der LV
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
-- Aktive Leitung der LV-OE
WHERE bf.funktion_kurzbz = \'Leitung\'
and bf.datum_von <= now()
and (bf.datum_bis >= now() or bf.datum_bis is null)
AND bf.uid = \'' . $LEKTOR_UID . '\'
-- check, dass es für diese Anrechnung eine Empfehlungsanfrage gibt
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
order by empfehlung_anrechnung NULLS FIRST, antragsdatum
';
}
else
{
$query.= '
SELECT DISTINCT ON (anrechnungen.*, lema.mitarbeiter_uid)
CASE
-- erst prüfen, ob es überhaupt eine LV Leitung gibt (wenn nicht, dann immer empfehlungsberechtigt)
WHEN EXISTS (SELECT 1 FROM tbl_lvleitungen WHERE lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id AND lvleiter = TRUE)
-- wenn ja, return true, wenn user LV Leitung ist oder false, wenn nicht
THEN (SELECT EXISTS (SELECT 1 FROM tbl_lvleitungen WHERE lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id AND lvleiter = TRUE AND uid = \'' . $LEKTOR_UID . '\'))
-- wenn es keine LV Leitung, return immer true
ELSE TRUE
END AS empfehlungsberechtigt,
anrechnungen.*
FROM anrechnungen
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
WHERE le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz
AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\'
AND le.lehre = TRUE
-- check, dass es für diese Anrechnung eine Empfehlungsanfrage gibt
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
';
}
$filterWidgetArray = array(
'query' => $query,
@@ -72,6 +131,7 @@ $filterWidgetArray = array(
'requiredPermissions' => 'lehre/anrechnung_empfehlen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'Empfehlungsberechtigt',
'anrechnung_id',
'lehrveranstaltung_id',
'begruendung_id',
@@ -98,6 +158,7 @@ $filterWidgetArray = array(
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
initialHeaderFilter: [{field:"empfehlungsberechtigt", value: true}],
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
selectable: true, // allow row selection
selectableRangeMode: "click", // allow range selection using shift end click on end of range
@@ -122,6 +183,9 @@ $filterWidgetArray = array(
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
empfehlungsberechtigt: {formatter:"tickCross", align:"center", headerTooltip:"Berechtigt wenn man die LV leitet oder wenn der LV keine LV-Leitung zugeordnet ist.",
headerFilter:"tickCross", headerFilterParams:{"tristate": true}, headerFilterFunc: hf_empfehlungsberechtigt
},
anrechnung_id: {visible: false, headerFilter:"input"},
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"},
@@ -133,7 +197,7 @@ $filterWidgetArray = array(
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
zgv: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez},
anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
@@ -7,10 +7,11 @@
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$LOGDATA_NAME = '\'Message sent\'';
$LOGDATA_VON = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
p.person_id AS "PersonID",
p.person_id AS "PersonId",
ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
@@ -37,7 +38,15 @@ $query = '
AND l.zeitpunkt >= pss.insertamum
ORDER BY l.log_id DESC
LIMIT 1
) AS "Nachricht"
) AS "Nachricht",
(
SELECT SUM(konto.betrag)
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 .'
) AS "Kaution"
FROM
public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
@@ -60,14 +69,16 @@ $query = '
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'PersonId',
'columnsAliases' => array(
'PersonID',
'PersonId',
'PreStudentID',
'Vorname',
'Nachname',
'Studiengang',
'Abgewiesen am',
'Nachricht'
ucfirst($this->p->t('person', 'vorname')) ,
ucfirst($this->p->t('person', 'nachname')),
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('infocenter', 'abgewiesenam')),
ucfirst($this->p->t('global', 'nachricht')),
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -80,6 +91,19 @@ $query = '
$datasetRaw->{'Nachricht'} = 'Ja';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
$datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i');
return $datasetRaw;
}
@@ -7,13 +7,12 @@
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\'';
$LOGDATA_NAME_PARKED = '\'Parked\'';
$LOGDATA_NAME_ONHOLD = '\'Onhold\'';
$LOGTYPE_KURZBZ = '\'Processstate\'';
$POSTPONE_STATUS_PARKED = '\'parked\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$ORG_NAME = '\'InfoCenter\'';
$ONLINE = '\'online\'';
@@ -27,8 +26,6 @@
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
ohd.onholddate AS "OnholdDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
@@ -276,9 +273,9 @@
) AS "ZGVMNationGruppe",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.'
AND tbl_benutzerfunktion.uid = (
@@ -290,8 +287,18 @@
ORDER BY l.log_id DESC
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
LIMIT 1
) AS "InfoCenterMitarbeiter",
rueck.datum_bis AS "HoldDate",
rueck.bezeichnung AS "Rueckstellgrund",
(
SELECT SUM(konto.betrag)
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 .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -302,22 +309,24 @@
JOIN public.tbl_person sp ON sb.person_id = sp.person_id
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS parkdate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS onholddate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.'
AND l.zeitpunkt >= NOW()
) ohd USING(person_id)
SELECT
tbl_rueckstellung.person_id,
tbl_rueckstellung.datum_bis,
tbl_rueckstellung.status_kurzbz,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung
FROM public.tbl_rueckstellung
JOIN public.tbl_rueckstellung_status USING(status_kurzbz)
JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id
WHERE tbl_rueckstellung.rueckstellung_id =
(
SELECT srueck.rueckstellung_id
FROM public.tbl_rueckstellung srueck
WHERE srueck.person_id = tbl_rueckstellung.person_id
AND datum_bis >= NOW()
ORDER BY srueck.datum_bis DESC LIMIT 1
)
) rueck ON rueck.person_id = p.person_id
WHERE
EXISTS (
SELECT 1
@@ -344,7 +353,12 @@
AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
)
)
ORDER BY "LastAction" ASC';
ORDER BY CASE
WHEN rueck.status_kurzbz IS NULL THEN 1
WHEN rueck.status_kurzbz = ' .$POSTPONE_STATUS_PARKED .' THEN 2
WHEN rueck.status_kurzbz != '. $POSTPONE_STATUS_PARKED .' THEN 3
END,
rueck.datum_bis NULLS LAST, "LastAction" ASC';
$filterWidgetArray = array(
'query' => $query,
@@ -366,8 +380,6 @@
ucfirst($this->p->t('person', 'nation')),
ucfirst($this->p->t('global', 'sperrdatum')),
ucfirst($this->p->t('global', 'gesperrtVon')),
ucfirst($this->p->t('global', 'parkdatum')),
ucfirst($this->p->t('global', 'rueckstelldatum')),
ucfirst($this->p->t('global', 'letzteAktion')),
'Aktionstyp',
'AnzahlAktePflicht',
@@ -383,7 +395,10 @@
'ZGV Nation MA',
'ZGV Gruppe BA',
'ZGV Gruppe MA',
'InfoCenter Mitarbeiter'
'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'rueckstelldatum')),
ucfirst($this->p->t('infocenter', 'rueckstellgrund')),
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -430,18 +445,13 @@
$datasetRaw->{'LockUser'} = '-';
}
if ($datasetRaw->{'ParkDate'} == null)
if ($datasetRaw->{'HoldDate'} == null)
{
$datasetRaw->{'ParkDate'} = '-';
}
if ($datasetRaw->{'OnholdDate'} == null)
{
$datasetRaw->{'OnholdDate'} = '-';
$datasetRaw->{'HoldDate'} = '-';
}
else
{
$datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i');
$datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i');
}
if ($datasetRaw->{'StgAbgeschickt'} == null)
@@ -493,6 +503,24 @@
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
if ($datasetRaw->{'Rueckstellgrund'} === null)
{
$datasetRaw->{'Rueckstellgrund'} = '-';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -504,16 +532,12 @@
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
if ($datasetRaw->OnholdDate != null)
{
if ($datasetRaw->Rueckstellgrund != null && $datasetRaw->Rueckstellgrund !== 'Parken')
$mark = "onhold";
}
// Parking has priority over locking
if ($datasetRaw->ParkDate != null)
{
if ($datasetRaw->Rueckstellgrund === 'Parken')
$mark = "text-info";
}
return $mark;
}
@@ -24,42 +24,15 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js',
'public/js/infocenter/stammdaten.js'
),
'phrases' => array(
'infocenter' => array(
'notizHinzufuegen',
'notizAendern',
'bewerberParken',
'bewerberAusparken',
'nichtsZumAusparken',
'fehlerBeimAusparken',
'fehlerBeimParken',
'bewerberGeparktBis',
'bewerberOnHold',
'bewerberOnHoldEntfernen',
'bewerberOnHoldBis',
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'rueckstelldatumUeberschritten',
'parkenZurueckstellenInfo',
'zgvInPruefung',
'zgvErfuellt',
'zgvNichtErfuellt',
'zgvErfuelltPruefung',
'datumUngueltig',
'nachreichDatumNichtVergangenheit'
),
'ui' => array(
'gespeichert',
'fehlerBeimSpeichern'
),
'global' => array(
'bis',
'zeilen'
)
'infocenter',
'ui',
'global'
)
);
@@ -13,6 +13,7 @@
$ORG_NAME = '\'InfoCenter\'';
$IDENTITY = '\'identity\'';
$ONLINE = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -264,7 +265,15 @@ $query = '
WHERE akte.person_id = p.person_id
AND dokument_kurzbz = '. $IDENTITY .'
LIMIT 1
) AS "AktenId"
) AS "AktenId",
(
SELECT SUM(konto.betrag)
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 .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -337,7 +346,8 @@ $query = '
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter',
'Identitätsnachweis'
'Identitätsnachweis',
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -453,6 +463,18 @@ $query = '
$datasetRaw->{'AktenId'} = '-';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
@@ -9,6 +9,7 @@
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -195,7 +196,14 @@ $query = '
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
) AS "InfoCenterMitarbeiter",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -256,7 +264,8 @@ $query = '
'Reihungstest Datum',
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter'
'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -359,6 +368,19 @@ $query = '
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -26,6 +26,7 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js'
),
'phrases' => array(
@@ -5,6 +5,7 @@ $INTERESSENT_STATUS = '\'Interessent\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$oeKurz = '\''. implode('\',\'', $oeKurz) . '\'';
$ABGEWIESENER_STATUS = '\'Abgewiesener\'';
$query = '
SELECT
@@ -22,6 +23,7 @@ $query = '
AND zgvstatus.datum IN (
SELECT MAX(zgvstatus.datum)
FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id)
AND get_rolle_prestudent(prestudent_id, NULL) != '. $ABGEWIESENER_STATUS .'
ORDER BY ps.prestudent_id
';
@@ -1,67 +0,0 @@
<?php
$this->load->view('templates/header', array('title' => 'TemplateLinkDocuments', 'tablesort' => true, 'tableid' => 't1', 'sortList' => '2,1', 'headers' => '3:{sorter:false},4:{sorter:false}'));
?>
<script>
function addDocument(dokument_kurzbz)
{
var addDocumentDefault = document.getElementById("addDocumentDefault");
addDocumentDefault.selected = true;
$.post("../saveDocuments/"+<?=$vorlagestudiengang_id?>+"/"+dokument_kurzbz+"/0", function(answer)
{
window.location.href=window.location.href;
});
}
function delDocument(vorlagedokument_id)
{
$.post("../deleteDocumentLink/"+vorlagedokument_id, function(answer)
{
window.location.href=window.location.href;
});
}
function changeSort(vorlagedokument_id, sortnum)
{
$.post("../changeSort/"+vorlagedokument_id+"/"+sortnum, function(answer)
{
window.location.href=window.location.href;
});
}
</script>
<h2><?=$vorlagestudiengang_id?></h2>
<table id="t1" class="tablesorter">
<thead>
<tr>
<th>ID</th>
<th>Bezeichnung</th>
<th>Sortierung</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach ($documents as $d): ?>
<tr>
<td><?=$d->vorlagedokument_id?></td>
<td><?=$d->bezeichnung?></td>
<td> <?=$d->sort?></td>
<td><a onclick="changeSort('<?=$d->vorlagedokument_id?>', <?=$d->sort?>+1)"><img src="<?php echo APP_ROOT?>/skin/images/up.png"/></a> <a onclick="changeSort('<?=$d->vorlagedokument_id?>', <?=$d->sort?>-1)"><img src="<?php echo APP_ROOT?>/skin/images/down.png"/></a></td>
<td><a onclick="delDocument('<?=$d->vorlagedokument_id?>')">löschen</a></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<select>
<option selected="true" id="addDocumentDefault" disabled>Dokument hinzufuegen</option>
<?php foreach($allDocuments as $d): ?>
<option onclick="addDocument('<?=$d->dokument_kurzbz?>');"><?=$d->bezeichnung?></option>
<?php endforeach ;?>
</select>
</body>
</html>
@@ -1,20 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<html lang="de_AT">
<head>
<title>VileSci - Vorlage</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<frameset rows="30%,*">
<frame src="Vorlage/table" id="VorlageTop" name="VorlageTop" frameborder="0" />
<frame src="Vorlage/edit" id="VorlageBottom" name="VorlageBottom" frameborder="0" />
<noframes>
<body bgcolor="#FFFFFF">
This application works only with a frames-enabled browser.<br />
<a href="VorlageList">Use without frames</a>
</body>
</noframes>
</frameset>
</html>
@@ -1,32 +0,0 @@
<?php
$this->load->view('templates/header', array('title' => 'VorlageEdit', 'jsoneditor' => true));
?>
<div class="row">
<div class="span4">
<h2>Vorlage: <?php echo $vorlage->vorlage_kurzbz; ?></h2>
<form method="post" action="../save">
Bezeichnung: <input type="text" name="bezeichnung" value="<?php echo $vorlage->bezeichnung; ?>" />
Anmerkung: <input type="text" name="anmerkung" value="<?php echo $vorlage->anmerkung; ?>" /><br/>
MimeType:<?php echo $this->widgetlib->widget("mimetype_widget", array('mimetype' => $vorlage->mimetype)); ?>
Attribute: <?php echo $this->widgetlib->widget("jsoneditor_widget", array('json' => $vorlage->attribute)); ?>
<input type="hidden" name="attribute" id="attribute" value="<?=$vorlage->attribute?>" />
<input type="hidden" name="vorlage_kurzbz" value="<?php echo $vorlage->vorlage_kurzbz; ?>" />
<button type="submit" onclick="getJSON(this.form);">Save</button>
</form>
</div>
</div>
<script type="text/javascript" >
// get json
function getJSON(form)
{
form.elements["attribute"].value = JSON.stringify(jsoneditor.get(), null, 2);
//alert(form.elements["attribute"].value);
}
</script>
</body>
</html>
@@ -1,38 +0,0 @@
<?php
$this->load->view('templates/header', array('title' => 'VorlageList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '4:{sorter:false}'));
?>
<div class="row">
<div class="span4">
<h2>Vorlagen</h2>
<form method="post" action="">
MimeType
<?php
// This is an example to show that you can load stuff from inside the template file
echo $this->widgetlib->widget("mimetype_widget", array('mimetype' => $mimetype));
?>
<button type="submit">Filter</button>
</form>
<table id="t1" class="tablesorter">
<thead>
<tr><th class='table-sortable:default'>Vorlage</th>
<th class='table-sortable:default'>Bezeichnung</th>
<th>Anmerkung</th><th>MimeType</th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach ($vorlage as $v): ?>
<tr><td><a href="edit/<?php echo $v->vorlage_kurzbz; ?>" target="VorlageBottom"><?php echo $v->vorlage_kurzbz; ?></a></td>
<td><?php echo $v->bezeichnung; ?></td>
<td><?php echo $v->anmerkung; ?></td>
<td><?php echo $v->mimetype; ?></td>
<td><a href="view/<?php echo $v->vorlage_kurzbz; ?>">Vorlagenexte bearbeiten</a></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
</body>
</html>
@@ -1,65 +0,0 @@
<?php
$this->load->view('templates/header', array('title' => 'VorlageEdit', 'tinymce4' => true, 'jsonforms' => true));
?>
<div class="row">
<div class="span4">
<h2>Vorlagetext: <?=$vorlagestudiengang_id?></h2>
<!--StudiengangKZ: <?=$studiengang_kz?>-->
<form method="post" action="../saveText/<?=$vorlagestudiengang_id?>">
OE: <?php
echo $this->widgetlib->widget(
'Organisationseinheit_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $oe_kurzbz,
'typ' => array('Erhalter', 'Studienzentrum', 'Studiengang', 'Lehrgang')
),
array('name' => 'organisationseinheit', 'id' => 'organisationseinheitDnD')
);
?>
Sprache: <?php
echo $this->widgetlib->widget(
'Sprache_widget',
array(DropdownWidget::SELECTED_ELEMENT => $sprache),
array('name' => 'sprache', 'id' => 'spracheDnD')
);
?>
OrgForm: <?php
echo $this->widgetlib->widget(
'Orgform_widget',
array(DropdownWidget::SELECTED_ELEMENT => $orgform_kurzbz),
array('name' => 'orgform', 'id' => 'orgformDnD')
);
?>
Version: <input type="text" name="version" value="<?php echo $version; ?>" size="1" />
Aktiv: <input type="text" name="aktiv" value="<?php echo $aktiv; ?>" size="1" />
<input type="hidden" name="vorlagestudiengang_id" value="<?php echo $vorlagestudiengang_id; ?>" />
<input type="hidden" name="studiengang_kz" value="<?php echo $studiengang_kz; ?>" />
<?php
// This is an example to show that you can load stuff from inside the template file
echo $this->widgetlib->widget("tinymce_widget", array('name' => 'text', 'text' => $text));
?>
<button type="submit">Save</button>
</form>
<hr/><h2>Preview-Data</h2>
<form method="post" action="../preview/<?=$vorlagestudiengang_id?>" target="VorlagePreview">
<?php echo $this->widgetlib->widget("jsonforms_widget", array('id' => 'dataform', 'schema' => $schema)); ?>
<input type="hidden" name="formdata" id="formdata" value="" />
<button type="submit" onclick="getFormdata(this.form);">Preview</button>
</form>
</div>
</div>
<script type="text/javascript" >
// get json
function getFormdata(form)
{
form.elements["formdata"].value = JSON.stringify(bf.getData(), null, 2);
//alert(form.elements["formdata"].value);
}
</script>
<iframe name="VorlagePreview" width="100%" src=""/>
</body>
</html>
@@ -1,50 +0,0 @@
<?php
$this->load->view('templates/header', array('title' => 'VorlagetextList', 'tablesort' => true, 'tableid' => 't1', 'headers' => '7:{sorter:false},8:{sorter:false},9:{sorter:false}'));
?>
<div class="row">
<div class="span4">
<h2>Vorlagentext - <?php echo $vorlage_kurzbz; ?></h2>
<form method="post" action="../newText" target="VorlageBottom">
<input type="hidden" name="vorlage_kurzbz" value="<?php echo $vorlage_kurzbz; ?>"/>
<button type="submit">Neu</button>
</form>
<table id="t1" class="tablesorter">
<thead>
<tr>
<th>ID</th>
<th>Vorlage</th>
<th>Version</th>
<th>OrgEinheit</th>
<th>OrgForm</th>
<th>Berechtigung</th>
<th>Anmerkung</th>
<th>Aktiv</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach ($vorlagentext as $v): ?>
<tr>
<td><a href="../editText/<?php echo $v->vorlagestudiengang_id; ?>" target="VorlageBottom"><?php echo $v->vorlagestudiengang_id; ?></a></td>
<td><a href="../editText/<?php echo $v->vorlagestudiengang_id; ?>" target="VorlageBottom"><?php echo $v->vorlage_kurzbz; ?></a></td>
<td><?php echo $v->version; ?></td>
<td><?php echo $v->oe_kurzbz; ?></td>
<td></td>
<td><?php echo implode(',', $v->berechtigung); ?></td>
<td><?php echo $v->anmerkung_vorlagestudiengang; ?></td>
<td><?php echo $v->aktiv; ?></td>
<td><a href="../editText/<?php echo $v->vorlagestudiengang_id; ?>" target="VorlageBottom">Edit Text</a></td>
<td><a href="../linkDocuments/<?php echo $v->vorlagestudiengang_id; ?>" target="VorlageBottom">Edit Documents</a></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
<?php
$this->load->view('templates/footer');
?>
@@ -1,3 +0,0 @@
<?php
echo $text;
?>
+1 -1
View File
@@ -60,7 +60,7 @@
if ($bootstrap3 === true) generateJSsInclude('vendor/twbs/bootstrap3/dist/js/bootstrap.min.js');
// Bootstrap 5 JS
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.min.js');
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.bundle.min.js');
// Moment JS
if ($momentjs2 === true)
-6
View File
@@ -13,7 +13,6 @@ isset($title) ? $title = 'VileSci - '.$title : $title = 'VileSci';
!isset($headers) ? $headers = '' : $headers = $headers;
!isset($tinymce) ? $tinymce = false : $tinymce = $tinymce;
!isset($jsoneditor) ? $jsoneditor = false : $jsoneditor = $jsoneditor;
!isset($jsonforms) ? $jsonforms = false : $jsonforms = $jsonforms;
!isset($textile) ? $textile = false : $textile = $textile;
!isset($widgetsCSS) ? $widgetsCSS = false : $widgetsCSS = $widgetsCSS;
!isset($datepicker) ? $datepicker = false : $datepicker = $datepicker;
@@ -107,11 +106,6 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in
<script type="text/javascript" src="<?php echo base_url('vendor/josdejong/jsoneditor/dist/jsoneditor.js');?>"></script>
<?php endif ?>
<?php if($jsonforms) : ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url('vendor/brutusin/json-forms/dist/css/brutusin-json-forms.min.css'); ?>" />
<script type="text/javascript" src="<?php echo base_url('vendor/brutusin/json-forms/dist/js/brutusin-json-forms.min.js'); ?>"></script>
<?php endif ?>
<?php if($widgetsCSS) : ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url('skin/widgets.css'); ?>" />
<?php endif ?>
-10
View File
@@ -1,10 +0,0 @@
<div id="<?=$id?>" style="<?=$style?>"></div>
<script language="Javascript" type="text/javascript">
var container = document.getElementById('<?=$id?>');
var schema = <?=$schema?>;
var BrutusinForms = brutusin["json-forms"];
var <?=$objectname?> = BrutusinForms.create(schema);
<?=$objectname?>.render(container);
</script>
-47
View File
@@ -1,47 +0,0 @@
<?php
/*
* JSON-Forms widget
*/
class jsonforms_widget extends Widget
{
public function display($data)
{
// set default values if needed
if (! isset($data['objectname']))
$data['objectname'] = 'bf';
if (! isset($data['id']))
$data['id'] = 'jsonforms';
if (! isset($data['style']))
$data['style'] = 'width: 50%; ';
if (! isset($data['schema']))
$data['schema'] = '{
"$schema": "http://json-schema.org/draft-03/schema#",
"title": "Person",
"type": "object",
"properties": {
"anrede": {
"type": "string",
"enum": [
"Herr",
"Frau"
],
"default": "Herr"
},
"vorname": {
"type": "string",
"description": "Firstname",
"minLength": 2,
"default": "Vorname"
},
"nachname": {
"type": "string",
"description": "Surename",
"minLength": 2,
"default": "Nachname"
}
}
}';
$this->view('widgets/jsonforms', $data);
}
}
+59 -6
View File
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
if (!$db = new basis_db())
$db=false;
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n";
$htmlstr .= "<input type='hidden' name='command' value='update'>\n";
$htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n";
if(!$row->abgabedatum)
$uploadedDocumentSigned = null;
if (!$row->abgabedatum)
{
if ($row->datum<date('Y-m-d'))
{
@@ -626,8 +629,7 @@ while ($row=@$db->db_fetch_object($result))
$fcol='#000000';
}
}
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked=\"checked\"':'')." >";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
if($row->fixtermin=='t')
{
$htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>";
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= " </select></td>\n";
$htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n";
$htmlstr .= " <td>".($row->abgabedatum==''?'&nbsp;':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n";
if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
{
$htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>";
if(!$row->abgabedatum)
if (!$row->abgabedatum)
{
$htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>";
}
@@ -692,6 +695,56 @@ while ($row=@$db->db_fetch_object($result))
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
{
$signaturVorhanden = false;
if ($row->paabgabetyp_kurzbz == 'end')
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
$signaturVorhanden = true;
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
}
}
}
if ($uploadedDocumentSigned != null)
{
$htmlstr .= '
<td>
<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$uploadedDocumentSigned.'</b>
</div>
</td>';
}
elseif($signaturVorhanden)
{
$htmlstr .= '
<td>
<div style="color: #198754; background-color: #d1e7dd; border-color: #a3cfbb; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$p->t('abgabetool/uploadedDocumentSigned').'</b>
</div>
</td>';
}
}
else
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
$htmlstr .= " </tr>\n";
@@ -710,7 +763,7 @@ $htmlstr .= '<tr id="'.$db->convert_html_chars($projektarbeit_id).'">'."\n";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>";
$htmlstr .= "<td>&nbsp;&nbsp;</td>";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n";
$qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'";
+10 -5
View File
@@ -108,7 +108,8 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
lehre.tbl_projektbetreuer.note as note,
public.tbl_benutzer.aktiv as aktiv,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
FROM lehre.tbl_projektarbeit
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
LEFT JOIN public.tbl_benutzer ON(uid=student_uid)
@@ -204,11 +205,15 @@ else
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
$htmlstr .= "</td>";
} else
{
$htmlstr .= "<td>".$row->note."</td>";
}
elseif (!is_null($row->abgegeben))
{
$htmlstr .= "<td>".$p->t('abgabetool/abgegeben')."</td>";
}
else
{
$htmlstr .= "<td>-</td>";
}
$htmlstr .= " <td>".$row->studiensemester_kurzbz."</td>\n";
$htmlstr .= " <td>".strtoupper($row->typ.$row->kurzbz)."</td>\n";
+76 -6
View File
@@ -36,6 +36,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
$anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache);
@@ -93,6 +94,7 @@ else
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
$abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1');
$seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1');
$signaturVorhanden = (isset($_POST['signaturVorhanden']) && $_POST['signaturVorhanden']=='true'?true:false);
}
$user = get_uid();
@@ -111,6 +113,7 @@ $titel = $projektarbeit_obj->titel;
$person = new person();
$person->load($bid);
$betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost;
$uploadedDocumentSigned = null;
if($uid!=$user)
{
@@ -258,6 +261,35 @@ if($command=='add')
echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br>&nbsp;";
$command='';
}
if ($signaturVorhanden === false)
{
// Mail an Studiengang wenn keine Signatur gefunden wurde
$student = new student();
if(!$student->load($projektarbeit_obj->student_uid))
die($p->t('global/userNichtGefunden'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
$subject = 'Abgabe ohne Signatur';
$tomail = $stg_obj->email;
$data = array(
'vorname' => $student->vorname,
'nachname' => $student->nachname,
'studiengang' => $stg_obj->bezeichnung
);
$mailres = sendSanchoMail(
'ParbeitsbeurteilungSiganturFehlt',
$data,
$tomail,
$subject,
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
}
else
{
@@ -280,11 +312,11 @@ if($command=="update" && $error!=true)
$extensions = explode(".", $_FILES['datei']['name']);
if(strtoupper(end($extensions))=='PDF')
{
if($paabgabetyp_kurzbz!='end')
if ($paabgabetyp_kurzbz != 'end')
{
//"normaler" Upload
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"');
@@ -299,18 +331,40 @@ if($command=="update" && $error!=true)
else
{
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
}
}$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
}
else
else // endupload type
{
//Upload der Endabgabe - Eingabe der Zusatzdaten
$command='add';
if(!$error)
if (!$error)
{
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
}
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
$signaturVorhanden = true;
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$signaturVorhanden = false;
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSignedStudent');
}
}
/*$qry="UPDATE campus.tbl_paabgabe SET
abgabedatum = now(),
updatevon = '".$user."',
@@ -339,6 +393,7 @@ if($command=="update" && $error!=true)
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
$htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n";
$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
$htmlstr .= '<input type="hidden" name="signaturVorhanden" value="'.($signaturVorhanden?'true':'false').'">'."\n";
$htmlstr .= "<tr>\n";
$htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>";
$sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache");
@@ -372,6 +427,21 @@ if($command=="update" && $error!=true)
$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";
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
// If there are info about the signed document
if ($uploadedDocumentSigned != null)
{
$htmlstr .= "<tr>\n";
$htmlstr .= "<td colspan='2' style='text-align: center;'>";
$htmlstr .= '<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 15px; border: 1px solid; border-radius: 4px;">
<b>'.$uploadedDocumentSigned.'</b></td>
</div>';
$htmlstr .= "</td>";
$htmlstr .= "</tr>\n";
}
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
$htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n";
$htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>";
$htmlstr .="<tr></tr><td>&nbsp;</td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr>
-146
View File
@@ -1,146 +0,0 @@
<?php
/* Copyright (C) 2010 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: Christian Paminger < christian.paminger@technikum-wien.at >
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/studiensemester.class.php');
require_once('../../../include/studiengang.class.php');
$db = new basis_db();
$stsem = new studiensemester();
$stsem->getNextStudiensemester();
$stg = new studiengang();
$stg->getAll();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<link href="../../../include/js/tablesort/table.css" rel="stylesheet" type="text/css">
<script src="../../../include/js/tablesort/table.js" type="text/javascript"></script>
<title>Lehrveranstaltungen - &Uuml;bersicht</title>
</head>
<body>
<?php
echo '
<table class="tabcontent" id="inhalt">
<tr>
<td class="tdwidth10">&nbsp;</td>
<td>
<table class="tabcontent">
<tr>
<td class="ContentHeader">
<font class="ContentHeader">&nbsp;Lehrveranstaltungen - &Uuml;bersicht ('.$stsem->studiensemester_kurzbz.')</font>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
';
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.studiengang_kz,
tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.semester,
tbl_lehrveranstaltung.bezeichnung_english, tbl_lehrveranstaltung.incoming,
tbl_lehrveranstaltung.sprache,
(
SELECT
count(*)
FROM
campus.vw_student_lehrveranstaltung
JOIN public.tbl_student ON(uid=student_uid)
JOIN public.tbl_prestudentstatus USING(prestudent_id)
WHERE
lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND
lehreinheit_id in (SELECT lehreinheit_id FROM lehre.tbl_lehreinheit
WHERE lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
AND tbl_lehreinheit.studiensemester_kurzbz='$stsem->studiensemester_kurzbz')
AND tbl_prestudentstatus.status_kurzbz='Incoming'
AND tbl_prestudentstatus.status_kurzbz='$stsem->studiensemester_kurzbz'
GROUP BY uid
) as anzahlincoming
FROM
lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
tbl_lehrveranstaltung.incoming>0 AND
tbl_lehrveranstaltung.aktiv AND
tbl_lehrveranstaltung.lehre
AND tbl_lehrveranstaltung.studiengang_kz>0 AND tbl_lehrveranstaltung.studiengang_kz<10000
AND tbl_studiengang.aktiv
";
echo '<table width="100%" class="table-autosort:3 table-stripeclass:alternate table-autostripe">
<thead>
<tr class="liste">
<th class="table-sortable:numeric">ID</th>
<th class="table-sortable:default">Studiengang</th>
<th class="table-sortable:numeric">Semester</th>
<th class="table-sortable:numeric">Sprache</th>
<th class="table-sortable:default">Lehrveranstaltung</th>
<th class="table-sortable:default">Lehrveranstaltung Englisch</th>
<th>LV-Info</th>
<th class="table-sortable:numeric">Pl&auml;tze gesamt</th>
<th class="table-sortable:numeric">Freie Pl&auml;tze</th>
</tr>
</thead>
<tbody>';
if($result = $db->db_query($qry))
{
$i=0;
while($row = $db->db_fetch_object($result))
{
$freieplaetze = $row->incoming - $row->anzahlincoming;
if($freieplaetze<0)
$freieplaetze=0;
$i++;
echo '<tr>';
echo '<td>',$row->lehrveranstaltung_id,'</td>';
echo '<td>',$stg->kuerzel_arr[$row->studiengang_kz],'</td>';
echo '<td>',$row->semester,'</td>';
echo '<td>',$row->sprache,'</td>';
echo '<td>',$row->bezeichnung,'</td>';
echo '<td>',$row->bezeichnung_english,'</td>';
echo '<td>
<a href="#Deutsch" class="Item" onclick="javascript:window.open(\'ects/preview.php?lv='.$row->lehrveranstaltung_id.'&amp;language=de\',\'Lehrveranstaltungsinformation\',\'width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes\');return false;">Deutsch&nbsp;</a>
<a href="#Englisch" class="Item" onclick="javascript:window.open(\'ects/preview.php?lv='.$row->lehrveranstaltung_id.'&amp;language=en\',\'Lehrveranstaltungsinformation\',\'width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes\');return false;">Englisch</a>
</td>';
echo '<td>',$row->incoming,'</td>';
echo '<td>',$freieplaetze,'</td>';
echo '</tr>';
}
}
echo '</tbody></table>';
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
+2 -1
View File
@@ -353,7 +353,8 @@ function writePruefungsTable(e, data, anmeldung)
var time = termin[1].substring(0,5);
termin = termin[0].split("-");
// Studierende dürfen sich 2 Monate vor Prüfungen anmelden
// Studierende dürfen sich 2 Monate vor Prüfungen anmelden
var minimumFrist = new Date(termin[0], termin[1]-1,termin[2]);
minimumFrist.setMonth(minimumFrist.getMonth() - 2);
+1 -1
View File
@@ -234,7 +234,7 @@ if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('
if (isset($_GET['ss']))
$stsem_zahlung = $konto->getLastStSemBuchungstypen($user, $buchungstypen, $_GET['ss']);
if ((($xsl=='Inskription') || ($xsl == 'Studienblatt')) && ($_GET["ss"] != $stsem_zahlung))
if ((($xsl == 'Inskription') || ($xsl == 'InskriptionEng') || ($xsl == 'Studienblatt')) && ($_GET["ss"] != $stsem_zahlung))
{
die('Der Studienbeitrag wurde noch nicht bezahlt');
}
+9 -5
View File
@@ -244,18 +244,22 @@ if (in_array($stsem, $stsem_arr))
<th>'.$p->t('global/name').'</th>
</tr>
</thead>
<tbody><tr>';
<tbody>';
if ($stsem_zahlung != FALSE && $stsem == $stsem_zahlung)
{
$path = "../pdfExport.php?xsl=Inskription&xml=student.rdf.php&ss=".$stsem."&uid=".$uid."&xsl_stg_kz=".$xsl_stg_kz;
echo '<td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$path.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.'</a></td>';
echo '<tr><td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$path.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.' ' . $p->t('global/deutsch'). '</a></td></tr>';
$patheng = "../pdfExport.php?xsl=InskriptionEng&xml=student.rdf.php&ss=".$stsem."&uid=".$uid."&xsl_stg_kz=".$xsl_stg_kz;
echo '<tr><td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$patheng.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.' ' . $p->t('global/englisch'). '</a></td></tr>';
}
else
{
echo '<td colspan="2">'.$p->t('tools/studienbeitragFuerSSNochNichtBezahlt',array($stsem)).'</td>';
echo '<tr><td colspan="2">'.$p->t('tools/studienbeitragFuerSSNochNichtBezahlt',array($stsem)).'</td></tr>';
}
echo '</tr></tbody></table>';
echo '</tbody></table>';
if (defined('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN') && CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN)
{
+4 -4
View File
@@ -866,12 +866,12 @@ if (isset($_GET['resend']))
echo '<br><br><div class="alert alert-info" style="width: 800px">
<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 aus folgendem Link in ihren Kalender:<br>
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.'
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>
<br><br>
Die Datei enthält ihre Terminzusagen aus <u>allen laufenden Umfragen</u> in anonymisierter Form.
Die Datei enthält ihre Terminzusagen aus <b>allen laufenden Umfragen</b> .
</div>';
}
+30 -4
View File
@@ -28,13 +28,27 @@ require_once('../../include/functions.inc.php');
require_once('../../include/coodle.class.php');
require_once('../../include/ical.class.php');
$uid = mb_substr($_SERVER['PATH_INFO'],1);
$params = mb_substr($_SERVER['PATH_INFO'],1);
$paramsArray = explode('/',$params);
$private = false;
if ($paramsArray[0] == 'cipher_encryption')
{
$uid = decryptData($paramsArray[1],LVPLAN_CYPHER_KEY);
$private = true;
}
else
{
$uid = $paramsArray[0];
}
$bn = new benutzer();
if(!$bn->load($uid))
die('User invalid');
header("Content-Type: text/calendar; charset=UTF-8");
header("Content-disposition: filename=Coodle Terminzusagen.ics");
echo "BEGIN:VCALENDAR\n";
echo "VERSION:2.0\n";
@@ -80,7 +94,7 @@ foreach($umfragen->result as $umfrage)
if($ressource_id = $ressource->RessourceExists($umfrage->coodle_id, $uid))
{
// Terminvorschlaege laden die angekreuzt wurden
$termine = new coodle();
$termine = new coodle($umfrage->coodle_id);
$termine->getRessourceTermin($umfrage->coodle_id, $ressource_id);
foreach($termine->result as $termin)
{
@@ -91,10 +105,22 @@ foreach($umfragen->result as $umfrage)
$date->add($interval);
$uhrzeit_ende = $date->format('H:i:s');
$dtende = $date->format('Ymd\THis');
$ersteller = new benutzer($termine->ersteller_uid);
if ($private == true)
{
$summary = 'Coodle Terminoption '.strip_tags($termine->titel);
$description = 'Erstellt von '.$ersteller->vorname.' '.$ersteller->nachname;
}
else
{
$summary = 'Coodle Terminoption';
$description = '';
}
echo "\nBEGIN:VEVENT";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende."";
echo "\nSUMMARY:Coodle Terminoption";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende;
echo "\nSUMMARY:".$summary;
echo "\nDESCRIPTION:".$description;
echo "\nDTSTART;TZID=Europe/Vienna:$dtstart";
echo "\nDTEND;TZID=Europe/Vienna:$dtende";
echo "\nTRANSP:OPAQUE";
-15
View File
@@ -160,17 +160,6 @@
}
}
},
{
"type": "package",
"package": {
"name": "brutusin/json-forms",
"version": "1.4.0",
"dist": {
"url": "https://github.com/brutusin/json-forms/archive/v1.4.0.zip",
"type": "zip"
}
}
},
{
"type": "package",
"package": {
@@ -385,15 +374,11 @@
"jquery/jquery2": "2.*",
"jquery/sizzle": "1.0.*",
"jquery-archive/jquery-metadata": "1.0.*",
"brutusin/json-forms": "1.4.0",
"josdejong/jsoneditor": "5.5.6",
"kingsquare/json-schema-form": "*",
"ludo/jquery-treetable": "3.2.0",
"michelf/php-markdown": "1.5.0",
"ml/json-ld": "1.*",
"moment/momentjs": "2.24.0",
"mottie/tablesorter": "2.*",
Generated
+423 -355
View File
File diff suppressed because it is too large Load Diff
+20
View File
@@ -207,6 +207,26 @@ define('TABLE_ID','_id');
define('TABLE_BEGIN','tbl_');
define('VIEW_BEGIN','vw_');
/**
* Signatur
* DEFAULT: https://signatur.example.com/api/sign
*/
// Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
//Gibt an, ob das Studienbuchblatt im CIS gedruckt werden kann
define('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN',true);
+11 -3
View File
@@ -188,14 +188,22 @@ define('FHC_REST_PASSWORD', 'password');
* Signatur
* DEFAULT: https://signatur.example.com/api/sign
*/
define('SIGNATUR_URL', 'https://signatur.example.com/api/sign');
// Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'username');
define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'password');
define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
/**
* Datenverbund Anbindung
*/
+8 -1
View File
@@ -125,7 +125,8 @@ foreach($addon_obj->result as $addon)
<command id="menu-statistic-studentendetails:command" oncommand="StatistikPrintStudentExportExtended();"/>
<command id="menu-statistic-stromanalyse:command" oncommand="StatistikPrintStromanalyse();"/>
<command id="menu-dokumente-bewerberakt:command" oncommand="StudentPrintBewerberakt(event);"/>
<command id="menu-dokumente-inskriptionsbestaetigung:command" oncommand="StudentPrintInskriptionsbestaetigung(event);"/>
<command id="menu-dokumente-inskriptionsbestaetigung:command" oncommand="StudentPrintInskriptionsbestaetigung(event, 'Inskription');"/>
<command id="menu-dokumente-inskriptionsbestaetigungeng:command" oncommand="StudentPrintInskriptionsbestaetigung(event, 'InskriptionEng');"/>
<command id="menu-dokumente-zeugnis:command" oncommand="StudentCreateZeugnis('Zeugnis',event);"/>
<command id="menu-dokumente-zeugniseng:command" oncommand="StudentCreateZeugnis('ZeugnisEng',event);"/>
<command id="menu-dokumente-diplsupplement:command" oncommand="StudentCreateDiplSupplement(event);"/>
@@ -513,6 +514,12 @@ foreach($addon_obj->result as $addon)
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;"/>
<menuitem
id = "menu-statistic-lehrauftraege"
key = "menu-statistic-lehrauftraege:key"
@@ -783,6 +783,22 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-statusgrund" label="Insertamum" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-insertvon" label="Insertvon" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-updateamum" label="Updateamum" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-updatevon" label="Updatevon" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
<splitter class="tree-splitter"/>
</treecols>
<template>
@@ -804,6 +820,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<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"/>
</treerow>
</treeitem>
</treechildren>
+17 -5
View File
@@ -2191,14 +2191,26 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
// Convert bewerbung_abgeschicktamum to ISO-Date
if(bewerbung_abgeschicktamum != '')
{
if(bewerbung_abgeschicktamum.length != 19)
if(bewerbung_abgeschicktamum.length < 10)
{
bewerbung_abgeschicktamum = '';
alert('Abgeschicktdatum ist ungueltig');
return false;
}
else
{
datepart = bewerbung_abgeschicktamum.substring(0, 10);
timepart = bewerbung_abgeschicktamum.substring(11);
timepart_arr = timepart.split(':');
for (i = 0; i <= 2; i++)
{
if (typeof timepart_arr[i] === 'undefined' || timepart_arr[i].length !== 2)
{
timepart_arr[i] = '00';
}
}
arr = datepart.split('.');
if(arr[0].length==1)
@@ -2207,7 +2219,7 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
if(arr[1].length==1)
arr[1]='0'+arr[1];
bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart;
bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart_arr.join(":");
}
}
@@ -2373,7 +2385,7 @@ function StudentAddRolle(rolle, semester, studiensemester, statusgrund_id)
// ****
// * Druckt die Instkriptionsbestaetigung
// ****
function StudentPrintInskriptionsbestaetigung(event)
function StudentPrintInskriptionsbestaetigung(event, xsl)
{
tree = document.getElementById('student-tree');
//Alle markierten Studenten holen
@@ -2410,7 +2422,7 @@ function StudentPrintInskriptionsbestaetigung(event)
var output='pdf';
if(anzahl>0)
window.open('<?php echo APP_ROOT; ?>content/pdfExport.php?xml=student.rdf.php&xsl=Inskription&stg_kz='+stg_kz+'&uid='+paramList+'&ss='+stsem+'&output='+output,'Inskriptionsbestaetigung', 'height=200,width=350,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');
window.open('<?php echo APP_ROOT; ?>content/pdfExport.php?xml=student.rdf.php&xsl='+ xsl +'&stg_kz='+stg_kz+'&uid='+paramList+'&ss='+stsem+'&output='+output,'Inskriptionsbestaetigung', 'height=200,width=350,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes');
else
alert('Bitte einen Studenten auswaehlen');
}
File diff suppressed because it is too large Load Diff
+37
View File
@@ -312,5 +312,42 @@ class berechtigung extends basis_db
return false;
}
}
/**
* Sucht nach Berechtigungen
* @param string $searchItem Suchbegriff
* @return boolean
*/
public function searchBerechtigungen($searchItem)
{
$this->result=array();
$qry = 'SELECT * FROM system.tbl_berechtigung WHERE
(
LOWER(berechtigung_kurzbz) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\')
OR
LOWER(beschreibung) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\')
)';
$qry .= ' ORDER BY berechtigung_kurzbz';
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new berechtigung();
$obj->berechtigung_kurzbz = $row->berechtigung_kurzbz;
$obj->beschreibung = $row->beschreibung;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Berechtigungen';
return false;
}
}
}
?>
+2 -2
View File
@@ -1287,7 +1287,7 @@ class content extends basis_db
sichtbar=true
AND aktiv=true
AND version = (SELECT campus.get_highest_content_version (content_id))
AND template_kurzbz IN('contentmittitel','contentohnetitel','redirect')";
AND template_kurzbz IN('contentmittitel','contentohnetitel','redirect','contentmittitel_filterwidget')";
foreach($searchItems as $value)
{
$qry .= " AND
@@ -1309,7 +1309,7 @@ class content extends basis_db
foreach($searchItems as $value)
{
$qry .= " AND
(template_kurzbz IN('contentmittitel','contentohnetitel')
(template_kurzbz IN('contentmittitel','contentohnetitel','contentmittitel_filterwidget')
AND
(
lower(content::text) like lower('%".$this->db_escape($value)."%')
+8 -7
View File
@@ -557,7 +557,7 @@ class dokument_export
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL);
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL.'/'.SIGNATUR_SIGN_API);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete");
@@ -589,18 +589,19 @@ class dokument_export
curl_close($ch);
$resultdata = json_decode($result);
if (isset($resultdata->success) && $resultdata->success == 'true')
// If it is success
if (isset($resultdata->error) && $resultdata->error == 0)
{
$this->signed_filename = $this->temp_folder .'/signed.pdf';
file_put_contents($this->signed_filename, base64_decode($resultdata->document));
file_put_contents($this->signed_filename, base64_decode($resultdata->retval));
return true;
}
else
else // otherwise if it is an error
{
if(isset($resultdata->errormsg))
$this->errormsg = $resultdata->errormsg;
if(isset($resultdata->retval))
$this->errormsg = $resultdata->retval;
else
$this->errormsg = 'Unknown Error:'.print_r($resultdata,true);
$this->errormsg = 'Unknown Error:'.print_r($resultdata, true);
return false;
}
}
+15
View File
@@ -1196,4 +1196,19 @@ function anzahlTage($date1, $date2)
$diff = $date2_ts - $date1_ts;
return round($diff / 86400);
}
/**
* Gibt zurück, ob ein String ausschließlich erlaubte Zeichen enthält
* erlaubt: Buchstaben a-z, A-Z, 0-9, -, _
* @param string $stringToCheck Eingabestring
* @return boolena true or false
*/
function hasOnlyAllowedChars($stringToCheck)
{
if (!preg_match("#^[a-zA-Z0-9_-]+$#", $stringToCheck))
return false;
else
return true;
}
?>
+36
View File
@@ -834,6 +834,42 @@ class prestudent extends person
case "statusbestaetigt":
$qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null";
break;
case "statusbestaetigtrtnichtangemeldet":
$qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null
AND NOT 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)."
)";
break;
case "statusbestaetigtrtangemeldet":
$qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null
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)."
)";
break;
case "zgv":
$stg_obj = new studiengang();
$stg_obj->load($studiengang_kz);
+4 -4
View File
@@ -718,10 +718,10 @@ class projektphase extends basis_db
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
@@ -787,10 +787,10 @@ class projektphase extends basis_db
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
+38
View File
@@ -0,0 +1,38 @@
<?php
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/sprache.class.php');
class rueckstellung extends basis_db
{
public function __construct()
{
parent::__construct();
}
/**
* Löscht alle Einträge mit dem Status "parked" von der übergebenen Person_id, die in der Zukunft liegen.
* @param $person_id
* @return bool
*/
public function deleteParked($person_id)
{
$qry = "DELETE
FROM public.tbl_rueckstellung
WHERE person_id = ".$this->db_add_param($person_id)."
AND status_kurzbz = 'parked'
AND datum_bis >= now();";
if($this->db_query($qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Löschen des geparkten Eintrages';
return false;
}
}
}
?>
+4 -2
View File
@@ -52,6 +52,7 @@ class statistik extends basis_db
// Daten der Statistik
public $data; // DB ressource
public $html;
public $countRows;
public $csv;
public $json;
@@ -510,6 +511,7 @@ class statistik extends basis_db
$this->html='';
$this->csv='';
$this->json=array();
$this->countRows=0;
set_time_limit(120);
if($this->sql!='')
@@ -572,6 +574,7 @@ class statistik extends basis_db
$this->json[] = $row;
$this->html.= '</tr>';
$this->csv=substr($this->csv,0,-1)."\n";
$this->countRows++;
}
$this->html.= '</tbody>';
}
@@ -586,8 +589,7 @@ class statistik extends basis_db
function getHtmlTable($id, $class='')
{
return '<table class="'.$class.'" id="'.$id.'">'.$this->html.'</table>';
return '<p>'.$this->countRows.' Zeilen</p><table class="'.$class.'" id="'.$id.'">'.$this->html.'</table>';
}
function getCSV()
-21
View File
@@ -68,29 +68,8 @@ function checkZeilenUmbruch()
if(!defined('CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN)
{
$text='';
$qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND genehmigt=true AND sprache='".ATTR_SPRACHE_DE."' AND aktiv=true";
$need_br=false;
if($result=$db->db_query($qry))
{
if($db->db_num_rows($result)>0)
{
$text.= "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=de','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">".$p->t('global/deutsch')."&nbsp;</a>";
$need_br=true;
}
}
$qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND genehmigt=true AND sprache='".ATTR_SPRACHE_EN."' AND aktiv=true";
if($result=$db->db_query($qry))
{
if($db->db_num_rows($result)>0)
{
$row1=$db->db_fetch_object($result);
$text.= "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=en','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">".$p->t('global/englisch')."</a>";
$need_br=true;
}
}
// Bearbeiten Button anzeigen wenn Lektor der LV und bearbeiten fuer Lektoren aktiviert ist
// Oder Berechtigung zum Bearbeiten eingetragen ist
if((!defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && $lektor_der_lv)
+2 -3
View File
@@ -53,7 +53,7 @@ $menu=array
(
'name'=>'Mitarbeiter','permissions'=>array('admin','lv-plan','support'),
'Übersicht'=>array('name'=>'Zeitwünsche', 'link'=>'personen/lektor_uebersicht.php', 'target'=>'main','permissions'=>array('mitarbeiter')),
'Zeitsperren'=>array('name'=>'Zeitsperren', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre')),
'Zeitsperren'=>array('name'=>'Zeitsperren', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre:begrenzt')),
),
'Vorrueckung'=> array
@@ -119,7 +119,7 @@ $menu=array
(
'name'=>'Mitarbeiter','permissions'=>array('admin','mitarbeiter','support'),
'Übersicht'=>array('name'=>'Übersicht', 'link'=>'personen/lektor_uebersicht.php', 'target'=>'main'),
'Zeitsperren'=>array('name'=>'Zeitsperren/Urlaub', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre')),
'Zeitsperren'=>array('name'=>'Zeitsperren/Urlaub', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre:begrenzt')),
),
'Betriebsmittel'=>array('name'=>'Betriebsmittel', 'link'=>'stammdaten/betriebsmittel_frameset.php', 'target'=>'main','permissions'=>array('basis/betriebsmittel')),
'AnwesenheitslistenBarcode'=>array('name'=>'Anwesenheitslisten mit Barcodes', 'link'=>'personen/anwesenheitslisten_barcode.php', 'target'=>'main','permissions'=>array('basis/person')),
@@ -222,7 +222,6 @@ $menu=array
'name'=>'Admin', 'opener'=>'true', 'hide'=>'true', 'permissions'=>array('basis/cronjob'), 'image'=>'vilesci_admin.png',
'link'=>'left.php?categorie=Admin', 'target'=>'nav',
'Cronjobs'=>array('name'=>'Cronjobs', 'link'=>'stammdaten/cronjobverwaltung.php', 'target'=>'main','permissions'=>array('basis/cronjob')),
'Vorlagen'=>array('name'=>'Vorlagen', 'link'=>'../index.ci.php/system/Vorlage', 'target'=>'main','permissions'=>array('basis/cronjob')),
'Phrasen'=>array('name'=>'Phrasen', 'link'=>'../index.ci.php/system/Phrases', 'target'=>'main','permissions'=>array('basis/cronjob'))
)
);
+4
View File
@@ -91,5 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung heru
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='Es konnte keine gültige digitale Signatur erkannt werden. Bitte wenden Sie sich an Ihren Studiengang ob Ihre Endabgabe erfolgreich war und die Arbeit zur Benotung vorgelegt werden kann.';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signatur fehlt';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signatur vorhanden';
$this->phrasen['abgabetool/senatsMitglied']='Mitglied Prüfungssenat';
$this->phrasen['abgabetool/abgegeben']='Abgegeben, in Beurteilung';
?>
+4
View File
@@ -187,6 +187,10 @@
<!ENTITY menu-dokumente-inskriptionsbestaetigung.label "Studienbestätigung">
<!ENTITY menu-dokumente-inskriptionsbestaetigung.accesskey "I">
<!ENTITY menu-dokumente-inskriptionsbestaetigungeng.key "B">
<!ENTITY menu-dokumente-inskriptionsbestaetigungeng.label "Studienbestätigung Englisch">
<!ENTITY menu-dokumente-inskriptionsbestaetigungeng.accesskey "B">
<!ENTITY menu-dokumente-bewerberakt.key "B">
<!ENTITY menu-dokumente-bewerberakt.label "Bewerberakt">
<!ENTITY menu-dokumente-bewerberakt.accesskey "B">
+4
View File
@@ -91,5 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment downl
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='The document does not contain an electronic signature. Please inform your Dregree Programm to verify the upload';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signature not found';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signature found';
$this->phrasen['abgabetool/senatsMitglied']='Examiner';
$this->phrasen['abgabetool/abgegeben']='handed in, in assessment';
?>
+1 -1
View File
@@ -65,4 +65,4 @@ table.tablesort-hover tr:hover, .tablesort-active {
/* bring datepicker to front */
#ui-datepicker-div {
z-index: 9999 !important;
}
}
+5 -8
View File
@@ -544,13 +544,10 @@ var FHC_TableWidget = {
options.columns = arrayTabulatorColumns;
options.data = data.dataset;
if (typeof options.tableWidgetHeader == 'undefined')
{
options.persistentLayout = true; // enables persistence (default store in localStorage if available, else in cookie)
options.persistenceID = data.tableUniqueId; // TableWidget unique id to store persistence data seperately for multiple tables
}
options.movableColumns = true; // allows changing column order
options.tooltipsHeader = true; // set header tooltip with column title
options.persistence = (typeof options.persistence == 'undefined') ? true : options.persistence; // enables persistence (default store in localStorage if available, else in cookie)
options.persistenceID = (typeof options.persistenceID == 'undefined') ? data.tableUniqueId : options.persistenceID; // persistenceID to store persistence data seperately for multiple tables
options.movableColumns = (typeof options.movableColumns == 'undefined') ? true : options.movableColumns; // allows changing column order
options.tooltipsHeader = (typeof options.tooltipsHeader == 'undefined') ? true : options.tooltipsHeader; // set header tooltip with column title
options.placeholder = _func_placeholder(); // display text when table is empty
if (typeof options.rowSelectionChanged == 'undefined')
@@ -827,7 +824,7 @@ function _renderTabulatorHeaderCollapseHTML(tableWidgetDiv){
{
var field = column.getField();
var title = column.getDefinition().title;
var btn_select_col_selected = column.getVisibility() ? 'btn-select-col-selected' : '';
var btn_select_col_selected = column.isVisible() ? 'btn-select-col-selected' : '';
// If certain columns should be excluded from the column picker (define them in a blacklist array)
if (typeof tableWidgetBlacklistArray_columnUnselectable != 'undefined' &&
+1 -245
View File
@@ -15,15 +15,11 @@ const STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER = "InfocenterSTGfreigegebenSe
//Statusgründe for which no Studiengang Freigabe Message should be sent
const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027];
const PARKEDNAME = 'parked';
const ONHOLDNAME = 'onhold';
/**
* javascript file for infocenterDetails page
*/
$(document).ready(function ()
{
InfocenterDetails._formatMessageTable();
InfocenterDetails._formatNotizTable();
InfocenterDetails._formatLogTable();
@@ -88,7 +84,7 @@ $(document).ready(function ()
);
//check if person is postponed (parked, on hold...) and display it
InfocenterDetails.getPostponeDate(personid);
Rueckstellung.get(personid);
if ($(document).scrollTop() > 20)
$("#scrollToTop").show();
@@ -374,155 +370,6 @@ var InfocenterDetails = {
}
);
},
getStudienjahrEnd: function()
{
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getStudienjahrEnd",
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var engdate = $.datepicker.parseDate("yy-mm-dd", FHC_AjaxClient.getData(data)[0]);
if (engdate.getDate() === 31)
engdate.setDate(engdate.getDate() - 1);
engdate.setMonth(engdate.getMonth() + 3);
var gerdate = $.datepicker.formatDate("dd.mm.yy", engdate);
$("#postponedate").val(gerdate);
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting Studienjahr end");
},
veilTimeout: 0
}
);
},
getPostponeDate: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getPostponeDate/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var postponeobj = FHC_AjaxClient.getData(data);
InfocenterDetails._refreshPostpone(postponeobj);
InfocenterDetails._refreshLog();
if (postponeobj === null || postponeobj.type === null)
InfocenterDetails.getStudienjahrEnd();
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting parked status");
},
veilTimeout: 0
}
);
},
parkPerson: function(personid, date)
{
var parkError = function(){
$("#postponemsg").text(" Fehler beim Parken!");
};
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/park',
{
"person_id": personid,
"parkdate": date
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getPostponeDate(personid);
else
{
parkError();
}
},
errorCallback: parkError,
veilTimeout: 0
}
);
},
unparkPerson: function(personid)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/unpark',
{
"person_id": personid
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumAusparken'));
},
errorCallback: function(){
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimAusparken'));
},
veilTimeout: 0
}
);
},
setPersonOnHold: function(personid, date)
{
var onHoldError = function(){
$("#postponemsg").text(" Fehler beim Setzen auf On Hold!");
};
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/setOnHold',
{
"person_id": personid,
"onholddate": date
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getPostponeDate(personid);
else
{
onHoldError();
}
},
errorCallback: onHoldError,
veilTimeout: 0
}
);
},
removePersonOnHold: function(personid)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/removeOnHold',
{
"person_id": personid
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
);
},
getPrestudentData: function(personid, callback)
{
FHC_AjaxClient.ajaxCallGet(
@@ -943,97 +790,6 @@ var InfocenterDetails = {
}
);
},
_refreshPostpone: function(postponeobj)
{
var personid = $("#hiddenpersonid").val();
if (postponeobj === null || postponeobj.date === null || postponeobj.type === null)
{
//show both park and on hold buttons if not parked and not on hold
$("#postponing").html(
'<div class="form-group form-inline">'+
'<button class="btn btn-default" id="parklink" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberParken') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="onholdlink" type="button""><i class="fa fa-anchor"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberOnHold') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<label id="postponedatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="postponedate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="postponemsg"></span>'+
'</div>');
$("#postponedate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 1
});
$("#parklink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.parkPerson(personid, date);
}
);
$("#onholdlink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.setPersonOnHold(personid, date);
}
);
}
else
{
//info if parked/on hold and possibility to undo parking/on hold
var postponedate = $.datepicker.parseDate("yy-mm-dd", postponeobj.date);
var gerpostponedate = $.datepicker.formatDate("dd.mm.yy", postponedate);
//var postponehtml = "";
var callbackforundo = null;
var removePhrase = "";
var postponedPhrase = "";
var postponedtext = "";
if (postponeobj.type === PARKEDNAME)
{
removePhrase = 'bewerberAusparken';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberGeparktBis')+'&nbsp;&nbsp;'+gerpostponedate;
callbackforundo = function ()
{
InfocenterDetails.unparkPerson(personid);
}
}
else if (postponeobj.type === ONHOLDNAME)
{
removePhrase = 'bewerberOnHoldEntfernen';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberOnHoldBis')+'&nbsp;&nbsp;'+gerpostponedate;
var currdate = new Date();
if (currdate > postponedate)
postponedtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'rueckstelldatumUeberschritten')+"'>"+postponedtext+"</span>";
callbackforundo = function ()
{
InfocenterDetails.removePersonOnHold(personid);
}
}
var postponehtml = postponedtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unpostponelink"><i class="fa fa-sign-out"></i>&nbsp;'+FHC_PhrasesLib.t('infocenter', removePhrase)+'</button>&nbsp;'+
'<span id="unpostponemsg"></span>';
$("#postponing").html(
postponehtml
);
$("#unpostponelink").click(
callbackforundo
);
}
},
_formatMessageTable: function()
{
Tablesort.addTablesorter("msgtable", [[0, 1], [2, 0]], ["zebra", "filter"], 2);
+185
View File
@@ -0,0 +1,185 @@
const CONTROLLER_RUECKSTELLUNG_URL = "system/infocenter/Rueckstellung";
var Rueckstellung = {
get: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/get/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var rueckstellungobj = FHC_AjaxClient.getData(data);
Rueckstellung._refreshRueckstellung(rueckstellungobj);
}
else
{
Rueckstellung._addRueckstellungButtons();
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
getStatus: function()
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/getStatus",
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
let status = FHC_AjaxClient.getData(data);
$.each(status, function(key, value)
{
$('#rueckstellungtype').append($("<option/>")
.val(value.status_kurzbz)
.text(value.bezeichnung_mehrsprachig[0])
)
});
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
set: function(personid, date, type)
{
if (type === null)
return false;
var onRueckstellungError = function(){
$("#rueckstellungmsg").text(" Fehler beim Setzen auf " + type + "!");
};
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/set',
{
"person_id": personid,
"datum_bis": date,
"status_kurzbz": type,
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
InfocenterDetails._refreshLog()
}
else
{
onRueckstellungError();
}
},
errorCallback: onRueckstellungError,
veilTimeout: 0
}
);
},
delete: function(personid, status = null)
{
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/delete',
{
"person_id": personid,
"status": status
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
}
else
$("#unrueckstellungmsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unrueckstellungmsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
);
},
_refreshRueckstellung: function(rueckstellungobj)
{
var personid = $("#hiddenpersonid").val();
var rueckstellungdate = $.datepicker.parseDate("yy-mm-dd", rueckstellungobj.bis);
var gerrueckstellungdate = $.datepicker.formatDate("dd.mm.yy", rueckstellungdate);
var removetext = FHC_PhrasesLib.t('infocenter', 'statusZuruecksetzen');
var rueckstellungdtext = FHC_PhrasesLib.t('global', 'status') + ": '" + rueckstellungobj.bezeichnung + "' " + FHC_PhrasesLib.t('global', 'bis') + ": " + gerrueckstellungdate +
" " + FHC_PhrasesLib.t('ui', 'von') + ": " + rueckstellungobj.von;
var currdate = new Date();
if (currdate > rueckstellungdate)
rueckstellungdtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'datumuberschritten')+"'>"+rueckstellungdtext+"</span>";
var callbackforundo = function ()
{
Rueckstellung.delete(personid, rueckstellungobj.status_kurzbz);
}
var rueckstellunghtml = rueckstellungdtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unrueckstellunglink"><i class="fa fa-sign-out"></i>&nbsp;' + removetext +'</button>&nbsp;'+
'<span id="unrueckstellungmsg"></span>';
$("#postponing").html(
rueckstellunghtml
);
$("#unrueckstellunglink").click(
callbackforundo
);
},
_addRueckstellungButtons: function()
{
var personid = $("#hiddenpersonid").val();
$("#postponing").html(
'<div class="form-group form-inline">'+
'<div class="form-group">' +
'<select id="rueckstellungtype" class="form-control">' +
'<option disabled selected>' + FHC_PhrasesLib.t('infocenter', 'statusAuswahl') + '</option>' +
'</select>' + '&nbsp;&nbsp;' +
'<button class="btn btn-default" id="addRueckstellung" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'statusSetzen') + '</button>&nbsp;'+
'<label id="rueckstellungdatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="rueckstellungdate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="rueckstellungmsg"></span>'+
'</div>' +
'</div>');
Rueckstellung.getStatus();
var rueckstelldate = new Date();
rueckstelldate.setDate(rueckstelldate.getDate() + 14);
$('#rueckstellungdate').attr("value", $.datepicker.formatDate("dd.mm.yy", rueckstelldate));
$("#rueckstellungdate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 1
});
$("#addRueckstellung").click(
function ()
{
var date = $("#rueckstellungdate").val();
var type = $("#rueckstellungtype").val();
Rueckstellung.set(personid, date, type);
}
);
},
}
+2 -2
View File
@@ -140,7 +140,7 @@ var zgvUeberpruefung = {
var datum = new Date();
datum.setDate(datum.getDate() + 14);
var formatedDate = $.datepicker.formatDate("mm/dd/yy", datum);
InfocenterDetails.setPersonOnHold(response.person_id, formatedDate);
Rueckstellung.set(response.person_id, formatedDate, 'onhold_zgv');
}
InfocenterDetails._refreshLog();
@@ -171,7 +171,7 @@ var zgvUeberpruefung = {
var response = FHC_AjaxClient.getData(data)
if (response.openZgv === false)
InfocenterDetails.removePersonOnHold(response.person_id);
Rueckstellung.delete(response.person_id, 'onhold_zgv');
FHC_DialogLib.alertSuccess(response.msg);
} else if (FHC_AjaxClient.isError(data))
@@ -0,0 +1,242 @@
// TABULATOR
// ---------------------------------------------------------------------------------------------------------------------
// Add Edit and Update Buttons to table rows
function func_tableBuilt(table) {
table.addColumn(
{
title: "Aktion",
align: "center",
width: 150,
formatter: addActionButtons,
}, false // place column right
);
}
// Returns relative height (depending on screen size)
function func_height(table){
return $(window).height() * 0.50;
}
// Converts string date postgre style to string DD.MM.YYYY.
// This will allow correct filtering.
var formatDate = function(cell, formatterParams){
let postgreDate = cell.getValue();
if (postgreDate != null)
{
var d = new Date(postgreDate);
return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear();
}
}
// Create Edit and Update Buttons for table rows
var addActionButtons = function(cell) {
// Create edit button
var editBtn = document.createElement("button");
editBtn.type = "button";
editBtn.innerHTML = "<i class=\"fa fa-edit\"></i>";
editBtn.classList.add("azrEditBtn");
editBtn.classList.add("btn");
editBtn.classList.add("btn-default");
editBtn.addEventListener("click", function(){
adminAnrechnung.editRow(cell);
});
// Create delete button
var delBtn= document.createElement("button");
delBtn.type = "button";
delBtn.innerHTML = "<i class=\"fa fa-times\"></i>";
delBtn.classList.add("azrDeleteBtn");
delBtn.classList.add("btn");
delBtn.classList.add("btn-default");
delBtn.style.marginLeft = '5px';
delBtn.addEventListener("click", function(){
adminAnrechnung.deleteRow(cell);
});
// Add buttons to cell
var buttonHolder = document.createElement("span");
buttonHolder.appendChild(editBtn);
buttonHolder.appendChild(delBtn);
return buttonHolder;
}
// ---------------------------------------------------------------------------------------------------------------------
$(function () {
// Empty Modal fields on 'Anrechnungszeitraum hinzufuegen'
$(document).on('click', '.azrOpenModal', function(){
let defaultStudiensemester_kurzbz = $('.modal-body #defaultStudiensemester_kurzbz').val();
$('.modal-header #azrModalLabel').text(FHC_PhrasesLib.t("anrechnung", "anrechnungszeitraumHinzufuegen"));
$('.modal-body #anrechnungszeitraum_id').val('');
$('.modal-body #studiensemester').val(defaultStudiensemester_kurzbz).change();
$('.modal-body #azrStart').val('');
$('.modal-body #azrEnde').val('');
});
// Insert Anrechnungszeitraum
$(document).on('click', '#azrInsertBtn', function(){
var studiensemester_kurzbz = $('.modal-body #studiensemester').val();
var anrechnungstart = $('.modal-body #azrStart').val();
var anrechnungende = $('.modal-body #azrEnde').val();
// Insert Anrechnungszeitraum
adminAnrechnung.insertAzr(studiensemester_kurzbz, anrechnungstart, anrechnungende);
});
})
var adminAnrechnung = {
insertAzr: function(studiensemester_kurzbz, anrechnungstart, anrechnungende){
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/save",
{
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
data = FHC_AjaxClient.getData(data);
// Update row
$('#tableWidgetTabulator').tabulator('addData', [{
anrechnungszeitraum_id: data.anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
}], true); // true to add row on top
// Close Modal
$('#azrModal').modal('hide');
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "gespeichert"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
editRow: function (cell){
// Open Modal
$('#azrModal').modal('show');
let row = cell.getRow();
var anrechnungszeitraum_id = row.getData().anrechnungszeitraum_id;
var studiensemester_kurzbz = row.getData().studiensemester_kurzbz;
var anrechnungstart = row.getData().anrechnungstart;
var anrechnungende = row.getData().anrechnungende;
$('.modal-header #azrModalLabel').text('Anrechnungszeitraum bearbeiten');
$('.modal-body #anrechnungszeitraum_id').val(anrechnungszeitraum_id);
$('.modal-body #studiensemester').val(studiensemester_kurzbz).change();
$('.modal-body #azrStart').val(anrechnungstart);
$('.modal-body #azrEnde').val(anrechnungende);
},
updateAzr: function (anrechnungszeitraum_id, studiensemester_kurzbz, anrechnungstart, anrechnungende) {
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/edit",
{
anrechnungszeitraum_id: anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
// Update row
$('#tableWidgetTabulator').tabulator('updateData', [{
anrechnungszeitraum_id: anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
}]);
// Close Modal
$('#azrModal').modal('hide');
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "gespeichert"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
deleteAzr: function(anrechnungszeitraum_id){
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/delete",
{
anrechnungszeitraum_id: anrechnungszeitraum_id
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
let row = $('#tableWidgetTabulator').tabulator('getRow', anrechnungszeitraum_id);
row.delete(anrechnungszeitraum_id);
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "geloescht"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
deleteRow: function (cell){
if(!confirm(FHC_PhrasesLib.t("ui", "frageSicherLoeschen")))
{
return;
}
// Delete Anrechnungszeitraum
adminAnrechnung.deleteAzr(cell.getRow().getData().anrechnungszeitraum_id);
}
}
@@ -141,6 +141,13 @@ $(function(){
return;
}
// Check if forgot to fulfill begruendung
if (begruendung.trim().endsWith('weil') || begruendung.endsWith('because of'))
{
FHC_DialogLib.alertInfo(FHC_PhrasesLib.t("ui", "bitteBegruendungVervollstaendigen"));
return;
}
// Get form data
let form_data = $('form').serializeArray();
@@ -194,17 +201,9 @@ $(function(){
// Get form data
let form_data = $('#form-empfehlung').serializeArray();
// Prepare data object for ajax call
let data = {
'data': [{
'anrechnung_id' : form_data[0].value
}]
};
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation",
data,
{anrechnung_id: form_data[0].value},
{
successCallback: function (data, textStatus, jqXHR)
{
@@ -471,11 +470,27 @@ var approveAnrechnungDetail = {
textarea.val($.trim($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text()));
return;
}
else
// Find Begruendung span
let textspan = $(elem).parent().find('span:first');
// Get Begruendung
let begruendung = textspan.text();
// Check if Begruendung has helptext
let hasHelptext = textspan.children('span #helpTxtBegruendungErgaenzen').length > 0;
if (hasHelptext)
{
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().find('span:first').text()));
let helptext = textspan.children('span #helpTxtBegruendungErgaenzen').text();
// Remove helptext
begruendung = begruendung.replace(helptext, '');
}
// Copy begruendung into textarea and set focus
textarea.val($.trim(begruendung)).focus();
},
formatEmpfehlungIsRequested: function(statusBezeichnung, empfehlungsanfrageAm, empfehlungsanfrageAn) {
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html(empfehlungsanfrageAm);
@@ -57,6 +57,12 @@ function hf_filterTrueFalse(headerValue, rowValue){
}
}
// Filters schreibberechtigt boolean values
function hf_schreibberechtigt(headerValue, rowValue){
return rowValue == headerValue.toString();
}
// Adds column details
// Sets focus on filterbutton, if table starts with stored filter.
function func_tableBuilt(table) {
@@ -173,19 +179,22 @@ function func_selectableCheck(row){
// data = selected data, rows = selected rows
function func_rowSelectionChanged(data, rows){
// Sum up over all anzurechnenden LV-ECTS by Prestudent
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
if (tabulator != null)
{
// Sum up over all anzurechnenden LV-ECTS by Prestudent
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
// Loop through all active rows
var rowManager = tabulator.rowManager;
for (var i = 0; i < rowManager.activeRows.length; i++) {
// Loop through all active rows
var rowManager = tabulator.rowManager;
for (var i = 0; i < rowManager.activeRows.length; i++) {
// Reinitialize row -> triggers formatters.
rowManager.activeRows[i].reinitialize();
// Reinitialize row -> triggers formatters.
rowManager.activeRows[i].reinitialize();
}
// Show number of selected rows.
approveAnrechnung.showNumberSelectedRows(rows);
}
// Show number of selected rows.
approveAnrechnung.showNumberSelectedRows(rows);
}
// Returns tooltip
@@ -570,12 +579,8 @@ $(function(){
}
}
selected_data.map(function(data){
// reduce to necessary fields
return {
'anrechnung_id' : data.anrechnung_id,
}
});
// Reduce to necessary fields
selected_data = selected_data.map(data => ({'anrechnung_id' : data.anrechnung_id}));
// Alert and exit if no anrechnung is selected
if (selected_data.length == 0)
@@ -584,14 +589,9 @@ $(function(){
return;
}
// Prepare data object for ajax call
let data = {
'data': selected_data
};
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation",
data,
{data: selected_data},
{
successCallback: function (data, textStatus, jqXHR)
{
@@ -617,14 +617,14 @@ $(function(){
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert"));
}
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
}
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
@@ -701,8 +701,8 @@ var approveAnrechnung = {
// Find closest textarea
let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().text()));
// Copy begruendung into textarea and set focus
textarea.val($.trim($(elem).parent().text())).focus();
},
focusFilterbuttonIfTableStartsWithStoredFilter(filters){
switch (filters[0].value) {
@@ -133,6 +133,13 @@ $(function(){
return;
}
// Check if forgot to fulfill begruendung
if (begruendung.trim().endsWith('weil') || begruendung.endsWith('because of'))
{
FHC_DialogLib.alertInfo(FHC_PhrasesLib.t("ui", "bitteBegruendungVervollstaendigen"));
return;
}
// Get form data
let form_data = $('form').serializeArray();
@@ -241,8 +248,26 @@ var reviewAnrechnung = {
// Find closest textarea
let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().find('span:first').text()));
// Find Begruendung span
let textspan = $(elem).parent().find('span:first');
// Get Begruendung
let begruendung = textspan.text();
// Check if Begruendung has helptext
let hasHelptext = textspan.children('span #helpTxtBegruendungErgaenzen').length > 0;
if (hasHelptext)
{
let helptext = textspan.children('span #helpTxtBegruendungErgaenzen').text();
// Remove helptext
begruendung = begruendung.replace(helptext, '');
}
// Copy begruendung into textarea and set focus
textarea.val($.trim(begruendung)).focus();
},
formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){
$('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
@@ -51,6 +51,12 @@ function hf_filterTrueFalse(headerValue, rowValue){
}
}
// Filters empfehlungsberechtigt boolean values
function hf_empfehlungsberechtigt(headerValue, rowValue){
return rowValue == headerValue.toString();
}
// Adds column details
function func_tableBuilt(table) {
table.addColumn(
@@ -74,9 +80,10 @@ function func_tableBuilt(table) {
// Formats the rows
function func_rowFormatter(row){
let status_kurzbz = row.getData().status_kurzbz;
let empfehlungsberechtigt = row.getData().empfehlungsberechtigt;
row.getCells().forEach(function(cell){
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR)
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false")
{
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
}
@@ -86,9 +93,10 @@ function func_rowFormatter(row){
// Formats row selectable/unselectable
function func_selectableCheck(row){
let status_kurzbz = row.getData().status_kurzbz;
let empfehlungsberechtigt = row.getData().empfehlungsberechtigt;
return (
status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false"
);
}
@@ -441,7 +449,7 @@ var reviewAnrechnung = {
// Find closest textarea
let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().text()));
// Copy begruendung into textarea and set focus
textarea.val($.trim($(elem).parent().text())).focus();
}
}
+5 -5
View File
@@ -257,7 +257,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
if($row->typ=='d')
{
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHStG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Diplomarbeit zu verfassen und eine abschließende Prüfung (Diplomprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of a diploma theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -269,7 +269,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='m')
{
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Die fachliche Zugangsvoraussetzung (vgl. §4 Abs. 2 FHStG idgF) zu einem FH-Masterstudiengang ist ein abgeschlossener facheinschlägiger FH-Bachelorstudiengang oder der Abschluss eines gleichwertigen Studiums an einer anerkannten inländischen oder ausländischen postsekundären Bildungseinrichtung. Die Aufnahme in den Studiengang erfolgt auf Basis eines Auswahlverfahrens.]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Die fachliche Zugangsvoraussetzung (vgl. §4 Abs. 2 FHG idgF) zu einem FH-Masterstudiengang ist ein abgeschlossener facheinschlägiger FH-Bachelorstudiengang oder der Abschluss eines gleichwertigen Studiums an einer anerkannten inländischen oder ausländischen postsekundären Bildungseinrichtung. Die Aufnahme in den Studiengang erfolgt auf Basis eines Auswahlverfahrens.]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[ Admission to the master\'s degree program is granted on the basis of the successful completion of a relevant bachelor\'s degree program or a comparable Austrian or foreign post-secondary degree acknowledged to be its equivalent. Admission is on the basis of a selection process. ]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Studiums ist eine Masterarbeit zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. The degree is awarded upon the successful completion of a Master´s Thesis and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -281,7 +281,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='b')
{
echo ' <niveau_code>UNESCO ISCED 6</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHStG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process. (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Bachelorarbeit zu verfassen und eine abschließende Prüfung (Bachelorprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of 1 bachelor theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -299,8 +299,8 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='l' || $row->typ=='k' || $row->typ=='e')
{
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <niveau_deutsch>Lehrgang zur Weiterbildung nach §9 FHStG idgF.</niveau_deutsch>';
echo ' <niveau_englisch>Certificate Program for Further Education subjected to § 9 FHStG</niveau_englisch>';
echo ' <niveau_deutsch>Lehrgang zur Weiterbildung nach §9 FHG idgF.</niveau_deutsch>';
echo ' <niveau_englisch>Certificate Program for Further Education subjected to § 9 FHG</niveau_englisch>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Facheinschlägiger Studienabschluss oder einschlägige Berufserfahrung]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Appropriate university degree or appropriate work experience]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß der laut Studienplan vorgeschriebenen ECTS. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Master-Lehrgangs ist eine Master Thesis zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Lehrgang ist vom Kollegium der FH Technikum Wien genehmigt und der AQ Austria (Kennzahl '.$studiengang_kz.') gemeldet.]]></anforderungen_deutsch>';
+46 -2
View File
@@ -246,6 +246,24 @@ function draw_orgformsubmenu($stg_kz, $orgform)
<VERBAND:orgform><![CDATA['.$orgform.']]></VERBAND:orgform>
</RDF:Description>
<RDF:Description RDF:about="'.$rdf_url.$stg_kurzbz.'/'.$orgform.'/'.$stsem->studiensemester_kurzbz.'/interessenten/statusbestaetigt/reihungstestnichtangemeldet" >
<VERBAND:name>Nicht zum Reihungstest angemeldet</VERBAND:name>
<VERBAND:stg><![CDATA['.$stg_kurzbz.']]></VERBAND:stg>
<VERBAND:stg_kz><![CDATA['.$stg_kz.']]></VERBAND:stg_kz>
<VERBAND:stsem><![CDATA['.$stsem->studiensemester_kurzbz.']]></VERBAND:stsem>
<VERBAND:typ>statusbestaetigtrtnichtangemeldet</VERBAND:typ>
<VERBAND:orgform><![CDATA['.$orgform.']]></VERBAND:orgform>
</RDF:Description>
<RDF:Description RDF:about="'.$rdf_url.$stg_kurzbz.'/'.$orgform.'/'.$stsem->studiensemester_kurzbz.'/interessenten/statusbestaetigt/reihungstestangemeldet" >
<VERBAND:name>Reihungstest angemeldet</VERBAND:name>
<VERBAND:stg><![CDATA['.$stg_kurzbz.']]></VERBAND:stg>
<VERBAND:stg_kz><![CDATA['.$stg_kz.']]></VERBAND:stg_kz>
<VERBAND:stsem><![CDATA['.$stsem->studiensemester_kurzbz.']]></VERBAND:stsem>
<VERBAND:typ>statusbestaetigtrtangemeldet</VERBAND:typ>
<VERBAND:orgform><![CDATA['.$orgform.']]></VERBAND:orgform>
</RDF:Description>
<RDF:Description RDF:about="'.$rdf_url.$stg_kurzbz.'/'.$orgform.'/'.$stsem->studiensemester_kurzbz.'/interessenten/reihungstestnichtangemeldet" >
<VERBAND:name>Nicht zum Reihungstest angemeldet</VERBAND:name>
<VERBAND:stg><![CDATA['.$stg_kurzbz.']]></VERBAND:stg>
@@ -316,7 +334,12 @@ function draw_orgformsubmenu($stg_kz, $orgform)
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/bewerbungnichtabgeschickt\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/bewerbungabgeschickt\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/zgv\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t<RDF:li>";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:Seq RDF:about=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt\">\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestnichtangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t</RDF:Seq>";
$orgform_sequence[$stg_kz].= "\n\t\t\t</RDF:li>\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/reihungstestnichtangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$orgform/$stsem->studiensemester_kurzbz/interessenten/reihungstestangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t</RDF:Seq>";
@@ -561,6 +584,22 @@ while ($row=$dbo->db_fetch_object())
<VERBAND:typ><![CDATA[statusbestaetigt]]></VERBAND:typ>
</RDF:Description>
<RDF:Description RDF:about="<?php echo $rdf_url.$stg_kurzbz.'/'.$stsem->studiensemester_kurzbz.'/interessenten/statusbestaetigt/reihungstestnichtangemeldet'; ?>" >
<VERBAND:name><![CDATA[Nicht zum Reihungstest angemeldet]]></VERBAND:name>
<VERBAND:stg><![CDATA[<?php echo $stg_kurzbz; ?>]]></VERBAND:stg>
<VERBAND:stg_kz><![CDATA[<?php echo $row->studiengang_kz; ?>]]></VERBAND:stg_kz>
<VERBAND:stsem><![CDATA[<?php echo $stsem->studiensemester_kurzbz; ?>]]></VERBAND:stsem>
<VERBAND:typ><![CDATA[statusbestaetigtrtnichtangemeldet]]></VERBAND:typ>
</RDF:Description>
<RDF:Description RDF:about="<?php echo $rdf_url.$stg_kurzbz.'/'.$stsem->studiensemester_kurzbz.'/interessenten/statusbestaetigt/reihungstestangemeldet'; ?>" >
<VERBAND:name><![CDATA[Reihungstest angemeldet]]></VERBAND:name>
<VERBAND:stg><![CDATA[<?php echo $stg_kurzbz; ?>]]></VERBAND:stg>
<VERBAND:stg_kz><![CDATA[<?php echo $row->studiengang_kz; ?>]]></VERBAND:stg_kz>
<VERBAND:stsem><![CDATA[<?php echo $stsem->studiensemester_kurzbz; ?>]]></VERBAND:stsem>
<VERBAND:typ><![CDATA[statusbestaetigtrtangemeldet]]></VERBAND:typ>
</RDF:Description>
<RDF:Description RDF:about="<?php echo $rdf_url.$stg_kurzbz.'/'.$stsem->studiensemester_kurzbz.'/interessenten/reihungstestnichtangemeldet'; ?>" >
<VERBAND:name><![CDATA[Nicht zum Reihungstest angemeldet]]></VERBAND:name>
<VERBAND:stg><![CDATA[<?php echo $stg_kurzbz; ?>]]></VERBAND:stg>
@@ -783,7 +822,12 @@ draw_orgformpart($stg_kz);
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/bewerbungnichtabgeschickt\" />\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/bewerbungabgeschickt\" />\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/zgv\" />\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt\" />\n";
echo "\t\t\t<RDF:li>";
echo "\t\t\t\t<RDF:Seq RDF:about=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt\">\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestnichtangemeldet\" />\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestangemeldet\" />\n";
echo "\t\t\t\t</RDF:Seq>";
echo "\n\t\t\t</RDF:li>\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/reihungstestnichtangemeldet\" />\n";
echo "\t\t\t\t<RDF:li RDF:resource=\"$rdf_url$stg_kurzbz/$stsem->studiensemester_kurzbz/interessenten/reihungstestangemeldet\" />\n";
echo "\t\t\t\t</RDF:Seq>";
+4
View File
@@ -119,6 +119,10 @@ foreach($ps->result as $row)
<ROLLE:statusgrund_id><![CDATA['.$row->statusgrund_id.']]></ROLLE:statusgrund_id>
<ROLLE:statusgrund><![CDATA['.(isset($statusgrund_arr[$row->statusgrund_id])?$statusgrund_arr[$row->statusgrund_id]:'').']]></ROLLE:statusgrund>
<ROLLE:lehrverband><![CDATA['.$lehrverband.']]></ROLLE:lehrverband>
<ROLLE:insertamum><![CDATA['.$datum->formatDatum($row->insertamum,'d.m.Y H:i:s').']]></ROLLE:insertamum>
<ROLLE:insertvon><![CDATA['.$row->insertvon.']]></ROLLE:insertvon>
<ROLLE:updateamum><![CDATA['.$datum->formatDatum($row->updateamum,'d.m.Y H:i:s').']]></ROLLE:updateamum>
<ROLLE:updatevon><![CDATA['.$row->updatevon.']]></ROLLE:updatevon>
</RDF:Description>
</RDF:li>
';
+21 -1
View File
@@ -737,7 +737,7 @@ if($xmlformat=='rdf')
}
elseif(in_array($typ, array('prestudent', 'interessenten', 'bewerber', 'aufgenommen',
'warteliste', 'absage', 'zgv', 'reihungstestangemeldet', 'reihungstestnichtangemeldet', 'absolvent',
'diplomand', 'bewerbungnichtabgeschickt', 'bewerbungabgeschickt', 'statusbestaetigt')))
'diplomand', 'bewerbungnichtabgeschickt', 'bewerbungabgeschickt', 'statusbestaetigt', 'statusbestaetigtrtnichtangemeldet', 'statusbestaetigtrtangemeldet')))
{
$prestd = new prestudent();
@@ -939,6 +939,8 @@ if($xmlformat=='rdf')
UPPER(nachname || ' ' || vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(nachname || ' ' || wahlname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(wahlname || ' ' || nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
student_uid ~* LOWER(".$db->db_add_param($searchItems_string).")";
}
else
@@ -1195,6 +1197,20 @@ else
else
$studienjahr = intval($semester/2)+1;
$abbrecher = ($prestudent->status_kurzbz === 'Abbrecher' ? 'true' : 'false');
$abbrecher_ende = '';
$studiensemester_abbrecher_kurzbz='';
$qry = "SELECT * FROM public.tbl_prestudentstatus
WHERE prestudent_id='$student->prestudent_id' AND status_kurzbz = 'Abbrecher' ORDER BY datum LIMIT 1";
if($db->db_query($qry))
{
if($row = $db->db_fetch_object())
{
$abbrecher_ende = $row->datum;
$studiensemester_abbrecher_kurzbz = $row->studiensemester_kurzbz;
}
}
echo '
<student>
<uid><![CDATA['.$student->uid.']]></uid>
@@ -1218,6 +1234,7 @@ else
<student_orgform_bezeichnung><![CDATA['.$orgform_student_bezeichnung->bezeichnung.']]></student_orgform_bezeichnung>
<studiengang_kz><![CDATA['.$stg_kz.']]></studiengang_kz>
<studiengang_bezeichnung><![CDATA['.$studiengang->bezeichnung.']]></studiengang_bezeichnung>
<studiengang_bezeichnung_eng><![CDATA['.$studiengang->english.']]></studiengang_bezeichnung_eng>
<studiengang_art><![CDATA['.$typ.']]></studiengang_art>
<studiengang_typ><![CDATA['.$studiengang->typ.']]></studiengang_typ>
<studiengang_orgform_kurzbz><![CDATA['.$studiengang->orgform_kurzbz.']]></studiengang_orgform_kurzbz>
@@ -1241,6 +1258,9 @@ else
<studienjahr_kurzbz><![CDATA['.$stsem->studienjahr_kurzbz.']]></studienjahr_kurzbz>
<studiensemester_aktuell_bezeichnung><![CDATA['.$stsem->bezeichnung.']]></studiensemester_aktuell_bezeichnung>
<studienbeginn_aktuell><![CDATA['.$datum_obj->convertISODate($stsem->start).']]></studienbeginn_aktuell>
<abbrecher><![CDATA['.$abbrecher.']]></abbrecher>
<abbrecher_ende><![CDATA['.$datum_obj->convertISODate($abbrecher_ende).']]></abbrecher_ende>
<studiensemester_abbrecher_kurzbz><![CDATA['.$studiensemester_abbrecher_kurzbz.']]></studiensemester_abbrecher_kurzbz>
<tagesdatum><![CDATA['.date('d.m.Y').']]></tagesdatum>
<max_semester><![CDATA['.$studiengang->max_semester.']]></max_semester>
<anmerkungpre><![CDATA['.$prestudent->anmerkung.']]></anmerkungpre>
+4
View File
@@ -31,7 +31,10 @@ require_once('dbupdate_3.4/example2.php');
require_once('dbupdate_3.4/26173_index_webservicelog.php');
require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
require_once('dbupdate_3.4/17512_fehlercode_constraints.php');
require_once('dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php');
require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php');
require_once('dbupdate_3.4/27949_infocenter_zurueckstellen_mit_grund.php');
require_once('dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -146,6 +149,7 @@ $tabellen=array(
"lehre.tbl_anrechnungstatus" => array("status_kurzbz", "bezeichnung_mehrsprachig"),
"lehre.tbl_anrechnung_anrechnungstatus" => array("anrechnungstatus_id", "anrechnung_id", "status_kurzbz", "datum", "insertamum", "insertvon"),
"lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"),
"lehre.tbl_anrechnungszeitraum" => array("anrechnungszeitraum_id","studiensemester_kurzbz","anrechnungstart","anrechnungende", "insertamum", "insertvon"),
"lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"),
"lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"),
"lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"),
@@ -0,0 +1,16 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// system.tbl_berechtigung: add berechtigung mitarbeiter/zeitsperre:begrenzt
if($result = $db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz='mitarbeiter/zeitsperre:begrenzt'"))
{
if($db->db_num_rows($result)==0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('mitarbeiter/zeitsperre:begrenzt', 'Vilesci Verwaltung');";
if(!$db->db_query($qry))
echo '<strong>Berechtigung: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue Berechtigung mitarbeiter/zeitsperre:begrenzt zu system.tbl_berechtigung hinzugefügt';
}
}
@@ -0,0 +1,57 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
if (!$result = @$db->db_query('SELECT 1 FROM lehre.tbl_anrechnungszeitraum LIMIT 1'))
{
$qry = 'CREATE TABLE lehre.tbl_anrechnungszeitraum
(
anrechnungszeitraum_id integer,
studiensemester_kurzbz varchar(16) NOT NULL,
anrechnungstart date,
anrechnungende date,
insertamum timestamp default NOW(),
insertvon varchar(32)
);
COMMENT ON TABLE lehre.tbl_anrechnungszeitraum IS \'Zeitfenster fuer Anrechnungen pro Studiensemester\';
COMMENT ON COLUMN lehre.tbl_anrechnungszeitraum.anrechnungstart IS \'Zeitfenster Startdatum\';
COMMENT ON COLUMN lehre.tbl_anrechnungszeitraum.anrechnungende IS \'Zeitfenster Enddatum\';
ALTER TABLE lehre.tbl_anrechnungszeitraum ADD CONSTRAINT pk_anrechnungszeitraum PRIMARY KEY (anrechnungszeitraum_id);
ALTER TABLE lehre.tbl_anrechnungszeitraum ADD CONSTRAINT fk_anrechnungszeitraum_studiensemester_kurzbz FOREIGN KEY (studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
CREATE SEQUENCE lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE lehre.tbl_anrechnungszeitraum ALTER COLUMN anrechnungszeitraum_id SET DEFAULT nextval(\'lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id\');
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungszeitraum TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungszeitraum TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id TO web;
';
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnungszeitraum: '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnungszeitraum: Tabelle hinzugefuegt<br>';
}
// Add permission to admin Anrechnungen
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/anrechnungszeitfenster';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnungszeitfenster', 'Anrechnungszeitfenster anlegen');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_berechtigung: Added permission for lehre/anrechnungszeitfenster<br>';
}
}
@@ -0,0 +1,85 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add table tbl_rueckstellung_status
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung_status LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung_status
(
status_kurzbz character varying(32),
bezeichnung_mehrsprachig character varying(256)[],
sort integer,
aktiv boolean default true
);
ALTER TABLE public.tbl_rueckstellung_status ADD CONSTRAINT pk_tbl_postpone_status_status_kurzbz PRIMARY KEY (status_kurzbz);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('parked', '{Parken, Park}', 1);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_bmi', '{Bundesministerium, Federal Ministry}', 2);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_zgv', '{ZGV Prüfung, ZGV examination}', 3);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_drittstaat', '{Drittstaat, Third country}', 4);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remone', '{Reminder 1, Reminder 1}', 5);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remtwo', '{Reminder 2, Reminder 2}', 6);
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung_status TO vilesci;
GRANT SELECT ON public.tbl_rueckstellung_status TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung_status: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung_status: Tabelle hinzugefuegt<br>';
}
// Add table tbl_rueckstellung
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung
(
rueckstellung_id integer NOT NULL,
person_id integer NOT NULL,
status_kurzbz character varying(32) NOT NULL,
datum_bis timestamp NOT NULL,
insertamum timestamp without time zone default now(),
insertvon character varying(32)
);
CREATE SEQUENCE public.tbl_rueckstellung_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT pk_tbl_rueckstellung PRIMARY KEY (rueckstellung_id);
ALTER TABLE public.tbl_rueckstellung ALTER COLUMN rueckstellung_id SET DEFAULT nextval('tbl_rueckstellung_id_seq');
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_status_kurzbz FOREIGN KEY (status_kurzbz) REFERENCES public.tbl_rueckstellung_status(status_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO vilesci;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung TO vilesci;
GRANT SELECT, UPDATE, DELETE ON public.tbl_rueckstellung TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Tabelle hinzugefuegt<br>';
//Übernahme von "zurückgestellten" und "geparkten" Personen
$qry = "
INSERT INTO public.tbl_rueckstellung (person_id, status_kurzbz, datum_bis, insertvon)
SELECT person_id,
CASE WHEN
(lower(l.logdata->>'name') = 'onhold')
THEN 'onhold_remone'
ELSE lower(l.logdata->>'name')
END,
zeitpunkt, insertvon
FROM system.tbl_log l
WHERE (l.logdata->>'name' = 'Onhold' OR l.logdata->>'name' = 'Parked') AND zeitpunkt >= NOW();";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Bestehene Eintraege uebernommen<br>';
}
+8
View File
@@ -277,6 +277,14 @@ $fehlerArr = array(
'fehlertyp_kurzbz' => 'error',
'app' => 'core'
),
array(
'fehlercode' => 'CORE_STUDENTSTATUS_0015',
'fehler_kurzbz' => 'AktiverStudentstatusOhneKontobuchung',
'fehlercode_extern' => null,
'fehlertext' => 'Keine Kontobuchung bei aktivem Studentstatus (prestudent_id %s, Studiensemester %s)',
'fehlertyp_kurzbz' => 'error',
'app' => 'core'
),
array(
'fehlercode' => 'CORE_PERSON_0001',
'fehler_kurzbz' => 'GbDatumWeitZurueck',
+6 -3
View File
@@ -40,7 +40,9 @@ $filters = array(
{"name": "User/Operator"},
{"name": "InfoCenterMitarbeiter"},
{"name": "LockUser"},
{"name": "OnholdDate"}
{"name": "HoldDate"},
{"name": "Rueckstellgrund"},
{"name": "Kaution"}
],
"filters": [
{
@@ -511,13 +513,14 @@ $filters = array(
{
"name": "Abgewiesen - Alle",
"columns": [
{"name": "PersonID"},
{"name": "PersonId"},
{"name": "PreStudentID"},
{"name": "Vorname"},
{"name": "Nachname"},
{"name": "Studiengang"},
{"name": "AbgewiesenAm"},
{"name": "Nachricht"}
{"name": "Nachricht"},
{"name": "Kaution"}
],
"filters": []
}

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