issues table dataset:

- made more readable for assistance (added vorname, nachname, removed some fields)
- added default filters (all new, last 7 days...)
- issues displayed for children oes of permitted arrays as well
- query: more exact check for prestudents future status by using studiensemester start date
- typo fixes
This commit is contained in:
KarpAlex
2021-09-28 15:57:27 +02:00
parent 76f3afdda5
commit cb3f3723ae
5 changed files with 135 additions and 29 deletions
@@ -14,7 +14,7 @@ class Issues extends Auth_Controller
parent::__construct(
array(
'index' => array(self::BERECHTIGUNG_KURZBZ.':r'),
'changeIssueStatus' => array(self::BERECHTIGUNG_KURZBZ.':r')
'changeIssueStatus' => array(self::BERECHTIGUNG_KURZBZ.':rw')
)
);
@@ -33,6 +33,7 @@ class Issues extends Auth_Controller
// Load models
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
$this->_setAuthUID(); // sets property uid
}
@@ -101,8 +102,28 @@ class Issues extends Auth_Controller
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
// separate oes for the funktion needed for displaying issues
if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ)
{
$oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz;
$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;
}
}
}
}
}
+20 -7
View File
@@ -72,7 +72,7 @@ class IssuesLib
return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params);
}
else
return error("Fehler nicht gefunden");
return error("Fehler $fehler_kurzbz nicht gefunden");
}
/**
@@ -81,26 +81,39 @@ class IssuesLib
* @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
* @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)
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));
$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 = getData($fehlerRes)[0]->fehlercode;
$fehlercode = $fehlerData->fehlercode;
}
elseif ($force_predefined === true)
{
// only added if predefined
return success("No definition found - not added");
}
else
{
@@ -180,7 +193,7 @@ class IssuesLib
* @param array $fehlertext_params
* @param string $fehlercode_extern
* @param string $inhalt_extern
* @return array|stdClass
* @return object success or error
*/
private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $fehlercode_extern = null, $inhalt_extern = null)
{
@@ -226,6 +239,6 @@ class IssuesLib
return error("Anzahl offener Issues konnte nicht ermittelt werden.");
}
else
return error("Fehler nicht gefunden");
return error("Fehler $fehlercode nicht gefunden");
}
}
+20 -8
View File
@@ -10,27 +10,29 @@ $query = "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern A
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[1] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[1] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz as \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\"
fr.fehlertyp_kurzbz as \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\"
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 (
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten zst
WHERE fehlercode = iss.fehlercode
AND (
person_id = ".$PERSON_ID." /* person_id in fehler_zustaendigkeit for individual persons */";
if (!isEmptyArray($all_oe_kurzbz_with_funktionen))
{
$query .= " OR (oe_kurzbz IN $ALL_OE_KURZBZ AND funktion_kurzbz IS NULL) /* if oe is specified in fehler_zustaendigkeiten */";
$query .= " OR (zst.oe_kurzbz IN $ALL_OE_KURZBZ AND zst.funktion_kurzbz IS NULL) /* if oe is specified in fehler_zustaendigkeiten */";
// check for each oe for each function if zustaendig
foreach ($all_oe_kurzbz_with_funktionen as $oe_kurzbz => $funktionen_kurzbz)
{
foreach ($funktionen_kurzbz as $funktion_kurzbz)
{
$query .= " OR (oe_kurzbz = '$oe_kurzbz' AND funktion_kurzbz = '$funktion_kurzbz')";
$query .= " OR (zst.oe_kurzbz = '$oe_kurzbz' AND zst.funktion_kurzbz = '$funktion_kurzbz')";
}
}
}
@@ -40,9 +42,9 @@ $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 iss.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 */
$query .= " OR (iss.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)
@@ -51,15 +53,17 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
AND NOT EXISTS (SELECT 1
FROM public.tbl_prestudentstatus ps_finished
JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz)
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)
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 datum::date >= ps_finished.datum::date)
AND tbl_studiensemester.start::date > sem_finished.start::date)
)
)
)";
@@ -69,7 +73,13 @@ $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";
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,
@@ -96,6 +106,8 @@ $filterWidgetArray = array(
'Applikation',
'Fehlertypcode',
'Statuscode',
'Vorname',
'Nachname'
),
'formatRow' => function($datasetRaw) {
+1 -1
View File
@@ -17,7 +17,7 @@ var IssuesDataset = {
'<option value="new"> Neu </option>' +
'</select>' +
'<span class="input-group-btn">' +
'<button class="btn btn-default setStatus">Status für Ausgew&auml;lte setzen</button>' +
'<button class="btn btn-default setStatus">Status für Ausgew&auml;hlte setzen</button>' +
'</span>' +
'</div>';
+71 -11
View File
@@ -860,25 +860,49 @@ $filters = array(
array(
'app' => 'core',
'dataset_name' => 'issues',
'filter_kurzbz' => 'last7Days',
'description' => '{Fehler letzte 7 Tage}',
'filter_kurzbz' => 'offeneFehler',
'description' => '{Alle offenen}',
'sort' => 1,
'default_filter' => true,
'filter' => '
{
"name": "Alle in den letzten 7 Tagen aufgetretenen Fehler ",
"name": "Alle offenen Fehler",
"columns": [
{"name": "Fehlercode"},
{"name": "Fehlercode extern"},
{"name": "Datum"},
{"name": "Inhalt"},
{"name": "Inhalt extern"},
{"name": "Vorname"},
{"name": "Nachname"},
{"name": "PersonId"},
{"name": "OE"},
{"name": "Fehlertyp"},
{"name": "Fehlerstatus"},
{"name": "Verarbeitet von"},
{"name": "Verarbeitet am"}
{"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": [
{
@@ -892,6 +916,42 @@ $filters = array(
',
'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,
)
);
// Loop through the filters array