Compare commits

...

374 Commits

Author SHA1 Message Date
cris-technikum ee5c07658d Corrected tableUniqueId for ReviewAnrechnungUebersicht
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-06-08 16:09:59 +02:00
cris-technikum e6fc99f5be Changed: Now Tablewidget defines headerFilterPlaceholder by default
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-06-08 16:07:55 +02:00
cris-technikum bc4af57762 Corrected undefined check in TableWidget
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-06-08 16:00:33 +02:00
cris-technikum b77daf4cce Changed: Tabulators CSV-/help-/setting buttons NOT displayed by default anymore
Not any table needs the header buttons (CSV-/help-/setting).
Therefore header buttons MUST be set activley in the TableWidgets options
to be visible.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-06-08 15:59:17 +02:00
Paolo e056dcd3c2 LDAPLib hotfix: in case that is not possible to connect to an LDAP
server it is not possible to display a valid error message
2021-06-07 10:36:50 +02:00
Andreas Österreicher c1ff4c2d53 Merge branch '9503/csvExportProjektÜbersicht' 2021-05-21 07:51:46 +02:00
Andreas Österreicher 91f1c2b5e8 Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-05-21 07:06:06 +02:00
Andreas Österreicher eba394e170 Merge branch 'bug-12339/GeburtsdatumValidieren' 2021-05-18 17:09:31 +02:00
Andreas Österreicher fc9d1ce24b Merge branch 'feature-12338/Zeitbestätigung' 2021-05-18 16:48:16 +02:00
Andreas Österreicher c220bddadc Kurzbezeichnung der Zeitbestätigung korrigiert 2021-05-18 16:10:13 +02:00
Andreas Österreicher ce302750f8 Wording im FAS angepasst: Lehreinheit->LV-Teil, Semesterstunden->Lehrauftragsstunden, Planstunden->LV-Plan Stunden 2021-05-12 15:48:05 +02:00
Andreas Österreicher 45b150f0d4 Abgabtetool: Fixed broken ZIP Download 2021-05-12 15:46:05 +02:00
Andreas Österreicher 4b8bf41837 Plagiatsprüfung Link aktualisiert 2021-05-11 11:07:31 +02:00
KarpAlex 0681049122 ParbeitsbeurteilungEndupload.txt Vorlage: Paabgabetyp "Abgabe" wenn not endupload, corrected comment 2021-05-07 12:44:23 +02:00
KarpAlex da3396e816 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2021-05-07 12:21:33 +02:00
KarpAlex 4ec3172ccd Projektarbeitsbeurteilung Zweitbetreuer: Abgabetyp is passed to Vorlage also when token is resend 2021-05-07 12:20:48 +02:00
Andreas Österreicher 7a80a1f1cd Tokenversand Link ist jetzt immer Sichtbar 2021-05-07 11:49:56 +02:00
Andreas Österreicher 9121488151 Updated PHPSecLib 2021-05-06 12:57:52 +02:00
Andreas Österreicher d0b76aaac5 Merge branch 'BUG-13075/Urlaubstool_Markierung_Folgemonat' 2021-05-06 12:54:28 +02:00
Andreas Österreicher 4f26a831f4 Merge branch 'feature-12881/Titel_Projektexport' 2021-05-06 12:46:26 +02:00
KarpAlex 73c2319933 Parbeitsbeurteilung Abgabe:
- Mail after Zwischenabgabe for Erstbegutachter has not Beurteilunglink
- added Paabgabetyp for Mail after Abgabe
- Plagiatsprüfung Button links to newer Plagiatschecksite
2021-05-05 16:14:10 +02:00
OliiverHacker d21773bad5 markierung auch im vor und folgemonat 2021-05-05 09:21:32 +02:00
OliiverHacker 44be64dcca add titel also to sheet header 2021-04-30 10:56:16 +02:00
Pable d29d80fc59 Merge pull request #10 from FHBGLD/FHBGLD-patch-include_gemeinde_class
Update gemeinde.class.php
2021-04-30 10:36:16 +02:00
OliiverHacker 3075277ca4 Merge branch 'feature-12881/Titel_Projektexport' of https://github.com/FH-Complete/FHC-Core into feature-12881/Titel_Projektexport 2021-04-29 13:04:40 +02:00
OliiverHacker 27549c1a70 fix umlaute und max length also for excel 2021-04-29 13:03:19 +02:00
Andreas Österreicher 935519d1c3 Merge branch 'master' into feature-12881/Titel_Projektexport 2021-04-28 17:38:59 +02:00
Andreas Österreicher 77c06516f5 Merge branch 'feature-9612/Casetime_Zeitwarnungen_differenzieren' 2021-04-28 17:29:04 +02:00
Andreas Österreicher 05a3f787e4 Merge branch 'master' into feature-9612/Casetime_Zeitwarnungen_differenzieren 2021-04-28 17:21:51 +02:00
Andreas Österreicher d5ef17d66a Merge branch 'feature-11250/zeitaufzeichnung_stammkostenstelle' 2021-04-28 17:18:40 +02:00
Andreas Österreicher b5be5be59d Merge branch 'master' into feature-11250/zeitaufzeichnung_stammkostenstelle 2021-04-28 17:17:02 +02:00
Andreas Österreicher 4dc0bc3aec Merge branch 'feature-98/Feiertage_in_Urlaubstool' 2021-04-28 16:52:09 +02:00
Andreas Österreicher dda82e32f1 Merge branch 'master' into feature-98/Feiertage_in_Urlaubstool 2021-04-28 16:45:28 +02:00
FHBGLD e4f6496387 Update gemeinde.class.php 2021-04-27 14:37:32 +02:00
OliiverHacker 6ddc912cb3 uncomment uid 2021-04-22 14:23:10 +02:00
OliiverHacker 197accbb02 Add Titel to Projektexport 2021-04-22 13:47:01 +02:00
Andreas Österreicher ada7cdfb58 Merge branch 'BUG-1731/Mitarbeiter_Verwendung_Datum' 2021-04-21 15:04:33 +02:00
OliiverHacker a7482425ef fix inserst typos 2021-04-20 15:57:43 +02:00
Andreas Österreicher f657ffe59d Liste der ganztägige Zeitsperren ohne Stundenangabe erweitert 2021-04-20 14:19:04 +02:00
Paolo 142ea9a1f4 Merge branch 'FHBGLD-master' 2021-04-20 14:10:22 +02:00
Paolo 9699de8c33 Removed commented code 2021-04-20 14:09:52 +02:00
Paolo 61fbb60492 Merge branch 'master' of https://github.com/FHBGLD/FHC-Core into FHBGLD-master 2021-04-20 14:07:07 +02:00
Andreas Österreicher 3281e832ce Merge branch 'bug-3879/fehler_beim_akzeptieren_von_sonstigen_dokumenten' 2021-04-16 15:34:45 +02:00
Andreas Österreicher f3af4fd783 Merge branch 'feature-12598/Projektabgabe_SortierenNachDatum' 2021-04-16 15:27:43 +02:00
Andreas Österreicher abcbb0d81c Merge branch 'feature-10963/Beurteilungsformular_datenbankanpassungen' 2021-04-16 13:41:27 +02:00
Andreas Österreicher a1f4c90deb Merge branch 'master' into feature-10963/Beurteilungsformular_datenbankanpassungen 2021-04-16 13:15:30 +02:00
Andreas Österreicher 08237bdb7f Changed fhcomplete.org Wiki Links to fhcomplete.info 2021-04-15 11:54:50 +02:00
KarpAlex 72b076c785 added repeat.png image for abgabetool 2021-04-13 13:25:42 +02:00
OliiverHacker 456a4e2057 bugfix for datum validation 2021-04-12 11:52:01 +02:00
KarpAlex 1f02506eaf added phrase for Parbeitaktualität error 2021-04-10 04:09:29 +02:00
KarpAlex b29621354f - abgabetool: added zweitbetreuer mailto Link incl. icons
- Bewertunglink is not sent in Parbeit Enduploadmail if older Semester
- phrasesupdate Projektarbeitsbeurteilung: added female form
2021-04-10 03:55:05 +02:00
manu 07f483f3bf Ergänzung tablesorter 2021-04-08 19:13:19 +02:00
ma0048 88dbd77a95 bug gefixed, akzeptieren von mehreren sonstigen dokumenten nun ohne fehlermeldung moeglich 2021-04-08 09:43:36 +02:00
KarpAlex e254dfba54 Merge branch 'feature-10963/Beurteilungsformular_datenbankanpassungen' of https://github.com/FH-Complete/FHC-Core into feature-10963/Beurteilungsformular_datenbankanpassungen 2021-04-07 18:01:30 +02:00
KarpAlex c2f74b1bba - mail to Zweitbegutachter after student upload is only sent when it is the endupload
- removed comments
2021-04-07 18:00:10 +02:00
manu 96ba02bd69 bst_zeit ins Downloaddokumentenarray übernommen 2021-04-07 09:55:55 +02:00
Andreas Österreicher 170b2485d3 Merge branch 'feature-10965/beurteilungsformular_pdf_export' into feature-10963/Beurteilungsformular_datenbankanpassungen 2021-04-06 18:06:30 +02:00
Andreas Österreicher 45a78b7700 Merge branch 'master' of github.com:FH-Complete/FHC-Core 2021-04-06 16:56:53 +02:00
Andreas Österreicher f681827e5d Personalmeldung Formatierung von Dezimalwerten korrigiert 2021-04-06 16:56:19 +02:00
ma0048 84e7d95e34 changed from select to links 2021-04-06 11:47:14 +02:00
Manfred Kindl 5bc0f544f9 Neuer Tablesorter 2021-04-02 14:02:01 +02:00
Manfred Kindl 38919da730 Attribut studienplan_regelstudiendauer ergänzt 2021-04-02 13:55:41 +02:00
Manfred Kindl 642561a67d Merge remote-tracking branch 'origin/master' 2021-04-02 13:47:22 +02:00
OliiverHacker 5cdc7f9542 Revert "impiment different text"
This reverts commit 9bf8d58a
2021-04-01 18:09:46 +02:00
OliiverHacker c54e934db9 Revert "impiment different text"
This reverts commit 9bf8d58a
2021-04-01 13:49:01 +02:00
OliiverHacker d66fc6e493 Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-04-01 13:43:40 +02:00
OliiverHacker eb1dabfc03 Merge branch '9503/csvExportProjektÜbersicht' of https://github.com/FH-Complete/FHC-Core into 9503/csvExportProjektÜbersicht 2021-04-01 13:38:42 +02:00
OliiverHacker 1a75666f01 rollback before merge and keep Überlappend fix in Zeitaufzeichnung 2021-04-01 13:36:02 +02:00
KarpAlex 2493cc57d4 abgabetool lektorview: decreased header table height 2021-04-01 09:48:49 +02:00
KarpAlex 9120268290 moved down icon with quickinfo for Tokensend 2021-04-01 02:34:13 +02:00
KarpAlex 2850d0e5d8 "beautified" abgabetool page (lektorenansicht)
- moved Zweitbetreuer Text
- added icon with quickinfo for Tokensend instead of button with text
- disabled grading button and quickinfo instead of text for older Projektarbeiten
2021-03-31 23:45:17 +02:00
ma0048 6c6a4f6cc2 fixed for student 2021-03-31 17:52:15 +02:00
Andreas Österreicher 803076d7d2 Merge branch 'feature-12337/nationenliste_sortieren' 2021-03-31 15:37:41 +02:00
FHBGLD 047129de67 Update CHANGELOG.md 2021-03-31 15:16:22 +02:00
FHBGLD c169aec155 Update CHANGELOG.md 2021-03-31 15:15:24 +02:00
FHBGLD 376f413d2a Update LDAPLib.php 2021-03-31 14:58:31 +02:00
Andreas Österreicher 96bdafbda8 Merge branch 'bugfix-12144/Bewerberstatistikmail_HTMLError' 2021-03-30 12:20:08 +02:00
OliiverHacker 016a9554b9 add null-check in zeitaufzeichnung.class because otherwise it ignores aktivitaet_kuzbz that is null 2021-03-29 19:00:44 +02:00
OliiverHacker 0bd89067f8 Überlappen Problem gefixed 2021-03-29 18:40:32 +02:00
OliiverHacker e4aca8c7e3 Merge branch 'feature-98/Feiertage_in_Urlaubstool' of https://github.com/FH-Complete/FHC-Core into feature-98/Feiertage_in_Urlaubstool 2021-03-29 10:02:48 +02:00
OliiverHacker 43f55ce52b überlappen fix 2021-03-29 10:00:56 +02:00
OliiverHacker 1599fedfce Merge branch 'master' into feature-98/Feiertage_in_Urlaubstool 2021-03-26 19:35:48 +01:00
OliiverHacker 3221252f70 Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-03-26 19:23:02 +01:00
manu 3359e2e972 Funktion checkDatum() aktualisiert 2021-03-25 15:45:09 +01:00
Manfred Kindl d4ef17c183 Merge remote-tracking branch 'origin/master' 2021-03-25 13:27:36 +01:00
Manfred Kindl 0c32ecac11 Umbenennung Inskriptionsbestätigung zu "Studienbestätigung" 2021-03-25 13:27:12 +01:00
KarpAlex 8f2ef521e7 changed Projektarbeitsbeurteilung phrase for thema criteria 2021-03-25 13:22:39 +01:00
ma0048 17f085d352 projektbeurteilung download für studenten im cis hinzugefuegt
projektbeurteilungsbutton anzeige nur wenn beurteilung bereits abgeschickt wurde
2021-03-25 10:23:40 +01:00
KarpAlex a68dfc1c6c - Projektarbeitsabgabe: added Link to Projektarbeitsuebersicht to Zweitbegutachtermail
- updated abgabetool phrases
2021-03-24 22:49:34 +01:00
KarpAlex 6ae8f00066 - Zweitbegutachter im Abgabetool angezeigt
- Tokenneuversand für zweitbegutachter möglich
2021-03-23 21:32:34 +01:00
manu a00009e49f Erweiterung function checkDatum() um Gültigkeitsprüfung 2021-03-23 16:43:14 +01:00
ma0048 10441baff3 sortierung anhand kurztext 2021-03-23 09:34:49 +01:00
Andreas Österreicher 989772402d LVA-Liste prüft die Vertragszuordnung jetzt pro Lehreinheit statt pro LV 2021-03-23 08:38:55 +01:00
Andreas Oesterreicher 1113b833bd Zeitsperre Fixed CSS 2021-03-22 15:41:17 +01:00
OliiverHacker 9bf8d58ab2 impiment different text 2021-03-22 14:46:56 +01:00
OliiverHacker 711bac0f6c Merge branch 'master' of https://github.com/FH-Complete/FHC-Core into 9503/csvExportProjektÜbersicht 2021-03-22 14:44:52 +01:00
KarpAlex fbb7b45b69 - added zweitbegutachterFehltWarnung phrase 2021-03-22 04:55:46 +01:00
OliiverHacker 4c0c6aa6cd bugfix reload projekt 2021-03-18 12:04:28 +01:00
KarpAlex 95c5a9c475 added UNIQUE constraing to zugangstoken column of lehre.tbl_projektbetreuer 2021-03-15 23:48:00 +01:00
KarpAlex 2ef2a906c3 - Projektarbeitsbenotung (abgabe_lektor_details.php): benoten button only shown when semester > SS2021
- updated phrases for text showing if older semester
2021-03-12 09:46:27 +01:00
KarpAlex 73525c94ab uid of student instead of logged in user is passed to sancho infomail 2021-03-11 12:42:18 +01:00
ma0048 3db9b9abee added projektbeurteilung pdfexport 2021-03-09 14:13:55 +01:00
Andreas Österreicher e33eb2e9a9 Zeitraumabfragen für Projektphasen korrigiert 2021-03-09 13:23:56 +01:00
Andreas Österreicher 5da754c9db Anmerkung bei Lehreinheitmitarbeiter verschoben 2021-03-04 07:59:38 +01:00
KarpAlex 5b546d25a8 - abgabe_student_details.php: added reply to and other header/footer to sancho Endupload mails
- sancho.inc.php: enabled reply-to and passing of footer image
2021-03-04 00:04:47 +01:00
KarpAlex 6bb9c77ca1 abgabe_student_details.php: Mail to Erst- and Zweitbegutachter is a sancho mail 2021-03-03 10:43:37 +01:00
KarpAlex edf657fdb9 abgabe_student_details.php: Mail with link (and possibly token for second assessor) to project assessment is sent with final upload to first and second assessor. 2021-03-03 00:00:51 +01:00
Cris 9ba6f3b538 Fixed HTML code appearing within mail message body
. by breaking lines with \n
. using nowrap to avoid breaking text

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-03-02 15:44:46 +01:00
Nikolaus Krondraf 9cbcec7231 Fallback-Lösung für LV-Regel wenn im aktuellen Semester kein Status vorhanden ist 2021-03-02 15:26:44 +01:00
KarpAlex 9677a5a4fd - BenutzerModel: added comment for getFromPersonId method
- UPDATE permission for web for tbl_projektbetreuer added
- added phrase for Zweitbegutachter - link
2021-03-01 09:33:14 +01:00
Andreas Österreicher 8bd148f7e5 Hinweistext für Zahlungen angepasst 2021-02-26 15:01:23 +01:00
Andreas Österreicher 54286a7e6c Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-02-25 15:49:52 +01:00
Andreas Österreicher 581a4c33a4 Merge branch 'feature-11690/SAPByD_User_Update_Request_Limit' 2021-02-23 08:48:30 +01:00
Andreas Österreicher cb4f22141d Merge branch 'feature-11142/Reihungstest_aufgenommene_bei_Neupriorisierung' 2021-02-23 08:36:53 +01:00
Andreas Österreicher 4d041023a8 Problem beim Speichern der Lektorenzuordnung behoben wenn Semesterstunden leer sind 2021-02-22 08:49:52 +01:00
Andreas Österreicher f208fbcd4b Merge branch 'feature-11869/testtool_sprache_und_sprachwahl' 2021-02-19 17:15:00 +01:00
Andreas Österreicher d69083eba2 Fixed Typo in Demo Page 2021-02-19 17:13:53 +01:00
Andreas Österreicher b44853d536 Merge branch 'master' into feature-11869/testtool_sprache_und_sprachwahl 2021-02-19 17:13:25 +01:00
Andreas Österreicher ad9de97a8c Merge branch 'feature-10816/log_download_bescheid' 2021-02-19 16:23:07 +01:00
KarpAlex eb95421ff9 ReihungstestJob.php: formatted sql 2021-02-18 04:26:54 +01:00
KarpAlex 20413b1b03 abgabetool: replaced link in CIS to redirect to new Beurteilungsformular 2021-02-18 01:53:57 +01:00
Andreas Österreicher 577d0f1eb5 Fixed Filename 2021-02-17 15:21:38 +01:00
Andreas Österreicher 0993b94507 Anrechnungen Tooltip korrigiert bei STGL Filter 2021-02-17 11:44:35 +01:00
Andreas Österreicher a02d581d0a Merge branch 'feature/Anrechnungen_NEU' 2021-02-17 08:49:24 +01:00
Paolo 94d335600c - Added new protected method getOldestJob to JQW_Controller
- Added new public method getOldestJob to JobsQueueLib
2021-02-16 21:21:11 +01:00
Cris 734db4a2a8 Granted Web User for tbl_anrechnung_status; Added Sequence Anrechnung Status
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-16 18:22:00 +01:00
Cris 241fb34b23 Added filter button to STGL Overview (filter: show all progressed by STGL)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-16 18:04:27 +01:00
Cris 1ca22970a9 Adapted: Show only applications that were requested for recommendation
Change in lectors overview.
Now lectors only get Anrechnungsanträge, where the STGL had requested
a recommendation.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-16 17:37:14 +01:00
Cris 86a065d0d6 Fixed: Now checking user by prestudent_id to entitle to read DMS document
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-16 16:31:42 +01:00
Andreas Österreicher fec8fbb6d4 Anrechnungen - Mail Empfänger korrigiert bei Personen mit mehreren Accounts 2021-02-16 09:46:50 +01:00
Andreas Österreicher 3366f091dd Anrechnungen - Fixed Details Page for People with multiple Accounts 2021-02-15 21:12:14 +01:00
Andreas Österreicher 4d81f91840 Problem behoben wodurch falsche Anrechnungen geladen wurden 2021-02-15 16:44:34 +01:00
Andreas Österreicher 6522def7a2 Merge branch 'feature/Anrechnungen_NEU' 2021-02-15 11:44:07 +01:00
Cris acec92fa2b Adapted mail message for students (different text for approved/rejected)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-15 11:26:59 +01:00
OliiverHacker bf1686e253 display Holidays in Datepicker 2021-02-15 11:11:54 +01:00
ma0048 38220ab772 Logeintrag beim Downloaden eines Bescheides 2021-02-15 08:11:37 +01:00
KarpAlex da4e913a38 ReihungstestJob.php:
- studiensemester is passed as parameter
- info mail is sent to lower priority when higher priority is cancelled (abgewiesen)
- info mail is sent to master studiengänge as well if higher prio is cancelled/aufgenommen and there are other bachelor prestudenten in same semester
2021-02-13 00:37:33 +01:00
Andreas Österreicher 2973c9e856 Merge branch 'feature/Anrechnungen_NEU' 2021-02-12 16:14:59 +01:00
Andreas Österreicher bff6307a62 Anrechnungen
- Neuer Job zum Setzen der Anrechnungsnote hinzugefügt
- Direktes setzen der Zeugnisnote bei Anrechnung entfernt
2021-02-12 15:52:26 +01:00
Cris d44c526ba4 Minor changes
. phrases
. GUI

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-11 16:37:44 +01:00
Cris 6dea79180c Adapted tables' boolean headerfilter to be used with strings
i.e. entering 'yes' will filter all truish entries

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-11 16:06:20 +01:00
ma0048 ea45ce9934 Sprache und Sprachwahl fixed, wenn kein Studienplan verfügbar ist.
Ablauf_ID wird nun mitgeschickt
2021-02-11 11:57:45 +01:00
Cris c23a3bdac9 Fixed button breaking line in smaller devices; now all buttons inline
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-11 11:52:57 +01:00
Cris eaf902c528 Adapted tooltips for Students VIEW, minor change of phrase text
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-11 11:36:38 +01:00
cris-technikum 41f8a0e3b3 Merge remote-tracking branch 'origin/feature/Anrechnungen_NEU' into feature/Anrechnungen_NEU
# Conflicts:
#	system/phrasesupdate.php
2021-02-10 18:31:26 +01:00
Cris c0843e9506 Translated STGL and Lectors VIEW to English
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-10 18:25:48 +01:00
Cris 3cbb1b5c95 Translated STGL and Lectors VIEW to English
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-10 17:26:25 +01:00
Cris c82ebaf678 Translated Students VIEW to English
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-09 16:31:32 +01:00
Cris 81151025da Fixed non-existing phrases
. anrechnungNichtEmpfehlenAsk
. empfehlungNegativ

The phrases did not exist anymore, they got new name. Now fixed.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-09 14:54:32 +01:00
Cris d1537df896 Fixed: Now Nachweisdokument- and Detail-Links clickable after table update
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-09 14:36:29 +01:00
cris-technikum 3eecd74b1f Merge branch 'master' into feature/Anrechnungen_NEU 2021-02-09 10:54:28 +01:00
cris-technikum 6e689ce657 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2021-02-09 10:53:41 +01:00
Andreas Österreicher 8a3096edf1 Merge branch 'feature-11841/studiengang_dropdown' 2021-02-09 08:06:51 +01:00
Andreas Österreicher a39256d21d Merge branch 'feature-11575/anzahl_der_markierten_personen' 2021-02-09 08:03:41 +01:00
KarpAlex 544def7f5a - Organisationseinheit Dropdown in zeitaufzeichnung is limited by funktionen, only dizipl. Zuordnung, standardkostenstelle Zuordnung and funktionale Zuordnungen are shown 2021-02-09 04:41:14 +01:00
Cris c69188dffe Corrected typos in name that caused button not being disabled
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 18:25:27 +01:00
Cris 17ae1b144c Corrected: Now correct text for confirmed positive recommendation
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 18:13:50 +01:00
Cris 2a59d2464b Uncommented tooltips for genehmigung/empfehlung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 18:07:40 +01:00
Cris 77774e8cec Corrected STGL permission check to check against UID
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 18:01:06 +01:00
Cris 00799f2f64 Adapted: Ordered Notizen to retrieve last inserted first
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 17:35:34 +01:00
Cris 25400d8b5f Removed updateamum/updatevon when updating Anrechnungmodel
They are not needed. Just confusing.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 17:25:34 +01:00
Cris 494cf1f688 Changed style & flow of approve/reject/recommend/dont recommend
This was done for better clarity in workflow.
Now, when clicking on approve/reject/recommend/dont recommend - button,
this will always lead to second panel. In that one the user may leave
a reason, but in any case the user need to CONFIRM (or break) the action.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-08 17:19:58 +01:00
ma0048 8c666ceef2 Studiengang Dropdown angepasst 2021-02-08 17:09:34 +01:00
OliiverHacker d84da96669 display Feiertage and Wochenenden 2021-02-08 09:57:08 +01:00
KarpAlex fd79551f00 - Pruefungsprotokoll bugfix: replaced bitwise and with logical and 2021-02-04 20:37:05 +01:00
Andreas Österreicher 253ffa7e93 Hinweistext bei Zahlungen hinzugefügt 2021-02-04 17:53:57 +01:00
Cris be5ff3f122 Changed CIS menu title and icon for Anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 17:11:36 +01:00
Cris c8ceacc972 Added checks if user is entitled to read DMS document / Anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 17:05:05 +01:00
Cris 071a6a4ee6 Added tooltips (Upload info, Read Infoboxen-info)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 15:42:26 +01:00
Cris 4a8fa95a3a Changed: Now infobox color is blue and icons are info-icons
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 15:36:12 +01:00
KarpAlex 1f88bfae40 - Projektbetreuer Model: added getBetreuerByToken method
- phrasesupdate: added new Projektarbeitsbeurtielung phrases
2021-02-04 11:21:40 +01:00
Cris cfc3b4f985 Corrected: Added space to be able to disable textarea
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 11:04:20 +01:00
Cris e6da4b2e2d Minor changes
- unfold 'Antrag Voraussetzungen' in Infopanels
- open Detailpage on same page (not on new tab)
- unified sancho mails titles

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 10:56:03 +01:00
Cris e9664c179a Added Genehmigungs GUI + Begreundungsnotiz for rejected Anrechnungen in STGL VIEWS
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 10:24:08 +01:00
Cris 52450561fd Added method getApprovedOrRejected() to Anrechnung Model
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-04 10:20:10 +01:00
ma0048 5abac91058 Anazahl der markierten Personen hinzugefügt 2021-02-04 09:50:05 +01:00
Andreas Österreicher fc8df1b10d Wording korrigiert im CIS Profil 2021-02-04 07:56:18 +01:00
Cris d380e6ac49 Added change of status in lectors Detail GUI
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 16:22:19 +01:00
Cris a3c33ed385 Added change of status when STGL requests for recommendation
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 16:21:15 +01:00
Cris 5a8c779bcd Corrected URI and permissions
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 16:18:06 +01:00
Cris 110f05b91c Corrected empfehlung_datum
Now the query uses the correct status kurzbz 'inProgressDP'.
This is because the date the lector sends the recommendation (=empfehlung_datum),
the status is changed to inProgressDP and the insertamum is set there.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 15:43:14 +01:00
Cris 5e1bbfe718 Minor change to InfoPanels
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 15:32:42 +01:00
Cris e780a3e505 Added GUI for STGL Detail VIEW + logic (Antrag- and Empfehlungdata)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 15:30:53 +01:00
Cris 0affbf4e41 Added param to calling function rejectAnrechnung to work properly
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 14:53:40 +01:00
Cris 5109828772 Adapted STGL overview: info/begruendungsangabe when approving/rejecting
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 12:59:46 +01:00
Cris 39016b873f Adapted STGL overview: info/begruendungsangabe when approving/rejecting
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 12:41:26 +01:00
Cris 1c0c8e9ad4 Hided empfehlung/begruendung panels in lector overview after sending recommendation
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 12:37:48 +01:00
Cris 9790fc650b Adapted lector overview to slide in/out info when recommending
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 11:13:05 +01:00
Cris ec16354594 Adapted Controller for lector Details to process Empfehlungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 11:03:58 +01:00
Cris 8b6f0f56af Corrected not collapsing 'Fristen' in Infopanels
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 11:02:26 +01:00
Cris b13fb0cda8 Added lector Detail GUI to retrieve and process Empfehlungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 11:01:02 +01:00
Cris 5235915d6a Changed method getNotizByAnrechnung() -> added param titel
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 10:57:27 +01:00
Cris b8046aeccf Added insertvon when saving new Anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 10:55:46 +01:00
Cris 297c96c3e5 Changed method getLastAnrechnungstatus() -> added param status_kurzbz
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-03 10:53:51 +01:00
Cris 8fc338ccb4 Added GUI/functionality to add begruendung for 'NICHT EMPFEHLEN' in lectors overview
. Begruendung is added as Notiz
. GUI to attach begruendung will slide down the moment 'Nicht Empfehlen'
is clicked
. added phrases

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-02 14:06:49 +01:00
Cris da3720e65d Added lectors detail view CONTROLLER
+ adaptations to AnrechnungLib
+ phrases

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-01 10:11:57 +01:00
Cris a0658a61c3 Added lectors Detail VIEW to review and recommend Anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-01 10:10:55 +01:00
Cris a218b36323 Added getUID() by prestudentID - method to Prestudent Model
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-02-01 10:03:18 +01:00
Andreas Österreicher fcf15c410e Merge branch 'master' into feature-9612/Casetime_Zeitwarnungen_differenzieren 2021-01-29 15:32:49 +01:00
Andreas Österreicher 1ea521e858 Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-01-29 15:28:41 +01:00
Cris 907ecca333 Added coloured status alert in students view
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-29 11:55:27 +01:00
Cris 70d02e25f9 Removed doublecheck of last status
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-29 11:54:52 +01:00
Cris 8ba7744acb HOTFIX: Removed test-UIDS!
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-29 08:23:25 +01:00
cris-technikum f3feb53438 Merge remote-tracking branch 'origin/feature/Anrechnungen_NEU' into feature/Anrechnungen_NEU 2021-01-29 08:04:20 +01:00
cris-technikum 02e4004300 Merge branch 'master' into feature/Anrechnungen_NEU 2021-01-29 08:02:04 +01:00
cris-technikum ea7d0692b9 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2021-01-29 08:01:15 +01:00
Cris 106cbe8194 HOTFIX: Removed test-UIDS!
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-29 07:59:24 +01:00
Cris aff6e2ed8a Changed: Now "Herkunft der Kenntnisse" are required
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 19:38:59 +01:00
Cris ce794d0e54 Added important help text for students view regarding applying correclty
German only. English will follow.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 18:55:02 +01:00
Cris 14d1762c9f Changed email links to correct CIS URL
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 16:52:14 +01:00
Cris bd293f3b3a Changed mail text to inform students about approved/rejected Anrechnungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 16:04:21 +01:00
KarpAlex c3f24f3038 - Projektarbeitsbeurtielung: added app Projektarbeitsbeurteilung and phrases for Projektarbeitsformular 2021-01-28 13:03:18 +01:00
Cris 8d09ee7299 Modified to update Zeugnisnote, if already exists
During approving process the zeugnisnote is set to 6 (angerechnet).
If zeugnisnote already exists, it will be updated now.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 11:28:44 +01:00
Cris 6a37c71cfc Added sending Sanchomail to lector asking to recommend Anrechnung
Mails are send to lectors (prio for LV-Leitung, if not present to all
lectors of LV) Anyway, as many there recommendation may be requested
for many lvs at the same time, the receiver array will be unique to ensure
sending only once to one and the same lector. e.g. if lector is lv-leitung
for lv x and lector for lv y, will get only one mail.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-28 10:21:56 +01:00
Cris 35009097f1 Added sending Sanchomail to student when Anrechnung was approved/rejected
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-27 14:49:30 +01:00
Cris 697e5057cf Added sending Sanchomail when Anrechnung is (not) recommended by lector
Mail goes to STGL. If not present, it will be sent to STGL assistance.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-27 11:37:51 +01:00
Cris 3fb2c3d387 Added Sanchomail sent when Anrechnung is applied by student
Mail goes to STGL. If not present, it will be sent to STGL assistance.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-27 10:33:19 +01:00
Cris 8a75bc9fdd Added method getFullName() to Person_model
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 18:54:42 +01:00
Cris db10f78505 Added method getLeitung() to Studiengang_model to retrieve STGL by studiengang_kz
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 18:52:28 +01:00
Cris 82780e9626 Added column "Herkunft (der Kenntnisse)" to STGL and lectors VIEW
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 15:39:18 +01:00
Cris e06a6768a4 Changed text as required in Students Anrechnung' View
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 15:26:16 +01:00
Cris 3f3d7aa7d7 Changed lektors status text to 'Empfehlung angefordert'
...to make status in process more understandable.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 13:57:57 +01:00
Cris 7d0ff4fcee Added check, when STGL tries to request recommendation for already recommended Antraege
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-26 13:56:34 +01:00
Cris 5b77a5d08f Restricted to upload only pdf files
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-25 18:23:59 +01:00
Cris aefd0842db Added tooltip for unselectable Anrechnungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-25 18:18:13 +01:00
Cris 1b00ae78b4 Created Anrechnungen LektorInen: GUI, Controller, Tabledata, Phrases
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-25 17:07:39 +01:00
Andreas Österreicher 7dc21fde5a FAS Länge der Betriebsmittel Nummer auf 32 Zeichen erhöht damit Schlüsselnummern gespeichert werden können 2021-01-22 13:57:28 +01:00
Cris 0da2c6a74c Changed tabulator requiredPermissions for STGL Anrechnungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 14:41:46 +01:00
cris-technikum 0bf0c2a152 Merge branch 'master' into feature/Anrechnungen_NEU 2021-01-21 14:07:40 +01:00
cris-technikum 71b8122a20 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2021-01-21 14:06:58 +01:00
cris-technikum 2359592032 Merge branch 'master' into feature/Anrechnungen_NEU
# Conflicts:
#	application/libraries/AnrechnungLib.php
#	application/views/lehre/anrechnung/requestAnrechnung.php
#	system/dbupdate_3.3.php
#	system/phrasesupdate.php
2021-01-21 14:06:03 +01:00
Cris 0528ae3eb9 Added uebernahmedatum and benotungsdatum to zeugnisnote
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 13:39:31 +01:00
Cris dc98b766c9 Now filtering / formatting correctly the updated data
...by adding status_kurzbz to returning json object

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 12:50:07 +01:00
Cris fd5b68d3b8 Set persistent layout and persistent sorting to STGL Anrechnungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 12:21:31 +01:00
Cris 8a03ccab5d Visibly greyed rows that are unselectable (at start and on update)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 11:19:11 +01:00
Cris 99db4ec3ce Adapted empfehlung to be human readable
ja/nein/- instead of boolean/null

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 11:08:57 +01:00
Cris 47c8432faf Added filter buttons to STGL Anrechnungen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-21 10:51:22 +01:00
Cris 9e5b03b2dc Adapted Select-all-button to select only Anrechnungen progressed by STGL
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 19:16:17 +01:00
Cris 97d86cc702 Added logic & GUI adaptations for requesting recommendations
. Added request recommendation-methods in Controller and Library

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 19:07:33 +01:00
Cris 3a285c5672 Added status inProgressLektor
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 19:05:56 +01:00
Cris 9a0ea02e0c Minor code enhancement
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 19:03:53 +01:00
Cris a09abfd70c Added Zeugnisnote = 6 (angerechnet) when Anrechnung is approved
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 15:14:31 +01:00
Cris 114ac7a69e Corrected Personenkennzeichen: students matrikelnr instead of person bpk
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 13:40:33 +01:00
Cris 1bd66d0ee2 Corrected: No genehmigt_von and update info when Anrechnung is rejected
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 13:15:28 +01:00
Cris f0ef091c5f Added logic & GUI adaptations for rejecting Anrechnungen
. Added rejecting-methods in Controller and Library

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 11:48:07 +01:00
Cris 046f807788 Added ECTS to tabledata
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 11:06:53 +01:00
Cris 4ed786d65a Added promise check (browser compatibility) and redrawing table on resize
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 11:03:47 +01:00
cris-technikum 964bd40c14 Added logic & GUI adaptations for approving Anrechnungen
. Added approve-methods in Controller and Library
. Added row selection checks to avoid selecting approved and rejected
Antraege

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-20 11:02:15 +01:00
Nikolaus Krondraf 5c1c9f1df4 Beim Löschen eines Prüfungstermins kann ein Infomail versendet werden 2021-01-20 10:18:00 +01:00
Cris 403304e1a7 Adapted CSS: Red button for rejecting, blue for approving
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 15:56:34 +01:00
Cris 360aec41ee Restricted tabledata to retrieve only for studies of STGL
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 15:47:31 +01:00
Cris 8d26cc9a86 Added permission lehre/anrechnung_genehmigen to Controller
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 15:45:04 +01:00
Cris 1a050adea4 Added permission to DB: lehre/anrechnung_genehmigen and lehre/anrechnung_empfehlen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 15:42:08 +01:00
Cris b5dd85f2a6 Created Anrechnungen STGL: GUI, Controller, Tabledata, Phrases
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 14:43:32 +01:00
Manfred Kindl adcb865cbf Merge remote-tracking branch 'origin/master' 2021-01-19 13:47:20 +01:00
Manfred Kindl 0c40452b4d Statusgrund in Excel-Export Studierende 2021-01-19 13:47:07 +01:00
Manfred Kindl 9e0febdff6 Abfrage der Gebiete angepasst
Damit auch QuereinsteigerInnen des 2. Semesters die Gebiete sehen
2021-01-19 13:46:15 +01:00
Cris f185c92db7 Created Anrechnungen Students GUI, Controller, DB-tables, library, phrases
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 13:03:26 +01:00
Cris c0952af290 Corrected default value for empfehlung_anrechnung to be nullable
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-19 08:27:59 +01:00
Andreas Österreicher 407d8d9613 Fehler behoben wodurch nicht alle Semester eines Studiengangs im FAS angezeigt wurden wenn nur direkte Inskriptionsgruppen vorhanden sind und keine Spezialgruppen oder Verbandsgruppen 2021-01-18 21:04:17 +01:00
Cris 4df012798f Changed bpk to Matrikelnummer
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 15:09:01 +01:00
Cris e04e584410 Added Anrechnungsdatum
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 15:08:16 +01:00
Cris 3ffc5c7d3f Deactivated application deadline
Deactivated application deadline by setting checking variable
is_expired to false. This is to keep the logic for a later time when the
application deadline is going to be defined.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 13:59:29 +01:00
Cris 0edccc299c Deleted js-file - not needed by now
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 13:52:26 +01:00
Cris 4e0fd56d99 Corrected empfehlung default value
Now default value is empty instead of false, as there are 3 different
stati to retrieve
1. null = no recommendation at all (default)
1. true = recommended
1. false = not recommended

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 13:45:11 +01:00
Cris de5c67d2f1 Devided methods getAnrechnungData and getAnrechnungDataByLv
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-18 13:41:46 +01:00
Cris b6f5bc2703 Added phrases for Anrechnung beantragen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 15:27:44 +01:00
Cris 0d546dc0c0 Renamed POST parameter lv_id, studiensemester
...to stay consistent

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 15:24:26 +01:00
Cris 67c130f9c1 Included Anrechnung beantragen into CIS Menu
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 15:22:20 +01:00
Cris aff838d3c3 Fixed typo studiensemester in AnrechnungLib
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:55:42 +01:00
Cris a1dfd3f598 Created new model Anrechnungstatus_model
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:21:53 +01:00
Cris dc84c91dae Added methods saveAnrechnungstatus() and getLastAnrechnungstatus()
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:21:00 +01:00
Cris 85ec64876d Changed permission to student/anrechnung_beantragen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:18:28 +01:00
Cris 091d921efa Redesigned and adapted GUI
Added download, alerts, new layout and styles that fit better to new
adaptations and to other GUIs.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:16:53 +01:00
Cris b57a3ec90f Added logic to download and open a document
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:13:17 +01:00
Cris 5af134312c Added logic for uploading file and saving anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:12:08 +01:00
Cris 3116d4c7c9 Adapted index method and library(deadline, status, refactored code, lib functions)
- Check if application deadline is expired
- Refactored retrieving Anrechnung data (reusable)
- Adapted status for student view (new, in progress)

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 14:09:33 +01:00
KarpAlex 98deb3d2a0 moved creation of tbl_projektarbeitsbeurteilung to FHC_Core_Abschlusspruefungsbeurteilung extension 2021-01-14 10:32:42 +01:00
Cris 44e8bd57b0 Set default value to NOW() for insertamum in lehre.tbl_anrechnung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 10:00:44 +01:00
Cris 78e4edd590 Added permission student/anrechnung_beantragen
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-14 08:36:53 +01:00
KarpAlex 254dad8700 db changes for projektarbeitsbeurteilung
- added lehre.tbl_projektarbeitsbeurteilung
- added columns zugangstoken, zugangstoken_gueltigbis to lehre.tbl_projektbetreuer
2021-01-13 21:15:44 +01:00
Cris 47f66644ef Added Bezeichnung 'berufliche Praxis' to Anrechnungbegruendung
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-13 14:55:50 +01:00
Cris 2454104cc3 Changed datum type from timestamp to date in tbl_anrechnung_anrechnungstatus
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-13 14:37:55 +01:00
KarpAlex 57722553ec - new funktion type kstzuordnung for cost center assignment in public.tbl_funktion 2021-01-13 00:05:03 +01:00
Cris 5cd163819d Added upload function to DmsLib
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-11 15:24:12 +01:00
Cris 1fefffcab3 Added / Adapted DB for Anrechnungen
- Added column dms_id, studiensemester_kurzbz, anmerkung_student und
empfehlung_anrechnung in tbl_anrechnung
- Changed genehmigt_von and begruendung_id to be NULLABLE in
tbl_anrechnung
- Added DMS category "anrechnung"
- Added DMS category permissiongroup for DMS category "anrechnung"
- Add table anrechnung_status
- Added table anrechnung_anrechnungstatus
- Für bestehende genehmigte Anrechnungsanträge wird ein Eintrag mit dem
Status 'approved' angelegt

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-11 13:43:57 +01:00
Andreas Österreicher 57c0f3020a Bei den Zahlungsbestätigungen werden nur noch Zahlungen angezeigt bei denen das Buchungsdatum nicht in der Zukunft liegt um zu verhindern, dass Studierende die Zahlungen tätigen bevor sie eine Rechnung bekommen 2021-01-07 16:52:26 +01:00
Cris 04174d35f5 Added Anrechnungsdata (student, lv and lectors of lv)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-05 12:19:27 +01:00
Cris fb29dc1e0e Added method getLvByStudent() to Lehrveranstaltung_model
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-01-05 12:17:41 +01:00
Cris 8309dfb3ca Created CONTROLLER Anrechnungen for students (CIS)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-12-22 16:00:07 +01:00
Cris e7d9d8859c Created VIEW Anrechnungen for students (CIS)
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-12-22 15:43:44 +01:00
Andreas Österreicher 6a9871c0d5 Feldgroesse für ZGV angepasst für Darstellung auf kleinen Devices 2020-12-22 09:42:35 +01:00
cris-technikum 5dbad37416 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>

