Merge branch 'master' into feature-25562/PV21_Datenbankstruktur_fuer_Vertraege_und_Gehaelter

This commit is contained in:
Harald Bamberger
2023-06-22 12:54:48 +02:00
79 changed files with 2554 additions and 487 deletions
+109 -79
View File
@@ -6,7 +6,6 @@ $ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_
// all oes for which logged user has issues permissions, including permissions for "special" issue funktion
$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')";
$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')";
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
// get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes
$query = "WITH zustaendigkeiten AS (
@@ -34,73 +33,97 @@ $query = "WITH zustaendigkeiten AS (
FROM system.tbl_fehler_zustaendigkeiten zst
)";
$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
(
/* show all relevant Studiengänge of person and wether it is an employee*/
SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
|| (CASE WHEN EXISTS (
SELECT 1 FROM public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
WHERE person_id = prestudents.person_id
AND ben.aktiv
) THEN ' | Mitarbeiter' ELSE '' END)
FROM (
SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
FROM public.tbl_prestudent ps
JOIN public.tbl_studiengang stg USING (studiengang_kz)
WHERE person_id = pers.person_id
ORDER BY prestudent_id DESC
) prestudents
WHERE last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
GROUP BY person_id
LIMIT 1;
) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\",
(
SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
FROM system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
FROM system.tbl_fehler_zustaendigkeiten
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Organisationseinheit Zuständigkeiten\",
pers.bpk AS \"BPK\",
pers.matr_nr AS \"Matrikelnummer\"
FROM system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
$query .= "
SELECT
issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\",
stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
(
/* show all relevant Studiengänge of person and wether it is an employee*/
SELECT
STRING_AGG(studiengang || ' ' || last_status, ' | ')
|| (CASE WHEN EXISTS (
SELECT 1 FROM public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
WHERE person_id = prestudents.person_id
AND ben.aktiv
) THEN ' | Mitarbeiter' ELSE '' END)
FROM (
SELECT
DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang,
get_rolle_prestudent(ps.prestudent_id, null) AS last_status
FROM
public.tbl_prestudent ps
JOIN public.tbl_studiengang stg USING (studiengang_kz)
WHERE
person_id = pers.person_id
ORDER BY
prestudent_id DESC
) prestudents
WHERE
last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
GROUP BY
person_id
LIMIT 1;
) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\",
(
SELECT
string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
FROM
system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE
fehlercode = fr.fehlercode
GROUP BY
fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT
string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung ||
COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
FROM
system.tbl_fehler_zustaendigkeiten
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE
fehlercode = fr.fehlercode
GROUP BY
fehlercode
) AS \"Organisationseinheit Zuständigkeiten\",
pers.bpk AS \"BPK\",
pers.matr_nr AS \"Matrikelnummer\"
FROM
system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE
fr.app IN ('core', 'dvuh')
AND (
EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
// show issue if it is assigend to oe of logged in user or to student of oe of logged in user
if (!isEmptyArray($all_oe_kurzbz_berechtigt))
@@ -131,6 +154,7 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
)
)";
}
$query .= ") ";
$query .= " ORDER BY
CASE
@@ -146,17 +170,18 @@ $query .= " ORDER BY
datum DESC, fehlercode, issue_id DESC";
$filterWidgetArray = array(
'query' => $query,
'query' => $query,
'app' => 'core',
'datasetName' => 'issues',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issues',
'requiredPermissions' => 'system/issues_verwalten',
'datasetRepresentation' => 'tablesorter',
'tableUniqueId' => 'issues',
'requiredPermissions' => 'system/issues_verwalten',
'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'issue_id',
'columnsAliases' => array(
'ID',
'columnsAliases' => array(
'ID',
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')),
ucfirst($this->p->t('global', 'datum')),
ucfirst($this->p->t('fehlermonitoring', 'inhalt')),
@@ -176,10 +201,15 @@ $filterWidgetArray = array(
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten')),
'BPK',
'Matrikelnummer'
),
'formatRow' => function($datasetRaw) {
'BPK',
'Matrikelnummer'
),
'formatRow' => function ($datasetRaw) {
if ($datasetRaw->{'Fehler Kurzbezeichnung'} == null)
{
$datasetRaw->{'Fehler Kurzbezeichnung'} = '-';
}
if ($datasetRaw->{'Fehlercode extern'} == null)
{
@@ -238,7 +268,7 @@ $filterWidgetArray = array(
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
'markRow' => function ($datasetRaw) {
$mark = '';
@@ -0,0 +1,197 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Fehler Konfiguration',
'jquery3' => true,
'jqueryui1' => true,
'jquerycheckboxes1' => true,
'bootstrap3' => true,
'fontawesome4' => true,
'sbadmintemplate3' => true,
'tablesorter2' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'ui',
'fehlermonitoring'
),
'customCSSs' => array('public/css/issues/issuesKonfiguration.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
'customJSs' => array('public/js/issues/issuesKonfiguration.js', 'public/js/bootstrapper.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('fehlermonitoring', 'fehlerKonfiguration') ?>
</h3>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="panel panel-default">
<table class="table table-bordered" id="fehlercodeSelectTable">
<tr>
<td>
<label for="fehlerappSelect">App</label>
<select class="form-control" name="fehlerappSelect" id="fehlerappSelect">
</select>
</td>
</tr>
</table>
</div>
</div>
<div class="col-lg-8">
<div class="panel panel-default">
<table class="table table-bordered">
<tr>
<td class="tableCellNoRightBorder">
<label for="konfigSelect"><?php echo $this->p->t('fehlermonitoring', 'konfigurationstyp') ?></label>
<select class="form-control" name="konfigSelect" id="konfigSelect">
</select>
<i class="fa fa-info-circle" id="konfigurationstypInfoIcon"></i>
</td>
<td class="tableCellNoLeftBorder">
<label for="fehlercodeSelect"><?php echo $this->p->t('fehlermonitoring', 'fehlercode') ?></label>
<select class="form-control" name="fehlercodeSelect" id="fehlercodeSelect">
</select>
<i class="fa fa-info-circle" id="fehlercodeInfoIcon"></i>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 text-center">
<div class="input-group">
<input type="text" class="form-control" name="konfigurationsWert" id="konfigurationsWert"
placeholder="<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertPlatzhalter') ?>">
<div class="input-group-btn">
<button class="btn btn-default" id="assignKonfiguration">
<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertZuweisen') ?>
</button>
</div>
</div>
</div>
</div>
<br>
<div>
<?php $this->load->view('system/issues/issuesKonfigurationData.php'); ?>
</div>
<div class="modal fade" id="fehlerInfo" tabindex="-1"
role="dialog"
aria-labelledby="fehlerInfoLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title" id="fehlerInfoLabel">
</h4>
</div>
<div class="modal-body" id="fehlerInfoContent">
<table class="table table-condensed table-bordered">
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlercode')) ?></b>
</td>
<td>
<span id="fehlercodeInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')) ?></b>
</td>
<td>
<span id="fehlerkurzbzInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')) ?></b>
</td>
<td>
<span id="fehlertypInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertext')) ?></b>
</td>
<td>
<span id="fehlertextInfo"></span>
</td>
</tr>
</table>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
<div class="modal fade" id="konfigurationsInfo" tabindex="-1"
role="dialog"
aria-labelledby="konfigurationstypInfoLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title" id="konfigurationstypInfoLabel">
</h4>
</div>
<div class="modal-body" id="konfigurationstypInfoContent">
<table class="table table-condensed table-bordered">
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')) ?></b>
</td>
<td>
<span id="konfigurationstypInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')) ?></b>
</td>
<td>
<span id="konfigurationsbeschreibungInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')) ?></b>
</td>
<td>
<span id="konfigurationsdatentypInfo"></span>
</td>
</tr>
</table>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,56 @@
<?php
// get assigned Konfiguration
$query = "SELECT
konftyp.konfigurationstyp_kurzbz, fe.fehlercode, fe.fehler_kurzbz, konf.konfiguration, fe.app,
konftyp.beschreibung AS konfigurationsbeschreibung, konftyp.konfigurationsdatentyp, fe.fehlertext
FROM
system.tbl_fehler_konfiguration konf
JOIN system.tbl_fehler_konfigurationstyp konftyp USING (konfigurationstyp_kurzbz)
JOIN system.tbl_fehler fe USING (fehlercode)
ORDER BY
konf.konfigurationstyp_kurzbz, fe.fehlercode";
$filterWidgetArray = array(
'query' => $query,
'app' => 'core',
'datasetName' => 'fehlerKonfiguration',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issuesKonfiguration',
'requiredPermissions' => 'admin',
'datasetRepresentation' => 'tablesorter',
'additionalColumns' => array('Delete'),
'columnsAliases' => array(
ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'konfigurationswert')),
'Application',
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')),
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')),
ucfirst($this->p->t('fehlermonitoring', 'fehlertext')),
),
'formatRow' => function($datasetRaw) {
$datasetRaw->{'Delete'} =
"<button
data-konfigurationstyp-kurzbz='".$datasetRaw->{'konfigurationstyp_kurzbz'}."'
data-fehlercode='".$datasetRaw->{'fehlercode'}."'
class='btn btn-default deleteBtn'>"
.ucfirst($this->p->t('ui', 'loeschen'))."</button>";
if ($datasetRaw->{'konfigurationsbeschreibung'} == null)
{
$datasetRaw->{'konfigurationsbeschreibung'} = '-';
}
if ($datasetRaw->{'fehlertext'} == null)
{
$datasetRaw->{'fehlertext'} = '-';
}
return $datasetRaw;
}
);
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
@@ -71,9 +71,9 @@ $this->load->view(
<label>Fehler</label>
<select class="form-control" name="fehler_kurzbz" id="fehler_kurzbz">
<option value="" selected="selected">Alle</option>';
<?php foreach ($fehler as $fehler_kurzbz):?>
<?php foreach ($fehlerKurzbzCodeMappings as $fehler_kurzbz => $fehlercode):?>
<option value="<?php echo $fehler_kurzbz ?>">
<?php echo $fehler_kurzbz ?>
<?php echo $fehler_kurzbz.' ('.$fehlercode.')' ?>
</option>
<?php endforeach; ?>
</select>