Compare commits

...

546 Commits

Author SHA1 Message Date
Paolo e022f75943 Merge branch 'master' into feature-7264/Dauerampel_fuer_fehlende_Timesheets 2021-08-22 21:05:19 +02:00
Andreas Österreicher b00337973a Merge branch 'feature-12988/MobilityOnline_Outgoing_mo_fhc_Verknuepfung' 2021-08-20 10:35:32 +02:00
Andreas Österreicher 73ce635188 Merge branch 'master' into feature-12988/MobilityOnline_Outgoing_mo_fhc_Verknuepfung 2021-08-20 10:34:55 +02:00
Andreas Oesterreicher 0ba11652e1 Merge branch 'feature-13218/BewerbungstoolMasterDokumente' 2021-08-18 11:42:08 +02:00
Andreas Oesterreicher d8804730ba Merge branch 'master' into feature-13218/BewerbungstoolMasterDokumente 2021-08-18 11:18:33 +02:00
Andreas Oesterreicher e9b4116bee Merge branch 'feature-13277/anpassung_infocenter' 2021-08-18 10:45:40 +02:00
ma0048 6ff8df6ac3 merged master into anpassung_infocenter 2021-08-18 08:45:28 +02:00
Andreas Österreicher b6a373b9d4 Merge branch 'feature-10267/Zeiterfassung_Zeitaufzeichnungspflichtig' 2021-07-29 07:59:57 +02:00
Andreas Österreicher cb855e7864 Zeitaufzeichnungspflichtig Prüfung auf Zeitraum erweitert 2021-07-28 19:05:48 +02:00
Andreas Österreicher 9eae959b15 Merge branch 'master' into feature-10267/Zeiterfassung_Zeitaufzeichnungspflichtig 2021-07-28 12:10:28 +02:00
Andreas Österreicher 2c8c3b2141 Merge branch 'master' into feature-7264/Dauerampel_fuer_fehlende_Timesheets 2021-07-27 19:32:25 +02:00
cris-technikum cfa7ce2c08 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2021-07-27 10:55:11 +02:00
Andreas Österreicher f918d0e188 Merge branch 'feature-12317/UsabilityAnpassungenBenotungstool2' 2021-07-23 15:19:54 +02:00
Andreas Österreicher c8919f2878 Benotungstool zeigt den Namen statt der UID bei der Anlage von Nachprüfungsterminen 2021-07-23 15:17:43 +02:00
Andreas Österreicher 524b954abc Merge branch 'feature-12075/zeitwuensche_lesezugriff' 2021-07-23 14:35:28 +02:00
Andreas Österreicher 8822a589c9 Merge branch 'master' into feature-12075/zeitwuensche_lesezugriff 2021-07-23 14:22:36 +02:00
Andreas Österreicher 78322c22f4 Merge branch 'feature-10762/MailAnMitarbeiterBeiUrlaubsfreigabe' 2021-07-23 14:04:35 +02:00
Andreas Österreicher 6b4a47c9db Merge branch 'master' into feature-10762/MailAnMitarbeiterBeiUrlaubsfreigabe 2021-07-23 13:59:49 +02:00
Andreas Österreicher c8cfc49af9 Mailempfänger bei Urlaubsfreigabemail korrigiert 2021-07-23 13:59:21 +02:00
Andreas Österreicher d87b667f0a Merge branch 'feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen' 2021-07-23 13:25:38 +02:00
Andreas Österreicher cf82a6d28a Merge branch 'master' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen 2021-07-23 13:18:54 +02:00
Andreas Österreicher 023994b12c PHP Error behoben wenn Lehraufträge für einzelne Studiengänge erstellt werden 2021-07-23 13:07:23 +02:00
Andreas Österreicher 6267a1bc37 - Hautpberuf wird im CIS Profil angezeigt für den Mitarbeiter
- Fehler behoben wodurch die letzte Verwendung nicht korrekt ermittelt wurde wenn das Ende Datum leer ist
2021-07-23 13:06:15 +02:00
Andreas Österreicher c2527e1b13 Updated FHComplete Domain 2021-07-22 15:03:27 +02:00
Andreas Österreicher 3bf03a9869 Merge branch 'sonstiges-sprint174/LehrauftraegeErteilen_DoppelteTabellen' 2021-07-21 15:07:16 +02:00
Andreas Österreicher cdc08b88f8 Merge branch 'hotfix-14064/Messaging_System_GUI_to_send_messages_loads_not_active_templeates' 2021-07-21 14:49:46 +02:00
Paolo e4aa42ad58 models/CL/Messages_model->getVorlage now filters out the _not_ active
templates
2021-07-21 10:39:52 +02:00
manu 143053b893 Bewerbungstool: alle Masterbewerbungen mit Status Interessent mit ZGV-Ort überschreiben 2021-07-20 13:53:38 +02:00
manu 05a06de109 alle prestudents im Status Interessent mit leerem zgvmatum überschreiben 2021-07-15 09:10:35 +02:00
cris-technikum e3a7fc2f0c Added CC parameter to sendSanchoMail function
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-07-14 17:52:22 +02:00
manu e9705e69e7 ZGV-Felder für alle aktuellen Bewerbungen mit Inhouse-ZGV überschreiben 2021-07-13 14:36:41 +02:00
manu bd153921c6 13989 Merge Änderungen Berufstätigkeit master 2021-07-09 11:09:43 +02:00
manu a10cacaf4b Anzeige jüngster Eintrag Berufstätigkeit 2021-07-09 08:28:26 +02:00
Andreas Österreicher 54593512af Added Sort for Loading of Notizen in Bewerbungstool 2021-07-08 18:09:04 +02:00
ma0048 f16ea874db fragt bei den mails auch nun den studiengangtyp ab 2021-07-08 15:47:31 +02:00
cris-technikum 1c0de3ec45 Fixed: Doppelte Tabellenanzeige in SanchoMail korrigiert
Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-07-08 15:05:19 +02:00
KarpAlex cee6156646 - added Bisioaufenthaltfoerderung_model.php
- dbupdate_3.3.php: added Buchungstyp "ZuschussIO"
2021-07-07 20:22:53 +02:00
Andreas Österreicher 0ee6485ece Dependecy Update 2021-07-05 18:18:20 +02:00
Andreas Österreicher 25124e0354 Reduced amount of LDAP Requests when Loading CIS Menu 2021-07-05 18:13:37 +02:00
manu 5d48b0aad0 BT: neue zu akzeptierende Dokumente, Studiengang als übergebener zgvma_Ort, Styling nicht verpflichtende Dokumente 2021-07-02 13:14:08 +02:00
manu 752a891c6b 13887 Freigabemail bei \"Alle Anzeigen\" 2021-07-01 15:29:19 +02:00
manu 2bef17d65b Update Phrasen Englisch und Codesniffer 2021-07-01 15:23:41 +02:00
Andreas Österreicher b1ce67ebd5 Infocenter fixed STG Typ 2021-07-01 14:59:11 +02:00
Andreas Österreicher 07cb19ccd1 Merge branch 'feature-13604/Pruefungsprotokolle_Filter_fuer_zukuenftige_Termine' 2021-07-01 14:44:33 +02:00
Andreas Österreicher 2a51222e36 Merge branch 'feature-13207/lehrauftraege_passwortmanager_problem' 2021-07-01 14:40:10 +02:00
Andreas Österreicher dc45658684 Merge branch 'feature-8210/status_abgewiesen_fuer_mehrere_personen' 2021-07-01 14:07:39 +02:00
Andreas Österreicher a9c5533959 Merge branch 'master' into feature-8210/status_abgewiesen_fuer_mehrere_personen 2021-07-01 14:00:47 +02:00
manu 3dd67b90b2 Update Phrasen 2021-07-01 08:13:17 +02:00
ma0048 6246312ce5 bei ergaenzungspruefungen immer eine mail rausschicken und unterscheiden zw englisch und deutsch 2021-06-30 15:24:25 +02:00
manu 36d162d2d7 13850 Bestätigungsmail an Mitarbeiter 2021-06-30 14:29:58 +02:00
ma0048 745ecf4711 zgv pruefung unterscheiden zwischen bachelor und master 2021-06-30 13:29:09 +02:00
ma0048 36507959ac dokumentenpruefung im infocenter in eigenes js ausgelagert, reloaden der anzeige beim nachreichen eines doks 2021-06-30 13:09:56 +02:00
ma0048 67aa887981 anzeige des errors 2021-06-29 14:47:57 +02:00
ma0048 d4d84a93ba Nachreichdatum kann nun auch ueber das Infocenter gesetzt werden 2021-06-29 14:43:19 +02:00
Andreas Österreicher f4ddbd3084 Added DB-Index for lehre.tbl_pruefung to speed up queries 2021-06-25 11:15:12 +02:00
manu 84950649c4 Adaptierungen ZGV-Master Funktionen 2021-06-24 12:00:49 +02:00
manu 537ad8ab88 Adaptierungen setZGVMasterFields() 2021-06-23 11:41:38 +02:00
ma0048 7314352e79 absagen nun möglich auch bei studenten die den reihungstest absolviert haben 2021-06-22 16:54:45 +02:00
manu 35366efdad Bewerbungstool: Korrektur Anzeige vorläufiges Sprachzertifikat 2021-06-22 10:20:56 +02:00
manu 3fca876f8d #13749 MasterZGV Art und Ort setzen 2021-06-21 15:12:33 +02:00
Harald Bamberger e76dead570 add parantheses although not explicitly needed for correct function 2021-06-18 14:45:05 +02:00
Harald Bamberger cea673fa82 adjust indentation, changed filter lastWeek to cover last 7 days and not only a week ago today 2021-06-18 12:45:44 +02:00
Harald Bamberger a0b86b6207 rename in_the_future to upcoming consistently 2021-06-18 09:21:39 +02:00
Harald Bamberger e5a6af7eb3 first guess adding filter for upcoming exams 2021-06-18 09:16:02 +02:00
ma0048 8b3df55719 response bei doktyp änderung 2021-06-17 14:08:49 +02:00
ma0048 ab799cb54f abweisen auch wenn bereits freigegeben 2021-06-17 13:47:21 +02:00
Andreas Österreicher a3adce8776 Merge branch 'master' of github.com:FH-Complete/FHC-Core 2021-06-16 15:11:38 +02:00
Andreas Österreicher 6376853734 Planner: Timming Problem beim Speichern von Ressourcen behoben das dazu führte dass die Daten nicht immer gespeichert wurden 2021-06-16 15:10:43 +02:00
cris-technikum 377ad0eeec Merge remote-tracking branch 'origin/feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen
# Conflicts:
#	vilesci/stammdaten/personen_wartung.php
2021-06-16 13:16:01 +02:00
ma0048 934248aa0e Merge branch 'feature-12178/message_bei_master_freigabe' into feature-13277/anpassung_infocenter 2021-06-16 09:26:30 +02:00
ma0048 8fa40a843b Merge branch 'feature-11001/zgv_ueberpruefung' into feature-13277/anpassung_infocenter
# Conflicts:
#	application/controllers/system/infocenter/InfoCenter.php
#	application/views/system/infocenter/dokpruefung.php
#	application/views/system/infocenter/infocenterData.php
#	application/views/system/infocenter/infocenterFreigegebenData.php
#	application/views/system/infocenter/infocenterReihungstestAbsolviertData.php
2021-06-16 09:26:03 +02:00
ma0048 212261a38e autofill vom username im falschen feld verhindern 2021-06-16 09:18:53 +02:00
ma0048 6a3fb14ea6 zgv ueberpruefung zwischen master und bachelor unterscheiden 2021-06-16 09:16:15 +02:00
Harald Bamberger ed9bfcdf2d change infoscreen preview url 2021-06-15 11:18:55 +02:00
Andreas Österreicher 2d440585f4 Planner enhancements
- Removed Loading of Mantis Tasks
- Dont Load Ressource Overview on Startup
- Set Projects Tab as Default on Startup
2021-06-14 16:40:27 +02:00
cris-technikum eb709e7257 Merge branch 'master' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen 2021-06-14 16:10:41 +02:00
ma0048 42ff593cb1 zgvnation spalten umbenannt 2021-06-14 15:44:38 +02:00
Andreas Österreicher c71c5ae126 Merge branch 'feature-12340/StudienblattAnpassungFureAbbrecher' 2021-06-14 15:38:01 +02:00
Andreas Österreicher 6d0613e5c8 Merge branch 'master' into feature-12340/StudienblattAnpassungFureAbbrecher 2021-06-14 15:36:56 +02:00
Andreas Österreicher 6595df95ad Studienblatt - Endedatum bei Abbrechern korrigiert 2021-06-14 15:36:17 +02:00
Andreas Österreicher 83a0cbf380 Merge branch 'master' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen 2021-06-14 13:52:00 +02:00
Andreas Österreicher f0c57c78ae Merge branch 'BUG-13075/Urlaubstool_Markierung_Folgemonat' 2021-06-14 13:46:56 +02:00
Andreas Österreicher 5b80ab2726 Merge branch 'master' into BUG-13075/Urlaubstool_Markierung_Folgemonat 2021-06-14 13:42:17 +02:00
Andreas Österreicher ce07771802 Merge branch 'BUG-12899/Planner_Mitarbeiteransicht_Aufbau' 2021-06-14 13:32:57 +02:00
Andreas Österreicher 60d240258c Merge branch 'master' into BUG-12899/Planner_Mitarbeiteransicht_Aufbau 2021-06-14 13:29:53 +02:00
Andreas Österreicher 31f905bc74 Merge branch 'bug-13098/FasVerbandDatentypPruefen' 2021-06-14 13:24:00 +02:00
Andreas Österreicher 5e21b5cda8 Merge branch 'bug-294/FasMobilitaetsprogrammMitLangbezeichnungAnzeigen' 2021-06-14 13:20:27 +02:00
Andreas Österreicher 043b25c2f7 Merge branch 'BUG-13262/FASUnschoeneFehlerMeldung' 2021-06-14 13:13:44 +02:00
Andreas Österreicher 5aacf9f9b2 Datumsprüfung bei Geburtsdatum korrigiert 2021-06-14 13:13:03 +02:00
Andreas Österreicher 19d16809d4 Merge branch 'bugfixes-Sprint172/Diverse_Bugfixes' 2021-06-14 13:02:27 +02:00
ma0048 c9ec4cb674 ist infocentermitarbeiter spalte nachgezogen 2021-06-10 12:19:42 +02:00
ma0048 3171ec2c42 dokumententypen nach bezeichnung sortiert 2021-06-10 12:01:01 +02:00
ma0048 ccffdf9b7f statusgruende sortiert 2021-06-10 12:00:09 +02:00
ma0048 cdfaf5b90b dokumententypen nach bezeichnung sortiert 2021-06-10 11:56:07 +02:00
ma0048 3ba88b43dd zgvmaster spalte hinzugefuegt 2021-06-10 11:49:48 +02:00
manu 49363e893b 13218 update Eintragen MasterZGV Nation 2021-06-10 10:30:49 +02:00
manu e157945ae9 Auskommentieren Testausgaben 2021-06-09 08:58:17 +02:00
manu 472803dbec 13412 Refactoring Functions Dokumente ZGV Master 2021-06-07 16:55:39 +02:00
ma0048 4a2c90ac60 doktypen in zgv uebersicht nur readonly 2021-06-07 12:28:32 +02:00
ma0048 8a870fb4c8 reihungstest msg unterscheiden zwischen deutsch, englisch & bachelor & master 2021-06-07 12:07:34 +02:00
manu a6b53b8fd7 13412 Refactoring Functions for Master Documents 2021-06-07 11:29:39 +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
ma0048 5330e2b250 beim abweisen das studiensemester hinzugefuegt 2021-06-01 11:13:23 +02:00
manu 9a0df43526 13219 Master Dokumente: Anzeige akzeptierter Dokumente als nicht erforderlich 2021-06-01 09:47:02 +02:00
ma0048 6550fb6301 wording angepasst 2021-05-31 13:29:13 +02:00
ma0048 36f52cf3cc dokumententyp kann nun im Infocenter geaendert werden und zgv master wird angezeigt 2021-05-31 13:20:45 +02:00
manu 39668890f2 neue Funktion ZGVMasterNation setzen 2021-05-27 16:22:47 +02:00
cris-technikum 5ac2c1f9a6 Bugfix-13280/Lehrtaetigkeitsbestaetigung: Betreuungen ohne Stundensatz
In der Bestaetigung werden nun auch die Projektarbeitsbetreuungs-Stunden
aufgerechnet, bei denen kein Stundensatz hinterlegt ist.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-05-26 11:51:27 +02:00
cris-technikum 1e013e371d Bugfix-12064/Keine LV-Anzeige für WS2020
Beim Prüfen, ob ein Lehrvertrag für die Lehreinheit vorliegt, muss die
UID übergeben werden, denn diese wird entweder über GET param übergeben oder
mit dem aktuellen user gleichgesetzt.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2021-05-25 17:10:06 +02:00
OliiverHacker f52d3a455c add date validation 2021-05-25 16:35:41 +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
ma0048 f05493d3f3 modal und check hinzugefuegt 2021-05-20 09:33:08 +02:00
manu 0285e3fc92 Adaptierungen Bewerbungstool Übersichtsseite 2021-05-20 08:54:14 +02:00
OliiverHacker 847529d5aa nachname vorname tauschen 2021-05-19 09:03:20 +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
ma0048 0d4bf432e2 deleted console.log 2021-05-12 14:00:45 +02:00
ma0048 ffa7abdf5a standardtitel hinzugefuegt 2021-05-12 13:52:19 +02:00
ma0048 2c6d8937f6 funktion hinzugefuegt um mehrere bewerber abzuweisen und status wird nur angezeigt wenn aktiv 2021-05-12 12:48:29 +02:00
manu 475f57d10f Erweiterung um Langbezeichnung 2021-05-12 09:42:24 +02:00
Andreas Österreicher 4b8bf41837 Plagiatsprüfung Link aktualisiert 2021-05-11 11:07:31 +02:00
manu cefe34a68f neue Funktion variableChangeValueIfNumber() 2021-05-10 11:28:08 +02:00
ma0048 6f885fb924 fixed typo and put the insert on a other position 2021-05-07 22:23:48 +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
ma0048 062ff74b03 Mails bei freigabe zum RT und Freigabe an Studiengang fuer Master hinzugefuegt 2021-05-04 22:09:47 +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
ma0048 03feb6bd44 Merge branch 'feature-12177/master_zgv_im_infocenter_erfassbar' into feature-11001/zgv_ueberpruefung 2021-04-29 11:14:04 +02:00
ma0048 d490eb4323 freigabe nur fuer den bachelor 2021-04-29 11:12:48 +02:00
OliiverHacker c0b07ac1d2 fix bug when deleting ressource from projectphasen 2021-04-29 11:12:32 +02:00
OliiverHacker 898562e742 fix bug when deleting ressource from project 2021-04-29 11:06:51 +02:00
ma0048 5fff866363 Merge branch 'feature-4836/studiengang_der_anmerkung_ergaenzen' into feature-11001/zgv_ueberpruefung 2021-04-29 10:55:51 +02:00
ma0048 7c02e0247d Merge branch 'feature-12010/filter_for_bachelor_master' into feature-11001/zgv_ueberpruefung 2021-04-29 10:55:35 +02:00
ma0048 0b5ae2df9c Merge branch 'feature-12177/master_zgv_im_infocenter_erfassbar' into feature-11001/zgv_ueberpruefung 2021-04-29 10:53:00 +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
ma0048 5c339ce448 zgv ueberpruefung bug fixes 2021-04-28 16:56:50 +02:00
ma0048 c9bd10c3d0 zgv ueberpruefung bug fixes 2021-04-28 16:53:43 +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
OliiverHacker 35f1b00d7a display correct mitarbeiter ressources 2021-04-28 12:53:57 +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
ma0048 bc7e3c5cc5 zgv ueberpruefung hinzugefuegt 2021-04-20 13:51:41 +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 42d2f45561 bei den anmerkungen studiengang hinzugefuegt 2021-04-06 13:51:27 +02:00
ma0048 acdfdc028b zgv beim master nur updaten wenn es sich um einen master handelt 2021-04-06 12:31:46 +02:00
ma0048 84e7d95e34 changed from select to links 2021-04-06 11:47:14 +02:00
OliiverHacker 48105425fc Edit Studienblatt in Englisch für AbbrecherInnen 2021-04-02 15:35:36 +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 3644cc690c Put Checks from xml to xsl for Abbrecher 2021-04-01 21:28:27 +02:00
OliiverHacker 5cdc7f9542 Revert "impiment different text"
This reverts commit 9bf8d58a
2021-04-01 18:09:46 +02:00
OliiverHacker 3e7f75b43f fix merge conflic at dbupdate_3.3 2021-04-01 14:48:56 +02:00
OliiverHacker a6989fff11 Revert "impiment different text"
This reverts commit 9bf8d58a
2021-04-01 14:44:28 +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 7f713670b5 fixed recht 2021-03-31 17:57:35 +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
ma0048 9b57248007 zgv auch bei master uebernehmen 2021-03-31 13:12:20 +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 b7cb8b27ce merge 2021-03-29 10:08:35 +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
OliiverHacker d2c4dd79d5 merge 2021-03-26 19:08:45 +01:00
OliiverHacker 0c429984b9 add new function to bisverwendung 2021-03-26 18:43:05 +01:00
ma0048 e791e3267f link zur mail vorlage hinzugefuegt 2021-03-25 15:52:14 +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 23e502f02e mail vorlage hinzugefuegt 2021-03-25 10:44:11 +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
OliiverHacker 4e0dfbf28a change studienblatt if AbbrecherIn 2021-03-23 13:24:15 +01:00
ma0048 10441baff3 sortierung anhand kurztext 2021-03-23 09:34:49 +01:00
ma0048 287cddf926 added zgv ueberpruefung 2021-03-23 09:25:24 +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
ma0048 fb7835de57 added new zeitwuensche permission 2021-03-08 12:53:59 +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
OliiverHacker 95c2e4bf9c fix true false 2021-02-26 00:25:59 +01:00
Andreas Österreicher 54286a7e6c Merge branch 'master' into 9503/csvExportProjektÜbersicht 2021-02-25 15:49:52 +01:00
Andreas Österreicher d9cbea680e Fixed Loading of AZG Relevant Checkbox in FAS
Fixed missing Column Warning in DB Update
2021-02-25 15:25:41 +01:00
Andreas Österreicher 8086501d04 Merge branch 'master' into feature-10267/Zeiterfassung_Zeitaufzeichnungspflichtig 2021-02-25 14:43:06 +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
ma0048 935b370166 added filter for bachelor and master 2021-02-17 15:07:09 +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 e6ce33a302 Merge branch 'master' into feature-7264/Dauerampel_fuer_fehlende_Timesheets 2021-01-29 15:31:53 +01:00
Andreas Österreicher c6f6a626d3 Merge branch 'master' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen 2021-01-29 15:30:58 +01:00
Andreas Österreicher 5b3daa76df Merge branch 'master' into feature-10267/Zeiterfassung_Zeitaufzeichnungspflichtig 2021-01-29 15:30:22 +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
OliiverHacker 943961127f implement checkbox 2021-01-19 16:15:03 +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
OliiverHacker 8441345d7a add azgrelevant to save method in bisverwendungclass 2021-01-19 13:22:47 +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 d62b1bead4 change table 2020-12-21 09:27:23 +01:00
OliiverHacker 30960adf81 fix typo in query 2020-12-21 08:55:33 +01:00
OliiverHacker c3ab40282b add azgrelevant column and alter zeitaufzeichnung column in bis.tbl_bisverwendung 2020-12-16 16:39:43 +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
Cris 34e3756d74 Mitarbeiter zusammenlegen entfernt / Extension-Tabellen auf Vorhandensein pruefen
- Mitarbeiter zusammenlegen entfernt.
- Bevor Personen auch in extenstions zusammengelegt werden: pruefen, ob
die entsprechenden Tabellen existieren. (diese sind nur vorhanden, wenn
extensions FHC-Core-ALMA, FHC-Core-SAP installiert sind)

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-11-18 13:14:59 +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
cris-technikum 60963c691b Merge branch 'master' of https://github.com/FH-Complete/FHC-Core into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen 2020-11-17 12:20:22 +01:00
Cris 4cbbd662b6 Automatisch Personen in tbl_sap_mitarbeiter zusammenlegen
Wenn doppelt angelegte Personen zusammengeführt werden, wird nun ggf auch
in der Tabelle tbl_sap_mitarbeiter die hinterlegte Person upgedatet.
Ausnahme: wenn in der tbl_sap_mitarbeiter die Person auch schon doppelt
angelegt ist. In diesem Fall gibt es ein exit mit der Aufforderung, dies
direkt (manuell) in der tbl_sap_mitarbeiter zu ändern.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-11-16 17:48:24 +01:00
Cris adb96ed33f Automatisch Personen in tbl_sap_students zusammenlegen
Wenn doppelt angelegte Personen zusammengeführt werden, wird nun ggf auch
in der Tabelle tbl_sap_students die hinterlegte Person upgedatet.
Ausnahme: wenn in der tbl_sap_students die Person auch schon doppelt
angelegt ist. In diesem Fall gibt es ein exit mit der Aufforderung, dies
direkt (manuell) in der tbl_sap_students zu ändern.

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
2020-11-16 17:23:05 +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
Cris 01032c63d3 Update der Person in ALMA Tabelle, wenn Personen zusammengelegt werden
Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu
behaltenden Person ersetzen.
Falls bereits die zu ersetzende UND zu löschende Person in ALMA
vorhanden sind, muss erst direkt im ALMA Bibliothekssystem und in der
tbl_alma gelöscht werden.

