diff --git a/application/config/navigation.php b/application/config/navigation.php
index 928f5bae3..56d142d08 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -283,10 +283,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
'fehlerzustaendigkeiten' => array(
'link' => site_url('system/issues/IssuesZustaendigkeiten'),
'description' => 'Fehler Zuständigkeiten',
- 'icon' => 'cogs',
+ 'icon' => 'users',
'sort' => 100,
'target' => '_blank',
'requiredPermissions' => array('admin:rw')
- )
+ ),
+ 'fehlerkonfiguration' => array(
+ 'link' => site_url('system/issues/IssuesKonfiguration'),
+ 'description' => 'Fehler Konfiguration',
+ 'icon' => 'cogs',
+ 'sort' => 200,
+ 'target' => '_blank',
+ 'requiredPermissions' => array('admin:rw')
+ ),
);
diff --git a/application/controllers/components/SearchBar.php b/application/controllers/components/SearchBar.php
index 09a49e163..dd3c22690 100644
--- a/application/controllers/components/SearchBar.php
+++ b/application/controllers/components/SearchBar.php
@@ -17,6 +17,9 @@ class SearchBar extends FHC_Controller
{
parent::__construct();
+ // Loads the AuthLib and starts the authentication
+ $this->load->library('AuthLib');
+
// Load the library SearchBarLib
$this->load->library('SearchBarLib');
}
diff --git a/application/controllers/jobs/PlausiIssueProducer.php b/application/controllers/jobs/PlausiIssueProducer.php
index 943d7aa46..b667e835d 100644
--- a/application/controllers/jobs/PlausiIssueProducer.php
+++ b/application/controllers/jobs/PlausiIssueProducer.php
@@ -1,16 +1,29 @@
load->library('issues/PlausicheckProducerLib');
- $this->load->library('IssuesLib');
+ $this->load->library('issues/PlausicheckDefinitionLib');
+
+ // load models
+ $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
+
+ // get current Studiensemester
+ $studiensemesterRes = $this->StudiensemesterModel->getAkt();
+ if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
+
+ // set fehler which can be produced by the job
+ // structure: fehler_kurzbz => class (library) name for resolving
+ $this->_fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
}
/**
@@ -20,43 +33,10 @@ class PlausiIssueProducer extends JOB_Controller
*/
public function run($studiensemester_kurzbz = null, $studiengang_kz = null)
{
- $fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
+ // get Studiensemester
+ if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
- $this->logInfo("Plausicheck issue producer job started");
-
- // get the data returned by Plausicheck
- foreach ($fehlerKurzbz as $fehler_kurzbz)
- {
- // execute the check
- $this->logInfo("Checking " . $fehler_kurzbz . "...");
- $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
-
- if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
-
- if (hasData($plausicheckRes))
- {
- $plausicheckData = getData($plausicheckRes);
-
- foreach ($plausicheckData as $plausiData)
- {
- // get the data needed for issue production
- $person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
- $oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
- $fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
- $resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
-
- // write the issue
- $addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
-
- // log if error, or log info if inserted new issue
- if (isError($addIssueRes))
- $this->logError(getError($addIssueRes));
- elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
- $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
- }
- }
- }
-
- $this->logInfo("Plausicheck issue producer job stopped");
+ // producing issues for semester and optionally Studiengang
+ $this->producePlausicheckIssues(array('studiensemester_kurzbz' => $studiensemester_kurzbz, 'studiengang_kz' => $studiengang_kz));
}
}
diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php
index d027e559e..548b071d3 100644
--- a/application/controllers/system/infocenter/InfoCenter.php
+++ b/application/controllers/system/infocenter/InfoCenter.php
@@ -142,12 +142,6 @@ class InfoCenter extends Auth_Controller
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
- 'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
- 'park' => 'infocenter:rw',
- 'unpark' => 'infocenter:rw',
- 'setOnHold' => 'infocenter:rw',
- 'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
- 'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw',
@@ -164,6 +158,7 @@ class InfoCenter extends Auth_Controller
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
+ $this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('system/Message_model', 'MessageModel');
@@ -606,7 +601,7 @@ class InfoCenter extends Auth_Controller
}
/**
- * Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang
+ * Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang
*/
private function sendZgvMail($mail, $typ, $person){
$data = array(
@@ -697,7 +692,7 @@ class InfoCenter extends Auth_Controller
/**
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
- * Falls es erfolgreich war, sendet er die Mail raus
+ * Falls es erfolgreich war, wird eine Mail rausgeschickt
*/
public function zgvRueckfragen()
{
@@ -751,7 +746,8 @@ class InfoCenter extends Auth_Controller
$this->sendZgvMail($mail, $typ, $person);
elseif (isError($insert))
$this->terminateWithJsonError('Fehler beim Speichern');
- }else
+ }
+ else
{
$insert = $this->ZGVPruefungModel->insert(
array(
@@ -781,7 +777,7 @@ class InfoCenter extends Auth_Controller
}
$hold = false;
- if ($this->personloglib->getOnHoldDate($person_id) !== null)
+ if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv')))
$hold = true;
$this->outputJsonSuccess(
@@ -1162,107 +1158,7 @@ class InfoCenter extends Auth_Controller
->set_output($aktecontent->retval)
->_display();
}
-
- /**
- * Gets the date until which a person is parked
- * @param $person_id
- */
- public function getPostponeDate($person_id)
- {
- $result = array(
- 'type' => null,
- 'date' => null
- );
-
- $parkedDate = $this->personloglib->getParkedDate($person_id);
-
- if (isset($parkedDate))
- {
- $result['type'] = 'parked';
- $result['date'] = $parkedDate;
- }
- else
- {
- $onholdDate = $this->personloglib->getOnHoldDate($person_id);
-
- if (isset($onholdDate))
- {
- $result['type'] = 'onhold';
- $result['date'] = $onholdDate;
- }
- }
-
- $this->outputJsonSuccess($result);
- }
-
- /**
- * Initializes parking of a person, i.e. a person is not expected to do any actions while parked
- */
- public function park()
- {
- $person_id = $this->input->post('person_id');
- $date = $this->input->post('parkdate');
-
- $result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
-
- $this->outputJson($result);
- }
-
- /**
- * Removes parking of a person
- */
- public function unPark()
- {
- $person_id = $this->input->post('person_id');
-
- $result = $this->personloglib->unPark($person_id);
-
- $this->outputJson($result);
- }
-
- /**
- * Sets a person on hold ("zurückstellen")
- */
- public function setOnHold()
- {
- $person_id = $this->input->post('person_id');
- $date = $this->input->post('onholddate');
-
- $result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
-
- $this->outputJson($result);
- }
-
- /**
- * Removed on hold status of a person
- */
- public function removeOnHold()
- {
- $person_id = $this->input->post('person_id');
-
- $result = $this->personloglib->removeOnHold($person_id);
-
- $this->outputJson($result);
- }
-
- /**
- * Gets the End date of the current Studienjahr
- */
- public function getStudienjahrEnd()
- {
- $this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
-
- $result = $this->StudienjahrModel->getCurrStudienjahr();
-
- $json = null;
-
- if (hasData($result))
- {
- $json = $result->retval[0]->ende;
- }
-
- $this->outputJsonSuccess(array($json));
- }
+
/**
* Wrapper for setNavigationMenu, returns JSON message
@@ -1484,7 +1380,6 @@ class InfoCenter extends Auth_Controller
if($nachreichungAm < $today)
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
-
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
if (hasData($akte)) {
diff --git a/application/controllers/system/infocenter/Rueckstellung.php b/application/controllers/system/infocenter/Rueckstellung.php
new file mode 100644
index 000000000..62af633ca
--- /dev/null
+++ b/application/controllers/system/infocenter/Rueckstellung.php
@@ -0,0 +1,135 @@
+ array('infocenter:r', 'lehre/zgvpruefung:r'),
+ 'set' => array('infocenter:r', 'lehre/zgvpruefung:r'),
+ 'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'),
+ 'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw')
+ )
+ );
+
+ $this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
+ $this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
+ $this->load->model('person/Person_model', 'PersonModel');
+ $this->load->library('PersonLogLib');
+
+ $this->_setAuthUID(); // sets property uid
+
+ $this->_ci =& get_instance(); // get code igniter instance
+ }
+
+ public function get($person_id)
+ {
+ $result = null;
+ $rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id);
+
+ if (isError($rueckstellung))
+ $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
+
+ if (hasData($rueckstellung))
+ {
+ $rueckstellung = getData($rueckstellung)[0];
+ $fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon));
+
+ $result = array(
+ 'von' => $fullName,
+ 'bezeichnung' => $rueckstellung->bezeichnung,
+ 'bis' => $rueckstellung->datum_bis,
+ 'status_kurzbz' => $rueckstellung->status_kurzbz
+ );
+
+ if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d'))
+ {
+ $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked'));
+ $result = null;
+ }
+ }
+
+ $this->outputJsonSuccess($result);
+ }
+
+ public function set()
+ {
+ $person_id = $this->input->post('person_id');
+ $datum_bis = $this->input->post('datum_bis');
+ $status_kurzbz = $this->input->post('status_kurzbz');
+
+ $result = $this->_ci->RueckstellungModel->insert(
+ array('person_id' => $person_id,
+ 'status_kurzbz' => $status_kurzbz,
+ 'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'),
+ 'insertvon' => $this->_uid
+ )
+ );
+
+ if (isError($result))
+ $this->terminateWithJsonError(getError($result));
+
+ $this->_log($person_id, $status_kurzbz);
+
+ $this->outputJson($result);
+ }
+
+ public function delete()
+ {
+ $person_id = $this->input->post('person_id');
+ $status = $this->input->post('status');
+
+ $result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status));
+
+ if (isError($result))
+ $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern'));
+
+ $this->outputJson($result);
+ }
+
+ public function getStatus($aktiv = true)
+ {
+ $this->_ci->RueckstellungStatusModel->addOrder('sort');
+ $result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv));
+
+ if (isError($result))
+ $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
+
+ $this->outputJsonSuccess(getData($result));
+ }
+
+ /**
+ * Retrieve the UID of the logged user and checks if it is valid
+ */
+ private function _setAuthUID()
+ {
+ $this->_uid = getAuthUID();
+
+ if (!$this->_uid) show_error('User authentification failed');
+ }
+
+ private function _log($person_id, $status_kurzbz)
+ {
+ $message = "Person $person_id set to $status_kurzbz";
+
+ $this->_ci->personloglib->log(
+ $person_id,
+ 'Action',
+ array(
+ 'name' => 'Person status set',
+ 'message' => $message,
+ 'success' => true
+ ),
+ 'bewerbung',
+ 'infocenter',
+ null,
+ $this->_uid
+ );
+ }
+}
\ No newline at end of file
diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php
index 6d959a024..44c2ff5d3 100644
--- a/application/controllers/system/issues/Issues.php
+++ b/application/controllers/system/issues/Issues.php
@@ -26,6 +26,7 @@ class Issues extends Auth_Controller
// Load models
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
+ $this->load->model('system/Sprache_model', 'SpracheModel');
$this->loadPhrases(
array(
@@ -45,10 +46,11 @@ class Issues extends Auth_Controller
public function index()
{
$oes_for_issues = $this->_getOesForIssues();
+ $language_index = $this->_getLanguageIndex();
$this->load->view(
'system/issues/issues',
- $oes_for_issues
+ array_merge($oes_for_issues, array('language_index' => $language_index))
);
}
@@ -166,4 +168,28 @@ class Issues extends Auth_Controller
'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt
);
}
+
+ /**
+ * Gets language index of currently logged in user.
+ * @return object int (the index, start at 1)
+ */
+ private function _getLanguageIndex()
+ {
+ $idx = 1;
+ $this->SpracheModel->addSelect('sprache, index');
+ $langRes = $this->SpracheModel->load();
+
+ if (hasData($langRes))
+ {
+ $userLang = getUserLanguage();
+ $lang = getData($langRes);
+
+ foreach ($lang as $l)
+ {
+ if ($l->sprache == $userLang) $idx = $l->index;
+ }
+ }
+
+ return $idx;
+ }
}
diff --git a/application/controllers/system/issues/IssuesKonfiguration.php b/application/controllers/system/issues/IssuesKonfiguration.php
new file mode 100644
index 000000000..a19a2a93b
--- /dev/null
+++ b/application/controllers/system/issues/IssuesKonfiguration.php
@@ -0,0 +1,305 @@
+ 'admin:r',
+ 'getApps' => 'admin:r',
+ 'getFehlerKonfigurationByApp' => 'admin:r',
+ 'saveFehlerKonfiguration' => 'admin:rw',
+ 'deleteKonfiguration' => 'admin:rw',
+ 'deleteKonfigurationsWerte' => 'admin:rw'
+ )
+ );
+
+ // Load libraries
+ $this->load->library('IssuesLib');
+ $this->load->library('WidgetLib');
+
+ // Load models
+ $this->load->model('system/Fehlerkonfigurationstyp_model', 'FehlerkonfigurationstypModel');
+ $this->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
+
+ $this->loadPhrases(
+ array(
+ 'global',
+ 'ui',
+ 'filter',
+ 'fehlermonitoring'
+ )
+ );
+
+ $this->_setAuthUID(); // sets property uid
+ $this->setControllerId(); // sets the controller id
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Load initial view.
+ */
+ public function index()
+ {
+ $this->load->view("system/issues/issuesKonfiguration.php");
+ }
+
+ /**
+ * Loads all Apps to which Fehler exist.
+ */
+ public function getApps()
+ {
+ $this->FehlerModel->addDistinct();
+ $this->FehlerModel->addSelect('app');
+ $this->FehlerModel->addJoin('system.tbl_fehler_konfigurationstyp', 'app');
+ $this->FehlerModel->addOrder('app');
+
+ $appRes = $this->FehlerModel->load();
+
+ $this->outputJson($appRes);
+ }
+
+ /**
+ * Gets all fehlercodes, optionally by app.
+ */
+ public function getFehlerKonfigurationByApp()
+ {
+ $app = $this->input->get('app');
+
+ // get all Konfiguration types, optionally filtered by app
+ $this->FehlerkonfigurationstypModel->addSelect('konfigurationstyp_kurzbz, konfigurationsdatentyp, beschreibung');
+ $this->FehlerkonfigurationstypModel->addOrder('konfigurationstyp_kurzbz');
+ $konfRes = isEmptyString($app)
+ ? $this->FehlerkonfigurationstypModel->load()
+ : $this->FehlerkonfigurationstypModel->loadWhere(array('app' => $app));
+
+ if (isError($konfRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
+
+ // get all Fehler, optionally filtered by app
+ $params = array('fehlercode_extern' => null);
+ $this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertyp_kurzbz, fehlertext');
+ $this->FehlerModel->addOrder('fehlercode');
+ if (!isEmptyString($app)) $params['app'] = $app;
+ $fehlerRes = $this->FehlerModel->loadWhere($params);
+
+ if (isError($fehlerRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerLaden'));
+
+ // return object with retrieved data
+ $konfObj = new StdClass();
+ $konfObj->konfigurationstypen = array();
+ $konfObj->fehler = array();
+
+ if (hasData($konfRes)) $konfObj->konfigurationstypen = getData($konfRes);
+ if (hasData($fehlerRes)) $konfObj->fehler = getData($fehlerRes);
+
+ $this->outputJsonSuccess($konfObj);
+ }
+
+ /**
+ * Saves a Fehler configuration, inserts new configuration or updates existing.
+ * Checks if datatype of passed configuration is correct.
+ */
+ public function saveFehlerKonfiguration()
+ {
+ $result = null;
+ $konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
+ $fehlercode = $this->input->post('fehlercode');
+ $konfigurationsWert = $this->input->post('konfigurationsWert');
+
+ // check if all params passed
+ if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
+
+ if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
+
+ // separate by semicolon if multiple values passed
+ $konfigurationsWert = explode(';', $konfigurationsWert);
+
+ // check konfigurationswert
+
+ // get the expected data type
+ $dataType = self::STRING_DATA_TYPE;
+ $this->FehlerkonfigurationstypModel->addSelect('konfigurationsdatentyp');
+ $konfigtypRes = $this->FehlerkonfigurationstypModel->loadWhere(array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz));
+
+ if (hasData($konfigtypRes))
+ {
+ $konfigurationsdatentyp = getData($konfigtypRes)[0]->konfigurationsdatentyp;
+ foreach ($konfigurationsWert as $idx => $konfWert)
+ {
+ // check if data type correct
+ $valid = false;
+ switch ($konfigurationsdatentyp)
+ {
+ case self::INTEGER_DATA_TYPE:
+ $valid = (string)(int)$konfWert == $konfWert;
+ $konfigurationsWert[$idx] = (int) $konfWert;
+ break;
+ case self::FLOAT_DATA_TYPE:
+ $valid = (string)(float)$konfWert == $konfWert;
+ $konfigurationsWert[$idx] = (float) $konfWert;
+ break;
+ default:
+ $valid = is_string($konfWert) && preg_match('/^[A-Za-z0-9_]+$/', $konfWert);
+ }
+ if (!$valid) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationswert', array($konfigurationsdatentyp)));
+ }
+ }
+
+ // check if konfiguration already set for the fehlercode
+ $this->FehlerkonfigurationModel->addSelect('konfiguration');
+ $fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
+ array(
+ 'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
+ 'fehlercode' => $fehlercode
+ )
+ );
+
+ if (isError($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
+
+ // if konfiguration exists, update by add konfiguration values to existing
+ if (hasData($fehlerkonfigurationRes))
+ {
+ $fehlerkonfiguration = getData($fehlerkonfigurationRes);
+
+ $existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
+
+ if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
+
+ if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
+
+ $newKonf = json_encode(array_values(array_unique(array_merge($existingKonf, $konfigurationsWert))));
+ if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
+
+ $result = $this->FehlerkonfigurationModel->update(
+ array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
+ array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
+ );
+ }
+ else // if no konfiguration exists, add new konfiguration entry
+ {
+ $newKonf = json_encode($konfigurationsWert);
+ if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
+
+ $result = $this->FehlerkonfigurationModel->insert(
+ array(
+ 'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
+ 'fehlercode' => $fehlercode,
+ 'konfiguration' => $newKonf,
+ 'insertvon' => $this->_uid
+ )
+ );
+ }
+
+ // output result (insert or update)
+ $this->outputJson($result);
+ }
+
+ /**
+ * Deletes values of a Konfiguration.
+ */
+ public function deleteKonfigurationsWerte()
+ {
+ $konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
+ $fehlercode = $this->input->post('fehlercode');
+ $konfigurationsWert = $this->input->post('konfigurationsWert');
+
+ // check if Konfigurationstyp correctly passed
+ if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
+
+ // check if fehlercode correctly passed
+ if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
+
+ // separate by semicolon if multiple values passed
+ $konfigurationsWert = explode(';', $konfigurationsWert);
+
+ // check if konfiguration already set for the fehlercode
+ $this->FehlerkonfigurationModel->addSelect('konfiguration');
+ $fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
+ array(
+ 'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
+ 'fehlercode' => $fehlercode
+ )
+ );
+
+ if (!hasData($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
+
+ // if konfiguration exists, update values
+ if (hasData($fehlerkonfigurationRes))
+ {
+ $fehlerkonfiguration = getData($fehlerkonfigurationRes);
+
+ $existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
+
+ if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
+
+ if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
+
+ $newKonfArr = array_values(array_diff($existingKonf, $konfigurationsWert));
+
+ // if no konfiguration values left, delete whole entry
+ if (isEmptyArray($newKonfArr))
+ {
+ $this->outputJson(
+ $this->FehlerkonfigurationModel->delete(
+ array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
+ )
+ );
+ }
+ else
+ {
+ $newKonf = json_encode($newKonfArr);
+ if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
+
+ // if there are still values, delete only part of the konfiguration
+ $this->outputJson(
+ $this->FehlerkonfigurationModel->update(
+ array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
+ array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
+ )
+ );
+ }
+ }
+ }
+
+ /**
+ * Deletes a Konfiguration.
+ */
+ public function deleteKonfiguration()
+ {
+ $konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
+ $fehlercode = $this->input->post('fehlercode');
+
+ // check if Konfigurationstyp correctly passed
+ if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
+
+ // check if fehlercode correctly passed
+ if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
+
+ $this->outputJson(
+ $this->FehlerkonfigurationModel->delete(
+ array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
+ )
+ );
+ }
+
+ /**
+ * Retrieve the UID of the logged user and checks if it is valid
+ */
+ private function _setAuthUID()
+ {
+ $this->_uid = getAuthUID();
+
+ if (!$this->_uid) show_error('User authentification failed');
+ }
+}
diff --git a/application/controllers/system/issues/IssuesZustaendigkeiten.php b/application/controllers/system/issues/IssuesZustaendigkeiten.php
index fd3e6192a..d7bf9836e 100644
--- a/application/controllers/system/issues/IssuesZustaendigkeiten.php
+++ b/application/controllers/system/issues/IssuesZustaendigkeiten.php
@@ -26,7 +26,6 @@ class IssuesZustaendigkeiten extends Auth_Controller
// Load models
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
$this->load->model('system/Fehler_model', 'FehlerModel');
- $this->load->model('system/Fehler_model', 'FehlerModel');
$this->load->model('system/Fehlerzustaendigkeiten_model', 'FehlerzustaendigkeitenModel');
$this->loadPhrases(
@@ -70,7 +69,7 @@ class IssuesZustaendigkeiten extends Auth_Controller
{
$app = $this->input->get('app');
- //$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz');
+ $this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz, app');
$this->FehlerModel->addOrder('fehlercode');
$fehlerRes = isset($app) ? $this->FehlerModel->loadWhere(array('app' => $app)) : $this->FehlerModel->load();
diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php
index 2dd166794..53ff8afe8 100644
--- a/application/controllers/system/issues/Plausichecks.php
+++ b/application/controllers/system/issues/Plausichecks.php
@@ -16,7 +16,8 @@ class Plausichecks extends Auth_Controller
);
// Load libraries
- $this->load->library('issues/PlausicheckProducerLib');
+ $this->load->library('issues/PlausicheckProducerLib', array('app' => 'core'));
+ $this->load->library('issues/PlausicheckDefinitionLib');
$this->load->library('WidgetLib');
// Load models
@@ -44,18 +45,43 @@ class Plausichecks extends Auth_Controller
$fehler_kurzbz = $this->input->get('fehler_kurzbz');
// issues array for passing issue texts
- $issueTexts = array();
+ $allIssues = array();
// all fehler kurzbz which are going to be checked
- $fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz();
+ $fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckdefinitionlib->getFehlerKurzbz();
+ $fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
// set Studiengang to null if not passed
if (isEmptyString($studiengang_kz)) $studiengang_kz = null;
// get the data returned by Plausicheck
foreach ($fehlerKurzbz as $fehler_kurzbz)
{
+ // get Text and fehlercode of the Fehler
+ $this->FehlerModel->addSelect('fehlercode, fehlertext, fehlertyp_kurzbz');
+ $fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
+
+ if (isError($fehlerRes)) $this->terminateWithJsonError(getError($fehlerRes));
+
+ // do not check error if no data
+ if (!hasData($fehlerRes)) continue;
+
+ // get the error data
+ $fehler = getData($fehlerRes)[0];
+
+ // initialize issue array
+ $allIssues[$fehler_kurzbz] = array('fehlercode' => $fehler->fehlercode, 'data' => array());
+
+ // get library name for producing issue
+ $libName = $fehlerLibMappings[$fehler_kurzbz];
+
// execute the check
- $issueTexts[$fehler_kurzbz] = array();
- $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
+ $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
+ $libName,
+ $fehler_kurzbz,
+ array(
+ 'studiensemester_kurzbz' => $studiensemester_kurzbz,
+ 'studiengang_kz' => $studiengang_kz
+ )
+ );
if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes));
@@ -69,19 +95,13 @@ class Plausichecks extends Auth_Controller
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
- $resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
-
- // get Text of the Fehler
- $this->FehlerModel->addSelect('fehlertext');
- $fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
-
- if (isError($fehlerRes)) $this->outputJsonError(getError($fehlerRes));
// optionally replace fehler parameters in text, output the fehlertext
- if (hasData($fehlerRes))
+ if (!isEmptyString($fehler->fehlertext))
{
- // use issue fehler text from database if present
- $fehlerText = getData($fehlerRes)[0]->fehlertext;
+ $fehlercode = $fehler->fehlercode;
+ $fehlerText = $fehler->fehlertext;
+ $fehlerTyp = $fehler->fehlertyp_kurzbz;
if (!isEmptyArray($fehlertext_params))
{
@@ -91,6 +111,14 @@ class Plausichecks extends Auth_Controller
$fehlerText = vsprintf($fehlerText, $fehlertext_params);
}
+
+ if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
+ if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
+
+ $issueObj = new StdClass();
+ $issueObj->fehlertext = $fehlerText;
+ $issueObj->type = $fehlerTyp;
+ $allIssues[$fehler_kurzbz]['data'][] = $issueObj;
}
else // if no issue text found, use generic text
{
@@ -100,12 +128,11 @@ class Plausichecks extends Auth_Controller
// add generic parameters to issue text
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
- $issueTexts[$fehler_kurzbz][] = $fehlerText;
}
}
}
- $this->outputJsonSuccess($issueTexts);
+ $this->outputJsonSuccess($allIssues);
}
/**
@@ -130,13 +157,38 @@ class Plausichecks extends Auth_Controller
if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes));
- $fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
+ $fehlerKurzbz = $this->plausicheckdefinitionlib->getFehlerKurzbz();
+
+ $db = new DB_Model();
+
+ // get fehlercodes for fehler_kurzbz
+ $fehlerRes = $db->execReadOnlyQuery(
+ 'SELECT
+ fehler_kurzbz, fehlercode
+ FROM
+ system.tbl_fehler
+ WHERE
+ fehler_kurzbz IN ?',
+ array($fehlerKurzbz)
+ );
+
+ if (isError($fehlerRes)) show_error(getError($fehlerRes));
+
+ $fehlerKurzbzCodeMappings = array();
+ if (hasData($fehlerRes))
+ {
+ $fehler = getData($fehlerRes);
+ foreach ($fehler as $fe)
+ {
+ $fehlerKurzbzCodeMappings[$fe->fehler_kurzbz] = $fe->fehlercode;
+ }
+ }
return array(
'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(),
'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(),
'studiengaenge' => hasData($studiengaengeRes) ? getData($studiengaengeRes) : array(),
- 'fehler' => $fehlerKurzbz
+ 'fehlerKurzbzCodeMappings' => $fehlerKurzbzCodeMappings
);
}
}
diff --git a/application/core/IIssueExistsChecker.php b/application/core/IIssueExistsChecker.php
deleted file mode 100644
index 7f5a6b6e5..000000000
--- a/application/core/IIssueExistsChecker.php
+++ /dev/null
@@ -1,21 +0,0 @@
-behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array()
);
- // if called from extension (extension name set), path includes extension names, otherwise it is the core library folder
- $libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : '';
+ // if called from extension (extension name set), path includes extension names
+ $libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
+
+ // path for loading issue library
$issuesLibPath = $libRootPath . self::ISSUE_RESOLVERS_FOLDER . '/';
- $issuesLibFilePath = DOC_ROOT . self::CI_PATH . '/' . $libRootPath . 'libraries/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
+
+ // file path of library for check if file exists
+ $issuesLibFilePath = DOC_ROOT . self::CI_PATH
+ . '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
// check if library file exists
if (!file_exists($issuesLibFilePath))
diff --git a/application/core/PlausiIssueProducer_Controller.php b/application/core/PlausiIssueProducer_Controller.php
new file mode 100644
index 000000000..0dce7a487
--- /dev/null
+++ b/application/core/PlausiIssueProducer_Controller.php
@@ -0,0 +1,66 @@
+_extensionName) ? $this->_extensionName : null;
+
+ // load libraries
+ $this->load->library('issues/PlausicheckProducerLib', array('extensionName' => $extensionName, 'app' => $this->_app));
+ $this->load->library('IssuesLib');
+ }
+
+ protected function producePlausicheckIssues($params)
+ {
+ $this->logInfo("Plausicheck issue producer job started");
+
+ // get the data returned by Plausicheck
+ foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName)
+ {
+ // execute the check
+ $this->logInfo("Checking " . $fehler_kurzbz . "...");
+ $plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
+ $libName,
+ $fehler_kurzbz,
+ $params
+ );
+
+ if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
+
+ if (hasData($plausicheckRes))
+ {
+ $plausicheckData = getData($plausicheckRes);
+
+ foreach ($plausicheckData as $plausiData)
+ {
+ // get the data needed for issue production
+ $person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
+ $oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
+ $fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
+ $resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
+
+ // write the issue
+ $addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
+
+ // log if error, or log info if inserted new issue
+ if (isError($addIssueRes))
+ $this->logError(getError($addIssueRes));
+ elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
+ $this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
+ }
+ }
+ }
+
+ $this->logInfo("Plausicheck issue producer job stopped");
+ }
+}
diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php
index ae30d41fa..de9c15350 100644
--- a/application/libraries/AuthLib.php
+++ b/application/libraries/AuthLib.php
@@ -551,10 +551,7 @@ class AuthLib
// Needed information
$this->_ci->PersonModel->addSelect('person_id, vorname, nachname, uid');
// Retrieves the uid if it is possible for active users
- $this->_ci->PersonModel->addJoin(
- '(SELECT uid, person_id FROM public.tbl_benutzer WHERE aktiv = TRUE) tb', 'person_id',
- 'LEFT'
- );
+ $this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id', 'LEFT');
// Execute query with where clause
$personResult = $this->_ci->PersonModel->loadWhere($queryParamsArray);
diff --git a/application/libraries/PersonLogLib.php b/application/libraries/PersonLogLib.php
index fe9a82504..f4f434fad 100644
--- a/application/libraries/PersonLogLib.php
+++ b/application/libraries/PersonLogLib.php
@@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class PersonLogLib
{
- const PARKED_LOGNAME = 'Parked';
- const ONHOLD_LOGNAME = 'Onhold';
-
/**
* Constructor
*/
@@ -78,168 +75,6 @@ class PersonLogLib
else
show_error(getError($result));
}
-
- /**
- * Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent)
- * Done by adding a logentry in the future
- * @param $person_id
- * @param $date
- * @param $taetigkeit_kurzbz
- * @param string $app
- * @param null $oe_kurzbz
- * @param null $user
- * @return insert object
- */
- public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
- {
- $onhold = $this->getOnHoldDate($person_id);
-
- if (hasData($onhold))
- return error("Person already on hold");
-
- $logjson = array(
- 'name' => self::PARKED_LOGNAME
- );
-
- return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
- }
-
- /**
- * Unparks a person, i.e. removes all log entries in the future with logname for parking
- * @param $person_id
- * @return array with deleted logids
- */
- public function unPark($person_id)
- {
- $deleted = array();
-
- $result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
- if (hasData($result))
- {
- foreach ($result->retval as $log)
- {
- $logdata = json_decode($log->logdata);
- if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
- {
- $delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
- if (isSuccess($delresult))
- {
- $deleted[] = $log->log_id;
- }
- }
- }
- }
-
- return success($deleted);
- }
-
- /**
- * Gets date until which a person is parked
- * @param $person_id
- * @return the date if person is parked, null otherwise
- */
- public function getParkedDate($person_id)
- {
- $result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
-
- $parkeddate = null;
-
- if (hasData($result))
- {
- foreach ($result->retval as $log)
- {
- $logdata = json_decode($log->logdata);
- if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
- {
- $parkeddate = $log->zeitpunkt;
- break;
- }
- }
- }
-
- return $parkeddate;
- }
-
- /**
- * Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
- * Done by adding a logentry with a special name. can be undone only manually by clicking button.
- * @param $person_id
- * @param $date
- * @param $taetigkeit_kurzbz
- * @param string $app
- * @param null $oe_kurzbz
- * @param null $user
- * @return array
- */
- public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
- {
- $parked = $this->getParkedDate($person_id);
-
- if (hasData($parked))
- return error("Person already parked");
-
- $logjson = array(
- 'name' => self::ONHOLD_LOGNAME
- );
-
- return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
- }
-
- /**
- * Removes on hold status, i.e. removes all log entries with logname for on hold
- * @param $person_id
- * @return array
- */
- public function removeOnHold($person_id)
- {
- $deleted = array();
-
- $result = $this->ci->PersonLogModel->filterLog($person_id);
- if (hasData($result))
- {
- foreach ($result->retval as $log)
- {
- $logdata = json_decode($log->logdata);
- if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
- {
- $delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
- if (isSuccess($delresult))
- {
- $deleted[] = $log->log_id;
- }
- }
- }
- }
- return success($deleted);
- }
-
- /**
- * Gets date until which a person is on hold
- * @param $person_id
- * @return the date if person is on hold, null otherwise
- */
- public function getOnHoldDate($person_id)
- {
- $result = $this->ci->PersonLogModel->filterLog($person_id);
-
- $onholddate = null;
-
- if (hasData($result))
- {
- foreach ($result->retval as $log)
- {
- $logdata = json_decode($log->logdata);
- if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
- {
- $onholddate = $log->zeitpunkt;
- break;
- }
- }
- }
-
- return $onholddate;
- }
-
/**
* Saves a processstate log with specified parameters, including a specified log date.
* @param $person_id
diff --git a/application/libraries/SignatureLib.php b/application/libraries/SignatureLib.php
new file mode 100644
index 000000000..c44ffc5f6
--- /dev/null
+++ b/application/libraries/SignatureLib.php
@@ -0,0 +1,85 @@
+ 30000000)
+ {
+ $returnObject = new stdClass();
+ $returnObject->code = 1;
+ $returnObject->error = 1;
+ $returnObject->retval = 'File to big';
+
+ return $returnObject;
+ }
+
+ // Get the content of the given file
+ $inputFileContent = file_get_contents($inputFileName);
+ if ($inputFileContent === false) // if failed
+ {
+ error_log('An error occurred while getting the content from: '.$inputFileName);
+ }
+ else
+ {
+ // Posts the given file content + file name and expects a response in JSON format
+ $resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
+ ->sendsJson()
+ ->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
+ ->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
+ ->expectsJson()
+ ->send();
+ }
+ }
+ catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
+ {
+ error_log($cee->getMessage());
+ }
+ catch (Exception $e) // any other exception
+ {
+ error_log($e->getMessage());
+ }
+
+ // If the response is fine
+ if (isset($resultPost->body) && is_object($resultPost->body)
+ && isset($resultPost->body->retval) && is_array($resultPost->body->retval))
+ {
+ return $resultPost->body->retval;
+ }
+
+ // Otherwise return a null as error
+ return null;
+ }
+}
diff --git a/application/libraries/issues/PlausicheckDefinitionLib.php b/application/libraries/issues/PlausicheckDefinitionLib.php
new file mode 100644
index 000000000..cef28a736
--- /dev/null
+++ b/application/libraries/issues/PlausicheckDefinitionLib.php
@@ -0,0 +1,55 @@
+ class (library) name for resolving
+ private $_fehlerLibMappings = array(
+ 'AbbrecherAktiv' => 'AbbrecherAktiv',
+ 'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
+ 'AktSemesterNull' => 'AktSemesterNull',
+ 'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
+ 'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
+ 'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
+ 'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
+ 'DatumSponsionFehlt' => 'DatumSponsionFehlt',
+ 'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
+ 'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
+ 'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
+ 'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
+ 'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
+ 'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
+ 'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
+ 'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
+ 'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
+ 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
+ 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
+ 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
+ 'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
+ 'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
+ 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
+ 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
+ //'StudienplanUngueltig' => 'StudienplanUngueltig'
+ );
+
+ /**
+ * Gets all fehler_kurzbz-library mappings for fehler which need to be checked.
+ */
+ public function getFehlerLibMappings()
+ {
+ return $this->_fehlerLibMappings;
+ }
+
+ /**
+ * Gets all fehler_kurzbz for fehler which need to be checked.
+ */
+ public function getFehlerKurzbz()
+ {
+ return array_keys($this->_fehlerLibMappings);
+ }
+}
diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php
deleted file mode 100644
index 19442de3c..000000000
--- a/application/libraries/issues/PlausicheckLib.php
+++ /dev/null
@@ -1,1362 +0,0 @@
-_ci =& get_instance(); // get ci instance
-
- // load models
- $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
- $this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
- $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
-
- // get database for queries
- $this->_db = new DB_Model();
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Studiengang checks
-
- /**
- * Studiengang should be the same for prestudent and student.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_student stud USING(prestudent_id)
- JOIN public.tbl_person pers USING(person_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz
- WHERE
- stud.studiengang_kz != pre.studiengang_kz";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Orgform of a Studiengang in Studienplan should be the same as orgform of student.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz,
- studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform,
- prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_studiengang studiengang
- JOIN public.tbl_student student USING(studiengang_kz)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id)
- WHERE
- benutzer.aktiv = true
- AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent')
- AND studiengang.studiengang_kz < 10000
- AND status.studiensemester_kurzbz = ?
- AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE)
- AND NOT EXISTS(
- SELECT 1
- FROM
- lehre.tbl_studienplan
- JOIN
- lehre.tbl_studienordnung USING(studienordnung_id)
- WHERE
- tbl_studienplan.studienplan_id = stpl.studienplan_id
- AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
- AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)";
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND studiengang.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- $qry .= "
- ORDER BY student_uid";
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students in "mixed" Studiengang should have Orgform.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- status.status_kurzbz IN ('Bewerber', 'Student')
- AND stg.mischform
- AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL)
- AND status.studiensemester_kurzbz=?";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Studiengang should be the same for prestudent and studienplan.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @param studienordnung_id int if check is to be executed only for a certain studienordnung_id
- * @return success with prestudents or error
- */
- public function getStgPrestudentUngleichStgStudienplan($studiengang_kz = null, $prestudent_id = null, $studienordnung_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id,
- stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_prestudent ps
- JOIN public.tbl_prestudentstatus USING(prestudent_id)
- JOIN lehre.tbl_studienplan stplan USING(studienplan_id)
- JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id)
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz
- WHERE
- ps.studiengang_kz<>stordnung.studiengang_kz
- AND stg.melderelevant";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND ps.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- if (isset($studienordnung_id))
- {
- $qry .= " AND stordnung.studienordnung_id = ?";
- $params[] = $studienordnung_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Studentstatus checks
-
- /**
- * Abbrecher cannot be active.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_prestudentstatus pre_status
- JOIN public.tbl_prestudent pre USING(prestudent_id)
- JOIN public.tbl_student student USING(prestudent_id)
- JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- WHERE
- pre_status.status_kurzbz ='Abbrecher'
- AND benutzer.aktiv=true";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * There shouldn't be any status after Abbrecher status.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_student student
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- prestatus.status_kurzbz = 'Abbrecher'
- AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAusbildungssemPrestudentUngleichAusbildungssemStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id,
- status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz,
- stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_student student
- JOIN public.tbl_studentlehrverband lv USING(student_uid)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- status.studiensemester_kurzbz = ?
- AND lv.studiensemester_kurzbz = ?
- AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher')
- AND get_rolle_prestudent (prestudent_id, ?)='Student'
- AND status.ausbildungssemester != lv.semester";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students with active status should have an active Benutzer.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
-
- if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
-
- $studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
-
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_benutzer benutzer
- JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- benutzer.aktiv=false
- AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?)
- AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')
- AND stg.melderelevant
- AND prestudent.bismelden";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students of a semester shouldn't start studies before the date of Bismeldung.
- * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020
- * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- // get Bismeldedatum
- $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz);
-
- $params = array($datumBis, $studiensemester_kurzbz, $datumBis);
-
- // get active students
- $qry = "
- SELECT
- DISTINCT ON (student.student_uid) ? AS datum_bismeldung,
- prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
- FROM
- public.tbl_benutzer benutzer
- JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- benutzer.aktiv=true
- AND status.studiensemester_kurzbz = ?
- /* inscription date before date of first student status */
- AND (
- SELECT datum
- FROM public.tbl_prestudentstatus
- WHERE prestudent_id = prestudent.prestudent_id
- AND studiensemester_kurzbz = status.studiensemester_kurzbz
- AND status_kurzbz = 'Student'
- ORDER BY datum, insertamum, ext_id
- LIMIT 1
- ) < ?
- AND stg.melderelevant
- AND prestudent.bismelden";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Status Dates and status studysemester dates should be in correct order.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- // all active students with Status student in current semester
- $qry = "
- SELECT DISTINCT ON (prestudent_id) *
- FROM (
- SELECT
- prestudent.person_id, prestudent.prestudent_id,
- stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
- ROW_NUMBER () OVER (
- PARTITION BY prestudent.prestudent_id
- ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC
- ) AS reihenfolge_semester,
- ROW_NUMBER () OVER (
- PARTITION BY prestudent.prestudent_id
- ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC
- ) AS reihenfolge_datum
- FROM
- public.tbl_student student
- JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- benutzer.aktiv=true
- AND status.status_kurzbz='Student'
- ) reihenfolge
- WHERE reihenfolge_semester <> reihenfolge_datum";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students with active Benutzer should have a status in the current semester.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_student student
- JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid)
- JOIN public.tbl_prestudent prestudent USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- benutzer.aktiv=TRUE
- AND stg.melderelevant
- AND prestudent.bismelden
- AND NOT EXISTS (
- SELECT 1
- FROM public.tbl_prestudentstatus
- JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
- WHERE prestudent_id = prestudent.prestudent_id
- /* buffer of four months, as status are often entered later */
- AND sem.ende::date > NOW() - interval '4 months'
- )";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Studienplan should be valid in current Ausbildungssemester of prestudent.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT pre.person_id, pre.prestudent_id,
- tbl_studienplan.bezeichnung AS studienplan,
- status.status_kurzbz,
- status.studiensemester_kurzbz,
- status.ausbildungssemester,
- stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_person USING(person_id)
- JOIN lehre.tbl_studienplan USING(studienplan_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- WHERE
- status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener')
- AND NOT EXISTS (
- SELECT
- 1
- FROM
- lehre.tbl_studienplan_semester
- WHERE
- studienplan_id=status.studienplan_id
- AND tbl_studienplan_semester.semester = status.ausbildungssemester
- AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz
- )
- AND status.studiensemester_kurzbz=?
- AND pre.bismelden
- AND stg.melderelevant";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND tbl_prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students with finished studies should have exactly one final exam.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT * FROM (
- SELECT
- DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
- (
- SELECT COUNT(*)
- FROM lehre.tbl_abschlusspruefung
- WHERE student_uid = stud.student_uid
- AND abschlussbeurteilung_kurzbz != 'nicht'
- AND abschlussbeurteilung_kurzbz IS NOT NULL
- ) AS anzahl_abschlusspruefungen
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_student stud USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- WHERE
- status_kurzbz = 'Absolvent'
- AND pre.bismelden
- AND stg.melderelevant
- AND NOT EXISTS ( /* exclude gs */
- SELECT 1
- FROM bis.tbl_mobilitaet
- WHERE prestudent_id = pre.prestudent_id
- AND studiensemester_kurzbz = status.studiensemester_kurzbz
- )";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND status.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- $qry .= ") studenten
- WHERE anzahl_abschlusspruefungen != 1";
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Date of final exam shouldn't be missing for Absolvent.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung
- * @return success with prestudents or error
- */
- public function getDatumAbschlusspruefungFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null)
- {
- $results = array();
-
- $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id);
-
- if (isError($pruefungenRes)) return $pruefungenRes;
-
- if (hasData($pruefungenRes))
- {
- $pruefungen = getData($pruefungenRes);
-
- foreach ($pruefungen as $pruefung)
- {
- if (isEmptyString($pruefung->datum)) $results[] = $pruefung;
- }
- }
-
- return success($results);
- }
-
- /**
- * Date of sponsion shouldn't be missing for Absolvent.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung
- * @return success with prestudents or error
- */
- public function getDatumSponsionFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null)
- {
- $results = array();
-
- $pruefungenRes = $this->_getInvalidAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz, $abschlusspruefung_id);
-
- if (isError($pruefungenRes)) return $pruefungenRes;
-
- if (hasData($pruefungenRes))
- {
- $pruefungen = getData($pruefungenRes);
-
- foreach ($pruefungen as $pruefung)
- {
- if (isEmptyString($pruefung->sponsion)) $results[] = $pruefung;
- }
- }
-
- return success($results);
- }
-
- /**
- * Bewerber should have participated in Reihungstest.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
-
- if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes;
-
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
- FROM
- public.tbl_prestudent prestudent
- JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id)
- JOIN public.tbl_person USING(person_id)
- LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- status_kurzbz='Bewerber'
- AND reihungstestangetreten=false
- AND stg.melderelevant
- AND prestudent.bismelden";
-
- if (hasData($previousStudiensemesterRes))
- {
- $previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz;
- $qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)";
- $params[] = $previousStudiensemester;
- }
- else
- {
- $qry .= " AND studiensemester_kurzbz=?";
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Current Ausbildungssemester shouldn't be 0.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_prestudentstatus prestat USING(prestudent_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- prestat.status_kurzbz != 'Incoming'
- AND prestat.studiensemester_kurzbz = ?
- AND ausbildungssemester = 0
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Prestudent should have a final status.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAbschlussstatusFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT ON (pre.prestudent_id)
- pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- NOT EXISTS( /*student does not study anymore*/
- SELECT
- 1
- FROM
- public.tbl_prestudentstatus ps
- JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
- WHERE
- prestudent_id=pre.prestudent_id
- /* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */
- AND tbl_studiensemester.ende>now() - interval '4 months'
- )
- /* check only valid begininng with 2018 */
- AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id)
- AND NOT EXISTS( /* no end status */
- SELECT 1
- FROM public.tbl_prestudentstatus ps
- WHERE
- prestudent_id=pre.prestudent_id
- AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming')
- )
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiensemester_kurzbz))
- {
- $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
-
- if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
-
- if (hasData($prevStudiensemesterRes))
- {
- // if Studiensemester given, check only if has status in current or previous semester
- $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
- $qry .= " AND EXISTS (
- SELECT 1
- FROM public.tbl_prestudentstatus ps
- WHERE studiensemester_kurzbz IN (?, ?)
- AND ps.prestudent_id = pre.prestudent_id
- )";
- $params[] = $prevStudiensemester;
- $params[] = $studiensemester_kurzbz;
- }
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT ON (pre.prestudent_id)
- pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_person pers USING(person_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- status.studiensemester_kurzbz = ?
- AND status.status_kurzbz IN ('Student', 'Incoming')
- AND NOT EXISTS (
- SELECT 1
- FROM
- public.tbl_konto
- WHERE
- person_id = pers.person_id
- AND studiensemester_kurzbz = status.studiensemester_kurzbz
- AND buchungsnr_verweis IS NULL
- AND betrag <= 0
- )
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND pre.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Person checks
-
- /**
- * Birthdate is too long ago.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param person_id int if check is to be executed only for one person
- * @return success with prestudents or error
- */
- public function getGbDatumWeitZurueck($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- pers.person_id
- FROM
- public.tbl_person pers
- WHERE
- pers.gebdatum < '1920-01-01'
- AND EXISTS (
- SELECT 1
- FROM public.tbl_prestudent
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE person_id = pers.person_id";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND status.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- $qry .= ")";
-
- if (isset($person_id))
- {
- $qry .= " AND pers.person_id = ?";
- $params[] = $person_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Nation is not Austria, but address has austrian Gemeinde.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param person_id int if check is to be executed only for one person
- * @return success with prestudents or error
- */
- public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null)
- {
- $params = array();
-
- $qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id
- FROM
- public.tbl_adresse adr
- JOIN public.tbl_prestudent USING(person_id)
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_student USING(prestudent_id)
- JOIN public.tbl_benutzer ON(uid=student_uid)
- JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz
- WHERE
- adr.nation!='A'
- AND tbl_benutzer.aktiv
- AND gemeinde NOT IN ('Münster')
- AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($person_id))
- {
- $qry .= " AND tbl_person.person_id = ?";
- $params[] = $person_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students should have exactly one home address.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param person_id int if check is to be executed only for one person
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlHeimatadressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT person_id
- FROM
- (
- SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
- FROM public.tbl_adresse addr
- WHERE heimatadresse IS TRUE
- GROUP BY person_id
- ) adressen
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_prestudent pre USING(person_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_student USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- WHERE
- anzahl_adressen != 1
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND status.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($person_id))
- {
- $qry .= " AND person_id = ?";
- $params[] = $person_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Students should have exactly one delivery address.
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param person_id int if check is to be executed only for one person
- * @return success with prestudents or error
- */
- public function getFalscheAnzahlZustelladressen($studiensemester_kurzbz = null, $studiengang_kz = null, $person_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT person_id
- FROM
- (
- SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
- FROM public.tbl_adresse addr
- WHERE zustelladresse IS TRUE
- GROUP BY person_id
- ) adressen
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_prestudent pre USING(person_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_student USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- WHERE
- anzahl_adressen != 1
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND status.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($person_id))
- {
- $qry .= " AND person_id = ?";
- $params[] = $person_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // I/O checks
-
- /**
- * Incoming shouldn't have austrian home address.
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param person_id int if check is to be executed only for one person
- * @return success with prestudents or error
- */
- public function getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz = null, $person_id = null)
- {
- $params = array($studiensemester_kurzbz);
-
- $qry = "
- SELECT
- DISTINCT pers.person_id, status.studiensemester_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_person pers USING(person_id)
- JOIN public.tbl_adresse addr USING(person_id)
- JOIN public.tbl_studiengang stg USING(studiengang_kz)
- WHERE
- status.status_kurzbz = 'Incoming'
- AND addr.nation = 'A'
- AND addr.heimatadresse
- AND status.studiensemester_kurzbz = ?
- AND stg.melderelevant
- AND pre.bismelden";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($person_id))
- {
- $qry .= " AND pers.person_id = ?";
- $params[] = $person_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Incoming should have IN/OUT data.
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return success with prestudents or error
- */
- public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT ON(student_uid, nachname, vorname)
- tbl_person.person_id,
- tbl_prestudent.prestudent_id,
- stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_student
- JOIN public.tbl_benutzer ON(student_uid=uid)
- JOIN public.tbl_person USING(person_id)
- JOIN public.tbl_prestudent USING(prestudent_id)
- JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id)
- JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz)
- WHERE
- bismelden=TRUE
- AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)
- AND stg.melderelevant";
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND tbl_prestudent.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant).
- * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param prestudent_id int if check is to be executed only for one prestudent
- * @return object success or error
- */
- public function getIncomingOrGsFoerderrelevant($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- DISTINCT ON(prestudent_id)
- pers.person_id,
- ps.prestudent_id,
- stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_student stud
- JOIN public.tbl_benutzer ON(student_uid=uid)
- JOIN public.tbl_person pers USING(person_id)
- JOIN public.tbl_prestudent ps USING(prestudent_id)
- JOIN public.tbl_prestudentstatus status USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz)
- WHERE
- (
- status.status_kurzbz = 'Incoming'
- OR EXISTS (
- SELECT 1
- FROM
- bis.tbl_mobilitaet
- JOIN public.tbl_prestudent USING(prestudent_id)
- WHERE
- prestudent_id = ps.prestudent_id
- AND gsstudientyp_kurzbz = 'Extern'
- )
- )
- AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL)
- AND bismelden=TRUE
- AND stg.melderelevant";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND status.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($prestudent_id))
- {
- $qry .= " AND ps.prestudent_id = ?";
- $params[] = $prestudent_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- //------------------------------------------------------------------------------------------------------------------
- // Private methods
-
- /**
- * Get final exams in a semester which are invalid (e.g. missing data)
- * @param studiensemester_kurzbz string if check is to be executed for certain Studiengang
- * @param studiengang_kz int if check is to be executed for certain Studiengang
- * @param abschlusspruefung_id int if check is to be executed for certain Abschlussprüfung
- */
- private function _getInvalidAbschlusspruefungen($studiensemester_kurzbz = null, $studiengang_kz = null, $abschlusspruefung_id = null)
- {
- $params = array();
-
- $qry = "
- SELECT
- pre.person_id, pre.prestudent_id,
- pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
- stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
- FROM
- public.tbl_prestudent pre
- JOIN public.tbl_student stud USING(prestudent_id)
- JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
- JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
- JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
- WHERE
- status_kurzbz = 'Absolvent'
- AND NOT EXISTS ( /* exclude gs */
- SELECT 1
- FROM bis.tbl_mobilitaet
- WHERE prestudent_id = pre.prestudent_id
- AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
- )
- AND abschlussbeurteilung_kurzbz!='nicht'
- AND abschlussbeurteilung_kurzbz IS NOT NULL
- AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL)
- AND pre.bismelden
- AND stg.melderelevant";
-
- if (isset($studiensemester_kurzbz))
- {
- $qry .= " AND prestatus.studiensemester_kurzbz = ?";
- $params[] = $studiensemester_kurzbz;
- }
-
- if (isset($studiengang_kz))
- {
- $qry .= " AND stg.studiengang_kz = ?";
- $params[] = $studiengang_kz;
- }
-
- if (isset($abschlusspruefung_id))
- {
- $qry .= " AND pruefung.abschlusspruefung_id = ?";
- $params[] = $abschlusspruefung_id;
- }
-
- return $this->_db->execReadOnlyQuery($qry, $params);
- }
-
- /**
- * Gets Bismeldedate from Studiensemester.
- * @param studiensemester_kurzbz string
- */
- private function _getBisdateFromSemester($studiensemester_kurzbz)
- {
- $semesterYear = substr($studiensemester_kurzbz, 2, 6);
- $semesterType = substr($studiensemester_kurzbz, 0, 2);
-
- if ($semesterType == 'SS')
- {
- return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d');
- }
-
- if ($semesterType == 'WS')
- {
- return date_format(date_create($semesterYear."-04-15"), 'Y-m-d');
- }
- }
-}
diff --git a/application/libraries/issues/PlausicheckProducerLib.php b/application/libraries/issues/PlausicheckProducerLib.php
index dde9b5396..c32f1f863 100644
--- a/application/libraries/issues/PlausicheckProducerLib.php
+++ b/application/libraries/issues/PlausicheckProducerLib.php
@@ -4,78 +4,70 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class PlausicheckProducerLib
{
- const CI_LIBRARY_PATH = 'application/libraries';
+ const CI_PATH = 'application';
+ const CI_LIBRARY_FOLDER = 'libraries';
+ const EXTENSIONS_FOLDER = 'extensions';
const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks';
const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck';
private $_ci; // ci instance
- private $_currentStudiensemester; // current Studiensemester
+ private $_extensionName; // name of extension
+ private $_app; // name of application
+ private $_konfiguration = array(); // konfigratio parameters
- // set fehler which can be produced by the job
- // structure: fehler_kurzbz => class (library) name for resolving
- private $_fehlerLibMappings = array(
- 'AbbrecherAktiv' => 'AbbrecherAktiv',
- 'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
- 'AktSemesterNull' => 'AktSemesterNull',
- 'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
- 'AktiverStudentstatusOhneKontobuchung' => 'AktiverStudentstatusOhneKontobuchung',
- 'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
- 'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
- 'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
- 'DatumSponsionFehlt' => 'DatumSponsionFehlt',
- 'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
- 'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
- 'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
- 'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
- 'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
- 'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
- 'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
- 'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
- 'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
- 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
- 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
- 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
- 'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
- 'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
- 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
- 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
- //'StudienplanUngueltig' => 'StudienplanUngueltig'
- );
-
- public function __construct()
+ public function __construct($params = null)
{
+ // set extension name if called from extension
+ if (isset($params['extensionName'])) $this->_extensionName = $params['extensionName'];
+
+ // set application
+ $app = isset($params['app']) ? $params['app'] : null;
+
$this->_ci =& get_instance(); // get ci instance
// load models
- $this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
+ $this->_ci->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
- // get current Studiensemester
- $studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
- if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
+ // get all configuration parameters for the application
+ $fehlerkonfigurationRes = $this->_ci->FehlerkonfigurationModel->getKonfiguration($app);
+
+ if (hasData($fehlerkonfigurationRes))
+ {
+ $fehlerkonfiguration = getData($fehlerkonfigurationRes);
+
+ foreach ($fehlerkonfiguration as $fk)
+ {
+ $this->_konfiguration[$fk->fehler_kurzbz][$fk->konfigurationstyp_kurzbz] = $fk->konfiguration;
+ }
+ }
}
/**
- * Executes check for a fehler_kurzbz, returns the result.
- * @param $fehler_kurzbz string
- * @param $studiensemester_kurzbz string optionally needed for issue production
- * @param $studiengang_kz int optionally needed for issue production
+ * Executes plausicheck using a given library, returns the result.
+ * @param $libName string name of library producing the issue
+ * @param $fehler_kurzbz string unique short name of fehler, for which issue is produced
+ * @param $params parameters passed to issue production method
*/
- public function producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null)
+ public function producePlausicheckIssue($libName, $fehler_kurzbz, $params)
{
- $libName = $this->_fehlerLibMappings[$fehler_kurzbz];
+ // if called from extension (extension name set), path includes extension names
+ $libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
- // get Studiensemester
- if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
+ // path for loading issue library
+ $issuesLibPath = $libRootPath . self::PLAUSI_ISSUES_FOLDER . '/';
- // get path of library for issue to be produced
- $issuesLibPath = DOC_ROOT . self::CI_LIBRARY_PATH . '/' . self::PLAUSI_ISSUES_FOLDER . '/';
- $issuesLibFilePath = $issuesLibPath . $libName . '.php';
+ // file path of library for check if file exists
+ $issuesLibFilePath = DOC_ROOT . self::CI_PATH
+ . '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::PLAUSI_ISSUES_FOLDER . '/' . $libName . '.php';
// check if library file exists
if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist");
+ // load konfiguration parameters of the fehler_kurzbz
+ $config = isset($this->_konfiguration[$fehler_kurzbz]) ? $this->_konfiguration[$fehler_kurzbz] : null;
+
// load library connected to fehlercode
- $this->_ci->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName);
+ $this->_ci->load->library($issuesLibPath . $libName, $config);
$lowercaseLibName = mb_strtolower($libName);
@@ -83,21 +75,7 @@ class PlausicheckProducerLib
if (!is_callable(array($this->_ci->{$lowercaseLibName}, self::EXECUTE_PLAUSI_CHECK_METHOD_NAME)))
return error("Method " . self::EXECUTE_PLAUSI_CHECK_METHOD_NAME . " is not defined in library $lowercaseLibName");
- // pass the data needed for issue check
- $paramsForCheck = array(
- 'studiensemester_kurzbz' => $studiensemester_kurzbz,
- 'studiengang_kz' => $studiengang_kz
- );
-
// call the function for checking for issue production
- return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($paramsForCheck);
- }
-
- /**
- * Gets all fehler_kurzbz for fehler which need to be checked.
- */
- public function getFehlerKurzbz()
- {
- return array_keys($this->_fehlerLibMappings);
+ return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($params);
}
}
diff --git a/application/libraries/issues/plausichecks/AbbrecherAktiv.php b/application/libraries/issues/plausichecks/AbbrecherAktiv.php
index cc6e2996a..9eae389b5 100644
--- a/application/libraries/issues/plausichecks/AbbrecherAktiv.php
+++ b/application/libraries/issues/plausichecks/AbbrecherAktiv.php
@@ -13,11 +13,14 @@ class AbbrecherAktiv extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAbbrecherAktiv($studiengang_kz);
+ $prestudentRes = $this->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,49 @@ class AbbrecherAktiv extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Abbrecher cannot be active.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "
+ SELECT
+ pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudentstatus pre_status
+ JOIN public.tbl_prestudent pre USING(prestudent_id)
+ JOIN public.tbl_student student USING(prestudent_id)
+ JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ WHERE
+ pre_status.status_kurzbz ='Abbrecher'
+ AND benutzer.aktiv=true";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
index 66615220a..3690e1331 100644
--- a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
+++ b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php
@@ -13,12 +13,20 @@ class AbschlussstatusFehlt extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getAbschlussstatusFehlt(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -41,4 +49,95 @@ class AbschlussstatusFehlt extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Prestudent should have a final status.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAbschlussstatusFehlt(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT ON (pre.prestudent_id)
+ pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ NOT EXISTS( /*student does not study anymore*/
+ SELECT
+ 1
+ FROM
+ public.tbl_prestudentstatus ps
+ JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
+ WHERE
+ prestudent_id=pre.prestudent_id
+ /* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */
+ AND tbl_studiensemester.ende>now() - interval '4 months'
+ )
+ /* check only valid begininng with 2018 */
+ AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id)
+ AND NOT EXISTS( /* no end status */
+ SELECT 1
+ FROM public.tbl_prestudentstatus ps
+ WHERE
+ prestudent_id=pre.prestudent_id
+ AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming')
+ )
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
+
+ if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
+
+ if (hasData($prevStudiensemesterRes))
+ {
+ // if Studiensemester given, check only if has status in current or previous semester
+ $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
+ $qry .= " AND EXISTS (
+ SELECT 1
+ FROM public.tbl_prestudentstatus ps
+ WHERE studiensemester_kurzbz IN (?, ?)
+ AND ps.prestudent_id = pre.prestudent_id
+ )";
+ $params[] = $prevStudiensemester;
+ $params[] = $studiensemester_kurzbz;
+ }
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php
index d55506d68..1223a2720 100644
--- a/application/libraries/issues/plausichecks/AktSemesterNull.php
+++ b/application/libraries/issues/plausichecks/AktSemesterNull.php
@@ -13,12 +13,15 @@ class AktSemesterNull extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -47,4 +50,51 @@ class AktSemesterNull extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Current Ausbildungssemester shouldn't be 0.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_prestudentstatus prestat USING(prestudent_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ prestat.status_kurzbz != 'Incoming'
+ AND prestat.studiensemester_kurzbz = ?
+ AND ausbildungssemester = 0
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
index 2dfd9f866..94fe5cc8d 100644
--- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
+++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php
@@ -13,11 +13,14 @@ class AktiverStudentOhneStatus extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz);
+ $prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,57 @@ class AktiverStudentOhneStatus extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students with active Benutzer should have a status in the current semester.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_student student
+ JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ benutzer.aktiv=TRUE
+ AND stg.melderelevant
+ AND prestudent.bismelden
+ AND NOT EXISTS (
+ SELECT 1
+ FROM public.tbl_prestudentstatus
+ JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
+ WHERE prestudent_id = prestudent.prestudent_id
+ /* buffer of four months, as status are often entered later */
+ AND sem.ende::date > NOW() - interval '4 months'
+ )";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
index baa35bc57..28684388f 100644
--- a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
+++ b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php
@@ -13,12 +13,20 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getAktiverStudentstatusOhneKontobuchung(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -47,4 +55,66 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAktiverStudentstatusOhneKontobuchung(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT ON (pre.prestudent_id)
+ pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_person pers USING(person_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ status.studiensemester_kurzbz = ?
+ AND status.status_kurzbz IN ('Student', 'Incoming')
+ AND NOT EXISTS (
+ SELECT 1
+ FROM
+ public.tbl_konto
+ WHERE
+ person_id = pers.person_id
+ AND studiensemester_kurzbz = status.studiensemester_kurzbz
+ AND buchungsnr_verweis IS NULL
+ AND betrag <= 0
+ )
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
index ca967a97f..00ff16ae0 100644
--- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
+++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php
@@ -13,14 +13,19 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
+ $prestudentRes = $this->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
$studiensemester_kurzbz,
- $studiengang_kz
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
);
if (isError($prestudentRes)) return $prestudentRes;
@@ -53,4 +58,59 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getAusbildungssemPrestudentUngleichAusbildungssemStatus(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id,
+ status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_student student
+ JOIN public.tbl_studentlehrverband lv USING(student_uid)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ status.studiensemester_kurzbz = ?
+ AND lv.studiensemester_kurzbz = ?
+ AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher')
+ AND get_rolle_prestudent (prestudent_id, ?)='Student'
+ AND status.ausbildungssemester != lv.semester";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
index 35d954236..4a9655d13 100644
--- a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
+++ b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php
@@ -13,12 +13,20 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getBewerberNichtZumRtAngetreten(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -44,4 +52,72 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Bewerber should have participated in Reihungstest.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getBewerberNichtZumRtAngetreten(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+ $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
+
+ if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes;
+
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent prestudent
+ JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id)
+ JOIN public.tbl_person USING(person_id)
+ LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ status_kurzbz='Bewerber'
+ AND reihungstestangetreten=false
+ AND stg.melderelevant
+ AND prestudent.bismelden";
+
+ if (hasData($previousStudiensemesterRes))
+ {
+ $previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz;
+ $qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)";
+ $params[] = $previousStudiensemester;
+ }
+ else
+ {
+ $qry .= " AND studiensemester_kurzbz=?";
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
index 7a2555b69..f606e2c8c 100644
--- a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
+++ b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php
@@ -13,12 +13,20 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getDatumAbschlusspruefungFehlt(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -44,4 +52,72 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Date of final exam shouldn't be missing for Absolvent.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getDatumAbschlusspruefungFehlt(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $abschlusspruefung_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ pre.person_id, pre.prestudent_id,
+ pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_student stud USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
+ WHERE
+ status_kurzbz = 'Absolvent'
+ AND NOT EXISTS ( /* exclude gs */
+ SELECT 1
+ FROM bis.tbl_mobilitaet
+ WHERE prestudent_id = pre.prestudent_id
+ AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
+ )
+ AND abschlussbeurteilung_kurzbz!='nicht'
+ AND abschlussbeurteilung_kurzbz IS NOT NULL
+ AND pruefung.datum IS NULL
+ AND pre.bismelden
+ AND stg.melderelevant";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND prestatus.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($abschlusspruefung_id))
+ {
+ $qry .= " AND pruefung.abschlusspruefung_id = ?";
+ $params[] = $abschlusspruefung_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
index 102a89656..210ae6f01 100644
--- a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
+++ b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php
@@ -13,12 +13,20 @@ class DatumSponsionFehlt extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getDatumSponsionFehlt(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -44,4 +52,72 @@ class DatumSponsionFehlt extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Date of sponsion shouldn't be missing for Absolvent.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getDatumSponsionFehlt(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $abschlusspruefung_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ pre.person_id, pre.prestudent_id,
+ pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_student stud USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
+ WHERE
+ status_kurzbz = 'Absolvent'
+ AND NOT EXISTS ( /* exclude gs */
+ SELECT 1
+ FROM bis.tbl_mobilitaet
+ WHERE prestudent_id = pre.prestudent_id
+ AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
+ )
+ AND abschlussbeurteilung_kurzbz!='nicht'
+ AND abschlussbeurteilung_kurzbz IS NOT NULL
+ AND pruefung.sponsion IS NULL
+ AND pre.bismelden
+ AND stg.melderelevant";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND prestatus.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($abschlusspruefung_id))
+ {
+ $qry .= " AND pruefung.abschlusspruefung_id = ?";
+ $params[] = $abschlusspruefung_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
index ab8566e47..381bea7df 100644
--- a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
+++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php
@@ -13,11 +13,14 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz);
+ $prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -42,4 +45,64 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Status Dates and status studysemester dates should be in correct order.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge
+ * @return success with prestudents or error
+ */
+ public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ // all active students with Status student in current semester
+ $qry = "
+ SELECT DISTINCT ON (prestudent_id) *
+ FROM (
+ SELECT
+ prestudent.person_id, prestudent.prestudent_id,
+ stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
+ ROW_NUMBER () OVER (
+ PARTITION BY prestudent.prestudent_id
+ ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC
+ ) AS reihenfolge_semester,
+ ROW_NUMBER () OVER (
+ PARTITION BY prestudent.prestudent_id
+ ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC
+ ) AS reihenfolge_datum
+ FROM
+ public.tbl_student student
+ JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ benutzer.aktiv=true
+ AND status.status_kurzbz='Student'
+ ) reihenfolge
+ WHERE reihenfolge_semester <> reihenfolge_datum";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
index 7fbe2d828..1021fe85a 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php
@@ -13,12 +13,20 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getFalscheAnzahlAbschlusspruefungen(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -41,4 +49,77 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students with finished studies should have exactly one final exam.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getFalscheAnzahlAbschlusspruefungen(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT * FROM (
+ SELECT
+ DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
+ (
+ SELECT COUNT(*)
+ FROM lehre.tbl_abschlusspruefung
+ WHERE student_uid = stud.student_uid
+ AND abschlussbeurteilung_kurzbz != 'nicht'
+ AND abschlussbeurteilung_kurzbz IS NOT NULL
+ ) AS anzahl_abschlusspruefungen
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_student stud USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ WHERE
+ status_kurzbz = 'Absolvent'
+ AND pre.bismelden
+ AND stg.melderelevant
+ AND NOT EXISTS ( /* exclude gs */
+ SELECT 1
+ FROM bis.tbl_mobilitaet
+ WHERE prestudent_id = pre.prestudent_id
+ AND studiensemester_kurzbz = status.studiensemester_kurzbz
+ )";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND status.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ $qry .= ") studenten
+ WHERE anzahl_abschlusspruefungen != 1";
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
index eac50a88a..b3551904e 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php
@@ -13,12 +13,20 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $personRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz);
+ $personRes = $this->getFalscheAnzahlHeimatadressen(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($personRes)) return $personRes;
@@ -39,4 +47,67 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students should have exactly one home address.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param person_id int if check is to be executed only for one person
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getFalscheAnzahlHeimatadressen(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $person_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT person_id
+ FROM
+ (
+ SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
+ FROM public.tbl_adresse addr
+ WHERE heimatadresse IS TRUE
+ GROUP BY person_id
+ ) adressen
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_prestudent pre USING(person_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_student USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ WHERE
+ anzahl_adressen != 1
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND status.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($person_id))
+ {
+ $qry .= " AND person_id = ?";
+ $params[] = $person_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
index e2fc4a781..9d72b0236 100644
--- a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
+++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php
@@ -13,12 +13,20 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $personRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz);
+ $personRes = $this->getFalscheAnzahlZustelladressen(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($personRes)) return $personRes;
@@ -39,4 +47,67 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students should have exactly one delivery address.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param person_id int if check is to be executed only for one person
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getFalscheAnzahlZustelladressen(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $person_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT person_id
+ FROM
+ (
+ SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
+ FROM public.tbl_adresse addr
+ WHERE zustelladresse IS TRUE
+ GROUP BY person_id
+ ) adressen
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_prestudent pre USING(person_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_student USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ WHERE
+ anzahl_adressen != 1
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND status.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($person_id))
+ {
+ $qry .= " AND person_id = ?";
+ $params[] = $person_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
index 7a7cf0d6f..a9e9f817a 100644
--- a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
+++ b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php
@@ -13,12 +13,15 @@ class GbDatumWeitZurueck extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $personRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz);
+ $personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($personRes)) return $personRes;
@@ -39,4 +42,63 @@ class GbDatumWeitZurueck extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Birthdate is too long ago.
+ * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param person_id int if check is to be executed only for one person
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getGbDatumWeitZurueck(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $person_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ pers.person_id
+ FROM
+ public.tbl_person pers
+ WHERE
+ pers.gebdatum < '1920-01-01'
+ AND EXISTS (
+ SELECT 1
+ FROM public.tbl_prestudent
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE person_id = pers.person_id";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND status.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ $qry .= ")";
+
+ if (isset($person_id))
+ {
+ $qry .= " AND pers.person_id = ?";
+ $params[] = $person_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
index 76fd477e3..dead2b1e7 100644
--- a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
+++ b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php
@@ -13,12 +13,20 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getInaktiverStudentAktiverStatus(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -44,4 +52,62 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students with active status should have an active Benutzer.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getInaktiverStudentAktiverStatus(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
+
+ if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
+
+ $studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
+
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_benutzer benutzer
+ JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ benutzer.aktiv=false
+ AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?)
+ AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')
+ AND stg.melderelevant
+ AND prestudent.bismelden";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
index 51726d969..5276164dc 100644
--- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
+++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php
@@ -13,12 +13,20 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz);
+ $personRes = $this->getIncomingHeimatNationOesterreich(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($personRes)) return $personRes;
@@ -39,4 +47,58 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Incoming shouldn't have austrian home address.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param person_id int if check is to be executed only for one person
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getIncomingHeimatNationOesterreich(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $person_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT pers.person_id, status.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_person pers USING(person_id)
+ JOIN public.tbl_adresse addr USING(person_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ status.status_kurzbz = 'Incoming'
+ AND addr.nation = 'A'
+ AND addr.heimatadresse
+ AND status.studiensemester_kurzbz = ?
+ AND stg.melderelevant
+ AND pre.bismelden";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($person_id))
+ {
+ $qry .= " AND pers.person_id = ?";
+ $params[] = $person_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
index 9681554e5..e08280f83 100644
--- a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
+++ b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php
@@ -13,11 +13,14 @@ class IncomingOhneIoDatensatz extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz);
+ $prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,54 @@ class IncomingOhneIoDatensatz extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Incoming should have IN/OUT data.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT ON(student_uid, nachname, vorname)
+ tbl_person.person_id,
+ tbl_prestudent.prestudent_id,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_student
+ JOIN public.tbl_benutzer ON(student_uid=uid)
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id)
+ JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz)
+ WHERE
+ bismelden=TRUE
+ AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)
+ AND stg.melderelevant";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND tbl_prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
index 0e12ccac8..4d789f71a 100644
--- a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
+++ b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php
@@ -13,12 +13,20 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getIncomingOrGsFoerderrelevant(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -41,4 +49,77 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant).
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return object success or error
+ */
+ public function getIncomingOrGsFoerderrelevant(
+ $studiensemester_kurzbz = null,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT ON(prestudent_id)
+ pers.person_id,
+ ps.prestudent_id,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_student stud
+ JOIN public.tbl_benutzer ON(student_uid=uid)
+ JOIN public.tbl_person pers USING(person_id)
+ JOIN public.tbl_prestudent ps USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz)
+ WHERE
+ (
+ status.status_kurzbz = 'Incoming'
+ OR EXISTS (
+ SELECT 1
+ FROM
+ bis.tbl_mobilitaet
+ JOIN public.tbl_prestudent USING(prestudent_id)
+ WHERE
+ prestudent_id = ps.prestudent_id
+ AND gsstudientyp_kurzbz = 'Extern'
+ )
+ )
+ AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL)
+ AND bismelden=TRUE
+ AND stg.melderelevant";
+
+ if (isset($studiensemester_kurzbz))
+ {
+ $qry .= " AND status.studiensemester_kurzbz = ?";
+ $params[] = $studiensemester_kurzbz;
+ }
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND ps.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
index 672dfa585..871b3b3d4 100644
--- a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
+++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php
@@ -13,12 +13,20 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getInskriptionVorLetzerBismeldung(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -48,4 +56,93 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students of a semester shouldn't start studies before the date of Bismeldung.
+ * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020
+ * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getInskriptionVorLetzerBismeldung(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ // get Bismeldedatum
+ $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz);
+
+ $params = array($datumBis, $studiensemester_kurzbz, $datumBis);
+
+ // get active students
+ $qry = "
+ SELECT
+ DISTINCT ON (student.student_uid) ? AS datum_bismeldung,
+ prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
+ FROM
+ public.tbl_benutzer benutzer
+ JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ benutzer.aktiv=true
+ AND status.studiensemester_kurzbz = ?
+ /* inscription date before date of first student status */
+ AND (
+ SELECT datum
+ FROM public.tbl_prestudentstatus
+ WHERE prestudent_id = prestudent.prestudent_id
+ AND studiensemester_kurzbz = status.studiensemester_kurzbz
+ AND status_kurzbz = 'Student'
+ ORDER BY datum, insertamum, ext_id
+ LIMIT 1
+ ) < ?
+ AND stg.melderelevant
+ AND prestudent.bismelden";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
+
+ /**
+ * Gets Bismeldedate from Studiensemester.
+ * @param studiensemester_kurzbz string
+ */
+ private function _getBisdateFromSemester($studiensemester_kurzbz)
+ {
+ $semesterYear = substr($studiensemester_kurzbz, 2, 6);
+ $semesterType = substr($studiensemester_kurzbz, 0, 2);
+
+ if ($semesterType == 'SS')
+ {
+ return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d');
+ }
+
+ if ($semesterType == 'WS')
+ {
+ return date_format(date_create($semesterYear."-04-15"), 'Y-m-d');
+ }
+ }
}
diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
index c61531e46..c04cd664c 100644
--- a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
+++ b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php
@@ -13,11 +13,18 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $personRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde($studiengang_kz);
+ $personRes = $this->getNationNichtOesterreichAberGemeinde(
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($personRes)) return $personRes;
@@ -39,4 +46,49 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Nation is not Austria, but address has austrian Gemeinde.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param person_id int if check is to be executed only for one person
+ * @return success with prestudents or error
+ */
+ public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id
+ FROM
+ public.tbl_adresse adr
+ JOIN public.tbl_prestudent USING(person_id)
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_student USING(prestudent_id)
+ JOIN public.tbl_benutzer ON(uid=student_uid)
+ JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ adr.nation!='A'
+ AND tbl_benutzer.aktiv
+ AND gemeinde NOT IN ('Münster')
+ AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($person_id))
+ {
+ $qry .= " AND tbl_person.person_id = ?";
+ $params[] = $person_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
index b7ef64c41..316e81072 100644
--- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
+++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php
@@ -13,12 +13,20 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getOrgformStgUngleichOrgformPrestudent(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -49,4 +57,74 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Orgform of a Studiengang in Studienplan should be the same as orgform of student.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getOrgformStgUngleichOrgformPrestudent(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz,
+ studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform,
+ prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_studiengang studiengang
+ JOIN public.tbl_student student USING(studiengang_kz)
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id)
+ WHERE
+ benutzer.aktiv = true
+ AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent')
+ AND studiengang.studiengang_kz < 10000
+ AND status.studiensemester_kurzbz = ?
+ AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE)
+ AND NOT EXISTS(
+ SELECT 1
+ FROM
+ lehre.tbl_studienplan
+ JOIN
+ lehre.tbl_studienordnung USING(studienordnung_id)
+ WHERE
+ tbl_studienplan.studienplan_id = stpl.studienplan_id
+ AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
+ AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND studiengang.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ $qry .= "
+ ORDER BY student_uid";
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php
index bfa72b5e0..086a44cc4 100644
--- a/application/libraries/issues/plausichecks/PlausiChecker.php
+++ b/application/libraries/issues/plausichecks/PlausiChecker.php
@@ -6,13 +6,18 @@
abstract class PlausiChecker
{
protected $_ci; // code igniter instance
+ protected $_config; // configuration parameters for this plausicheck
+ protected $_db; // database for queries
- public function __construct()
+ public function __construct($configurationParams = null)
{
$this->_ci =& get_instance(); // get code igniter instance
- // load libraries
- $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library
+ // set configuration
+ $this->_config = $configurationParams;
+
+ // get database for queries
+ $this->_db = new DB_Model();
}
/**
diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
index 369085089..a4c3e2a4b 100644
--- a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
+++ b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php
@@ -13,12 +13,20 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getPrestudentMischformOhneOrgform(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -47,4 +55,55 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Students in "mixed" Studiengang should have Orgform.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getPrestudentMischformOhneOrgform(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_studiengang stg USING(studiengang_kz)
+ WHERE
+ status.status_kurzbz IN ('Bewerber', 'Student')
+ AND stg.mischform
+ AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL)
+ AND status.studiensemester_kurzbz=?";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
index 4eb25ed11..94bea2f35 100644
--- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
+++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz);
+ $prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,48 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Studiengang should be the same for prestudent and student.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "
+ SELECT
+ pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_student stud USING(prestudent_id)
+ JOIN public.tbl_person pers USING(person_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz
+ WHERE
+ stud.studiengang_kz != pre.studiengang_kz";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND pre.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
index 7175725fd..fc0f52f23 100644
--- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
+++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz);
+ $prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,62 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Studiengang should be the same for prestudent and studienplan.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param studienordnung_id int if check is to be executed only for a certain studienordnung_id
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getStgPrestudentUngleichStgStudienplan(
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $studienordnung_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array();
+
+ $qry = "
+ SELECT
+ DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id,
+ stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudent ps
+ JOIN public.tbl_prestudentstatus USING(prestudent_id)
+ JOIN lehre.tbl_studienplan stplan USING(studienplan_id)
+ JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id)
+ JOIN public.tbl_person USING(person_id)
+ JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz
+ WHERE
+ ps.studiengang_kz<>stordnung.studiengang_kz
+ AND stg.melderelevant";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND ps.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($studienordnung_id))
+ {
+ $qry .= " AND stordnung.studienordnung_id = ?";
+ $params[] = $studienordnung_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
index 12a7516ef..87bb51d7e 100644
--- a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
+++ b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php
@@ -13,11 +13,14 @@ class StudentstatusNachAbbrecher extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz);
+ $prestudentRes = $this->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz);
if (isError($prestudentRes)) return $prestudentRes;
@@ -40,4 +43,48 @@ class StudentstatusNachAbbrecher extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * There shouldn't be any status after Abbrecher status.
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
+ {
+ $params = array();
+
+ $qry = "
+ SELECT
+ prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_student student
+ JOIN public.tbl_prestudent prestudent USING(prestudent_id)
+ JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
+ JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
+ WHERE
+ prestatus.status_kurzbz = 'Abbrecher'
+ AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php
index 6b8fe49aa..9a306278e 100644
--- a/application/libraries/issues/plausichecks/StudienplanUngueltig.php
+++ b/application/libraries/issues/plausichecks/StudienplanUngueltig.php
@@ -13,12 +13,20 @@ class StudienplanUngueltig extends PlausiChecker
{
$results = array();
+ // get parameters from config
+ $exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
+
// pass parameters needed for plausicheck
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
// get all students failing the plausicheck
- $prestudentRes = $this->_ci->plausichecklib->getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz);
+ $prestudentRes = $this->getStudienplanUngueltig(
+ $studiensemester_kurzbz,
+ $studiengang_kz,
+ null,
+ $exkludierte_studiengang_kz
+ );
if (isError($prestudentRes)) return $prestudentRes;
@@ -48,4 +56,71 @@ class StudienplanUngueltig extends PlausiChecker
// return the results
return success($results);
}
+
+ /**
+ * Studienplan should be valid in current Ausbildungssemester of prestudent.
+ * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
+ * @param studiengang_kz int if check is to be executed for certain Studiengang
+ * @param prestudent_id int if check is to be executed only for one prestudent
+ * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
+ * @return success with prestudents or error
+ */
+ public function getStudienplanUngueltig(
+ $studiensemester_kurzbz,
+ $studiengang_kz = null,
+ $prestudent_id = null,
+ $exkludierte_studiengang_kz = null
+ ) {
+ $params = array($studiensemester_kurzbz);
+
+ $qry = "
+ SELECT
+ DISTINCT pre.person_id, pre.prestudent_id,
+ tbl_studienplan.bezeichnung AS studienplan,
+ status.status_kurzbz,
+ status.studiensemester_kurzbz,
+ status.ausbildungssemester,
+ stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
+ FROM
+ public.tbl_prestudent pre
+ JOIN public.tbl_prestudentstatus status USING(prestudent_id)
+ JOIN public.tbl_person USING(person_id)
+ JOIN lehre.tbl_studienplan USING(studienplan_id)
+ JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
+ WHERE
+ status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener')
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ lehre.tbl_studienplan_semester
+ WHERE
+ studienplan_id=status.studienplan_id
+ AND tbl_studienplan_semester.semester = status.ausbildungssemester
+ AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz
+ )
+ AND status.studiensemester_kurzbz=?
+ AND pre.bismelden
+ AND stg.melderelevant";
+
+ if (isset($studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz = ?";
+ $params[] = $studiengang_kz;
+ }
+
+ if (isset($prestudent_id))
+ {
+ $qry .= " AND tbl_prestudent.prestudent_id = ?";
+ $params[] = $prestudent_id;
+ }
+
+ if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
+ {
+ $qry .= " AND stg.studiengang_kz NOT IN ?";
+ $params[] = $exkludierte_studiengang_kz;
+ }
+
+ return $this->_db->execReadOnlyQuery($qry, $params);
+ }
}
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0007.php b/application/libraries/issues/resolvers/CORE_INOUT_0007.php
index 2d9c7a3f4..31ca79ffb 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0007.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0007.php
@@ -17,10 +17,10 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/IncomingHeimatNationOesterreich');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
+ $checkRes = $this->_ci->incomingheimatnationoesterreich->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0008.php b/application/libraries/issues/resolvers/CORE_INOUT_0008.php
index afa43893a..4fa090c6a 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0008.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0008.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Incoming should have IN/OUT data entry.
*/
class CORE_INOUT_0008 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_INOUT_0008 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/IncomingOhneIoDatensatz');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->incomingohneiodatensatz->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0009.php b/application/libraries/issues/resolvers/CORE_INOUT_0009.php
index b56344042..c739d71c3 100644
--- a/application/libraries/issues/resolvers/CORE_INOUT_0009.php
+++ b/application/libraries/issues/resolvers/CORE_INOUT_0009.php
@@ -14,10 +14,10 @@ class CORE_INOUT_0009 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/IncomingOrGsFoerderrelevant');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
+ $checkRes = $this->_ci->incomingorgsfoerderrelevant->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0001.php b/application/libraries/issues/resolvers/CORE_PERSON_0001.php
index bd94fea59..d0ac0d3ed 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0001.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0001.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Birth date of person shouldn't be too long ago.
*/
class CORE_PERSON_0001 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_PERSON_0001 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/GbDatumWeitZurueck');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
+ $checkRes = $this->_ci->gbdatumweitzurueck->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0002.php b/application/libraries/issues/resolvers/CORE_PERSON_0002.php
index d1bb2fe94..608dcf0ce 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0002.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0002.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Nation of person should be austria if Gemeinde (city) is austrian.
*/
class CORE_PERSON_0002 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_PERSON_0002 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/NationNichtOesterreichAberGemeinde');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
+ $checkRes = $this->_ci->nationnichtoesterreichabergemeinde->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0003.php b/application/libraries/issues/resolvers/CORE_PERSON_0003.php
index 08fea6c05..23a81b660 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0003.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0003.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Person should have only one home adress.
*/
class CORE_PERSON_0003 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_PERSON_0003 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/FalscheAnzahlHeimatadressen');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
+ $checkRes = $this->_ci->falscheanzahlheimatadressen->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0004.php b/application/libraries/issues/resolvers/CORE_PERSON_0004.php
index bfe243fd1..ae3a855ec 100644
--- a/application/libraries/issues/resolvers/CORE_PERSON_0004.php
+++ b/application/libraries/issues/resolvers/CORE_PERSON_0004.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Person should have only one delivery adress.
*/
class CORE_PERSON_0004 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_PERSON_0004 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/FalscheAnzahlZustelladressen');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
+ $checkRes = $this->_ci->falscheanzahlzustelladressen->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0001.php b/application/libraries/issues/resolvers/CORE_STG_0001.php
index 97cef6056..09c34be74 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0001.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0001.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Studiengang should be the same for prestudent and student.
*/
class CORE_STG_0001 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STG_0001 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudent');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->stgprestudentungleichstgstudent->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0002.php b/application/libraries/issues/resolvers/CORE_STG_0002.php
index fe414de38..999958042 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0002.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0002.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Orgform of a Studiengang in Studienplan should be the same as orgform of student.
*/
class CORE_STG_0002 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STG_0002 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/OrgformStgUngleichOrgformPrestudent');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->orgformstgungleichorgformprestudent->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0003.php b/application/libraries/issues/resolvers/CORE_STG_0003.php
index 33cb0846b..22d6399be 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0003.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0003.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Students in "mixed" Studiengang should have Orgform.
*/
class CORE_STG_0003 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STG_0003 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/PrestudentMischformOhneOrgform');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->prestudentmischformohneorgform->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STG_0004.php b/application/libraries/issues/resolvers/CORE_STG_0004.php
index 02d45bbd3..2eedfc7fe 100644
--- a/application/libraries/issues/resolvers/CORE_STG_0004.php
+++ b/application/libraries/issues/resolvers/CORE_STG_0004.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Studiengang should be the same for prestudent and studienplan.
*/
class CORE_STG_0004 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STG_0004 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudienplan');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
+ $checkRes = $this->_ci->stgprestudentungleichstgstudienplan->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
index 78c49810b..c74cd38fb 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Abbrecher cannot be active.
*/
class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AbbrecherAktiv');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAbbrecherAktiv(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->abbrecheraktiv->getAbbrecherAktiv(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
index 23943397a..36827684c 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * There shouldn't be any status after Abbrecher status.
*/
class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/StudentstatusNachAbbrecher');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->studentstatusnachabbrecher->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
index 6ac243b4f..f3b150d8d 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
*/
class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
{
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->ausbildungssemprestudentungleichausbildungssemstatus->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
+ $params['studiensemester_kurzbz'],
+ null,
+ $params['prestudent_id']
+ );
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
index d76215b6a..cbce2b01e 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Students with active status should have an active Benutzer.
*/
class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
{
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/InaktiverStudentAktiverStatus');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->inaktiverstudentaktiverstatus->getInaktiverStudentAktiverStatus(
+ $params['studiensemester_kurzbz'],
+ null,
+ $params['prestudent_id']
+ );
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
index 7f7ca4723..f5e265194 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Students of a semester shouldn't start studies before the date of Bismeldung.
*/
class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/InskriptionVorLetzerBismeldung');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->inskriptionvorletzerbismeldung->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
index ba1e5b715..94658ec9c 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Status Dates and status studysemester dates should be in correct order.
*/
class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/DatumStudiensemesterFalscheReihenfolge');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->datumstudiensemesterfalschereihenfolge->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
index 1dd8fdcb2..3a2575e53 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Students with active Benutzer should have a status in the current semester.
*/
class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AktiverStudentOhneStatus');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
+ $checkRes = $this->_ci->aktiverstudentohnestatus->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
index 83357d9bf..53bfd72a6 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Studienplan should be valid in current Ausbildungssemester of prestudent.
*/
class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/StudienplanUngueltig');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->studienplanungueltig->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
index b1b5e9876..816b7e933 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Students with finished studies should have exactly one final exam.
*/
class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/FalscheAnzahlAbschlusspruefungen');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
+ $checkRes = $this->_ci->falscheanzahlabschlusspruefungen->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
index 1e3a6849b..b31fb872a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Date of final exam shouldn't be missing for Absolvent.
*/
class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/DatumAbschlusspruefungFehlt');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
+ $checkRes = $this->_ci->datumabschlusspruefungfehlt->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
index 233240305..9dff0181e 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Date of sponsion shouldn't be missing for Absolvent.
*/
class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/DatumSponsionFehlt');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
+ $checkRes = $this->_ci->datumsponsionfehlt->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
index 38832edc0..7fe5dbde4 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Bewerber should have participated in Reihungstest.
*/
class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
{
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/BewerberNichtZumRtAngetreten');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->bewerbernichtzumrtangetreten->getBewerberNichtZumRtAngetreten(
+ $params['studiensemester_kurzbz'],
+ null,
+ $params['prestudent_id']
+ );
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
index 78ad40a8e..86e8b75b1 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Current Ausbildungssemester shouldn't be 0.
*/
class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
{
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AktSemesterNull');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
+ $checkRes = $this->_ci->aktsemesternull->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
index 8d96b7c65..4b542cf0a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php
@@ -3,7 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
- * Incoming shouldn't have austrian home address.
+ * Prestudent should have a final status.
*/
class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
{
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AbschlussstatusFehlt');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
+ $checkRes = $this->_ci->abschlussstatusfehlt->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
if (isError($checkRes)) return $checkRes;
diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
index aafee1124..37e42ec0a 100644
--- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
+++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0015 implements IIssueResolvedChecker
$this->_ci =& get_instance(); // get code igniter instance
- $this->_ci->load->library('issues/PlausicheckLib');
+ $this->_ci->load->library('issues/plausichecks/AktiverStudentstatusOhneKontobuchung');
// check if issue persists
- $checkRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung(
+ $checkRes = $this->_ci->aktiverstudentstatusohnekontobuchung->getAktiverStudentstatusOhneKontobuchung(
$params['studiensemester_kurzbz'],
null,
$params['prestudent_id']
diff --git a/application/models/crm/RueckstellungStatus_model.php b/application/models/crm/RueckstellungStatus_model.php
new file mode 100644
index 000000000..a4cb391f1
--- /dev/null
+++ b/application/models/crm/RueckstellungStatus_model.php
@@ -0,0 +1,14 @@
+dbTable = 'public.tbl_rueckstellung_status';
+ $this->pk = 'status_kurzbz';
+ }
+}
\ No newline at end of file
diff --git a/application/models/crm/Rueckstellung_model.php b/application/models/crm/Rueckstellung_model.php
new file mode 100644
index 000000000..d2c39ffde
--- /dev/null
+++ b/application/models/crm/Rueckstellung_model.php
@@ -0,0 +1,33 @@
+dbTable = 'public.tbl_rueckstellung';
+ $this->pk = 'rueckstellung_id';
+ $this->hasSequence = true;
+ }
+
+ public function getByPersonId($person_id, $status = null)
+ {
+ $language_index = getUserLanguage() == 'German' ? 0 : 1;
+
+ $this->addLimit(1);
+ $this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
+ $this->addSelect('*,
+ array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
+ $this->addOrder('datum_bis', 'DESC');
+
+ $where['person_id'] = $person_id;
+
+ if (!isEmptyString($status))
+ $where['status_kurzbz'] = $status;
+
+ return $this->loadWhere($where);
+ }
+}
\ No newline at end of file
diff --git a/application/models/system/Fehlerkonfiguration_model.php b/application/models/system/Fehlerkonfiguration_model.php
new file mode 100644
index 000000000..bf8de4cde
--- /dev/null
+++ b/application/models/system/Fehlerkonfiguration_model.php
@@ -0,0 +1,48 @@
+dbTable = 'system.tbl_fehler_konfiguration';
+ $this->pk = array('konfigurationstyp_kurzbz', 'fehlercode');
+ $this->hasSequence = false;
+ }
+
+ /**
+ * Retrieve all set configuration parameters, optionally filtered by app.
+ * @param string $app
+ * @return object success or error
+ */
+ public function getKonfiguration($app = null)
+ {
+ $fehlerkonfiguration = array();
+
+ $this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
+ $this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
+ $this->addJoin('system.tbl_fehler fehler', 'fehlercode');
+ $fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
+
+ if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
+
+ if (hasData($fehlerkonfigurationRes))
+ {
+ $fehlerkonfigurationData = getData($fehlerkonfigurationRes);
+ foreach ($fehlerkonfigurationData as $fk)
+ {
+ $konf = json_decode($fk->konfiguration);
+ if (is_array($konf))
+ {
+ $fk->konfiguration = $konf;
+ $fehlerkonfiguration[] = $fk;
+ }
+ }
+ }
+
+ return success($fehlerkonfiguration);
+ }
+}
diff --git a/application/models/system/Fehlerkonfigurationstyp_model.php b/application/models/system/Fehlerkonfigurationstyp_model.php
new file mode 100644
index 000000000..dc1c7957f
--- /dev/null
+++ b/application/models/system/Fehlerkonfigurationstyp_model.php
@@ -0,0 +1,47 @@
+dbTable = 'system.tbl_fehler_konfigurationstyp';
+ $this->pk = array('konfigurationstyp_kurzbz');
+ }
+
+ /**
+ * Retrieve all set configuration parameters, optionally filtered by app.
+ * @param string $app
+ * @return object success or error
+ */
+ public function getKonfiguration($app = null)
+ {
+ $fehlerkonfiguration = array();
+
+ $this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
+ $this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
+ $this->addJoin('system.tbl_fehler fehler', 'fehlercode');
+ $fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
+
+ if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
+
+ if (hasData($fehlerkonfigurationRes))
+ {
+ $fehlerkonfigurationData = getData($fehlerkonfigurationRes);
+ foreach ($fehlerkonfigurationData as $fk)
+ {
+ $konf = json_decode($fk->konfiguration);
+ if (is_array($konf))
+ {
+ $fk->konfiguration = $konf;
+ $fehlerkonfiguration[] = $fk;
+ }
+ }
+ }
+
+ return success($fehlerkonfiguration);
+ }
+}
diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php
index 635fd9da9..0414ddbf6 100644
--- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php
@@ -25,6 +25,7 @@ SELECT
lv_oe_kurzbz,
lektor,
stunden,
+ stundensatz,
betrag,
vertrag_id,
vertrag_stunden,
@@ -149,6 +150,7 @@ FROM
END AS "lv_oe_kurzbz",
(person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
+ lema.stundensatz,
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
@@ -270,6 +272,7 @@ FROM
END AS "lv_oe_kurzbz",
(nachname || \' \' || vorname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
+ pb.stundensatz,
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
@@ -325,6 +328,7 @@ $filterWidgetArray = array(
ucfirst($this->p->t('lehre', 'organisationseinheit')),
ucfirst($this->p->t('lehre', 'lektor')),
ucfirst($this->p->t('ui', 'stunden')),
+ ucfirst($this->p->t('ui', 'stundensatz')),
ucfirst($this->p->t('ui', 'betrag')),
ucfirst($this->p->t('ui', 'vertrag')). '-ID',
ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'stunden')),
@@ -399,6 +403,8 @@ $filterWidgetArray = array(
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
+ stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
+ headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
index c272c392c..5a2ad98bd 100644
--- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
@@ -435,7 +435,7 @@ $filterWidgetArray = array(
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
- stundensatz: {visible: false, align:"right", formatter: form_formatNulltoStringNumber,
+ stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
diff --git a/application/views/system/infocenter/infocenterAbgewiesenData.php b/application/views/system/infocenter/infocenterAbgewiesenData.php
index 40582a668..d09f0f41e 100644
--- a/application/views/system/infocenter/infocenterAbgewiesenData.php
+++ b/application/views/system/infocenter/infocenterAbgewiesenData.php
@@ -7,10 +7,11 @@
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$LOGDATA_NAME = '\'Message sent\'';
$LOGDATA_VON = '\'online\'';
+ $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
- p.person_id AS "PersonID",
+ p.person_id AS "PersonId",
ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
@@ -37,7 +38,15 @@ $query = '
AND l.zeitpunkt >= pss.insertamum
ORDER BY l.log_id DESC
LIMIT 1
- ) AS "Nachricht"
+ ) AS "Nachricht",
+ (
+ SELECT SUM(konto.betrag)
+ FROM public.tbl_konto konto
+ LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
+ WHERE konto.person_id = p.person_id
+ AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
+ AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
+ ) AS "Kaution"
FROM
public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
@@ -60,14 +69,16 @@ $query = '
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter',
+ 'checkboxes' => 'PersonId',
'columnsAliases' => array(
- 'PersonID',
+ 'PersonId',
'PreStudentID',
- 'Vorname',
- 'Nachname',
- 'Studiengang',
- 'Abgewiesen am',
- 'Nachricht'
+ ucfirst($this->p->t('person', 'vorname')) ,
+ ucfirst($this->p->t('person', 'nachname')),
+ ucfirst($this->p->t('lehre', 'studiengang')),
+ ucfirst($this->p->t('infocenter', 'abgewiesenam')),
+ ucfirst($this->p->t('global', 'nachricht')),
+ ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -80,6 +91,19 @@ $query = '
$datasetRaw->{'Nachricht'} = 'Ja';
}
+ if ($datasetRaw->{'Kaution'} === null)
+ {
+ $datasetRaw->{'Kaution'} = '-';
+ }
+ else if ($datasetRaw->{'Kaution'} === '0.00')
+ {
+ $datasetRaw->{'Kaution'} = 'Bezahlt';
+ }
+ else
+ {
+ $datasetRaw->{'Kaution'} = 'Offen';
+ }
+
$datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i');
return $datasetRaw;
}
diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php
index de2bd1bca..bb5b84479 100644
--- a/application/views/system/infocenter/infocenterData.php
+++ b/application/views/system/infocenter/infocenterData.php
@@ -7,13 +7,12 @@
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\'';
- $LOGDATA_NAME_PARKED = '\'Parked\'';
- $LOGDATA_NAME_ONHOLD = '\'Onhold\'';
- $LOGTYPE_KURZBZ = '\'Processstate\'';
+ $POSTPONE_STATUS_PARKED = '\'parked\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
+ $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$ORG_NAME = '\'InfoCenter\'';
$ONLINE = '\'online\'';
@@ -27,8 +26,6 @@
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
- pd.parkdate AS "ParkDate",
- ohd.onholddate AS "OnholdDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
@@ -276,9 +273,9 @@
) AS "ZGVMNationGruppe",
(
SELECT tbl_organisationseinheit.bezeichnung
- FROM public.tbl_benutzerfunktion
+ FROM public.tbl_benutzerfunktion
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
- WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
+ WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now())
AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now())
AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.'
AND tbl_benutzerfunktion.uid = (
@@ -290,8 +287,18 @@
ORDER BY l.log_id DESC
LIMIT 1
)
- LIMIT 1
- ) AS "InfoCenterMitarbeiter"
+ LIMIT 1
+ ) AS "InfoCenterMitarbeiter",
+ rueck.datum_bis AS "HoldDate",
+ rueck.bezeichnung AS "Rueckstellgrund",
+ (
+ SELECT SUM(konto.betrag)
+ FROM public.tbl_konto konto
+ LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
+ WHERE konto.person_id = p.person_id
+ AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
+ AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
+ ) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -302,22 +309,24 @@
JOIN public.tbl_person sp ON sb.person_id = sp.person_id
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
- LEFT JOIN (
- SELECT l.person_id,
- l.zeitpunkt AS parkdate
- FROM system.tbl_log l
- WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
- AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
- AND l.zeitpunkt >= NOW()
- ) pd USING(person_id)
LEFT JOIN (
- SELECT l.person_id,
- l.zeitpunkt AS onholddate
- FROM system.tbl_log l
- WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
- AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.'
- AND l.zeitpunkt >= NOW()
- ) ohd USING(person_id)
+ SELECT
+ tbl_rueckstellung.person_id,
+ tbl_rueckstellung.datum_bis,
+ tbl_rueckstellung.status_kurzbz,
+ array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung
+ FROM public.tbl_rueckstellung
+ JOIN public.tbl_rueckstellung_status USING(status_kurzbz)
+ JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id
+ WHERE tbl_rueckstellung.rueckstellung_id =
+ (
+ SELECT srueck.rueckstellung_id
+ FROM public.tbl_rueckstellung srueck
+ WHERE srueck.person_id = tbl_rueckstellung.person_id
+ AND datum_bis >= NOW()
+ ORDER BY srueck.datum_bis DESC LIMIT 1
+ )
+ ) rueck ON rueck.person_id = p.person_id
WHERE
EXISTS (
SELECT 1
@@ -344,7 +353,12 @@
AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
)
)
- ORDER BY "LastAction" ASC';
+ ORDER BY CASE
+ WHEN rueck.status_kurzbz IS NULL THEN 1
+ WHEN rueck.status_kurzbz = ' .$POSTPONE_STATUS_PARKED .' THEN 2
+ WHEN rueck.status_kurzbz != '. $POSTPONE_STATUS_PARKED .' THEN 3
+ END,
+ rueck.datum_bis NULLS LAST, "LastAction" ASC';
$filterWidgetArray = array(
'query' => $query,
@@ -366,8 +380,6 @@
ucfirst($this->p->t('person', 'nation')),
ucfirst($this->p->t('global', 'sperrdatum')),
ucfirst($this->p->t('global', 'gesperrtVon')),
- ucfirst($this->p->t('global', 'parkdatum')),
- ucfirst($this->p->t('global', 'rueckstelldatum')),
ucfirst($this->p->t('global', 'letzteAktion')),
'Aktionstyp',
'AnzahlAktePflicht',
@@ -383,7 +395,10 @@
'ZGV Nation MA',
'ZGV Gruppe BA',
'ZGV Gruppe MA',
- 'InfoCenter Mitarbeiter'
+ 'InfoCenter Mitarbeiter',
+ ucfirst($this->p->t('infocenter', 'rueckstelldatum')),
+ ucfirst($this->p->t('infocenter', 'rueckstellgrund')),
+ ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -430,18 +445,13 @@
$datasetRaw->{'LockUser'} = '-';
}
- if ($datasetRaw->{'ParkDate'} == null)
+ if ($datasetRaw->{'HoldDate'} == null)
{
- $datasetRaw->{'ParkDate'} = '-';
- }
-
- if ($datasetRaw->{'OnholdDate'} == null)
- {
- $datasetRaw->{'OnholdDate'} = '-';
+ $datasetRaw->{'HoldDate'} = '-';
}
else
{
- $datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i');
+ $datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i');
}
if ($datasetRaw->{'StgAbgeschickt'} == null)
@@ -493,6 +503,24 @@
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
+ if ($datasetRaw->{'Rueckstellgrund'} === null)
+ {
+ $datasetRaw->{'Rueckstellgrund'} = '-';
+ }
+
+ if ($datasetRaw->{'Kaution'} === null)
+ {
+ $datasetRaw->{'Kaution'} = '-';
+ }
+ else if ($datasetRaw->{'Kaution'} === '0.00')
+ {
+ $datasetRaw->{'Kaution'} = 'Bezahlt';
+ }
+ else
+ {
+ $datasetRaw->{'Kaution'} = 'Offen';
+ }
+
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -504,16 +532,12 @@
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
- if ($datasetRaw->OnholdDate != null)
- {
+ if ($datasetRaw->Rueckstellgrund != null && $datasetRaw->Rueckstellgrund !== 'Parken')
$mark = "onhold";
- }
// Parking has priority over locking
- if ($datasetRaw->ParkDate != null)
- {
+ if ($datasetRaw->Rueckstellgrund === 'Parken')
$mark = "text-info";
- }
return $mark;
}
diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php
index 066e5cff6..401e34099 100644
--- a/application/views/system/infocenter/infocenterDetails.php
+++ b/application/views/system/infocenter/infocenterDetails.php
@@ -24,42 +24,15 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
+ 'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js',
'public/js/infocenter/stammdaten.js'
),
'phrases' => array(
- 'infocenter' => array(
- 'notizHinzufuegen',
- 'notizAendern',
- 'bewerberParken',
- 'bewerberAusparken',
- 'nichtsZumAusparken',
- 'fehlerBeimAusparken',
- 'fehlerBeimParken',
- 'bewerberGeparktBis',
- 'bewerberOnHold',
- 'bewerberOnHoldEntfernen',
- 'bewerberOnHoldBis',
- 'nichtsZumEntfernen',
- 'fehlerBeimEntfernen',
- 'rueckstelldatumUeberschritten',
- 'parkenZurueckstellenInfo',
- 'zgvInPruefung',
- 'zgvErfuellt',
- 'zgvNichtErfuellt',
- 'zgvErfuelltPruefung',
- 'datumUngueltig',
- 'nachreichDatumNichtVergangenheit'
- ),
- 'ui' => array(
- 'gespeichert',
- 'fehlerBeimSpeichern'
- ),
- 'global' => array(
- 'bis',
- 'zeilen'
- )
+ 'infocenter',
+ 'ui',
+ 'global'
)
);
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php
index 13e1d5549..32315c145 100644
--- a/application/views/system/infocenter/infocenterFreigegebenData.php
+++ b/application/views/system/infocenter/infocenterFreigegebenData.php
@@ -13,6 +13,7 @@
$ORG_NAME = '\'InfoCenter\'';
$IDENTITY = '\'identity\'';
$ONLINE = '\'online\'';
+ $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -264,7 +265,15 @@ $query = '
WHERE akte.person_id = p.person_id
AND dokument_kurzbz = '. $IDENTITY .'
LIMIT 1
- ) AS "AktenId"
+ ) AS "AktenId",
+ (
+ SELECT SUM(konto.betrag)
+ FROM public.tbl_konto konto
+ LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
+ WHERE konto.person_id = p.person_id
+ AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
+ AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
+ ) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -337,7 +346,8 @@ $query = '
'ZGV Nation BA',
'ZGV Nation MA',
'InfoCenter Mitarbeiter',
- 'Identitätsnachweis'
+ 'Identitätsnachweis',
+ ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -453,6 +463,18 @@ $query = '
$datasetRaw->{'AktenId'} = '-';
}
+ if ($datasetRaw->{'Kaution'} === null)
+ {
+ $datasetRaw->{'Kaution'} = '-';
+ }
+ else if ($datasetRaw->{'Kaution'} === '0.00')
+ {
+ $datasetRaw->{'Kaution'} = 'Bezahlt';
+ }
+ else
+ {
+ $datasetRaw->{'Kaution'} = 'Offen';
+ }
return $datasetRaw;
},
diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php
index ea1fab83c..e6b6d2495 100644
--- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php
+++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php
@@ -9,6 +9,7 @@
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\'';
+ $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = '
SELECT
@@ -195,7 +196,14 @@ $query = '
LIMIT 1
)
LIMIT 1
- ) AS "InfoCenterMitarbeiter"
+ ) AS "InfoCenterMitarbeiter",
+ (
+ SELECT SUM(konto.betrag)
+ FROM public.tbl_konto konto
+ WHERE konto.person_id = p.person_id
+ AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
+ AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
+ ) AS "Kaution"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
@@ -256,7 +264,8 @@ $query = '
'Reihungstest Datum',
'ZGV Nation BA',
'ZGV Nation MA',
- 'InfoCenter Mitarbeiter'
+ 'InfoCenter Mitarbeiter',
+ ucfirst($this->p->t('infocenter', 'kaution'))
),
'formatRow' => function($datasetRaw) {
@@ -359,6 +368,19 @@ $query = '
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
}
+ if ($datasetRaw->{'Kaution'} === null)
+ {
+ $datasetRaw->{'Kaution'} = '-';
+ }
+ else if ($datasetRaw->{'Kaution'} === '0.00')
+ {
+ $datasetRaw->{'Kaution'} = 'Bezahlt';
+ }
+ else
+ {
+ $datasetRaw->{'Kaution'} = 'Offen';
+ }
+
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
diff --git a/application/views/system/infocenter/infocenterZgvDetails.php b/application/views/system/infocenter/infocenterZgvDetails.php
index cf3ffad8b..7636647ab 100644
--- a/application/views/system/infocenter/infocenterZgvDetails.php
+++ b/application/views/system/infocenter/infocenterZgvDetails.php
@@ -26,6 +26,7 @@
'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js',
+ 'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js'
),
'phrases' => array(
diff --git a/application/views/system/infocenter/infocenterZgvUeberpruefungData.php b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php
index 5bfa5b078..d088d6b51 100644
--- a/application/views/system/infocenter/infocenterZgvUeberpruefungData.php
+++ b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php
@@ -5,6 +5,7 @@ $INTERESSENT_STATUS = '\'Interessent\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$oeKurz = '\''. implode('\',\'', $oeKurz) . '\'';
+$ABGEWIESENER_STATUS = '\'Abgewiesener\'';
$query = '
SELECT
@@ -22,6 +23,7 @@ $query = '
AND zgvstatus.datum IN (
SELECT MAX(zgvstatus.datum)
FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id)
+ AND get_rolle_prestudent(prestudent_id, NULL) != '. $ABGEWIESENER_STATUS .'
ORDER BY ps.prestudent_id
';
diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php
index 50b7c1483..c60b03a74 100644
--- a/application/views/system/issues/issuesData.php
+++ b/application/views/system/issues/issuesData.php
@@ -6,7 +6,6 @@ $ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_
// all oes for which logged user has issues permissions, including permissions for "special" issue funktion
$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')";
$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')";
-$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
// get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes
$query = "WITH zustaendigkeiten AS (
@@ -34,73 +33,97 @@ $query = "WITH zustaendigkeiten AS (
FROM system.tbl_fehler_zustaendigkeiten zst
)";
-$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
- inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
- ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
- verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
- fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
- pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
- (
- /* show all relevant Studiengänge of person and wether it is an employee*/
- SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
- || (CASE WHEN EXISTS (
- SELECT 1 FROM public.tbl_mitarbeiter ma
- JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
- WHERE person_id = prestudents.person_id
- AND ben.aktiv
- ) THEN ' | Mitarbeiter' ELSE '' END)
- FROM (
- SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
- FROM public.tbl_prestudent ps
- JOIN public.tbl_studiengang stg USING (studiengang_kz)
- WHERE person_id = pers.person_id
- ORDER BY prestudent_id DESC
- ) prestudents
- WHERE last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
- GROUP BY person_id
- LIMIT 1;
- ) AS \"Zugehörigkeit\",
- CASE
- WHEN
- EXISTS(SELECT 1
- FROM zustaendigkeiten
- WHERE fehlercode = iss.fehlercode
- AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
- THEN 'Ja'
- WHEN
- EXISTS(SELECT 1
- FROM zustaendigkeiten
- WHERE fehlercode = iss.fehlercode
- AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
- THEN 'Nein'
- ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
- END AS \"Hauptzuständig\",
- (
- SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
- FROM system.tbl_fehler_zustaendigkeiten
- JOIN public.tbl_person USING (person_id)
- WHERE fehlercode = fr.fehlercode
- GROUP BY fehlercode
- ) AS \"Person Zuständigkeiten\",
- (
- SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
- FROM system.tbl_fehler_zustaendigkeiten
- LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
- LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
- WHERE fehlercode = fr.fehlercode
- GROUP BY fehlercode
- ) AS \"Organisationseinheit Zuständigkeiten\",
- pers.bpk AS \"BPK\",
- pers.matr_nr AS \"Matrikelnummer\"
- FROM system.tbl_issue iss
- JOIN system.tbl_fehler fr USING (fehlercode)
- JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
- JOIN system.tbl_issue_status stat USING (status_kurzbz)
- LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
- WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
- SELECT 1 FROM zustaendigkeiten
- WHERE fehlercode = iss.fehlercode
- AND zustaendig = TRUE)";
+$query .= "
+ SELECT
+ issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
+ inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
+ ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\",
+ stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\",
+ verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
+ fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
+ pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
+ (
+ /* show all relevant Studiengänge of person and wether it is an employee*/
+ SELECT
+ STRING_AGG(studiengang || ' ' || last_status, ' | ')
+ || (CASE WHEN EXISTS (
+ SELECT 1 FROM public.tbl_mitarbeiter ma
+ JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
+ WHERE person_id = prestudents.person_id
+ AND ben.aktiv
+ ) THEN ' | Mitarbeiter' ELSE '' END)
+ FROM (
+ SELECT
+ DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang,
+ get_rolle_prestudent(ps.prestudent_id, null) AS last_status
+ FROM
+ public.tbl_prestudent ps
+ JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ WHERE
+ person_id = pers.person_id
+ ORDER BY
+ prestudent_id DESC
+ ) prestudents
+ WHERE
+ last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
+ GROUP BY
+ person_id
+ LIMIT 1;
+ ) AS \"Zugehörigkeit\",
+ CASE
+ WHEN
+ EXISTS(SELECT 1
+ FROM zustaendigkeiten
+ WHERE fehlercode = iss.fehlercode
+ AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
+ THEN 'Ja'
+ WHEN
+ EXISTS(SELECT 1
+ FROM zustaendigkeiten
+ WHERE fehlercode = iss.fehlercode
+ AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
+ THEN 'Nein'
+ ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
+ END AS \"Hauptzuständig\",
+ (
+ SELECT
+ string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
+ FROM
+ system.tbl_fehler_zustaendigkeiten
+ JOIN public.tbl_person USING (person_id)
+ WHERE
+ fehlercode = fr.fehlercode
+ GROUP BY
+ fehlercode
+ ) AS \"Person Zuständigkeiten\",
+ (
+ SELECT
+ string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung ||
+ COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
+ FROM
+ system.tbl_fehler_zustaendigkeiten
+ LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
+ LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
+ WHERE
+ fehlercode = fr.fehlercode
+ GROUP BY
+ fehlercode
+ ) AS \"Organisationseinheit Zuständigkeiten\",
+ pers.bpk AS \"BPK\",
+ pers.matr_nr AS \"Matrikelnummer\"
+ FROM
+ system.tbl_issue iss
+ JOIN system.tbl_fehler fr USING (fehlercode)
+ JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
+ JOIN system.tbl_issue_status stat USING (status_kurzbz)
+ LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
+ WHERE
+ fr.app IN ('core', 'dvuh')
+ AND (
+ EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
+ SELECT 1 FROM zustaendigkeiten
+ WHERE fehlercode = iss.fehlercode
+ AND zustaendig = TRUE)";
// show issue if it is assigend to oe of logged in user or to student of oe of logged in user
if (!isEmptyArray($all_oe_kurzbz_berechtigt))
@@ -131,6 +154,7 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
)
)";
}
+$query .= ") ";
$query .= " ORDER BY
CASE
@@ -146,17 +170,18 @@ $query .= " ORDER BY
datum DESC, fehlercode, issue_id DESC";
$filterWidgetArray = array(
- 'query' => $query,
+ 'query' => $query,
'app' => 'core',
'datasetName' => 'issues',
'filter_id' => $this->input->get('filter_id'),
- 'tableUniqueId' => 'issues',
- 'requiredPermissions' => 'system/issues_verwalten',
- 'datasetRepresentation' => 'tablesorter',
+ 'tableUniqueId' => 'issues',
+ 'requiredPermissions' => 'system/issues_verwalten',
+ 'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'issue_id',
- 'columnsAliases' => array(
- 'ID',
+ 'columnsAliases' => array(
+ 'ID',
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
+ ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')),
ucfirst($this->p->t('global', 'datum')),
ucfirst($this->p->t('fehlermonitoring', 'inhalt')),
@@ -176,10 +201,15 @@ $filterWidgetArray = array(
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten')),
- 'BPK',
- 'Matrikelnummer'
- ),
- 'formatRow' => function($datasetRaw) {
+ 'BPK',
+ 'Matrikelnummer'
+ ),
+ 'formatRow' => function ($datasetRaw) {
+
+ if ($datasetRaw->{'Fehler Kurzbezeichnung'} == null)
+ {
+ $datasetRaw->{'Fehler Kurzbezeichnung'} = '-';
+ }
if ($datasetRaw->{'Fehlercode extern'} == null)
{
@@ -238,7 +268,7 @@ $filterWidgetArray = array(
return $datasetRaw;
},
- 'markRow' => function($datasetRaw) {
+ 'markRow' => function ($datasetRaw) {
$mark = '';
diff --git a/application/views/system/issues/issuesKonfiguration.php b/application/views/system/issues/issuesKonfiguration.php
new file mode 100644
index 000000000..dbd62a26a
--- /dev/null
+++ b/application/views/system/issues/issuesKonfiguration.php
@@ -0,0 +1,200 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'Fehler Konfiguration',
+ 'jquery3' => true,
+ 'jqueryui1' => true,
+ 'jquerycheckboxes1' => true,
+ 'bootstrap3' => true,
+ 'fontawesome4' => true,
+ 'sbadmintemplate3' => true,
+ 'tablesorter2' => true,
+ 'ajaxlib' => true,
+ 'filterwidget' => true,
+ 'navigationwidget' => true,
+ 'dialoglib' => true,
+ 'phrases' => array(
+ 'ui',
+ 'fehlermonitoring'
+ ),
+ 'customCSSs' => array('public/css/issues/issuesKonfiguration.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
+ 'customJSs' => array('public/js/issues/issuesKonfiguration.js', 'public/js/bootstrapper.js')
+ )
+);
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ load->view('system/issues/issuesKonfigurationData.php'); ?>
+
+
+
+
+
+
+
+
+ |
+ p->t('fehlermonitoring', 'fehlercode')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlerkurzbz')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlertyp')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'fehlertext')) ?>
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationstyp')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationsbeschreibung')) ?>
+ |
+
+
+ |
+
+
+ |
+ p->t('fehlermonitoring', 'konfigurationsdatentyp')) ?>
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/system/issues/issuesKonfigurationData.php b/application/views/system/issues/issuesKonfigurationData.php
new file mode 100644
index 000000000..a83dc73ce
--- /dev/null
+++ b/application/views/system/issues/issuesKonfigurationData.php
@@ -0,0 +1,56 @@
+ $query,
+ 'app' => 'core',
+ 'datasetName' => 'fehlerKonfiguration',
+ 'filter_id' => $this->input->get('filter_id'),
+ 'tableUniqueId' => 'issuesKonfiguration',
+ 'requiredPermissions' => 'admin',
+ 'datasetRepresentation' => 'tablesorter',
+ 'additionalColumns' => array('Delete'),
+ 'columnsAliases' => array(
+ ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')),
+ ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
+ ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
+ ucfirst($this->p->t('fehlermonitoring', 'konfigurationswert')),
+ 'Application',
+ ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')),
+ ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')),
+ ucfirst($this->p->t('fehlermonitoring', 'fehlertext')),
+ ),
+ 'formatRow' => function($datasetRaw) {
+
+ $datasetRaw->{'Delete'} =
+ "";
+
+ if ($datasetRaw->{'konfigurationsbeschreibung'} == null)
+ {
+ $datasetRaw->{'konfigurationsbeschreibung'} = '-';
+ }
+
+ if ($datasetRaw->{'fehlertext'} == null)
+ {
+ $datasetRaw->{'fehlertext'} = '-';
+ }
+
+ return $datasetRaw;
+ }
+);
+
+echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
diff --git a/application/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php
index 4016e64cd..45c272ff4 100644
--- a/application/views/system/issues/plausichecks.php
+++ b/application/views/system/issues/plausichecks.php
@@ -71,9 +71,9 @@ $this->load->view(
diff --git a/application/views/templates/FHC-Footer.php b/application/views/templates/FHC-Footer.php
index 0c3782fea..c461dd8b0 100644
--- a/application/views/templates/FHC-Footer.php
+++ b/application/views/templates/FHC-Footer.php
@@ -60,7 +60,7 @@
if ($bootstrap3 === true) generateJSsInclude('vendor/twbs/bootstrap3/dist/js/bootstrap.min.js');
// Bootstrap 5 JS
- if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.min.js');
+ if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.bundle.min.js');
// Moment JS
if ($momentjs2 === true)
diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php
index e3bf5c40d..a8705e7f9 100644
--- a/cis/private/lehre/abgabe_lektor_details.php
+++ b/cis/private/lehre/abgabe_lektor_details.php
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
+require_once('../../../application/libraries/SignatureLib.php');
if (!$db = new basis_db())
$db=false;
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= "\n";
$htmlstr .= "\n";
$htmlstr .= "\n";
- if(!$row->abgabedatum)
+
+ $uploadedDocumentSigned = null;
+ if (!$row->abgabedatum)
{
if ($row->datumdb_fetch_object($result))
$fcol='#000000';
}
}
- //$htmlstr .= "| fixtermin=='t'?'checked=\"checked\"':'')." >";
- //$htmlstr .= " | fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
+
if($row->fixtermin=='t')
{
$htmlstr .= " |  | ";
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= " \n";
$htmlstr .= " | \n";
$htmlstr .= " ".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))." | \n";
- if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
+
+ if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
{
$htmlstr .= " | ";
- if(!$row->abgabedatum)
+ if (!$row->abgabedatum)
{
$htmlstr .= " | ";
}
@@ -692,6 +695,60 @@ while ($row=@$db->db_fetch_object($result))
{
$htmlstr .= " | ";
}
+
+ if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
+ {
+ $signaturVorhanden = false;
+ if ($row->paabgabetyp_kurzbz == 'end')
+ {
+ if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
+ {
+ // Check if the document is signed
+ $signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
+ if (is_array($signList) && count($signList) > 0)
+ {
+ $signaturVorhanden = true;
+ // The document is signed
+ }
+ elseif (isset($signList->code) && $signList->code == 1)
+ {
+ $uploadedDocumentSigned = $p->t('abgabetool/uploaddDocumentToBigForSignature');
+ }
+ elseif ($signList === null)
+ {
+ $uploadedDocumentSigned = 'WARNING: signature server error';
+ }
+ else
+ {
+ $uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
+ }
+ }
+ }
+ if ($uploadedDocumentSigned != null)
+ {
+ $htmlstr .= '
+
+
+ '.$uploadedDocumentSigned.'
+
+ | ';
+ }
+ elseif($signaturVorhanden)
+ {
+ $htmlstr .= '
+
+
+ '.$p->t('abgabetool/uploadedDocumentSigned').'
+
+ | ';
+ }
+ }
+ else
+ {
+ $htmlstr .= " | ";
+ }
+
+
$htmlstr .= "
\n";
@@ -710,7 +767,7 @@ $htmlstr .= ''."\n";
//$htmlstr .= " | ";
$htmlstr .= " | ";
-$htmlstr .= " | \n";
+$htmlstr .= " | \n";
$htmlstr .= " |
diff --git a/vilesci/personen/urlaubsverwaltung.php b/vilesci/personen/urlaubsverwaltung.php
index f631aa081..274a04b94 100644
--- a/vilesci/personen/urlaubsverwaltung.php
+++ b/vilesci/personen/urlaubsverwaltung.php
@@ -33,6 +33,7 @@ require_once('../../include/mitarbeiter.class.php');
require_once('../../include/datum.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/addon.class.php');
+require_once('../../include/benutzerfunktion.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
@@ -130,24 +131,37 @@ echo '
+
+
+
+
+
+ Rechte Übersicht
+
+ berechtigung_kurzbz = $kurzbzPost;
+ $berechtigung->beschreibung = $beschreibung;
+ $berechtigung->new = true;
+
+ if($berechtigung->save())
+ {
+ echo 'Recht '.$kurzbzPost.' wurde angelegt
';
+ }
+ else
+ {
+ echo 'Fehler beim Speichern:'.$berechtigung->errormsg.'
';
+ }
+ }
+ else
+ {
+ echo 'Zum Speichern der Daten muss die Kurzbz und die Beschreibung angegeben werden
';
+ }
+ }
+
+ if(isset($delete) && isset($kurzbz))
+ {
+ $berechtigung = new berechtigung();
+ if($berechtigung->delete($kurzbz))
+ echo 'Das Recht "'.$kurzbz.'" wurde erfolgreich gelöscht
';
+ else
+ echo 'Fehler beim Löschen des Rechts:'.$berechtigung->errormsg.'
';
+ }
+
+ if(isset($save))
+ {
+ $berechtigung = new berechtigung();
+ $berechtigung->load($berechtigung_kurzbz);
+ $berechtigung->beschreibung = $beschreibung;
+ if (!$berechtigung->save(false))
+ echo 'Fehler beim Speichern:'.$berechtigung->errormsg.'
';
+ }
+
+ //Tabelle mit Rollen anzeigen
+ $berechtigung = new berechtigung();
+ $berechtigung->getBerechtigungen();
+
+ echo '';
+ echo '
+
+
+
+ | Kurzbz |
+ Beschreibung |
+ Aktion |
+
+
+ ';
+
+ foreach($berechtigung->result as $recht)
+ {
+ if($edit && $recht->berechtigung_kurzbz == $kurzbz)
+ {
+ echo '
+
+ |
+ '.$recht->berechtigung_kurzbz.'
+ |
+
+ |
+
';
+ }
+ else
+ {
+ echo '
+
+ | '.$recht->berechtigung_kurzbz.' |
+ '.$recht->beschreibung.' |
+
+
+ Bearbeiten
+
+ |
+
+
+ Recht löschen
+
+ |
+
';
+ }
+ }
+ echo '
+
+
+
+
';
+
+ echo '
+
+
+