Issues: added possibility to display issues only when user is hauptzustaendig

This commit is contained in:
Alexei Karpenko
2025-12-18 15:19:02 +01:00
parent 2d71a436f6
commit 3e77d80d26
7 changed files with 156 additions and 27 deletions
@@ -12,6 +12,67 @@ class Fehlerzustaendigkeiten_model extends DB_Model
$this->pk = 'fehlerzustaendigkeiten_id';
}
/**
* Get all Fehler for which user is hauptzuständig (is in charge).
* @return object success or error
*/
public function getFehlerForUserHauptzustaendig()
{
$params = [getAuthPersonId()];
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
// get oes of uid for which there is a current funktion
$all_funktionen_oe_kurzbz = array();
$benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid(getAuthUID(), null, date('Y-m-d'), date('Y-m-d'));
if (isError($benutzerfunktionRes)) return $benutzerfunktionRes;
if (hasData($benutzerfunktionRes))
{
foreach (getData($benutzerfunktionRes) as $benutzerfunktion)
{
$all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz;
}
}
$query = "WITH zustaendigkeiten AS (
SELECT fehlercode,
CASE
WHEN zst.person_id = ?";
if (!isEmptyArray($all_funktionen_oe_kurzbz))
{
$params[] = array_keys($all_funktionen_oe_kurzbz);
$query .= " OR (zst.oe_kurzbz IN ? AND zst.funktion_kurzbz IS NULL) /* if oe is specified in fehler_zustaendigkeiten */";
// check for each oe for each function if zustaendig
foreach ($all_funktionen_oe_kurzbz as $oe_kurzbz => $funktionen_kurzbz)
{
foreach ($funktionen_kurzbz as $funktion_kurzbz)
{
$query .= " OR (zst.oe_kurzbz = '$oe_kurzbz' AND zst.funktion_kurzbz = '$funktion_kurzbz')";
}
}
}
$query .= " THEN TRUE
ELSE FALSE
END AS \"zustaendig\"
FROM system.tbl_fehler_zustaendigkeiten zst
)
SELECT
fehler.fehler_kurzbz, fehler.fehlercode
FROM
system.tbl_fehler fehler
LEFT JOIN zustaendigkeiten USING(fehlercode)
WHERE
zustaendigkeiten.fehlercode IS NULL
OR zustaendigkeiten.zustaendig = TRUE";
return $this->execReadOnlyQuery($query, $params);
}
/**
* Gets active Mitarbeiter not assigned to a Fehler.
* @param $fehlercode
+43 -7
View File
@@ -20,7 +20,7 @@ class Issue_model extends DB_Model
* @param string $fehlercode_extern
* @return object success with issues or error
*/
public function getOpenIssues($fehlercodes, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null)
public function getOpenIssues($fehlercodes, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null, $hauptzustaendig = false)
{
// issue exists for a fehlercode (or fehlercode_extern), person_id, oe_kurzbz, if not verarbeitet yet
return $this->_getIssues(
@@ -31,7 +31,8 @@ class Issue_model extends DB_Model
$ist_verarbeitet = false,
$behebung_parameter = null,
$fehlercodes,
$fehlercode_extern
$fehlercode_extern,
$hauptzustaendig
);
}
@@ -43,8 +44,14 @@ class Issue_model extends DB_Model
* @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, $behebung_parameter = null)
{
public function getOpenIssueCount(
$fehlercode,
$person_id = null,
$oe_kurzbz = null,
$fehlercode_extern = null,
$behebung_parameter = null,
$hauptzustaendig = false
) {
$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
@@ -100,9 +107,20 @@ class Issue_model extends DB_Model
$oe_kurzbz = null,
$fehlertyp_kurzbz = null,
$apps = null,
$behebung_parameter = null
$behebung_parameter = null,
$hauptzustaendig = false
) {
return $this->_getIssues($person_id, $oe_kurzbz, $fehlertyp_kurzbz, $apps, $ist_verarbeitet = false, $behebung_parameter);
return $this->_getIssues(
$person_id,
$oe_kurzbz,
$fehlertyp_kurzbz,
$apps,
$ist_verarbeitet = false,
$behebung_parameter,
$fehlercodes = null,
$fehlercode_extern = null,
$hauptzustaendig
);
}
/**
@@ -125,7 +143,8 @@ class Issue_model extends DB_Model
$ist_verarbeitet = null,
$behebung_parameter = null,
$fehlercodes = null,
$fehlercode_extern = null
$fehlercode_extern = null,
$hauptzustaendig = false
) {
$params = array();
@@ -186,6 +205,23 @@ class Issue_model extends DB_Model
}
}
// retrieving only fehler for which user is hauptzuständig
if ($hauptzustaendig === true)
{
$this->load->model('system/Fehlerzustaendigkeiten_model', 'FehlerzustaendigkeitenModel');
$result = $this->FehlerzustaendigkeitenModel->getFehlerForUserHauptzustaendig();
if (isError($result)) return $result;
if (hasData($result))
{
$fehlercodesZust = array_column(getData($result), 'fehlercode');
$fehlercodes = isEmptyArray($fehlercodes) ? $fehlercodesZust : array_intersect($fehlercodes, $fehlercodesZust);
}
}
if (!isEmptyArray($fehlercodes))
{
$qry .= ' AND fehlercode IN ?';