Merge branch 'master' into feature-25563/PV21_Verschlüsselung_Gehaltsdaten

This commit is contained in:
Paolo
2023-07-17 12:13:45 +02:00
159 changed files with 6573 additions and 2839 deletions
+10 -2
View File
@@ -283,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')
),
);
@@ -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');
}
@@ -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));
}
}
@@ -142,12 +142,6 @@ class InfoCenter extends Auth_Controller
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'park' => 'infocenter:rw',
'unpark' => 'infocenter:rw',
'setOnHold' => 'infocenter:rw',
'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw',
@@ -164,6 +158,7 @@ class InfoCenter extends Auth_Controller
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('system/Message_model', 'MessageModel');
@@ -606,7 +601,7 @@ class InfoCenter extends Auth_Controller
}
/**
* Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang
* Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang
*/
private function sendZgvMail($mail, $typ, $person){
$data = array(
@@ -697,7 +692,7 @@ class InfoCenter extends Auth_Controller
/**
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
* Falls es erfolgreich war, sendet er die Mail raus
* Falls es erfolgreich war, wird eine Mail rausgeschickt
*/
public function zgvRueckfragen()
{
@@ -751,7 +746,8 @@ class InfoCenter extends Auth_Controller
$this->sendZgvMail($mail, $typ, $person);
elseif (isError($insert))
$this->terminateWithJsonError('Fehler beim Speichern');
}else
}
else
{
$insert = $this->ZGVPruefungModel->insert(
array(
@@ -781,7 +777,7 @@ class InfoCenter extends Auth_Controller
}
$hold = false;
if ($this->personloglib->getOnHoldDate($person_id) !== null)
if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv')))
$hold = true;
$this->outputJsonSuccess(
@@ -1162,107 +1158,7 @@ class InfoCenter extends Auth_Controller
->set_output($aktecontent->retval)
->_display();
}
/**
* Gets the date until which a person is parked
* @param $person_id
*/
public function getPostponeDate($person_id)
{
$result = array(
'type' => null,
'date' => null
);
$parkedDate = $this->personloglib->getParkedDate($person_id);
if (isset($parkedDate))
{
$result['type'] = 'parked';
$result['date'] = $parkedDate;
}
else
{
$onholdDate = $this->personloglib->getOnHoldDate($person_id);
if (isset($onholdDate))
{
$result['type'] = 'onhold';
$result['date'] = $onholdDate;
}
}
$this->outputJsonSuccess($result);
}
/**
* Initializes parking of a person, i.e. a person is not expected to do any actions while parked
*/
public function park()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('parkdate');
$result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removes parking of a person
*/
public function unPark()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->unPark($person_id);
$this->outputJson($result);
}
/**
* Sets a person on hold ("zurückstellen")
*/
public function setOnHold()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('onholddate');
$result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removed on hold status of a person
*/
public function removeOnHold()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->removeOnHold($person_id);
$this->outputJson($result);
}
/**
* Gets the End date of the current Studienjahr
*/
public function getStudienjahrEnd()
{
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
$result = $this->StudienjahrModel->getCurrStudienjahr();
$json = null;
if (hasData($result))
{
$json = $result->retval[0]->ende;
}
$this->outputJsonSuccess(array($json));
}
/**
* Wrapper for setNavigationMenu, returns JSON message
@@ -1484,7 +1380,6 @@ class InfoCenter extends Auth_Controller
if($nachreichungAm < $today)
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
if (hasData($akte)) {
@@ -0,0 +1,135 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Rueckstellung extends Auth_Controller
{
private $_ci; // Code igniter instance
private $_uid;
public function __construct()
{
parent::__construct(
array(
'get' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'set' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw')
)
);
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->library('PersonLogLib');
$this->_setAuthUID(); // sets property uid
$this->_ci =& get_instance(); // get code igniter instance
}
public function get($person_id)
{
$result = null;
$rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id);
if (isError($rueckstellung))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
if (hasData($rueckstellung))
{
$rueckstellung = getData($rueckstellung)[0];
$fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon));
$result = array(
'von' => $fullName,
'bezeichnung' => $rueckstellung->bezeichnung,
'bis' => $rueckstellung->datum_bis,
'status_kurzbz' => $rueckstellung->status_kurzbz
);
if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d'))
{
$this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked'));
$result = null;
}
}
$this->outputJsonSuccess($result);
}
public function set()
{
$person_id = $this->input->post('person_id');
$datum_bis = $this->input->post('datum_bis');
$status_kurzbz = $this->input->post('status_kurzbz');
$result = $this->_ci->RueckstellungModel->insert(
array('person_id' => $person_id,
'status_kurzbz' => $status_kurzbz,
'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'),
'insertvon' => $this->_uid
)
);
if (isError($result))
$this->terminateWithJsonError(getError($result));
$this->_log($person_id, $status_kurzbz);
$this->outputJson($result);
}
public function delete()
{
$person_id = $this->input->post('person_id');
$status = $this->input->post('status');
$result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern'));
$this->outputJson($result);
}
public function getStatus($aktiv = true)
{
$this->_ci->RueckstellungStatusModel->addOrder('sort');
$result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
$this->outputJsonSuccess(getData($result));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
private function _log($person_id, $status_kurzbz)
{
$message = "Person $person_id set to $status_kurzbz";
$this->_ci->personloglib->log(
$person_id,
'Action',
array(
'name' => 'Person status set',
'message' => $message,
'success' => true
),
'bewerbung',
'infocenter',
null,
$this->_uid
);
}
}
@@ -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
);
}
}
-21
View File
@@ -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);
}
+10 -3
View File
@@ -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");
}
}
+1 -4
View File
@@ -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);
-165
View File
@@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class PersonLogLib
{
const PARKED_LOGNAME = 'Parked';
const ONHOLD_LOGNAME = 'Onhold';
/**
* Constructor
*/
@@ -78,168 +75,6 @@ class PersonLogLib
else
show_error(getError($result));
}
/**
* Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent)
* Done by adding a logentry in the future
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return insert object
*/
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$onhold = $this->getOnHoldDate($person_id);
if (hasData($onhold))
return error("Person already on hold");
$logjson = array(
'name' => self::PARKED_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Unparks a person, i.e. removes all log entries in the future with logname for parking
* @param $person_id
* @return array with deleted logids
*/
public function unPark($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is parked
* @param $person_id
* @return the date if person is parked, null otherwise
*/
public function getParkedDate($person_id)
{
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
$parkeddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$parkeddate = $log->zeitpunkt;
break;
}
}
}
return $parkeddate;
}
/**
* Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
* Done by adding a logentry with a special name. can be undone only manually by clicking button.
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return array
*/
public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$parked = $this->getParkedDate($person_id);
if (hasData($parked))
return error("Person already parked");
$logjson = array(
'name' => self::ONHOLD_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Removes on hold status, i.e. removes all log entries with logname for on hold
* @param $person_id
* @return array
*/
public function removeOnHold($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->filterLog($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is on hold
* @param $person_id
* @return the date if person is on hold, null otherwise
*/
public function getOnHoldDate($person_id)
{
$result = $this->ci->PersonLogModel->filterLog($person_id);
$onholddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$onholddate = $log->zeitpunkt;
break;
}
}
}
return $onholddate;
}
/**
* Saves a processstate log with specified parameters, including a specified log date.
* @param $person_id
+85
View File
@@ -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);
}
}
@@ -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);
}
}
@@ -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;
}
$qry .= ")";
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,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,14 @@
<?php
class RueckstellungStatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung_status';
$this->pk = 'status_kurzbz';
}
}
@@ -0,0 +1,33 @@
<?php
class Rueckstellung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung';
$this->pk = 'rueckstellung_id';
$this->hasSequence = true;
}
public function getByPersonId($person_id, $status = null)
{
$language_index = getUserLanguage() == 'German' ? 0 : 1;
$this->addLimit(1);
$this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
$this->addSelect('*,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
$this->addOrder('datum_bis', 'DESC');
$where['person_id'] = $person_id;
if (!isEmptyString($status))
$where['status_kurzbz'] = $status;
return $this->loadWhere($where);
}
}
@@ -0,0 +1,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);
}
}
@@ -25,6 +25,7 @@ SELECT
lv_oe_kurzbz,
lektor,
stunden,
stundensatz,
betrag,
vertrag_id,
vertrag_stunden,
@@ -149,6 +150,7 @@ FROM
END AS "lv_oe_kurzbz",
(person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
lema.stundensatz,
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
@@ -270,6 +272,7 @@ FROM
END AS "lv_oe_kurzbz",
(nachname || \' \' || vorname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
pb.stundensatz,
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
@@ -325,6 +328,7 @@ $filterWidgetArray = array(
ucfirst($this->p->t('lehre', 'organisationseinheit')),
ucfirst($this->p->t('lehre', 'lektor')),
ucfirst($this->p->t('ui', 'stunden')),
ucfirst($this->p->t('ui', 'stundensatz')),
ucfirst($this->p->t('ui', 'betrag')),
ucfirst($this->p->t('ui', 'vertrag')). '-ID',
ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'stunden')),
@@ -399,6 +403,8 @@ $filterWidgetArray = array(
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
@@ -435,7 +435,7 @@ $filterWidgetArray = array(
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
stundensatz: {visible: false, align:"right", formatter: form_formatNulltoStringNumber,
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
@@ -7,10 +7,11 @@
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$LOGDATA_NAME = '\'Message sent\'';
$LOGDATA_VON = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
p.person_id AS "PersonID",
p.person_id AS "PersonId",
ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
@@ -37,7 +38,15 @@ $query = '
AND l.zeitpunkt >= pss.insertamum
ORDER BY l.log_id DESC
LIMIT 1
) AS "Nachricht"
) AS "Nachricht",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM
public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
@@ -60,14 +69,16 @@ $query = '
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'PersonId',
'columnsAliases' => array(
'PersonID',
'PersonId',
'PreStudentID',
'Vorname',
'Nachname',
'Studiengang',
'Abgewiesen am',
'Nachricht'
ucfirst($this->p->t('person', 'vorname')) ,
ucfirst($this->p->t('person', 'nachname')),
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('infocenter', 'abgewiesenam')),
ucfirst($this->p->t('global', 'nachricht')),
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -80,6 +91,19 @@ $query = '
$datasetRaw->{'Nachricht'} = 'Ja';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
$datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i');
return $datasetRaw;
}
@@ -7,13 +7,12 @@
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\'';
$LOGDATA_NAME_PARKED = '\'Parked\'';
$LOGDATA_NAME_ONHOLD = '\'Onhold\'';
$LOGTYPE_KURZBZ = '\'Processstate\'';
$POSTPONE_STATUS_PARKED = '\'parked\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$ORG_NAME = '\'InfoCenter\'';
$ONLINE = '\'online\'';
@@ -27,8 +26,6 @@
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
ohd.onholddate AS "OnholdDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
@@ -276,9 +273,9 @@
) AS "ZGVMNationGruppe",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.'
AND tbl_benutzerfunktion.uid = (
@@ -290,8 +287,18 @@
ORDER BY l.log_id DESC
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
LIMIT 1
) AS "InfoCenterMitarbeiter",
rueck.datum_bis AS "HoldDate",
rueck.bezeichnung AS "Rueckstellgrund",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -302,22 +309,24 @@
JOIN public.tbl_person sp ON sb.person_id = sp.person_id
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS parkdate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS onholddate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.'
AND l.zeitpunkt >= NOW()
) ohd USING(person_id)
SELECT
tbl_rueckstellung.person_id,
tbl_rueckstellung.datum_bis,
tbl_rueckstellung.status_kurzbz,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung
FROM public.tbl_rueckstellung
JOIN public.tbl_rueckstellung_status USING(status_kurzbz)
JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id
WHERE tbl_rueckstellung.rueckstellung_id =
(
SELECT srueck.rueckstellung_id
FROM public.tbl_rueckstellung srueck
WHERE srueck.person_id = tbl_rueckstellung.person_id
AND datum_bis >= NOW()
ORDER BY srueck.datum_bis DESC LIMIT 1
)
) rueck ON rueck.person_id = p.person_id
WHERE
EXISTS (
SELECT 1
@@ -344,7 +353,12 @@
AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
)
)
ORDER BY "LastAction" ASC';
ORDER BY CASE
WHEN rueck.status_kurzbz IS NULL THEN 1
WHEN rueck.status_kurzbz = ' .$POSTPONE_STATUS_PARKED .' THEN 2
WHEN rueck.status_kurzbz != '. $POSTPONE_STATUS_PARKED .' THEN 3
END,
rueck.datum_bis NULLS LAST, "LastAction" ASC';
$filterWidgetArray = array(
'query' => $query,
@@ -366,8 +380,6 @@
ucfirst($this->p->t('person', 'nation')),
ucfirst($this->p->t('global', 'sperrdatum')),
ucfirst($this->p->t('global', 'gesperrtVon')),
ucfirst($this->p->t('global', 'parkdatum')),
ucfirst($this->p->t('global', 'rueckstelldatum')),
ucfirst($this->p->t('global', 'letzteAktion')),
'Aktionstyp',
'AnzahlAktePflicht',
@@ -383,7 +395,10 @@
'ZGV Nation MA',
'ZGV Gruppe BA',
'ZGV Gruppe MA',
'InfoCenter Mitarbeiter'
'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'rueckstelldatum')),
ucfirst($this->p->t('infocenter', 'rueckstellgrund')),
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -430,18 +445,13 @@
$datasetRaw->{'LockUser'} = '-';
}
if ($datasetRaw->{'ParkDate'} == null)
if ($datasetRaw->{'HoldDate'} == null)
{
$datasetRaw->{'ParkDate'} = '-';
}
if ($datasetRaw->{'OnholdDate'} == null)
{
$datasetRaw->{'OnholdDate'} = '-';
$datasetRaw->{'HoldDate'} = '-';
}
else
{
$datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i');
$datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i');
}
if ($datasetRaw->{'StgAbgeschickt'} == null)
@@ -493,6 +503,24 @@
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
if ($datasetRaw->{'Rueckstellgrund'} === null)
{
$datasetRaw->{'Rueckstellgrund'} = '-';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -504,16 +532,12 @@
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
if ($datasetRaw->OnholdDate != null)
{
if ($datasetRaw->Rueckstellgrund != null && $datasetRaw->Rueckstellgrund !== 'Parken')
$mark = "onhold";
}
// Parking has priority over locking
if ($datasetRaw->ParkDate != null)
{
if ($datasetRaw->Rueckstellgrund === 'Parken')
$mark = "text-info";
}
return $mark;
}
@@ -24,42 +24,15 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js',
'public/js/infocenter/stammdaten.js'
),
'phrases' => array(
'infocenter' => array(
'notizHinzufuegen',
'notizAendern',
'bewerberParken',
'bewerberAusparken',
'nichtsZumAusparken',
'fehlerBeimAusparken',
'fehlerBeimParken',
'bewerberGeparktBis',
'bewerberOnHold',
'bewerberOnHoldEntfernen',
'bewerberOnHoldBis',
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'rueckstelldatumUeberschritten',
'parkenZurueckstellenInfo',
'zgvInPruefung',
'zgvErfuellt',
'zgvNichtErfuellt',
'zgvErfuelltPruefung',
'datumUngueltig',
'nachreichDatumNichtVergangenheit'
),
'ui' => array(
'gespeichert',
'fehlerBeimSpeichern'
),
'global' => array(
'bis',
'zeilen'
)
'infocenter',
'ui',
'global'
)
);
@@ -13,6 +13,7 @@
$ORG_NAME = '\'InfoCenter\'';
$IDENTITY = '\'identity\'';
$ONLINE = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -264,7 +265,15 @@ $query = '
WHERE akte.person_id = p.person_id
AND dokument_kurzbz = '. $IDENTITY .'
LIMIT 1
) AS "AktenId"
) AS "AktenId",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -337,7 +346,8 @@ $query = '
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter',
'Identitätsnachweis'
'Identitätsnachweis',
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -453,6 +463,18 @@ $query = '
$datasetRaw->{'AktenId'} = '-';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
@@ -9,6 +9,7 @@
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -195,7 +196,14 @@ $query = '
LIMIT 1
)
LIMIT 1
) AS "InfoCenterMitarbeiter"
) AS "InfoCenterMitarbeiter",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -256,7 +264,8 @@ $query = '
'Reihungstest Datum',
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter'
'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -359,6 +368,19 @@ $query = '
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -26,6 +26,7 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js'
),
'phrases' => array(
@@ -5,6 +5,7 @@ $INTERESSENT_STATUS = '\'Interessent\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$oeKurz = '\''. implode('\',\'', $oeKurz) . '\'';
$ABGEWIESENER_STATUS = '\'Abgewiesener\'';
$query = '
SELECT
@@ -22,6 +23,7 @@ $query = '
AND zgvstatus.datum IN (
SELECT MAX(zgvstatus.datum)
FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id)
AND get_rolle_prestudent(prestudent_id, NULL) != '. $ABGEWIESENER_STATUS .'
ORDER BY ps.prestudent_id
';
+109 -79
View File
@@ -6,7 +6,6 @@ $ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_
// all oes for which logged user has issues permissions, including permissions for "special" issue funktion
$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')";
$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')";
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
// get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes
$query = "WITH zustaendigkeiten AS (
@@ -34,73 +33,97 @@ $query = "WITH zustaendigkeiten AS (
FROM system.tbl_fehler_zustaendigkeiten zst
)";
$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
(
/* show all relevant Studiengänge of person and wether it is an employee*/
SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
|| (CASE WHEN EXISTS (
SELECT 1 FROM public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
WHERE person_id = prestudents.person_id
AND ben.aktiv
) THEN ' | Mitarbeiter' ELSE '' END)
FROM (
SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
FROM public.tbl_prestudent ps
JOIN public.tbl_studiengang stg USING (studiengang_kz)
WHERE person_id = pers.person_id
ORDER BY prestudent_id DESC
) prestudents
WHERE last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
GROUP BY person_id
LIMIT 1;
) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\",
(
SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
FROM system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
FROM system.tbl_fehler_zustaendigkeiten
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Organisationseinheit Zuständigkeiten\",
pers.bpk AS \"BPK\",
pers.matr_nr AS \"Matrikelnummer\"
FROM system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
$query .= "
SELECT
issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\",
stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
(
/* show all relevant Studiengänge of person and wether it is an employee*/
SELECT
STRING_AGG(studiengang || ' ' || last_status, ' | ')
|| (CASE WHEN EXISTS (
SELECT 1 FROM public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
WHERE person_id = prestudents.person_id
AND ben.aktiv
) THEN ' | Mitarbeiter' ELSE '' END)
FROM (
SELECT
DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang,
get_rolle_prestudent(ps.prestudent_id, null) AS last_status
FROM
public.tbl_prestudent ps
JOIN public.tbl_studiengang stg USING (studiengang_kz)
WHERE
person_id = pers.person_id
ORDER BY
prestudent_id DESC
) prestudents
WHERE
last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
GROUP BY
person_id
LIMIT 1;
) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\",
(
SELECT
string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
FROM
system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE
fehlercode = fr.fehlercode
GROUP BY
fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT
string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung ||
COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
FROM
system.tbl_fehler_zustaendigkeiten
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE
fehlercode = fr.fehlercode
GROUP BY
fehlercode
) AS \"Organisationseinheit Zuständigkeiten\",
pers.bpk AS \"BPK\",
pers.matr_nr AS \"Matrikelnummer\"
FROM
system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE
fr.app IN ('core', 'dvuh')
AND (
EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
// show issue if it is assigend to oe of logged in user or to student of oe of logged in user
if (!isEmptyArray($all_oe_kurzbz_berechtigt))
@@ -131,6 +154,7 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
)
)";
}
$query .= ") ";
$query .= " ORDER BY
CASE
@@ -146,17 +170,18 @@ $query .= " ORDER BY
datum DESC, fehlercode, issue_id DESC";
$filterWidgetArray = array(
'query' => $query,
'query' => $query,
'app' => 'core',
'datasetName' => 'issues',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issues',
'requiredPermissions' => 'system/issues_verwalten',
'datasetRepresentation' => 'tablesorter',
'tableUniqueId' => 'issues',
'requiredPermissions' => 'system/issues_verwalten',
'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'issue_id',
'columnsAliases' => array(
'ID',
'columnsAliases' => array(
'ID',
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')),
ucfirst($this->p->t('global', 'datum')),
ucfirst($this->p->t('fehlermonitoring', 'inhalt')),
@@ -176,10 +201,15 @@ $filterWidgetArray = array(
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten')),
'BPK',
'Matrikelnummer'
),
'formatRow' => function($datasetRaw) {
'BPK',
'Matrikelnummer'
),
'formatRow' => function ($datasetRaw) {
if ($datasetRaw->{'Fehler Kurzbezeichnung'} == null)
{
$datasetRaw->{'Fehler Kurzbezeichnung'} = '-';
}
if ($datasetRaw->{'Fehlercode extern'} == null)
{
@@ -238,7 +268,7 @@ $filterWidgetArray = array(
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
'markRow' => function ($datasetRaw) {
$mark = '';
@@ -0,0 +1,200 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Fehler Konfiguration',
'jquery3' => true,
'jqueryui1' => true,
'jquerycheckboxes1' => true,
'bootstrap3' => true,
'fontawesome4' => true,
'sbadmintemplate3' => true,
'tablesorter2' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'ui',
'fehlermonitoring'
),
'customCSSs' => array('public/css/issues/issuesKonfiguration.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
'customJSs' => array('public/js/issues/issuesKonfiguration.js', 'public/js/bootstrapper.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('fehlermonitoring', 'fehlerKonfiguration') ?>
</h3>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="panel panel-default">
<table class="table table-bordered" id="fehlercodeSelectTable">
<tr>
<td>
<label for="fehlerappSelect">App</label>
<select class="form-control" name="fehlerappSelect" id="fehlerappSelect">
</select>
</td>
</tr>
</table>
</div>
</div>
<div class="col-lg-8">
<div class="panel panel-default">
<table class="table table-bordered">
<tr>
<td class="tableCellNoRightBorder">
<label for="konfigSelect"><?php echo $this->p->t('fehlermonitoring', 'konfigurationstyp') ?></label>
<select class="form-control" name="konfigSelect" id="konfigSelect">
</select>
<i class="fa fa-info-circle" id="konfigurationstypInfoIcon"></i>
</td>
<td class="tableCellNoLeftBorder">
<label for="fehlercodeSelect"><?php echo $this->p->t('fehlermonitoring', 'fehlercode') ?></label>
<select class="form-control" name="fehlercodeSelect" id="fehlercodeSelect">
</select>
<i class="fa fa-info-circle" id="fehlercodeInfoIcon"></i>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 text-center">
<div class="input-group">
<input type="text" class="form-control" name="konfigurationsWert" id="konfigurationsWert"
placeholder="<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertPlatzhalter') ?>">
<div class="input-group-btn">
<button class="btn btn-default" id="assignKonfiguration">
<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertZuweisen') ?>
</button>
<button class="btn btn-default" id="deleteKonfiguration">
<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertLoeschen') ?>
</button>
</div>
</div>
</div>
</div>
<br>
<div>
<?php $this->load->view('system/issues/issuesKonfigurationData.php'); ?>
</div>
<div class="modal fade" id="fehlerInfo" tabindex="-1"
role="dialog"
aria-labelledby="fehlerInfoLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title" id="fehlerInfoLabel">
</h4>
</div>
<div class="modal-body" id="fehlerInfoContent">
<table class="table table-condensed table-bordered">
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlercode')) ?></b>
</td>
<td>
<span id="fehlercodeInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')) ?></b>
</td>
<td>
<span id="fehlerkurzbzInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')) ?></b>
</td>
<td>
<span id="fehlertypInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertext')) ?></b>
</td>
<td>
<span id="fehlertextInfo"></span>
</td>
</tr>
</table>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
<div class="modal fade" id="konfigurationsInfo" tabindex="-1"
role="dialog"
aria-labelledby="konfigurationstypInfoLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title" id="konfigurationstypInfoLabel">
</h4>
</div>
<div class="modal-body" id="konfigurationstypInfoContent">
<table class="table table-condensed table-bordered">
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')) ?></b>
</td>
<td>
<span id="konfigurationstypInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')) ?></b>
</td>
<td>
<span id="konfigurationsbeschreibungInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')) ?></b>
</td>
<td>
<span id="konfigurationsdatentypInfo"></span>
</td>
</tr>
</table>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,56 @@
<?php
// get assigned Konfiguration
$query = "SELECT
konftyp.konfigurationstyp_kurzbz, fe.fehlercode, fe.fehler_kurzbz, konf.konfiguration, fe.app,
konftyp.beschreibung AS konfigurationsbeschreibung, konftyp.konfigurationsdatentyp, fe.fehlertext
FROM
system.tbl_fehler_konfiguration konf
JOIN system.tbl_fehler_konfigurationstyp konftyp USING (konfigurationstyp_kurzbz)
JOIN system.tbl_fehler fe USING (fehlercode)
ORDER BY
konf.konfigurationstyp_kurzbz, fe.fehlercode";
$filterWidgetArray = array(
'query' => $query,
'app' => 'core',
'datasetName' => 'fehlerKonfiguration',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issuesKonfiguration',
'requiredPermissions' => 'admin',
'datasetRepresentation' => 'tablesorter',
'additionalColumns' => array('Delete'),
'columnsAliases' => array(
ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'konfigurationswert')),
'Application',
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')),
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')),
ucfirst($this->p->t('fehlermonitoring', 'fehlertext')),
),
'formatRow' => function($datasetRaw) {
$datasetRaw->{'Delete'} =
"<button
data-konfigurationstyp-kurzbz='".$datasetRaw->{'konfigurationstyp_kurzbz'}."'
data-fehlercode='".$datasetRaw->{'fehlercode'}."'
class='btn btn-default deleteBtn'>"
.ucfirst($this->p->t('ui', 'loeschen'))."</button>";
if ($datasetRaw->{'konfigurationsbeschreibung'} == null)
{
$datasetRaw->{'konfigurationsbeschreibung'} = '-';
}
if ($datasetRaw->{'fehlertext'} == null)
{
$datasetRaw->{'fehlertext'} = '-';
}
return $datasetRaw;
}
);
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
@@ -71,9 +71,9 @@ $this->load->view(
<label>Fehler</label>
<select class="form-control" name="fehler_kurzbz" id="fehler_kurzbz">
<option value="" selected="selected">Alle</option>';
<?php foreach ($fehler as $fehler_kurzbz):?>
<?php foreach ($fehlerKurzbzCodeMappings as $fehler_kurzbz => $fehlercode):?>
<option value="<?php echo $fehler_kurzbz ?>">
<?php echo $fehler_kurzbz ?>
<?php echo $fehler_kurzbz.' ('.$fehlercode.')' ?>
</option>
<?php endforeach; ?>
</select>
+1 -1
View File
@@ -60,7 +60,7 @@
if ($bootstrap3 === true) generateJSsInclude('vendor/twbs/bootstrap3/dist/js/bootstrap.min.js');
// Bootstrap 5 JS
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.min.js');
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.bundle.min.js');
// Moment JS
if ($momentjs2 === true)
+63 -6
View File
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
if (!$db = new basis_db())
$db=false;
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n";
$htmlstr .= "<input type='hidden' name='command' value='update'>\n";
$htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n";
if(!$row->abgabedatum)
$uploadedDocumentSigned = null;
if (!$row->abgabedatum)
{
if ($row->datum<date('Y-m-d'))
{
@@ -626,8 +629,7 @@ while ($row=@$db->db_fetch_object($result))
$fcol='#000000';
}
}
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked=\"checked\"':'')." >";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
if($row->fixtermin=='t')
{
$htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>";
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= " </select></td>\n";
$htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n";
$htmlstr .= " <td>".($row->abgabedatum==''?'&nbsp;':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n";
if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
{
$htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>";
if(!$row->abgabedatum)
if (!$row->abgabedatum)
{
$htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>";
}
@@ -692,6 +695,60 @@ while ($row=@$db->db_fetch_object($result))
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
{
$signaturVorhanden = false;
if ($row->paabgabetyp_kurzbz == 'end')
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
$signaturVorhanden = true;
// The document is signed
}
elseif (isset($signList->code) && $signList->code == 1)
{
$uploadedDocumentSigned = $p->t('abgabetool/uploaddDocumentToBigForSignature');
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
}
}
}
if ($uploadedDocumentSigned != null)
{
$htmlstr .= '
<td>
<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$uploadedDocumentSigned.'</b>
</div>
</td>';
}
elseif($signaturVorhanden)
{
$htmlstr .= '
<td>
<div style="color: #198754; background-color: #d1e7dd; border-color: #a3cfbb; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$p->t('abgabetool/uploadedDocumentSigned').'</b>
</div>
</td>';
}
}
else
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
$htmlstr .= " </tr>\n";
@@ -710,7 +767,7 @@ $htmlstr .= '<tr id="'.$db->convert_html_chars($projektarbeit_id).'">'."\n";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>";
$htmlstr .= "<td>&nbsp;&nbsp;</td>";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n";
$qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'";
+76 -6
View File
@@ -36,6 +36,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
$anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache);
@@ -93,6 +94,7 @@ else
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
$abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1');
$seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1');
$signaturVorhanden = (isset($_POST['signaturVorhanden']) && $_POST['signaturVorhanden']=='true'?true:false);
}
$user = get_uid();
@@ -111,6 +113,7 @@ $titel = $projektarbeit_obj->titel;
$person = new person();
$person->load($bid);
$betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost;
$uploadedDocumentSigned = null;
if($uid!=$user)
{
@@ -258,6 +261,35 @@ if($command=='add')
echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br>&nbsp;";
$command='';
}
if ($signaturVorhanden === false)
{
// Mail an Studiengang wenn keine Signatur gefunden wurde
$student = new student();
if(!$student->load($projektarbeit_obj->student_uid))
die($p->t('global/userNichtGefunden'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
$subject = 'Abgabe ohne Signatur';
$tomail = $stg_obj->email;
$data = array(
'vorname' => $student->vorname,
'nachname' => $student->nachname,
'studiengang' => $stg_obj->bezeichnung
);
$mailres = sendSanchoMail(
'ParbeitsbeurteilungSiganturFehlt',
$data,
$tomail,
$subject,
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
}
else
{
@@ -280,11 +312,11 @@ if($command=="update" && $error!=true)
$extensions = explode(".", $_FILES['datei']['name']);
if(strtoupper(end($extensions))=='PDF')
{
if($paabgabetyp_kurzbz!='end')
if ($paabgabetyp_kurzbz != 'end')
{
//"normaler" Upload
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"');
@@ -299,18 +331,40 @@ if($command=="update" && $error!=true)
else
{
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
}
}$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
}
else
else // endupload type
{
//Upload der Endabgabe - Eingabe der Zusatzdaten
$command='add';
if(!$error)
if (!$error)
{
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
}
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
$signaturVorhanden = true;
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$signaturVorhanden = false;
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSignedStudent');
}
}
/*$qry="UPDATE campus.tbl_paabgabe SET
abgabedatum = now(),
updatevon = '".$user."',
@@ -339,6 +393,7 @@ if($command=="update" && $error!=true)
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
$htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n";
$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
$htmlstr .= '<input type="hidden" name="signaturVorhanden" value="'.($signaturVorhanden?'true':'false').'">'."\n";
$htmlstr .= "<tr>\n";
$htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>";
$sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache");
@@ -372,6 +427,21 @@ if($command=="update" && $error!=true)
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td>
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n";
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
// If there are info about the signed document
if ($uploadedDocumentSigned != null)
{
$htmlstr .= "<tr>\n";
$htmlstr .= "<td colspan='2' style='text-align: center;'>";
$htmlstr .= '<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 15px; border: 1px solid; border-radius: 4px;">
<b>'.$uploadedDocumentSigned.'</b></td>
</div>';
$htmlstr .= "</td>";
$htmlstr .= "</tr>\n";
}
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
$htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n";
$htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>";
$htmlstr .="<tr></tr><td>&nbsp;</td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr>
+3 -1
View File
@@ -274,6 +274,8 @@ if ($result = $db->db_query($qry)) {
//add foto to document
$doc->addImage($foto_url, trim($row->person_id) . '.jpg', 'image/jpg');
$foto_url = 'Pictures/' . trim($row->person_id) . '.jpg';
}
elseif ($row->foto_sperre == 't')
{
@@ -290,7 +292,7 @@ if ($result = $db->db_query($qry)) {
'personenkennzeichen' => trim($row->matrikelnr),
'geschlecht' => $row->geschlecht,
'foto_gesperrt' => $row->foto_sperre, // f/t
'foto_url' => 'Pictures/' . trim($row->person_id) . '.jpg',
'foto_url' => $foto_url,
'studiengruppe' => $student_studiengruppe,
'verband' => trim($row->verband),
'gruppe' => trim($row->gruppe),
-146
View File
@@ -1,146 +0,0 @@
<?php
/* Copyright (C) 2010 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger < christian.paminger@technikum-wien.at >
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/studiensemester.class.php');
require_once('../../../include/studiengang.class.php');
$db = new basis_db();
$stsem = new studiensemester();
$stsem->getNextStudiensemester();
$stg = new studiengang();
$stg->getAll();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<link href="../../../include/js/tablesort/table.css" rel="stylesheet" type="text/css">
<script src="../../../include/js/tablesort/table.js" type="text/javascript"></script>
<title>Lehrveranstaltungen - &Uuml;bersicht</title>
</head>
<body>
<?php
echo '
<table class="tabcontent" id="inhalt">
<tr>
<td class="tdwidth10">&nbsp;</td>
<td>
<table class="tabcontent">
<tr>
<td class="ContentHeader">
<font class="ContentHeader">&nbsp;Lehrveranstaltungen - &Uuml;bersicht ('.$stsem->studiensemester_kurzbz.')</font>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
';
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.studiengang_kz,
tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.semester,
tbl_lehrveranstaltung.bezeichnung_english, tbl_lehrveranstaltung.incoming,
tbl_lehrveranstaltung.sprache,
(
SELECT
count(*)
FROM
campus.vw_student_lehrveranstaltung
JOIN public.tbl_student ON(uid=student_uid)
JOIN public.tbl_prestudentstatus USING(prestudent_id)
WHERE
lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND
lehreinheit_id in (SELECT lehreinheit_id FROM lehre.tbl_lehreinheit
WHERE lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
AND tbl_lehreinheit.studiensemester_kurzbz='$stsem->studiensemester_kurzbz')
AND tbl_prestudentstatus.status_kurzbz='Incoming'
AND tbl_prestudentstatus.status_kurzbz='$stsem->studiensemester_kurzbz'
GROUP BY uid
) as anzahlincoming
FROM
lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
tbl_lehrveranstaltung.incoming>0 AND
tbl_lehrveranstaltung.aktiv AND
tbl_lehrveranstaltung.lehre
AND tbl_lehrveranstaltung.studiengang_kz>0 AND tbl_lehrveranstaltung.studiengang_kz<10000
AND tbl_studiengang.aktiv
";
echo '<table width="100%" class="table-autosort:3 table-stripeclass:alternate table-autostripe">
<thead>
<tr class="liste">
<th class="table-sortable:numeric">ID</th>
<th class="table-sortable:default">Studiengang</th>
<th class="table-sortable:numeric">Semester</th>
<th class="table-sortable:numeric">Sprache</th>
<th class="table-sortable:default">Lehrveranstaltung</th>
<th class="table-sortable:default">Lehrveranstaltung Englisch</th>
<th>LV-Info</th>
<th class="table-sortable:numeric">Pl&auml;tze gesamt</th>
<th class="table-sortable:numeric">Freie Pl&auml;tze</th>
</tr>
</thead>
<tbody>';
if($result = $db->db_query($qry))
{
$i=0;
while($row = $db->db_fetch_object($result))
{
$freieplaetze = $row->incoming - $row->anzahlincoming;
if($freieplaetze<0)
$freieplaetze=0;
$i++;
echo '<tr>';
echo '<td>',$row->lehrveranstaltung_id,'</td>';
echo '<td>',$stg->kuerzel_arr[$row->studiengang_kz],'</td>';
echo '<td>',$row->semester,'</td>';
echo '<td>',$row->sprache,'</td>';
echo '<td>',$row->bezeichnung,'</td>';
echo '<td>',$row->bezeichnung_english,'</td>';
echo '<td>
<a href="#Deutsch" class="Item" onclick="javascript:window.open(\'ects/preview.php?lv='.$row->lehrveranstaltung_id.'&amp;language=de\',\'Lehrveranstaltungsinformation\',\'width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes\');return false;">Deutsch&nbsp;</a>
<a href="#Englisch" class="Item" onclick="javascript:window.open(\'ects/preview.php?lv='.$row->lehrveranstaltung_id.'&amp;language=en\',\'Lehrveranstaltungsinformation\',\'width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes\');return false;">Englisch</a>
</td>';
echo '<td>',$row->incoming,'</td>';
echo '<td>',$freieplaetze,'</td>';
echo '</tr>';
}
}
echo '</tbody></table>';
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
+6 -6
View File
@@ -47,11 +47,11 @@ echo '
<link rel="stylesheet" href="../../../skin/fhcomplete.css" type="text/css"/>
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" href="../../../skin/flexcrollstyles.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script language="Javascript">
@@ -107,7 +107,7 @@ echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST" onsubmit="return che
'.$p->t('lvplan/raumtyp').' <SELECT name="raumtyp" style="width: 100px;">
<OPTION value="">'.$p->t('global/alle').'</OPTION>';
$raumtyp_obj = new raumtyp();
$raumtyp_obj->getAll();
$raumtyp_obj->getAll(true);
foreach ($raumtyp_obj->result as $row)
{
+1 -1
View File
@@ -234,7 +234,7 @@ if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('
if (isset($_GET['ss']))
$stsem_zahlung = $konto->getLastStSemBuchungstypen($user, $buchungstypen, $_GET['ss']);
if ((($xsl=='Inskription') || ($xsl == 'Studienblatt')) && ($_GET["ss"] != $stsem_zahlung))
if ((($xsl == 'Inskription') || ($xsl == 'InskriptionEng') || ($xsl == 'Studienblatt')) && ($_GET["ss"] != $stsem_zahlung))
{
die('Der Studienbeitrag wurde noch nicht bezahlt');
}
+9 -5
View File
@@ -244,18 +244,22 @@ if (in_array($stsem, $stsem_arr))
<th>'.$p->t('global/name').'</th>
</tr>
</thead>
<tbody><tr>';
<tbody>';
if ($stsem_zahlung != FALSE && $stsem == $stsem_zahlung)
{
$path = "../pdfExport.php?xsl=Inskription&xml=student.rdf.php&ss=".$stsem."&uid=".$uid."&xsl_stg_kz=".$xsl_stg_kz;
echo '<td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$path.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.'</a></td>';
echo '<tr><td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$path.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.' ' . $p->t('global/deutsch'). '</a></td></tr>';
$patheng = "../pdfExport.php?xsl=InskriptionEng&xml=student.rdf.php&ss=".$stsem."&uid=".$uid."&xsl_stg_kz=".$xsl_stg_kz;
echo '<tr><td><img src="../../../skin/images/pdfpic.gif" /></td>';
echo '<td><a href="'.$patheng.'">'.$p->t('tools/inskriptionsbestaetigung').' '.$stsem.' ' . $p->t('global/englisch'). '</a></td></tr>';
}
else
{
echo '<td colspan="2">'.$p->t('tools/studienbeitragFuerSSNochNichtBezahlt',array($stsem)).'</td>';
echo '<tr><td colspan="2">'.$p->t('tools/studienbeitragFuerSSNochNichtBezahlt',array($stsem)).'</td></tr>';
}
echo '</tr></tbody></table>';
echo '</tbody></table>';
if (defined('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN') && CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN)
{
+43 -37
View File
@@ -321,6 +321,10 @@ $lv->loadLehrveranstaltungStudienplan($studienplan_id);
foreach($lv->lehrveranstaltungen as $row_lva)
$lv_arr[$row_lva->lehrveranstaltung_id]=$row_lva;
// Anrechnungen laden
$anrechnung = new anrechnung();
$anrechnung->getAnrechnungPrestudent($student->prestudent_id);
echo '<h1>'.$p->t('studienplan/studienplan').": $studienplan->bezeichnung ($studienplan_id) - $student->vorname $student->nachname ( $student->uid )</h1>";
echo '<table style="border: 1px solid black">
@@ -357,6 +361,7 @@ function drawTree($tree, $depth)
{
global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext;
global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr, $student;
global $anrechnung;
foreach($tree as $row_tree)
{
@@ -425,7 +430,7 @@ function drawTree($tree, $depth)
echo $icon." ".$termine." <a href=\"#\" class='Item' onClick=\"javascript:window.open('../lehre/ects/preview.php?lv=$row_tree->lehrveranstaltung_id&language=$sprache','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">".$row_tree->kurzbz.' - '.$row_tree->bezeichnung."</a>";
else
// Bezeichnung der Lehrveranstaltung
echo $icon." ".$termine." ".$row_tree->kurzbz.' - '.$row_tree->bezeichnung.'('.$row_tree->lehrveranstaltung_id.')';
echo $icon." ".$termine." ".$row_tree->kurzbz.' - '.$row_tree->bezeichnung.' ('.$row_tree->lehrveranstaltung_id.')';
echo $bende.'</td>';
// Semester
@@ -534,26 +539,26 @@ function drawTree($tree, $depth)
}
elseif(count($kompatibleLVs) > 0)
{
$i = 0;
while(!$found && $i < count($kompatibleLVs))
while(!$found && $i < count($kompatibleLVs))
{
foreach($kompatibleLVs as $komp)
{
$anrechnung = new anrechnung();
$anrechnung->getAnrechnungPrestudent($student->prestudent_id, $row_tree->lehrveranstaltung_id, $komp);
if(count($anrechnung->result) == 1)
if(count($anrechnung->result))
{
$lv = $anrechnung->result[0]->lehrveranstaltung_id_kompatibel;
if(isset($noten_arr[$lv][$stsem]))
{
$found = true;
if($note_pruef_arr[$noten_arr[$lv][$stsem]]->positiv)
$tdinhalt .= '<span class="ok">'.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.'</span>';
else
$tdinhalt .= '<span class="error">'.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.'</span>';
}
foreach($anrechnung->result as $row)
{
$lv = $row->lehrveranstaltung_id_kompatibel;
if(isset($noten_arr[$lv][$stsem]) && $lv == $komp && $row_tree->lehrveranstaltung_id == $row->lehrveranstaltung_id)
{
$found = true;
if($note_pruef_arr[$noten_arr[$lv][$stsem]]->positiv)
$tdinhalt .= '<span class="ok">'.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.'</span>';
else
$tdinhalt .= '<span class="error">'.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.'</span>';
}
}
}
$i++;
}
@@ -669,38 +674,39 @@ function drawTree($tree, $depth)
function checkKompatibleLvs($kompatibleLVs, $student, $row_tree, $noten_arr, $note_pruef_arr, $p, $uid, $negativeNote= null)
{
global $anrechnung;
$positiv = false;
$found = false;
$i = 0;
while(!$found && $i < count($kompatibleLVs))
{
foreach($kompatibleLVs as $komp)
{
$anrechnung = new anrechnung();
$anrechnung->getAnrechnungPrestudent($student->prestudent_id, $row_tree->lehrveranstaltung_id, $komp);
if(count($anrechnung->result) == 1)
if(count($anrechnung->result))
{
$lv = $anrechnung->result[0]->lehrveranstaltung_id_kompatibel;
if(isset($noten_arr[$lv]))
foreach($anrechnung->result as $row)
{
$positiv=false;
foreach($noten_arr[$lv] as $note)
$lv = $row->lehrveranstaltung_id_kompatibel;
if(isset($noten_arr[$lv]) && $lv == $komp && $row_tree->lehrveranstaltung_id == $row->lehrveranstaltung_id)
{
if($note_pruef_arr[$note]->positiv)
$positiv=true;
}
$positiv=false;
foreach($noten_arr[$lv] as $note)
{
if($note_pruef_arr[$note]->positiv)
$positiv=true;
}
$found = true;
}
else
{
/* wenn zu mehreren kompatiblen lvs eine Anrechnung existiert
* darf found nicht auf false gesetzt werden wenn es zuvor bereits auf true gesetzt wurde
*/
if(!$found)
$found = false;
$found = true;
}
else
{
/* wenn zu mehreren kompatiblen lvs eine Anrechnung existiert
* darf found nicht auf false gesetzt werden wenn es zuvor bereits auf true gesetzt wurde
*/
if(!$found)
$found = false;
}
}
}
$i++;
+2 -1
View File
@@ -1433,7 +1433,8 @@ if ($projekt->getProjekteMitarbeiter($user, true))
$sem_akt = $stsem->getakt();
$lehre = new zeitaufzeichnung();
$l_arr = $lehre->getLehreForUser($user, $sem_akt);
if ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0)
$displayLehresaldo = false;
if ($displayLehresaldo && ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0))
{
if ($lehre_inkludiert == -1)
{
+4 -4
View File
@@ -866,12 +866,12 @@ if (isset($_GET['resend']))
echo '<br><br><div class="alert alert-info" style="width: 800px">
<span class="glyphicon glyphicon-info-sign"></span>
Sie können ihre vorläufigen Terminzusagen in ihr Kalendersystem einbinden.<br>
Importieren Sie dazu die .ics-Datei aus folgendem Link in ihren Kalender:<br>
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.'
Importieren Sie dazu die .ics-Datei des folgenden Links in ihren Kalender:<br>
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'
</a>
<br><br>
Die Datei enthält ihre Terminzusagen aus <u>allen laufenden Umfragen</u> in anonymisierter Form.
Die Datei enthält ihre Terminzusagen aus <b>allen laufenden Umfragen</b> .
</div>';
}
+30 -4
View File
@@ -28,13 +28,27 @@ require_once('../../include/functions.inc.php');
require_once('../../include/coodle.class.php');
require_once('../../include/ical.class.php');
$uid = mb_substr($_SERVER['PATH_INFO'],1);
$params = mb_substr($_SERVER['PATH_INFO'],1);
$paramsArray = explode('/',$params);
$private = false;
if ($paramsArray[0] == 'cipher_encryption')
{
$uid = decryptData($paramsArray[1],LVPLAN_CYPHER_KEY);
$private = true;
}
else
{
$uid = $paramsArray[0];
}
$bn = new benutzer();
if(!$bn->load($uid))
die('User invalid');
header("Content-Type: text/calendar; charset=UTF-8");
header("Content-disposition: filename=Coodle Terminzusagen.ics");
echo "BEGIN:VCALENDAR\n";
echo "VERSION:2.0\n";
@@ -80,7 +94,7 @@ foreach($umfragen->result as $umfrage)
if($ressource_id = $ressource->RessourceExists($umfrage->coodle_id, $uid))
{
// Terminvorschlaege laden die angekreuzt wurden
$termine = new coodle();
$termine = new coodle($umfrage->coodle_id);
$termine->getRessourceTermin($umfrage->coodle_id, $ressource_id);
foreach($termine->result as $termin)
{
@@ -91,10 +105,22 @@ foreach($umfragen->result as $umfrage)
$date->add($interval);
$uhrzeit_ende = $date->format('H:i:s');
$dtende = $date->format('Ymd\THis');
$ersteller = new benutzer($termine->ersteller_uid);
if ($private == true)
{
$summary = 'Coodle Terminoption '.strip_tags($termine->titel);
$description = 'Erstellt von '.$ersteller->vorname.' '.$ersteller->nachname;
}
else
{
$summary = 'Coodle Terminoption';
$description = '';
}
echo "\nBEGIN:VEVENT";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende."";
echo "\nSUMMARY:Coodle Terminoption";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende;
echo "\nSUMMARY:".$summary;
echo "\nDESCRIPTION:".$description;
echo "\nDTSTART;TZID=Europe/Vienna:$dtstart";
echo "\nDTEND;TZID=Europe/Vienna:$dtende";
echo "\nTRANSP:OPAQUE";

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