mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-11 17:19:29 +00:00
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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älte setzen</button>' +
|
||||
'<button class="btn btn-default setStatus">Status für Ausgewählte setzen</button>' +
|
||||
'</span>' +
|
||||
'</div>';
|
||||
|
||||
|
||||
+71
-11
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user