diff --git a/application/config/navigation.php b/application/config/navigation.php
index c2d221a80..b788dc40c 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -23,6 +23,14 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 10,
'requiredPermissions' => 'basis/vilesci:r'
+ ),
+ 'oehbeitragsverwaltung' => array(
+ 'link' => site_url('codex/Oehbeitrag'),
+ 'icon' => '',
+ 'description' => 'Öhbeitragsverwaltung',
+ 'expand' => true,
+ 'sort' => 20,
+ 'requiredPermissions' => 'admin:w'
)
)
),
@@ -125,6 +133,13 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 20,
'requiredPermissions' => 'system/developer:r'
+ ),
+ 'errormonitoring' => array(
+ 'link' => site_url('system/issues/Issues'),
+ 'description' => 'Fehler Monitoring',
+ 'expand' => true,
+ 'sort' => 20,
+ 'requiredPermissions' => 'system/issues_verwalten:r'
)
)
)
diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php
new file mode 100644
index 000000000..fa27d1ebb
--- /dev/null
+++ b/application/controllers/codex/Oehbeitrag.php
@@ -0,0 +1,261 @@
+ 'admin:r',// TODO which Berechtigung?
+ 'getOehbeitraege' => 'admin:r',
+ 'getValidStudiensemester' => 'admin:r',
+ 'addOehbeitrag' => 'admin:rw',
+ 'updateOehbeitrag' => 'admin:rw',
+ 'deleteOehbeitrag' => 'admin:rw'
+ )
+ );
+
+ $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
+ $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+
+ $this->load->library('WidgetLib');
+ }
+
+ public function index()
+ {
+ $oehbeitraege = array();
+
+ $oehbeitragRes = $this->_loadOehbeitraege();
+
+ if (isError($oehbeitragRes))
+ show_error(getError($oehbeitragRes));
+
+ if (hasData($oehbeitragRes))
+ $oehbeitraege = getData($oehbeitragRes);
+
+ $this->load->view("codex/oehbeitrag.php", array('oehbeitraege' => $oehbeitraege));
+ }
+
+ /**
+ * Gets all valid, i.e. unassigned, Studiensemester.
+ */
+ public function getValidStudiensemester()
+ {
+ $oehbeitrag_id = $this->input->get('oehbeitrag_id');
+ $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null;
+
+ $studiensemester = array();
+
+ $studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START, $oehbeitrag_id_arr);
+ if (isError($studiensemesterres))
+ {
+ $this->outputJsonError(getError($studiensemesterres));
+ return;
+ }
+
+ if (hasData($studiensemesterres))
+ $studiensemester = getData($studiensemesterres);
+
+ $this->outputJsonSuccess($studiensemester);
+ }
+
+ /**
+ * Gets all Öhbeiträge. Wrapper function for output as JSON.
+ */
+ public function getOehbeitraege()
+ {
+ $this->outputJson($this->_loadOehbeitraege());
+ }
+
+ /**
+ * Adds an Öhbeitrag. Checks for errors beforehand.
+ */
+ public function addOehbeitrag()
+ {
+ $studierendenbeitrag = $this->input->post('studierendenbeitrag');
+ $versicherung = $this->input->post('versicherung');
+ $von_studiensemester_kurzbz = $this->input->post('von_studiensemester_kurzbz');
+ $bis_studiensemester_kurzbz = $this->input->post('bis_studiensemester_kurzbz');
+ if ($bis_studiensemester_kurzbz == 'null')
+ $bis_studiensemester_kurzbz = null;
+
+ if (!$this->_checkAmount($studierendenbeitrag))
+ $this->outputJsonError('Ungültiger Studierendenbeitrag');
+ elseif (!$this->_checkAmount($versicherung))
+ $this->outputJsonError('Ungültige Versicherung');
+ else
+ {
+ $vonBisCheck = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz);
+
+ if (isError($vonBisCheck))
+ $this->outputJsonError(getError($vonBisCheck));
+ else
+ {
+ $data = array(
+ 'studierendenbeitrag' => $studierendenbeitrag,
+ 'versicherung' => $versicherung,
+ 'von_studiensemester_kurzbz' => $von_studiensemester_kurzbz,
+ 'bis_studiensemester_kurzbz' => $bis_studiensemester_kurzbz
+ );
+
+ $this->outputJson($this->OehbeitragModel->insert($data));
+ }
+ }
+ }
+
+ /**
+ * Updates an Öhbeitrag. Checks for errors beforehand.
+ */
+ public function updateOehbeitrag()
+ {
+ $oehbeitrag_id = $this->input->post("oehbeitrag_id");
+ $data = $this->input->post("data");
+
+ if (!is_numeric($oehbeitrag_id) || isEmptyArray($data))
+ {
+ $this->outputJsonError("Ungültige Parameter");
+ return;
+ }
+
+ foreach ($data as $idx => $value)
+ {
+ if ($idx == 'studierendenbeitrag' || $idx == 'versicherung')
+ {
+ if (!$this->_checkAmount($value))
+ {
+ $this->outputJsonError("Ungültige(r) $idx");
+ return;
+ }
+ }
+ elseif ($idx == 'von_studiensemester_kurzbz' || $idx == 'bis_studiensemester_kurzbz')
+ {
+ $this->OehbeitragModel->addSelect('von_studiensemester_kurzbz, bis_studiensemester_kurzbz');
+ $vonBisStudiensemesterRes = $this->OehbeitragModel->load($oehbeitrag_id);
+
+ if (!hasData($vonBisStudiensemesterRes))
+ {
+ $this->outputJsonError("Fehler beim Holen des Öhbeitrags");
+ return;
+ }
+
+ $vonBisStudiensemester = getData($vonBisStudiensemesterRes);
+
+ $von_studiensemester_kurzbz = isset($data['von_studiensemester_kurzbz'])
+ ? $data['von_studiensemester_kurzbz']
+ : $vonBisStudiensemester[0]->von_studiensemester_kurzbz;
+
+ if (isset($data['bis_studiensemester_kurzbz']))
+ {
+ $bis_studiensemester_kurzbz = $data['bis_studiensemester_kurzbz'] = $data['bis_studiensemester_kurzbz'] == 'null' ? null : $data['bis_studiensemester_kurzbz'];
+ }
+ else
+ $bis_studiensemester_kurzbz = $vonBisStudiensemester[0]->bis_studiensemester_kurzbz;
+
+ $checkStudiensemester = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id);
+
+ if (isError($checkStudiensemester))
+ {
+ $this->outputJsonError(getError($checkStudiensemester));
+ return;
+ }
+ }
+ }
+
+ $this->outputJson($this->OehbeitragModel->update($oehbeitrag_id, $data));
+ }
+
+ /**
+ * Deletes an Öhbeitrag.
+ */
+ public function deleteOehbeitrag()
+ {
+ $oehbeitrag_id = $this->input->post("oehbeitrag_id");
+
+ $this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id));
+ }
+
+ /**
+ * Loads all Öhbeiträge sorted by date descending.
+ * @return object
+ */
+ private function _loadOehbeitraege()
+ {
+ $this->OehbeitragModel->addSelect('oehbeitrag_id, von_studiensemester_kurzbz, bis_studiensemester_kurzbz, studierendenbeitrag, versicherung, sem_von.start as von_datum, sem_bis.ende as bis_datum');
+ $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_von', 'tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz');
+ $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_bis', 'tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz', 'LEFT');
+ $this->OehbeitragModel->addOrder('sem_von.start', 'DESC');
+ return $this->OehbeitragModel->load();
+ }
+
+ /**
+ * Checks if an amount is numeric and not too big.
+ * @param $amount
+ * @return bool true if valid amount, false otherwise
+ */
+ private function _checkAmount($amount)
+ {
+ return is_numeric($amount) && (float) $amount <= 99999.99;
+ }
+
+ /**
+ * Checks if a certain Von-Studiensemester is valid together with a Bis-Studiensemester.
+ * Checks for correct format, Von-Studiensemester cannot be after the Bis-Studiensemester,
+ * checks that semester are not overlapping with semester for existent Öhbeiträge.
+ * @param string $von_studiensemester_kurzbz
+ * @param string $bis_studiensemester_kurzbz
+ * @param int $oehbeitrag_id öhbeitrag to ignore, i.e. which is assignable (id of Öhbeitrag of the passed semesters)
+ * @return object array with true if assignable, with false if not
+ */
+ private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null)
+ {
+ $regex = "/^(WS|SS)\d{4}$/";
+ if (!preg_match($regex, $von_studiensemester_kurzbz))
+ return error("Ungültiges Von-Studiensemester");
+
+ if (!preg_match($regex, $bis_studiensemester_kurzbz) && $bis_studiensemester_kurzbz != null)
+ return error("Ungültiges Bis-Studiensemester");
+
+ $this->StudiensemesterModel->addSelect("start");
+ $vonStudiensemesterRes = $this->StudiensemesterModel->load($von_studiensemester_kurzbz);
+
+ if (!hasData($vonStudiensemesterRes))
+ return error("Fehler beim Holen von Von-Studiensemester");
+
+ $this->StudiensemesterModel->addSelect("start");
+ $bisStudiensemesterRes = $this->StudiensemesterModel->load($bis_studiensemester_kurzbz);
+
+ if (!hasData($bisStudiensemesterRes))
+ return error("Fehler beim Holen von Bis-Studiensemester");
+
+ $vonStudiensemester = getData($vonStudiensemesterRes)[0]->start;
+ $bisStudiensemester = getData($bisStudiensemesterRes)[0]->start;
+
+ if ($bis_studiensemester_kurzbz != null && new DateTime($vonStudiensemester) > new DateTime($bisStudiensemester))
+ return error("Von-Studiensemester größer als Bis-Studiensemester");
+
+ $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null;
+
+ $assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable(
+ $von_studiensemester_kurzbz,
+ $bis_studiensemester_kurzbz,
+ $oehbeitrag_id_arr
+ );
+
+ if (isError($assignableRes))
+ return $assignableRes;
+
+ if (hasData($assignableRes))
+ {
+ $assignable = getData($assignableRes)[0];
+
+ if (!$assignable)
+ return error("Keine Zuweisung möglich, Semesterüberschneidung");
+ }
+
+ return success("Studiensemester gültig");
+ }
+}
diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php
new file mode 100644
index 000000000..f942b50d9
--- /dev/null
+++ b/application/controllers/system/issues/Issues.php
@@ -0,0 +1,142 @@
+ array(self::BERECHTIGUNG_KURZBZ.':r'),
+ 'changeIssueStatus' => array(self::BERECHTIGUNG_KURZBZ.':rw')
+ )
+ );
+
+ // Load libraries
+ $this->load->library('IssuesLib');
+ $this->load->library('PermissionLib');
+ $this->load->library('WidgetLib');
+
+ $this->loadPhrases(
+ array(
+ 'global',
+ 'ui',
+ 'filter'
+ )
+ );
+
+ // Load models
+ $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
+ $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
+
+ $this->_setAuthUID(); // sets property uid
+ }
+
+ public function index()
+ {
+ $oes_for_issues = $this->_getOesForIssues();
+
+ $this->load->view(
+ 'system/issues/issues',
+ $oes_for_issues
+ );
+ }
+
+ /**
+ * Initializes issues status change
+ */
+ public function changeIssueStatus()
+ {
+ $issue_ids = $this->input->post('issue_ids');
+ $status_kurzbz = $this->input->post('status_kurzbz');
+ $verarbeitetvon = $this->_uid;
+
+ $errors = array();
+ foreach ($issue_ids as $issue_id)
+ {
+ $issueRes = $this->issueslib->changeIssueStatus($issue_id, $status_kurzbz, $verarbeitetvon);
+
+ if (isError($issueRes))
+ $errors[] = getError($issueRes);
+ }
+
+ if (!isEmptyArray($errors))
+ $this->outputJsonError(implode(", ", $errors));
+ else
+ $this->outputJsonSuccess("Status erfolgreich aktualisiert");
+ }
+
+ /**
+ * 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');
+ }
+
+ /**
+ * Gets oes of logged in user, which are needed to display issues of the user.
+ * This includes oes assigned by a funktio and as the issue permission.
+ * @return array
+ */
+ private function _getOesForIssues()
+ {
+ // get oes of uid for which there is a current funktion
+ $all_funktionen_oe_kurzbz = array();
+ $oe_kurzbz_for_funktion = array();
+ $benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid($this->_uid, null, date('Y-m-d'), date('Y-m-d'));
+
+ if (isError($benutzerfunktionRes))
+ show_error(getError($benutzerfunktionRes));
+
+ if (hasData($benutzerfunktionRes))
+ {
+ foreach (getData($benutzerfunktionRes) as $benutzerfunktion)
+ {
+ $all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz;
+
+ // separate oes for the funktion needed for displaying issues
+ if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ)
+ {
+ $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz;
+
+ // permission also for all oes under the oe for which funktion is assigend
+ $childOesFunktionRes = $this->OrganisationseinheitModel->getChilds($benutzerfunktion->oe_kurzbz);
+
+ if (isError($childOesFunktionRes))
+ show_error(getError($childOesFunktionRes));
+
+ if (hasData($childOesFunktionRes))
+ {
+ $childOesFunktion = getData($childOesFunktionRes);
+
+ foreach ($childOesFunktion as $childOeFunktion)
+ {
+ if (!in_array($childOeFunktion->oe_kurzbz, $oe_kurzbz_for_funktion))
+ $oe_kurzbz_for_funktion[] = $childOeFunktion->oe_kurzbz;
+ }
+ }
+ }
+ }
+ }
+
+ // add oes for which there is the "manage issues" Berechtigung
+ if (!$oe_kurzbz_berechtigt = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_KURZBZ))
+ show_error('Keine Berechtigung oder Fehler bei Berechtigungsprüfung');
+
+ $all_oe_kurzbz_berechtigt = array_unique(array_merge($oe_kurzbz_for_funktion, $oe_kurzbz_berechtigt));
+
+ return array(
+ 'all_funktionen_oe_kurzbz' => $all_funktionen_oe_kurzbz,
+ 'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt
+ );
+ }
+}
diff --git a/application/core/JQW_Controller.php b/application/core/JQW_Controller.php
index 361efd998..1bc4cd346 100644
--- a/application/core/JQW_Controller.php
+++ b/application/core/JQW_Controller.php
@@ -70,6 +70,19 @@ abstract class JQW_Controller extends JOB_Controller
return $jobs;
}
+ /**
+ * To get all the jobs specified by the given parameters
+ */
+ protected function getJobsByTypeStatus($type, $status)
+ {
+ $jobs = $this->jobsqueuelib->getJobsByTypeStatus($type, $status);
+
+ // If an error occurred then log it in database
+ if (isError($jobs)) $this->logError(getError($jobs), array($type, $status));
+
+ return $jobs;
+ }
+
/**
* To get all the jobs specified by the given parameters
*/
diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php
new file mode 100644
index 000000000..1b06db333
--- /dev/null
+++ b/application/libraries/IssuesLib.php
@@ -0,0 +1,244 @@
+_ci =& get_instance();
+
+ // Properties default values
+ $this->_app = 'core';
+ $this->_insertvon = 'system';
+ $this->_fallbackFehlercode = 'UNKNOWN_ERROR';
+
+ // If parameters are given then overwrite the default values
+ if (!isEmptyArray($params)) $this->setConfigs($params);
+
+ // load models
+ $this->_ci->load->model('system/Issue_model', 'IssueModel');
+ $this->_ci->load->model('system/Fehler_model', 'FehlerModel');
+ }
+
+ // --------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Store configuration parameters for this lib
+ */
+ public function setConfigs($params)
+ {
+ // If parameters are given then overwrite the default values
+ if (!isEmptyArray($params))
+ {
+ if (isset($params[self::APP_INDEX])) $this->_app = $params[self::APP_INDEX];
+ if (isset($params[self::INSERTVON_INDEX])) $this->_insertvon = $params[self::INSERTVON_INDEX];
+ if (isset($params[self::FALLBACK_FEHLERCODE_INDEX])) $this->_fallbackFehlercode = $params[self::FALLBACK_FEHLERCODE_INDEX];
+ }
+ }
+
+ /**
+ * Adds an Fhc issue, i.e. an internal, self-defined issue.
+ * @param string $fehler_kurzbz short unique text name of the issue
+ * @param int $person_id
+ * @param string $oe_kurzbz
+ * @param array $fehlertext_params params for sprint replace of error text in system.tbl_fehler
+ * @return object success or error
+ */
+ public function addFhcIssue($fehler_kurzbz, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null)
+ {
+ $fehlerRes = $this->_ci->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
+
+ if (hasData($fehlerRes))
+ {
+ $fehlercode = getData($fehlerRes)[0]->fehlercode;
+ return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params);
+ }
+ else
+ return error("Fehler $fehler_kurzbz nicht gefunden");
+ }
+
+ /**
+ * Adds an external issue, already defined externally by another system.
+ * @param string $fehlercode_extern the error code in the external system
+ * @param string $inhalt_extern error text in external system
+ * @param int $person_id
+ * @param int $oe_kurzbz
+ * @param array $fehlertext_params params for replacement of parts of error text
+ * @param bool $force_predefined if true, only predefined external issues are added
+ * @return object success or error
+ */
+ public function addExternalIssue($fehlercode_extern, $inhalt_extern, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $force_predefined = false)
+ {
+ if (isEmptyString($fehlercode_extern))
+ return error("fehlercode_extern fehlt");
+
+ // get external fehlercode (unique for each app)
+ $this->_ci->FehlerModel->addSelect('fehlercode');
+ $fehlerRes = $this->_ci->FehlerModel->loadWhere(
+ array(
+ 'fehlercode_extern' => $fehlercode_extern,
+ 'app' => $this->_app
+ )
+ );
+
+ if (isError($fehlerRes))
+ return $fehlerRes;
+
+ $fehlerData = getData($fehlerRes)[0];
+
+ // check if there is a predefined custom error for the external issue
+ if (hasData($fehlerRes))
+ {
+ // if found, use the code
+ $fehlercode = $fehlerData->fehlercode;
+ }
+ elseif ($force_predefined === true)
+ {
+ // only added if predefined
+ return success("No definition found - not added");
+ }
+ else
+ {
+ // if predefined error is not found, insert with fallback code
+ $fehlercode = $this->_fallbackFehlercode;
+ }
+
+ // add external issue
+ return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, $fehlercode_extern, $inhalt_extern);
+ }
+
+ /**
+ * Changes status of an issue.
+ * @param int $issue_id
+ * @param string $status_kurzbz the new status
+ * @param string $verarbeitetvon uid of person changing the status (needed for in Bearbeitung and behoben)
+ * @return success or error
+ */
+ public function changeIssueStatus($issue_id, $status_kurzbz, $verarbeitetvon = null)
+ {
+ if (!isset($issue_id) || !is_numeric($issue_id))
+ return error("Issue Id muss korrekt gesetzt sein.");
+
+ // check if given status is same as existing
+ $this->_ci->IssueModel->addSelect('status_kurzbz');
+ $currStatus = $this->_ci->IssueModel->load($issue_id);
+
+ if (hasData($currStatus))
+ {
+ if (getData($currStatus)[0]->status_kurzbz == $status_kurzbz)
+ return success("Gleicher Status bereits gesetzt");
+ }
+ else
+ return error("Fehler beim Holen des Status");
+
+ $data = array(
+ 'status_kurzbz' => $status_kurzbz,
+ 'updatevon' => $verarbeitetvon,
+ 'updateamum' => date('Y-m-d H:i:s')
+ );
+
+ if ($status_kurzbz == self::STATUS_NEU)
+ {
+
+ $data['verarbeitetvon'] = null;
+ }
+
+ if ($status_kurzbz == self::STATUS_NEU || $status_kurzbz == self::STATUS_IN_BEARBEITUNG)
+ {
+ $data['verarbeitetamum'] = null;
+ }
+
+ if ($status_kurzbz == self::STATUS_IN_BEARBEITUNG || $status_kurzbz == self::STATUS_BEHOBEN)
+ {
+ if (isset($verarbeitetvon))
+ $data['verarbeitetvon'] = $verarbeitetvon;
+ else
+ return error("Verarbeitetvon nicht gesetzt");
+ }
+
+ if ($status_kurzbz == self::STATUS_BEHOBEN)
+ $data['verarbeitetamum'] = date('Y-m-d H:i:s');
+
+ return $this->_ci->IssueModel->update(
+ array(
+ 'issue_id' => $issue_id
+ ),
+ $data
+ );
+ }
+
+ /**
+ * Adds an issue.
+ * @param $fehlercode
+ * @param int $person_id
+ * @param string $oe_kurzbz
+ * @param array $fehlertext_params
+ * @param string $fehlercode_extern
+ * @param string $inhalt_extern
+ * @return object success or error
+ */
+ private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $fehlercode_extern = null, $inhalt_extern = null)
+ {
+ if (isEmptyString($person_id) && isEmptyString($oe_kurzbz))
+ return error("Person_id oder oe_kurzbz muss gesetzt sein.");
+
+ // get fehlertextVorlage and replace it with params
+ $fehlerRes = $this->_ci->FehlerModel->load($fehlercode);
+
+ if (hasData($fehlerRes))
+ {
+ $fehlertextVorlage = getData($fehlerRes)[0]->fehlertext;
+ $fehlertext = isEmptyArray($fehlertext_params) ? $fehlertextVorlage : vsprintf($fehlertextVorlage, $fehlertext_params);
+
+ $openIssuesCountRes = $this->_ci->IssueModel->getOpenIssueCount($fehlercode, $person_id, $oe_kurzbz, $fehlercode_extern);
+
+ if (hasData($openIssuesCountRes))
+ {
+ // don't insert if issue is already open
+ // already open - status new with same fehlercode or same fehlercode-extern (if set)
+ $openIssueCount = getData($openIssuesCountRes)[0]->anzahl_open_issues;
+
+ if ($openIssueCount == 0)
+ {
+ return $this->_ci->IssueModel->insert(
+ array(
+ 'fehlercode' => $fehlercode,
+ 'fehlercode_extern' => $fehlercode_extern,
+ 'inhalt' => $fehlertext,
+ 'inhalt_extern' => $inhalt_extern,
+ 'person_id' => $person_id,
+ 'oe_kurzbz' => $oe_kurzbz,
+ 'datum' => date('Y-m-d H:i:s'),
+ 'status_kurzbz' => self::STATUS_NEU,
+ 'insertvon' => $this->_insertvon
+ )
+ );
+ }
+ else
+ return success($openIssueCount);
+ }
+ else
+ return error("Anzahl offener Issues konnte nicht ermittelt werden.");
+ }
+ else
+ return error("Fehler $fehlercode nicht gefunden");
+ }
+}
diff --git a/application/libraries/JobsQueueLib.php b/application/libraries/JobsQueueLib.php
index d264f7119..5871a3767 100644
--- a/application/libraries/JobsQueueLib.php
+++ b/application/libraries/JobsQueueLib.php
@@ -72,6 +72,18 @@ class JobsQueueLib
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
}
+ /**
+ * To get all the jobs specified by the given parameters
+ */
+ public function getJobsByTypeStatus($type, $status)
+ {
+ $this->_ci->JobsQueueModel->resetQuery();
+
+ $this->_ci->JobsQueueModel->addOrder('creationtime', 'DESC');
+
+ return $this->_ci->JobsQueueModel->loadWhere(array('status' => $status, 'type' => $type));
+ }
+
/**
* To get all the jobs specified by the given parameters
*/
diff --git a/application/models/codex/Aufenthaltfoerderung_model.php b/application/models/codex/Aufenthaltfoerderung_model.php
new file mode 100644
index 000000000..b650b3a05
--- /dev/null
+++ b/application/models/codex/Aufenthaltfoerderung_model.php
@@ -0,0 +1,14 @@
+dbTable = 'bis.tbl_aufenthaltfoerderung';
+ $this->pk = 'aufenthaltfoerderung_code';
+ }
+}
diff --git a/application/models/codex/Oehbeitrag_model.php b/application/models/codex/Oehbeitrag_model.php
new file mode 100644
index 000000000..0df016ba8
--- /dev/null
+++ b/application/models/codex/Oehbeitrag_model.php
@@ -0,0 +1,107 @@
+dbTable = 'bis.tbl_oehbeitrag';
+ $this->pk = 'oehbeitrag_id';
+ }
+
+ /**
+ * Gets oehbeitrag data valid for a certain Studiensemester.
+ * @param string $studiensemester_kurzbz
+ * @return object
+ */
+ public function getByStudiensemester($studiensemester_kurzbz)
+ {
+ $qry = "WITH semstart AS (
+ SELECT start FROM public.tbl_studiensemester
+ WHERE studiensemester_kurzbz = ?
+ )
+ SELECT * FROM bis.tbl_oehbeitrag oehb
+ JOIN public.tbl_studiensemester semvon ON oehb.von_studiensemester_kurzbz = semvon.studiensemester_kurzbz
+ LEFT JOIN public.tbl_studiensemester sembis ON oehb.bis_studiensemester_kurzbz = sembis.studiensemester_kurzbz
+ JOIN semstart ON semstart.start::date >= semvon.start::date AND (sembis.studiensemester_kurzbz IS NULL OR semstart.start::date <= sembis.start::date)
+ ORDER BY semvon.start
+ LIMIT 1";
+
+ return $this->execQuery($qry, array($studiensemester_kurzbz));
+ }
+
+ /**
+ * Gets all Studiensemester for which no Oehbeitrag value assignment exists.
+ * @param string $start_studiensemester_kurzbz semester before the given semester are ignored
+ * @param array $excluded_oehbeitrag_id oehbeitraege to be ignored, i.e. which are assigned
+ * @return object
+ */
+ public function getUnassignedStudiensemester($start_studiensemester_kurzbz, $excluded_oehbeitrag_id = array())
+ {
+ $params = array($start_studiensemester_kurzbz);
+
+ $qry = "SELECT * FROM public.tbl_studiensemester sem
+ WHERE sem.start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)
+ AND NOT EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag oeh
+ JOIN public.tbl_studiensemester oeh_von ON oeh.von_studiensemester_kurzbz = oeh_von.studiensemester_kurzbz
+ LEFT JOIN public.tbl_studiensemester oeh_bis ON oeh.bis_studiensemester_kurzbz = oeh_bis.studiensemester_kurzbz
+ WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)";
+
+ if (!isEmptyArray($excluded_oehbeitrag_id))
+ {
+ $qry .= " AND oehbeitrag_id NOT IN ?";
+ $params[] = $excluded_oehbeitrag_id;
+ }
+
+ $qry .= ") ORDER BY sem.start";
+
+ return $this->execQuery($qry, $params);
+ }
+
+ /**
+ * Checks if a Öhbeitrag can be assigned for a Studiensemester range.
+ * @param string $von_studiensemester_kurzbz
+ * @param string $bis_studiensemester_kurzbz
+ * @param array $excluded_oehbeitrag_id oehbeitraege to ignore, i.e. which are assignable
+ * @return object array with true if assignable, with false if not
+ */
+ public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null, $excluded_oehbeitrag_id = array())
+ {
+ $params = array($von_studiensemester_kurzbz);
+
+ $allStdSemSpanQry = "SELECT count(studiensemester_kurzbz) as number_assigned FROM public.tbl_studiensemester sem
+ WHERE start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)";
+
+ if ($bis_studiensemester_kurzbz != null)
+ {
+ $allStdSemSpanQry .= " AND (start <= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?))";
+ $params[] = $bis_studiensemester_kurzbz;
+ }
+
+ $allStdSemSpanQry .= " AND EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag
+ JOIN public.tbl_studiensemester sem_von ON tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz
+ LEFT JOIN public.tbl_studiensemester sem_bis ON tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz
+ WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL)";
+
+ if (!isEmptyArray($excluded_oehbeitrag_id))
+ {
+ $allStdSemSpanQry .= " AND oehbeitrag_id NOT IN ?";
+ $params[] = $excluded_oehbeitrag_id;
+ }
+
+ $allStdSemSpanQry .= ")";
+
+ $nrAssigned = $this->execQuery($allStdSemSpanQry, $params);
+
+ if (isError($nrAssigned))
+ return $nrAssigned;
+
+ if (!hasData($nrAssigned))
+ return error("Fehler bei Überprüfung der Möglichkeit der Semesterzuweisung");
+
+ return success(array(getData($nrAssigned)[0]->number_assigned == 0));
+ }
+}
diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php
index 5589e5049..4111e5f19 100644
--- a/application/models/crm/Prestudent_model.php
+++ b/application/models/crm/Prestudent_model.php
@@ -625,4 +625,34 @@ class Prestudent_model extends DB_Model
return $this->execQuery($query, array($person, $studiengang, $studienSemester));
}
+
+ /**
+ * Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang
+ * @param int $prestudent_id
+ * @return object
+ */
+ public function getFoerderrelevant($prestudent_id)
+ {
+ $query = 'SELECT COALESCE (ps.foerderrelevant, stg.foerderrelevant) AS foerderrelevant
+ FROM public.tbl_prestudent ps
+ LEFT JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ WHERE prestudent_id = ?';
+
+ return $this->execQuery($query, array($prestudent_id));
+ }
+
+ /**
+ * Gets bis standort_code for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang
+ * @param int $prestudent_id
+ * @return object
+ */
+ public function getStandortCode($prestudent_id)
+ {
+ $query = 'SELECT COALESCE (ps.standort_code, stg.standort_code) AS standort_code
+ FROM public.tbl_prestudent ps
+ LEFT JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ WHERE prestudent_id = ?';
+
+ return $this->execQuery($query, array($prestudent_id));
+ }
}
diff --git a/application/models/education/Pruefung_model.php b/application/models/education/Pruefung_model.php
index d10364979..e3776c4ad 100644
--- a/application/models/education/Pruefung_model.php
+++ b/application/models/education/Pruefung_model.php
@@ -11,4 +11,29 @@ class Pruefung_model extends DB_Model
$this->dbTable = 'campus.tbl_pruefung';
$this->pk = 'pruefung_id';
}
+
+ /**
+ * Gets Pruefungen of a person for a Studiensemester.
+ * @param int $person_id
+ * @param string $studiensemester_kurzbz
+ * @return object
+ */
+ public function getByPerson($person_id, $studiensemester_kurzbz)
+ {
+ $qry = '
+ SELECT prfg.*, pers.matr_nr, lv.ects, stg.studiengang_kz, prst.prestudent_id,
+ UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung
+ FROM public.tbl_person pers
+ JOIN public.tbl_prestudent prst USING (person_id)
+ JOIN public.tbl_student USING (prestudent_id)
+ JOIN lehre.tbl_pruefung prfg USING (student_uid)
+ JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
+ JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
+ JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
+ WHERE pers.person_id = ?
+ AND le.studiensemester_kurzbz = ?
+ ORDER BY prfg.datum, pruefung_id';
+
+ return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz));
+ }
}
diff --git a/application/models/education/Zeugnisnote_model.php b/application/models/education/Zeugnisnote_model.php
index 7ed0e6456..65607e252 100644
--- a/application/models/education/Zeugnisnote_model.php
+++ b/application/models/education/Zeugnisnote_model.php
@@ -12,4 +12,125 @@ class Zeugnisnote_model extends DB_Model
$this->pk = array('studiensemester_kurzbz', 'student_uid', 'lehrveranstaltung_id');
$this->hasSequence = false;
}
+
+ /**
+ * Gets ECTS sums of completed courses (Zeugnisnoten) of a person for a Studiensemester.
+ * If no valid Noten for the course were entered, 0 ects is returned.
+ * @param int $person_id
+ * @param string $studiensemester_kurzbz
+ * @param bool $aktiv
+ * @param bool $lehre
+ * @param bool $offiziell
+ * @param bool $positiv
+ * @return object
+ */
+ public function getEctsSumsByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null)
+ {
+ $params = array();
+
+ $qry = "SELECT DISTINCT ON (prst.prestudent_id) pers.matr_nr, stg.studiengang_kz, prst.prestudent_id, stg.erhalter_kz,
+ UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung, COALESCE(summen.summe_ects, 0) AS summe_ects
+ FROM public.tbl_person pers
+ JOIN public.tbl_prestudent prst USING (person_id)
+ JOIN public.tbl_prestudentstatus prstst USING (prestudent_id)
+ JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
+ LEFT JOIN (
+ SELECT zgnisnote.student_uid, prestudent_id, zgnisnote.studiensemester_kurzbz, sum(ects) AS summe_ects
+ FROM public.tbl_student
+ LEFT JOIN lehre.tbl_zeugnisnote zgnisnote USING(student_uid)
+ LEFT JOIN lehre.tbl_note note ON zgnisnote.note = note.note
+ LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
+ WHERE TRUE";
+
+ if (isset($aktiv))
+ {
+ $qry .= ' AND (note.aktiv = ?)';
+ $params[] = $aktiv;
+ }
+
+ if (isset($lehre))
+ {
+ $qry .= ' AND (note.lehre = ?)';
+ $params[] = $lehre;
+ }
+
+ if (isset($offiziell))
+ {
+ $qry .= ' AND (note.offiziell = ?)';
+ $params[] = $offiziell;
+ }
+
+ if (isset($positiv))
+ {
+ $qry .= ' AND (note.positiv = ?)';
+ $params[] = $positiv;
+ }
+
+ $qry .= " GROUP BY zgnisnote.studiensemester_kurzbz, zgnisnote.student_uid, prestudent_id
+ ) summen ON prst.prestudent_id = summen.prestudent_id AND prstst.studiensemester_kurzbz = summen.studiensemester_kurzbz
+ WHERE pers.person_id = ?
+ AND prstst.studiensemester_kurzbz = ?
+ ORDER BY prst.prestudent_id";
+
+ $params[] = $person_id;
+ $params[] = $studiensemester_kurzbz;
+
+ return $this->execQuery($qry, $params);
+ }
+
+ /**
+ * Gets courses (Zeugnisnoten) of a person for a Studiensemester.
+ * @param int $person_id
+ * @param string $studiensemester_kurzbz
+ * @param bool $aktiv
+ * @param bool $lehre
+ * @param bool $offiziell
+ * @param bool $positiv
+ * @return object
+ */
+ public function getByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null)
+ {
+ $params = array($person_id, $studiensemester_kurzbz);
+
+ $qry = "SELECT zgnisnote.*, pers.matr_nr, lv.ects, stg.studiengang_kz, prst.prestudent_id, stg.erhalter_kz,
+ UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung, note.note,
+ note.bezeichnung AS note_bezeichnung
+ FROM public.tbl_person pers
+ JOIN public.tbl_prestudent prst USING (person_id)
+ JOIN public.tbl_student USING (prestudent_id)
+ JOIN lehre.tbl_zeugnisnote zgnisnote USING (student_uid)
+ JOIN lehre.tbl_note note ON zgnisnote.note = note.note
+ JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
+ JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz
+ WHERE pers.person_id = ?
+ AND zgnisnote.studiensemester_kurzbz = ?";
+
+ if (isset($aktiv))
+ {
+ $qry .= ' AND note.aktiv = ?';
+ $params[] = $aktiv;
+ }
+
+ if (isset($lehre))
+ {
+ $qry .= ' AND note.lehre = ?';
+ $params[] = $lehre;
+ }
+
+ if (isset($offiziell))
+ {
+ $qry .= ' AND note.offiziell = ?';
+ $params[] = $offiziell;
+ }
+
+ if (isset($positiv))
+ {
+ $qry .= ' AND note.positiv = ?';
+ $params[] = $positiv;
+ }
+
+ $qry .= ' ORDER BY zgnisnote.benotungsdatum';
+
+ return $this->execQuery($qry, $params);
+ }
}
diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php
index e005e243c..085c3f826 100644
--- a/application/models/person/Person_model.php
+++ b/application/models/person/Person_model.php
@@ -152,34 +152,36 @@ class Person_model extends DB_Model
*/
public function getPersonStammdaten($person_id, $zustellung_only = false)
{
- $this->addSelect('public.tbl_person.*, s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation');
+ $this->addSelect('public.tbl_person.*, tbl_person.staatsbuergerschaft AS staatsbuergerschaft_code, tbl_person.geburtsnation AS geburtsnation_code,
+ s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation');
$this->addJoin('bis.tbl_nation s', 'public.tbl_person.staatsbuergerschaft = s.nation_code', 'LEFT');
$this->addJoin('bis.tbl_nation g', 'public.tbl_person.geburtsnation = g.nation_code', 'LEFT');
$person = $this->load($person_id);
- if($person->error) return $person;
+ if (isError($person)) return $person;
//return null if not found
- if(count($person->retval) < 1)
+ if (!hasData($person))
return success(null);
- $this->KontaktModel->addDistinct();
$this->KontaktModel->addSelect('kontakttyp, anmerkung, kontakt, zustellung');
$this->KontaktModel->addOrder('kontakttyp');
+ $this->KontaktModel->addOrder('insertamum', 'DESC');
$where = $zustellung_only === true ? array('person_id' => $person_id, 'zustellung' => true) : array('person_id' => $person_id);
$kontakte = $this->KontaktModel->loadWhere($where);
- if($kontakte->error) return $kontakte;
+ if (isError($kontakte)) return $kontakte;
$where = $zustellung_only === true ? array('person_id' => $person_id, 'zustelladresse' => true) : array('person_id' => $person_id);
$this->AdresseModel->addSelect('public.tbl_adresse.*, bis.tbl_nation.kurztext AS nationkurztext');
$this->AdresseModel->addJoin('bis.tbl_nation', 'tbl_adresse.nation = tbl_nation.nation_code', 'LEFT');
+ $this->AdresseModel->addOrder('insertamum', 'DESC');
$adressen = $this->AdresseModel->loadWhere($where);
- if($adressen->error) return $adressen;
+ if (isError($adressen)) return $adressen;
- $stammdaten = $person->retval[0];
- $stammdaten->kontakte = $kontakte->retval;
- $stammdaten->adressen = $adressen->retval;
+ $stammdaten = getData($person)[0];
+ $stammdaten->kontakte = hasData($kontakte) ? getData($kontakte) : array();
+ $stammdaten->adressen = hasData($adressen) ? getData($adressen) : array();
return success($stammdaten);
}
diff --git a/application/models/system/Fehler_model.php b/application/models/system/Fehler_model.php
new file mode 100644
index 000000000..28618f6d9
--- /dev/null
+++ b/application/models/system/Fehler_model.php
@@ -0,0 +1,14 @@
+dbTable = 'system.tbl_fehler';
+ $this->pk = 'fehlercode';
+ }
+}
diff --git a/application/models/system/Issue_model.php b/application/models/system/Issue_model.php
new file mode 100644
index 000000000..5dac85066
--- /dev/null
+++ b/application/models/system/Issue_model.php
@@ -0,0 +1,51 @@
+dbTable = 'system.tbl_issue';
+ $this->pk = 'issue_id';
+ }
+
+ /**
+ * Gets number of open (non-resolved) issues.
+ * @param string $fehlercode unique error code
+ * @param int $person_id if provided, only issues with this person_id are counted.
+ * @param string $oe_kurzbz if provided, only issues with this oe_kurzbz are counted.
+ * @param string $fehlercode_extern if provided, only issues with this external fehlercode are counted (for identifying issues from external systems).
+ * @return Object success with number of issues or error
+ */
+ public function getOpenIssueCount($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null)
+ {
+ $params = array($fehlercode);
+ // issue exists for a fehlercode (or fehlercode_extern), person_id, oe_kurzbz, if not verarbeitet yet
+ $qry = 'SELECT count(*) as anzahl_open_issues FROM system.tbl_issue
+ WHERE fehlercode = ?
+ AND verarbeitetamum IS NULL';
+
+ if (!isEmptyString($fehlercode_extern))
+ {
+ $qry .= ' AND fehlercode_extern = ?';
+ $params[] = $fehlercode_extern;
+ }
+
+ if (isset($person_id))
+ {
+ $qry .= ' AND person_id = ?';
+ $params[] = $person_id;
+ }
+
+ if (isset($oe_kurzbz))
+ {
+ $qry .= ' AND oe_kurzbz = ?';
+ $params[] = $oe_kurzbz;
+ }
+
+ return $this->execQuery($qry, $params);
+ }
+}
diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php
new file mode 100644
index 000000000..7cfb18fe8
--- /dev/null
+++ b/application/views/codex/oehbeitrag.php
@@ -0,0 +1,60 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'ÖH-Beitragsverwaltung',
+ 'jquery' => true,
+ 'jqueryui' => true,
+ 'bootstrap' => true,
+ 'fontawesome' => true,
+ 'sbadmintemplate' => true,
+ 'tablesorter' => true,
+ 'dialoglib' => true,
+ 'ajaxlib' => true,
+ 'navigationwidget' => true,
+ 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/codex/oehbeitrag.css'),
+ 'customJSs' => array('public/js/tablesort/tablesort.js', 'public/js/codex/oehbeitrag.js')
+ )
+);
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+ | Gültig von |
+ Gültig bis |
+ Studierendenbetrag |
+ Versicherungsbetrag |
+ Aktion |
+
+
+
+
+
+
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/system/issues/issues.php b/application/views/system/issues/issues.php
new file mode 100644
index 000000000..ebe92012d
--- /dev/null
+++ b/application/views/system/issues/issues.php
@@ -0,0 +1,48 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'Fehler Monitoring',
+ 'jquery' => true,
+ 'jqueryui' => true,
+ 'jquerycheckboxes' => true,
+ 'bootstrap' => true,
+ 'fontawesome' => true,
+ 'sbadmintemplate' => true,
+ 'tablesorter' => true,
+ 'ajaxlib' => true,
+ 'filterwidget' => true,
+ 'navigationwidget' => true,
+ 'dialoglib' => true,
+ 'phrases' => array(
+ 'ui' => array('bitteEintragWaehlen')
+ ),
+ 'customCSSs' => array('public/css/issues/issuesDataset.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
+ 'customJSs' => array('public/js/issues/issuesDataset.js', 'public/js/bootstrapper.js')
+ )
+);
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+ load->view('system/issues/issuesData.php'); ?>
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php
new file mode 100644
index 000000000..1f0bf12b0
--- /dev/null
+++ b/application/views/system/issues/issuesData.php
@@ -0,0 +1,173 @@
+ $funktionen_kurzbz)
+ {
+ foreach ($funktionen_kurzbz as $funktion_kurzbz)
+ {
+ $query .= " OR (zst.oe_kurzbz = '$oe_kurzbz' AND zst.funktion_kurzbz = '$funktion_kurzbz')";
+ }
+ }
+}
+
+$query .= "))"; // close AND of exists, and exists
+
+// 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))
+{
+ $query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */";
+
+ $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */
+ SELECT 1 FROM public.tbl_prestudent ps
+ JOIN public.tbl_prestudentstatus pss USING (prestudent_id)
+ JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ WHERE person_id = iss.person_id
+ AND stg.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT
+ AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
+ AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */
+ FROM public.tbl_prestudentstatus ps_finished
+ JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz)
+ WHERE prestudent_id = ps.prestudent_id
+ AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener')
+ AND datum::date + interval '2 months' < NOW()
+ AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */
+ JOIN public.tbl_prestudentstatus USING (prestudent_id)
+ JOIN public.tbl_studiensemester USING (studiensemester_kurzbz)
+ WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
+ AND person_id = ps.person_id
+ AND prestudent_id <> ps_finished.prestudent_id
+ AND tbl_studiensemester.start::date > sem_finished.start::date)
+ )
+ )
+ )";
+}
+
+$query .= " ORDER BY CASE
+ WHEN iss.status_kurzbz = '".IssuesLib::STATUS_NEU."' THEN 0
+ WHEN iss.status_kurzbz = '".IssuesLib::STATUS_IN_BEARBEITUNG."' THEN 1
+ ELSE 2
+ END,
+ CASE
+ WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0
+ WHEN fehlertyp_kurzbz = '".IssuesLib::WARNINGTYPE_CODE."' THEN 1
+ ELSE 2
+ END,
+ datum DESC, fehlercode, issue_id DESC";
+
+$filterWidgetArray = array(
+ 'query' => $query,
+ 'app' => 'core',
+ 'datasetName' => 'issues',
+ 'filter_id' => $this->input->get('filter_id'),
+ 'tableUniqueId' => 'issues',
+ 'requiredPermissions' => 'admin',
+ 'datasetRepresentation' => 'tablesorter',
+ 'checkboxes' => 'issue_id',
+ 'columnsAliases' => array(
+ 'ID',
+ 'Fehlercode',
+ 'Fehlercode extern',
+ 'Datum',
+ 'Inhalt',
+ 'Inhalt extern',
+ 'PersonId',
+ 'OE',
+ 'Fehlertyp',
+ 'Fehlerstatus',
+ 'Verarbeitet von',
+ 'Verarbeitet am',
+ 'Applikation',
+ 'Fehlertypcode',
+ 'Statuscode',
+ 'Vorname',
+ 'Nachname'
+ ),
+ 'formatRow' => function($datasetRaw) {
+
+ if ($datasetRaw->{'Fehlercode extern'} == null)
+ {
+ $datasetRaw->{'Fehlercode extern'} = '-';
+ }
+
+ if ($datasetRaw->{'Inhalt'} == null)
+ {
+ $datasetRaw->{'Inhalt'} = '-';
+ }
+
+ if ($datasetRaw->{'Inhalt extern'} == null)
+ {
+ $datasetRaw->{'Inhalt extern'} = '-';
+ }
+
+ if ($datasetRaw->{'PersonId'} == null)
+ {
+ $datasetRaw->{'PersonId'} = '-';
+ }
+
+ if ($datasetRaw->{'OE'} == null)
+ {
+ $datasetRaw->{'OE'} = '-';
+ }
+
+ if ($datasetRaw->{'Verarbeitet am'} == null)
+ {
+ $datasetRaw->{'Verarbeitet am'} = '-';
+ }
+
+ if ($datasetRaw->{'Verarbeitet von'} == null)
+ {
+ $datasetRaw->{'Verarbeitet von'} = '-';
+ }
+
+ return $datasetRaw;
+ },
+ 'markRow' => function($datasetRaw) {
+
+ $mark = '';
+
+ if ($datasetRaw->Statuscode == IssuesLib::STATUS_BEHOBEN)
+ $mark = "text-success";
+ elseif ($datasetRaw->Statuscode == IssuesLib::STATUS_NEU || $datasetRaw->Statuscode == IssuesLib::STATUS_IN_BEARBEITUNG)
+ {
+ if ($datasetRaw->Fehlertypcode == IssuesLib::ERRORTYPE_CODE)
+ {
+ $mark = "text-danger";
+ }
+ elseif ($datasetRaw->Fehlertypcode == IssuesLib::WARNINGTYPE_CODE)
+ {
+ $mark = "text-warning";
+ }
+ }
+
+ return $mark;
+ }
+);
+
+echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php
index 79e330c7f..e411dbaad 100644
--- a/content/student/studentDBDML.php
+++ b/content/student/studentDBDML.php
@@ -631,11 +631,18 @@ if(!$error)
$prestudent->aufnahmeschluessel = $_POST['aufnahmeschluessel'];
$prestudent->facheinschlberuf = ($_POST['facheinschlberuf']=='true'?true:false);
$prestudent->bismelden = ($_POST['bismelden']=='true'?true:false);
+ $foerderrelevant = null;
+ if ($_POST['foerderrelevant'] === 'true')
+ $foerderrelevant = true;
+ elseif ($_POST['foerderrelevant'] === 'false')
+ $foerderrelevant = false;
+ $prestudent->foerderrelevant = $foerderrelevant;
$prestudent->dual = ($_POST['dual']=='true'?true:false);
$prestudent->anmerkung = $_POST['anmerkung'];
$prestudent->mentor = $_POST['mentor'];
$prestudent->gsstudientyp_kurzbz = $_POST['gsstudientyp_kurzbz'];
$prestudent->priorisierung = $_POST['priorisierung'];
+ $prestudent->standort_code = $_POST['standort_code'];
//$prestudent->insertamum = date('Y-m-d H:i:s');
//$prestudent->insertvon = $user;
$prestudent->updateamum = date('Y-m-d H:i:s');
diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php
index 18e69874e..813805886 100644
--- a/content/student/studentdetailoverlay.xul.php
+++ b/content/student/studentdetailoverlay.xul.php
@@ -448,7 +448,6 @@ echo '';
-
+
+
+
+
+
+
+
+
@@ -470,32 +481,43 @@ echo '';
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
- getBerechtigungen($user);
- if($rechte->isBerechtigt('basis/prestudent'))
- $readonly = '';
- ?>
- />
-
+
+
+
+
+
+
+ getBerechtigungen($user);
+ if($rechte->isBerechtigt('basis/prestudent'))
+ $readonly = '';
+ ?>
+ />
+
diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php
index 8fda083eb..3be031879 100644
--- a/content/student/studentoverlay.js.php
+++ b/content/student/studentoverlay.js.php
@@ -1153,6 +1153,8 @@ function StudentAuswahl()
dual = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#dual" ));
gsstudientyp_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#gsstudientyp_kurzbz" ));
priorisierung = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#priorisierung" ));
+ foerderrelevant = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#foerderrelevant" ));
+ standort_code = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#standort_code" ));
document.getElementById('student-prestudent-menulist-aufmerksamdurch').value=aufmerksamdurch_kurzbz;
document.getElementById('student-prestudent-menulist-berufstaetigkeit').value=berufstaetigkeit_code;
@@ -1190,6 +1192,8 @@ function StudentAuswahl()
document.getElementById('student-prestudent-textbox-priorisierung').value=priorisierung;
document.getElementById('student-prestudent-textbox-mentor').value=mentor;
document.getElementById('student-detail-menulist-gsstudientyp').value=gsstudientyp_kurzbz;
+ document.getElementById('student-prestudent-menulist-foerderrelevant').value=foerderrelevant;
+ document.getElementById('student-prestudent-menulist-bisstandort').value=standort_code;
document.getElementById('student-detail-groupbox-caption').label='Zugangsvoraussetzung für '+nachname+' '+vorname;
rollentree = document.getElementById('student-prestudent-tree-rolle');
@@ -1705,12 +1709,14 @@ function StudentPrestudentDisableFields(val)
document.getElementById('student-prestudent-menulist-aufnahmeschluessel').disabled=val;
document.getElementById('student-prestudent-checkbox-facheinschlberuf').disabled=val;
document.getElementById('student-prestudent-checkbox-bismelden').disabled=val;
+ document.getElementById('student-prestudent-menulist-foerderrelevant').disabled=val;
document.getElementById('student-prestudent-checkbox-dual').disabled=val;
document.getElementById('student-prestudent-button-save').disabled=val;
document.getElementById('student-prestudent-textbox-anmerkung').disabled=val;
document.getElementById('student-prestudent-textbox-priorisierung').disabled=val;
document.getElementById('student-prestudent-textbox-mentor').disabled=val;
document.getElementById('student-detail-menulist-gsstudientyp').disabled=val;
+ document.getElementById('student-prestudent-menulist-bisstandort').disabled=val;
// Studiengang des angeklickten Prestudenten ermitteln
var tree = document.getElementById('student-tree');
@@ -1783,6 +1789,8 @@ function StudentPrestudentSave()
priorisierung = document.getElementById('student-prestudent-textbox-priorisierung').value;
mentor = document.getElementById('student-prestudent-textbox-mentor').value;
gsstudientyp = document.getElementById('student-detail-menulist-gsstudientyp').value;
+ foerderrelevant = document.getElementById('student-prestudent-menulist-foerderrelevant').value;
+ standort_code = document.getElementById('student-prestudent-menulist-bisstandort').value;
if(zgvdatum!='' && !CheckDatum(zgvdatum))
{
@@ -1828,6 +1836,8 @@ function StudentPrestudentSave()
req.add('priorisierung', priorisierung);
req.add('mentor', mentor);
req.add('gsstudientyp_kurzbz', gsstudientyp);
+ req.add('foerderrelevant', foerderrelevant);
+ req.add('standort_code', standort_code);
var response = req.executePOST();
diff --git a/include/prestudent.class.php b/include/prestudent.class.php
index 9a28961ff..ab1e329dd 100644
--- a/include/prestudent.class.php
+++ b/include/prestudent.class.php
@@ -71,6 +71,8 @@ class prestudent extends person
public $gsstudientyp_kurzbz='Intern';
public $aufnahmegruppe_kurzbz;
public $priorisierung = null;
+ public $foerderrelevant = null;
+ public $standort_code = null;
public $status_kurzbz;
public $studiensemester_kurzbz;
@@ -164,6 +166,8 @@ class prestudent extends person
$this->gsstudientyp_kurzbz = $row->gsstudientyp_kurzbz;
$this->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz;
$this->priorisierung = $row->priorisierung;
+ $this->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $this->standort_code = $row->standort_code;
if(!person::load($row->person_id))
return false;
@@ -250,7 +254,7 @@ class prestudent extends person
reihungstest_id, anmeldungreihungstest, reihungstestangetreten, rt_gesamtpunkte,
rt_punkte1, rt_punkte2, rt_punkte3, bismelden, insertamum, insertvon,
updateamum, updatevon, anmerkung, dual, ausstellungsstaat, mentor,
- gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung) VALUES('.
+ gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, foerderrelevant, standort_code) VALUES('.
$this->db_add_param($this->aufmerksamdurch_kurzbz).",".
$this->db_add_param($this->person_id).",".
$this->db_add_param($this->studiengang_kz).",".
@@ -284,7 +288,9 @@ class prestudent extends person
$this->db_add_param($this->mentor).",".
$this->db_add_param($this->gsstudientyp_kurzbz).",".
$this->db_add_param($this->aufnahmegruppe_kurzbz).",".
- $this->db_add_param($this->priorisierung).");";
+ $this->db_add_param($this->priorisierung).",".
+ $this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).",".
+ $this->db_add_param($this->standort_code).");";
}
else
{
@@ -320,7 +326,9 @@ class prestudent extends person
' dual='.$this->db_add_param($this->dual, FHC_BOOLEAN).",".
' ausstellungsstaat='.$this->db_add_param($this->ausstellungsstaat).",".
' aufnahmegruppe_kurzbz='.$this->db_add_param($this->aufnahmegruppe_kurzbz).",".
- ' priorisierung='.$this->db_add_param($this->priorisierung).' '.
+ ' priorisierung='.$this->db_add_param($this->priorisierung).",".
+ ' foerderrelevant='.$this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).",".
+ ' standort_code='.$this->db_add_param($this->standort_code)." ".
" WHERE prestudent_id=".$this->db_add_param($this->prestudent_id).";";
}
@@ -916,6 +924,8 @@ class prestudent extends person
$ps->gsstudientyp_kurzbz = $row->gsstudientyp_kurzbz;
$ps->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz;
$ps->priorisierung = $row->priorisierung;
+ $ps->foerderrelevant = $row->foerderrelevant;
+ $ps->standort_code = $row->standort_code;
$ps->status_kurzbz = $row->status_kurzbz;
$ps->studiensemester_kurzbz = $row->studiensemester_kurzbz;
@@ -1078,23 +1088,23 @@ class prestudent extends person
studiensemester_kurzbz, ausbildungssemester, datum, insertamum, insertvon,
updateamum, updatevon, ext_id, orgform_kurzbz, bestaetigtam, bestaetigtvon, anmerkung,
bewerbung_abgeschicktamum, studienplan_id, rt_stufe, statusgrund_id) VALUES('.
- $this->db_add_param($this->prestudent_id).",".
- $this->db_add_param($this->status_kurzbz).",".
- $this->db_add_param($this->studiensemester_kurzbz).",".
- $this->db_add_param($this->ausbildungssemester).",".
- $this->db_add_param($this->datum).",".
- $this->db_add_param($this->insertamum).",".
- $this->db_add_param($this->insertvon).",".
- $this->db_add_param($this->updateamum).",".
- $this->db_add_param($this->updatevon).",".
- $this->db_add_param($this->ext_id_prestudent).",".
- $this->db_add_param($this->orgform_kurzbz).",".
- $this->db_add_param($this->bestaetigtam).",".
- $this->db_add_param($this->bestaetigtvon).",".
- $this->db_add_param($this->anmerkung_status).",".
- $this->db_add_param($this->bewerbung_abgeschicktamum).",".
- $this->db_add_param($this->studienplan_id,FHC_INTEGER).",".
- $this->db_add_param($this->rt_stufe,FHC_INTEGER).",".
+ $this->db_add_param($this->prestudent_id).",".
+ $this->db_add_param($this->status_kurzbz).",".
+ $this->db_add_param($this->studiensemester_kurzbz).",".
+ $this->db_add_param($this->ausbildungssemester).",".
+ $this->db_add_param($this->datum).",".
+ $this->db_add_param($this->insertamum).",".
+ $this->db_add_param($this->insertvon).",".
+ $this->db_add_param($this->updateamum).",".
+ $this->db_add_param($this->updatevon).",".
+ $this->db_add_param($this->ext_id_prestudent).",".
+ $this->db_add_param($this->orgform_kurzbz).",".
+ $this->db_add_param($this->bestaetigtam).",".
+ $this->db_add_param($this->bestaetigtvon).",".
+ $this->db_add_param($this->anmerkung_status).",".
+ $this->db_add_param($this->bewerbung_abgeschicktamum).",".
+ $this->db_add_param($this->studienplan_id,FHC_INTEGER).",".
+ $this->db_add_param($this->rt_stufe,FHC_INTEGER).",".
$this->db_add_param($this->statusgrund_id, FHC_INTEGER).");";
}
else
diff --git a/include/studiengang.class.php b/include/studiengang.class.php
index d36cd894b..08d6e1f13 100644
--- a/include/studiengang.class.php
+++ b/include/studiengang.class.php
@@ -53,6 +53,9 @@ class studiengang extends basis_db
public $studienplaetze; // smallint
public $oe_kurzbz; // varchar(32)
public $onlinebewerbung; // boolean
+ public $melderelevant; // boolean
+ public $foerderrelevant; // boolean
+ public $standort_code; // integer
public $kuerzel; // = typ + kurzbz (Bsp: BBE)
public $kuerzel_arr = array(); // Array mit allen Kurzeln Index=studiengangs_kz
@@ -128,6 +131,9 @@ class studiengang extends basis_db
$this->moodle = $this->db_parse_bool($row->moodle);
$this->mischform = $this->db_parse_bool($row->mischform);
$this->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $this->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $this->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $this->standort_code = $row->standort_code;
$this->bezeichnung_arr['German'] = $this->bezeichnung;
$this->bezeichnung_arr['English'] = $this->english;
@@ -201,6 +207,9 @@ class studiengang extends basis_db
$stg_obj->moodle = $this->db_parse_bool($row->moodle);
$stg_obj->mischform = $this->db_parse_bool($row->mischform);
$stg_obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $stg_obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $stg_obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $stg_obj->standort_code = $row->standort_code;
$stg_obj->bezeichnung_arr['German'] = $row->bezeichnung;
$stg_obj->bezeichnung_arr['English'] = $row->english;
@@ -419,6 +428,9 @@ class studiengang extends basis_db
$stg_obj->moodle = $this->db_parse_bool($row->moodle);
$stg_obj->mischform = $this->db_parse_bool($row->mischform);
$stg_obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $stg_obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $stg_obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $stg_obj->standort_code = $row->standort_code;
$stg_obj->bezeichnung_arr['German'] = $row->bezeichnung;
$stg_obj->bezeichnung_arr['English'] = $row->english;
@@ -519,7 +531,10 @@ class studiengang extends basis_db
$this->db_add_param($this->studienplaetze).', '.
$this->db_add_param($this->lgartcode).', '.
$this->db_add_param($this->mischform, FHC_BOOLEAN).','.
- $this->db_add_param($this->projektarbeit_note_anzeige, FHC_BOOLEAN).');';
+ $this->db_add_param($this->projektarbeit_note_anzeige, FHC_BOOLEAN).','.
+ $this->db_add_param($this->melderelevant, FHC_BOOLEAN).','.
+ $this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).','.
+ $this->db_add_param($this->standort_code).');';
}
else
{
@@ -556,7 +571,10 @@ class studiengang extends basis_db
'testtool_sprachwahl='.$this->db_add_param($this->testtool_sprachwahl, FHC_BOOLEAN).', '.
'studienplaetze='.$this->db_add_param($this->studienplaetze).', '.
'lgartcode='.$this->db_add_param($this->lgartcode).', '.
- 'mischform='.$this->db_add_param($this->mischform, FHC_BOOLEAN).' '.
+ 'mischform='.$this->db_add_param($this->mischform, FHC_BOOLEAN).', '.
+ 'melderelevant='.$this->db_add_param($this->melderelevant, FHC_BOOLEAN).', '.
+ 'foerderrelevant='.$this->db_add_param($this->foerderrelevant, FHC_BOOLEAN).', '.
+ 'standort_code='.$this->db_add_param($this->standort_code).' '.
'WHERE studiengang_kz='.$this->db_add_param($this->studiengang_kz, FHC_INTEGER, false).';';
}
@@ -679,6 +697,9 @@ class studiengang extends basis_db
$this->onlinebewerbung = $this->db_parse_bool($row->onlinebewerbung);
$this->moodle = $this->db_parse_bool($row->moodle);
$this->mischform = $this->db_parse_bool($row->mischform);
+ $this->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $this->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $this->standort_code = $row->standort_code;
$this->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
$this->bezeichnung_arr['German'] = $this->bezeichnung;
@@ -819,6 +840,9 @@ class studiengang extends basis_db
$obj->moodle = $this->db_parse_bool($row->moodle);
$obj->mischform = $this->db_parse_bool($row->mischform);
$obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $obj->standort_code = $row->standort_code;
$obj->aktiv = $this->db_parse_bool($row->aktiv);
$this->result[] = $obj;
@@ -891,6 +915,9 @@ class studiengang extends basis_db
$obj->moodle = $this->db_parse_bool($row->moodle);
$obj->mischform = $this->db_parse_bool($row->mischform);
$obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $obj->standort_code = $row->standort_code;
$obj->bezeichnung_arr['German'] = $obj->bezeichnung;
$obj->bezeichnung_arr['English'] = $obj->english;
@@ -993,6 +1020,9 @@ class studiengang extends basis_db
$obj->moodle = $this->db_parse_bool($row->moodle);
$obj->mischform = $this->db_parse_bool($row->mischform);
$obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $obj->standort_code = $row->standort_code;
$obj->bezeichnung_arr['German'] = $obj->bezeichnung;
$obj->bezeichnung_arr['English'] = $obj->english;
@@ -1127,6 +1157,9 @@ class studiengang extends basis_db
$obj->moodle = $this->db_parse_bool($row->moodle);
$obj->mischform = $this->db_parse_bool($row->mischform);
$obj->projektarbeit_note_anzeige = $this->db_parse_bool($row->projektarbeit_note_anzeige);
+ $obj->melderelevant = $this->db_parse_bool($row->melderelevant);
+ $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant);
+ $obj->standort_code = $row->standort_code;
$obj->bezeichnung_arr['German'] = $obj->bezeichnung;
$obj->bezeichnung_arr['English'] = $obj->english;
diff --git a/public/css/codex/oehbeitrag.css b/public/css/codex/oehbeitrag.css
new file mode 100644
index 000000000..103c5d367
--- /dev/null
+++ b/public/css/codex/oehbeitrag.css
@@ -0,0 +1,14 @@
+.inline-inputfield {
+ width: auto;
+ display: inline;
+}
+
+.fa-edit {
+ cursor: pointer;
+ font-size: 1.2em;
+}
+
+.fa-check {
+ cursor: pointer;
+ font-size: 1.4em;
+}
diff --git a/public/css/issues/issuesDataset.css b/public/css/issues/issuesDataset.css
new file mode 100644
index 000000000..f05066b96
--- /dev/null
+++ b/public/css/issues/issuesDataset.css
@@ -0,0 +1,8 @@
+.datasetActionsTopBottomText {
+ padding-top: 1em;
+}
+
+.datasetActionsHorizontalLine {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
\ No newline at end of file
diff --git a/public/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js
new file mode 100644
index 000000000..77a98a27b
--- /dev/null
+++ b/public/js/codex/oehbeitrag.js
@@ -0,0 +1,512 @@
+const BASE_URL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
+const CALLED_PATH = FHC_JS_DATA_STORAGE_OBJECT.called_path;
+const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH;
+
+/**
+ * javascript file for Öhbeitrag GUI
+ */
+$(document).ready(function ()
+{
+ // get Öhbeiträge and show them in table
+ Oehbeitrag.getOehBeitraege();
+
+ // set event for adding new Oehhbeitrag
+ $("#addNewOeh").click(
+ function()
+ {
+ let callback = function(data)
+ {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ let studiensemester = FHC_AjaxClient.getData(data);
+ let nextOehbeitragId = Oehbeitrag.newBeitragId;
+
+ // add new table row
+ let newRowHtml = ""+
+ "| ";
+ newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'von_studiensemester_kurzbz', studiensemester);
+ newRowHtml += " | ";
+ newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'bis_studiensemester_kurzbz', studiensemester);
+ newRowHtml += " | ";
+ newRowHtml += " | "+
+ " | "+
+ " " +
+ " | "+
+ "
";
+
+ $("#oehbeitraegeTbl tbody").prepend(newRowHtml);
+ $("#addOeh_"+Oehbeitrag.newBeitragId).click(
+ function()
+ {
+ // get form data into object
+ let oehbeitrag = {
+ "von_studiensemester_kurzbz": $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId).val(),
+ "bis_studiensemester_kurzbz": $("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId).val(),
+ "studierendenbeitrag": $("#input_studierendenbeitrag_"+nextOehbeitragId).val().replace(",", "."),
+ "versicherung": $("#input_versicherung_"+nextOehbeitragId).val().replace(",", ".")
+ }
+
+ let studiensemester_von_bis = {
+ "von_semester_with_date": $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId+" option:selected").text(),
+ "bis_semester_with_date": $("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId+" option:selected").text()
+ }
+
+ Oehbeitrag.addOehbeitrag(oehbeitrag, studiensemester_von_bis, nextOehbeitragId);
+ }
+ );
+
+ // remove html row if delete button clicked
+ $("#delete_"+nextOehbeitragId).click(
+ function()
+ {
+ $(this).parent('td').parent('tr').remove();
+ }
+ );
+
+ // increase counter for newly added rows id
+ Oehbeitrag.newBeitragId++;
+ }
+ else
+ FHC_DialogLib.alertInfo("ÖH-Beiträge für alle Studiensemester festgelegt");
+ }
+
+ Oehbeitrag.getValidStudiensemester(callback);
+ }
+ )
+});
+
+var Oehbeitrag = {
+ newBeitragId: 0,
+ // -----------------------------------------------------------------------------------------------------------------
+ // ajax calls
+ getOehBeitraege: function()
+ {
+ FHC_AjaxClient.ajaxCallGet(
+ CALLED_PATH + "/getOehbeitraege",
+ null,
+ {
+ successCallback: function(data, textStatus, jqXHR)
+ {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ let oehbeitraege = FHC_AjaxClient.getData(data);
+
+ let oehbeitrStr = '';
+ for (let idx in oehbeitraege)
+ {
+ let oehbeitrag = oehbeitraege[idx];
+
+ // add Öhbeitrag row
+ oehbeitrStr += '' +
+ '| ' +
+ Oehbeitrag._formatDateToGerman(oehbeitrag.von_datum) + '/' + oehbeitrag.von_studiensemester_kurzbz +
+ ' '+
+ ' | ' +
+ '' + (oehbeitrag.bis_studiensemester_kurzbz == null ? 'unbeschränkt' :
+ Oehbeitrag._formatDateToGerman(oehbeitrag.bis_datum) + '/' + oehbeitrag.bis_studiensemester_kurzbz) +
+ ' '+
+ ' | ' +
+ '' + Oehbeitrag._formatDecimal(oehbeitrag.studierendenbeitrag) +
+ ' '+
+ ' | ' +
+ '' + Oehbeitrag._formatDecimal(oehbeitrag.versicherung) +
+ ' '+
+ ' | ' +
+ '' +
+ '' +
+ ' ' +
+ ' | ' +
+ '
';
+ }
+ $("#oehbeitraegeTbl tbody").html(oehbeitrStr);
+
+ // set events for editing, deleting etc.
+ Oehbeitrag._setUpdateEvents();
+
+ //initialise table sorter
+ Oehbeitrag._addTablesorter();
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Holen der Öhbeiträge');
+ }
+ }
+ );
+ },
+ // get all Studiensemester which are valid for assignment (where no Öhbeitrag is assigned)
+ getValidStudiensemester: function(callback, oehbeitrag_id)
+ {
+ let params = oehbeitrag_id ? {"oehbeitrag_id": oehbeitrag_id} : null;
+
+ FHC_AjaxClient.ajaxCallGet(
+ CALLED_PATH + "/getValidStudiensemester",
+ params,
+ {
+ successCallback: callback,
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Holen der Semester');
+ }
+ }
+ );
+ },
+ addOehbeitrag: function(oehbeitrag, studiensemester_von_bis, nextOehbeitragId)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ CALLED_PATH + '/addOehbeitrag',
+ oehbeitrag,
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ // refresh Öhbeitragstable
+ Oehbeitrag.getOehBeitraege();
+ }
+ else
+ {
+ FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
+ }
+ }
+ );
+ },
+ // update whole Öhbeitrag
+ updateOehbeitrag: function(oehbeitrag_id, oehbeitragData)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ CALLED_PATH + '/updateOehbeitrag',
+ {
+ "oehbeitrag_id": oehbeitrag_id,
+ "data": oehbeitragData
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ // refresh Öhbeitragstable
+ Oehbeitrag.getOehBeitraege();
+ }
+ else
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ }
+ );
+ },
+ // update one field of Öhbeitrag (e.g. only semester or only Betrag)
+ updateOehbeitragField: function(oehbeitrag_id, fieldname, fieldelement, inputtype)
+ {
+ let oehbeitragdata = {};
+ let fieldvalue = fieldelement.val();
+
+ if (inputtype != 'semester') // formal number as decimal with point separator
+ fieldvalue = Oehbeitrag._formatDecimal(fieldvalue, ".");
+
+ oehbeitragdata[fieldname] = fieldvalue;
+
+ FHC_AjaxClient.ajaxCallPost(
+ CALLED_PATH + '/updateOehbeitrag',
+ {
+ "oehbeitrag_id": oehbeitrag_id,
+ "data": oehbeitragdata
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ // refresh table cell with correct value and set edit event and tablesorter
+ if (inputtype == 'semester')
+ fieldvalue = $(fieldelement).find("option:selected").text();
+ else
+ fieldvalue = Oehbeitrag._formatDecimal(fieldvalue);
+ $("#confirm_"+fieldname+"_"+oehbeitrag_id).parent('td').html(
+ fieldvalue+" "
+ );
+ $("#edit_"+fieldname+"_"+oehbeitrag_id).click(
+ function()
+ {
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), fieldname, inputtype, true);
+ }
+ );
+
+ Oehbeitrag._addTablesorter();
+ }
+ else
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ }
+ );
+ },
+ deleteOehbeitrag: function(oehbeitrag_id)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ CALLED_PATH + '/deleteOehbeitrag',
+ {"oehbeitrag_id": oehbeitrag_id},
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ $("#delete_"+oehbeitrag_id).closest("tr").remove();
+ Oehbeitrag._addTablesorter();
+ }
+ else
+ {
+ FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags');
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags');
+ }
+ }
+ );
+ },
+
+ // -----------------------------------------------------------------------------------------------------------------
+ /**
+ * Sets click events for updating, deleting Oehbeitrag
+ */
+ _setUpdateEvents: function()
+ {
+ // set edit event for whole row
+ $(".editBtn").click(
+ function()
+ {
+ let id = $(this).prop("id");
+ let oehbeitrag_id = id.substr(id.lastIndexOf('_')+1);
+ Oehbeitrag._makeFieldEditable(id, 'von_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable(id, 'bis_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable(id, 'studierendenbeitrag');
+ Oehbeitrag._makeFieldEditable(id, 'versicherung');
+ $(this).after(" ");
+ $(this).remove();
+ $("#delete_" + oehbeitrag_id).remove();
+
+ $("#save_"+oehbeitrag_id).click(
+ function()
+ {
+ let von_studiensemester_kurzbz = $("#input_von_studiensemester_kurzbz_"+oehbeitrag_id+" option:selected").val();
+ let bis_studiensemester_kurzbz = $("#input_bis_studiensemester_kurzbz_"+oehbeitrag_id+" option:selected").val();
+ let studierendenbeitrag = Oehbeitrag._formatDecimal($("#input_studierendenbeitrag_"+oehbeitrag_id).val(), '.');
+ let versicherung = Oehbeitrag._formatDecimal($("#input_versicherung_"+oehbeitrag_id).val(), '.');
+
+ let oehbeitragData = {
+ "von_studiensemester_kurzbz": von_studiensemester_kurzbz,
+ "bis_studiensemester_kurzbz": bis_studiensemester_kurzbz,
+ "studierendenbeitrag": studierendenbeitrag,
+ "versicherung": versicherung
+ }
+
+ Oehbeitrag.updateOehbeitrag(oehbeitrag_id, oehbeitragData);
+ }
+ )
+ }
+ );
+
+ // set delete event for all rows
+ $(".deleteBtn").click(
+ function()
+ {
+ let oehbeitrag_id_prefixed = $(this).prop("id");
+ let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.lastIndexOf('_')+1);
+
+ Oehbeitrag.deleteOehbeitrag(oehbeitrag_id);
+ }
+ )
+
+ // set edit events for single cells
+ $(".editStudierendenbeitrag").off('click').click(
+ function()
+ {
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'studierendenbeitrag', null, true);
+ }
+ );
+
+ $(".editVersicherung").off('click').click(
+ function()
+ {
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'versicherung', null, true);
+ }
+ );
+
+ $(".editBisStudiensemester").off('click').click(
+ function()
+ {
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'bis_studiensemester_kurzbz', 'semester', true);
+ }
+ );
+
+ $(".editVonStudiensemester").off('click').click(
+ function()
+ {
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'von_studiensemester_kurzbz', 'semester', true);
+ }
+ );
+ },
+ // make Öhbeitrag field editable, i.e. show input field instead of text
+ _makeFieldEditable: function(oehbeitrag_id_prefixed, fieldname, inputtype, singleUpdate)
+ {
+ let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.lastIndexOf('_')+1);
+ let initElement = $("#cell_"+fieldname+"_"+oehbeitrag_id); // clicked element triggering event
+ let currFieldvalue = initElement.text().trim();
+
+ let callback = function(validSemesterData)
+ {
+ let inputHtml = "";
+
+ // if semester dropdown, retrieve valid semester
+ if (inputtype === 'semester')
+ {
+ if (FHC_AjaxClient.hasData(validSemesterData))
+ {
+ let studiensemester = FHC_AjaxClient.getData(validSemesterData);
+
+ inputHtml = Oehbeitrag._getStudiensemesterDropdown(oehbeitrag_id, fieldname, studiensemester, currFieldvalue, 'inline-inputfield');
+ }
+ }
+ else // otherwise display textfield
+ {
+ inputHtml = "";
+ }
+
+ if (singleUpdate === true)
+ inputHtml += " ";
+
+ initElement.html(inputHtml);
+
+ if (singleUpdate === true)
+ {
+ // set the update event if single field update
+ $("#confirm_" + fieldname + "_" + oehbeitrag_id).click(
+ function()
+ {
+ Oehbeitrag.updateOehbeitragField(oehbeitrag_id, fieldname, $("#input_" + fieldname + "_" + oehbeitrag_id), inputtype);
+ }
+ );
+ }
+ }
+
+ // get valid Studiensemester with no Öhbeitrag assigned
+ if (inputtype == 'semester')
+ {
+ Oehbeitrag.getValidStudiensemester(callback, oehbeitrag_id);
+ }
+ else
+ callback(null);
+ },
+ _getStudiensemesterDropdown(oehbeitrag_id, name, studiensemester, selectedDateSemester, formatclass)
+ {
+ let selectedDateSemesterArr = null;
+ if (selectedDateSemester)
+ {
+ selectedDateSemesterArr = selectedDateSemester.split('/');
+ }
+
+ let rowHtml = "";
+ let inlineClass = formatclass != null ? ' '+formatclass : '';
+
+ rowHtml += "";
+
+ return rowHtml;
+ },
+ _compareGermanDates: function(datea, dateb)
+ {
+ return datea.split(".").reverse().join("") < dateb.split(".").reverse().join("");
+ },
+ _addTablesorter: function()
+ {
+ // add parser through the tablesorter addParser method
+ $.tablesorter.addParser({
+ // set a unique id
+ id: 'germandatesort',
+ is: function(s, table, cell, $cell) {
+ // return false so this parser is not auto detected
+ return false;
+ },
+ format: function(s, table, cell, cellIndex) {
+ // format data, should sort by leading german date
+ return s.substring(0, 10).split(".").reverse().join("");
+ },
+ // set type, either numeric or text
+ type: 'numeric'
+ });
+
+ let headers = {headers: { 0: {sorter: "germandatesort"}, 1: {sorter: "germandatesort"}, 4: {sorter: false}}};
+
+ Tablesort.addTablesorter("oehbeitraegeTbl", [[0,1]], ["zebra"], 8, headers);
+ },
+ // Formats a numeric value as a float with two decimals
+ _formatDecimal: function(value, decSeparator)
+ {
+ let dec = null;
+ let prevSeparator = ".";
+
+ if (decSeparator === ".")
+ prevSeparator = ",";
+ else
+ decSeparator = ",";
+
+ dec = value.split(prevSeparator);
+ if (dec.length === 2)
+ {
+ dec = parseFloat(dec[0] + '.' + dec[1]).toFixed(2);
+ dec = dec.replace(prevSeparator, decSeparator);
+ }
+ else if (Math.floor(value) == value) // if integer, add zeros
+ dec = value + decSeparator + '00';
+ else
+ dec = value;
+
+ return dec;
+ },
+ // formats english date to as german
+ _formatDateToGerman: function(date)
+ {
+ return date.substring(8, 10) + "." + date.substring(5, 7) + "." + date.substring(0, 4);
+ }
+};
diff --git a/public/js/issues/issuesDataset.js b/public/js/issues/issuesDataset.js
new file mode 100644
index 000000000..b102a3f96
--- /dev/null
+++ b/public/js/issues/issuesDataset.js
@@ -0,0 +1,151 @@
+/**
+ * Javascript file for issues overview page
+ */
+
+var IssuesDataset = {
+
+ /**
+ * adds person table additional actions html (above and beneath it)
+ */
+ appendTableActionsHtml: function()
+ {
+ let auswahlStatus =
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '
';
+
+ let selectAllHtml =
+ '' +
+ ' Alle ' +
+ '' +
+ ' Keinen ';
+
+ let issuescount = 0;
+
+ FHC_AjaxClient.ajaxCallGet(
+ 'widgets/Filters/rowNumber',
+ {
+ filterUniqueId: FHC_FilterWidget.getFilterUniqueIdPrefix()
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ issuescount = FHC_AjaxClient.getData(data);
+
+ if (issuescount > 0)
+ {
+ var countHtml = issuescount + " Fehler";
+
+ // Count Records after Filtering
+ $("#filterTableDataset").bind("filterEnd", function() {
+ var cnt = $("#filterTableDataset tr:visible").length - 2;
+ $(".filterTableDatasetCntFiltered").html(cnt + ' / ');
+ });
+
+ $("#datasetActionsTop, #datasetActionsBottom").append(
+ ""+
+ "
" + selectAllHtml + "
"+
+ "
" + auswahlStatus + "
"+
+ "
" +
+ "" +
+ countHtml + "
"+
+ "
"+
+ ""+
+ "
"+
+ ""
+ );
+ $("#datasetActionsBottom").append("
");
+
+ IssuesDataset.setTableActions();
+ }
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+
+ /**
+ * sets functionality for the actions above and beneath the person table
+ */
+ setTableActions: function()
+ {
+ $(".setStatus").click(function()
+ {
+ let status_kurzbz = $(".auswahlStatus").val();
+ let issue_ids_sel = $("#filterTableDataset input:checked[name=issue_id\\[\\]]");
+
+ if(status_kurzbz.length <= 0)
+ return FHC_DialogLib.alertInfo("Bitte wählen Sie den Status aus.");
+
+ if(issue_ids_sel.length <= 0)
+ return FHC_DialogLib.alertInfo("Bitte wählen Sie die Fehler aus.");
+
+ let issue_ids = [];
+
+ for (let i = 0; i < issue_ids_sel.length; i++)
+ {
+ issue_ids.push($(issue_ids_sel[i]).val());
+ }
+
+ FHC_AjaxClient.ajaxCallPost(
+ 'system/issues/Issues/changeIssueStatus',
+ {
+ "issue_ids": issue_ids,
+ "status_kurzbz": status_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ FHC_DialogLib.alertError("Fehler beim Status Ändern: " + FHC_AjaxClient.getError(data));
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ FHC_FilterWidget.reloadDataset();
+ FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data));
+ }
+ else
+ FHC_DialogLib.alertError("Unbekannter Fehler beim Status Ändern");
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError("Fehler beim Status Ändern: " + textStatus);
+ }
+ }
+ );
+ }
+ );
+
+ $(".selectAll").click(function()
+ {
+ //select only trs if not filtered by tablesorter
+ var trs = $("#filterTableDataset tbody tr").not(".filtered");
+ trs.find("input[name=issue_id\\[\\]]").prop("checked", true);
+ }
+ );
+
+ $(".unselectAll").click(function()
+ {
+ var trs = $("#filterTableDataset tbody tr").not(".filtered");
+ trs.find("input[name=issue_id\\[\\]]").prop("checked", false);
+ }
+ );
+ }
+};
+
+/**
+ * When JQuery is up
+ */
+$(document).ready(function() {
+
+ IssuesDataset.appendTableActionsHtml();
+
+});
diff --git a/rdf/bisstandort.rdf.php b/rdf/bisstandort.rdf.php
new file mode 100644
index 000000000..17afcde46
--- /dev/null
+++ b/rdf/bisstandort.rdf.php
@@ -0,0 +1,75 @@
+.
+ */
+// header für no cache
+header("Cache-Control: no-cache");
+header("Cache-Control: post-check=0, pre-check=0",false);
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Pragma: no-cache");
+// content type setzen
+header("Content-type: application/xhtml+xml");
+// xml
+echo '';
+// DAO
+require_once('../config/vilesci.config.inc.php');
+require_once('../include/basis_db.class.php');
+
+$rdf_url='http://www.technikum-wien.at/bisstandort';
+
+?>
+
+
+
+
+
+
+
+
+ -- keine Auswahl --
+
+
+';
+}
+$qry = "SELECT * FROM bis.tbl_bisstandort WHERE aktiv ORDER BY bezeichnung";
+$db = new basis_db();
+
+if($db->db_query($qry))
+{
+ while($row = $db->db_fetch_object())
+ {
+?>
+
+
+ standort_code; ?>]]>
+ bezeichnung; ?>]]>
+
+
+
+
+
\ No newline at end of file
diff --git a/rdf/student.rdf.php b/rdf/student.rdf.php
index b8db89176..1836ae55b 100644
--- a/rdf/student.rdf.php
+++ b/rdf/student.rdf.php
@@ -355,43 +355,52 @@ function draw_prestudent($row)
$prioRelativ = $prioRelativ->getRelativePriorisierungFromAbsolut($row->prestudent_id, $row->priorisierung);
if($row->prestudent_id!='')
{
- echo '
- prestudent_id.']]>
- studiengang_kz.']]>
- studiengang_kz.']]>
- aufmerksamdurch_kurzbz.']]>
- studiengang_kz].']]>
- berufstaetigkeit_code.']]>
- ausbildungcode.']]>
- zgv_code.']]>
- zgvort.']]>
- convertISODate($row->zgvdatum).']]>
- zgvdatum.']]>
- zgvnation.']]>
- zgvmas_code.']]>
- zgvmaort.']]>
- convertISODate($row->zgvmadatum).']]>
- zgvmadatum.']]>
- zgvmanation.']]>
- ausstellungsstaat.']]>
- aufnahmeschluessel.']]>
- facheinschlberuf?'true':'false').']]>
- reihungstest_id.']]>
- convertISODate($row->anmeldungreihungstest).']]>
- anmeldungreihungstest.']]>
- reihungstestangetreten?'true':'false').']]>
- punkte.']]>
- bismelden?'true':'false').']]>
- dual?'true':'false').']]>
- dual?'Ja':'Nein').']]>
- anmerkung.']]>
- mentor.']]>
- gsstudientyp_kurzbz.']]>
- aufnahmegruppe_kurzbz.']]>
- priorisierung.']]>
- priorisierung.')'.']]>
-
- ';
+ $foerderrelevant = '';
+
+ if ($row->foerderrelevant === true)
+ $foerderrelevant = 'true';
+ elseif ($row->foerderrelevant === false)
+ $foerderrelevant = 'false';
+
+ echo '
+ prestudent_id.']]>
+ studiengang_kz.']]>
+ studiengang_kz.']]>
+ aufmerksamdurch_kurzbz.']]>
+ studiengang_kz].']]>
+ berufstaetigkeit_code.']]>
+ ausbildungcode.']]>
+ zgv_code.']]>
+ zgvort.']]>
+ convertISODate($row->zgvdatum).']]>
+ zgvdatum.']]>
+ zgvnation.']]>
+ zgvmas_code.']]>
+ zgvmaort.']]>
+ convertISODate($row->zgvmadatum).']]>
+ zgvmadatum.']]>
+ zgvmanation.']]>
+ ausstellungsstaat.']]>
+ aufnahmeschluessel.']]>
+ facheinschlberuf?'true':'false').']]>
+ reihungstest_id.']]>
+ convertISODate($row->anmeldungreihungstest).']]>
+ anmeldungreihungstest.']]>
+ reihungstestangetreten?'true':'false').']]>
+ punkte.']]>
+ bismelden?'true':'false').']]>
+
+ dual?'true':'false').']]>
+ dual?'Ja':'Nein').']]>
+ anmerkung.']]>
+ mentor.']]>
+ gsstudientyp_kurzbz.']]>
+ aufnahmegruppe_kurzbz.']]>
+ priorisierung.']]>
+ priorisierung.')'.']]>
+ standort_code.']]>
+
+ ';
}
}
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index 45c9e9e42..6652da78e 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -5028,6 +5028,457 @@ if(!@$db->db_query("SELECT lehrmodus_kurzbz FROM lehre.tbl_lehrveranstaltung LIM
echo '
Spalte lehrmodus_kurzbz in lehre.tbl_lehrveranstaltung hinzugefügt';
}
+// Spalte matr_aktiv in tbl_person zum Markieren von noch nicht scharfgeschaltenen Matrikelnummern vom Datenverbund
+if(!$result = @$db->db_query("SELECT matr_aktiv FROM public.tbl_person LIMIT 1"))
+{
+ $qry = "ALTER TABLE public.tbl_person ADD COLUMN matr_aktiv boolean NOT NULL DEFAULT false;
+ COMMENT ON COLUMN public.tbl_person.matr_aktiv IS 'Zeigt an, ob Matrikelnummer aktiv oder nur vorläufig ist.';";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_person: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_person: Spalte matr_aktiv hinzugefuegt';
+
+ $qry = "UPDATE public.tbl_person SET matr_aktiv = TRUE WHERE matr_nr IS NOT NULL;";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_person: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_person: Spalte matr_aktiv auf true gesetzt';
+}
+
+// Creates table bis.tbl_oehbeitrag if it doesn't exist and grants privileges
+if (!$result = @$db->db_query('SELECT 1 FROM bis.tbl_oehbeitrag LIMIT 1'))
+{
+ $qry = 'CREATE TABLE bis.tbl_oehbeitrag (
+ oehbeitrag_id integer NOT NULL,
+ studierendenbeitrag numeric(5,2) NOT NULL,
+ versicherung numeric(5,2) NOT NULL,
+ von_studiensemester_kurzbz varchar(16) NOT NULL,
+ bis_studiensemester_kurzbz varchar(16),
+ insertamum timestamp DEFAULT NOW(),
+ insertvon varchar(32),
+ updateamum timestamp,
+ updatevon varchar(32)
+ );
+
+ COMMENT ON TABLE bis.tbl_oehbeitrag IS \'Table to save amount of Oehbeitrag and Versicherung.\';
+ COMMENT ON COLUMN bis.tbl_oehbeitrag.studierendenbeitrag IS \'Amount of Studierendenbeitrag, Oehbeitrag without Versicherung.\';
+ COMMENT ON COLUMN bis.tbl_oehbeitrag.versicherung IS \'Amount of Versicherung as part of the Oehbeitrag\';
+ COMMENT ON COLUMN bis.tbl_oehbeitrag.von_studiensemester_kurzbz IS \'Semester from which amounts are valid\';
+ COMMENT ON COLUMN bis.tbl_oehbeitrag.bis_studiensemester_kurzbz IS \'Semester until which amounts are valid\';
+
+ CREATE SEQUENCE bis.seq_oehbeitrag_oehbeitrag_id
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ ALTER TABLE bis.tbl_oehbeitrag ALTER COLUMN oehbeitrag_id SET DEFAULT nextval(\'bis.seq_oehbeitrag_oehbeitrag_id\'::regclass);
+
+ GRANT SELECT, UPDATE ON SEQUENCE bis.seq_oehbeitrag_oehbeitrag_id TO vilesci;
+ GRANT SELECT, UPDATE ON SEQUENCE bis.seq_oehbeitrag_oehbeitrag_id TO fhcomplete;
+
+ ALTER TABLE bis.tbl_oehbeitrag ADD CONSTRAINT pk_oehbeitrag PRIMARY KEY (oehbeitrag_id);
+
+ ALTER TABLE bis.tbl_oehbeitrag ADD CONSTRAINT fk_oehbeitrag_von_studiensemester_kurzbz FOREIGN KEY (von_studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE bis.tbl_oehbeitrag ADD CONSTRAINT fk_oehbeitrag_bis_studiensemester_kurzbz FOREIGN KEY (bis_studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ ALTER TABLE bis.tbl_oehbeitrag ADD CONSTRAINT uk_oehbeitrag_von_studiensemester_kurzbz UNIQUE (von_studiensemester_kurzbz);';
+
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_oehbeitrag: '.$db->db_last_error().'
';
+ else
+ echo '
bis.tbl_oehbeitrag table created';
+
+ $qry = 'GRANT SELECT ON TABLE bis.tbl_oehbeitrag TO web;';
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_oehbeitrag: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on bis.tbl_oehbeitrag';
+
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_oehbeitrag TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_oehbeitrag: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on bis.tbl_oehbeitrag';
+}
+
+// Add column melderelevant to public.tbl_studiengang and prefill values
+if (!$result = @$db->db_query("SELECT melderelevant FROM public.tbl_studiengang LIMIT 1"))
+{
+ $qry = "ALTER TABLE public.tbl_studiengang ADD COLUMN melderelevant boolean NOT NULL DEFAULT FALSE;
+ UPDATE public.tbl_studiengang SET melderelevant = TRUE WHERE tbl_studiengang.studiengang_kz < 10000 AND tbl_studiengang.studiengang_kz <> 0;
+ COMMENT ON COLUMN public.tbl_studiengang.melderelevant IS 'Zeigt an, ob Studierende aus Studiengang an Ministerien gemeldet werden müssen'";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_studiengang: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_studiengang: Neue Spalte melderelevant hinzugefuegt.';
+}
+
+// TABLE bis.tbl_bisstandort
+if (!@$db->db_query("SELECT 1 FROM bis.tbl_bisstandort LIMIT 1"))
+{
+ $qry = "CREATE TABLE bis.tbl_bisstandort (
+ standort_code integer,
+ bezeichnung character varying(256),
+ aktiv boolean NOT NULL DEFAULT TRUE,
+ insertamum timestamp DEFAULT NOW(),
+ insertvon varchar(32),
+ updateamum timestamp,
+ updatevon varchar(32)
+ );
+ ALTER TABLE bis.tbl_bisstandort ADD CONSTRAINT pk_bisstandort PRIMARY KEY (standort_code);
+ COMMENT ON TABLE bis.tbl_bisstandort IS 'Key-Table of Locations';";
+
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_bisstandort '.$db->db_last_error().'
';
+ else
+ echo '
Created table bis.tbl_bisstandort';
+
+ // GRANT SELECT ON TABLE bis.tbl_bisstandort TO web;
+ $qry = 'GRANT SELECT ON TABLE bis.tbl_bisstandort TO web;';
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_bisstandort '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on bis.tbl_bisstandort';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_bisstandort TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_bisstandort TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'bis.tbl_bisstandort '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on bis.tbl_bisstandort';
+}
+
+// Add columns foerderrelevant and standort to public.tbl_studiengang
+if (!$result = @$db->db_query("SELECT foerderrelevant, standort_code FROM public.tbl_studiengang LIMIT 1"))
+{
+ $qry = "ALTER TABLE public.tbl_studiengang ADD COLUMN foerderrelevant boolean NOT NULL DEFAULT TRUE;
+ ALTER TABLE public.tbl_studiengang ADD COLUMN standort_code integer;
+ ALTER TABLE public.tbl_studiengang ADD CONSTRAINT fk_studiengang_standort_code FOREIGN KEY (standort_code) REFERENCES bis.tbl_bisstandort(standort_code) ON DELETE RESTRICT ON UPDATE CASCADE;
+ COMMENT ON COLUMN public.tbl_studiengang.foerderrelevant IS 'Zeigt an, ob Studierende aus Studiengang bei Meldung für Förderungen relevant sind';
+ COMMENT ON COLUMN public.tbl_studiengang.standort_code IS 'Zu meldender Standortcode der Studierenden des Studiengangs'";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_studiengang: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_studiengang: Neue Spalten foerderrelevant, standort_code hinzugefuegt.';
+}
+
+// Add columns foerderrelevant and standort to public.tbl_prestudent
+if (!$result = @$db->db_query("SELECT foerderrelevant, standort_code FROM public.tbl_prestudent LIMIT 1"))
+{
+ $qry = "ALTER TABLE public.tbl_prestudent ADD COLUMN foerderrelevant boolean;
+ ALTER TABLE public.tbl_prestudent ADD COLUMN standort_code integer;
+ ALTER TABLE public.tbl_prestudent ADD CONSTRAINT fk_prestudent_standort_code FOREIGN KEY (standort_code) REFERENCES bis.tbl_bisstandort(standort_code) ON DELETE RESTRICT ON UPDATE CASCADE;
+ UPDATE public.tbl_prestudent ps -- set foerderrelevant false for incoming, ausserordentlich, gsextern
+ SET foerderrelevant = FALSE
+ WHERE EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = ps.prestudent_id AND status_kurzbz = 'Incoming') -- incoming
+ OR EXISTS (SELECT 1 FROM public.tbl_prestudent
+ JOIN public.tbl_person USING (person_id)
+ LEFT JOIN public.tbl_student USING (prestudent_id)
+ LEFT JOIN bis.tbl_gsstudientyp USING (gsstudientyp_kurzbz)
+ WHERE prestudent_id = ps.prestudent_id
+ AND (SUBSTRING(matrikelnr, 4, 1) = '9' -- ausserordentlich
+ OR studientyp_code = 'E')); -- extern
+ COMMENT ON COLUMN public.tbl_prestudent.foerderrelevant IS 'Zeigt an, ob Studierende bei Meldung für Förderungen relevant sind. Überschreibt förderrelevant auf Studienganglevel.';
+ COMMENT ON COLUMN public.tbl_prestudent.standort_code IS 'Zu meldender Standortcode des Studierenden. Überschreibt standort auf Studienganglevel.';";
+
+ if(!$db->db_query($qry))
+ echo 'public.tbl_prestudent: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_prestudent: Neue Spalten foerderrelevant, standort_code hinzugefuegt.';
+}
+
+// App 'dvuh' hinzufügen
+if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='dvuh'"))
+{
+ if($db->db_num_rows($result)==0)
+ {
+ $qry = "INSERT INTO system.tbl_app(app) VALUES('dvuh');";
+
+ if(!$db->db_query($qry))
+ echo 'App: '.$db->db_last_error().'
';
+ else
+ echo '
Neue App dvuh in system.tbl_app hinzugefügt';
+ }
+}
+
+// Add table issue_status
+if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue_status LIMIT 1;"))
+{
+ $qry = "CREATE TABLE system.tbl_issue_status (
+ status_kurzbz character varying(32),
+ bezeichnung_mehrsprachig varchar(32)[]
+ );
+
+ COMMENT ON TABLE system.tbl_issue_status IS 'Tabelle zur Pflege von Bearbeitungsstatus von issues.';
+
+ ALTER TABLE system.tbl_issue_status ADD CONSTRAINT pk_tbl_issue_status PRIMARY KEY (status_kurzbz);
+
+ INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('new', '{\"neu\",\"new\"}');
+ INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgress', '{\"in Bearbeitung\",\"in progress\"}');
+ INSERT INTO system.tbl_issue_status (status_kurzbz, bezeichnung_mehrsprachig) VALUES('resolved', '{\"behoben\",\"resolved\"}');";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_issue_status: '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_issue_status: Tabelle hinzugefuegt';
+
+ // GRANT SELECT ON TABLE bis.tbl_bisstandort TO web;
+ $qry = 'GRANT SELECT ON TABLE system.tbl_issue_status TO web;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_issue_status '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on system.tbl_issue_status';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_issue_status TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_issue_status TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_issue_status '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on system.tbl_issue_status';
+}
+
+// Add table fehlertyp
+if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehlertyp LIMIT 1;"))
+{
+ $qry = "CREATE TABLE system.tbl_fehlertyp (
+ fehlertyp_kurzbz character varying(32),
+ bezeichnung_mehrsprachig varchar(32)[]
+ );
+
+ COMMENT ON TABLE system.tbl_fehlertyp IS 'Tabelle mit fehlertyp für tbl_fehler';
+
+ ALTER TABLE system.tbl_fehlertyp ADD CONSTRAINT pk_tbl_fehlertyp PRIMARY KEY (fehlertyp_kurzbz);
+
+ INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('warning', '{\"warnung\",\"warning\"}');
+ INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('error', '{\"fehler\",\"error\"}');
+ INSERT INTO system.tbl_fehlertyp (fehlertyp_kurzbz, bezeichnung_mehrsprachig) VALUES('info', '{\"info\",\"info\"}');";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehlertyp: '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_fehlertyp: Tabelle hinzugefuegt';
+
+ // GRANT SELECT ON TABLE bis.tbl_bisstandort TO web;
+ $qry = 'GRANT SELECT ON TABLE system.tbl_fehlertyp TO web;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehlertyp '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on system.tbl_fehlertyp';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_bisstandort TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_fehlertyp TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehlertyp '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on system.tbl_fehlertyp';
+}
+
+// Add table fehler
+if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehler LIMIT 1;"))
+{
+ $qry = "CREATE TABLE system.tbl_fehler (
+ fehlercode character varying(64),
+ fehler_kurzbz character varying(64) UNIQUE,
+ fehlercode_extern character varying(64),
+ fehlertext text,
+ fehlertyp_kurzbz character varying(32) NOT NULL,
+ app character varying(32) NOT NULL
+ );
+
+ COMMENT ON TABLE system.tbl_fehler IS 'Tabelle zur Pflege von Fehlerfällen';
+ COMMENT ON COLUMN system.tbl_fehler.fehlercode IS 'Eindeutiger interner Fehlercode';
+ COMMENT ON COLUMN system.tbl_fehler.fehler_kurzbz IS 'Eindeutige Kurzbezeichnung für den Fehler';
+ COMMENT ON COLUMN system.tbl_fehler.fehlercode_extern IS 'Code für von vordefinierte, von externen Systemen produzierte Fehler';
+ COMMENT ON COLUMN system.tbl_fehler.fehlertext IS 'Interner, eigens definierter Fehlertext mit Platzhaltern für Parameter';
+ COMMENT ON COLUMN system.tbl_fehler.fehlertyp_kurzbz IS 'Typ bzw Schweregrad (z.B. warnung, fehler)';
+ COMMENT ON COLUMN system.tbl_fehler.app IS 'Ursprungsapp des Fehlers';
+
+ ALTER TABLE system.tbl_fehler ADD CONSTRAINT pk_tbl_fehler PRIMARY KEY (fehlercode);
+ ALTER TABLE system.tbl_fehler ADD CONSTRAINT fk_tbl_fehler_fehlertyp_kurzbz FOREIGN KEY (fehlertyp_kurzbz) REFERENCES system.tbl_fehlertyp(fehlertyp_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler ADD CONSTRAINT fk_tbl_fehler_app FOREIGN KEY (app) REFERENCES system.tbl_app(app) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler ADD CONSTRAINT uk_tbl_fehler_fehlercode_fehler_kurzbz UNIQUE (fehlercode, fehler_kurzbz); -- for upsert ON CONFLICT
+ ALTER TABLE system.tbl_fehler ADD CONSTRAINT uk_tbl_fehler_fehlercode_extern_app UNIQUE (fehlercode_extern, app); -- for recognizing external errors
+
+ INSERT INTO system.tbl_fehler (fehlercode, fehlertext, fehlertyp_kurzbz, app) VALUES ('UNKNOWN_ERROR', 'Fehler ist aufgetreten', 'error', 'core');
+ ";
+
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehler: '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_fehler: Tabelle hinzugefuegt';
+
+ // GRANT SELECT ON TABLE bis.tbl_issue TO web;
+ $qry = 'GRANT SELECT, UPDATE ON TABLE system.tbl_fehler TO web;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehler '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on system.tbl_fehler';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_issue TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_fehler TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehler '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on system.tbl_fehler';
+}
+
+// Add table fehler_zustaendigkeiten
+if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_fehler_zustaendigkeiten LIMIT 1;"))
+{
+ $qry = "CREATE TABLE system.tbl_fehler_zustaendigkeiten (
+ fehlerzustaendigkeiten_id character varying(64) NOT NULL,
+ fehlercode character varying(64) NOT NULL,
+ person_id integer,
+ oe_kurzbz character varying(32),
+ funktion_kurzbz character varying(16)
+ );
+
+ COMMENT ON TABLE system.tbl_fehler_zustaendigkeiten IS 'Tabelle zum Hinzufügen für Zuständigkeiten für einzelne Fehler';
+ COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.fehlercode IS 'Eindeutiger interner Fehlercode';
+ COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.person_id IS 'person_id der zuständigen Person';
+ COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.oe_kurzbz IS 'Zuständigkeit für einen fehlercode für eine ganze OE';
+ COMMENT ON COLUMN system.tbl_fehler_zustaendigkeiten.funktion_kurzbz IS 'Zusätzliche Einschränkung der OE Zuständigkeit nach funktion';
+
+ CREATE SEQUENCE system.seq_fehlerzustaendigkeiten_id
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ ALTER TABLE ONLY system.tbl_fehler_zustaendigkeiten ALTER COLUMN fehlerzustaendigkeiten_id SET DEFAULT nextval('system.seq_fehlerzustaendigkeiten_id'::regclass);
+
+ GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO vilesci;
+ GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO fhcomplete;
+
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT pk_tbl_fehler_zustaendigkeiten PRIMARY KEY (fehlerzustaendigkeiten_id);
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_fehlercode FOREIGN KEY (fehlercode) REFERENCES system.tbl_fehler(fehlercode) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_oe_kurzbz FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit(oe_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT fk_tbl_fehler_zustaendigkeiten_funktion_kurzbz FOREIGN KEY (funktion_kurzbz) REFERENCES public.tbl_funktion(funktion_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT uk_tbl_fehler_zustaendigkeiten_fehlercode_person_id UNIQUE (fehlercode, person_id);
+ ALTER TABLE system.tbl_fehler_zustaendigkeiten ADD CONSTRAINT uk_tbl_fehler_zustaendigkeiten_fehlercode_oe_kurzbz_funktion_kurzbz UNIQUE (fehlercode, oe_kurzbz, funktion_kurzbz);";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_fehler_zustaendigkeiten: '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_fehler_zustaendigkeiten: Tabelle hinzugefuegt';
+
+ // GRANT SELECT ON TABLE bis.tbl_issue TO web;
+ $qry = 'GRANT SELECT ON TABLE system.tbl_fehler_zustaendigkeiten TO web;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehler_zustaendigkeiten '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on system.tbl_fehler_zustaendigkeiten';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_issue TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_fehler_zustaendigkeiten TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_fehler_zustaendigkeiten '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on system.tbl_fehler_zustaendigkeiten';
+}
+
+// Add table issue
+if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue LIMIT 1;"))
+{
+ $qry = "CREATE TABLE system.tbl_issue (
+ issue_id integer,
+ fehlercode character varying(64) NOT NULL,
+ inhalt text,
+ fehlercode_extern character varying(64),
+ inhalt_extern text,
+ person_id integer,
+ oe_kurzbz character varying(32),
+ datum timestamp without time zone NOT NULL,
+ verarbeitetvon character varying(32),
+ verarbeitetamum timestamp without time zone,
+ status_kurzbz character varying(32) NOT NULL,
+ insertvon character varying(32),
+ insertamum timestamp without time zone DEFAULT now(),
+ updatevon character varying(32),
+ updateamum timestamp without time zone
+ );
+
+ COMMENT ON TABLE system.tbl_issue IS 'Tabelle zur Verfolgung von Problemen/Fehlern von verschiedenen Systemen';
+ COMMENT ON COLUMN system.tbl_issue.issue_id IS 'Primärschlüssel';
+ COMMENT ON COLUMN system.tbl_issue.fehlercode IS 'Identifikationscode des Problems/Fehlers, kann von anderem System kommen oder eigens definiert sein';
+ COMMENT ON COLUMN system.tbl_issue.inhalt IS 'Fehlertext';
+ COMMENT ON COLUMN system.tbl_issue.fehlercode_extern IS 'Externer, von App geschriebener Fehlercode. Zum Auseinanderhalten der externen Fehler, die nicht in tbl_fehler definiert sind.';
+ COMMENT ON COLUMN system.tbl_issue.inhalt_extern IS 'von externem System kommender Fehlermeldungstext';
+ COMMENT ON COLUMN system.tbl_issue.datum IS 'Tag und Zeit des Auftritts des Problems';
+ COMMENT ON COLUMN system.tbl_issue.verarbeitetvon IS 'uid des Nutzers, der das Problem verarbeitet hat';
+ COMMENT ON COLUMN system.tbl_issue.verarbeitetamum IS 'Tag und Zeit der Problemverarbeitung';
+ COMMENT ON COLUMN system.tbl_issue.person_id IS 'Id der Person, für welche das issue besteht';
+ COMMENT ON COLUMN system.tbl_issue.oe_kurzbz IS 'Betroffene Organisationseinheit';
+ COMMENT ON COLUMN system.tbl_issue.status_kurzbz IS 'Verarbeitsungsstatus';
+
+ CREATE SEQUENCE system.seq_issue_id
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ ALTER TABLE ONLY system.tbl_issue ALTER COLUMN issue_id SET DEFAULT nextval('system.seq_issue_id'::regclass);
+
+ GRANT SELECT, UPDATE ON SEQUENCE system.seq_issue_id TO vilesci;
+ GRANT SELECT, UPDATE ON SEQUENCE system.seq_issue_id TO fhcomplete;
+
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT pk_tbl_issue PRIMARY KEY (issue_id);
+
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_fehlercode FOREIGN KEY (fehlercode) REFERENCES system.tbl_fehler(fehlercode) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_verarbeitetvon FOREIGN KEY (verarbeitetvon) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT;
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT fk_tbl_issue_oe_kurzbz FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit(oe_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ ALTER TABLE system.tbl_issue ADD CONSTRAINT chk_tbl_issue_person_id_oe_kurzbz CHECK (person_id IS NOT NULL OR oe_kurzbz IS NOT NULL);
+
+ CREATE INDEX idx_tbl_issue_person_id ON system.tbl_issue USING btree (person_id);
+ CREATE INDEX idx_tbl_issue_oe_kurzbz ON system.tbl_issue USING btree (oe_kurzbz);";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_issue: '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_issue: Tabelle hinzugefuegt';
+
+ // GRANT SELECT ON TABLE bis.tbl_issue TO web;
+ $qry = 'GRANT SELECT, UPDATE ON TABLE system.tbl_issue TO web;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_issue '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on system.tbl_issue';
+
+ // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_issue TO vilesci;
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_issue TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'system.tbl_issue '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on system.tbl_issue';
+}
+
+// Add permission to manage issues
+if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'system/issues_verwalten';"))
+{
+ if($db->db_num_rows($result) == 0)
+ {
+ $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('system/issues_verwalten', 'Issues verwalten');";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_berechtigung '.$db->db_last_error().'
';
+ else
+ echo '
system.tbl_berechtigung: Added permission for system/issues_verwalten';
+ }
+}
+
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo 'Pruefe Tabellen und Attribute!
';
@@ -5045,6 +5496,7 @@ $tabellen=array(
"bis.tbl_bisfunktion" => array("bisverwendung_id","studiengang_kz","sws","updateamum","updatevon","insertamum","insertvon","ext_id"),
"bis.tbl_bisio" => array("bisio_id","mobilitaetsprogramm_code","nation_code","von","bis","zweck_code","student_uid","updateamum","updatevon","insertamum","insertvon","ext_id","ort","universitaet","lehreinheit_id","ects_erworben","ects_angerechnet"),
"bis.tbl_bisio_zweck" => array("bisio_id","zweck_code"),
+ "bis.tbl_bisstandort" => array("standort_code","bezeichnung","aktiv","insertamum","insertvon","updateamum","updatevon"),
"bis.tbl_bisverwendung" => array("bisverwendung_id","ba1code","ba2code","vertragsstunden","beschausmasscode","verwendung_code","mitarbeiter_uid","hauptberufcode","hauptberuflich","habilitation","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id","dv_art","inkludierte_lehre","zeitaufzeichnungspflichtig","azgrelevant", "homeoffice"),
"bis.tbl_bundesland" => array("bundesland_code","kurzbz","bezeichnung"),
"bis.tbl_entwicklungsteam" => array("mitarbeiter_uid","studiengang_kz","besqualcode","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id"),
@@ -5059,6 +5511,7 @@ $tabellen=array(
"bis.tbl_mobilitaetsprogramm" => array("mobilitaetsprogramm_code","kurzbz","beschreibung","sichtbar","sichtbar_outgoing"),
"bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz", "iso3166_1_a2","iso3166_1_a3"),
"bis.tbl_nationengruppe" => array("nationengruppe_kurzbz","nationengruppe_bezeichnung","aktiv"),
+ "bis.tbl_oehbeitrag" => array("oehbeitrag_id","studierendenbeitrag","versicherung","von_studiensemester_kurzbz","bis_studiensemester_kurzbz","insertamum","insertvon","updateamum","updatevon"),
"bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"),
"bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),
"bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung"),
@@ -5228,7 +5681,7 @@ $tabellen=array(
"public.tbl_ortraumtyp" => array("ort_kurzbz","hierarchie","raumtyp_kurzbz"),
"public.tbl_organisationseinheit" => array("oe_kurzbz", "oe_parent_kurzbz", "bezeichnung","organisationseinheittyp_kurzbz", "aktiv","mailverteiler","freigabegrenze","kurzzeichen","lehre","standort","warn_semesterstunden_frei","warn_semesterstunden_fix","standort_id"),
"public.tbl_organisationseinheittyp" => array("organisationseinheittyp_kurzbz", "bezeichnung", "beschreibung"),
- "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values","bpk"),
+ "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values","bpk","matr_aktiv"),
"public.tbl_person_fotostatus" => array("person_fotostatus_id","person_id","fotostatus_kurzbz","datum","insertamum","insertvon","updateamum","updatevon"),
"public.tbl_personfunktionstandort" => array("personfunktionstandort_id","funktion_kurzbz","person_id","standort_id","position","anrede"),
"public.tbl_preincoming" => array("preincoming_id","person_id","mobilitaetsprogramm_code","zweck_code","firma_id","universitaet","aktiv","bachelorthesis","masterthesis","von","bis","uebernommen","insertamum","insertvon","updateamum","updatevon","anmerkung","zgv","zgv_ort","zgv_datum","zgv_name","zgvmaster","zgvmaster_datum","zgvmaster_ort","zgvmaster_name","program_name","bachelor","master","jahre","person_id_emergency","person_id_coordinator_dep","person_id_coordinator_int","code","deutschkurs1","deutschkurs2","research_area","deutschkurs3","ext_id"),
@@ -5240,7 +5693,7 @@ $tabellen=array(
"public.tbl_preoutgoing_lehrveranstaltung" => array("preoutgoing_lehrveranstaltung_id","preoutgoing_id","bezeichnung","ects","endversion","insertamum","insertvon","updateamum","updatevon","wochenstunden","unitcode"),
"public.tbl_preoutgoing_preoutgoing_status" => array("status_id","preoutgoing_status_kurzbz","preoutgoing_id","datum","insertamum","insertvon","updateamum","updatevon"),
"public.tbl_preoutgoing_status" => array("preoutgoing_status_kurzbz","bezeichnung"),
- "public.tbl_prestudent" => array("prestudent_id","aufmerksamdurch_kurzbz","person_id","studiengang_kz","berufstaetigkeit_code","ausbildungcode","zgv_code","zgvort","zgvdatum","zgvmas_code","zgvmaort","zgvmadatum","aufnahmeschluessel","facheinschlberuf","reihungstest_id","anmeldungreihungstest","reihungstestangetreten","rt_gesamtpunkte","rt_punkte1","rt_punkte2","bismelden","anmerkung","dual","insertamum","insertvon","updateamum","updatevon","ext_id","ausstellungsstaat","rt_punkte3", "zgvdoktor_code", "zgvdoktorort", "zgvdoktordatum","mentor","zgvnation","zgvmanation","zgvdoktornation","gsstudientyp_kurzbz","aufnahmegruppe_kurzbz","udf_values","priorisierung"),
+ "public.tbl_prestudent" => array("prestudent_id","aufmerksamdurch_kurzbz","person_id","studiengang_kz","berufstaetigkeit_code","ausbildungcode","zgv_code","zgvort","zgvdatum","zgvmas_code","zgvmaort","zgvmadatum","aufnahmeschluessel","facheinschlberuf","reihungstest_id","anmeldungreihungstest","reihungstestangetreten","rt_gesamtpunkte","rt_punkte1","rt_punkte2","bismelden","anmerkung","dual","insertamum","insertvon","updateamum","updatevon","ext_id","ausstellungsstaat","rt_punkte3", "zgvdoktor_code", "zgvdoktorort", "zgvdoktordatum","mentor","zgvnation","zgvmanation","zgvdoktornation","gsstudientyp_kurzbz","aufnahmegruppe_kurzbz","udf_values","priorisierung","foerderrelevant","standort_code"),
"public.tbl_prestudentstatus" => array("prestudent_id","status_kurzbz","studiensemester_kurzbz","ausbildungssemester","datum","orgform_kurzbz","insertamum","insertvon","updateamum","updatevon","ext_id","studienplan_id","bestaetigtam","bestaetigtvon","fgm","faktiv", "anmerkung","bewerbung_abgeschicktamum","rt_stufe","statusgrund_id"),
"public.tbl_raumtyp" => array("raumtyp_kurzbz","beschreibung","kosten"),
"public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet","max_teilnehmer","oeffentlich","studiensemester_kurzbz","aufnahmegruppe_kurzbz","stufe","anmeldefrist"),
@@ -5257,7 +5710,7 @@ $tabellen=array(
"public.tbl_statistik" => array("statistik_kurzbz","bezeichnung","url","gruppe","sql","content_id","insertamum","insertvon","updateamum","updatevon","berechtigung_kurzbz","publish","preferences"),
"public.tbl_student" => array("student_uid","matrikelnr","prestudent_id","studiengang_kz","semester","verband","gruppe","updateamum","updatevon","insertamum","insertvon","ext_id"),
"public.tbl_studentlehrverband" => array("student_uid","studiensemester_kurzbz","studiengang_kz","semester","verband","gruppe","updateamum","updatevon","insertamum","insertvon","ext_id"),
- "public.tbl_studiengang" => array("studiengang_kz","kurzbz","kurzbzlang","typ","bezeichnung","english","farbe","email","telefon","max_semester","max_verband","max_gruppe","erhalter_kz","bescheid","bescheidbgbl1","bescheidbgbl2","bescheidgz","bescheidvom","orgform_kurzbz","titelbescheidvom","aktiv","ext_id","zusatzinfo_html","moodle","sprache","testtool_sprachwahl","studienplaetze","oe_kurzbz","lgartcode","mischform","projektarbeit_note_anzeige", "onlinebewerbung"),
+ "public.tbl_studiengang" => array("studiengang_kz","kurzbz","kurzbzlang","typ","bezeichnung","english","farbe","email","telefon","max_semester","max_verband","max_gruppe","erhalter_kz","bescheid","bescheidbgbl1","bescheidbgbl2","bescheidgz","bescheidvom","orgform_kurzbz","titelbescheidvom","aktiv","ext_id","zusatzinfo_html","moodle","sprache","testtool_sprachwahl","studienplaetze","oe_kurzbz","lgartcode","mischform","projektarbeit_note_anzeige", "onlinebewerbung","melderelevant","foerderrelevant","standort_code"),
"public.tbl_studiengangstyp" => array("typ","bezeichnung","beschreibung","bezeichnung_mehrsprachig"),
"public.tbl_studienjahr" => array("studienjahr_kurzbz","bezeichnung"),
"public.tbl_studiensemester" => array("studiensemester_kurzbz","bezeichnung","start","ende","studienjahr_kurzbz","ext_id","beschreibung","onlinebewerbung"),
@@ -5288,6 +5741,11 @@ $tabellen=array(
"system.tbl_benutzerrolle" => array("benutzerberechtigung_id","rolle_kurzbz","berechtigung_kurzbz","uid","funktion_kurzbz","oe_kurzbz","art","studiensemester_kurzbz","start","ende","negativ","updateamum", "updatevon","insertamum","insertvon","kostenstelle_id","anmerkung"),
"system.tbl_berechtigung" => array("berechtigung_kurzbz","beschreibung"),
"system.tbl_extensions" => array("extension_id","name","version","description","license","url","core_version","dependencies","enabled"),
+ "system.tbl_fehler" => array("fehlercode","fehler_kurzbz","fehlercode_extern","fehlertext","fehlertyp_kurzbz","app"),
+ "system.tbl_fehlertyp" => array("fehlertyp_kurzbz","bezeichnung_mehrsprachig"),
+ "system.tbl_fehler_zustaendigkeiten" => array("fehlerzustaendigkeiten_id","fehlercode","person_id","oe_kurzbz","funktion_kurzbz"),
+ "system.tbl_issue" => array("issue_id","fehlercode","fehlercode_extern","inhalt","inhalt_extern","person_id","oe_kurzbz","datum","verarbeitetvon","verarbeitetamum","status_kurzbz","insertvon","insertamum","updatevon","updateamum"),
+ "system.tbl_issue_status" => array("status_kurzbz","bezeichnung_mehrsprachig"),
"system.tbl_log" => array("log_id","person_id","zeitpunkt","app","oe_kurzbz","logtype_kurzbz","logdata","insertvon","taetigkeit_kurzbz"),
"system.tbl_logtype" => array("logtype_kurzbz", "data_schema"),
"system.tbl_filters" => array("filter_id","app","dataset_name","filter_kurzbz","person_id","description","sort","default_filter","filter","oe_kurzbz","statistik_kurzbz"),
diff --git a/system/filtersupdate.php b/system/filtersupdate.php
index b8da24937..2998640ed 100644
--- a/system/filtersupdate.php
+++ b/system/filtersupdate.php
@@ -856,6 +856,101 @@ $filters = array(
}
',
'oe_kurzbz' => null,
+ ),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'issues',
+ 'filter_kurzbz' => 'offeneFehler',
+ 'description' => '{Alle offenen}',
+ 'sort' => 1,
+ 'default_filter' => true,
+ 'filter' => '
+ {
+ "name": "Alle offenen Fehler",
+ "columns": [
+ {"name": "Datum"},
+ {"name": "Inhalt"},
+ {"name": "Vorname"},
+ {"name": "Nachname"},
+ {"name": "PersonId"},
+ {"name": "Fehlerstatus"}
+ ],
+ "filters": [
+ {
+ "name": "Fehlerstatus",
+ "operation": "ncontains",
+ "condition": "behoben"
+ }
+ ]
+ }
+ ',
+ 'oe_kurzbz' => null,
+ ),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'issues',
+ 'filter_kurzbz' => 'FehlerLetze7Tage',
+ 'description' => '{Letzten 7 Tage}',
+ 'sort' => 2,
+ 'default_filter' => false,
+ 'filter' => '
+ {
+ "name": "Alle in den letzten 7 Tagen aufgetretenen Fehler",
+ "columns": [
+ {"name": "Datum"},
+ {"name": "Inhalt"},
+ {"name": "Vorname"},
+ {"name": "Nachname"},
+ {"name": "PersonId"},
+ {"name": "Fehlerstatus"}
+ ],
+ "filters": [
+ {
+ "name": "Datum",
+ "operation": "lt",
+ "condition": "7",
+ "option": "days"
+ }
+ ]
+ }
+ ',
+ 'oe_kurzbz' => null,
+ ),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'issues',
+ 'filter_kurzbz' => 'FehlerLetzte7TageBearbeitet',
+ 'description' => '{Letzten 7 Tage bearbeitet}',
+ 'sort' => 3,
+ 'default_filter' => false,
+ 'filter' => '
+ {
+ "name": "Alle in den letzten 7 Tagen bearbeiteten Fehler",
+ "columns": [
+ {"name": "Datum"},
+ {"name": "Inhalt"},
+ {"name": "Vorname"},
+ {"name": "Nachname"},
+ {"name": "PersonId"},
+ {"name": "Fehlerstatus"},
+ {"name": "Verarbeitet von"}
+ ],
+ "filters": [
+ {
+ "name": "Verarbeitet am",
+ "operation": "lt",
+ "condition": "7",
+ "option": "days"
+ },
+ {
+ "name": "Fehlerstatus",
+ "operation": "contains",
+ "condition": "behoben"
+ }
+ ]
+ }
+ ',
+ 'oe_kurzbz' => null,
)
);
diff --git a/vilesci/personen/import/interessentenimport.php b/vilesci/personen/import/interessentenimport.php
index a6f77bf6e..8198a3291 100644
--- a/vilesci/personen/import/interessentenimport.php
+++ b/vilesci/personen/import/interessentenimport.php
@@ -720,6 +720,10 @@ if (isset($_POST['save']))
$prestudent->reihungstestangetreten = false;
$prestudent->bismelden = true;
+ // Incomings und ausserordentliche sind bei Meldung nicht förderrelevant
+ if ($incoming === true || substr($studiengang_kz, 0, 1) == '9')
+ $prestudent->foerderrelevant = false;
+
//Wenn die Person schon im System erfasst ist, dann die ZGV des Datensatzes uebernehmen
$qry_zgv = "
SELECT
diff --git a/vilesci/stammdaten/studiengang_details.php b/vilesci/stammdaten/studiengang_details.php
index 8ddcceb77..46915f52e 100644
--- a/vilesci/stammdaten/studiengang_details.php
+++ b/vilesci/stammdaten/studiengang_details.php
@@ -89,6 +89,9 @@ $testtool_sprachwahl = false;
$studienplaetze = '';
$orgform_kurzbz = '';
$lgartcode='';
+$melderelevant = false;
+$foerderrelevant = false;
+$standort_code='';
$schick = filter_input(INPUT_POST, 'schick');
$onlinebewerbung = false;
@@ -149,6 +152,9 @@ if($schick)
$aktiv = filter_input(INPUT_POST, 'aktiv', FILTER_VALIDATE_BOOLEAN);
$onlinebewerbung = filter_input(INPUT_POST, 'onlinebewerbung', FILTER_VALIDATE_BOOLEAN);
$mischform = filter_input(INPUT_POST, 'mischform', FILTER_VALIDATE_BOOLEAN);
+ $melderelevant = filter_input(INPUT_POST, 'melderelevant', FILTER_VALIDATE_BOOLEAN);
+ $foerderrelevant = filter_input(INPUT_POST, 'foerderrelevant', FILTER_VALIDATE_BOOLEAN);
+ $standort_code = filter_input(INPUT_POST, 'standort_code');
$ext_id = filter_input(INPUT_POST, 'ext_id');
@@ -214,6 +220,9 @@ if($schick)
$sg_update->studienplaetze = $studienplaetze;
$sg_update->orgform_kurzbz = $orgform_kurzbz;
$sg_update->lgartcode = $lgartcode;
+ $sg_update->melderelevant = $melderelevant;
+ $sg_update->foerderrelevant = $foerderrelevant;
+ $sg_update->standort_code = $standort_code;
$sg_update->bescheidvom=$date->formatDatum($sg_update->bescheidvom,'Y-m-d');
$sg_update->titelbescheidvom=$date->formatDatum($sg_update->titelbescheidvom,'Y-m-d');
@@ -280,6 +289,9 @@ if ((isset($_REQUEST['studiengang_kz'])) && ((!isset($_REQUEST['neu'])) || ($_RE
$studienplaetze = $sg->studienplaetze;
$orgform_kurzbz = $sg->orgform_kurzbz;
$lgartcode = $sg->lgartcode;
+ $melderelevant = $sg->melderelevant;
+ $foerderrelevant = $sg->foerderrelevant;
+ $standort_code = $sg->standort_code;
}
$erh = new erhalter();
@@ -555,6 +567,46 @@ if (!$erh->getAll('kurzbz'))
+
+ | Standort |
+
+
+ |
+
+
+ | Melderelevant |
+
+
+ onchange="submitable()">
+ |
+
+
+ | Förderrelevant |
+
+
+ onchange="submitable()">
+ |
+
|