mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 00:24:35 +00:00
Compare commits
328
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3299f09494 | ||
|
|
4242f75fde | ||
|
|
47c956bf1e | ||
|
|
418a149840 | ||
|
|
e8c7ecf1ee | ||
|
|
2a77fb361a | ||
|
|
96f8ee33a9 | ||
|
|
38da37980d | ||
|
|
6fba58c113 | ||
|
|
4175ecc209 | ||
|
|
fc4915a6ee | ||
|
|
ca79bb1f82 | ||
|
|
2fe9bda46b | ||
|
|
86aac2388d | ||
|
|
f3453670b3 | ||
|
|
b23eaa2967 | ||
|
|
6e2c5acc6f | ||
|
|
f8bbdf4b35 | ||
|
|
a2a645b7c7 | ||
|
|
2dbbadea2e | ||
|
|
0f5c261528 | ||
|
|
b93cfbfa9e | ||
|
|
7609554a74 | ||
|
|
26e63160ba | ||
|
|
7c365cea81 | ||
|
|
db96dd1388 | ||
|
|
c440711145 | ||
|
|
16366d976d | ||
|
|
ac945ab540 | ||
|
|
0b51239f8c | ||
|
|
45816c0352 | ||
|
|
73a9d34fba | ||
|
|
ac10473b08 | ||
|
|
571ae5f6e5 | ||
|
|
057b003977 | ||
|
|
f9f0e238c6 | ||
|
|
fab1022c49 | ||
|
|
b8aadab509 | ||
|
|
08f79b69cb | ||
|
|
7bc1e8cdd9 | ||
|
|
e784400943 | ||
|
|
c62198b4b5 | ||
|
|
d200fc1961 | ||
|
|
913f45fcda | ||
|
|
d689e8fb2f | ||
|
|
d50ba773fe | ||
|
|
392112977c | ||
|
|
f5703a2438 | ||
|
|
b5a81b540f | ||
|
|
4c75f908b9 | ||
|
|
83bf874156 | ||
|
|
dd392caef7 | ||
|
|
096b436d54 | ||
|
|
cfb034bc69 | ||
|
|
349e9b9442 | ||
|
|
1e082ed225 | ||
|
|
91f79b2021 | ||
|
|
f5ace15f7b | ||
|
|
74b1ca0614 | ||
|
|
110d6bace3 | ||
|
|
54d819e1ea | ||
|
|
8bb3b6d53c | ||
|
|
550df4fbd8 | ||
|
|
5f096b58b7 | ||
|
|
68fbc13a69 | ||
|
|
3192a1b3f2 | ||
|
|
f4c8f00c8f | ||
|
|
477da65817 | ||
|
|
1bca1a8dc3 | ||
|
|
94ff4b717d | ||
|
|
5e88ccb5d7 | ||
|
|
9651903200 | ||
|
|
af9418d456 | ||
|
|
f35f41a049 | ||
|
|
398b9f9d8f | ||
|
|
cb4ce6dab6 | ||
|
|
d4450e1ae1 | ||
|
|
f7dac04dae | ||
|
|
d5d7797eb7 | ||
|
|
f49771ec7f | ||
|
|
2a3eba6441 | ||
|
|
0a961d8e95 | ||
|
|
5213ab44ff | ||
|
|
c89f375015 | ||
|
|
d6cce60b8f | ||
|
|
a54c7a3492 | ||
|
|
efdd81ac0d | ||
|
|
635494b303 | ||
|
|
e200cd4455 | ||
|
|
a81ceb51b8 | ||
|
|
ee011ef201 | ||
|
|
fb84fb62f7 | ||
|
|
c85bf159ff | ||
|
|
55fe358d9b | ||
|
|
17c2004a39 | ||
|
|
82019bb77f | ||
|
|
4e22b1ac1c | ||
|
|
050a4214f9 | ||
|
|
fb3247c91e | ||
|
|
da4ab6bf49 | ||
|
|
7bc8e22906 | ||
|
|
ab5dc7b1ac | ||
|
|
c9c6955198 | ||
|
|
bce7e6ce7f | ||
|
|
f5ee097b72 | ||
|
|
0994b2cc8f | ||
|
|
7c2d235960 | ||
|
|
73774b0c5d | ||
|
|
b9325875a1 | ||
|
|
a9666a5f55 | ||
|
|
1d63f7aa53 | ||
|
|
a5110893ea | ||
|
|
1ea45269bd | ||
|
|
de4fe258fd | ||
|
|
b5d0cc9626 | ||
|
|
34715712f3 | ||
|
|
4b2e3c2f6b | ||
|
|
09bc985431 | ||
|
|
de43e69ccf | ||
|
|
f993780ec3 | ||
|
|
b624d91119 | ||
|
|
7a005a9141 | ||
|
|
cc8be23f7e | ||
|
|
86e032b27f | ||
|
|
0d6ad6aab0 | ||
|
|
186412144d | ||
|
|
696849062f | ||
|
|
5001713d16 | ||
|
|
311d235fda | ||
|
|
2f573263ba | ||
|
|
54de577eee | ||
|
|
8584be651b | ||
|
|
08c594148b | ||
|
|
da5494ad35 | ||
|
|
d3be5a7805 | ||
|
|
06f62b19b4 | ||
|
|
4844da317f | ||
|
|
00f555b141 | ||
|
|
d3ec6cad1d | ||
|
|
a64fafb6ad | ||
|
|
9180244e0d | ||
|
|
5c79951f00 | ||
|
|
388a265db7 | ||
|
|
d4653bc89f | ||
|
|
1ec52e710a | ||
|
|
fd7c193894 | ||
|
|
040cd09691 | ||
|
|
c5e1674264 | ||
|
|
e96a3506a8 | ||
|
|
28baa49f6d | ||
|
|
96172c67fd | ||
|
|
81e51c2b92 | ||
|
|
e97d2d89d6 | ||
|
|
2cb4ee9879 | ||
|
|
4c5241dd95 | ||
|
|
c086eddfae | ||
|
|
33e313a633 | ||
|
|
c6fe7a3d6a | ||
|
|
94a126f64e | ||
|
|
1b57df7a52 | ||
|
|
451a21e84e | ||
|
|
f7ec0c4ce0 | ||
|
|
6c1a47955f | ||
|
|
3b1d913006 | ||
|
|
33c1cc80b2 | ||
|
|
58bae0953f | ||
|
|
fdc3265e97 | ||
|
|
8efe601826 | ||
|
|
96d115e808 | ||
|
|
8b74420e4f | ||
|
|
f2479c6f36 | ||
|
|
9a4c61d1c3 | ||
|
|
a528018761 | ||
|
|
eefffa8a0e | ||
|
|
5bdfd447ac | ||
|
|
da484fbbb0 | ||
|
|
5519f6af57 | ||
|
|
d16a670726 | ||
|
|
54864da770 | ||
|
|
64aa3c1250 | ||
|
|
a663fa9436 | ||
|
|
aa572e8a22 | ||
|
|
48798e8309 | ||
|
|
01ca8f6fb9 | ||
|
|
80eb64e418 | ||
|
|
ea79b92beb | ||
|
|
42d6ea9bed | ||
|
|
0a8432514c | ||
|
|
3122825b73 | ||
|
|
bc8709f842 | ||
|
|
f39fb46b25 | ||
|
|
48172216cc | ||
|
|
1fa215103c | ||
|
|
88c8b13208 | ||
|
|
8eb423414a | ||
|
|
d766e2fd01 | ||
|
|
a63a79ab91 | ||
|
|
19d369c3c7 | ||
|
|
e46d5a2433 | ||
|
|
43f613b0bc | ||
|
|
a1a9b10ee1 | ||
|
|
fb57ea5838 | ||
|
|
d93c19913b | ||
|
|
80d5d09ed5 | ||
|
|
9e4489093c | ||
|
|
772e60c944 | ||
|
|
bbd5962fd4 | ||
|
|
47fba23a5e | ||
|
|
75aff023d3 | ||
|
|
8183144251 | ||
|
|
1e00f2683e | ||
|
|
d8fc724b10 | ||
|
|
8feec18ff7 | ||
|
|
76c4c4a0e9 | ||
|
|
3e056ebf3d | ||
|
|
fbcf9d9778 | ||
|
|
b7661b200e | ||
|
|
26ed20b1f5 | ||
|
|
f94274ae1c | ||
|
|
a78b4507da | ||
|
|
651bd9e37a | ||
|
|
7336525021 | ||
|
|
8035176e8b | ||
|
|
e4fca1b823 | ||
|
|
b59b00dbe4 | ||
|
|
455d7e9aa2 | ||
|
|
ca502488b7 | ||
|
|
7f99b26e48 | ||
|
|
598f6b4b09 | ||
|
|
2c4dc542b6 | ||
|
|
c365896865 | ||
|
|
d606418072 | ||
|
|
d69788e8d2 | ||
|
|
4a009f3cef | ||
|
|
792d1980fe | ||
|
|
22cd1e075a | ||
|
|
1da8881905 | ||
|
|
3e092bf375 | ||
|
|
8a7bcab2c6 | ||
|
|
6644564738 | ||
|
|
31b6ff9954 | ||
|
|
84ca798dad | ||
|
|
bae6675efe | ||
|
|
ef32586d86 | ||
|
|
4a5e83fece | ||
|
|
ba0e084311 | ||
|
|
a7f02548b0 | ||
|
|
9882065b20 | ||
|
|
058d01b6be | ||
|
|
68a6554d19 | ||
|
|
f8349a2a9b | ||
|
|
c78e715c3e | ||
|
|
ba31a0b5b0 | ||
|
|
479feea8aa | ||
|
|
043f09892a | ||
|
|
9e15668c37 | ||
|
|
9c85877d3d | ||
|
|
f8fb59e806 | ||
|
|
d3f88597d9 | ||
|
|
727d0b5876 | ||
|
|
87a1b3647d | ||
|
|
35c68d98a1 | ||
|
|
7bb340a415 | ||
|
|
37364d9775 | ||
|
|
3076753a19 | ||
|
|
22fbe098ec | ||
|
|
6d1d4cb74b | ||
|
|
601eae1e95 | ||
|
|
a667ddaf5e | ||
|
|
4f2ca62d05 | ||
|
|
62550423a3 | ||
|
|
fe7cd05d57 | ||
|
|
844f72d3d4 | ||
|
|
44bfe52529 | ||
|
|
5872612d86 | ||
|
|
8bd007b6ea | ||
|
|
f2231fcba2 | ||
|
|
3f4efbcd16 | ||
|
|
fb4f9981f0 | ||
|
|
d1319a23ad | ||
|
|
29f1760a7c | ||
|
|
ed99325bb9 | ||
|
|
d9098179a2 | ||
|
|
8d221be050 | ||
|
|
40c7e1c9f0 | ||
|
|
32bdeec02e | ||
|
|
91a2bf4f21 | ||
|
|
c3e3d8e9d7 | ||
|
|
8735318545 | ||
|
|
21060b31dc | ||
|
|
e148d8c2f4 | ||
|
|
d3a1ed222c | ||
|
|
0197e5b175 | ||
|
|
fe2601b29a | ||
|
|
4a87fb49e9 | ||
|
|
88246c443a | ||
|
|
10ed780b6c | ||
|
|
cee15a68ba | ||
|
|
ca217f1869 | ||
|
|
7cdb7688c4 | ||
|
|
72c0f97218 | ||
|
|
1ec742b8fe | ||
|
|
01107e361f | ||
|
|
deeb1cdb5e | ||
|
|
540fc4bede | ||
|
|
a412db7356 | ||
|
|
180e24b916 | ||
|
|
9b79a2f446 | ||
|
|
314e71a2d0 | ||
|
|
7b5e5562b5 | ||
|
|
c7f477555c | ||
|
|
47d3ab33e7 | ||
|
|
8754c46575 | ||
|
|
ce3cea5515 | ||
|
|
29fc5181bf | ||
|
|
035d196ae5 | ||
|
|
54411f4de7 | ||
|
|
82cbc63096 | ||
|
|
9b3b571bd9 | ||
|
|
ec07c4154d | ||
|
|
8880e07bf2 | ||
|
|
7f2025c414 | ||
|
|
c354c69e21 | ||
|
|
94a1534c14 | ||
|
|
2d23836396 | ||
|
|
22bba685ff | ||
|
|
d4042228d9 | ||
|
|
2a8b61c07f |
@@ -6,10 +6,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
// Deadline for Application given as Time-Interval after Semesterstart.
|
||||
$config['interval_blocking_application'] = 'P1M';
|
||||
|
||||
// Application submission period given by start- and enddate.
|
||||
$config['submit_application_start'] = '05.09.2022';
|
||||
$config['submit_application_end'] = '22.09.2022';
|
||||
|
||||
// Lehrveranstaltungen with these grades will be blocked for application
|
||||
$config['grades_blocking_application'] = array(
|
||||
5, // nicht genügend
|
||||
@@ -19,4 +15,9 @@ $config['grades_blocking_application'] = array(
|
||||
14, // nicht bestanden,
|
||||
15, // nicht teilgenommen
|
||||
18 // unentschuldigt
|
||||
);
|
||||
);
|
||||
|
||||
//Enables Fachbereichsleiter instead of LV Leiter
|
||||
$config['fbl'] = FALSE;
|
||||
//Enables Info Mails
|
||||
$config['send_mail'] = TRUE;
|
||||
|
||||
@@ -164,7 +164,14 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'requiredPermissions' => 'system/developer:r'
|
||||
)
|
||||
),
|
||||
'anrechnungen' => array(
|
||||
'link' => site_url('lehre/anrechnung/AdminAnrechnung'),
|
||||
'description' => 'Anrechnungen',
|
||||
'expand' => true,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -184,6 +191,15 @@ $config['navigation_menu']['Vilesci/index'] = array(
|
||||
)
|
||||
);
|
||||
|
||||
$config['navigation_menu']['Vilesci/index'] = array(
|
||||
'dashboard' => array(
|
||||
'link' => '#',
|
||||
'description' => 'Dashboard',
|
||||
'icon' => 'dashboard',
|
||||
'sort' => 1
|
||||
)
|
||||
);
|
||||
|
||||
$config['navigation_menu']['organisation/Reihungstest/index'] = array(
|
||||
'reihungstestverwalung' => array(
|
||||
'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
|
||||
@@ -267,10 +283,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
||||
'fehlerzustaendigkeiten' => array(
|
||||
'link' => site_url('system/issues/IssuesZustaendigkeiten'),
|
||||
'description' => 'Fehler Zuständigkeiten',
|
||||
'icon' => 'cogs',
|
||||
'icon' => 'users',
|
||||
'sort' => 100,
|
||||
'target' => '_blank',
|
||||
'requiredPermissions' => array('admin:rw')
|
||||
)
|
||||
),
|
||||
'fehlerkonfiguration' => array(
|
||||
'link' => site_url('system/issues/IssuesKonfiguration'),
|
||||
'description' => 'Fehler Konfiguration',
|
||||
'icon' => 'cogs',
|
||||
'sort' => 200,
|
||||
'target' => '_blank',
|
||||
'requiredPermissions' => array('admin:rw')
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,438 @@
|
||||
<?php
|
||||
|
||||
if (! defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class UHSTAT1 extends FHC_Controller
|
||||
{
|
||||
const BERECHTIGUNG_UHSTAT_VERWALTEN = 'student/uhstat1daten_verwalten';
|
||||
const PERSON_ID_SESSION_INDEX = 'bewerbung/personId';
|
||||
const CODEX_OESTERREICH = 'A';
|
||||
const LOWER_BOUNDARY_YEARS = 160;
|
||||
const UPPER_BOUNDARY_YEARS = 20;
|
||||
|
||||
private $_uid;
|
||||
private $_uhstat1Fields = array();
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// load ci libs
|
||||
$this->load->library('form_validation');
|
||||
|
||||
// load ci helpers
|
||||
$this->load->helper(array('form', 'url'));
|
||||
|
||||
// load libraries
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('PermissionLib');
|
||||
|
||||
// load models
|
||||
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->load->model('system/Sprache_model', 'SpracheModel');
|
||||
$this->load->model('codex/Abschluss_model', 'AbschlussModel');
|
||||
$this->load->model('codex/Uhstat1daten_model', 'Uhstat1datenModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'ui',
|
||||
'uhstat'
|
||||
)
|
||||
);
|
||||
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
// set form field information
|
||||
$this->_uhstat1Fields = array(
|
||||
'mutter_geburtsstaat' => array('name' => 'Geburtsstaat Mutter'),
|
||||
'mutter_geburtsjahr' => array('name' => 'Geburtsjahr Mutter'),
|
||||
'mutter_bildungsstaat' => array('name' => 'Bildungsstaat Mutter'),
|
||||
'mutter_bildungmax' => array(
|
||||
'name' => 'Geburtsjahr Mutter',
|
||||
'rules' => array(
|
||||
'callback_bildungsstaat_bildungmax_check[m]' => array(
|
||||
'bildungsstaat_bildungmax_check' => $this->p->t('uhstat', 'ausbildungBildungsstaatUebereinstimmung')
|
||||
)
|
||||
)
|
||||
),
|
||||
'vater_geburtsstaat' => array('name' => 'Geburtsstaat Vater'),
|
||||
'vater_geburtsjahr' => array('name' => 'Geburtsjahr Vater'),
|
||||
'vater_bildungsstaat' => array('name' => 'Bildungsstaat Vater'),
|
||||
'vater_bildungmax' => array('name' => 'Geburtsjahr Vater'),
|
||||
'vater_bildungmax' => array(
|
||||
'name' => 'Geburtsjahr Vater',
|
||||
'rules' => array(
|
||||
'callback_bildungsstaat_bildungmax_check[v]' => array(
|
||||
'bildungsstaat_bildungmax_check' => $this->p->t('uhstat', 'ausbildungBildungsstaatUebereinstimmung')
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
public function index()
|
||||
{
|
||||
$formMetaData = $this->_getFormMetaData();
|
||||
|
||||
if (isError($formMetaData)) show_error(getError($formMetaData));
|
||||
|
||||
if (!hasData($formMetaData)) show_error("No form meta data could be loaded");
|
||||
|
||||
$uhstatData = $this->_getUHSTAT1Data();
|
||||
|
||||
if (isError($uhstatData)) show_error(getError($uhstatData));
|
||||
|
||||
$this->load->view("codex/uhstat1.php", array(
|
||||
'formMetaData' => getData($formMetaData),
|
||||
'uhstatData' => getData($uhstatData)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add or update UHSTAT1 data
|
||||
*/
|
||||
public function saveUHSTAT1Data()
|
||||
{
|
||||
$saved = false;
|
||||
|
||||
$person_id = $this->_getValidPersonId('sui');
|
||||
|
||||
$this->form_validation->set_error_delimiters('<span class="text-danger">', '</span>');
|
||||
|
||||
foreach ($this->_uhstat1Fields as $field => $params)
|
||||
{
|
||||
// all fields are required
|
||||
$ruleNames = 'required';
|
||||
$ruleMessages = array('required' => $this->p->t('uhstat', 'angabeFehlt'));
|
||||
|
||||
// add additional rules
|
||||
if (isset($params['rules']))
|
||||
{
|
||||
foreach ($params['rules'] as $ruleName => $ruleMessage)
|
||||
{
|
||||
$ruleNames .= '|'.$ruleName;
|
||||
$ruleMessages = array_merge($ruleMessages, $ruleMessage);
|
||||
}
|
||||
}
|
||||
|
||||
$this->form_validation->set_rules(
|
||||
$field,
|
||||
$params['name'],
|
||||
$ruleNames,
|
||||
$ruleMessages
|
||||
);
|
||||
}
|
||||
|
||||
$uhstat1datenRes = null;
|
||||
if ($this->form_validation->run()) // if valid
|
||||
{
|
||||
// get post fields
|
||||
$uhstatData = array();
|
||||
foreach ($this->_uhstat1Fields as $field => $params)
|
||||
{
|
||||
$uhstatData[$field] = $this->input->post($field);
|
||||
}
|
||||
|
||||
// check if entry already exists
|
||||
$uhstat1datenloadRes = $this->Uhstat1datenModel->loadWhere(array('person_id' => $person_id));
|
||||
|
||||
// if yes, update
|
||||
if (hasData($uhstat1datenloadRes))
|
||||
{
|
||||
$uhstatData['updateamum'] = 'NOW()';
|
||||
$uhstatData['updatevon'] = $this->_uid;
|
||||
$uhstat1datenRes = $this->Uhstat1datenModel->update(
|
||||
array('person_id' => $person_id),
|
||||
$uhstatData
|
||||
);
|
||||
}
|
||||
else // otherwise insert
|
||||
{
|
||||
$uhstatData['insertamum'] = 'NOW()';
|
||||
$uhstatData['insertvon'] = $this->_uid;
|
||||
$uhstat1datenRes = $this->Uhstat1datenModel->insert(
|
||||
array_merge($uhstatData, array('person_id' => $person_id))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$formMetaData = $this->_getFormMetaData();
|
||||
|
||||
if (isError($formMetaData)) show_error(getError($formMetaData));
|
||||
|
||||
if (!hasData($formMetaData)) show_error("No form meta data could be loaded");
|
||||
|
||||
$successMessage = '';
|
||||
$errorMessage = '';
|
||||
// pass success/error messages to view
|
||||
if (isset($uhstat1datenRes))
|
||||
{
|
||||
if (isSuccess($uhstat1datenRes))
|
||||
{
|
||||
$successMessage = $this->p->t('uhstat', 'erfolgreichGespeichert');
|
||||
$saved = true;
|
||||
}
|
||||
else
|
||||
$errorMessage = $this->p->t('uhstat', 'fehlerBeimSpeichern');
|
||||
}
|
||||
|
||||
// load view with form data
|
||||
$this->load->view("codex/uhstat1.php", array(
|
||||
'formMetaData' => getData($formMetaData),
|
||||
'saved' => $saved,
|
||||
'successMessage' => $successMessage,
|
||||
'errorMessage' => $errorMessage
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check callback for Bildungsstaat - if Bildungsstaat is Austria, a highest education should be in Austria.
|
||||
* @param $bildungmax
|
||||
* @param $bildungsstaat_typ - mother (m) or father (v)
|
||||
* @return bool true if valid, false otherwise
|
||||
*/
|
||||
public function bildungsstaat_bildungmax_check($bildungmax, $bildungsstaat_typ)
|
||||
{
|
||||
// valid if no type passed
|
||||
if (!isset($bildungsstaat_typ) || !isset($bildungmax)) return true;
|
||||
|
||||
// get correct input
|
||||
if ($bildungsstaat_typ == 'm') // mutter
|
||||
$bildungsstaat = $this->input->post('mutter_bildungsstaat');
|
||||
elseif ($bildungsstaat_typ == 'v') // vater
|
||||
$bildungsstaat = $this->input->post('vater_bildungsstaat');
|
||||
else
|
||||
return true;
|
||||
|
||||
if (!isset($bildungsstaat)) return true;
|
||||
|
||||
// find out if abschluss is in Austria
|
||||
$this->AbschlussModel->addSelect("in_oesterreich");
|
||||
$abschlussRes = $this->AbschlussModel->load($bildungmax);
|
||||
|
||||
if (hasData($abschlussRes))
|
||||
{
|
||||
$in_oesterreich = getData($abschlussRes)[0]->in_oesterreich;
|
||||
// invalid if abschluss in Austria, but not Bildungsstaat, or abschluss not in Austria, but Bildungsstaat in Austria
|
||||
return ($in_oesterreich && $bildungsstaat == self::CODEX_OESTERREICH) || (!$in_oesterreich && $bildungsstaat != self::CODEX_OESTERREICH);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes UHSTAT1 entry.
|
||||
*/
|
||||
public function deleteUHSTAT1Data()
|
||||
{
|
||||
$saved = false;
|
||||
|
||||
// uhstat data can only be deleted with permission
|
||||
if (!$this->_checkPermission('suid')) show_error('no permission');
|
||||
|
||||
$person_id = $this->_getValidPersonId('suid');
|
||||
|
||||
$uhstat1datenRes = $this->Uhstat1datenModel->delete(
|
||||
array('person_id' => $person_id)
|
||||
);
|
||||
|
||||
$formMetaData = $this->_getFormMetaData();
|
||||
|
||||
if (isError($formMetaData)) show_error(getError($formMetaData));
|
||||
|
||||
if (!hasData($formMetaData)) show_error("No form meta data could be loaded");
|
||||
|
||||
$successMessage = '';
|
||||
$errorMessage = '';
|
||||
// pass success/error messages to view
|
||||
if (isset($uhstat1datenRes))
|
||||
{
|
||||
if (isSuccess($uhstat1datenRes))
|
||||
{
|
||||
$successMessage = $this->p->t('uhstat', 'erfolgreichGeloescht');
|
||||
}
|
||||
else
|
||||
$errorMessage = $this->p->t('uhstat', 'fehlerBeimLoeschen');
|
||||
}
|
||||
|
||||
// load view with form data
|
||||
$this->load->view("codex/uhstat1.php", array(
|
||||
'formMetaData' => getData($formMetaData),
|
||||
'successMessage' => $successMessage,
|
||||
'errorMessage' => $errorMessage
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Gets initial data needed to display UHSTAT1 form.
|
||||
*/
|
||||
private function _getFormMetaData()
|
||||
{
|
||||
$person_id = $this->_getValidPersonId('s');
|
||||
|
||||
// read only display param
|
||||
$readOnly = $this->input->get('readOnly');
|
||||
|
||||
// depending on permissions, editing or deleting is possible
|
||||
$editPermission = $this->_checkPermission('sui');
|
||||
$deletePermission = $this->_checkPermission('suid');
|
||||
|
||||
$languageIdx = $this->_getLanguageIndex();
|
||||
|
||||
$formMetaData = array(
|
||||
'nation' => array(),
|
||||
'abschluss_oesterreich' => array(),
|
||||
'abschluss_nicht_oesterreich' => array(),
|
||||
'jahre' => array(),
|
||||
'person_id' => $person_id,
|
||||
'editPermission' => $editPermission,
|
||||
'deletePermission' => $deletePermission,
|
||||
'readOnly' => $readOnly
|
||||
);
|
||||
|
||||
// get person data
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
$this->PersonModel->addSelect("vorname, nachname");
|
||||
$personRes = $this->PersonModel->load($person_id);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
if (hasData($personRes))
|
||||
{
|
||||
$person = getData($personRes)[0];
|
||||
$formMetaData['vorname'] = $person->vorname;
|
||||
$formMetaData['nachname'] = $person->nachname;
|
||||
}
|
||||
|
||||
$nationTextFieldName = $languageIdx == 1 ? 'langtext' : 'engltext';
|
||||
|
||||
// get nation list
|
||||
$this->load->model('codex/Nation_model', 'NationModel');
|
||||
|
||||
$this->NationModel->addSelect("nation_code, $nationTextFieldName AS nation_text");
|
||||
$this->NationModel->addOrder("nation_text");
|
||||
$nationRes = $this->NationModel->load();
|
||||
|
||||
if (isError($nationRes)) return $nationRes;
|
||||
|
||||
if (hasData($nationRes))
|
||||
{
|
||||
$nations = getData($nationRes);
|
||||
|
||||
// put austria in beginning of selection
|
||||
foreach ($nations as $nation)
|
||||
{
|
||||
if ($nation->nation_code == self::CODEX_OESTERREICH) array_unshift($nations, $nation);
|
||||
}
|
||||
|
||||
$formMetaData['nation'] = $nations;
|
||||
}
|
||||
|
||||
// get abschluss list
|
||||
$abschlussRes = $this->AbschlussModel->getActiveAbschluesse($languageIdx);
|
||||
|
||||
if (isError($abschlussRes)) return $abschlussRes;
|
||||
|
||||
$abschlussData = getData($abschlussRes);
|
||||
|
||||
if (hasData($abschlussRes))
|
||||
{
|
||||
foreach (getData($abschlussRes) as $abschluss)
|
||||
{
|
||||
if ($abschluss->in_oesterreich === true)
|
||||
$formMetaData['abschluss_oesterreich'][] = $abschluss;
|
||||
elseif ($abschluss->in_oesterreich === false)
|
||||
$formMetaData['abschluss_nicht_oesterreich'][] = $abschluss;
|
||||
else
|
||||
{
|
||||
$formMetaData['abschluss_oesterreich'][] = $abschluss;
|
||||
$formMetaData['abschluss_nicht_oesterreich'][] = $abschluss;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get realistic birth years, dated back from current year
|
||||
$currYear = date("Y");
|
||||
$formMetaData['jahre'] = range($currYear - self::UPPER_BOUNDARY_YEARS, $currYear - self::LOWER_BOUNDARY_YEARS);
|
||||
|
||||
return success($formMetaData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets initial data needed to display UHSTAT1 form.
|
||||
*/
|
||||
private function _getUHSTAT1Data()
|
||||
{
|
||||
$person_id = $this->_getValidPersonId('s');
|
||||
|
||||
$this->Uhstat1datenModel->addSelect(
|
||||
implode(', ', array_keys($this->_uhstat1Fields))
|
||||
);
|
||||
$uhstatRes = $this->Uhstat1datenModel->loadWhere(array('person_id' => $person_id));
|
||||
|
||||
if (isError($uhstatRes)) return $uhstatRes;
|
||||
|
||||
return success(hasData($uhstatRes) ? getData($uhstatRes)[0] : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets language index of currently logged in user.
|
||||
* @return int (the index, start at 1)
|
||||
*/
|
||||
private function _getLanguageIndex()
|
||||
{
|
||||
$idx = 1;
|
||||
$this->SpracheModel->addSelect('index');
|
||||
$langRes = $this->SpracheModel->loadWhere(array('sprache' => getUserLanguage()));
|
||||
|
||||
if (hasData($langRes))
|
||||
{
|
||||
$idx = getData($langRes)[0]->index;
|
||||
}
|
||||
|
||||
return $idx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Id of person having permissions to manage UHSTAT1 data.
|
||||
* Can be passed as parameter or be in session.
|
||||
* @return int person_id
|
||||
*/
|
||||
private function _getValidPersonId($berechtigungsArt)
|
||||
{
|
||||
// if coming from bewerbungstool - person id is in session (person must be logged in bewerbungstool)
|
||||
if (isset($_SESSION[self::PERSON_ID_SESSION_INDEX]) && is_numeric($_SESSION[self::PERSON_ID_SESSION_INDEX]))
|
||||
return $_SESSION[self::PERSON_ID_SESSION_INDEX];
|
||||
|
||||
// if person id passed directly...
|
||||
$person_id = $this->input->post('person_id');
|
||||
if (!isset($person_id)) $person_id = $this->input->get('person_id');
|
||||
|
||||
if (!isset($person_id) || !is_numeric($person_id)) show_error("invalid person id");
|
||||
|
||||
// ...check if there is a permission for editing UHSTAT1 data
|
||||
if ($this->_checkPermission($berechtigungsArt)) return $person_id;
|
||||
|
||||
show_error("No permission");
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if logged user has the UHSTAT management permission.
|
||||
* @param $art - type of permission, e.g. suid for full permissions
|
||||
* @return bool
|
||||
*/
|
||||
private function _checkPermission($art)
|
||||
{
|
||||
return $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_UHSTAT_VERWALTEN, $art);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,9 @@ class SearchBar extends FHC_Controller
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Loads the AuthLib and starts the authentication
|
||||
$this->load->library('AuthLib');
|
||||
|
||||
// Load the library SearchBarLib
|
||||
$this->load->library('SearchBarLib');
|
||||
}
|
||||
|
||||
@@ -37,6 +37,9 @@ class AnrechnungJob extends JOB_Controller
|
||||
$this->load->helper('hlp_sancho_helper');
|
||||
|
||||
$this->load->library('AnrechnungLib');
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -213,7 +216,7 @@ class AnrechnungJob extends JOB_Controller
|
||||
'datentabelle' => $anrechnungen_table,
|
||||
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
|
||||
);
|
||||
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'AnrechnungAntragStellen',
|
||||
@@ -227,6 +230,82 @@ class AnrechnungJob extends JOB_Controller
|
||||
$this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.');
|
||||
}
|
||||
|
||||
// Send Sancho mail to LV-Leitung (fallback Lectors) that were requested for recommendation yesterday.
|
||||
public function sendMailRecommendationRequests(){
|
||||
|
||||
$this->logInfo('Start AnrechnungJob sendMailRecommendationRequests to inform lecturers about yesterdays requests for recommendation.');
|
||||
|
||||
// Get Anrechnungen, für die gestern eine Empfehlung angefragt worden ist
|
||||
$this->AnrechnungModel->addSelect('astat.anrechnung_id, astat.datum, astat.insertamum');
|
||||
$this->AnrechnungModel->addDistinct('astat.anrechnung_id');
|
||||
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus astat', 'anrechnung_id');
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere('
|
||||
studiensemester_kurzbz = (SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
|
||||
AND genehmigt_von IS NULL
|
||||
AND empfehlung_anrechnung IS NULL
|
||||
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
|
||||
AND NOW()::date = (astat.datum + interval \'1 day\') -- nur gestrige Empfehlungsanfrage
|
||||
ORDER BY astat.anrechnung_id, astat.datum DESC, astat.insertamum DESC -- nur letzten status dabei prüfen
|
||||
');
|
||||
|
||||
// Exit, wenn es gestern keine Empfehlungsanfragen gab
|
||||
if (!hasData($result))
|
||||
{
|
||||
$this->logInfo('End AnrechnungJob sendMailRecommendationRequests, because no recommendations were requested yesterday.');
|
||||
exit;
|
||||
}
|
||||
|
||||
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
|
||||
|
||||
$arr_lvLector_arr = array();
|
||||
foreach ($anrechnung_id_arr as $anrechnung_id)
|
||||
{
|
||||
// Get full name of Fachbereichsleitung or LV Leitung.
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$arr_lvLector_arr[] = $this->anrechnunglib->getLeitungOfLvOe($anrechnung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$arr_lvLector_arr[] = $this->anrechnunglib->getLectors($anrechnung_id); // Returns LV Leitung. If not present, then all lectors of LV.
|
||||
}
|
||||
}
|
||||
|
||||
// Unique lector array to send only one mail per lector
|
||||
$arr_lvLector_arr = array_unique($arr_lvLector_arr, SORT_REGULAR);
|
||||
|
||||
// Link to 'Anrechnungen prüfen' dashboard
|
||||
$url =
|
||||
CIS_ROOT. 'cis/index.php?menu='.
|
||||
CIS_ROOT. 'cis/menu.php?content_id=&content='.
|
||||
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
|
||||
|
||||
foreach ($arr_lvLector_arr as $lvLector_arr)
|
||||
{
|
||||
foreach ($lvLector_arr as $lector)
|
||||
{
|
||||
// Prepare mail content
|
||||
$fields = array(
|
||||
'vorname' => $lector->vorname,
|
||||
'stgl_name' => 'Die Studiengangsleitung',
|
||||
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
|
||||
);
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'AnrechnungEmpfehlungAnfordern',
|
||||
$fields,
|
||||
$lector->uid. '@'. DOMAIN,
|
||||
'Deine Empfehlung wird benötigt zur Anerkennung nachgewiesener Kenntnisse'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo('SUCCEDED AnrechnungJob sendMailRecommendationRequests');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Sancho mail to students, whose Anrechnungen were approved 24 hours ago.
|
||||
*/
|
||||
@@ -308,7 +387,7 @@ class AnrechnungJob extends JOB_Controller
|
||||
|
||||
$db = new DB_Model();
|
||||
$result = $db->execReadOnlyQuery($qry);
|
||||
|
||||
|
||||
// Exit if there are no rejected Anrechnungen
|
||||
if (!hasData($result))
|
||||
{
|
||||
@@ -361,9 +440,9 @@ html;
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere('
|
||||
studiensemester_kurzbz = (
|
||||
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
|
||||
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende
|
||||
)
|
||||
AND genehmigt_von IS NULL
|
||||
AND genehmigt_von IS NULL
|
||||
AND empfehlung_anrechnung IS NULL
|
||||
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
|
||||
AND NOW()::date = (astat.datum + interval \'1 week\') -- eine Woche nach Empfehlungsanfrage
|
||||
@@ -376,7 +455,7 @@ html;
|
||||
$this->logInfo('End AnrechnungJob sendMailRemindRecommendation, because no recommendations to be done.');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
|
||||
|
||||
$arr_lvLector_arr = array();
|
||||
@@ -435,7 +514,7 @@ html;
|
||||
'vorname' => $stgl->vorname
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return $stglMailAdress_arr;
|
||||
}
|
||||
// If not available, get assistance mail address
|
||||
|
||||
@@ -1,16 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Job for producing Plausicheck issues
|
||||
* Job for producing core Plausicheck issues
|
||||
*/
|
||||
class PlausiIssueProducer extends JOB_Controller
|
||||
class PlausiIssueProducer extends PlausiIssueProducer_Controller
|
||||
{
|
||||
private $_currentStudiensemester;
|
||||
protected $_app = 'core';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->load->library('issues/PlausicheckProducerLib');
|
||||
$this->load->library('IssuesLib');
|
||||
$this->load->library('issues/PlausicheckDefinitionLib');
|
||||
|
||||
// load models
|
||||
$this->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// get current Studiensemester
|
||||
$studiensemesterRes = $this->StudiensemesterModel->getAkt();
|
||||
if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
|
||||
// set fehler which can be produced by the job
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
$this->_fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,43 +33,10 @@ class PlausiIssueProducer extends JOB_Controller
|
||||
*/
|
||||
public function run($studiensemester_kurzbz = null, $studiengang_kz = null)
|
||||
{
|
||||
$fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
// get Studiensemester
|
||||
if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job started");
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($fehlerKurzbz as $fehler_kurzbz)
|
||||
{
|
||||
// execute the check
|
||||
$this->logInfo("Checking " . $fehler_kurzbz . "...");
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
|
||||
|
||||
if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
|
||||
|
||||
if (hasData($plausicheckRes))
|
||||
{
|
||||
$plausicheckData = getData($plausicheckRes);
|
||||
|
||||
foreach ($plausicheckData as $plausiData)
|
||||
{
|
||||
// get the data needed for issue production
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// write the issue
|
||||
$addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isError($addIssueRes))
|
||||
$this->logError(getError($addIssueRes));
|
||||
elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
|
||||
$this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job stopped");
|
||||
// producing issues for semester and optionally Studiengang
|
||||
$this->producePlausicheckIssues(array('studiensemester_kurzbz' => $studiensemester_kurzbz, 'studiengang_kz' => $studiengang_kz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class ReihungstestJob extends JOB_Controller
|
||||
{
|
||||
|
||||
const LAST_DAYS_PRESTUDENTSTATUS = 5;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -826,7 +829,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
AND tbl_studiengang.typ IN ('b', 'm')
|
||||
)
|
||||
SELECT * FROM prst
|
||||
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - 1)
|
||||
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - ". self::LAST_DAYS_PRESTUDENTSTATUS .")
|
||||
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'
|
||||
@@ -868,7 +871,8 @@ class ReihungstestJob extends JOB_Controller
|
||||
tbl_person.nachname,
|
||||
tbl_person.vorname,
|
||||
tbl_prestudent.*,
|
||||
tbl_studiengang.typ AS studiengang_typ
|
||||
tbl_studiengang.typ AS studiengang_typ,
|
||||
tbl_prestudentstatus.datum
|
||||
FROM PUBLIC.tbl_person
|
||||
JOIN PUBLIC.tbl_prestudent USING (person_id)
|
||||
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
|
||||
@@ -901,7 +905,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
elseif ($rowNiedrPrios->laststatus == 'Bewerber')
|
||||
elseif ($rowNiedrPrios->laststatus == 'Bewerber' && $row_ps->prestudenstatus_datum > $rowNiedrPrios->datum)
|
||||
{
|
||||
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
|
||||
$lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id);
|
||||
@@ -927,7 +931,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
}
|
||||
elseif ($rowNiedrPrios->laststatus == 'Wartender')
|
||||
elseif ($rowNiedrPrios->laststatus == 'Wartender' && $row_ps->prestudenstatus_datum > $rowNiedrPrios->datum)
|
||||
{
|
||||
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
|
||||
// Mail zur Info an Assistenz schicken
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class AdminAnrechnung extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
// Set required permissions
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'lehre/anrechnungszeitfenster:rw',
|
||||
'save' => 'lehre/anrechnungszeitfenster:rw',
|
||||
'edit' => 'lehre/anrechnungszeitfenster:rw',
|
||||
'delete' => 'lehre/anrechnungszeitfenster:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('WidgetLib');
|
||||
$this->load->library('PermissionLib');
|
||||
$this->load->library('AnrechnungLib');
|
||||
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'ui',
|
||||
'lehre',
|
||||
'anrechnung',
|
||||
'table'
|
||||
)
|
||||
);
|
||||
|
||||
$this->_setAuthUID();
|
||||
|
||||
$this->setControllerId();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
// Set nearest Studiensemester as default
|
||||
$result = $this->StudiensemesterModel->getNearest();
|
||||
$studiensemester_kurzbz = hasData($result) ? getData($result)[0]->studiensemester_kurzbz : '';
|
||||
|
||||
// Get existing Anrechnungszeitraeume
|
||||
$this->AnrechnungszeitraumModel->addOrder('anrechnungszeitraum_id', 'DESC');
|
||||
$result = $this->AnrechnungszeitraumModel->load();
|
||||
$anrechnungszeitraum_arr = hasData($result) ? getData($result) : array();
|
||||
|
||||
$viewData = array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'anrechnungszeitraum_arr' => $anrechnungszeitraum_arr
|
||||
);
|
||||
|
||||
$this->load->view('lehre/anrechnung/adminAnrechnung.php', $viewData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save new Anrechnungszeitraum.
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$this->_validate($this->input->post());
|
||||
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$anrechnungstart = $this->input->post('anrechnungstart');
|
||||
$anrechnungende = $this->input->post('anrechnungende');
|
||||
|
||||
$result = $this->AnrechnungszeitraumModel->insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithJsonError(getError($result));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit Anrechnungszeitraum.
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$this->_validate($this->input->post());
|
||||
|
||||
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$anrechnungstart = $this->input->post('anrechnungstart');
|
||||
$anrechnungende = $this->input->post('anrechnungende');
|
||||
|
||||
$result = $this->AnrechnungszeitraumModel->updateAzr(
|
||||
$anrechnungszeitraum_id,
|
||||
$studiensemester_kurzbz,
|
||||
$anrechnungstart,
|
||||
$anrechnungende
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithJsonError(getError($result));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Anrechnungszeitraum.
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
|
||||
|
||||
$result = $this->AnrechnungszeitraumModel->deleteAzr($anrechnungszeitraum_id);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithJsonError(getError($result));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates post parameters.
|
||||
*
|
||||
* @param $post
|
||||
*/
|
||||
private function _validate($post)
|
||||
{
|
||||
$studiensemester_kurzbz = $post['studiensemester_kurzbz'];
|
||||
$anrechnungstart = $post['anrechnungstart'];
|
||||
$anrechnungende = $post['anrechnungende'];
|
||||
|
||||
if (isEmptyString($studiensemester_kurzbz)
|
||||
|| isEmptyString($anrechnungstart)
|
||||
|| isEmptyString($anrechnungende))
|
||||
{
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
|
||||
}
|
||||
|
||||
if ($anrechnungstart > $anrechnungende)
|
||||
{
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNachEndedatum'));
|
||||
}
|
||||
|
||||
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||
$studiensemester = getData($result)[0];
|
||||
|
||||
if ($anrechnungstart < $studiensemester->start || $anrechnungstart > $studiensemester->ende)
|
||||
{
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNichtInStudiensemester'));
|
||||
}
|
||||
|
||||
if ($anrechnungende < $studiensemester->start || $anrechnungende > $studiensemester->ende)
|
||||
{
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorEndedatumNichtInStudiensemester'));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the UID of the logged user and checks if it is valid
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,9 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
)
|
||||
);
|
||||
|
||||
//Load configs
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
|
||||
@@ -90,7 +93,8 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
$antragData = $this->anrechnunglib->getAntragData(
|
||||
$anrechnungData->prestudent_id,
|
||||
$anrechnungData->studiensemester_kurzbz,
|
||||
$anrechnungData->lehrveranstaltung_id
|
||||
$anrechnungData->lehrveranstaltung_id,
|
||||
$anrechnungData->anrechnung_id
|
||||
);
|
||||
|
||||
// Get Empfehlung data
|
||||
@@ -209,71 +213,64 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
*/
|
||||
public function requestRecommendation()
|
||||
{
|
||||
$data = $this->input->post('data');
|
||||
$anrechnung_id = $this->input->post('anrechnung_id');
|
||||
|
||||
if(isEmptyArray($data))
|
||||
if(isEmptyString($anrechnung_id))
|
||||
{
|
||||
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
|
||||
}
|
||||
|
||||
$retval = array();
|
||||
$counter = 0;
|
||||
|
||||
// Check if Anrechnungs-LV has lector
|
||||
if (!$this->anrechnunglib->LVhasLector($anrechnung_id))
|
||||
{
|
||||
$this->terminateWithJsonError('LV has no lector');
|
||||
}
|
||||
|
||||
foreach ($data as $item)
|
||||
{
|
||||
// Check if Anrechnungs-LV has lector
|
||||
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id']))
|
||||
{
|
||||
// Count up LV with no lector
|
||||
$counter++;
|
||||
// Get Fachbereichsleitung or LV Leitung.
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$result = $this->anrechnunglib->getLeitungOfLvOe($anrechnung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If LV Leitung is not present, gets all LV lectors.
|
||||
$result = $this->anrechnunglib->getLectors($anrechnung_id);
|
||||
}
|
||||
|
||||
// Break, if LV has no lector
|
||||
break;
|
||||
}
|
||||
$empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
|
||||
|
||||
// Get full name of LV Leitung.
|
||||
// If LV Leitung is not present, get full name of LV lectors.
|
||||
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
|
||||
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
|
||||
? implode(', ', array_column($lector_arr, 'fullname'))
|
||||
: '';
|
||||
|
||||
// Request Recommendation
|
||||
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
|
||||
{
|
||||
$retval[]= array(
|
||||
'anrechnung_id' => $item['anrechnung_id'],
|
||||
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
|
||||
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
|
||||
'empfehlung_anrechnung' => null,
|
||||
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
|
||||
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 (!isEmptyArray($retval))
|
||||
{
|
||||
self::_sendSanchoMailToLectors($retval);
|
||||
|
||||
// Output json to ajax
|
||||
return $this->outputJsonSuccess($retval);
|
||||
}
|
||||
// Request Recommendation
|
||||
if ($this->anrechnunglib->requestRecommendation($anrechnung_id))
|
||||
{
|
||||
$retval[]= array(
|
||||
'anrechnung_id' => $anrechnung_id,
|
||||
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
|
||||
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
|
||||
'empfehlung_anrechnung' => null,
|
||||
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
|
||||
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
|
||||
);
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
if (isEmptyArray($retval) && $counter > 0)
|
||||
{
|
||||
return $this->outputJsonError(
|
||||
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
|
||||
);
|
||||
}
|
||||
if ($empfehlungsanfrage_an == '')
|
||||
{
|
||||
$this->terminateWithJsonError(
|
||||
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
|
||||
);
|
||||
}
|
||||
|
||||
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
|
||||
if (isEmptyArray($retval))
|
||||
{
|
||||
$this->terminateWithJsonError("Empfehlung wurde nicht angefordert");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Output json to ajax
|
||||
return $this->outputJsonSuccess($retval);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -467,39 +464,33 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
|
||||
/**
|
||||
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
|
||||
* @param $mail_params
|
||||
* @param $anrechnung_id
|
||||
* @return bool
|
||||
*/
|
||||
private function _sendSanchoMailToLectors($mail_params)
|
||||
private function _sendSanchoMailToLectors($anrechnung_id)
|
||||
{
|
||||
// Get Lehrveranstaltungen
|
||||
$anrechnung_arr = array();
|
||||
|
||||
foreach ($mail_params as $item)
|
||||
{
|
||||
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
|
||||
$anrechnung_arr[]= array(
|
||||
'lehrveranstaltung_id' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
|
||||
);
|
||||
}
|
||||
|
||||
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
|
||||
|
||||
$lehrveranstaltung_id = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->lehrveranstaltung_id;
|
||||
$studiensemester_kurzbz = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->studiensemester_kurzbz;
|
||||
|
||||
/**
|
||||
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
|
||||
* Get mail receivers.
|
||||
* If config is default (lectors): prio for LV-Leitung, if not present to all lectors of LV.
|
||||
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
|
||||
* **/
|
||||
$lector_arr = $this->_getLectors($anrechnung_arr);
|
||||
if ($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$receiver_arr = $this->_getLeitungOfLvOe($lehrveranstaltung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$receiver_arr = $this->_getLectors($studiensemester_kurzbz, $lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Send mail to lectors
|
||||
foreach ($lector_arr as $lector)
|
||||
// Send mail
|
||||
foreach ($receiver_arr as $receiver)
|
||||
{
|
||||
$to = $lector->uid;
|
||||
$vorname = $lector->vorname;
|
||||
$to = $receiver->uid. '@'. DOMAIN;;
|
||||
$vorname = $receiver->vorname;
|
||||
|
||||
// Get full name of stgl
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
@@ -537,35 +528,30 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
* @param $anrechnung_arr
|
||||
* @return array
|
||||
*/
|
||||
private function _getLectors($anrechnung_arr)
|
||||
private function _getLectors($studiensemester_kurzbz, $lehrveranstaltung_id)
|
||||
{
|
||||
$lector_arr = array();
|
||||
|
||||
// Get lectors
|
||||
foreach($anrechnung_arr as $anrechnung)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
|
||||
$result = $this->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id);
|
||||
|
||||
if (!$result = getData($result))
|
||||
{
|
||||
show_error('Failed retrieving lectors of Lehrveranstaltung');
|
||||
}
|
||||
if (!$result = getData($result))
|
||||
{
|
||||
show_error('Failed retrieving lectors of Lehrveranstaltung');
|
||||
}
|
||||
|
||||
// Check if lv has LV-Leitung
|
||||
$key = array_search(true, array_column($result, 'lvleiter'));
|
||||
// Check if lv has LV-Leitung
|
||||
$key = array_search(true, array_column($result, 'lvleiter'));
|
||||
|
||||
// If lv has LV-Leitung, keep only the one
|
||||
if ($key !== false)
|
||||
{
|
||||
$lector_arr[]= $result[$key];
|
||||
}
|
||||
// ...otherwise keep all lectors
|
||||
else
|
||||
{
|
||||
$lector_arr = array_merge($lector_arr, $result);
|
||||
}
|
||||
}
|
||||
// If lv has LV-Leitung, keep only the one
|
||||
if ($key !== false)
|
||||
{
|
||||
$lector_arr[]= $result[$key];
|
||||
}
|
||||
// ...otherwise keep all lectors
|
||||
else
|
||||
{
|
||||
$lector_arr = array_merge($lector_arr, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
|
||||
@@ -584,6 +570,14 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
|
||||
}
|
||||
|
||||
// Get Leitungen of Lehrveranstaltungs-Organisationseinheit
|
||||
private function _getLeitungOfLvOe($lehrveranstaltung_id)
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
|
||||
|
||||
return hasData($result) ? getData($result) : show_error('Failed retrieving Leitung of Lehrveranstaltungs-Organisationseinheit');
|
||||
}
|
||||
|
||||
private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id)
|
||||
{
|
||||
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||
@@ -606,8 +600,5 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
trim($empfehlungstext),
|
||||
$this->_uid
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,6 +28,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
)
|
||||
);
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
|
||||
@@ -78,6 +81,19 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
show_error(getError($studiengang_kz_arr));
|
||||
}
|
||||
|
||||
// Get oes the user is entitled for
|
||||
$oe_kurzbz_arr_schreibberechtigt = array();
|
||||
if ($oe_arr = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
|
||||
{
|
||||
foreach($oe_arr as $oe)
|
||||
{
|
||||
$berechtigt = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $oe);
|
||||
|
||||
if ($berechtigt) $oe_kurzbz_arr_schreibberechtigt[]= $oe;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if permission is readonly
|
||||
$hasReadOnlyAccess =
|
||||
$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's')
|
||||
&& !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid');
|
||||
@@ -87,9 +103,11 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
|
||||
$viewData = array(
|
||||
'studiensemester_selected' => $studiensemester_kurzbz,
|
||||
'studiengaenge_entitled' => $studiengang_kz_arr,
|
||||
'studiengaenge_entitled' => $studiengang_kz_arr, // alle STG mit Lese- und Schreibberechtigung
|
||||
'oes_schreibberechtigt' => $oe_kurzbz_arr_schreibberechtigt, // alle STG nur mit Schreibberechtigung
|
||||
'hasReadOnlyAccess' => $hasReadOnlyAccess,
|
||||
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess
|
||||
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess,
|
||||
'configFachbereichsleitung' => $this->config->item('fbl')
|
||||
);
|
||||
|
||||
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
|
||||
@@ -207,14 +225,20 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
// Request Recommendation
|
||||
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
|
||||
{
|
||||
// Get full name of LV Leitung.
|
||||
// If LV Leitung is not present, get full name of LV lectors.
|
||||
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
|
||||
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
|
||||
? implode(', ', array_column($lector_arr, 'fullname'))
|
||||
: '';
|
||||
// Get full name of Fachbereichsleitung or LV Leitung.
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$result = $this->anrechnunglib->getLeitungOfLvOe($item['anrechnung_id']);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If LV Leitung is not present, get full name of LV lectors.
|
||||
$result = $this->anrechnunglib->getLectors($item['anrechnung_id']);
|
||||
}
|
||||
|
||||
$retval[]= array(
|
||||
$empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
|
||||
|
||||
$retval[]= array(
|
||||
'anrechnung_id' => $item['anrechnung_id'],
|
||||
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
|
||||
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
|
||||
@@ -225,23 +249,18 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 (!isEmptyArray($retval))
|
||||
{
|
||||
self::_sendSanchoMailToLectors($retval);
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
if (isEmptyArray($retval) && $counter == 0)
|
||||
if (isEmptyArray($retval))
|
||||
{
|
||||
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
|
||||
if ($counter > 0)
|
||||
{
|
||||
$this->terminateWithJsonError('Bei '. $counter.' LV sind keine LektorInnen zugeteilt.');
|
||||
}
|
||||
|
||||
$this->terminateWithJsonError('Es wurden keine Empfehlungen angefordert');
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($retval);
|
||||
$this->outputJsonSuccess($retval);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -316,7 +335,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
* @param $mail_params
|
||||
* @return bool
|
||||
*/
|
||||
private function _sendSanchoMailToLectors($mail_params)
|
||||
private function _sendSanchoMail($mail_params)
|
||||
{
|
||||
// Get Lehrveranstaltungen
|
||||
$anrechnung_arr = array();
|
||||
@@ -332,18 +351,25 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
|
||||
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
|
||||
|
||||
|
||||
/**
|
||||
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
|
||||
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
|
||||
* **/
|
||||
$lector_arr = $this->_getLectors($anrechnung_arr);
|
||||
/**
|
||||
* Get mail receivers.
|
||||
* If retrieving lectors: prio for LV-Leitung, if not present to all lectors of LV.
|
||||
* This function will receive a unique array to avoid sending more mails to one and the same user.
|
||||
**/
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$receiver_arr = $this->_getLeitungOfLvOe($anrechnung_arr);
|
||||
}
|
||||
else
|
||||
{
|
||||
$receiver_arr = $this->_getLectors($anrechnung_arr);
|
||||
}
|
||||
|
||||
// Send mail to lectors
|
||||
foreach ($lector_arr as $lector)
|
||||
foreach ($receiver_arr as $receiver)
|
||||
{
|
||||
$to = $lector->uid;
|
||||
$vorname = $lector->vorname;
|
||||
$to = $receiver->uid. '@'. DOMAIN;
|
||||
$vorname = $receiver->vorname;
|
||||
|
||||
// Get full name of stgl
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
@@ -427,4 +453,34 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
|
||||
return $lector_arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Leitungen of Lehrveranstaltungs-Organisationseinheit with unique uids.
|
||||
*
|
||||
* @param $anrechnung_arr
|
||||
* @return array
|
||||
*/
|
||||
private function _getLeitungOfLvOe($anrechnung_arr)
|
||||
{
|
||||
$oeLeitung_arr = array();
|
||||
|
||||
// Get Leitungen
|
||||
foreach($anrechnung_arr as $anrechnung)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($anrechnung['lehrveranstaltung_id']);
|
||||
|
||||
if (!hasData($result))
|
||||
{
|
||||
show_error('No Leitung found');
|
||||
}
|
||||
|
||||
$oeLeitung_arr = array_merge($oeLeitung_arr, getData($result));
|
||||
}
|
||||
|
||||
// Make array unique
|
||||
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
|
||||
|
||||
return $oeLeitung_arr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,11 +80,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
$prestudent_id = getData($result)[0]->prestudent_id;
|
||||
|
||||
// Check if application deadline is expired
|
||||
$is_expired = self::_isExpired(
|
||||
$this->config->item('submit_application_start'),
|
||||
$this->config->item('submit_application_end'),
|
||||
$studiensemester_kurzbz
|
||||
);
|
||||
$is_expired = $this->_isExpired($studiensemester_kurzbz);
|
||||
|
||||
// Check if Lehrveranstaltung was already graded with application blocking grades
|
||||
$is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id);
|
||||
@@ -93,7 +89,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
$anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
|
||||
|
||||
// Get Antrag data
|
||||
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id);
|
||||
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id, $anrechnungData->anrechnung_id);
|
||||
|
||||
$viewData = array(
|
||||
'antragData' => $antragData,
|
||||
@@ -115,6 +111,8 @@ class requestAnrechnung extends Auth_Controller
|
||||
$lehrveranstaltung_id = $this->input->post('lv_id');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester');
|
||||
$bestaetigung = $this->input->post('bestaetigung');
|
||||
$begruendung_ects = $this->input->post('begruendung_ects');
|
||||
$begruendung_lvinhalt = $this->input->post('begruendung_lvinhalt');
|
||||
|
||||
// Validate data
|
||||
if (empty($_FILES['uploadfile']['name']))
|
||||
@@ -125,7 +123,9 @@ class requestAnrechnung extends Auth_Controller
|
||||
if (isEmptyString($begruendung_id) ||
|
||||
isEmptyString($anmerkung) ||
|
||||
isEmptyString($lehrveranstaltung_id) ||
|
||||
isEmptyString($studiensemester_kurzbz))
|
||||
isEmptyString($studiensemester_kurzbz) ||
|
||||
isEmptyString($begruendung_ects) ||
|
||||
isEmptyString($begruendung_lvinhalt))
|
||||
{
|
||||
return $this->outputJsonError($this->p->t('ui', 'errorFelderFehlen'));
|
||||
}
|
||||
@@ -176,7 +176,9 @@ class requestAnrechnung extends Auth_Controller
|
||||
$lehrveranstaltung_id,
|
||||
$begruendung_id,
|
||||
$lastInsert_dms_id,
|
||||
$anmerkung
|
||||
$anmerkung,
|
||||
$begruendung_ects,
|
||||
$begruendung_lvinhalt
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
@@ -234,32 +236,30 @@ class requestAnrechnung extends Auth_Controller
|
||||
* @return bool True if deadline is expired
|
||||
* @throws Exception
|
||||
*/
|
||||
private function _isExpired($start, $ende, $studiensemester_kurzbz)
|
||||
private function _isExpired($studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$today = new DateTime('today midnight');
|
||||
|
||||
// If start is not given, set to Semesterstart.
|
||||
if (!isset($start) || isEmptyString($start))
|
||||
{
|
||||
$this->StudiensemesterModel->addSelect('start');
|
||||
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||
$start = getData($result)[0]->start;
|
||||
}
|
||||
// Load all Anrechnungszeitfenster for this Studiensemester
|
||||
$this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
|
||||
$result = $this->AnrechnungszeitraumModel->loadWhere(array('studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
|
||||
// If ende is not given, set to Semesterende.
|
||||
if (!isset($ende) || isEmptyString($ende))
|
||||
{
|
||||
$this->StudiensemesterModel->addSelect('ende');
|
||||
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||
$ende = getData($result)[0]->ende;
|
||||
}
|
||||
if (hasData($result))
|
||||
{
|
||||
// Loop through Anrechnungszeitfenster
|
||||
foreach (getData($result) as $azrObj)
|
||||
{
|
||||
$start = new DateTime($azrObj->anrechnungstart);
|
||||
$ende = new DateTime($azrObj->anrechnungende);
|
||||
|
||||
$today = new DateTime('today midnight');
|
||||
$start = new DateTime($start);
|
||||
$ende = new DateTime($ende);
|
||||
// Return false if today is at least within one Anrechnungszeitraum
|
||||
if (($today >= $start && $today <= $ende)) return false;
|
||||
|
||||
// True if expired
|
||||
return ($today < $start || $today > $ende);
|
||||
}
|
||||
}
|
||||
|
||||
// Return true if today is in none Anrechnungszeitraum
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,9 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
)
|
||||
);
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
|
||||
@@ -84,16 +87,21 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
$antragData = $this->anrechnunglib->getAntragData(
|
||||
$anrechnungData->prestudent_id,
|
||||
$anrechnungData->studiensemester_kurzbz,
|
||||
$anrechnungData->lehrveranstaltung_id
|
||||
$anrechnungData->lehrveranstaltung_id,
|
||||
$anrechnungData->anrechnung_id
|
||||
);
|
||||
|
||||
// Get Empfehlung data
|
||||
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id);
|
||||
|
||||
// False if LV-Leitung is present and user is not LV-Leitung. Otherwise always true.
|
||||
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($anrechnung_id);
|
||||
|
||||
$viewData = array(
|
||||
'antragData' => $antragData,
|
||||
'anrechnungData' => $anrechnungData,
|
||||
'empfehlungData' => $empfehlungData
|
||||
'empfehlungData' => $empfehlungData,
|
||||
'isEmpfehlungsberechtigt' => $isEmpfehlungsberechtigt
|
||||
);
|
||||
|
||||
$this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData);
|
||||
@@ -140,10 +148,13 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
* Send mails to STGL (if not present STGL, send to STGL assistance)
|
||||
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
|
||||
* */
|
||||
if (!$this->_sendSanchoMails($json, true))
|
||||
{
|
||||
return $this->outputJsonError('Failed sending emails');
|
||||
}
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
if (!$this->_sendSanchoMails($json, true))
|
||||
{
|
||||
return $this->outputJsonError('Failed sending emails');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($json);
|
||||
}
|
||||
@@ -191,10 +202,13 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
if (isset($json) && !isEmptyArray($json))
|
||||
{
|
||||
// Send mails to STGL (if not present STGL, send to STGL assistance)
|
||||
if (!$this->_sendSanchoMails($json, false))
|
||||
{
|
||||
return $this->outputJsonError('Failed sending emails');
|
||||
}
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
if (!$this->_sendSanchoMails($json, false))
|
||||
{
|
||||
return $this->outputJsonError('Failed sending emails');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($json);
|
||||
}
|
||||
@@ -253,8 +267,14 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
show_error('Failed retrieving Anrechnung');
|
||||
}
|
||||
|
||||
$result = $this->LehrveranstaltungModel
|
||||
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
if($result = getData($result))
|
||||
{
|
||||
@@ -282,14 +302,20 @@ class reviewAnrechnungDetail extends Auth_Controller
|
||||
show_error('Failed retrieving Anrechnung');
|
||||
}
|
||||
|
||||
$result = $this->LehrveranstaltungModel
|
||||
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
if($result = getData($result))
|
||||
{
|
||||
$entitled_lector_arr = array_column($result, 'uid');
|
||||
$entitled_uid_arr = array_column($result, 'uid');
|
||||
|
||||
if (in_array($this->_uid, $entitled_lector_arr))
|
||||
if (in_array($this->_uid, $entitled_uid_arr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ class reviewAnrechnungUebersicht extends Auth_Controller
|
||||
)
|
||||
);
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
|
||||
@@ -72,7 +75,8 @@ class reviewAnrechnungUebersicht extends Auth_Controller
|
||||
}
|
||||
|
||||
$viewData = array(
|
||||
'studiensemester_selected' => $studiensemester_kurzbz
|
||||
'studiensemester_selected' => $studiensemester_kurzbz,
|
||||
'configFachbereichsleitung' => $this->config->item('fbl')
|
||||
);
|
||||
|
||||
$this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData);
|
||||
@@ -111,16 +115,19 @@ class reviewAnrechnungUebersicht extends Auth_Controller
|
||||
* Send mails to STGL (if not present STGL, send to STGL assistance)
|
||||
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
|
||||
* */
|
||||
if (!$this->_sendSanchoMails($json, true))
|
||||
{
|
||||
show_error('Failed sending emails');
|
||||
}
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
if (!$this->_sendSanchoMails($json, true))
|
||||
{
|
||||
show_error('Failed sending emails');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($json);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,10 +161,13 @@ class reviewAnrechnungUebersicht extends Auth_Controller
|
||||
if (isset($json) && !isEmptyArray($json))
|
||||
{
|
||||
// Send mails to STGL (if not present STGL, send to STGL assistance)
|
||||
if (!$this->_sendSanchoMails($json, false))
|
||||
{
|
||||
show_error('Failed sending emails');
|
||||
}
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
if (!$this->_sendSanchoMails($json, false))
|
||||
{
|
||||
show_error('Failed sending emails');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($json);
|
||||
}
|
||||
@@ -217,14 +227,20 @@ class reviewAnrechnungUebersicht extends Auth_Controller
|
||||
show_error('Failed retrieving Anrechnung');
|
||||
}
|
||||
|
||||
$result = $this->LehrveranstaltungModel
|
||||
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
if ($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
if($result = getData($result))
|
||||
{
|
||||
$entitled_lector_arr = array_column($result, 'uid');
|
||||
$entitled_uid_arr = array_column($result, 'uid');
|
||||
|
||||
if (in_array($this->_uid, $entitled_lector_arr))
|
||||
if (in_array($this->_uid, $entitled_uid_arr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ class InfoCenter extends Auth_Controller
|
||||
const FREIGEGEBEN_PAGE = 'freigegeben';
|
||||
const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert';
|
||||
const ABGEWIESEN_PAGE = 'abgewiesen';
|
||||
const AUFGENOMMEN_PAGE = 'aufgenommen';
|
||||
const SHOW_DETAILS_PAGE = 'showDetails';
|
||||
const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails';
|
||||
const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung';
|
||||
@@ -115,6 +116,7 @@ class InfoCenter extends Auth_Controller
|
||||
'index' => 'infocenter:r',
|
||||
'freigegeben' => 'infocenter:r',
|
||||
'abgewiesen' => 'infocenter:r',
|
||||
'aufgenommen' => 'infocenter:r',
|
||||
'reihungstestAbsolviert' => 'infocenter:r',
|
||||
'showDetails' => 'infocenter:r',
|
||||
'showZGVDetails' => 'lehre/zgvpruefung:r',
|
||||
@@ -142,12 +144,6 @@ class InfoCenter extends Auth_Controller
|
||||
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'reloadLogs' => 'infocenter:r',
|
||||
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'park' => 'infocenter:rw',
|
||||
'unpark' => 'infocenter:rw',
|
||||
'setOnHold' => 'infocenter:rw',
|
||||
'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
|
||||
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'setNavigationMenuArrayJson' => 'infocenter:r',
|
||||
'getAbsageData' => 'infocenter:r',
|
||||
'saveAbsageForAll' => 'infocenter:rw',
|
||||
@@ -164,6 +160,7 @@ class InfoCenter extends Auth_Controller
|
||||
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
|
||||
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
|
||||
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
|
||||
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
|
||||
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
$this->load->model('system/Message_model', 'MessageModel');
|
||||
@@ -233,6 +230,16 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
$this->load->view('system/infocenter/infocenterAbgewiesen.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgenommene page of the InfoCenter tool
|
||||
*/
|
||||
public function aufgenommen()
|
||||
{
|
||||
$this->_setNavigationMenu(self::AUFGENOMMEN_PAGE); // define the navigation menu for this page
|
||||
|
||||
$this->load->view('system/infocenter/infocenterAufgenommen.php');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -319,7 +326,7 @@ class InfoCenter extends Auth_Controller
|
||||
show_error('Person does not exist!');
|
||||
|
||||
$origin_page = $this->input->get(self::ORIGIN_PAGE);
|
||||
if ($origin_page == self::INDEX_PAGE)
|
||||
if (in_array($origin_page, array(self::INDEX_PAGE, self::ABGEWIESEN_PAGE)))
|
||||
{
|
||||
// mark person as locked for editing
|
||||
$result = $this->PersonLockModel->lockPerson($person_id, $this->_uid, self::APP);
|
||||
@@ -364,7 +371,14 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
if (isError($result)) show_error(getError($result));
|
||||
|
||||
$redirectLink = '/'.self::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId();
|
||||
$origin_page = $this->input->get(self::ORIGIN_PAGE);
|
||||
|
||||
if ($origin_page === self::ABGEWIESEN_PAGE)
|
||||
$redirectLink = self::INFOCENTER_URI. '/' .self::ABGEWIESEN_PAGE;
|
||||
else
|
||||
$redirectLink = '/'.self::INFOCENTER_URI;
|
||||
|
||||
$redirectLink .= '?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId();
|
||||
|
||||
// Force reload of Dataset after Unlock
|
||||
$redirectLink .= '&'.self::KEEP_TABLESORTER_FILTER.'=true';
|
||||
@@ -606,7 +620,7 @@ class InfoCenter extends Auth_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang
|
||||
* Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang
|
||||
*/
|
||||
private function sendZgvMail($mail, $typ, $person){
|
||||
$data = array(
|
||||
@@ -697,7 +711,7 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
/**
|
||||
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
|
||||
* Falls es erfolgreich war, sendet er die Mail raus
|
||||
* Falls es erfolgreich war, wird eine Mail rausgeschickt
|
||||
*/
|
||||
public function zgvRueckfragen()
|
||||
{
|
||||
@@ -751,7 +765,8 @@ class InfoCenter extends Auth_Controller
|
||||
$this->sendZgvMail($mail, $typ, $person);
|
||||
elseif (isError($insert))
|
||||
$this->terminateWithJsonError('Fehler beim Speichern');
|
||||
}else
|
||||
}
|
||||
else
|
||||
{
|
||||
$insert = $this->ZGVPruefungModel->insert(
|
||||
array(
|
||||
@@ -781,7 +796,7 @@ class InfoCenter extends Auth_Controller
|
||||
}
|
||||
|
||||
$hold = false;
|
||||
if ($this->personloglib->getOnHoldDate($person_id) !== null)
|
||||
if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv')))
|
||||
$hold = true;
|
||||
|
||||
$this->outputJsonSuccess(
|
||||
@@ -1162,107 +1177,7 @@ class InfoCenter extends Auth_Controller
|
||||
->set_output($aktecontent->retval)
|
||||
->_display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the date until which a person is parked
|
||||
* @param $person_id
|
||||
*/
|
||||
public function getPostponeDate($person_id)
|
||||
{
|
||||
$result = array(
|
||||
'type' => null,
|
||||
'date' => null
|
||||
);
|
||||
|
||||
$parkedDate = $this->personloglib->getParkedDate($person_id);
|
||||
|
||||
if (isset($parkedDate))
|
||||
{
|
||||
$result['type'] = 'parked';
|
||||
$result['date'] = $parkedDate;
|
||||
}
|
||||
else
|
||||
{
|
||||
$onholdDate = $this->personloglib->getOnHoldDate($person_id);
|
||||
|
||||
if (isset($onholdDate))
|
||||
{
|
||||
$result['type'] = 'onhold';
|
||||
$result['date'] = $onholdDate;
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes parking of a person, i.e. a person is not expected to do any actions while parked
|
||||
*/
|
||||
public function park()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
$date = $this->input->post('parkdate');
|
||||
|
||||
$result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes parking of a person
|
||||
*/
|
||||
public function unPark()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
|
||||
$result = $this->personloglib->unPark($person_id);
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a person on hold ("zurückstellen")
|
||||
*/
|
||||
public function setOnHold()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
$date = $this->input->post('onholddate');
|
||||
|
||||
$result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removed on hold status of a person
|
||||
*/
|
||||
public function removeOnHold()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
|
||||
$result = $this->personloglib->removeOnHold($person_id);
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the End date of the current Studienjahr
|
||||
*/
|
||||
public function getStudienjahrEnd()
|
||||
{
|
||||
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
|
||||
|
||||
$result = $this->StudienjahrModel->getCurrStudienjahr();
|
||||
|
||||
$json = null;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$json = $result->retval[0]->ende;
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess(array($json));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Wrapper for setNavigationMenu, returns JSON message
|
||||
@@ -1484,7 +1399,6 @@ class InfoCenter extends Auth_Controller
|
||||
if($nachreichungAm < $today)
|
||||
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
|
||||
|
||||
|
||||
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
|
||||
|
||||
if (hasData($akte)) {
|
||||
@@ -1631,6 +1545,7 @@ class InfoCenter extends Auth_Controller
|
||||
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
|
||||
$reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
|
||||
$abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
$aufgenommenLink = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
|
||||
$currentFilterId = $this->input->get(self::FILTER_ID);
|
||||
if (isset($currentFilterId))
|
||||
@@ -1638,6 +1553,7 @@ class InfoCenter extends Auth_Controller
|
||||
$freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$abgewiesenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$aufgenommenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
}
|
||||
|
||||
$this->navigationlib->setSessionMenu(
|
||||
@@ -1688,7 +1604,19 @@ class InfoCenter extends Auth_Controller
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
30 // sort
|
||||
)
|
||||
),
|
||||
'aufgenommen' => $this->navigationlib->oneLevel(
|
||||
'Aufgenommene', // description
|
||||
$aufgenommenLink, // link
|
||||
null, // children
|
||||
'check', // icon
|
||||
null, // subscriptDescription
|
||||
false, // expand
|
||||
null, // subscriptLinkClass
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
40 // sort
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -1716,6 +1644,9 @@ class InfoCenter extends Auth_Controller
|
||||
if ($origin_page === self::ABGEWIESEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
|
||||
if ($origin_page === self::AUFGENOMMEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
|
||||
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
|
||||
if (isset($prevFilterId))
|
||||
{
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
|
||||
class Rueckstellung extends Auth_Controller
|
||||
{
|
||||
private $_ci; // Code igniter instance
|
||||
private $_uid;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'get' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'set' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw')
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
|
||||
$this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
$this->load->library('PersonLogLib');
|
||||
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
}
|
||||
|
||||
public function get($person_id)
|
||||
{
|
||||
$result = null;
|
||||
$rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id);
|
||||
|
||||
if (isError($rueckstellung))
|
||||
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
|
||||
|
||||
if (hasData($rueckstellung))
|
||||
{
|
||||
$rueckstellung = getData($rueckstellung)[0];
|
||||
$fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon));
|
||||
|
||||
$result = array(
|
||||
'von' => $fullName,
|
||||
'bezeichnung' => $rueckstellung->bezeichnung,
|
||||
'bis' => $rueckstellung->datum_bis,
|
||||
'status_kurzbz' => $rueckstellung->status_kurzbz
|
||||
);
|
||||
|
||||
if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d'))
|
||||
{
|
||||
$this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked'));
|
||||
$result = null;
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess($result);
|
||||
}
|
||||
|
||||
public function set()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
$datum_bis = $this->input->post('datum_bis');
|
||||
$status_kurzbz = $this->input->post('status_kurzbz');
|
||||
|
||||
$result = $this->_ci->RueckstellungModel->insert(
|
||||
array('person_id' => $person_id,
|
||||
'status_kurzbz' => $status_kurzbz,
|
||||
'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'),
|
||||
'insertvon' => $this->_uid
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithJsonError(getError($result));
|
||||
|
||||
$this->_log($person_id, $status_kurzbz);
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$person_id = $this->input->post('person_id');
|
||||
$status = $this->input->post('status');
|
||||
|
||||
$result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status));
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern'));
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
public function getStatus($aktiv = true)
|
||||
{
|
||||
$this->_ci->RueckstellungStatusModel->addOrder('sort');
|
||||
$result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv));
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
|
||||
|
||||
$this->outputJsonSuccess(getData($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the UID of the logged user and checks if it is valid
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
|
||||
private function _log($person_id, $status_kurzbz)
|
||||
{
|
||||
$message = "Person $person_id set to $status_kurzbz";
|
||||
|
||||
$this->_ci->personloglib->log(
|
||||
$person_id,
|
||||
'Action',
|
||||
array(
|
||||
'name' => 'Person status set',
|
||||
'message' => $message,
|
||||
'success' => true
|
||||
),
|
||||
'bewerbung',
|
||||
'infocenter',
|
||||
null,
|
||||
$this->_uid
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ class Issues extends Auth_Controller
|
||||
// Load models
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('system/Sprache_model', 'SpracheModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
@@ -45,10 +46,11 @@ class Issues extends Auth_Controller
|
||||
public function index()
|
||||
{
|
||||
$oes_for_issues = $this->_getOesForIssues();
|
||||
$language_index = $this->_getLanguageIndex();
|
||||
|
||||
$this->load->view(
|
||||
'system/issues/issues',
|
||||
$oes_for_issues
|
||||
array_merge($oes_for_issues, array('language_index' => $language_index))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -166,4 +168,28 @@ class Issues extends Auth_Controller
|
||||
'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets language index of currently logged in user.
|
||||
* @return object int (the index, start at 1)
|
||||
*/
|
||||
private function _getLanguageIndex()
|
||||
{
|
||||
$idx = 1;
|
||||
$this->SpracheModel->addSelect('sprache, index');
|
||||
$langRes = $this->SpracheModel->load();
|
||||
|
||||
if (hasData($langRes))
|
||||
{
|
||||
$userLang = getUserLanguage();
|
||||
$lang = getData($langRes);
|
||||
|
||||
foreach ($lang as $l)
|
||||
{
|
||||
if ($l->sprache == $userLang) $idx = $l->index;
|
||||
}
|
||||
}
|
||||
|
||||
return $idx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,305 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class IssuesKonfiguration extends Auth_Controller
|
||||
{
|
||||
private $_uid;
|
||||
|
||||
const STRING_DATA_TYPE = 'string';
|
||||
const INTEGER_DATA_TYPE = 'integer';
|
||||
const FLOAT_DATA_TYPE = 'float';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'admin:r',
|
||||
'getApps' => 'admin:r',
|
||||
'getFehlerKonfigurationByApp' => 'admin:r',
|
||||
'saveFehlerKonfiguration' => 'admin:rw',
|
||||
'deleteKonfiguration' => 'admin:rw',
|
||||
'deleteKonfigurationsWerte' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('IssuesLib');
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load models
|
||||
$this->load->model('system/Fehlerkonfigurationstyp_model', 'FehlerkonfigurationstypModel');
|
||||
$this->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'ui',
|
||||
'filter',
|
||||
'fehlermonitoring'
|
||||
)
|
||||
);
|
||||
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
$this->setControllerId(); // sets the controller id
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Load initial view.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view("system/issues/issuesKonfiguration.php");
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Apps to which Fehler exist.
|
||||
*/
|
||||
public function getApps()
|
||||
{
|
||||
$this->FehlerModel->addDistinct();
|
||||
$this->FehlerModel->addSelect('app');
|
||||
$this->FehlerModel->addJoin('system.tbl_fehler_konfigurationstyp', 'app');
|
||||
$this->FehlerModel->addOrder('app');
|
||||
|
||||
$appRes = $this->FehlerModel->load();
|
||||
|
||||
$this->outputJson($appRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehlercodes, optionally by app.
|
||||
*/
|
||||
public function getFehlerKonfigurationByApp()
|
||||
{
|
||||
$app = $this->input->get('app');
|
||||
|
||||
// get all Konfiguration types, optionally filtered by app
|
||||
$this->FehlerkonfigurationstypModel->addSelect('konfigurationstyp_kurzbz, konfigurationsdatentyp, beschreibung');
|
||||
$this->FehlerkonfigurationstypModel->addOrder('konfigurationstyp_kurzbz');
|
||||
$konfRes = isEmptyString($app)
|
||||
? $this->FehlerkonfigurationstypModel->load()
|
||||
: $this->FehlerkonfigurationstypModel->loadWhere(array('app' => $app));
|
||||
|
||||
if (isError($konfRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// get all Fehler, optionally filtered by app
|
||||
$params = array('fehlercode_extern' => null);
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertyp_kurzbz, fehlertext');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
if (!isEmptyString($app)) $params['app'] = $app;
|
||||
$fehlerRes = $this->FehlerModel->loadWhere($params);
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerLaden'));
|
||||
|
||||
// return object with retrieved data
|
||||
$konfObj = new StdClass();
|
||||
$konfObj->konfigurationstypen = array();
|
||||
$konfObj->fehler = array();
|
||||
|
||||
if (hasData($konfRes)) $konfObj->konfigurationstypen = getData($konfRes);
|
||||
if (hasData($fehlerRes)) $konfObj->fehler = getData($fehlerRes);
|
||||
|
||||
$this->outputJsonSuccess($konfObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a Fehler configuration, inserts new configuration or updates existing.
|
||||
* Checks if datatype of passed configuration is correct.
|
||||
*/
|
||||
public function saveFehlerKonfiguration()
|
||||
{
|
||||
$result = null;
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
$konfigurationsWert = $this->input->post('konfigurationsWert');
|
||||
|
||||
// check if all params passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
// separate by semicolon if multiple values passed
|
||||
$konfigurationsWert = explode(';', $konfigurationsWert);
|
||||
|
||||
// check konfigurationswert
|
||||
|
||||
// get the expected data type
|
||||
$dataType = self::STRING_DATA_TYPE;
|
||||
$this->FehlerkonfigurationstypModel->addSelect('konfigurationsdatentyp');
|
||||
$konfigtypRes = $this->FehlerkonfigurationstypModel->loadWhere(array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz));
|
||||
|
||||
if (hasData($konfigtypRes))
|
||||
{
|
||||
$konfigurationsdatentyp = getData($konfigtypRes)[0]->konfigurationsdatentyp;
|
||||
foreach ($konfigurationsWert as $idx => $konfWert)
|
||||
{
|
||||
// check if data type correct
|
||||
$valid = false;
|
||||
switch ($konfigurationsdatentyp)
|
||||
{
|
||||
case self::INTEGER_DATA_TYPE:
|
||||
$valid = (string)(int)$konfWert == $konfWert;
|
||||
$konfigurationsWert[$idx] = (int) $konfWert;
|
||||
break;
|
||||
case self::FLOAT_DATA_TYPE:
|
||||
$valid = (string)(float)$konfWert == $konfWert;
|
||||
$konfigurationsWert[$idx] = (float) $konfWert;
|
||||
break;
|
||||
default:
|
||||
$valid = is_string($konfWert) && preg_match('/^[A-Za-z0-9_]+$/', $konfWert);
|
||||
}
|
||||
if (!$valid) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationswert', array($konfigurationsdatentyp)));
|
||||
}
|
||||
}
|
||||
|
||||
// check if konfiguration already set for the fehlercode
|
||||
$this->FehlerkonfigurationModel->addSelect('konfiguration');
|
||||
$fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// if konfiguration exists, update by add konfiguration values to existing
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
$existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
|
||||
|
||||
if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
|
||||
|
||||
if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
|
||||
|
||||
$newKonf = json_encode(array_values(array_unique(array_merge($existingKonf, $konfigurationsWert))));
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
$result = $this->FehlerkonfigurationModel->update(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
|
||||
array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
|
||||
);
|
||||
}
|
||||
else // if no konfiguration exists, add new konfiguration entry
|
||||
{
|
||||
$newKonf = json_encode($konfigurationsWert);
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
$result = $this->FehlerkonfigurationModel->insert(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode,
|
||||
'konfiguration' => $newKonf,
|
||||
'insertvon' => $this->_uid
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// output result (insert or update)
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes values of a Konfiguration.
|
||||
*/
|
||||
public function deleteKonfigurationsWerte()
|
||||
{
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
$konfigurationsWert = $this->input->post('konfigurationsWert');
|
||||
|
||||
// check if Konfigurationstyp correctly passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
// check if fehlercode correctly passed
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
// separate by semicolon if multiple values passed
|
||||
$konfigurationsWert = explode(';', $konfigurationsWert);
|
||||
|
||||
// check if konfiguration already set for the fehlercode
|
||||
$this->FehlerkonfigurationModel->addSelect('konfiguration');
|
||||
$fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode
|
||||
)
|
||||
);
|
||||
|
||||
if (!hasData($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// if konfiguration exists, update values
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
$existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
|
||||
|
||||
if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
|
||||
|
||||
if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
|
||||
|
||||
$newKonfArr = array_values(array_diff($existingKonf, $konfigurationsWert));
|
||||
|
||||
// if no konfiguration values left, delete whole entry
|
||||
if (isEmptyArray($newKonfArr))
|
||||
{
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->delete(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$newKonf = json_encode($newKonfArr);
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
// if there are still values, delete only part of the konfiguration
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->update(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
|
||||
array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a Konfiguration.
|
||||
*/
|
||||
public function deleteKonfiguration()
|
||||
{
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
|
||||
// check if Konfigurationstyp correctly passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
// check if fehlercode correctly passed
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->delete(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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');
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ class IssuesZustaendigkeiten extends Auth_Controller
|
||||
// Load models
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->load->model('system/Fehlerzustaendigkeiten_model', 'FehlerzustaendigkeitenModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
@@ -70,7 +69,7 @@ class IssuesZustaendigkeiten extends Auth_Controller
|
||||
{
|
||||
$app = $this->input->get('app');
|
||||
|
||||
//$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz');
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz, app');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
|
||||
$fehlerRes = isset($app) ? $this->FehlerModel->loadWhere(array('app' => $app)) : $this->FehlerModel->load();
|
||||
|
||||
@@ -16,7 +16,8 @@ class Plausichecks extends Auth_Controller
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('issues/PlausicheckProducerLib');
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('app' => 'core'));
|
||||
$this->load->library('issues/PlausicheckDefinitionLib');
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load models
|
||||
@@ -44,18 +45,43 @@ class Plausichecks extends Auth_Controller
|
||||
$fehler_kurzbz = $this->input->get('fehler_kurzbz');
|
||||
|
||||
// issues array for passing issue texts
|
||||
$issueTexts = array();
|
||||
$allIssues = array();
|
||||
// all fehler kurzbz which are going to be checked
|
||||
$fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
$fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
$fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
// set Studiengang to null if not passed
|
||||
if (isEmptyString($studiengang_kz)) $studiengang_kz = null;
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($fehlerKurzbz as $fehler_kurzbz)
|
||||
{
|
||||
// get Text and fehlercode of the Fehler
|
||||
$this->FehlerModel->addSelect('fehlercode, fehlertext, fehlertyp_kurzbz');
|
||||
$fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError(getError($fehlerRes));
|
||||
|
||||
// do not check error if no data
|
||||
if (!hasData($fehlerRes)) continue;
|
||||
|
||||
// get the error data
|
||||
$fehler = getData($fehlerRes)[0];
|
||||
|
||||
// initialize issue array
|
||||
$allIssues[$fehler_kurzbz] = array('fehlercode' => $fehler->fehlercode, 'data' => array());
|
||||
|
||||
// get library name for producing issue
|
||||
$libName = $fehlerLibMappings[$fehler_kurzbz];
|
||||
|
||||
// execute the check
|
||||
$issueTexts[$fehler_kurzbz] = array();
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes));
|
||||
|
||||
@@ -69,19 +95,13 @@ class Plausichecks extends Auth_Controller
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// get Text of the Fehler
|
||||
$this->FehlerModel->addSelect('fehlertext');
|
||||
$fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
|
||||
|
||||
if (isError($fehlerRes)) $this->outputJsonError(getError($fehlerRes));
|
||||
|
||||
// optionally replace fehler parameters in text, output the fehlertext
|
||||
if (hasData($fehlerRes))
|
||||
if (!isEmptyString($fehler->fehlertext))
|
||||
{
|
||||
// use issue fehler text from database if present
|
||||
$fehlerText = getData($fehlerRes)[0]->fehlertext;
|
||||
$fehlercode = $fehler->fehlercode;
|
||||
$fehlerText = $fehler->fehlertext;
|
||||
$fehlerTyp = $fehler->fehlertyp_kurzbz;
|
||||
|
||||
if (!isEmptyArray($fehlertext_params))
|
||||
{
|
||||
@@ -91,6 +111,14 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
$fehlerText = vsprintf($fehlerText, $fehlertext_params);
|
||||
}
|
||||
|
||||
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
|
||||
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
|
||||
|
||||
$issueObj = new StdClass();
|
||||
$issueObj->fehlertext = $fehlerText;
|
||||
$issueObj->type = $fehlerTyp;
|
||||
$allIssues[$fehler_kurzbz]['data'][] = $issueObj;
|
||||
}
|
||||
else // if no issue text found, use generic text
|
||||
{
|
||||
@@ -100,12 +128,11 @@ class Plausichecks extends Auth_Controller
|
||||
// add generic parameters to issue text
|
||||
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
|
||||
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
|
||||
$issueTexts[$fehler_kurzbz][] = $fehlerText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess($issueTexts);
|
||||
$this->outputJsonSuccess($allIssues);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -130,13 +157,38 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes));
|
||||
|
||||
$fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
$fehlerKurzbz = $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
|
||||
$db = new DB_Model();
|
||||
|
||||
// get fehlercodes for fehler_kurzbz
|
||||
$fehlerRes = $db->execReadOnlyQuery(
|
||||
'SELECT
|
||||
fehler_kurzbz, fehlercode
|
||||
FROM
|
||||
system.tbl_fehler
|
||||
WHERE
|
||||
fehler_kurzbz IN ?',
|
||||
array($fehlerKurzbz)
|
||||
);
|
||||
|
||||
if (isError($fehlerRes)) show_error(getError($fehlerRes));
|
||||
|
||||
$fehlerKurzbzCodeMappings = array();
|
||||
if (hasData($fehlerRes))
|
||||
{
|
||||
$fehler = getData($fehlerRes);
|
||||
foreach ($fehler as $fe)
|
||||
{
|
||||
$fehlerKurzbzCodeMappings[$fe->fehler_kurzbz] = $fe->fehlercode;
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(),
|
||||
'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(),
|
||||
'studiengaenge' => hasData($studiengaengeRes) ? getData($studiengaengeRes) : array(),
|
||||
'fehler' => $fehlerKurzbz
|
||||
'fehlerKurzbzCodeMappings' => $fehlerKurzbzCodeMappings
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Interface defining method to implement for issue producer (from core and extensions)
|
||||
*/
|
||||
interface IIssueExistsChecker
|
||||
{
|
||||
/**
|
||||
* Checks if an issue exists.
|
||||
* @param array $params parameters needed for issue detection
|
||||
* @return object with success(true) if issue exists, success(false) otherwise
|
||||
*/
|
||||
public function checkIfIssueExists($paramsForChecking);
|
||||
|
||||
/**
|
||||
* Produces an issue.
|
||||
* @param array $params parameters needed for issue detection
|
||||
* @return object with success(true) if issue exists, success(false) otherwise
|
||||
*/
|
||||
//public function produceIssue($person_id, $oe_kurzbz, $paramsForProducing);
|
||||
}
|
||||
@@ -6,6 +6,8 @@
|
||||
abstract class IssueResolver_Controller extends JOB_Controller
|
||||
{
|
||||
const CI_PATH = 'application';
|
||||
const CI_LIBRARY_FOLDER = 'libraries';
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const ISSUE_RESOLVERS_FOLDER = 'issues/resolvers';
|
||||
const CHECK_ISSUE_RESOLVED_METHOD_NAME = 'checkIfIssueIsResolved';
|
||||
|
||||
@@ -60,10 +62,15 @@ abstract class IssueResolver_Controller extends JOB_Controller
|
||||
isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array()
|
||||
);
|
||||
|
||||
// if called from extension (extension name set), path includes extension names, otherwise it is the core library folder
|
||||
$libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : '';
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::ISSUE_RESOLVERS_FOLDER . '/';
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH . '/' . $libRootPath . 'libraries/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath))
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Job for producing Plausicheck issues
|
||||
*/
|
||||
abstract class PlausiIssueProducer_Controller extends JOB_Controller
|
||||
{
|
||||
protected $_fehlerLibMappings;
|
||||
protected $_app;
|
||||
|
||||
public function __construct($app = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// pass extension name if calling from extension
|
||||
$extensionName = isset($this->_extensionName) ? $this->_extensionName : null;
|
||||
|
||||
// load libraries
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('extensionName' => $extensionName, 'app' => $this->_app));
|
||||
$this->load->library('IssuesLib');
|
||||
}
|
||||
|
||||
protected function producePlausicheckIssues($params)
|
||||
{
|
||||
$this->logInfo("Plausicheck issue producer job started");
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName)
|
||||
{
|
||||
// execute the check
|
||||
$this->logInfo("Checking " . $fehler_kurzbz . "...");
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
$params
|
||||
);
|
||||
|
||||
if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
|
||||
|
||||
if (hasData($plausicheckRes))
|
||||
{
|
||||
$plausicheckData = getData($plausicheckRes);
|
||||
|
||||
foreach ($plausicheckData as $plausiData)
|
||||
{
|
||||
// get the data needed for issue production
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// write the issue
|
||||
$addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isError($addIssueRes))
|
||||
$this->logError(getError($addIssueRes));
|
||||
elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
|
||||
$this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job stopped");
|
||||
}
|
||||
}
|
||||
@@ -37,19 +37,30 @@ class AnrechnungLib
|
||||
* @param $lv_id
|
||||
* @return StdClass
|
||||
*/
|
||||
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id)
|
||||
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id, $anrechnung_id = null)
|
||||
{
|
||||
$antrag_data = new StdClass();
|
||||
|
||||
// Get students UID.
|
||||
$uid = $this->ci->StudentModel->getUID($prestudent_id);
|
||||
|
||||
// Get lehrveranstaltung data. Break, if course is not assigned to student.
|
||||
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
|
||||
|
||||
// If Anrechnung exists
|
||||
if (is_numeric($anrechnung_id))
|
||||
{
|
||||
show_error('You are not assigned to this course yet.');
|
||||
// Just load LV by lv_id
|
||||
$result = $this->ci->LehrveranstaltungModel->load($lv_id);
|
||||
$lv = getData($result)[0];
|
||||
}
|
||||
|
||||
// If Anrechnung not exists
|
||||
else
|
||||
{
|
||||
// Load LV, but check if student is assigned to that LV. Break, if not.
|
||||
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
|
||||
{
|
||||
show_error('You are not assigned to this course yet.');
|
||||
}
|
||||
}
|
||||
|
||||
// Get the students personal data
|
||||
if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0])
|
||||
{
|
||||
@@ -163,6 +174,8 @@ class AnrechnungLib
|
||||
$anrechnung_data->insertvon = '';
|
||||
$anrechnung_data->studiensemester_kurzbz = '';
|
||||
$anrechnung_data->empfehlung = '';
|
||||
$anrechnung_data->begruendung_ects = '';
|
||||
$anrechnung_data->begruendung_lvinhalt = '';
|
||||
$anrechnung_data->status_kurzbz = '';
|
||||
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
|
||||
$anrechnung_data->dokumentname = '';
|
||||
@@ -274,14 +287,21 @@ class AnrechnungLib
|
||||
if (hasData($result))
|
||||
{
|
||||
$empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y');
|
||||
|
||||
// Get lectors who received request for recommendation
|
||||
$lector_arr = self::getLectors($anrechnung_id);
|
||||
|
||||
if (!isEmptyArray($lector_arr))
|
||||
{
|
||||
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($lector_arr, 'fullname'));
|
||||
}
|
||||
|
||||
// Get users who received request for recommendation
|
||||
if($this->ci->config->item('fbl') === TRUE)
|
||||
{
|
||||
$res = $this->getLeitungOfLvOe($anrechnung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$res = $this->getLectors($anrechnung_id);
|
||||
}
|
||||
|
||||
if (!isEmptyArray($res))
|
||||
{
|
||||
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($res, 'fullname'));
|
||||
}
|
||||
}
|
||||
|
||||
if (is_null($anrechnung->empfehlung_anrechnung))
|
||||
@@ -741,6 +761,25 @@ class AnrechnungLib
|
||||
// Continue, if LV has no lector (there is no one to ask for recommendation)
|
||||
return hasData($result) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user is allowed to recommend Anrechnung.
|
||||
*
|
||||
* @param $anrechnung_id
|
||||
* @return bool
|
||||
*/
|
||||
public function isEmpfehlungsberechtigt($anrechnung_id)
|
||||
{
|
||||
if($this->ci->config->item('fbl') === TRUE)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// Get lv-leitungen or, if not present, all lectors of lv.
|
||||
$lector_arr = $this->getLectors($anrechnung_id);
|
||||
|
||||
// Return false if lv-leitung is present and user is not lv-leitung. Otherways return always true.
|
||||
return in_array(getAuthUID(), array_column($lector_arr, 'uid'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get LV Leitung. If not present, get all LV lectors.
|
||||
@@ -774,11 +813,14 @@ class AnrechnungLib
|
||||
|
||||
// Check if lv has LV-Leitung
|
||||
$key = array_search(true, array_column($result, 'lvleiter'));
|
||||
|
||||
// If lv has LV-Leitung, keep only the one
|
||||
|
||||
// If lv has 1 or more LV-Leitungen, keep only them
|
||||
if ($key !== false)
|
||||
{
|
||||
$lector_arr[]= $result[$key];
|
||||
foreach ($result as $lector)
|
||||
{
|
||||
if ($lector->lvleiter) $lector_arr[]= $lector;
|
||||
}
|
||||
}
|
||||
// ...otherwise keep all lectors
|
||||
else
|
||||
@@ -803,6 +845,40 @@ class AnrechnungLib
|
||||
return $lector_arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Leitung of Lehrveranstaltungs-Organisationseinheit.
|
||||
*
|
||||
* @param $anrechnung_id
|
||||
* @return false|mixed|null
|
||||
*/
|
||||
public function getLeitungOfLvOe($anrechnung_id)
|
||||
{
|
||||
$this->ci->AnrechnungModel->addSelect('lehrveranstaltung_id');
|
||||
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
|
||||
|
||||
$lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id;
|
||||
|
||||
// Get Leitungen
|
||||
$result = $this->ci->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
|
||||
|
||||
if (!hasData($result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$oeLeitung_arr = getData($result);
|
||||
|
||||
foreach ($oeLeitung_arr as $oeLeitung)
|
||||
{
|
||||
$oeLeitung->fullname = $oeLeitung->vorname. ' '. $oeLeitung->nachname;
|
||||
}
|
||||
|
||||
// Now make the array unique
|
||||
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
|
||||
|
||||
return $oeLeitung_arr;
|
||||
}
|
||||
|
||||
// Return an object with Anrechnungdata
|
||||
private function _setAnrechnungDataObject($anrechnung)
|
||||
{
|
||||
@@ -820,6 +896,8 @@ class AnrechnungLib
|
||||
$anrechnung_data->insertvon= $anrechnung->insertvon;
|
||||
$anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemester_kurzbz;
|
||||
$anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung;
|
||||
$anrechnung_data->begruendung_ects = $anrechnung->begruendung_ects;
|
||||
$anrechnung_data->begruendung_lvinhalt = $anrechnung->begruendung_lvinhalt;
|
||||
|
||||
// Get last status_kurzbz
|
||||
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung->anrechnung_id);
|
||||
|
||||
@@ -551,10 +551,7 @@ class AuthLib
|
||||
// Needed information
|
||||
$this->_ci->PersonModel->addSelect('person_id, vorname, nachname, uid');
|
||||
// Retrieves the uid if it is possible for active users
|
||||
$this->_ci->PersonModel->addJoin(
|
||||
'(SELECT uid, person_id FROM public.tbl_benutzer WHERE aktiv = TRUE) tb', 'person_id',
|
||||
'LEFT'
|
||||
);
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id', 'LEFT');
|
||||
|
||||
// Execute query with where clause
|
||||
$personResult = $this->_ci->PersonModel->loadWhere($queryParamsArray);
|
||||
|
||||
@@ -182,6 +182,7 @@ class MailLib
|
||||
{
|
||||
if ($this->sended == $this->email_number_per_time_range)
|
||||
{
|
||||
$this->sended = 0;
|
||||
sleep($this->email_time_range); // Wait!!!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
*/
|
||||
class PersonLogLib
|
||||
{
|
||||
const PARKED_LOGNAME = 'Parked';
|
||||
const ONHOLD_LOGNAME = 'Onhold';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -78,168 +75,6 @@ class PersonLogLib
|
||||
else
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent)
|
||||
* Done by adding a logentry in the future
|
||||
* @param $person_id
|
||||
* @param $date
|
||||
* @param $taetigkeit_kurzbz
|
||||
* @param string $app
|
||||
* @param null $oe_kurzbz
|
||||
* @param null $user
|
||||
* @return insert object
|
||||
*/
|
||||
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
|
||||
{
|
||||
$onhold = $this->getOnHoldDate($person_id);
|
||||
|
||||
if (hasData($onhold))
|
||||
return error("Person already on hold");
|
||||
|
||||
$logjson = array(
|
||||
'name' => self::PARKED_LOGNAME
|
||||
);
|
||||
|
||||
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unparks a person, i.e. removes all log entries in the future with logname for parking
|
||||
* @param $person_id
|
||||
* @return array with deleted logids
|
||||
*/
|
||||
public function unPark($person_id)
|
||||
{
|
||||
$deleted = array();
|
||||
|
||||
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach ($result->retval as $log)
|
||||
{
|
||||
$logdata = json_decode($log->logdata);
|
||||
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
|
||||
{
|
||||
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
|
||||
if (isSuccess($delresult))
|
||||
{
|
||||
$deleted[] = $log->log_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success($deleted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets date until which a person is parked
|
||||
* @param $person_id
|
||||
* @return the date if person is parked, null otherwise
|
||||
*/
|
||||
public function getParkedDate($person_id)
|
||||
{
|
||||
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
|
||||
|
||||
$parkeddate = null;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach ($result->retval as $log)
|
||||
{
|
||||
$logdata = json_decode($log->logdata);
|
||||
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
|
||||
{
|
||||
$parkeddate = $log->zeitpunkt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $parkeddate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
|
||||
* Done by adding a logentry with a special name. can be undone only manually by clicking button.
|
||||
* @param $person_id
|
||||
* @param $date
|
||||
* @param $taetigkeit_kurzbz
|
||||
* @param string $app
|
||||
* @param null $oe_kurzbz
|
||||
* @param null $user
|
||||
* @return array
|
||||
*/
|
||||
public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
|
||||
{
|
||||
$parked = $this->getParkedDate($person_id);
|
||||
|
||||
if (hasData($parked))
|
||||
return error("Person already parked");
|
||||
|
||||
$logjson = array(
|
||||
'name' => self::ONHOLD_LOGNAME
|
||||
);
|
||||
|
||||
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes on hold status, i.e. removes all log entries with logname for on hold
|
||||
* @param $person_id
|
||||
* @return array
|
||||
*/
|
||||
public function removeOnHold($person_id)
|
||||
{
|
||||
$deleted = array();
|
||||
|
||||
$result = $this->ci->PersonLogModel->filterLog($person_id);
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach ($result->retval as $log)
|
||||
{
|
||||
$logdata = json_decode($log->logdata);
|
||||
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
|
||||
{
|
||||
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
|
||||
if (isSuccess($delresult))
|
||||
{
|
||||
$deleted[] = $log->log_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return success($deleted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets date until which a person is on hold
|
||||
* @param $person_id
|
||||
* @return the date if person is on hold, null otherwise
|
||||
*/
|
||||
public function getOnHoldDate($person_id)
|
||||
{
|
||||
$result = $this->ci->PersonLogModel->filterLog($person_id);
|
||||
|
||||
$onholddate = null;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach ($result->retval as $log)
|
||||
{
|
||||
$logdata = json_decode($log->logdata);
|
||||
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
|
||||
{
|
||||
$onholddate = $log->zeitpunkt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $onholddate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a processstate log with specified parameters, including a specified log date.
|
||||
* @param $person_id
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2022 fhcomplete.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once(dirname(__FILE__).'/../../vendor/nategood/httpful/bootstrap.php');
|
||||
|
||||
/**
|
||||
* Simple client to call the signature server
|
||||
*/
|
||||
class SignatureLib
|
||||
{
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
// Public static methods
|
||||
|
||||
/**
|
||||
* Returns the list of signature inside the given file
|
||||
*/
|
||||
public static function list($inputFileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Dont send Document if it is bigger than 30 MB (Limit of Signature Server)
|
||||
if (filesize($inputFileName) > 30000000)
|
||||
{
|
||||
$returnObject = new stdClass();
|
||||
$returnObject->code = 1;
|
||||
$returnObject->error = 1;
|
||||
$returnObject->retval = 'File to big';
|
||||
|
||||
return $returnObject;
|
||||
}
|
||||
|
||||
// Get the content of the given file
|
||||
$inputFileContent = file_get_contents($inputFileName);
|
||||
if ($inputFileContent === false) // if failed
|
||||
{
|
||||
error_log('An error occurred while getting the content from: '.$inputFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Posts the given file content + file name and expects a response in JSON format
|
||||
$resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
|
||||
->sendsJson()
|
||||
->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
|
||||
->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
|
||||
->expectsJson()
|
||||
->send();
|
||||
}
|
||||
}
|
||||
catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
|
||||
{
|
||||
error_log($cee->getMessage());
|
||||
}
|
||||
catch (Exception $e) // any other exception
|
||||
{
|
||||
error_log($e->getMessage());
|
||||
}
|
||||
|
||||
// If the response is fine
|
||||
if (isset($resultPost->body) && is_object($resultPost->body)
|
||||
&& isset($resultPost->body->retval) && is_array($resultPost->body->retval))
|
||||
{
|
||||
return $resultPost->body->retval;
|
||||
}
|
||||
|
||||
// Otherwise return a null as error
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Library containing definitions of all core plausichecks.
|
||||
*/
|
||||
class PlausicheckDefinitionLib
|
||||
{
|
||||
// set fehler for core plausichecks
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
private $_fehlerLibMappings = array(
|
||||
'AbbrecherAktiv' => 'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
|
||||
'AktSemesterNull' => 'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
|
||||
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
|
||||
'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
|
||||
'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
|
||||
//'StudienplanUngueltig' => 'StudienplanUngueltig'
|
||||
);
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz-library mappings for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerLibMappings()
|
||||
{
|
||||
return $this->_fehlerLibMappings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerKurzbz()
|
||||
{
|
||||
return array_keys($this->_fehlerLibMappings);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,78 +4,70 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class PlausicheckProducerLib
|
||||
{
|
||||
const CI_LIBRARY_PATH = 'application/libraries';
|
||||
const CI_PATH = 'application';
|
||||
const CI_LIBRARY_FOLDER = 'libraries';
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks';
|
||||
const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck';
|
||||
|
||||
private $_ci; // ci instance
|
||||
private $_currentStudiensemester; // current Studiensemester
|
||||
private $_extensionName; // name of extension
|
||||
private $_app; // name of application
|
||||
private $_konfiguration = array(); // konfigratio parameters
|
||||
|
||||
// set fehler which can be produced by the job
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
private $_fehlerLibMappings = array(
|
||||
'AbbrecherAktiv' => 'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
|
||||
'AktSemesterNull' => 'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
|
||||
'AktiverStudentstatusOhneKontobuchung' => 'AktiverStudentstatusOhneKontobuchung',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
|
||||
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
|
||||
'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
|
||||
'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
|
||||
//'StudienplanUngueltig' => 'StudienplanUngueltig'
|
||||
);
|
||||
|
||||
public function __construct()
|
||||
public function __construct($params = null)
|
||||
{
|
||||
// set extension name if called from extension
|
||||
if (isset($params['extensionName'])) $this->_extensionName = $params['extensionName'];
|
||||
|
||||
// set application
|
||||
$app = isset($params['app']) ? $params['app'] : null;
|
||||
|
||||
$this->_ci =& get_instance(); // get ci instance
|
||||
|
||||
// load models
|
||||
$this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
$this->_ci->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
|
||||
|
||||
// get current Studiensemester
|
||||
$studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
// get all configuration parameters for the application
|
||||
$fehlerkonfigurationRes = $this->_ci->FehlerkonfigurationModel->getKonfiguration($app);
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
foreach ($fehlerkonfiguration as $fk)
|
||||
{
|
||||
$this->_konfiguration[$fk->fehler_kurzbz][$fk->konfigurationstyp_kurzbz] = $fk->konfiguration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes check for a fehler_kurzbz, returns the result.
|
||||
* @param $fehler_kurzbz string
|
||||
* @param $studiensemester_kurzbz string optionally needed for issue production
|
||||
* @param $studiengang_kz int optionally needed for issue production
|
||||
* Executes plausicheck using a given library, returns the result.
|
||||
* @param $libName string name of library producing the issue
|
||||
* @param $fehler_kurzbz string unique short name of fehler, for which issue is produced
|
||||
* @param $params parameters passed to issue production method
|
||||
*/
|
||||
public function producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null)
|
||||
public function producePlausicheckIssue($libName, $fehler_kurzbz, $params)
|
||||
{
|
||||
$libName = $this->_fehlerLibMappings[$fehler_kurzbz];
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
|
||||
// get Studiensemester
|
||||
if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::PLAUSI_ISSUES_FOLDER . '/';
|
||||
|
||||
// get path of library for issue to be produced
|
||||
$issuesLibPath = DOC_ROOT . self::CI_LIBRARY_PATH . '/' . self::PLAUSI_ISSUES_FOLDER . '/';
|
||||
$issuesLibFilePath = $issuesLibPath . $libName . '.php';
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::PLAUSI_ISSUES_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist");
|
||||
|
||||
// load konfiguration parameters of the fehler_kurzbz
|
||||
$config = isset($this->_konfiguration[$fehler_kurzbz]) ? $this->_konfiguration[$fehler_kurzbz] : null;
|
||||
|
||||
// load library connected to fehlercode
|
||||
$this->_ci->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName);
|
||||
$this->_ci->load->library($issuesLibPath . $libName, $config);
|
||||
|
||||
$lowercaseLibName = mb_strtolower($libName);
|
||||
|
||||
@@ -83,21 +75,7 @@ class PlausicheckProducerLib
|
||||
if (!is_callable(array($this->_ci->{$lowercaseLibName}, self::EXECUTE_PLAUSI_CHECK_METHOD_NAME)))
|
||||
return error("Method " . self::EXECUTE_PLAUSI_CHECK_METHOD_NAME . " is not defined in library $lowercaseLibName");
|
||||
|
||||
// pass the data needed for issue check
|
||||
$paramsForCheck = array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
);
|
||||
|
||||
// call the function for checking for issue production
|
||||
return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($paramsForCheck);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerKurzbz()
|
||||
{
|
||||
return array_keys($this->_fehlerLibMappings);
|
||||
return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class AbbrecherAktiv extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAbbrecherAktiv($studiengang_kz);
|
||||
$prestudentRes = $this->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,49 @@ class AbbrecherAktiv extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Abbrecher cannot be active.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudentstatus pre_status
|
||||
JOIN public.tbl_prestudent pre USING(prestudent_id)
|
||||
JOIN public.tbl_student student USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre_status.status_kurzbz ='Abbrecher'
|
||||
AND benutzer.aktiv=true";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAbschlussstatusFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,95 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prestudent should have a final status.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAbschlussstatusFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (pre.prestudent_id)
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
NOT EXISTS( /*student does not study anymore*/
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
public.tbl_prestudentstatus ps
|
||||
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
|
||||
WHERE
|
||||
prestudent_id=pre.prestudent_id
|
||||
/* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */
|
||||
AND tbl_studiensemester.ende>now() - interval '4 months'
|
||||
)
|
||||
/* check only valid begininng with 2018 */
|
||||
AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id)
|
||||
AND NOT EXISTS( /* no end status */
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE
|
||||
prestudent_id=pre.prestudent_id
|
||||
AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming')
|
||||
)
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN (?, ?)
|
||||
AND ps.prestudent_id = pre.prestudent_id
|
||||
)";
|
||||
$params[] = $prevStudiensemester;
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,15 @@ class AktSemesterNull extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +50,51 @@ class AktSemesterNull extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Current Ausbildungssemester shouldn't be 0.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus prestat USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
prestat.status_kurzbz != 'Incoming'
|
||||
AND prestat.studiensemester_kurzbz = ?
|
||||
AND ausbildungssemester = 0
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz);
|
||||
$prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,57 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with active Benutzer should have a status in the current semester.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=TRUE
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus
|
||||
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
|
||||
WHERE prestudent_id = prestudent.prestudent_id
|
||||
/* buffer of four months, as status are often entered later */
|
||||
AND sem.ende::date > NOW() - interval '4 months'
|
||||
)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAktiverStudentstatusOhneKontobuchung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +55,66 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktiverStudentstatusOhneKontobuchung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (pre.prestudent_id)
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.studiensemester_kurzbz = ?
|
||||
AND status.status_kurzbz IN ('Student', 'Incoming')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
public.tbl_konto
|
||||
WHERE
|
||||
person_id = pers.person_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
AND buchungsnr_verweis IS NULL
|
||||
AND betrag <= 0
|
||||
)
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
+62
-2
@@ -13,14 +13,19 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$prestudentRes = $this->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
@@ -53,4 +58,59 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id,
|
||||
status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_studentlehrverband lv USING(student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status.studiensemester_kurzbz = ?
|
||||
AND lv.studiensemester_kurzbz = ?
|
||||
AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher')
|
||||
AND get_rolle_prestudent (prestudent_id, ?)='Student'
|
||||
AND status.ausbildungssemester != lv.semester";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getBewerberNichtZumRtAngetreten(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bewerber should have participated in Reihungstest.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getBewerberNichtZumRtAngetreten(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes;
|
||||
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status_kurzbz='Bewerber'
|
||||
AND reihungstestangetreten=false
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (hasData($previousStudiensemesterRes))
|
||||
{
|
||||
$previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
$qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)";
|
||||
$params[] = $previousStudiensemester;
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry .= " AND studiensemester_kurzbz=?";
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getDatumAbschlusspruefungFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Date of final exam shouldn't be missing for Absolvent.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumAbschlusspruefungFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id,
|
||||
pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
|
||||
)
|
||||
AND abschlussbeurteilung_kurzbz!='nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
AND pruefung.datum IS NULL
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND prestatus.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($abschlusspruefung_id))
|
||||
{
|
||||
$qry .= " AND pruefung.abschlusspruefung_id = ?";
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getDatumSponsionFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Date of sponsion shouldn't be missing for Absolvent.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumSponsionFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id,
|
||||
pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
|
||||
)
|
||||
AND abschlussbeurteilung_kurzbz!='nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
AND pruefung.sponsion IS NULL
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND prestatus.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($abschlusspruefung_id))
|
||||
{
|
||||
$qry .= " AND pruefung.abschlusspruefung_id = ?";
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
+64
-1
@@ -13,11 +13,14 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz);
|
||||
$prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -42,4 +45,64 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Status Dates and status studysemester dates should be in correct order.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
// all active students with Status student in current semester
|
||||
$qry = "
|
||||
SELECT DISTINCT ON (prestudent_id) *
|
||||
FROM (
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id,
|
||||
stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
ROW_NUMBER () OVER (
|
||||
PARTITION BY prestudent.prestudent_id
|
||||
ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC
|
||||
) AS reihenfolge_semester,
|
||||
ROW_NUMBER () OVER (
|
||||
PARTITION BY prestudent.prestudent_id
|
||||
ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC
|
||||
) AS reihenfolge_datum
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=true
|
||||
AND status.status_kurzbz='Student'
|
||||
) reihenfolge
|
||||
WHERE reihenfolge_semester <> reihenfolge_datum";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getFalscheAnzahlAbschlusspruefungen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,77 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with finished studies should have exactly one final exam.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlAbschlusspruefungen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM lehre.tbl_abschlusspruefung
|
||||
WHERE student_uid = stud.student_uid
|
||||
AND abschlussbeurteilung_kurzbz != 'nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
) AS anzahl_abschlusspruefungen
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
)";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= ") studenten
|
||||
WHERE anzahl_abschlusspruefungen != 1";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getFalscheAnzahlHeimatadressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,67 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students should have exactly one home address.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlHeimatadressen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id
|
||||
FROM
|
||||
(
|
||||
SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
|
||||
FROM public.tbl_adresse addr
|
||||
WHERE heimatadresse IS TRUE
|
||||
GROUP BY person_id
|
||||
) adressen
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent pre USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
anzahl_adressen != 1
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getFalscheAnzahlZustelladressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,67 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students should have exactly one delivery address.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlZustelladressen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id
|
||||
FROM
|
||||
(
|
||||
SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
|
||||
FROM public.tbl_adresse addr
|
||||
WHERE zustelladresse IS TRUE
|
||||
GROUP BY person_id
|
||||
) adressen
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent pre USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
anzahl_adressen != 1
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,15 @@ class GbDatumWeitZurueck extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +42,63 @@ class GbDatumWeitZurueck extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Birthdate is too long ago.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getGbDatumWeitZurueck(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pers.person_id
|
||||
FROM
|
||||
public.tbl_person pers
|
||||
WHERE
|
||||
pers.gebdatum < '1920-01-01'
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudent
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE person_id = pers.person_id";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= ")";
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,62 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with active status should have an active Benutzer.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
|
||||
if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
|
||||
|
||||
$studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
|
||||
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzer benutzer
|
||||
JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=false
|
||||
AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?)
|
||||
AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getIncomingHeimatNationOesterreich(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,58 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getIncomingHeimatNationOesterreich(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pers.person_id, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_adresse addr USING(person_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.status_kurzbz = 'Incoming'
|
||||
AND addr.nation = 'A'
|
||||
AND addr.heimatadresse
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz);
|
||||
$prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,54 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming should have IN/OUT data.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON(student_uid, nachname, vorname)
|
||||
tbl_person.person_id,
|
||||
tbl_prestudent.prestudent_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student
|
||||
JOIN public.tbl_benutzer ON(student_uid=uid)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz)
|
||||
WHERE
|
||||
bismelden=TRUE
|
||||
AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND tbl_prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getIncomingOrGsFoerderrelevant(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,77 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant).
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getIncomingOrGsFoerderrelevant(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON(prestudent_id)
|
||||
pers.person_id,
|
||||
ps.prestudent_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student stud
|
||||
JOIN public.tbl_benutzer ON(student_uid=uid)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudent ps USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz)
|
||||
WHERE
|
||||
(
|
||||
status.status_kurzbz = 'Incoming'
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
bis.tbl_mobilitaet
|
||||
JOIN public.tbl_prestudent USING(prestudent_id)
|
||||
WHERE
|
||||
prestudent_id = ps.prestudent_id
|
||||
AND gsstudientyp_kurzbz = 'Extern'
|
||||
)
|
||||
)
|
||||
AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL)
|
||||
AND bismelden=TRUE
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND ps.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getInskriptionVorLetzerBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,4 +56,93 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students of a semester shouldn't start studies before the date of Bismeldung.
|
||||
* e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020
|
||||
* e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getInskriptionVorLetzerBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
// get Bismeldedatum
|
||||
$datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz);
|
||||
|
||||
$params = array($datumBis, $studiensemester_kurzbz, $datumBis);
|
||||
|
||||
// get active students
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (student.student_uid) ? AS datum_bismeldung,
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzer benutzer
|
||||
JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=true
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
/* inscription date before date of first student status */
|
||||
AND (
|
||||
SELECT datum
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE prestudent_id = prestudent.prestudent_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
AND status_kurzbz = 'Student'
|
||||
ORDER BY datum, insertamum, ext_id
|
||||
LIMIT 1
|
||||
) < ?
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Bismeldedate from Studiensemester.
|
||||
* @param studiensemester_kurzbz string
|
||||
*/
|
||||
private function _getBisdateFromSemester($studiensemester_kurzbz)
|
||||
{
|
||||
$semesterYear = substr($studiensemester_kurzbz, 2, 6);
|
||||
$semesterType = substr($studiensemester_kurzbz, 0, 2);
|
||||
|
||||
if ($semesterType == 'SS')
|
||||
{
|
||||
return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d');
|
||||
}
|
||||
|
||||
if ($semesterType == 'WS')
|
||||
{
|
||||
return date_format(date_create($semesterYear."-04-15"), 'Y-m-d');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,18 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde($studiengang_kz);
|
||||
$personRes = $this->getNationNichtOesterreichAberGemeinde(
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +46,49 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nation is not Austria, but address has austrian Gemeinde.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id
|
||||
FROM
|
||||
public.tbl_adresse adr
|
||||
JOIN public.tbl_prestudent USING(person_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer ON(uid=student_uid)
|
||||
JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
adr.nation!='A'
|
||||
AND tbl_benutzer.aktiv
|
||||
AND gemeinde NOT IN ('Münster')
|
||||
AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getOrgformStgUngleichOrgformPrestudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -49,4 +57,74 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Orgform of a Studiengang in Studienplan should be the same as orgform of student.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getOrgformStgUngleichOrgformPrestudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz,
|
||||
studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform,
|
||||
prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_studiengang studiengang
|
||||
JOIN public.tbl_student student USING(studiengang_kz)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id)
|
||||
WHERE
|
||||
benutzer.aktiv = true
|
||||
AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent')
|
||||
AND studiengang.studiengang_kz < 10000
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE)
|
||||
AND NOT EXISTS(
|
||||
SELECT 1
|
||||
FROM
|
||||
lehre.tbl_studienplan
|
||||
JOIN
|
||||
lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
WHERE
|
||||
tbl_studienplan.studienplan_id = stpl.studienplan_id
|
||||
AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
|
||||
AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
ORDER BY student_uid";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,18 @@
|
||||
abstract class PlausiChecker
|
||||
{
|
||||
protected $_ci; // code igniter instance
|
||||
protected $_config; // configuration parameters for this plausicheck
|
||||
protected $_db; // database for queries
|
||||
|
||||
public function __construct()
|
||||
public function __construct($configurationParams = null)
|
||||
{
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
// load libraries
|
||||
$this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library
|
||||
// set configuration
|
||||
$this->_config = $configurationParams;
|
||||
|
||||
// get database for queries
|
||||
$this->_db = new DB_Model();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,12 +13,20 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getPrestudentMischformOhneOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +55,55 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students in "mixed" Studiengang should have Orgform.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getPrestudentMischformOhneOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.status_kurzbz IN ('Bewerber', 'Student')
|
||||
AND stg.mischform
|
||||
AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL)
|
||||
AND status.studiensemester_kurzbz=?";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,48 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studiengang should be the same for prestudent and student.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz
|
||||
WHERE
|
||||
stud.studiengang_kz != pre.studiengang_kz";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,62 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studiengang should be the same for prestudent and studienplan.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param studienordnung_id int if check is to be executed only for a certain studienordnung_id
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStgPrestudentUngleichStgStudienplan(
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$studienordnung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id,
|
||||
stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent ps
|
||||
JOIN public.tbl_prestudentstatus USING(prestudent_id)
|
||||
JOIN lehre.tbl_studienplan stplan USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
ps.studiengang_kz<>stordnung.studiengang_kz
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND ps.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($studienordnung_id))
|
||||
{
|
||||
$qry .= " AND stordnung.studienordnung_id = ?";
|
||||
$params[] = $studienordnung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz);
|
||||
$prestudentRes = $this->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,48 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* There shouldn't be any status after Abbrecher status.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
prestatus.status_kurzbz = 'Abbrecher'
|
||||
AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getStudienplanUngueltig(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,4 +56,71 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studienplan should be valid in current Ausbildungssemester of prestudent.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudienplanUngueltig(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pre.person_id, pre.prestudent_id,
|
||||
tbl_studienplan.bezeichnung AS studienplan,
|
||||
status.status_kurzbz,
|
||||
status.studiensemester_kurzbz,
|
||||
status.ausbildungssemester,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener')
|
||||
AND NOT EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_studienplan_semester
|
||||
WHERE
|
||||
studienplan_id=status.studienplan_id
|
||||
AND tbl_studienplan_semester.semester = status.ausbildungssemester
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
)
|
||||
AND status.studiensemester_kurzbz=?
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND tbl_prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingHeimatNationOesterreich');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->incomingheimatnationoesterreich->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Incoming should have IN/OUT data entry.
|
||||
*/
|
||||
class CORE_INOUT_0008 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_INOUT_0008 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingOhneIoDatensatz');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->incomingohneiodatensatz->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@ class CORE_INOUT_0009 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingOrGsFoerderrelevant');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->incomingorgsfoerderrelevant->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Birth date of person shouldn't be too long ago.
|
||||
*/
|
||||
class CORE_PERSON_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/GbDatumWeitZurueck');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->gbdatumweitzurueck->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Nation of person should be austria if Gemeinde (city) is austrian.
|
||||
*/
|
||||
class CORE_PERSON_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/NationNichtOesterreichAberGemeinde');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->nationnichtoesterreichabergemeinde->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Person should have only one home adress.
|
||||
*/
|
||||
class CORE_PERSON_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlHeimatadressen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlheimatadressen->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Person should have only one delivery adress.
|
||||
*/
|
||||
class CORE_PERSON_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlZustelladressen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlzustelladressen->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studiengang should be the same for prestudent and student.
|
||||
*/
|
||||
class CORE_STG_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STG_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudent');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->stgprestudentungleichstgstudent->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Orgform of a Studiengang in Studienplan should be the same as orgform of student.
|
||||
*/
|
||||
class CORE_STG_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/OrgformStgUngleichOrgformPrestudent');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->orgformstgungleichorgformprestudent->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students in "mixed" Studiengang should have Orgform.
|
||||
*/
|
||||
class CORE_STG_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/PrestudentMischformOhneOrgform');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->prestudentmischformohneorgform->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studiengang should be the same for prestudent and studienplan.
|
||||
*/
|
||||
class CORE_STG_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudienplan');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
|
||||
$checkRes = $this->_ci->stgprestudentungleichstgstudienplan->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Abbrecher cannot be active.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AbbrecherAktiv');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAbbrecherAktiv(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->abbrecheraktiv->getAbbrecherAktiv(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* There shouldn't be any status after Abbrecher status.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StudentstatusNachAbbrecher');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->studentstatusnachabbrecher->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->ausbildungssemprestudentungleichausbildungssemstatus->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with active status should have an active Benutzer.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/InaktiverStudentAktiverStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->inaktiverstudentaktiverstatus->getInaktiverStudentAktiverStatus(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students of a semester shouldn't start studies before the date of Bismeldung.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/InskriptionVorLetzerBismeldung');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->inskriptionvorletzerbismeldung->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Status Dates and status studysemester dates should be in correct order.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumStudiensemesterFalscheReihenfolge');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->datumstudiensemesterfalschereihenfolge->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with active Benutzer should have a status in the current semester.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktiverStudentOhneStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->aktiverstudentohnestatus->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studienplan should be valid in current Ausbildungssemester of prestudent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StudienplanUngueltig');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->studienplanungueltig->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with finished studies should have exactly one final exam.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlAbschlusspruefungen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlabschlusspruefungen->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Date of final exam shouldn't be missing for Absolvent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumAbschlusspruefungFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
$checkRes = $this->_ci->datumabschlusspruefungfehlt->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Date of sponsion shouldn't be missing for Absolvent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumSponsionFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
$checkRes = $this->_ci->datumsponsionfehlt->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Bewerber should have participated in Reihungstest.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/BewerberNichtZumRtAngetreten');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->bewerbernichtzumrtangetreten->getBewerberNichtZumRtAngetreten(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Current Ausbildungssemester shouldn't be 0.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktSemesterNull');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->aktsemesternull->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Prestudent should have a final status.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AbschlussstatusFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->abschlussstatusfehlt->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0015 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktiverStudentstatusOhneKontobuchung');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung(
|
||||
$checkRes = $this->_ci->aktiverstudentstatusohnekontobuchung->getAktiverStudentstatusOhneKontobuchung(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
class Abschluss_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_abschluss';
|
||||
$this->pk = 'ausbildung_code';
|
||||
}
|
||||
|
||||
public function getActiveAbschluesse($languageIndex)
|
||||
{
|
||||
return $this->execQuery(
|
||||
'
|
||||
SELECT
|
||||
ausbildung_code, bezeichnung[?], in_oesterreich
|
||||
FROM
|
||||
bis.tbl_abschluss
|
||||
WHERE
|
||||
aktiv
|
||||
ORDER BY
|
||||
CASE WHEN in_oesterreich THEN 0 ELSE 1 END, ausbildung_code',
|
||||
array($languageIndex)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Uhstat1daten_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_uhstat1daten';
|
||||
$this->pk = 'uhstat1daten_id';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
class RueckstellungStatus_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_rueckstellung_status';
|
||||
$this->pk = 'status_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
class Rueckstellung_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_rueckstellung';
|
||||
$this->pk = 'rueckstellung_id';
|
||||
$this->hasSequence = true;
|
||||
}
|
||||
|
||||
public function getByPersonId($person_id, $status = null)
|
||||
{
|
||||
$language_index = getUserLanguage() == 'German' ? 0 : 1;
|
||||
|
||||
$this->addLimit(1);
|
||||
$this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
|
||||
$this->addSelect('*,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
|
||||
$this->addOrder('datum_bis', 'DESC');
|
||||
|
||||
$where['person_id'] = $person_id;
|
||||
|
||||
if (!isEmptyString($status))
|
||||
$where['status_kurzbz'] = $status;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ class Anrechnung_model extends DB_Model
|
||||
*/
|
||||
public function createAnrechnungsantrag(
|
||||
$prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id,
|
||||
$begruendung_id, $dms_id, $anmerkung_student = null
|
||||
$begruendung_id, $dms_id, $anmerkung_student = null, $begruendung_ects = null, $begruendung_lvinhalt = null
|
||||
)
|
||||
{
|
||||
// Start DB transaction
|
||||
@@ -44,6 +44,8 @@ class Anrechnung_model extends DB_Model
|
||||
'dms_id' => $dms_id,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'anmerkung_student' => $anmerkung_student,
|
||||
'begruendung_ects' => $begruendung_ects,
|
||||
'begruendung_lvinhalt' => $begruendung_lvinhalt,
|
||||
'insertvon' => $this->_uid
|
||||
));
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
class Anrechnungszeitraum_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_anrechnungszeitraum';
|
||||
$this->pk = 'anrechnungszeitraum_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Save new Anrechnungszeitraum.
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $anrechnungstart
|
||||
* @param $anrechnungende
|
||||
* @return array|stdClass
|
||||
*/
|
||||
public function insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
|
||||
{
|
||||
$result = $this->insert(array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'anrechnungstart' => $anrechnungstart,
|
||||
'anrechnungende' => $anrechnungende,
|
||||
'insertvon' => getAuthUID()
|
||||
));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return error('Fehler bei Anrechnungszeitraum speichern.');
|
||||
}
|
||||
|
||||
// Return new anrechnungszeitraum_id
|
||||
return success($result->retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Anrechnungszeitraum.
|
||||
*
|
||||
* @param $anrechnungszeitraum_id
|
||||
* @return array|stdClass
|
||||
*/
|
||||
public function deleteAzr($anrechnungszeitraum_id)
|
||||
{
|
||||
$result = $this->delete(array('anrechnungszeitraum_id' => $anrechnungszeitraum_id));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return error('Fehler bei Anrechnungszeitraum löschen.');
|
||||
}
|
||||
|
||||
return success($result->retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update existing Anrechnungszeitraum.
|
||||
*
|
||||
* @param $anrechnungszeitraum_id
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $anrechnungstart
|
||||
* @param $anrechnungende
|
||||
* @return array|stdClass
|
||||
*/
|
||||
public function updateAzr($anrechnungszeitraum_id, $studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
|
||||
{
|
||||
$result = $this->update(
|
||||
$anrechnungszeitraum_id,
|
||||
array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'anrechnungstart' => $anrechnungstart,
|
||||
'anrechnungende' => $anrechnungende
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return error('Fehler bei Anrechnungszeitraum update.');
|
||||
}
|
||||
|
||||
return success($result->retval);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -200,6 +200,28 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz));
|
||||
}
|
||||
/**
|
||||
* Gets all Leiter of Lehrveranstaltungsorganisationseinheit
|
||||
* @param $lehrveranstaltung_id
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLeitungOfLvOe($lehrveranstaltung_id)
|
||||
{
|
||||
$query = "select distinct vorname, nachname, uid
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung lv
|
||||
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
|
||||
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
|
||||
join public.tbl_benutzer b using (uid)
|
||||
join public.tbl_person p using (person_id)
|
||||
where
|
||||
bf.datum_von <= now()::date
|
||||
and (bf.datum_bis >= now()::date or bf.datum_bis is null)
|
||||
and bf.funktion_kurzbz = 'Leitung' -- Leitung of LV-OE
|
||||
and lehrveranstaltung_id = ?";
|
||||
|
||||
return $this->execQuery($query, array($lehrveranstaltung_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Lehrveranstaltungen of a student
|
||||
|
||||
@@ -204,4 +204,14 @@ class Studiensemester_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
public function getAktAndFutureSemester()
|
||||
{
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE start >= NOW() OR (start <= NOW() AND ende >= NOW())
|
||||
ORDER BY start';
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -326,10 +326,12 @@ class Person_model extends DB_Model
|
||||
|
||||
SELECT p2.person_id
|
||||
FROM tbl_person p1
|
||||
JOIN tbl_prestudent ps ON p1.person_id = ps.person_id
|
||||
INNER JOIN (
|
||||
SELECT vorname, nachname, gebdatum, person_id
|
||||
FROM tbl_person
|
||||
) p2
|
||||
SELECT vorname, nachname, gebdatum, person.person_id
|
||||
FROM tbl_person person
|
||||
JOIN tbl_prestudent sps ON person.person_id = sps.person_id
|
||||
) p2
|
||||
ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
|
||||
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
class Fehlerkonfiguration_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'system.tbl_fehler_konfiguration';
|
||||
$this->pk = array('konfigurationstyp_kurzbz', 'fehlercode');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all set configuration parameters, optionally filtered by app.
|
||||
* @param string $app
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getKonfiguration($app = null)
|
||||
{
|
||||
$fehlerkonfiguration = array();
|
||||
|
||||
$this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler fehler', 'fehlercode');
|
||||
$fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfigurationData = getData($fehlerkonfigurationRes);
|
||||
foreach ($fehlerkonfigurationData as $fk)
|
||||
{
|
||||
$konf = json_decode($fk->konfiguration);
|
||||
if (is_array($konf))
|
||||
{
|
||||
$fk->konfiguration = $konf;
|
||||
$fehlerkonfiguration[] = $fk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success($fehlerkonfiguration);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
class Fehlerkonfigurationstyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'system.tbl_fehler_konfigurationstyp';
|
||||
$this->pk = array('konfigurationstyp_kurzbz');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all set configuration parameters, optionally filtered by app.
|
||||
* @param string $app
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getKonfiguration($app = null)
|
||||
{
|
||||
$fehlerkonfiguration = array();
|
||||
|
||||
$this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler fehler', 'fehlercode');
|
||||
$fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfigurationData = getData($fehlerkonfigurationRes);
|
||||
foreach ($fehlerkonfigurationData as $fk)
|
||||
{
|
||||
$konf = json_decode($fk->konfiguration);
|
||||
if (is_array($konf))
|
||||
{
|
||||
$fk->konfiguration = $konf;
|
||||
$fehlerkonfiguration[] = $fk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success($fehlerkonfiguration);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,274 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'UHSTAT1Formular',
|
||||
'jquery3' => true,
|
||||
'bootstrap3' => true,
|
||||
'fontawesome4' => true,
|
||||
'phrases' => array(
|
||||
'ui' => array('speichern')
|
||||
),
|
||||
'customCSSs' => array('public/css/codex/uhstat1.css'),
|
||||
'customJSs' => array('public/js/codex/uhstat1.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
// initialise form fields
|
||||
$mutter_geburtsjahr = isset($uhstatData->mutter_geburtsjahr) ? $uhstatData->mutter_geburtsjahr : set_value('mutter_geburtsjahr');
|
||||
$mutter_geburtsstaat = isset($uhstatData->mutter_geburtsstaat) ? $uhstatData->mutter_geburtsstaat : set_value('mutter_geburtsstaat');
|
||||
$mutter_bildungsstaat = isset($uhstatData->mutter_bildungsstaat) ? $uhstatData->mutter_bildungsstaat : set_value('mutter_bildungsstaat');
|
||||
$mutter_bildungmax = isset($uhstatData->mutter_bildungmax) ? $uhstatData->mutter_bildungmax : set_value('mutter_bildungmax');
|
||||
$vater_geburtsjahr = isset($uhstatData->vater_geburtsjahr) ? $uhstatData->vater_geburtsjahr : set_value('vater_geburtsjahr');
|
||||
$vater_geburtsstaat = isset($uhstatData->vater_geburtsstaat) ? $uhstatData->vater_geburtsstaat : set_value('vater_geburtsstaat');
|
||||
$vater_bildungsstaat = isset($uhstatData->vater_bildungsstaat) ? $uhstatData->vater_bildungsstaat : set_value('vater_bildungsstaat');
|
||||
$vater_bildungmax = isset($uhstatData->vater_bildungmax) ? $uhstatData->vater_bildungmax : set_value('vater_bildungmax');
|
||||
$readOnly = isset($formMetaData['readOnly']);
|
||||
$disabled = $readOnly ? ' disabled' : '';
|
||||
$editPermission = isset($formMetaData['editPermission']) && $formMetaData['editPermission'] === true;
|
||||
$deletePermission = isset($formMetaData['deletePermission']) && $formMetaData['deletePermission'] === true;
|
||||
$saved = isset($saved) && $saved === true;
|
||||
?>
|
||||
|
||||
<div class='container' id='uhstat1Container'>
|
||||
<h1 class="text-center">
|
||||
<?php echo isset($formMetaData['nachname'])
|
||||
? 'UHSTAT1 Daten für '.(isset($formMetaData['vorname']) ? $formMetaData['vorname'].' ' : '').$formMetaData['nachname']
|
||||
: ''
|
||||
?>
|
||||
</h1>
|
||||
<div id="uhstat1Subcontainer">
|
||||
<input type='hidden' id='uhstat1Saved' value='<?php echo $saved ? 1 : 0 ?>' />
|
||||
<h2><?php echo $this->p->t('uhstat', 'uhstat1AnmeldungUeberschrift') ?></h2>
|
||||
<p>
|
||||
<?php echo $this->p->t('uhstat', 'rechtsbelehrung') ?>
|
||||
</p>
|
||||
<p>
|
||||
<?php echo $this->p->t('uhstat', 'uhstat1AnmeldungEinleitungstext') ?>
|
||||
</p>
|
||||
<br>
|
||||
<?php if ($editPermission): ?>
|
||||
<?php if (isset($successMessage) && !isEmptyString($successMessage)): ?>
|
||||
<div class="alert alert-success" id="uhstat_success_alert">
|
||||
<button type="button" class="close" data-dismiss="alert">x</button>
|
||||
<strong><?php echo $successMessage ?></strong>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($errorMessage) && !isEmptyString($errorMessage)): ?>
|
||||
<div class='alert alert-danger text-center'><?php echo $errorMessage ?></div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<form class="form-horizontal" method="POST" action="<?php echo site_url('codex/UHSTAT1/saveUHSTAT1Data') ?>" id="uhstat1Form">
|
||||
<input type='hidden' id='person_id' name='person_id' value='<?php echo $formMetaData['person_id'] ?>' />
|
||||
<fieldset>
|
||||
<legend><?php echo $this->p->t('uhstat', 'angabenErziehungsberechtigte') ?></legend>
|
||||
<p>
|
||||
<?php echo $this->p->t('uhstat', 'angabenErziehungsberechtigteEinleitungstext') ?>
|
||||
</p>
|
||||
<br>
|
||||
<h4><?php echo $this->p->t('uhstat', 'erziehungsberechtigtePersonEins') ?></h4>
|
||||
<div class="form-group">
|
||||
<label for="mutter_geburtsjahr" class="col-sm-3 control-label"><?php echo ucfirst($this->p->t('uhstat', 'geburtsjahr')) ?></label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="mutter_geburtsjahr" id="mutter_geburtsjahr" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['jahre'] as $jahr): ?>
|
||||
<option
|
||||
value="<?php echo $jahr ?>"
|
||||
<?php echo $jahr == $mutter_geburtsjahr ? " selected" : "" ?>>
|
||||
<?php echo $jahr ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('mutter_geburtsjahr'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="mutter_geburtsstaat" class="col-sm-3 control-label">
|
||||
<?php echo ucfirst($this->p->t('uhstat', 'geburtsstaat')) ?>
|
||||
<br>
|
||||
<?php echo '('.ucfirst($this->p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="mutter_geburtsstaat" id="mutter_geburtsstaat" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['nation'] as $nation): ?>
|
||||
<option
|
||||
value="<?php echo $nation->nation_code ?>"
|
||||
<?php echo $mutter_geburtsstaat == $nation->nation_code ? " selected" : "" ?>>
|
||||
<?php echo $nation->nation_text ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('mutter_geburtsstaat'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="mutter_bildungsstaat" class="col-sm-3 control-label">
|
||||
<?php echo ucfirst($this->p->t('uhstat', 'hoechsterAbschlussStaat')) ?>
|
||||
<br>
|
||||
<?php echo '('.ucfirst($this->p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="mutter_bildungsstaat" id="mutter_bildungsstaat" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['nation'] as $nation): ?>
|
||||
<option
|
||||
value="<?php echo $nation->nation_code ?>"
|
||||
<?php echo $mutter_bildungsstaat == $nation->nation_code ? " selected" : "" ?>>
|
||||
<?php echo $nation->nation_text ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('mutter_bildungsstaat'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="mutter_bildungmax" class="col-sm-3 control-label"><?php echo ucfirst($this->p->t('uhstat', 'hoechsterAbschluss')) ?></label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="mutter_bildungmax" id="mutter_bildungmax" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<optgroup label="<?php echo $this->p->t('uhstat', 'wennAbschlussInOesterreich') ?>">
|
||||
<?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?>
|
||||
<?php foreach ($formMetaData['abschluss_oesterreich'] as $abschluss): ?>
|
||||
<option
|
||||
value="<?php echo $abschluss->ausbildung_code ?>"
|
||||
<?php echo $mutter_bildungmax == $abschluss->ausbildung_code ? " selected" : "" ?>>
|
||||
<?php echo $abschluss->bezeichnung ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</optgroup>
|
||||
<optgroup label="<?php echo $this->p->t('uhstat', 'wennAbschlussNichtInOesterreich') ?>">
|
||||
<?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?>
|
||||
<?php foreach ($formMetaData['abschluss_nicht_oesterreich'] as $abschluss): ?>
|
||||
<option
|
||||
value="<?php echo $abschluss->ausbildung_code ?>"
|
||||
<?php echo $mutter_bildungmax == $abschluss->ausbildung_code ? " selected" : "" ?>>
|
||||
<?php echo $abschluss->bezeichnung ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</optgroup>
|
||||
</select>
|
||||
<?php echo form_error('mutter_bildungmax'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<h4><?php echo $this->p->t('uhstat', 'erziehungsberechtigtePersonZwei') ?></h4>
|
||||
<div class="form-group">
|
||||
<label for="vater_geburtsjahr" class="col-sm-3 control-label"><?php echo ucfirst($this->p->t('uhstat', 'geburtsjahr')) ?></label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="vater_geburtsjahr" id="vater_geburtsjahr" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['jahre'] as $jahr): ?>
|
||||
<option
|
||||
value="<?php echo $jahr ?>"
|
||||
<?php echo $vater_geburtsjahr == $jahr ? " selected" : "" ?>>
|
||||
<?php echo $jahr ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('vater_geburtsjahr'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="vater_geburtsstaat" class="col-sm-3 control-label">
|
||||
<?php echo ucfirst($this->p->t('uhstat', 'geburtsstaat')) ?>
|
||||
<br>
|
||||
<?php echo '('.ucfirst($this->p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="vater_geburtsstaat" id="vater_geburtsstaat" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['nation'] as $nation): ?>
|
||||
<option
|
||||
value="<?php echo $nation->nation_code ?>"
|
||||
<?php echo $vater_geburtsstaat == $nation->nation_code ? " selected" : "" ?>>
|
||||
<?php echo $nation->nation_text ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('vater_geburtsstaat'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="vater_bildungsstaat" class="col-sm-3 control-label">
|
||||
<?php echo $this->p->t('uhstat', 'hoechsterAbschlussStaat') ?>
|
||||
<br>
|
||||
<?php echo '('.ucfirst($this->p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="vater_bildungsstaat" id="vater_bildungsstaat" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<?php foreach ($formMetaData['nation'] as $nation): ?>
|
||||
<option
|
||||
value="<?php echo $nation->nation_code ?>"
|
||||
<?php echo $vater_bildungsstaat == $nation->nation_code ? " selected" : "" ?>>
|
||||
<?php echo $nation->nation_text ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php echo form_error('vater_bildungsstaat'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="vater_bildungmax" class="col-sm-3 control-label">
|
||||
<?php echo ucfirst($this->p->t('uhstat', 'hoechsterAbschluss')) ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<select type="text" name="vater_bildungmax" id="vater_bildungmax" class="form-control" <?php echo $disabled ?>>
|
||||
<option disabled selected value=""><?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?></option>
|
||||
<optgroup label="<?php echo $this->p->t('uhstat', 'wennAbschlussInOesterreich') ?>">
|
||||
<?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?>
|
||||
<?php foreach ($formMetaData['abschluss_oesterreich'] as $abschluss): ?>
|
||||
<option
|
||||
value="<?php echo $abschluss->ausbildung_code ?>"
|
||||
<?php echo $vater_bildungmax == $abschluss->ausbildung_code ? " selected" : "" ?>>
|
||||
<?php echo $abschluss->bezeichnung ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</optgroup>
|
||||
<optgroup label="<?php echo $this->p->t('uhstat', 'wennAbschlussNichtInOesterreich') ?>">
|
||||
<?php echo $this->p->t('uhstat', 'bitteAuswaehlen') ?>
|
||||
<?php foreach ($formMetaData['abschluss_nicht_oesterreich'] as $abschluss): ?>
|
||||
<option
|
||||
value="<?php echo $abschluss->ausbildung_code ?>"
|
||||
<?php echo $vater_bildungmax == $abschluss->ausbildung_code ? " selected" : "" ?>>
|
||||
<?php echo $abschluss->bezeichnung ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</optgroup>
|
||||
</select>
|
||||
<?php echo form_error('vater_bildungmax'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php if ($editPermission && !$readOnly): ?>
|
||||
<br>
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12 text-right">
|
||||
<button class="btn btn-success btn-md" type="submit" id="uhstat1Submit">
|
||||
<?php echo $this->p->t('uhstat', 'pruefenUndSpeichern') ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
<?php if ($deletePermission && !$readOnly): ?>
|
||||
<form class="form-horizontal" method="POST" action="<?php echo site_url('codex/UHSTAT1/deleteUHSTAT1Data') ?>" id="uhstat1DeleteForm">
|
||||
<input type='hidden' id='person_id' name='person_id' value='<?php echo $formMetaData['person_id'] ?>' />
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12">
|
||||
<button class="btn btn-danger btn-md" type="submit" id="uhstat1Delete">
|
||||
<?php echo $this->p->t('uhstat', 'datenLoeschen') ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => $this->p->t('anrechnung', 'anrechnungenVerwalten'),
|
||||
'jquery3' => true,
|
||||
'jqueryui1' => true,
|
||||
'bootstrap3' => true,
|
||||
'fontawesome6' => true,
|
||||
'ajaxlib' => true,
|
||||
'dialoglib' => true,
|
||||
'tabulator4' => true,
|
||||
'tablewidget' => true,
|
||||
'sbadmintemplate3' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'anrechnung' => array(
|
||||
'anrechnungenVerwalten',
|
||||
'anrechnungszeitraumFestlegen',
|
||||
'anrechnungszeitraumHinzufuegen',
|
||||
'anrechnungszeitraumSpeichern',
|
||||
'anrechnungszeitraumStart',
|
||||
'anrechnungszeitraumEnde'
|
||||
),
|
||||
'ui' => array(
|
||||
'aktion',
|
||||
'geloescht',
|
||||
'gespeichert',
|
||||
'frageSicherLoeschen',
|
||||
'spaltenEinstellen'
|
||||
),
|
||||
'lehre' => array('studiensemester'),
|
||||
'table' => array(
|
||||
'spaltenEinAusblenden',
|
||||
'spaltenEinAusblendenMitKlickOeffnen',
|
||||
'spaltenEinAusblendenAufEinstellungenKlicken',
|
||||
'spaltenEinAusblendenMitKlickAktivieren',
|
||||
'spaltenEinAusblendenMitKlickSchliessen',
|
||||
'spaltenbreiteVeraendern',
|
||||
'spaltenbreiteVeraendernText',
|
||||
'spaltenbreiteVeraendernInfotext',
|
||||
'zeilenAuswaehlen',
|
||||
'zeilenAuswaehlenEinzeln',
|
||||
'zeilenAuswaehlenBereich',
|
||||
'zeilenAuswaehlenAlle'
|
||||
)
|
||||
),
|
||||
'customJSs' => array(
|
||||
'public/js/bootstrapper.js',
|
||||
'public/js/lehre/anrechnung/adminAnrechnung.js'
|
||||
),
|
||||
'customCSSs' => array(
|
||||
'public/css/sbadmin2/tablesort_bootstrap.css'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
|
||||
<!--Titel-->
|
||||
<div class="page-header">
|
||||
<h3><?php echo $this->p->t('anrechnung', 'anrechnungenVerwalten'); ?></h3>
|
||||
</div><br>
|
||||
|
||||
<!--Untertitel-->
|
||||
<h4><?php echo $this->p->t('anrechnung', 'anrechnungszeitraumFestlegen'); ?></h4><br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<button class="btn btn-primary azrOpenModal" data-toggle="modal" data-target="#azrModal">
|
||||
<i class="fa fa-plus"></i> <?php echo $this->p->t('anrechnung', 'anrechnungszeitraumHinzufuegen'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tabelle -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<?php $this->load->view('lehre/anrechnung/adminAnrechnungData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal (für insert und update von Anrechnungszeitraum)-->
|
||||
<div class="modal fade" id="azrModal" tabindex="-1" role="dialog" aria-labelledby="azrModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="azrModalLabel"></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<input type="hidden" id="anrechnungszeitraum_id" value="">
|
||||
<input type="hidden" id="defaultStudiensemester_kurzbz" value="<?php echo $studiensemester_kurzbz ?>">
|
||||
<div class="col-xs-4">
|
||||
<label for="studiensemester" class="small">Studiensemester</label>
|
||||
<?php
|
||||
echo $this->widgetlib->widget(
|
||||
'Studiensemester_widget',
|
||||
array(
|
||||
DropdownWidget::SELECTED_ELEMENT => $studiensemester_kurzbz
|
||||
),
|
||||
array(
|
||||
'name' => 'studiensemester',
|
||||
'id' => 'studiensemester'
|
||||
)
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<label for="azrStart" class="small">Anr.-Zeitraum Start</label>
|
||||
<input type="date" id="azrStart" value="" class="form-control" required>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<label for="azrEnde" class="small">Anr.-Zeitraum Ende</label>
|
||||
<input type="date" id="azrEnde" value="" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="azrInsertBtn" class="btn btn-primary" value=""><?php echo $this->p->t('ui', 'speichern'); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM lehre.tbl_anrechnungszeitraum
|
||||
ORDER BY anrechnungstart DESC
|
||||
';
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => $query,
|
||||
'tableUniqueId' => 'adminAnrechnung',
|
||||
'requiredPermissions' => 'lehre/anrechnungszeitfenster',
|
||||
'datasetRepresentation' => 'tabulator',
|
||||
'columnsAliases' => array(
|
||||
'AzrID',
|
||||
ucfirst($this->p->t('lehre', 'studiensemester')),
|
||||
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumStart')),
|
||||
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumEnde')),
|
||||
ucfirst($this->p->t('ui', 'bearbeitetAm')),
|
||||
ucfirst($this->p->t('ui', 'bearbeitetVon')),
|
||||
),
|
||||
'datasetRepOptions' => '{
|
||||
height: func_height(this),
|
||||
layout: "fitDataFill",
|
||||
persistentLayout:true,
|
||||
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
|
||||
headerFilterPlaceholder: " ",
|
||||
index: "anrechnungszeitraum_id", // assign specific column as unique id (important for row indexing)
|
||||
selectable: false, // allow row selection
|
||||
tableWidgetHeader: true,
|
||||
tableBuilt: function(){
|
||||
func_tableBuilt(this);
|
||||
},
|
||||
}',
|
||||
'datasetRepFieldsDefs' => '{
|
||||
anrechnungszeitraum_id: {visible: false, headerFilter:"input"},
|
||||
studiensemester_kurzbz: {headerFilter:"input"},
|
||||
anrechnungstart: {headerFilter:"input", formatter: formatDate},
|
||||
anrechnungende: {headerFilter:"input", formatter: formatDate},
|
||||
insertamum: {visible: false, headerFilter:"input"},
|
||||
insertvon: {visible: false, headerFilter:"input"}
|
||||
}'
|
||||
);
|
||||
|
||||
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
|
||||
@@ -23,6 +23,7 @@ $this->load->view(
|
||||
'systemfehler',
|
||||
'bitteMindEinenAntragWaehlen',
|
||||
'bitteBegruendungAngeben',
|
||||
'bitteBegruendungVervollstaendigen',
|
||||
'empfehlungWurdeAngefordert',
|
||||
'anrechnungenWurdenGenehmigt',
|
||||
'anrechnungenWurdenAbgelehnt',
|
||||
@@ -91,85 +92,93 @@ $this->load->view(
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="col-lg-4">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<td><?php echo $antragData->matrikelnr ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<td><?php echo $antragData->stg_bezeichnung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<td><?php echo $antragData->lv_bezeichnung ?></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td colspan="3"><span id="ects"><?php echo $antragData->ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4">
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<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>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><span id="ects"><?php echo $antragData->ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-5">
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<span class="approveAnrechnungDetail-anrechnungEctsTooltip"
|
||||
data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<td colspan="3">
|
||||
<td>
|
||||
Total: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
|
||||
[Schulisch: <span id="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>"><?php echo $antragData->sumEctsSchulisch ?></span> /
|
||||
Beruflich: <span id="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>"><?php echo $antragData->sumEctsBeruflich ?></span> ]
|
||||
<span id="sumEctsMsg"></span>
|
||||
<span id="sumEctsMsg"></span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td colspan="3">
|
||||
<?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>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td colspan="3"><?php echo $antragData->zgv ?></td>
|
||||
<th class="col-xs-3"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td><?php echo $antragData->zgv ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
|
||||
<td colspan="3"><?php echo $anrechnungData->anmerkung ?></td>
|
||||
<td><?php echo $anrechnungData->anmerkung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
|
||||
<td colspan="3">
|
||||
<td>
|
||||
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
|
||||
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
|
||||
<td colspan="3"><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
|
||||
<td><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungEctsLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungLvinhaltLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_lvinhalt ?></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -322,14 +331,6 @@ $this->load->view(
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
@@ -338,6 +339,14 @@ $this->load->view(
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeil'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
|
||||
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
@@ -346,6 +355,9 @@ $this->load->view(
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item" onclick="{ $(this).closest('div').find('textarea').val('').focus()}">
|
||||
<span><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></span>
|
||||
</li>
|
||||
</ul>
|
||||
<textarea class="form-control" name="begruendung"
|
||||
id="approveAnrechnungDetail-begruendung"
|
||||
|
||||
@@ -124,7 +124,7 @@ $this->load->view(
|
||||
<!-- Tabelle -->
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
|
||||
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Genehmigen / Ablehnen Panel -->
|
||||
@@ -145,18 +145,13 @@ $this->load->view(
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item disabled"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?></li>
|
||||
</ol>
|
||||
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
|
||||
rows="2"
|
||||
|
||||
@@ -3,8 +3,9 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
|
||||
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
|
||||
|
||||
$STUDIENSEMESTER = $studiensemester_selected;
|
||||
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
|
||||
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
|
||||
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled); // alle STG mit Lese- und Schreibberechtigung
|
||||
$ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT = "'". implode('\',\'', $oes_schreibberechtigt). "'"; // alle OE nur mit Schreibberechtigung; singlequote für jeden string notwendig
|
||||
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
|
||||
|
||||
$query = '
|
||||
WITH anrechnungen AS
|
||||
@@ -14,6 +15,10 @@ $query = '
|
||||
anrechnung.lehrveranstaltung_id,
|
||||
anrechnung.begruendung_id,
|
||||
anrechnung.dms_id,
|
||||
CASE
|
||||
WHEN stg.typ || stg.kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE
|
||||
ELSE FALSE
|
||||
END "schreibberechtigt",
|
||||
anrechnung.studiensemester_kurzbz,
|
||||
stg.studiengang_kz,
|
||||
stg.bezeichnung AS stg_bezeichnung,
|
||||
@@ -35,8 +40,8 @@ $query = '
|
||||
dmsversion.name AS "dokument_bezeichnung",
|
||||
anrechnung.anmerkung_student,
|
||||
(SELECT COALESCE(
|
||||
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
|
||||
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
|
||||
zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
|
||||
zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
|
||||
) AS zgv
|
||||
FROM public.tbl_prestudent
|
||||
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
|
||||
@@ -71,6 +76,7 @@ $query = '
|
||||
anrechnungen.lehrveranstaltung_id,
|
||||
anrechnungen.begruendung_id,
|
||||
anrechnungen.dms_id,
|
||||
anrechnungen.schreibberechtigt,
|
||||
anrechnungen.studiensemester_kurzbz,
|
||||
anrechnungen.studiengang_kz,
|
||||
anrechnungen.stg_bezeichnung,
|
||||
@@ -89,7 +95,7 @@ $query = '
|
||||
anrechnungen.antragsdatum,
|
||||
anrechnungen.empfehlung_anrechnung,
|
||||
anrechnungen.status_kurzbz,
|
||||
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
|
||||
anrechnungstatus.bezeichnung_mehrsprachig[' . $LANGUAGE_INDEX . '] AS "status_bezeichnung",
|
||||
anrechnungen.prestudent_id,
|
||||
CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
@@ -101,8 +107,39 @@ $query = '
|
||||
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
|
||||
ORDER BY insertamum DESC
|
||||
LIMIT 1)
|
||||
END "empfehlungsanfrageAm",
|
||||
CASE
|
||||
END "empfehlungsanfrageAm",';
|
||||
|
||||
if ($configFachbereichsleitung === TRUE)
|
||||
{
|
||||
$query.= ' CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT COALESCE(
|
||||
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \')
|
||||
) empfehlungsanfrageAn
|
||||
FROM (
|
||||
SELECT DISTINCT ON (benutzer.uid) bf.uid, vorname, nachname
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
|
||||
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
|
||||
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
|
||||
JOIN public.tbl_benutzer benutzer ON bf.uid = benutzer.uid
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
and bf.datum_von <= now()
|
||||
and (bf.datum_bis >= now() or bf.datum_bis is null)
|
||||
AND bf.funktion_kurzbz = \'Leitung\'
|
||||
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
|
||||
AND benutzer.aktiv = TRUE
|
||||
AND tbl_person.aktiv = TRUE
|
||||
ORDER BY benutzer.uid, nachname, vorname
|
||||
) as tmp_empfehlungsanfrageEmpfaenger
|
||||
)
|
||||
END "empfehlungsanfrageAn"';
|
||||
}
|
||||
else
|
||||
{
|
||||
$query.= ' CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT COALESCE(
|
||||
@@ -122,10 +159,12 @@ $query = '
|
||||
AND benutzer.aktiv = TRUE
|
||||
AND tbl_person.aktiv = TRUE
|
||||
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
|
||||
) as tmp_lvlektoren
|
||||
) as tmp_empfehlungsanfrageEmpfaenger
|
||||
)
|
||||
END "empfehlungsanfrageAn"
|
||||
FROM anrechnungen
|
||||
END "empfehlungsanfrageAn"';
|
||||
}
|
||||
|
||||
$query.= ' FROM anrechnungen
|
||||
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
|
||||
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
|
||||
@@ -141,6 +180,7 @@ $filterWidgetArray = array(
|
||||
'lehrveranstaltung_id',
|
||||
'begruendung_id',
|
||||
'dms_id',
|
||||
'Schreibberechtigt',
|
||||
'studiensemester_kurzbz',
|
||||
'studiengang_kz',
|
||||
ucfirst($this->p->t('lehre', 'studiengang')),
|
||||
@@ -167,9 +207,7 @@ $filterWidgetArray = array(
|
||||
'datasetRepOptions' => '{
|
||||
height: func_height(this),
|
||||
layout: "fitColumns", // fit columns to width of table
|
||||
persistentLayout:true,
|
||||
persistentSort:true,
|
||||
persistentFilter:true,
|
||||
persistenceID: "approveAnrechnungUebersicht_V1",
|
||||
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
|
||||
headerFilterPlaceholder: " ",
|
||||
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
|
||||
@@ -200,6 +238,10 @@ $filterWidgetArray = array(
|
||||
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
|
||||
begruendung_id: {visible: false, headerFilter:"input"},
|
||||
dms_id: {visible: false, headerFilter:"input"},
|
||||
schreibberechtigt: {
|
||||
formatter:"tickCross", align:"center",
|
||||
headerFilter:"tickCross", headerFilterParams:{tristate: true}, headerFilterFunc: hf_schreibberechtigt
|
||||
},
|
||||
studiensemester_kurzbz: {visible: false, headerFilter:"input"},
|
||||
studiengang_kz: {visible: false, headerFilter:"input"},
|
||||
stg_bezeichnung: {headerFilter:"input"},
|
||||
@@ -212,7 +254,7 @@ $filterWidgetArray = array(
|
||||
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
|
||||
begruendung: {headerFilter:"input", visible: true},
|
||||
student: {headerFilter:"input"},
|
||||
zgv: {visible: false, headerFilter:"input"},
|
||||
zgv: {headerFilter:"input"},
|
||||
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez},
|
||||
anmerkung_student: {headerFilter:"input"},
|
||||
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user