Signed-off-by: Cris <hainberg@technikum-wien.at>
2020-11-04 15:29:36 +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
Cris 28b5761116 Added info-tooltip to Dauerampel 2020-05-14 14:23:28 +02:00
Cris d1d219cc2c Added parse_bool to dauerampel in ampel.class 2020-05-14 14:22:56 +02:00
Cris 4bcb2cc059 Fixed: Active Ampeln now matching correctly time conditions
Before missing braces between AND/OR operands delivered wrong results.
This is fixed now.
2020-04-29 13:16:32 +02:00
Cris 5267bc5d7a Added parameter ampel_id to method active() in Ampel_model 2020-04-29 13:11:39 +02:00
Cris ef69a1a2f3 Changed: Now single ampel_id is checked, if it is active + better code
. If parameter ampel_id is passed to the job, it will now get the
ampel data only if it is active.
. Clearer way of treating dauerampel in code.
2020-04-29 13:10:20 +02:00
Cris 37aa23ee1e Adapted job generateAmpelMail in AmpelMail
Now an ampel_id can be given to generateAmpelMail.
If an ampel_id is set, only this ampel is loaded.
Otherwise all active Ampeln are loaded.

Dauerampeln are always set as 'new': the status is then set to yellow and
the message template for new ampeln fits well too.
2020-04-28 16:41:39 +02:00
Cris ebe5cbe797 Added Dauerampel to CIS GUI
Dauerampeln do not have Faelligkeitsdatum and do not have
Bestaetigen-button. They are dismissed automatically when the
benutzer_select-condition is not valid anymore.
2020-04-28 16:35:17 +02:00
Cris fc2845ad72 Adapted method active() in Ampel_model
. Added parameter dauerampel
. Set both params to default null to have real usage of boolean param in
the query.
2020-04-28 16:31:35 +02:00
Cris 9f42beaeb3 Fixed: Query getAll in Ampel Class
Query was not retrieving correctly active Ampeln.
Adapted time conditions.
2020-04-28 16:24:30 +02:00
Cris a37b81c57a Added property 'dauerampel' to all Ampel Class methods 2020-04-28 16:20:01 +02:00
Cris 7060fd81c9 Added column 'dauerampel' to tbl_ampel 2020-04-28 16:17:09 +02:00
Cris f1565fea85 Added checkbox 'dauerampel' to Ampel Details
If checkbox 'dauerampel' is checked, the checkbox 'verpflichtend' is
disabled.
Dauerampeln should not pop up each time.
2020-04-28 16:16:05 +02:00
Cris 2f2a5ea6f7 Optimized VILESCI GUI for Ampeln
. Added links to display active or all ampeln (default: active)
. Added column 'dauerampel' in ampel overview
2020-04-28 16:13:01 +02:00
221 changed files with 19901 additions and 3456 deletions
+1 -1
View File
@@ -56,7 +56,7 @@
]
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt": "^1.3.0",
"grunt-cli": "~0.1.13",
"grunt-contrib-clean": "^0.7.0",
"grunt-contrib-concat": "^0.5.1",
+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)
+5
View File
@@ -0,0 +1,5 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
$config['infocenter_studiengang_kz'] = '10021, 10027, 10002';
+9
View File
@@ -62,6 +62,15 @@ $config['navigation_header'] = array(
'lehre/lehrauftrag_bestellen:r',
'lehre/lehrauftrag_erteilen:r'
)
),
'zgvueberpruefung' => array(
'link' => site_url('system/infocenter/ZGVUeberpruefung'),
'description' => 'ZGV Überprüfung',
'expand' => true,
'sort' => 50,
'requiredPermissions' => array(
'lehre/zgvpruefung:r'
)
)
)
),
+27 -7
View File
@@ -42,10 +42,19 @@ class AmpelMail extends CLI_Controller
* Ampel is overdue when the cronjob runs after the deadline date.
* @return void
*/
public function generateAmpelMail()
public function generateAmpelMail($ampel_id = null)
{
// Get all notifications, that are not expired, not before vorlaufzeit AND email is true
$result_active_ampeln = $this->AmpelModel->active(true);
// if ampel_id is given, get this ampel only
if (is_numeric($ampel_id))
{
$result_active_ampeln = $this->AmpelModel->active($ampel_id, true);
}
// else get all active ampeln
else
{
// Get all notifications, that are not expired, not before vorlaufzeit AND email is true
$result_active_ampeln = $this->AmpelModel->active(null, true);
}
// Stores users, description, deadline and system-link of notifications
$new_ampel_data_arr = array(); // data of new notifications that are not confirmed
@@ -67,6 +76,7 @@ class AmpelMail extends CLI_Controller
$qry_all_ampel_user = $ampel->benutzer_select; // sql select to get all user who get this ampel
$new = false;
$overdue = false;
$dauerampel = $ampel->dauerampel;
// get all user, who get this ampel
$result_ampel_user = $this->AmpelModel->execBenutzerSelect($qry_all_ampel_user);
@@ -84,11 +94,21 @@ class AmpelMail extends CLI_Controller
if($this->AmpelModel->isConfirmed($ampel_id, $uid))
continue;
// check if ampel is new (inserted within last week, as cronjob will run every week)
if ($now->diff($insert_date)->days <= 7) $new = true;
/**
* check if ampel is new
* inserted within last week, as cronjob will run every week
* OR if ampel is dauerampel (cannot be overdued -> treat always as new)
* */
if (($now->diff($insert_date)->days <= 7) || $dauerampel)
{
$new = true;
}
//check if ampel is overdue
if ($now > $deadline) $overdue = true;
// check if ampel is overdue
if (($now > $deadline) && !$dauerampel)
{
$overdue = true;
}
// if ampel is new
if ($new)
@@ -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));
}
}
@@ -383,8 +383,8 @@ class LehrauftragJob extends JOB_Controller
} // Else if UID exists
else
{
// Search if studiensemester exists
$ss_index = array_search($data['studiensemester_kurzbz'], array_column($mail_data_arr, 'studiensemester_kurzbz'));
// Search if studiensemester exists inside the existing UID array
$ss_index = array_search($data['studiensemester_kurzbz'], array_column($mail_data_arr[$uid_index], 'studiensemester_kurzbz'));
// If studiensemester is new, add studiensemester to existing UID
if ($ss_index === false)
@@ -394,13 +394,6 @@ class LehrauftragJob extends JOB_Controller
$data[$i]
);
}
// Else if studiensemester exists
else
{
// Add corresponding data to existing studiensemester of UID
$mail_data_arr[$uid_index]['studiensemester_kurbz'][] = $data[$i];
}
}
}
}
+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
@@ -269,7 +270,6 @@ class Lehrauftrag extends Auth_Controller
private function _sendMail($lehrvertrag_data_arr)
{
// Cluster data of new lehrvertraege as needed to send mail
$lehrvertrag_data_arr = $this->_cluster_newVertragData($lehrvertrag_data_arr);
foreach ($lehrvertrag_data_arr as $lehrvertrag_data)
{
+14 -2
View File
@@ -20,7 +20,8 @@ class Variables extends Auth_Controller
array(
'setVar' => 'basis/variable:rw',
'getVar' => 'basis/variable:rw',
'changeStudiensemesterVar' => 'basis/variable:rw'
'changeStudiensemesterVar' => 'basis/variable:rw',
'changeStudengangsTypVar' => 'basis/variable:rw'
)
);
@@ -50,7 +51,9 @@ class Variables extends Auth_Controller
public function getVar()
{
$name = $this->input->get('name');
$this->outputJson($this->VariableModel->getVariables($this->_uid, array($name)));
$typ = $this->input->get('typ');
$this->outputJson($this->VariableModel->getVariables($this->_uid, array($name, $typ)));
}
/**
@@ -66,6 +69,15 @@ class Variables extends Auth_Controller
$this->outputJson($result);
}
public function changeStudengangsTypVar()
{
$name = $this->input->post('name');
$change = $this->input->post('change');
$result = $this->variablelib->changeStudengangsTypVar($this->_uid, $name, $change);
$this->outputJson($result);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
@@ -12,12 +12,17 @@ class InfoCenter extends Auth_Controller
const APP = 'infocenter';
const TAETIGKEIT = 'bewerbung';
const FREIGABE_MAIL_VORLAGE = 'InfocenterMailFreigabeAssistenz';
const ZGVPRUEFUNG_MAIL_VORLAGE = 'InfocenterMailZgvUeberpruefung';
const ZGVPRUEFUNG_MAIL_VORLAGE_MASTER = 'InfocenterMailZgvUeberpruefungM';
const INFOCENTER_URI = 'system/infocenter/InfoCenter'; // URL prefix for this controller
const ZGV_UEBERPRUEFUNG_URI = 'system/infocenter/ZGVUeberpruefung';
const INDEX_PAGE = 'index';
const FREIGEGEBEN_PAGE = 'freigegeben';
const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert';
const SHOW_DETAILS_PAGE = 'showDetails';
const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails';
const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung';
const NAVIGATION_PAGE = 'navigation_page';
const ORIGIN_PAGE = 'origin_page';
@@ -63,13 +68,32 @@ class InfoCenter extends Auth_Controller
'name' => 'Note updated',
'message' => 'Note with title %s was updated',
'success' => null
)
),
'updatezgv' => array(
'logtype' => 'Action',
'name' => 'ZGV pruefung updated',
'message' => 'ZGV with the ID %s was updated to %s',
'success' => null
),
'newzgv' => array(
'logtype' => 'Action',
'name' => 'ZGV pruefung added',
'message' => 'ZGV with the ID %s was added',
'success' => null
),
'updatedoctyp' => array(
'logtype' => 'Action',
'name' => 'Document type updated',
'message' => 'Type of Document %s was updated, set to %s',
'success' => null
),
);
// Name of Interessentenstatus
const INTERESSENTSTATUS = 'Interessent';
const ABGEWIESENERSTATUS = 'Abgewiesener';
const BEWERBERSTATUS = 'Bewerber';
const WARTENDER = 'Wartender';
// Statusgruende for which no Studiengangsfreigabemessage should be sent
private $_statusgruendeNoStgFreigabeMessage = array('FIT Programm', 'FIT program', 'FIT programme');
@@ -85,13 +109,18 @@ class InfoCenter extends Auth_Controller
'freigegeben' => 'infocenter:r',
'reihungstestAbsolviert' => 'infocenter:r',
'showDetails' => 'infocenter:r',
'showZGVDetails' => 'lehre/zgvpruefung:r',
'unlockPerson' => 'infocenter:rw',
'saveFormalGeprueft' => 'infocenter:rw',
'saveDocTyp' => 'infocenter:rw',
'saveNachreichung' => 'infocenter:rw',
'getPrestudentData' => 'infocenter:r',
'getLastPrestudentWithZgvJson' => 'infocenter:r',
'getZgvInfoForPrestudent' => 'infocenter:r',
'saveBewPriorisierung' => 'infocenter:rw',
'saveZgvPruefung' => 'infocenter:rw',
'zgvRueckfragen' => 'infocenter:rw',
'zgvStatusUpdate' => 'lehre/zgvpruefung:rw',
'saveAbsage' => 'infocenter:rw',
'saveFreigabe' => 'infocenter:rw',
'getNotiz' => 'infocenter:r',
@@ -99,6 +128,7 @@ class InfoCenter extends Auth_Controller
'updateNotiz' => 'infocenter:rw',
'reloadZgvPruefungen' => 'infocenter:r',
'reloadMessages' => 'infocenter:r',
'reloadDoks' => 'infocenter:r',
'reloadNotizen' => 'infocenter:r',
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => 'infocenter:r',
@@ -108,15 +138,20 @@ class InfoCenter extends Auth_Controller
'setOnHold' => 'infocenter:rw',
'removeOnHold' => 'infocenter:rw',
'getStudienjahrEnd' => 'infocenter:r',
'setNavigationMenuArrayJson' => 'infocenter:r'
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw'
)
);
// Loads models
$this->load->model('crm/Akte_model', 'AkteModel');
$this->load->model('crm/Dokument_model', 'DokumentModel');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('system/Message_model', 'MessageModel');
@@ -178,6 +213,59 @@ class InfoCenter extends Auth_Controller
$this->load->view('system/infocenter/infocenterReihungstestAbsolviert.php');
}
/**
* Prestudenten/ZGV übersicht
* Holt sich die Informationen zu den ZGV vom Prestudenten und zeigt die dann an
*/
public function showZGVDetails()
{
$this->_setNavigationMenuShowDetails(self::SHOW_ZGV_DETAILS_PAGE);
$prestudent_id = $this->input->get('prestudent_id');
if (!is_numeric($prestudent_id))
show_error('prestudent id is not numeric!');
$prestudentexists = $this->PrestudentModel->load($prestudent_id);
if (isError($prestudentexists))
show_error(getError($prestudentexists));
if (!hasData($prestudentexists))
show_error('Prestudent does not exist!');
$zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id);
if (isError($zgv))
show_error(getError($zgv));
if (!hasData($zgv))
show_error('ZGV has no status.');
$persondata = $this->_loadPersonData(getData($prestudentexists)[0]->person_id);
$prestudent_id = array('prestudent_id' => $prestudent_id);
$status = array('status' => getData($zgv)[0]->status);
$prestudent_data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id);
$this->DokumentModel->addOrder('bezeichnung');
$dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load())));
$data = array_merge(
$persondata,
$prestudent_id,
$status,
$dokumentdata,
$prestudent_data
);
$origin_page = $this->input->get(self::ORIGIN_PAGE);
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
$data[self::ORIGIN_PAGE] = $origin_page;
$data[self::PREV_FILTER_ID] = $this->input->get(self::PREV_FILTER_ID);
$this->load->view('system/infocenter/infocenterZgvDetails.php', $data);
}
/**
* Personal details page of the InfoCenter tool
* Initialization function, gets person and prestudent data and loads the view with the data
@@ -211,9 +299,13 @@ class InfoCenter extends Auth_Controller
$persondata = $this->_loadPersonData($person_id);
$prestudentdata = $this->_loadPrestudentData($person_id);
$this->DokumentModel->addOrder('bezeichnung');
$dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load())));
$data = array_merge(
$persondata,
$prestudentdata
$prestudentdata,
$dokumentdata
);
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
@@ -374,12 +466,18 @@ class InfoCenter extends Auth_Controller
$zgvdatum = isEmptyString($zgvdatum) ? null : date_format(date_create($zgvdatum), 'Y-m-d');
$zgvnation_code = $this->input->post('zgvnation') === 'null' ? null : $this->input->post('zgvnation');
// zgvmasterdata
$zgvmas_code = $this->input->post('zgvmas') === 'null' ? null : $this->input->post('zgvmas');
$zgvmaort = $this->input->post('zgvmaort');
$zgvmadatum = $this->input->post('zgvmadatum');
$zgvmadatum = isEmptyString($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d');
$zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation');
$prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id);
$prestudentdata = getData($prestudent);
if ($prestudentdata->studiengangtyp === 'm')
{
// zgvmasterdata
$zgvmas_code = $this->input->post('zgvmas') === 'null' ? null : $this->input->post('zgvmas');
$zgvmaort = $this->input->post('zgvmaort');
$zgvmadatum = $this->input->post('zgvmadatum');
$zgvmadatum = isEmptyString($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d');
$zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation');
}
$lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id, '', self::INTERESSENTSTATUS);
@@ -395,19 +493,29 @@ class InfoCenter extends Auth_Controller
);
}
$prestresult = $this->PrestudentModel->update(
$prestudent_id,
array(
'zgv_code' => $zgv_code,
'zgvort' => $zgvort,
'zgvdatum' => $zgvdatum,
'zgvnation' => $zgvnation_code,
$updateArray = array(
'zgv_code' => $zgv_code,
'zgvort' => $zgvort,
'zgvdatum' => $zgvdatum,
'zgvnation' => $zgvnation_code,
'updateamum' => date('Y-m-d H:i:s')
);
if ($prestudentdata->studiengangtyp === 'm')
{
$updateMasterArray = array(
'zgvmas_code' => $zgvmas_code,
'zgvmaort' => $zgvmaort,
'zgvmadatum' => $zgvmadatum,
'zgvmanation' => $zgvmanation_code,
'updateamum' => date('Y-m-d H:i:s')
)
'zgvmanation' => $zgvmanation_code
);
$updateArray = array_merge($updateArray, $updateMasterArray);
}
$prestresult = $this->PrestudentModel->update(
$prestudent_id,
$updateArray
);
if (isError($prestresult))
@@ -429,15 +537,195 @@ class InfoCenter extends Auth_Controller
$this->outputJson($json);
}
/**
* Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang
*/
private function sendZgvMail($mail, $typ){
$data = array(
'link' => site_url('system/infocenter/ZGVUeberpruefung')
);
$this->load->helper('hlp_sancho');
sendSanchoMail(
($typ === 'm' ? self::ZGVPRUEFUNG_MAIL_VORLAGE_MASTER : self::ZGVPRUEFUNG_MAIL_VORLAGE),
$data,
$mail,
'ZGV Ueberpruefung',
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
/**
* Der Status von den ZGV wird geupdated
*/
public function zgvStatusUpdate()
{
$prestudent_id = $this->input->post('prestudent_id');
$person_id = $this->input->post('person_id');
$status = $this->input->post('status');
if (isEmptyString($prestudent_id) || isEmptyString($person_id) || isEmptyString($status))
$this->terminateWithJsonError('Some data is missing');
$personInfos = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id);
if (!hasData($personInfos))
$this->terminateWithJsonError('Person id nicht gefunden');
$personInfos = getData($personInfos);
$zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id);
if (!hasData($zgv))
$this->terminateWithJsonError('ZGV-Status nicht gefunden');
$zgv = getData($zgv);
if ($zgv[0]->status === 'rejected' && $status === 'rejected')
$this->terminateWithJsonError('Bereits abgelehnt worden');
elseif ($zgv[0]->status === 'accepted' && $status === 'accepted')
$this->terminateWithJsonError('Bereits akzeptiert worden');
$insert = $this->ZGVPruefungStatusModel->insert(
array(
'zgvpruefung_id' => $zgv[0]->zgvpruefung_id,
'status' => $status
)
);
$update = $this->ZGVPruefungModel->update(
$zgv[0]->zgvpruefung_id,
array(
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
if (isError($insert) || isError($update))
$this->terminateWithJsonError('Fehler beim Speichern');
$allZgvs = $this->ZGVPruefungStatusModel->getOpenZgvByPerson($personInfos->person_id, array('pruefung_stg'));
$openZgv = false;
if (hasData($allZgvs))
$openZgv = true;
$this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, $status));
$this->outputJsonSuccess(
array
(
'msg' => 'Erfolgreich gespeichert',
'person_id' => $personInfos->person_id,
'openZgv' => $openZgv
)
);
}
/**
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
* Falls es erfolgreich war, sendet er die Mail raus
*/
public function zgvRueckfragen()
{
$prestudent_id = $this->input->post('prestudent_id');
$person_id = $this->input->post('person_id');
if (isEmptyString($prestudent_id) || isEmptyString($person_id))
$this->terminateWithJsonError('Prestudentid OR/AND Personid missing');
$zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id);
$data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id);
$mail = $data['studiengang_mail'];
$typ = $data['studiengang_typ'];
if (hasData($zgv))
{
$zgv = getData($zgv);
if ($zgv[0]->status === 'pruefung_stg')
$this->terminateWithJsonError('Bereits in Prüfung');
$insert = $this->ZGVPruefungStatusModel->insert(
array(
'zgvpruefung_id' => $zgv[0]->zgvpruefung_id,
'status' => 'pruefung_stg'
)
);
$this->ZGVPruefungModel->update(
$zgv[0]->zgvpruefung_id,
array(
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
$this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, 'pruefung_stg'));
if (isSuccess($insert))
$this->sendZgvMail($mail, $typ);
elseif (isError($insert))
$this->terminateWithJsonError('Fehler beim Speichern');
}else
{
$insert = $this->ZGVPruefungModel->insert(
array(
'prestudent_id' => $prestudent_id,
'insertamum' => date('Y-m-d H:i:s'),
'insertvon' => $this->_uid
)
);
if (isSuccess($insert))
{
$zgvpruefung_id = $this->ZGVPruefungModel->db->insert_id();
$result = $this->ZGVPruefungStatusModel->insert(
array(
'zgvpruefung_id' => $zgvpruefung_id,
'status' => 'pruefung_stg'
)
);
$this->_log($person_id, 'newzgv', array($zgvpruefung_id));
if (isSuccess($result))
$this->sendZgvMail($mail, $typ);
elseif (isError($result))
$this->terminateWithJsonError('Fehler beim Speichern');
}
}
$hold = false;
if ($this->personloglib->getOnHoldDate($person_id) !== null)
$hold = true;
$this->outputJsonSuccess(
array
(
'msg' => 'Erfolgreich gespeichert',
'person_id' => $data['person_id'],
'hold' => $hold
)
);
}
/**
* Saves Absage for Prestudent including the reason for the Absage (statusgrund).
* inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status.
*/
public function saveAbsage()
public function saveAbsage($prestudent_id = null, $statusgrund = null)
{
$json = null;
$prestudent_id = $this->input->post('prestudent_id');
$statusgrund = $this->input->post('statusgrund');
if (is_null($prestudent_id))
$prestudent_id = $this->input->post('prestudent_id');
if (is_null($statusgrund))
$statusgrund = $this->input->post('statusgrund');
$lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id);
@@ -446,8 +734,10 @@ class InfoCenter extends Auth_Controller
if (hasData($lastStatus) && hasData($statusgrresult))
{
//check if still Interessent and not freigegeben yet
if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS && !isset($lastStatus->retval[0]->bestaetigtam))
//check if still Interessent
if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS
|| $lastStatus->retval[0]->status_kurzbz === self::BEWERBERSTATUS
|| $lastStatus->retval[0]->status_kurzbz === self::WARTENDER)
{
$result = $this->PrestudentstatusModel->insert(
array(
@@ -744,6 +1034,13 @@ class InfoCenter extends Auth_Controller
$this->load->view('system/infocenter/logs.php', array('logs' => $logs));
}
public function reloadDoks($person_id)
{
$dokumente_nachgereicht = $this->AkteModel->getAktenWithDokInfo($person_id, null, true);
$this->load->view('system/infocenter/dokNachzureichend.php', array('dokumente_nachgereicht' => $dokumente_nachgereicht->retval));
}
/**
* Outputs content of an Akte, sends appropriate headers (so the document can be downloaded)
* @param $akte_id
@@ -898,6 +1195,117 @@ class InfoCenter extends Auth_Controller
$this->outputJsonSuccess('success');
}
public function saveDocTyp($person_id)
{
$akte_id = $this->input->post('akte_id');
$typ = $this->input->post('typ');
if (!isset($akte_id) || !isset($typ) || !isset($person_id))
$this->terminateWithJsonError("Nicht alle sind Parameter übergeben worden");
$akte = $this->AkteModel->load($akte_id);
if (!hasData($akte))
$this->terminateWithJsonError("Fehler beim Laden der Akte");
$result = $this->AkteModel->update($akte_id, array('dokument_kurzbz' => $typ));
if (!isSuccess($result))
$this->terminateWithJsonError("Fehler beim Update aufgetreten");
$dokument = $this->DokumentModel->load($akte->retval[0]->dokument_kurzbz);
if (!hasData($dokument))
$this->terminateWithJsonError("Fehler beim Laden des Dokumententypes");
$this->_log(
$person_id,
'updatedoctyp',
array(
isEmptyString($akte->retval[0]->titel) ? $akte->retval[0]->bezeichnung : $akte->retval[0]->titel,
isEmptyString($dokument->retval[0]->bezeichnung) ? $dokument->retval[0]->dokument_kurbz : $dokument->retval[0]->bezeichnung
)
);
$this->outputJsonSuccess('success');
}
public function saveNachreichung($person_id)
{
$nachreichungAm = $this->input->post('nachreichungAm');
$nachreichungAnmerkung = empty($this->input->post('nachreichungAnmerkung')) ? NULL : $this->input->post('nachreichungAnmerkung');
$typ = $this->input->post('typ');
$allowedTypes = [
'VorlSpB2' => 'SprachB2',
'ZgvBaPre' => 'zgv_bakk',
'ZgvMaPre' => 'zgv_mast'
];
if (!in_array($typ, array_keys($allowedTypes)))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
if (empty($nachreichungAm))
$this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig'));
if (!preg_match('/^\d{2}\.\d{2}\.(\d{2}|\d{4})$/ ', $nachreichungAm))
{
$this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig'));
}
else
{
$ds = explode('.', $nachreichungAm);
if (! checkdate($ds[1], $ds[0], $ds[2]))
{
$this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig'));
}
}
$nachreichungAm = (date_format(date_create($nachreichungAm), 'Y-m-d'));
$today = date('Y-m-d H:i:s');
if($nachreichungAm < $today)
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
if (hasData($akte)) {
$akte = getData($akte)[0];
$this->AkteModel->update(
$akte->akte_id,
array(
'anmerkung' => $nachreichungAnmerkung,
'updateamum' => $today,
'updatevon' => get_uid(),
'nachgereicht' => true,
'nachgereicht_am' => $nachreichungAm
)
);
}
else
{
$this->AkteModel->insert(
array(
'dokument_kurzbz' => $allowedTypes[$typ],
'person_id' => $person_id,
'erstelltam' => NULL,
'gedruckt' => false,
'anmerkung' => $nachreichungAnmerkung,
'updateamum' => $today,
'updatevon' => get_uid(),
'insertamum' => $today,
'insertvon' => get_uid(),
'uid' => NULL,
'nachgereicht' => true,
'nachgereicht_am' => $nachreichungAm
)
);
}
$this->outputJsonSuccess("Done!");
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
@@ -1058,9 +1466,9 @@ class InfoCenter extends Auth_Controller
/**
* Define the navigation menu for the showDetails page
*/
private function _setNavigationMenuShowDetails()
private function _setNavigationMenuShowDetails($page = self::SHOW_DETAILS_PAGE)
{
$this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::SHOW_DETAILS_PAGE));
$this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.$page));
$origin_page = $this->input->get(self::ORIGIN_PAGE);
@@ -1073,6 +1481,8 @@ class InfoCenter extends Auth_Controller
{
$link = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
}
if ($origin_page === self::ZGV_UBERPRUEFUNG_PAGE)
$link = site_url(self::ZGV_UEBERPRUEFUNG_URI);
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
if (isset($prevFilterId))
@@ -1358,6 +1768,8 @@ class InfoCenter extends Auth_Controller
|| isset($zgvpruefung->prestudentstatus->bestaetigtam)
|| $zgvpruefung->prestudentstatus->status_kurzbz != self::INTERESSENTSTATUS;
$zgvpruefung->abgewiesener = $zgvpruefung->prestudentstatus->status_kurzbz === self::ABGEWIESENERSTATUS;
//wether prestudent was freigegeben for RT/Stg
$zgvpruefung->isRtFreigegeben = false;
$zgvpruefung->isStgFreigegeben = false;
@@ -1421,14 +1833,26 @@ class InfoCenter extends Auth_Controller
$zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1);
}
}
$zgvExist = $this->ZGVPruefungModel->loadWhere(array('prestudent_id' => $zgvpruefung->prestudent_id));
$zgvpruefungen[] = $zgvpruefung;
if (isSuccess($zgvExist) && hasData($zgvExist))
{
$this->ZGVPruefungStatusModel->addOrder('datum', 'DESC');
$this->ZGVPruefungStatusModel->addLimit(1);
$statusZGV = $this->ZGVPruefungStatusModel->loadWhere(array('zgvpruefung_id' => $zgvExist->retval[0]->zgvpruefung_id));
if (isSuccess($statusZGV) && hasData($statusZGV))
$zgvpruefung->statusZGV = $statusZGV->retval[0]->status;
}
$zgvpruefungen[] = $zgvpruefung;
}
$this->_sortPrestudents($zgvpruefungen);
$abwstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::ABGEWIESENERSTATUS))->retval;
$intstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::INTERESSENTSTATUS))->retval;
$abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
$intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval;
$data = array (
'zgvpruefungen' => $zgvpruefungen,
@@ -1545,8 +1969,10 @@ class InfoCenter extends Auth_Controller
$person_id = $prestudentdata->person_id;
$studiengang_kurzbz = $prestudentdata->studiengang;
$studiengang_bezeichnung = $prestudentdata->studiengangbezeichnung;
$studiengang_mail = $prestudentdata->studiengangmail;
$studiengang_typ = $prestudentdata->studiengangtyp;
return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung);
return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung, 'studiengang_mail' => $studiengang_mail, 'studiengang_typ' => $studiengang_typ);
}
/**
@@ -1687,4 +2113,45 @@ class InfoCenter extends Auth_Controller
$this->loglib->logError('Studiengang has no mail for sending Freigabe mail');
}
}
public function getAbsageData()
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm'], $studienSemester);
$data = array (
'statusgruende' => $statusgruende,
'studiengaenge' => $studiengaenge->retval
);
$this->outputJsonSuccess($data);
}
public function saveAbsageForAll()
{
$statusgrund = $this->input->post('statusgrund');
$studiengang = $this->input->post('studiengang');
$personen = $this->input->post('personen');
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen))
$this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen.");
foreach($personen as $person)
{
$prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester);
if(!hasData($prestudent))
continue;
$prestudentData = getData($prestudent);
$this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund);
}
$this->outputJsonSuccess("Success");
}
}
@@ -0,0 +1,55 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class ZGVUeberpruefung extends Auth_Controller
{
/**
* Constructor
*/
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/zgvpruefung:r',
'getZgvStatusByPrestudent' => 'lehre/zgvpruefung:r'
)
);
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->library('WidgetLib');
$this->setControllerId();
$this->loadPhrases(
array(
'infocenter'
)
);
}
public function index()
{
$this->load->view('system/infocenter/infocenterZgvUeberpruefung.php');
}
public function getZgvStatusByPrestudent()
{
$prestudent_id = $this->input->get('prestudent_id');
$zgvExist = $this->ZGVPruefungModel->loadWhere(array('prestudent_id' => $prestudent_id));
if (!hasData($zgvExist))
$this->terminateWithJsonError('no ZGV exist');
$status = $this->ZGVPruefungStatusModel->getZgvStatus(getData($zgvExist)[0]->zgvpruefung_id);
if (!hasData($status))
$this->terminateWithJsonError('No status');
$status = getData($status)[0]->status;
$this->outputJsonSuccess($status);
}
}
+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);
}
}
}
}
+12
View File
@@ -100,6 +100,18 @@ class VariableLib
return $result;
}
public function changeStudengangsTypVar($uid, $name, $change)
{
$result = error('error when setting variable!');
if (isEmptyString($uid) || isEmptyString($name) || isEmptyString($change))
return $result;
$result = $this->_ci->VariableModel->setVariable($uid, $name, $change);
$this->_setVariable($uid, $name);
return $result;
}
/**
* "Refreshes" variable value with given name by retrieving current value from db and saving it.
* @param $uid
+81 -5
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);
@@ -589,9 +612,9 @@ class Messages_model extends CI_Model
if (!isEmptyString($vorlage_kurzbz))
{
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
$this->VorlagestudiengangModel->addOrder('version','DESC');
$this->VorlagestudiengangModel->addOrder('version', 'DESC');
$getVorlage = $this->VorlagestudiengangModel->loadWhere(array('vorlage_kurzbz' => $vorlage_kurzbz));
$getVorlage = $this->VorlagestudiengangModel->loadWhere(array('vorlage_kurzbz' => $vorlage_kurzbz, 'aktiv' => true));
}
return $getVorlage;
@@ -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))));
}
}
@@ -0,0 +1,15 @@
<?php
class Bisioaufenthaltfoerderung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_bisio_aufenthaltfoerderung';
$this->pk = array('bisio_id', 'aufenthaltfoerderung_code');
$this->hasSequence = false;
}
}
+29 -8
View File
@@ -16,27 +16,48 @@ class Ampel_model extends DB_Model
* 1. not after the deadline date
* 2. not before the vorlaufszeit
* @param bool $email If true, then only ampeln are retrieved that are marked to be sent by mail.
* @param bool $dauerampel
* @return array Returns array of objects.
*/
public function active($email = false)
public function active($ampel_id = null, $email = null, $dauerampel = null)
{
$parametersArray = null;
$query = '
SELECT *
FROM public.tbl_ampel
WHERE';
if ($email === true)
if (is_numeric($ampel_id))
{
$parametersArray['ampel_id'] = $ampel_id;
$query .= ' ampel_id = ? AND';
}
if (is_bool($email))
{
$parametersArray['email'] = $email;
$query .= ' email = ? AND';
}
if (is_bool($dauerampel))
{
$parametersArray['dauerampel'] = $dauerampel;
$query .= ' dauerampel = ? AND';
}
$query .= '(
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
OR (verfallszeit IS NULL)
AND (NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
OR (vorlaufzeit IS NULL AND NOW() < deadline))';
$query .= ' (
/* now < ( deadline + verfallszeit ) */
NOW() < (deadline + (COALESCE(verfallszeit, 0) || \' days\')::interval)::date
/* oder keine verfallszeit */
OR verfallszeit IS NULL
)
AND
(
/* now > ( deadline - vorlaufzeit ) */
NOW() > (deadline - (COALESCE(vorlaufzeit, 0) || \' days\')::interval)::date
/* oder keine vorlaufzeit (ab sofort) */
OR vorlaufzeit IS NULL
)';
$query .= ' ORDER BY deadline DESC';
@@ -581,4 +581,19 @@ class Prestudent_model extends DB_Model
return $this->execQuery($query, array($person_id));
}
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester)
{
$query = "SELECT ps.prestudent_id
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE ps.person_id = ?
AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ?
AND pss.studiensemester_kurzbz = ?
";
return $this->execQuery($query, array($person, $studiengang, $studienSemester));
}
}
@@ -11,4 +11,18 @@ class Statusgrund_model extends DB_Model
$this->dbTable = "public.tbl_status_grund";
$this->pk = "statusgrund_id";
}
public function getStatus($status_kurzbz = null, $aktiv = null)
{
$this->addOrder('bezeichnung_mehrsprachig');
$where = array();
if (!is_null($status_kurzbz))
$where['status_kurzbz'] = $status_kurzbz;
if (!is_null($aktiv))
$where['aktiv'] = $aktiv;
$status = $this->loadWhere($where);
return success($status->retval);
}
}
+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;
}
}
@@ -0,0 +1,50 @@
<?php
class ZGVPruefungStatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_zgvpruefungstatus_status';
$this->pk = 'zgv_pruefung_status_id';
$this->hasSequence = true;
}
public function getZgvStatus($zgvpruefung_id)
{
$this->addOrder('datum', 'DESC');
$this->addLimit(1);
return $this->loadWhere(array('zgvpruefung_id' => $zgvpruefung_id));
}
public function getZgvStatusByPrestudent($prestudent_id)
{
$this->addJoin('public.tbl_zgvpruefung', 'zgvpruefung_id');
$this->addOrder($this->dbTable . '.datum', 'DESC');
$this->addLimit(1);
return $this->loadWhere(array('prestudent_id' => $prestudent_id));
}
public function getOpenZgvByPerson($person_id, $status)
{
$query = 'SELECT status.zgvpruefung_id, status.datum, status.status
FROM public.tbl_zgvpruefungstatus_status status
INNER JOIN
(
SELECT zgvpruefung_id, max(datum) as MaxDate
FROM public.tbl_zgvpruefungstatus_status
GROUP BY zgvpruefung_id
) sub ON status.zgvpruefung_id = sub.zgvpruefung_id AND status.datum = sub.MaxDate
JOIN public.tbl_zgvpruefung ON status.zgvpruefung_id = public.tbl_zgvpruefung.zgvpruefung_id
JOIN public.tbl_prestudent USING (prestudent_id)
WHERE person_id = ?
AND status.status IN ?';
return $this->execQuery($query, array($person_id, $status));
}
}
@@ -0,0 +1,17 @@
<?php
class ZGVPruefung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_zgvpruefung';
$this->pk = 'zgvpruefung_id';
$this->hasSequence = true;
}
}
@@ -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,51 @@ 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);
}
public function getStudiengaengeWithOrgForm($typ, $semester)
{
$query = "SELECT DISTINCT (UPPER(sg.typ || sg.kurzbz || ':' || sp.orgform_kurzbz)) AS Studiengang
FROM public.tbl_studiengang sg
JOIN lehre.tbl_studienordnung USING (studiengang_kz)
JOIN lehre.tbl_studienplan sp USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester spsem USING (studienplan_id)
WHERE sp.aktiv = TRUE AND sg.aktiv = TRUE AND sg.typ IN ?
AND spsem.studiensemester_kurzbz = ?
ORDER BY Studiengang";
return $this->execQuery($query, array($typ, $semester));
}
}
@@ -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));
}
+74 -2
View File
@@ -154,9 +154,81 @@ class Notiz_model extends DB_Model
{
// Join with the table public.tbl_notizzuordnung using notiz_id
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
$this->addOrder('insertamum', 'DESC');
$this->addJoin('public.tbl_prestudent', 'prestudent_id', 'LEFT');
$this->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
$this->addOrder('public.tbl_notiz.insertamum', 'DESC');
return $this->loadWhere(array('person_id' => $person_id, 'titel LIKE' => $titel));
return $this->loadWhere(array('public.tbl_notizzuordnung.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);
}
}
@@ -11,7 +11,8 @@ class Variablenname_model extends DB_Model
ORDER BY studienjahr_kurzbz, start
) sem
WHERE start > now()
LIMIT 1;'
LIMIT 1;',
'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1'
);
/**
@@ -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,128 @@
<?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
persistentLayout:true,
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
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);
},
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,138 @@
<?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' => 'approveAnrechnungUebersicht',
'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
persistentLayout:true,
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
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);
},
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);
?>
@@ -189,7 +189,7 @@ $this->load->view(
<div class="col-xs-4 col-md-offset-0 col-md-4">
<div class="input-group">
<input id="username" type="hidden" autocomplete="username" value=""><!-- this is to prevent Chrome autofilling a random input field with the username-->
<input id="username" autocomplete="username" style="position: absolute; opacity: 0;"><!-- this is to prevent Chrome autofilling a random input field with the username-->
<input id="password" type="password" autocomplete="new-password" class="form-control" placeholder="CIS-<?php echo ucfirst($this->p->t('password', 'password')); ?>">
<span class="input-group-btn">
<button id="accept-lehrauftraege" class="btn btn-primary pull-right"><?php echo ucfirst($this->p->t('global', 'lehrauftraegeAnnehmen')); ?></button>
@@ -32,7 +32,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -48,7 +48,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -64,7 +64,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -241,7 +241,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
@@ -34,7 +34,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -50,7 +50,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -66,7 +66,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -128,7 +128,7 @@ FROM
(
SELECT
/* lehrauftraege also planned with dummies, therefore personalnummer is needed */
ma.personalnummer,
(ma.personalnummer::text),
lema.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
@@ -240,7 +240,7 @@ FROM
pa.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
pa.projektarbeit_id AS "projektarbeit_id",
(pa.projektarbeit_id::text) AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
@@ -249,7 +249,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
@@ -268,7 +268,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz ||
\' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
(nachname || \' \' || vorname) AS "lektor",
(vorname || \' \' || nachname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -14,7 +14,7 @@ $query = '
datum AS "storniert",
(
SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -65,7 +65,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -81,7 +81,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -97,7 +97,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -281,7 +281,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
@@ -48,6 +48,8 @@
name="period" value="today"><?php echo $this->p->t('ui','heute'); ?></button>
<button type="submit" class="btn btn-default <?php echo $period == 'lastWeek' ? 'active' : ''?>"
name="period" value="lastWeek"><?php echo $this->p->t('ui','letzteWoche'); ?></button>
<button type="submit" class="btn btn-default <?php echo $period == 'upcoming' ? 'active' : ''?>"
name="period" value="upcoming"><?php echo $this->p->t('ui','zukuenftige'); ?></button>
<button type="submit" class="btn btn-default <?php echo $period == 'all' ? 'active' : ''?>"
name="period" value="all"><?php echo $this->p->t('ui','alle'); ?></button>
</div>
@@ -19,9 +19,10 @@ FROM
WHERE
vorsitz='".$UID."'
AND (
'". $PERIOD. "' = 'today' AND datum = NOW()::date OR
'". $PERIOD. "' = 'lastWeek' AND datum = (NOW() - interval '1 week')::date OR
'". $PERIOD. "' = 'all' AND datum >= '2020-05-27'
('". $PERIOD. "' = 'today' AND datum = NOW()::date) OR
('". $PERIOD. "' = 'lastWeek' AND datum >= (NOW() - interval '1 week')::date AND datum < NOW()::date) OR
('". $PERIOD. "' = 'upcoming' AND datum > NOW()::date) OR
('". $PERIOD. "' = 'all' AND datum >= '2020-05-27')
)
ORDER BY datum, nachname, vorname
";
@@ -0,0 +1,35 @@
<div class="modal fade absageModalForAll"
tabindex="-1"
role="dialog"
aria-labelledby="absageModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button"
class="close"
data-dismiss="modal"
aria-hidden="true">
&times;
</button>
<h4 class="modal-title"
id="absageModalLabel"><?php echo $this->p->t('infocenter', 'absageBestaetigen') ?></h4>
</div>
<div class="modal-body">
<?php echo $this->p->t('infocenter', 'absageBestaetigenTxt') ?>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
data-dismiss="modal">
<?php echo $this->p->t('ui', 'abbrechen') ?>
</button>
<button class="btn btn-primary saveAbsage" id="saveAbsageForAll">
<?php echo $this->p->t('infocenter', 'interessentAbweisen') ?>
</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
@@ -15,6 +15,7 @@
<?php echo date_format(date_create($notiz->insertamum), 'd.m.Y H:i:s') ?>
</td>
<td>
<?php (!isset($notiz->kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?>
<?php echo nl2br($notiz->text) ?>
</td>
</tr>
@@ -0,0 +1,32 @@
<?php if (count($dokumente_nachgereicht) > 0): ?>
<br/>
<p><?php echo ucfirst($this->p->t('infocenter','nachzureichendeDokumente')) ?></p>
<table id="nachgdoctable" class="table table-bordered">
<thead>
<tr>
<th><?php echo ucfirst($this->p->t('global','typ')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','nachzureichenAm')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','ausstellungsnation')) ?></th>
<th><?php echo ucfirst($this->p->t('global','anmerkung')) ?></th>
</tr>
</thead>
<tbody>
<?php
foreach ($dokumente_nachgereicht as $dokument):
?>
<tr>
<td><?php echo $dokument->dokument_bezeichnung ?></td>
<td>
<?php echo isset($dokument->nachgereicht_am) ? date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; ?>
</td>
<td>
<?php echo $dokument->langtext ?>
</td>
<td>
<?php echo $dokument->anmerkung; ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif; ?>
@@ -6,7 +6,10 @@
<th><?php echo ucfirst($this->p->t('global','typ')) ?></th>
<th><?php echo ucfirst($this->p->t('global','uploaddatum')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','ausstellungsnation')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','formalGeprueft')) ?></th>
<?php
if (!isset($formalReadonly))
echo "<th>" . ucfirst($this->p->t('infocenter','formalGeprueft')) . "</th>"
?>
</tr>
</thead>
<tbody>
@@ -18,50 +21,59 @@
<td>
<a href="outputAkteContent/<?php echo $dokument->akte_id ?>"><?php echo isEmptyString($dokument->titel) ? $dokument->bezeichnung : $dokument->titel ?></a>
</td>
<td><?php echo $dokument->dokument_bezeichnung ?></td>
<td>
<select class="aktenid" id="aktenid_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?>>
<?php
foreach($dokumententypen as $dokumenttyp)
echo "<option " . ($dokumenttyp->bezeichnung === $dokument->dokument_bezeichnung ? 'selected' : '') . " value = " . $dokumenttyp->dokument_kurzbz . ">" . $dokumenttyp->bezeichnung . "</option>"
?>
</select>
<div class="row">
<button class="nachreichungInfos hidden" id="nachreichungInfos_<?php echo $dokument->akte_id?>"><?php echo ucfirst($this->p->t('infocenter','dokumentWirdNachgereicht')) ?></button>
</div>
<div class="nachreichungInputs hidden" id="nachreichungInputs_<?php echo $dokument->akte_id?>">
<div class="row">
<div class="col-sm-8">
<div class="input-group">
<input type="text" class="form-control nachreichungAnmerkung" id="nachreichungAnmerkung_<?php echo $dokument->akte_id?>" maxlength="128" placeholder="Institution des Ausstellers (zB: TGM Wien)">
<span class="input-group-addon" style="color: grey;">128</span>
</div>
</div>
<div class="col-sm-4">
<input type="text" class="form-control nachreichungAm" id="nachreichungAm_<?php echo $dokument->akte_id?>" autofocus="autofocus" placeholder="tt.mm.jjjj">
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="btn-group pull-right">
<input type="button" value="OK" class="btn btn-primary nachreichungSpeichern" id="nachreichungSpeichern_<?php echo $dokument->akte_id?>">
<input type="button" value="Abbrechen" class="btn btn-default nachreichungAbbrechen" id="nachreichungAbbrechen_<?php echo $dokument->akte_id?>">
</div>
</div>
</div>
</div>
</td>
<td><?php echo date_format(date_create($dokument->erstelltam), 'd.m.Y') ?></td>
<td><?php echo $dokument->langtext ?></td>
<td>
<input type="checkbox" class="form-check-input prchbox"
id="prchkbx_<?php echo $dokument->akte_id ?>" <?php echo $geprueft ?>>
<span id="formalgeprueftam_<?php echo $dokument->akte_id ?>">
<?php echo isset($dokument->formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?>
</span>
</td>
<?php
if (!isset($formalReadonly)) :
?>
<td>
<input type="checkbox" class="form-check-input prchbox"
id="prchkbx_<?php echo $dokument->akte_id ?>" <?php echo $geprueft ?>>
<span id="formalgeprueftam_<?php echo $dokument->akte_id ?>">
<?php echo isset($dokument->formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?>
</span>
</td>
<?php endif ?>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
<?php if (count($dokumente_nachgereicht) > 0): ?>
<br/>
<p><?php echo ucfirst($this->p->t('infocenter','nachzureichendeDokumente')) ?></p>
<table id="nachgdoctable" class="table table-bordered">
<thead>
<tr>
<th><?php echo ucfirst($this->p->t('global','typ')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','nachzureichenAm')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','ausstellungsnation')) ?></th>
<th><?php echo ucfirst($this->p->t('global','anmerkung')) ?></th>
</tr>
</thead>
<tbody>
<?php
foreach ($dokumente_nachgereicht as $dokument):
?>
<tr>
<td><?php echo $dokument->dokument_bezeichnung ?></td>
<td>
<?php echo isset($dokument->nachgereicht_am) ? date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; ?>
</td>
<td>
<?php echo $dokument->langtext ?>
</td>
<td>
<?php echo $dokument->anmerkung; ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif; ?>
</div>
@@ -13,6 +13,7 @@
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'person' => array('vorname', 'nachname'),
'global' => array('mailAnXversandt'),
@@ -40,6 +41,7 @@
</div>
<div>
<?php $this->load->view('system/infocenter/infocenterData.php'); ?>
<?php $this->load->view('system/infocenter/absageModal.php'); ?>
</div>
</div>
</div>
@@ -1,16 +1,17 @@
<?php
$this->config->load('infocenter');
$APP = '\'infocenter\'';
$REJECTED_STATUS = '\'Abgewiesener\'';
$INTERESSENT_STATUS = '\'Interessent\'';
$STUDIENGANG_TYP = '\'b\'';
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\'';
$LOGDATA_NAME_PARKED = '\'Parked\'';
$LOGDATA_NAME_ONHOLD = '\'Onhold\'';
$LOGTYPE_KURZBZ = '\'Processstate\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = '10021,10027';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
@@ -213,7 +214,31 @@
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVNation"
) AS "ZGVNation",
(
SELECT ps.zgvmanation
FROM public.tbl_prestudent ps
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNation",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_benutzerfunktion.uid = (
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -298,7 +323,9 @@
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'gesendet').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'nichtGesendet').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')',
'ZGV Nation'
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter'
),
'formatRow' => function($datasetRaw) {
@@ -380,6 +407,20 @@
$datasetRaw->{'ZGVNation'} = '-';
}
if ($datasetRaw->{'ZGVMNation'} == null)
{
$datasetRaw->{'ZGVMNation'} = '-';
}
if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter')
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
else
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -25,7 +25,9 @@
'public/js/bootstrapper.js',
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js'
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js'
),
'phrases' => array(
'infocenter' => array(
@@ -43,7 +45,13 @@
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'rueckstelldatumUeberschritten',
'parkenZurueckstellenInfo'
'parkenZurueckstellenInfo',
'zgvInPruefung',
'zgvErfuellt',
'zgvNichtErfuellt',
'zgvErfuelltPruefung',
'datumUngueltig',
'nachreichDatumNichtVergangenheit'
),
'ui' => array(
'gespeichert',
@@ -121,6 +129,9 @@
</div>
<div class="panel-body">
<?php $this->load->view('system/infocenter/dokpruefung.php'); ?>
<div id="nachzureichendeDoks">
<?php $this->load->view('system/infocenter/dokNachzureichend.php'); ?>
</div>
</div> <!-- ./panel-body -->
</div> <!-- ./panel -->
</div> <!-- ./column -->
@@ -13,6 +13,7 @@
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'person' => array('vorname', 'nachname'),
'global' => array('mailAnXversandt'),
@@ -40,6 +41,7 @@
</div>
<div>
<?php $this->load->view('system/infocenter/infocenterFreigegebenData.php'); ?>
<?php $this->load->view('system/infocenter/absageModal.php'); ?>
</div>
</div>
</div>
@@ -1,12 +1,13 @@
<?php
$this->config->load('infocenter');
$APP = '\'infocenter\'';
$INTERESSENT_STATUS = '\'Interessent\'';
$STUDIENGANG_TYP = '\'b\'';
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$REJECTED_STATUS = '\'Abgewiesener\'';
$ADDITIONAL_STG = '10021,10027,10002';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
@@ -114,6 +115,12 @@
sg.studiengang_kz in('.$ADDITIONAL_STG.')
)
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = ps.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
)
LIMIT 1
) AS "StgAbgeschickt",
(
@@ -210,7 +217,31 @@
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVNation"
) AS "ZGVNation",
(
SELECT ps.zgvmanation
FROM public.tbl_prestudent ps
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNation",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_benutzerfunktion.uid = (
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -278,7 +309,9 @@
'Reihungstest angetreten',
'Reihungstest angemeldet',
'Reihungstest date',
'ZGV Nation'
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter'
),
'formatRow' => function($datasetRaw) {
@@ -371,6 +404,21 @@
{
$datasetRaw->{'ZGVNation'} = '-';
}
if ($datasetRaw->{'ZGVMNation'} == null)
{
$datasetRaw->{'ZGVMNation'} = '-';
}
if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter')
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
else
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -13,6 +13,7 @@
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'person' => array('vorname', 'nachname'),
'global' => array('mailAnXversandt'),
@@ -40,6 +41,7 @@
</div>
<div>
<?php $this->load->view('system/infocenter/infocenterReihungstestAbsolviertData.php'); ?>
<?php $this->load->view('system/infocenter/absageModal.php'); ?>
</div>
</div>
</div>
@@ -1,11 +1,12 @@
<?php
$this->config->load('infocenter');
$APP = '\'infocenter\'';
$INTERESSENT_STATUS = '\'Interessent\'';
$STUDIENGANG_TYP = '\'b\'';
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$ADDITIONAL_STG = '10021,10027';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$query = '
@@ -83,10 +84,11 @@
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sg.orgform_kurzbz)), \', \')
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sp.orgform_kurzbz)), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
@@ -166,7 +168,31 @@
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVNation"
) AS "ZGVNation",
(
SELECT ps.zgvmanation
FROM public.tbl_prestudent ps
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNation",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_benutzerfunktion.uid = (
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -225,7 +251,9 @@
'Reihungstest angetreten',
'Reihungstest angemeldet',
'Reihungstest Datum',
'ZGV Nation'
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter'
),
'formatRow' => function($datasetRaw) {
@@ -313,6 +341,21 @@
{
$datasetRaw->{'ZGVNation'} = '-';
}
if ($datasetRaw->{'ZGVMNation'} == null)
{
$datasetRaw->{'ZGVMNation'} = '-';
}
if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter')
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
else
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -0,0 +1,245 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'InfocenterZgvDetails',
'jquery' => true,
'bootstrap' => true,
'fontawesome' => true,
'jqueryui' => true,
'dialoglib' => true,
'ajaxlib' => true,
'tablesorter' => true,
'tinymce' => true,
'sbadmintemplate' => true,
'addons' => true,
'navigationwidget' => true,
'udfs' => true,
'widgets' => true,
'customCSSs' => array(
'public/css/sbadmin2/admintemplate.css',
'public/css/sbadmin2/tablesort_bootstrap.css',
'public/css/infocenter/infocenterDetails.css'
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/zgvUeberpruefung.js'
),
'phrases' => array(
'infocenter' => array(
'notizHinzufuegen',
'notizAendern',
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'zgvInPruefung',
'zgvErfuellt',
'zgvNichtErfuellt',
'zgvErfuelltPruefung'
),
'ui' => array(
'gespeichert',
'fehlerBeimSpeichern'
),
'global' => array(
'bis',
'zeilen'
)
)
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<input type="hidden" id="hiddenpersonid" value="<?php echo $stammdaten->person_id ?>">
<input type="hidden" id="studiengangtyp" value="<?php echo $studiengang_typ ?>">
<div class="row<?php if ($lockedbyother) echo ' alert-danger' ?>">
<div class="col-lg-8">
<h3 class="page-header">
Infocenter Details: <?php echo $stammdaten->vorname.' '.$stammdaten->nachname ?>
</h3>
</div>
<div class="col-lg-4">
<div class="headerright text-right">
<?php
if (isset($lockedby)):
echo $this->p->t('global', 'wirdBearbeitetVon').': ';
echo $lockedby;
if ($origin_page == 'index'):
$unlockpath = 'unlockPerson/'.$stammdaten->person_id;
$unlockpath .= '?fhc_controller_id='.$fhc_controller_id;
$unlockpath .= '&filter_id='.$prev_filter_id;
?>
&nbsp;&nbsp;
<a href="<?php echo $unlockpath; ?>">
<i class="fa fa-sign-out"></i>&nbsp;<?php echo ucfirst($this->p->t('ui', 'freigeben')) ?>
</a>
<?php endif; ?>
<?php else: ?>
&nbsp;
<?php endif; ?>
</div>
</div>
</div>
<br/>
<section>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading text-center">
<h4><?php echo ucfirst($this->p->t('global', 'stammdaten')) ?></h4>
</div>
<div class="panel-body">
<?php
$this->load->view('system/infocenter/stammdaten.php'); ?>
<?php $this->load->view('system/infocenter/anmerkungenZurBewerbung.php'); ?>
</div> <!-- ./panel-body -->
</div> <!-- ./panel -->
</div> <!-- ./main column -->
</div> <!-- ./main row -->
</section>
<section>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<a name="DokPruef"></a><!-- anchor for jumping to the section -->
<div class="panel-heading text-center">
<h4>
<?php echo ucfirst($this->p->t('infocenter', 'dokumentenpruefung')) ?>
</h4>
</div>
<div class="panel-body">
<?php $this->load->view('system/infocenter/dokpruefung.php', array('formalReadonly' => true)); ?>
<div id="nachzureichendeDoks">
<?php $this->load->view('system/infocenter/dokNachzureichend.php'); ?>
</div>
</div> <!-- ./panel-body -->
<div class="panel-body zgvBearbeitungButtons" id="zgvBearbeitungButtons_<?php echo $prestudent_id ?>">
<button type="button" class="btn btn-default zgvAkzeptieren" id="zgvAkzeptieren_<?php echo $prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'zgvErfuellt') ?>
</button>
<button type="button" class="btn btn-default zgvAblehnen" id="zgvAblehnen_<?php echo $prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'zgvNichtErfuellt') ?>
</button>
<?php
if ($studiengang_typ === 'm') :
?>
<button type="button" class="btn btn-default zgvAkzeptierenPruefung" id="zgvAkzeptierenPruefung_<?php echo $prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'zgvErfuelltPruefung') ?>
</button>
<?php
endif;
?>
<span class="zgvStatusText" id="zgvStatusText_<?php echo $prestudent_id ?>" data-info="need">
</span>
</div>
</div> <!-- ./panel -->
</div> <!-- ./column -->
</div> <!-- ./row -->
</section>
<section>
<div class="modal fade notizModal" id="notizModal_<?php echo $prestudent_id ?>" tabindex="-1"
role="dialog"
aria-labelledby="notizModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title"
id="notizModalLabel">
<?php echo $this->p->t('infocenter', 'notizHinzufuegen') ?>
<span id="notizModalStgr_<?php echo $prestudent_id ?>"></span>
</h4>
</div>
<div class="modal-body">
<input type="hidden" id="inputStatus_<?php echo $prestudent_id ?>">
<div class="form-group">
<label for="inputNotizTitelModal"><?php echo ucfirst($this->p->t('global', 'titel')) . ':' ?></label>
<input id="inputNotizTitelModal" required type="text" class="form-control"/>
</div>
<div class="form-group">
<label for="inputNotizTextModal"><?php echo ucfirst($this->p->t('global', 'text')) . ':' ?></label>
<textarea id="inputNotizTextModal" required class="form-control" rows="3" cols="32"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
data-dismiss="modal"><?php echo $this->p->t('ui', 'abbrechen') ?>
</button>
<button type="button"
class="btn btn-default saveZgvNotiz" id="saveZgvNotiz_<?php echo $prestudent_id ?>">
<?php echo $this->p->t('ui', 'speichern') ?>
</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
</section>
<section>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading text-center">
<a name="Nachrichten"></a>
<h4 class="text-center">
<?php echo ucfirst($this->p->t('global', 'nachrichten')) ?>
</h4>
</div>
<div class="panel-body">
<div class="row" id="messagelist">
<?php
$this->load->view('system/infocenter/messageList.php', $messages);
?>
</div>
</div>
</div>
</div>
</div>
</section>
<section>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading text-center">
<a name="NotizAkt"></a>
<h4 class="text-center">
<?php echo ucfirst($this->p->t('global', 'notizen'))?>
</h4>
</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-12">
<div id="addnotiz">
<?php $this->load->view('system/infocenter/addNotiz.php'); ?>
</div>
<div id="notizen">
<?php $this->load->view('system/infocenter/notizen.php'); ?>
</div>
</div>
</div> <!-- ./row -->
</div> <!-- ./panel-body -->
</div> <!-- ./panel -->
</div> <!-- ./main column -->
</div> <!-- ./main row -->
</section>
</div> <!-- ./container-fluid-->
</div> <!-- ./page-wrapper-->
</div> <!-- ./wrapper -->
<button id="scrollToTop" title="Go to top"><i class="fa fa-chevron-up"></i></button>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,49 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Info Center',
'jquery' => true,
'jqueryui' => true,
'jquerycheckboxes' => true,
'bootstrap' => true,
'fontawesome' => true,
'sbadmintemplate' => true,
'tablesorter' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'phrases' => array(
'person' => array('vorname', 'nachname'),
'global' => array('mailAnXversandt'),
'ui' => array('bitteEintragWaehlen')
),
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterZgv.css'),
'customJSs' => array('public/js/bootstrapper.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
ZGV Überprüfung
</h3>
</div>
</div>
<div>
<?php $this->load->view('system/infocenter/infocenterZgvUeberpruefungData.php'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,75 @@
<?php
$APP = '\'infocenter\'';
$INTERESSENT_STATUS = '\'Interessent\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$uid = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
$oeKurz = $rechte->getOEkurzbz('lehre/zgvpruefung');
$oeKurz = '\''. implode('\',\'', $oeKurz) . '\'';
$query = '
SELECT
ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
sg.kurzbzlang AS "Studiengang",
zgvstatus.status as "Status"
FROM public.tbl_zgvpruefungstatus_status zgvstatus
JOIN public.tbl_zgvpruefung zgv USING (zgvpruefung_id)
JOIN public.tbl_prestudent ps USING (prestudent_id)
JOIN public.tbl_person p USING(person_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE oe_kurzbz IN ('. $oeKurz .')
AND zgvstatus.datum IN (
SELECT MAX(zgvstatus.datum)
FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id)
ORDER BY ps.prestudent_id
';
$filterWidgetArray = array(
'query' => $query,
'app' => 'infocenter',
'datasetName' => 'zgvUeberpruefung',
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'lehre/zgvpruefung',
'datasetRepresentation' => 'tablesorter',
'additionalColumns' => array('Details'),
'hideOptions' => true,
'columnsAliases' => array(
),
'formatRow' => function($datasetRaw) {
/* NOTE: Dont use $this here for PHP Version compatibility */
$datasetRaw->{'Details'} = sprintf(
'<a href="%s?prestudent_id=%s&origin_page=%s&fhc_controller_id=%s&prev_filter_id=%s">Details</a>',
site_url('system/infocenter/InfoCenter/showZGVDetails'),
$datasetRaw->{'PreStudentID'},
'ZGVUeberpruefung',
(isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''),
(isset($_GET['filter_id']) ? $_GET['filter_id'] : '')
);
switch ($datasetRaw->{'Status'})
{
case 'accepted' :
$datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvErfuellt');
break;
case 'rejected' :
$datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvNichtErfuellt');
break;
case 'accepted_pruefung' :
$datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvErfuelltPruefung');
break;
}
return $datasetRaw;
},
);
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
?>
@@ -259,7 +259,7 @@
echo $this->widgetlib->widget(
'Zgvmaster_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code),
array('name' => 'zgvmas', 'id' => 'zgvmas')
array('name' => 'zgvmas', 'id' => 'zgvmas_'.$zgvpruefung->prestudent_id)
); ?>
</div>
</div>
@@ -272,7 +272,8 @@
?>
<input type="text" class="form-control"
value="<?php echo $zgvpruefung->zgvmaort ?>"
name="zgvmaort">
name="zgvmaort"
id="zgvmaort_<?php echo $zgvpruefung->prestudent_id ?>">
<?php endif; ?>
</div>
</div>
@@ -288,7 +289,8 @@
<input type="text"
class="dateinput form-control"
value="<?php echo $zgvmadatum ?>"
name="zgvmadatum">
name="zgvmadatum"
id="zgvmadatum_<?php echo $zgvpruefung->prestudent_id ?>">
<?php endif; ?>
</div>
</div>
@@ -301,22 +303,31 @@
echo $this->widgetlib->widget(
'Nation_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code),
array('name' => 'zgvmanation', 'id' => 'zgvmanation')
array('name' => 'zgvmanation', 'id' => 'zgvmanation_'.$zgvpruefung->prestudent_id)
); ?>
</div>
</div>
</div>
<!-- show only master zgv if master studiengang - end -->
<?php endif; ?>
<?php if ($infoonly) : ?>
<span class="zgvStatusText" id="zgvStatusText_<?php echo $zgvpruefung->prestudent_id ?>" <?php (!(isset($zgvpruefung->statusZGV))) ?: print_r('data-info="need"')?>>
</span>
<?php endif; ?>
</form>
<?php if (!$infoonly): ?>
<div class="row">
<div class="col-xs-6 text-left">
<div class="col-xs-8 text-left zgvBearbeitungButtons" id="zgvBearbeitungButtons_<?php echo $zgvpruefung->prestudent_id ?>">
<button type="button" class="btn btn-default zgvUebernehmen" id="zgvUebernehmen_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'letzteZgvUebernehmen') ?>
</button>
<button class="btn btn-default zgvRueckfragen" id="zgvRueckfragen_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'zgvRueckfragen') ?>
</button>
<span class="zgvStatusText" id="zgvStatusText_<?php echo $zgvpruefung->prestudent_id ?>" <?php (!(isset($zgvpruefung->statusZGV))) ?: print_r('data-info="need"')?>>
</span>
</div>
<div class="col-xs-6 text-right">
<div class="col-xs-4 text-right">
<button type="submit" class="btn btn-default saveZgv" id="zgvSpeichern_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('ui', 'speichern') ?>
</button>
@@ -344,7 +355,7 @@
<?php
//Prestudenten cannot be abgewiesen or freigegeben if already done
if (!$infoonly) :
if (!$infoonly || (isset($zgvpruefung->prestudentstatus->status_kurzbz) && in_array($zgvpruefung->prestudentstatus->status_kurzbz, ['Bewerber', 'Wartender']))) :
?>
<div class="panel-footer solidtop">
<div class="row">
@@ -368,70 +379,36 @@
</button>
</span>
</div>
<div class="modal fade absageModal" id="absageModal_<?php echo $zgvpruefung->prestudent_id ?>"
tabindex="-1"
role="dialog"
aria-labelledby="absageModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button"
class="close"
data-dismiss="modal"
aria-hidden="true">
&times;
</button>
<h4 class="modal-title"
id="absageModalLabel"><?php echo $this->p->t('infocenter', 'absageBestaetigen') ?></h4>
</div>
<div class="modal-body">
<?php echo $this->p->t('infocenter', 'absageBestaetigenTxt') ?>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
data-dismiss="modal">
<?php echo $this->p->t('ui', 'abbrechen') ?>
</button>
<button class="btn btn-primary saveAbsage" id="saveAbsage_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'interessentAbweisen') ?>
</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
</div>
</div><!-- /.column-absage -->
<?php
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
{
$disabled = $disabledStg = 'disabled';
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
}
<?php
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
{
$disabled = $disabledStg = 'disabled';
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
}
if ($studiengangtyp !== 'b')
{
$disabled = 'disabled';
$disabledTxt = $this->p->t('infocenter', 'nurBachelorFreigeben');
if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm')
{
$disabled = 'disabled';
$disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
{
$disabledStg = 'disabled';
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorFreigeben');
}
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
{
$disabledStg = 'disabled';
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
}
?>
}
if (!$infoonly) :
?>
<div class="col-lg-8 text-right">
<div class="form-inline">
<div class="input-group frgstatusgrselect" id="frgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
<select name="frgstatusgrund"
class="d-inline float-right"
<?php echo $disabledStg ?>
<?php echo $disabledStg ?>
required>
<option value="null"
selected="selected"><?php echo ucfirst($this->p->t('ui', 'freigabeart')) . '...' ?>
@@ -441,11 +418,11 @@
<?php endforeach ?>
</select>
<span class="input-group-btn">
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg ?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
data-toggle="tooltip" title="<?php echo $disabledStgTxt ?>">
<?php echo $this->p->t('ui', 'freigabeAnStudiengang') ?>
</button>
</span>
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg ?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
data-toggle="tooltip" title="<?php echo $disabledStgTxt ?>">
<?php echo $this->p->t('ui', 'freigabeAnStudiengang') ?>
</button>
</span>
</div>
<div class="input-group" id="igrfrgbtn">
<button type="button" id="freigabebtn_<?php echo $zgvpruefung->prestudent_id ?>" class="btn btn-default freigabebtn" <?php echo $disabled ?>
@@ -492,6 +469,7 @@
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
<?php endif; ?>
</div><!-- /.row -->
</div><!-- /.panel-footer -->
<?php elseif (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz === 'Interessent'): ?>
@@ -508,9 +486,66 @@
</label>
</div>
</div><!-- /.row -->
<div class="row">
<div class="col-lg-4 text-left">
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
<select name="absgstatusgrund"
class="d-inline float-right"
required>
<option value="null"
selected="selected"><?php echo ucfirst($this->p->t('infocenter', 'absagegrund')) . '...' ?>
</option>
<?php foreach ($abwstatusgruende as $statusgrund): ?>
<option value="<?php echo $statusgrund->statusgrund_id ?>"><?php echo $statusgrund->bezeichnung_mehrsprachig[0] ?></option>
<?php endforeach ?>
</select>
<span class="input-group-btn">
<button type="button"
class="btn btn-default absageBtn" id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('ui', 'absagen') ?>
</button>
</span>
</div>
</div>
</div>
</div><!-- /.panel-footer -->
<?php endif; //end if infoonly
?>
<?php endif; ?>
<div class="modal fade absageModal" id="absageModal_<?php echo $zgvpruefung->prestudent_id ?>"
tabindex="-1"
role="dialog"
aria-labelledby="absageModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button"
class="close"
data-dismiss="modal"
aria-hidden="true">
&times;
</button>
<h4 class="modal-title"
id="absageModalLabel"><?php echo $this->p->t('infocenter', 'absageBestaetigen') ?></h4>
</div>
<div class="modal-body">
<?php echo $this->p->t('infocenter', 'absageBestaetigenTxt') ?>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
data-dismiss="modal">
<?php echo $this->p->t('ui', 'abbrechen') ?>
</button>
<button class="btn btn-primary saveAbsage" id="saveAbsage_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'interessentAbweisen') ?>
</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
</div><!-- /.div collapse -->
</div><!-- /.panel -->
<?php
@@ -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']))
+1 -1
View File
@@ -25,7 +25,7 @@
</tr>
<tr style="height:10%;" >
<td align="center" valign="bottom">
<div style="color:grey">Powered by <a href="http://www.fhcomplete.org" target="blank">FH Complete</a></div>
<div style="color:grey">Powered by <a href="http://www.fhcomplete.info" target="blank">FH Complete</a></div>
<br><br>
</td>
</tr>
+1 -1
View File
@@ -69,7 +69,7 @@ if(isset($_GET['login']))
</tr>
<tr style="height:10%;" >
<td align="center" valign="bottom">
<div style="color:grey">Powered by <a href="http://www.fhcomplete.org" target="blank">FH Complete</a></div>
<div style="color:grey">Powered by <a href="http://www.fhcomplete.info" target="blank">FH Complete</a></div>
<br><br>
</td>
</tr>
+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
@@ -12,10 +12,13 @@
* 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>,
*
* Authors:
* Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
* Manuela Thamer <manuela.thamer@technikum-wien.at>
*/
require_once ('../../../../config/cis.config.inc.php');
require_once ('../../../../config/global.config.inc.php');
@@ -306,6 +309,8 @@ foreach ($noten_obj->result as $row)
{
if(typeof(typ)=='undefined')
typ = 'Termin2';
var nn = document.getElementById(uid+"_nn").innerHTML;
var vn = document.getElementById(uid+"_vn").innerHTML;
var str = " <form name='nachpruefung_form'> <table style='width: 95%'>";
str += "<tr><td colspan='2' align='right'><a href='#' onclick='closeDiv();'>X</a></td></tr>";
@@ -314,7 +319,7 @@ foreach ($noten_obj->result as $row)
anlegendiv.style.top = y+"px";
var x = getOffset('x'); x = x+300;
anlegendiv.style.left = x+"px";
str += "<tr><td colspan='2'><b><?php echo $p->t('benotungstool/pruefungAnlegenFuer');?> "+uid+":</b></td></tr>";
str += "<tr><td colspan='2'><b><?php echo $p->t('benotungstool/pruefungAnlegenFuer');?> "+nn+" "+vn+":</b></td></tr>";
str += "<tr><td><?php echo $p->t('global/datum');?>:</td>";
str += "<td><input type='hidden' name='uid' value='"+uid+"'>";
str += "<input type='hidden' name='le_id' value='"+lehreinheit_id+"'>";
@@ -1166,8 +1171,8 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG
$htmlstring .= '<tr class="liste' . ($i % 2) . '">
<td><a href="mailto:' . $uid . '@' . DOMAIN . '"><img src="../../../../skin/images/button_mail.gif"></a></td>
<td>' . $db->convert_html_chars($uid) . '</td>
<td>' . $db->convert_html_chars($data['nachname']) . '</td>
<td>' . $db->convert_html_chars($data['vorname']) . '</td>';
<td id= '. $uid. "_nn". '>' . $db->convert_html_chars($data['nachname']) . '</td>
<td id= '. $uid. "_vn". '>' . $db->convert_html_chars($data['vorname']) . '</td>';
// Bereits eingetragene Note ermitteln
if ($lvgesamtnote = new lvgesamtnote($lvid, $uid, $stsem))
+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
+17
View File
@@ -44,6 +44,7 @@ require_once('../../../include/addon.class.php');
require_once('../../../include/gruppe.class.php');
require_once('../../../include/adresse.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/bisverwendung.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -271,6 +272,22 @@ if (!$ansicht)
}
if (!$ansicht)
{
if ($is_employee)
{
$verwendung = new bisverwendung();
if($verwendung->getLastVerwendung($uid))
{
if (!$verwendung->hauptberuflich)
{
echo 'Hauptberuf: '. $verwendung->hauptberuf;
}
}
echo "<br><br>";
}
}
if (!$ansicht)
{
$adresse = new adresse();
+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, $uid))
{
continue;
}
+71 -41
View File
@@ -18,6 +18,7 @@
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
* Rudolf Hangl <rudolf.hangl@technikum-wien.at> and
* Manuela Thamer <manuela.thamer@technikum-wien.at>
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/functions.inc.php');
@@ -28,6 +29,13 @@ require_once('../../../include/benutzer.class.php');
require_once('../../../include/mitarbeiter.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/addon.class.php');
require_once('../../../include/mail.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/globals.inc.php');
require_once('../../../include/sprache.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
@@ -43,16 +51,16 @@ else
{
//Bis August das aktuelle Jahr anzeigen
//Ab September das naechste
if(date('m')<9)
if (date('m') < 9)
$year = date('Y');
else
$year = date('Y')+1;
$year = date('Y') + 1;
}
if(isset($_GET['uid']))
$uid=$_GET['uid'];
if (isset($_GET['uid']))
$uid = $_GET['uid'];
else
$uid='';
$uid = '';
$datum_obj = new datum();
@@ -98,50 +106,74 @@ echo '
$mitarbeiter = new mitarbeiter();
$mitarbeiter->getUntergebene($user);
if(count($mitarbeiter->untergebene)==0 && !$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid'))
if (count($mitarbeiter->untergebene) == 0 && !$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid'))
die('Es sind Ihnen keine Mitarbeiter zugeteilt für die sie den Urlaub freigeben dürfen');
$untergebene = '';
foreach ($mitarbeiter->untergebene as $row)
{
if($untergebene!='')
$untergebene.=',';
if ($untergebene != '')
$untergebene .= ',';
$untergebene .= $db->db_add_param($row);
}
if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid'))
if ($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid'))
{
if($untergebene!='')
$untergebene.=',';
if ($untergebene != '')
$untergebene .= ',';
$untergebene .= $db->db_add_param($uid);
}
$qry = "SELECT * FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid in($untergebene)";
$mitarbeiter = array();
if($result = $db->db_query($qry))
if ($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
while ($row = $db->db_fetch_object($result))
{
$mitarbeiter[$row->uid]['vorname']=$row->vorname;
$mitarbeiter[$row->uid]['nachname']=$row->nachname;
$mitarbeiter[$row->uid]['titelpre']=$row->titelpre;
$mitarbeiter[$row->uid]['titelpost']=$row->titelpost;
$mitarbeiter[$row->uid]['vorname'] = $row->vorname;
$mitarbeiter[$row->uid]['nachname'] = $row->nachname;
$mitarbeiter[$row->uid]['titelpre'] = $row->titelpre;
$mitarbeiter[$row->uid]['titelpost'] = $row->titelpost;
}
}
if($uid!='' && !isset($mitarbeiter[$uid]) && $uid!=$user && !$rechte->isBerechtigt('admin'))
if ($uid != '' && !isset($mitarbeiter[$uid]) && $uid != $user && !$rechte->isBerechtigt('admin'))
die('Sie haben keine Berechtigung fuer diesen Mitarbeiter');
//Freigeben eines Urlaubes
if(isset($_GET['action']) && $_GET['action']=='freigabe')
if (isset($_GET['action']) && $_GET['action'] == 'freigabe')
{
$zeitsperre = new zeitsperre();
if($zeitsperre->load($_GET['id']))
if ($zeitsperre->load($_GET['id']))
{
if(isset($mitarbeiter[$zeitsperre->mitarbeiter_uid]))
if (isset($mitarbeiter[$zeitsperre->mitarbeiter_uid]))
{
$zeitsperre->freigabeamum = date('Y-m-d H:i:s');
$zeitsperre->freigabevon = $user;
if(!$zeitsperre->save(false))
if (!$zeitsperre->save(false))
{
echo "<b>Fehler bei der Freigabe: $zeitsperre->errormsg</b>";
}
//Bestätigungsmail an Mitarbeiter*in
$to = $zeitsperre->mitarbeiter_uid. '@'.DOMAIN;
$person = new person();
$fullNameVG = $person->getFullNameFromBenutzer($user);
$fullNameMA = $person->getFullNameFromBenutzer($zeitsperre->mitarbeiter_uid);
$from = 'noreply@'.DOMAIN;
$subject = $p->t('urlaubstool/urlaubsfreigabe'). date("d.m.Y", strtotime($zeitsperre->vondatum)). " ".
$p->t('urlaubstool/bis'). " ". date("d.m.Y", strtotime($zeitsperre->bisdatum));
$text = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n";
$text .= $p->t('urlaubstool/urlaubVon')." ".date("d.m.Y", strtotime($zeitsperre->vondatum))." ".
$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($zeitsperre->bisdatum));
$text .= $p->t('urlaubstool/urlaubBis', array($fullNameVG));
$text .= "\n". "\n". $p->t('urlaubstool/sieKoennenDiesenUnterFolgenderAdresseEinsehen');
$text .= "\n". APP_ROOT. 'cis/private/profile/urlaubstool.php';
$mail = new mail($to, $from, $subject, $text);
if ($mail->send())
{
echo "<span style='color:green;'>".$p->t('urlaubstool/bestaetigungsmailWurdeVersandt', array($fullNameMA))."</span>";
}
}
else
{
@@ -152,40 +184,38 @@ if(isset($_GET['action']) && $_GET['action']=='freigabe')
{
echo '<b>Die Zeitsperre konnte nicht geladen werden</b>';
}
}
//Monat zeichenen
//Monat zeichnen
function draw_monat($monat)
{
global $untergebene, $mitarbeiter, $year, $datum_obj, $uid;
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
echo '<td style="border: 1px solid black; height:100px; width: 30%" valign="top">';
echo '<center><b>';
echo date('F',mktime(0,0,0,$monat,1,date('Y')));
echo " ".($monat>8?$year-1:$year);
echo date('F', mktime(0,0,0,$monat,1,date('Y')));
echo " ".($monat > 8?$year-1:$year);
echo '</b></center>';
//Alle Anzeigen bei denen das von- oder bisdatum in dieses monat fallen
$qry = "SELECT * FROM campus.tbl_zeitsperre WHERE zeitsperretyp_kurzbz='Urlaub'
AND
(
(date_part('month', vondatum)='$monat' AND date_part('year', vondatum)='".($monat>8?$year-1:$year)."')
(date_part('month', vondatum)='$monat' AND date_part('year', vondatum)='".($monat > 8?$year - 1:$year)."')
OR
(date_part('month', bisdatum)='$monat' AND date_part('year', bisdatum)='".($monat>8?$year-1:$year)."')
(date_part('month', bisdatum)='$monat' AND date_part('year', bisdatum)='".($monat > 8?$year - 1:$year)."')
)";
if($uid=='')
$qry.=" AND mitarbeiter_uid in($untergebene)";
if($uid == '')
$qry.= " AND mitarbeiter_uid in($untergebene)";
else
$qry.=" AND mitarbeiter_uid=".$db->db_add_param($uid);
$qry.= " AND mitarbeiter_uid=". $db->db_add_param($uid);
$qry.="ORDER BY vondatum, mitarbeiter_uid";
if($result = $db->db_query($qry))
if ($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
while ($row = $db->db_fetch_object($result))
{
$vertretung = new benutzer($row->vertretung_uid);
$freigabe='';
@@ -207,7 +237,7 @@ function draw_monat($monat)
}
//Jahr mit Pfeilen zum blaettern anzeigen
if($uid!='')
if ($uid!='')
{
echo '<table width="100%"><tr><td style="width:33%">';
echo "<a href='".$_SERVER['PHP_SELF']."?year=$year' class='Item'>Alle Mitarbeiter anzeigen</a><br></td>";
@@ -232,16 +262,16 @@ echo '<br>';
//Tabelle mit den Monaten ausgeben
echo '<table cellspacing=0 width="100%" style="border: 1px solid black;"><tr>';
$monat=9;
for($i=0;$i<12;$i++)
for($i = 0;$i < 12;$i++)
{
if($i%3==0)
if ($i%3 == 0)
{
echo '</tr><tr>';
}
draw_monat($monat);
$monat++;
if($monat>12)
$monat=1;
if ($monat > 12)
$monat = 1;
}
echo '</tr></table>
+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 -3
View File
@@ -219,7 +219,8 @@ function getUserAmpelData($user)
'verfallszeit' => $row->verfallszeit,
'beschreibung' => $row->beschreibung,
'abgelaufen' => $abgelaufen,
'active' => $active);
'active' => $active,
'dauerampel' => $row->dauerampel);
}
return array($user_ampel_arr, $cnt_ueberfaellig);
@@ -458,8 +459,10 @@ function typeWrite(span){
<?php echo $user_ampel['kurzbz'] ?>
</a>
</h5>
<small <?php if ($user_ampel['status'] == 'rot' && !$user_ampel['abgelaufen']) echo 'style="color: red; font-weight : bold;"'?>><?php echo $p->t('global/faelligAm') . ' '; echo date('d.m.Y', strtotime($user_ampel['deadline'])) ?></small>
</div>
<?php if ($user_ampel['dauerampel'] == false): ?>
<small <?php if ($user_ampel['status'] == 'rot' && !$user_ampel['abgelaufen']) echo 'style="color: red; font-weight : bold;"'?>><?php echo $p->t('global/faelligAm') . ' '; echo date('d.m.Y', strtotime($user_ampel['deadline'])) ?></small>
<?php endif; ?>
</div>
<div class="col-xs-2">
<?php echo $user_ampel['status_ampel'] ?>
</div>
@@ -489,11 +492,13 @@ function typeWrite(span){
<div class="panel-body" style="font-size: 12px;">
<?php echo $user_ampel['beschreibung'][$sprache] ?>
<p><br></p>
<?php if ($user_ampel['dauerampel'] == false): ?>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) . '?ampel_id='. urlencode($user_ampel['ampel_id']) . '&type=bestaetigen'; ?>">
<button type="type" type="submit" class="btn btn-default pull-right"
<?php if ($user_ampel['abgelaufen'] || $user_ampel['bestaetigt']) echo 'disabled data-toggle="tooltip" data-placement="top" title="' . $p->t('tools/ampelBestaetigtAbgelaufen'). '"'?>><?php echo $p->t('global/bestaetigen') ?>
</button>
</form>
<?php endif; ?>
</div>
</div>
</div>
+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);

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