diff --git a/application/config/navigation.php b/application/config/navigation.php
index 928f5bae3..56d142d08 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -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')
+ ),
);
diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php
index 943d7aa46..b667e835d 100644
--- a/application/controllers/jobs/PlausiIssueProducer.php
+++ b/application/controllers/jobs/PlausiIssueProducer.php
@@ -1,16 +1,29 @@
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));
}
}
diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php
index 6d959a024..44c2ff5d3 100644
--- a/application/controllers/system/issues/Issues.php
+++ b/application/controllers/system/issues/Issues.php
@@ -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;
+ }
}
diff --git a/application/controllers/system/issues/IssuesKonfiguration.php b/application/controllers/system/issues/IssuesKonfiguration.php
new file mode 100644
index 000000000..a19a2a93b
--- /dev/null
+++ b/application/controllers/system/issues/IssuesKonfiguration.php
@@ -0,0 +1,305 @@
+ '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');
+ }
+}
diff --git a/application/controllers/system/issues/IssuesZustaendigkeiten.php b/application/controllers/system/issues/IssuesZustaendigkeiten.php
index fd3e6192a..d7bf9836e 100644
--- a/application/controllers/system/issues/IssuesZustaendigkeiten.php
+++ b/application/controllers/system/issues/IssuesZustaendigkeiten.php
@@ -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();
diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php
index 2dd166794..53ff8afe8 100644
--- a/application/controllers/system/issues/Plausichecks.php
+++ b/application/controllers/system/issues/Plausichecks.php
@@ -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
);
}
}
diff --git a/application/core/IIssueExistsChecker.php b/application/core/IIssueExistsChecker.php
deleted file mode 100644
index 7f5a6b6e5..000000000
--- a/application/core/IIssueExistsChecker.php
+++ /dev/null
@@ -1,21 +0,0 @@
-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))
diff --git a/application/core/PlausiIssueProducer_Controller.php b/application/core/PlausiIssueProducer_Controller.php
new file mode 100644
index 000000000..0dce7a487
--- /dev/null
+++ b/application/core/PlausiIssueProducer_Controller.php
@@ -0,0 +1,66 @@
+_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");
+ }
+}
diff --git a/application/libraries/SignatureLib.php b/application/libraries/SignatureLib.php
index 132545219..c44ffc5f6 100644
--- a/application/libraries/SignatureLib.php
+++ b/application/libraries/SignatureLib.php
@@ -35,6 +35,17 @@ class SignatureLib
{
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
@@ -72,4 +83,3 @@ class SignatureLib
return null;
}
}
-
diff --git a/application/libraries/issues/PlausicheckDefinitionLib.php b/application/libraries/issues/PlausicheckDefinitionLib.php
new file mode 100644
index 000000000..cef28a736
--- /dev/null
+++ b/application/libraries/issues/PlausicheckDefinitionLib.php
@@ -0,0 +1,55 @@
+ 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);
+ }
+}
diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php
deleted file mode 100644
index 19442de3c..000000000
--- a/application/libraries/issues/PlausicheckLib.php
+++ /dev/null
@@ -1,1362 +0,0 @@
-_ci =& get_instance(); // get ci instance
-
- // load models
- $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
- $this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
- $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
-
- // get database for queries
- $this->_db = new DB_Model();
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Studiengang checks
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND studiengang.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- $qry .= "
- ORDER BY student_uid";
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getStgPrestudentUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null, $studienordnung_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Studentstatus checks
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- $qry .= ") studenten
- WHERE anzahl_abschlusspruefungen != 1";
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null)
- {
- $results = array();
-
- $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id);
-
- if (isError($pruefungenRes)) return $pruefungenRes;
-
- if (hasData($pruefungenRes))
- {
- $pruefungen = getData($pruefungenRes);
-
- foreach ($pruefungen as $pruefung)
- {
- if (isEmptyString($pruefung->datum)) $results[] = $pruefung;
- }
- }
-
- 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
- * @return success with prestudents or error
- */
- public function getDatumSponsionFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null)
- {
- $results = array();
-
- $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id);
-
- if (isError($pruefungenRes)) return $pruefungenRes;
-
- if (hasData($pruefungenRes))
- {
- $pruefungen = getData($pruefungenRes);
-
- foreach ($pruefungen as $pruefung)
- {
- if (isEmptyString($pruefung->sponsion)) $results[] = $pruefung;
- }
- }
-
- 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
- * @return success with prestudents or error
- */
- public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAbschlussstatusFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Person checks
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getGbDatumWeitZurueck($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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)
- {
- $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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // I/O checks
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz = null, $person_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return success with prestudents or error
- */
- public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * 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
- * @return object success or error
- */
- public function getIncomingOrGsFoerderrelevant($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = 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;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Private methods
-
- /**
- * Get final exams in a semester which are invalid (e.g. missing data)
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiengang
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param abschlusspruefung_id int if check is to be executed for certain Abschlussprüfung
- */
- private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = 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 OR 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;
- }
-
- 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');
- }
- }
-}
diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php
index dde9b5396..c32f1f863 100644
--- a/application/libraries/issues/PlausicheckProducerLib.php
+++ b/application/libraries/issues/PlausicheckProducerLib.php
@@ -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);
}
}
diff --git a/application/libraries/issues/plausichecks/AbbrecherAktiv.php b/application/libraries/issues/plausichecks/AbbrecherAktiv.php
index cc6e2996a..9eae389b5 100644
--- a/application/libraries/issues/plausichecks/AbbrecherAktiv.php
+++ b/application/libraries/issues/plausichecks/AbbrecherAktiv.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
index 66615220a..3690e1331 100644
--- a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
+++ b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php
index d55506d68..1223a2720 100644
--- a/application/libraries/issues/plausichecks/AktSemesterNull.php
+++ b/application/libraries/issues/plausichecks/AktSemesterNull.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
index 2dfd9f866..94fe5cc8d 100644
--- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
+++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
index baa35bc57..28684388f 100644
--- a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
+++ b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
index ca967a97f..13d800a3f 100644
--- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
+++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
@@ -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,61 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
index 35d954236..4a9655d13 100644
--- a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
+++ b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
index 7a2555b69..985bc1f08 100644
--- a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
+++ b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
@@ -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,110 @@ 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);
+ }
+
+ /**
+ * 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
+ //~ ) {
+ //~ $results = array();
+
+ //~ $pruefungenRes = $this->_getInvalidAbschlusspruefungen(
+ //~ $studiensemester_kurzbz,
+ //~ $studiengang_kz,
+ //~ $abschlusspruefung_id,
+ //~ $exkludierte_studiengang_kz
+ //~ );
+
+ //~ if (isError($pruefungenRes)) return $pruefungenRes;
+
+ //~ if (hasData($pruefungenRes))
+ //~ {
+ //~ $pruefungen = getData($pruefungenRes);
+
+ //~ foreach ($pruefungen as $pruefung)
+ //~ {
+ //~ if (isEmptyString($pruefung->datum)) $results[] = $pruefung;
+ //~ }
+ //~ }
+
+ //~ return success($results);
+ //~ }
}
diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
index 102a89656..a1f32ca2f 100644
--- a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
+++ b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
@@ -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,110 @@ 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);
+ }
+
+ /**
+ * 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
+ //~ ) {
+ //~ $results = array();
+
+ //~ $pruefungenRes = $this->_getInvalidAbschlusspruefungen(
+ //~ $studiensemester_kurzbz,
+ //~ $studiengang_kz,
+ //~ $abschlusspruefung_id,
+ //~ $exkludierte_studiengang_kz
+ //~ );
+
+ //~ if (isError($pruefungenRes)) return $pruefungenRes;
+
+ //~ if (hasData($pruefungenRes))
+ //~ {
+ //~ $pruefungen = getData($pruefungenRes);
+
+ //~ foreach ($pruefungen as $pruefung)
+ //~ {
+ //~ if (isEmptyString($pruefung->sponsion)) $results[] = $pruefung;
+ //~ }
+ //~ }
+
+ //~ return success($results);
+ //~ }
}
diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
index ab8566e47..381bea7df 100644
--- a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
+++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
index 7fbe2d828..1021fe85a 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
index eac50a88a..b3551904e 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
index e2fc4a781..191b2a98e 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
@@ -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,69 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
index 7a7cf0d6f..70699b624 100644
--- a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
+++ b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
@@ -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,65 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
index 76fd477e3..dead2b1e7 100644
--- a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
+++ b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
index 51726d969..d7ba7316c 100644
--- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
+++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
@@ -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,60 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
index 9681554e5..e08280f83 100644
--- a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
+++ b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
index 0e12ccac8..4d789f71a 100644
--- a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
+++ b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
index 672dfa585..871b3b3d4 100644
--- a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
+++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
@@ -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');
+ }
+ }
}
diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
index c61531e46..c04cd664c 100644
--- a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
+++ b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
index b7ef64c41..316e81072 100644
--- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
+++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php
index bfa72b5e0..086a44cc4 100644
--- a/application/libraries/issues/plausichecks/PlausiChecker.php
+++ b/application/libraries/issues/plausichecks/PlausiChecker.php
@@ -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();
}
/**
diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
index 369085089..8e3926a12 100644
--- a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
+++ b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
@@ -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,57 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
index 4eb25ed11..700557c65 100644
--- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
+++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
@@ -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,50 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
index 7175725fd..f8e1d8691 100644
--- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
+++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
@@ -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,64 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
index 12a7516ef..87bb51d7e 100644
--- a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
+++ b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
@@ -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);
+ }
}
diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php
index 6b8fe49aa..2f2de1e9c 100644
--- a/application/libraries/issues/plausichecks/StudienplanUngueltig.php
+++ b/application/libraries/issues/plausichecks/StudienplanUngueltig.php
@@ -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,73 @@ 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);
+ }
+
+
}
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0007.php b/application/libraries/issues/resolvers/CORE_INOUT_0007.php
index 2d9c7a3f4..31ca79ffb 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0007.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0007.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0008.php b/application/libraries/issues/resolvers/CORE_INOUT_0008.php
index afa43893a..4fa090c6a 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0008.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0008.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0009.php b/application/libraries/issues/resolvers/CORE_INOUT_0009.php
index b56344042..c739d71c3 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0009.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0009.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0001.php b/application/libraries/issues/resolvers/CORE_PERSON_0001.php
index bd94fea59..d0ac0d3ed 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0001.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0001.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0002.php b/application/libraries/issues/resolvers/CORE_PERSON_0002.php
index d1bb2fe94..608dcf0ce 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0002.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0002.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0003.php b/application/libraries/issues/resolvers/CORE_PERSON_0003.php
index 08fea6c05..23a81b660 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0003.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0003.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0004.php b/application/libraries/issues/resolvers/CORE_PERSON_0004.php
index bfe243fd1..ae3a855ec 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0004.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0004.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0001.php b/application/libraries/issues/resolvers/CORE_STG_0001.php
index 97cef6056..09c34be74 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0001.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0001.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0002.php b/application/libraries/issues/resolvers/CORE_STG_0002.php
index fe414de38..999958042 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0002.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0002.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0003.php b/application/libraries/issues/resolvers/CORE_STG_0003.php
index 33cb0846b..22d6399be 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0003.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0003.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0004.php b/application/libraries/issues/resolvers/CORE_STG_0004.php
index 02d45bbd3..2eedfc7fe 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0004.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0004.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
index 78c49810b..c74cd38fb 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
index 23943397a..36827684c 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
index 6ac243b4f..f3b150d8d 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
index d76215b6a..cbce2b01e 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
index 7f7ca4723..f5e265194 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
index ba1e5b715..94658ec9c 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
index 1dd8fdcb2..3a2575e53 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
index 83357d9bf..53bfd72a6 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
index b1b5e9876..816b7e933 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
index 1e3a6849b..b31fb872a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
index 233240305..9dff0181e 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
index 38832edc0..7fe5dbde4 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
index 78ad40a8e..86e8b75b1 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
index 8d96b7c65..4b542cf0a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
@@ -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;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
index aafee1124..37e42ec0a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
@@ -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']
diff --git a/application/models/system/Fehlerkonfiguration_model.php b/application/models/system/Fehlerkonfiguration_model.php
new file mode 100644
index 000000000..bf8de4cde
--- /dev/null
+++ b/application/models/system/Fehlerkonfiguration_model.php
@@ -0,0 +1,48 @@
+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);
+ }
+}
diff --git a/application/models/system/Fehlerkonfigurationstyp_model.php b/application/models/system/Fehlerkonfigurationstyp_model.php
new file mode 100644
index 000000000..dc1c7957f
--- /dev/null
+++ b/application/models/system/Fehlerkonfigurationstyp_model.php
@@ -0,0 +1,47 @@
+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);
+ }
+}
diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php
index 50b7c1483..c60b03a74 100644
--- a/application/views/system/issues/issuesData.php
+++ b/application/views/system/issues/issuesData.php
@@ -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 = '';
diff --git a/application/views/system/issues/issuesKonfiguration.php b/application/views/system/issues/issuesKonfiguration.php
new file mode 100644
index 000000000..dbd62a26a
--- /dev/null
+++ b/application/views/system/issues/issuesKonfiguration.php
@@ -0,0 +1,200 @@
+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')
+ )
+);
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ load->view('system/issues/issuesKonfigurationData.php'); ?>
+
+
+
+
+
+
+
+
+ |
+ p->t('fehlermonitoring', 'fehlercode')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlerkurzbz')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlertyp')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlertext')) ?>
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationstyp')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationsbeschreibung')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationsdatentyp')) ?>
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/system/issues/issuesKonfigurationData.php b/application/views/system/issues/issuesKonfigurationData.php
new file mode 100644
index 000000000..a83dc73ce
--- /dev/null
+++ b/application/views/system/issues/issuesKonfigurationData.php
@@ -0,0 +1,56 @@
+ $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'} =
+ "";
+
+ if ($datasetRaw->{'konfigurationsbeschreibung'} == null)
+ {
+ $datasetRaw->{'konfigurationsbeschreibung'} = '-';
+ }
+
+ if ($datasetRaw->{'fehlertext'} == null)
+ {
+ $datasetRaw->{'fehlertext'} = '-';
+ }
+
+ return $datasetRaw;
+ }
+);
+
+echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php
index 4016e64cd..45c272ff4 100644
--- a/application/views/system/issues/plausichecks.php
+++ b/application/views/system/issues/plausichecks.php
@@ -71,9 +71,9 @@ $this->load->view(
diff --git a/application/views/templates/FHC-Footer.php b/application/views/templates/FHC-Footer.php
index 0c3782fea..c461dd8b0 100644
--- a/application/views/templates/FHC-Footer.php
+++ b/application/views/templates/FHC-Footer.php
@@ -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)
diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php
index 142af5527..a8705e7f9 100644
--- a/cis/private/lehre/abgabe_lektor_details.php
+++ b/cis/private/lehre/abgabe_lektor_details.php
@@ -710,6 +710,10 @@ while ($row=@$db->db_fetch_object($result))
$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';
diff --git a/cis/private/lehre/lvincoming.php b/cis/private/lehre/lvincoming.php
deleted file mode 100644
index f81292aab..000000000
--- a/cis/private/lehre/lvincoming.php
+++ /dev/null
@@ -1,146 +0,0 @@
-
- * 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();
-?>
-
-
-
-
-
-
-
- Lehrveranstaltungen - Übersicht
-
-
-
-
- | |
-
-
-
-
-
-
- | |
-
-
-
- ';
-
- $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 '
-
-
- | ID |
- Studiengang |
- Semester |
- Sprache |
- Lehrveranstaltung |
- Lehrveranstaltung Englisch |
- LV-Info |
- Plätze gesamt |
- Freie Plätze |
-
-
- ';
- 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 '';
- echo '| ',$row->lehrveranstaltung_id,' | ';
- echo '',$stg->kuerzel_arr[$row->studiengang_kz],' | ';
- echo '',$row->semester,' | ';
- echo '',$row->sprache,' | ';
- echo '',$row->bezeichnung,' | ';
- echo '',$row->bezeichnung_english,' | ';
- echo '
- Deutsch
- Englisch
- | ';
- echo '',$row->incoming,' | ';
- echo '',$freieplaetze,' | ';
- echo ' ';
- }
- }
- echo ' ';
-?>
- |
-
-
- |
-
-
-
-
-
diff --git a/cis/private/lvplan/raumsuche.php b/cis/private/lvplan/raumsuche.php
index 0cb9677d4..7be028be8 100644
--- a/cis/private/lvplan/raumsuche.php
+++ b/cis/private/lvplan/raumsuche.php
@@ -47,11 +47,11 @@ echo '
-
-
-
-
-
+
+
+
+
+
';
diff --git a/include/functions.inc.php b/include/functions.inc.php
index 7b3560dde..e0787a0d4 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -1196,4 +1196,19 @@ function anzahlTage($date1, $date2)
$diff = $date2_ts - $date1_ts;
return round($diff / 86400);
}
+
+/**
+ * Gibt zurück, ob ein String ausschließlich erlaubte Zeichen enthält
+ * erlaubt: Buchstaben a-z, A-Z, 0-9, -, _
+ * @param string $stringToCheck Eingabestring
+ * @return boolena true or false
+ */
+function hasOnlyAllowedChars($stringToCheck)
+{
+ if (!preg_match("#^[a-zA-Z0-9_-]+$#", $stringToCheck))
+ return false;
+ else
+ return true;
+}
+
?>
diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php
index 280e626a8..a0f52d799 100644
--- a/include/lehrstunde.class.php
+++ b/include/lehrstunde.class.php
@@ -41,6 +41,7 @@ class lehrstunde extends basis_db
public $unr; // @brief Unterrichtsnummer
public $lektor_uid; // @brief UID des Lektors
public $lektor_kurzbz; // @brief Kurzbezeichnung des Lektors
+ public $mitarbeiter_kurzbz; // @brief Kurzbezeichnung
public $datum; // @brief Datum
public $stunde; // @brief Unterrichts-Stunde des Tages
public $ort_kurzbz; // @brief Ort in dem der Unterricht stattfindet
@@ -116,6 +117,7 @@ class lehrstunde extends basis_db
$this->unr=$row->unr;
$this->lektor_uid=$row->uid;
$this->lektor_kurzbz=$row->lektor;
+ $this->mitarbeiter_kurzbz=$row->mitarbeiter_kurzbz;
$this->datum=$row->datum;
$this->stunde=$row->stunde;
$this->ort_kurzbz=$row->ort_kurzbz;
@@ -590,6 +592,7 @@ class lehrstunde extends basis_db
$stunde->unr=$row->unr;
$stunde->lektor_uid=$row->uid;
$stunde->lektor_kurzbz=$row->lektor;
+ $stunde->mitarbeiter_kurzbz=$row->mitarbeiter_kurzbz;
$stunde->datum=$row->datum;
$stunde->stunde=$row->stunde;
$stunde->ort_kurzbz=$row->ort_kurzbz;
@@ -663,6 +666,7 @@ class lehrstunde extends basis_db
$stunde->updateamum=$row->insertamum;
$stunde->updatevon=$row->insertvon;
$stunde->farbe='';
+ $stunde->mitarbeiter_kurzbz = $row->mitarbeiter_kurzbz;
$this->lehrstunden[]=$stunde;
}
}
diff --git a/include/prestudent.class.php b/include/prestudent.class.php
index 3bd7cd733..13f3e5e00 100644
--- a/include/prestudent.class.php
+++ b/include/prestudent.class.php
@@ -834,6 +834,42 @@ class prestudent extends person
case "statusbestaetigt":
$qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null";
break;
+ case "statusbestaetigtrtnichtangemeldet":
+ $qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ public.tbl_rt_person
+ JOIN public.tbl_reihungstest ON (rt_id = reihungstest_id)
+ WHERE
+ person_id=a.person_id
+ AND studienplan_id IN (
+ SELECT studienplan_id FROM lehre.tbl_studienplan
+ JOIN lehre.tbl_studienordnung USING(studienordnung_id)
+ WHERE tbl_studienordnung.studiengang_kz=a.studiengang_kz
+ )
+ AND tbl_reihungstest.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
+ )";
+ break;
+ case "statusbestaetigtrtangemeldet":
+ $qry.=" AND a.rolle='Interessent' AND bestaetigtam is not null
+ AND EXISTS (
+ SELECT
+ 1
+ FROM
+ public.tbl_rt_person
+ JOIN public.tbl_reihungstest ON (rt_id = reihungstest_id)
+ WHERE
+ person_id=a.person_id
+ AND studienplan_id IN (
+ SELECT studienplan_id FROM lehre.tbl_studienplan
+ JOIN lehre.tbl_studienordnung USING(studienordnung_id)
+ WHERE tbl_studienordnung.studiengang_kz=a.studiengang_kz
+ )
+ AND tbl_reihungstest.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
+ )";
+ break;
case "zgv":
$stg_obj = new studiengang();
$stg_obj->load($studiengang_kz);
diff --git a/include/raumtyp.class.php b/include/raumtyp.class.php
index 7cbe7a20a..7f4579d26 100644
--- a/include/raumtyp.class.php
+++ b/include/raumtyp.class.php
@@ -33,6 +33,7 @@ class raumtyp extends basis_db
//Tabellenspalten
public $beschreibung; // string
public $raumtyp_kurzbz; // string
+ public $aktiv; //boolean
/**
@@ -42,7 +43,7 @@ class raumtyp extends basis_db
public function __construct($raumtyp_kurzbz=null)
{
parent::__construct();
-
+
if($raumtyp_kurzbz != null)
$this->load($raumtyp_kurzbz);
}
@@ -51,10 +52,14 @@ class raumtyp extends basis_db
* Laedt alle verfuegbaren Raumtypen
* @return true wenn ok, false im Fehlerfall
*/
- public function getAll()
+ public function getAll($aktiv = null)
{
- $qry = 'SELECT * FROM public.tbl_raumtyp ORDER BY raumtyp_kurzbz;';
+ $qry = 'SELECT * FROM public.tbl_raumtyp';
+ if (!is_null($aktiv))
+ $qry .= ' WHERE aktiv = '.$this->db_add_param($aktiv, FHC_BOOLEAN);
+
+ $qry .= ' ORDER BY raumtyp_kurzbz';
if(!$this->db_query($qry))
{
$this->errormsg = 'Fehler beim Laden der Datensaetze';
@@ -67,7 +72,7 @@ class raumtyp extends basis_db
$raumtyp_obj->beschreibung = $row->beschreibung;
$raumtyp_obj->raumtyp_kurzbz = $row->raumtyp_kurzbz;
-
+ $raumtyp_obj->aktiv = $this->db_parse_bool($row->aktiv);
$this->result[] = $raumtyp_obj;
}
@@ -99,7 +104,7 @@ class raumtyp extends basis_db
{
$this->beschreibung = $row->beschreibung;
$this->raumtyp_kurzbz = $row->kurzbz;
-
+ $this->aktiv = $this->db_parse_bool($row->aktiv);
}
else
{
@@ -135,7 +140,7 @@ class raumtyp extends basis_db
$this->errormsg = '';
return true;
}
-
+
/**
* Speichert den aktuellen Datensatz
* @return true wenn ok, false im Fehlerfall
@@ -154,6 +159,7 @@ class raumtyp extends basis_db
$this->errormsg = 'Keine gültige ID';
return false;
}
+
//Neuen Datensatz anlegen
$qry = 'INSERT INTO public.tbl_raumtyp (beschreibung, raumtyp_kurzbz) VALUES ('.
$this->db_add_param($this->beschreibung).', '.
diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php
index 4b3005c07..16abdc48a 100644
--- a/include/tw/cis_menu_lv.inc.php
+++ b/include/tw/cis_menu_lv.inc.php
@@ -68,29 +68,8 @@ function checkZeilenUmbruch()
if(!defined('CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN)
{
$text='';
-
- $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND genehmigt=true AND sprache='".ATTR_SPRACHE_DE."' AND aktiv=true";
$need_br=false;
- if($result=$db->db_query($qry))
- {
- if($db->db_num_rows($result)>0)
- {
- $text.= "".$p->t('global/deutsch')." ";
- $need_br=true;
- }
- }
- $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND genehmigt=true AND sprache='".ATTR_SPRACHE_EN."' AND aktiv=true";
- if($result=$db->db_query($qry))
- {
- if($db->db_num_rows($result)>0)
- {
- $row1=$db->db_fetch_object($result);
- $text.= "".$p->t('global/englisch')."";
- $need_br=true;
- }
- }
-
// Bearbeiten Button anzeigen wenn Lektor der LV und bearbeiten fuer Lektoren aktiviert ist
// Oder Berechtigung zum Bearbeiten eingetragen ist
if((!defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && $lektor_der_lv)
diff --git a/include/tw/vilesci_menu_main.inc.php b/include/tw/vilesci_menu_main.inc.php
index 204feeec3..834183c2c 100644
--- a/include/tw/vilesci_menu_main.inc.php
+++ b/include/tw/vilesci_menu_main.inc.php
@@ -53,7 +53,7 @@ $menu=array
(
'name'=>'Mitarbeiter','permissions'=>array('admin','lv-plan','support'),
'Übersicht'=>array('name'=>'Zeitwünsche', 'link'=>'personen/lektor_uebersicht.php', 'target'=>'main','permissions'=>array('mitarbeiter')),
- 'Zeitsperren'=>array('name'=>'Zeitsperren', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre')),
+ 'Zeitsperren'=>array('name'=>'Zeitsperren', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre:begrenzt')),
),
'Vorrueckung'=> array
@@ -119,7 +119,7 @@ $menu=array
(
'name'=>'Mitarbeiter','permissions'=>array('admin','mitarbeiter','support'),
'Übersicht'=>array('name'=>'Übersicht', 'link'=>'personen/lektor_uebersicht.php', 'target'=>'main'),
- 'Zeitsperren'=>array('name'=>'Zeitsperren/Urlaub', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre')),
+ 'Zeitsperren'=>array('name'=>'Zeitsperren/Urlaub', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre:begrenzt')),
),
'Betriebsmittel'=>array('name'=>'Betriebsmittel', 'link'=>'stammdaten/betriebsmittel_frameset.php', 'target'=>'main','permissions'=>array('basis/betriebsmittel')),
'AnwesenheitslistenBarcode'=>array('name'=>'Anwesenheitslisten mit Barcodes', 'link'=>'personen/anwesenheitslisten_barcode.php', 'target'=>'main','permissions'=>array('basis/person')),
diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php
index f6cc94c3c..34fbadc63 100644
--- a/include/wochenplan.class.php
+++ b/include/wochenplan.class.php
@@ -445,6 +445,7 @@ class wochenplan extends basis_db
$this->std_plan[$tag][$stunde][$idx]->stundenplan_id=$this->wochenplan->lehrstunden[$i]->stundenplan_id;
$this->std_plan[$tag][$stunde][$idx]->lektor_uid=$this->wochenplan->lehrstunden[$i]->lektor_uid;
$this->std_plan[$tag][$stunde][$idx]->lektor=$this->wochenplan->lehrstunden[$i]->lektor_kurzbz;
+ $this->std_plan[$tag][$stunde][$idx]->mitarbeiter_kurzbz=$this->wochenplan->lehrstunden[$i]->mitarbeiter_kurzbz;
$this->std_plan[$tag][$stunde][$idx]->ort=$this->wochenplan->lehrstunden[$i]->ort_kurzbz;
$this->std_plan[$tag][$stunde][$idx]->stg=$this->wochenplan->lehrstunden[$i]->studiengang;
$this->std_plan[$tag][$stunde][$idx]->stg_kz=$this->wochenplan->lehrstunden[$i]->studiengang_kz;
@@ -736,7 +737,10 @@ class wochenplan extends basis_db
{
$unr[]=$lehrstunde->unr;
// Lektoren
- $lektor[]=$lehrstunde->lektor;
+ if ($lehrstunde->mitarbeiter_kurzbz === null)
+ $lektor[] = $lehrstunde->lektor;
+ else
+ $lektor[]=$lehrstunde->mitarbeiter_kurzbz;
// Lehrverband
$typ='';
if ($lehrstunde->reservierung)
@@ -1450,7 +1454,10 @@ class wochenplan extends basis_db
if ($lehrstunde->unr==$unr)
{
// Lektoren
- $lektor[]=$lehrstunde->lektor;
+ if ($lehrstunde->mitarbeiter_kurzbz === null)
+ $lektor[] = $lehrstunde->lektor;
+ else
+ $lektor[]=$lehrstunde->mitarbeiter_kurzbz;
// Lehrverband
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
if ($lehrstunde->ver!=null && $lehrstunde->ver!='0' && $lehrstunde->ver!='')
@@ -2364,7 +2371,10 @@ class wochenplan extends basis_db
$unr[]=$lehrstunde->unr;
// Lektoren
- $lektor[]=$lehrstunde->lektor;
+ if ($lehrstunde->mitarbeiter_kurzbz === null)
+ $lektor[] = $lehrstunde->lektor;
+ else
+ $lektor[]=$lehrstunde->mitarbeiter_kurzbz;
$lektor_uids[]=$lehrstunde->lektor_uid;
// Lehrverband
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
@@ -2516,6 +2526,7 @@ class wochenplan extends basis_db
if (!mb_strstr($this->std_plan[$i][$j][$idx1]->lektor,$this->std_plan[$i][$j][$idx]->lektor))
{
$this->std_plan[$i][$j][$idx]->lektor.=' / '.$this->std_plan[$i][$j][$idx1]->lektor;
+ $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz.=' / '.$this->std_plan[$i][$j][$idx1]->mitarbeiter_kurzbz;
}
//Ort
@@ -2549,7 +2560,7 @@ class wochenplan extends basis_db
//"Betreff","Beginnt am","Beginnt um","Endet am","Endet um","Ganztaegiges Ereignis","Erinnerung Ein/Aus","Erinnerung am","Erinnerung um","Besprechungsplanung","Erforderliche Teilnehmer","Optionale Teilnehmer","Besprechungsressourcen","Abrechnungsinformationen","Beschreibung",
//"Kategorien","Ort","Prioritaet","Privat","Reisekilometer","Vertraulichkeit","Zeitspanne zeigen als"
echo $this->crlf.'"'.$this->std_plan[$i][$j][$idx]->lehrfach.(isset($this->std_plan[$i][$j][$idx]->lehrform) && $this->std_plan[$i][$j][$idx]->lehrform!=''?'-'.$this->std_plan[$i][$j][$idx]->lehrform:'').($lvb!=''?' - '.$lvb:'').'","'.$start_date.'","'.$start_time.'","'.$end_date.'","'.$end_time.'","Aus","Aus",,,,,,,,"Stundenplan';
- echo $this->crlf.$this->std_plan[$i][$j][$idx]->lehrfach.$this->crlf.$this->std_plan[$i][$j][$idx]->lektor.$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?$this->crlf.$this->std_plan[$i][$j][$idx]->anmerkung:'').'","StundenplanFH","'.$this->std_plan[$i][$j][$idx]->ort.'","Normal","Aus",,"Normal","2"';
+ echo $this->crlf.$this->std_plan[$i][$j][$idx]->lehrfach.$this->crlf.(($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?$this->crlf.$this->std_plan[$i][$j][$idx]->anmerkung:'').'","StundenplanFH","'.$this->std_plan[$i][$j][$idx]->ort.'","Normal","Aus",,"Normal","2"';
}
elseif ($target=='ical')
{
@@ -2564,9 +2575,9 @@ class wochenplan extends basis_db
$end_date_time_ical = $eda[2].$eda[1].$eda[0].'T'.sprintf('%02s',($eta[0])).$eta[1].$eta[2]; //neu gruppieren der Startzeit und des Startdatums
echo $this->crlf.'BEGIN:VEVENT'.$this->crlf
- .'UID:'.'FH'.str_replace(',',' ',$lvb.$this->std_plan[$i][$j][$idx]->ort.$this->std_plan[$i][$j][$idx]->lektor.$lehrfach[$idx].$start_date_time_ical.$end_date_time_ical.$this->crlf)
+ .'UID:'.'FH'.str_replace(',',' ',$lvb.$this->std_plan[$i][$j][$idx]->ort.(($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).$lehrfach[$idx].$start_date_time_ical.$end_date_time_ical.$this->crlf)
.'SUMMARY:'.str_replace(',',' ',$lehrfach[$idx].' '.$this->std_plan[$i][$j][$idx]->ort.' - '.$lvb.$this->crlf)
- .'DESCRIPTION:'.str_replace(',',' ',$lehrfach[$idx].'\n'.$this->std_plan[$i][$j][$idx]->lektor.'\n'.$lvb.'\n'.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?'\n'.$this->std_plan[$i][$j][$idx]->anmerkung:'').$this->crlf)
+ .'DESCRIPTION:'.str_replace(',',' ',$lehrfach[$idx].'\n'.(($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).'\n'.$lvb.'\n'.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?'\n'.$this->std_plan[$i][$j][$idx]->anmerkung:'').$this->crlf)
.'LOCATION:'.$this->std_plan[$i][$j][$idx]->ort.$this->crlf
.'CATEGORIES:'.$lvplan_kategorie.$this->crlf
.'DTSTART;TZID=Europe/Vienna:'.$start_date_time_ical.$this->crlf
@@ -2606,9 +2617,9 @@ class wochenplan extends basis_db
$start_date_time_ical = $sda[2].$sda[1].$sda[0].'T'.sprintf('%02s',($sta[0])).$sta[1].$sta[2]; //neu gruppieren der Startzeit und des Startdatums
$end_date_time_ical = $eda[2].$eda[1].$eda[0].'T'.sprintf('%02s',($eta[0])).$eta[1].$eta[2]; //neu gruppieren der Startzeit und des Startdatums
- $UID = 'FH'.$lvb.$this->std_plan[$i][$j][$idx]->ort.$this->std_plan[$i][$j][$idx]->lektor.$lehrfach[$idx].$start_date_time_ical.$end_date_time_ical;
+ $UID = 'FH'.$lvb.$this->std_plan[$i][$j][$idx]->ort.(($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).$lehrfach[$idx].$start_date_time_ical.$end_date_time_ical;
$Summary = $lehrfach[$idx].' '.$this->std_plan[$i][$j][$idx]->ort.' - '.$lvb;
- $description = $lehrfach[$idx].'\n'.$this->std_plan[$i][$j][$idx]->lektor.'\n'.$lvb.'\n'.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?'\n'.$this->std_plan[$i][$j][$idx]->anmerkung:'');
+ $description = $lehrfach[$idx].'\n'.(($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).'\n'.$lvb.'\n'.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?'\n'.$this->std_plan[$i][$j][$idx]->anmerkung:'');
$UID = str_replace(',',' ',$UID);
$Summary = str_replace(',',' ',$Summary);
@@ -2646,7 +2657,7 @@ class wochenplan extends basis_db
else
{
echo $this->crlf.'"'.$lehrfach[$idx].'","'.$lvplan_kategorie.'","'.$this->std_plan[$i][$j][$idx]->ort.'","Stundenplan'.$this->crlf.$this->std_plan[$i][$j][$idx]->lehrfach.$this->crlf;
- echo $this->std_plan[$i][$j][$idx]->lektor.$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?$this->crlf.$this->std_plan[$i][$j][$idx]->anmerkung:'').'","Stundenplan",';
+ echo (($this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz === null) ? $this->std_plan[$i][$j][$idx]->lektor : $this->std_plan[$i][$j][$idx]->mitarbeiter_kurzbz).$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][$idx]->ort.(LVPLAN_ANMERKUNG_ANZEIGEN?$this->crlf.$this->std_plan[$i][$j][$idx]->anmerkung:'').'","Stundenplan",';
echo '"'.$start_date.'","'.$start_time.'","'.$end_date.'","'.$end_time.'",,,,,';
}
}
diff --git a/locale/de-AT/abgabetool.php b/locale/de-AT/abgabetool.php
index f3b2cfac5..aae3ca2de 100644
--- a/locale/de-AT/abgabetool.php
+++ b/locale/de-AT/abgabetool.php
@@ -94,6 +94,7 @@ $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='Es konnte keine gültige digitale Signatur erkannt werden. Bitte wenden Sie sich an Ihren Studiengang ob Ihre Endabgabe erfolgreich war und die Arbeit zur Benotung vorgelegt werden kann.';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signatur fehlt';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signatur vorhanden';
+$this->phrasen['abgabetool/uploaddDocumentToBigForSignature']='Datei zu groß für Signaturprüfung';
$this->phrasen['abgabetool/senatsMitglied']='Mitglied Prüfungssenat';
$this->phrasen['abgabetool/abgegeben']='Abgegeben, in Beurteilung';
?>
diff --git a/locale/de-AT/fas.dtd b/locale/de-AT/fas.dtd
index df6180904..c3d420ede 100644
--- a/locale/de-AT/fas.dtd
+++ b/locale/de-AT/fas.dtd
@@ -187,6 +187,10 @@
+
+
+
+
diff --git a/locale/en-US/abgabetool.php b/locale/en-US/abgabetool.php
index b77e25d92..c13ebd90d 100644
--- a/locale/en-US/abgabetool.php
+++ b/locale/en-US/abgabetool.php
@@ -94,6 +94,7 @@ $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when g
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='The document does not contain an electronic signature. Please inform your Dregree Programm to verify the upload';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signature not found';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signature found';
+$this->phrasen['abgabetool/uploaddDocumentToBigForSignature']='File to big for Signaturecheck';
$this->phrasen['abgabetool/senatsMitglied']='Examiner';
$this->phrasen['abgabetool/abgegeben']='handed in, in assessment';
?>
diff --git a/public/css/issues/issuesKonfiguration.css b/public/css/issues/issuesKonfiguration.css
new file mode 100644
index 000000000..4d582e9e1
--- /dev/null
+++ b/public/css/issues/issuesKonfiguration.css
@@ -0,0 +1,7 @@
+#konfigSelect, #fehlercodeSelect {
+ float: left;
+}
+
+#konfigurationstypInfoIcon,#fehlercodeInfoIcon {
+ cursor: pointer;
+}
diff --git a/public/js/components/filter/Filter.js b/public/js/components/filter/Filter.js
index e153042ad..2bf878e5a 100644
--- a/public/js/components/filter/Filter.js
+++ b/public/js/components/filter/Filter.js
@@ -23,6 +23,8 @@ import {CoreFetchCmpt} from '../../components/Fetch.js';
const FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';
const FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';
+var _uuid = 0;
+
/**
*
*/
@@ -42,10 +44,12 @@ export const CoreFilterCmpt = {
required: true
},
tabulatorOptions: Object,
- tabulatorEvents: Array
+ tabulatorEvents: Array,
+ tableOnly: Boolean
},
data: function() {
return {
+ uuid: 0,
// FilterCmpt properties
filterName: null,
fields: null,
@@ -54,7 +58,6 @@ export const CoreFilterCmpt = {
selectedFields: null,
notSelectedFields: null,
filterFields: null,
- columnsAlias: null,
availableFilters: null,
@@ -64,104 +67,136 @@ export const CoreFilterCmpt = {
fetchCmptApiFunctionParams: null,
fetchCmptDataFetched: null,
- tabulator: null
+ tabulator: null,
+ tableBuilt: false
};
},
- created: function() {
- this.getFilter(); // get the filter data
- },
- updated: function() {
- //
- let dataset = JSON.parse(JSON.stringify(this.dataset));
- let fields = JSON.parse(JSON.stringify(this.fields));
- let selectedFields = JSON.parse(JSON.stringify(this.selectedFields));
+ computed: {
+ filteredData() {
+ if (!this.dataset)
+ return [];
+ return JSON.parse(JSON.stringify(this.dataset));
+ },
+ filteredColumns() {
+ let fields = JSON.parse(JSON.stringify(this.fields)) || [];
+ let selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];
- //
- let columns = null;
+ let columns = null;
- // If the tabulator options has been provided and it contains the property columns
- if (this.tabulatorOptions != null && this.tabulatorOptions.hasOwnProperty('columns'))
- {
- columns = this.tabulatorOptions.columns;
- }
+ // If the tabulator options has been provided and it contains the property columns
+ if (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))
+ columns = this.tabulatorOptions.columns;
- // If columns is not an array or it is an array with less elements then the array fields
- if (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))
- {
- columns = []; // set it as an empty array
-
- // Loop throught all the retrieved columns from database
- for (let i = 0; i < fields.length; i++)
+ // If columns is not an array or it is an array with less elements then the array fields
+ if (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))
{
- // Create a new column having the title equal to the field name
- let column = {
- title: fields[i],
- field: fields[i]
- };
+ columns = []; // set it as an empty array
- // If the column has to be displayed or not
- selectedFields.indexOf(fields[i]) >= 0 ? column.visible = true : column.visible = false;
-
- // Add the new column to the list of columns
- columns.push(column);
- }
- }
- else // the property columns has been provided in the tabulator options
- {
- // Loop throught the property columns of the tabulator options
- for (let i = 0; i < columns.length; i++)
- {
- // If the column has to be displayed or not
- selectedFields.indexOf(columns[i].field) >= 0 ? columns[i].visible = true : columns[i].visible = false;
-
- if (columns[i].hasOwnProperty('resizable'))
+ // Loop throught all the retrieved columns from database
+ for (let field of fields)
{
- columns[i].visible ? columns[i].resizable = true : columns[i].resizable = false;
- }
+ // Create a new column having the title equal to the field name
+ let column = {
+ title: field,
+ field: field
+ };
+
+ // If the column has to be displayed or not
+ column.visible = selectedFields.indexOf(field) >= 0;
+
+ // Add the new column to the list of columns
+ columns.push(column);
+ }
}
- }
-
- this.columnsAlias = columns;
-
- // Define a default tabulator options in case it was not provided
- let tabulatorOptions = {
- height: 500,
- layout: "fitColumns",
- movableColumns: true,
- reactiveData: true,
- columns: columns,
- data: JSON.parse(JSON.stringify(this.dataset))
- };
-
- // If it was provided
- if (this.tabulatorOptions != null)
- {
- // Then copy it...
- tabulatorOptions = this.tabulatorOptions;
- // ...and overwrite the properties data, reactiveData, movableColumns and columns
- tabulatorOptions.data = JSON.parse(JSON.stringify(this.dataset));
- tabulatorOptions.columns = columns;
- tabulatorOptions.reactiveData = true;
- tabulatorOptions.movableColumns = true;
- }
-
- // Start the tabulator with the buid options
- this.tabulator = new Tabulator(
- "#filterTableDataset",
- tabulatorOptions
- );
-
- // If event handlers have been provided
- if (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)
- {
- // Attach all the provided event handlers to the started tabulator
- for (let i = 0; i < this.tabulatorEvents.length; i++)
+ else // the property columns has been provided in the tabulator options
{
- this.tabulator.on(this.tabulatorEvents[i].event, this.tabulatorEvents[i].handler);
+ // Loop throught the property columns of the tabulator options
+ for (let col of columns)
+ {
+ // If the column has to be displayed or not
+ col.visible = selectedFields.indexOf(col.field) >= 0;
+
+ if (col.hasOwnProperty('resizable'))
+ col.resizable = col.visible;
+ }
}
+
+ return columns;
+ },
+ fieldNames() {
+ if (!this.tableBuilt)
+ return {};
+ return this.tabulator.getColumns().reduce((res, col) => {
+ res[col.getField()] = col.getDefinition().title;
+ return res;
+ }, {});
+ },
+ idExtra() {
+ if (!this.uuid)
+ return '';
+ return '-' + this.uuid;
}
},
+ beforeCreate() {
+ if (!this.tableOnly == !this.filterType)
+ alert('You can not have a filter-type in table-only mode!');
+ },
+ created() {
+ this.uuid = _uuid++;
+ if (!this.tableOnly)
+ this.getFilter(); // get the filter data
+ },
+ mounted() {
+ this.initTabulator();
+ },
methods: {
+ initTabulator() {
+ // Define a default tabulator options in case it was not provided
+ let tabulatorOptions = {...{
+ height: 500,
+ layout: "fitColumns",
+ movableColumns: true,
+ reactiveData: true
+ }, ...(this.tabulatorOptions || {})};
+
+ if (!this.tableOnly) {
+ tabulatorOptions.data = this.filteredData;
+ tabulatorOptions.columns = this.filteredColumns;
+ }
+
+ // Start the tabulator with the build options
+ this.tabulator = new Tabulator(
+ this.$refs.table,
+ tabulatorOptions
+ );
+ // If event handlers have been provided
+ if (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)
+ {
+ // Attach all the provided event handlers to the started tabulator
+ for (let evt of this.tabulatorEvents)
+ this.tabulator.on(evt.event, evt.handler);
+ }
+ this.tabulator.on('tableBuilt', () => this.tableBuilt = true);
+ if (this.tableOnly) {
+ this.tabulator.on('tableBuilt', () => {
+ const cols = this.tabulator.getColumns();
+ this.fields = cols.map(col => col.getField());
+ this.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());
+ });
+ }
+ },
+ updateTabulator() {
+ if (this.tabulator) {
+ if (this.tableBuilt)
+ this._updateTabulator();
+ else
+ this.tabulator.on('tableBuilt', this._updateTabulator);
+ }
+ },
+ _updateTabulator() {
+ this.tabulator.setData(this.filteredData);
+ this.tabulator.setColumns(this.filteredColumns);
+ },
/**
*
*/
@@ -209,6 +244,7 @@ export const CoreFilterCmpt = {
{
this.setDropDownMenu(data);
}
+ this.updateTabulator();
}
else
{
@@ -335,7 +371,7 @@ export const CoreFilterCmpt = {
this.startFetchCmpt(
CoreFilterAPIs.saveCustomFilter,
{
- customFilterName: document.getElementById('customFilterName').value
+ customFilterName: this.$refscustomFilterName.value
},
this.getFilter
);
@@ -463,22 +499,22 @@ export const CoreFilterCmpt = {
/*
*
*/
- handlerToggleSelectedField: function(event) {
+ handlerToggleSelectedField(field) {
// If it is a selected field
- if (this.selectedFields.indexOf(event.target.innerText) != -1)
+ if (this.selectedFields.indexOf(field) != -1)
{
// then hide it
- this.tabulator.hideColumn(event.target.innerText);
+ this.tabulator.hideColumn(field);
// and remove it from the this.selectedFields property
- this.selectedFields.splice(this.selectedFields.indexOf(event.target.innerText), 1);
+ this.selectedFields.splice(this.selectedFields.indexOf(field), 1);
}
else // otherwise
{
// show it
- this.tabulator.showColumn(event.target.innerText);
+ this.tabulator.showColumn(field);
// and add it to the this.selectedFields property
- this.selectedFields.push(event.target.innerText);
+ this.selectedFields.push(field);
}
},
/**
@@ -527,6 +563,7 @@ export const CoreFilterCmpt = {
template: `
-
+
-
+
@@ -558,9 +595,9 @@ export const CoreFilterCmpt = {
- {{ fieldToDisplay }}
+ {{ fieldNames[fieldToDisplay] || fieldToDisplay }}
@@ -568,7 +605,7 @@ export const CoreFilterCmpt = {
-
+
@@ -591,7 +628,7 @@ export const CoreFilterCmpt = {
-
+
@@ -605,7 +642,7 @@ export const CoreFilterCmpt = {
@change="handlerChangeFilterField(filterField.name, $event.target.value)"
>
-
+
@@ -704,7 +741,7 @@ export const CoreFilterCmpt = {
@@ -718,7 +755,7 @@ export const CoreFilterCmpt = {
-
+
`
};
diff --git a/public/js/issues/issuesKonfiguration.js b/public/js/issues/issuesKonfiguration.js
new file mode 100644
index 000000000..f2e7aa5c3
--- /dev/null
+++ b/public/js/issues/issuesKonfiguration.js
@@ -0,0 +1,345 @@
+/**
+ * Javascript file for Issues Zuständigkeiten assignment page
+ */
+
+const FEHLERAPP_DROPDOWN_ID = "fehlerappSelect";
+const FEHLERCODE_DROPDOWN_ID = "fehlercodeSelect";
+const FEHLERKONFIGURATIONSTYP_DROPDOWN_ID = "konfigSelect";
+
+var IssuesKonfiguration = {
+
+ fehlerkonfigArr: [], // for saving received fehlerkonfigs
+ fehlercodesArr: [], // for saving received fehlercodes
+
+ getApps: function()
+ {
+ FHC_AjaxClient.ajaxCallGet(
+ 'system/issues/IssuesKonfiguration/getApps',
+ null,
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // save loaded apps
+ let apps = FHC_AjaxClient.getData(data);
+
+ // fill dropdown with apps
+ IssuesKonfiguration._fillDropdown(
+ FEHLERAPP_DROPDOWN_ID,
+ "app",
+ apps,
+ null,
+ false,
+ "core"
+ );
+
+ // Initiate getting of fehlercodes with apps
+ IssuesKonfiguration.getFehlerKonfigurationByApp($("#"+FEHLERAPP_DROPDOWN_ID).val());
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ getFehlerKonfigurationByApp: function(app)
+ {
+ FHC_AjaxClient.ajaxCallGet(
+ 'system/issues/IssuesKonfiguration/getFehlerKonfigurationByApp',
+ {
+ app: app
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ let fehlerKonfigurationData = FHC_AjaxClient.getData(data);
+
+ // save konfig and fehler data for displaying info later
+ IssuesKonfiguration.fehlerkonfigArr = fehlerKonfigurationData.konfigurationstypen;
+ IssuesKonfiguration.fehlercodesArr = fehlerKonfigurationData.fehler;
+
+ // display fehlercodes in dropdown
+ let fehlerCodes = [];
+
+ for (let i = 0; i < fehlerKonfigurationData.fehler.length; i++)
+ {
+ let fe = fehlerKonfigurationData.fehler[i];
+
+ fehlerCodes.push(
+ {
+ fehlercode: fe.fehlercode,
+ fullFehlerBezeichnung: fe.fehlercode + (!fe.fehler_kurzbz ? '' : ' - ' + fe.fehler_kurzbz)
+ }
+ );
+ }
+
+ IssuesKonfiguration._fillDropdown(
+ FEHLERCODE_DROPDOWN_ID,
+ "fehlercode",
+ fehlerCodes,
+ "fullFehlerBezeichnung"
+ );
+
+ // display fehlerkonfiguration in dropdown
+ let konfigurationstypen = [];
+
+ for (let i = 0; i < fehlerKonfigurationData.konfigurationstypen.length; i++)
+ {
+ let konf = fehlerKonfigurationData.konfigurationstypen[i];
+
+ konfigurationstypen.push(
+ {
+ konfigurationstyp_kurzbz: konf.konfigurationstyp_kurzbz
+ }
+ );
+ }
+
+ IssuesKonfiguration._fillDropdown(
+ FEHLERKONFIGURATIONSTYP_DROPDOWN_ID,
+ "konfigurationstyp_kurzbz",
+ konfigurationstypen
+ );
+
+ // set delete event on buttons
+ IssuesKonfiguration._setDeleteEvents();
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ saveFehlerKonfiguration: function(konfigurationstyp_kurzbz, fehlercode, konfigurationsWert)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ 'system/issues/IssuesKonfiguration/saveFehlerKonfiguration',
+ {
+ konfigurationstyp_kurzbz: konfigurationstyp_kurzbz,
+ fehlercode: fehlercode,
+ konfigurationsWert: konfigurationsWert
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // show message, reset input fields and reload data after Zuständigkeit added
+ FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGespeichert'))
+ IssuesKonfiguration._reloadKonfigurationOverview();
+ }
+ else
+ {
+ // show error if no data
+ let errorMsg = FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGespeichertFehler');
+ if (FHC_AjaxClient.isError(data))
+ errorMsg += ": "+FHC_AjaxClient.getError(data);
+ FHC_DialogLib.alertError(errorMsg);
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ deleteKonfigurationsWerte: function(konfigurationstyp_kurzbz, fehlercode, konfigurationsWert)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ 'system/issues/IssuesKonfiguration/deleteKonfigurationsWerte',
+ {
+ konfigurationstyp_kurzbz: konfigurationstyp_kurzbz,
+ fehlercode: fehlercode,
+ konfigurationsWert: konfigurationsWert
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloescht'))
+ // reload dataset to see change
+ IssuesKonfiguration._reloadKonfigurationOverview();
+ }
+ else
+ {
+ FHC_DialogLib.alertError(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloeschtFehler'));
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ deleteKonfiguration: function(konfigurationstyp_kurzbz, fehlercode)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ 'system/issues/IssuesKonfiguration/deleteKonfiguration',
+ {
+ konfigurationstyp_kurzbz: konfigurationstyp_kurzbz,
+ fehlercode: fehlercode
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloescht'))
+ // reload dataset to see change
+ IssuesKonfiguration._reloadKonfigurationOverview();
+ }
+ else
+ {
+ FHC_DialogLib.alertError(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloeschtFehler'));
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ _reloadKonfigurationOverview: function()
+ {
+ FHC_FilterWidget.reloadDataset();
+ IssuesKonfiguration._setDeleteEvents();
+ },
+ _setDeleteEvents: function()
+ {
+ // set events on delete buttons
+ $(".deleteBtn").click(
+ function()
+ {
+ IssuesKonfiguration.deleteKonfiguration($(this).attr("data-konfigurationstyp-kurzbz"), $(this).attr("data-fehlercode"));
+ }
+ )
+ },
+ _fillDropdown: function(dropdownId, valueName, data, textName, includeNoSelectionOption, defaultValue)
+ {
+ // by default, displayed text in dropdown is the value
+ if (!textName)
+ textName = valueName;
+
+ // clear dropdown
+ $("#"+dropdownId).empty();
+
+ // optionally include default "no selection" value
+ if (includeNoSelectionOption === true)
+ $("#"+dropdownId).append("");
+
+ // fill dropdown with values
+ for (let i = 0; i < data.length; i++)
+ {
+ let val = data[i];
+
+ // the value selected by default
+ let selected = val[valueName] === defaultValue ? " selected" : "";
+
+ // append option
+ $("#"+dropdownId).append("");
+ }
+ }
+};
+
+/**
+ * When JQuery is up
+ */
+$(document).ready(function() {
+
+ // initiate cascade of getting data, first apps
+ IssuesKonfiguration.getApps();
+
+ // get new fehlercodes each time app is changed
+ $("#"+FEHLERAPP_DROPDOWN_ID).change(
+ function()
+ {
+ IssuesKonfiguration.getFehlerKonfigurationByApp($(this).val());
+ }
+ );
+
+ // set assign configuration event
+ $("#assignKonfiguration").click(
+ function()
+ {
+ IssuesKonfiguration.saveFehlerKonfiguration(
+ $("#"+FEHLERKONFIGURATIONSTYP_DROPDOWN_ID).val(),
+ $("#"+FEHLERCODE_DROPDOWN_ID).val(),
+ $("#konfigurationsWert").val()
+ );
+ }
+ );
+
+ // set delete configuration event
+ $("#deleteKonfiguration").click(
+ function()
+ {
+ IssuesKonfiguration.deleteKonfigurationsWerte(
+ $("#"+FEHLERKONFIGURATIONSTYP_DROPDOWN_ID).val(),
+ $("#"+FEHLERCODE_DROPDOWN_ID).val(),
+ $("#konfigurationsWert").val()
+ );
+ }
+ );
+
+ // set events for showing info modals
+ $("#fehlercodeInfoIcon").click(
+ function()
+ {
+ let fehlercode = $("#"+FEHLERCODE_DROPDOWN_ID).val();
+ let fehlercodeData = {};
+
+ for (let i = 0; i < IssuesKonfiguration.fehlercodesArr.length; i++)
+ {
+ let fc = IssuesKonfiguration.fehlercodesArr[i];
+ console.log(fc);
+
+ if (fc.fehlercode === fehlercode)
+ {
+ fehlercodeData = fc;
+ break;
+ }
+ }
+
+ if (!fehlercodeData)
+ return;
+
+ $("#fehlerInfoLabel").text(fehlercodeData.fehlercode + " - " + fehlercodeData.fehler_kurzbz);
+ $("#fehlercodeInfo").text(fehlercodeData.fehlercode);
+ $("#fehlerkurzbzInfo").text(fehlercodeData.fehler_kurzbz);
+ $("#fehlertypInfo").text(fehlercodeData.fehlertyp_kurzbz);
+ $("#fehlertextInfo").text(fehlercodeData.fehlertext);
+
+ $("#fehlerInfo").modal("show");
+ }
+ );
+
+ $("#konfigurationstypInfoIcon").click(
+ function()
+ {
+ let konfigurationstyp_kurzbz = $("#"+FEHLERKONFIGURATIONSTYP_DROPDOWN_ID).val();
+ let konfigurationstypData = {};
+
+ for (let i = 0; i < IssuesKonfiguration.fehlerkonfigArr.length; i++)
+ {
+ let konf = IssuesKonfiguration.fehlerkonfigArr[i];
+ console.log(konf);
+
+ if (konf.konfigurationstyp_kurzbz === konfigurationstyp_kurzbz)
+ {
+ konfigurationstypData = konf;
+ break;
+ }
+ }
+
+ if (!konfigurationstypData)
+ return;
+
+ $("#konfigurationstypInfo").text(konfigurationstypData.konfigurationstyp_kurzbz);
+ $("#konfigurationsbeschreibungInfo").text(konfigurationstypData.beschreibung);
+ $("#konfigurationsdatentypInfo").text(konfigurationstypData.konfigurationsdatentyp);
+
+ $("#konfigurationsInfo").modal("show");
+ }
+ );
+
+});
diff --git a/public/js/issues/issuesZustaendigkeiten.js b/public/js/issues/issuesZustaendigkeiten.js
index 605868295..2c56fd2da 100644
--- a/public/js/issues/issuesZustaendigkeiten.js
+++ b/public/js/issues/issuesZustaendigkeiten.js
@@ -289,7 +289,7 @@ var IssuesZustaendigkeiten = {
let val = data[i];
// the value selected by default
- let selected = val === defaultValue ? " selected" : "";
+ let selected = val[valueName] === defaultValue ? " selected" : "";
// append option
$("#"+dropdownId).append("");
diff --git a/public/js/issues/plausichecks.js b/public/js/issues/plausichecks.js
index f679c9434..cf55cf463 100644
--- a/public/js/issues/plausichecks.js
+++ b/public/js/issues/plausichecks.js
@@ -20,21 +20,22 @@ var Plausichecks = {
if (FHC_AjaxClient.hasData(data))
{
- let issueTexts = FHC_AjaxClient.getData(data);
+ let issueData = FHC_AjaxClient.getData(data);
- for (let fehler_kurzbz in issueTexts)
+ for (let fehler_kurzbz in issueData)
{
- messageStr += "
Prüfe " + fehler_kurzbz + "...";
- let texts = issueTexts[fehler_kurzbz];
+ let issues = issueData[fehler_kurzbz]['data'];
+ messageStr += "
Prüfe " + fehler_kurzbz + " ("+issueData[fehler_kurzbz]['fehlercode']+")...";
- if (texts.length == 0) {
+ if (issues.length == 0) {
messageStr += "
Keine Issues für " + fehler_kurzbz + "";
continue;
}
- for (i = 0; i < texts.length; i++)
+ for (i = 0; i < issues.length; i++)
{
- messageStr += "
" + texts[i] + "";
+ let className = issues[i].type == 'warning' ? 'text-warning' : 'text-danger';
+ messageStr += "
" + issues[i].fehlertext + "";
}
}
}
@@ -46,7 +47,7 @@ var Plausichecks = {
}
}
);
- },
+ }
};
diff --git a/rdf/lehrverbandsgruppe.rdf.php b/rdf/lehrverbandsgruppe.rdf.php
index 79ac0c948..20956d279 100644
--- a/rdf/lehrverbandsgruppe.rdf.php
+++ b/rdf/lehrverbandsgruppe.rdf.php
@@ -246,6 +246,24 @@ function draw_orgformsubmenu($stg_kz, $orgform)
+
+ Nicht zum Reihungstest angemeldet
+
+
+ studiensemester_kurzbz.']]>
+ statusbestaetigtrtnichtangemeldet
+
+
+
+
+ Reihungstest angemeldet
+
+
+ studiensemester_kurzbz.']]>
+ statusbestaetigtrtangemeldet
+
+
+
Nicht zum Reihungstest angemeldet
@@ -316,7 +334,12 @@ function draw_orgformsubmenu($stg_kz, $orgform)
$orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/bewerbungnichtabgeschickt\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/bewerbungabgeschickt\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/zgv\" />\n";
- $orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt\" />\n";
+ $orgform_sequence[$stg_kz].= "\t\t\t";
+ $orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt\">\n";
+ $orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestnichtangemeldet\" />\n";
+ $orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestangemeldet\" />\n";
+ $orgform_sequence[$stg_kz].= "\t\t\t\t";
+ $orgform_sequence[$stg_kz].= "\n\t\t\t\n";
$orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/reihungstestnichtangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\tstudiensemester_kurzbz/interessenten/reihungstestangemeldet\" />\n";
$orgform_sequence[$stg_kz].= "\t\t\t\t";
@@ -561,6 +584,22 @@ while ($row=$dbo->db_fetch_object())
+
+
+ ]]>
+ studiengang_kz; ?>]]>
+ studiensemester_kurzbz; ?>]]>
+
+
+
+
+
+ ]]>
+ studiengang_kz; ?>]]>
+ studiensemester_kurzbz; ?>]]>
+
+
+
]]>
@@ -783,7 +822,12 @@ draw_orgformpart($stg_kz);
echo "\t\t\t\tstudiensemester_kurzbz/interessenten/bewerbungnichtabgeschickt\" />\n";
echo "\t\t\t\tstudiensemester_kurzbz/interessenten/bewerbungabgeschickt\" />\n";
echo "\t\t\t\tstudiensemester_kurzbz/interessenten/zgv\" />\n";
- echo "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt\" />\n";
+ echo "\t\t\t";
+ echo "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt\">\n";
+ echo "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestnichtangemeldet\" />\n";
+ echo "\t\t\t\tstudiensemester_kurzbz/interessenten/statusbestaetigt/reihungstestangemeldet\" />\n";
+ echo "\t\t\t\t";
+ echo "\n\t\t\t\n";
echo "\t\t\t\tstudiensemester_kurzbz/interessenten/reihungstestnichtangemeldet\" />\n";
echo "\t\t\t\tstudiensemester_kurzbz/interessenten/reihungstestangemeldet\" />\n";
echo "\t\t\t\t";
diff --git a/rdf/ort.rdf.php b/rdf/ort.rdf.php
index e9f575428..f4512851a 100644
--- a/rdf/ort.rdf.php
+++ b/rdf/ort.rdf.php
@@ -38,7 +38,7 @@ require_once('../include/basis_db.class.php');
// Orte holen
$sql_query="SELECT * FROM (public.tbl_ort JOIN public.tbl_ortraumtyp USING (ort_kurzbz)) JOIN public.tbl_raumtyp USING (raumtyp_kurzbz)
- WHERE aktiv AND raumtyp_kurzbz!='LM' ORDER BY raumtyp_kurzbz, hierarchie,ort_kurzbz";
+ WHERE tbl_ort.aktiv AND tbl_raumtyp.aktiv AND raumtyp_kurzbz!='LM' ORDER BY raumtyp_kurzbz, hierarchie,ort_kurzbz";
$db = new basis_db();
if(!$result = $db->db_query($sql_query))
$error_msg.=$db->db_last_error();
@@ -67,7 +67,9 @@ for ($i=0;$i<$num_rows;$i++)
$nextTYP=(($i<$num_rows-1)?$ortNEXT->raumtyp_kurzbz:null);
//echo "current:$currentTYP last:$lastTYP next:$nextTYP";
$raumtypen='';
- $qry = "SELECT raumtyp_kurzbz FROM public.tbl_ortraumtyp WHERE ort_kurzbz='$ort->ort_kurzbz'";
+ $qry = "SELECT tbl_ortraumtyp.raumtyp_kurzbz FROM public.tbl_ortraumtyp
+ JOIN tbl_raumtyp USING(raumtyp_kurzbz)
+ WHERE tbl_raumtyp.aktiv AND ort_kurzbz='$ort->ort_kurzbz'";
if($result_rt = $db->db_query($qry))
{
while($row_rt = $db->db_fetch_object($result_rt))
diff --git a/rdf/raumtyp.rdf.php b/rdf/raumtyp.rdf.php
index 06b429380..1f7289747 100644
--- a/rdf/raumtyp.rdf.php
+++ b/rdf/raumtyp.rdf.php
@@ -56,13 +56,14 @@ foreach ($raumtypDAO->result as $rt)
{
?>
-
- raumtyp_kurzbz ?>
- beschreibung ?>
-
+
+ raumtyp_kurzbz ?>
+ beschreibung ?>
+ aktiv ? "true" : "false") ?>
+
-
\ No newline at end of file
+
diff --git a/rdf/student.rdf.php b/rdf/student.rdf.php
index af0bbe82d..11e841c2b 100644
--- a/rdf/student.rdf.php
+++ b/rdf/student.rdf.php
@@ -737,7 +737,7 @@ if($xmlformat=='rdf')
}
elseif(in_array($typ, array('prestudent', 'interessenten', 'bewerber', 'aufgenommen',
'warteliste', 'absage', 'zgv', 'reihungstestangemeldet', 'reihungstestnichtangemeldet', 'absolvent',
- 'diplomand', 'bewerbungnichtabgeschickt', 'bewerbungabgeschickt', 'statusbestaetigt')))
+ 'diplomand', 'bewerbungnichtabgeschickt', 'bewerbungabgeschickt', 'statusbestaetigt', 'statusbestaetigtrtnichtangemeldet', 'statusbestaetigtrtangemeldet')))
{
$prestd = new prestudent();
@@ -939,6 +939,8 @@ if($xmlformat=='rdf')
UPPER(nachname || ' ' || vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(nachname || ' ' || wahlname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(wahlname || ' ' || nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
+ UPPER(vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
+ UPPER(nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
student_uid ~* LOWER(".$db->db_add_param($searchItems_string).")";
}
else
@@ -1195,6 +1197,20 @@ else
else
$studienjahr = intval($semester/2)+1;
+ $abbrecher = ($prestudent->status_kurzbz === 'Abbrecher' ? 'true' : 'false');
+
+ $abbrecher_ende = '';
+ $studiensemester_abbrecher_kurzbz='';
+ $qry = "SELECT * FROM public.tbl_prestudentstatus
+ WHERE prestudent_id='$student->prestudent_id' AND status_kurzbz = 'Abbrecher' ORDER BY datum LIMIT 1";
+ if($db->db_query($qry))
+ {
+ if($row = $db->db_fetch_object())
+ {
+ $abbrecher_ende = $row->datum;
+ $studiensemester_abbrecher_kurzbz = $row->studiensemester_kurzbz;
+ }
+ }
echo '
uid.']]>
@@ -1218,6 +1234,7 @@ else
bezeichnung.']]>
bezeichnung.']]>
+ english.']]>
typ.']]>
orgform_kurzbz.']]>
@@ -1241,6 +1258,9 @@ else
studienjahr_kurzbz.']]>
bezeichnung.']]>
convertISODate($stsem->start).']]>
+
+ convertISODate($abbrecher_ende).']]>
+
max_semester.']]>
anmerkung.']]>
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index f57b9d172..edbe7585e 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -7026,7 +7026,7 @@ $tabellen=array(
"public.tbl_preoutgoing_status" => array("preoutgoing_status_kurzbz","bezeichnung"),
"public.tbl_prestudent" => array("prestudent_id","aufmerksamdurch_kurzbz","person_id","studiengang_kz","berufstaetigkeit_code","ausbildungcode","zgv_code","zgvort","zgvdatum","zgvmas_code","zgvmaort","zgvmadatum","aufnahmeschluessel","facheinschlberuf","reihungstest_id","anmeldungreihungstest","reihungstestangetreten","rt_gesamtpunkte","rt_punkte1","rt_punkte2","bismelden","anmerkung","dual","insertamum","insertvon","updateamum","updatevon","ext_id","ausstellungsstaat","rt_punkte3", "zgvdoktor_code", "zgvdoktorort", "zgvdoktordatum","mentor","zgvnation","zgvmanation","zgvdoktornation","gsstudientyp_kurzbz","aufnahmegruppe_kurzbz","udf_values","priorisierung","foerderrelevant","standort_code","zgv_erfuellt","zgvmas_erfuellt","zgvdoktor_erfuellt"),
"public.tbl_prestudentstatus" => array("prestudent_id","status_kurzbz","studiensemester_kurzbz","ausbildungssemester","datum","orgform_kurzbz","insertamum","insertvon","updateamum","updatevon","ext_id","studienplan_id","bestaetigtam","bestaetigtvon","fgm","faktiv", "anmerkung","bewerbung_abgeschicktamum","rt_stufe","statusgrund_id"),
- "public.tbl_raumtyp" => array("raumtyp_kurzbz","beschreibung","kosten"),
+ "public.tbl_raumtyp" => array("raumtyp_kurzbz","beschreibung","kosten", "aktiv"),
"public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet","max_teilnehmer","oeffentlich","studiensemester_kurzbz","aufnahmegruppe_kurzbz","stufe","anmeldefrist"),
"public.tbl_rt_ort" => array("rt_id","ort_kurzbz","uid"),
"public.tbl_rt_person" => array("rt_person_id","person_id","rt_id","studienplan_id","anmeldedatum","teilgenommen","ort_kurzbz","punkte","insertamum","insertvon","updateamum","updatevon"),
diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php
index 1dbb65d34..1b8d639c3 100644
--- a/system/dbupdate_3.4.php
+++ b/system/dbupdate_3.4.php
@@ -33,8 +33,13 @@ require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
require_once('dbupdate_3.4/17512_fehlercode_constraints.php');
require_once('dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php');
require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php');
+require_once('dbupdate_3.4/10001_tempus_mitarbeiter_kurzbz_bei_reservierungen_anzeigen.php');
require_once('dbupdate_3.4/27949_infocenter_zurueckstellen_mit_grund.php');
require_once('dbupdate_3.4/29357_eine_uid_tbl_lehre_abschlusspruefung.php');
+require_once('dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php');
+require_once('dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php');
+require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php');
+require_once('dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo 'Pruefe Tabellen und Attribute!
';
@@ -306,6 +311,9 @@ $tabellen=array(
"system.tbl_extensions" => array("extension_id","name","version","description","license","url","core_version","dependencies","enabled"),
"system.tbl_fehler" => array("fehlercode","fehler_kurzbz","fehlercode_extern","fehlertext","fehlertyp_kurzbz","app"),
"system.tbl_fehlertyp" => array("fehlertyp_kurzbz","bezeichnung_mehrsprachig"),
+ "system.tbl_fehler_konfiguration" => array("konfigurationstyp_kurzbz","fehlercode","konfiguration","insertamum","insertvon","updateamum","updatevon"),
+ "system.tbl_fehler_konfigurationsdatentyp" => array("konfigurationsdatentyp"),
+ "system.tbl_fehler_konfigurationstyp" => array("konfigurationstyp_kurzbz","beschreibung","konfigurationsdatentyp","app"),
"system.tbl_fehler_zustaendigkeiten" => array("fehlerzustaendigkeiten_id","fehlercode","person_id","oe_kurzbz","funktion_kurzbz", "insertamum", "insertvon"),
"system.tbl_issue" => array("issue_id","fehlercode","fehlercode_extern","inhalt","inhalt_extern","person_id","oe_kurzbz","datum","verarbeitetvon","verarbeitetamum","status_kurzbz","behebung_parameter","insertvon","insertamum","updatevon","updateamum"),
"system.tbl_issue_status" => array("status_kurzbz","bezeichnung_mehrsprachig"),
diff --git a/system/dbupdate_3.4/10001_tempus_mitarbeiter_kurzbz_bei_reservierungen_anzeigen.php b/system/dbupdate_3.4/10001_tempus_mitarbeiter_kurzbz_bei_reservierungen_anzeigen.php
new file mode 100644
index 000000000..fed80b786
--- /dev/null
+++ b/system/dbupdate_3.4/10001_tempus_mitarbeiter_kurzbz_bei_reservierungen_anzeigen.php
@@ -0,0 +1,130 @@
+db_query("SELECT mitarbeiter_kurzbz FROM lehre.vw_stundenplandev LIMIT 1"))
+{
+ $qry = "
+ CREATE OR REPLACE VIEW lehre.vw_stundenplandev
+ (stundenplandev_id, unr, uid, lehreinheit_id, lehrfach_id, datum, stunde, ort_kurzbz, studiengang_kz,
+ semester, verband, gruppe, gruppe_kurzbz, titel, anmerkung, fix, lehrveranstaltung_id, stg_kurzbz,
+ stg_kurzbzlang, stg_bezeichnung, stg_typ, fachbereich_kurzbz, lehrfach, lehrfach_bez, farbe, lehrform,
+ lektor, updateamum, updatevon, insertamum, insertvon, anmerkung_lehreinheit, mitarbeiter_kurzbz)
+ AS
+ SELECT tbl_stundenplandev.stundenplandev_id,
+ tbl_stundenplandev.unr,
+ tbl_stundenplandev.mitarbeiter_uid AS uid,
+ tbl_stundenplandev.lehreinheit_id,
+ tbl_lehreinheit.lehrfach_id,
+ tbl_stundenplandev.datum,
+ tbl_stundenplandev.stunde,
+ tbl_stundenplandev.ort_kurzbz,
+ tbl_stundenplandev.studiengang_kz,
+ tbl_stundenplandev.semester,
+ tbl_stundenplandev.verband,
+ tbl_stundenplandev.gruppe,
+ tbl_stundenplandev.gruppe_kurzbz,
+ tbl_stundenplandev.titel,
+ tbl_stundenplandev.anmerkung,
+ tbl_stundenplandev.fix,
+ tbl_lehreinheit.lehrveranstaltung_id,
+ tbl_studiengang.kurzbz AS stg_kurzbz,
+ tbl_studiengang.kurzbzlang AS stg_kurzbzlang,
+ tbl_studiengang.bezeichnung AS stg_bezeichnung,
+ tbl_studiengang.typ AS stg_typ,
+ (SELECT tbl_fachbereich.fachbereich_kurzbz
+ FROM tbl_fachbereich
+ WHERE tbl_fachbereich.oe_kurzbz::text = lehrfach.oe_kurzbz::text) AS fachbereich_kurzbz,
+ lehrfach.kurzbz AS lehrfach,
+ lehrfach.bezeichnung AS lehrfach_bez,
+ lehrfach.farbe,
+ tbl_lehreinheit.lehrform_kurzbz AS lehrform,
+ tbl_mitarbeiter.kurzbz AS lektor,
+ tbl_stundenplandev.updateamum,
+ tbl_stundenplandev.updatevon,
+ tbl_stundenplandev.insertamum,
+ tbl_stundenplandev.insertvon,
+ tbl_lehreinheit.anmerkung AS anmerkung_lehreinheit,
+ tbl_mitarbeiter.kurzbz AS mitarbeiter_kurzbz
+ FROM lehre.tbl_stundenplandev
+ JOIN tbl_studiengang USING (studiengang_kz)
+ JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
+ JOIN lehre.tbl_lehrveranstaltung lehrfach ON tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id
+ JOIN tbl_mitarbeiter USING (mitarbeiter_uid)
+ JOIN tbl_benutzer ON mitarbeiter_uid = uid
+ JOIN tbl_person USING(person_id);
+ ";
+
+ if (!$db->db_query($qry))
+ echo 'lehre.vw_stundenplandev: ' . $db->db_last_error() . '
';
+ else
+ echo 'lehre.vw_stundenplandev: Neue Spalte mitarbeiter_kurzbz hinzugefuegt
';
+}
+
+// lehre.vw_stundenplan erweitern
+if (!$result = @$db->db_query("SELECT mitarbeiter_kurzbz FROM lehre.vw_stundenplan LIMIT 1"))
+{
+ $qry = "CREATE OR REPLACE VIEW lehre.vw_stundenplan AS
+ SELECT
+ tbl_stundenplan.stundenplan_id, tbl_stundenplan.unr, tbl_stundenplan.mitarbeiter_uid AS uid,
+ tbl_stundenplan.lehreinheit_id, tbl_lehreinheit.lehrfach_id AS lehrfach_id, tbl_stundenplan.datum,
+ tbl_stundenplan.stunde, tbl_stundenplan.ort_kurzbz, tbl_stundenplan.studiengang_kz,
+ tbl_stundenplan.semester, tbl_stundenplan.verband, tbl_stundenplan.gruppe, tbl_stundenplan.gruppe_kurzbz,
+ tbl_stundenplan.titel, tbl_stundenplan.anmerkung, tbl_stundenplan.fix, tbl_lehreinheit.lehrveranstaltung_id,
+ tbl_studiengang.kurzbz AS stg_kurzbz, tbl_studiengang.kurzbzlang AS stg_kurzbzlang,
+ tbl_studiengang.bezeichnung AS stg_bezeichnung, tbl_studiengang.typ AS stg_typ,
+ (SELECT fachbereich_kurzbz FROM public.tbl_fachbereich WHERE oe_kurzbz=lehrfach.oe_kurzbz) as fachbereich_kurzbz,
+ lehrfach.kurzbz AS lehrfach, lehrfach.bezeichnung AS lehrfach_bez, lehrfach.farbe,
+ tbl_lehreinheit.lehrform_kurzbz AS lehrform, tbl_mitarbeiter.kurzbz AS lektor,
+ tbl_stundenplan.updateamum, tbl_stundenplan.updatevon, tbl_stundenplan.insertamum,
+ tbl_stundenplan.insertvon, tbl_lehreinheit.anmerkung AS anmerkung_lehreinheit,
+ tbl_mitarbeiter.kurzbz as mitarbeiter_kurzbz
+ FROM lehre.tbl_stundenplan
+ JOIN public.tbl_studiengang USING (studiengang_kz)
+ JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
+ JOIN lehre.tbl_lehrveranstaltung as lehrfach ON (tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
+ JOIN public.tbl_mitarbeiter USING (mitarbeiter_uid)
+ JOIN tbl_benutzer ON mitarbeiter_uid = uid
+ JOIN tbl_person USING(person_id);";
+
+ if (!$db->db_query($qry))
+ echo 'lehre.vw_stundenplan: ' . $db->db_last_error() . '
';
+ else
+ echo 'lehre.vw_stundenplan: Neue Spalte mitarbeiter_kurzbz hinzugefuegt
';
+}
+
+// campus.vw_reservierung erweitern
+if (!$result = @$db->db_query("SELECT mitarbeiter_kurzbz FROM campus.vw_reservierung LIMIT 1"))
+{
+ $qry = "CREATE OR REPLACE view campus.vw_reservierung
+ (reservierung_id, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, beschreibung, semester, verband,
+ gruppe, gruppe_kurzbz, stg_kurzbz, insertamum, insertvon, mitarbeiter_kurzbz)
+ AS
+ SELECT tbl_reservierung.reservierung_id,
+ tbl_reservierung.ort_kurzbz,
+ tbl_reservierung.studiengang_kz,
+ tbl_reservierung.uid,
+ tbl_reservierung.stunde,
+ tbl_reservierung.datum,
+ tbl_reservierung.titel,
+ tbl_reservierung.beschreibung,
+ tbl_reservierung.semester,
+ tbl_reservierung.verband,
+ tbl_reservierung.gruppe,
+ tbl_reservierung.gruppe_kurzbz,
+ tbl_studiengang.kurzbz AS stg_kurzbz,
+ tbl_reservierung.insertamum,
+ tbl_reservierung.insertvon,
+ tbl_mitarbeiter.kurzbz as mitarbeiter_kurzbz
+ FROM campus.tbl_reservierung
+ JOIN tbl_studiengang USING (studiengang_kz)
+ LEFT JOIN tbl_benutzer ON tbl_reservierung.uid = tbl_benutzer.uid
+ LEFT JOIN tbl_mitarbeiter ON tbl_benutzer.uid = tbl_mitarbeiter.mitarbeiter_uid
+ LEFT JOIN tbl_person USING (person_id);";
+
+ if (!$db->db_query($qry))
+ echo 'campus.vw_reservierung: ' . $db->db_last_error() . '
';
+ else
+ echo 'campus.vw_reservierung: Neue Spalte mitarbeiter_kurzbz hinzugefuegt
';
+}
+
diff --git a/system/dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php b/system/dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php
new file mode 100644
index 000000000..98381776c
--- /dev/null
+++ b/system/dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php
@@ -0,0 +1,15 @@
+db_query("SELECT aktiv FROM public.tbl_raumtyp LIMIT 1"))
+{
+ $qry = "ALTER TABLE public.tbl_raumtyp ADD COLUMN aktiv boolean NOT NULL DEFAULT true;
+ COMMENT ON COLUMN public.tbl_raumtyp.aktiv IS 'Zeigt an, ob Raumtyp aktuell ist.';
+ ";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_raumtyp '.$db->db_last_error().'
';
+ else
+ echo '
Spalte aktiv zu Tabelle public.tbl_raumtyp hinzugefügt';
+}
\ No newline at end of file
diff --git a/system/dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php b/system/dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php
new file mode 100644
index 000000000..a0d71b753
--- /dev/null
+++ b/system/dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php
@@ -0,0 +1,16 @@
+db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz='mitarbeiter/zeitsperre:begrenzt'"))
+{
+ if($db->db_num_rows($result)==0)
+ {
+ $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('mitarbeiter/zeitsperre:begrenzt', 'Vilesci Verwaltung');";
+
+ if(!$db->db_query($qry))
+ echo 'Berechtigung: '.$db->db_last_error().'
';
+ else
+ echo '
Neue Berechtigung mitarbeiter/zeitsperre:begrenzt zu system.tbl_berechtigung hinzugefügt';
+ }
+}
diff --git a/system/dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php b/system/dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php
new file mode 100644
index 000000000..84a85629a
--- /dev/null
+++ b/system/dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php
@@ -0,0 +1,16 @@
+db_query("SELECT 1 FROM system.tbl_fehler WHERE fehlertyp_kurzbz='error' AND fehler_kurzbz IN ('AbschlussstatusFehlt', 'AusbildungssemPrestudentUngleichAusbildungssemStatus', 'BewerberNichtZumRtAngetreten', 'GbDatumWeitZurueck', 'InaktiverStudentAktiverStatus')"))
+{
+ if($db->db_num_rows($result)>0)
+ {
+ $qry = "UPDATE system.tbl_fehler SET fehlertyp_kurzbz='warning' WHERE fehler_kurzbz IN ('AbschlussstatusFehlt', 'AusbildungssemPrestudentUngleichAusbildungssemStatus', 'BewerberNichtZumRtAngetreten', 'GbDatumWeitZurueck', 'InaktiverStudentAktiverStatus') AND fehlertyp_kurzbz = 'error';";
+
+ if(!$db->db_query($qry))
+ echo 'System Tabelle Fehler: '.$db->db_last_error().'
';
+ else
+ echo '
Bestimmte Fehler mit Typ error zu warnings umgewandelt';
+ }
+}
diff --git a/system/dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php b/system/dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php
new file mode 100644
index 000000000..7102806e3
--- /dev/null
+++ b/system/dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php
@@ -0,0 +1,108 @@
+db_query("SELECT 1 FROM system.tbl_app WHERE app='personalverwaltung' LIMIT 1"))
+{
+ if ($db->db_num_rows($result) == 0)
+ {
+ $qry = "INSERT INTO system.tbl_app(app) VALUES('personalverwaltung');";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_app: '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_app: Personalverwaltung hinzugefügt
';
+ }
+}
+
+if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_fehler_konfigurationsdatentyp LIMIT 1'))
+{
+ $qry = 'CREATE TABLE system.tbl_fehler_konfigurationsdatentyp
+ (
+ konfigurationsdatentyp varchar(32)
+ );
+
+ COMMENT ON TABLE system.tbl_fehler_konfigurationsdatentyp IS \'Konfigurationsparameter Datentypen\';
+ COMMENT ON COLUMN system.tbl_fehler_konfigurationsdatentyp.konfigurationsdatentyp IS \'Datentyp der Konfigurationsparameter, z.B. integer oder string\';
+
+ ALTER TABLE system.tbl_fehler_konfigurationsdatentyp ADD CONSTRAINT pk_fehler_konfigurationsdatentyp PRIMARY KEY (konfigurationsdatentyp);
+
+ GRANT SELECT ON system.tbl_fehler_konfigurationsdatentyp TO web;
+ GRANT SELECT, UPDATE, INSERT, DELETE ON system.tbl_fehler_konfigurationsdatentyp TO vilesci;
+
+ -- prefill values
+ INSERT INTO system.tbl_fehler_konfigurationsdatentyp(konfigurationsdatentyp) VALUES(\'integer\');
+ INSERT INTO system.tbl_fehler_konfigurationsdatentyp(konfigurationsdatentyp) VALUES(\'float\');
+ INSERT INTO system.tbl_fehler_konfigurationsdatentyp(konfigurationsdatentyp) VALUES(\'string\');
+ ';
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehler_konfigurationsdatentyp: '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_fehler_konfigurationsdatentyp: Tabelle hinzugefuegt
';
+}
+
+if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_fehler_konfigurationstyp LIMIT 1'))
+{
+ $qry = 'CREATE TABLE system.tbl_fehler_konfigurationstyp
+ (
+ konfigurationstyp_kurzbz varchar(64),
+ beschreibung text,
+ konfigurationsdatentyp varchar(32),
+ app varchar(32) NOT NULL
+ );
+
+ COMMENT ON TABLE system.tbl_fehler_konfigurationstyp IS \'Konfigurationsparameter Typen\';
+ COMMENT ON COLUMN system.tbl_fehler_konfigurationstyp.konfigurationstyp_kurzbz IS \'Art der Konfiguration\';
+ COMMENT ON COLUMN system.tbl_fehler_konfigurationstyp.beschreibung IS \'Kurze Erklärung, was die Konfiguration bewirkt\';
+ COMMENT ON COLUMN system.tbl_fehler_konfigurationstyp.app IS \'App, für welche die Konfiguration gilt\';
+
+ ALTER TABLE system.tbl_fehler_konfigurationstyp ADD CONSTRAINT pk_fehler_konfigurationstyp PRIMARY KEY (konfigurationstyp_kurzbz);
+ ALTER TABLE system.tbl_fehler_konfigurationstyp ADD CONSTRAINT fk_fehler_konfigurationstyp_app FOREIGN KEY (app) REFERENCES system.tbl_app(app) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler_konfigurationstyp ADD CONSTRAINT fk_fehler_konfigurationstyp_konfigurationsdatentyp FOREIGN KEY (konfigurationsdatentyp) REFERENCES system.tbl_fehler_konfigurationsdatentyp(konfigurationsdatentyp) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ GRANT SELECT, UPDATE, INSERT, DELETE ON system.tbl_fehler_konfigurationstyp TO web;
+ GRANT SELECT, UPDATE, INSERT, DELETE ON system.tbl_fehler_konfigurationstyp TO vilesci;
+
+ -- prefill values
+ INSERT INTO system.tbl_fehler_konfigurationstyp(konfigurationstyp_kurzbz, beschreibung, konfigurationsdatentyp, app)
+ VALUES(\'exkludierteStudiengaenge\', \'Studiengangskennzahlen von Studiengängen, die nicht bei den Studierendenplausichecks berücksichtigt werden\', \'integer\', \'core\');
+ ';
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehler_konfigurationstyp: '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_fehler_konfigurationstyp: Tabelle hinzugefuegt
';
+}
+
+if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_fehler_konfiguration LIMIT 1'))
+{
+ $qry = 'CREATE TABLE system.tbl_fehler_konfiguration
+ (
+ konfigurationstyp_kurzbz varchar(64),
+ fehlercode varchar(64),
+ konfiguration jsonb NOT NULL,
+ insertamum timestamp default NOW(),
+ insertvon varchar(32),
+ updateamum timestamp,
+ updatevon varchar(32)
+ );
+
+ COMMENT ON TABLE system.tbl_fehler_konfiguration IS \'Konfigurationsparameter pro Fehler\';
+ COMMENT ON COLUMN system.tbl_fehler_konfiguration.konfigurationstyp_kurzbz IS \'Art der Konfiguration\';
+ COMMENT ON COLUMN system.tbl_fehler_konfiguration.konfiguration IS \'Konfigruationsparameter \';
+
+ ALTER TABLE system.tbl_fehler_konfiguration ADD CONSTRAINT pk_fehler_konfiguration PRIMARY KEY (konfigurationstyp_kurzbz, fehlercode);
+ ALTER TABLE system.tbl_fehler_konfiguration ADD CONSTRAINT fk_fehler_konfiguration_konfigurationstyp_kurzbz FOREIGN KEY (konfigurationstyp_kurzbz) REFERENCES system.tbl_fehler_konfigurationstyp(konfigurationstyp_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler_konfiguration ADD CONSTRAINT fk_fehler_konfiguration_fehlercode FOREIGN KEY (fehlercode) REFERENCES system.tbl_fehler(fehlercode) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ GRANT SELECT, UPDATE, INSERT, DELETE ON system.tbl_fehler_konfiguration TO web;
+ GRANT SELECT, UPDATE, INSERT, DELETE ON system.tbl_fehler_konfiguration TO vilesci;
+ ';
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehler_konfiguration: '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_fehler_konfiguration: Tabelle hinzugefuegt
';
+}
diff --git a/system/filtersupdate.php b/system/filtersupdate.php
index 2ed253422..241e44f2f 100644
--- a/system/filtersupdate.php
+++ b/system/filtersupdate.php
@@ -1038,6 +1038,7 @@ $filters = array(
{"name": "Note"},
{"name": "ErstNachname"},
{"name": "ErstAbgeschickt"},
+ {"name": "ZweitNachname"},
{"name": "ZweitAbgeschickt"}
],
"filters": []
@@ -1124,6 +1125,72 @@ $filters = array(
',
'oe_kurzbz' => null,
),
+ array(
+ 'app' => 'personalverwaltung',
+ 'dataset_name' => 'personalIssueViewer',
+ 'filter_kurzbz' => 'offeneFehlerPersonal',
+ 'description' => '{Alle offenen Fehler}',
+ 'sort' => 1,
+ 'default_filter' => true,
+ 'filter' => '
+ {
+ "name": "Alle offenen Fehler",
+ "columns": [
+ {"name": "Datum"},
+ {"name": "Inhalt"},
+ {"name": "Vorname"},
+ {"name": "Nachname"},
+ {"name": "PersonId"},
+ {"name": "Statuscode"}
+ ],
+ "filters": [
+ {
+ "name": "Statuscode",
+ "operation": "ncontains",
+ "condition": "resolved"
+ }
+ ]
+ }
+ ',
+ 'oe_kurzbz' => null,
+ ),
+ array(
+ 'app' => 'personalverwaltung',
+ 'dataset_name' => 'personalIssueViewer',
+ 'filter_kurzbz' => 'FehlerLetzte7TageBearbeitetPersonal',
+ 'description' => '{Letzten 7 Tage bearbeitet}',
+ 'sort' => 2,
+ 'default_filter' => false,
+ 'filter' => '
+ {
+ "name": "Alle in den letzten 7 Tagen bearbeiteten Fehler",
+ "columns": [
+ {"name": "Datum"},
+ {"name": "Inhalt"},
+ {"name": "Vorname"},
+ {"name": "Nachname"},
+ {"name": "PersonId"},
+ {"name": "Statuscode"},
+ {"name": "Verarbeitet von"},
+ {"name": "Verarbeitet am"}
+ ],
+ "filters": [
+ {
+ "name": "Verarbeitet am",
+ "operation": "lt",
+ "condition": "7",
+ "option": "days"
+ },
+ {
+ "name": "Statuscode",
+ "operation": "contains",
+ "condition": "resolved"
+ }
+ ]
+ }
+ ',
+ 'oe_kurzbz' => null,
+ ),
array(
'app' => 'core',
'dataset_name' => 'fehlerZustaendigkeiten',
@@ -1147,6 +1214,28 @@ $filters = array(
',
'oe_kurzbz' => null
),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'fehlerKonfiguration',
+ 'filter_kurzbz' => 'fehlerKonfiguration',
+ 'description' => '{Fehler Konfiguration}',
+ 'sort' => 1,
+ 'default_filter' => true,
+ 'filter' => '
+ {
+ "name": "Fehler Konfiguration",
+ "columns": [
+ {"name": "konfigurationstyp_kurzbz"},
+ {"name": "fehlercode"},
+ {"name": "fehler_kurzbz"},
+ {"name": "konfiguration"},
+ {"name": "app"}
+ ],
+ "filters": []
+ }
+ ',
+ 'oe_kurzbz' => null
+ ),
array(
'app' => 'core',
'dataset_name' => 'gruppenmanagement',
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index 80d6b1328..28735e07f 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -17823,6 +17823,326 @@ array(
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'fehlerFehlerKonfigurationLaden',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Fehler beim Laden der Fehlerkonfiguration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Error when loading error configuration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'fehlerFehlerLaden',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Fehler beim Laden der Fehler',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Error when loading errors',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'ungueltigerKonfigurationstyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Ungültiger Konfigurationstyp',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Invalid configuration type',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'ungueltigerKonfigurationswert',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Ungültiger Konfigurationswert für Datentyp {0}, Sonderzeichen nicht erlaubt',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Invalid configuration value for data type {0}, special characters not allowed',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'fehlerKonfiguration',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Fehler Konfiguration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Error configuration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationstyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationstyp',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'configuration type',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationswert',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationswert',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'configuration value',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationswertPlatzhalter',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'wert1;wert2;wert3',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'value1;value2;value3',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationswertZuweisen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationswert(e) zuweisen',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Assign configuration value(s)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationsbeschreibung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationsbeschreibung',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Configuration description',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationsdatentyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationsdatentyp',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Configuration data type',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationGespeichert',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfiguration gespeichert',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Configuration saved',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationGespeichertFehler',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Fehler beim Speichern der Konfiguration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Error when saving configuration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationGeloescht',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfiguration gelöscht',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Deleted configuration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationGeloeschtFehler',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Fehler beim Löschen der Konfiguration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Error when deleting configuration',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'fehlermonitoring',
+ 'phrase' => 'konfigurationswertLoeschen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Konfigurationswert(e) löschen',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Delete configuration value(s)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
);
diff --git a/system/vorlage_zip/Inskription.odt b/system/vorlage_zip/Inskription.odt
index d1933cdcb..6471c5cc2 100644
Binary files a/system/vorlage_zip/Inskription.odt and b/system/vorlage_zip/Inskription.odt differ
diff --git a/system/vorlage_zip/InskriptionEng.odt b/system/vorlage_zip/InskriptionEng.odt
new file mode 100644
index 000000000..e26be218e
Binary files /dev/null and b/system/vorlage_zip/InskriptionEng.odt differ
diff --git a/system/xsl/inskription_eng_0.xsl b/system/xsl/inskription_eng_0.xsl
new file mode 100644
index 000000000..c2080a5ec
--- /dev/null
+++ b/system/xsl/inskription_eng_0.xsl
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+ Certificate of Enrolment University of Applied Sciences Demo
+
+
+
+
+
+ To be submitted to (place where the certificate is to be submitted and its reference number, e.g. social security number).
+
+
+ Student number
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ born on , is enrolled as a regular student in
+ (beginning )
+ in the
+
+
+ Bachelor Degree program
+
+
+ Master Degree program
+
+
+ Degree Program
+
+
+
+
+
+
+
+
+
+
+
+ (),
+
+ st
+ nd
+ rd
+ th
+
+ semester (beginning , ).
+
+
+
+
+
+
+
+ Date:
+
+
+ Rector:
+
+
+
+
+
\ No newline at end of file
diff --git a/vilesci/lehre/lehrveranstaltung_details.php b/vilesci/lehre/lehrveranstaltung_details.php
index b7a9d7b8a..bad2a7d93 100644
--- a/vilesci/lehre/lehrveranstaltung_details.php
+++ b/vilesci/lehre/lehrveranstaltung_details.php
@@ -402,7 +402,12 @@
$selected='selected';
else
$selected='';
- $htmlstr .= '';
+
+ $inaktiv = '';
+ if (!$db->db_parse_bool($row->aktiv))
+ $inaktiv = 'disabled';
+
+ $htmlstr .= '';
}
}//#'.$lv->farbe.'
$htmlstr .= '
diff --git a/vilesci/personen/urlaubsverwaltung.php b/vilesci/personen/urlaubsverwaltung.php
index f631aa081..274a04b94 100644
--- a/vilesci/personen/urlaubsverwaltung.php
+++ b/vilesci/personen/urlaubsverwaltung.php
@@ -33,6 +33,7 @@ require_once('../../include/mitarbeiter.class.php');
require_once('../../include/datum.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/addon.class.php');
+require_once('../../include/benutzerfunktion.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
@@ -130,24 +131,37 @@ echo '