From 0d03689f570604b995ce0e147c2101141f6796da Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 14 Sep 2022 02:48:43 +0200 Subject: [PATCH 01/40] added IIssueExistsChecker and Issueload->model('system/Issue_model', 'IssueModel'); + + $this->load->library('IssuesLib'); + } + + /** + * Initializes issue resolution. + */ + public function run() + { + $this->logInfo("Issue producer job started"); + + foreach ($this->_codeLibMappings as $fehlercode => $library) + { + // add person id and oe kurzbz automatically as params, merge it with additional params + // decode bewerbung_parameter into assoc array + $params = array_merge( + array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), + isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() + ); + + // if called from extension (extension name set), path includes extension names, otherwise it is the core library folder + $libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : ''; + $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) + { + // log error and continue with next issue if not + $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); + continue; + } + + // load library connected to fehlercode + $this->load->library( + $issuesLibPath . $libName + ); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in libary class + if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) + { + // log error and continue with next issue if not + $this->logError("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); + continue; + } + + // call the function for checking for issue resolution + $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($params); + + if (isError($issueResolvedRes)) + { + $this->logError(getError($issueResolvedRes)); + } + else + { + $issueResolvedData = getData($issueResolvedRes); + + if ($issueResolvedData === true) + { + // set issue to resolved if needed + $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); + + if (isError($behobenRes)) + $this->logError(getError($behobenRes)); + else + $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); + } + } + } + + $this->logInfo("Issue resolve job ended"); + } +} From d5eff7d6154e94e42a00b8164553c337fb6f7a49 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 15 Sep 2022 18:56:18 +0200 Subject: [PATCH 02/40] issue plausichecks: added issue producer files, code formatting --- .../controllers/jobs/PlausiIssueProducer.php | 40 +++++++ application/core/IIssueExistsChecker.php | 10 +- application/core/IssueProducer_Controller.php | 101 +++++++----------- application/core/IssueResolver_Controller.php | 6 +- application/libraries/IssuesLib.php | 14 ++- .../libraries/issues/PlausicheckLib.php | 25 +++++ 6 files changed, 127 insertions(+), 69 deletions(-) create mode 100644 application/controllers/jobs/PlausiIssueProducer.php create mode 100644 application/libraries/issues/PlausicheckLib.php diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php new file mode 100644 index 000000000..03fa6866f --- /dev/null +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -0,0 +1,40 @@ + class (library) name for resolving + $this->_fehlerLibMappings = array( + 'zgvDatumInZukunft' => 'ZgvDatumInZukunft', + 'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', + 'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', + 'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', + 'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', + 'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', + 'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', + 'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', + 'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', + 'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', + 'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' + ); + + $this->load->model('studiensemester_model', 'StudiensemesterModel'); + } + + public function run() + { + $semRes = $this->StudiensemesterModel->getAkt(); + + if (hasData($semRes)) + { + $studiensemester_kurzbz = getData($semRes)[0]->studiensemester_kurzbz; + } + } +} diff --git a/application/core/IIssueExistsChecker.php b/application/core/IIssueExistsChecker.php index 7a79b26ae..0aecaa796 100644 --- a/application/core/IIssueExistsChecker.php +++ b/application/core/IIssueExistsChecker.php @@ -7,9 +7,15 @@ interface IIssueExistsChecker { /** * Checks if an issue exists. - * Classes for checking if a certain issue exists implement this method. * @param array $params parameters needed for issue detection * @return object with success(true) if issue exists, success(false) otherwise */ - public function checkIfIssueExists($params); + public function checkIfIssueExists($paramsForChecking); + + /** + * Produces an issue. + * @param array $params parameters needed for issue detection + * @return object with success(true) if issue exists, success(false) otherwise + */ + public function produceIssue($person_id, $oe_kurzbz, $paramsForProducing); } diff --git a/application/core/IssueProducer_Controller.php b/application/core/IssueProducer_Controller.php index 625702a07..e0de28d88 100644 --- a/application/core/IssueProducer_Controller.php +++ b/application/core/IssueProducer_Controller.php @@ -7,8 +7,9 @@ abstract class IssueProducer_Controller extends JOB_Controller { const ISSUES_FOLDER = 'issues'; const CHECK_ISSUE_EXISTS_METHOD_NAME = 'checkIfIssueExists'; + const PRODUCE_ISSUE_METHOD_NAME = 'produceIssue'; - protected $_codeLibMappings; + protected $_fehlerLibMappings; public function __construct() { @@ -20,73 +21,51 @@ abstract class IssueProducer_Controller extends JOB_Controller } /** - * Initializes issue resolution. + * Initializes issue production. */ - public function run() + public function produceIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $paramsForChecking, $paramsForProduction) { - $this->logInfo("Issue producer job started"); + // get libname from fehler_kurzbz + $libName = $this->_fehlerLibMappings[$fehler_kurzbz]; + + // 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 . '/' : ''; + $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; - foreach ($this->_codeLibMappings as $fehlercode => $library) + // check if library file exists + if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist"); + + // load library connected to fehler_kurzbz + $this->load->library($issuesLibPath . $libName); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in library class + if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) + return error("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); + + // call the function for checking for issue resolution + $issueExistsRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($paramsForChecking); + + if (isError($issueExistsRes)) return $issueExistsRes; + + $issueExistsData = getData($issueExistsRes); + + if ($issueExistsData === true) { - // add person id and oe kurzbz automatically as params, merge it with additional params - // decode bewerbung_parameter into assoc array - $params = array_merge( - array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), - isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() + // write issue if it was detected + $produceRes = $this->{$lowercaseLibName}->{self::PRODUCE_ISSUE_METHOD_NAME}( + $fehler_kurzbz, + isset($params['person_id']) ? $params['person_id'] : null, + isset($params['oe_kurzbz']) ? $params['oe_kurzbz'] : null, + $paramsForProduction ); - // 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 . '/' : ''; - $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; - $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + if (isError($produceRes)) + return $produceRes; - // check if library file exists - if (!file_exists($issuesLibFilePath)) - { - // log error and continue with next issue if not - $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); - continue; - } - - // load library connected to fehlercode - $this->load->library( - $issuesLibPath . $libName - ); - - $lowercaseLibName = mb_strtolower($libName); - - // check if method is defined in libary class - if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) - { - // log error and continue with next issue if not - $this->logError("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); - continue; - } - - // call the function for checking for issue resolution - $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($params); - - if (isError($issueResolvedRes)) - { - $this->logError(getError($issueResolvedRes)); - } - else - { - $issueResolvedData = getData($issueResolvedRes); - - if ($issueResolvedData === true) - { - // set issue to resolved if needed - $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); - - if (isError($behobenRes)) - $this->logError(getError($behobenRes)); - else - $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); - } - } + return success("Issue " . $issue->issue_id . " successfully written"); } - - $this->logInfo("Issue resolve job ended"); } } diff --git a/application/core/IssueResolver_Controller.php b/application/core/IssueResolver_Controller.php index 77d14f408..ec47a060c 100755 --- a/application/core/IssueResolver_Controller.php +++ b/application/core/IssueResolver_Controller.php @@ -73,13 +73,11 @@ abstract class IssueResolver_Controller extends JOB_Controller } // load library connected to fehlercode - $this->load->library( - $issuesLibPath . $libName - ); + $this->load->library($issuesLibPath . $libName); $lowercaseLibName = mb_strtolower($libName); - // check if method is defined in libary class + // check if method is defined in library class if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME))) { // log error and continue with next issue if not diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php index d6488bc36..e31cb88c6 100644 --- a/application/libraries/IssuesLib.php +++ b/application/libraries/IssuesLib.php @@ -169,6 +169,9 @@ class IssuesLib return $this->_changeIssueStatus($issue_id, $data, $user); } + // -------------------------------------------------------------------------------------------------------------- + // Private methods + /** * Changes status of an issue. * @param int $issue_id @@ -215,8 +218,15 @@ class IssuesLib * @param string $inhalt_extern * @return object success or error */ - private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $resolution_params = null, $fehlercode_extern = null, $inhalt_extern = null) - { + private function _addIssue( + $fehlercode, + $person_id = null, + $oe_kurzbz = null, + $fehlertext_params = null, + $resolution_params = null, + $fehlercode_extern = null, + $inhalt_extern = null + ) { if (isEmptyString($person_id) && isEmptyString($oe_kurzbz)) return error("Person_id or oe_kurzbz must be set."); diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php new file mode 100644 index 000000000..26b079c21 --- /dev/null +++ b/application/libraries/issues/PlausicheckLib.php @@ -0,0 +1,25 @@ +_ci =& get_instance(); + + $this->_ci->load->model('', ''); + } + + public function getStudents() + { + $qry = ' + + '; + } +} From 40d8edebef8e3299e22fe43e9a3f3abc30d79116 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sun, 18 Sep 2022 23:02:55 +0200 Subject: [PATCH 03/40] Plausichecks: added run method to IssueProducer_Controller for producing plausicheck issues --- .../controllers/jobs/PlausiIssueProducer.php | 122 +++++++++++++++--- application/core/IIssueExistsChecker.php | 2 +- application/core/IssueProducer_Controller.php | 72 ++++++----- application/core/IssueResolver_Controller.php | 1 - .../libraries/issues/PlausicheckLib.php | 9 +- .../issues/plausichecks/IPlausiChecker.php | 14 ++ .../StgPrestudentUngleichStgStudent.php | 0 7 files changed, 156 insertions(+), 64 deletions(-) create mode 100644 application/libraries/issues/plausichecks/IPlausiChecker.php create mode 100644 application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php index 03fa6866f..d67c8693b 100644 --- a/application/controllers/jobs/PlausiIssueProducer.php +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -3,38 +3,120 @@ /** * Job for producing Plausicheck issues */ -class PlausiIssueProducer extends IssueProducer_Controller +class PlausiIssueProducer extends JOB_Controller { + const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks'; + const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck' + + private _fehlerLibMappings; + public function __construct() { parent::__construct(); - // set fehler codes which can be produced by the job - // structure: fehlercode => class (library) name for resolving + // set fehler which can be produced by the job + // structure: fehler_kurzbz => class (library) name for resolving $this->_fehlerLibMappings = array( - 'zgvDatumInZukunft' => 'ZgvDatumInZukunft', - 'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', - 'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', - 'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', - 'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', - 'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', - 'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', - 'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', - 'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', - 'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', - 'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' + '' => '' + //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', + //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', + //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', + //'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', + //'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', + //'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', + //'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', + //'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', + //'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', + //'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', + //'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' ); + + $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); - $this->load->model('studiensemester_model', 'StudiensemesterModel'); + $this->load->library('IssuesLib'); } - public function run() + /** + * Initializes issue production. + */ + public function run($studiensemester_kurzbz = null) { - $semRes = $this->StudiensemesterModel->getAkt(); - - if (hasData($semRes)) + if (isEmptyString($studiensemester_kurzbz)) { - $studiensemester_kurzbz = getData($semRes)[0]->studiensemester_kurzbz; + $studiensemesterRes = $this->StudiensemesterModel->getAkt(); + + if (isError($studiensemesterRes)) $this->logError(getError($studiensemesterRes)); + + if (hasData($studiensemesterRes)) + { + $studiensemester_kurzbz = getData($studiensemesterRes); + } } + + + $this->logInfo("Plausicheck issue producer job started"); + + foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName) + { + // get path of library for issue to be produced + $issuesLibPath = DOC_ROOT . 'application/libraries' . self::PLAUSI_ISSUES_FOLDER; + $issuesLibFilePath = $issuesLibPath . '/' . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) + { + // log error and continue with next issue if not + $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); + continue; + } + + // load library connected to fehlercode + $this->load->library($issuesLibPath . $libName); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in library class + if (!is_callable(array($this->{$lowercaseLibName}, self::EXECUTE_PLAUSI_CHECK_METHOD_NAME))) + { + // log error and continue with next issue if not + $this->logError("Method " . self::EXECUTE_PLAUSI_CHECK_METHOD_NAME . " is not defined in library $lowercaseLibName"); + continue; + } + + // call the function for checking for issue production + $executePlausiRes = $this->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}(); + + if (isError($executePlausiRes)) + { + $this->logError(getError($executePlausiRes)); + } + else + { + // get the data returned by Plausicheck + $executePlausiData = getData($executePlausiRes); + + if (is_array($executePlausiData)) + { + foreach ($executePlausiData 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); + + if (isError($addIssueRes)) + $this->logError(getError($behobenRes)); + else + $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced"); + } + } + } + } + + $this->logInfo("Plausicheck issue producer job stopped"); } } diff --git a/application/core/IIssueExistsChecker.php b/application/core/IIssueExistsChecker.php index 0aecaa796..7f5a6b6e5 100644 --- a/application/core/IIssueExistsChecker.php +++ b/application/core/IIssueExistsChecker.php @@ -17,5 +17,5 @@ interface IIssueExistsChecker * @param array $params parameters needed for issue detection * @return object with success(true) if issue exists, success(false) otherwise */ - public function produceIssue($person_id, $oe_kurzbz, $paramsForProducing); + //public function produceIssue($person_id, $oe_kurzbz, $paramsForProducing); } diff --git a/application/core/IssueProducer_Controller.php b/application/core/IssueProducer_Controller.php index e0de28d88..6879bc7dd 100644 --- a/application/core/IssueProducer_Controller.php +++ b/application/core/IssueProducer_Controller.php @@ -23,49 +23,53 @@ abstract class IssueProducer_Controller extends JOB_Controller /** * Initializes issue production. */ - public function produceIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $paramsForChecking, $paramsForProduction) - { - // get libname from fehler_kurzbz - $libName = $this->_fehlerLibMappings[$fehler_kurzbz]; + //public function produceIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $paramsForChecking, $paramsForProduction) + //{ + //// get libname from fehler_kurzbz + //$libName = $this->_fehlerLibMappings[$fehler_kurzbz]; - // 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 . '/' : ''; - $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; - $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + //// 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 . '/' : ''; + //$issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + //$issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; - // check if library file exists - if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist"); + //// check if library file exists + //if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist"); - // load library connected to fehler_kurzbz - $this->load->library($issuesLibPath . $libName); + //// load library connected to fehler_kurzbz + //$this->load->library($issuesLibPath . $libName); - $lowercaseLibName = mb_strtolower($libName); + //$lowercaseLibName = mb_strtolower($libName); - // check if method is defined in library class - if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) - return error("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); + //// check if method is defined in library class + //if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) + //return error("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); - // call the function for checking for issue resolution - $issueExistsRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($paramsForChecking); + //// call the function for checking for issue resolution + //$issueExistsRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($paramsForChecking); - if (isError($issueExistsRes)) return $issueExistsRes; + //if (isError($issueExistsRes)) return $issueExistsRes; - $issueExistsData = getData($issueExistsRes); + //$issueExistsData = getData($issueExistsRes); - if ($issueExistsData === true) - { - // write issue if it was detected - $produceRes = $this->{$lowercaseLibName}->{self::PRODUCE_ISSUE_METHOD_NAME}( - $fehler_kurzbz, - isset($params['person_id']) ? $params['person_id'] : null, - isset($params['oe_kurzbz']) ? $params['oe_kurzbz'] : null, - $paramsForProduction - ); + //if ($issueExistsData === true) + //{ + //// write issue if it was detected + ////$produceRes = $this->{$lowercaseLibName}->{self::PRODUCE_ISSUE_METHOD_NAME}( + ////$fehler_kurzbz, + ////isset($params['person_id']) ? $params['person_id'] : null, + ////isset($params['oe_kurzbz']) ? $params['oe_kurzbz'] : null, + ////$paramsForProduction + ////); - if (isError($produceRes)) - return $produceRes; + ////if (isError($produceRes)) + ////return $produceRes; - return success("Issue " . $issue->issue_id . " successfully written"); - } - } + //$addIssueres = $this->IssuesLib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); + + //if (isError()) + + //return success("Issue " . $issue->issue_id . " successfully written"); + //} + //} } diff --git a/application/core/IssueResolver_Controller.php b/application/core/IssueResolver_Controller.php index ec47a060c..d6eda8afb 100755 --- a/application/core/IssueResolver_Controller.php +++ b/application/core/IssueResolver_Controller.php @@ -43,7 +43,6 @@ abstract class IssueResolver_Controller extends JOB_Controller } else { - $openIssues = getData($openIssuesRes); foreach ($openIssues as $issue) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 26b079c21..16c423aa3 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -2,7 +2,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -class Lib +class PlausicheckLib { private $_ci; // Code igniter instance @@ -15,11 +15,4 @@ class Lib $this->_ci->load->model('', ''); } - - public function getStudents() - { - $qry = ' - - '; - } } diff --git a/application/libraries/issues/plausichecks/IPlausiChecker.php b/application/libraries/issues/plausichecks/IPlausiChecker.php new file mode 100644 index 000000000..415bc4735 --- /dev/null +++ b/application/libraries/issues/plausichecks/IPlausiChecker.php @@ -0,0 +1,14 @@ + Date: Sun, 18 Sep 2022 23:11:43 +0200 Subject: [PATCH 04/40] system/checkStudenten: corrected typo in Studierenden Orgform Plausicheck text output --- system/checkStudenten.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/checkStudenten.php b/system/checkStudenten.php index 2590574db..14c4f2239 100644 --- a/system/checkStudenten.php +++ b/system/checkStudenten.php @@ -492,7 +492,7 @@ if ($result = $db->db_query($qry)) /* * Studierende im aktuellen StSem die in Mischformstudiengängen keine Orgform eingetragen haben */ -$text .= "

Suche alle Bewerber die keine Orgform eingetragen haben.

"; +$text .= "

Suche alle Studierenden die keine Orgform eingetragen haben.

"; $qry = " SELECT From 0643b99e8665169c55b3a77968fd7ac1557f664f Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 21 Sep 2022 19:50:30 +0200 Subject: [PATCH 05/40] added Plausicheck fehler (for issues) to database --- system/fehlerupdate.php | 195 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 1a8b705e6..882406574 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -106,7 +106,202 @@ $fehlerArr = array( 'fehlertext' => 'Erworbene ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' + ), + + /** Plausichecks **/ + array( + 'fehlercode' => 'CORE_INOUT_0007', + 'fehler_kurzbz' => 'IncomingHeimatNationOesterreich', + 'fehlercode_extern' => null, + 'fehlertext' => 'Heimatnation bei Incoming Österreich', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_INOUT_0008', + 'fehler_kurzbz' => 'IncomingOhneIoDatensatz', + 'fehlercode_extern' => null, + 'fehlertext' => 'Incoming hat keinen IO Datensatz', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STG_0001', + 'fehler_kurzbz' => 'StgPrestudentUngleichStgStudent', + 'fehlercode_extern' => null, + 'fehlertext' => 'Studiengang des Prestudenten ist ungleich dem Studiengang des Studenten. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STG_0002', + 'fehler_kurzbz' => 'OrgformStgUngleichOrgformPrestudent', + 'fehlercode_extern' => null, + 'fehlertext' => 'Organisationsform des Studienganges stimmt nicht mit Organisationsformen der Studenten überein. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STG_0003', + 'fehler_kurzbz' => 'PrestudentMischformOhneOrgform', + 'fehlercode_extern' => null, + 'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang ist nicht eingetragen. (Studiensemester %s, prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STG_0004', + 'fehler_kurzbz' => 'PrestudentStgUngleichStgStudienplan', + 'fehlercode_extern' => null, + 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0001', + 'fehler_kurzbz' => 'AbbrecherAktiv', + 'fehlercode_extern' => null, + 'fehlertext' => 'AbbrecherIn hat aktiven Benutzer. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0002', + 'fehler_kurzbz' => 'StudentstatusNachAbbrecher', + 'fehlercode_extern' => null, + 'fehlertext' => 'Aktiver Status nach Abbrecher Status. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0003', + 'fehler_kurzbz' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus', + 'fehlercode_extern' => null, + 'fehlertext' => 'Aktuelles Ausbildungssemester bei StudentIn stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0004', + 'fehler_kurzbz' => 'InaktiverStudentAktiverStatus', + 'fehlercode_extern' => null, + 'fehlertext' => 'Inaktiver Benutzer hat aktiven Status. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0005', + 'fehler_kurzbz' => 'InskriptionVorLetzerBismeldung', + 'fehlercode_extern' => null, + 'fehlertext' => 'Datum der Inskription liegt vor dem Datum der letzten BIS-Meldung. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0006', + 'fehler_kurzbz' => 'DatumStudiensemesterFalscheReihenfolge', + 'fehlercode_extern' => null, + 'fehlertext' => 'Datum und Studiensemester sind bei den Status in falscher Reihenfolge. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0007', + 'fehler_kurzbz' => 'AktiverStudentOhneStatus', + 'fehlercode_extern' => null, + 'fehlertext' => 'Aktive/r StudentIn ohne Status im Studiensemester %s (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0008', + 'fehler_kurzbz' => 'StudienplanUngueltig', + 'fehlercode_extern' => null, + 'fehlertext' => 'Studienplan ist im Ausbildungssemester %s nicht gültig (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0009', + 'fehler_kurzbz' => 'FalscheAnzahlAbschlusspruefungen', + 'fehlercode_extern' => null, + 'fehlertext' => 'Mehrere oder keine bestandenen Abschlussprüfungen (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0010', + 'fehler_kurzbz' => 'DatumAbschlusspruefungFehlt', + 'fehlercode_extern' => null, + 'fehlertext' => 'Kein Abschlussprüfung Datum (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0011', + 'fehler_kurzbz' => 'DatumSponsionFehlt', + 'fehlercode_extern' => null, + 'fehlertext' => 'Kein Sponsionsdatum (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0012', + 'fehler_kurzbz' => 'BewerberNichtZumRtAngetreten', + 'fehlercode_extern' => null, + 'fehlertext' => 'Bewerber nicht zum Reihungstest angetreten (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0013', + 'fehler_kurzbz' => 'AktSemesterNull', + 'fehlercode_extern' => null, + 'fehlertext' => 'Aktuelles Ausbildungssemester ist 0 (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0014', + 'fehler_kurzbz' => 'AbschlussstatusFehlt', + 'fehlercode_extern' => null, + 'fehlertext' => 'Kein Abschlussstatus (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_PERSON_0001', + 'fehler_kurzbz' => 'GbDatumWeitZurueck', + 'fehlercode_extern' => null, + 'fehlertext' => 'Geburtsdatum vor dem 01.01.1920.', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_PERSON_0002', + 'fehler_kurzbz' => 'NationNichtOeAberGmeinde', + 'fehlercode_extern' => null, + 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde angegeben', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_PERSON_0003', + 'fehler_kurzbz' => 'FalscheAnzahlHeimatadressen', + 'fehlercode_extern' => null, + 'fehlertext' => 'Es sind mehrere oder keine Heimatadressen eingetragen', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_PERSON_0004', + 'fehler_kurzbz' => 'NationNichtOeAberGmeinde', + 'fehlercode_extern' => null, + 'fehlertext' => 'Es sind mehrere oder keine Zustelladressen eingetragen', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' ) + /** Plausichecks end **/ ); // Loop through the filters array From 5d1e99a222621326daebe05af084de0fcb738a7b Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 21 Sep 2022 19:54:20 +0200 Subject: [PATCH 06/40] Plausichecks: enabled passing of params to plausi issue checkers, created first checker StgPrestudentUngleichStgStudent --- .../controllers/jobs/PlausiIssueProducer.php | 30 +++++++------ .../StgPrestudentUngleichStgStudent.php | 43 +++++++++++++++++++ 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php index d67c8693b..39fff1c72 100644 --- a/application/controllers/jobs/PlausiIssueProducer.php +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -6,9 +6,9 @@ class PlausiIssueProducer extends JOB_Controller { const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks'; - const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck' + const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck'; - private _fehlerLibMappings; + private $_fehlerLibMappings; public function __construct() { @@ -17,7 +17,7 @@ class PlausiIssueProducer extends JOB_Controller // set fehler which can be produced by the job // structure: fehler_kurzbz => class (library) name for resolving $this->_fehlerLibMappings = array( - '' => '' + 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent' //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', @@ -47,20 +47,17 @@ class PlausiIssueProducer extends JOB_Controller if (isError($studiensemesterRes)) $this->logError(getError($studiensemesterRes)); - if (hasData($studiensemesterRes)) - { - $studiensemester_kurzbz = getData($studiensemesterRes); - } + if (hasData($studiensemesterRes)) $studiensemester_kurzbz = getData($studiensemesterRes); } - $this->logInfo("Plausicheck issue producer job started"); foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName) { // get path of library for issue to be produced - $issuesLibPath = DOC_ROOT . 'application/libraries' . self::PLAUSI_ISSUES_FOLDER; - $issuesLibFilePath = $issuesLibPath . '/' . $libName . '.php'; + $issuesLibPath = DOC_ROOT . 'application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'; + //$issuesLibPath = base_url('application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'); + $issuesLibFilePath = $issuesLibPath . $libName . '.php'; // check if library file exists if (!file_exists($issuesLibFilePath)) @@ -71,7 +68,7 @@ class PlausiIssueProducer extends JOB_Controller } // load library connected to fehlercode - $this->load->library($issuesLibPath . $libName); + $this->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName); $lowercaseLibName = mb_strtolower($libName); @@ -83,8 +80,13 @@ class PlausiIssueProducer extends JOB_Controller continue; } + // get the data needed for issue check + $paramsForCheck = array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ); + // call the function for checking for issue production - $executePlausiRes = $this->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}(); + $executePlausiRes = $this->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($paramsForCheck); if (isError($executePlausiRes)) { @@ -106,10 +108,10 @@ class PlausiIssueProducer extends JOB_Controller $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); + $addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); if (isError($addIssueRes)) - $this->logError(getError($behobenRes)); + $this->logError(getError($addIssueRes)); else $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced"); } diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php index e69de29bb..2092ab602 100644 --- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php @@ -0,0 +1,43 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library + + // get all students failing the plausicheck + $prestudentRes = $this->_ci->plausichecklib->getPrestudentenStgUngleichStgStudent(); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + return success($results); + } +} From edb69498e541b95b7e55a33aa90f40e467a128b7 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 21 Sep 2022 19:55:37 +0200 Subject: [PATCH 07/40] added PlausicheckLib for checking plausi issues --- .../libraries/issues/PlausicheckLib.php | 1034 ++++++++++++++++- 1 file changed, 1032 insertions(+), 2 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 16c423aa3..f443a9675 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -5,14 +5,1044 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class PlausicheckLib { private $_ci; // Code igniter instance + private $_db; // database object /** * Object initialization */ public function __construct() { - $this->_ci =& get_instance(); + $this->_ci =& get_instance(); // get ci instance - $this->_ci->load->model('', ''); + // load models + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + // get database for queries + $this->_db = new DB_Model(); + } + + //------------------------------------------------------------------------------------------------------------------ + // Studiengang checks + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getPrestudentenStgUngleichStgStudent($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + pre.prestudent_id, stud.student_uid, pers.person_id, + pre.studiengang_kz prestudent_studiengang, stud.studiengang_kz student_studiengang, + stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz + WHERE + stud.studiengang_kz != pre.studiengang_kz"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + studiengang.orgform_kurzbz as studorgkz, student.student_uid, + prestudentstatus.orgform_kurzbz as studentorgkz, student.studiengang_kz studiengang + FROM + public.tbl_studiengang studiengang + JOIN public.tbl_student student using(studiengang_kz) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus prestudentstatus using(prestudent_id) + JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) + WHERE + benutzer.aktiv = true + AND prestudentstatus.status_kurzbz='Student' + AND studiengang.studiengang_kz < 10000 + AND prestudentstatus.studiensemester_kurzbz = ? + AND NOT EXISTS( + SELECT 1 FROM lehre.tbl_studienplan JOIN lehre.tbl_studienordnung USING(studienordnung_id) + WHERE + tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz + AND tbl_studienplan.orgform_kurzbz = prestudentstatus.orgform_kurzbz)"; + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + $qry .= " + ORDER BY student_uid"; + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang + FROM + public.tbl_prestudent + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + tbl_prestudentstatus.status_kurzbz IN ('Bewerber', 'Student') + AND tbl_studiengang.mischform + AND (tbl_prestudentstatus.orgform_kurzbz='' OR tbl_prestudentstatus.orgform_kurzbz IS NULL) + AND tbl_prestudentstatus.studiensemester_kurzbz=?"; + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getPrestudentStgUngleichStgStudienplan($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + distinct tbl_person.vorname, tbl_person.nachname, + tbl_prestudent.studiengang_kz as studiengang, + tbl_prestudent.prestudent_id + FROM + public.tbl_prestudent + JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN public.tbl_person USING(person_id) + WHERE + tbl_prestudent.studiengang_kz<>tbl_studienordnung.studiengang_kz"; + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + //------------------------------------------------------------------------------------------------------------------ + // Studentstatus checks + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getAbbrecherAktiv($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + pre_status.status_kurzbz, benutzer.aktiv, benutzer.uid, student.studiengang_kz studiengang + FROM + public.tbl_prestudentstatus pre_status + JOIN public.tbl_prestudent pre using(prestudent_id) + JOIN public.tbl_student student using(prestudent_id) + JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid) + WHERE + pre_status.status_kurzbz ='Abbrecher' and benutzer.aktiv=true"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getStudentstatusNachAbbrecher($prestudent_id = null) + { + $params = array(); + $result = array(); + + $qry = " + SELECT + student.student_uid, prestudent.prestudent_id, student.studiengang_kz studiengang + FROM + public.tbl_student student + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus using(prestudent_id) + WHERE + prestatus.status_kurzbz = 'Abbrecher'"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + $qryRes = $this->_db->execReadOnlyQuery($qry, $params); + + if (isError($qryRes)) return $qryRes; + + if (hasData($qryRes)) + { + $students = getData($qryRes); + + foreach ($students as $student) + { + $lastStatusRes = $this->_ci->PrestudentModel->getLastStatus($student->prestudent_id); + + if (isError($lastStatusRes)) return $lastStatusRes; + + if (hasData($lastStatusRes)) + { + $lastStatus = getData($lastStatusRes)[0]->status_kurzbz; + + if ($lastStatus != 'Abbrecher') $result[] = $student; + } + } + } + + return success($result); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); + + $qry = " + SELECT + distinct(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, + lv.semester, student.studiengang_kz studiengang + FROM + public.tbl_student student + JOIN public.tbl_studentlehrverband lv using(student_uid) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus status using(prestudent_id) + WHERE + status.studiensemester_kurzbz = ? + AND lv.studiensemester_kurzbz = ? + AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher') + AND get_rolle_prestudent (prestudent_id, ?)='Student' + AND status.ausbildungssemester != lv.semester"; + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + distinct(student.student_uid), student.studiengang_kz studiengang + FROM + public.tbl_benutzer benutzer + JOIN public.tbl_student student on(benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + WHERE + benutzer.aktiv=false + AND get_rolle_prestudent(prestudent_id, ?) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')"; + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + $results = array(); + + // get active students + $qry = " + SELECT + DISTINCT(student.student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + FROM + public.tbl_benutzer benutzer + JOIN public.tbl_student student on(benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus using(prestudent_id) + WHERE + benutzer.aktiv=true + AND prestatus.studiensemester_kurzbz = ?"; + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + $qryRes = $this->_db->execReadOnlyQuery($qry, $params); + + if (isError($qryRes)) return $qryRes; + + if (hasData($qryRes)) + { + $students = getData($qryRes); + + // get Bismeldedatum + $datumBis = $this->_getDateForInscription($studiensemester_kurzbz); + + foreach ($students as $student) + { + // get first Status of student + $firstStatusRes = $this->_ci->PrestudentstatusModel->getFirstStatus($student->prestudent_id, 'Student'); + + if (isError($firstStatusRes)) return $firstStatusRes; + + if (hasData($firstStatusRes)) + { + $datumInscription = date_format(date_create(getData($firstStatusRes)[0]->datum), 'Y-m-d'); + + // if student inscription was before Bismeldedatum + if ($datumInscription < $datumBis) + { + // add the student to result with dates for info output + $student->datum_inskription = $datumInscription; + $student->datum_bismeldung = $datumBis; + + $results[] = $student; + } + } + } + } + + return success($results); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + $rsults = array(); + + // all active students with Status student in current semester + $qry = " + SELECT + DISTINCT(student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + FROM + public.tbl_student student + JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus status using(prestudent_id) + WHERE + benutzer.aktiv=true + AND status.status_kurzbz='Student' + AND status.studiensemester_kurzbz=?"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + $qryRes = $this->_db->execReadOnlyQuery($qry, $params); + + if (isError($qryRes)) return $qryRes; + + if (hasData($qryRes)) + { + $students = getData($qryRes); + + foreach ($students as $student) + { + // get all status of student, sorted by semester start + $qryOrderSemester = " + SELECT + status.* + FROM + public.tbl_prestudentstatus status + JOIN public.tbl_studiensemester semester using(studiensemester_kurzbz) + WHERE + prestudent_id = ? + ORDER BY semester.start DESC, status.datum DESC;" + + $qryOrderSemesterRes = $this->_db->execReadOnlyQuery($qryOrderSemester, array($student->prestudent_id)); + + if (isError($qryOrderSemesterRes)) return $qryOrderSemesterRes; + + $prestudentsSemesterSorted = hasData($qryOrderSemesterRes) ? getData($qryOrderSemesterRes) : array(); + + // get all status of student, sorted by status date + $this->PrestudentstatusModel->addSelect('studiensemester_kurzbz'); + $this->PrestudentstatusModel->addOrder('datum DESC, insertamum DESC'); + $qryOrderDateRes=$this->PrestudentstatusModel->loadWhere(array('prestudent_id' => $student->prestudent_id)); + + if (isError($qryOrderDateRes)) return $qryOrderDateRes; + + $prestudentsDateSorted = hasData($qryOrderDateRes) ? getData($qryOrderDateRes) : array(); + + // check if differently sorted status have same Studiensemester order + $countStatus = count($prestudentsSemesterSorted); + + for ($i = 0; $i < $countStatus; $i++) + { + if ($prestudentsSemesterSorted[$i]->studiensemester_kurzbz != $prestudentsDateSorted[$i]->studiensemester_kurzbz) + { + $results[] = $student; + break; + } + } + } + } + + return success($results); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getAktiverStudentOhneStatus($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array(); + $results = array(); + + $qry = " + SELECT + DISTINCT (student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + FROM + public.tbl_student student + JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudentstatus status using(prestudent_id) + WHERE + benutzer.aktiv=true"; + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + $qryRes = $this->_db->execReadOnlyQuery($qry, $params); + + if (isError($qryRes)) return $qryRes; + + if (hasData($qryRes)) + { + $students = getData($qryRes); + + $nextStudiensemesterRes = $this->_ci->StudiensemesterModel->getNextFrom($studiensemester_kurzbz); + + if (isError($nextStudiensemesterRes)) return $nextStudiensemesterRes; + + if (hasData($nextStudiensemesterRes)) + { + $nextStudiensemester = getData($nextStudiensemesterRes)[0]; + + foreach ($students as $student) + { + $lastStatusCurrSemRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id, $studiensemester_kurzbz); + + if (isError($lastStatusCurrSemRes)) return $lastStatusCurrSemRes; + + $lastStatusNextSemRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id, $nextStudiensemester); + + if (isError($lastStatusNextSemRes)) return $lastStatusNextSemRes; + + if (!hasData($lastStatusCurrSemRes) && !hasData($lastStatusNextSemRes)) + $results[] = $student; + } + } + } + + return success($results); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getStudienplanUngueltig($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + distinct tbl_person.vorname, tbl_person.nachname, + tbl_prestudent.prestudent_id, + tbl_studienplan.bezeichnung, + tbl_prestudent.studiengang_kz as studiengang, + tbl_prestudentstatus.status_kurzbz, + tbl_prestudentstatus.studiensemester_kurzbz, + tbl_prestudentstatus.ausbildungssemester + FROM + public.tbl_prestudent + JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + JOIN lehre.tbl_studienplan USING(studienplan_id) + WHERE + status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener') + AND NOT EXISTS ( + SELECT + 1 + FROM + lehre.tbl_studienplan_semester + WHERE + studienplan_id=tbl_prestudentstatus.studienplan_id + AND tbl_studienplan_semester.semester = tbl_prestudentstatus.ausbildungssemester + AND tbl_studienplan_semester.studiensemester_kurzbz = tbl_prestudentstatus.studiensemester_kurzbz + ) + AND tbl_prestudentstatus.studiensemester_kurzbz=?"; + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT * FROM ( + SELECT + DISTINCT pre.prestudent_id, student_uid, + ( + SELECT COUNT(*) + FROM lehre.tbl_abschlusspruefung + WHERE student_uid = stud.student_uid + AND abschlussbeurteilung_kurzbz != 'nicht' + AND abschlussbeurteilung_kurzbz IS NOT NULL + ) AS anzahl_abschlusspruefungen + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + status_kurzbz = 'Absolvent' + AND studiensemester_kurzbz = ? + AND stg.melderelevant + AND NOT EXISTS ( /* exclude gs */ + SELECT 1 + FROM bis.tbl_mobilitaet + WHERE prestudent_id = pre.prestudent_id + AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz + ) + ) studenten + WHERE anzahl_abschlusspruefungen != 1"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array(); + $results = array(); + + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id); + + if (isError($pruefungenRes)) return $pruefungenRes; + + if (hasData($pruefungenRes)) + { + $pruefungen = getData($pruefungenRes); + + foreach ($pruefungen as $pruefung) + { + if (isEmptyString($pruefung->datum)) $results[] = $pruefung; + } + } + + return success($results); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getDatumSponsionFehlt($prestudent_id = null) + { + $params = array(); + $results = array(); + + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id); + + if (isError($pruefungenRes)) return $pruefungenRes; + + if (hasData($pruefungenRes)) + { + $pruefungen = getData($pruefungenRes); + + foreach ($pruefungen as $pruefung) + { + if (isEmptyString($pruefung->sponsion)) $results[] = $pruefung; + } + } + + return success($results); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $prestudent_id = null) + { + $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes; + + $previousStudiensemester = hasData($previousStudiensemesterRes) ? getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz : ''; + + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + vorname, nachname, tbl_prestudent.prestudent_id, studiengang_kz + FROM + public.tbl_prestudent + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_person USING(person_id) + LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) + WHERE + AND status_kurzbz='Bewerber' + AND reihungstestangetreten=false"; + + if (!isEmptyString($previousStudiensemester)) + { + $qry .= "AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)"; + $params[] = $previousStudiensemester; + } + else + { + $qry .= "AND studiensemester_kurzbz=?"; + } + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getAktSemesterNull($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT pre.prestudent_id + FROM + public.tbl_prestudent pre + JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) + WHERE + prestat.status_kurzbz != 'Incoming' + AND ausbildungssemester = 0"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getAbschlussstatusFehlt($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang + FROM + public.tbl_prestudent + JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS( + SELECT + 1 + FROM + public.tbl_prestudentstatus ps + JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) + WHERE + prestudent_id=tbl_prestudent.prestudent_id + AND tbl_studiensemester.ende>now() + ) + AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id) + AND NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus ps + WHERE + prestudent_id=tbl_prestudent.prestudent_id + AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') + )"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + //------------------------------------------------------------------------------------------------------------------ + // Person checks + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getGbDatumWeitZurueck($studiensemester_kurzbz, $person_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + pers.person_id + FROM + public.tbl_person pers + WHERE + pers.gebdatum < '1920-01-01' + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudent + JOIN public.tbl_prestudentstatus USING(prestudent_id) + WHERE person_id = pers.person_id AND studiensemester_kurzbz = ?)"; + + if (isset($person_id)) + { + $qry .= " AND pers.person_id = ?"; + $params[] = $person_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getNationNichtOeAberGmeinde($person_id = null) + { + $params = array(); + + $qry = "SELECT DISTINCT tbl_person.person_id + FROM + public.tbl_adresse + JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_benutzer ON(uid=student_uid) + WHERE + tbl_adresse.nation!='A' + AND tbl_benutzer.aktiv + AND gemeinde NOT IN ('Münster') + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = tbl_adresse.gemeinde)"; + + if (isset($person_id)) + { + $qry .= " AND tbl_person.person_id = ?"; + $params[] = $person_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getFalscheAnzahlHeimatadressen($person_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT person_id + FROM + ( + SELECT person_id, COUNT(adresse_id) AS anzahl_adressen + FROM public.tbl_adresse addr + WHERE heimatadresse IS TRUE + GROUP BY person_id + ) adressen + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_student USING(prestudent_id) + WHERE + anzahl_adressen != 1"; + + if (isset($person_id)) + { + $qry .= " AND person_id = ?"; + $params[] = $person_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getFalscheAnzahlZustelladressen($person_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT person_id + FROM + ( + SELECT person_id, COUNT(adresse_id) AS anzahl_adressen + FROM public.tbl_adresse addr + WHERE zustelladresse IS TRUE + GROUP BY person_id + ) adressen + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_student USING(prestudent_id) + WHERE + anzahl_adressen != 1"; + + if (isset($person_id)) + { + $qry .= " AND person_id = ?"; + $params[] = $person_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + //------------------------------------------------------------------------------------------------------------------ + // I/O checks + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getIncomingHeimatNationOesterreich($person_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT pers.person_id + FROM + public.tbl_prestudent pre + JOIN public.tbl_prestudentstatus prestatus + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_adresse addr USING(person_id) + WHERE + prestat.status_kurzbz = 'Incoming' + AND addr.nation = 'A' + AND addr.heimatadresse"; + + if (isset($person_id)) + { + $qry .= " AND pers.person_id = ?"; + $params[] = $person_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Studiengang must be the same for prestudent and student. + * @param int prestudent_id if check is to be executed only for one prestudent + * @return success with prestudents or error + */ + public function getIncomingOhneIoDatensatz($prestudent_id = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT ON(student_uid, nachname, vorname), + tbl_person.person_id, + tbl_prestudent.prestudent_id + FROM + public.tbl_student + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz) + WHERE + bismelden=TRUE + -- AND tbl_student.studiengang_kz=? + AND (status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid))"; + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + pre.prestudent_id, stud.student_uid, pruefung.datum, pruefung.sponsion + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid + WHERE + status_kurzbz = 'Absolvent' + AND studiensemester_kurzbz = ? + AND stg.melderelevant + AND NOT EXISTS ( /* exclude gs */ + SELECT 1 + FROM bis.tbl_mobilitaet + WHERE prestudent_id = pre.prestudent_id + AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz + ) + AND abschlussbeurteilung_kurzbz!='nicht' + AND abschlussbeurteilung_kurzbz IS NOT NULL + AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL)"; + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + private function _getDateForInscription($studiensemester_kurzbz) + { + $semesterYear = substr($studiensemester_kurzbz, 2, 6); + $semesterType = substr($studiensemester_kurzbz, 0, 2); + + if ($semesterType == 'SS') + { + $date = "15.11.".($semesterYear - 1); + $date = date_format(date_create($date), 'Y-m-d'); + return $date; + } + + if ($semesterType == 'WS') + { + $date = '15.04'.$semesterYear; + $date = date_format(date_create($date, 'Y-m-d')); + return $date; + } } } From 2c475f8bde006cc8fb1bc20371d634327b1a2fad Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 22 Sep 2022 19:54:18 +0200 Subject: [PATCH 08/40] fehlerupdate: renamed NationNichtOesterreichAberGemeinde Plausicheck, PlausicheckLib: added comments --- .../libraries/issues/PlausicheckLib.php | 70 +++++++++++-------- system/fehlerupdate.php | 2 +- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index f443a9675..2fd46a3d8 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -26,7 +26,7 @@ class PlausicheckLib // Studiengang checks /** - * Studiengang must be the same for prestudent and student. + * Studiengang should be the same for prestudent and student. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -58,7 +58,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Orgform of a Studiengang in Studienplan should be the same as orgform of student. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -100,7 +100,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students in "mixed" Studiengang should have Orgform. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -132,7 +132,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Studiengang should be the same for prestudent and studienplan. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -142,7 +142,7 @@ class PlausicheckLib $qry = " SELECT - distinct tbl_person.vorname, tbl_person.nachname, + DISTINCT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang, tbl_prestudent.prestudent_id FROM @@ -167,7 +167,7 @@ class PlausicheckLib // Studentstatus checks /** - * Studiengang must be the same for prestudent and student. + * Abbrecher cannot be active. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -196,7 +196,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * There shouldn't be any status after Abbrecher status. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -248,7 +248,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Ausbildungssemester of prestudent must be the same as Ausbildungssemester of prestudentstatus. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -258,7 +258,7 @@ class PlausicheckLib $qry = " SELECT - distinct(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, + DISTINCT(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, lv.semester, student.studiengang_kz studiengang FROM public.tbl_student student @@ -282,7 +282,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students with inactive status shouldn't have an active Benutzer. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -292,7 +292,7 @@ class PlausicheckLib $qry = " SELECT - distinct(student.student_uid), student.studiengang_kz studiengang + DISTINCT(student.student_uid), student.studiengang_kz studiengang FROM public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) @@ -311,7 +311,9 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students of a semester shouldn't start studies before the date of Bismeldung. + * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020 + * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022 * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -348,7 +350,7 @@ class PlausicheckLib $students = getData($qryRes); // get Bismeldedatum - $datumBis = $this->_getDateForInscription($studiensemester_kurzbz); + $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); foreach ($students as $student) { @@ -378,7 +380,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Status Dates and status studysemester dates should be in correct order. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -461,7 +463,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students with active Benutzer should have a status in the current semester. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -523,7 +525,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Studiengang should be valid in current Ausbildungssemester of prestudent. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -533,7 +535,7 @@ class PlausicheckLib $qry = " SELECT - distinct tbl_person.vorname, tbl_person.nachname, + DISTINCT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_studienplan.bezeichnung, tbl_prestudent.studiengang_kz as studiengang, @@ -569,7 +571,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students with finished studies should have exactly one final exam. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -616,7 +618,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Date of final exam shouldn't be missing for Absolvent. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -643,7 +645,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Date of sponsion shouldn't be missing for Absolvent. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -670,7 +672,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Bewerber should have participated in Reihungstest. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -716,7 +718,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Current Ausbildungssemester shouldn't be 0. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -744,7 +746,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Prestudent should have a final status. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -789,7 +791,7 @@ class PlausicheckLib // Person checks /** - * Studiengang must be the same for prestudent and student. + * Birthdate is too long ago. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -820,11 +822,11 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Nation is not Austria, but address has austrian Gemeinde. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getNationNichtOeAberGmeinde($person_id = null) + public function getNationNichtOesterreichAberGemeinde($person_id = null) { $params = array(); @@ -851,7 +853,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students should have exactly one home address. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -885,7 +887,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Students should have exactly one delivery address. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -922,7 +924,7 @@ class PlausicheckLib // I/O checks /** - * Studiengang must be the same for prestudent and student. + * Incoming shouldn't have austrian home address. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -953,7 +955,7 @@ class PlausicheckLib } /** - * Studiengang must be the same for prestudent and student. + * Incoming should have IN/OUT data. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -990,6 +992,9 @@ class PlausicheckLib //------------------------------------------------------------------------------------------------------------------ // Private methods + /** + * Get final exams in a semester which are invalid (e.g. missing data) + */ private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id = null) { $params = array($studiensemester_kurzbz); @@ -1026,7 +1031,10 @@ class PlausicheckLib return $this->_db->execReadOnlyQuery($qry, $params); } - private function _getDateForInscription($studiensemester_kurzbz) + /** + * Gets Bismeldedate from Studiensemester. + */ + private function _getBisdateFromSemester($studiensemester_kurzbz) { $semesterYear = substr($studiensemester_kurzbz, 2, 6); $semesterType = substr($studiensemester_kurzbz, 0, 2); diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 882406574..3198f0e0c 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -279,7 +279,7 @@ $fehlerArr = array( ), array( 'fehlercode' => 'CORE_PERSON_0002', - 'fehler_kurzbz' => 'NationNichtOeAberGmeinde', + 'fehler_kurzbz' => 'NationNichtOesterreichAberGemeinde', 'fehlercode_extern' => null, 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde angegeben', 'fehlertyp_kurzbz' => 'error', From 9bae6bb0a479f4377072b05c3e4b06baa7608b03 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 26 Sep 2022 00:41:48 +0200 Subject: [PATCH 09/40] added params to plausicheck libraries, added PlausicheckProducerLib to enable execution of plausichecks for GUI as well, removed old IssueProducer_Controller --- .../controllers/jobs/PlausiIssueProducer.php | 117 ++---- application/core/IssueProducer_Controller.php | 75 ---- .../libraries/issues/PlausicheckLib.php | 381 +++++++++++++----- .../issues/PlausicheckProducerLib.php | 84 ++++ .../issues/plausichecks/AbbrecherAktiv.php | 45 +++ .../plausichecks/AbschlussstatusFehlt.php | 45 +++ .../issues/plausichecks/AktSemesterNull.php | 45 +++ .../plausichecks/AktiverStudentOhneStatus.php | 46 +++ ...PrestudentUngleichAusbildungssemStatus.php | 46 +++ .../BewerberNichtZumRtAngetreten.php | 46 +++ .../DatumAbschlusspruefungFehlt.php | 46 +++ .../plausichecks/DatumSponsionFehlt.php | 46 +++ ...DatumStudiensemesterFalscheReihenfolge.php | 46 +++ .../FalscheAnzahlAbschlusspruefungen.php | 46 +++ .../FalscheAnzahlHeimatadressen.php | 46 +++ .../FalscheAnzahlZustelladressen.php | 46 +++ .../plausichecks/GbDatumWeitZurueck.php | 46 +++ .../InaktiverStudentAktiverStatus.php | 46 +++ .../IncomingHeimatNationOesterreich.php | 46 +++ .../plausichecks/IncomingOhneIoDatensatz.php | 46 +++ .../InskriptionVorLetzerBismeldung.php | 46 +++ .../NationNichtOesterreichAberGemeinde.php | 46 +++ .../OrgformStgUngleichOrgformPrestudent.php | 46 +++ .../PrestudentMischformOhneOrgform.php | 46 +++ .../PrestudentStgUngleichStgStudienplan.php | 46 +++ .../StgPrestudentUngleichStgStudent.php | 6 +- .../StudentstatusNachAbbrecher.php | 46 +++ .../plausichecks/StudienplanUngueltig.php | 46 +++ system/fehlerupdate.php | 12 +- 29 files changed, 1457 insertions(+), 273 deletions(-) delete mode 100644 application/core/IssueProducer_Controller.php create mode 100644 application/libraries/issues/PlausicheckProducerLib.php create mode 100644 application/libraries/issues/plausichecks/AbbrecherAktiv.php create mode 100644 application/libraries/issues/plausichecks/AbschlussstatusFehlt.php create mode 100644 application/libraries/issues/plausichecks/AktSemesterNull.php create mode 100644 application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php create mode 100644 application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php create mode 100644 application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php create mode 100644 application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php create mode 100644 application/libraries/issues/plausichecks/DatumSponsionFehlt.php create mode 100644 application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php create mode 100644 application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php create mode 100644 application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php create mode 100644 application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php create mode 100644 application/libraries/issues/plausichecks/GbDatumWeitZurueck.php create mode 100644 application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php create mode 100644 application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php create mode 100644 application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php create mode 100644 application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php create mode 100644 application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php create mode 100644 application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php create mode 100644 application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php create mode 100644 application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php create mode 100644 application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php create mode 100644 application/libraries/issues/plausichecks/StudienplanUngueltig.php diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php index 39fff1c72..d7b37cfb5 100644 --- a/application/controllers/jobs/PlausiIssueProducer.php +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -5,116 +5,51 @@ */ class PlausiIssueProducer extends JOB_Controller { - const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks'; - const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck'; - - private $_fehlerLibMappings; - public function __construct() { parent::__construct(); - // set fehler which can be produced by the job - // structure: fehler_kurzbz => class (library) name for resolving - $this->_fehlerLibMappings = array( - 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent' - //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', - //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', - //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', - //'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', - //'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', - //'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', - //'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', - //'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', - //'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', - //'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', - //'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' - ); - - $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); - + $this->load->library('issues/PlausicheckProducerLib'); $this->load->library('IssuesLib'); } /** - * Initializes issue production. + * Runs issue production job. */ - public function run($studiensemester_kurzbz = null) + public function run($studiensemester_kurzbz = null, $studiengang_kz = null) { - if (isEmptyString($studiensemester_kurzbz)) - { - $studiensemesterRes = $this->StudiensemesterModel->getAkt(); - - if (isError($studiensemesterRes)) $this->logError(getError($studiensemesterRes)); - - if (hasData($studiensemesterRes)) $studiensemester_kurzbz = getData($studiensemesterRes); - } + $fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz(); $this->logInfo("Plausicheck issue producer job started"); - foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName) + // get the data returned by Plausicheck + foreach ($fehlerKurzbz as $fehler_kurzbz) { - // get path of library for issue to be produced - $issuesLibPath = DOC_ROOT . 'application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'; - //$issuesLibPath = base_url('application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'); - $issuesLibFilePath = $issuesLibPath . $libName . '.php'; + // execute the check + $this->logInfo("Checking " . $fehler_kurzbz . "..."); + $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); - // check if library file exists - if (!file_exists($issuesLibFilePath)) + if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes)); + + if (hasData($plausicheckRes)) { - // log error and continue with next issue if not - $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); - continue; - } + $plausicheckData = getData($plausicheckRes); - // load library connected to fehlercode - $this->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName); - - $lowercaseLibName = mb_strtolower($libName); - - // check if method is defined in library class - if (!is_callable(array($this->{$lowercaseLibName}, self::EXECUTE_PLAUSI_CHECK_METHOD_NAME))) - { - // log error and continue with next issue if not - $this->logError("Method " . self::EXECUTE_PLAUSI_CHECK_METHOD_NAME . " is not defined in library $lowercaseLibName"); - continue; - } - - // get the data needed for issue check - $paramsForCheck = array( - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ); - - // call the function for checking for issue production - $executePlausiRes = $this->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($paramsForCheck); - - if (isError($executePlausiRes)) - { - $this->logError(getError($executePlausiRes)); - } - else - { - // get the data returned by Plausicheck - $executePlausiData = getData($executePlausiRes); - - if (is_array($executePlausiData)) + foreach ($plausicheckData as $plausiData) { - foreach ($executePlausiData 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); + // 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; - if (isError($addIssueRes)) - $this->logError(getError($addIssueRes)); - else - $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced"); - } + // write the issue + $addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); + + if (isError($addIssueRes)) + $this->logError(getError($addIssueRes)); + else + $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id); } } } diff --git a/application/core/IssueProducer_Controller.php b/application/core/IssueProducer_Controller.php deleted file mode 100644 index 6879bc7dd..000000000 --- a/application/core/IssueProducer_Controller.php +++ /dev/null @@ -1,75 +0,0 @@ -load->model('system/Issue_model', 'IssueModel'); - - $this->load->library('IssuesLib'); - } - - /** - * Initializes issue production. - */ - //public function produceIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $paramsForChecking, $paramsForProduction) - //{ - //// get libname from fehler_kurzbz - //$libName = $this->_fehlerLibMappings[$fehler_kurzbz]; - - //// 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 . '/' : ''; - //$issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; - //$issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; - - //// check if library file exists - //if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist"); - - //// load library connected to fehler_kurzbz - //$this->load->library($issuesLibPath . $libName); - - //$lowercaseLibName = mb_strtolower($libName); - - //// check if method is defined in library class - //if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_EXISTS_METHOD_NAME))) - //return error("Method " . self::CHECK_ISSUE_EXISTS_METHOD_NAME . " is not defined in library $lowercaseLibName"); - - //// call the function for checking for issue resolution - //$issueExistsRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_EXISTS_METHOD_NAME}($paramsForChecking); - - //if (isError($issueExistsRes)) return $issueExistsRes; - - //$issueExistsData = getData($issueExistsRes); - - //if ($issueExistsData === true) - //{ - //// write issue if it was detected - ////$produceRes = $this->{$lowercaseLibName}->{self::PRODUCE_ISSUE_METHOD_NAME}( - ////$fehler_kurzbz, - ////isset($params['person_id']) ? $params['person_id'] : null, - ////isset($params['oe_kurzbz']) ? $params['oe_kurzbz'] : null, - ////$paramsForProduction - ////); - - ////if (isError($produceRes)) - ////return $produceRes; - - //$addIssueres = $this->IssuesLib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); - - //if (isError()) - - //return success("Issue " . $issue->issue_id . " successfully written"); - //} - //} -} diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 2fd46a3d8..a50194eb5 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -30,7 +30,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getPrestudentenStgUngleichStgStudent($prestudent_id = null) + public function getPrestudentenStgUngleichStgStudent($studiengang_kz = null, $prestudent_id = null) { $params = array(); @@ -46,7 +46,14 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz WHERE - stud.studiengang_kz != pre.studiengang_kz"; + stud.studiengang_kz != pre.studiengang_kz + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -62,7 +69,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $prestudent_id = null) + public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); @@ -72,21 +79,29 @@ class PlausicheckLib prestudentstatus.orgform_kurzbz as studentorgkz, student.studiengang_kz studiengang FROM public.tbl_studiengang studiengang - JOIN public.tbl_student student using(studiengang_kz) - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus prestudentstatus using(prestudent_id) + JOIN public.tbl_student student USING(studiengang_kz) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestudentstatus USING(prestudent_id) JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv = true AND prestudentstatus.status_kurzbz='Student' AND studiengang.studiengang_kz < 10000 AND prestudentstatus.studiensemester_kurzbz = ? + AND stg.melderelevant AND NOT EXISTS( SELECT 1 FROM lehre.tbl_studienplan JOIN lehre.tbl_studienordnung USING(studienordnung_id) WHERE tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz AND tbl_studienplan.orgform_kurzbz = prestudentstatus.orgform_kurzbz)"; + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + if (isset($prestudent_id)) { $qry .= " AND prestudent.prestudent_id = ?"; @@ -104,23 +119,31 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $prestudent_id = null) + public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); $qry = " SELECT - tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang + tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang, + tbl_prestudentstatus.studiensemester_kurzbz FROM public.tbl_prestudent JOIN public.tbl_person USING(person_id) JOIN public.tbl_prestudentstatus USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE tbl_prestudentstatus.status_kurzbz IN ('Bewerber', 'Student') - AND tbl_studiengang.mischform + AND stg.mischform AND (tbl_prestudentstatus.orgform_kurzbz='' OR tbl_prestudentstatus.orgform_kurzbz IS NULL) - AND tbl_prestudentstatus.studiensemester_kurzbz=?"; + AND tbl_prestudentstatus.studiensemester_kurzbz=? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -136,23 +159,31 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getPrestudentStgUngleichStgStudienplan($prestudent_id = null) + public function getPrestudentStgUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null) { $params = array(); $qry = " SELECT DISTINCT tbl_person.vorname, tbl_person.nachname, - tbl_prestudent.studiengang_kz as studiengang, - tbl_prestudent.prestudent_id + ps.studiengang_kz as studiengang, + ps.prestudent_id, tbl_studienplan.studienplan_id FROM - public.tbl_prestudent + public.tbl_prestudent ps JOIN public.tbl_prestudentstatus USING(prestudent_id) JOIN lehre.tbl_studienplan USING(studienplan_id) JOIN lehre.tbl_studienordnung USING(studienordnung_id) JOIN public.tbl_person USING(person_id) + JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz WHERE - tbl_prestudent.studiengang_kz<>tbl_studienordnung.studiengang_kz"; + ps.studiengang_kz<>tbl_studienordnung.studiengang_kz + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -171,7 +202,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAbbrecherAktiv($prestudent_id = null) + public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null) { $params = array(); @@ -180,11 +211,20 @@ class PlausicheckLib pre_status.status_kurzbz, benutzer.aktiv, benutzer.uid, student.studiengang_kz studiengang FROM public.tbl_prestudentstatus pre_status - JOIN public.tbl_prestudent pre using(prestudent_id) - JOIN public.tbl_student student using(prestudent_id) + JOIN public.tbl_prestudent pre USING(prestudent_id) + JOIN public.tbl_student student USING(prestudent_id) JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE - pre_status.status_kurzbz ='Abbrecher' and benutzer.aktiv=true"; + pre_status.status_kurzbz ='Abbrecher' + AND benutzer.aktiv=true + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -200,7 +240,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getStudentstatusNachAbbrecher($prestudent_id = null) + public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null) { $params = array(); $result = array(); @@ -210,10 +250,18 @@ class PlausicheckLib student.student_uid, prestudent.prestudent_id, student.studiengang_kz studiengang FROM public.tbl_student student - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus using(prestudent_id) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studienang_kz = stg.studiengang_kz WHERE - prestatus.status_kurzbz = 'Abbrecher'"; + prestatus.status_kurzbz = 'Abbrecher' + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -252,25 +300,33 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $prestudent_id = null) + public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); $qry = " SELECT DISTINCT(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, - lv.semester, student.studiengang_kz studiengang + lv.semester, student.studiengang_kz studiengang, status.studiensemester_kurzbz FROM public.tbl_student student - JOIN public.tbl_studentlehrverband lv using(student_uid) - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus status using(prestudent_id) + JOIN public.tbl_studentlehrverband lv USING(student_uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE status.studiensemester_kurzbz = ? AND lv.studiensemester_kurzbz = ? AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher') AND get_rolle_prestudent (prestudent_id, ?)='Student' - AND status.ausbildungssemester != lv.semester"; + AND status.ausbildungssemester != lv.semester + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -286,7 +342,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $prestudent_id = null) + public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); @@ -296,10 +352,18 @@ class PlausicheckLib FROM public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent using(prestudent_id) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_studiengang ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=false - AND get_rolle_prestudent(prestudent_id, ?) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')"; + AND get_rolle_prestudent(prestudent_id, ?) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -317,7 +381,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $prestudent_id = null) + public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); $results = array(); @@ -329,11 +393,19 @@ class PlausicheckLib FROM public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus using(prestudent_id) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=true - AND prestatus.studiensemester_kurzbz = ?"; + AND prestatus.studiensemester_kurzbz = ? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -384,7 +456,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $prestudent_id = null) + public function getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); $rsults = array(); @@ -396,12 +468,20 @@ class PlausicheckLib FROM public.tbl_student student JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus status using(prestudent_id) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=true AND status.status_kurzbz='Student' - AND status.studiensemester_kurzbz=?"; + AND status.studiensemester_kurzbz=? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -425,12 +505,12 @@ class PlausicheckLib status.* FROM public.tbl_prestudentstatus status - JOIN public.tbl_studiensemester semester using(studiensemester_kurzbz) + JOIN public.tbl_studiensemester semester USING(studiensemester_kurzbz) WHERE prestudent_id = ? - ORDER BY semester.start DESC, status.datum DESC;" + ORDER BY semester.start DESC, status.datum DESC;"; - $qryOrderSemesterRes = $this->_db->execReadOnlyQuery($qryOrderSemester, array($student->prestudent_id)); + $qryOrderSemesterRes = $this->_db->execReadOnlyQuery($qryOrderSemester, array($student->prestudent_id)); if (isError($qryOrderSemesterRes)) return $qryOrderSemesterRes; @@ -467,7 +547,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAktiverStudentOhneStatus($studiensemester_kurzbz, $prestudent_id = null) + public function getAktiverStudentOhneStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array(); $results = array(); @@ -478,10 +558,18 @@ class PlausicheckLib FROM public.tbl_student student JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent using(prestudent_id) - JOIN public.tbl_prestudentstatus status using(prestudent_id) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE - benutzer.aktiv=true"; + benutzer.aktiv=TRUE + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -529,7 +617,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getStudienplanUngueltig($studiensemester_kurzbz, $prestudent_id = null) + public function getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); @@ -538,15 +626,16 @@ class PlausicheckLib DISTINCT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_studienplan.bezeichnung, - tbl_prestudent.studiengang_kz as studiengang, - tbl_prestudentstatus.status_kurzbz, - tbl_prestudentstatus.studiensemester_kurzbz, - tbl_prestudentstatus.ausbildungssemester + prestudent.studiengang_kz as studiengang, + status.status_kurzbz, + status.studiensemester_kurzbz, + status.ausbildungssemester FROM - public.tbl_prestudent - JOIN public.tbl_prestudentstatus USING(prestudent_id) + public.tbl_prestudent prestudent + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_person USING(person_id) JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener') AND NOT EXISTS ( @@ -555,11 +644,18 @@ class PlausicheckLib FROM lehre.tbl_studienplan_semester WHERE - studienplan_id=tbl_prestudentstatus.studienplan_id - AND tbl_studienplan_semester.semester = tbl_prestudentstatus.ausbildungssemester - AND tbl_studienplan_semester.studiensemester_kurzbz = tbl_prestudentstatus.studiensemester_kurzbz + studienplan_id=status.studienplan_id + AND tbl_studienplan_semester.semester = status.ausbildungssemester + AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz ) - AND tbl_prestudentstatus.studiensemester_kurzbz=?"; + AND status.studiensemester_kurzbz=? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -575,7 +671,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id = null) + public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); @@ -608,6 +704,12 @@ class PlausicheckLib ) studenten WHERE anzahl_abschlusspruefungen != 1"; + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + if (isset($prestudent_id)) { $qry .= " AND pre.prestudent_id = ?"; @@ -622,12 +724,11 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $prestudent_id = null) + public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { - $params = array(); $results = array(); - $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $prestudent_id); if (isError($pruefungenRes)) return $pruefungenRes; @@ -649,12 +750,11 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumSponsionFehlt($prestudent_id = null) + public function getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { - $params = array(); $results = array(); - $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $prestudent_id); if (isError($pruefungenRes)) return $pruefungenRes; @@ -676,7 +776,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $prestudent_id = null) + public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); @@ -688,15 +788,17 @@ class PlausicheckLib $qry = " SELECT - vorname, nachname, tbl_prestudent.prestudent_id, studiengang_kz + vorname, nachname, prestudent.prestudent_id, prestudent.studiengang_kz FROM - public.tbl_prestudent - JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + public.tbl_prestudent prestudent + JOIN public.tbl_prestudentstatus ON(prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) JOIN public.tbl_person USING(person_id) LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE AND status_kurzbz='Bewerber' - AND reihungstestangetreten=false"; + AND reihungstestangetreten=false + AND stg.melderelevant"; if (!isEmptyString($previousStudiensemester)) { @@ -708,6 +810,12 @@ class PlausicheckLib $qry .= "AND studiensemester_kurzbz=?"; } + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + if (isset($prestudent_id)) { $qry .= " AND tbl_prestudent.prestudent_id = ?"; @@ -722,7 +830,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAktSemesterNull($prestudent_id = null) + public function getAktSemesterNull($studiengang_kz = null, $prestudent_id = null) { $params = array(); @@ -732,9 +840,17 @@ class PlausicheckLib FROM public.tbl_prestudent pre JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE prestat.status_kurzbz != 'Incoming' - AND ausbildungssemester = 0"; + AND ausbildungssemester = 0 + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -750,16 +866,17 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAbschlussstatusFehlt($prestudent_id = null) + public function getAbschlussstatusFehlt($studiengang_kz = null, $prestudent_id = null) { $params = array(); $qry = " SELECT - DISTINCT tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang + DISTINCT pre.prestudent_id, tbl_person.vorname, tbl_person.nachname, pre.studiengang_kz as studiengang FROM - public.tbl_prestudent + public.tbl_prestudent pre JOIN public.tbl_person USING(person_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE NOT EXISTS( SELECT @@ -768,15 +885,22 @@ class PlausicheckLib public.tbl_prestudentstatus ps JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE - prestudent_id=tbl_prestudent.prestudent_id + prestudent_id=pre.prestudent_id AND tbl_studiensemester.ende>now() ) - AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id) + AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id) AND NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus ps WHERE - prestudent_id=tbl_prestudent.prestudent_id + prestudent_id=pre.prestudent_id AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') - )"; + ) + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -795,7 +919,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getGbDatumWeitZurueck($studiensemester_kurzbz, $person_id = null) + public function getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) { $params = array($studiensemester_kurzbz); @@ -810,7 +934,16 @@ class PlausicheckLib SELECT 1 FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING(prestudent_id) - WHERE person_id = pers.person_id AND studiensemester_kurzbz = ?)"; + JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz + WHERE person_id = pers.person_id AND studiensemester_kurzbz = ? + AND stg.melderelevant + )"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($person_id)) { @@ -826,22 +959,30 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getNationNichtOesterreichAberGemeinde($person_id = null) + public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null) { $params = array(); - $qry = "SELECT DISTINCT tbl_person.person_id + $qry = "SELECT DISTINCT tbl_person.person_id, tbl_adresse.gemeinde FROM public.tbl_adresse JOIN public.tbl_prestudent USING(person_id) JOIN public.tbl_person USING(person_id) JOIN public.tbl_student USING(prestudent_id) JOIN public.tbl_benutzer ON(uid=student_uid) + JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE tbl_adresse.nation!='A' AND tbl_benutzer.aktiv AND gemeinde NOT IN ('Münster') - AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = tbl_adresse.gemeinde)"; + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = tbl_adresse.gemeinde) + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($person_id)) { @@ -857,9 +998,9 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlHeimatadressen($person_id = null) + public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) { - $params = array(); + $params = array($studiensemester_kurzbz); $qry = " SELECT @@ -873,9 +1014,19 @@ class PlausicheckLib ) adressen JOIN public.tbl_person USING(person_id) JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE - anzahl_adressen != 1"; + anzahl_adressen != 1 + AND status.studiensemester_kurzbz = ? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($person_id)) { @@ -891,7 +1042,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlZustelladressen($person_id = null) + public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) { $params = array(); @@ -907,9 +1058,19 @@ class PlausicheckLib ) adressen JOIN public.tbl_person USING(person_id) JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE - anzahl_adressen != 1"; + anzahl_adressen != 1 + AND status.studiensemester_kurzbz = ? + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($person_id)) { @@ -928,7 +1089,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getIncomingHeimatNationOesterreich($person_id = null) + public function getIncomingHeimatNationOesterreich($studiengang_kz = null, $person_id = null) { $params = array(); @@ -940,10 +1101,18 @@ class PlausicheckLib JOIN public.tbl_prestudentstatus prestatus JOIN public.tbl_person pers USING(person_id) JOIN public.tbl_adresse addr USING(person_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE prestat.status_kurzbz = 'Incoming' AND addr.nation = 'A' - AND addr.heimatadresse"; + AND addr.heimatadresse + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($person_id)) { @@ -959,7 +1128,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getIncomingOhneIoDatensatz($prestudent_id = null) + public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null) { $params = array(); @@ -974,11 +1143,17 @@ class PlausicheckLib JOIN public.tbl_person USING(person_id) JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) - JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz) + JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz) WHERE bismelden=TRUE - -- AND tbl_student.studiengang_kz=? - AND (status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid))"; + AND (status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)) + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { @@ -995,19 +1170,20 @@ class PlausicheckLib /** * Get final exams in a semester which are invalid (e.g. missing data) */ - private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz, $prestudent_id = null) + private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); $qry = " SELECT - pre.prestudent_id, stud.student_uid, pruefung.datum, pruefung.sponsion + pre.prestudent_id, stud.student_uid, pruefung.datum, pruefung.sponsion, pruefung.abschlusspruefung_id FROM public.tbl_prestudent pre JOIN public.tbl_student stud USING(prestudent_id) JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' AND studiensemester_kurzbz = ? @@ -1020,7 +1196,14 @@ class PlausicheckLib ) AND abschlussbeurteilung_kurzbz!='nicht' AND abschlussbeurteilung_kurzbz IS NOT NULL - AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL)"; + AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL) + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } if (isset($prestudent_id)) { diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php new file mode 100644 index 000000000..18971c2cb --- /dev/null +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -0,0 +1,84 @@ + class (library) name for resolving + private $_fehlerLibMappings = array( + 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent' + //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', + //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', + //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', + //'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', + //'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', + //'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', + //'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', + //'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', + //'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', + //'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', + //'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' + ); + + public function __construct() + { + $this->_ci =& get_instance(); // get ci instance + + // load models + $this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); + + // load libraries + $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library + + // get current Studiensemester + $studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); + if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz; + + } + + public function producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null) + { + $libName = $this->_fehlerLibMappings[$fehler_kurzbz]; + + // get Studiensemester + if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester; + + // get path of library for issue to be produced + $issuesLibPath = DOC_ROOT . 'application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'; + //$issuesLibPath = base_url('application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'); + $issuesLibFilePath = $issuesLibPath . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist"); + + // load library connected to fehlercode + $this->_ci->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in library class + 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); + } + + public function getFehlerKurzbz() + { + return array_keys($this->_fehlerLibMappings); + } +} diff --git a/application/libraries/issues/plausichecks/AbbrecherAktiv.php b/application/libraries/issues/plausichecks/AbbrecherAktiv.php new file mode 100644 index 000000000..c30270a6d --- /dev/null +++ b/application/libraries/issues/plausichecks/AbbrecherAktiv.php @@ -0,0 +1,45 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php new file mode 100644 index 000000000..cbf998416 --- /dev/null +++ b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php @@ -0,0 +1,45 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getAbschlussstatusFehlt($studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php new file mode 100644 index 000000000..13ac9b35a --- /dev/null +++ b/application/libraries/issues/plausichecks/AktSemesterNull.php @@ -0,0 +1,45 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getAktSemesterNull($studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php new file mode 100644 index 000000000..6ceb2c508 --- /dev/null +++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getAktiverStudentOhneStatus($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php new file mode 100644 index 000000000..0219124b4 --- /dev/null +++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // pass parameters needed for plausicheck + $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; + $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; + + // get all students failing the plausicheck + $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php new file mode 100644 index 000000000..8a024a00d --- /dev/null +++ b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php new file mode 100644 index 000000000..513f4c607 --- /dev/null +++ b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php new file mode 100644 index 000000000..4f7fe0c29 --- /dev/null +++ b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php new file mode 100644 index 000000000..1937eb19b --- /dev/null +++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php new file mode 100644 index 000000000..faaa21654 --- /dev/null +++ b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php new file mode 100644 index 000000000..6b1133c2b --- /dev/null +++ b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php new file mode 100644 index 000000000..0ae5e05d3 --- /dev/null +++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php new file mode 100644 index 000000000..4a05eca77 --- /dev/null +++ b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php new file mode 100644 index 000000000..bd95fafb0 --- /dev/null +++ b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php new file mode 100644 index 000000000..b28b41d30 --- /dev/null +++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php new file mode 100644 index 000000000..1d2d7d542 --- /dev/null +++ b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getIncomingOhneIoDatensatz($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php new file mode 100644 index 000000000..8da5d6324 --- /dev/null +++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php new file mode 100644 index 000000000..8a3337db1 --- /dev/null +++ b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getNationNichtOesterreichAberGemeinde($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php new file mode 100644 index 000000000..56a69384a --- /dev/null +++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php new file mode 100644 index 000000000..7297d8f9b --- /dev/null +++ b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php new file mode 100644 index 000000000..d1bd3b9b6 --- /dev/null +++ b/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getPrestudentStgUngleichStgStudienplan($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php index 2092ab602..df88f2248 100644 --- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php @@ -15,10 +15,11 @@ class StgPrestudentUngleichStgStudent implements IPlausiChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library + // 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->getPrestudentenStgUngleichStgStudent(); + $prestudentRes = $this->_ci->plausichecklib->getPrestudentenStgUngleichStgStudent($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -38,6 +39,7 @@ class StgPrestudentUngleichStgStudent implements IPlausiChecker } } + // return the results return success($results); } } diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php new file mode 100644 index 000000000..3a0570f24 --- /dev/null +++ b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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->getStudentstatusNachAbbrecher($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php new file mode 100644 index 000000000..6740fe7bf --- /dev/null +++ b/application/libraries/issues/plausichecks/StudienplanUngueltig.php @@ -0,0 +1,46 @@ +_ci =& get_instance(); // get code igniter instance + + // 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); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 3198f0e0c..c402dce98 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -145,7 +145,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0003', 'fehler_kurzbz' => 'PrestudentMischformOhneOrgform', 'fehlercode_extern' => null, - 'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang ist nicht eingetragen. (Studiensemester %s, prestudent_id %s)', + 'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang nicht eingetragen. (Studiensemester %s, prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -153,7 +153,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0004', 'fehler_kurzbz' => 'PrestudentStgUngleichStgStudienplan', 'fehlercode_extern' => null, - 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s)', + 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s, studienplan_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -177,7 +177,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0003', 'fehler_kurzbz' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktuelles Ausbildungssemester bei StudentIn stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein. (prestudent_id %s)', + 'fehlertext' => 'Aktuelles Ausbildungssemester bei StudentIn stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein. (Studiensemester %s, prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -233,7 +233,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0010', 'fehler_kurzbz' => 'DatumAbschlusspruefungFehlt', 'fehlercode_extern' => null, - 'fehlertext' => 'Kein Abschlussprüfung Datum (prestudent_id %s)', + 'fehlertext' => 'Kein Abschlussprüfung Datum (abschlusspruefung_id %s, prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -241,7 +241,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0011', 'fehler_kurzbz' => 'DatumSponsionFehlt', 'fehlercode_extern' => null, - 'fehlertext' => 'Kein Sponsionsdatum (prestudent_id %s)', + 'fehlertext' => 'Kein Sponsionsdatum (abschlusspruefung_id %s, prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -281,7 +281,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_PERSON_0002', 'fehler_kurzbz' => 'NationNichtOesterreichAberGemeinde', 'fehlercode_extern' => null, - 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde angegeben', + 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde (%s) angegeben', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 1241a05ed30c9bbc52354bad0d9e42f7d3db7579 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 27 Sep 2022 18:32:15 +0200 Subject: [PATCH 10/40] -Plausichecks: added correct fehlertext and resolution params -replaced Plausichecker Interface with abstract class, which gets ci instance and loads plausicheck lib -write issue info only if issue really newly inserted --- .../controllers/jobs/PlausiIssueProducer.php | 3 +- application/libraries/IssuesLib.php | 5 +- .../libraries/issues/PlausicheckLib.php | 229 +++++++++++------- .../issues/PlausicheckProducerLib.php | 7 +- .../issues/plausichecks/AbbrecherAktiv.php | 6 +- .../plausichecks/AbschlussstatusFehlt.php | 9 +- .../issues/plausichecks/AktSemesterNull.php | 19 +- .../plausichecks/AktiverStudentOhneStatus.php | 8 +- ...PrestudentUngleichAusbildungssemStatus.php | 21 +- .../BewerberNichtZumRtAngetreten.php | 11 +- .../DatumAbschlusspruefungFehlt.php | 13 +- .../plausichecks/DatumSponsionFehlt.php | 13 +- ...DatumStudiensemesterFalscheReihenfolge.php | 11 +- .../FalscheAnzahlAbschlusspruefungen.php | 6 +- .../FalscheAnzahlHeimatadressen.php | 22 +- .../FalscheAnzahlZustelladressen.php | 24 +- .../plausichecks/GbDatumWeitZurueck.php | 22 +- .../issues/plausichecks/IPlausiChecker.php | 14 -- .../InaktiverStudentAktiverStatus.php | 11 +- .../IncomingHeimatNationOesterreich.php | 23 +- .../plausichecks/IncomingOhneIoDatensatz.php | 9 +- .../InskriptionVorLetzerBismeldung.php | 11 +- .../NationNichtOesterreichAberGemeinde.php | 24 +- .../OrgformStgUngleichOrgformPrestudent.php | 13 +- .../issues/plausichecks/PlausiChecker.php | 24 ++ .../PrestudentMischformOhneOrgform.php | 16 +- .../PrestudentStgUngleichStgStudienplan.php | 11 +- .../StgPrestudentUngleichStgStudent.php | 6 +- .../StudentstatusNachAbbrecher.php | 9 +- .../plausichecks/StudienplanUngueltig.php | 17 +- system/fehlerupdate.php | 20 +- 31 files changed, 340 insertions(+), 297 deletions(-) delete mode 100644 application/libraries/issues/plausichecks/IPlausiChecker.php create mode 100644 application/libraries/issues/plausichecks/PlausiChecker.php diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php index d7b37cfb5..fdacc7740 100644 --- a/application/controllers/jobs/PlausiIssueProducer.php +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -46,9 +46,10 @@ class PlausiIssueProducer extends JOB_Controller // 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)); - else + elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes))) $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id); } } diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php index e31cb88c6..7cc1f964d 100644 --- a/application/libraries/IssuesLib.php +++ b/application/libraries/IssuesLib.php @@ -262,6 +262,7 @@ class IssuesLib return error("Invalid parameters for resolution"); } + // insert new issue return $this->_ci->IssueModel->insert( array( 'fehlercode' => $fehlercode, @@ -277,8 +278,8 @@ class IssuesLib ) ); } - else - return success($openIssueCount); + else // return success if issue already exists + return success("Issue already exists"); } else return error("Number of open issues could not be determined"); diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index a50194eb5..ac6cdb3f2 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -36,9 +36,7 @@ class PlausicheckLib $qry = " SELECT - pre.prestudent_id, stud.student_uid, pers.person_id, - pre.studiengang_kz prestudent_studiengang, stud.studiengang_kz student_studiengang, - stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz + pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_student stud USING(prestudent_id) @@ -75,32 +73,26 @@ class PlausicheckLib $qry = " SELECT - studiengang.orgform_kurzbz as studorgkz, student.student_uid, - prestudentstatus.orgform_kurzbz as studentorgkz, student.studiengang_kz studiengang + prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz, + studiengang.orgform_kurzbz as stg_oe_kurzbz, status.orgform_kurzbz as student_oe_kurzbz FROM public.tbl_studiengang studiengang JOIN public.tbl_student student USING(studiengang_kz) JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus prestudentstatus USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv = true - AND prestudentstatus.status_kurzbz='Student' + AND status.status_kurzbz='Student' AND studiengang.studiengang_kz < 10000 - AND prestudentstatus.studiensemester_kurzbz = ? + AND status.studiensemester_kurzbz = ? AND stg.melderelevant AND NOT EXISTS( SELECT 1 FROM lehre.tbl_studienplan JOIN lehre.tbl_studienordnung USING(studienordnung_id) WHERE tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz - AND tbl_studienplan.orgform_kurzbz = prestudentstatus.orgform_kurzbz)"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } + AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)"; if (isset($prestudent_id)) { @@ -108,6 +100,12 @@ class PlausicheckLib $params[] = $prestudent_id; } + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + $qry .= " ORDER BY student_uid"; @@ -125,18 +123,17 @@ class PlausicheckLib $qry = " SELECT - tbl_prestudent.prestudent_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz as studiengang, - tbl_prestudentstatus.studiensemester_kurzbz + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM - public.tbl_prestudent + public.tbl_prestudent pre JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE - tbl_prestudentstatus.status_kurzbz IN ('Bewerber', 'Student') + status.status_kurzbz IN ('Bewerber', 'Student') AND stg.mischform - AND (tbl_prestudentstatus.orgform_kurzbz='' OR tbl_prestudentstatus.orgform_kurzbz IS NULL) - AND tbl_prestudentstatus.studiensemester_kurzbz=? + AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL) + AND status.studiensemester_kurzbz=? AND stg.melderelevant"; if (isset($studiengang_kz)) @@ -147,7 +144,7 @@ class PlausicheckLib if (isset($prestudent_id)) { - $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $qry .= " AND pre.prestudent_id = ?"; $params[] = $prestudent_id; } @@ -165,18 +162,17 @@ class PlausicheckLib $qry = " SELECT - DISTINCT tbl_person.vorname, tbl_person.nachname, - ps.studiengang_kz as studiengang, - ps.prestudent_id, tbl_studienplan.studienplan_id + DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, + stplan.bezeichnung AS studienplan, stg.orgform_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent ps JOIN public.tbl_prestudentstatus USING(prestudent_id) - JOIN lehre.tbl_studienplan USING(studienplan_id) - JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN lehre.tbl_studienplan stplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id) JOIN public.tbl_person USING(person_id) JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz WHERE - ps.studiengang_kz<>tbl_studienordnung.studiengang_kz + ps.studiengang_kz<>stordnung.studiengang_kz AND stg.melderelevant"; if (isset($studiengang_kz)) @@ -187,7 +183,7 @@ class PlausicheckLib if (isset($prestudent_id)) { - $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $qry .= " AND ps.prestudent_id = ?"; $params[] = $prestudent_id; } @@ -208,7 +204,7 @@ class PlausicheckLib $qry = " SELECT - pre_status.status_kurzbz, benutzer.aktiv, benutzer.uid, student.studiengang_kz studiengang + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudentstatus pre_status JOIN public.tbl_prestudent pre USING(prestudent_id) @@ -247,7 +243,7 @@ class PlausicheckLib $qry = " SELECT - student.student_uid, prestudent.prestudent_id, student.studiengang_kz studiengang + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_student student JOIN public.tbl_prestudent prestudent USING(prestudent_id) @@ -296,7 +292,7 @@ class PlausicheckLib } /** - * Ausbildungssemester of prestudent must be the same as Ausbildungssemester of prestudentstatus. + * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -306,8 +302,8 @@ class PlausicheckLib $qry = " SELECT - DISTINCT(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, - lv.semester, student.studiengang_kz studiengang, status.studiensemester_kurzbz + DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, + status.ausbildungssemester, lv.semester, status.studiensemester_kurzbz FROM public.tbl_student student JOIN public.tbl_studentlehrverband lv USING(student_uid) @@ -338,7 +334,7 @@ class PlausicheckLib } /** - * Students with inactive status shouldn't have an active Benutzer. + * Students with active status should have an active Benutzer. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -348,7 +344,7 @@ class PlausicheckLib $qry = " SELECT - DISTINCT(student.student_uid), student.studiengang_kz studiengang + DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) @@ -389,17 +385,19 @@ class PlausicheckLib // get active students $qry = " SELECT - DISTINCT(student.student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + DISTINCT(student.student_uid), + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=true - AND prestatus.studiensemester_kurzbz = ? - AND stg.melderelevant"; + AND status.studiensemester_kurzbz = ? + AND stg.melderelevant + AND prestudent.bismelden"; if (isset($studiengang_kz)) { @@ -459,12 +457,13 @@ class PlausicheckLib public function getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz); - $rsults = array(); + $results = array(); // all active students with Status student in current semester $qry = " SELECT - DISTINCT(student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + DISTINCT(student_uid), prestudent.person_id, prestudent.prestudent_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM public.tbl_student student JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) @@ -554,7 +553,7 @@ class PlausicheckLib $qry = " SELECT - DISTINCT (student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang + DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, status.studienesemester_kurzbz FROM public.tbl_student student JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) @@ -623,19 +622,18 @@ class PlausicheckLib $qry = " SELECT - DISTINCT tbl_person.vorname, tbl_person.nachname, - tbl_prestudent.prestudent_id, - tbl_studienplan.bezeichnung, - prestudent.studiengang_kz as studiengang, + DISTINCT pre.person_id, pre.prestudent_id, + tbl_studienplan.bezeichnung AS studienplan, status.status_kurzbz, status.studiensemester_kurzbz, - status.ausbildungssemester + status.ausbildungssemester, + stg.prestudent_stg_oe_kurzbz FROM - public.tbl_prestudent prestudent + public.tbl_prestudent pre JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_person USING(person_id) JOIN lehre.tbl_studienplan USING(studienplan_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener') AND NOT EXISTS ( @@ -671,14 +669,14 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) { - $params = array($studiensemester_kurzbz); + $params = array(); $qry = " SELECT * FROM ( SELECT - DISTINCT pre.prestudent_id, student_uid, + DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, ( SELECT COUNT(*) FROM lehre.tbl_abschlusspruefung @@ -689,21 +687,27 @@ class PlausicheckLib FROM public.tbl_prestudent pre JOIN public.tbl_student stud USING(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' - AND studiensemester_kurzbz = ? AND stg.melderelevant + AND pre.bismelden AND NOT EXISTS ( /* exclude gs */ SELECT 1 FROM bis.tbl_mobilitaet WHERE prestudent_id = pre.prestudent_id - AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz + AND studiensemester_kurzbz = status.studiensemester_kurzbz ) ) studenten WHERE anzahl_abschlusspruefungen != 1"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; @@ -724,7 +728,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) { $results = array(); @@ -788,17 +792,18 @@ class PlausicheckLib $qry = " SELECT - vorname, nachname, prestudent.prestudent_id, prestudent.studiengang_kz + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM public.tbl_prestudent prestudent - JOIN public.tbl_prestudentstatus ON(prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id) JOIN public.tbl_person USING(person_id) LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE AND status_kurzbz='Bewerber' AND reihungstestangetreten=false - AND stg.melderelevant"; + AND stg.melderelevant + AND prestudent.bismelden"; if (!isEmptyString($previousStudiensemester)) { @@ -830,21 +835,23 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAktSemesterNull($studiengang_kz = null, $prestudent_id = null) + public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { - $params = array(); + $params = array($studiensemester_kurzbz); $qry = " SELECT - DISTINCT pre.prestudent_id + DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE prestat.status_kurzbz != 'Incoming' + AND prestat.studiensemester_kurzbz = ? AND ausbildungssemester = 0 - AND stg.melderelevant"; + AND stg.melderelevant + AND pre.bismelden"; if (isset($studiengang_kz)) { @@ -863,22 +870,25 @@ class PlausicheckLib /** * Prestudent should have a final status. + * * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAbschlussstatusFehlt($studiengang_kz = null, $prestudent_id = null) + public function getAbschlussstatusFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) { $params = array(); $qry = " SELECT - DISTINCT pre.prestudent_id, tbl_person.vorname, tbl_person.nachname, pre.studiengang_kz as studiengang + DISTINCT ON (pre.prestudent_id) + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_person USING(person_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE - NOT EXISTS( + NOT EXISTS( /*student does not study anymore*/ SELECT 1 FROM @@ -886,15 +896,25 @@ class PlausicheckLib JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE prestudent_id=pre.prestudent_id - AND tbl_studiensemester.ende>now() + /* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */ + AND tbl_studiensemester.ende>now() - interval '4 months' ) + /* check only valid begininng with 2018 */ AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id) - AND NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus ps + AND NOT EXISTS( + SELECT 1 FROM public.tbl_prestudentstatus ps WHERE prestudent_id=pre.prestudent_id AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') ) - AND stg.melderelevant"; + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } if (isset($studiengang_kz)) { @@ -919,9 +939,9 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) + public function getGbDatumWeitZurueck($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) { - $params = array($studiensemester_kurzbz); + $params = array(); $qry = " SELECT @@ -933,11 +953,18 @@ class PlausicheckLib AND EXISTS ( SELECT 1 FROM public.tbl_prestudent - JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz - WHERE person_id = pers.person_id AND studiensemester_kurzbz = ? - AND stg.melderelevant - )"; + WHERE person_id = pers.person_id + AND stg.melderelevant"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + $qry .= ")"; if (isset($studiengang_kz)) { @@ -963,19 +990,19 @@ class PlausicheckLib { $params = array(); - $qry = "SELECT DISTINCT tbl_person.person_id, tbl_adresse.gemeinde + $qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id FROM - public.tbl_adresse + public.tbl_adresse adr JOIN public.tbl_prestudent USING(person_id) JOIN public.tbl_person USING(person_id) JOIN public.tbl_student USING(prestudent_id) JOIN public.tbl_benutzer ON(uid=student_uid) JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE - tbl_adresse.nation!='A' + adr.nation!='A' AND tbl_benutzer.aktiv AND gemeinde NOT IN ('Münster') - AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = tbl_adresse.gemeinde) + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde) AND stg.melderelevant"; if (isset($studiengang_kz)) @@ -998,9 +1025,9 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) + public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) { - $params = array($studiensemester_kurzbz); + $params = array(); $qry = " SELECT @@ -1019,9 +1046,14 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE anzahl_adressen != 1 - AND status.studiensemester_kurzbz = ? AND stg.melderelevant"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; @@ -1042,7 +1074,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) + public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) { $params = array(); @@ -1063,9 +1095,14 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz WHERE anzahl_adressen != 1 - AND status.studiensemester_kurzbz = ? AND stg.melderelevant"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; @@ -1136,7 +1173,8 @@ class PlausicheckLib SELECT DISTINCT ON(student_uid, nachname, vorname), tbl_person.person_id, - tbl_prestudent.prestudent_id + tbl_prestudent.prestudent_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_student JOIN public.tbl_benutzer ON(student_uid=uid) @@ -1146,7 +1184,7 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz) WHERE bismelden=TRUE - AND (status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)) + AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid) AND stg.melderelevant"; if (isset($studiengang_kz)) @@ -1170,13 +1208,13 @@ class PlausicheckLib /** * Get final exams in a semester which are invalid (e.g. missing data) */ - private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) { - $params = array($studiensemester_kurzbz); + $params = array(); $qry = " SELECT - pre.prestudent_id, stud.student_uid, pruefung.datum, pruefung.sponsion, pruefung.abschlusspruefung_id + pre.prestudent_id, pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_student stud USING(prestudent_id) @@ -1186,7 +1224,6 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' - AND studiensemester_kurzbz = ? AND stg.melderelevant AND NOT EXISTS ( /* exclude gs */ SELECT 1 @@ -1199,6 +1236,12 @@ class PlausicheckLib AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL) AND stg.melderelevant"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND prestatus.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index 18971c2cb..03e317dfc 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -13,7 +13,9 @@ class PlausicheckProducerLib // set fehler which can be produced by the job // structure: fehler_kurzbz => class (library) name for resolving private $_fehlerLibMappings = array( - 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent' + 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', + 'AbbrecherAktiv' => 'AbbrecherAktiv', + 'AbschlussstatusFehlt' => 'AbschlussstatusFehlt', //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', @@ -34,9 +36,6 @@ class PlausicheckProducerLib // load models $this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); - // load libraries - $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library - // get current Studiensemester $studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz; diff --git a/application/libraries/issues/plausichecks/AbbrecherAktiv.php b/application/libraries/issues/plausichecks/AbbrecherAktiv.php index c30270a6d..cc6e2996a 100644 --- a/application/libraries/issues/plausichecks/AbbrecherAktiv.php +++ b/application/libraries/issues/plausichecks/AbbrecherAktiv.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class AbbrecherAktiv implements IPlausiChecker +class AbbrecherAktiv extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // pass parameters needed for plausicheck $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php index cbf998416..66615220a 100644 --- a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php +++ b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php @@ -2,24 +2,23 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class AbschlussstatusFehlt implements IPlausiChecker +class AbschlussstatusFehlt extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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($studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt($studiensemester_kurzbz, $studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php index 13ac9b35a..d55506d68 100644 --- a/application/libraries/issues/plausichecks/AktSemesterNull.php +++ b/application/libraries/issues/plausichecks/AktSemesterNull.php @@ -2,24 +2,23 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class AktSemesterNull implements IPlausiChecker +class AktSemesterNull extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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($studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -33,8 +32,14 @@ class AktSemesterNull implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php index 6ceb2c508..7cbaf6562 100644 --- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php +++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class AktiverStudentOhneStatus implements IPlausiChecker +class AktiverStudentOhneStatus extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -35,7 +33,7 @@ class AktiverStudentOhneStatus implements IPlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz) ); } } diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php index 0219124b4..c3fb1ae66 100644 --- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php +++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php @@ -2,25 +2,26 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class AusbildungssemPrestudentUngleichAusbildungssemStatus implements IPlausiChecker +class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // pass parameters needed for plausicheck $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus( + $studiensemester_kurzbz, + $studiengang_kz + ); if (isError($prestudentRes)) return $prestudentRes; @@ -34,8 +35,14 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus implements IPlausiChe $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php index 8a024a00d..35d954236 100644 --- a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php +++ b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class BewerberNichtZumRtAngetreten implements IPlausiChecker +class BewerberNichtZumRtAngetreten extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -35,7 +33,10 @@ class BewerberNichtZumRtAngetreten implements IPlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array( + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz, + 'prestudent_id' => $prestudent->prestudent_id + ) ); } } diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php index 513f4c607..7a2555b69 100644 --- a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php +++ b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class DatumAbschlusspruefungFehlt implements IPlausiChecker +class DatumAbschlusspruefungFehlt extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -34,8 +32,11 @@ class DatumAbschlusspruefungFehlt implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'abschlusspruefung_id' => $prestudent->abschlusspruefung_id + ), + 'resolution_params' => array('abschlusspruefung_id' => $prestudent->abschlusspruefung_id) ); } } diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php index 4f7fe0c29..102a89656 100644 --- a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php +++ b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class DatumSponsionFehlt implements IPlausiChecker +class DatumSponsionFehlt extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -34,8 +32,11 @@ class DatumSponsionFehlt implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'abschlusspruefung_id' => $prestudent->abschlusspruefung_id + ), + 'resolution_params' => array('abschlusspruefung_id' => $prestudent->abschlusspruefung_id) ); } } diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php index 1937eb19b..fadcf3e74 100644 --- a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php +++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class DatumStudiensemesterFalscheReihenfolge implements IPlausiChecker +class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -35,7 +33,10 @@ class DatumStudiensemesterFalscheReihenfolge implements IPlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php index faaa21654..7fbe2d828 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class FalscheAnzahlAbschlusspruefungen implements IPlausiChecker +class FalscheAnzahlAbschlusspruefungen extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php index 6b1133c2b..eac50a88a 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php @@ -2,40 +2,36 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class FalscheAnzahlHeimatadressen implements IPlausiChecker +class FalscheAnzahlHeimatadressen extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz); + $personRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz); - if (isError($prestudentRes)) return $prestudentRes; + if (isError($personRes)) return $personRes; - if (hasData($prestudentRes)) + if (hasData($personRes)) { - $prestudents = getData($prestudentRes); + $persons = getData($personRes); // populate results with data necessary for writing issues - foreach ($prestudents as $prestudent) + foreach ($persons as $person) { $results[] = array( - 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'person_id' => $person->person_id, + 'resolution_params' => array('person_id' => $person->person_id) ); } } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php index 0ae5e05d3..f60a265c2 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php @@ -2,40 +2,36 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class FalscheAnzahlZustelladressen implements IPlausiChecker +class FalscheAnzahlZustelladressen extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz); + $personRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz); - if (isError($prestudentRes)) return $prestudentRes; + if (isError($personRes)) return $personRes; - if (hasData($prestudentRes)) + if (hasData($personRes)) { - $prestudents = getData($prestudentRes); + $persons = getData($personRes); - // populate results with data necessary for writing issues - foreach ($prestudents as $prestudent) + // populate results with data necessary for writing person + foreach ($persons as $person) { $results[] = array( - 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'person_id' => $person->person_id, + 'resolution_params' => array('person_id' => $person->person_id) ); } } diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php index 4a05eca77..7a7cf0d6f 100644 --- a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php +++ b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php @@ -2,40 +2,36 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class GbDatumWeitZurueck implements IPlausiChecker +class GbDatumWeitZurueck extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz); + $personRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz); - if (isError($prestudentRes)) return $prestudentRes; + if (isError($personRes)) return $personRes; - if (hasData($prestudentRes)) + if (hasData($personRes)) { - $prestudents = getData($prestudentRes); + $persons = getData($personRes); // populate results with data necessary for writing issues - foreach ($prestudents as $prestudent) + foreach ($persons as $person) { $results[] = array( - 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'person_id' => $person->person_id, + 'resolution_params' => array('person_id' => $person->person_id) ); } } diff --git a/application/libraries/issues/plausichecks/IPlausiChecker.php b/application/libraries/issues/plausichecks/IPlausiChecker.php deleted file mode 100644 index 415bc4735..000000000 --- a/application/libraries/issues/plausichecks/IPlausiChecker.php +++ /dev/null @@ -1,14 +0,0 @@ -_ci =& get_instance(); // get code igniter instance - // 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; @@ -35,7 +33,10 @@ class InaktiverStudentAktiverStatus implements IPlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php index b28b41d30..c177e914f 100644 --- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php +++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php @@ -2,40 +2,35 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class IncomingHeimatNationOesterreich implements IPlausiChecker +class IncomingHeimatNationOesterreich extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz); + $personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($studiengang_kz); - if (isError($prestudentRes)) return $prestudentRes; + if (isError($personRes)) return $personRes; - if (hasData($prestudentRes)) + if (hasData($personRes)) { - $prestudents = getData($prestudentRes); + $persons = getData($personRes); // populate results with data necessary for writing issues - foreach ($prestudents as $prestudent) + foreach ($persons as $person) { $results[] = array( - 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'person_id' => $person->person_id, + 'resolution_params' => array('person_id' => $person->person_id) ); } } diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php index 1d2d7d542..9681554e5 100644 --- a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php +++ b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php @@ -2,25 +2,22 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class IncomingOhneIoDatensatz implements IPlausiChecker +class IncomingOhneIoDatensatz extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getIncomingOhneIoDatensatz($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php index 8da5d6324..e6fab7d44 100644 --- a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php +++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class InskriptionVorLetzerBismeldung implements IPlausiChecker +class InskriptionVorLetzerBismeldung extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -35,7 +33,10 @@ class InskriptionVorLetzerBismeldung implements IPlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php index 8a3337db1..c61531e46 100644 --- a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php +++ b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php @@ -2,40 +2,36 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class NationNichtOesterreichAberGemeinde implements IPlausiChecker +class NationNichtOesterreichAberGemeinde extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getNationNichtOesterreichAberGemeinde($studiensemester_kurzbz, $studiengang_kz); + $personRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde($studiengang_kz); - if (isError($prestudentRes)) return $prestudentRes; + if (isError($personRes)) return $personRes; - if (hasData($prestudentRes)) + if (hasData($personRes)) { - $prestudents = getData($prestudentRes); + $persons = getData($personRes); // populate results with data necessary for writing issues - foreach ($prestudents as $prestudent) + foreach ($persons as $person) { $results[] = array( - 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'person_id' => $person->person_id, + 'fehlertext_params' => array('gemeinde' => $person->gemeinde, 'adresse_id' => $person->adresse_id), + 'resolution_params' => array('adresse_id' => $person->adresse_id) ); } } diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php index 56a69384a..b4a6cb6f1 100644 --- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php +++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class OrgformStgUngleichOrgformPrestudent implements IPlausiChecker +class OrgformStgUngleichOrgformPrestudent extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -33,9 +31,12 @@ class OrgformStgUngleichOrgformPrestudent implements IPlausiChecker { $results[] = array( 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'oe_kurzbz' => $prestudent->stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php new file mode 100644 index 000000000..f4cd6f01e --- /dev/null +++ b/application/libraries/issues/plausichecks/PlausiChecker.php @@ -0,0 +1,24 @@ +_ci =& get_instance(); // get code igniter instance + + // load libraries + $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library + } + + /** + * Executes a plausi check. + * @param array $params parameters needed for executing the check + * @return array with objects which failed the plausi check + */ + abstract public function executePlausiCheck($paramsForChecking); +} diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php index 7297d8f9b..369085089 100644 --- a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php +++ b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class PrestudentMischformOhneOrgform implements IPlausiChecker +class PrestudentMischformOhneOrgform extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -34,8 +32,14 @@ class PrestudentMischformOhneOrgform implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php index d1bd3b9b6..980297861 100644 --- a/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php +++ b/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php @@ -2,25 +2,22 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class PrestudentStgUngleichStgStudienplan implements IPlausiChecker +class PrestudentStgUngleichStgStudienplan extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getPrestudentStgUngleichStgStudienplan($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getPrestudentStgUngleichStgStudienplan($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -34,7 +31,7 @@ class PrestudentStgUngleichStgStudienplan implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studienplan' => $prestudent->studienplan), 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) ); } diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php index df88f2248..16386d858 100644 --- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class StgPrestudentUngleichStgStudent implements IPlausiChecker +class StgPrestudentUngleichStgStudent extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // pass parameters needed for plausicheck $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php index 3a0570f24..12a7516ef 100644 --- a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php +++ b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php @@ -2,25 +2,22 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class StudentstatusNachAbbrecher implements IPlausiChecker +class StudentstatusNachAbbrecher extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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->getStudentstatusNachAbbrecher($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php index 6740fe7bf..6b8fe49aa 100644 --- a/application/libraries/issues/plausichecks/StudienplanUngueltig.php +++ b/application/libraries/issues/plausichecks/StudienplanUngueltig.php @@ -2,19 +2,17 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -require_once('IPlausiChecker.php'); +require_once('PlausiChecker.php'); /** * */ -class StudienplanUngueltig implements IPlausiChecker +class StudienplanUngueltig extends PlausiChecker { public function executePlausiCheck($params) { $results = array(); - $this->_ci =& get_instance(); // get code igniter instance - // 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; @@ -34,8 +32,15 @@ class StudienplanUngueltig implements IPlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'fehlertext_params' => array( + 'studienplan' => $prestudent->studienplan, + 'ausbildungssemester' => $prestudent->ausbildungssemester, + 'prestudent_id' => $prestudent->prestudent_id + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) ); } } diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index c402dce98..d69d3a8db 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -121,7 +121,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_INOUT_0008', 'fehler_kurzbz' => 'IncomingOhneIoDatensatz', 'fehlercode_extern' => null, - 'fehlertext' => 'Incoming hat keinen IO Datensatz', + 'fehlertext' => 'Incoming hat keinen IO Datensatz (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -145,7 +145,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0003', 'fehler_kurzbz' => 'PrestudentMischformOhneOrgform', 'fehlercode_extern' => null, - 'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang nicht eingetragen. (Studiensemester %s, prestudent_id %s)', + 'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang nicht eingetragen. (prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -153,7 +153,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0004', 'fehler_kurzbz' => 'PrestudentStgUngleichStgStudienplan', 'fehlercode_extern' => null, - 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s, studienplan_id %s)', + 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s, Studienplan %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -177,7 +177,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0003', 'fehler_kurzbz' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktuelles Ausbildungssemester bei StudentIn stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein. (Studiensemester %s, prestudent_id %s)', + 'fehlertext' => 'Aktuelles Ausbildungssemester bei StudentIn stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein. (prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -209,7 +209,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0007', 'fehler_kurzbz' => 'AktiverStudentOhneStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktive/r StudentIn ohne Status im Studiensemester %s (prestudent_id %s)', + 'fehlertext' => 'Aktive/r StudentIn ohne Status %s (prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -217,7 +217,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0008', 'fehler_kurzbz' => 'StudienplanUngueltig', 'fehlercode_extern' => null, - 'fehlertext' => 'Studienplan ist im Ausbildungssemester %s nicht gültig (prestudent_id %s)', + 'fehlertext' => 'Studienplan %s ist im Ausbildungssemester %s nicht gültig (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -233,7 +233,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0010', 'fehler_kurzbz' => 'DatumAbschlusspruefungFehlt', 'fehlercode_extern' => null, - 'fehlertext' => 'Kein Abschlussprüfung Datum (abschlusspruefung_id %s, prestudent_id %s)', + 'fehlertext' => 'Kein Abschlussprüfung Datum (prestudent_id %s, abschlusspruefung_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -241,7 +241,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0011', 'fehler_kurzbz' => 'DatumSponsionFehlt', 'fehlercode_extern' => null, - 'fehlertext' => 'Kein Sponsionsdatum (abschlusspruefung_id %s, prestudent_id %s)', + 'fehlertext' => 'Kein Sponsionsdatum (prestudent_id %s, abschlusspruefung_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -257,7 +257,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0013', 'fehler_kurzbz' => 'AktSemesterNull', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktuelles Ausbildungssemester ist 0 (prestudent_id %s)', + 'fehlertext' => 'Aktuelles Ausbildungssemester ist 0 (prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -281,7 +281,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_PERSON_0002', 'fehler_kurzbz' => 'NationNichtOesterreichAberGemeinde', 'fehlercode_extern' => null, - 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde (%s) angegeben', + 'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde (%s) angegeben (adresse_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 23ec0d634406137e3179590305230a02ed695052 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 28 Sep 2022 17:26:36 +0200 Subject: [PATCH 11/40] Plausicheck AbschlusstatusFehlt: existence of status in previous Semester is checked as well when passing a Studiensemester --- .../libraries/issues/PlausicheckLib.php | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index ac6cdb3f2..ca694770a 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -17,6 +17,7 @@ class PlausicheckLib // load models $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); // get database for queries $this->_db = new DB_Model(); @@ -901,8 +902,9 @@ class PlausicheckLib ) /* check only valid begininng with 2018 */ AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id) - AND NOT EXISTS( - SELECT 1 FROM public.tbl_prestudentstatus ps + AND NOT EXISTS( /* no end status */ + SELECT 1 + FROM public.tbl_prestudentstatus ps WHERE prestudent_id=pre.prestudent_id AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') @@ -912,8 +914,23 @@ class PlausicheckLib if (isset($studiensemester_kurzbz)) { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; + $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; + + if (hasData($prevStudiensemesterRes)) + { + // if Studiensemester given, check only if has status in current or previous semester + $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; + $qry .= " AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus ps + WHERE studiensemester_kurzbz IN (?, ?) + AND ps.prestudent_id = pre.prestudent_id + )"; + $params[] = $prevStudiensemester; + $params[] = $studiensemester_kurzbz; + } } if (isset($studiengang_kz)) From 7c02f21582744662d8effd2fa91c241b0fea2267 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 29 Sep 2022 03:16:05 +0200 Subject: [PATCH 12/40] added plausichecks to PlausicheckProducerLib, bugfixes in PlausicheckLib and plausicheck libraries and fehlerupdate, mainly concerning passed parameters --- .../libraries/issues/PlausicheckLib.php | 131 ++++++++++-------- .../issues/PlausicheckProducerLib.php | 34 +++-- .../plausichecks/AktiverStudentOhneStatus.php | 2 +- .../FalscheAnzahlZustelladressen.php | 2 +- .../InaktiverStudentAktiverStatus.php | 2 +- .../IncomingHeimatNationOesterreich.php | 3 +- .../OrgformStgUngleichOrgformPrestudent.php | 2 +- system/fehlerupdate.php | 4 +- 8 files changed, 103 insertions(+), 77 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index ca694770a..df6a7c6f8 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -75,7 +75,8 @@ class PlausicheckLib $qry = " SELECT prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz, - studiengang.orgform_kurzbz as stg_oe_kurzbz, status.orgform_kurzbz as student_oe_kurzbz + studiengang.orgform_kurzbz as stg_orgform, status.orgform_kurzbz as student_orgform, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_studiengang studiengang JOIN public.tbl_student student USING(studiengang_kz) @@ -94,7 +95,7 @@ class PlausicheckLib WHERE tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)"; - + if (isset($prestudent_id)) { $qry .= " AND prestudent.prestudent_id = ?"; @@ -164,7 +165,7 @@ class PlausicheckLib $qry = " SELECT DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, - stplan.bezeichnung AS studienplan, stg.orgform_kurzbz AS prestudent_stg_oe_kurzbz + stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent ps JOIN public.tbl_prestudentstatus USING(prestudent_id) @@ -249,7 +250,7 @@ class PlausicheckLib public.tbl_student student JOIN public.tbl_prestudent prestudent USING(prestudent_id) JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studienang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE prestatus.status_kurzbz = 'Abbrecher' AND stg.melderelevant"; @@ -266,6 +267,7 @@ class PlausicheckLib $params[] = $prestudent_id; } + // TODO - maybe also put in sql? $qryRes = $this->_db->execReadOnlyQuery($qry, $params); if (isError($qryRes)) return $qryRes; @@ -276,7 +278,7 @@ class PlausicheckLib foreach ($students as $student) { - $lastStatusRes = $this->_ci->PrestudentModel->getLastStatus($student->prestudent_id); + $lastStatusRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id); if (isError($lastStatusRes)) return $lastStatusRes; @@ -304,7 +306,8 @@ class PlausicheckLib $qry = " SELECT DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, - status.ausbildungssemester, lv.semester, status.studiensemester_kurzbz + status.ausbildungssemester, lv.semester, status.studiensemester_kurzbz, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_student student JOIN public.tbl_studentlehrverband lv USING(student_uid) @@ -350,11 +353,12 @@ class PlausicheckLib public.tbl_benutzer benutzer JOIN public.tbl_student student on(benutzer.uid = student.student_uid) JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_studiengang ON prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=false AND get_rolle_prestudent(prestudent_id, ?) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') - AND stg.melderelevant"; + AND stg.melderelevant + AND prestudent.bismelden"; if (isset($studiengang_kz)) { @@ -416,6 +420,7 @@ class PlausicheckLib if (isError($qryRes)) return $qryRes; + // TODO: maybe do this in query already instead? if (hasData($qryRes)) { $students = getData($qryRes); @@ -432,7 +437,12 @@ class PlausicheckLib if (hasData($firstStatusRes)) { - $datumInscription = date_format(date_create(getData($firstStatusRes)[0]->datum), 'Y-m-d'); + $firstStatus = getData($firstStatusRes)[0]; + + if ($firstStatus->studiensemester_kurzbz != $studiensemester_kurzbz) + continue; + + $datumInscription = date_format(date_create($firstStatus->datum), 'Y-m-d'); // if student inscription was before Bismeldedatum if ($datumInscription < $datumBis) @@ -517,9 +527,10 @@ class PlausicheckLib $prestudentsSemesterSorted = hasData($qryOrderSemesterRes) ? getData($qryOrderSemesterRes) : array(); // get all status of student, sorted by status date - $this->PrestudentstatusModel->addSelect('studiensemester_kurzbz'); - $this->PrestudentstatusModel->addOrder('datum DESC, insertamum DESC'); - $qryOrderDateRes=$this->PrestudentstatusModel->loadWhere(array('prestudent_id' => $student->prestudent_id)); + $this->_ci->PrestudentstatusModel->addSelect('studiensemester_kurzbz'); + $this->_ci->PrestudentstatusModel->addOrder('datum', 'DESC'); + $this->_ci->PrestudentstatusModel->addOrder('insertamum', 'DESC'); + $qryOrderDateRes = $this->_ci->PrestudentstatusModel->loadWhere(array('prestudent_id' => $student->prestudent_id)); if (isError($qryOrderDateRes)) return $qryOrderDateRes; @@ -554,16 +565,18 @@ class PlausicheckLib $qry = " SELECT - DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, status.studienesemester_kurzbz + DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_student student JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=TRUE - AND stg.melderelevant"; + AND stg.melderelevant + AND prestudent.bismelden"; + + // TODO - why use getLastStatus function - maybe use not exists for two semester instead - faster?? if (isset($studiengang_kz)) { @@ -591,7 +604,7 @@ class PlausicheckLib if (hasData($nextStudiensemesterRes)) { - $nextStudiensemester = getData($nextStudiensemesterRes)[0]; + $nextStudiensemester = getData($nextStudiensemesterRes)[0]->studiensemester_kurzbz; foreach ($students as $student) { @@ -613,7 +626,7 @@ class PlausicheckLib } /** - * Studiengang should be valid in current Ausbildungssemester of prestudent. + * Studienplan should be valid in current Ausbildungssemester of prestudent. * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -628,7 +641,7 @@ class PlausicheckLib status.status_kurzbz, status.studiensemester_kurzbz, status.ausbildungssemester, - stg.prestudent_stg_oe_kurzbz + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_prestudentstatus status USING(prestudent_id) @@ -648,6 +661,7 @@ class PlausicheckLib AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz ) AND status.studiensemester_kurzbz=? + AND pre.bismelden AND stg.melderelevant"; if (isset($studiengang_kz)) @@ -699,9 +713,7 @@ class PlausicheckLib FROM bis.tbl_mobilitaet WHERE prestudent_id = pre.prestudent_id AND studiensemester_kurzbz = status.studiensemester_kurzbz - ) - ) studenten - WHERE anzahl_abschlusspruefungen != 1"; + )"; if (isset($studiensemester_kurzbz)) { @@ -721,6 +733,9 @@ class PlausicheckLib $params[] = $prestudent_id; } + $qry .= ") studenten + WHERE anzahl_abschlusspruefungen != 1"; + return $this->_db->execReadOnlyQuery($qry, $params); } @@ -733,7 +748,7 @@ class PlausicheckLib { $results = array(); - $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $prestudent_id); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id); if (isError($pruefungenRes)) return $pruefungenRes; @@ -755,11 +770,11 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz = null, $abschlusspruefung_id = null) { $results = array(); - $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $prestudent_id); + $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id); if (isError($pruefungenRes)) return $pruefungenRes; @@ -787,8 +802,6 @@ class PlausicheckLib if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes; - $previousStudiensemester = hasData($previousStudiensemesterRes) ? getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz : ''; - $params = array($studiensemester_kurzbz); $qry = " @@ -801,19 +814,20 @@ class PlausicheckLib LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE - AND status_kurzbz='Bewerber' + status_kurzbz='Bewerber' AND reihungstestangetreten=false AND stg.melderelevant AND prestudent.bismelden"; - if (!isEmptyString($previousStudiensemester)) + if (hasData($previousStudiensemesterRes)) { - $qry .= "AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)"; + $previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz; + $qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)"; $params[] = $previousStudiensemester; } else { - $qry .= "AND studiensemester_kurzbz=?"; + $qry .= " AND studiensemester_kurzbz=?"; } if (isset($studiengang_kz)) @@ -915,9 +929,9 @@ class PlausicheckLib if (isset($studiensemester_kurzbz)) { $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); - + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; - + if (hasData($prevStudiensemesterRes)) { // if Studiensemester given, check only if has status in current or previous semester @@ -1057,13 +1071,14 @@ class PlausicheckLib GROUP BY person_id ) adressen JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_prestudent pre USING(person_id) JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE anzahl_adressen != 1 - AND stg.melderelevant"; + AND stg.melderelevant + AND pre.bismelden"; if (isset($studiensemester_kurzbz)) { @@ -1106,13 +1121,14 @@ class PlausicheckLib GROUP BY person_id ) adressen JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_prestudent pre USING(person_id) JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE anzahl_adressen != 1 - AND stg.melderelevant"; + AND stg.melderelevant + AND pre.bismelden"; if (isset($studiensemester_kurzbz)) { @@ -1143,24 +1159,26 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getIncomingHeimatNationOesterreich($studiengang_kz = null, $person_id = null) + public function getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) { - $params = array(); + $params = array($studiensemester_kurzbz); $qry = " SELECT DISTINCT pers.person_id FROM public.tbl_prestudent pre - JOIN public.tbl_prestudentstatus prestatus + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_person pers USING(person_id) JOIN public.tbl_adresse addr USING(person_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE - prestat.status_kurzbz = 'Incoming' + status.status_kurzbz = 'Incoming' AND addr.nation = 'A' AND addr.heimatadresse - AND stg.melderelevant"; + AND status.studiensemester_kurzbz = ? + AND stg.melderelevant + AND pre.bismelden"; if (isset($studiengang_kz)) { @@ -1188,7 +1206,7 @@ class PlausicheckLib $qry = " SELECT - DISTINCT ON(student_uid, nachname, vorname), + DISTINCT ON(student_uid, nachname, vorname) tbl_person.person_id, tbl_prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz @@ -1225,23 +1243,23 @@ class PlausicheckLib /** * Get final exams in a semester which are invalid (e.g. missing data) */ - private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) + private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) { $params = array(); $qry = " SELECT - pre.prestudent_id, pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + pre.person_id, pre.prestudent_id, + pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_student stud USING(prestudent_id) JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' - AND stg.melderelevant AND NOT EXISTS ( /* exclude gs */ SELECT 1 FROM bis.tbl_mobilitaet @@ -1251,6 +1269,7 @@ class PlausicheckLib AND abschlussbeurteilung_kurzbz!='nicht' AND abschlussbeurteilung_kurzbz IS NOT NULL AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL) + AND pre.bismelden AND stg.melderelevant"; if (isset($studiensemester_kurzbz)) @@ -1265,10 +1284,10 @@ class PlausicheckLib $params[] = $studiengang_kz; } - if (isset($prestudent_id)) + if (isset($abschlusspruefung_id)) { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; + $qry .= " AND pruefung.abschlusspruefung_id = ?"; + $params[] = $abschlusspruefung_id; } return $this->_db->execReadOnlyQuery($qry, $params); @@ -1284,16 +1303,12 @@ class PlausicheckLib if ($semesterType == 'SS') { - $date = "15.11.".($semesterYear - 1); - $date = date_format(date_create($date), 'Y-m-d'); - return $date; + return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d'); } if ($semesterType == 'WS') { - $date = '15.04'.$semesterYear; - $date = date_format(date_create($date, 'Y-m-d')); - return $date; + return date_format(date_create($semesterYear."-04-15"), 'Y-m-d'); } } } diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index 03e317dfc..580ce3a61 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -13,20 +13,30 @@ class PlausicheckProducerLib // set fehler which can be produced by the job // structure: fehler_kurzbz => class (library) name for resolving private $_fehlerLibMappings = array( - 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', 'AbbrecherAktiv' => 'AbbrecherAktiv', 'AbschlussstatusFehlt' => 'AbschlussstatusFehlt', - //'zgvDatumInZukunft' => 'ZgvDatumInZukunft', - //'zgvDatumVorGeburtsdatum' => 'ZgvDatumVorGeburtsdatum', - //'zgvMasterDatumInZukunft' => 'ZgvMasterDatumInZukunft', - //'zgvMasterDatumVorZgvdatum' => 'ZgvMasterDatumVorZgvdatum', - //'zgvMasterDatumVorGeburtsdatum' => 'ZgvMasterDatumVorGeburtsdatum', - //'keinAufenthaltszweckPlausi' => 'KeinAufenthaltszweckPlausi', - //'zuVieleZweckeIncomingPlausi' => 'ZuVieleZweckeIncomingPlausi', - //'falscherIncomingZweckPlausi' => 'FalscherIncomingZweckPlausi', - //'outgoingAufenthaltfoerderungfehltPlausi' => 'OutgoingAufenthaltfoerderungfehltPlausi', - //'outgoingAngerechneteEctsFehlenPlausi' => 'OutgoingAngerechneteEctsFehlenPlausi', - //'outgoingErworbeneEctsFehlenPlausi' => 'OutgoingErworbeneEctsFehlenPlausi' + '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', + 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung', + 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde', + 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent', + 'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform', + 'PrestudentStgUngleichStgStudienplan' => 'PrestudentStgUngleichStgStudienplan', + 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', + 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher' + //'StudienplanUngueltig' => 'StudienplanUngueltig', ); public function __construct() diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php index 7cbaf6562..f772fbdd0 100644 --- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php +++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php @@ -32,7 +32,7 @@ class AktiverStudentOhneStatus extends PlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'fehlertext_params' => array('studiensemester_kurzbz' => $studiensemester_kurzbz, 'prestudent_id' => $prestudent->prestudent_id), 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz) ); } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php index f60a265c2..e2fc4a781 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php @@ -26,7 +26,7 @@ class FalscheAnzahlZustelladressen extends PlausiChecker { $persons = getData($personRes); - // populate results with data necessary for writing person + // populate results with data necessary for writing issues foreach ($persons as $person) { $results[] = array( diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php index ee4a32c43..76fd477e3 100644 --- a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php +++ b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php @@ -35,7 +35,7 @@ class InaktiverStudentAktiverStatus extends PlausiChecker 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), 'resolution_params' => array( 'prestudent_id' => $prestudent->prestudent_id, - 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + 'studiensemester_kurzbz' => $studiensemester_kurzbz ) ); } diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php index c177e914f..220eca4a1 100644 --- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php +++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php @@ -14,10 +14,11 @@ class IncomingHeimatNationOesterreich extends PlausiChecker $results = array(); // 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($studiengang_kz); + $personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz); if (isError($personRes)) return $personRes; diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php index b4a6cb6f1..f7ec087a4 100644 --- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php +++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php @@ -31,7 +31,7 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker { $results[] = array( 'person_id' => $prestudent->person_id, - 'oe_kurzbz' => $prestudent->stg_oe_kurzbz, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), 'resolution_params' => array( 'prestudent_id' => $prestudent->prestudent_id, diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index d69d3a8db..a68eb8c60 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -273,7 +273,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_PERSON_0001', 'fehler_kurzbz' => 'GbDatumWeitZurueck', 'fehlercode_extern' => null, - 'fehlertext' => 'Geburtsdatum vor dem 01.01.1920.', + 'fehlertext' => 'Geburtsdatum vor dem 01.01.1920', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -295,7 +295,7 @@ $fehlerArr = array( ), array( 'fehlercode' => 'CORE_PERSON_0004', - 'fehler_kurzbz' => 'NationNichtOeAberGmeinde', + 'fehler_kurzbz' => 'FalscheAnzahlZustelladressen', 'fehlercode_extern' => null, 'fehlertext' => 'Es sind mehrere oder keine Zustelladressen eingetragen', 'fehlertyp_kurzbz' => 'error', From eee43fe92181fda8cec996626465b45db8763a9b Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 29 Sep 2022 19:41:30 +0200 Subject: [PATCH 13/40] AktiverStudentOhneStatus check: check for status already in SQL instead of getLastStatus function, future status with 4 months buffer --- .../libraries/issues/PlausicheckLib.php | 46 +++++-------------- .../issues/PlausicheckProducerLib.php | 1 - .../plausichecks/AktiverStudentOhneStatus.php | 7 ++- system/fehlerupdate.php | 2 +- 4 files changed, 15 insertions(+), 41 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index df6a7c6f8..6545c70bf 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -558,7 +558,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getAktiverStudentOhneStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null) { $params = array(); $results = array(); @@ -574,9 +574,17 @@ class PlausicheckLib WHERE benutzer.aktiv=TRUE AND stg.melderelevant - AND prestudent.bismelden"; + AND prestudent.bismelden + AND NOT EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus + JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) + WHERE prestudent_id = prestudent.prestudent_id + AND sem.ende::date > NOW() - interval '4 months' + )"; // TODO - why use getLastStatus function - maybe use not exists for two semester instead - faster?? + // generell - kein Status in Zukunft - sollte nicht mehr aktiv sein, aber: auch 4 Monate Puffer, wenn im Sommer noch nicht vorgerückt z.B. if (isset($studiengang_kz)) { @@ -590,39 +598,7 @@ class PlausicheckLib $params[] = $prestudent_id; } - $qryRes = $this->_db->execReadOnlyQuery($qry, $params); - - if (isError($qryRes)) return $qryRes; - - if (hasData($qryRes)) - { - $students = getData($qryRes); - - $nextStudiensemesterRes = $this->_ci->StudiensemesterModel->getNextFrom($studiensemester_kurzbz); - - if (isError($nextStudiensemesterRes)) return $nextStudiensemesterRes; - - if (hasData($nextStudiensemesterRes)) - { - $nextStudiensemester = getData($nextStudiensemesterRes)[0]->studiensemester_kurzbz; - - foreach ($students as $student) - { - $lastStatusCurrSemRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id, $studiensemester_kurzbz); - - if (isError($lastStatusCurrSemRes)) return $lastStatusCurrSemRes; - - $lastStatusNextSemRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id, $nextStudiensemester); - - if (isError($lastStatusNextSemRes)) return $lastStatusNextSemRes; - - if (!hasData($lastStatusCurrSemRes) && !hasData($lastStatusNextSemRes)) - $results[] = $student; - } - } - } - - return success($results); + return $this->_db->execReadOnlyQuery($qry, $params); } /** diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index 580ce3a61..372642c92 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -49,7 +49,6 @@ class PlausicheckProducerLib // get current Studiensemester $studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz; - } public function producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null) diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php index f772fbdd0..2dfd9f866 100644 --- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php +++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php @@ -14,11 +14,10 @@ class AktiverStudentOhneStatus extends PlausiChecker $results = array(); // 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->getAktiverStudentOhneStatus($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -32,8 +31,8 @@ class AktiverStudentOhneStatus extends PlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('studiensemester_kurzbz' => $studiensemester_kurzbz, 'prestudent_id' => $prestudent->prestudent_id), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz) + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) ); } } diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index a68eb8c60..a577aa146 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -209,7 +209,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0007', 'fehler_kurzbz' => 'AktiverStudentOhneStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktive/r StudentIn ohne Status %s (prestudent_id %s, Studiensemester %s)', + 'fehlertext' => 'Aktive/r StudentIn ohne Status (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 0d605158a5d51b4df3716fc85b319a8633ea4939 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 29 Sep 2022 19:43:40 +0200 Subject: [PATCH 14/40] changed text of AktiverStudentOhneStatus plausicheck --- system/fehlerupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index a577aa146..583036509 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -209,7 +209,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0007', 'fehler_kurzbz' => 'AktiverStudentOhneStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktive/r StudentIn ohne Status (prestudent_id %s)', + 'fehlertext' => 'Aktive/r StudentIn ohne aktuellen Status (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 5b4672291372b9e3c048db54913d0739cd3432ab Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 3 Oct 2022 02:28:48 +0200 Subject: [PATCH 15/40] -PlausicheckLib: melderelevant and bismelden fields are checked only if applicable, speed up by including conditions in SQL instead of PHP functions -added more info to some fehler texts by params --- .../libraries/issues/PlausicheckLib.php | 122 +++++------------- .../InskriptionVorLetzerBismeldung.php | 6 +- .../OrgformStgUngleichOrgformPrestudent.php | 6 +- system/fehlerupdate.php | 4 +- 4 files changed, 41 insertions(+), 97 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 6545c70bf..60a5ad3d9 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -45,8 +45,7 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz WHERE - stud.studiengang_kz != pre.studiengang_kz - AND stg.melderelevant"; + stud.studiengang_kz != pre.studiengang_kz"; if (isset($studiengang_kz)) { @@ -89,7 +88,6 @@ class PlausicheckLib AND status.status_kurzbz='Student' AND studiengang.studiengang_kz < 10000 AND status.studiensemester_kurzbz = ? - AND stg.melderelevant AND NOT EXISTS( SELECT 1 FROM lehre.tbl_studienplan JOIN lehre.tbl_studienordnung USING(studienordnung_id) WHERE @@ -135,8 +133,7 @@ class PlausicheckLib status.status_kurzbz IN ('Bewerber', 'Student') AND stg.mischform AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL) - AND status.studiensemester_kurzbz=? - AND stg.melderelevant"; + AND status.studiensemester_kurzbz=?"; if (isset($studiengang_kz)) { @@ -174,8 +171,7 @@ class PlausicheckLib JOIN public.tbl_person USING(person_id) JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz WHERE - ps.studiengang_kz<>stordnung.studiengang_kz - AND stg.melderelevant"; + ps.studiengang_kz<>stordnung.studiengang_kz"; if (isset($studiengang_kz)) { @@ -215,8 +211,7 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE pre_status.status_kurzbz ='Abbrecher' - AND benutzer.aktiv=true - AND stg.melderelevant"; + AND benutzer.aktiv=true"; if (isset($studiengang_kz)) { @@ -253,7 +248,7 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE prestatus.status_kurzbz = 'Abbrecher' - AND stg.melderelevant"; + AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'"; if (isset($studiengang_kz)) { @@ -268,30 +263,7 @@ class PlausicheckLib } // TODO - maybe also put in sql? - $qryRes = $this->_db->execReadOnlyQuery($qry, $params); - - if (isError($qryRes)) return $qryRes; - - if (hasData($qryRes)) - { - $students = getData($qryRes); - - foreach ($students as $student) - { - $lastStatusRes = $this->_ci->PrestudentstatusModel->getLastStatus($student->prestudent_id); - - if (isError($lastStatusRes)) return $lastStatusRes; - - if (hasData($lastStatusRes)) - { - $lastStatus = getData($lastStatusRes)[0]->status_kurzbz; - - if ($lastStatus != 'Abbrecher') $result[] = $student; - } - } - } - - return success($result); + return $this->_db->execReadOnlyQuery($qry, $params); } /** @@ -319,8 +291,7 @@ class PlausicheckLib AND lv.studiensemester_kurzbz = ? AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher') AND get_rolle_prestudent (prestudent_id, ?)='Student' - AND status.ausbildungssemester != lv.semester - AND stg.melderelevant"; + AND status.ausbildungssemester != lv.semester"; if (isset($studiengang_kz)) { @@ -384,13 +355,16 @@ class PlausicheckLib */ public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { - $params = array($studiensemester_kurzbz); + // get Bismeldedatum + $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); + + $params = array($datumBis, $studiensemester_kurzbz, $datumBis); $results = array(); // get active students $qry = " SELECT - DISTINCT(student.student_uid), + DISTINCT ON (student.student_uid) ? AS datum_bismeldung, prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz FROM public.tbl_benutzer benutzer @@ -401,6 +375,16 @@ class PlausicheckLib WHERE benutzer.aktiv=true AND status.studiensemester_kurzbz = ? + /* inscription date before date of first student status */ + AND ( + SELECT datum + FROM public.tbl_prestudentstatus + WHERE prestudent_id = prestudent.prestudent_id + AND studiensemester_kurzbz = status.studiensemester_kurzbz + AND status_kurzbz = 'Student' + ORDER BY datum, insertamum, ext_id + LIMIT 1 + ) < ? AND stg.melderelevant AND prestudent.bismelden"; @@ -416,48 +400,7 @@ class PlausicheckLib $params[] = $prestudent_id; } - $qryRes = $this->_db->execReadOnlyQuery($qry, $params); - - if (isError($qryRes)) return $qryRes; - - // TODO: maybe do this in query already instead? - if (hasData($qryRes)) - { - $students = getData($qryRes); - - // get Bismeldedatum - $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); - - foreach ($students as $student) - { - // get first Status of student - $firstStatusRes = $this->_ci->PrestudentstatusModel->getFirstStatus($student->prestudent_id, 'Student'); - - if (isError($firstStatusRes)) return $firstStatusRes; - - if (hasData($firstStatusRes)) - { - $firstStatus = getData($firstStatusRes)[0]; - - if ($firstStatus->studiensemester_kurzbz != $studiensemester_kurzbz) - continue; - - $datumInscription = date_format(date_create($firstStatus->datum), 'Y-m-d'); - - // if student inscription was before Bismeldedatum - if ($datumInscription < $datumBis) - { - // add the student to result with dates for info output - $student->datum_inskription = $datumInscription; - $student->datum_bismeldung = $datumBis; - - $results[] = $student; - } - } - } - } - - return success($results); + return $this->_db->execReadOnlyQuery($qry, $params); } /** @@ -484,8 +427,7 @@ class PlausicheckLib WHERE benutzer.aktiv=true AND status.status_kurzbz='Student' - AND status.studiensemester_kurzbz=? - AND stg.melderelevant"; + AND status.studiensemester_kurzbz=?"; if (isset($studiengang_kz)) { @@ -580,12 +522,10 @@ class PlausicheckLib FROM public.tbl_prestudentstatus JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) WHERE prestudent_id = prestudent.prestudent_id + /* buffer of four months, as status are often entered later */ AND sem.ende::date > NOW() - interval '4 months' )"; - // TODO - why use getLastStatus function - maybe use not exists for two semester instead - faster?? - // generell - kein Status in Zukunft - sollte nicht mehr aktiv sein, aber: auch 4 Monate Puffer, wenn im Sommer noch nicht vorgerückt z.B. - if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; @@ -682,8 +622,6 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' - AND stg.melderelevant - AND pre.bismelden AND NOT EXISTS ( /* exclude gs */ SELECT 1 FROM bis.tbl_mobilitaet @@ -962,8 +900,7 @@ class PlausicheckLib FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz - WHERE person_id = pers.person_id - AND stg.melderelevant"; + WHERE person_id = pers.person_id"; if (isset($studiensemester_kurzbz)) { @@ -971,14 +908,14 @@ class PlausicheckLib $params[] = $studiensemester_kurzbz; } - $qry .= ")"; - if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; $params[] = $studiengang_kz; } + $qry .= ")"; + if (isset($person_id)) { $qry .= " AND pers.person_id = ?"; @@ -1009,8 +946,7 @@ class PlausicheckLib adr.nation!='A' AND tbl_benutzer.aktiv AND gemeinde NOT IN ('Münster') - AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde) - AND stg.melderelevant"; + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)"; if (isset($studiengang_kz)) { diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php index e6fab7d44..672dfa585 100644 --- a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php +++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php @@ -32,7 +32,11 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'fehlertext_params' => array( + 'datum_bismeldung' => date_format(date_create($prestudent->datum_bismeldung), 'd.m.Y'), + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ), 'resolution_params' => array( 'prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php index f7ec087a4..d663f6797 100644 --- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php +++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php @@ -32,7 +32,11 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker $results[] = array( 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, - 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'fehlertext_params' => array( + 'stg_orgform' => $prestudent->stg_orgform, + 'student_orgform' => $prestudent->student_orgform, + 'prestudent_id' => $prestudent->prestudent_id + ), 'resolution_params' => array( 'prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 583036509..e9bdc7cef 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -137,7 +137,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0002', 'fehler_kurzbz' => 'OrgformStgUngleichOrgformPrestudent', 'fehlercode_extern' => null, - 'fehlertext' => 'Organisationsform des Studienganges stimmt nicht mit Organisationsformen der Studenten überein. (prestudent_id %s)', + 'fehlertext' => 'Organisationsform des Studienganges %s stimmt nicht mit Organisationsformen der Studenten %s überein. (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), @@ -193,7 +193,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0005', 'fehler_kurzbz' => 'InskriptionVorLetzerBismeldung', 'fehlercode_extern' => null, - 'fehlertext' => 'Datum der Inskription liegt vor dem Datum der letzten BIS-Meldung. (prestudent_id %s)', + 'fehlertext' => 'Datum der Inskription liegt vor dem Datum der letzten BIS-Meldung %s. (prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From f8d33374815a1afce2e5e82f456e5790d915fbb6 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 3 Oct 2022 02:32:28 +0200 Subject: [PATCH 16/40] added Plausicheck gui to start plausichecks manually --- .../system/issues/Plausichecks.php | 146 ++++++++++++++++++ .../views/system/issues/plausichecks.php | 108 +++++++++++++ public/js/issues/plausichecks.js | 54 +++++++ 3 files changed, 308 insertions(+) create mode 100644 application/controllers/system/issues/Plausichecks.php create mode 100644 application/views/system/issues/plausichecks.php create mode 100644 public/js/issues/plausichecks.js diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php new file mode 100644 index 000000000..8251560e0 --- /dev/null +++ b/application/controllers/system/issues/Plausichecks.php @@ -0,0 +1,146 @@ + array('system/issues_verwalten:r'), + 'runChecks' => array('system/issues_verwalten:r') + ) + ); + + // Load libraries + $this->load->library('issues/PlausicheckProducerLib'); + $this->load->library('WidgetLib'); + //$this->load->library('IssuesLib'); + + // Load models + $this->load->model('system/Fehler_model', 'FehlerModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + //~ $this->loadPhrases( + //~ array( + //~ 'global', + //~ 'ui', + //~ 'filter', + //~ 'lehre', + //~ 'person', + //~ 'fehlermonitoring' + //~ ) + //~ ); + + $this->_setAuthUID(); // sets property uid + } + + public function index() + { + $filterData = $this->_getFilterData(); + $this->load->view('system/issues/plausichecks', $filterData); + } + + public function runChecks() + { + $studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz'); + $studiengang_kz = $this->input->get('studiengang_kz'); + $fehler_kurzbz = $this->input->get('fehler_kurzbz'); + + // message array for storing info output + $messages = array(); + // all fehler kurzbz which are going to be checked + $fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz(); + // set Studiengang to null if not passed + if (isEmptyString($studiengang_kz)) $studiengang_kz = null; + + $messages[] = "Plausicheck Lauf gestartet"; + + // get the data returned by Plausicheck + foreach ($fehlerKurzbz as $fehler_kurzbz) + { + // execute the check + $messages[] = "Prüfe " . $fehler_kurzbz . "..."; + $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); + + if (isError($plausicheckRes)) $this->terminateWithJsonError(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; + + // 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)) + { + $fehlerText = getData($fehlerRes)[0]->fehlertext; + $fehlerText = isEmptyArray($fehlertext_params) ? $fehlerText : vsprintf($fehlerText, $fehlertext_params); + $messages[] = $fehlerText; + } + } + } + else + $messages[] = "Nichts gefunden für Fehler $fehler_kurzbz"; + } + + $messages[] = "Plausicheck Lauf gestoppt"; + + $this->outputJsonSuccess($messages); + } + + private function _getFilterData() + { + $this->StudiensemesterModel->addOrder('start', 'DESC'); + $studiensemesterRes = $this->StudiensemesterModel->load(); + + if (isError($studiensemesterRes)) show_error(getError($studiensemesterRes)); + + $currSemRes = $this->StudiensemesterModel->getAkt(); + + if (isError($currSemRes)) show_error(getError($currSemRes)); + + $this->StudiengangModel->addSelect('studiengang_kz, tbl_studiengang.bezeichnung, tbl_studiengang.typ, + tbl_studiengangstyp.bezeichnung AS typbezeichnung, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel'); + $this->StudiengangModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->StudiengangModel->addOrder('kuerzel, tbl_studiengang.bezeichnung, studiengang_kz'); + $studiengaengeRes = $this->StudiengangModel->loadWhere(array('aktiv' => true)); + + if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes)); + + $fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz(); + + return array( + 'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(), + 'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(), + 'studiengaenge' => hasData($studiengaengeRes) ? getData($studiengaengeRes) : array(), + 'fehler' => $fehlerKurzbz + ); + } + + /** + * 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/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php new file mode 100644 index 000000000..850accd41 --- /dev/null +++ b/application/views/system/issues/plausichecks.php @@ -0,0 +1,108 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Plausichecks', + 'jquery' => true, + 'jqueryui' => true, + 'jquerycheckboxes' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'ajaxlib' => true, + 'navigationwidget' => true, + 'dialoglib' => true, + //~ 'phrases' => array( + //~ 'ui', + //~ 'fehlermonitoring' + //~ ), + //'customCSSs' => array('public/css/issues/issuesZustaendigkeiten.css', 'public/css/sbadmin2/tablesort_bootstrap.css'), + 'customJSs' => array('public/js/issues/plausichecks.js') + ) +); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
+
+

Output:

+
+
-
+
+
+
+
+
+
+ +
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/public/js/issues/plausichecks.js b/public/js/issues/plausichecks.js new file mode 100644 index 000000000..1103528c5 --- /dev/null +++ b/public/js/issues/plausichecks.js @@ -0,0 +1,54 @@ +/** + * Javascript file for Plausichecks display + */ + +var Plausichecks = { + + startPlausichecks: function(studiensemester_kurzbz, studiengang_kz, fehler_kurzbz) + { + FHC_AjaxClient.ajaxCallGet( + 'system/issues/Plausichecks/runChecks', + { + studiensemester_kurzbz: studiensemester_kurzbz, + studiengang_kz: studiengang_kz, + fehler_kurzbz: fehler_kurzbz + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + let messageStr = ""; + let messages = FHC_AjaxClient.getData(data); + + for (i = 0; i < messages.length; i++) + { + messageStr += messages[i]+"
"; + } + + $("#plausioutput").html(messageStr); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); + }, +}; + +/** + * When JQuery is up + */ +$(document).ready(function() { + // set event for adding a new Zuständigkeit + $("#plausistart").click( + function() + { + Plausichecks.startPlausichecks( + $("#studiensemester").val(), + $("#studiengang_kz").val(), + $("#fehler_kurzbz").val(), + ); + } + ) +}); From ae26c4d1eefc67e7d91e5edc27ed135dfdb83497 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 3 Oct 2022 13:40:33 +0200 Subject: [PATCH 17/40] plausichecks.js: reformatted file, display error as message --- public/js/issues/plausichecks.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/js/issues/plausichecks.js b/public/js/issues/plausichecks.js index 1103528c5..449a12df2 100644 --- a/public/js/issues/plausichecks.js +++ b/public/js/issues/plausichecks.js @@ -4,8 +4,7 @@ var Plausichecks = { - startPlausichecks: function(studiensemester_kurzbz, studiengang_kz, fehler_kurzbz) - { + startPlausichecks: function (studiensemester_kurzbz, studiengang_kz, fehler_kurzbz) { FHC_AjaxClient.ajaxCallGet( 'system/issues/Plausichecks/runChecks', { @@ -14,21 +13,23 @@ var Plausichecks = { fehler_kurzbz: fehler_kurzbz }, { - successCallback: function(data, textStatus, jqXHR) { + successCallback: function (data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + if (FHC_AjaxClient.hasData(data)) { let messageStr = ""; let messages = FHC_AjaxClient.getData(data); - - for (i = 0; i < messages.length; i++) + + for (let i = 0; i < messages.length; i++) { messageStr += messages[i]+"
"; } - + $("#plausioutput").html(messageStr); } }, - errorCallback: function(jqXHR, textStatus, errorThrown) { + errorCallback: function (jqXHR, textStatus, errorThrown) { FHC_DialogLib.alertError(textStatus); } } @@ -39,11 +40,10 @@ var Plausichecks = { /** * When JQuery is up */ -$(document).ready(function() { +$(document).ready(function () { // set event for adding a new Zuständigkeit $("#plausistart").click( - function() - { + function () { Plausichecks.startPlausichecks( $("#studiensemester").val(), $("#studiengang_kz").val(), From aee25c52525ee57ff9451cf32e3a492b7014582c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 3 Oct 2022 19:25:32 +0200 Subject: [PATCH 18/40] moved issue resolvers to #own resolvers folder, created first resolver CORE_INOUT_0007 for plausichecks --- .../controllers/jobs/IssueResolver.php | 3 +- application/core/IssueResolver_Controller.php | 107 +++++++++--------- .../libraries/issues/PlausicheckLib.php | 2 +- .../issues/PlausicheckProducerLib.php | 6 +- .../IncomingHeimatNationOesterreich.php | 2 +- .../{ => resolvers}/CORE_INOUT_0001.php | 0 .../{ => resolvers}/CORE_INOUT_0002.php | 0 .../{ => resolvers}/CORE_INOUT_0003.php | 0 .../{ => resolvers}/CORE_INOUT_0004.php | 0 .../{ => resolvers}/CORE_INOUT_0005.php | 0 .../{ => resolvers}/CORE_INOUT_0006.php | 0 .../issues/resolvers/CORE_INOUT_0007.php | 33 ++++++ .../issues/{ => resolvers}/CORE_ZGV_0001.php | 0 .../issues/{ => resolvers}/CORE_ZGV_0002.php | 0 .../issues/{ => resolvers}/CORE_ZGV_0003.php | 0 .../issues/{ => resolvers}/CORE_ZGV_0004.php | 0 .../issues/{ => resolvers}/CORE_ZGV_0005.php | 0 17 files changed, 94 insertions(+), 59 deletions(-) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0001.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0002.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0003.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0004.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0005.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_INOUT_0006.php (100%) create mode 100644 application/libraries/issues/resolvers/CORE_INOUT_0007.php rename application/libraries/issues/{ => resolvers}/CORE_ZGV_0001.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_ZGV_0002.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_ZGV_0003.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_ZGV_0004.php (100%) rename application/libraries/issues/{ => resolvers}/CORE_ZGV_0005.php (100%) diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php index 17c4cb9ce..c2ab87710 100755 --- a/application/controllers/jobs/IssueResolver.php +++ b/application/controllers/jobs/IssueResolver.php @@ -22,7 +22,8 @@ class IssueResolver extends IssueResolver_Controller 'CORE_INOUT_0003' => 'CORE_INOUT_0003', 'CORE_INOUT_0004' => 'CORE_INOUT_0004', 'CORE_INOUT_0005' => 'CORE_INOUT_0005', - 'CORE_INOUT_0006' => 'CORE_INOUT_0006' + 'CORE_INOUT_0006' => 'CORE_INOUT_0006', + 'CORE_INOUT_0007' => 'CORE_INOUT_0007' ); } } diff --git a/application/core/IssueResolver_Controller.php b/application/core/IssueResolver_Controller.php index d6eda8afb..d325c4e59 100755 --- a/application/core/IssueResolver_Controller.php +++ b/application/core/IssueResolver_Controller.php @@ -5,7 +5,8 @@ */ abstract class IssueResolver_Controller extends JOB_Controller { - const ISSUES_FOLDER = 'issues'; + const CI_PATH = 'application'; + const ISSUES_FOLDER = 'issues/resolvers'; const CHECK_ISSUE_RESOLVED_METHOD_NAME = 'checkIfIssueIsResolved'; protected $_codeLibMappings; @@ -47,64 +48,64 @@ abstract class IssueResolver_Controller extends JOB_Controller foreach ($openIssues as $issue) { - if (isset($this->_codeLibMappings[$issue->fehlercode])) + // ignore if Fehlercode is not in libmappings (shouldn't be checked) + if (!isset($this->_codeLibMappings[$issue->fehlercode])) continue; + + $libName = $this->_codeLibMappings[$issue->fehlercode]; + + // add person id and oe kurzbz automatically as params, merge it with additional params + // decode bewerbung_parameter into assoc array + $params = array_merge( + array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), + isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() + ); + + // if called from extension (extension name set), path includes extension names, otherwise it is the core library folder + $libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : ''; + $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + $issuesLibFilePath = DOC_ROOT . self::CI_PATH . '/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) { - $libName = $this->_codeLibMappings[$issue->fehlercode]; + // log error and continue with next issue if not + $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); + continue; + } - // add person id and oe kurzbz automatically as params, merge it with additional params - // decode bewerbung_parameter into assoc array - $params = array_merge( - array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), - isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() - ); + // load library connected to fehlercode + $this->load->library($issuesLibPath . $libName); - // 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 . '/' : ''; - $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; - $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + $lowercaseLibName = mb_strtolower($libName); - // check if library file exists - if (!file_exists($issuesLibFilePath)) + // check if method is defined in library class + if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME))) + { + // log error and continue with next issue if not + $this->logError("Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName"); + continue; + } + + // call the function for checking for issue resolution + $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params); + + if (isError($issueResolvedRes)) + { + $this->logError(getError($issueResolvedRes)); + } + else + { + $issueResolvedData = getData($issueResolvedRes); + + if ($issueResolvedData === true) { - // log error and continue with next issue if not - $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); - continue; - } + // set issue to resolved if needed + $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); - // load library connected to fehlercode - $this->load->library($issuesLibPath . $libName); - - $lowercaseLibName = mb_strtolower($libName); - - // check if method is defined in library class - if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME))) - { - // log error and continue with next issue if not - $this->logError("Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName"); - continue; - } - - // call the function for checking for issue resolution - $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params); - - if (isError($issueResolvedRes)) - { - $this->logError(getError($issueResolvedRes)); - } - else - { - $issueResolvedData = getData($issueResolvedRes); - - if ($issueResolvedData === true) - { - // set issue to resolved if needed - $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); - - if (isError($behobenRes)) - $this->logError(getError($behobenRes)); - else - $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); - } + if (isError($behobenRes)) + $this->logError(getError($behobenRes)); + else + $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); } } } diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 60a5ad3d9..40b7976f6 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -1077,7 +1077,7 @@ class PlausicheckLib $qry = " SELECT - DISTINCT pers.person_id + DISTINCT pers.person_id, status.studiensemester_kurzbz FROM public.tbl_prestudent pre JOIN public.tbl_prestudentstatus status USING(prestudent_id) diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index 372642c92..b165a4b76 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -4,6 +4,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class PlausicheckProducerLib { + const CI_LIBRARY_PATH = 'application/libraries'; const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks'; const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck'; @@ -36,7 +37,7 @@ class PlausicheckProducerLib 'PrestudentStgUngleichStgStudienplan' => 'PrestudentStgUngleichStgStudienplan', 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher' - //'StudienplanUngueltig' => 'StudienplanUngueltig', + //'StudienplanUngueltig' => 'StudienplanUngueltig' ); public function __construct() @@ -59,8 +60,7 @@ class PlausicheckProducerLib if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester; // get path of library for issue to be produced - $issuesLibPath = DOC_ROOT . 'application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'; - //$issuesLibPath = base_url('application/libraries/' . self::PLAUSI_ISSUES_FOLDER . '/'); + $issuesLibPath = DOC_ROOT . self::CI_LIBRARY_PATH . '/' . self::PLAUSI_ISSUES_FOLDER . '/'; $issuesLibFilePath = $issuesLibPath . $libName . '.php'; // check if library file exists diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php index 220eca4a1..51726d969 100644 --- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php +++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php @@ -31,7 +31,7 @@ class IncomingHeimatNationOesterreich extends PlausiChecker { $results[] = array( 'person_id' => $person->person_id, - 'resolution_params' => array('person_id' => $person->person_id) + 'resolution_params' => array('person_id' => $person->person_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz) ); } } diff --git a/application/libraries/issues/CORE_INOUT_0001.php b/application/libraries/issues/resolvers/CORE_INOUT_0001.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0001.php rename to application/libraries/issues/resolvers/CORE_INOUT_0001.php diff --git a/application/libraries/issues/CORE_INOUT_0002.php b/application/libraries/issues/resolvers/CORE_INOUT_0002.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0002.php rename to application/libraries/issues/resolvers/CORE_INOUT_0002.php diff --git a/application/libraries/issues/CORE_INOUT_0003.php b/application/libraries/issues/resolvers/CORE_INOUT_0003.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0003.php rename to application/libraries/issues/resolvers/CORE_INOUT_0003.php diff --git a/application/libraries/issues/CORE_INOUT_0004.php b/application/libraries/issues/resolvers/CORE_INOUT_0004.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0004.php rename to application/libraries/issues/resolvers/CORE_INOUT_0004.php diff --git a/application/libraries/issues/CORE_INOUT_0005.php b/application/libraries/issues/resolvers/CORE_INOUT_0005.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0005.php rename to application/libraries/issues/resolvers/CORE_INOUT_0005.php diff --git a/application/libraries/issues/CORE_INOUT_0006.php b/application/libraries/issues/resolvers/CORE_INOUT_0006.php similarity index 100% rename from application/libraries/issues/CORE_INOUT_0006.php rename to application/libraries/issues/resolvers/CORE_INOUT_0006.php diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0007.php b/application/libraries/issues/resolvers/CORE_INOUT_0007.php new file mode 100644 index 000000000..925344e34 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_INOUT_0007.php @@ -0,0 +1,33 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['person_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} + diff --git a/application/libraries/issues/CORE_ZGV_0001.php b/application/libraries/issues/resolvers/CORE_ZGV_0001.php similarity index 100% rename from application/libraries/issues/CORE_ZGV_0001.php rename to application/libraries/issues/resolvers/CORE_ZGV_0001.php diff --git a/application/libraries/issues/CORE_ZGV_0002.php b/application/libraries/issues/resolvers/CORE_ZGV_0002.php similarity index 100% rename from application/libraries/issues/CORE_ZGV_0002.php rename to application/libraries/issues/resolvers/CORE_ZGV_0002.php diff --git a/application/libraries/issues/CORE_ZGV_0003.php b/application/libraries/issues/resolvers/CORE_ZGV_0003.php similarity index 100% rename from application/libraries/issues/CORE_ZGV_0003.php rename to application/libraries/issues/resolvers/CORE_ZGV_0003.php diff --git a/application/libraries/issues/CORE_ZGV_0004.php b/application/libraries/issues/resolvers/CORE_ZGV_0004.php similarity index 100% rename from application/libraries/issues/CORE_ZGV_0004.php rename to application/libraries/issues/resolvers/CORE_ZGV_0004.php diff --git a/application/libraries/issues/CORE_ZGV_0005.php b/application/libraries/issues/resolvers/CORE_ZGV_0005.php similarity index 100% rename from application/libraries/issues/CORE_ZGV_0005.php rename to application/libraries/issues/resolvers/CORE_ZGV_0005.php From b28e780aa6acd07459a6e7f0c7e65ef96b0f2a35 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 4 Oct 2022 03:11:59 +0200 Subject: [PATCH 19/40] plausichecks issues fehlerupdate.php: added brackets to OrgformStgUngleichOrgformPrestudent --- system/fehlerupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index e9bdc7cef..8709fc812 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -137,7 +137,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STG_0002', 'fehler_kurzbz' => 'OrgformStgUngleichOrgformPrestudent', 'fehlercode_extern' => null, - 'fehlertext' => 'Organisationsform des Studienganges %s stimmt nicht mit Organisationsformen der Studenten %s überein. (prestudent_id %s)', + 'fehlertext' => 'Organisationsform des Studienganges (%s) stimmt nicht mit Organisationsformen des Studenten (%s) überein. (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 5670f931ef4c462d507bc22a73a34da39072281c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 4 Oct 2022 03:17:41 +0200 Subject: [PATCH 20/40] Plausichecks: beautified GUI output --- .../system/issues/Plausichecks.php | 29 +++++-------------- .../views/system/issues/plausichecks.php | 5 ---- public/js/issues/plausichecks.js | 25 ++++++++++++---- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php index 8251560e0..878f04935 100644 --- a/application/controllers/system/issues/Plausichecks.php +++ b/application/controllers/system/issues/Plausichecks.php @@ -25,17 +25,6 @@ class Plausichecks extends Auth_Controller $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - //~ $this->loadPhrases( - //~ array( - //~ 'global', - //~ 'ui', - //~ 'filter', - //~ 'lehre', - //~ 'person', - //~ 'fehlermonitoring' - //~ ) - //~ ); - $this->_setAuthUID(); // sets property uid } @@ -51,20 +40,18 @@ class Plausichecks extends Auth_Controller $studiengang_kz = $this->input->get('studiengang_kz'); $fehler_kurzbz = $this->input->get('fehler_kurzbz'); - // message array for storing info output - $messages = array(); + // issues array for passing issue texts + $issueTexts = array(); // all fehler kurzbz which are going to be checked $fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz(); // set Studiengang to null if not passed if (isEmptyString($studiengang_kz)) $studiengang_kz = null; - $messages[] = "Plausicheck Lauf gestartet"; - // get the data returned by Plausicheck foreach ($fehlerKurzbz as $fehler_kurzbz) { // execute the check - $messages[] = "Prüfe " . $fehler_kurzbz . "..."; + $issueTexts[$fehler_kurzbz] = array(); $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes)); @@ -92,17 +79,15 @@ class Plausichecks extends Auth_Controller { $fehlerText = getData($fehlerRes)[0]->fehlertext; $fehlerText = isEmptyArray($fehlertext_params) ? $fehlerText : vsprintf($fehlerText, $fehlertext_params); - $messages[] = $fehlerText; + if (isset($person_id)) $fehlerText .= ", person_id: $person_id"; + if (isset($oe_kurzbz)) $fehlerText .= ", oe_kurzbz: $oe_kurzbz"; + $issueTexts[$fehler_kurzbz][] = $fehlerText; } } } - else - $messages[] = "Nichts gefunden für Fehler $fehler_kurzbz"; } - $messages[] = "Plausicheck Lauf gestoppt"; - - $this->outputJsonSuccess($messages); + $this->outputJsonSuccess($issueTexts); } private function _getFilterData() diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php index 850accd41..8fba2a02f 100644 --- a/application/views/system/issues/plausichecks.php +++ b/application/views/system/issues/plausichecks.php @@ -12,10 +12,6 @@ $this->load->view( 'ajaxlib' => true, 'navigationwidget' => true, 'dialoglib' => true, - //~ 'phrases' => array( - //~ 'ui', - //~ 'fehlermonitoring' - //~ ), //'customCSSs' => array('public/css/issues/issuesZustaendigkeiten.css', 'public/css/sbadmin2/tablesort_bootstrap.css'), 'customJSs' => array('public/js/issues/plausichecks.js') ) @@ -101,7 +97,6 @@ $this->load->view( - diff --git a/public/js/issues/plausichecks.js b/public/js/issues/plausichecks.js index 449a12df2..0849fff85 100644 --- a/public/js/issues/plausichecks.js +++ b/public/js/issues/plausichecks.js @@ -16,18 +16,30 @@ var Plausichecks = { successCallback: function (data, textStatus, jqXHR) { if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + let messageStr = "Plausichecks Prüfung Start"; + if (FHC_AjaxClient.hasData(data)) { - let messageStr = ""; - let messages = FHC_AjaxClient.getData(data); + let issueTexts = FHC_AjaxClient.getData(data); - for (let i = 0; i < messages.length; i++) + for (let fehler_kurzbz in issueTexts) { - messageStr += messages[i]+"
"; - } + messageStr += "

Prüfe " + fehler_kurzbz + "..."; + let texts = issueTexts[fehler_kurzbz]; - $("#plausioutput").html(messageStr); + if (texts.length == 0) { + messageStr += "
Keine Issues für " + fehler_kurzbz + ""; + continue; + } + + for (i = 0; i < texts.length; i++) + { + messageStr += "
" + texts[i] + ""; + } + } } + messageStr += "

Plausichecks Prüfung Ende"; + $("#plausioutput").html(messageStr); }, errorCallback: function (jqXHR, textStatus, errorThrown) { FHC_DialogLib.alertError(textStatus); @@ -35,6 +47,7 @@ var Plausichecks = { } ); }, + }; /** From 2a060ace2540ead51a1092f410875fd40c4b2b63 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 4 Oct 2022 19:17:03 +0200 Subject: [PATCH 21/40] -added issue resolvers for plausichecks - renamed fehler PrestudentStgUngleichStgStudienplan to StgPrestudentUngleichStgStudienplan -fixed some parameters passed for resolving -plausicheck getDatumStudiensemesterFalscheReiheinfolge: performed directly in SQL for speedup -plausicheck GUI: fixed comment, minor text changes --- .../controllers/jobs/IssueResolver.php | 25 +++- .../system/issues/Plausichecks.php | 4 +- .../libraries/issues/PlausicheckLib.php | 129 +++++++----------- .../issues/PlausicheckProducerLib.php | 2 +- ...DatumStudiensemesterFalscheReihenfolge.php | 6 +- .../issues/plausichecks/PlausiChecker.php | 2 +- .../StgPrestudentUngleichStgStudent.php | 2 +- ...> StgPrestudentUngleichStgStudienplan.php} | 6 +- .../issues/resolvers/CORE_INOUT_0006.php | 1 - .../issues/resolvers/CORE_INOUT_0007.php | 7 +- .../issues/resolvers/CORE_INOUT_0008.php | 29 ++++ .../issues/resolvers/CORE_PERSON_0001.php | 29 ++++ .../issues/resolvers/CORE_PERSON_0002.php | 29 ++++ .../issues/resolvers/CORE_PERSON_0003.php | 29 ++++ .../issues/resolvers/CORE_PERSON_0004.php | 29 ++++ .../issues/resolvers/CORE_STG_0001.php | 29 ++++ .../issues/resolvers/CORE_STG_0002.php | 32 +++++ .../issues/resolvers/CORE_STG_0003.php | 32 +++++ .../issues/resolvers/CORE_STG_0004.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0001.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0002.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0003.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0004.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0005.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0006.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0007.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0008.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0009.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0010.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0011.php | 29 ++++ .../resolvers/CORE_STUDENTSTATUS_0012.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0013.php | 32 +++++ .../resolvers/CORE_STUDENTSTATUS_0014.php | 32 +++++ .../views/system/issues/plausichecks.php | 2 +- public/js/issues/plausichecks.js | 2 +- system/fehlerupdate.php | 8 +- 36 files changed, 789 insertions(+), 104 deletions(-) rename application/libraries/issues/plausichecks/{PrestudentStgUngleichStgStudienplan.php => StgPrestudentUngleichStgStudienplan.php} (83%) create mode 100644 application/libraries/issues/resolvers/CORE_INOUT_0008.php create mode 100644 application/libraries/issues/resolvers/CORE_PERSON_0001.php create mode 100644 application/libraries/issues/resolvers/CORE_PERSON_0002.php create mode 100644 application/libraries/issues/resolvers/CORE_PERSON_0003.php create mode 100644 application/libraries/issues/resolvers/CORE_PERSON_0004.php create mode 100644 application/libraries/issues/resolvers/CORE_STG_0001.php create mode 100644 application/libraries/issues/resolvers/CORE_STG_0002.php create mode 100644 application/libraries/issues/resolvers/CORE_STG_0003.php create mode 100644 application/libraries/issues/resolvers/CORE_STG_0004.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php create mode 100644 application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php index c2ab87710..d53a6c10c 100755 --- a/application/controllers/jobs/IssueResolver.php +++ b/application/controllers/jobs/IssueResolver.php @@ -23,7 +23,30 @@ class IssueResolver extends IssueResolver_Controller 'CORE_INOUT_0004' => 'CORE_INOUT_0004', 'CORE_INOUT_0005' => 'CORE_INOUT_0005', 'CORE_INOUT_0006' => 'CORE_INOUT_0006', - 'CORE_INOUT_0007' => 'CORE_INOUT_0007' + 'CORE_INOUT_0007' => 'CORE_INOUT_0007', + 'CORE_INOUT_0008' => 'CORE_INOUT_0008', + 'CORE_STG_0001' => 'CORE_STG_0001', + 'CORE_STG_0002' => 'CORE_STG_0002', + 'CORE_STG_0003' => 'CORE_STG_0003', + 'CORE_STG_0004' => 'CORE_STG_0004', + 'CORE_STUDENTSTATUS_0001' => 'CORE_STUDENTSTATUS_0001', + 'CORE_STUDENTSTATUS_0002' => 'CORE_STUDENTSTATUS_0002', + 'CORE_STUDENTSTATUS_0003' => 'CORE_STUDENTSTATUS_0003', + 'CORE_STUDENTSTATUS_0004' => 'CORE_STUDENTSTATUS_0004', + 'CORE_STUDENTSTATUS_0005' => 'CORE_STUDENTSTATUS_0005', + 'CORE_STUDENTSTATUS_0006' => 'CORE_STUDENTSTATUS_0006', + 'CORE_STUDENTSTATUS_0007' => 'CORE_STUDENTSTATUS_0007', + 'CORE_STUDENTSTATUS_0008' => 'CORE_STUDENTSTATUS_0008', + 'CORE_STUDENTSTATUS_0009' => 'CORE_STUDENTSTATUS_0009', + 'CORE_STUDENTSTATUS_0010' => 'CORE_STUDENTSTATUS_0010', + 'CORE_STUDENTSTATUS_0011' => 'CORE_STUDENTSTATUS_0011', + 'CORE_STUDENTSTATUS_0012' => 'CORE_STUDENTSTATUS_0012', + 'CORE_STUDENTSTATUS_0013' => 'CORE_STUDENTSTATUS_0013', + 'CORE_STUDENTSTATUS_0014' => 'CORE_STUDENTSTATUS_0014', + 'CORE_PERSON_0001' => 'CORE_PERSON_0001', + 'CORE_PERSON_0002' => 'CORE_PERSON_0002', + 'CORE_PERSON_0003' => 'CORE_PERSON_0003', + 'CORE_PERSON_0004' => 'CORE_PERSON_0004' ); } } diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php index 878f04935..d72c4f007 100644 --- a/application/controllers/system/issues/Plausichecks.php +++ b/application/controllers/system/issues/Plausichecks.php @@ -79,8 +79,8 @@ class Plausichecks extends Auth_Controller { $fehlerText = getData($fehlerRes)[0]->fehlertext; $fehlerText = isEmptyArray($fehlertext_params) ? $fehlerText : vsprintf($fehlerText, $fehlertext_params); - if (isset($person_id)) $fehlerText .= ", person_id: $person_id"; - if (isset($oe_kurzbz)) $fehlerText .= ", oe_kurzbz: $oe_kurzbz"; + if (isset($person_id)) $fehlerText .= "; person_id: $person_id"; + if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz"; $issueTexts[$fehler_kurzbz][] = $fehlerText; } } diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 40b7976f6..696df1647 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -31,7 +31,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getPrestudentenStgUngleichStgStudent($studiengang_kz = null, $prestudent_id = null) + public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null) { $params = array(); @@ -155,13 +155,13 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getPrestudentStgUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null) + public function getStgPrestudentUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null, $studienordnung_id = null) { $params = array(); $qry = " SELECT - DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, + DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id, stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM public.tbl_prestudent ps @@ -185,6 +185,12 @@ class PlausicheckLib $params[] = $prestudent_id; } + if (isset($studienordnung_id)) + { + $qry .= " AND stordnung.studienordnung_id = ?"; + $params[] = $studienordnung_id; + } + return $this->_db->execReadOnlyQuery($qry, $params); } @@ -258,7 +264,7 @@ class PlausicheckLib if (isset($prestudent_id)) { - $qry .= " AND pre.prestudent_id = ?"; + $qry .= " AND prestudent.prestudent_id = ?"; $params[] = $prestudent_id; } @@ -408,91 +414,52 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null) { - $params = array($studiensemester_kurzbz); + $params = array(); $results = array(); // all active students with Status student in current semester $qry = " - SELECT - DISTINCT(student_uid), prestudent.person_id, prestudent.prestudent_id, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_student student - JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - benutzer.aktiv=true - AND status.status_kurzbz='Student' - AND status.studiensemester_kurzbz=?"; + SELECT DISTINCT ON (prestudent_id) * + FROM ( + SELECT + prestudent.person_id, prestudent.prestudent_id, + stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, + ROW_NUMBER () OVER ( + PARTITION BY prestudent.prestudent_id + ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC + ) AS reihenfolge_semester, + ROW_NUMBER () OVER ( + PARTITION BY prestudent.prestudent_id + ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC + ) AS reihenfolge_datum + FROM + public.tbl_student student + JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + benutzer.aktiv=true + AND status.status_kurzbz='Student' + ) reihenfolge + WHERE reihenfolge_semester <> reihenfolge_datum"; if (isset($studiengang_kz)) { - $qry .= " AND stg.studiengang_kz = ?"; + $qry .= " AND studiengang_kz = ?"; $params[] = $studiengang_kz; } if (isset($prestudent_id)) { - $qry .= " AND pre.prestudent_id = ?"; + $qry .= " AND prestudent_id = ?"; $params[] = $prestudent_id; } - $qryRes = $this->_db->execReadOnlyQuery($qry, $params); - - if (isError($qryRes)) return $qryRes; - - if (hasData($qryRes)) - { - $students = getData($qryRes); - - foreach ($students as $student) - { - // get all status of student, sorted by semester start - $qryOrderSemester = " - SELECT - status.* - FROM - public.tbl_prestudentstatus status - JOIN public.tbl_studiensemester semester USING(studiensemester_kurzbz) - WHERE - prestudent_id = ? - ORDER BY semester.start DESC, status.datum DESC;"; - - $qryOrderSemesterRes = $this->_db->execReadOnlyQuery($qryOrderSemester, array($student->prestudent_id)); - - if (isError($qryOrderSemesterRes)) return $qryOrderSemesterRes; - - $prestudentsSemesterSorted = hasData($qryOrderSemesterRes) ? getData($qryOrderSemesterRes) : array(); - - // get all status of student, sorted by status date - $this->_ci->PrestudentstatusModel->addSelect('studiensemester_kurzbz'); - $this->_ci->PrestudentstatusModel->addOrder('datum', 'DESC'); - $this->_ci->PrestudentstatusModel->addOrder('insertamum', 'DESC'); - $qryOrderDateRes = $this->_ci->PrestudentstatusModel->loadWhere(array('prestudent_id' => $student->prestudent_id)); - - if (isError($qryOrderDateRes)) return $qryOrderDateRes; - - $prestudentsDateSorted = hasData($qryOrderDateRes) ? getData($qryOrderDateRes) : array(); - - // check if differently sorted status have same Studiensemester order - $countStatus = count($prestudentsSemesterSorted); - - for ($i = 0; $i < $countStatus; $i++) - { - if ($prestudentsSemesterSorted[$i]->studiensemester_kurzbz != $prestudentsDateSorted[$i]->studiensemester_kurzbz) - { - $results[] = $student; - break; - } - } - } - } - - return success($results); + return $this->_db->execReadOnlyQuery($qry, $params); } /** @@ -622,6 +589,8 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz WHERE status_kurzbz = 'Absolvent' + AND pre.bismelden + AND stg.melderelevant AND NOT EXISTS ( /* exclude gs */ SELECT 1 FROM bis.tbl_mobilitaet @@ -684,7 +653,7 @@ class PlausicheckLib * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ - public function getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz = null, $abschlusspruefung_id = null) + public function getDatumSponsionFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) { $results = array(); @@ -726,7 +695,7 @@ class PlausicheckLib JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id) JOIN public.tbl_person USING(person_id) LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE status_kurzbz='Bewerber' AND reihungstestangetreten=false @@ -752,7 +721,7 @@ class PlausicheckLib if (isset($prestudent_id)) { - $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $qry .= " AND prestudent.prestudent_id = ?"; $params[] = $prestudent_id; } @@ -774,7 +743,7 @@ class PlausicheckLib FROM public.tbl_prestudent pre JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE prestat.status_kurzbz != 'Incoming' AND prestat.studiensemester_kurzbz = ? @@ -799,7 +768,7 @@ class PlausicheckLib /** * Prestudent should have a final status. - * + * * @param int prestudent_id if check is to be executed only for one prestudent * @return success with prestudents or error */ @@ -815,7 +784,7 @@ class PlausicheckLib public.tbl_prestudent pre JOIN public.tbl_person USING(person_id) JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE NOT EXISTS( /*student does not study anymore*/ SELECT @@ -899,7 +868,7 @@ class PlausicheckLib SELECT 1 FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang USING(studiengang_kz) WHERE person_id = pers.person_id"; if (isset($studiensemester_kurzbz)) diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index b165a4b76..adca981d1 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -34,7 +34,7 @@ class PlausicheckProducerLib 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde', 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent', 'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform', - 'PrestudentStgUngleichStgStudienplan' => 'PrestudentStgUngleichStgStudienplan', + 'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan', 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher' //'StudienplanUngueltig' => 'StudienplanUngueltig' diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php index fadcf3e74..ab8566e47 100644 --- a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php +++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php @@ -14,11 +14,10 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker $results = array(); // 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->getDatumStudiensemesterFalscheReihenfolge($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -34,8 +33,7 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), 'resolution_params' => array( - 'prestudent_id' => $prestudent->prestudent_id, - 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + 'prestudent_id' => $prestudent->prestudent_id ) ); } diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php index f4cd6f01e..3c781cd63 100644 --- a/application/libraries/issues/plausichecks/PlausiChecker.php +++ b/application/libraries/issues/plausichecks/PlausiChecker.php @@ -1,7 +1,7 @@ _ci->plausichecklib->getPrestudentenStgUngleichStgStudent($studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php similarity index 83% rename from application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php rename to application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php index 980297861..7175725fd 100644 --- a/application/libraries/issues/plausichecks/PrestudentStgUngleichStgStudienplan.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php @@ -7,7 +7,7 @@ require_once('PlausiChecker.php'); /** * */ -class PrestudentStgUngleichStgStudienplan extends PlausiChecker +class StgPrestudentUngleichStgStudienplan extends PlausiChecker { public function executePlausiCheck($params) { @@ -17,7 +17,7 @@ class PrestudentStgUngleichStgStudienplan extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getPrestudentStgUngleichStgStudienplan($studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -32,7 +32,7 @@ class PrestudentStgUngleichStgStudienplan extends PlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studienplan' => $prestudent->studienplan), - 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studienordnung_id' => $prestudent->studienordnung_id) ); } } diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0006.php b/application/libraries/issues/resolvers/CORE_INOUT_0006.php index a447a9625..6894c9878 100644 --- a/application/libraries/issues/resolvers/CORE_INOUT_0006.php +++ b/application/libraries/issues/resolvers/CORE_INOUT_0006.php @@ -15,7 +15,6 @@ class CORE_INOUT_0006 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); - //$this->_ci->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel'); // get all Zwecke $this->_ci->BisioModel->addSelect('ects_erworben'); diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0007.php b/application/libraries/issues/resolvers/CORE_INOUT_0007.php index 925344e34..2d9c7a3f4 100644 --- a/application/libraries/issues/resolvers/CORE_INOUT_0007.php +++ b/application/libraries/issues/resolvers/CORE_INOUT_0007.php @@ -9,7 +9,7 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker { public function checkIfIssueIsResolved($params) { - if (!isset($params['person_id']) || !is_numeric($params['person_id'])) + if (!isset($params['issue_person_id']) || !is_numeric($params['issue_person_id'])) return error('Person Id missing, issue_id: '.$params['issue_id']); if (!isset($params['studiensemester_kurzbz']) || isEmptyString($params['studiensemester_kurzbz'])) @@ -20,14 +20,13 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker $this->_ci->load->library('issues/PlausicheckLib'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['person_id']); + $checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; if (hasData($checkRes)) - return success(false); // not resolved if issue is still present + return success(false); // not resolved if issue is still present else return success(true); // resolved otherwise } } - diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0008.php b/application/libraries/issues/resolvers/CORE_INOUT_0008.php new file mode 100644 index 000000000..afa43893a --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_INOUT_0008.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0001.php b/application/libraries/issues/resolvers/CORE_PERSON_0001.php new file mode 100644 index 000000000..bd94fea59 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0001.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck(null, null, $params['issue_person_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0002.php b/application/libraries/issues/resolvers/CORE_PERSON_0002.php new file mode 100644 index 000000000..d1bb2fe94 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0002.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0003.php b/application/libraries/issues/resolvers/CORE_PERSON_0003.php new file mode 100644 index 000000000..08fea6c05 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0003.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0004.php b/application/libraries/issues/resolvers/CORE_PERSON_0004.php new file mode 100644 index 000000000..bfe243fd1 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0004.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STG_0001.php b/application/libraries/issues/resolvers/CORE_STG_0001.php new file mode 100644 index 000000000..97cef6056 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STG_0001.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STG_0002.php b/application/libraries/issues/resolvers/CORE_STG_0002.php new file mode 100644 index 000000000..fe414de38 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STG_0002.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STG_0003.php b/application/libraries/issues/resolvers/CORE_STG_0003.php new file mode 100644 index 000000000..33cb0846b --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STG_0003.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STG_0004.php b/application/libraries/issues/resolvers/CORE_STG_0004.php new file mode 100644 index 000000000..02d45bbd3 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STG_0004.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php new file mode 100644 index 000000000..78c49810b --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getAbbrecherAktiv(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php new file mode 100644 index 000000000..23943397a --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php new file mode 100644 index 000000000..6ac243b4f --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php new file mode 100644 index 000000000..d76215b6a --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php new file mode 100644 index 000000000..7f7ca4723 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php new file mode 100644 index 000000000..ba1e5b715 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php new file mode 100644 index 000000000..1dd8fdcb2 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus(null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php new file mode 100644 index 000000000..83357d9bf --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php new file mode 100644 index 000000000..b1b5e9876 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php new file mode 100644 index 000000000..1e3a6849b --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php new file mode 100644 index 000000000..233240305 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php new file mode 100644 index 000000000..38832edc0 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php new file mode 100644 index 000000000..78ad40a8e --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php new file mode 100644 index 000000000..9b70219f4 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php @@ -0,0 +1,32 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php index 8fba2a02f..db894457f 100644 --- a/application/views/system/issues/plausichecks.php +++ b/application/views/system/issues/plausichecks.php @@ -82,7 +82,7 @@ $this->load->view(

- +
diff --git a/public/js/issues/plausichecks.js b/public/js/issues/plausichecks.js index 0849fff85..f679c9434 100644 --- a/public/js/issues/plausichecks.js +++ b/public/js/issues/plausichecks.js @@ -54,7 +54,7 @@ var Plausichecks = { * When JQuery is up */ $(document).ready(function () { - // set event for adding a new Zuständigkeit + // start the Plausicheck run on button click $("#plausistart").click( function () { Plausichecks.startPlausichecks( diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 8709fc812..e329ef62b 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -151,7 +151,7 @@ $fehlerArr = array( ), array( 'fehlercode' => 'CORE_STG_0004', - 'fehler_kurzbz' => 'PrestudentStgUngleichStgStudienplan', + 'fehler_kurzbz' => 'StgPrestudentUngleichStgStudienplan', 'fehlercode_extern' => null, 'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s, Studienplan %s)', 'fehlertyp_kurzbz' => 'error', @@ -326,11 +326,11 @@ for ($fehlerCounter = 0; $fehlerCounter < count($fehlerArr); $fehlerCounter++) { $selectFehlerQuery = 'SELECT 1 FROM system.tbl_fehler - WHERE fehlercode = '.$db->db_add_param($fehler['fehlercode']); + WHERE fehlercode = '.$db->db_add_param($fehler['fehlercode']); // If no error occurred while loading a fehler from the DB - if ($dbFehlerDefinition = @$db->db_query($selectFehlerQuery)) - { + if ($dbFehlerDefinition = @$db->db_query($selectFehlerQuery)) + { // If NO filters were loaded: insert if ($db->db_num_rows($dbFehlerDefinition) == 0) { From c31ab4874d7b281576367d8b3046ed25e819ab0c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 5 Oct 2022 14:04:59 +0200 Subject: [PATCH 22/40] moved "plausicheck start" button in GUI to the right --- application/views/system/issues/plausichecks.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php index db894457f..421243f0a 100644 --- a/application/views/system/issues/plausichecks.php +++ b/application/views/system/issues/plausichecks.php @@ -79,10 +79,10 @@ $this->load->view(
-
+

- +
From edd310351bf16c94bc390702e4b5a866c3c5343c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 5 Oct 2022 14:07:29 +0200 Subject: [PATCH 23/40] plausichecks fehlertext: check number of parameters before calling vsprintf --- application/controllers/system/issues/Plausichecks.php | 10 +++++++++- application/libraries/IssuesLib.php | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php index d72c4f007..daa7716dd 100644 --- a/application/controllers/system/issues/Plausichecks.php +++ b/application/controllers/system/issues/Plausichecks.php @@ -78,7 +78,15 @@ class Plausichecks extends Auth_Controller if (hasData($fehlerRes)) { $fehlerText = getData($fehlerRes)[0]->fehlertext; - $fehlerText = isEmptyArray($fehlertext_params) ? $fehlerText : vsprintf($fehlerText, $fehlertext_params); + + if (!isEmptyArray($fehlertext_params)) + { + if (count($fehlertext_params) != substr_count($fehlerText, '%s')) + $this->terminateWithJsonError('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehler_kurzbz); + + $fehlerText = vsprintf($fehlerText, $fehlertext_params); + } + if (isset($person_id)) $fehlerText .= "; person_id: $person_id"; if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz"; $issueTexts[$fehler_kurzbz][] = $fehlerText; diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php index 7cc1f964d..9b3a9de6e 100644 --- a/application/libraries/IssuesLib.php +++ b/application/libraries/IssuesLib.php @@ -236,7 +236,15 @@ class IssuesLib if (hasData($fehlerRes)) { $fehlertextVorlage = getData($fehlerRes)[0]->fehlertext; - $fehlertext = isEmptyArray($fehlertext_params) ? $fehlertextVorlage : vsprintf($fehlertextVorlage, $fehlertext_params); + + $fehlertext = $fehlertextVorlage; + if (!isEmptyArray($fehlertext_params)) + { + if (count($fehlertext_params) != substr_count($fehlertextVorlage, '%s')) + return error('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehlercode); + + $fehlertext = vsprintf($fehlertextVorlage, $fehlertext_params); + } $openIssuesCountRes = $this->_ci->IssueModel->getOpenIssueCount($fehlercode, $person_id, $oe_kurzbz, $fehlercode_extern); From fb70ba3da5c58e21eee5bae0e39773e94157b93a Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 6 Oct 2022 03:25:57 +0200 Subject: [PATCH 24/40] issueDataset.js: enabled sending many issue ids for status change by splitting up --- public/js/issues/issuesDataset.js | 107 ++++++++++++++++-------------- 1 file changed, 57 insertions(+), 50 deletions(-) diff --git a/public/js/issues/issuesDataset.js b/public/js/issues/issuesDataset.js index 57a8fb4fd..79549244e 100644 --- a/public/js/issues/issuesDataset.js +++ b/public/js/issues/issuesDataset.js @@ -3,12 +3,13 @@ */ var IssuesDataset = { + // number of max issue ids that can be sent in one request for status change + maxIssuesPerRequest: 1000, /** * adds person table additional actions html (above and beneath it) */ - appendTableActionsHtml: function() - { + appendTableActionsHtml: function() { let auswahlStatus = '
' + '
-
+
-
+

- +
From f2f960fd43f0a31fed9cd467d5c737b20e894caf Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sat, 8 Oct 2022 01:40:14 +0200 Subject: [PATCH 30/40] Plausichecks: added comments, fixed bug for studiengang parameter in GbDatumWeitZurueck check --- .../controllers/jobs/PlausiIssueProducer.php | 4 +- .../system/issues/Plausichecks.php | 25 ++--- .../libraries/issues/PlausicheckLib.php | 96 ++++++++++++++----- .../issues/PlausicheckProducerLib.php | 11 ++- .../issues/plausichecks/PlausiChecker.php | 2 +- 5 files changed, 94 insertions(+), 44 deletions(-) diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php index fdacc7740..943d7aa46 100644 --- a/application/controllers/jobs/PlausiIssueProducer.php +++ b/application/controllers/jobs/PlausiIssueProducer.php @@ -15,6 +15,8 @@ class PlausiIssueProducer extends JOB_Controller /** * Runs issue production job. + * @param studiensemester_kurzbz string job is run for students of a certain semester. + * @param studiengang_kz int job is run for students of certain Studiengang. */ public function run($studiensemester_kurzbz = null, $studiengang_kz = null) { @@ -27,7 +29,7 @@ class PlausiIssueProducer extends JOB_Controller { // execute the check $this->logInfo("Checking " . $fehler_kurzbz . "..."); - $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); + $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes)); diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php index daa7716dd..588e35037 100644 --- a/application/controllers/system/issues/Plausichecks.php +++ b/application/controllers/system/issues/Plausichecks.php @@ -4,8 +4,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class Plausichecks extends Auth_Controller { - private $_uid; - public function __construct() { parent::__construct( @@ -24,16 +22,20 @@ class Plausichecks extends Auth_Controller $this->load->model('system/Fehler_model', 'FehlerModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - - $this->_setAuthUID(); // sets property uid } + /* + * Get data for filtering the plausichecks and load the view. + */ public function index() { $filterData = $this->_getFilterData(); $this->load->view('system/issues/plausichecks', $filterData); } + /** + * Initiate plausichecks run. + */ public function runChecks() { $studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz'); @@ -52,7 +54,7 @@ class Plausichecks extends Auth_Controller { // execute the check $issueTexts[$fehler_kurzbz] = array(); - $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); + $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes)); @@ -98,6 +100,9 @@ class Plausichecks extends Auth_Controller $this->outputJsonSuccess($issueTexts); } + /** + * Get the data needed for filtering for limiting checks. + */ private function _getFilterData() { $this->StudiensemesterModel->addOrder('start', 'DESC'); @@ -126,14 +131,4 @@ class Plausichecks extends Auth_Controller 'fehler' => $fehlerKurzbz ); } - - /** - * 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/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 4df7b26ca..8df3e7523 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -28,7 +28,8 @@ class PlausicheckLib /** * Studiengang should be the same for prestudent and student. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null) @@ -64,7 +65,9 @@ class PlausicheckLib /** * Orgform of a Studiengang in Studienplan should be the same as orgform of student. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -115,7 +118,9 @@ class PlausicheckLib /** * Students in "mixed" Studiengang should have Orgform. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -153,7 +158,9 @@ class PlausicheckLib /** * Studiengang should be the same for prestudent and studienplan. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param studienordnung_id int if check is to be executed only for a certain studienordnung_id * @return success with prestudents or error */ public function getStgPrestudentUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null, $studienordnung_id = null) @@ -201,7 +208,8 @@ class PlausicheckLib /** * Abbrecher cannot be active. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null) @@ -238,7 +246,8 @@ class PlausicheckLib /** * There shouldn't be any status after Abbrecher status. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null) @@ -276,7 +285,9 @@ class PlausicheckLib /** * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -318,7 +329,9 @@ class PlausicheckLib /** * Students with active status should have an active Benutzer. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -358,7 +371,9 @@ class PlausicheckLib * Students of a semester shouldn't start studies before the date of Bismeldung. * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020 * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022 - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -413,7 +428,8 @@ class PlausicheckLib /** * Status Dates and status studysemester dates should be in correct order. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null) @@ -466,7 +482,8 @@ class PlausicheckLib /** * Students with active Benutzer should have a status in the current semester. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null) @@ -512,7 +529,9 @@ class PlausicheckLib /** * Studienplan should be valid in current Ausbildungssemester of prestudent. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -566,7 +585,9 @@ class PlausicheckLib /** * Students with finished studies should have exactly one final exam. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) @@ -626,7 +647,9 @@ class PlausicheckLib /** * Date of final exam shouldn't be missing for Absolvent. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung * @return success with prestudents or error */ public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) @@ -652,7 +675,9 @@ class PlausicheckLib /** * Date of sponsion shouldn't be missing for Absolvent. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung * @return success with prestudents or error */ public function getDatumSponsionFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) @@ -678,7 +703,9 @@ class PlausicheckLib /** * Bewerber should have participated in Reihungstest. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -732,7 +759,9 @@ class PlausicheckLib /** * Current Ausbildungssemester shouldn't be 0. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) @@ -770,8 +799,9 @@ class PlausicheckLib /** * Prestudent should have a final status. - * - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getAbschlussstatusFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) @@ -852,7 +882,9 @@ class PlausicheckLib /** * Birthdate is too long ago. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person * @return success with prestudents or error */ public function getGbDatumWeitZurueck($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) @@ -870,7 +902,7 @@ class PlausicheckLib SELECT 1 FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE person_id = pers.person_id"; if (isset($studiensemester_kurzbz)) @@ -898,7 +930,8 @@ class PlausicheckLib /** * Nation is not Austria, but address has austrian Gemeinde. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person * @return success with prestudents or error */ public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null) @@ -936,7 +969,9 @@ class PlausicheckLib /** * Students should have exactly one home address. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person * @return success with prestudents or error */ public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) @@ -986,7 +1021,9 @@ class PlausicheckLib /** * Students should have exactly one delivery address. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person * @return success with prestudents or error */ public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null) @@ -1039,7 +1076,9 @@ class PlausicheckLib /** * Incoming shouldn't have austrian home address. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person * @return success with prestudents or error */ public function getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null) @@ -1080,7 +1119,8 @@ class PlausicheckLib /** * Incoming should have IN/OUT data. - * @param int prestudent_id if check is to be executed only for one prestudent + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent * @return success with prestudents or error */ public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null) @@ -1125,6 +1165,9 @@ class PlausicheckLib /** * Get final exams in a semester which are invalid (e.g. missing data) + * @param studiensemester_kurzbz string if check is to be executed for certain Studiengang + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param abschlusspruefung_id int if check is to be executed for certain Abschlussprüfung */ private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null) { @@ -1178,6 +1221,7 @@ class PlausicheckLib /** * Gets Bismeldedate from Studiensemester. + * @param studiensemester_kurzbz string */ private function _getBisdateFromSemester($studiensemester_kurzbz) { diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index adca981d1..74adb21dd 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -52,7 +52,13 @@ class PlausicheckProducerLib if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz; } - public function producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null) + /** + * 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 + */ + public function producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null) { $libName = $this->_fehlerLibMappings[$fehler_kurzbz]; @@ -85,6 +91,9 @@ class PlausicheckProducerLib 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); diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php index 3c781cd63..bfa72b5e0 100644 --- a/application/libraries/issues/plausichecks/PlausiChecker.php +++ b/application/libraries/issues/plausichecks/PlausiChecker.php @@ -17,7 +17,7 @@ abstract class PlausiChecker /** * Executes a plausi check. - * @param array $params parameters needed for executing the check + * @param $paramsForChecking array parameters needed for executing the check * @return array with objects which failed the plausi check */ abstract public function executePlausiCheck($paramsForChecking); From 65c6466465a6e63f4f6372eeefa435b3a8a8b168 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 12 Oct 2022 11:23:51 +0200 Subject: [PATCH 31/40] PlausicheckLib: -run check InaktiverStatusAktiverStatus always for current semester -removed unused result variables, todo comment --- application/libraries/issues/PlausicheckLib.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 696df1647..dd6b0daed 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -242,7 +242,6 @@ class PlausicheckLib public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null) { $params = array(); - $result = array(); $qry = " SELECT @@ -268,7 +267,6 @@ class PlausicheckLib $params[] = $prestudent_id; } - // TODO - maybe also put in sql? return $this->_db->execReadOnlyQuery($qry, $params); } @@ -321,6 +319,12 @@ class PlausicheckLib */ public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { + $aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); + + if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes; + + $studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : ''; + $params = array($studiensemester_kurzbz); $qry = " @@ -333,7 +337,8 @@ class PlausicheckLib JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz WHERE benutzer.aktiv=false - AND get_rolle_prestudent(prestudent_id, ?) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') + AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?) + AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') AND stg.melderelevant AND prestudent.bismelden"; @@ -365,7 +370,6 @@ class PlausicheckLib $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); $params = array($datumBis, $studiensemester_kurzbz, $datumBis); - $results = array(); // get active students $qry = " @@ -417,7 +421,6 @@ class PlausicheckLib public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null) { $params = array(); - $results = array(); // all active students with Status student in current semester $qry = " @@ -470,7 +473,6 @@ class PlausicheckLib public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null) { $params = array(); - $results = array(); $qry = " SELECT From 2504c91cd92fbea4b0db2e98091d14929c9e14b2 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 12 Oct 2022 12:36:34 +0200 Subject: [PATCH 32/40] AusbildungssemPrestudentUngleichAusbildungssemStatus Plausicheck: added student_uid to fehlertext, changed order of ausbildungssemester in fehlertext --- application/libraries/issues/PlausicheckLib.php | 2 +- .../AusbildungssemPrestudentUngleichAusbildungssemStatus.php | 3 ++- system/fehlerupdate.php | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index a05b851c4..d55e7dd39 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -294,7 +294,7 @@ class PlausicheckLib $qry = " SELECT - DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, + DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id, status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz FROM diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php index 41df05acd..ca967a97f 100644 --- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php +++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php @@ -36,8 +36,9 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker 'person_id' => $prestudent->person_id, 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array( - 'student_ausbildungssemester' => $prestudent->student_ausbildungssemester, 'status_ausbildungssemester' => $prestudent->status_ausbildungssemester, + 'student_ausbildungssemester' => $prestudent->student_ausbildungssemester, + 'student_uid' => $prestudent->student_uid, 'prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz ), diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 0d8f653a6..da4ebe12d 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -177,7 +177,7 @@ $fehlerArr = array( 'fehlercode' => 'CORE_STUDENTSTATUS_0003', 'fehler_kurzbz' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Aktuelles Ausbildungssemester %s bei StudentIn (Lehrverband) stimmt nicht mit dem Ausbildungssemester %s des aktuellen Status überein. (prestudent_id %s, Studiensemester %s)', + 'fehlertext' => 'Ausbildungssemester %s des aktuellen Status stimmt nicht mit Ausbildungssemester %s bei StudentIn (Lehrverband) überein. (student_uid %s, prestudent_id %s, Studiensemester %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), From 336f32bee072056653f3c0228c86d8426700e03e Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 17 Oct 2022 18:12:34 +0200 Subject: [PATCH 33/40] issues: removed unnecessary unique constraint on fehlercode and fehler_kurzbz, added NOT NULL constraint on fehler_kurzbz together with fehlercode_extern --- system/dbupdate_3.3.php | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index a1c7cfe1a..28ba9de0b 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6783,6 +6783,57 @@ if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvdoktor LIMIT 1")) echo '
Spalte aktiv zu bis.tbl_zgvdoktor hinzugefügt'; } +// Remove UNIQUE constraint on fehlercode and fehler_kurzbz on system.tbl_fehler +if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'uk_tbl_fehler_fehlercode_fehler_kurzbz'")) +{ + if ($db->db_num_rows($result) > 0) + { + $qry = "ALTER TABLE system.tbl_fehler DROP CONSTRAINT uk_tbl_fehler_fehlercode_fehler_kurzbz;"; + + if (!$db->db_query($qry)) + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + else + echo '
Removed UNIQUE constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; + } +} + +// Add NOT NULL constraint on fehler_kurzbz and fehlercode_extern on system.tbl_fehler +if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'chk_tbl_fehler_fehler_kurzbz_fehlercode_extern'")) +{ + if ($db->db_num_rows($result) == 0) + { + $hasError = false; + $qry = "SELECT 1 FROM system.tbl_fehler WHERE fehler_kurzbz IS NULL AND fehlercode_extern IS NULL AND fehlercode = 'UNKNOWN_ERROR'"; + + $result = $db->db_query($qry); + if ($db->db_num_rows($result)>0) + { + // Add fehler_kurzbz TO UNKNOWN_ERROR to satisfy constraint + $qry = "UPDATE system.tbl_fehler SET fehler_kurzbz='unbekannterCoreFehler' WHERE fehlercode = 'UNKNOWN_ERROR';"; + + if(!$db->db_query($qry)) + { + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + $hasError = true; + } + else + { + echo '
Add fehler_kurzbz to UNKNOWN_ERROR in system.tbl_fehler'; + } + } + + if (!$hasError) + { + $qry = "ALTER TABLE system.tbl_fehler ADD CONSTRAINT chk_tbl_fehler_fehler_kurzbz_fehlercode_extern CHECK (fehler_kurzbz IS NOT NULL OR fehlercode_extern IS NOT NULL);"; + + if (!$db->db_query($qry)) + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + else + echo '
Added NOT NULL constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; + } + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 7a1f36cb5ec8fb4db6233b32738d1548a3bcbeea Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sun, 23 Oct 2022 18:02:59 +0200 Subject: [PATCH 34/40] issuesData Fehlermonitoring: changed order for issue display, first by error type, then by status --- application/views/system/issues/issuesData.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index ce05ecf8a..501cf4b26 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -130,16 +130,17 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt)) )"; } -$query .= " ORDER BY CASE - WHEN iss.status_kurzbz = '".IssuesLib::STATUS_NEU."' THEN 0 - WHEN iss.status_kurzbz = '".IssuesLib::STATUS_IN_BEARBEITUNG."' THEN 1 - ELSE 2 - END, +$query .= " ORDER BY CASE WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0 WHEN fehlertyp_kurzbz = '".IssuesLib::WARNINGTYPE_CODE."' THEN 1 ELSE 2 END, + CASE + WHEN iss.status_kurzbz = '".IssuesLib::STATUS_NEU."' THEN 0 + WHEN iss.status_kurzbz = '".IssuesLib::STATUS_IN_BEARBEITUNG."' THEN 1 + ELSE 2 + END, datum DESC, fehlercode, issue_id DESC"; $filterWidgetArray = array( From ebb3a6de1fd9e5949233319b5ab07cba18e4c965 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 3 Nov 2022 15:33:05 +0100 Subject: [PATCH 35/40] plausichecks view: adapted to vue update - set correct cs and css includes, removed body --- application/views/system/issues/plausichecks.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php index 99d426199..4016e64cd 100644 --- a/application/views/system/issues/plausichecks.php +++ b/application/views/system/issues/plausichecks.php @@ -3,12 +3,12 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'Plausichecks', - 'jquery' => true, - 'jqueryui' => true, + 'jquery3' => true, + 'jqueryui1' => true, 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'ajaxlib' => true, 'navigationwidget' => true, 'dialoglib' => true, @@ -18,7 +18,6 @@ $this->load->view( ); ?> -
widgetlib->widget('NavigationWidget'); ?> @@ -98,6 +97,5 @@ $this->load->view(
- load->view('templates/FHC-Footer'); ?> From 33eb1cb6af2921a4a6ee6decf5bef41c74b42803 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 23 Nov 2022 16:21:05 +0100 Subject: [PATCH 36/40] removed comment in Plausichecks.php controller --- application/controllers/system/issues/Plausichecks.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php index 588e35037..748361321 100644 --- a/application/controllers/system/issues/Plausichecks.php +++ b/application/controllers/system/issues/Plausichecks.php @@ -16,7 +16,6 @@ class Plausichecks extends Auth_Controller // Load libraries $this->load->library('issues/PlausicheckProducerLib'); $this->load->library('WidgetLib'); - //$this->load->library('IssuesLib'); // Load models $this->load->model('system/Fehler_model', 'FehlerModel'); From d1ac2e042462bcc6c818e18a9a4a5a7e9c3b2885 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 30 Nov 2022 17:26:50 +0100 Subject: [PATCH 37/40] added plausicheck "getIncomingUndGsFoerderrelevant" --- .../libraries/issues/PlausicheckLib.php | 65 +++++++++++++++++++ .../issues/PlausicheckProducerLib.php | 1 + .../IncomingUndGsFoerderrelevant.php | 44 +++++++++++++ system/fehlerupdate.php | 8 +++ 4 files changed, 118 insertions(+) create mode 100644 application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index d55e7dd39..951e77c7f 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -1162,6 +1162,71 @@ class PlausicheckLib return $this->_db->execReadOnlyQuery($qry, $params); } + /** + * Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant). + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @return object success or error + */ + public function getIncomingUndGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + { + $params = array($studiensemester_kurzbz, $studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT ON(prestudent_id) + pers.person_id, + ps.prestudent_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student stud + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz) + WHERE + ( + EXISTS + ( + SELECT 1 + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = ps.prestudent_id + AND status_kurzbz = 'Incoming' + AND studiensemester_kurzbz = ? + ) + OR EXISTS ( + SELECT 1 + FROM + bis.tbl_mobilitaet + JOIN public.tbl_prestudent USING(prestudent_id) + WHERE + prestudent_id = ps.prestudent_id + AND gsstudientyp_kurzbz = 'Extern' + AND studiensemester_kurzbz = ? + ) + ) + AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL) + AND bismelden=TRUE + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND ps.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + //------------------------------------------------------------------------------------------------------------------ // Private methods diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index 74adb21dd..fb85cf98f 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -30,6 +30,7 @@ class PlausicheckProducerLib 'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus', 'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich', 'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz', + 'IncomingUndGsFoerderrelevant' => 'IncomingUndGsFoerderrelevant', 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung', 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde', 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent', diff --git a/application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php new file mode 100644 index 000000000..919fb8415 --- /dev/null +++ b/application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php @@ -0,0 +1,44 @@ +_ci->plausichecklib->getIncomingUndGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } +} diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index da4ebe12d..9cfa5a0c4 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -125,6 +125,14 @@ $fehlerArr = array( 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ), + array( + 'fehlercode' => 'CORE_INOUT_0009', + 'fehler_kurzbz' => 'IncomingUndGsFoerderrelevant', + 'fehlercode_extern' => null, + 'fehlertext' => 'Incoming oder gemeinsames Studium ist nicht als nicht förderrelevant markiert. (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), array( 'fehlercode' => 'CORE_STG_0001', 'fehler_kurzbz' => 'StgPrestudentUngleichStgStudent', From 7d1267732f7f76ae0b63850c9023c7bbfdcaf77a Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 30 Nov 2022 17:53:36 +0100 Subject: [PATCH 38/40] IncomingOrGsFoerderrelevant plausicheck: added first version of issue resolver, renamed from IncomingAndGsFoerderrelevant --- .../controllers/jobs/IssueResolver.php | 1 + .../libraries/issues/PlausicheckLib.php | 2 +- .../issues/PlausicheckProducerLib.php | 2 +- ...nt.php => IncomingOrGsFoerderrelevant.php} | 4 +-- .../issues/resolvers/CORE_INOUT_0009.php | 29 +++++++++++++++++++ system/fehlerupdate.php | 2 +- 6 files changed, 35 insertions(+), 5 deletions(-) rename application/libraries/issues/plausichecks/{IncomingUndGsFoerderrelevant.php => IncomingOrGsFoerderrelevant.php} (85%) create mode 100644 application/libraries/issues/resolvers/CORE_INOUT_0009.php diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php index d53a6c10c..78e867936 100755 --- a/application/controllers/jobs/IssueResolver.php +++ b/application/controllers/jobs/IssueResolver.php @@ -25,6 +25,7 @@ class IssueResolver extends IssueResolver_Controller 'CORE_INOUT_0006' => 'CORE_INOUT_0006', 'CORE_INOUT_0007' => 'CORE_INOUT_0007', 'CORE_INOUT_0008' => 'CORE_INOUT_0008', + 'CORE_INOUT_0009' => 'CORE_INOUT_0009', 'CORE_STG_0001' => 'CORE_STG_0001', 'CORE_STG_0002' => 'CORE_STG_0002', 'CORE_STG_0003' => 'CORE_STG_0003', diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 951e77c7f..07f091208 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -1169,7 +1169,7 @@ class PlausicheckLib * @param prestudent_id int if check is to be executed only for one prestudent * @return object success or error */ - public function getIncomingUndGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) { $params = array($studiensemester_kurzbz, $studiensemester_kurzbz); diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php index fb85cf98f..c1e15151f 100644 --- a/application/libraries/issues/PlausicheckProducerLib.php +++ b/application/libraries/issues/PlausicheckProducerLib.php @@ -30,7 +30,7 @@ class PlausicheckProducerLib 'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus', 'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich', 'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz', - 'IncomingUndGsFoerderrelevant' => 'IncomingUndGsFoerderrelevant', + 'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant', 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung', 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde', 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent', diff --git a/application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php similarity index 85% rename from application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php rename to application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php index 919fb8415..0e12ccac8 100644 --- a/application/libraries/issues/plausichecks/IncomingUndGsFoerderrelevant.php +++ b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php @@ -7,7 +7,7 @@ require_once('PlausiChecker.php'); /** * */ -class IncomingUndGsFoerderrelevant extends PlausiChecker +class IncomingOrGsFoerderrelevant extends PlausiChecker { public function executePlausiCheck($params) { @@ -18,7 +18,7 @@ class IncomingUndGsFoerderrelevant extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getIncomingUndGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz); + $prestudentRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0009.php b/application/libraries/issues/resolvers/CORE_INOUT_0009.php new file mode 100644 index 000000000..b56344042 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_INOUT_0009.php @@ -0,0 +1,29 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->library('issues/PlausicheckLib'); + + // check if issue persists + $checkRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']); + + if (isError($checkRes)) return $checkRes; + + if (hasData($checkRes)) + return success(false); // not resolved if issue is still present + else + return success(true); // resolved otherwise + } +} diff --git a/system/fehlerupdate.php b/system/fehlerupdate.php index 9cfa5a0c4..98204315a 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -127,7 +127,7 @@ $fehlerArr = array( ), array( 'fehlercode' => 'CORE_INOUT_0009', - 'fehler_kurzbz' => 'IncomingUndGsFoerderrelevant', + 'fehler_kurzbz' => 'IncomingOrGsFoerderrelevant', 'fehlercode_extern' => null, 'fehlertext' => 'Incoming oder gemeinsames Studium ist nicht als nicht förderrelevant markiert. (prestudent_id %s)', 'fehlertyp_kurzbz' => 'error', From 41eaee41affe657a50c7a5b6311fad15aa2bd6f5 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 1 Dec 2022 17:18:18 +0100 Subject: [PATCH 39/40] getIncomingOrGsFoerderrelevant: studiensemester is checked only for prestudent status --- .../libraries/issues/PlausicheckLib.php | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php index 07f091208..5105169dd 100644 --- a/application/libraries/issues/PlausicheckLib.php +++ b/application/libraries/issues/PlausicheckLib.php @@ -1169,9 +1169,9 @@ class PlausicheckLib * @param prestudent_id int if check is to be executed only for one prestudent * @return object success or error */ - public function getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null) + public function getIncomingOrGsFoerderrelevant($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null) { - $params = array($studiensemester_kurzbz, $studiensemester_kurzbz); + $params = array(); $qry = " SELECT @@ -1184,19 +1184,11 @@ class PlausicheckLib JOIN public.tbl_benutzer ON(student_uid=uid) JOIN public.tbl_person pers USING(person_id) JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz) WHERE ( - EXISTS - ( - SELECT 1 - FROM - public.tbl_prestudentstatus - WHERE - prestudent_id = ps.prestudent_id - AND status_kurzbz = 'Incoming' - AND studiensemester_kurzbz = ? - ) + status.status_kurzbz = 'Incoming' OR EXISTS ( SELECT 1 FROM @@ -1205,13 +1197,18 @@ class PlausicheckLib WHERE prestudent_id = ps.prestudent_id AND gsstudientyp_kurzbz = 'Extern' - AND studiensemester_kurzbz = ? ) ) AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL) AND bismelden=TRUE AND stg.melderelevant"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + if (isset($studiengang_kz)) { $qry .= " AND stg.studiengang_kz = ?"; From 947cc3beffd46e2aa7ef3bf9a9335fd0fbddac4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 9 Feb 2023 16:09:37 +0100 Subject: [PATCH 40/40] =?UTF-8?q?Datenbank=C3=A4ndungen=20von=203.3=20nach?= =?UTF-8?q?=203.4=20verschoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 52 ------------------ system/dbupdate_3.4.php | 1 + .../17512_fehlercode_constraints.php | 54 +++++++++++++++++++ 3 files changed, 55 insertions(+), 52 deletions(-) create mode 100644 system/dbupdate_3.4/17512_fehlercode_constraints.php diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 992eeb647..f57b9d172 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6783,58 +6783,6 @@ if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvdoktor LIMIT 1")) echo '
Spalte aktiv zu bis.tbl_zgvdoktor hinzugefügt'; } -// Remove UNIQUE constraint on fehlercode and fehler_kurzbz on system.tbl_fehler -if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'uk_tbl_fehler_fehlercode_fehler_kurzbz'")) -{ - if ($db->db_num_rows($result) > 0) - { - $qry = "ALTER TABLE system.tbl_fehler DROP CONSTRAINT uk_tbl_fehler_fehlercode_fehler_kurzbz;"; - - if (!$db->db_query($qry)) - echo 'system.tbl_fehler '.$db->db_last_error().'
'; - else - echo '
Removed UNIQUE constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; - } -} - -// Add NOT NULL constraint on fehler_kurzbz and fehlercode_extern on system.tbl_fehler -if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'chk_tbl_fehler_fehler_kurzbz_fehlercode_extern'")) -{ - if ($db->db_num_rows($result) == 0) - { - $hasError = false; - $qry = "SELECT 1 FROM system.tbl_fehler WHERE fehler_kurzbz IS NULL AND fehlercode_extern IS NULL AND fehlercode = 'UNKNOWN_ERROR'"; - - $result = $db->db_query($qry); - if ($db->db_num_rows($result)>0) - { - // Add fehler_kurzbz TO UNKNOWN_ERROR to satisfy constraint - $qry = "UPDATE system.tbl_fehler SET fehler_kurzbz='unbekannterCoreFehler' WHERE fehlercode = 'UNKNOWN_ERROR';"; - - if(!$db->db_query($qry)) - { - echo 'system.tbl_fehler '.$db->db_last_error().'
'; - $hasError = true; - } - else - { - echo '
Add fehler_kurzbz to UNKNOWN_ERROR in system.tbl_fehler'; - } - } - - if (!$hasError) - { - $qry = "ALTER TABLE system.tbl_fehler ADD CONSTRAINT chk_tbl_fehler_fehler_kurzbz_fehlercode_extern CHECK (fehler_kurzbz IS NOT NULL OR fehlercode_extern IS NOT NULL);"; - - if (!$db->db_query($qry)) - echo 'system.tbl_fehler '.$db->db_last_error().'
'; - else - echo '
Added NOT NULL constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; - } - } -} - - // ADD COLUMN studienkennung_uni to bis.tbl_gsprogramm if(!@$db->db_query("SELECT studienkennung_uni FROM bis.tbl_gsprogramm LIMIT 1")) { diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 57f037d14..821bbc5c6 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -30,6 +30,7 @@ require_once('dbupdate_3.4/example2.php'); require_once('dbupdate_3.4/26173_index_webservicelog.php'); require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php'); +require_once('dbupdate_3.4/17512_fehlercode_constraints.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/17512_fehlercode_constraints.php b/system/dbupdate_3.4/17512_fehlercode_constraints.php new file mode 100644 index 000000000..91a3303b5 --- /dev/null +++ b/system/dbupdate_3.4/17512_fehlercode_constraints.php @@ -0,0 +1,54 @@ +db_query("SELECT conname FROM pg_constraint WHERE conname = 'uk_tbl_fehler_fehlercode_fehler_kurzbz'")) +{ + if ($db->db_num_rows($result) > 0) + { + $qry = "ALTER TABLE system.tbl_fehler DROP CONSTRAINT uk_tbl_fehler_fehlercode_fehler_kurzbz;"; + + if (!$db->db_query($qry)) + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + else + echo '
Removed UNIQUE constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; + } +} + +// Add NOT NULL constraint on fehler_kurzbz and fehlercode_extern on system.tbl_fehler +if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'chk_tbl_fehler_fehler_kurzbz_fehlercode_extern'")) +{ + if ($db->db_num_rows($result) == 0) + { + $hasError = false; + $qry = "SELECT 1 FROM system.tbl_fehler WHERE fehler_kurzbz IS NULL AND fehlercode_extern IS NULL AND fehlercode = 'UNKNOWN_ERROR'"; + + $result = $db->db_query($qry); + if ($db->db_num_rows($result)>0) + { + // Add fehler_kurzbz TO UNKNOWN_ERROR to satisfy constraint + $qry = "UPDATE system.tbl_fehler SET fehler_kurzbz='unbekannterCoreFehler' WHERE fehlercode = 'UNKNOWN_ERROR';"; + + if(!$db->db_query($qry)) + { + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + $hasError = true; + } + else + { + echo '
Add fehler_kurzbz to UNKNOWN_ERROR in system.tbl_fehler'; + } + } + + if (!$hasError) + { + $qry = "ALTER TABLE system.tbl_fehler ADD CONSTRAINT chk_tbl_fehler_fehler_kurzbz_fehlercode_extern CHECK (fehler_kurzbz IS NOT NULL OR fehlercode_extern IS NOT NULL);"; + + if (!$db->db_query($qry)) + echo 'system.tbl_fehler '.$db->db_last_error().'
'; + else + echo '
Added NOT NULL constraint on "fehlercode" and "fehler_kurzbz" from system.tbl_fehler
'; + } + } +}