diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php
index 9ae390418..98787f703 100644
--- a/application/controllers/system/issues/Issues.php
+++ b/application/controllers/system/issues/Issues.php
@@ -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;
+ }
+ }
+ }
}
}
diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php
index ade2c6078..1b06db333 100644
--- a/application/libraries/IssuesLib.php
+++ b/application/libraries/IssuesLib.php
@@ -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");
}
}
diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php
index 82e6fa409..2b4551603 100644
--- a/application/views/system/issues/issuesData.php
+++ b/application/views/system/issues/issuesData.php
@@ -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) {
diff --git a/public/js/issues/issuesDataset.js b/public/js/issues/issuesDataset.js
index 385a1d0ed..b102a3f96 100644
--- a/public/js/issues/issuesDataset.js
+++ b/public/js/issues/issuesDataset.js
@@ -17,7 +17,7 @@ var IssuesDataset = {
'' +
'' +
'' +
- '' +
+ '' +
'' +
'';
diff --git a/system/filtersupdate.php b/system/filtersupdate.php
index b5662492c..2998640ed 100644
--- a/system/filtersupdate.php
+++ b/system/filtersupdate.php
@@ -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