mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 18:02:18 +00:00
Compare commits
546 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e022f75943 | |||
| b00337973a | |||
| 73ce635188 | |||
| 0ba11652e1 | |||
| d8804730ba | |||
| e9b4116bee | |||
| 6ff8df6ac3 | |||
| b6a373b9d4 | |||
| cb855e7864 | |||
| 9eae959b15 | |||
| 2c8c3b2141 | |||
| cfa7ce2c08 | |||
| f918d0e188 | |||
| c8919f2878 | |||
| 524b954abc | |||
| 8822a589c9 | |||
| 78322c22f4 | |||
| 6b4a47c9db | |||
| c8cfc49af9 | |||
| d87b667f0a | |||
| cf82a6d28a | |||
| 023994b12c | |||
| 6267a1bc37 | |||
| c2527e1b13 | |||
| 3bf03a9869 | |||
| cdc08b88f8 | |||
| e4aa42ad58 | |||
| 143053b893 | |||
| 05a06de109 | |||
| e3a7fc2f0c | |||
| e9705e69e7 | |||
| bd153921c6 | |||
| a10cacaf4b | |||
| 54593512af | |||
| f16ea874db | |||
| 1c0de3ec45 | |||
| cee6156646 | |||
| 0ee6485ece | |||
| 25124e0354 | |||
| 5d48b0aad0 | |||
| 752a891c6b | |||
| 2bef17d65b | |||
| b1ce67ebd5 | |||
| 07cb19ccd1 | |||
| 2a51222e36 | |||
| dc45658684 | |||
| a9c5533959 | |||
| 3dd67b90b2 | |||
| 6246312ce5 | |||
| 36d162d2d7 | |||
| 745ecf4711 | |||
| 36507959ac | |||
| 67aa887981 | |||
| d4d84a93ba | |||
| f4ddbd3084 | |||
| 84950649c4 | |||
| 537ad8ab88 | |||
| 7314352e79 | |||
| 35366efdad | |||
| 3fca876f8d | |||
| e76dead570 | |||
| cea673fa82 | |||
| a0b86b6207 | |||
| e5a6af7eb3 | |||
| 8b3df55719 | |||
| ab799cb54f | |||
| a3adce8776 | |||
| 6376853734 | |||
| 377ad0eeec | |||
| 934248aa0e | |||
| 8fa40a843b | |||
| 212261a38e | |||
| 6a3fb14ea6 | |||
| ed9bfcdf2d | |||
| 2d440585f4 | |||
| eb709e7257 | |||
| 42ff593cb1 | |||
| c71c5ae126 | |||
| 6d0613e5c8 | |||
| 6595df95ad | |||
| 83a0cbf380 | |||
| f0c57c78ae | |||
| 5b80ab2726 | |||
| ce07771802 | |||
| 60d240258c | |||
| 31f905bc74 | |||
| 5e21b5cda8 | |||
| 043b25c2f7 | |||
| 5aacf9f9b2 | |||
| 19d16809d4 | |||
| c9ec4cb674 | |||
| 3171ec2c42 | |||
| ccffdf9b7f | |||
| cdfaf5b90b | |||
| 3ba88b43dd | |||
| 49363e893b | |||
| e157945ae9 | |||
| 472803dbec | |||
| 4a2c90ac60 | |||
| 8a870fb4c8 | |||
| a6b53b8fd7 | |||
| e056dcd3c2 | |||
| 5330e2b250 | |||
| 9a0df43526 | |||
| 6550fb6301 | |||
| 36f52cf3cc | |||
| 39668890f2 | |||
| 5ac2c1f9a6 | |||
| 1e013e371d | |||
| f52d3a455c | |||
| c1ff4c2d53 | |||
| 91f1c2b5e8 | |||
| f05493d3f3 | |||
| 0285e3fc92 | |||
| 847529d5aa | |||
| eba394e170 | |||
| fc9d1ce24b | |||
| c220bddadc | |||
| ce302750f8 | |||
| 45b150f0d4 | |||
| 0d4bf432e2 | |||
| ffa7abdf5a | |||
| 2c6d8937f6 | |||
| 475f57d10f | |||
| 4b8bf41837 | |||
| cefe34a68f | |||
| 6f885fb924 | |||
| 0681049122 | |||
| da3396e816 | |||
| 4ec3172ccd | |||
| 7a80a1f1cd | |||
| 9121488151 | |||
| d0b76aaac5 | |||
| 4f26a831f4 | |||
| 73c2319933 | |||
| d21773bad5 | |||
| 062ff74b03 | |||
| 44be64dcca | |||
| d29d80fc59 | |||
| 3075277ca4 | |||
| 27549c1a70 | |||
| 03feb6bd44 | |||
| d490eb4323 | |||
| c0b07ac1d2 | |||
| 898562e742 | |||
| 5fff866363 | |||
| 7c02e0247d | |||
| 0b5ae2df9c | |||
| 935519d1c3 | |||
| 77c06516f5 | |||
| 05a3f787e4 | |||
| d5ef17d66a | |||
| b5be5be59d | |||
| 5c339ce448 | |||
| c9bd10c3d0 | |||
| 4dc0bc3aec | |||
| dda82e32f1 | |||
| 35f1b00d7a | |||
| e4f6496387 | |||
| 6ddc912cb3 | |||
| 197accbb02 | |||
| ada7cdfb58 | |||
| a7482425ef | |||
| f657ffe59d | |||
| 142ea9a1f4 | |||
| 9699de8c33 | |||
| 61fbb60492 | |||
| bc7e3c5cc5 | |||
| 3281e832ce | |||
| f3af4fd783 | |||
| abcbb0d81c | |||
| a1f4c90deb | |||
| 08237bdb7f | |||
| 72b076c785 | |||
| 456a4e2057 | |||
| 1f02506eaf | |||
| b29621354f | |||
| 07f483f3bf | |||
| 88dbd77a95 | |||
| e254dfba54 | |||
| c2f74b1bba | |||
| 96ba02bd69 | |||
| 170b2485d3 | |||
| 45a78b7700 | |||
| f681827e5d | |||
| 42d2f45561 | |||
| acdfdc028b | |||
| 84e7d95e34 | |||
| 48105425fc | |||
| 5bc0f544f9 | |||
| 38919da730 | |||
| 642561a67d | |||
| 3644cc690c | |||
| 5cdc7f9542 | |||
| 3e7f75b43f | |||
| a6989fff11 | |||
| c54e934db9 | |||
| d66fc6e493 | |||
| eb1dabfc03 | |||
| 1a75666f01 | |||
| 2493cc57d4 | |||
| 9120268290 | |||
| 2850d0e5d8 | |||
| 7f713670b5 | |||
| 6c6a4f6cc2 | |||
| 803076d7d2 | |||
| 047129de67 | |||
| c169aec155 | |||
| 376f413d2a | |||
| 9b57248007 | |||
| 96bdafbda8 | |||
| 016a9554b9 | |||
| 0bd89067f8 | |||
| b7cb8b27ce | |||
| e4aca8c7e3 | |||
| 43f55ce52b | |||
| 1599fedfce | |||
| 3221252f70 | |||
| d2c4dd79d5 | |||
| 0c429984b9 | |||
| e791e3267f | |||
| 3359e2e972 | |||
| d4ef17c183 | |||
| 0c32ecac11 | |||
| 8f2ef521e7 | |||
| 23e502f02e | |||
| 17f085d352 | |||
| a68dfc1c6c | |||
| 6ae8f00066 | |||
| a00009e49f | |||
| 4e0dfbf28a | |||
| 10441baff3 | |||
| 287cddf926 | |||
| 989772402d | |||
| 1113b833bd | |||
| 9bf8d58ab2 | |||
| 711bac0f6c | |||
| fbb7b45b69 | |||
| 4c0c6aa6cd | |||
| 95c5a9c475 | |||
| 2ef2a906c3 | |||
| 73525c94ab | |||
| 3db9b9abee | |||
| e33eb2e9a9 | |||
| fb7835de57 | |||
| 5da754c9db | |||
| 5b546d25a8 | |||
| 6bb9c77ca1 | |||
| edf657fdb9 | |||
| 9ba6f3b538 | |||
| 9cbcec7231 | |||
| 9677a5a4fd | |||
| 8bd148f7e5 | |||
| 95c2e4bf9c | |||
| 54286a7e6c | |||
| d9cbea680e | |||
| 8086501d04 | |||
| 581a4c33a4 | |||
| cb4f22141d | |||
| 4d041023a8 | |||
| f208fbcd4b | |||
| d69083eba2 | |||
| b44853d536 | |||
| ad9de97a8c | |||
| eb95421ff9 | |||
| 20413b1b03 | |||
| 577d0f1eb5 | |||
| 935b370166 | |||
| 0993b94507 | |||
| a02d581d0a | |||
| 94d335600c | |||
| 734db4a2a8 | |||
| 241fb34b23 | |||
| 1ca22970a9 | |||
| 86a065d0d6 | |||
| fec8fbb6d4 | |||
| 3366f091dd | |||
| 4d81f91840 | |||
| 6522def7a2 | |||
| acec92fa2b | |||
| bf1686e253 | |||
| 38220ab772 | |||
| da4e913a38 | |||
| 2973c9e856 | |||
| bff6307a62 | |||
| d44c526ba4 | |||
| 6dea79180c | |||
| ea45ce9934 | |||
| c23a3bdac9 | |||
| eaf902c528 | |||
| 41f8a0e3b3 | |||
| c0843e9506 | |||
| 3cbb1b5c95 | |||
| c82ebaf678 | |||
| 81151025da | |||
| d1537df896 | |||
| 3eecd74b1f | |||
| 6e689ce657 | |||
| 8a3096edf1 | |||
| a39256d21d | |||
| 544def7f5a | |||
| c69188dffe | |||
| 17ae1b144c | |||
| 2a59d2464b | |||
| 77774e8cec | |||
| 00799f2f64 | |||
| 25400d8b5f | |||
| 494cf1f688 | |||
| 8c666ceef2 | |||
| d84da96669 | |||
| fd79551f00 | |||
| 253ffa7e93 | |||
| be5ff3f122 | |||
| c8ceacc972 | |||
| 071a6a4ee6 | |||
| 4a8fa95a3a | |||
| 1f88bfae40 | |||
| cfc3b4f985 | |||
| e6da4b2e2d | |||
| e9664c179a | |||
| 52450561fd | |||
| 5abac91058 | |||
| fc8df1b10d | |||
| d380e6ac49 | |||
| a3c33ed385 | |||
| 5a8c779bcd | |||
| 110f05b91c | |||
| 5e1bbfe718 | |||
| e780a3e505 | |||
| 0affbf4e41 | |||
| 5109828772 | |||
| 39016b873f | |||
| 1c0c8e9ad4 | |||
| 9790fc650b | |||
| ec16354594 | |||
| 8b6f0f56af | |||
| b13fb0cda8 | |||
| 5235915d6a | |||
| b8046aeccf | |||
| 297c96c3e5 | |||
| 8fc338ccb4 | |||
| da3720e65d | |||
| a0658a61c3 | |||
| a218b36323 | |||
| fcf15c410e | |||
| e6ce33a302 | |||
| c6f6a626d3 | |||
| 5b3daa76df | |||
| 1ea521e858 | |||
| 907ecca333 | |||
| 70d02e25f9 | |||
| 8ba7744acb | |||
| f3feb53438 | |||
| 02e4004300 | |||
| ea7d0692b9 | |||
| 106cbe8194 | |||
| aff6e2ed8a | |||
| ce794d0e54 | |||
| 14d1762c9f | |||
| bd293f3b3a | |||
| c3f24f3038 | |||
| 8d09ee7299 | |||
| 6a37c71cfc | |||
| 35009097f1 | |||
| 697e5057cf | |||
| 3fb2c3d387 | |||
| 8a75bc9fdd | |||
| db10f78505 | |||
| 82780e9626 | |||
| e06a6768a4 | |||
| 3f3d7aa7d7 | |||
| 7d0ff4fcee | |||
| 5b77a5d08f | |||
| aefd0842db | |||
| 1b00ae78b4 | |||
| 7dc21fde5a | |||
| 0da2c6a74c | |||
| 0bf0c2a152 | |||
| 71b8122a20 | |||
| 2359592032 | |||
| 0528ae3eb9 | |||
| dc98b766c9 | |||
| fd5b68d3b8 | |||
| 8a03ccab5d | |||
| 99db4ec3ce | |||
| 47c8432faf | |||
| 9e5b03b2dc | |||
| 97d86cc702 | |||
| 3a285c5672 | |||
| 9a0ea02e0c | |||
| a09abfd70c | |||
| 114ac7a69e | |||
| 1bd66d0ee2 | |||
| f0ef091c5f | |||
| 046f807788 | |||
| 4ed786d65a | |||
| 964bd40c14 | |||
| 5c1c9f1df4 | |||
| 943961127f | |||
| 403304e1a7 | |||
| 360aec41ee | |||
| 8d26cc9a86 | |||
| 1a050adea4 | |||
| b5dd85f2a6 | |||
| adcb865cbf | |||
| 0c40452b4d | |||
| 9e0febdff6 | |||
| 8441345d7a | |||
| f185c92db7 | |||
| c0952af290 | |||
| 407d8d9613 | |||
| 4df012798f | |||
| e04e584410 | |||
| 3ffc5c7d3f | |||
| 0edccc299c | |||
| 4e0fd56d99 | |||
| de5c67d2f1 | |||
| b6f5bc2703 | |||
| 0d546dc0c0 | |||
| 67c130f9c1 | |||
| aff838d3c3 | |||
| a1dfd3f598 | |||
| dc84c91dae | |||
| 85ec64876d | |||
| 091d921efa | |||
| b57a3ec90f | |||
| 5af134312c | |||
| 3116d4c7c9 | |||
| 98deb3d2a0 | |||
| 44e8bd57b0 | |||
| 78e4edd590 | |||
| 254dad8700 | |||
| 47f66644ef | |||
| 2454104cc3 | |||
| 57722553ec | |||
| 5cd163819d | |||
| 1fefffcab3 | |||
| 57c0f3020a | |||
| 04174d35f5 | |||
| fb29dc1e0e | |||
| 8309dfb3ca | |||
| e7d9d8859c | |||
| 6a9871c0d5 | |||
| 5dbad37416 | |||
| d62b1bead4 | |||
| 30960adf81 | |||
| c3ab40282b | |||
| 74c12372c8 | |||
| 7fdadc48cf | |||
| 095c11f167 | |||
| 7ed9266b0a | |||
| 33cc431267 | |||
| 15d15faf8a | |||
| 3cf6e338d7 | |||
| 47d7a4688f | |||
| 8109fd6757 | |||
| 47d09ec7eb | |||
| c33856ee50 | |||
| b5510f023e | |||
| a8227e1f91 | |||
| 32a174d836 | |||
| 442cd67d08 | |||
| c7605b2107 | |||
| 73688eec83 | |||
| d0d133b3ba | |||
| 9b6cb231c0 | |||
| 0738f28144 | |||
| 562fab9281 | |||
| 34560fe78b | |||
| 6e5c555a40 | |||
| 119d5d99df | |||
| 451e0e7843 | |||
| 1cf06681d3 | |||
| 798ff3db24 | |||
| 73a38a0835 | |||
| b31585af98 | |||
| 34e3756d74 | |||
| 9d2c004c6d | |||
| 232f261a76 | |||
| a1d2eb51a7 | |||
| 2103e78dcc | |||
| 594faabf0c | |||
| 60963c691b | |||
| 4cbbd662b6 | |||
| adb96ed33f | |||
| 56c958319d | |||
| 443caa91f2 | |||
| 4465fbc877 | |||
| 01032c63d3 | |||
| 2ceefabec9 | |||
| 6e37edd30b | |||
| d78308d43f | |||
| 7fe2f3ef39 | |||
| 14fa1b24ad | |||
| df667b1eec | |||
| c1e4278e71 | |||
| 4ced199e88 | |||
| 5802ca8ea2 | |||
| 6128a7ae6e | |||
| c485400142 | |||
| 08536d63df | |||
| f672cd2d53 | |||
| 3d274645ac | |||
| 14fbfc7860 | |||
| 16fb610b3f | |||
| 4183e7f4f7 | |||
| 49fb4d8afa | |||
| 85c6aa08fc | |||
| ad98fed84b | |||
| 82d7f4edd2 | |||
| a565b66751 | |||
| 612c339305 | |||
| e933cce0e8 | |||
| 2e8ed786f4 | |||
| 8173328c92 | |||
| e4f3139205 | |||
| 37884b1f7e | |||
| 2e44f58df9 | |||
| 6c857b7c24 | |||
| 9250485cb3 | |||
| 742c9fa857 | |||
| 8304b4a1ae | |||
| 2906c1803e | |||
| d35ee0c834 | |||
| 8b80f2226e | |||
| 4f1796ee9d | |||
| ebd9c2c0ba | |||
| 634401485a | |||
| 046994f14b | |||
| a5e0c9ca5a | |||
| 7ab2155d6a | |||
| 1be1d1c8e9 | |||
| 21e43d7a08 | |||
| 28b5761116 | |||
| d1d219cc2c | |||
| 4bcb2cc059 | |||
| 5267bc5d7a | |||
| ef69a1a2f3 | |||
| 37aa23ee1e | |||
| ebe5cbe797 | |||
| fc2845ad72 | |||
| 9f42beaeb3 | |||
| a37b81c57a | |||
| 7060fd81c9 | |||
| f1565fea85 | |||
| 2f2a5ea6f7 |
@@ -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,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)
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enable/Disable DBSkel procedure
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| DBSkel is disabled by default for security reasons.
|
||||
| You should enable DBSkel whenever you intend to use DBSkel
|
||||
|
|
||||
*/
|
||||
$config['dbskel_enabled'] = false;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| DBSkel mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is used to set the dbskel mode:
|
||||
| - dryrun: run without changing the database, useful for testing
|
||||
| - new: build a new database or if database is already present creates only new objects
|
||||
| - diff: like new, but it also remove object from database that are NOT present in configuration files
|
||||
|
|
||||
*/
|
||||
$config['dbskel_mode'] = 'dryrun';
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
$config['infocenter_studiengang_kz'] = '10021, 10027, 10002';
|
||||
@@ -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'
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class DBSkel extends CLI_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->load->library('DBSkelLib');
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the DBSkel procedure
|
||||
*/
|
||||
public function start($step = null, $selectedDirectories = null)
|
||||
{
|
||||
// If the DBSkel procedure fails then exit with an error
|
||||
// In this way it's possible to undestand from console what is the exit status of the procedure
|
||||
$this->dbskellib->start($step, $selectedDirectories) === true ? exit(0) : exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
$tableArray = array(
|
||||
'tbl_aktivitaet' => array(
|
||||
'aktivitaet_kurzbz' => array(
|
||||
'comment' => 'I guess this is the PK',
|
||||
'type' => 'character varying(16)',
|
||||
'null' => false
|
||||
),
|
||||
'beschreibung' => array(
|
||||
'comment' => 'none',
|
||||
'type' => 'character varying(256)',
|
||||
'null' => false,
|
||||
'default' => "'Test string'"
|
||||
),
|
||||
'sort' => array(
|
||||
'comment' => 'nope',
|
||||
'type' => 'integer',
|
||||
'default' => 1
|
||||
),
|
||||
'oe_kurzbz' => array(
|
||||
'comment' => 'uhm',
|
||||
'type' => 'character varying(32)'
|
||||
)
|
||||
),
|
||||
'comment' => 'Timesheet SLA Activity'
|
||||
);
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
|
||||
$constraintsArray = array(
|
||||
'pk_tbl_aktivitaet' => 'ALTER TABLE fue.tbl_aktivitaet ADD CONSTRAINT pk_tbl_aktivitaet PRIMARY KEY (aktivitaet_kurzbz)',
|
||||
'fk_projekt_oe' => 'ALTER TABLE fue.tbl_aktivitaet ADD CONSTRAINT fk_test FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit (oe_kurzbz)',
|
||||
'uk_beschreibung' => 'ALTER TABLE fue.tbl_aktivitaet ADD CONSTRAINT uk_beschreibung UNIQUE (beschreibung)',
|
||||
'testchk' => 'ALTER TABLE fue.tbl_aktivitaet ADD CONSTRAINT testchk CHECK (sort > 0)'
|
||||
);
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
SELECT 'Extra file' AS justatest;
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?php
|
||||
|
||||
$functionsArray = array();
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
-----------------------------------------------------
|
||||
-- Revokes all privileges from all granted users
|
||||
-----------------------------------------------------
|
||||
REVOKE ALL PRIVILEGES ON SCHEMA fue FROM vilesci;
|
||||
REVOKE ALL ON ALL TABLES IN SCHEMA fue FROM vilesci;
|
||||
REVOKE ALL ON ALL SEQUENCES IN SCHEMA fue FROM vilesci;
|
||||
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA fue FROM vilesci;
|
||||
|
||||
REVOKE ALL PRIVILEGES ON SCHEMA fue FROM web;
|
||||
REVOKE ALL ON ALL TABLES IN SCHEMA fue FROM web;
|
||||
REVOKE ALL ON ALL SEQUENCES IN SCHEMA fue FROM web;
|
||||
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA fue FROM web;
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
-- Gives the desired privileges to the chosen users (with great power comes great responsibility!)
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Schema privileges
|
||||
GRANT ALL ON SCHEMA fue TO vilesci;
|
||||
GRANT USAGE ON SCHEMA fue TO web;
|
||||
|
||||
-- Sequences privileges
|
||||
GRANT SELECT,UPDATE ON SEQUENCE fue.seq_projekt_dokument_projekt_dokument_id TO vilesci;
|
||||
GRANT SELECT,UPDATE ON SEQUENCE fue.seq_projekt_dokument_projekt_dokument_id TO web;
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
-- Create the schema if not exists
|
||||
CREATE SCHEMA IF NOT EXISTS fue;
|
||||
|
||||
-- Comment schema
|
||||
COMMENT ON SCHEMA fue IS 'Projectmanagement';
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
|
||||
$sequencesArray = array(
|
||||
'seq_projekt_dokument_projekt_dokument_id' =>
|
||||
'CREATE SEQUENCE fue.seq_projekt_dokument_projekt_dokument_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;',
|
||||
'seq_projekt_ressource_projekt_ressource_id' =>
|
||||
'CREATE SEQUENCE seq_projekt_ressource_projekt_ressource_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;',
|
||||
'seq_projektphase_projektphase_id' =>
|
||||
'CREATE SEQUENCE seq_projektphase_projektphase_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;',
|
||||
'seq_projekttask_projekttask_id' =>
|
||||
'CREATE SEQUENCE seq_projekttask_projekttask_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;',
|
||||
'seq_ressource_ressource_id' =>
|
||||
'CREATE SEQUENCE seq_ressource_ressource_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;',
|
||||
'tbl_projekt_projekt_id_seq' =>
|
||||
'CREATE SEQUENCE fue.tbl_projekt_projekt_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;'
|
||||
);
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
|
||||
$viewsArray = array(
|
||||
'vw_projektressourcen' =>
|
||||
'CREATE OR REPLACE VIEW fue.vw_projektressourcen (
|
||||
projekt_ressource_id,
|
||||
projekt_kurzbz,
|
||||
projektphase_id,
|
||||
projektphase,
|
||||
typ,
|
||||
ressource_id,
|
||||
ressource,
|
||||
funktion_kurzbz,
|
||||
start,
|
||||
ende,
|
||||
oe_kurzbz,
|
||||
projektbudget,
|
||||
aufwandstyp_kurzbz,
|
||||
projektphase_fk,
|
||||
phasenbudget,
|
||||
personentage,
|
||||
nummer,
|
||||
titel,
|
||||
aufwand
|
||||
)
|
||||
AS
|
||||
SELECT tpr.projekt_ressource_id,
|
||||
COALESCE(tpr.projekt_kurzbz, tpp.projekt_kurzbz) AS projekt_kurzbz,
|
||||
tpr.projektphase_id,
|
||||
tpp.bezeichnung AS projektphase,
|
||||
COALESCE(tpp.typ, \'Projekt\'::character varying) AS typ,
|
||||
tpr.ressource_id,
|
||||
tr.bezeichnung AS ressource,
|
||||
tpr.funktion_kurzbz,
|
||||
COALESCE(tpp.start, tp.beginn) AS start,
|
||||
COALESCE(tpp.ende, tp.ende) AS ende,
|
||||
tp.oe_kurzbz,
|
||||
tp.budget AS projektbudget,
|
||||
tp.aufwandstyp_kurzbz,
|
||||
tpp.projektphase_fk,
|
||||
tpp.budget AS phasenbudget,
|
||||
tpp.personentage,
|
||||
tp.nummer,
|
||||
tp.titel,
|
||||
tpr.aufwand
|
||||
FROM fue.tbl_projekt_ressource tpr
|
||||
JOIN fue.tbl_ressource tr USING (ressource_id)
|
||||
LEFT JOIN fue.tbl_projekt tp USING (projekt_kurzbz)
|
||||
LEFT JOIN fue.tbl_projektphase tpp USING (projektphase_id);'
|
||||
);
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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> 
|
||||
<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> 
|
||||
<!-- <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>
|
||||
 | 
|
||||
<?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> 
|
||||
<!-- <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>
|
||||
 | 
|
||||
<?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> <?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>
|
||||
 <?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>
|
||||
<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>
|
||||
 <?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> 
|
||||
<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> 
|
||||
<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'); ?> 
|
||||
<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'); ?> 
|
||||
<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> 
|
||||
<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> 
|
||||
<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> 
|
||||
<?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> 
|
||||
<?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> 
|
||||
<?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> 
|
||||
<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>
|
||||
 | 
|
||||
<?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>
|
||||
 
|
||||
<b> <?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>
|
||||
<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>
|
||||
 <?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> 
|
||||
<?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> 
|
||||
<?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> 
|
||||
<?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> 
|
||||
<?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> <?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>
|
||||
 <?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">
|
||||
×
|
||||
</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;
|
||||
?>
|
||||
|
||||
<a href="<?php echo $unlockpath; ?>">
|
||||
<i class="fa fa-sign-out"></i> <?php echo ucfirst($this->p->t('ui', 'freigeben')) ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
|
||||
<?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">×
|
||||
</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">
|
||||
×
|
||||
</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">
|
||||
×
|
||||
</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">
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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>
|
||||
|
||||
@@ -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> ";
|
||||
}
|
||||
|
||||
// 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> ";
|
||||
}
|
||||
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> ";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zweitbegutachter->email."</font><br> ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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> </td>\n";
|
||||
$htmlstr .= "<td> </td></tr>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$htmlstr .= "<td> </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 .= " <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 .= " <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 .= " <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;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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> ";
|
||||
}
|
||||
|
||||
$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> ";
|
||||
}
|
||||
|
||||
// 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> ";
|
||||
|
||||
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid);
|
||||
|
||||
if (!$zweitbetr)
|
||||
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br> ";
|
||||
|
||||
$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> ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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))
|
||||
|
||||
@@ -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>
|
||||
@@ -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"> </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>
|
||||
Lehrveranstaltungsplan >> <a class="Item" href="index.php">Wochenplan</a> - Anzahl Studenten
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$kwRet.'&stpl_table='.$stpl_table.'"><<</a>
|
||||
Wochenplan <a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$datum.'&stpl_table='.$stpl_table.'">Kw '.$kw.'</a>
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$kwVor.'&stpl_table='.$stpl_table.'">>></a>
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.time().'&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 .' '. (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))).' '.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> </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> </td><td>'.$row_anz->gruppe_kurzbz.' </td><td>'.(!$row_anz->anz?'<font color=\'Maroon\'>':'').$row_anz->bezeichnung.(!$row_anz->anz?'</font>':'').' </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 .' '. (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 – </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))).' '. 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 '.($raum_max_anz*TAGE_PRO_WOCHE);
|
||||
echo '<br>';
|
||||
echo ' Ø '.($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 '.$max_person_array[$k]['stunde_max'];
|
||||
echo '<br>';
|
||||
echo ' Ø '.($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 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">Ø</td>';
|
||||
|
||||
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
|
||||
echo 'FH Ø '.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
|
||||
echo '<br>';
|
||||
echo 'Raum Ø '.($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 Ø '.($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 Ø '.($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"> </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>
|
||||
Lehrveranstaltungsplan >> <a class="Item" href="index.php">Wochenplan</a> - Anzahl Studenten
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$kwRet.'&stpl_table='.$stpl_table.'"><<</a>
|
||||
Wochenplan <a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$datum.'&stpl_table='.$stpl_table.'">Kw '.$kw.'</a>
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.$kwVor.'&stpl_table='.$stpl_table.'">>></a>
|
||||
<a class="Item" href="'.$_SERVER['PHP_SELF'].'?uid='.$uid.'&datum='.time().'&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 .' '. (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))).' '.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> </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> </td><td>'.$row_anz->gruppe_kurzbz.' </td><td>'.(!$row_anz->anz?'<font color=\'Maroon\'>':'').$row_anz->bezeichnung.(!$row_anz->anz?'</font>':'').' </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 .' '. (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 – </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))).' '. 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 '.($raum_max_anz*TAGE_PRO_WOCHE);
|
||||
echo '<br>';
|
||||
echo ' Ø '.($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 '.$max_person_array[$k]['stunde_max'];
|
||||
echo '<br>';
|
||||
echo ' Ø '.($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 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">Ø</td>';
|
||||
|
||||
echo '<td style="text-align:center;color:#FFF;" class="ContentHeader">';
|
||||
echo 'FH Ø '.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%';
|
||||
echo '<br>';
|
||||
echo 'Raum Ø '.($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 Ø '.($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 Ø '.($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>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user