mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-15 19:19:28 +00:00
400 lines
12 KiB
PHP
400 lines
12 KiB
PHP
<?php
|
|
class Mitarbeiter_model extends DB_Model
|
|
{
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->dbTable = 'public.tbl_mitarbeiter';
|
|
$this->pk = 'mitarbeiter_uid';
|
|
}
|
|
|
|
/**
|
|
* Checks if the user is a Mitarbeiter.
|
|
* @param string $uid
|
|
* @param boolean null $fixangestellt
|
|
* @return array
|
|
*/
|
|
public function isMitarbeiter($uid, $fixangestellt = null)
|
|
{
|
|
$this->addSelect('1');
|
|
|
|
if (is_bool($fixangestellt))
|
|
{
|
|
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid, 'fixangestellt' => $fixangestellt));
|
|
}
|
|
else // default
|
|
{
|
|
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid));
|
|
}
|
|
|
|
if(hasData($result))
|
|
{
|
|
return success(true);
|
|
}
|
|
else
|
|
{
|
|
return success(false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Laedt das Personal
|
|
*
|
|
* @param $aktiv wenn true werden nur aktive geladen, wenn false dann nur inaktve, wenn null dann alle
|
|
* @param $fix wenn true werden nur fixangestellte geladen
|
|
* @param $verwendung wenn true werden alle geladen die eine BIS-Verwendung eingetragen haben
|
|
* @param $personaccount wenn true werden alle geladen die personalnr >= 0 haben, also "echte" Personaccounts
|
|
* @return array
|
|
*/
|
|
public function getPersonal($aktiv, $fix, $verwendung, $personaccount = null, $uids = null)
|
|
{
|
|
$qry = "SELECT DISTINCT ON(mitarbeiter_uid) staatsbuergerschaft, geburtsnation, sprache, anrede, titelpost, titelpre,
|
|
nachname, vorname, vornamen, gebdatum, gebort, gebzeit, tbl_person.anmerkung AS person_anmerkung, homepage, svnr, ersatzkennzeichen, familienstand,
|
|
geschlecht, anzahlkinder, tbl_person.insertamum AS person_insertamum, tbl_person.updateamum as person_updateamum,
|
|
tbl_person.updatevon AS person_updatevon, kompetenzen, kurzbeschreibung, zugangscode, zugangscode_timestamp, bpk,
|
|
tbl_benutzer.*, tbl_mitarbeiter.*, akt_funk.oe_kurzbz AS funktionale_zuordnung, akt_funk.wochenstunden
|
|
FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid))
|
|
JOIN public.tbl_person USING(person_id))
|
|
LEFT JOIN public.tbl_benutzerfunktion USING(uid)
|
|
LEFT JOIN public.tbl_benutzerfunktion akt_funk ON tbl_mitarbeiter.mitarbeiter_uid = akt_funk.uid AND akt_funk.funktion_kurzbz = 'fachzuordnung'
|
|
AND (akt_funk.datum_von IS NULL OR akt_funk.datum_von <= now()) AND (akt_funk.datum_bis IS NULL OR akt_funk.datum_bis >= now())
|
|
WHERE true";
|
|
|
|
if ($fix === true)
|
|
$qry .= " AND fixangestellt=true";
|
|
elseif ($fix === false)
|
|
$qry .= " AND fixangestellt=false";
|
|
|
|
if ($aktiv === true)
|
|
$qry .= " AND tbl_benutzer.aktiv=true";
|
|
elseif ($aktiv === false)
|
|
$qry .= " AND tbl_benutzer.aktiv=false";
|
|
|
|
if ($verwendung === true)
|
|
{
|
|
$qry.=" AND EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)";
|
|
}
|
|
elseif ($verwendung === false)
|
|
{
|
|
$qry.=" AND NOT EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)";
|
|
}
|
|
|
|
if ($personaccount === true)
|
|
$qry .= " AND tbl_mitarbeiter.personalnummer >= 0";
|
|
elseif ($personaccount === false)
|
|
$qry .= " AND tbl_mitarbeiter.personalnummer < 0";
|
|
|
|
$params = array();
|
|
if (!isEmptyArray($uids))
|
|
{
|
|
$qry .= " AND tbl_mitarbeiter.mitarbeiter_uid IN ?";
|
|
$params[] = $uids;
|
|
}
|
|
|
|
return $this->execQuery($qry, $params);
|
|
}
|
|
|
|
/**
|
|
* gibt Personen mit Übersicht von Vertragsdaten aus
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getPersonenWithContractDetails($person_id=null)
|
|
{
|
|
$qry = "
|
|
SELECT
|
|
b.uid , p.person_id,
|
|
p.vorname, p.nachname,
|
|
TO_CHAR(gebdatum::timestamp, 'DD.MM.YYYY') AS format_gebdatum,
|
|
COALESCE(b.alias, b.uid) AS email,
|
|
STRING_AGG(DISTINCT va.bezeichnung, ', ') AS Vertragsarten,
|
|
STRING_AGG(DISTINCT u.bezeichnung, ', ') AS Unternehmen,
|
|
STRING_AGG(d.dienstverhaeltnis_id::TEXT, ', ') AS ids,
|
|
b.aktiv
|
|
-- CASE WHEN b.aktiv=true THEN 'aktiv'
|
|
-- ELSE 'nicht aktiv'
|
|
-- END as status //not working in header filter */
|
|
FROM
|
|
hr.tbl_dienstverhaeltnis d
|
|
JOIN
|
|
public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
|
|
JOIN
|
|
public.tbl_person p ON p.person_id = b.person_id
|
|
JOIN
|
|
public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
|
|
JOIN
|
|
hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz ";
|
|
|
|
if($person_id)
|
|
{
|
|
$qry .= " WHERE p.person_id = ?";
|
|
}
|
|
|
|
$qry.= "
|
|
GROUP BY
|
|
b.uid, p.person_id, p.vorname, p.nachname, b.alias
|
|
ORDER BY
|
|
p.nachname, p.vorname; ";
|
|
|
|
|
|
|
|
$params = array($person_id);
|
|
|
|
return $this->execQuery($qry, $params);
|
|
}
|
|
|
|
/**
|
|
* get current disciplinary Abteilung of person
|
|
*
|
|
* @param $person_id
|
|
*
|
|
* @return Array benutzerfunktionsdata
|
|
*/
|
|
function getPersonAbteilung($person_id)
|
|
{
|
|
//TODO(Manu) use function getMitarbeiter_uid
|
|
$qry = "
|
|
SELECT tbl_benutzer.uid
|
|
FROM tbl_mitarbeiter
|
|
JOIN tbl_benutzer ON CAST(tbl_mitarbeiter.mitarbeiter_uid AS TEXT) = CAST(tbl_benutzer.uid AS TEXT)
|
|
JOIN tbl_person USING (person_id)
|
|
WHERE tbl_person.person_id = ?
|
|
";
|
|
$result = $this->execQuery($qry, [$person_id]);
|
|
|
|
$data = getData($result);
|
|
if (empty($data)) {
|
|
return null; // No UID found
|
|
}
|
|
|
|
$uid = isset($data[0]->uid) ? $data[0]->uid : null;
|
|
|
|
if (!$uid) {
|
|
return null; // UID extraction failed
|
|
}
|
|
|
|
// Second Query
|
|
$qry2 = "
|
|
SELECT
|
|
bf.benutzerfunktion_id, bf.fachbereich_kurzbz, bf.uid, bf.funktion_kurzbz, bf.updateamum,
|
|
bf.updatevon, bf.insertamum, bf.insertvon, bf.ext_id, bf.semester, bf.oe_kurzbz,
|
|
bf.datum_von, bf.datum_bis, bf.bezeichnung, bf.wochenstunden,
|
|
oe.oe_kurzbz, oe.oe_parent_kurzbz, oe.bezeichnung,
|
|
oe.organisationseinheittyp_kurzbz, oe.aktiv, oe.mailverteiler,
|
|
oe.freigabegrenze, oe.kurzzeichen, oe.lehre, oe.standort,
|
|
oe.warn_semesterstunden_frei, oe.warn_semesterstunden_fix, oe.standort_id
|
|
FROM tbl_benutzerfunktion bf
|
|
JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
|
WHERE uid = ?
|
|
AND funktion_kurzbz = 'oezuordnung'
|
|
AND datum_von <= NOW()
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
";
|
|
$result2 = $this->execQuery($qry2, [$uid]);
|
|
|
|
return $result2;
|
|
}
|
|
|
|
function getLeitungOrg($oe_kurzbz)
|
|
{
|
|
$qry = "
|
|
SELECT bf.benutzerfunktion_id,bf.fachbereich_kurzbz,bf.uid,bf.funktion_kurzbz,bf.updateamum,bf.updatevon,bf.insertamum,bf.insertvon,bf.ext_id,bf.semester,bf.oe_kurzbz,bf.datum_von,bf.datum_bis,bf.bezeichnung,bf.wochenstunden,
|
|
p.person_id, p.vorname,p.nachname,p.titelpre,p.titelpost
|
|
FROM public.tbl_benutzerfunktion bf JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
|
JOIN public.tbl_benutzer b USING (uid) JOIN public.tbl_mitarbeiter ma ON(b.uid=ma.mitarbeiter_uid)
|
|
JOIN public.tbl_person p USING(person_id)
|
|
WHERE funktion_kurzbz='Leitung' AND oe.oe_kurzbz = ?
|
|
AND datum_von<=now() AND (datum_bis is null OR datum_bis>=now());
|
|
";
|
|
|
|
return $this->execQuery($qry, array($oe_kurzbz));
|
|
}
|
|
|
|
function getHeader($person_id)
|
|
{
|
|
$qry = "
|
|
SELECT
|
|
*
|
|
FROM
|
|
public.tbl_person
|
|
JOIN public.tbl_benutzer b USING(person_id)
|
|
JOIN public.tbl_mitarbeiter ma ON (ma.mitarbeiter_uid = b.uid)
|
|
WHERE
|
|
person_id = ?
|
|
";
|
|
|
|
return $this->execQuery($qry, array($person_id));
|
|
}
|
|
|
|
/**
|
|
* Gibt ein Array mit den UIDs der Vorgesetzten zurück
|
|
* @return object
|
|
*/
|
|
public function getVorgesetzte($uid, $datum_von = null, $datum_bis = null)
|
|
{
|
|
$datum_von_var = isset($datum_von) ? '?' : 'now()';
|
|
$datum_bis_var = isset($datum_bis) ? '?' : 'now()';
|
|
$qry = "SELECT
|
|
DISTINCT uid as vorgesetzter
|
|
FROM
|
|
public.tbl_benutzerfunktion
|
|
WHERE
|
|
funktion_kurzbz='Leitung' AND
|
|
(datum_von is null OR datum_von<=%s) AND
|
|
(datum_bis is null OR datum_bis>=%s) AND
|
|
oe_kurzbz in (SELECT oe_kurzbz
|
|
FROM public.tbl_benutzerfunktion
|
|
WHERE
|
|
funktion_kurzbz='oezuordnung' AND uid=? AND
|
|
(datum_von is null OR datum_von<=%s) AND
|
|
(datum_bis is null OR datum_bis>=%s)
|
|
);";
|
|
|
|
$qry = sprintf($qry, $datum_von_var, $datum_bis_var, $datum_von_var, $datum_bis_var);
|
|
|
|
$params = array();
|
|
if (isset($datum_von))
|
|
$params[] = $datum_von;
|
|
if (isset($datum_bis))
|
|
$params[] = $datum_bis;
|
|
|
|
$params[] = $uid;
|
|
|
|
if (isset($datum_von))
|
|
$params[] = $datum_von;
|
|
if (isset($datum_bis))
|
|
$params[] = $datum_bis;
|
|
|
|
return $this->execQuery($qry, $params);
|
|
}
|
|
|
|
/**
|
|
* Checks if alias exists
|
|
* @param $kurzbz
|
|
*/
|
|
public function kurzbzExists($kurzbz, $uid=null)
|
|
{
|
|
$this->addSelect('1');
|
|
$where = array('kurzbz' => $kurzbz);
|
|
if ($uid != null)
|
|
{
|
|
$where['mitarbeiter_uid<>'] = $uid;
|
|
}
|
|
$result = $this->loadWhere($where);
|
|
|
|
if (isSuccess($result))
|
|
{
|
|
if (hasData($result))
|
|
{
|
|
$result = success(array(true));
|
|
}
|
|
else
|
|
{
|
|
$result = success(array(false));
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Generates alias for a uid.
|
|
* @param $uid
|
|
* @return array the alias if newly generated
|
|
*/
|
|
public function generateKurzbz($uid)
|
|
{
|
|
$this->addLimit(1);
|
|
$this->addSelect('vorname, nachname');
|
|
$this->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid');
|
|
$this->addJoin('public.tbl_person', 'person_id');
|
|
$nameresult = $this->loadWhere(array('uid' => $uid));
|
|
|
|
if (hasData($nameresult))
|
|
{
|
|
$kurzbzdata = getData($nameresult);
|
|
$genKurzbz = $this->generateKurzbzHelper($kurzbzdata[0]->vorname, $kurzbzdata[0]->nachname);
|
|
|
|
return $genKurzbz;
|
|
}
|
|
return error('No Kurzbezeichnung could be generated');
|
|
}
|
|
|
|
public function generateKurzbzHelper($vorname, $nachname)
|
|
{
|
|
$nachname_clean = sanitizeProblemChars($nachname);
|
|
$vorname_clean = sanitizeProblemChars($vorname);
|
|
$kurzbz = '';
|
|
|
|
for ($nn = 6, $vn = 2; $nn != 0; $nn--, $vn++)
|
|
{
|
|
$kurzbz = mb_substr($nachname_clean, 0, $nn);
|
|
$kurzbz .= mb_substr($vorname_clean, 0, $vn);
|
|
|
|
$kurzbzexists = $this->kurzbzExists($kurzbz);
|
|
|
|
if (hasData($kurzbzexists) && !getData($kurzbzexists)[0])
|
|
break;
|
|
}
|
|
|
|
$kurzbzexists = $this->kurzbzExists($kurzbz);
|
|
|
|
if (hasData($kurzbzexists) && getData($kurzbzexists)[0])
|
|
return error('No Kurzbezeichnung could be generated');
|
|
|
|
return success($kurzbz);
|
|
}
|
|
|
|
public function searchMitarbeiter($filter)
|
|
{
|
|
$filter = strtoLower($filter);
|
|
$qry = "
|
|
SELECT
|
|
ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter
|
|
FROM
|
|
public.tbl_mitarbeiter ma
|
|
JOIN
|
|
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
|
JOIN
|
|
public.tbl_person p on (p.person_id = b.person_id)
|
|
WHERE
|
|
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
|
OR
|
|
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
|
OR
|
|
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'";
|
|
|
|
return $this->execQuery($qry);
|
|
}
|
|
|
|
public function getMitarbeiter_uid($person_id){
|
|
//TODO(Manu) refactor function
|
|
//and use in function getPersonAbteilung
|
|
//check function in Vertraege.php
|
|
$qry = "
|
|
SELECT tbl_benutzer.uid
|
|
FROM tbl_mitarbeiter
|
|
JOIN tbl_benutzer ON CAST(tbl_mitarbeiter.mitarbeiter_uid AS TEXT) = CAST(tbl_benutzer.uid AS TEXT)
|
|
JOIN tbl_person USING (person_id)
|
|
WHERE tbl_person.person_id = ?
|
|
";
|
|
$result = $this->execQuery($qry, [$person_id]);
|
|
|
|
$data = getData($result);
|
|
if (empty($data)) {
|
|
return null; // No UID found
|
|
}
|
|
//else
|
|
// $data = current($data);
|
|
|
|
// $uid = $data->uid;
|
|
|
|
$uid = isset($data[0]->uid) ? $data[0]->uid : null;
|
|
return $uid;
|
|
}
|
|
}
|