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..f6b3ff556 --- /dev/null +++ b/application/controllers/system/issues/IssuesKonfiguration.php @@ -0,0 +1,237 @@ + 'admin:r', + 'getApps' => 'admin:r', + 'getFehlerKonfigurationByApp' => 'admin:r', + 'saveFehlerKonfiguration' => 'admin:rw', + 'deleteKonfiguration' => '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 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/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 index 19442de3c..9c768da02 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -2,6 +2,9 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); +/** + * Library containing database queries for execution of core plausichecks. + */ class PlausicheckLib { private $_ci; // Code igniter instance @@ -30,9 +33,10 @@ class PlausicheckLib * 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) + public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -60,6 +64,12 @@ class PlausicheckLib $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); } @@ -68,10 +78,15 @@ class PlausicheckLib * @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) - { + public function getOrgformStgUngleichOrgformPrestudent( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz); $qry = " @@ -104,16 +119,22 @@ class PlausicheckLib 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($studiengang_kz)) + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) { - $qry .= " AND studiengang.studiengang_kz = ?"; - $params[] = $studiengang_kz; + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; } $qry .= " @@ -127,10 +148,15 @@ class PlausicheckLib * @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) - { + public function getPrestudentMischformOhneOrgform( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz); $qry = " @@ -159,6 +185,12 @@ class PlausicheckLib $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); } @@ -167,10 +199,15 @@ class PlausicheckLib * @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) - { + public function getStgPrestudentUngleichStgStudienplan( + $studiengang_kz = null, + $prestudent_id = null, + $studienordnung_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -206,6 +243,12 @@ class PlausicheckLib $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); } @@ -216,9 +259,10 @@ class PlausicheckLib * 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) + public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -247,6 +291,12 @@ class PlausicheckLib $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); } @@ -254,9 +304,10 @@ class PlausicheckLib * 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) + public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -284,6 +335,12 @@ class PlausicheckLib $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); } @@ -292,10 +349,15 @@ class PlausicheckLib * @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) - { + public function getAusbildungssemPrestudentUngleichAusbildungssemStatus( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); $qry = " @@ -328,6 +390,12 @@ class PlausicheckLib $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); } @@ -336,10 +404,15 @@ class PlausicheckLib * @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) - { + 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; @@ -375,6 +448,12 @@ class PlausicheckLib $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); } @@ -385,10 +464,15 @@ class PlausicheckLib * @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) - { + public function getInskriptionVorLetzerBismeldung( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { // get Bismeldedatum $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); @@ -433,6 +517,12 @@ class PlausicheckLib $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); } @@ -440,9 +530,10 @@ class PlausicheckLib * 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) + public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -486,6 +577,12 @@ class PlausicheckLib $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); } @@ -493,9 +590,10 @@ class PlausicheckLib * 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) + public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -532,6 +630,12 @@ class PlausicheckLib $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); } @@ -540,10 +644,15 @@ class PlausicheckLib * @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) - { + public function getStudienplanUngueltig( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz); $qry = " @@ -588,6 +697,12 @@ class PlausicheckLib $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); } @@ -596,10 +711,15 @@ class PlausicheckLib * @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) - { + public function getFalscheAnzahlAbschlusspruefungen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -647,6 +767,12 @@ class PlausicheckLib $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"; @@ -658,13 +784,23 @@ class PlausicheckLib * @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) - { + 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); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen( + $studiensemester_kurzbz, + $studiengang_kz, + $abschlusspruefung_id, + $exkludierte_studiengang_kz + ); if (isError($pruefungenRes)) return $pruefungenRes; @@ -686,13 +822,23 @@ class PlausicheckLib * @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) - { + 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); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen( + $studiensemester_kurzbz, + $studiengang_kz, + $abschlusspruefung_id, + $exkludierte_studiengang_kz + ); if (isError($pruefungenRes)) return $pruefungenRes; @@ -714,10 +860,15 @@ class PlausicheckLib * @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) - { + public function getBewerberNichtZumRtAngetreten( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes; @@ -762,6 +913,12 @@ class PlausicheckLib $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); } @@ -770,9 +927,10 @@ class PlausicheckLib * @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) + public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array($studiensemester_kurzbz); @@ -802,6 +960,12 @@ class PlausicheckLib $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); } @@ -810,10 +974,15 @@ class PlausicheckLib * @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) - { + public function getAbschlussstatusFehlt( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -882,6 +1051,12 @@ class PlausicheckLib $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); } @@ -890,10 +1065,15 @@ class PlausicheckLib * @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) - { + public function getAktiverStudentstatusOhneKontobuchung( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz); $qry = " @@ -933,6 +1113,12 @@ class PlausicheckLib $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); } @@ -944,10 +1130,15 @@ class PlausicheckLib * @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) - { + public function getGbDatumWeitZurueck( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -984,6 +1175,12 @@ class PlausicheckLib $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); } @@ -993,7 +1190,7 @@ class PlausicheckLib * @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) + public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -1023,6 +1220,12 @@ class PlausicheckLib $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); } @@ -1031,10 +1234,15 @@ class PlausicheckLib * @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) - { + public function getFalscheAnzahlHeimatadressen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -1075,6 +1283,12 @@ class PlausicheckLib $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); } @@ -1083,10 +1297,15 @@ class PlausicheckLib * @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) - { + public function getFalscheAnzahlZustelladressen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -1127,6 +1346,12 @@ class PlausicheckLib $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); } @@ -1138,10 +1363,15 @@ class PlausicheckLib * @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) - { + public function getIncomingHeimatNationOesterreich( + $studiensemester_kurzbz, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array($studiensemester_kurzbz); $qry = " @@ -1173,6 +1403,12 @@ class PlausicheckLib $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); } @@ -1180,9 +1416,10 @@ class PlausicheckLib * 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) + public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) { $params = array(); @@ -1216,6 +1453,12 @@ class PlausicheckLib $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); } @@ -1224,10 +1467,15 @@ class PlausicheckLib * @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) - { + public function getIncomingOrGsFoerderrelevant( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -1278,6 +1526,12 @@ class PlausicheckLib $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); } @@ -1289,9 +1543,14 @@ class PlausicheckLib * @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 + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check */ - private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) - { + private function _getInvalidAbschlusspruefungen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $abschlusspruefung_id = null, + $exkludierte_studiengang_kz = null + ) { $params = array(); $qry = " @@ -1337,6 +1596,12 @@ class PlausicheckLib $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); } 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..caa8dd91c 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->_ci->plausichecklib->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php index 66615220a..e7894c7a8 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->_ci->plausichecklib->getAbschlussstatusFehlt( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php index d55506d68..fa251a95e 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->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php index 2dfd9f866..225c6242f 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->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php index baa35bc57..a9b30a1d2 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->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php index ca967a97f..3462685ab 100644 --- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php +++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php @@ -13,6 +13,9 @@ 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; @@ -20,7 +23,9 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker // get all students failing the plausicheck $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus( $studiensemester_kurzbz, - $studiengang_kz + $studiengang_kz, + null, + $exkludierte_studiengang_kz ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php index 35d954236..a1b1941dd 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->_ci->plausichecklib->getBewerberNichtZumRtAngetreten( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php index 7a2555b69..0d66324fb 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->_ci->plausichecklib->getDatumAbschlusspruefungFehlt( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php index 102a89656..719afc2e2 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->_ci->plausichecklib->getDatumSponsionFehlt( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php index ab8566e47..e1f01f735 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->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php index 7fbe2d828..68b67ec29 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->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php index eac50a88a..f3189eaa5 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->_ci->plausichecklib->getFalscheAnzahlHeimatadressen( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php index e2fc4a781..1fb974aa1 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->_ci->plausichecklib->getFalscheAnzahlZustelladressen( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php index 7a7cf0d6f..5b7326986 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->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php index 76fd477e3..559d31263 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->_ci->plausichecklib->getInaktiverStudentAktiverStatus( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php index 51726d969..113416486 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->_ci->plausichecklib->getIncomingHeimatNationOesterreich( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php index 9681554e5..6eaa9db3f 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->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php index 0e12ccac8..23002b71b 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->_ci->plausichecklib->getIncomingOrGsFoerderrelevant( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php index 672dfa585..d977b4124 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->_ci->plausichecklib->getInskriptionVorLetzerBismeldung( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php index c61531e46..53bd59826 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->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde( + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php index b7ef64c41..d9515a777 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->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php index bfa72b5e0..0d8da4007 100644 --- a/application/libraries/issues/plausichecks/PlausiChecker.php +++ b/application/libraries/issues/plausichecks/PlausiChecker.php @@ -6,11 +6,15 @@ abstract class PlausiChecker { protected $_ci; // code igniter instance + protected $_config; // configuration parameters for this plausicheck - public function __construct() + public function __construct($configurationParams = null) { $this->_ci =& get_instance(); // get code igniter instance + // set configuration + $this->_config = $configurationParams; + // load libraries $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library } diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php index 369085089..e68d840d9 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->_ci->plausichecklib->getPrestudentMischformOhneOrgform( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php index 4eb25ed11..61737cc4d 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->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php index 7175725fd..0c9ce9300 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->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php index 12a7516ef..47ca1fa2a 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->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php index 6b8fe49aa..22924abd8 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->_ci->plausichecklib->getStudienplanUngueltig( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0008.php b/application/libraries/issues/resolvers/CORE_INOUT_0008.php index afa43893a..30bbefdf1 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 { diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0001.php b/application/libraries/issues/resolvers/CORE_PERSON_0001.php index bd94fea59..cf1560171 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 { diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0002.php b/application/libraries/issues/resolvers/CORE_PERSON_0002.php index d1bb2fe94..969b2a5b0 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 { diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0003.php b/application/libraries/issues/resolvers/CORE_PERSON_0003.php index 08fea6c05..8f53d159c 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 { diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0004.php b/application/libraries/issues/resolvers/CORE_PERSON_0004.php index bfe243fd1..9ce9b7b8a 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 { diff --git a/application/libraries/issues/resolvers/CORE_STG_0001.php b/application/libraries/issues/resolvers/CORE_STG_0001.php index 97cef6056..aee3fe0d2 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 { diff --git a/application/libraries/issues/resolvers/CORE_STG_0002.php b/application/libraries/issues/resolvers/CORE_STG_0002.php index fe414de38..dd0e293d4 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 { diff --git a/application/libraries/issues/resolvers/CORE_STG_0003.php b/application/libraries/issues/resolvers/CORE_STG_0003.php index 33cb0846b..9559cdfb5 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 { diff --git a/application/libraries/issues/resolvers/CORE_STG_0004.php b/application/libraries/issues/resolvers/CORE_STG_0004.php index 02d45bbd3..6ecc80863 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php index 78c49810b..1f9dea34d 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php index 23943397a..95da215c1 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php index 6ac243b4f..12e7a8da6 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php index d76215b6a..5cd8b7027 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php index 7f7ca4723..420021289 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php index ba1e5b715..64e28ddc8 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php index 1dd8fdcb2..68523b53b 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php index 83357d9bf..940cb9b4c 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php index b1b5e9876..c55e4a9cc 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php index 1e3a6849b..8da8e9c1d 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php index 233240305..6568d0b3e 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php index 38832edc0..d331ef6a2 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php index 78ad40a8e..e57b0aea0 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 { diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php index 8d96b7c65..b58736f66 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 { 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..8b07157d2 --- /dev/null +++ b/application/views/system/issues/issuesKonfiguration.php @@ -0,0 +1,197 @@ +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'); ?> +
+ + +
+
+ +
+ + +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/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: ` -
+
- [ {{ filterName }} ] - - + [ {{ filterName }} ] + +
-
+
@@ -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 = {
-
+