From 4c21d5364c282d158f143efbbecd084fa8910ef7 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 21 Sep 2021 00:58:29 +0200 Subject: [PATCH] - added issue management functionality - adding, and displaying issues with filter widget. --- application/config/navigation.php | 7 + .../controllers/system/issues/Issues.php | 120 +++++++ application/libraries/IssuesLib.php | 231 +++++++++++++ application/models/system/Fehler_model.php | 14 + application/models/system/Issue_model.php | 51 +++ application/views/system/issues/issues.php | 48 +++ .../views/system/issues/issuesData.php | 161 +++++++++ public/css/issues/issuesDataset.css | 8 + public/js/issues/issuesDataset.js | 151 ++++++++ system/dbupdate_3.3.php | 322 +++++++++++++++--- system/filtersupdate.php | 37 +- 11 files changed, 1102 insertions(+), 48 deletions(-) create mode 100644 application/controllers/system/issues/Issues.php create mode 100644 application/libraries/IssuesLib.php create mode 100644 application/models/system/Fehler_model.php create mode 100644 application/models/system/Issue_model.php create mode 100644 application/views/system/issues/issues.php create mode 100644 application/views/system/issues/issuesData.php create mode 100644 public/css/issues/issuesDataset.css create mode 100644 public/js/issues/issuesDataset.js diff --git a/application/config/navigation.php b/application/config/navigation.php index 42d9b94e1..b788dc40c 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -133,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/system/issues/Issues.php b/application/controllers/system/issues/Issues.php new file mode 100644 index 000000000..9ae390418 --- /dev/null +++ b/application/controllers/system/issues/Issues.php @@ -0,0 +1,120 @@ + array(self::BERECHTIGUNG_KURZBZ.':r'), + 'changeIssueStatus' => array(self::BERECHTIGUNG_KURZBZ.':r') + ) + ); + + // 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->_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_oe_kurzbz_with_funktionen = 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_oe_kurzbz_with_funktionen[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz; + if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ) // separate oes for the funktion needed for displaying issues + $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz; + } + } + + // add oes for which there is the issues_verwalten 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_oe_kurzbz_with_funktionen' => $all_oe_kurzbz_with_funktionen, + 'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt + ); + } +} diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php new file mode 100644 index 000000000..ade2c6078 --- /dev/null +++ b/application/libraries/IssuesLib.php @@ -0,0 +1,231 @@ +_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 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 sprint replace of error text in system.tbl_fehler + * @return object success or error + */ + public function addExternalIssue($fehlercode_extern, $inhalt_extern, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null) + { + 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; + + // check if there is a predefined custom error for the external issue + if (hasData($fehlerRes)) + { + // if found, use the code + $fehlercode = getData($fehlerRes)[0]->fehlercode; + } + 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 array|stdClass + */ + 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 nicht gefunden"); + } +} 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/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..82e6fa409 --- /dev/null +++ b/application/views/system/issues/issuesData.php @@ -0,0 +1,161 @@ + $funktionen_kurzbz) + { + foreach ($funktionen_kurzbz as $funktion_kurzbz) + { + $query .= " OR (oe_kurzbz = '$oe_kurzbz' AND funktion_kurzbz = '$funktion_kurzbz')"; + } + } +} + +$query .= "))"; // close AND of exists, and exists + +// show issue if it is assigend to oe of uid or to student of oe of uid +if (!isEmptyArray($all_oe_kurzbz_berechtigt)) +{ + $query .= " OR oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if error is for studiengang oe */"; + + $query .= " OR (oe_kurzbz IS NULL AND EXISTS ( /* if person_id of error 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 + FROM public.tbl_prestudentstatus ps_finished + WHERE prestudent_id = ps.prestudent_id /* irrelevant if already finished studies and studied a while ago */ + 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, their oe should get the issue */ + JOIN public.tbl_prestudentstatus USING (prestudent_id) + WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS + AND person_id = ps.person_id + AND prestudent_id <> ps_finished.prestudent_id + AND datum::date >= ps_finished.datum::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, 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', + ), + '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/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/issues/issuesDataset.js b/public/js/issues/issuesDataset.js new file mode 100644 index 000000000..385a1d0ed --- /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/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 415c00e65..7707a22a5 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5076,67 +5076,291 @@ if (!$result = @$db->db_query("SELECT foerderrelevant, standort_code FROM public echo '
public.tbl_prestudent: Neue Spalten foerderrelevant, standort_code hinzugefuegt.'; } -// Add table issues -if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issues LIMIT 1;")) +// App 'dvuh' hinzufügen +if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='dvuh'")) { - $qry = "CREATE TABLE system.tbl_issues ( - id integer NOT NULL, - app character varying(32), - inhalt text, - datum timestamp without time zone NOT NULL, - verarbeitetvon character varying(32), - verarbeitetamum timestamp without time zone, - fehlercode character varying(64) NOT NULL, - person_id integer, - oe_kurzbz character varying(32), - status character varying(32) NOT NULL, - schweregrad 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 + 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_issues IS 'Tabelle zur Verfolgung von Problemen/Fehlern von verschiedenen Systemen'; - COMMENT ON COLUMN system.tbl_issues.id IS 'Primärschlüssel'; - COMMENT ON COLUMN system.tbl_issues.app IS 'Ursprungsapp des Problems'; - COMMENT ON COLUMN system.tbl_issues.inhalt IS 'Beschreibungstext, Fehlertext'; - COMMENT ON COLUMN system.tbl_issues.datum IS 'Tag und Zeit des Auftritts des Problems'; - COMMENT ON COLUMN system.tbl_issues.verarbeitetvon IS 'uid des Nutzers, der das Problem verarbeitet hat'; - COMMENT ON COLUMN system.tbl_issues.verarbeitetamum IS 'Tag und Zeit der Problemverarbeitung'; - COMMENT ON COLUMN system.tbl_issues.fehlercode IS 'Identifikationscode des Problems/Fehlers, kann von anderem System kommen oder eigens definiert sein'; - COMMENT ON COLUMN system.tbl_issues.person_id IS 'Id der betreffenden Person'; - COMMENT ON COLUMN system.tbl_issues.oe_kurzbz IS 'Betroffene Organisationseinheit'; - COMMENT ON COLUMN system.tbl_issues.status IS 'Verarbeitsungsstatus'; + 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); - CREATE SEQUENCE system.seq_issues_id + 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), + 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_issues ALTER COLUMN id SET DEFAULT nextval('system.seq_jobsqueue_jobid'::regclass); + 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_issues_id TO vilesci; - GRANT SELECT, UPDATE ON SEQUENCE system.seq_issues_id TO fhcomplete; - - ALTER TABLE system.tbl_issues ADD CONSTRAINT pk_issues PRIMARY KEY (id); - - ALTER TABLE system.tbl_issues ADD CONSTRAINT fk_issues_app FOREIGN KEY (app) REFERENCES system.tbl_app(app) ON UPDATE CASCADE ON DELETE RESTRICT; - ALTER TABLE system.tbl_issues ADD CONSTRAINT fk_issues_verarbeitetvon FOREIGN KEY (verarbeitetvon) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT; - ALTER TABLE system.tbl_issues ADD CONSTRAINT fk_issues_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT; - ALTER TABLE system.tbl_issues ADD CONSTRAINT fk_issues_oe_kurzbz FOREIGN KEY (oe_kurzbz) REFERENCES public.tbl_organisationseinheit(oe_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; - - ALTER TABLE system.tbl_issues ADD CONSTRAINT chk_issues_person_id_oe_kurzbz CHECK (person_id IS NOT NULL OR oe_kurzbz IS NOT NULL); + GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO vilesci; + GRANT SELECT, UPDATE ON SEQUENCE system.seq_fehlerzustaendigkeiten_id TO fhcomplete; - CREATE INDEX idx_tbl_issues_person_id ON system.tbl_issues USING btree (person_id); - CREATE INDEX idx_tbl_issues_oe_kurzbz ON system.tbl_issues USING btree (oe_kurzbz);"; + 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_issues: '.$db->db_last_error().'
'; + echo 'system.tbl_fehler_zustaendigkeiten: '.$db->db_last_error().'
'; else - echo ' system.tbl_issues: Tabelle hinzugefuegt
'; + 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 @@ -5400,7 +5624,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_issues" => array("id","app","inhalt","datum","verarbeitetvon","verarbeitetamum","fehlercode","person_id","oe_kurzbz","status","insertvon","insertamum","updatevon","updateamum"), + "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 77e0c3e3a..037d303eb 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -856,7 +856,42 @@ $filters = array( } ', 'oe_kurzbz' => null, - ) + ), + array( + 'app' => 'core', + 'dataset_name' => 'issues', + 'filter_kurzbz' => 'last7Days', + 'description' => '{Fehler letzte 7 Tage}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Alle in den letzten 7 Tagen aufgetretenen Fehler ", + "columns": [ + {"name": "Fehlercode"}, + {"name": "Fehlercode extern"}, + {"name": "Datum"}, + {"name": "Inhalt"}, + {"name": "Inhalt extern"}, + {"name": "PersonId"}, + {"name": "OE"}, + {"name": "Fehlertyp"}, + {"name": "Fehlerstatus"}, + {"name": "Verarbeitet von"}, + {"name": "Verarbeitet am"} + ], + "filters": [ + { + "name": "Datum", + "operation": "lt", + "condition": "7", + "option": "days" + } + ] + } + ', + 'oe_kurzbz' => null, + ), ); // Loop through the filters array