# Conflicts:
#	locale/de-AT/global.php
#	locale/en-US/global.php
2020-12-21 15:54:18 +01:00
OliiverHacker 74c12372c8 also hide hours on edit 2020-12-15 13:17:23 +01:00
Andreas Österreicher 7fdadc48cf Merge branch 'master' into 9503/csvExportProjektÜbersicht 2020-12-15 09:48:42 +01:00
Andreas Österreicher 095c11f167 Jobwatcher verschickt Infomail an Administrator falls Cronjobs im Status Running hängen bleiben 2020-12-11 11:10:29 +01:00
Andreas Österreicher 7ed9266b0a Neuen Config-Eintrag hinzugefügt um die Mahnspanne bei den Zahlungen im FAS auszublenden 2020-12-07 10:58:29 +01:00
Andreas Österreicher 33cc431267 Added Phrases for Additional Informations 2020-12-04 15:41:59 +01:00
OliiverHacker 15d15faf8a Zeiteneintragung nicht möglich wenn zuvor Projektübersichtexport angeklickt wird 2020-12-03 11:49:11 +01:00
cris-technikum 3cf6e338d7 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2020-12-03 10:33:05 +01:00
OliiverHacker 47d7a4688f Zeiterfassung: Zeitausgleich und Krankenstand nur ganztägig eintragbar 2020-12-02 15:16:07 +01:00
Manfred Kindl 8109fd6757 Merge remote-tracking branch 'origin/master' 2020-12-02 13:57:32 +01:00
Manfred Kindl 47d09ec7eb Tablesorter für Meldungsübersicht 2020-12-02 13:57:26 +01:00
OliiverHacker c33856ee50 Zeitsperren: User bekommt Warnhinweis bei auffällig langem Zeitraum 2020-12-02 12:57:54 +01:00
Andreas Österreicher b5510f023e Fixed Corner Case where wrong actual Studysemester ist retrieved if Start and End Dates are overlapping 2020-12-02 12:18:02 +01:00
OliiverHacker a8227e1f91 Zeiterfassung: Tagesübergreifende Einträge verhindern 2020-12-02 11:58:51 +01:00
OliiverHacker 32a174d836 Zeiterfassung: Eintraege in der Zukunft 2020-11-30 11:09:49 +01:00
Cris 442cd67d08 Changed COVID page text, Removed placeholder in COVID textarea
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-11-30 11:01:09 +01:00
Andreas Österreicher c7605b2107 Merge branch 'feature-7434/Messages_Neue_Felder_zu_eingeloggtem_User_ergaenzen' 2020-11-26 13:30:21 +01:00
Andreas Österreicher 73688eec83 Merge branch 'master' into feature-7434/Messages_Neue_Felder_zu_eingeloggtem_User_ergaenzen 2020-11-26 12:52:24 +01:00
Andreas Österreicher d0d133b3ba Infocenter Nation aus Defaultfilter entfernt 2020-11-26 12:49:52 +01:00
Andreas Österreicher 9b6cb231c0 Messages in FAS show the Date of the last Status change (read/unread-status) 2020-11-25 16:54:44 +01:00
Andreas Österreicher 0738f28144 Merge branch 'master' into feature-7434/Messages_Neue_Felder_zu_eingeloggtem_User_ergaenzen 2020-11-25 14:52:22 +01:00
Andreas Österreicher 562fab9281 ZGV-Nation in Infocenter Filter per Default sichtbar 2020-11-25 14:43:22 +01:00
Andreas Österreicher 34560fe78b Merge branch 'bug-10179/Message_recipient_without_internal_account' 2020-11-25 14:31:47 +01:00
Paolo 6e5c555a40 Fixed MessageLib->_sendNoticeEmail 2020-11-23 16:19:23 +01:00
Andreas Österreicher 119d5d99df Fixed Query to get User for Messages by PersonID and OrganisationUnit 2020-11-23 16:18:43 +01:00
Paolo 451e0e7843 Fixed MessageLib->_sendNoticeEmails: date and array comparisons 2020-11-19 00:09:53 +01:00
Manfred Kindl 1cf06681d3 bpk vorrübergehend auskommentiert 2020-11-18 17:45:37 +01:00
Manfred Kindl 798ff3db24 Bugfix Abfrage Rechte 2020-11-18 17:44:15 +01:00
Manfred Kindl 73a38a0835 Formatierung XML-Output 2020-11-18 17:41:30 +01:00
Manfred Kindl b31585af98 Bugfix ical_coodle
Leeres VEVENT entfernt, wenn kein Termin vorhanden
2020-11-18 17:40:35 +01:00
Paolo 9d2c004c6d Checks if the benutzer exists MessageLib->_sendNoticeEmails 2020-11-18 08:51:48 +01:00
Andreas Österreicher 232f261a76 Merge branch 'bugfix-8370/Fehlermeldung_korrigieren_in_LehrauftragBestellen' 2020-11-17 17:56:46 +01:00
Andreas Österreicher a1d2eb51a7 Loading Name of a Person doesnt load all person Data 2020-11-17 17:49:32 +01:00
Andreas Österreicher 2103e78dcc Merge branch 'feature-9858/Freigegebene_Urlaube_loeschen_wenn_in_Zukunft' 2020-11-17 17:44:31 +01:00
Andreas Österreicher 594faabf0c Merge branch 'feature-10352/dvuh_ernp_meldung' 2020-11-17 17:38:49 +01:00
OliiverHacker 56c958319d fix bug in export 2020-11-12 15:49:45 +01:00
Paolo 443caa91f2 Messaging sysntem: the internal email account is used only if the user
account is older then 24 hours
2020-11-09 10:45:25 +01:00
alex 4465fbc877 DVUH Meldung: Renamed Ersatzkennzeichen input field text to SVNR/Ersatzkennzeichen 2020-11-04 22:43:45 +01:00
alex 2ceefabec9 DVUH Meldung: Dokumenttyp can be entered for ERNP Meldung (Dropdown) 2020-10-30 15:47:15 +01:00
alex 6e37edd30b DVUH ERNP Meldung: added noticetext as warning, different country example (D instead of A) 2020-10-30 13:27:34 +01:00
alex d78308d43f DVUH Meldung: added ERNP Meldung for retrieving bpk for e.g. foreign residents 2020-10-29 23:40:02 +01:00
Cris 7fe2f3ef39 Adapted span-width of date in each tablerow
Allows nice align of error messages.

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-10-15 11:03:16 +02:00
OliiverHacker 14fa1b24ad Display Full Name instead of Email Adress of Supervisor 2020-10-14 13:23:19 +02:00
OliiverHacker df667b1eec merge 2020-10-14 12:44:32 +02:00
Cris c1e4278e71 Changed permission denying - text in 'Lehrauftrag bestellen'
If a permission is correctly set, but the permission is restricted on
organisational units Department or Kompetenzfeld, the error-text gives now
meaningful information about the abort.

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-10-13 15:45:37 +02:00
OliiverHacker 4ced199e88 Freigegebenen Urlaub löschen auch in Zeitsperren 2020-10-13 12:26:06 +02:00
OliiverHacker 5802ca8ea2 versende Email an Vorgesetzten wenn freigegebener Urlaub gelöscht wird 2020-10-13 09:26:06 +02:00
OliiverHacker 6128a7ae6e add X to delete approved vacation 2020-10-12 15:31:37 +02:00
OliiverHacker c485400142 user is able to delete approved vacation if in the future 2020-09-29 14:56:15 +02:00
OliiverHacker 08536d63df display Full Name of Supervisors for vacation reqeust 2020-09-25 12:19:18 +02:00
OliiverHacker f672cd2d53 user can enter project with projectphase even if not assigend to project 2020-09-24 11:14:32 +02:00
OliiverHacker 3d274645ac correct user 2020-09-24 08:52:33 +02:00
OliiverHacker 14fbfc7860 diplay date in error message 2020-09-24 08:48:59 +02:00
OliiverHacker 16fb610b3f impliment checks for ProjektPhase 2020-09-23 14:24:17 +02:00
OliiverHacker 4183e7f4f7 changed errormessage for projects that are already complited 2020-09-23 13:44:46 +02:00
OliiverHacker 49fb4d8afa sort csvExport 2020-09-23 13:16:07 +02:00
OliiverHacker 85c6aa08fc fix bug for empty projekt and projektphasen 2020-09-23 12:45:00 +02:00
Oliiver ad98fed84b additionally export projectphasen without project 2020-09-16 12:34:26 +02:00
Oliiver 82d7f4edd2 fix brackets; remove error_reporting 2020-09-16 09:37:31 +02:00
OliiverHacker a565b66751 display only projektphasen of the user 2020-09-10 13:07:51 +02:00
OliiverHacker 612c339305 only get project phases that user is assigned to in CSV Export 2020-09-10 10:39:33 +02:00
OliiverHacker e933cce0e8 add project ID to csv export 2020-09-10 09:29:39 +02:00
OliiverHacker 2e8ed786f4 impliment export 2020-09-09 13:05:28 +02:00
OliiverHacker 8173328c92 Merge branch '9502/csvImportChecks' of https://github.com/FH-Complete/FHC-Core into 9502/csvImportChecks 2020-09-09 10:51:23 +02:00
OliiverHacker e4f3139205 impliment zeitaufzeichnungs checks 2020-09-09 10:50:42 +02:00
Oliiver 37884b1f7e cleanup code 2020-09-08 09:49:57 +02:00
OliiverHacker 2e44f58df9 check time in project for user input 2020-09-07 16:11:17 +02:00
OliiverHacker 6c857b7c24 cleanup var_dump 2020-09-03 15:25:33 +02:00
OliiverHacker 9250485cb3 check for time in csv import 2020-09-03 15:22:46 +02:00
Cris 742c9fa857 Check that user is an active employee in message-cronjob
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-06-04 11:33:58 +02:00
Cris 8304b4a1ae Adapted GUI: display user fields in tinymce-editor on doubleclick
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-06-02 16:31:52 +02:00
Cris 2906c1803e Changed 'Eigene Felder'-Alias: if alias is NULL, uid is used as alias
This is to ensure the email is built correctly.

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-06-02 16:29:51 +02:00
Cris d35ee0c834 Adapted method to retrieve user fields when method is called by a cronjob
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-06-02 15:06:22 +02:00
Cris 8b80f2226e Added logic for cronjob to add senders fields into message body
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-06-02 15:03:31 +02:00
Cris 4f1796ee9d Added logic to add message vars data of logged in user into message body
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-28 09:48:31 +02:00
Cris ebd9c2c0ba Added method to retrieve message vars data of the logged in user
This method retrieves the specific data of the logged in user to be
used in 'Meine Felder'

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-28 09:46:15 +02:00
Cris 634401485a Renamed 'Meine Felder'-msg names and small method adaptation to retrieve fields
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-28 09:42:51 +02:00
Cris 046994f14b Added phrase 'meineFelder'
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-27 11:53:56 +02:00
Cris a5e0c9ca5a Added logic to provide fields of logged in user in Messaging system
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-27 11:52:12 +02:00
Cris 7ab2155d6a Added method to retrieve data of logged in user in Message model
Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-27 11:49:35 +02:00
Cris 1be1d1c8e9 Added GUI for 'Eigene Felder' + layout adaptations
. GUI: added multidropdown 'Eigene Felder', which contains fields of
the logged in user
. Layout: Message text area has now min and max height; sending
button now aligned correctly; multidropdowns now aligned to text area

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-05-27 11:48:05 +02:00
Cris 21e43d7a08 Created DB view public.vw.msg_vars_user (data of logged in user)
This data will be used by the messaging system to provide data of the
logged in user.
2020-05-27 11:37:49 +02:00
140 changed files with 14558 additions and 1391 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# FH-Complete
* [FH-Complete Homepage](https://www.fhcomplete.org)
* [Wiki](https://wiki.fhcomplete.org/)
* [Wiki](https://wiki.fhcomplete.info/)
* [Changelog](CHANGELOG.md)
@@ -0,0 +1,87 @@
<?php
/**
* FH-Complete
*
* @package FHC-API
* @author FHC-Team
* @copyright Copyright (c) 2021, fhcomplete.org
* @license GPLv3
* @link http://fhcomplete.org
* @since Version 1.0
* @filesource
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungJob extends JOB_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
}
/**
* Sets the Grades in FAS to angerechnet if the request was successfull
* @return void
*/
public function setAnrechnungGrades()
{
$this->logInfo('Start Anrechnung Grades Job');
// get all accepted requests that are not in the grades table yet
// get all placement tests with incorrect studyplan
$qry = "
SELECT
student_uid, lehrveranstaltung_id, studiensemester_kurzbz, genehmigt_von
FROM
lehre.tbl_anrechnung
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND EXISTS(
SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = tbl_anrechnung.anrechnung_id
AND status_kurzbz='approved'
AND datum>=now()-'5 days'::interval
)
AND NOT EXISTS(
SELECT 1 FROM lehre.tbl_zeugnisnote
WHERE
lehrveranstaltung_id = tbl_anrechnung.lehrveranstaltung_id
AND studiensemester_kurzbz = tbl_anrechnung.studiensemester_kurzbz
AND student_uid = tbl_student.student_uid
)
";
$db = new DB_Model();
$result_grades = $db->execReadOnlyQuery($qry);
$cnt = 0;
if (hasData($result_grades))
{
$grades = getData($result_grades);
foreach ($grades as $anrechnung)
{
$cnt++;
// Set zeugnisnote to angerechnet (= note 6)
$ret = $this->ZeugnisnoteModel->insert(array(
'lehrveranstaltung_id' => $anrechnung->lehrveranstaltung_id,
'student_uid' => $anrechnung->student_uid,
'studiensemester_kurzbz' => $anrechnung->studiensemester_kurzbz,
'uebernahmedatum' => (new DateTime())->format('Y-m-d H:m:i'),
'benotungsdatum' => (new DateTime())->format('Y-m-d H:m:i'),
'note' => 6,
'insertvon' => $anrechnung->genehmigt_von,
'bemerkung' => 'Digitale Anrechnung'
)
);
}
}
$this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt));
}
}
+113 -56
View File
@@ -1,7 +1,7 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class ReihungstestJob extends CLI_Controller
class ReihungstestJob extends JOB_Controller
{
/**
* Constructor
@@ -17,6 +17,7 @@ class ReihungstestJob extends CLI_Controller
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
$this->load->model('crm/buchungstyp_model', 'BuchungstypModel');
// Load helpers
$this->load->helper('hlp_sancho_helper');
@@ -799,24 +800,39 @@ class ReihungstestJob extends CLI_Controller
* @param string $bcc. Optional. BCC-Mailadress to send the Mails to
* @param string $from. Optional. Sender-Mailadress shown to recipient
*/
public function prioritizationJob($bcc = null, $from = null)
public function prioritizationJob($studiensemester, $bcc = null, $from = null)
{
$qry = " SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') AS laststatus, /* Todo: Studiensemester dynamisch ermitteln oder als Parameter */
tbl_prestudentstatus.studiensemester_kurzbz,
tbl_prestudent.*
if (!isset($studiensemester) || isEmptyString($studiensemester))
{
$this->logError("Studiensemster not passed as parameter");
return;
}
$qry = "WITH prst AS (
SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) AS laststatus,
tbl_prestudentstatus.studiensemester_kurzbz,
tbl_prestudentstatus.datum AS prestudenstatus_datum,
tbl_prestudent.*,
tbl_studiengang.typ AS studiengang_typ
FROM PUBLIC.tbl_person
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz)
WHERE tbl_prestudentstatus.datum >= (SELECT CURRENT_DATE -1)
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') IN ('Aufgenommener','Bewerber','Wartender')
AND studiensemester_kurzbz = 'WS2020' /* Todo: Studiensemester dynamisch ermitteln oder als Parameter */
AND tbl_studiengang.typ = 'b'
ORDER BY studiengang_kz, laststatus
";
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz)
WHERE get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) IN ('Aufgenommener','Bewerber','Wartender','Abgewiesener')
AND studiensemester_kurzbz = ?
AND tbl_studiengang.typ IN ('b', 'm')
)
SELECT * FROM prst
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - 1)
AND (studiengang_typ = 'b' OR (studiengang_typ = 'm' AND EXISTS (SELECT 1 /* Master Studiengänge berücksichtigen wenn auch Bachelor im gleichen Semester */
FROM prst prstb
WHERE studiengang_typ = 'b'
AND laststatus != 'Abgewiesener'
AND prstb.person_id = prst.person_id )))
ORDER BY studiengang_kz, laststatus";
// Encode Params
if ($bcc != '')
@@ -837,26 +853,22 @@ class ReihungstestJob extends CLI_Controller
}
$db = new DB_Model();
$result_prestudents = $db->execReadOnlyQuery($qry);
$result_prestudents = $db->execReadOnlyQuery($qry, array_pad(array(), 3, $studiensemester));
$mailArray = array();
if (hasdata($result_prestudents))
{
foreach ($result_prestudents->retval as $row_ps)
{
// Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen
// falls diese Bewerber oder Warteliste sind
// Danach Kaution einbuchen
if ($row_ps->laststatus == 'Aufgenommener')
{
// Alle niedrigeren Prios laden
$qryNiedrPrios = "
// Alle niedrigeren Prios laden
$qryNiedrPrios = "
SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') AS laststatus,
tbl_studienplan.orgform_kurzbz,
tbl_person.nachname,
tbl_person.vorname,
tbl_prestudent.*
tbl_prestudent.*,
tbl_studiengang.typ AS studiengang_typ
FROM PUBLIC.tbl_person
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
@@ -866,18 +878,30 @@ class ReihungstestJob extends CLI_Controller
AND tbl_prestudent.prestudent_id != ".$row_ps->prestudent_id."
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') IN ('Aufgenommener','Bewerber','Wartender')
AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."'
AND tbl_studiengang.typ = 'b'
AND tbl_studiengang.typ IN ('b', 'm')
AND priorisierung > ".$row_ps->priorisierung."
ORDER BY studiengang_kz, laststatus
";
// Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen
// falls diese Bewerber oder Warteliste sind
// Danach Kaution einbuchen
if ($row_ps->laststatus == 'Aufgenommener')
{
$resultNiedrPrios = $db->execReadOnlyQuery($qryNiedrPrios);
if (hasdata($resultNiedrPrios))
{
foreach ($resultNiedrPrios->retval as $rowNiedrPrios)
{
if ($rowNiedrPrios->laststatus == 'Bewerber')
// nur Info wenn aufgenommen oder master
if ($rowNiedrPrios->laststatus == 'Aufgenommener' || $rowNiedrPrios->studiengang_typ == 'm')
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
elseif ($rowNiedrPrios->laststatus == 'Bewerber')
{
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
$lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id);
@@ -929,43 +953,63 @@ class ReihungstestJob extends CLI_Controller
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
}
elseif ($rowNiedrPrios->laststatus == 'Aufgenommener')
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
}
}
// Kaution einbuchen für $row_ps->prestudent_id
// Kaution einbuchen für $row_ps->prestudent_id (für aufgenommenen Bachelor)
// Vorher prüfen, ob schon eine Kaution gebucht ist
// Todo: Betrag automatisch aus tbl_buchungstyp laden
$qryKautionExists = "
if ($row_ps->studiengang_typ == 'b')
{
$qryKautionExists = "
SELECT count(*) as anzahl
FROM public.tbl_konto
WHERE person_id = ".$row_ps->person_id."
AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."'
AND buchungstyp_kurzbz = 'Kaution'";
WHERE person_id = " . $row_ps->person_id . "
AND studiensemester_kurzbz = '" . $row_ps->studiensemester_kurzbz . "'
AND buchungstyp_kurzbz = 'StudiengebuehrAnzahlung'";
$resultKautionExists = $db->execReadOnlyQuery($qryKautionExists);
if (hasdata($resultKautionExists))
{
if ($resultKautionExists->retval[0]->anzahl == '0')
$resultKautionExists = $db->execReadOnlyQuery($qryKautionExists);
if (hasdata($resultKautionExists))
{
// Todo: Zahlungsreferenz generieren (StudiengangsOE+Buchungsnummer)
$this->KontoModel->insert(array(
"person_id" => $row_ps->person_id,
"studiengang_kz" => $row_ps->studiengang_kz,
"studiensemester_kurzbz" => $row_ps->studiensemester_kurzbz,
"betrag" => -150,
"buchungsdatum" => date('Y-m-d'),
"buchungstext" => 'Kaution',
"buchungstyp_kurzbz" => 'Kaution',
"insertvon" => 'prioritizationJob',
"insertamum" => date('Y-m-d H:i:s')
));
if ($resultKautionExists->retval[0]->anzahl == '0')
{
// Betrag automatisch aus tbl_buchungstyp laden
$this->BuchungstypModel->addSelect('buchungstyp_kurzbz, standardbetrag, standardtext');
$buchungstypRes = $this->BuchungstypModel->loadWhere(array('buchungstyp_kurzbz' => 'StudiengebuehrAnzahlung'));
if (hasData($buchungstypRes))
{
$buchungstypData = getData($buchungstypRes)[0];
$this->KontoModel->insert(array(
"person_id" => $row_ps->person_id,
"studiengang_kz" => $row_ps->studiengang_kz,
"studiensemester_kurzbz" => $row_ps->studiensemester_kurzbz,
"betrag" => $buchungstypData->standardbetrag,
"buchungsdatum" => date('Y-m-d'),
"buchungstext" => $buchungstypData->standardtext,
"buchungstyp_kurzbz" => $buchungstypData->buchungstyp_kurzbz,
"insertvon" => 'prioritizationJob',
"insertamum" => date('Y-m-d H:i:s')
));
}
else
$this->logError('No Buchungstyp found for Studiengebühr Anzahlung');
}
}
}
}
elseif ($row_ps->laststatus == 'Abgewiesener')
{
$resultNiedrPrios = $db->execReadOnlyQuery($qryNiedrPrios);
if (hasdata($resultNiedrPrios))
{
foreach ($resultNiedrPrios->retval as $rowNiedrPrios)
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio abgewiesen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenHoeherePrio'][]
= $rowNiedrPrios->nachname . ' ' . $rowNiedrPrios->vorname . ' (' . $rowNiedrPrios->prestudent_id . ')';
}
}
}
@@ -1015,6 +1059,19 @@ class ReihungstestJob extends CLI_Controller
}
$mailcontent .= '</tbody></table>';
}
if (isset($value['AbgewiesenHoeherePrio']) && !isEmptyArray($value['AbgewiesenHoeherePrio']))
{
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
Folgende Bewerber wurden in einem höher priorisierten Studiengang abgewiesen:</p>';
$mailcontent .= '<table style="border-collapse: collapse; border: 1px solid grey;">';
$mailcontent .= ' <tbody>';
sort($value['AbgewiesenHoeherePrio']);
foreach ($value['AbgewiesenHoeherePrio'] AS $key=>$bewerber)
{
$mailcontent .= '<tr><td style="font-family: verdana, sans-serif; border: 1px solid grey; padding: 3px">'.$bewerber.'</td></tr>';
}
$mailcontent .= '</tbody></table>';
}
if ($bcc != '' && isset($value['AbgewiesenWeilBewerber']) && !isEmptyArray($value['AbgewiesenWeilBewerber']))
{
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
@@ -220,7 +220,7 @@ class Pruefungsprotokoll extends Auth_Controller
$nullfields = array('uhrzeit', 'endezeit', 'abschlussbeurteilung_kurzbz', 'protokoll');
foreach ($data as $idx => $item)
{
if (in_array($idx, $nullfields) & $item === '')
if (in_array($idx, $nullfields) && $item === '')
$data[$idx] = null;
}
@@ -0,0 +1,531 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
class approveAnrechnungDetail extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:rw',
'download' => 'lehre/anrechnung_genehmigen:rw',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$anrechnung_id = $this->input->get('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
show_error('Missing correct parameter');
}
// Check if user is entitled to read the Anrechnung
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
// Get Genehmigung data
if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData,
'genehmigungData' => $genehmigungData
);
$this->load->view('lehre/anrechnung/approveAnrechnungDetail.php', $viewData);
}
/**
* Approve Anrechnungen.
*/
public function approve()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved,
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Reject Anrechnungen.
*/
public function reject()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected,
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Request recommendation for Anrechnungen.
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'empfehlung_anrechnung' => null,
'empfehlung_angefordert_am' => (new DateTime())->format('d.m.Y')
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to lectors
* 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 (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Check if user is entitled to read this Anrechnung
* @param $anrechnung_id
*/
private function _checkIfEntitledToReadAnrechnung($anrechnung_id)
{
$result = $this->AnrechnungModel->load($anrechnung_id);
if(!$result = getData($result)[0])
{
show_error('Failed loading Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this Anrechnung');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
{
// 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);
/**
* 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);
// Send mail to lectors
foreach ($lector_arr as $lector)
{
$to = $lector->uid;
$vorname = $lector->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
if (!$stgl_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'stgl_name' => $stgl_name,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Deine Empfehlung wird benötigt'
);
}
return true;
}
/**
* 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.
* @param $anrechnung_arr
* @return array
*/
private function _getLectors($anrechnung_arr)
{
$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']);
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'));
// 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
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
* But we wish to send only one email by to that one person)
* **/
foreach ($lector_arr as $lector)
{
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
@@ -0,0 +1,461 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class approveAnrechnungUebersicht extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:rw',
'download' => 'lehre/anrechnung_genehmigen:rw',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
// Retrieve studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
show_error(getError($studiengang_kz_arr));
}
if (!is_string($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr
);
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
}
/**
* Approve Anrechnungen.
*/
public function approve()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Reject Anrechnungen.
*/
public function reject()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Request recommendation for Anrechnungen.
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'empfehlung_anrechnung' => null
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to lectors
* 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 (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
{
// 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);
/**
* 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);
// Send mail to lectors
foreach ($lector_arr as $lector)
{
$to = $lector->uid;
$vorname = $lector->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
if (!$stgl_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'stgl_name' => $stgl_name,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Deine Empfehlung wird benötigt'
);
}
return true;
}
/**
* 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.
* @param $anrechnung_arr
* @return array
*/
private function _getLectors($anrechnung_arr)
{
$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']);
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'));
// 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
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
* But we wish to send only one email by to that one person)
* **/
foreach ($lector_arr as $lector)
{
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
@@ -0,0 +1,409 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class requestAnrechnung extends Auth_Controller
{
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'student/anrechnung_beantragen:rw',
'apply' => 'student/anrechnung_beantragen:rw',
'download' => 'student/anrechnung_beantragen:rw',
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
$lehrveranstaltung_id = $this->input->get('lv_id');
if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
// Check if application deadline is expired
// $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz);
$is_expired = false; // Set to false until Deadline is defined
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
{
$prestudent_id = getData($student)[0]->prestudent_id;
}
else
show_error('Cant load User');
// Get Anrechung data
$result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (!$anrechnungData = getData($result))
{
show_error(getError($anrechnungData));
}
// Dont show who is progressing the application to the student
if ($anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_KF)
{
$anrechnungData->status = getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process';
}
$antragData = $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id);
$viewData = array(
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'is_expired' => $is_expired,
'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id)
? 'disabled'
: ''
);
$this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData);
}
/**
* Apply Anrechnungsantrag and send to STGL
*/
public function apply()
{
$anmerkung = $this->input->post('anmerkung');
$begruendung_id = $this->input->post('begruendung');
$lehrveranstaltung_id = $this->input->post('lv_id');
$studiensemester_kurzbz = $this->input->post('studiensemester');
if (empty($_FILES['uploadfile']['name']))
{
show_error('Missing upload file');
}
if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
{
$prestudent_id = getData($student)[0]->prestudent_id;
}
else
show_error('Cant load User');
$result = $this->_getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (hasData($result))
{
show_error('Der Antrag wurde bereits gestellt');
}
// Start DB transaction
$this->db->trans_start(false);
// Upload document
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
if(isError($uploaddata = $this->dmslib->upload($dms, array('pdf'))))
{
show_error(getError($uploaddata));
}
// Get PrestudentID
$result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz);
if (!$prestudent = getData($result)[0])
{
show_error('Failed retrieving prestudent');
}
// Save Anrechnung
$result = $this->AnrechnungModel->insert(array(
'prestudent_id' => $prestudent->prestudent_id,
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'begruendung_id' => $begruendung_id,
'dms_id' => $uploaddata->retval['dms_id'],
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anmerkung_student' => $anmerkung,
'insertvon' => $this->_uid
));
if (isError($result))
{
show_error('Failed inserting Anrechnung');
}
// Save Anrechnungstatus 'inProgressSTGL'
$result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
if (isError($result))
{
show_error('Failed saving Anrechnungstatus');
}
// Transaction complete!
$this->db->trans_complete();
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
show_error($result->msg, EXIT_ERROR);
}
// Send mail to STGL
$mail_params = array(
'studiengang_kz' => $prestudent->studiengang_kz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
);
if(!$this->_sendSanchoMail($mail_params))
{
show_error('Failed sending mail');
}
else
{
redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id);
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Load Prestudent by uid and Studiensemester.
* @param $uid
* @param $studiensemester_kurzbz
* @return mixed
*/
private function _loadPrestudent($uid, $studiensemester_kurzbz)
{
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id');
return $this->PrestudentstatusModel->loadWhere(array(
'student_uid' => $uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
)
);
}
/**
* Check if application deadline is expired.
* @param $studiensemester_kurzbz
* @return bool True if semester start is more then 1 week ago
* @throws Exception
*/
private function _checkAntragDeadline($studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addSelect('start');
if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz)))
{
show_error(getError($start));
}
$start = new DateTime($start[0]->start);
$today = new DateTime('today midnight');
// True if today > application deadline
return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART))));
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
if (!$student = getData($this->StudentModel->load(array('student_uid' => $this->_uid)))[0])
{
show_error('Failed loading Student');
}
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if($result = getData($result)[0])
{
if ($result->prestudent_id == $student->prestudent_id)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Get Anrechnung by Lehrveranstaltung
* @param $lehrveranstaltung_id
* @return mixed
*/
private function _getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return $result;
}
/**
* Send mail to STGL (if not available, send to STGL assistance)
* @param $mail_params
*/
private function _sendSanchoMail($mail_params)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($mail_params['studiengang_kz']);
// Get full name of student
$this->load->model('person/Person_model', 'PersonModel');
if (!$student_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Get lehrveranstaltung bezeichnung
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
if (!$lehrveranstaltung = getData($this->LehrveranstaltungModel->load($mail_params['lehrveranstaltung_id']))[0])
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'student_name' => $student_name,
'lehrveranstaltung_bezeichnung' => $lehrveranstaltung->bezeichnung,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungAntragStellen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt'
);
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -0,0 +1,397 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
class reviewAnrechnungDetail extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$anrechnung_id = $this->input->get('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
show_error('Missing correct parameter');
}
// Check if user is entitled to read this Anrechnung
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData
);
$this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData);
}
/**
* Recommend Anrechnungen.
*/
public function recommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* 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');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Dont recommend Anrechnungen.
*/
public function dontRecommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'empfehlumg_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
// Output json to ajax
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');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadAnrechnung($anrechnung_id)
{
$result = $this->AnrechnungModel->load($anrechnung_id);
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mails to STGL (if not present then to STGL assistance)
* @param $mail_params
* @param $empfehlung
* @return bool
*/
private function _sendSanchoMails($mail_params, $empfehlung)
{
// Get studiengaenge
$studiengang_kz_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('studiengang_kz');
$this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz;
}
$studiengang_kz_arr = array_unique($studiengang_kz_arr);
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz);
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -0,0 +1,337 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class reviewAnrechnungUebersicht extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
if (!is_string($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz
);
$this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData);
}
/**
* Recommend Anrechnungen.
*/
public function recommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* 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');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Dont recommend Anrechnungen.
*/
public function dontRecommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib
->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
);
}
}
// Output json to ajax
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');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mails to STGL (if not present then to STGL assistance)
* @param $mail_params
* @param $empfehlung
* @return bool
*/
private function _sendSanchoMails($mail_params, $empfehlung)
{
// Get studiengaenge
$studiengang_kz_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('studiengang_kz');
$this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz;
}
$studiengang_kz_arr = array_unique($studiengang_kz_arr);
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz);
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -92,7 +92,8 @@ class Lehrauftrag extends Auth_Controller
// Retrieve studiengaenge the user is entitled for to populate studiengang dropdown
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN)) {
show_error('Fehler bei Berechtigungsprüfung');
show_error('Keine Studiengänge gefunden.<br>
Es muss eine passende Organisationseinheit hinterlegt werden.<br>');
}
// If studiengang_kz get param was set, check against entitled stg
+13
View File
@@ -47,6 +47,19 @@ abstract class JQW_Controller extends JOB_Controller
return $jobs;
}
/**
* To get the oldest added job using the given job type
*/
protected function getOldestJob($type)
{
$jobs = $this->jobsqueuelib->getOldestJob($type);
// If an error occurred then log it in database
if (isError($jobs)) $this->logError(getError($jobs), $type);
return $jobs;
}
/**
* To get all the jobs specified by the given parameters
*/
+643
View File
@@ -0,0 +1,643 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungLib
{
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
public function __construct()
{
$this->ci =& get_instance();
$this->ci->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->ci->load->model('person/Person_model', 'PersonModel');
$this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->ci->load->model('crm/Student_model', 'StudentModel');
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
}
/**
* Get Antrag data
* @param $uid
* @param $studiensemester_kurzbz
* @param $lv_id
* @return StdClass
*/
public function getAntragData($uid, $studiensemester_kurzbz, $lv_id)
{
$antrag_data = new StdClass();
// Get lehrveranstaltung data. Break, if course is not assigned to student.
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])
{
show_error('Failed loading person data.');
}
// Get the internal personenkennzeichen
if (!$student = getData($this->ci->StudentModel->load(array('student_uid' => $uid)))[0])
{
show_error(getError($student));
}
// Get studiengang bezeichnung
if (!$studiengang = getData($this->ci->StudiengangModel->load($lv->studiengang_kz))[0])
{
show_error('Failed loading studiengang data.');
}
// Get lectors of lehrveranstaltung
$antrag_data->lektoren = array();
if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id)))
{
show_error('Failed loading course lectors.');
}
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
$antrag_data->ects = $lv->ects;
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
$antrag_data->vorname = $person->vorname;
$antrag_data->nachname = $person->nachname;
$antrag_data->matrikelnr = $student->matrikelnr;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
$antrag_data->lektoren = $lv_lektoren;
return $antrag_data;
}
/**
* Get Anrechnung data, last status and Nachweisdokument dms data.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getAnrechnungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$anrechnung_data = new StdClass();
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* Get Anrechnung data by Lehrveranstaltung. Also retrieves last status and Nachweisdokument dms data.
* @param $lehrveranstaltung_id
* @return array
* @throws Exception
*/
public function getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$anrechnung_data = new StdClass();
$anrechnung_data->anrechnung_id = '';
$anrechnung_data->prestudent_id = '';
$anrechnung_data->lehrveranstaltung = '';
$anrechnung_data->begruendung_id = '';
$anrechnung_data->anmerkung = '';
$anrechnung_data->dms_id = '';
$anrechnung_data->insertamum = '';
$anrechnung_data->insertvon = '';
$anrechnung_data->studiensemester_kurzbz = '';
$anrechnung_data->empfehlung = '';
$anrechnung_data->status_kurzbz = '';
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
$anrechnung_data->dokumentname = '';
$result = $this->ci->AnrechnungModel->loadWhere(
array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
)
);
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* Get students data by Anrechnung
* @param $anrechnung_id
* @return mixed
*/
public function getStudentData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$this->ci->AnrechnungModel->addSelect('tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id, tbl_anrechnung.studiensemester_kurzbz, vorname, nachname, geschlecht, tbl_lehrveranstaltung.bezeichnung AS "lv_bezeichnung"');
$this->ci->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_student', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid=student_uid');
$this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
$this->ci->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
{
show_error(getError($result));
}
if (!hasData($result))
{
show_error('Failed retrieving students data');
}
return $result;
}
/**
* Get Empfehlung data object.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getEmpfehlungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$empfehlung_data = new stdClass();
$empfehlung_data->empfehlung = null;
$empfehlung_data->empfehlung_von = '-';
$empfehlung_data->empfehlung_am = '-';
$empfehlung_data->empfehlung_angefordert_am = '-';
$empfehlung_data->notiz = ''; // Begruendung, if not recommended
if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
// Get date, where recommendation was last requested
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus(
$anrechnung_id,
self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR // when STLG asks for recommendation, status is set to in progress lektor
);
if ($result = getData($result)[0])
{
$empfehlung_data->empfehlung_angefordert_am = (new DateTime($result->insertamum))->format('d.m.Y');
}
if (is_null($anrechnung->empfehlung_anrechnung))
{
return success($empfehlung_data);
}
// If Empfehlung is true or false
if (!is_null($anrechnung->empfehlung_anrechnung))
{
// Get last lector and date, where recommendation was given
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus(
$anrechnung_id,
self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL // when lector sends recommendation, status is set to in progress STGL again
);
if ($result = getData($result)[0])
{
$empfehlung_datum = (new DateTime($result->insertamum))->format('d.m.Y');
}
// Get full name of lector
$result = $this->ci->PersonModel->getByUID($result->insertvon);
if ($result = getData($result)[0])
{
$empfehlung_von = $result->vorname. ' '. $result->nachname;
}
$empfehlung_data->empfehlung = $anrechnung->empfehlung_anrechnung;
$empfehlung_data->empfehlung_von = $empfehlung_von;
$empfehlung_data->empfehlung_am = $empfehlung_datum;
}
// If Empfehlung is false, retrieve also Notiz with Begruendung
if (!$anrechnung->empfehlung_anrechnung)
{
// Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet)
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR);
if ($notiz = getData($result)[0])
{
$empfehlung_data->notiz = $notiz->text;
}
}
return success($empfehlung_data);
}
/**
* Get Genehmigung data object.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getGenehmigungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$genehmigung_data = new stdClass();
$genehmigung_data->genehmigung = null;
$genehmigung_data->abgeschlossen_von = '-';
$genehmigung_data->abgeschlossen_am = '-';
$genehmigung_data->notiz = ''; // Begruendung, if rejected
if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
// Get date of approvement or rejection
$result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id);
if (!$result = getData($result)[0])
{
return success($genehmigung_data);
}
$genehmigung_data->genehmigung = $result->status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? true
: false;
$genehmigung_data->abgeschlossen_am = (new DateTime($result->insertamum))->format('d.m.Y');
// Get full name of lector
$result = $this->ci->PersonModel->getByUID($result->insertvon);
if ($result = getData($result)[0])
{
$genehmigung_data->abgeschlossen_von = $result->vorname. ' '. $result->nachname;
}
// If Anrechnung was rejected, retrieve also Notiz with Begruendung
if (!$genehmigung_data->genehmigung)
{
// Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet)
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL);
if ($notiz = getData($result)[0])
{
$genehmigung_data->notiz = $notiz->text;
}
}
return success($genehmigung_data);
}
/**
* Get last Anrechnungstatusbezeichnung in users language.
* @param $anrechnung_id
* @return mixed
*/
public function getLastAnrechnungstatus($anrechnung_id)
{
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id);
$status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig;
$status = getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1];
return $status;
}
/**
* Approve Anrechnung.
* Checks last status of Anrechnung and will only approve if last status is not approved or rejected.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function approveAnrechnung($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
$stgl_uid = getAuthUID();
// Insert new status approved
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_APPROVED);
// Update genehmigt von
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'genehmigt_von' => $stgl_uid
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // approved
}
/**
* Reject Anrechnung.
* @param $anrechnung_id
* @return array
*/
public function rejectAnrechnung($anrechnung_id, $begruendung)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont reject
}
// Insert new status rejected
$result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED);
if (isError($result))
{
show_error(getError($result));
}
// Add begruendung as notiz
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$this->ci->NotizModel->addNotizForAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL,
$begruendung,
getAuthUID()
);
return success(true); // rejected
}
/**
* Request recommendation.
* @param $anrechnung_id
* @return array
*/
public function requestRecommendation($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected or processed by lector
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
|| $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED
|| $status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR)
{
return success(false); // dont ask for recommendation
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status inProgressLektor
$result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR);
/**
* Anyway update empfehlung_anrechnung to be null
* Regardless of what empfehlung_anrechnung was already set (true/false/null), it should be (reset to ) null by
* requesting a (new) recommendation.
* **/
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => null
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
/**
* Recommend Anrechnung.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function recommendAnrechnung($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status progessed by stgl
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
// Update empfehlung_anrechnung
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => true
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
/**
* Do not recommend Anrechnung.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function dontRecommendAnrechnung($anrechnung_id, $begruendung)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status progessed by stgl
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
// Update empfehlung_anrechnung
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => false
)
);
$lektor_uid = getAuthUID();
// Add begruendung as notiz
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$this->ci->NotizModel->addNotizForAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR,
$begruendung,
$lektor_uid
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
// Return an object with Anrechnungdata
private function _setAnrechnungDataObject($anrechnung)
{
$anrechnung_data = new StdClass();
// Get Anrechnung data
$anrechnung_data->anrechnung_id = $anrechnung->anrechnung_id;
$anrechnung_data->prestudent_id = $anrechnung->prestudent_id;
$anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id;
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
$anrechnung_data->dms_id = $anrechnung->dms_id;
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
$anrechnung_data->insertvon= $anrechnung->insertvon;
$anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemester_kurzbz;
$anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung;
// Get last status_kurzbz
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung->anrechnung_id);
$anrechnung_data->status_kurzbz = $result->retval[0]->status_kurzbz;
// Get last status bezeichnung in the users language
$anrechnung_data->status = $this->getLastAnrechnungstatus($anrechnung->anrechnung_id);
// Get document name
$this->ci->DmsVersionModel->addSelect('name');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id));
if (isError($result))
{
show_error(getError($result));
}
$anrechnung_data->dokumentname = $result->retval[0]->name;
return $anrechnung_data;
}
}
+95
View File
@@ -6,6 +6,9 @@ class DmsLib
{
const FILE_CONTENT_PROPERTY = 'file_content';
const FILE_INPUT_NAME = 'uploadfile'; // name of the HTML input tag containing the uploaded file
private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file
/**
* Object initialization
*/
@@ -93,6 +96,84 @@ class DmsLib
return $result;
}
/**
* Uploads a document and saves it to DMS
* @param $dms DMS assoc array
* @param array $allowed_types Default: all. Param example: array(jpg, pdf)
* @return array
*/
public function upload($dms, $allowed_types = array('*'))
{
// Init upload configs
$this->_loadUploadLibrary($allowed_types);
if (!$this->ci->upload->do_upload(DmsLib::FILE_INPUT_NAME))
{
return error($this->ci->upload->display_errors());
}
$upload_data = $this->ci->upload->data(); // data about the uploaded file
$filename = $upload_data['file_name'];
// Insert to DMS table
if (!$result = $this->ci->DmsModel->insert($this->ci->DmsModel->filterFields($dms)))
{
return error('Failed inserting to DMS');
}
$upload_data['dms_id'] = $result->retval;
// Insert DMS version
if (!$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $result->retval, $filename)))
{
return error('Failed inserting DMS version');
}
// return result of uploaded data
return success($upload_data); // data about the uploaded file
}
/**
* Download a document
* @param $dms_id
*/
public function download($dms_id)
{
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
$this->ci->DmsVersionModel->addSelect('filename');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
if (isError($result))
{
show_error(getError($result));
}
$filename = $result->retval[0]->filename;
$file = DMS_PATH. $filename;
if (file_exists($file))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '.$finfo->file($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
else
{
show_error('File does not exist');
}
}
/**
* Saves a Document
* @param object $dms DMS Object ot be saved.
@@ -302,4 +383,18 @@ class DmsLib
return $result;
}
/**
* Loads the upload library of CI
*/
private function _loadUploadLibrary($allowed_types)
{
$config['upload_path'] = $this->UPLOAD_PATH;
$config['allowed_types'] = implode('|', $allowed_types);
$config['overwrite'] = true;
$config['file_name'] = uniqid().'.pdf';
$this->ci->load->library('upload', $config);
$this->ci->upload->initialize($config);
}
}
+13
View File
@@ -56,6 +56,19 @@ class JobsQueueLib
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
}
/**
* To get the oldest added jobs using the given job type
*/
public function getOldestJob($type)
{
$this->_ci->JobsQueueModel->resetQuery();
$this->_ci->JobsQueueModel->addOrder('creationtime', 'ASC');
$this->_ci->JobsQueueModel->addLimit('1');
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
}
/**
* To get all the jobs specified by the given parameters
*/
+4 -2
View File
@@ -167,7 +167,7 @@ class LDAPLib
}
// LDAP connection
$ldapConnection = @ldap_connect($ldapConfigs[self::SERVER], $ldapConfigs[self::PORT]);
$ldapConnection = @ldap_connect($ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]);
if ($ldapConnection) // if success
{
// Sets the LDAP protocol version
@@ -220,7 +220,9 @@ class LDAPLib
}
else // Connection error
{
return error(ldap_error($ldapConnection));
return error(
'An error occurred while connecting to the LDAP server: '.$ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]
);
}
}
}
+78 -8
View File
@@ -215,6 +215,31 @@ class MessageLib
return $messageVars; // otherwise returns the error
}
/**
* Retrieves message vars of the logged in user from view vw_msg_vars_user
*/
public function getMessageVarsLoggedInUser()
{
// Retrieves message vars from view vw_msg_vars
$messageVars = $this->_ci->MessageModel->getMsgVarsLoggedInUser();
if (isSuccess($messageVars)) // if everything is ok
{
$variablesArray = array();
$tmpVariablesArray = getData($messageVars);
// Starts from 1 to skip the first element which is uid
for ($i = 1; $i < count($tmpVariablesArray); $i++)
{
$variablesArray['{'.str_replace(' ', '_', strtolower($tmpVariablesArray[$i])).'}']
= strtoupper($tmpVariablesArray[$i]);
}
return success($variablesArray);
}
return $messageVars; // otherwise returns the error
}
/**
* Retrieves organisation units for each role that a user plays inside that organisation unit
@@ -595,11 +620,24 @@ class MessageLib
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
// And the receiver has an active account for the given organisation unit
$benutzerResult = $this->_ci->BenutzerModel->getActiveUserByPersonIdAndOrganisationUnit($message->receiver_id, $message->sender_ou);
$benutzerResult = $this->_ci->BenutzerModel->getActiveUserByPersonIdAndOrganisationUnit(
$message->receiver_id,
$message->sender_ou
);
if (isError($benutzerResult)) return $benutzerResult; // if an error occured then return it
// Use the uid + domain email
if (hasData($benutzerResult)) $message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN;
// If an active user for the given organization unit was found
if (hasData($benutzerResult))
{
// Checks if the user was NOT created in the last 24 hours
if (getData($benutzerResult)[0]->insertamum < date('Y-m-d H:i:s', strtotime('-1 day')))
{
// Use the uid + domain email
$message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN;
}
// otherwise do NOT use the internal email account
}
}
// Otherwise try with the private email
@@ -644,7 +682,7 @@ class MessageLib
// If there are presetudent
if (hasData($prestudentResults))
{
$inArray = true;
$privateOnly = false;
$organisationUnits = getData($prestudentResults);
// Look if any of the organization units of this prestudent are in the list of the
@@ -652,16 +690,21 @@ class MessageLib
foreach ($organisationUnits as $organisationUnit)
{
// If the recipient organisation unit is NOT in the list of organisation units that sent only to private emails
// NOTE: done in this way because it is easyer to check the result of array_search
if (array_search($organisationUnit, $this->_ci->config->item(self::CFG_OU_RECEIVERS_PRIVATE)) === false)
{
$inArray = false;
// NOP
}
else // otherwise If the recipient organisation unit is the list of organisation units that sent only to private emails
{
$privateOnly = true;
break;
}
}
// If the recipient prestudent organization unit is not in in the list of the
// organization units that will not send the notice email to the internal account
if (!$inArray)
if ($privateOnly)
{
// Then use the private email
$privateEmailResult = $this->_getPrivateEmail($message->receiver_id);
@@ -676,10 +719,37 @@ class MessageLib
$this->_ci->BenutzerModel->addOrder('updateamum', 'DESC');
$this->_ci->BenutzerModel->addOrder('insertamum', 'DESC');
$benutzerResult = $this->_ci->BenutzerModel->loadWhere(array('person_id' => $message->receiver_id));
$benutzerResult = $this->_ci->BenutzerModel->loadWhere(
array(
'person_id' => $message->receiver_id
)
);
if (isError($benutzerResult)) return $benutzerResult; // if an error occured then return it
$message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN; // Use the uid + domain email
// If an active user for the given organization unit was found
if (hasData($benutzerResult))
{
// For each benutzer found for this person
foreach (getData($benutzerResult) as $benutzer)
{
// Checks if the user was NOT created in the last 24 hours
if (getData($benutzerResult)[0]->insertamum < date('Y-m-d H:i:s', strtotime('-1 day')))
{
// Use the uid + domain as email address
$message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN;
}
}
}
// Otherwise try with the private email
if (isEmptyString($message->receiverContact))
{
// Then use the private email
$privateEmailResult = $this->_getPrivateEmail($message->receiver_id);
if (isError($privateEmailResult)) return $privateEmailResult; // if an error occured then return it
if (hasData($privateEmailResult)) $message->receiverContact = getData($privateEmailResult);
}
}
}
}
+79 -3
View File
@@ -48,6 +48,9 @@ class Messages_model extends CI_Model
$this->load->model('system/Benutzerrolle_model', 'BenutzerrolleModel');
// Loads model Prestudent_model
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
// Loads model Benutzer_model
$this->load->model('person/Benutzer_model', 'BenutzerModel');
}
//------------------------------------------------------------------------------------------------------------------
@@ -402,7 +405,10 @@ class Messages_model extends CI_Model
// Looping on receivers data
foreach (getData($msgVarsData) as $receiver)
{
$msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)$receiver); // replaces array keys
// Merge receivers data with logged in user data
$msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver);
$msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)getData($msgVarsDataArray)[0]); // replaces array keys
$parsedSubject = parseText($subject, $msgVarsDataArray);
$parsedBody = parseText($body, $msgVarsDataArray);
@@ -466,6 +472,15 @@ class Messages_model extends CI_Model
if (!hasData($msgVarsData)) show_error('No recipients were given');
$prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents);
// Get the senders uid (if user is an active employee)
$this->BenutzerModel->addSelect('uid');
$this->BenutzerModel->addJoin('public.tbl_mitarbeiter ma', 'ma.mitarbeiter_uid = uid');
if (!$result = getData($this->BenutzerModel->getFromPersonId($sender_id)))
{
show_error('No sender_uid found');
}
$sender_uid = $result[0]->uid;
// Adds the organisation unit to each prestudent
if (isEmptyString($oe_kurzbz) && hasData($msgVarsData) && hasData($prestudentsData))
@@ -475,7 +490,15 @@ class Messages_model extends CI_Model
foreach (getData($msgVarsData) as $receiver)
{
$msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)$receiver); // replaces array keys
/**
* Merge receivers data with senders data
* NOTE: _addMsgVarsDataOfLoggedInUser usually retrieves data of the logged in user that is set in the
* templates user fields. As sendExplicitTemplateSenderId is run by a job, a sender uid is passed to be used
* instead the logged in user.
*/
$msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver, $sender_uid);
$msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)getData($msgVarsDataArray)[0]); // replaces array keys
// Additional message variables
if (is_array($msgVars)) $msgVarsDataArray = array_merge($msgVarsDataArray, $msgVars);
@@ -606,6 +629,9 @@ class Messages_model extends CI_Model
$parseMessageText = error('The given person_id is not a valid number');
if (is_numeric($person_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPersonId($person_id);
// Add message vars data of the logged in user
$parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText);
if (hasData($parseMessageText))
{
@@ -629,7 +655,10 @@ class Messages_model extends CI_Model
$parseMessageText = error('The given prestudent_id is not a valid number');
if (is_numeric($prestudent_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id);
// Add message vars data of the logged in user
$parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText);
if (hasData($parseMessageText))
{
$parseMessageText = success(
@@ -839,6 +868,26 @@ class Messages_model extends CI_Model
$variables[] = $tmpVar;
}
// ---------------------------------------------------------------------------------------
// Retrieves message vars of logged in user from database view vw_msg_vars_person
$result = null;
// If data contains a prestudent id
$result = $this->messagelib->getMessageVarsLoggedInUser();
if (isError($result)) show_error(getError($result));
// Then builds an array that contains objects with field name and field description of logged in user data
$user_fields = array();
foreach (getData($result) as $id => $description)
{
$obj = new stdClass();
$obj->id = $id;
$obj->description = $description;
$user_fields[] = $obj;
}
// ---------------------------------------------------------------------------------------
// Retrieves the sender id
@@ -859,6 +908,7 @@ class Messages_model extends CI_Model
'subject' => $replySubject,
'body' => $replyBody,
'variables' => $variables,
'user_fields' => $user_fields,
'organisationUnits' => getData($organisationUnits),
'senderIsAdmin' => getData($senderIsAdmin),
'recipientsArray' => $recipientsArray,
@@ -867,4 +917,30 @@ class Messages_model extends CI_Model
'type' => $type
);
}
/**
* Adds message vars data of the logged in user to the given object (that should also have message vars data)
* @param object $otherMsgVarsDataObj Can be success object or simple object.
* @return object Returns success object.
*/
public function _addMsgVarsDataOfLoggedInUser($otherMsgVarsDataObj, $uid = null)
{
// First check if param type is object
if (!is_object($otherMsgVarsDataObj)) show_error('Must pass an object to merge with data of logged in user');
// If it is a return object, extract the simple data object
if (isSuccess($otherMsgVarsDataObj))
{
$otherMsgVarsDataObj = getData($otherMsgVarsDataObj)[0];
}
// Retrieve message vars data of the logged in user
if (!$msgVarsDataLoggedInUser = getData($this->MessageModel->getMsgVarsDataByLoggedInUser($uid))[0])
{
return success($otherMsgVarsDataObj); // If failed, return at least given object as expected success object
}
return success(array((object)(array_merge((array) $otherMsgVarsDataObj, (array) $msgVarsDataLoggedInUser))));
}
}
+21
View File
@@ -45,4 +45,25 @@ class Student_model extends DB_Model
$max += 1;
return $matrikelnummer.sprintf("%03d", $max);
}
/**
* Get students UID by PrestudentID.
* @param $prestudent_id
* @return mixed
*/
public function getUID($prestudent_id)
{
$this->addSelect('student_uid');
$result = $this->loadWhere(
array('prestudent_id' => $prestudent_id)
);
if (!hasData($result))
{
show_error('Failed getting UID by prestudent_id');
}
return $result->retval[0]->student_uid;
}
}
@@ -11,4 +11,76 @@ class Anrechnung_model extends DB_Model
$this->dbTable = 'lehre.tbl_anrechnung';
$this->pk = 'anrechnung_id';
}
/**
* Save Anrechnungstatus.
* @param $anrechnung_id
* @param $status_kurzbz
* @return array|null
*/
public function saveAnrechnungstatus($anrechnung_id, $status_kurzbz)
{
$qry = '
INSERT INTO lehre.tbl_anrechnung_anrechnungstatus (
anrechnung_id, status_kurzbz, insertvon
) VALUES ( ?, ?, ?);
';
return $this->execQuery($qry, array($anrechnung_id, $status_kurzbz, getAuthUID()));
}
/**
* Get the last inserted Anrechnungstatus
* @param $anrechnung_id
* @return array|null
*/
public function getLastAnrechnungstatus($anrechnung_id, $status_kurzbz = null)
{
if (is_string($status_kurzbz))
{
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
AND status_kurzbz = ?
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id, $status_kurzbz));
}
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id));
}
/**
* Get status approved / rejected, if present.
* @param $anrechnung_id
* @return array|null
*/
public function getApprovedOrRejected($anrechnung_id)
{
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
AND (status_kurzbz = \'approved\' OR status_kurzbz = \'rejected\')
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id));
}
}
@@ -0,0 +1,15 @@
<?php
class Anrechnungstatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnungstatus';
$this->pk = 'status_kurzbz';
}
}
@@ -273,4 +273,24 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, $parametersarray);
}
/**
* Gets Lehrveranstaltung and its Lehreinheiten (multiple rows possible).
* Returns empty array if student has no Lehrveranstaltung.
* @param $uid
* @param $studiensemester_kurzbz
* @param $lehrveranstaltung_id
* @return array|null
*/
public function getLvByStudent($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)
{
$query = '
SELECT * FROM campus.vw_student_lehrveranstaltung
WHERE uid = ?
AND studiensemester_kurzbz = ?
AND lehrveranstaltung_id = ?;
';
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
}
@@ -41,4 +41,23 @@ class Projektbetreuer_model extends DB_Model
return error ('Incorrect parameter type');
}
}
/**
* Get Projektbetreuer data by authentification token
* @param $zugangstoken
* @return object
*/
public function getBetreuerByToken($zugangstoken)
{
$qry = '
SELECT tbl_projektbetreuer.person_id, tbl_projektbetreuer.projektarbeit_id, student_uid
FROM lehre.tbl_projektbetreuer
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
WHERE zugangstoken = ? AND zugangstoken_gueltigbis >= NOW()
ORDER BY tbl_projektbetreuer.insertamum DESC, projektarbeit_id DESC
LIMIT 1
';
return $this->execQuery($qry, array($zugangstoken));
}
}
@@ -10,5 +10,6 @@ class Zeugnisnote_model extends DB_Model
parent::__construct();
$this->dbTable = 'lehre.tbl_zeugnisnote';
$this->pk = array('studiensemester_kurzbz', 'student_uid', 'lehrveranstaltung_id');
$this->hasSequence = false;
}
}
@@ -448,4 +448,37 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, array($typ));
}
/**
* Get Studiengangsleitung
* @param null $studiengang_kz
* @return array
*/
public function getLeitung($studiengang_kz = null)
{
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email');
$this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz');
$this->addJoin('public.tbl_benutzer', 'uid');
$this->addJoin('public.tbl_person', 'person_id');
if (is_null($studiengang_kz))
{
$condition = '
funktion_kurzbz = \'Leitung\'
AND ( datum_von <= NOW() OR datum_von IS NULL )
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
';
}
elseif (is_numeric($studiengang_kz))
{
$condition = '
funktion_kurzbz = \'Leitung\'
AND ( datum_von <= NOW() OR datum_von IS NULL )
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
AND studiengang_kz = ' . $this->db->escape($studiengang_kz, FHC_INTEGER)
;
}
return $this->loadWhere($condition);
}
}
@@ -132,7 +132,7 @@ class Studiensemester_model extends DB_Model
$query .= ' WHERE SUBSTRING(studiensemester_kurzbz FROM 1 FOR 2) = \'' . $ss . '\'';
}
$query .= ' ORDER BY delta LIMIT 1';
$query .= ' ORDER BY delta, start LIMIT 1';
return $this->execQuery($query);
}
@@ -188,7 +188,7 @@ class Studiensemester_model extends DB_Model
{
$query = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester
WHERE studiensemester_kurzbz <> ?
ORDER BY delta LIMIT 1";
ORDER BY delta, start LIMIT 1";
return $this->execQuery($query, array($studiensemester_kurzbz));
}
+16 -7
View File
@@ -13,6 +13,11 @@ class Benutzer_model extends DB_Model
$this->hasSequence = false;
}
/**
* Gets active Benutzer from person_id
* @param $person_id
* @return object
*/
public function getFromPersonId($person_id)
{
return $this->loadWhere(array('person_id' => $person_id, 'aktiv' => true));
@@ -23,13 +28,17 @@ class Benutzer_model extends DB_Model
*/
public function getActiveUserByPersonIdAndOrganisationUnit($person_id, $oe_kurzbz)
{
$sql = 'SELECT b.uid
FROM public.tbl_benutzer b
JOIN public.tbl_prestudent ps USING (person_id)
JOIN public.tbl_studiengang sg USING (studiengang_kz)
WHERE ps.person_id = ?
AND sg.oe_kurzbz = ?
AND b.aktiv = TRUE';
$sql = 'SELECT
b.uid,
b.insertamum
FROM
public.tbl_prestudent ps
JOIN public.tbl_studiengang sg USING (studiengang_kz)
JOIN public.tbl_student USING(prestudent_id)
JOIN public.tbl_benutzer b ON(uid = student_uid)
WHERE ps.person_id = ?
AND sg.oe_kurzbz = ?
AND b.aktiv = TRUE';
return $this->execQuery($sql, array($person_id, $oe_kurzbz));
}
+70
View File
@@ -158,6 +158,76 @@ class Notiz_model extends DB_Model
return $this->loadWhere(array('person_id' => $person_id, 'titel LIKE' => $titel));
}
/**
* Add a Notiz for a given Anrechnung
* @param $anrechnung_id
* @param $titel
* @param $text
* @param $verfasser_uid
* @return array
*/
public function addNotizForAnrechnung($anrechnung_id, $titel, $text, $verfasser_uid)
{
// Loads model Notizzuordnung_model
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
// Start DB transaction
$this->db->trans_start(false);
$result = $this->insert(array(
'titel' => $titel,
'text' => $text,
'erledigt' => true,
'verfasser_uid' => $verfasser_uid,
"insertvon" => $verfasser_uid
));
if (isSuccess($result))
{
$notiz_id = $result->retval;
$result = $this->NotizzuordnungModel->insert(array('notiz_id' => $notiz_id, 'anrechnung_id' => $anrechnung_id));
}
// Transaction complete!
$this->db->trans_complete();
// Check if everything went ok during the transaction
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
$result = error($result->msg, EXIT_ERROR);
}
else
{
$this->db->trans_commit();
$result = success($notiz_id);
}
return $result;
}
/**
* Get Notizen by Anrechnung and title ordered last first
*
* @param $anrechnung_id
* @return array
*/
public function getNotizByAnrechnung($anrechnung_id, $titel = null)
{
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
$this->addOrder('insertamum', 'DESC');
if (is_string($titel))
{
return $this->loadWhere(array(
'anrechnung_id' => $anrechnung_id,
'titel' => $titel
));
}
return $this->loadWhere(array('anrechnung_id' => $anrechnung_id));
}
// ------------------------------------------------------------------------------------------------------
}
+16 -1
View File
@@ -191,7 +191,7 @@ class Person_model extends DB_Model
*/
public function getByUid($uid)
{
$this->addSelect('vorname, nachname, gebdatum, person_id');
$this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr');
$this->addJoin('tbl_benutzer', 'person_id');
return $this->loadWhere(array('uid' => $uid));
@@ -248,4 +248,19 @@ class Person_model extends DB_Model
return $this->execQuery($qry, $parametersArray);
}
/**
* Get full name of given uid. (Vorname Nachname)
* @param $uid
* @return array
*/
public function getFullName($uid)
{
if (!$result = getData($this->getByUid($uid))[0])
{
show_error('Failed loading person');
}
return success($result->vorname. ' '. $result->nachname);
}
}
@@ -171,6 +171,23 @@ class Message_model extends DB_Model
return error($this->db->error(), FHC_DB_ERROR);
}
}
/**
* Get message variables for logged in user
*/
public function getMsgVarsLoggedInUser()
{
$result = $this->db->query('SELECT * FROM public.vw_msg_vars_user WHERE 0 = 1');
if ($result)
{
return success($result->list_fields());
}
else
{
return error($this->db->error(), FHC_DB_ERROR);
}
}
/**
* getMsgVarsDataByPrestudentId
@@ -191,4 +208,26 @@ class Message_model extends DB_Model
return $this->execQuery(sprintf($query, is_array($person_id) ? 'IN' : '='), array($person_id));
}
/**
* Get message vars data for logged in user
* @param string uid The UID should ONLY be passed if this method is called by a cronjob.
* This is to enable jobs to use templates which use logged-in-user fields ('Eigene Felder').
* @return array|null
*/
public function getMsgVarsDataByLoggedInUser($uid = null)
{
if (is_string($uid))
{
$params = array($uid);
}
else
{
$params = array(getAuthUID());
}
$query = 'SELECT * FROM public.vw_msg_vars_user WHERE my_uid = ?';
return $this->execQuery($query, $params);
}
}
@@ -0,0 +1,359 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen',
'nichtSelektierbarAufgrundVon',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/approveAnrechnungDetail.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenGenehmigen'); ?>
<small>| <?php echo $this->p->t('global', 'detailsicht'); ?></small>
</h3>
</div>
</div>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="approveAnrechnungDetail-anrechnungInfoTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="approveAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default" id="test">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-empfehlungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'empfehlungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="approveAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="approveAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz != 'inProgressLektor' ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'keineEmpfehlungAngefordert'); ?>
</div>
<div class="panel panel-default panel-body <?php echo
is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressLektor'
? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsAngefordert">
<?php echo $this->p->t('anrechnung', 'empfehlungAngefordertNochKeineEmpfehlung'); ?>
<span id="approveAnrechnungDetail-empfehlungDetail-empfehlungAngefordertAm">
<?php echo $empfehlungData->empfehlung_angefordert_am ?>
</span>.
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
</div>
</form>
<div class="pull-right">
<button id="approveAnrechnungDetail-request-recommendation" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?>
</button>
</div>
</div>
</div>
<br><br>
<!-- Genehmigungssdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'genehmigung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-genehmigungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'genehmigungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'abgeschlossenVon'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenVon"><?php echo $genehmigungData->abgeschlossen_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'abschlussdatum'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenAm"><?php echo $genehmigungData->abgeschlossen_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-genehmigungDetail">
<div class="panel panel-default panel-body <?php echo is_null($genehmigungData->genehmigung) ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineGenehmigung'); ?>
</div>
<div class="alert alert-success <?php echo $genehmigungData->genehmigung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv">
<b><?php echo $this->p->t('anrechnung', 'genehmigungPositiv'); ?></b>
</div>
<div class="<?php echo $genehmigungData->genehmigung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'genehmigungNegativ'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-genehmigungDetail-begruendung"><?php echo htmlentities($genehmigungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungNegativQuestion'); ?></h4>
<b>&nbsp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-reject-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungDetail-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'genehmigungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-genehmigung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="approveAnrechnungDetail-reject-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'ablehnen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'genehmigen')); ?>
</button>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="approveAnrechnungDetail-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<br>
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,236 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'tabulator' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
),
'anrechnung' => array(
'nachweisdokumente',
'empfehlung',
'confirmTextAntragHatBereitsEmpfehlung',
'herkunft'
),
'ui' => array(
'anzeigen',
'alleAnzeigen',
'hilfeZuDieserSeite',
'hochladen',
'spaltenEinstellen',
'hilfeZuDieserSeite',
'alleAuswaehlen',
'alleAbwaehlen',
'ausgewaehlteZeilen',
'hilfe',
'tabelleneinstellungen',
'keineDatenVorhanden',
'spaltenEinstellen',
'ja',
'nein',
'nichtSelektierbarAufgrundVon',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt'
),
'person' => array(
'student',
'personenkennzeichen',
'vorname',
'nachname'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/approveAnrechnungUebersicht.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenGenehmigen'); ?>
<small>| <?php echo ucfirst($this->p->t('global', 'uebersicht')); ?></small>
</h3>
</div>
</div>
<!-- dropdown studiensemester -->
<div class="row">
<div class="col-lg-12">
<form id="formApproveAnrechnungUebersicht" class="form-inline" action="" method="get">
<div class="form-group">
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<button type="submit"
class="btn btn-default form-group"><?php echo ucfirst($this->p->t('ui', 'anzeigen')); ?></button>
</form>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
</div>
</div>
<!-- Genehmigen / Ablehnen Panel -->
<div class="row">
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungenNegativQuestion'); ?></h4>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ol>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ol>
<br>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungUebersicht-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungenPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'genehmigungenPositiv'); ?><br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</div>
<!-- Filter buttons / Submit buttons-->
<div class="row">
<!-- Filter buttons -->
<div class="col-xs-3">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<button id="show-inProgressDP" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'alleInBearbeitungSTGL'); ?>">
<i class='fa fa-eye'></i>
</button>
<button id="show-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-up'></i>
</button>
<button id="show-not-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurNichtEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-down'></i>
</button>
<button id="show-approved" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurGenehmigteAnzeigen'); ?>"><i
class='fa fa-check'></i>
</button>
<button id="show-rejected" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurAbgelehnteAnzeigen'); ?>"><i
class='fa fa-times'></i>
</button>
</div>
</div>
</div>
<!-- Action Buttons 'Genehmigen', Ablehnen, 'Empfehlung anfordern'-->
<div class="col-xs-9">
<div class="pull-right">
<button id="approveAnrechnungUebersicht-request-recommendation"
class="btn btn-default btn-w200 btn-mr50"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?></button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('global', 'ablehnen')); ?></button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('global', 'genehmigen')); ?></button>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,129 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$query = '
WITH anrechnungen AS
(
SELECT DISTINCT
anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
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)
)
SELECT 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)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'approveAnrechnungUebersicht',
'requiredPermissions' => 'lehre/anrechnung_genehmigen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'anrechnung_id',
'lehrveranstaltung_id',
'begruendung_id',
'dms_id',
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
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
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetHeader: {
headerButtons: true
},
tableWidgetFooter: {
selectButtons: true
},
selectableCheck: function(row){
return func_selectableCheck(row);
},
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
},
tooltips: function(cell){
return func_tooltips(cell);
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
stg_bezeichnung: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_bezeichnung: {headerFilter:"input"}
}', // col properties
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
@@ -0,0 +1,242 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'antragStellen'),
'jquery' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/requestAnrechnung.js'
)
)
);
?>
<style>
.tooltip-inner {
width:300px;
}
</style>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anerkennungNachgewiesenerKenntnisse'); ?>
<small>| <?php echo $this->p->t('anrechnung', 'antragStellen'); ?></small>
</h3>
</div>
</div>
<?php echo form_open_multipart(current_url() . '/apply',
['id' => 'requestAnrechnung-form'],
['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz]
); ?>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten, Dokument Upload, Notiz-->
<div class="row">
<div class="col-lg-12">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="requestAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'lektor')); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Antrag mit Checkboxen -->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 3px">
<span><?php echo $this->p->t('anrechnung', 'antragStellenText'); ?></span>&emsp;
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="1" required
<?php echo $anrechnungData->begruendung_id == '1' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenZeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundZeugnisTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundZeugnisTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="4" required
<?php echo $anrechnungData->begruendung_id == '4' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenPraxis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundBerufTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundBerufTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
</div>
</div>
</div>
<!-- Dokument Upload-->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundAllgemeinTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50"
required <?php echo $disabled; ?>>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'uploadTooltipText'); ?>">
<i class="fa fa-lg fa-question-circle-o" aria-hidden="true"></i>
</span>
<?php if (!empty($anrechnungData->dms_id)): ?>
<a class="pull-right"
href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Notiz -->
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="panel-body">
<textarea class="form-control" name="anmerkung" rows="2"
required <?php echo $disabled; ?>><?php echo $anrechnungData->anmerkung; ?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Submit button 'Anrechnung beantragen'-->
<div class="pull-right">
<input type="submit" id="requestAnrechnung-submit" class="btn btn-primary"
value="<?php echo $this->p->t('anrechnung', 'anrechnungBeantragen'); ?>" <?php echo $disabled; ?>>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="requestAnrechnung-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<?php if ($is_expired): ?>
<div class="alert alert-warning">
<?php echo $this->p->t('global', 'bearbeitungGesperrt'); ?>
<?php echo $is_expired && empty($antragData->anrechnung_id) ? ': ' . $this->p->t('anrechnung', 'deadlineUeberschritten') : ''; ?>
</div>
<?php endif; ?>
<br>
<?php $this->load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
</div>
</div>
<?php echo form_close(); ?>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,53 @@
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<!-- Beantragung: Fristen panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"
aria-expanded="true" aria-controls="collapseOne">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenBody'); ?>
</div>
</div>
</div>
<!-- Nachweisdokumente: Voraussetzung panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingTwo">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"
aria-expanded="false" aria-controls="collapseTwo">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteTitle'); ?>
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteBody'); ?>
</div>
</div>
</div>
<!-- Herkunft der Kenntnisse: Angaben panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingThree">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree"
aria-expanded="false" aria-controls="collapseThree">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseTitle'); ?>
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseBody'); ?>
</div>
</div>
</div>
</div>
@@ -0,0 +1,278 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/reviewAnrechnungDetail.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenPruefen'); ?>
<small>| <?php echo $this->p->t('global', 'detailsicht'); ?></small>
</h3>
</div>
</div>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>
</span>&emsp;
<span class="reviewAnrechnungDetail-anrechnungInfoTooltip" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="reviewAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="reviewAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="reviewAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="reviewAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body <?php echo is_null($empfehlungData->empfehlung) ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineEmpfehlung'); ?>
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="reviewAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungNegativQuestion'); ?></h4>
&ensp;
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungDetail-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-empfehlung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="reviewAnrechnungDetail-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<br>
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,66 @@
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"
aria-expanded="true" aria-controls="collapseOne">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingZero">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseZero"
aria-expanded="true" aria-controls="collapseZero">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseZero" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingZero">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingTwo">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"
aria-expanded="false" aria-controls="collapseTwo">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteTitle'); ?>
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingThree">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree"
aria-expanded="false" aria-controls="collapseThree">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseTitle'); ?>
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseBody'); ?>
</div>
</div>
</div>
</div>
@@ -0,0 +1,236 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'tabulator' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
),
'anrechnung' => array(
'nachweisdokumente',
'empfehlung',
'herkunft'
),
'ui' => array(
'anzeigen',
'alleAnzeigen',
'hilfeZuDieserSeite',
'hochladen',
'spaltenEinstellen',
'hilfeZuDieserSeite',
'alleAuswaehlen',
'alleAbwaehlen',
'ausgewaehlteZeilen',
'hilfe',
'tabelleneinstellungen',
'keineDatenVorhanden',
'spaltenEinstellen',
'ja',
'nein',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen'
),
'person' => array(
'student',
'personenkennzeichen',
'vorname',
'nachname'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenPruefen'); ?>
<small>| <?php echo ucfirst($this->p->t('global', 'uebersicht')); ?></small>
</h3>
</div>
</div>
<!-- dropdown studiensemester -->
<div class="row">
<div class="col-lg-12">
<form id="formApproveAnrechnungUebersicht" class="form-inline" action="" method="get">
<div class="form-group">
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<button type="submit"
class="btn btn-default form-group"><?php echo ucfirst($this->p->t('ui', 'anzeigen')); ?></button>
</form>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php'); ?>
</div>
</div>
<!-- Empfehlung / Nicht Empfehlung Panel -->
<div class="row">
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungenNegativQuestion'); ?></h4>
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungUebersicht-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungenPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungenPositiv'); ?><br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</div>
<div class="row">
<!-- Filter buttons -->
<div class="col-xs-3">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<button id="show-need-recommendation" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurFehlendeEmpfehlungenAnzeigen'); ?>"><i
class='fa fa-eye'></i>
</button>
<button id="show-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-up'></i>
</button>
<button id="show-not-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurNichtEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-down'></i>
</button>
<button id="show-approved" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurGenehmigteAnzeigen'); ?>"><i
class='fa fa-check'></i>
</button>
<button id="show-rejected" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurAbgelehnteAnzeigen'); ?>"><i
class='fa fa-times'></i>
</button>
</div>
</div>
</div>
<!-- Action Buttons 'Empfehlen', 'Nicht empfehlen'-->
<div class="col-xs-9">
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?></button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?></button>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,139 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$LEKTOR_UID = getAuthUID();
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$query = '
WITH anrechnungen AS
(
SELECT DISTINCT
anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
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)
)
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\'
)
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'reviewAnrechnungUebersicht',
'requiredPermissions' => 'lehre/anrechnung_empfehlen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'anrechnung_id',
'lehrveranstaltung_id',
'begruendung_id',
'dms_id',
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
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
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetHeader: {
headerButtons: true
},
tableWidgetFooter: {
selectButtons: true
},
selectableCheck: function(row){
return func_selectableCheck(row);
},
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
},
tooltips: function(cell){
return func_tooltips(cell);
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
stg_bezeichnung: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_bezeichnung: {headerFilter:"input"}
}', // col properties
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
@@ -330,7 +330,6 @@ $filterWidgetArray = array(
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "row_index", // 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
@@ -353,6 +352,9 @@ $filterWidgetArray = array(
renderStarted:function(){
func_renderStarted(this);
},
tableWidgetHeader: {
headerButtons: true
},
tableWidgetFooter: {
selectButtons: true
}
@@ -342,7 +342,6 @@ $filterWidgetArray = array(
layout: "fitColumns", // fit columns to width of table
layoutColumnsOnNewData: true, // ajust column widths to the data each time TableWidget is loaded
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
groupBy:"lehrveranstaltung_id",
groupToggleElement:"header", //toggle group on click anywhere in the group header
groupHeader: function(value, count, data, group){
@@ -370,6 +369,9 @@ $filterWidgetArray = array(
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetHeader: {
headerButtons: true
},
tableWidgetFooter: {
selectButtons: true
}
@@ -76,6 +76,9 @@ $tableWidgetArray = array(
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetHeader: {
headerButtons: true
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
vertrag_id: {visible: false},
@@ -376,7 +376,6 @@ $filterWidgetArray = array(
layout:"fitColumns", // fit columns to width of table
layoutColumnsOnNewData: true, // ajust column widths to the data each time TableWidget is loaded
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
groupBy:"lehrveranstaltung_id",
groupToggleElement:"header", //toggle group on click anywhere in the group header
groupHeader: function(value, count, data, group){
@@ -405,6 +404,9 @@ $filterWidgetArray = array(
dataLoaded: function(data){
func_dataLoaded(data, this);
},
tableWidgetHeader: {
headerButtons: true
},
tableWidgetFooter: {
selectButtons: true
}
@@ -83,19 +83,41 @@
</label>
<?php
$size = count($variables) > 19 ? 19 : count($variables);
echo $this->widgetlib->widget(
'MultipleDropdown_widget',
array('elements' => success($variables)),
array(
'name' => 'variables[]',
'id' => 'variables',
'size' => count($variables),
'size' => $size,
'multiple' => true
)
);
?>
</div>
<br>
<div class="form-group">
<label>
<?php echo ucfirst($this->p->t('ui', 'meineFelder')); ?>:
</label>
<?php
$size = count($user_fields) > 5 ? 5 : count($user_fields);
echo $this->widgetlib->widget(
'MultipleDropdown_widget',
array('elements' => success($user_fields)),
array(
'name' => 'user_fields[]',
'id' => 'user_fields',
'size' => $size,
'multiple' => true
)
);
?>
</div>
</div>
</div>
<br>
@@ -111,14 +133,15 @@
?>
</div>
<div class="col-lg-7 col-xs-9 text-right">
<button id="sendButton" class="btn btn-default" type="button">
<div class="col-xs-6">
<button id="sendButton" class="btn btn-default pull-right" type="button">
<?php echo $this->p->t('ui', 'senden'); ?>
</button>
</div>
</div>
<br>
<hr>
<div class="row">
<div class="col-lg-12">
+1 -1
View File
@@ -6,7 +6,7 @@ class Nation_widget extends DropdownWidget
{
// Nation
$this->load->model('codex/Nation_model', 'NationModel');
$this->NationModel->addOrder('nation_code');
$this->NationModel->addOrder('kurztext');
$this->addSelectToModel($this->NationModel, 'nation_code', 'kurztext');
+1 -1
View File
@@ -8,7 +8,7 @@ class Studiengang_widget extends DropdownWidget
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->StudiengangModel->addOrder('kurzbzlang');
$this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', '\'(\' || upper(typ||kurzbz) || \') \' || tbl_studiengang.bezeichnung');
$this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', 'upper(typ||kurzbz) || \' - \' || tbl_studiengang.bezeichnung');
// If 'studiengang' (array of specific studiengaenge) is given, retrieve these studiengaenge only
if (isset($widgetData['studiengang']) && !empty($widgetData['studiengang']))
+208 -9
View File
@@ -35,6 +35,8 @@ require_once('../../../include/datum.class.php');
require_once('../../../include/mail.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
if (!$db = new basis_db())
$db=false;
@@ -116,6 +118,68 @@ if($projektarbeit_id==-1)
if(!$projektarbeit_obj->load($projektarbeit_id))
die('Fehler beim Laden der Projektarbeit');
$titel = $projektarbeit_obj->titel;
$student_uid = $projektarbeit_obj->student_uid;
// paarbeit sollte nur ab SS2021 online bewertet werden
$qry_sem="SELECT 1
FROM lehre.tbl_projektarbeit
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date
LIMIT 1";
$result_sem=$db->db_query($qry_sem);
$num_rows_sem = $db->db_num_rows($result_sem);
if($num_rows_sem < 0)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br>&nbsp;";
}
// Zweitbegutachter holen
if($betreuerart=="Erstbegutachter")
{
$projektbetreuer = new projektbetreuer();
$alleBegutachter = $projektbetreuer->getProjektbetreuer($projektarbeit_id);
if ($alleBegutachter)
{
$alleBegutachterResults = $projektbetreuer->result;
foreach ($alleBegutachterResults as $begutachter)
{
if ($begutachter->betreuerart_kurzbz == "Erstbegutachter")
{
$erstbetreuer_id = $begutachter->person_id;
$zweitbegutachter = $projektbetreuer->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid);
break;
}
}
// Mail mit Token an Zweitbegutachter senden
if ($zweitbegutachter && $num_rows_sem >= 1 && isset($_GET['zweitbegutachtertoken']))
{
$qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid);
if(!$result_std=$db->db_query($qry_std))
{
echo "<font color=\"#FF0000\">Student konnte nicht gefunden werden!</font><br>&nbsp;";
}
else
{
$row_std=@$db->db_fetch_object($result_std);
$mailres = sendZweitbegutachterMail($zweitbegutachter, $erstbetreuer_id, $row_std);
if ($mailres)
{
echo "<br><span style='color: green; '>".$p->t('abgabetool/zweitbegutachterMailGesendet', $zweitbegutachter->email)."</span><br>&nbsp;";
}
else
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zweitbegutachter->email."</font><br>&nbsp;";
}
}
}
}
}
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
@@ -124,6 +188,39 @@ echo '
<title>'.$p->t('abgabetool/abgabetool').'</title>
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style>
#beurteilungheadertable td {
height: 30px;
overflow: hidden;
}
#beurteilungheadertable form {
margin: 0;
}
/* Bild statt submit button, styling entfernen*/
button[name="zweitbegutachtertoken"] {
background: none;
color: inherit;
border: none;
font: inherit;
cursor: pointer;
outline: inherit;
}
#zweitbetrmailicon {
top: 4px;
height: 18px;
width: 18px;
position: relative;
}
#tokenmailicon {
top: 2px;
height: 15px;
width: 15px;
position: relative;
}
</style>
<script language="Javascript">
function confdel()
@@ -356,25 +453,73 @@ while ($result_nam && $row_nam=$db->db_fetch_object($result_nam))
{
$studentenname=$row_nam->studnam;
}
$htmlstr .= "<table width=100%>\n";
$htmlstr .= "<table id='beurteilungheadertable' width=100%>\n";
$htmlstr .= "<tr><td style='font-size:16px'>".$p->t('abgabetool/student').": <b>".$db->convert_html_chars($studentenname)."</b></td>";
$htmlstr .= "<td width=10% align=center><form action='../../../include/".EXT_FKT_PATH."/abgabe_lektor_benotung.php' title='Benotungsformular' target='_blank' method='GET'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='".$projektarbeit_id."'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='".$uid."'>\n";
$htmlstr .= "<input type='submit' name='note' value='".$p->t('abgabetool/benoten')."'></form></td>";
$htmlstr .= "<td width=10% align=center>";
if ($num_rows_sem >= 1)
{
$htmlstr .= "<form action='../../../index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung' title='Benotungsformular' target='_blank' method='GET'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='".$projektarbeit_id."'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='".$uid."'>\n";
$htmlstr .= "<input type='submit' name='note' value='".$p->t('abgabetool/benoten')."'></form>";
}
else
{
$htmlstr .= "<form action='javascript:void(0);'>";
$htmlstr .= "<input type='submit' value='".$p->t('abgabetool/benoten')."' title='".$p->t('abgabetool/aeltereParbeitBenoten')."'
alt='".$p->t('abgabetool/aeltereParbeitBenoten')."' disabled>";
$htmlstr .= "</form>";
}
$htmlstr .= "</td>";
if($betreuerart!="Zweitbegutachter")
{
$htmlstr .= "<td width=10% align=center><form action='https://www1.ephorus.com/' title='ephorus' target='_blank' method='GET'>";
$htmlstr .= "<input type='submit' name='ephorus' value='".$p->t('abgabetool/plagiatspruefung')."'></form></td></tr>";
$htmlstr .= "<td width=10% align=center><form action='https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start' title='plagiatsprüfung' target='_blank' method='GET'>";
$htmlstr .= "<input type='submit' name='ephorus' value='".$p->t('abgabetool/plagiatspruefung')."'></form></td>";
$htmlstr .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
$htmlstr .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>\n";
}
else
{
$htmlstr .= "<td>&nbsp;</td></tr>";
}
$htmlstr .= "<tr><td style='font-size:16px'>Titel: <b>".$db->convert_html_chars($titel)."<b></td><td></td><td valign=\"right\"><a href='abgabe_student_frameset.php?uid=$uid' target='_blank'>".$p->t('abgabetool/studentenansicht')."</a></td>";
$htmlstr .= "<tr><td style='font-size:16px'>" . $p->t('abgabetool/titel') . ": <b>".$db->convert_html_chars($titel)."<b></td><td></td><td valign=\"right\"><a href='abgabe_student_frameset.php?uid=$uid' target='_blank'>".$p->t('abgabetool/studentenansicht')."</a></td>";
$htmlstr .= "</tr>\n";
if (isset($zweitbegutachter) && $zweitbegutachter) // wenn es Zweitbegutachter gibt
{
// Zweitbegutachter anzeigen
$htmlstr .= "<tr>\n";
$htmlstr .= "<td style='font-size:16px'>" . $p->t('abgabetool/zweitBegutachter') . ": <b>" . $zweitbegutachter->voller_name . "</b>";
// keine Mail -> Fehler anzeigen
if (!isset($zweitbegutachter->email))
$htmlstr .= "&nbsp;&nbsp;<img src='../../../skin/images/exclamation.png' title='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "' alt='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "'/>";
// Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist
if (isset($zweitbegutachter->email) && !isset($zweitbegutachter->uid) && $num_rows_sem >= 1)
{
$htmlstr .= "<form action='" . htmlspecialchars($_SERVER['PHP_SELF']) . "' method='GET' style='display: inline'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='" . $student_uid . "'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='" . $projektarbeit_id . "'>";
$htmlstr .= "<input type='hidden' name='betreuerart' value='" . $betreuerart . "'>";
$htmlstr .= "&nbsp;<a href='mailto:".$zweitbegutachter->email."'><img id='zweitbetrmailicon' src='../../../skin/images/email.png'
title='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "' alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "'/></a>\n";
$htmlstr .= "&nbsp;<button type='submit' name='zweitbegutachtertoken' title='" . $p->t('abgabetool/zweitbetreuerTokenMailSenden') . "'>
<img id='tokenmailicon' src='../../../skin/images/repeat.png' alt='" . $p->t('abgabetool/zweitbetreuerTokenMailSenden') . "'/></button>\n";
$htmlstr .= "</form>";
}
$htmlstr .= "</td>\n";
$htmlstr .= "<td></td>\n";
$htmlstr .= "<td></td>\n";
$htmlstr .= "</tr>\n";
}
$htmlstr .= "</table>\n";
$htmlstr .= "<table style='width: 100%'><tr>";
$htmlstr .= "<td><br><b>".$p->t('abgabetool/abgabetermine').":</b></td>\n";
$htmlstr .= "</tr>\n";
$htmlstr .= "</table>\n";
$htmlstr .= "<br><b>".$p->t('abgabetool/abgabetermine').":</b>\n";
$htmlstr .= "<table class='detail' style='padding-top:10px;' >\n";
$htmlstr .= "<tr></tr>\n";
$htmlstr .= "<tr>
@@ -543,4 +688,58 @@ $htmlstr .= "</form>\n";
$htmlstr .= "</table>\n";
$htmlstr .= "</body></html>\n";
echo $htmlstr;
/**
* Mail zum Zweitbegutachter mit Info dass Projektarbeit zur Bewertung bereit ist, inklusive Zugangstoken wenn nötig.
* @param object $zweitbegutachter
* @param $int erstbegutachter_person_id
* @param object $student
* @return bool|projektbetreuer|void|null
*/
function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student)
{
if (!isset($zweitbegutachter->email) || $zweitbegutachter->email == '')
return false;
// send Mail to 2. Begutachter
$projektbetreuer = new projektbetreuer();
$projektbetreuer->generateZweitbegutachterToken($zweitbegutachter->person_id, $zweitbegutachter->projektarbeit_id);
if (!$projektbetreuer)
return $projektbetreuer;
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($erstbegutachter_person_id, $zweitbegutachter->projektarbeit_id, $student->uid);
if ($zweitbetr)
{
$intern = isset($zweitbetr->uid);
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung";
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid;
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
$maildata = array();
$maildata['geehrt'] = "geehrte".($zweitbegutachter->anrede=="Herr"?"r":"");
$maildata['anrede'] = $zweitbegutachter->anrede;
$maildata['betreuer_voller_name'] = $zweitbegutachter->voller_name;
$maildata['student_anrede'] = $student->anrede;
$maildata['student_voller_name'] = trim($student->titelpre." ".$student->vorname." ".$student->nachname." ".$student->titelpost);
$maildata['abgabetyp'] = isset($zweitbetr->abgabedatum) ? 'Endabgabe' : 'Abgabe';
$maildata['parbeituebersichtlink'] = $intern ? "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>" : "";
$maildata['bewertunglink'] = "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>";
$maildata['token'] = isset($zweitbetr->zugangstoken) && !$intern ? "<p>Zugangstoken: ".$zweitbetr->zugangstoken."</p>" : "";
return sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$maildata,
$zweitbetr->email,
"Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
return false;
}
?>
+33 -9
View File
@@ -99,7 +99,11 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
(SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
tbl_projektbetreuer.person_id AS betreuer_person_id,
tbl_projekttyp.bezeichnung AS prjbez, *
tbl_projekttyp.bezeichnung AS prjbez, *,
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
FROM lehre.tbl_projektarbeit
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
LEFT JOIN public.tbl_benutzer ON(uid=student_uid)
@@ -114,8 +118,6 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter')
AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)."
AND public.tbl_benutzer.aktiv
AND lehre.tbl_projektarbeit.note IS NULL
ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102';
@@ -155,7 +157,29 @@ else
($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= '');
$htmlstr1 .= $zweitbetreuer;
$htmlstr .= " <tr>\n"; //class='liste".($i%2)."'
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
if (is_null($row->note) && $row->aktiv === 't')
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt))
{
$htmlstr .= "<td>";
if (!is_null($row->babgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "/";
if (!is_null($row->zweitbetreuer_abgeschickt))
$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></td>";
}
$htmlstr .= " <td>".$row->studiensemester_kurzbz."</td>\n";
$htmlstr .= " <td>".strtoupper($row->typ.$row->kurzbz)."</td>\n";
$htmlstr .= " <td align= center>";
@@ -192,11 +216,11 @@ echo '
<title>Abgabesystem_Studentensicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<script language="JavaScript" type="text/javascript">
+94 -6
View File
@@ -34,6 +34,8 @@ require_once('../../../include/mail.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
$anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache);
@@ -324,7 +326,6 @@ if($command=="update" && $error!=true)
{
if($row_zd=@$db->db_fetch_object($result_zd))
{
$htmlstr = "<div>".$p->t('abgabetool/betreuer').": <b>".$db->convert_html_chars($betreuer)."</b><br>".$p->t('abgabetool/titel').": <b>".$db->convert_html_chars($titel)."<b><br><br></div>\n";
$htmlstr .= "<table class='detail' style='padding-top:10px;'>\n";
$htmlstr .= "<tr></tr>\n";
@@ -397,7 +398,7 @@ if($command=="update" && $error!=true)
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
}
}
//E-Mail an 1.Begutachter
//E-Mail an 1.Begutachter und 2.Begutachter senden
if($bid!='' && $bid!=NULL)
{
$qry_betr="SELECT distinct trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first,
@@ -422,15 +423,102 @@ if($command=="update" && $error!=true)
}
else
{
// paarbeit sollte nur ab SS2021 online bewertet werden
$qry_sem="SELECT 1
FROM lehre.tbl_projektarbeit
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date
LIMIT 1";
$result_sem=$db->db_query($qry_sem);
$num_rows_sem = $db->db_num_rows($result_sem);
if($num_rows_sem < 0)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br>&nbsp;";
}
$row_std=$db->db_fetch_object($result_std);
$mail = new mail($row_betr->mitarbeiter_uid."@".DOMAIN, "no-reply@".DOMAIN, "Bachelor-/Masterarbeitsbetreuung",
"Sehr geehrte".($row_betr->anrede=="Herr"?"r":"")." ".$row_betr->anrede." ".$row_betr->first."!\n\n".($row_std->anrede)." ".trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost)." hat eine Abgabe vorgenommen.\n\n--------------------------------------------------------------------------\nDies ist ein vom Bachelor-/Masterarbeitsabgabesystem generiertes Info-Mail\nCis->Mein CIS->Projektarbeiten->Bachelor- und Masterarbeitsabgabe\n--------------------------------------------------------------------------");
$mail->setReplyTo($user."@".DOMAIN);
if(!$mail->send())
// 1. Begutachter mail ohne Token
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung";
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid;
$abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe';
$maildata = array();
$maildata['geehrt'] = "geehrte".($row_betr->anrede=="Herr"?"r":"");
$maildata['anrede'] = $row_betr->anrede;
$maildata['betreuer_voller_name'] = $row_betr->first;
$maildata['student_anrede'] = $row_std->anrede;
$maildata['student_voller_name'] = trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost);
$maildata['abgabetyp'] = $abgabetyp;
$maildata['parbeituebersichtlink'] = "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>";
$maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
$maildata['token'] = "";
$mailres = sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$maildata,
$row_betr->mitarbeiter_uid."@".DOMAIN,
"Bachelor-/Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg',
$user."@".DOMAIN);
if(!$mailres)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerMailBegutachter')."</font><br>&nbsp;";
}
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
if ($paabgabetyp_kurzbz == 'end')
{
$projektbetreuer = new projektbetreuer();
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid);
if ($zweitbetr)
{
$tokenGenRes = $projektbetreuer->generateZweitbegutachterToken($zweitbetr->person_id, $projektarbeit_id);
if (!$tokenGenRes)
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid);
if (!$zweitbetr)
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
$intern = isset($zweitbetr->uid);
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
$zweitbetmaildata = array();
$zweitbetmaildata['geehrt'] = "geehrte" . ($zweitbetr->anrede == "Herr" ? "r" : "");
$zweitbetmaildata['anrede'] = $zweitbetr->anrede;
$zweitbetmaildata['betreuer_voller_name'] = $zweitbetr->voller_name;
$zweitbetmaildata['student_anrede'] = $maildata['student_anrede'];
$zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name'];
$zweitbetmaildata['abgabetyp'] = $abgabetyp;
$zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : "";
$zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
$zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($zweitbetr->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $zweitbetr->zugangstoken . "</p>" : "";
$mailres = sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$zweitbetmaildata,
$zweitbetr->email,
"Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg',
$user . "@" . DOMAIN
);
if (!$mailres)
{
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
}
}
}
}
}
else
+33 -2
View File
@@ -1626,8 +1626,9 @@ function loadPruefungsDetails(prfId)
{
$("#termin"+j+"sammelklausur").text("false");
}
$("#termin"+j+"Id").closest("tr").append("<td><a href='#' onclick='terminLoeschen(\""+d.pruefung.pruefung_id+"\", \""+t.pruefungstermin_id+"\");'><?php echo $p->t('global/löschen'); ?></a></td>");
$("#termin"+j+"Id").closest("tr").append("<td><a href='#' onclick='window.open(\"pruefungstermin_aendern.php?termin_id="+t.pruefungstermin_id+"\",\"edit\",\"height=600,width=500,toolbar=no,titlebar=no,status=no,menubar=no\");'><?php echo $p->t('global/editieren'); ?></a></td>");
//$("#termin"+j+"Id").closest("tr").append("<td><a href='#' onclick='terminLoeschen(\""+d.pruefung.pruefung_id+"\", \""+t.pruefungstermin_id+"\");'><?php //echo $p->t('global/löschen'); ?></a></td>");
$("#termin"+j+"Id").closest("tr").append("<td><a href='#' onclick='window.open(\"pruefungstermin_loeschen.php?pruefung_id="+d.pruefung.pruefung_id+"&termin_id="+t.pruefungstermin_id+"\",\"delete\",\"height=600,width=500,toolbar=no,titlebar=no,status=no,menubar=no\");'><?php echo $p->t('global/löschen'); ?></a></td>");
$("#termin"+j+"Id").closest("tr").append("<td><a href='#' onclick='window.open(\"pruefungstermin_aendern.php?termin_id="+t.pruefungstermin_id+"\",\"edit\",\"height=600,width=500,toolbar=no,titlebar=no,status=no,menubar=no\");'><?php echo $p->t('global/editieren'); ?></a></td>");
terminHinzufuegen("span");
}
});
@@ -1971,6 +1972,36 @@ function terminLoeschen(pruefung_id, pruefungstermin_id)
});
}
/**
* Löscht einen Termin ohne im Anschluss die Prüfungen neu zu laden
* @param {int} pruefung_id ID der Prüfung
* @param {int} pruefungstermin_id ID des Prüfungstermines
* @returns {undefined}
*/
function terminLoeschenOhneLaden(pruefung_id, pruefungstermin_id)
{
$.ajax({
dataType: 'json',
url: "./pruefungstermin.json.php",
type: "POST",
data: {
method: "deleteTermin",
pruefung_id: pruefung_id,
pruefungstermin_id: pruefungstermin_id
},
error: loadError
}).done(function(data){
if(data.error === "false")
{
messageBox("message", "<?php echo $p->t('pruefung/terminGeloescht'); ?>", "green", "highlight", 10000);
}
else
{
messageBox("message", data.errormsg, "red", "highlight", 10000);
}
});
}
/**
* Lädt alle Prüfungen
* @returns {void}
@@ -0,0 +1,223 @@
<?php
/*
* Copyright 2021 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*
* Authors: Nikolaus Krondraf <krondraf@technikum-wien.at>
*/
require_once('../../../../config/cis.config.inc.php');
require_once('../../../../include/functions.inc.php');
require_once('../../../../include/benutzerberechtigung.class.php');
require_once('../../../../include/studiensemester.class.php');
require_once('../../../../include/datum.class.php');
require_once('../../../../include/pruefungsfenster.class.php');
require_once('../../../../include/pruefungsanmeldung.class.php');
require_once('../../../../include/lehrveranstaltung.class.php');
require_once('../../../../include/pruefungstermin.class.php');
require_once('../../../../include/studiengang.class.php');
require_once('../../../../include/pruefungCis.class.php');
require_once('../../../../include/mitarbeiter.class.php');
require_once('../../../../include/phrasen.class.php');
require_once('../../../../include/globals.inc.php');
require_once('../../../../include/sprache.class.php');
require_once('../../../../include/mail.class.php');
$sprache = getSprache();
$lang = new sprache();
$lang->load($sprache);
$p = new phrasen($sprache);
$maildebug = '';
$uid = get_uid();
$db = new basis_db();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
$studiensemester = new studiensemester();
$lehrveranstaltung = new lehrveranstaltung();
$lehrveranstaltung->loadLVAfromMitarbeiter(0, $uid, $studiensemester->getaktorNext());
if(empty($lehrveranstaltung->lehrveranstaltungen) && !$rechte->isBerechtigt('lehre/pruefungsterminAdmin'))
die('Sie haben keine Berechtigung für diese Seite');
if (!ctype_digit($_GET['termin_id']) || !ctype_digit($_GET['pruefung_id']))
die('Wrong Parameter');
else
{
$termin_id = $_GET['termin_id'];
$pruefung_id = $_GET['pruefung_id'];
}
if (isset($_GET["sendmail"], $_GET["message"]) && $_GET["message"] != "")
{
$pruefung = new pruefungCis($pruefung_id);
$pruefung->getLehrveranstaltungenByPruefung();
$lvstr = "";
foreach ($pruefung->lehrveranstaltungen as $lv)
{
$lv_objekt = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lvstr .= "*".$lv_objekt->bezeichnung."* ";
}
$maildebug = 'Mail gesendet an:<br>';
$anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByTermin($termin_id);
foreach ($anmeldungen as $row)
{
$uid = $row->uid;
$to = $uid.'@'.DOMAIN;
$from = 'no-reply@'.DOMAIN;
$subject = $p->t('pruefung/pruefungStorniert');
$text = $_GET["message"];
$msg = new mail($to, $from, $subject, $text);
if ($msg->send())
$maildebug .= $to." OK<br>";
else
$maildebug .= $to.' Fehler<br>';
}
}
$prfgtermin = new pruefungstermin($termin_id);
$datum = new DateTime(explode(" ", $prfgtermin->von)[0]);
$datum = $datum->format('d.m.Y');
$vonzeit = substr(explode(" ", $prfgtermin->von)[1],0,5);
$biszeit = substr(explode(" ", $prfgtermin->bis)[1],0,5);
$pruefung_id = $prfgtermin->pruefung_id;
$pruefung = new pruefungCis($pruefung_id);
$pruefung->getLehrveranstaltungenByPruefung();
$lvstr = "";
foreach ($pruefung->lehrveranstaltungen as $lv)
{
$lv_objekt = new lehrveranstaltung($lv->lehrveranstaltung_id);
$lvstr .= "*".$lv_objekt->bezeichnung."*";
}
$uids = '';
$anmeldung = new pruefungsanmeldung();
$anmeldungen = $anmeldung->getAnmeldungenByTermin($termin_id);
foreach ($anmeldungen as $row)
{
$uids .= $row->uid.'@'.DOMAIN.'<br>';
}
$nachricht = "Sehr geehrte Studierende,\n\ndie Prüfung zur LV $lvstr am $datum um $vonzeit Uhr wurde abgesagt.";
?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $p->t('pruefung/titlePruefungstermin'); ?></title>
<script src="../../../../include/js/datecheck.js"></script>
<script type="text/javascript" src="../../../../vendor/components/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../../../../vendor/mottie/tablesorter/dist/js/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../../vendor/mottie/tablesorter/dist/js/jquery.tablesorter.widgets.min.js"></script>
<script type="text/javascript" src="../../../../vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js"></script>
<script type="text/javascript" src="../../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../../vendor/components/jqueryui/ui/i18n/datepicker-de.js"></script>
<link rel="stylesheet" href="../../../../vendor/components/jqueryui/themes/base/jquery-ui.min.css">
<script src="./pruefung.js.php"></script>
<link rel="stylesheet" href="../../../../skin/fhcomplete.css">
<link rel="stylesheet" href="../../../../skin/style.css.php">
<link rel="stylesheet" href="../../../../vendor/mottie/tablesorter/dist/css/theme.default.min.css">
<link rel="stylesheet" href="../../../../vendor/mottie/tablesorter/dist/css/jquery.tablesorter.pager.min.css">
<style type="text/css">
#message {
position: fixed;
top: 0px;
right: 0px;
width: 50%;
height: 2em;
font-size: 1.5em;
font-weight: bold;
}
.missingFormData {
border: 2px solid red;
outline: 2px solid red;
}
.modalOverlay {
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background-color: rgba(0,0,0,0.3); /* black semi-transparent */
}
#prfDetails, #prfVerwaltung {
margin: 1em;
}
</style>
</head>
<body style="padding-top:20px">
<center>
<div id="message"></div>
<form name="delete_termin" action="./pruefungstermin_loeschen.php" method="get">
<table>
<tr>
<td><?php echo $p->t('global/lehrveranstaltung'); ?></td>
<td><b><?php echo $lvstr; ?></b></td>
</tr>
<tr>
<td><?php echo $p->t('global/datum'); ?></td>
<td><?php echo $datum ?></td>
</tr>
<tr>
<td><?php echo $p->t('global/von'); ?></td>
<td><?php echo $vonzeit ?> Uhr</td>
</tr>
<tr>
<td><?php echo $p->t('global/bis'); ?></td>
<td><?php echo $biszeit ?> Uhr</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><?php echo $p->t('pruefung/pruefungsbewertungAnmeldungen'); ?>:</td>
<td><?php echo $uids; ?></td>
</tr>
<tr>
<td colspan="2">
<br>***<br>
<textarea cols="30" rows="10" name="message" placeholder="Bitte Nachricht an Studierende eingeben"><?php echo $nachricht ?></textarea>
<br>***<br>
</td>
</tr>
<tr>
<td colspan="2">
<p style="color: red; font-weight: bold;">Das Infomail ist optional und muss bei Bedarf vor dem Löschen des Termins versendet werden!</p>
<input type="submit" value="Sende Infomail">
<a href='#' onclick='terminLoeschenOhneLaden("<?php echo $pruefung_id ?>", "<?php echo $termin_id ?>");'>
<input type="button" name="loeschen" value="<?php echo $p->t('global/loeschen'); ?>">
</a>
</td>
</tr>
<tr><td colspan="2"><?php echo $maildebug; ?></td></tr>
</table>
<input type="hidden" name="pruefung_id" value="<?php echo $pruefung_id ?>"/>
<input type="hidden" name="termin_id" value="<?php echo $termin_id; ?>"/>
<input type="hidden" name="sendmail" value="1"/>
</form>
</center>
</body>
</html>
+451 -451
View File
@@ -1,456 +1,456 @@
<?php
/* Copyright (C) 2009 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> and
* Gerald Simane-Sequens <gerald.simane@technikum-wien.at>.
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/student.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/studiensemester.class.php');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
$uid=isset($_GET['uid'])?$_GET['uid']:(isset($_POST['uid'])?$_POST['uid']:get_uid());
$uid=trim($uid);
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if(!$rechte->isBerechtigt('lehre/reservierung:begrenzt', null, 's') || !$rechte->isBerechtigt('admin'))
die($rechte->errormsg);
unset($rechte);
header('Content-Type: text/html;charset=UTF-8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Anzahl Studenten Lehrveranstaltungsplan FH Technikum-Wien</title>
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<?php
/* Copyright (C) 2009 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> and
* Gerald Simane-Sequens <gerald.simane@technikum-wien.at>.
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/student.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/studiensemester.class.php');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
$uid=isset($_GET['uid'])?$_GET['uid']:(isset($_POST['uid'])?$_POST['uid']:get_uid());
$uid=trim($uid);
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if(!$rechte->isBerechtigt('lehre/reservierung:begrenzt', null, 's') && !$rechte->isBerechtigt('admin'))
die($rechte->errormsg);
unset($rechte);
header('Content-Type: text/html;charset=UTF-8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Anzahl Studenten Lehrveranstaltungsplan FH Technikum-Wien</title>
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script src="../../../vendor/components/jqueryui/jquery-ui.min.js" type="text/javascript"></script>
<style type="text/css">
<!--
li { list-style : outside url("../../../skin/images/right.gif");}
/* ----------------------------------
Resizable
---------------------------------- */
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
div.info {top:5%;position: absolute;display:none;padding: 5px 5px 5px 5px;border: 1px solid Black;empty-cells : hide;text-align:center;vertical-align: top;z-index: 99;background-color: white; position:absolute;}
div.infoclose {border: 7px outset #008381;padding: 0px 10px 0px 10px;}
div.infodetail {font-size:medium;text-align:left;background-color: #F5F5F5;padding: 15px 15px 15px 15px;}
-->
</style>
<script type="text/javascript" language="JavaScript1.2">
<!--
$(function()
{
$("#info").resizable();
$("#ui-resizable").draggable();
});
-->
</script>
</head>
<body id="inhalt">
<div id="ui-resizable" class="ui-resizable">
<div style="-moz-user-select: none;" class="ui-resizable-handle ui-resizable-e"></div>
<div style="-moz-user-select: none;" class="ui-resizable-handle ui-resizable-s"></div>
<div style="z-index: 1001; -moz-user-select: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div>
<div id="info" class="info">
<div style="border: 7px outset #393939;padding: 10px 10px 10px 10px;">
<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr style="color:#FFF;" class="ContentHeader">
<td id="info_print" align="left" style="color:#FFF;cursor: default;" class="ContentHeader">
<div>drucken <img border="0" src="../../../skin/images/printer.png" title="drucken" ><br /></div>
<script type="text/javascript">
$(document).ready(function()
{
$("td#info_print").click(function()
{
el='div#infodetail';
var doc=null;
var tab=false;;
var iframe=false;
if ($.browser.opera || $.browser.mozilla)
{
var tab = window.open("","jqPrint-preview");
tab.document.open();
var doc = tab.document;
}
else
{
var iframe=document.createElement('IFRAME');
document.body.appendChild(iframe);
doc=iframe.contentWindow.document;
}
var links=window.document.getElementsByTagName("link");
for(var i=0;i<links.length;i++)
{
if(links[i].rel.toLowerCase()=="stylesheet")
{
doc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');
}
}
doc.write('<div class="'+$(el).attr("class")+'">'+$(el).html()+'</div>');
doc.close();
(tab ? tab : iframe.contentWindow).focus();
setTimeout( function() { ( tab ? tab : iframe.contentWindow).print(); if (tab) { tab.close(); } }, 1000);
});
});
</script>
</td>
<td id="info_close" align="right" style="color:#FFF;cursor: default;" class="ContentHeader">
<div>schliessen <img border="0" src="../../../skin/images/cross.png" title="schliessen">&nbsp;</div>
<script type="text/javascript">
$(document).ready(function()
{
$("td#info_close").click(function(event)
{
$("div#info").hide("slow"); // div# langsam oeffnen
});
});
</script>
</td>
</tr></table>
<div id="infodetail" style="font-size:medium;text-align:left;background-color: #F5F5F5;padding: 15px 15px 15px 15px;"></div>
<br>
</div>
</div>
</div>
<?php
// Variablen uebernehmen
$datum=(isset($_GET['datum'])?$_GET['datum']:(isset($_POST['datum'])?$_POST['datum']:time()));
$stpl_table=(isset($_GET['stpl_table'])?$_GET['stpl_table']:'stundenplan');
$montag=montag($datum);
$letzterTag=mktime(0,0,0,date('m',$montag),date('d',$montag) + TAGE_PRO_WOCHE,date('Y',$montag));
$letzterTagAnzeige=mktime(0,0,0,date('m',$montag),date('d',$montag) + ( TAGE_PRO_WOCHE - 1),date('Y',$montag));
// Vorbelegen der Wochennavigation
$kwRet=mktime(0,0,0,date('m',$montag),date('d',$montag) -7 ,date('Y',$montag));
$kwVor=mktime(0,0,0,date('m',$montag),date('d',$montag) +7 ,date('Y',$montag));
$kw=strftime('%W',mktime(0,0,0,date('m',$montag),date('d',$montag),date('Y',$montag)));
$adresse_id=(isset($_GET['adresse_id'])?$_GET['adresse_id']:(isset($_POST['adresse_id'])?$_POST['adresse_id']:1));
// Datum Anzeige Header
$tag=strftime('%a %d',mktime(0,0,0,date('m',$montag),date('d',$montag) ,date('Y',$montag)));
$tag_monat=strftime('%a %d %b',mktime(0,0,0,date('m',$montag),date('d',$montag) ,date('Y',$montag)));
$tag_monat_jahr=strftime('%a %d %b %Y',mktime(0,0,0,date('m',$montag),date('d',$montag),date('Y',$montag)));
$letzter_tag_monat_jahr=strftime('%a %d %b %Y',mktime(0,0,0,date('m',$letzterTagAnzeige),date('d',$letzterTagAnzeige),date('Y',$letzterTagAnzeige)));
// Beginn Ende setzen
$objSS=new studiensemester();
$ss=$objSS->getaktorNext();
$objSS->load($ss);
$datum_obj = new datum();
$ss_begin=$datum_obj->mktime_fromdate($objSS->start);
$ss_ende=$datum_obj->mktime_fromdate($objSS->ende);
$sql_query=' select tbl_adresse.plz,tbl_adresse.name, sum(tbl_ort.max_person) as summe ';
$sql_query.=' from public.tbl_ort,public.tbl_standort, public.tbl_adresse ';
$sql_query.=" where tbl_standort.standort_id=tbl_ort.standort_id ";
$sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id ";
$sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." ";
$sql_query.=" and tbl_ort.aktiv and tbl_ort.lehre ";
$sql_query.=" group by tbl_adresse.plz,tbl_adresse.name ";
// Gibt es fuer das Datum und Stunde einen Stundenplaneintrag
if(!$results_anzahl=$db->db_query($sql_query))
die($db->db_last_error());
$raum_max_anz=0;
$fh_name='FH lese fehler';
if ($num_rows_anzahl=$db->db_num_rows($results_anzahl))
{
$fh_name = $db->db_result($results_anzahl,0,"name").', '.$db->db_result($results_anzahl,0,"plz");
$raum_max_anz = $db->db_result($results_anzahl,0,"summe");
}
$stg=array();
echo '<H2><table class="tabcontent"><tr><td>
&nbsp;Lehrveranstaltungsplan &gt;&gt; <a class="Item" href="index.php">Wochenplan</a> - Anzahl Studenten
&nbsp;&nbsp;&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$kwRet.'&amp;stpl_table='.$stpl_table.'">&lt;&lt;</a>
Wochenplan &nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$datum.'&amp;stpl_table='.$stpl_table.'">Kw '.$kw.'</a>
&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$kwVor.'&amp;stpl_table='.$stpl_table.'">&gt;&gt;</a>
&nbsp;&nbsp;&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.time().'&amp;stpl_table='.$stpl_table.'">Heute</a>
</td></tr></table></H2>';
// Stundentafel abfragen
$sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde";
if(!$results=$db->db_query($sql_query))
die($db->db_last_error());
echo '<table class="tabcontent" style=" z-index: 1;">';
echo '<tr><td style="text-align:center;color:#FFF;" class="ContentHeader" colspan="'. ( TAGE_PRO_WOCHE + 1 ) .'">'. $fh_name .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'</td></tr>';
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">Stunde</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&nbsp;'.date('d M',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'</td>';
}
echo '</tr>';
$max_person_array=array();
$num_rows_stunde=$db->db_num_rows($results);
echo '<tr>';
for ($k=0; $k<$num_rows_stunde; $k++)
{
$row = $db->db_fetch_object($results, $k);
$row->show_beginn=substr($row->beginn,0,5);
$row->show_ende=substr($row->ende,0,5);
$row->check_beginn=str_replace(':','',substr($row->beginn,0,5));
$row->check_ende=str_replace(':','',substr($row->ende,0,5));
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.$row->show_beginn.'<br>'.$row->show_ende.'</td>';
$lehreinheiten=array();
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
// Init je Tag und Std.
$fehler=false;
$aktiv=false;
$max_person=0;
$day= date('Ymd',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag)));
if ($day== date('Ymd') && date('Hi') >= $row->check_beginn && date('Hi')<=$row->check_ende )
$aktiv=true;
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
$sql_query=' select distinct vw_'.$stpl_table.'.stg_bezeichnung as bezeichnung,vw_'.$stpl_table.'.stg_kurzbzlang as kurzbzlang,vw_'.$stpl_table.'.stg_kurzbz as kurzbz, vw_'.$stpl_table.'.'.$stpl_table.'_id,vw_'.$stpl_table.'.lehrform, vw_'.$stpl_table.'.gruppe, vw_'.$stpl_table.'.gruppe_kurzbz, vw_'.$stpl_table.'.unr,vw_'.$stpl_table.'.verband,vw_'.$stpl_table.'.ort_kurzbz,vw_'.$stpl_table.'.lehreinheit_id,vw_'.$stpl_table.'.studiengang_kz,vw_'.$stpl_table.'.semester,tbl_ort.max_person,tbl_standort.adresse_id,tbl_adresse.plz,tbl_adresse.name ';
$sql_query.=' from lehre.vw_'.$stpl_table.', public.tbl_ort,public.tbl_standort, public.tbl_adresse ';
$sql_query.=" where vw_".$stpl_table.".datum=".$db->db_add_param(date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))))." ";
$sql_query.=" and vw_".$stpl_table.".stunde=".$db->db_add_param($row->stunde, FHC_INTEGER)." ";
$sql_query.=" and tbl_ort.ort_kurzbz=vw_".$stpl_table.".ort_kurzbz ";
$sql_query.=" and tbl_standort.standort_id=tbl_ort.standort_id ";
$sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id ";
$sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." ";
$sql_query.=" order by tbl_adresse.plz,vw_".$stpl_table.".ort_kurzbz ";
// Gibt es fuer das Datum und Stunde einen Stundenplaneintrag
if(!$results_anzahl=$db->db_query($sql_query))
die($db->db_last_error());
$num_rows_anzahl=$db->db_num_rows($results_anzahl);
$gefunden_anz=0;
$tooltip='';
for ($k_anz=0; $k_anz<$num_rows_anzahl; $k_anz++)
{
$row_anz = $db->db_fetch_object($results_anzahl, $k_anz);
// Lehreinheit wird aufgeteilt in zwei Raeume - nicht verarbeiten , das sind die selben Personen
if (isset($lehreinheiten[trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz)]))
continue;
$lehreinheiten[$row_anz->lehreinheit_id]=trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz);
$max_person=$row_anz->max_person+$max_person;
$row_anz->verband=trim($row_anz->verband);
$row_anz->gruppe=trim($row_anz->gruppe);
$row_anz->gruppe_kurzbz=trim($row_anz->gruppe_kurzbz);
$stsem=$ss;
$gruppe=($row_anz->gruppe_kurzbz?$row_anz->gruppe_kurzbz:null);
$student=new student();
$row_anz->anz=0;
if ($result=$student->getStudents($row_anz->studiengang_kz,$row_anz->semester,$row_anz->verband,$row_anz->gruppe,$gruppe, $stsem))
$row_anz->anz=count($result);
if (empty($row_anz->anz))
$fehler=true;
$lvb=$row_anz->kurzbzlang.'-'.$row_anz->semester;
if (!is_null($row_anz->verband) && !empty($row_anz->verband))
{
$lvb.=$row_anz->verband;
if (!is_null($row_anz->gruppe) && !empty($row_anz->gruppe) )
$lvb.=$row_anz->gruppe;
}
if (!empty($k_anz))
$tooltip.='</tr><tr>';
else
$tooltip.='<tr><th colspan=\'4\'>'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.$row->show_beginn.' - '.$row->show_ende.'</th><th>Anzahl</th></tr>';
$tooltip.='<td title=\'Stundenplan ID '.($stpl_table=='stundenplan'?$row_anz->stundenplan_id:$row_anz->stundenplandev_id).'\'><b>'.trim($row_anz->ort_kurzbz).'</b>&nbsp;</td><td><a href=\'stpl_detail.php?type=ort&datum='.date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&stunde='.$row->stunde.'&pers_uid='.$uid.'&stg_kz=&sem=&ver=&grp=&ort_kurzbz='.trim($row_anz->ort_kurzbz).'\' target=\'_blank\' titel=\'Studiengang Kz '.$row_anz->studiengang_kz.'\'>'.$lvb.'</a>&nbsp;</td><td>'.$row_anz->gruppe_kurzbz.'&nbsp;</td><td>'.(!$row_anz->anz?'<font color=\'Maroon\'>':'').$row_anz->bezeichnung.(!$row_anz->anz?'</font>':'').'&nbsp;</td><td>'.$row_anz->anz.'</td>';
$gefunden_anz+=$row_anz->anz;
}
if (!empty($gefunden_anz))
{
$tooltip.='<tr><td colspan=\'4\' align=\'right\'>max.Personen:'.$max_person.' Belegung:'. number_format($gefunden_anz / $max_person,2)*100 .'% <b>Ges.:</b></td><td><b>'.$gefunden_anz.'</b></td></tr>';
echo '<br><img id="img_'.$i.'_'.$k.'" src="../../../skin/images/sticky.png" title="Detailanzeige"> <b'.($fehler?' style="color:red;" ':'').'> Gesamt: </b>'.$gefunden_anz;
echo '<script type="text/javascript">
$(document).ready(function()
{
$("img#img_'.$i.'_'.$k.'").click(function(event)
{
$("div#infodetail").html("<table border=\"0\"><tr>'.$tooltip.'</tr></table>");
$("div#info").show("slow"); // div# langsam oeffnen
});
});
</script>';
}
echo '</td>';
if (!isset($max_person_array[$i]['tag']))
$max_person_array[$i]['tag']=0;
$max_person_array[$i]['tag']=$max_person_array[$i]['tag']+$gefunden_anz;
if (!isset($max_person_array[$i]['tag_max']))
$max_person_array[$i]['tag_max']=0;
$max_person_array[$i]['tag_max']=$max_person_array[$i]['tag_max']+$max_person;
if (!isset($max_person_array[$k]['stunde']))
$max_person_array[$k]['stunde']=0;
$max_person_array[$k]['stunde']=$max_person_array[$k]['stunde']+$gefunden_anz;
if (!isset($max_person_array[$k]['stunde_max']))
$max_person_array[$k]['stunde_max']=0;
$max_person_array[$k]['stunde_max']=$max_person_array[$k]['stunde_max']+$max_person;
if (!isset($max_person_array[$i][$k]['tag_stunde']))
$max_person_array[$i][$k]['tag_stunde']=0;
$max_person_array[$i][$k]['tag_stunde']=$max_person_array[$i][$k]['tag_stunde']+$gefunden_anz;
if (!isset($max_person_array[$i][$k]['tag_stunde_max']))
$max_person_array[$i][$k]['tag_stunde_max']=0;
$max_person_array[$i][$k]['tag_stunde_max']=$max_person_array[$i][$k]['tag_stunde_max']+$max_person;
}
echo '</tr>';
}
echo '</table>';
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if($rechte->isBerechtigt('admin'))
{
echo '<table class="tabcontent" style=" z-index: 1;">';
echo '<tr><td style="text-align:center;color:#FFF;" class="ContentHeader" colspan="'. ( TAGE_PRO_WOCHE + 2 ) .'">'. $fh_name .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'</td></tr>';
echo '<tr>';
echo '<td colspan="2" style="text-align:center;color:#FFF;" class="ContentHeader">Zeit / Datum &ndash;&nbsp;</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&nbsp;'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'</td>';
}
echo '</tr>';
$stunde_proz=0;
$stunde=0;
$stunde_max=0;
for ($k=0; $k<$num_rows_stunde; $k++)
{
$row = $db->db_fetch_object($results, $k);
$row->show_beginn=substr($row->beginn,0,5);
$row->show_ende=substr($row->ende,0,5);
$row->check_beginn=str_replace(':','',substr($row->beginn,0,5));
$row->check_ende=str_replace(':','',substr($row->ende,0,5));
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.$row->show_beginn.'<br>'.$row->show_ende.'</td>';
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
echo 'anz.:'.$max_person_array[$k]['stunde'];
echo '<br>';
echo 'FH&nbsp;&nbsp;&nbsp;'.($raum_max_anz*TAGE_PRO_WOCHE);
echo '<br>';
echo ' &Oslash;&nbsp;'.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde'])/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;'.$max_person_array[$k]['stunde_max'];
echo '<br>';
echo ' &Oslash;&nbsp;'.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde']/TAGE_PRO_WOCHE) / ($max_person_array[$k]['stunde_max']/TAGE_PRO_WOCHE),2)*100:0).'%';
echo '</td>';
$stunde=$stunde+$max_person_array[$k]['stunde'];
$stunde_max=$stunde_max+$max_person_array[$k]['stunde_max'];
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
echo 'anz.:'.$max_person_array[$i][$k]['tag_stunde'];
echo '<br>';
echo 'FH&nbsp;&nbsp;&nbsp;max.:'. $raum_max_anz;
echo '<br>';
echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $raum_max_anz,2)*100:0).'%';
echo '<br>';
echo 'Raum max.:'. $max_person_array[$i][$k]['tag_stunde_max'];
echo '<br>';
echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $max_person_array[$i][$k]['tag_stunde_max'],2)*100:0).'%';
echo '</td>';
}
echo '</tr>';
}
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">&Oslash;</td>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
echo 'FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&Oslash;&nbsp;'.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;&Oslash;&nbsp;'.($stunde_max?number_format(($stunde/$num_rows_stunde/TAGE_PRO_WOCHE) / ($stunde_max/$num_rows_stunde/TAGE_PRO_WOCHE),2)*100:0).'%';
echo '</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
echo 'FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&Oslash;&nbsp;'.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / ($raum_max_anz *$num_rows_stunde),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;&Oslash;&nbsp;'.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / $max_person_array[$i]['tag_max'],2)*100:0).'%';
echo '</td>';
}
echo '</tr>';
echo '</table>';
}
?>
</BODY>
</HTML>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script src="../../../vendor/components/jqueryui/jquery-ui.min.js" type="text/javascript"></script>
<style type="text/css">
<!--
li { list-style : outside url("../../../skin/images/right.gif");}
/* ----------------------------------
Resizable
---------------------------------- */
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
div.info {top:5%;position: absolute;display:none;padding: 5px 5px 5px 5px;border: 1px solid Black;empty-cells : hide;text-align:center;vertical-align: top;z-index: 99;background-color: white; position:absolute;}
div.infoclose {border: 7px outset #008381;padding: 0px 10px 0px 10px;}
div.infodetail {font-size:medium;text-align:left;background-color: #F5F5F5;padding: 15px 15px 15px 15px;}
-->
</style>
<script type="text/javascript" language="JavaScript1.2">
<!--
$(function()
{
$("#info").resizable();
$("#ui-resizable").draggable();
});
-->
</script>
</head>
<body id="inhalt">
<div id="ui-resizable" class="ui-resizable">
<div style="-moz-user-select: none;" class="ui-resizable-handle ui-resizable-e"></div>
<div style="-moz-user-select: none;" class="ui-resizable-handle ui-resizable-s"></div>
<div style="z-index: 1001; -moz-user-select: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div>
<div id="info" class="info">
<div style="border: 7px outset #393939;padding: 10px 10px 10px 10px;">
<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr style="color:#FFF;" class="ContentHeader">
<td id="info_print" align="left" style="color:#FFF;cursor: default;" class="ContentHeader">
<div>drucken <img border="0" src="../../../skin/images/printer.png" title="drucken" ><br /></div>
<script type="text/javascript">
$(document).ready(function()
{
$("td#info_print").click(function()
{
el='div#infodetail';
var doc=null;
var tab=false;;
var iframe=false;
if ($.browser.opera || $.browser.mozilla)
{
var tab = window.open("","jqPrint-preview");
tab.document.open();
var doc = tab.document;
}
else
{
var iframe=document.createElement('IFRAME');
document.body.appendChild(iframe);
doc=iframe.contentWindow.document;
}
var links=window.document.getElementsByTagName("link");
for(var i=0;i<links.length;i++)
{
if(links[i].rel.toLowerCase()=="stylesheet")
{
doc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');
}
}
doc.write('<div class="'+$(el).attr("class")+'">'+$(el).html()+'</div>');
doc.close();
(tab ? tab : iframe.contentWindow).focus();
setTimeout( function() { ( tab ? tab : iframe.contentWindow).print(); if (tab) { tab.close(); } }, 1000);
});
});
</script>
</td>
<td id="info_close" align="right" style="color:#FFF;cursor: default;" class="ContentHeader">
<div>schliessen <img border="0" src="../../../skin/images/cross.png" title="schliessen">&nbsp;</div>
<script type="text/javascript">
$(document).ready(function()
{
$("td#info_close").click(function(event)
{
$("div#info").hide("slow"); // div# langsam oeffnen
});
});
</script>
</td>
</tr></table>
<div id="infodetail" style="font-size:medium;text-align:left;background-color: #F5F5F5;padding: 15px 15px 15px 15px;"></div>
<br>
</div>
</div>
</div>
<?php
// Variablen uebernehmen
$datum=(isset($_GET['datum'])?$_GET['datum']:(isset($_POST['datum'])?$_POST['datum']:time()));
$stpl_table=(isset($_GET['stpl_table'])?$_GET['stpl_table']:'stundenplan');
$montag=montag($datum);
$letzterTag=mktime(0,0,0,date('m',$montag),date('d',$montag) + TAGE_PRO_WOCHE,date('Y',$montag));
$letzterTagAnzeige=mktime(0,0,0,date('m',$montag),date('d',$montag) + ( TAGE_PRO_WOCHE - 1),date('Y',$montag));
// Vorbelegen der Wochennavigation
$kwRet=mktime(0,0,0,date('m',$montag),date('d',$montag) -7 ,date('Y',$montag));
$kwVor=mktime(0,0,0,date('m',$montag),date('d',$montag) +7 ,date('Y',$montag));
$kw=strftime('%W',mktime(0,0,0,date('m',$montag),date('d',$montag),date('Y',$montag)));
$adresse_id=(isset($_GET['adresse_id'])?$_GET['adresse_id']:(isset($_POST['adresse_id'])?$_POST['adresse_id']:1));
// Datum Anzeige Header
$tag=strftime('%a %d',mktime(0,0,0,date('m',$montag),date('d',$montag) ,date('Y',$montag)));
$tag_monat=strftime('%a %d %b',mktime(0,0,0,date('m',$montag),date('d',$montag) ,date('Y',$montag)));
$tag_monat_jahr=strftime('%a %d %b %Y',mktime(0,0,0,date('m',$montag),date('d',$montag),date('Y',$montag)));
$letzter_tag_monat_jahr=strftime('%a %d %b %Y',mktime(0,0,0,date('m',$letzterTagAnzeige),date('d',$letzterTagAnzeige),date('Y',$letzterTagAnzeige)));
// Beginn Ende setzen
$objSS=new studiensemester();
$ss=$objSS->getaktorNext();
$objSS->load($ss);
$datum_obj = new datum();
$ss_begin=$datum_obj->mktime_fromdate($objSS->start);
$ss_ende=$datum_obj->mktime_fromdate($objSS->ende);
$sql_query=' select tbl_adresse.plz,tbl_adresse.name, sum(tbl_ort.max_person) as summe ';
$sql_query.=' from public.tbl_ort,public.tbl_standort, public.tbl_adresse ';
$sql_query.=" where tbl_standort.standort_id=tbl_ort.standort_id ";
$sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id ";
$sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." ";
$sql_query.=" and tbl_ort.aktiv and tbl_ort.lehre ";
$sql_query.=" group by tbl_adresse.plz,tbl_adresse.name ";
// Gibt es fuer das Datum und Stunde einen Stundenplaneintrag
if(!$results_anzahl=$db->db_query($sql_query))
die($db->db_last_error());
$raum_max_anz=0;
$fh_name='FH lese fehler';
if ($num_rows_anzahl=$db->db_num_rows($results_anzahl))
{
$fh_name = $db->db_result($results_anzahl,0,"name").', '.$db->db_result($results_anzahl,0,"plz");
$raum_max_anz = $db->db_result($results_anzahl,0,"summe");
}
$stg=array();
echo '<H2><table class="tabcontent"><tr><td>
&nbsp;Lehrveranstaltungsplan &gt;&gt; <a class="Item" href="index.php">Wochenplan</a> - Anzahl Studenten
&nbsp;&nbsp;&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$kwRet.'&amp;stpl_table='.$stpl_table.'">&lt;&lt;</a>
Wochenplan &nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$datum.'&amp;stpl_table='.$stpl_table.'">Kw '.$kw.'</a>
&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.$kwVor.'&amp;stpl_table='.$stpl_table.'">&gt;&gt;</a>
&nbsp;&nbsp;&nbsp;<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&amp;datum='.time().'&amp;stpl_table='.$stpl_table.'">Heute</a>
</td></tr></table></H2>';
// Stundentafel abfragen
$sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde";
if(!$results=$db->db_query($sql_query))
die($db->db_last_error());
echo '<table class="tabcontent" style=" z-index: 1;">';
echo '<tr><td style="text-align:center;color:#FFF;" class="ContentHeader" colspan="'. ( TAGE_PRO_WOCHE + 1 ) .'">'. $fh_name .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'</td></tr>';
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">Stunde</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&nbsp;'.date('d M',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'</td>';
}
echo '</tr>';
$max_person_array=array();
$num_rows_stunde=$db->db_num_rows($results);
echo '<tr>';
for ($k=0; $k<$num_rows_stunde; $k++)
{
$row = $db->db_fetch_object($results, $k);
$row->show_beginn=substr($row->beginn,0,5);
$row->show_ende=substr($row->ende,0,5);
$row->check_beginn=str_replace(':','',substr($row->beginn,0,5));
$row->check_ende=str_replace(':','',substr($row->ende,0,5));
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.$row->show_beginn.'<br>'.$row->show_ende.'</td>';
$lehreinheiten=array();
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
// Init je Tag und Std.
$fehler=false;
$aktiv=false;
$max_person=0;
$day= date('Ymd',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag)));
if ($day== date('Ymd') && date('Hi') >= $row->check_beginn && date('Hi')<=$row->check_ende )
$aktiv=true;
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
$sql_query=' select distinct vw_'.$stpl_table.'.stg_bezeichnung as bezeichnung,vw_'.$stpl_table.'.stg_kurzbzlang as kurzbzlang,vw_'.$stpl_table.'.stg_kurzbz as kurzbz, vw_'.$stpl_table.'.'.$stpl_table.'_id,vw_'.$stpl_table.'.lehrform, vw_'.$stpl_table.'.gruppe, vw_'.$stpl_table.'.gruppe_kurzbz, vw_'.$stpl_table.'.unr,vw_'.$stpl_table.'.verband,vw_'.$stpl_table.'.ort_kurzbz,vw_'.$stpl_table.'.lehreinheit_id,vw_'.$stpl_table.'.studiengang_kz,vw_'.$stpl_table.'.semester,tbl_ort.max_person,tbl_standort.adresse_id,tbl_adresse.plz,tbl_adresse.name ';
$sql_query.=' from lehre.vw_'.$stpl_table.', public.tbl_ort,public.tbl_standort, public.tbl_adresse ';
$sql_query.=" where vw_".$stpl_table.".datum=".$db->db_add_param(date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))))." ";
$sql_query.=" and vw_".$stpl_table.".stunde=".$db->db_add_param($row->stunde, FHC_INTEGER)." ";
$sql_query.=" and tbl_ort.ort_kurzbz=vw_".$stpl_table.".ort_kurzbz ";
$sql_query.=" and tbl_standort.standort_id=tbl_ort.standort_id ";
$sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id ";
$sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." ";
$sql_query.=" order by tbl_adresse.plz,vw_".$stpl_table.".ort_kurzbz ";
// Gibt es fuer das Datum und Stunde einen Stundenplaneintrag
if(!$results_anzahl=$db->db_query($sql_query))
die($db->db_last_error());
$num_rows_anzahl=$db->db_num_rows($results_anzahl);
$gefunden_anz=0;
$tooltip='';
for ($k_anz=0; $k_anz<$num_rows_anzahl; $k_anz++)
{
$row_anz = $db->db_fetch_object($results_anzahl, $k_anz);
// Lehreinheit wird aufgeteilt in zwei Raeume - nicht verarbeiten , das sind die selben Personen
if (isset($lehreinheiten[trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz)]))
continue;
$lehreinheiten[$row_anz->lehreinheit_id]=trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz);
$max_person=$row_anz->max_person+$max_person;
$row_anz->verband=trim($row_anz->verband);
$row_anz->gruppe=trim($row_anz->gruppe);
$row_anz->gruppe_kurzbz=trim($row_anz->gruppe_kurzbz);
$stsem=$ss;
$gruppe=($row_anz->gruppe_kurzbz?$row_anz->gruppe_kurzbz:null);
$student=new student();
$row_anz->anz=0;
if ($result=$student->getStudents($row_anz->studiengang_kz,$row_anz->semester,$row_anz->verband,$row_anz->gruppe,$gruppe, $stsem))
$row_anz->anz=count($result);
if (empty($row_anz->anz))
$fehler=true;
$lvb=$row_anz->kurzbzlang.'-'.$row_anz->semester;
if (!is_null($row_anz->verband) && !empty($row_anz->verband))
{
$lvb.=$row_anz->verband;
if (!is_null($row_anz->gruppe) && !empty($row_anz->gruppe) )
$lvb.=$row_anz->gruppe;
}
if (!empty($k_anz))
$tooltip.='</tr><tr>';
else
$tooltip.='<tr><th colspan=\'4\'>'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.$row->show_beginn.' - '.$row->show_ende.'</th><th>Anzahl</th></tr>';
$tooltip.='<td title=\'Stundenplan ID '.($stpl_table=='stundenplan'?$row_anz->stundenplan_id:$row_anz->stundenplandev_id).'\'><b>'.trim($row_anz->ort_kurzbz).'</b>&nbsp;</td><td><a href=\'stpl_detail.php?type=ort&datum='.date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&stunde='.$row->stunde.'&pers_uid='.$uid.'&stg_kz=&sem=&ver=&grp=&ort_kurzbz='.trim($row_anz->ort_kurzbz).'\' target=\'_blank\' titel=\'Studiengang Kz '.$row_anz->studiengang_kz.'\'>'.$lvb.'</a>&nbsp;</td><td>'.$row_anz->gruppe_kurzbz.'&nbsp;</td><td>'.(!$row_anz->anz?'<font color=\'Maroon\'>':'').$row_anz->bezeichnung.(!$row_anz->anz?'</font>':'').'&nbsp;</td><td>'.$row_anz->anz.'</td>';
$gefunden_anz+=$row_anz->anz;
}
if (!empty($gefunden_anz))
{
$tooltip.='<tr><td colspan=\'4\' align=\'right\'>max.Personen:'.$max_person.' Belegung:'. number_format($gefunden_anz / $max_person,2)*100 .'% <b>Ges.:</b></td><td><b>'.$gefunden_anz.'</b></td></tr>';
echo '<br><img id="img_'.$i.'_'.$k.'" src="../../../skin/images/sticky.png" title="Detailanzeige"> <b'.($fehler?' style="color:red;" ':'').'> Gesamt: </b>'.$gefunden_anz;
echo '<script type="text/javascript">
$(document).ready(function()
{
$("img#img_'.$i.'_'.$k.'").click(function(event)
{
$("div#infodetail").html("<table border=\"0\"><tr>'.$tooltip.'</tr></table>");
$("div#info").show("slow"); // div# langsam oeffnen
});
});
</script>';
}
echo '</td>';
if (!isset($max_person_array[$i]['tag']))
$max_person_array[$i]['tag']=0;
$max_person_array[$i]['tag']=$max_person_array[$i]['tag']+$gefunden_anz;
if (!isset($max_person_array[$i]['tag_max']))
$max_person_array[$i]['tag_max']=0;
$max_person_array[$i]['tag_max']=$max_person_array[$i]['tag_max']+$max_person;
if (!isset($max_person_array[$k]['stunde']))
$max_person_array[$k]['stunde']=0;
$max_person_array[$k]['stunde']=$max_person_array[$k]['stunde']+$gefunden_anz;
if (!isset($max_person_array[$k]['stunde_max']))
$max_person_array[$k]['stunde_max']=0;
$max_person_array[$k]['stunde_max']=$max_person_array[$k]['stunde_max']+$max_person;
if (!isset($max_person_array[$i][$k]['tag_stunde']))
$max_person_array[$i][$k]['tag_stunde']=0;
$max_person_array[$i][$k]['tag_stunde']=$max_person_array[$i][$k]['tag_stunde']+$gefunden_anz;
if (!isset($max_person_array[$i][$k]['tag_stunde_max']))
$max_person_array[$i][$k]['tag_stunde_max']=0;
$max_person_array[$i][$k]['tag_stunde_max']=$max_person_array[$i][$k]['tag_stunde_max']+$max_person;
}
echo '</tr>';
}
echo '</table>';
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if($rechte->isBerechtigt('admin'))
{
echo '<table class="tabcontent" style=" z-index: 1;">';
echo '<tr><td style="text-align:center;color:#FFF;" class="ContentHeader" colspan="'. ( TAGE_PRO_WOCHE + 2 ) .'">'. $fh_name .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'</td></tr>';
echo '<tr>';
echo '<td colspan="2" style="text-align:center;color:#FFF;" class="ContentHeader">Zeit / Datum &ndash;&nbsp;</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'&nbsp;'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).'</td>';
}
echo '</tr>';
$stunde_proz=0;
$stunde=0;
$stunde_max=0;
for ($k=0; $k<$num_rows_stunde; $k++)
{
$row = $db->db_fetch_object($results, $k);
$row->show_beginn=substr($row->beginn,0,5);
$row->show_ende=substr($row->ende,0,5);
$row->check_beginn=str_replace(':','',substr($row->beginn,0,5));
$row->check_ende=str_replace(':','',substr($row->ende,0,5));
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">'.$row->show_beginn.'<br>'.$row->show_ende.'</td>';
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
echo 'anz.:'.$max_person_array[$k]['stunde'];
echo '<br>';
echo 'FH&nbsp;&nbsp;&nbsp;'.($raum_max_anz*TAGE_PRO_WOCHE);
echo '<br>';
echo ' &Oslash;&nbsp;'.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde'])/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;'.$max_person_array[$k]['stunde_max'];
echo '<br>';
echo ' &Oslash;&nbsp;'.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde']/TAGE_PRO_WOCHE) / ($max_person_array[$k]['stunde_max']/TAGE_PRO_WOCHE),2)*100:0).'%';
echo '</td>';
$stunde=$stunde+$max_person_array[$k]['stunde'];
$stunde_max=$stunde_max+$max_person_array[$k]['stunde_max'];
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="border-bottom: 1px solid Black;'.($aktiv?'background-color:#009e84;color:#FFF;':'').'" valign="top" '.($k % 2==0?'':' class="MarkLine" ').' >';
echo 'anz.:'.$max_person_array[$i][$k]['tag_stunde'];
echo '<br>';
echo 'FH&nbsp;&nbsp;&nbsp;max.:'. $raum_max_anz;
echo '<br>';
echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $raum_max_anz,2)*100:0).'%';
echo '<br>';
echo 'Raum max.:'. $max_person_array[$i][$k]['tag_stunde_max'];
echo '<br>';
echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $max_person_array[$i][$k]['tag_stunde_max'],2)*100:0).'%';
echo '</td>';
}
echo '</tr>';
}
echo '<tr>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">&Oslash;</td>';
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
echo 'FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&Oslash;&nbsp;'.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;&Oslash;&nbsp;'.($stunde_max?number_format(($stunde/$num_rows_stunde/TAGE_PRO_WOCHE) / ($stunde_max/$num_rows_stunde/TAGE_PRO_WOCHE),2)*100:0).'%';
echo '</td>';
for ($i=0; $i<TAGE_PRO_WOCHE; $i++)
{
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
echo 'FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&Oslash;&nbsp;'.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / ($raum_max_anz *$num_rows_stunde),2)*100:0).'%';
echo '<br>';
echo 'Raum&nbsp;&Oslash;&nbsp;'.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / $max_person_array[$i]['tag_max'],2)*100:0).'%';
echo '</td>';
}
echo '</tr>';
echo '</table>';
}
?>
</BODY>
</HTML>
+40 -3
View File
@@ -39,6 +39,7 @@ require_once('../../include/prestudent.class.php');
require_once('../../include/dokument_export.class.php');
require_once('../../include/person.class.php');
require_once('../../include/webservicelog.class.php');
require_once('../../include/projektarbeit.class.php');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
@@ -120,7 +121,7 @@ $params = 'xmlformat=xml';
//Admins duerfen Dokumente anderer Personen drucken
if ($rechte->isBerechtigt('admin'))
$user = $_GET['uid'];
$user = isset($_GET['uid']) ? $_GET['uid'] : $user;
$params .= '&uid='.$user;
if (isset($_GET['person_id']))
@@ -139,6 +140,11 @@ if (isset($_GET['all']))
$params .= '&all=1';
if (isset($_GET['xsl_oe_kurzbz']))
$params .= '&xsl_oe_kurzbz='. $_GET['xsl_oe_kurzbz'];
if (isset($_GET['projektarbeit_id']))
$params .= '&projektarbeit_id='. $_GET['projektarbeit_id'];
if (isset($_GET['betreuerart_kurzbz']))
$params .= '&betreuerart_kurzbz='. $_GET['betreuerart_kurzbz'];
// Logeintrag bei Download von Zahlungsbestaetigungen
if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung')
@@ -150,7 +156,7 @@ if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung')
$log->request_id = isset($_GET['buchungsnummern']) && !empty($_GET['buchungsnummern']) ? $_GET['buchungsnummern'] : NULL;
$log->beschreibung = 'Zahlungsbestaetigungsdownload';
$log->request_data = $requestdata;
$log->execute_user = $user;
$log->execute_user = get_uid();
$log->save(true);
}
@@ -183,9 +189,40 @@ if (isset($_GET['output']) && $_GET['output'] != 'pdf')
else
$output = 'pdf';
if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung'))
{
if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id']))
die('Fehlerhafte Parameteruebergabe');
$projektarbeit = new projektarbeit();
$projektarbeit->load($_GET['projektarbeit_id']);
$betreuer = new person();
$betreuer->getPersonFromBenutzer($user);
//Überprüft ob es der Betreuer oder der Student ist
if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz'))
die("<html><body><h3>Sie haben keine Berechtigung für diese Aktion.</h3></body></html>");
switch ($_GET['betreuerart_kurzbz'])
{
case 'Begutachter' :
$xsl = 'ProjektBeurteilungBA';
break;
case 'Erstbegutachter' :
$xsl = 'ProjektBeurteilungMAErst';
break;
case 'Zweitbegutachter' :
$xsl = 'ProjektBeurteilungMAZweit';
break;
}
$allowed = true;
}
$konto = new konto();
if (((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin'))
if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin')) || (isset($allowed) && $allowed === true))
{
$buchungstypen = array();
if (defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN"))
+14
View File
@@ -30,6 +30,7 @@ require_once('../../../include/student.class.php');
require_once('../../../include/akte.class.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/webservicelog.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -84,6 +85,19 @@ if(isset($_GET['action']) && $_GET['action']=='download')
header("Content-type: $akte->mimetype");
header('Content-Disposition: attachment; filename="'.$akte->titel.'"');
echo base64_decode($akte->inhalt);
//Log bei einem Download vom Becheid
if ((isset($akte->dokument_kurzbz) && !empty($akte->dokument_kurzbz)) && ($akte->dokument_kurzbz === 'Bescheid' || $akte->dokument_kurzbz === 'BescheidEng'))
{
$log = new Webservicelog();
$log->webservicetyp_kurzbz = 'content';
$log->request_id = (isset($akte->akte_id) && !empty($akte->akte_id)) ? $akte->akte_id : NULL;
$log->beschreibung = 'Bescheidbestaetigungsdownload';
$log->request_data = $_SERVER['QUERY_STRING'];
$log->execute_user = get_uid();
$log->save(true);
}
exit;
}
else
+1 -1
View File
@@ -217,7 +217,7 @@ if ($num_rows > 0)
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
{
$vertrag = new vertrag();
if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user))
if (!$vertrag->isVertragErteiltLE($row->lehreinheit_id, $stdsem, $user))
{
continue;
}
+105 -10
View File
@@ -163,6 +163,68 @@ if (isset($_GET['rechts_x']) || isset($_POST['rechts_x']))
$wjahr=$wjahr;
}
}
//Bereits freigegebenen Eintrag löschen
//Eintragung löschen
if((isset($_GET['delete']) && isset($_GET['informSupervisor'])) || (isset($_POST['delete']) && isset($_POST['informSupervisor'])))
{
$zeitsperre = new zeitsperre();
$zeitsperre->load($_GET['delete']);
$vondatum = $zeitsperre->getVonDatum();
$bisdatum = $zeitsperre->getBisDatum();
if(!$zeitsperre->delete($_GET['delete']))
echo $zeitsperre->errormsg;
//Mail an Vorgesetzten
$prsn = new person();
$vorgesetzter = $ma->getVorgesetzte($uid);
if($vorgesetzter)
{
$to='';
$fullName ='';
foreach($ma->vorgesetzte as $vg)
{
if($to!='')
{
$to.=', '.$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=', '.$name;
}
else
{
$to.=$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=$name;
}
}
$benutzer = new benutzer();
$benutzer->load($uid);
$message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n".
$p->t('urlaubstool/xHatUrlaubGeloescht',array($benutzer->nachname,$benutzer->vorname)).":\n";
$message.= $p->t('urlaubstool/von')." ".date("d.m.Y", strtotime($vondatum))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($bisdatum))."\n";
$mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message);
if($mail->send())
{
$vgmail="<span style='color:green;'>".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName))."</span>";
}
else
{
$vgmail="<br><span class='error'>".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!</span>";
}
}
else
{
$vgmail="<br><span class='error'>".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden')."</span>";
}
}
//Eintragung löschen
if((isset($_GET['delete']) || isset($_POST['delete'])))
{
@@ -257,19 +319,26 @@ if(isset($_GET['speichern']) && isset($_GET['wtag']))
if(!$error)
{
//Mail an Vorgesetzten
$prsn = new person();
$vorgesetzter = $ma->getVorgesetzte($uid);
if($vorgesetzter)
{
$to='';
$fullName ='';
foreach($ma->vorgesetzte as $vg)
{
if($to!='')
{
$to.=', '.$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=', '.$name;
}
else
{
$to.=$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=$name;
}
}
@@ -295,7 +364,7 @@ if(isset($_GET['speichern']) && isset($_GET['wtag']))
$mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigabeansuchenUrlaub'), $message);
if($mail->send())
{
$vgmail="<span style='color:green;'>".$p->t('urlaubstool/freigabemailWurdeVersandt',array($to))."</span>";
$vgmail="<span style='color:green;'>".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName))."</span>";
}
else
{
@@ -373,10 +442,14 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr)))
if(date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))>=$row->vondatum
&& date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))<=$row->bisdatum)
{
if($row->freigabevon!='' || $row->bisdatum<date("Y-m-d",time()))
if($row->freigabevon!='' && $row->vondatum<=date("Y-m-d",time()))
{
$hgfarbe[$i]='#bbb';
}
elseif ($row->freigabevon!='' && $row->vondatum>date("Y-m-d",time()))
{
$hgfarbe[$i]='#CDDDEE';
}
else
{
$hgfarbe[$i]='#FFFC7F';
@@ -389,9 +462,8 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr)))
}
else
{
if($hgfarbe[$i]!='#FFFC7F' && $hgfarbe[$i]!='#bbb')
if($hgfarbe[$i]!='#FFFC7F' && $hgfarbe[$i]!='#bbb' && $hgfarbe[$i]!='#CDDDEE')
{
$hgfarbe[$i]='#E9ECEE';
$datensatz[$i]=0;
$freigabevon[$i]=$row->freigabevon;
@@ -688,15 +760,29 @@ for ($i=0;$i<6;$i++)
echo "\n";
if(strlen(stristr($tage[$j+7*$i],"."))>0)
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color: '.$hgfarbe[$j+7*$i].'">';
if($j%6==0 || $j==7)
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color:#A5AFB6">';
}
else
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color: ' . $hgfarbe[$j + 7 * $i] . '">';
}
}
else
{
echo '<td align="center" valign="center" style="background-color: '.$hgfarbe[$j+7*$i].'">';
if($j%6==0 || $j==7)
{
echo '<td align="center" valign="center" style="font-size:; color:; background-color:#A5AFB6">';
}
else
{
echo '<td align="center" valign="center" style="background-color: ' . $hgfarbe[$j + 7 * $i] . '">';
}
}
if($tage[$j+7*$i]!='')
{
if($hgfarbe[$j+7*$i]=='#FFFC7F')
if($hgfarbe[$j+7*$i]=='#FFFC7F' )//|| $hgfarbe[$j+7*$i]=='#CDDDEE')
{
echo '<b title='.$p->t('urlaubstool/vertretung').': '.$vertretung_uid[$j+7*$i].' - '.$p->t('urlaubstool/erreichbar').': '.$erreichbarkeit_kurzbz[$j+7*$i].'">'.$tage[$j+7*$i].'</b><br>';;
$k=$j+7*$i;
@@ -708,11 +794,14 @@ for ($i=0;$i<6;$i++)
echo '<b>'.$tage[$j+7*$i].'</b><br>';
if(strlen(stristr($tage[$j+7*$i],"."))>0)
{
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"></td>';
echo '<input type="checkbox" name="wtag[]"
value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"
id="'.date("d.m.Y",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"></td>';
}
else
{
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"></td>';
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"
id="'.date("d.m.Y",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"></td>';
}
}
else
@@ -724,7 +813,13 @@ for ($i=0;$i<6;$i++)
}
elseif(isset($freigabeamum[$j+7*$i]))
{
echo '<img src="../../../skin/images/flag-green.png" alt="freigegeben" title="'.$p->t('urlaubstool/freigegebenDurchAm', array($freigabevon[$j+7*$i])).' '.date("d-m-Y",strtotime($freigabeamum[$j+7*$i])).'"></td>';
echo '<img src="../../../skin/images/flag-green.png" alt="freigegeben" title="'.$p->t('urlaubstool/freigegebenDurch', array($freigabevon[$j+7*$i])).': '.$freigabevon[$j+7*$i].'"><span> </span>';
if($hgfarbe[$j+7*$i]=='#CDDDEE')
{
$k=$j+7*$i;
echo "<a href='$PHP_SELF?wmonat=$wmonat&wjahr=$wjahr&delete=$datensatz[$k]&informSupervisor=True' onclick='return conf_del()'>";
echo '<img src="../../../skin/images/delete_x.png" alt="loeschen" title="'.$p->t('urlaubstool/eintragungLoeschen').'"></a></td>';
}
}
else
{
+71 -63
View File
@@ -15,7 +15,7 @@
* 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>,
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
@@ -31,16 +31,16 @@
require_once('../../../include/studiengang.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
$uid=get_uid();
if(isset($_GET['uid']))
{
// Administratoren duerfen die UID als Parameter uebergeben um die Zahlungen
// von anderen Personen anzuzeigen
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if($rechte->isBerechtigt('admin'))
@@ -58,7 +58,7 @@
{
die('Um diese Seite anzuzeigen, ist ein entsprechender Eintrag in der Konfigurationsdatei nötig.');
}
$datum_obj = new datum();
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
@@ -127,20 +127,20 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
type: "numeric"
});
// Parser für Studiensemester
$.tablesorter.addParser({
// set a unique id
id: "studiensemester",
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format data for normalization
$.tablesorter.addParser({
// set a unique id
id: "studiensemester",
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format data for normalization
var result = s.substr(2) + s.substr(0, 2);
return result;
},
// set type, either numeric or text
type: "text"
},
// set type, either numeric or text
type: "text"
});
// For correct sorting of Umlauts
$.tablesorter.characterEquivalents = {
@@ -159,8 +159,8 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
"u" : "\u00fa\u00f9\u00fb\u00fc\u016f", // úùûüů
"U" : "\u00da\u00d9\u00db\u00dc\u016e" // ÚÙÛÜŮ
};
$(document).ready(function()
{
$(document).ready(function()
{
$("#t1").tablesorter(
{
// Adding Function for sorting images by title
@@ -173,31 +173,33 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
widgets: ["zebra"],
sortLocaleCompare : true,
headers: { 0: { sorter: "customDate"}, 3: { sorter: "studiensemester"}, 5: { sorter: "customCurrancy"}, 6: { sorter: false}}
});
});
});
</script>
<body>';
$studiengang = new studiengang();
$studiengang->getAll(null,null);
$stg_arr = array();
foreach ($studiengang->result as $row)
$stg_arr[$row->studiengang_kz]=$row->kuerzel;
$benutzer = new benutzer();
if(!$benutzer->load($uid))
die('Benutzer wurde nicht gefunden');
echo '<h1>'.$p->t('tools/zahlungen').' - '.$benutzer->vorname.' '.$benutzer->nachname.'</h1>';
$konto = new konto();
$konto->getBuchungstyp();
$buchungstyp = array();
echo $p->t('tools/zahlungenHinweis');
foreach ($konto->result as $row)
$buchungstyp[$row->buchungstyp_kurzbz]=$row->beschreibung;
$konto = new konto();
$konto->getBuchungen($benutzer->person_id);
if(count($konto->result)>0)
@@ -211,9 +213,9 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
<th>'.$p->t('global/studiensemester').'</th>
<th>'.$p->t('tools/buchungstext').'</th>
<th>'.$p->t('tools/betrag').'</th>
<th>'.$p->t('tools/zahlungsbestaetigung').'</th>';
<th>'.$p->t('tools/zahlungsbestaetigung').'</th>';
echo '</tr></thead><tbody>';
foreach ($konto->result as $row)
{
$i=0; //Zaehler fuer Anzahl Gegenbuchungen
@@ -226,12 +228,12 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
$is_lehrgang = $row['parent']->studiengang_kz < 0 ? true : false;
if ($is_lehrgang) continue;
}
if(!isset($row['parent']))
continue;
$betrag = $row['parent']->betrag;
$count_studiengangszahlung ++;
if(isset($row['childs']))
{
foreach ($row['childs'] as $key => $row_child)
@@ -243,57 +245,63 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
$i = $key; //Zaehler auf letzten Gegenbuchungseintrag setzen
}
}
else
else
$buchungsnummern = $row['parent']->buchungsnr;
if($betrag<0)
$style='style="background-color: #FF8888;"';
elseif($betrag>0)
$style='style="background-color: #88DD88;"';
else
else
$style='';
echo "<tr>";
echo '<td '.$style.'>'.date('d.m.Y',$datum_obj->mktime_fromdate(isset($row['childs'][$i])?$row['childs'][$i]->buchungsdatum:$row['parent']->buchungsdatum)).'</td>';
echo '<td '.$style.'>'.$buchungstyp[$row['parent']->buchungstyp_kurzbz].'</td>';
echo '<td '.$style.'>'.$stg_arr[$row['parent']->studiengang_kz].'</td>';
echo '<td '.$style.'>'.$row['parent']->studiensemester_kurzbz.'</td>';
echo '<td '.$style.'>'.$row['parent']->buchungstext.'</td>';
echo '<td align="right" '.$style.'>€ '.($betrag<0?'-':($betrag>0?'+':'')).sprintf('%.2f',abs($row['parent']->betrag)).'</td>';
echo '<td align="center" '.$style.'>';
if($betrag>=0 && $row['parent']->betrag<=0)
$buchungsdatum = $datum_obj->mktime_fromdate(isset($row['childs'][$i])?$row['childs'][$i]->buchungsdatum:$row['parent']->buchungsdatum);
$aktdatum = time();
// Zukünftige Zahlungen werden nicht angezeigt
if ($buchungsdatum <= $aktdatum)
{
echo '<a href="../pdfExport.php?xml=konto.rdf.php&xsl=Zahlung&uid='.$uid.'&buchungsnummern='.$buchungsnummern.'" title="'.$p->t('tools/bestaetigungDrucken').'"><img src="../../../skin/images/pdfpic.gif" alt="'.$p->t('tools/bestaetigungDrucken').'"></a>';
echo "<tr>";
echo '<td '.$style.'>'.date('d.m.Y',$buchungsdatum).'</td>';
echo '<td '.$style.'>'.$buchungstyp[$row['parent']->buchungstyp_kurzbz].'</td>';
echo '<td '.$style.'>'.$stg_arr[$row['parent']->studiengang_kz].'</td>';
echo '<td '.$style.'>'.$row['parent']->studiensemester_kurzbz.'</td>';
echo '<td '.$style.'>'.$row['parent']->buchungstext.'</td>';
echo '<td align="right" '.$style.'>€ '.($betrag<0?'-':($betrag>0?'+':'')).sprintf('%.2f',abs($row['parent']->betrag)).'</td>';
echo '<td align="center" '.$style.'>';
if($betrag>=0 && $row['parent']->betrag<=0)
{
echo '<a href="../pdfExport.php?xml=konto.rdf.php&xsl=Zahlung&uid='.$uid.'&buchungsnummern='.$buchungsnummern.'" title="'.$p->t('tools/bestaetigungDrucken').'"><img src="../../../skin/images/pdfpic.gif" alt="'.$p->t('tools/bestaetigungDrucken').'"></a>';
}
elseif($row['parent']->betrag>0)
{
//Auszahlung
}
else
{
echo '<a onclick="window.open(';
echo "'zahlungen_details.php?buchungsnr=".$row['parent']->buchungsnr.$getParam."','Zahlungsdetails','height=500,width=550,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');return false;";
echo '" href="#">'.$p->t('tools/offen').'</a>(€ '.sprintf('%.2f',$betrag*-1).')';
echo '</td>';
}
echo '</tr>';
}
elseif($row['parent']->betrag>0)
{
//Auszahlung
}
else
{
echo '<a onclick="window.open(';
echo "'zahlungen_details.php?buchungsnr=".$row['parent']->buchungsnr.$getParam."','Zahlungsdetails','height=500,width=550,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');return false;";
echo '" href="#">'.$p->t('tools/offen').'</a>(€ '.sprintf('%.2f',$betrag*-1).')';
echo '</td>';
}
echo '</tr>';
}
// Wenn die Tabelle keine Eintraege hat, wird eine Tabellenzeile mit entsprechender Information angezeigt.
if ($count_studiengangszahlung == 0)
{
echo "<tr><td colspan='7' style='background-color: white;'>" .$p->t('tools/keineZahlungenVorhanden'). "</td></tr>";
}
echo '</tbody></table>';
}
else
else
{
echo $p->t('tools/keineZahlungenVorhanden');
}
}
echo '</td></tr></table';
echo '</body></html>';
echo '</body></html>';
?>
+145 -17
View File
@@ -112,13 +112,14 @@ foreach($addon_obj->result as $addon)
// Wenn Seite fertig geladen ist Addons aufrufen
echo '
<script>
let holiDays =[];
$( document ).ready(function()
{
if(typeof addon !== \'undefined\')
{
for(i in addon)
{
addon[i].init("cis/private/profile/urlaubstool.php", {uid:\''.$uid.'\'});
addon[i].init("cis/private/profile/zeitsperre_resturlaub.php", {uid:\''.$uid.'\', holiDays: holiDays});
}
}
@@ -126,6 +127,7 @@ $( document ).ready(function()
changeMonth: true,
changeYear: true,
dateFormat: "dd.mm.yy",
beforeShowDay: setHoliDays
});
$( ".timepicker" ).timepicker({
@@ -137,13 +139,31 @@ $( document ).ready(function()
});
});
</script>';
?>
<style>
.dd_breit
{
width:460px;
// set holidays function which is configured in beforeShowDay
function setHoliDays(date) {
for (i = 0; i < holiDays.length; i++) {
if (date.getFullYear() == holiDays[i][0]
&& date.getMonth() == holiDays[i][1] - 1
&& date.getDate() == holiDays[i][2]) {
return [true, "holiday", ""];
}
}
return [true, ""];
}
</script>';
?>
<style type="text/css">
.dd_breit
{
width:460px;
}
.ui-datepicker td.holiday a, .ui-datepicker td.holiday a:hover
{
background: none #FFEBAF;
border: 1px solid #BF5A0C;
}
</style>
<script language="Javascript">
function conf_del()
@@ -180,7 +200,7 @@ function checkdatum()
return false;
}
var Datum, Tag, Monat,Jahr,vonDatum,bisDatum;
var Datum, Tag, Monat,Jahr,vonDatum,bisDatum, diff;
Datum=document.getElementById('vondatum').value;
Tag=Datum.substring(0,2);
@@ -210,12 +230,23 @@ function checkdatum()
bisDatum=Jahr+''+Monat+''+Tag;
diff=bisDatum-vonDatum;
if (vonDatum>bisDatum)
{
alert('<?php echo $p->t('zeitsperre/vonDatum');?> '+ document.getElementById('vondatum').value+ ' <?php echo $p->t('zeitsperre/istGroesserAlsBisDatum');?> '+document.getElementById('bisdatum').value);
document.getElementById('vondatum').focus();
return false;
}
else if (diff>14)
{
Check = confirm('<?php echo $p->t('zeitaufzeichnung/zeitraumAuffallendHoch');?>');
document.getElementById('bisdatum').focus();
if (Check == false)
return false;
else
return true;
}
return true;
}
@@ -254,6 +285,8 @@ function showHideBezeichnungDropDown()
document.getElementById('resturlaub').style.visibility = 'visible';
else
document.getElementById('resturlaub').style.visibility = 'hidden';
showHideStudeDropDown()
}
function setBisDatum()
@@ -261,6 +294,26 @@ function setBisDatum()
document.zeitsperre_form.bisdatum.value = document.zeitsperre_form.vondatum.value;
}
function showHideStudeDropDown()
{
var dd = document.zeitsperre_form.zeitsperretyp_kurzbz;
if (dd.options[dd.selectedIndex].value == 'ZA'
|| dd.options[dd.selectedIndex].value == 'Urlaub'
|| dd.options[dd.selectedIndex].value == 'Krank'
|| dd.options[dd.selectedIndex].value == 'DienstF'
|| dd.options[dd.selectedIndex].value == 'DienstV')
{
document.getElementById('vonStd').style.visibility = 'hidden';
document.getElementById('bisStd').style.visibility = 'hidden';
}
else
{
document.getElementById('vonStd').style.visibility = 'visible';
document.getElementById('bisStd').style.visibility = 'visible';
}
}
</script>
</head>
@@ -413,15 +466,23 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
if($zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub')
{
//Beim Anlegen von neuen Urlauben wird ein Mail an den Vorgesetzten versendet um diesen Freizugeben
$vorgesetzter = $ma->getVorgesetzte($uid);
$prsn = new person();
$vorgesetzter = $ma->getVorgesetzte($uid);
if($vorgesetzter)
{
$to='';
$fullName='';
foreach($ma->vorgesetzte as $vg)
{
if (!empty($to))
{
$to.=',';
$fullName.=',';
}
$to.=trim($vg.'@'.DOMAIN);
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=$name;
}
$benutzer = new benutzer();
@@ -440,11 +501,11 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
$mail = new mail($to, $from, 'Freigabeansuchen', $message);
if($mail->send())
{
echo "<br><b>".$p->t('urlaubstool/freigabemailWurdeVersandt',array($to))."</b>";
echo "<br><b>".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName))."</b>";
}
else
{
echo "<br><span class='error'>".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($to))."</span>";
echo "<br><span class='error'>".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."</span>";
}
}
else
@@ -461,8 +522,69 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
echo "<span class='error'>$error_msg</span>";
}
//loeschen eines bereits freigegebenen Urlaubs
if((isset($_GET['type']) && $_GET['type']=='delete_sperre' && isset($_GET['informSupervisor'])))
{
$zeitsperre = new zeitsperre();
$zeitsperre->load($_GET['id']);
$vondatum = $zeitsperre->getVonDatum();
$bisdatum = $zeitsperre->getBisDatum();
if(!$zeitsperre->delete($_GET['id']))
echo $zeitsperre->errormsg;
//Mail an Vorgesetzten
$prsn = new person();
$vorgesetzter = $ma->getVorgesetzte($uid);
if($vorgesetzter)
{
$to='';
$fullName ='';
foreach($ma->vorgesetzte as $vg)
{
if($to!='')
{
$to.=', '.$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=', '.$name;
}
else
{
$to.=$vg.'@'.DOMAIN;
$name = $prsn->getFullNameFromBenutzer($vg);
$fullName.=$name;
}
}
$benutzer = new benutzer();
$benutzer->load($uid);
$message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n".
$p->t('urlaubstool/xHatUrlaubGeloescht',array($benutzer->nachname,$benutzer->vorname)).":\n";
$message.= $p->t('urlaubstool/von')." ".date("d.m.Y", strtotime($vondatum))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($bisdatum))."\n";
$mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message);
if($mail->send())
{
echo "<br><b>".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName))."</b>";
}
else
{
echo "<br><span class='error'>".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!</span>";
}
}
else
{
$vgmail="<br><span class='error'>".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden')."</span>";
}
}
//loeschen einer zeitsperre
if(isset($_GET['type']) && $_GET['type']=='delete_sperre')
if(isset($_GET['type']) && $_GET['type']=='delete_sperre' && !isset($_GET['informSupervisor']) )
{
$zeit = new zeitsperre();
$zeit->load($_GET['id']);
@@ -532,10 +654,14 @@ if(count($zeit->result)>0)
$content_table.="<td><a href='$PHP_SELF?type=edit&id=$row->zeitsperre_id' class='Item'>".$p->t('zeitsperre/edit')."</a></td>";
if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz,$typen_arr))
$content_table .= '<td>&nbsp;</td>';
else if($row->freigabeamum=='' || $row->zeitsperretyp_kurzbz!='Urlaub')
else if($row->vondatum>=date("Y-m-d",time()) && $row->zeitsperretyp_kurzbz=='Urlaub')
{
$content_table.="\n<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id' onclick='return conf_del()' class='Item'>".$p->t('zeitsperre/loeschen')."</a></td>";
$content_table.="\n<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id&informSupervisor=True' onclick='return conf_del()' class='Item'>".$p->t('zeitsperre/loeschen')."</a></td>";
}
elseif($row->zeitsperretyp_kurzbz!='Urlaub')
{
$content_table.="\n<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id' onclick='return conf_del()' class='Item'>".$p->t('zeitsperre/loeschen')."</a></td>";
}
else
$content_table .= '<td>&nbsp;</td>';
$content_table.="</tr>";
@@ -600,7 +726,7 @@ if($result = $db->db_query($qry))
}
$content_form.= '</SELECT></td></tr>';
$content_form.= '<tr><td>'.$p->t('global/bezeichnung').'</td><td colspan="2"><span id="dienstv_span"><input'.$style.' type="text" size="32" name="bezeichnung" maxlength="32" value="'.$zeitsperre->bezeichnung.'"'.$readonly.'></span></td></tr>';
$content_form.= '<tr><td>'.$p->t('global/von').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="vondatum" id="vondatum" value="'.($zeitsperre->vondatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->vondatum)):(!isset($_POST['vondatum'])?date('d.m.Y'):$_POST['vondatum'])).'"'.$readonly.'> <a href="javascript:void(0);" onClick="setBisDatum()">&dArr;</a></td><td style="text-align:right;"> ';
$content_form.= '<tr><td>'.$p->t('global/von').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="vondatum" id="vondatum" value="'.($zeitsperre->vondatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->vondatum)):(!isset($_POST['vondatum'])?date('d.m.Y'):$_POST['vondatum'])).'"'.$readonly.'> <a href="javascript:void(0);" onClick="setBisDatum()">&dArr;</a></td><td id="vonStd" style="text-align:right;"> ';
//dropdown fuer vonstunde
$content_form.= $p->t('zeitsperre/stundeInklusive');
@@ -622,7 +748,7 @@ for($i=0;$i<$num_rows_stunde;$i++)
$content_form.= "</SELECT></td></tr>";
$content_form.= '<tr><td>'.$p->t('global/bis').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="bisdatum" id="bisdatum" value="'.($zeitsperre->bisdatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->bisdatum)):(!isset($_POST['bisdatum'])?date('d.m.Y'):$_POST['bisdatum'])).'"'.$readonly.'></td><td style="text-align:right;"> ';
$content_form.= '<tr><td>'.$p->t('global/bis').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="bisdatum" id="bisdatum" value="'.($zeitsperre->bisdatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->bisdatum)):(!isset($_POST['bisdatum'])?date('d.m.Y'):$_POST['bisdatum'])).'"'.$readonly.'></td><td id="bisStd" style="text-align:right;"> ';
//dropdown fuer bisstunde
$content_form.= $p->t('zeitsperre/stundeInklusive');
$content_form.= " <SELECT name='bisstunde'$style>\n";
@@ -676,12 +802,13 @@ $content_form.= '<td style="text-align:right;">';
if(isset($_GET['type']) && $_GET['type']=='edit')
$content_form.= "<input type='submit' name='submit_zeitsperre' value='".$p->t('global/speichern')."'>";
else
$content_form.= "<input type='submit' name='submit_zeitsperre' value='".$p->t('global/hinzufuegen')."'>";
$content_form.= '</td></tr>';
$content_form .= '<tr><td colspan="3">&nbsp;</td></tr>';
$content_form.= "<tr><td colspan='3' style='color:red'>".$p->t('zeitsperre/achtungEsWerdenAlleEingegebenenTage')."</td></tr>";
$content_form.= "<tr><td colspan='3' style='color:#ff0000'>" .$p->t('zeitsperre/achtungEsWerdenAlleEingegebenenTage')."</td></tr>";
$content_form.= '</table></form>';
echo '<table width="100%">';
@@ -701,3 +828,4 @@ echo '</table>';
</div>
<body>
</html>
<?php echo '<script>showHideStudeDropDown();</script>'; ?>
+8 -8
View File
@@ -91,20 +91,20 @@ if($aktion!='zip')
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script src="../../../vendor/components/jqueryui/jquery-ui.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<link rel="stylesheet" href="../../../include/js/tablesort/table.css" type="text/css">
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>';
include('../../../include/meta/jquery.php');
include('../../../include/meta/jquery-tablesorter.php');
echo '
<script language="JavaScript" type="text/javascript">
$(document).ready(function()
{
$("#t1").tablesorter(
{
sortList: [[5,0]],
widgets: ["zebra"]
widgets: ["zebra"],
headers: {1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }}
});
});
</script>
+263 -92
View File
@@ -1,5 +1,5 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
/* kCopyright (C) 2006 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
@@ -114,6 +114,8 @@ else
$gesperrt_bis = '2015-08-31';
$sperrdatum = date('c', strtotime($gesperrt_bis));
$datumjetzt = strtotime("+5 weeks");
$limitdatum = date('c', $datumjetzt);
// Uses urlencode to avoid XSS issues
$zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:'');
@@ -166,6 +168,12 @@ if(isset($_POST['export']))
}
}
//CSV export für Übersicht zugeteilter Projekte - Konflikt mit normalen HTML headern deshalb weiter vorne
if(isset($_POST['projektübersichtexport']))
{
exportProjectOverviewAsCSV($user, ',');
}
echo '<!DOCTYPE HTML>
<html>
<head>
@@ -213,6 +221,7 @@ echo '
<script type="text/javascript">
$(document).ready(function()
{
resetProjekt()
$( ".datepicker_datum" ).datepicker({
changeMonth: true,
changeYear: true,
@@ -459,6 +468,7 @@ echo '
document.getElementById("bis_datum").focus();
return false;
}
return true;
}
@@ -506,6 +516,12 @@ echo '
}
return true;
}
function resetProjekt()
{
$("#projekt").val("");
$("#projektphaseformgroup").hide();
}
function getProjektphasen(projekt_kurzbz)
{
@@ -535,7 +551,13 @@ echo '
var projphasenhtml = "";
for (var i = 0; i < json.length; i++)
{
projphasenhtml += "<option value = \'" + json[i].projektphase_id + "\'>" + json[i].bezeichnung + "<\/option>";
projphasenhtml += "<option value = \'" + json[i].projektphase_id + "\'>";
projphasenhtml += json[i].bezeichnung;
if(json[i].start != \'\' && json[i].ende !=\'\')
{
projphasenhtml += " ( "+json[i].start+" - "+json[i].ende+" )";
}
projphasenhtml += "<\/option>";
}
$("#projektphase").append(projphasenhtml);
@@ -673,6 +695,25 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
{
$zeit = new zeitaufzeichnung();
$projects_of_user = new projekt();
$projects= $projects_of_user->getProjekteListForMitarbeiter($user);
$project_kurzbz_array = array();
$projektph_of_user = new projektphase();
$projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user);
$projectphasen_kurzbz_array = array();
foreach($projects as $prjct)
{
array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz);
}
foreach ($projektphasen as $pp)
{
array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id);
}
$projectphase = new projektphase();
if ($_FILES['csv']['error'] == 0 && isset($_POST['import']))
{
$name = $_FILES['csv']['name'];
@@ -689,108 +730,134 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$anzahl = 0;
$importtage_array = array();
$ende_vorher = date('Y-m-d H:i:s');
while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE)
{
if($data[0] == $user)
{
if (!isset($data[5]))
$data[5] = NULL;
if (!isset($data[6]))
$data[6] = NULL;
if (!isset($data[7]))
$data[7] = NULL;
if (!isset($data[8]))
$data[8] = NULL;
if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>';
//elseif (isset($data[8]) && ( filter_var($data[8], FILTER_VALIDATE_INT) === false ))
//{
// echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Service ID ist keine Zahl ('.$data[8].')</b></span><br>';
//}
elseif (checkVals($data[5],$data[6],$data[7],$data[8]))
if($data[0] == $user){
if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')</b></span><br>';
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')</b></span><br>';
}
elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')</b></span><br>';
}
else
{
if ($data[1] == 'LehreIntern')
$data[1] = 'Lehre';
$zeit->new = true;
$zeit->beschreibung = NULL;
$zeit->oe_kurzbz_1 = NULL;
$zeit->projekt_kurzbz = NULL;
$zeit->projektphase_id = NULL;
$zeit->service_id = NULL;
$vonCSV = $datum->formatDatum($data[2], $format='Y-m-d');
$bisCSV = $datum->formatDatum($data[3], $format='Y-m-d');
$dateVonCSV = new DateTime($vonCSV);
$dateBisCSV = new DateTime($bisCSV);
$zeit->insertamum = date('Y-m-d H:i:s');
$zeit->updateamum = date('Y-m-d H:i:s');
$zeit->updatevon = $user;
$zeit->insertvon = $user;
$zeit->uid = $data[0];
$zeit->aktivitaet_kurzbz = $data[1];
$zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s');
$zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s');
if (isset($data[4]))
$zeit->beschreibung = $data[4];
if (isset($data[5]))
$zeit->oe_kurzbz_1 = $data[5];
if (isset($data[6]))
$zeit->projekt_kurzbz = $data[6];
if (isset($data[7]))
$zeit->projektphase_id = $data[7];
if (isset($data[8]))
$zeit->service_id = $data[8];
$tag = $datum->formatDatum($data[2], $format='Y-m-d');
if(!in_array($tag, $importtage_array))
if (!isset($data[5]))
$data[5] = NULL;
if (!isset($data[6]))
$data[6] = NULL;
if (!isset($data[7]))
$data[7] = NULL;
if (!isset($data[8]))
$data[8] = NULL;
if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>';
elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.</b></span><br>';
elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT")
{
$importtage_array[] = $tag;
$zeit->deleteEntriesForUser($user, $tag);
$tag_aktuell = $tag;
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).</b></span><br>';
}
elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')</b></span><br>';
}
elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')</b></span><br>';
}
elseif (checkVals($data[5],$data[6],$data[7],$data[8]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')</b></span><br>';
}
else
{
if ($ende_vorher < $zeit->start)
if ($data[1] == 'LehreIntern')
$data[1] = 'Lehre';
$zeit->new = true;
$zeit->beschreibung = NULL;
$zeit->oe_kurzbz_1 = NULL;
$zeit->projekt_kurzbz = NULL;
$zeit->projektphase_id = NULL;
$zeit->service_id = NULL;
$zeit->insertamum = date('Y-m-d H:i:s');
$zeit->updateamum = date('Y-m-d H:i:s');
$zeit->updatevon = $user;
$zeit->insertvon = $user;
$zeit->uid = $data[0];
$zeit->aktivitaet_kurzbz = $data[1];
$zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s');
$zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s');
if (isset($data[4]))
$zeit->beschreibung = $data[4];
if (isset($data[5]))
$zeit->oe_kurzbz_1 = $data[5];
if (isset($data[6]))
$zeit->projekt_kurzbz = $data[6];
if (isset($data[7]))
$zeit->projektphase_id = $data[7];
if (isset($data[8]))
$zeit->service_id = $data[8];
$tag = $datum->formatDatum($data[2], $format='Y-m-d');
if(!in_array($tag, $importtage_array))
{
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $user;
$pause->insertvon = $user;
$pause->uid = $user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->start = $ende_vorher;
$pause->ende = $zeit->start;
$pause->beschreibung = '';
if(!$pause->save())
$importtage_array[] = $tag;
$zeit->deleteEntriesForUser($user, $tag);
$tag_aktuell = $tag;
}
else
{
if ($ende_vorher < $zeit->start)
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'</b></span><br>';
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $user;
$pause->insertvon = $user;
$pause->uid = $user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->start = $ende_vorher;
$pause->ende = $zeit->start;
$pause->beschreibung = '';
if(!$pause->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'</b></span><br>';
}
}
}
}
$ende_vorher = $zeit->ende;
if($data[2] != $data[3])
{
/*
if ($data[1] == 'LehreExtern')
$ende_vorher = $zeit->ende;
if($data[2] != $data[3])
{
$zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2])));
$zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3])));
}
*/
if(!$zeit->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'</b>('.$zeit->start.')</span><br>';
/*
if ($data[1] == 'LehreExtern')
{
$zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2])));
$zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3])));
}
*/
if(!$zeit->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'</b>('.$zeit->start.')</span><br>';
}
else
$anzahl++;
}
else
$anzahl++;
}
else
$anzahl++;
}
}
}
}
else if (strpos($data[0],'#') === false)
{
@@ -812,7 +879,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
}
}
else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum</b></span>';
echo '<span style="color:#ff0000"><b>' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum</b></span>';
else if (isset($_POST['save']) || isset($_POST['edit']))
{
@@ -844,7 +911,28 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$zeit->service_id = $service_id;
$zeit->kunde_uid = $kunde_uid;
$saveerror = 0;
if (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit'])))
if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d')))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.</b></span><br>';
$saveerror = 1;
}
elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum)
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.</b></span><br>';
$saveerror = 1;
}
elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d')))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.</b></span><br>';
$saveerror = 1;
}
elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT")
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).</b></span><br>';
$saveerror = 1;
}
elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit'])))
{
$p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s');
@@ -1021,7 +1109,9 @@ if($projekt->getProjekteMitarbeiter($user, true))
<a href='".$_SERVER['PHP_SELF']."?csvimport=1' style='font-size: larger;'>CSV Import</a><a style='font-size: larger; text-decoration: none; cursor: default'> | </a>
<a href='".$_SERVER['PHP_SELF']."?csvexport=1' style='font-size: larger;'>CSV Export</a>";
<a href='".$_SERVER['PHP_SELF']."?csvexport=1' style='font-size: larger;'>CSV Export</a><a style='font-size: larger; text-decoration: none; cursor: default'> | </a>
<a href='".$_SERVER['PHP_SELF']."?projektübersichtexport=1' style='font-size: larger;'>Projektübersichtexport</a>";
if($anzprojekte > 0)
echo "<a style='font-size: larger; text-decoration: none; cursor: default'> | </a><a href='".$_SERVER['PHP_SELF']."?projektexport=1".($passuid ? '&uid='.$user : '')."' style='font-size: larger;'>".$p->t("zeitaufzeichnung/projektexport")."</a>";
echo "</td>
@@ -1107,6 +1197,17 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '</form>';
}
if (isset($_GET['projektübersichtexport']))
{
echo '<tr><td colspan="4"><hr></td></tr>';
echo '<tr><td>CSV-Export</td>';
echo '<td align="right"><input type="submit" value="Projektübersichtexport" name="projektübersichtexport"></td></tr>';
echo '<tr><td></td><td colspan="3"></td></tr>';
echo '<tr><td colspan="4"><hr></td></tr>';
}
//Aktivitaet
echo '<tr>';
echo '<td>'.$p->t("zeitaufzeichnung/aktivitaet").'</td><td colspan="4">';
@@ -1145,7 +1246,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '<tr><td nowrap>'.$p->t("zeitaufzeichnung/organisationseinheiten").'</td>
<td colspan="3"><SELECT '.$oestyle.' name="oe_kurzbz_1">';
$oe = new organisationseinheit();
$oe->getFrequent($user,'180','3',true);
$oe->getFrequent($user,'180','3',true, array('oezuordnung', 'fachzuordnung', 'kstzuordnung'));
$trennlinie = true;
echo '<option value="">-- '.$p->t("zeitaufzeichnung/keineAuswahl").' --</option>';
@@ -1394,6 +1495,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '</table>';
}
echo '</td></tr>';
echo '</table>';
echo '</form>';
@@ -1437,8 +1539,8 @@ if($projekt->getProjekteMitarbeiter($user, true))
printTableHeadings($fieldheadings, $za_simple);
$tag=null;
$woche=date('W');
$tag=null;
$woche=date('W');
$tagessumme='00:00';
$pausesumme='00:00';
@@ -1458,8 +1560,6 @@ if($projekt->getProjekteMitarbeiter($user, true))
{
$datumtag = $datum_obj->formatDatum($row->datum, 'Y-m-d');
//echo '<tr><th colspan="13">foo<th></tr>';
// Nach jedem Tag eine Summenzeile einfuegen
if(is_null($tag))
$tag = $datumtag;
@@ -1532,7 +1632,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
$langindex = 1;
else
$langindex = 2;
echo '<b>'.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').'</b> <span id="tag_'.$datum->formatDatum($tag,'d_m_Y').'">'.$zeitsperre_text.'</span>'.$pausefehlt_str;
echo '<span style="display: inline-block; width: 130px;"><b>'.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').'</b></span><span id="tag_'.$datum->formatDatum($tag,'d_m_Y').'">'.$zeitsperre_text.'</span>'.$pausefehlt_str;
if ($ersumme != '00:00')
$erstr = ' (+ '.$ersumme.' ER)';
else
@@ -1859,4 +1959,75 @@ function getZeitaufzeichnung($user, $von, $bis)
return $za;
}
/**
* Exportiert Zeitaufzeichnungsdaten als CSV
* @param $data Zeitaufzeichnungsdaten
* @param string $delimiter CSV-Trennzeichen
* @param $fieldheadings Namen der Spaltenüberschriften
* @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple)
* @param $uid Id des Users für CSV-Filenamen "zeitaufzeichnung_uid"
*/
function exportProjectOverviewAsCSV($user, $delimiter = ',')
{
$filename = "projektUebersicht_".$user.".csv";
header('Content-type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
$file = fopen('php://output', 'w');
$towrite = getDataForProjectOverviewCSV($user);
foreach ($towrite as $row)
{
fputcsv($file, $row, $delimiter);
}
fclose($file);
//Abbruch damit HTML markup danach nicht mit exportiert wird
exit();
}
function getDataForProjectOverviewCSV($user)
{
$projects_of_user = new projekt();
$projects = $projects_of_user->getProjekteListForMitarbeiter($user);
$projektphase = new projektphase();
if($projektphase->getProjectphaseForMitarbeiter($user))
$projektphasen = $projektphase->result;
else
$projetkphasen = array();
$csvData = array();
foreach ($projects as $project)
{
$titel = $project->titel;
$projekt_kurzbz = $project->projekt_kurzbz;
$projekt_phase = '';
$projekt_phase_id = '';
$beginn = $project->beginn;
$ende = $project->ende;
$csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende);
}
foreach ($projektphasen as $prjp)
{
if (true)
{
$titel = $prjp->projekt_kurzbz;
$projekt_kurzbz = $prjp->projekt_kurzbz;
$projekt_phase = $prjp->bezeichnung;
$projekt_phase_id = $prjp->projektphase_id;
$beginn = $prjp->start;
$ende = $prjp->ende;
array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende) );
}
}
sort($csvData);
//headers schreiben
array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE'));
return $csvData;
}
?>
@@ -90,6 +90,7 @@ $ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$d
$projektlines = array();
$dayStart = $dayEnd = '';
$projektnames = $projektphasenames = $tosubtract = $allpauseranges = array();
$projektTiteles = array();
$activitiesToSubtract = ['Pause', 'LehreExtern', 'Arztbesuch', 'Behoerde'];//aktivitaetstypen which should be subtracted fromworktime
$ztaufdata = $ztauf->result;
$totalmonthsum = 0.00;
@@ -281,7 +282,15 @@ for ($i = 0; $i < count($ztaufdata); $i++)
//add new projekt to array with unique projekt names
if (!in_array($ztaufrow->projekt_kurzbz, $projektnames))
{
$projektnames[] = $ztaufrow->projekt_kurzbz;
$pt = new projekt();
$pt->load($ztaufrow->projekt_kurzbz);
if(!empty($pt->titel))
$projektTiteles[convertProblemChars($ztaufrow->projekt_kurzbz)] = convertProblemChars($pt->titel);
else
$projektTiteles[convertProblemChars($ztaufrow->projekt_kurzbz)] = 'kein Titel';
}
}
}
@@ -557,10 +566,21 @@ if ($nrProjects < 1)//no projekts - merge all cells and write notice
foreach ($projektnames as $projektname)
{
//Creating a worksheet
$worksheet =& $workbook->addWorksheet($projektname);
$worksheet->setInputEncoding('utf-8');
$titel = $projektTiteles[convertProblemChars($projektname)];
if ((strlen($titel)+strlen($projektname)) > 31)
{
$maxLength = 31;
$maxLength = ($maxLength - 3 - strlen($projektname));
$titel = substr($titel, 0, $maxLength);
$titel.='...';
}
//Creating a worksheet
$worksheet =& $workbook->addWorksheet(convertProblemChars($projektname).' ('.$titel.')');
$worksheet->setInputEncoding('utf-8');
$titel = $projektTiteles[convertProblemChars($projektname)];
//general options
$worksheet->setLandscape();
$worksheet->hideGridlines();
@@ -686,7 +706,7 @@ foreach ($projektnames as $projektname)
$worksheet->write($zeile, $spalte + 1 + $i, '', $format_bold_centered_toprightline);
$worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1 + $phasenameslength);
$worksheet->write($zeile, $spalte, $projektname, $format_bold_centered_toprightline);
$worksheet->write($zeile, $spalte, $projektname.' ('.$titel.')', $format_bold_centered_toprightline);
for ($i = 0; $i < $phasenameslength; $i++)
$worksheet->write($zeile + 1, $spalte + 1 + $i, $phasenames[$i], $format_bold_centered_bottomline);
@@ -1,26 +1,46 @@
<?php
require_once('../../../config/cis.config.inc.php');
/*require_once('../../../include/functions.inc.php');*/
require_once('../../../include/functions.inc.php');
require_once('../../../include/basis_db.class.php');
require_once('../../../include/projektphase.class.php');
require_once('../../../include/datum.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
//$uid=get_uid();
$user = get_uid();
$datum_obj = new datum();
if(isset($_GET['projekt_kurzbz'])) // TODO maybe check that phasen only shown if projekt is projekt of logged in user
{
$projekt_kurzbz = $_GET['projekt_kurzbz'];
$projektphase = new projektphase();
if($projektphase->getProjectphaseForMitarbeiterByKurzBz($user, $projekt_kurzbz))
$projektphasen_user = $projektphase->result;
else
$projektphasen_user = array();
$pp_user_ids = array();
foreach ($projektphasen_user as $pp_user)
{
array_push($pp_user_ids, $pp_user->projektphase_id);
}
if($projektphase->getProjektphasen($projekt_kurzbz))
{
$result_obj = array();
foreach($projektphase->result as $row)
{
$item['projektphase_id']=$row->projektphase_id;
$item['bezeichnung']=$row->bezeichnung;
$result_obj[]=$item;
if(in_array($row->projektphase_id, $pp_user_ids))
{
$item['projektphase_id'] = $row->projektphase_id;
$item['bezeichnung'] = $row->bezeichnung;
$item['start'] = $datum_obj->formatDatum($row->start, 'd.m.Y');
$item['ende'] = $datum_obj->formatDatum($row->ende, 'd.m.Y');
$result_obj[] = $item;
}
}
echo json_encode($result_obj);
}
+6 -5
View File
@@ -62,11 +62,15 @@ TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE\n";
//echo 'URL:',APP_ROOT,'cis/public/ical_coodle.php/',$uid,"\n";
echo "BEGIN:VEVENT";
// Alle Umfragen holen an denen der User beteiligt ist
$umfragen = new coodle();
$umfragen->getCoodleFromUser($uid);
$i = 0;
if (count($umfragen->result) > 0)
{
//echo "BEGIN:VEVENT";
}
foreach($umfragen->result as $umfrage)
{
if($umfrage->coodle_status_kurzbz=='laufend')
@@ -88,10 +92,7 @@ foreach($umfragen->result as $umfrage)
$uhrzeit_ende = $date->format('H:i:s');
$dtende = $date->format('Ymd\THis');
if ($i > 0)
{
echo "\nBEGIN:VEVENT";
}
echo "\nBEGIN:VEVENT";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende."";
echo "\nSUMMARY:Coodle Terminoption";
echo "\nDTSTART;TZID=Europe/Vienna:$dtstart";
+2 -3
View File
@@ -76,7 +76,7 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
</noscript>
<div class="row well">
<div class="col-sm-12">
<h2>Fomeln</h2>
<h2>Formeln</h2>
<p>Die Formeln auf der linken Seite sollten möglichst gleich dargestellt werden, wie in dem Bild auf der rechten Seite.<br>
Abweichungen in Schriftgröße und -art können vorkommen.</p>
<p>The formula on the left side should be equal to the picture on the right side.<br>
@@ -166,5 +166,4 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
</div>
</body>
</html>
</html>
+2 -4
View File
@@ -220,6 +220,7 @@ if (isset($_GET['action']) && $_GET['action'] == 'edit')
$studiengang = new studiengang($stg_kz);
echo '<table><form action="'.$_SERVER['PHP_SELF'].'?stg_kz='.$stg_kz.'&action=editsave" method="POST">
<input type="hidden" name="ablauf_id" value="'.$_POST['ablauf_id'].'" />
<tr><td>Studiengang_kz: </td><td><input type="text" name="stg_kz" value="'.strtoupper($studiengang->typ.$studiengang->kurzbz).' ('.$studiengang->bezeichnung.')'.'" style="width:98.5%" disabled /></td></tr>
<tr><td>Gebiet: </td><td><input type="text" value="'.$gebiet->kurzbz.' ('.$gebiet->bezeichnung.')" style="width:98.5%" disabled /><input type="hidden" name="gebiet_id" value="'.$ablauf->result[0]->gebiet_id.'"/></td></tr>
<tr><td>Reihung: </td><td><input type="text" name="reihung" value="'.$ablauf->result[0]->reihung.'" style="width:98.5%" /></td></tr>
@@ -254,10 +255,7 @@ if (isset($_GET['action']) && $_GET['action'] == 'editsave')
{
if (isset($_POST['reihung']) && $_POST['reihung'] != '' && isset($_POST['gewicht']) && $_POST['gewicht'] != '' && isset($_POST['semester']) && $_POST['semester'] != '')
{
$ablauf = new ablauf();
$ablauf->getAblaufId($stg_kz, $_POST['gebiet_id']);
$ablauf_id = $ablauf->result[0];
$ablauf = new ablauf($ablauf_id);
$ablauf = new ablauf($_POST['ablauf_id']);
$ablauf = $ablauf->result[0];
$ablauf->reihung = $_POST['reihung'];
$ablauf->gewicht = $_POST['gewicht'];
+16 -3
View File
@@ -219,6 +219,11 @@ if (isset($_REQUEST['prestudent']))
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id);
$rt_sprache = '';
if (empty($ablauf->result[0]))
{
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz);
}
if (!empty($ablauf->result[0]))
{
$rt_sprache = $ablauf->result[0]->sprache;
@@ -441,6 +446,7 @@ if (isset($prestudent_id))
if (isset($row_prio->studiengang_kz))
{
$firstPrio_studiengang_kz = $row_prio->studiengang_kz;
$firstPrio_studienplan_id = $row_prio->studienplan_id;
break;
}
}
@@ -449,9 +455,16 @@ if (isset($prestudent_id))
// Sprachwahl zu STG mit höchster Prio ermitteln
$ablauf = new Ablauf();
$sprachwahl = false;
if (isset($ablauf->result[0])
&& $ablauf->getAblaufVorgabeStudiengang($firstPrio_studiengang_kz)
&& is_bool($ablauf->result[0]->sprachwahl))
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id);
if (empty($ablauf->result[0]))
{
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz);
}
if (isset($ablauf->result[0])
&& is_bool($ablauf->result[0]->sprachwahl))
{
$sprachwahl = $ablauf->result[0]->sprachwahl;
}
+2
View File
@@ -224,6 +224,8 @@ if (isset($_SESSION['pruefling_id']))
(
(prestudent_data.semester= 1 AND tbl_ablauf.semester = 1)
OR
(prestudent_data.semester= 2 AND tbl_ablauf.semester = 2)
OR
(prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3))
)
AND (
+2 -1
View File
@@ -79,12 +79,13 @@ if($doc->isLocked($id))
$dokumente_arr[] .= $row->dokument_kurzbz;
// An der FHTW wird das vorläufige ZGV Dokument verlangt und kann somit auch heruntergeladen werden
// Auch der Inivtation Letter kann von BewerberInnen heruntergeladen werden
// Auch der Invitation Letter und die Zeitbestätigung können von BewerberInnen heruntergeladen werden
if (CAMPUS_NAME == 'FH Technikum Wien')
{
$dokumente_arr[] .= 'ZgvBaPre';
$dokumente_arr[] .= 'ZgvMaPre';
$dokumente_arr[] .= 'InvitLet';
$dokumente_arr[] .= 'ZeitBest';
}
if ($person_id!=$akte_person || !in_array($akte_dokument_kurzbz, $dokumente_arr))
die('Sie haben keinen Zugriff auf dieses Dokument');
Generated
+9 -9
View File
@@ -681,12 +681,12 @@
"version": "0.9.1",
"source": {
"type": "git",
"url": "https://github.com/njh/easyrdf.git",
"url": "https://github.com/easyrdf/easyrdf.git",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/njh/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
"url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566",
"shasum": ""
},
@@ -796,6 +796,7 @@
"faker",
"fixtures"
],
"abandoned": true,
"time": "2019-12-12 13:22:17"
},
{
@@ -1321,16 +1322,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "2.0.23",
"version": "2.0.31",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099"
"reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4",
"reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4",
"shasum": ""
},
"require": {
@@ -1338,8 +1339,7 @@
},
"require-dev": {
"phing/phing": "~2.7",
"phpunit/phpunit": "^4.8.35|^5.7|^6.0",
"sami/sami": "~2.0",
"phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
"squizlabs/php_codesniffer": "~2.0"
},
"suggest": {
@@ -1409,7 +1409,7 @@
"x.509",
"x509"
],
"time": "2019-09-17 03:41:22"
"time": "2021-04-06 13:56:45"
},
{
"name": "rmariuzzo/jquery-checkboxes",
+4
View File
@@ -26,6 +26,7 @@ define('CIS_LEHRVERANSTALTUNG_LEISTUNGSUEBERSICHT_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_SEMESTERINFO_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN',false);
define('CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN', true);
define('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN', true);
// Im CIS Menue Links bei Modulen anzeigen wenn Lehrauftrag
define('CIS_LEHRVERANSTALTUNG_MODULE_LINK',true);
@@ -260,6 +261,9 @@ define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor')));
//Wenn auf 'true' gesetzt, dann wird im FAS beim Konto das Feld fuer die CreditPoints angezeigt
define('FAS_KONTO_SHOW_CREDIT_POINTS','false');
//Wenn auf true gesetzt, dann wird im FAS beim Konto das Feld fuer die Mahnspanne angezeigt
define('FAS_KONTO_SHOW_MAHNSPANNE', true);
// Wenn definiert, wird bei der Vorrückung der Lehreinheiten nicht der Stundensatz des Vorjahres eingetragen.
// Erlaubt sind numerische Werte oder der Wert "default".
// Bei "default" wird der Standard-Stundensatz des Lektors (aus tbl_mitarbeiter) ermittelt, und dieser eingetragen.
+2 -2
View File
@@ -197,7 +197,7 @@ else
<label value="Nummer" control="betriebsmittel-textbox-nummer"/>
<hbox>
<textbox id="betriebsmittel-textbox-nummerold" hidden="true"/>
<textbox id="betriebsmittel-textbox-nummer" disabled="true" maxlength="12"/>
<textbox id="betriebsmittel-textbox-nummer" disabled="true" maxlength="32"/>
<spacer flex="1" />
</hbox>
</row>
@@ -269,4 +269,4 @@ else
</hbox>
<spacer flex="1" />
</vbox>
</window>
</window>
+64 -60
View File
@@ -322,66 +322,77 @@ if(!$error)
else
$alte_stunden_eingerechnet=true;
//Stundenreduzierung immer moeglich
if(($lem->semesterstunden>$semesterstunden_alt) || $neue_stunden_eingerechnet)
if ($semesterstunden_alt != '' && $lem->semesterstunden != '')
{
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT ";
if($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
elseif($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)) as summe";
elseif(!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)+($lem->semesterstunden)) as summe";
elseif(!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe";
$qry.=" FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
bismelden";
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0)
//Stundenreduzierung immer moeglich
if(($lem->semesterstunden>$semesterstunden_alt) || $neue_stunden_eingerechnet)
{
$qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")";
}
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT ";
if($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
elseif($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)) as summe";
elseif(!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)+($lem->semesterstunden)) as summe";
elseif(!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe";
$qry.=" FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
bismelden";
if($db->db_query($qry))
{
if($row = $db->db_fetch_object())
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0)
{
if($row->summe>$max_stunden)
{
if(!$fixangestellt)
{
if(!LehrauftragAufFirma($lem->mitarbeiter_uid))
{
//Warnung wenn die Stundenzahl ueberschritten wurde
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
}
}
else
{
$return = true;
$error = false;
$warnung = true;
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
}
$qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")";
}
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz, $oe_arr);
if($db->db_query($qry))
{
if($row = $db->db_fetch_object())
{
if($row->summe>$max_stunden)
{
if(!$fixangestellt)
{
if(!LehrauftragAufFirma($lem->mitarbeiter_uid))
{
//Warnung wenn die Stundenzahl ueberschritten wurde
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
}
}
else
{
$return = true;
$error = false;
$warnung = true;
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
}
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz, $oe_arr);
}
}
else
{
$return = false;
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
else
{
@@ -389,13 +400,6 @@ if(!$error)
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
else
{
$return = false;
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
}
@@ -28,6 +28,7 @@ header("Content-type: application/vnd.mozilla.xul+xml");
require_once('../../config/vilesci.config.inc.php');
require_once('../../config/global.config.inc.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/phrasen.class.php');
$user = get_uid();
$rechte = new benutzerberechtigung();
@@ -38,6 +39,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
// Vertragsdetails: Anzeige wird über config Eintrag bestimmt
$is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') || FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN == true) ? 'false' : 'true';
$sprache = getSprache();
$p = new phrasen($sprache);
?>
<overlay id="LehrveranstaltungDetailOverlay"
@@ -239,12 +242,12 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
</grid>
<vbox flex="1">
<label value=" Anmerkung" />
<label value="<?php echo $p->t('lehrveranstaltung/DetailAnmerkung'); ?>" />
<textbox id="lehrveranstaltung-detail-textbox-anmerkung" rows="5" multiline="true" disabled="true"/>
<hbox>
<spacer flex="1" />
<button id="lehrveranstaltung-detail-button-save" label="speichern" oncommand="LeDetailSave();" disabled="true"/>
<spacer flex="1" />
</hbox>
</vbox>
</hbox>
@@ -435,7 +438,7 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<vbox>
<groupbox>
<caption label="LektorInnendaten" />
<vbox flex="1" style="padding: 10px;">
<hbox flex="1" style="padding: 10px;">
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-lehreinheit_id" hidden="true"/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-mitarbeiter_uid" hidden="true"/>
<grid align="end" flex="1"
@@ -446,6 +449,8 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<column flex="1"/>
<column />
<column flex="1"/>
<column />
<column flex="1"/>
</columns>
<rows>
@@ -472,36 +477,34 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
</menupopup>
</template>
</menulist>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" value="<?php echo $p->t('lehrveranstaltung/LehreinheitmitarbeiterAnmerkung'); ?>"/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" disabled="true" maxlength="255" width="300" oninput="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-semesterstunden" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" value="Semesterstunden: "/>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-semesterstunden" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" value="Lehrauftragsstunden (LAS): "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" disabled="true" maxlength="6" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten(); if(parseInt(this.value)) document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden').value= parseInt(this.value)"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" value="Planstunden: "/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" tooltiptext="LVPLS" value="LV-Plan Stunden: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" disabled="true" maxlength="3" flex="1" oninput="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-stundensatz" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-stundensatz" value="Stundensatz: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-stundensatz" disabled="true" maxlength="6" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten()"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" value="Faktor: "/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" value="Faktor: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" disabled="true" maxlength="3" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten()"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" value="BIS-Melden: "/>
<checkbox id="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" disabled="true" flex="1" oncommand="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" value="Anmerkung: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" disabled="true" maxlength="256" flex="1" oninput="LeMitarbeiterValueChanged();"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" value="BIS-Melden: "/>
<checkbox id="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" disabled="true" flex="1" oncommand="LeMitarbeiterValueChanged();"/>
<label value='Gesamtkosten:' />
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-gesamtkosten" value='' />
<spacer />
<button label="Speichern" disabled="true" id="lehrveranstaltung-lehreinheitmitarbeiter-button-save" oncommand="LeMitarbeiterSave();"/>
<spacer />
<spacer />
</row>
</rows>
</grid>
<hbox flex="1">
<!--<spacer flex="1" />-->
<hbox flex="1">
<label value='Gesamtkosten:' />
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-gesamtkosten" value='' />
</hbox>
<button label="Speichern" disabled="true" id="lehrveranstaltung-lehreinheitmitarbeiter-button-save" oncommand="LeMitarbeiterSave();"/>
</hbox>
</vbox>
</hbox>
</groupbox>
</vbox>
@@ -509,11 +512,11 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<vbox>
<groupbox id="lehrveranstaltung-lehreinheitmitarbeiter-groupbox-vertragsdetails" hidden="<?php echo $is_hidden ?>">
<caption label="Vertragsdetails" />
<grid style="overflow:auto; padding:10px;" flex="1">
<grid style="overflow:auto; padding:10px;" >
<columns>
<column flex="1"/>
<column flex="1"/>
<column flex="1"/>
<column/>
<column/>
<column/>
</columns>
<rows>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-vertrag_id" hidden="true" value=""/>
@@ -59,7 +59,7 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/lehrveranstaltungnotenov
</popupset>
<toolbox>
<toolbar id="lehrveranstaltung-nav-toolbar">
<toolbarbutton id="lehrveranstaltung-toolbar-neu" label="Neue Lehreinheit" oncommand="LeNeu();" disabled="true" image="../skin/images/NeuDokument.png" tooltiptext="Neue Lehreinheit anlegen" />
<toolbarbutton id="lehrveranstaltung-toolbar-neu" label="Neuer LV-Teil" oncommand="LeNeu();" disabled="true" image="../skin/images/NeuDokument.png" tooltiptext="Neue Lehreinheit anlegen" />
<toolbarbutton id="lehrveranstaltung-toolbar-del" label="Loeschen" oncommand="LeDelete();" disabled="true" image="../skin/images/DeleteIcon.png" tooltiptext="Lehreinheiten löschen"/>
<toolbarbutton id="lehrveranstaltung-toolbar-refresh" label="Aktualisieren" oncommand="LvTreeRefresh()" disabled="false" image="../skin/images/refresh.png" tooltiptext="Liste neu laden"/>
<toolbarbutton id="lehrveranstaltung-toolbar-lehrauftrag" label="Lehrauftrag" oncommand="LvCreateLehrauftrag()" disabled="false" image="../skin/images/person.gif" tooltiptext="Lehrauftrag ausdrucken" hidden="true"/>
+5
View File
@@ -122,6 +122,10 @@ echo ']>
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/messages/rdf#status"/>
<splitter class="tree-splitter"/>
<treecol id="messages-tree-status" label="Letzte Statusänderung" flex="2" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/messages/rdf#statusdatum"/>
<splitter class="tree-splitter"/>
</treecols>
<template>
@@ -137,6 +141,7 @@ echo ']>
<treecell label="rdf:http://www.technikum-wien.at/messages/rdf#sender_id"/>
<treecell label="rdf:http://www.technikum-wien.at/messages/rdf#recipient_id"/>
<treecell label="rdf:http://www.technikum-wien.at/messages/rdf#status"/>
<treecell label="rdf:http://www.technikum-wien.at/messages/rdf#statusdatum"/>
</treerow>
</treeitem>
</treechildren>
+24 -1
View File
@@ -448,9 +448,32 @@ function MitarbeiterDetailDisableFields(val)
document.getElementById('mitarbeiter-detail-checkbox-kleriker').disabled=val;
}
function MitarbeiterCount()
{
var tree = document.getElementById('mitarbeiter-tree');
//Alle markierten Personen holen
var start = {};
var end = {};
var numRanges = tree.view.selection.getRangeCount();
var anzahl = 0;
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t, start, end);
for (var v = start.value; v <= end.value; v++)
{
anzahl = anzahl + 1;
}
}
return anzahl;
}
function MitarbeiterAuswahl()
{
if(!MitarbeiterTreeLoadDataOnSelect)
document.getElementById('mitarbeiter-toolbar-label-anzahl').value = 'Anzahl: ' + MitarbeiterCount();
if(!MitarbeiterTreeLoadDataOnSelect)
{
MitarbeiterTreeLoadDataOnSelect=true;
return true;
+1 -1
View File
@@ -252,7 +252,7 @@ else
array('uid', 'stg_kz', 'person_id', 'id', 'prestudent_id', 'buchungsnummern', 'ss', 'abschlusspruefung_id',
'typ', 'all', 'preoutgoing_id', 'lvid', 'projekt_kurzbz', 'von', 'bis', 'stundevon', 'stundebis',
'sem', 'lehreinheit', 'mitarbeiter_uid', 'studienordnung_id', 'fixangestellt', 'standort',
'abrechnungsmonat', 'form')
'abrechnungsmonat', 'form', 'projektarbeit_id', 'betreuerart_kurzbz')
)
)
{
+21 -15
View File
@@ -1733,6 +1733,7 @@ else
$content .= "</tr>";
$content .= '</tfoot></table>';
$content .= "\n";
}
//Aufsplittungen für Mischformen holen
@@ -1744,28 +1745,32 @@ else
{
if ($db->db_num_rows($result) > 0)
{
$content .= "<br><br><h2>Aufsplittung Mischformen</h2><br>";
$content .= "\n<table class='liste table-autosort:0 table-stripeclass:alternate table-autostripe'>
<thead>
<tr>
<th class='table-sortable:default'>Studiengang</th>";
$content .= "<br><br>";
$content .= "<h2>Aufsplittung Mischformen</h2><br>";
$content .= "\n<table class='liste table-autosort:0 table-stripeclass:alternate table-autostripe'>";
$content .= "\n<thead>";
$content .= "\n<tr>";
$content .= "\n<th class='table-sortable:default'>Studiengang</th>";
foreach ($studenttypes as $heading)
{
$content .= "<th colspan=".$noOrgformen.">$heading</th>";
$content .= "\n<th colspan=".$noOrgformen.">$heading</th>";
}
$content .= "</tr><tr><th>&nbsp</th>";
$content .= "\n</tr>";
$content .= "\n<tr>\n<th></th>";
//orgformheadings (VZ, BB,...) ausgeben
for ($i = 0; $i < $noStudenttypes; $i++)
{
foreach ($orgform_arr as $row_orgform)
{
$content .= "<th align='center' class='table-sortable:numeric'>";
$content .= "\n<th align='center' class='table-sortable:numeric' nowrap>";
$content .= $row_orgform;
$content .= "</th>";
}
}
$content .= "</tr></thead><tbody>";
$content .= "\n</tr>";
$content .= "\n</thead>";
$content .= "\n<tbody>";
$sumarr = array();
@@ -1773,13 +1778,13 @@ else
{
$content .= "\n";
$content .= '<tr>';
$content .= "<td>".mb_strtoupper($row->typ.$row->kurzbz)." ($row->kurzbzlang)</td>";
$content .= "\n<td>".mb_strtoupper($row->typ.$row->kurzbz)." ($row->kurzbzlang)</td>";
foreach ($studenttypes as $key => $value)
{
foreach ($orgform_arr as $row_orgform)
{
$fullAlias = $key."_".mb_strtolower($row_orgform);
$content .= "<td align='center'>";
$content .= "\n<td align='center' nowrap>";
$content .= $row->{$fullAlias};
$content .= "</td>";
//Summe berechnen
@@ -1794,14 +1799,15 @@ else
}
}
}
$content .= "</tr>";
$content .= "\n</tr>";
$content .= "\n";
$content .= '</tbody><tfoot style="font-weight: bold;"><tr>';
$content .= "<td>Summe</td>";
$content .= "</tbody>";
$content .= '<tfoot style="font-weight: bold;"><tr>';
$content .= "\n<td>Summe</td>";
foreach ($sumarr as $sum)
{
$content .= "<td align='center'>".$sum."</td>";
$content .= "\n<td align='center'>".$sum."</td>";
}
$content .= "</tfoot></tr>";
$content .= '</table>';
@@ -35,6 +35,7 @@ require_once('../../include/person.class.php');
require_once('../../include/benutzer.class.php');
require_once('../../include/student.class.php');
require_once('../../include/prestudent.class.php');
require_once('../../include/statusgrund.class.php');
require_once('../../include/datum.class.php');
require_once('../../include/Excel/excel.php');
require_once('../../include/udf.class.php');
@@ -156,6 +157,8 @@ $maxlength[$i] = 16;
$worksheet->write($zeile, ++$i, "STATUS", $format_bold);
$maxlength[$i] = 6;
$worksheet->write($zeile, ++$i, "STATUSGRUND", $format_bold);
$maxlength[$i] = 6;
$worksheet->write($zeile, ++$i, "STATUS IN ANDEREN STUDIENGÄNGEN", $format_bold);
$maxlength[$i] = 8;
$worksheet->write($zeile, ++$i, "EMail Intern", $format_bold);
@@ -258,6 +261,8 @@ function draw_content($row)
$prestudent = new prestudent();
$prestudent->getLastStatus($row->prestudent_id);
$statusgrundObj = new statusgrund($prestudent->statusgrund_id);
$statusgrund = $statusgrundObj->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
$status = $prestudent->status_kurzbz;
$orgform = $prestudent->orgform_kurzbz;
$prio_relativ = new prestudent();
@@ -523,6 +528,12 @@ function draw_content($row)
$worksheet->write($zeile, $i, $status);
$i++;
//Statusgrund
if (mb_strlen($statusgrund) > $maxlength[$i])
$maxlength[$i] = mb_strlen($statusgrund);
$worksheet->write($zeile, $i, $statusgrund);
$i++;
//Stati in anderen Studiengaengen
$stati='';
$qry_1 = "
+16
View File
@@ -2296,8 +2296,12 @@ if(!$error)
{
$dokumente = explode(';',$_POST['dokumente']);
$errormsg = '';
$sonst = 0;
foreach ($dokumente as $dokument_kurzbz)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2308,6 +2312,8 @@ if(!$error)
$dok->insertamum = date('Y-m-d H:i:s');
$dok->insertvon = $user;
$dok->new = true;
if ($dokument_kurzbz === 'Sonst')
$sonst++;
if(!$dok->save())
{
@@ -2501,8 +2507,13 @@ if(!$error)
{
$dokumente = explode(';',$_POST['dokumente']);
$errormsg = '';
$sonst = 0;
foreach ($dokumente as $dokument_kurzbz)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2514,6 +2525,11 @@ if(!$error)
{
$errormsg .= "Fehler bei $dokument_kurzbz: $dok->errormsg\n";
}
else
{
if ($dokument_kurzbz === 'Sonst')
$sonst++;
}
}
else
{
+8 -4
View File
@@ -300,7 +300,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="ZGV" control="student-prestudent-menulist-zgvcode"/>
<menulist id="student-prestudent-menulist-zgvcode" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/zgv.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/zgv/alle" >
ref="http://www.technikum-wien.at/zgv/alle"
style="min-width: 130px">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
@@ -320,7 +321,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<hbox>
<menulist id="student-prestudent-menulist-zgvnation" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/nation.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/nation/liste">
ref="http://www.technikum-wien.at/nation/liste"
style="min-width: 100px">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/nation/rdf#nation_code"
@@ -335,7 +337,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="ZGV Master" control="student-prestudent-menulist-zgvmastercode"/>
<menulist id="student-prestudent-menulist-zgvmastercode" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/zgvmaster.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/zgvmaster/alle" >
ref="http://www.technikum-wien.at/zgvmaster/alle"
style="min-width: 130px" >
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
@@ -354,7 +357,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<hbox>
<menulist id="student-prestudent-menulist-zgvmasternation" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/nation.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/nation/liste" >
ref="http://www.technikum-wien.at/nation/liste"
style="min-width: 100px">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/nation/rdf#nation_code"
@@ -96,7 +96,14 @@ echo '<?xml-stylesheet href="'.APP_ROOT.'content/datepicker/datepicker.css" type
<label value="Buchungstext" control="student-konto-neu-textbox-buchungstext"/>
<textbox id="student-konto-neu-textbox-buchungstext" maxlength="256"/>
</row>
<row>
<?php
// Mahnspanne wird nur angezeigt, wenn diese im Config aktiviert wurden
if(!defined('FAS_KONTO_SHOW_MAHNSPANNE') || FAS_KONTO_SHOW_MAHNSPANNE===true)
$hidden='';
else
$hidden='hidden="true"';
?>
<row <?php echo $hidden;?>>
<label value="Mahnspanne" control="student-konto-neu-textbox-mahnspanne"/>
<hbox>
<textbox id="student-konto-neu-textbox-mahnspanne" value="30" maxlength="4" size="4"/>
@@ -144,4 +151,4 @@ echo '<?xml-stylesheet href="'.APP_ROOT.'content/datepicker/datepicker.css" type
</hbox>
</groupbox>
</vbox>
</window>
</window>
+9 -2
View File
@@ -237,7 +237,14 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="Buchungstext" control="student-konto-textbox-buchungstext"/>
<textbox id="student-konto-textbox-buchungstext" disabled="true" maxlength="256"/>
</row>
<row>
<?php
// Mahnspanne wird nur angezeigt, wenn diese im Config aktiviert wurden
if(!defined('FAS_KONTO_SHOW_MAHNSPANNE') || FAS_KONTO_SHOW_MAHNSPANNE===true)
$hidden='';
else
$hidden='hidden="true"';
?>
<row <?php echo $hidden; ?>>
<label value="Mahnspanne" control="student-konto-textbox-mahnspanne"/>
<hbox>
<textbox id="student-konto-textbox-mahnspanne" disabled="true" maxlength="4" size="4"/>
@@ -346,4 +353,4 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
</grid>
</hbox>
</vbox>
</overlay>
</overlay>
+23
View File
@@ -952,6 +952,27 @@ function StudentImageInfomail()
}
}
function StudentCount()
{
var tree = document.getElementById('student-tree');
//Alle markierten Personen holen
var start = {};
var end = {};
var numRanges = tree.view.selection.getRangeCount();
var anzahl = 0;
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t, start, end);
for (var v = start.value; v <= end.value; v++)
{
anzahl = anzahl + 1;
}
}
return anzahl;
}
// ****
// * Auswahl eines Studenten
// * bei Auswahl eines Studenten wird dieser geladen
@@ -959,6 +980,8 @@ function StudentImageInfomail()
// ****
function StudentAuswahl()
{
document.getElementById('student-toolbar-label-anzahl').value = 'Anzahl: ' + StudentCount();
if(!StudentTreeLoadDataOnSelect)
{
StudentTreeLoadDataOnSelect=true;
+13 -1
View File
@@ -892,7 +892,13 @@ function StudentProjektbetreuerAuswahl()
document.getElementById('student-projektbetreuer-checkbox-neu').checked=false;
var gesamtkosten = StudentProjektbetreuerGesamtkosten();
if (document.getElementById('student-projektbetreuer-button-beurteilung'))
{
checkBeurteilung();
}
// Wenn Vertragsdetails angezeigt werden
if (projektarbeit_vertragsdetails_anzeigen) {
//Reset attributes
@@ -1122,6 +1128,12 @@ function StudentProjektbetreuerDetailDisableFields(val)
document.getElementById('student-projektbetreuer-button-speichern').disabled=val;
document.getElementById('student-projektbetreuer-button-neueperson').disabled=val;
document.getElementById('student-projektbetreuer-button-kontaktdaten').disabled=val;
if (document.getElementById('student-projektbetreuer-button-beurteilung') && val === true)
{
document.getElementById('student-projektbetreuer-button-beurteilung').disabled=val;
document.getElementById('student-projektbetreuer-span-beurteilung').setAttribute("value", '');
}
}
// ****
@@ -520,7 +520,7 @@ $is_hidden = (!defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN')
</groupbox>
<!-- Vertragsdetails: Anzeige wird ueber config Eintrag bestimmt -->
<vbox>
<vbox id="student-projektbetreuer-vbox">
<groupbox id="student-projektbetreuer-groupbox-vertragsdetails" hidden="<?php echo $is_hidden ?>">
<caption label="Vertragsdetails" />
<grid style="overflow:auto; padding:10px;" flex="1">
@@ -529,7 +529,7 @@ $is_hidden = (!defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN')
<column flex="1"/>
<column flex="1"/>
</columns>
<rows>
<rows >
<label id="student-projektbetreuer-label-vertrag_id" hidden="true" value=""/>
<row>
<label value="Vertragsstatus:"/>
+29
View File
@@ -177,6 +177,24 @@ class bisverwendung extends basis_db
}
}
/**
* Prueft das Datum
* @param $date = string
* @return true wenn ok, sonst false
*/
static public function verifyDate($date, $strict = true)
{
$dateTime = DateTime::createFromFormat('Y-m-d', $date);
if ($strict) {
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
return false;
}
}
return $dateTime !== false;
}
/**
* Prueft die Daten vor dem Speichern
*
@@ -189,6 +207,17 @@ class bisverwendung extends basis_db
$this->errormsg = 'Vertragsstunden sind ungueltig';
return false;
}
elseif(!$this->verifyDate($this->beginn) && !empty($this->beginn))
{
$this->errormsg = 'Start Datum ist kein Valides Datum: '.$this->beginn;
return false;
}
elseif(!$this->verifyDate($this->ende) && !empty($this->ende))
{
$this->errormsg = 'End Datum ist kein Valides Datum: '.$this->ende;
return false;
}
return true;
}
+24 -4
View File
@@ -148,17 +148,37 @@ class datum
}
/**
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist
* @return true wenn ok, false wenn falsches Format
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist UND ob es sich um ein gültiges Datum handelt
* @return true wenn ok, false wenn falsches Format und/oder nicht gültig
*/
public function checkDatum($datum)
{
if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$",$datum) || mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$",$datum))
return true;
//Format dd.mm.yyyy
if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$", $datum))
{
$year = substr($datum, 6, 4);
$month = substr($datum, 3, 2);
$day = substr($datum, 0, 2);
}
//Format yyyy-mm-dd
elseif(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$", $datum))
{
$year = substr($datum, 0, 4);
$month = substr($datum, 5, 2);
$day = substr($datum, 8, 2);
}
else
{
return false;
}
return checkdate($month, $day, $year);
}
/**
* Zieht ein Datum von einem anderen ab, und gibt die differenz in Tagen zurueck (mit Vorzeichen)
* @param $datum1
+163
View File
@@ -1013,6 +1013,134 @@ class dvb extends basis_db
}
}
public function setMatrikelnummerErnp($bildungseinrichtung, $person, $reisepass)
{
$this->debug('ernpMeldung');
$uuid = $this->getUUID();
if ($this->tokenIsExpired())
{
$result = $this->authenticate();
if (ErrorHandler::isError($result))
return ErrorHandler::error();
}
$data = '<?xml version="1.0" encoding="UTF-8"?>';
$data .= '<matrikelnummernmeldung xmlns="http://www.brz.gv.at/datenverbund-unis">
<uuid>'.$uuid.'</uuid>';
$data .= $this->getPersonmeldungXml($bildungseinrichtung, $person);
$data .= '
<ernpmeldung xmlns="http://www.brz.gv.at/datenverbund-unis">
<ausgabedatum>'.$reisepass->ausgabedatum.'</ausgabedatum>
<ausstellBehoerde>'.$reisepass->ausstellBehoerde.'</ausstellBehoerde>
<ausstellland>'.$reisepass->ausstellland.'</ausstellland>
<dokumentnr>'.$reisepass->dokumentnr.'</dokumentnr>
<dokumenttyp>'.$reisepass->dokumenttyp.'</dokumenttyp>
</ernpmeldung>
';
$data .= '</matrikelnummernmeldung>';
$curl = curl_init();
$url = self::DVB_URL_WEBSERVICE_MELDUNG;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$headers = array(
'Accept: application/xml',
'Content-Type: application/xml',
'Authorization: Bearer '.$this->authentication->access_token,
'User-Agent: FHComplete',
'Connection: Keep-Alive',
'Expect:'
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$this->debug('Request URL:'.$url);
$this->debug('Request Data:'.$data);
$response = curl_exec($curl);
$curl_info = curl_getinfo($curl);
curl_close($curl);
$this->debug('Response: '.$curl_info['http_code']);
$this->debug('Response: '.print_r($response, true));
if ($curl_info['http_code'] == '200')
{
$dom = new DOMDocument();
$dom->loadXML($response);
$domnodes_fehlerliste = $dom->getElementsByTagName('fehlerliste');
$fehleranzahl = $domnodes_fehlerliste->item(0)->getAttribute('fehleranzahl');
if ($fehleranzahl === '0')
{
// Keine Fehler -> Meldung erfolgreich
$retval = new stdClass();
$retval->matrikelnummer = $person->matrikelnummer;
return ErrorHandler::success($retval);
}
else
{
$this->errormsg = 'Es gab '.$fehleranzahl.' Fehler:';
$domnodes_fehler = $dom->getElementsByTagName('fehler');
foreach ($domnodes_fehler as $row)
{
$fehlernummer = $row->getElementsByTagName('fehlernummer');
/**
* Bei Fehlernummer ED10065 wurde die Matrikelnummer korrekt gesetzt.
* Das BPK wurde vom Datenverbund versucht zu ermitteln und wird in der Fehlermeldung
* zurückgeliefert. Dieses sollte dann gespeichert werden.
* Es muss eine erneute Vergabemeldung mit korrigierten Daten vorgenommen werden um die Daten im
* DVB zu aktualisieren
* Dies gilt nur, wenn ED10065 alleine geliefert wird und keine sonstigen Fehler auftreten
*/
if ($fehlernummer->length == 1 && $fehlernummer->item(0)->textContent == 'ED10065')
{
$this->debug('ED10065 Response');
$domnodes_feldinhalt = $row->getElementsByTagName('feldinhalt');
if ($domnodes_feldinhalt->length > 0 && $domnodes_feldinhalt->item(0)->textContent!='')
{
$bpk = $domnodes_feldinhalt->item(0)->textContent;
$retval = new stdClass();
$retval->matrikelnummer = $person->matrikelnummer;
if ($bpk != 'keine bPK gefunden')
$retval->bpk = $bpk;
$this->errormsg .= 'ED10065 Response';
$this->errormsg .= 'Eine Personendatenprüfung ist erforderlich';
$this->errormsg .= 'Danach muss eine erneute Vergabemeldung mit dieser Matrikelnummer erfolgen.';
$this->debug('BPK:'.$bpk);
$this->debug('MatrNr:'.$person->matrikelnummer);
return ErrorHandler::success($retval);
}
}
else
{
$datenfeld = $row->getElementsByTagName('datenfeld');
$fehlertext = $row->getElementsByTagName('fehlertext');
$this->errormsg .= ' Datenfeld:'.$datenfeld->item(0)->textContent;
$this->errormsg .= ' Fehlertext:'.$fehlertext->item(0)->textContent;
}
}
return ErrorHandler::error();
}
}
else
{
$errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
return ErrorHandler::error($errormsg);
}
}
/**
* Get BPK from Person
* @param string $person_id ID of the Person.
@@ -1737,6 +1865,41 @@ class dvb extends basis_db
$this->debug_output .= "\n".date('Y-m-d H:i:s').': '.$msg;
}
private function getPersonmeldungXml($bildungseinrichtung, $person)
{
$gebdat = str_replace("-", "", $person->geburtsdatum);
$data = '<personmeldung xmlns="http://www.brz.gv.at/datenverbund-unis">
<be>'.$bildungseinrichtung.'</be>
<gebdat>'.$gebdat.'</gebdat>
<geschlecht>'.$person->geschlecht.'</geschlecht>
<matrikelnummer>'.$person->matrikelnummer.'</matrikelnummer>';
if (isset($person->matura) && $person->matura != '')
$data .= '<matura>'.$person->matura.'</matura>';
else
$data .= '<matura>00000000</matura>';
$data .= '<nachname>'.$person->nachname.'</nachname>';
if (isset($person->plz) && $person->plz != '')
$data .= '<plz>'.$person->plz.'</plz>';
$data .= '<staat>'.$person->staat.'</staat>';
if (isset($person->svnr) && $person->svnr != '')
$data .= '<svnr>'.$person->svnr.'</svnr>';
$data .= '<vorname>'.$person->vorname.'</vorname>';
if (isset($person->writeonerror) && $person->writeonerror === true)
$data .= '<writeOnError>J</writeOnError>';
$data .= '
</personmeldung>';
return $data;
}
/**
* Erstellt einen Logeintrag
* @param object $person Personen objekt.
+53
View File
@@ -1121,4 +1121,57 @@ function setLeadingZero($number, $length = 2)
return str_pad($number, $length, "0", STR_PAD_LEFT);
}
}
/**
* Generates a new token for diffent use cases. Default token length is 64
* - Reading messages
* - Forgotten password
* - etc
* Returns null on failure
*/
function generateUniqueToken($length = 64)
{
$token = null;
$firstGeneratedToken = null;
// For PHP 7 you can use random_bytes()
if (function_exists('random_bytes'))
{
try
{
$firstGeneratedToken = random_bytes($length); // try to generates cryptographically secure pseudo-random bytes...
}
catch (Exception $e) { $firstGeneratedToken = null; } // if fails $firstGeneratedToken is set to null
}
// For PHP >= 5.3 and < 7 and openssl is available
elseif (function_exists('openssl_random_pseudo_bytes'))
{
$firstGeneratedToken = openssl_random_pseudo_bytes($length, $strong);
// If the token generation ended with errors OR the generated token is NOT strong enough
if ($firstGeneratedToken == false || $strong == false) $firstGeneratedToken = null; // $firstGeneratedToken is set to null
}
if ($firstGeneratedToken != null) // If everything was fine
{
// base64 is about 33% longer, so we need to truncate the result
$token = strtr(substr(base64_encode($firstGeneratedToken), 0, $length), '+/=', '-_,');
}
// Fallback to mt_rand if:
// php < 5.3
// OR no openssl is available
// OR openssl_random_pseudo_bytes used an algorithm that is cryptographically NOT strong
// OR one of the previous methods failed
if ($token == null)
{
$token = ''; // set $token as an empty string
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+';
$charactersLength = strlen($characters) - 1;
// Select some random characters
for ($i = 0; $i < $length; $i++) $token .= $characters[mt_rand(0, $charactersLength)];
}
return $token;
}
?>
+2 -2
View File
@@ -139,7 +139,7 @@ class gemeinde extends basis_db
if($this->db_query($qry))
{
//naechste ID aus der Sequence holen
$qry="SELECT currval('tbl_gemeinde_gemeinde_id_seq') as id;";
$qry="SELECT currval('bis.tbl_gemeinde_gemeinde_id_seq') as id;";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -219,4 +219,4 @@ class gemeinde extends basis_db
return true;
}
}
?>
?>
+7
View File
@@ -596,10 +596,17 @@ class lvregel extends basis_db
// Ausbildungssemester aus dem Status holen
$prestudent = new prestudent();
$studiensemester = new studiensemester();
$prev_studiensemester_kurzbz = $studiensemester->getPrevious();
if($prestudent->getLastStatus($student->prestudent_id, $studiensemester_kurzbz))
{
$this->cache[$uid][$studiensemester_kurzbz]=$prestudent->ausbildungssemester;
}
else if($prestudent->getLastStatus($student->prestudent_id, $prev_studiensemester_kurzbz))
{
$this->cache[$uid][$studiensemester_kurzbz]=$prestudent->ausbildungssemester + 1;
}
}
$ausbildungssemester = $this->cache[$uid][$studiensemester_kurzbz];
+44 -28
View File
@@ -691,10 +691,11 @@ class organisationseinheit extends basis_db
*
* @param string $user uid
* @param integer $zeitraum Anzahl Tage in die Vergangenheit, die fuer das Auftreten der OE beruecksichtigt werden sollen
* @param integer $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param string $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param boolean $aktiv
* @param array $funktion_zuordnungen Einschränkung nach zugeordneten Funktionen (Gültigkeitszeitraum heute - 1 Monat 1 Tag nach Gültigkeitsende)
*/
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null)
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null, $funktion_zuordnungen=array())
{
if(!is_numeric($anzahl_ereignisse))
{
@@ -707,36 +708,51 @@ class organisationseinheit extends basis_db
else
$zeit = "";
$qry = "SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
$qry = "SELECT * FROM (
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
if(!is_null($aktiv))
$qry.=" WHERE aktiv=".$this->db_add_param($aktiv, FHC_BOOLEAN);
$qry .=" ORDER BY count DESC,bezeichnung,oe_kurzbz";
$qry .=") oes";
if (isset($funktion_zuordnungen) && is_array($funktion_zuordnungen) && count($funktion_zuordnungen) > 0)
{
$qry .= " WHERE EXISTS (
SELECT 1 FROM public.tbl_benutzerfunktion
WHERE uid = ".$this->db_add_param($user)."
AND funktion_kurzbz IN (".$this->db_implode4SQL($funktion_zuordnungen).")
AND oe_kurzbz = oes.oe_kurzbz
AND (datum_von <= now() OR datum_von IS NULL)
AND (datum_bis + interval '1 month 1 day' >= now() OR datum_bis IS NULL)
)";
}
$qry .= " ORDER BY count DESC,bezeichnung,oe_kurzbz";
if($this->db_query($qry))
{
+3 -1
View File
@@ -81,7 +81,9 @@ class organisationsform extends basis_db
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
}
}
return true;
}
/**
*
+30 -1
View File
@@ -374,7 +374,7 @@ class person extends basis_db
$this->errormsg = 'Staatsbuergerschaft darf nicht laenger als 3 Zeichen sein';
return false;
}
//Pruefen ob das Geburtsdatum mit der SVNR uebereinstimmt.
if ($this->svnr != '' && $this->gebdatum != '')
{
@@ -1018,4 +1018,33 @@ class person extends basis_db
return false;
}
}
public function getFullNameFromBenutzer($uid)
{
$qry = "SELECT
vorname, nachname
FROM
public.tbl_person
JOIN public.tbl_benutzer USING(person_id)
WHERE
uid=".$this->db_add_param($uid, FHC_STRING);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
return (string)$row->vorname.' '.$row->nachname;
}
else
{
$this->errormsg = 'Keine Personendaten zu dieser UID gefunden';
return false;
}
}
else
{
$this->errormsg = "Fehler beim Laden der Personendaten";
return false;
}
}
}
+239 -124
View File
@@ -28,26 +28,25 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class projekt extends basis_db
{
public $new; // boolean
public $result = array(); // projekt Objekt
public $new; // boolean
public $result = array(); // projekt Objekt
//Tabellenspalten
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $budget;
public $farbe;
public $anzahl_ma; // integer
public $aufwand_pt; // integer
public $anzahl_ma; // integer
public $aufwand_pt; // integer
/**
@@ -58,23 +57,21 @@ class projekt extends basis_db
{
parent::__construct();
if($projekt_kurzbz != null)
if ($projekt_kurzbz != null)
$this->load($projekt_kurzbz);
}
/**
* Laedt die Projek mit der Kurzbezeichnung $projekt_kurzbz
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @return true wenn ok, false im Fehlerfall
*/
public function load($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -102,30 +99,28 @@ class projekt extends basis_db
}
}
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
if($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if ($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if (!is_null($oe))
$qry .= ' AND oe_kurzbz='.$this->db_add_param($oe);
if (!is_null($oe))
$qry .= ' AND oe_kurzbz=' . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -150,26 +145,24 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= '.$this->db_add_param($ende).' and ende >= '.$this->db_add_param($beginn);
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= ' . $this->db_add_param($ende) . ' and ende >= ' . $this->db_add_param($beginn);
if (!is_null($oe))
$qry .= " AND oe_kurzbz=".$this->db_add_param($oe);
$qry .= " AND oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -193,7 +186,7 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
@@ -205,13 +198,11 @@ class projekt extends basis_db
{
$qry = 'SELECT * FROM fue.tbl_projekt';
if (!is_null($oe))
$qry .= " WHERE oe_kurzbz=".$this->db_add_param($oe);
$qry .= " WHERE oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -245,26 +236,21 @@ class projekt extends basis_db
protected function validate()
{
//Gesamtlaenge pruefen
if ($this->projekt_kurzbz == null)
{
if ($this->projekt_kurzbz == null) {
$this->errormsg = 'Projekt kurzbz darf nicht NULL sein!';
}
if ($this->oe_kurzbz == null)
{
if ($this->oe_kurzbz == null) {
$this->errormsg = 'OE kurbz darf nicht NULL sein!';
}
if (mb_strlen($this->projekt_kurzbz) > 16)
{
if (mb_strlen($this->projekt_kurzbz) > 16) {
$this->errormsg = 'Projektyp_kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
if (mb_strlen($this->nummer) > 8)
{
if (mb_strlen($this->nummer) > 8) {
$this->errormsg = 'Nummer darf nicht länger als 8 Zeichen sein';
return false;
}
if (mb_strlen($this->titel) > 256)
{
if (mb_strlen($this->titel) > 256) {
$this->errormsg = 'Titel darf nicht länger als 256 Zeichen sein';
return false;
}
@@ -283,52 +269,50 @@ class projekt extends basis_db
public function save($new = null)
{
//Variablen pruefen
if(!$this->validate())
if (!$this->validate())
return false;
if ($new == null)
$new = $this->new;
if ($new)
{
if ($new) {
//Neuen Datensatz einfuegen
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->nummer).', '.
$this->db_add_param($this->titel).', '.
$this->db_add_param($this->beschreibung).', '.
$this->db_add_param($this->beginn).', '.
$this->db_add_param($this->ende).', '.
$this->db_add_param($this->budget).', '.
$this->db_add_param($this->farbe).', '.
$this->db_add_param($this->oe_kurzbz).','.
$this->db_add_param($this->aufwand_pt).','.
$this->db_add_param($this->anzahl_ma).','.
$this->db_add_param($this->aufwandstyp_kurzbz).');';
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES(' .
$this->db_add_param($this->projekt_kurzbz) . ', ' .
$this->db_add_param($this->nummer) . ', ' .
$this->db_add_param($this->titel) . ', ' .
$this->db_add_param($this->beschreibung) . ', ' .
$this->db_add_param($this->beginn) . ', ' .
$this->db_add_param($this->ende) . ', ' .
$this->db_add_param($this->budget) . ', ' .
$this->db_add_param($this->farbe) . ', ' .
$this->db_add_param($this->oe_kurzbz) . ',' .
$this->db_add_param($this->aufwand_pt) . ',' .
$this->db_add_param($this->anzahl_ma) . ',' .
$this->db_add_param($this->aufwandstyp_kurzbz) . ');';
}
else
{
//Updaten des bestehenden Datensatzes
$qry = 'UPDATE fue.tbl_projekt SET '.
'projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '.
'nummer='.$this->db_add_param($this->nummer).', '.
'titel='.$this->db_add_param($this->titel).', '.
'beschreibung='.$this->db_add_param($this->beschreibung).', '.
'beginn='.$this->db_add_param($this->beginn).', '.
'ende='.$this->db_add_param($this->ende).', '.
'budget='.$this->db_add_param($this->budget).', '.
'farbe='.$this->db_add_param($this->farbe).', '.
'oe_kurzbz='.$this->db_add_param($this->oe_kurzbz).', '.
'anzahl_ma='.$this->db_add_param($this->anzahl_ma).', '.
'aufwand_pt='.$this->db_add_param($this->aufwand_pt).', '.
'aufwandstyp_kurzbz='.$this->db_add_param($this->aufwandstyp_kurzbz).' '.
'WHERE projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).';';
$qry = 'UPDATE fue.tbl_projekt SET ' .
'projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ', ' .
'nummer=' . $this->db_add_param($this->nummer) . ', ' .
'titel=' . $this->db_add_param($this->titel) . ', ' .
'beschreibung=' . $this->db_add_param($this->beschreibung) . ', ' .
'beginn=' . $this->db_add_param($this->beginn) . ', ' .
'ende=' . $this->db_add_param($this->ende) . ', ' .
'budget=' . $this->db_add_param($this->budget) . ', ' .
'farbe=' . $this->db_add_param($this->farbe) . ', ' .
'oe_kurzbz=' . $this->db_add_param($this->oe_kurzbz) . ', ' .
'anzahl_ma=' . $this->db_add_param($this->anzahl_ma) . ', ' .
'aufwand_pt=' . $this->db_add_param($this->aufwand_pt) . ', ' .
'aufwandstyp_kurzbz=' . $this->db_add_param($this->aufwandstyp_kurzbz) . ' ' .
'WHERE projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ';';
}
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -345,10 +329,9 @@ class projekt extends basis_db
*/
public function delete($projekt_kurzbz)
{
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -367,7 +350,7 @@ class projekt extends basis_db
*/
function getProjekteMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$qry = "SELECT DISTINCT
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
@@ -377,12 +360,12 @@ class projekt extends basis_db
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." OR
student_uid=".$this->db_add_param($mitarbeiter_uid)."
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
@@ -401,12 +384,10 @@ class projekt extends basis_db
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid);
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -427,16 +408,86 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert Ein Array mit Porjekten von allen Projekten des Mitarbeiters mit UID.
* Optional auch mit den Zuteilungen zu Projektphasen.
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
function getProjekteListForMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$projectList = array();
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
JOIN fue.tbl_projekt_ressource USING(ressource_id)
JOIN fue.tbl_projekt USING(projekt_kurzbz)
WHERE (beginn<=now() or beginn is null)
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(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)
) OR (
(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 mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
$this->result[] = $obj;
array_push($projectList, $obj);
}
return $projectList;
}
else
{
$this->erromsg = 'Fehler beim Laden der Daten';
return false;
}
}
public function getProjektFromBestellung($bestellung_id)
{
$qry = "select * from fue.tbl_projekt
join wawi.tbl_projekt_bestellung USING (projekt_kurzbz)
where bestellung_id= ".$this->db_add_param($bestellung_id);
where bestellung_id= " . $this->db_add_param($bestellung_id);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -463,5 +514,69 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert True zurück wenn die angegebenen Start und Endzeitpunkt der Arbeitsdauer in die Projektdauer fallen
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
public function checkProjectInCorrectTime($projekt_kurzbz, $give_project_start, $give_projekt_ende)
{
if(empty($projekt_kurzbz))
return true;
try
{
$projekt = $this->getProjectByKurzbz($projekt_kurzbz);
if(strtotime($projekt->beginn))
$projekt_start = date('Y-m-d', strtotime($projekt->beginn));
else
$projekt_start = NULL;
if(strtotime($projekt->ende))
$projekt_ende = date('Y-m-d', strtotime($projekt->ende));
else
$projekt_ende = NULL;
$given_start = date('Y-m-d', strtotime($give_project_start));
$given_ende = date('Y-m-d', strtotime($give_projekt_ende));
if ((empty($projekt_start) || $given_start >= $projekt_start) && (empty($projekt_ende) || $given_ende <= $projekt_ende))
return true;
else
return false;
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
public function getProjectByKurzbz($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
if ($result = $this->db_query($qry))
{
$row = $this->db_fetch_object($result);
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
return $obj;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+125
View File
@@ -391,5 +391,130 @@ class projektbetreuer extends basis_db
return false;
}
}
/**
* Holt Zweitbegutachter einer Projektarbeit mit Mail.
* @param $erstbegutachter_person_id int person_id des Erstbegutachters
* @param $projektarbeit_id int
* @param $student_uid string uid des Studenten der Arbeit abgibt
* @return object | bool
*/
public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid)
{
$qry_betr="SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt,
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum
FROM lehre.tbl_projektbetreuer betr
JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id
JOIN public.tbl_person pers ON betr.person_id = pers.person_id
LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true
LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id
LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end'
WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter'
AND betr.projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND parb.student_uid = ".$this->db_add_param($student_uid)."
AND EXISTS (
SELECT 1 FROM lehre.tbl_projektbetreuer
WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Erstbegutachter'
AND projektarbeit_id = betr.projektarbeit_id
)
AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)
ORDER BY betr.insertamum DESC
LIMIT 1";
if ($betr=$this->db_query($qry_betr))
{
$row_betr = $this->db_fetch_object($betr);
if ($row_betr)
return $row_betr;
else
return false;
}
else
{
return false;
}
}
/**
* Generiert Token für externen Zweitbetreuer wenn noch kein Token vorhanden ist.
* @param int $zweitbegutachter_person_id
* @param int $projektarbeit_id
* @return bool true wenn erfolgreich (generiert oder bereits vorhanden), false wenn fehlgeschlagen
*/
public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id)
{
// if externer Betreuer and no valid token, generate
$betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id
FROM lehre.tbl_projektbetreuer
JOIN public.tbl_person USING(person_id)
LEFT JOIN public.tbl_benutzer USING(person_id)
WHERE projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_projektbetreuer.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Zweitbegutachter'
LIMIT 1";
if ($betreueruidres = $this->db_query($betreuerUidQry))
{
$row_betr = $this->db_fetch_object($betreueruidres);
if ($row_betr)
{
if (!isset($row_betr->uid)
&& (!isset($row_betr->zugangstoken) || $row_betr->zugangstoken_gueltigbis < date('Y-m-d')))
{
$tokenanzahl = 1;
while ($tokenanzahl > 0)
{
//generate random string
$token = generateUniqueToken(16);
if (!$token)
return false;
$qry_tokencheck = "SELECT count(*) AS anzahl
FROM lehre.tbl_projektbetreuer
WHERE zugangstoken = " . $this->db_add_param($token);
if ($tokencount = $this->db_query($qry_tokencheck))
{
$row_tokencount = $this->db_fetch_object($tokencount);
$tokenanzahl = (int)$row_tokencount->anzahl;
}
else
{
return false;
}
}
$qry_upd = "UPDATE lehre.tbl_projektbetreuer SET
zugangstoken = " . $this->db_add_param($token) . ",
zugangstoken_gueltigbis = CURRENT_DATE + interval '1 year'
WHERE projektarbeit_id = " . $this->db_add_param($projektarbeit_id, FHC_INTEGER) . "
AND person_id = " . $this->db_add_param($row_betr->person_id, FHC_INTEGER) . "
AND betreuerart_kurzbz = 'Zweitbegutachter'";
if ($this->db_query($qry_upd))
{
return true;
}
else
{
return false;
}
}
else
return true; // not generated because intern or already exists
}
else
return false;// not found
}
else
return false; // query error
}
}
?>
+334 -101
View File
@@ -37,10 +37,10 @@ class projektphase extends basis_db
public $bezeichnung; //string
public $typ='Projektphase'; //string
public $beschreibung; //string
public $start; //date
public $ende; //date
public $start; //date
public $ende; //date
public $personentage; //integer
public $farbe;
public $farbe;
public $budget; // numeric
public $ressource_id; // bigint
public $ressource_bezeichnung; // string
@@ -58,7 +58,7 @@ class projektphase extends basis_db
{
parent::__construct();
if($projektphase_id != null)
if($projektphase_id != null)
$this->load($projektphase_id);
}
@@ -74,11 +74,11 @@ class projektphase extends basis_db
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -102,20 +102,20 @@ class projektphase extends basis_db
$this->updatevon = $row->updatevon;
return true;
}
else
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen mit zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
@@ -125,23 +125,23 @@ class projektphase extends basis_db
{
$this->result=array();
$qry = "Select * from fue.tbl_projektphase where projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz)." and projektphase_id not in (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
) SELECT *
FROM tasks) and projektphase_id not in (".$this->db_add_param($projektphase_id, FHC_INTEGER).")";
//echo "\n".$qry."\n";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -158,25 +158,25 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
* @param $foreignkey wenn ! gib nur die Erste Ebene der Projektphasen zurück
* @return true wenn ok, false im Fehlerfall
*/
*/
public function getProjektphasen($projekt_kurzbz, $foreignkey = null)
{
$this->result=array();
@@ -184,18 +184,18 @@ class projektphase extends basis_db
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
//echo "\n".$qry."\n";
if(!is_null($foreignkey))
$qry .= " and projektphase_fk is NULL";
$qry .= " ORDER BY start, projektphase_fk DESC;";
$qry .= " ORDER BY start, projektphase_fk DESC;";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -213,36 +213,36 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Lädt alle Unterphasen zu einem Projekt
* @param type $phase_id
* @return boolean
* @return boolean
*/
public function getAllUnterphasen($phase_id)
{
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -260,15 +260,15 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
return true;
}
else
{
$this->errormsg = "Fehler beim laden der Daten";
return false;
$this->errormsg = "Fehler beim laden der Daten";
return false;
}
}
@@ -296,11 +296,11 @@ class projektphase extends basis_db
$this->errormsg.='Projekt Kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
$this->errormsg = '';
return true;
}
/**
* Speichert den aktuellen Datensatz in die Datenbank
* Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt
@@ -315,12 +315,12 @@ class projektphase extends basis_db
if($new==null)
$new = $this->new;
if($new)
{
//Neuen Datensatz einfuegen
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
beschreibung, start, ende, budget, ressource_id, insertvon, insertamum, updatevon, updateamum, farbe, personentage) VALUES ('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->projektphase_fk).', '.
@@ -356,7 +356,7 @@ class projektphase extends basis_db
'updatevon='.$this->db_add_param($this->updatevon).' '.
'WHERE projektphase_id='.$this->db_add_param($this->projektphase_id, FHC_INTEGER).';';
}
if($this->db_query($qry))
{
if($new)
@@ -371,21 +371,21 @@ class projektphase extends basis_db
$this->db_query('COMMIT');
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
return true;
}
else
@@ -394,7 +394,7 @@ class projektphase extends basis_db
return false;
}
}
/**
* Loescht den Datenensatz mit der ID die uebergeben wird
* @param $projekt_kurzbz ID die geloescht werden soll
@@ -407,77 +407,81 @@ class projektphase extends basis_db
$this->errormsg = 'Projektphase_ID ist ungueltig';
return true;
}
// an projektphase hängt noch eine phase
if($this->existPhaseFk($projektphase_id))
{
$this->errormsg ="Phase kann nicht gelöscht werden, da noch eine andere Phase daran hängt. Bitte zuerst Phase abhängen. ";
return false;
return false;
}
// Beginne Transaktion und lösche alle Tasks der Phase
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry1))
{
// Lösche alle zugewiesenen Ressourcen
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry2))
{
// Lösche den Phaseneintrag
$qry3 = "DELETE FROM fue.tbl_projektphase
$qry3 = "DELETE FROM fue.tbl_projektphase
WHERE projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry3))
{
$this->db_query('COMMIT');
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler beim löschen der Projektphase aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Ressourcen aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Tasks aufgetreten";
$this->db_query('ROLLBACK');
return false;
$this->db_query('ROLLBACK');
return false;
}
}
/**
*
*
* Überprüft ob an übergebenr Phase noch eine andere Phase hängt. true wenn noch eine daran hängt
* @param $projektphase_id
*/
public function existPhaseFk($projektphase_id)
{
$qry = "SELECT * FROM fue.tbl_projektphase WHERE projektphase_fk =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* Löscht Ressourcen einer Phase
* @param $projektphase_id
* @param $ressource_id -> wenn != null wird nur die eine ressource gelöscht
@@ -492,58 +496,60 @@ class projektphase extends basis_db
$this->errormsg = "Keine gültige ID übergeben";
return false;
}
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
ressource_id=".$this->db_add_param($ressource_id, FHC_INTEGER).";";
}else
}
else
{
// gesamte Ressourcen von Phase werden gelöscht
if(!is_numeric($projektphase_id))
{
$this->errormsg ="Keine gültige ID übergeben";
}
$qry ="DELETE from fue.tbl_projekt_ressource
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
}
if($this->db_query($qry))
{
return true;
}else
return true;
}
else
{
$this->errormsg = "Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* gibt den Fortschritt der Phase in Prozent zurück --> Phasen die auf die übergebene Phase zeigen werden berücksichtigt
* @param $projektphase_id
*/
public function getFortschritt($projektphase_id)
public function getFortschritt($projektphase_id)
{
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
where task.projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER)."
OR task.projektphase_id IN (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
)SELECT *
FROM tasks)";
$taskAnzahl = 0;
$taskAnzahl = 0;
// erledige tasks
$i = 0;
$ergebnis = 0;
$i = 0;
$ergebnis = 0;
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
@@ -553,25 +559,252 @@ class projektphase extends basis_db
$i++;
}
}
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
}
/**
* Überprüft ob alle Tasks einer Phase erledigt sind
*/
public function isPhaseErledigt($phase_id)
{
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
if(count($task->result)==0)
return true;
return true;
else
return false;
return false;
}
public function checkProjectphaseInCorrectTime($projektphase_id, $given_projectphase_start, $given_projektphase_ende)
{
if(empty($projektphase_id))
return true;
try
{
$projektphase = $this->getProjectphaseById($projektphase_id);
if(strtotime($projektphase->start))
{
$projektphase_start = date('Y-m-d', strtotime($projektphase->start));
}
else
{
$projektphase_start = NULL;
}
if(strtotime($projektphase->ende))
{
$projektphase_ende = date('Y-m-d', strtotime($projektphase->ende));
}
else
{
$projektphase_ende = NULL;
}
$given_start = date('Y-m-d', strtotime($given_projectphase_start));
$given_ende = date('Y-m-d', strtotime($given_projektphase_ende));
if ((empty($projektphase_start) || $given_start >= $projektphase_start)
&& (empty($projektphase_ende) || $given_ende <= $projektphase_ende))
{
return true;
}
else
{
return false;
}
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
/**
* Laedt die Projektphase mit der ID $projektphase_id
* @param $projektphase_id ID der zu ladenden Projektphase
* @return true wenn ok, false im Fehlerfall
*/
public function getProjectphaseById($projektphase_id)
{
if(!is_numeric($projektphase_id))
{
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->ressource_bezeichnung = $row->ressource_bezeichnung;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
return $obj;
}
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiter($mitarbeiter_uid)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(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_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 mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
array_push($projecphasetList, $obj);
}
return $projecphasetList;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters für das jeweilige Projekt
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @param $projekt_kurzbz des zu landenen Projekts
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiterByKurzBz($mitarbeiter_uid, $projekt_kurzbz)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(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_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 mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
AND tbl_projekt.projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+11 -5
View File
@@ -23,6 +23,7 @@ require_once(dirname(__FILE__).'/mail.class.php');
require_once(dirname(__FILE__).'/vorlage.class.php');
const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg';
/**
* Send single Mail with Sancho Design and Layout.
@@ -31,14 +32,15 @@ const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
* to be replaced in the content template.
* @param string $to Email-adress.
* @param string $subject Subject of mail.
* @param string $headerImg Filename of the specific Sancho header image.
* @return boolean True, if succeeded.
* @param string $headerImg Filename of the specific Sancho header image.
* @param string $replyTo default Email-adress for reply.
* @return boolean True, if succeeded.
*/
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG)
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $replyTo = '')
{
$from = 'sancho@'. DOMAIN;
$sanchoHeader_img = dirname(__FILE__). '/../skin/images/sancho/'. $headerImg;
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/sancho_footer.jpg';
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/'. $footerImg;
// Set unique content id for embedding header and footer image
$cid_header = uniqid();
@@ -63,7 +65,11 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm
// * embed the images
$mail->addEmbeddedImage($sanchoHeader_img, 'image/jpg', '', $cid_header);
$mail->addEmbeddedImage($sanchoFooter_img, 'image/jpg', '', $cid_footer);
// * Set reply-to
if (isset($replyTo) && $replyTo != '')
$mail->setReplyTo($replyTo);
// * embed the html content
$mail->setHTMLContent($body);
+17 -17
View File
@@ -287,7 +287,7 @@ class studiensemester extends basis_db
$qry.= " WHERE substring(studiensemester_kurzbz from 1 for 2)='$ss' ";
}
$qry.=' ORDER BY delta LIMIT 1';
$qry.=' ORDER BY delta, start LIMIT 1';
if(!$this->db_query($qry))
{
@@ -573,7 +573,7 @@ class studiensemester extends basis_db
{
$qry = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester
WHERE studiensemester_kurzbz<>".$this->db_add_param($studiensemester_kurzbz)."
ORDER BY delta LIMIT 1";
ORDER BY delta, start LIMIT 1";
if($this->db_query($qry))
{
@@ -907,13 +907,13 @@ class studiensemester extends basis_db
ORDER BY ende ASC";
if ($plus != '')
$qry .= " LIMIT ".$this->db_add_param($plus, FHC_INTEGER);
$qry .= ") UNION
(SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE start <= now()
ORDER BY start DESC ";
if ($minus != '')
$qry .= " LIMIT ".$this->db_add_param($minus, FHC_INTEGER);
$qry .= ")) ORDER BY ".$order;
if($this->db_query($qry))
@@ -967,7 +967,7 @@ class studiensemester extends basis_db
FROM tbl_studiensemester
) a
WHERE a.studiensemester_kurzbz!=".$this->db_add_param($studiensemester_kurzbz)."
ORDER BY delta LIMIT 1";
ORDER BY delta, start LIMIT 1";
if($this->db_query($qry))
{
@@ -1029,7 +1029,7 @@ class studiensemester extends basis_db
return false;
}
}
/**
* Gibt das Wintersemester eines Studienjahres zurück (zb WS2017)
*
@@ -1040,10 +1040,10 @@ class studiensemester extends basis_db
{
$qry = "
SELECT studiensemester_kurzbz
FROM tbl_studiensemester
FROM tbl_studiensemester
WHERE studienjahr_kurzbz LIKE " . $this->db_add_param($studienjahr_kurzbz) . "
AND studiensemester_kurzbz LIKE 'WS%';";
if ($result = $this->db_query($qry))
{
if ($row = $this->db_fetch_object())
@@ -1063,7 +1063,7 @@ class studiensemester extends basis_db
return false;
}
}
/**
* Gibt das Sommersemester eines Studienjahres zurück (zb SS2018)
*
@@ -1074,10 +1074,10 @@ class studiensemester extends basis_db
{
$qry = "
SELECT studiensemester_kurzbz
FROM tbl_studiensemester
FROM tbl_studiensemester
WHERE studienjahr_kurzbz LIKE " . $this->db_add_param($studienjahr_kurzbz) . "
AND studiensemester_kurzbz LIKE 'SS%';";
if ($result = $this->db_query($qry))
{
if ($row = $this->db_fetch_object())
@@ -1097,7 +1097,7 @@ class studiensemester extends basis_db
return false;
}
}
/**
* Gibt die Studiensemester zwischen $studiensemesterStart und $studiensemesterEnde zurück
* Wenn $inklusive true ist (default), werden auch $studiensemesterStart und $studiensemesterEnde selbst zurückgegeben
@@ -1116,7 +1116,7 @@ class studiensemester extends basis_db
}
if ($inklusive = true)
$equalSign = '=';
else
else
$equalSign = '';
$qry = "
SELECT *
@@ -1132,13 +1132,13 @@ class studiensemester extends basis_db
WHERE studiensemester_kurzbz = " . $this->db_add_param($studiensemesterEnde) . "
)
ORDER BY start DESC;";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$stsem_obj = new studiensemester();
$stsem_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$stsem_obj->start = $row->start;
$stsem_obj->ende = $row->ende;
@@ -1146,7 +1146,7 @@ class studiensemester extends basis_db
$stsem_obj->studienjahr_kurzbz = $row->studienjahr_kurzbz;
$stsem_obj->beschreibung = $row->beschreibung;
$stsem_obj->onlinebewerbung = $row->onlinebewerbung;
$this->studiensemester[] = $stsem_obj;
}
return true;
@@ -1158,4 +1158,4 @@ class studiensemester extends basis_db
}
}
}
?>
?>
+14 -1
View File
@@ -421,7 +421,6 @@ function checkZeilenUmbruch()
'link'=>'../../../cms/news.php?studiengang_kz='.urlencode($studiengang_kz).'&semester='.urlencode($semester),
'text'=>$text
);
}
if(!defined('CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN)
@@ -466,6 +465,20 @@ function checkZeilenUmbruch()
}
}
// Anerkennung nachgewiesener Kenntnisse (Anrechnung)
if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN)
&& $rechte->isBerechtigt('student/anrechnung_beantragen'))
{
$menu[]=array
(
'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse',
'position'=>'128',
'name'=>$p->t('lehre/anrechnung'),
'icon'=>'../../../skin/images/button_listen.png',
'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/RequestAnrechnung?studiensemester='.urlencode($angezeigtes_stsem).'&lv_id='.urlencode($lvid)
);
}
//************* Menuepunkte anzeigen ****************

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