Merge branch 'master' into feature-13011/installation_on_multiple_servers

This commit is contained in:
Paolo
2023-03-21 17:47:15 +01:00
1135 changed files with 31146 additions and 100447 deletions
+9 -2
View File
@@ -128,8 +128,8 @@ class Messages_model extends CI_Model
{
$ouOptions .= sprintf(
"\n".'<option value="%s">%s</option>',
is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : self::ALT_OE,
$ou->bezeichnung . (is_numeric($ou->prestudent_id) ? '' : ' *')
($ou->typ === 'l' ? $ou->oe_kurzbz : (is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : self::ALT_OE)),
$ou->bezeichnung . ((is_numeric($ou->prestudent_id) || $ou->typ === 'l' ) ? '' : ' *')
);
}
}
@@ -528,6 +528,13 @@ class Messages_model extends CI_Model
*/
public function sendReply($receiver_id, $subject, $body, $relationmessage_id, $token)
{
// Checks that the receiver_id, relationmessage_id and token belongs to the same message
$crossedDataResult = $this->MessageTokenModel->crossClientData($token, $relationmessage_id, $receiver_id);
if (isError($crossedDataResult)) show_error(getError($crossedDataResult));
if (!hasData($crossedDataResult)) show_error(
'The parameters token, relationmessage_id and receiver_id do not belong to the same message'
);
// Retrieves message sender information
$senderResult = $this->MessageTokenModel->getSenderData($receiver_id);
if (isError($senderResult)) show_error(getError($senderResult));
@@ -135,7 +135,7 @@ class Vertragvertragsstatus_model extends DB_Model
/**
* Get all contracts, where the status had been set to 'bestellt' on given date
* @param string $string_date e.g. '01.11.2019' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
* @param string $string_date e.g. 'YYYY-MM-DD' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
* @param bool $further_processed If true, ALL ordered contracts of that day are retrieved, even if they were
* were ALSO approved/accepted/cancelled (further processed) on that same day.
* @return array
@@ -0,0 +1,15 @@
<?php
class Gsprogramm_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_gsprogramm';
$this->pk = 'gsprogramm_id';
}
}
@@ -0,0 +1,14 @@
<?php
class Mobilitaet_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_mobilitaet';
$this->pk = 'mobilitaet_id';
}
}
+2 -2
View File
@@ -3,7 +3,7 @@
class Nation_model extends DB_Model
{
/**
*
*
*/
public function __construct()
{
@@ -11,4 +11,4 @@ class Nation_model extends DB_Model
$this->dbTable = 'bis.tbl_nation';
$this->pk = 'nation_code';
}
}
}
+3 -3
View File
@@ -7,7 +7,7 @@ class DmsFS_model extends FS_Model
*/
public function __construct()
{
parent::__construct();
$this->filepath = DMS_PATH;
parent::__construct(DMS_PATH);
}
}
}
@@ -0,0 +1,16 @@
<?php
/**
* Model for writing temporary files
*/
class TempFS_model extends FS_Model
{
/**
* Constructor
*/
public function __construct()
{
// default temp directory of server is used
parent::__construct(sys_get_temp_dir());
}
}
+4 -1
View File
@@ -171,7 +171,7 @@ class Akte_model extends DB_Model
* @param bool $nachgereicht if true, retrieves only nachgereichte Dokumente. if false, only not nachgereichte. default: null, all Dokumente
* @return array
*/
public function getAktenWithDokInfo($person_id, $dokument_kurzbz = null, $nachgereicht = null)
public function getAktenWithDokInfo($person_id, $dokument_kurzbz = null, $nachgereicht = null, $archiv = null)
{
$this->addSelect('public.tbl_akte.*, bezeichnung_mehrsprachig, dokumentbeschreibung_mehrsprachig, public.tbl_dokument.bezeichnung as dokument_bezeichnung, bis.tbl_nation.*, ausstellungsdetails');
$this->addJoin('public.tbl_dokument', 'dokument_kurzbz');
@@ -184,6 +184,9 @@ class Akte_model extends DB_Model
if(is_bool($nachgereicht))
$where['nachgereicht'] = $nachgereicht;
if (is_bool($archiv))
$where['archiv'] = $archiv;
$dokumente = $this->loadWhere($where);
if($dokumente->error) return $dokumente;
@@ -10,6 +10,7 @@ class Dokumentprestudent_model extends DB_Model
parent::__construct();
$this->dbTable = 'public.tbl_dokumentprestudent';
$this->pk = array('prestudent_id', 'dokument_kurzbz');
$this->hasSequence = false;
}
/**
+50
View File
@@ -73,4 +73,54 @@ class Konto_model extends DB_Model
return error('Failed to load Payment');
}
}
public function getStudienbeitraege($uid, $buchungstypen)
{
$query = 'SELECT konto.studiensemester_kurzbz
FROM public.tbl_konto konto
JOIN public.tbl_studiensemester studiensemester ON konto.studiensemester_kurzbz = studiensemester.studiensemester_kurzbz,
public.tbl_benutzer,
public.tbl_student
WHERE tbl_benutzer.uid = \'' . $uid . '\'
AND tbl_benutzer.uid = tbl_student.student_uid
AND tbl_benutzer.person_id = konto.person_id
AND konto.studiengang_kz = tbl_student.studiengang_kz
AND konto.buchungstyp_kurzbz IN (\'' . $buchungstypen . '\')
AND 0 = (
SELECT sum(betrag)
FROM public.tbl_konto skonto
WHERE skonto.buchungsnr = konto.buchungsnr_verweis
OR skonto.buchungsnr_verweis = konto.buchungsnr_verweis
)
ORDER BY studiensemester.start DESC;
';
return $this->execQuery($query);
}
public function checkStudienbeitrag($uid, $stsem, $buchungstypen)
{
$query = 'SELECT tbl_konto.buchungsnr,
tbl_konto.buchungsdatum
FROM public.tbl_konto,
public.tbl_benutzer,
public.tbl_student
WHERE
tbl_konto.studiensemester_kurzbz = \'' . $stsem . '\'
AND tbl_benutzer.uid = \'' . $uid . '\'
AND tbl_benutzer.uid = tbl_student.student_uid
AND tbl_benutzer.person_id = tbl_konto.person_id
AND tbl_konto.studiengang_kz=tbl_student.studiengang_kz
AND tbl_konto.buchungstyp_kurzbz IN (\'' . $buchungstypen . '\')
AND 0 >= (
SELECT sum(betrag)
FROM public.tbl_konto skonto
WHERE skonto.buchungsnr = tbl_konto.buchungsnr_verweis
OR skonto.buchungsnr_verweis = tbl_konto.buchungsnr_verweis
)
ORDER BY buchungsnr DESC LIMIT 1
';
return $this->execQuery($query);
}
}
+39 -6
View File
@@ -309,13 +309,39 @@ class Prestudent_model extends DB_Model
*/
public function getLastPrestudent($person_id, $withzgv = false)
{
$qry = 'SELECT * FROM public.tbl_prestudent
WHERE person_id = ?
$qry = 'SELECT * FROM public.tbl_prestudent ps
%s
WHERE ps.person_id = ?
ORDER BY updateamum DESC NULLS LAST, insertamum DESC NULLS LAST
LIMIT 1';
$zgvwhere = $withzgv === true ? 'AND zgv_code IS NOT NULL' : '';
$zgvwhere = '';
if ($withzgv === true)
{
$zgvwhere = '
LEFT JOIN (
SELECT ps2.zgvmas_code,
ps2.zgvmanation,
ps2.zgvmadatum,
ps2.zgvmaort,
ps2.zgvmas_erfuellt,
ps2.person_id
FROM tbl_prestudent ps2
WHERE zgvmas_code IS NOT NULL
ORDER BY updateamum DESC NULLS LAST, insertamum DESC NULLS LAST
) zgvmas ON zgvmas.person_id = ps.person_id
LEFT JOIN (
SELECT ps2.zgv_code,
ps2.zgvnation,
ps2.zgvdatum,
ps2.zgvort,
ps2.zgv_erfuellt,
ps2.person_id
FROM tbl_prestudent ps2
WHERE zgv_code IS NOT NULL
ORDER BY updateamum DESC NULLS LAST, insertamum DESC NULLS LAST
)zgv ON zgv.person_id = ps.person_id';
}
$qry = sprintf($qry, $zgvwhere);
@@ -556,13 +582,14 @@ class Prestudent_model extends DB_Model
*/
public function getOrganisationunitsByPersonId($person_id)
{
$query = 'SELECT o.oe_kurzbz,
$query = 'SELECT DISTINCT o.oe_kurzbz,
o.bezeichnung,
(CASE
WHEN sg.typ = \'b\' THEN ps.prestudent_id
WHEN sg.typ = \'m\' THEN ps.prestudent_id
WHEN sg.typ = \'m\' THEN mps.prestudent_id
ELSE NULL
END) AS prestudent_id
END) AS prestudent_id,
sg.typ
FROM public.tbl_prestudent p
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN public.tbl_organisationseinheit o USING(oe_kurzbz)
@@ -571,11 +598,17 @@ class Prestudent_model extends DB_Model
FROM public.tbl_prestudentstatus
WHERE status_kurzbz = \'Bewerber\'
) ps USING(prestudent_id)
LEFT JOIN (
SELECT prestudent_id
FROM public.tbl_prestudentstatus
WHERE status_kurzbz = \'Interessent\' AND bestaetigtam IS NOT NULL
) mps ON p.prestudent_id = mps.prestudent_id
WHERE p.person_id = ?
GROUP BY o.oe_kurzbz,
o.bezeichnung,
sg.typ,
ps.prestudent_id,
mps.prestudent_id,
p.prestudent_id
ORDER BY o.bezeichnung';
@@ -52,6 +52,24 @@ class Prestudentstatus_model extends DB_Model
return $this->execQuery($query, $parametersArray);
}
/**
* Liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung.
*
* @param $prestudent_id
* @param $status_kurzbz
* @return array
*/
public function getFirstStatus($prestudent_id, $status_kurzbz)
{
$this->addOrder('datum, insertamum, ext_id');
$this->addLimit(1);
return $this->loadWhere(array(
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz
));
}
/**
* updateStufe
*/
+16
View File
@@ -66,4 +66,20 @@ class Student_model extends DB_Model
return $result->retval[0]->student_uid;
}
public function searchStudent($filter)
{
$this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_person person', 'person_id');
$result = $this->loadWhere(
"lower(student_uid) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.nachname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.vorname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.nachname || ' ' || person.vorname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%'));
return $result;
}
}
@@ -309,4 +309,166 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
/**
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
* Diese funktion ist für autocomplete gedacht
*
* @param string $filter Suchfilter
* @return \stdClass A return object
*/
public function loadTemplates($filter)
{
$filter = strtolower($filter);
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz
FROM
lehre.tbl_lehrveranstaltung
WHERE
tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) LIKE '%".$this->db_escape($filter)."%' OR
LOWER(tbl_lehrveranstaltung.bezeichnung) LIKE '%".$this->db_escape($filter). "%' OR
LOWER(tbl_lehrveranstaltung.kurzbz) LIKE '%".$this->db_escape($filter). "%'
)
";
return $this->execQuery($qry);
}
/**
* Lädt Template und gibt Id und Label ("bezeichnung [kurzbz]") zurück
* Diese funktion ist für autocomplete gedacht
*
* @param string $name
* @return \stdClass A return object
*/
public function loadTemplateByName($name)
{
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id as id, CONCAT(tbl_lehrveranstaltung.bezeichnung, ' [', tbl_lehrveranstaltung.kurzbz, ']') as label
FROM
lehre.tbl_lehrveranstaltung
WHERE
tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) = '".($name ? $this->db_escape($name) : 0)."' OR tbl_lehrveranstaltung.bezeichnung = '".$this->db_escape($name). "' OR tbl_lehrveranstaltung.kurzbz = '".$this->db_escape($name). "'
)
";
return $this->execQuery($qry);
}
/**
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
*
* @param $studiengang_kz
* @param $studiensemester_kurzbz
* @param $ausbildungssemester
* @param $orgform_kurzbz
* @return array|stdClass|null
*/
public function getSumQuereinstiegsECTSProSemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz)
{
$qry = '
SELECT
sum(tbl_lehrveranstaltung.ects) as "sum_ects"
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
WHERE
tbl_studienplan.studienplan_id = (
SELECT
studienplan_id
FROM
lehre.tbl_studienordnung
JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
WHERE tbl_studienordnung.studiengang_kz = ?
AND tbl_studienplan_semester.semester = ?
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
AND tbl_studienplan.orgform_kurzbz = ?
LIMIT 1
)
AND tbl_studienplan_lehrveranstaltung.semester = ?
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
AND tbl_studienplan_lehrveranstaltung.export = TRUE
';
return $this->execQuery($qry, array(
$studiengang_kz, $ausbildungssemester, $studiensemester_kurzbz, $orgform_kurzbz, $ausbildungssemester)
);
}
/**
* Get ECTS Summe aller bisher angerechneten LVs.
* Wenn keine explizite Begruendung angegeben ist, wird eine schulische Begruendung angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getSumAngerechneteECTSByBegruendung($student_uid)
{
$qry = '
SELECT sum(ects), begruendung_id FROM (
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, COALESCE(begruendung_id, 1) as begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_zeugnisnote
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
WHERE
tbl_zeugnisnote.note = 6
AND student_uid = ?
AND (lehre.tbl_anrechnung.prestudent_id = tbl_student.prestudent_id
OR lehre.tbl_anrechnung.prestudent_id is null)
UNION
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND student_uid = ?
) lvsangerechnet
GROUP BY begruendung_id
';
return $this->execQuery($qry, array($student_uid, $student_uid));
}
/**
* Get ECTS Summe aller bisher schulisch begruendeten angerechneten LVs.
* Derzeit wird auch jede Anrechnung, die nicht beruflich ist, als schulisch angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumSchulisch($student_uid, $prestudent_id, $studiengang_kz)
{
$qry = '
SELECT get_ects_summe_schulisch(?, ?, ?) AS ectsSumSchulisch
';
return $this->execQuery($qry, array($student_uid, $prestudent_id, $studiengang_kz));
}
/**
* Get ECTS Summe aller bisher beruflich angerechneten LVs.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumBeruflich($student_uid)
{
$qry = '
SELECT get_ects_summe_beruflich(?) AS ectsSumBeruflich
';
return $this->execQuery($qry, array($student_uid));
}
}
@@ -1,7 +1,6 @@
<?php
class Paabgabe_model extends DB_Model
{
/**
* Constructor
*/
@@ -11,4 +10,24 @@ class Paabgabe_model extends DB_Model
$this->dbTable = 'campus.tbl_paabgabe';
$this->pk = 'paabgabe_id';
}
/**
* Gets last Endabgabe of a Projektarbeit, including filename.
* @param int $projektarbeit_id
* @return object
*/
public function getEndabgabe($projektarbeit_id)
{
$qry = "SELECT paabgabe_id, student_uid, paabg.datum, paabg.abgabedatum, projekttyp_kurzbz, titel, titel_english,
paabgabe_id || '_' || student_uid || '.pdf' AS filename
FROM campus.tbl_paabgabe paabg
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
WHERE projektarbeit_id = ?
AND paabgabetyp_kurzbz = 'end'
AND paabg.abgabedatum IS NOT NULL
ORDER BY paabg.abgabedatum, paabg.datum DESC
LIMIT 1";
return $this->execQuery($qry, array($projektarbeit_id));
}
}
@@ -42,6 +42,44 @@ class Projektbetreuer_model extends DB_Model
}
}
/**
* Gets Betreuer of a certain Type of a Projektarbeit.
* Returns one row for each person.
* @param int $projektarbeit_id
* @param string $betreuerart_kurzbz
* @return array success with number of Betreuer or error
*/
public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz)
{
$qry = "SELECT DISTINCT ON (pers.person_id) pers.person_id, betreuerart_kurzbz, vorname, nachname,
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz,
ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid,
(
SELECT kontakt
FROM public.tbl_kontakt
WHERE kontakttyp = 'email'
AND person_id = pers.person_id
ORDER BY
CASE WHEN zustellung THEN 0 ELSE 1 END,
insertamum DESC NULLS LAST
LIMIT 1
) AS private_email
FROM lehre.tbl_projektarbeit pa
JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
JOIN public.tbl_person pers USING (person_id)
LEFT JOIN public.tbl_benutzer ben USING (person_id)
LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid
WHERE (ben.aktiv OR ben.aktiv IS NULL)
AND projektarbeit_id = ?
AND betreuerart_kurzbz = ?
ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/
CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/
ben.insertamum";
return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz));
}
/**
* Get Projektbetreuer data by authentification token
* @param $zugangstoken
@@ -49,15 +87,148 @@ class Projektbetreuer_model extends DB_Model
*/
public function getBetreuerByToken($zugangstoken)
{
$qry = '
$qry = "
SELECT tbl_projektbetreuer.person_id, tbl_projektbetreuer.projektarbeit_id, student_uid
FROM lehre.tbl_projektbetreuer
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
WHERE zugangstoken = ? AND zugangstoken_gueltigbis >= NOW()
ORDER BY tbl_projektbetreuer.insertamum DESC, projektarbeit_id DESC
LIMIT 1
';
";
return $this->execQuery($qry, array($zugangstoken));
}
/**
* Holt Zweitbegutachter einer Projektarbeit mit Mail.
* @param $erstbegutachter_person_id int person_id des Erstbegutachters
* @param $projektarbeit_id int
* @param $student_uid string uid des Studenten der Arbeit abgibt
* @return object | bool
*/
public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid, $zweitbegutachter_person_id = null)
{
$params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid);
$qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid,
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, kontakt,
abg.abgabedatum, betr.betreuerart_kurzbz
FROM lehre.tbl_projektbetreuer betr
JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id
JOIN public.tbl_person pers ON betr.person_id = pers.person_id
LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true
LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id
LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end'
WHERE
(
(
betr.betreuerart_kurzbz = 'Zweitbegutachter'
AND EXISTS (
SELECT 1 FROM lehre.tbl_projektbetreuer
WHERE person_id = ?
AND betreuerart_kurzbz = 'Erstbegutachter'
AND projektarbeit_id = betr.projektarbeit_id
)
)
OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */
(
betr.betreuerart_kurzbz = 'Senatsmitglied'
AND EXISTS (
SELECT 1 FROM lehre.tbl_projektbetreuer
WHERE person_id = ?
AND betreuerart_kurzbz = 'Senatsvorsitz'
AND projektarbeit_id = betr.projektarbeit_id
)
)
)
AND betr.projektarbeit_id = ?
AND parb.student_uid = ?
AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)";
if (isset($zweitbegutachter_person_id))
{
$qry_betr .= " AND betr.person_id = ?";
$params[] = $zweitbegutachter_person_id;
}
$qry_betr .= " ORDER BY betr.person_id DESC,
(CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */
SELECT 1 FROM public.tbl_mitarbeiter ma
WHERE ma.mitarbeiter_uid = tbl_benutzer.uid
) THEN 0 ELSE 1 END), betr.insertamum DESC
LIMIT 1";
return $this->execQuery($qry_betr, $params);
}
/**
* Generiert neuen Token für externen Zweitbetreuer.
* @param int $zweitbegutachter_person_id
* @param int $projektarbeit_id
* @return array
*/
public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id)
{
$betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id, betreuerart_kurzbz
FROM lehre.tbl_projektbetreuer
JOIN public.tbl_person USING(person_id)
LEFT JOIN public.tbl_benutzer USING(person_id)
WHERE projektarbeit_id = ?
AND tbl_projektbetreuer.person_id = ?
AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatsmitglied')
LIMIT 1";
$betreueruidRes = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id));
if (!hasData($betreueruidRes))
return error('Zweitbegutachter nicht gefunden');
$zweitbetreuer = getData($betreueruidRes)[0];
if (!isset($zweitbetreuer->uid))
{
do {
$token = generateToken(16);
$qry_tokencheck = $this->load(array('zugangstoken' => $token));
} while(hasData($qry_tokencheck));
$result = $this->update(
array('projektarbeit_id' => $projektarbeit_id,
'person_id' => $zweitbetreuer->person_id,
'betreuerart_kurzbz' => $zweitbetreuer->betreuerart_kurzbz),
array('zugangstoken' => $token,
'zugangstoken_gueltigbis' => date('Y-m-d', strtotime('+1 year')))
);
return $result;
}
else
return success("Account vorhanden, kein Token benötigt");
}
/**
* Gets betreuerart of a Betreuer for a Projektarbeit.
* Main Betreuer are prioritized (normally one Betreuer should be assigned to a Projektarbeit another time with a different Betreuerart).
* @param int projektarbeit_id
* @param int betreuer_person_id
* @return object success or error
*/
public function getBetreuerart($projektarbeit_id, $betreuer_person_id)
{
$qry = "SELECT betreuerart_kurzbz
FROM lehre.tbl_projektbetreuer
WHERE projektarbeit_id = ?
AND person_id = ?
ORDER BY CASE WHEN betreuerart_kurzbz = 'Senatsvorsitz' THEN 1 /*Senatsvorsitz has priority*/
WHEN betreuerart_kurzbz = 'Begutachter' THEN 2
WHEN betreuerart_kurzbz = 'Erstbegutachter' THEN 3
WHEN betreuerart_kurzbz = 'Zweitbegutachter' THEN 4
WHEN betreuerart_kurzbz = 'Senatsmitglied' THEN 5
ELSE 5
END, insertamum DESC
LIMIT 1";
return $this->execQuery($qry, array($projektarbeit_id, $betreuer_person_id));
}
}
@@ -507,4 +507,21 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, array($typ, $semester));
}
public function getStudiengangTyp($studiengang_kz, $typ = null)
{
$query = "SELECT DISTINCT(sgt.*)
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
WHERE studiengang_kz IN ?";
$params[] = $studiengang_kz;
if (!is_null($typ))
{
$query .= " AND sgt.typ IN ?";
$params[] = $typ;
}
return $this->execQuery($query, $params);
}
}
@@ -13,6 +13,20 @@ class Studiensemester_model extends DB_Model
$this->hasSequence = false;
}
/**
* Get actual Studiensemester.
*
* @return array
*/
public function getAkt()
{
return $this->loadWhere(array(
'start <= ' => 'NOW()',
'ende >= ' => 'NOW()'
)
);
}
// Get next study semester
public function getNext()
{
@@ -91,7 +105,7 @@ class Studiensemester_model extends DB_Model
/**
* getPreviousFrom
*/
public function getPreviousFrom($studiensemester_kurzbz)
public function getPreviousFrom($studiensemester_kurzbz, $limit = 1)
{
$query = 'SELECT studiensemester_kurzbz,
start,
@@ -103,9 +117,9 @@ class Studiensemester_model extends DB_Model
WHERE studiensemester_kurzbz = ?
)
ORDER BY start DESC
LIMIT 1';
LIMIT ?';
return $this->execQuery($query, array($studiensemester_kurzbz));
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
}
/**
@@ -167,15 +181,13 @@ class Studiensemester_model extends DB_Model
if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d')))
return success(array());
$query = "SELECT *
FROM public.tbl_studiensemester
WHERE
(ende > ?::date AND start < ?::date)
OR start = ?::date
OR ende = ?::date
ORDER BY start DESC";
$query = "
SELECT *
FROM public.tbl_studiensemester
WHERE ( ?::date < ende AND ?::date > start )
ORDER BY start DESC";
return $this->execQuery($query, array($from, $to, $from, $to));
return $this->execQuery($query, array($from, $to));
}
/**
@@ -0,0 +1,14 @@
<?php
class Adressentyp_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_adressentyp';
$this->pk = 'adressentyp_kurzbz';
}
}
@@ -0,0 +1,22 @@
<?php
class Fotostatusperson_model extends DB_Model
{
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_person_fotostatus';
$this->pk = 'person_fotostatus_id';
}
public function getLastFotoStatus($person_id)
{
$this->addOrder('datum', 'DESC');
$this->addOrder('person_fotostatus_id', 'DESC');
$this->addLimit(1);
return $this->loadWhere(array('person_id' => $person_id));
}
}
@@ -0,0 +1,14 @@
<?php
class Geschlecht_model extends DB_Model
{
/**
*
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_geschlecht';
$this->pk = 'geschlecht';
}
}
+18 -8
View File
@@ -82,7 +82,7 @@ class Person_model extends DB_Model
}
else
{
$person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr{11} + 1);
$person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr[11] + 1);
}
}
}
@@ -193,7 +193,7 @@ class Person_model extends DB_Model
*/
public function getByUid($uid)
{
$this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr');
$this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr, foto');
$this->addJoin('tbl_benutzer', 'person_id');
return $this->loadWhere(array('uid' => $uid));
@@ -283,8 +283,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
ON p.vorname = p2.vorname
AND p.nachname = p2.nachname
ON lower(p.vorname) = lower(p2.vorname)
AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -310,8 +310,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
ON p.vorname = p2.vorname
AND p.nachname = p2.nachname
ON lower(p.vorname) = lower(p2.vorname)
AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -321,8 +321,18 @@ class Person_model extends DB_Model
JOIN public.tbl_status USING(status_kurzbz)
WHERE status_kurzbz = 'Abbrecher'
)
";
return $this->execQuery($qry, array($person_id, $person_id));
UNION
SELECT p2.person_id
FROM tbl_person p1
INNER JOIN (
SELECT vorname, nachname, gebdatum, person_id
FROM tbl_person
) p2
ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
}
}
@@ -55,4 +55,45 @@ class Betriebsmittelperson_model extends DB_Model
return $this->loadWhere($condition);
}
public function getBetriebsmittelZuordnung($cardIdentifier, $typ = 'Zutrittskarte', $ausgegeben = true)
{
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
$where = 'wawi.tbl_betriebsmittel.nummer2 = \'' . $cardIdentifier . '\'
AND wawi.tbl_betriebsmittel.betriebsmitteltyp = \''. $typ .'\'
AND (retouram >= now() OR retouram IS NULL)
';
if ($ausgegeben)
$where .= 'AND ausgegebenam <= now()';
else
$where .= 'AND (ausgegebenam <= now() OR ausgegebenam IS NULL)';
return $this->loadWhere($where);
}
public function getBetriebsmittelByUid($uid, $betriebsmitteltyp = null, $isRetourniert = false)
{
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
$condition = ' wawi.tbl_betriebsmittelperson.uid = '. $this->escape($uid);
if (is_string($betriebsmitteltyp))
{
$condition .= ' AND betriebsmitteltyp = ' . $this->escape($betriebsmitteltyp);
}
if ($isRetourniert === true) {
$condition .= ' AND retouram IS NOT NULL';
}
elseif ($isRetourniert === false)
{
$condition .= ' AND retouram IS NULL';
}
$this->addOrder('ausgegebenam', 'DESC');
return $this->loadWhere($condition);
}
}
@@ -61,4 +61,98 @@ class Stundenplandev_model extends DB_Model
return $this->execQuery($qry, $parametersArray);
}
/**
* Get Stundenplan data.
*
* @param null $lehrveranstaltung_id
* @param null $studiensemester_kurzbz
* @param null $lehreinheit_id
* @param null $mitarbeiter_uid
* @param null $student_uid
* @param false $nurBevorstehende If true, only future data is retrieved.
* @return array|false|stdClass|null
*/
public function getStundenplanData($lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false)
{
$params = array();
$qry = "SELECT
stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis,
stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung,
array_agg(
CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz
ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'')
END) as gruppen, array_agg(mitarbeiter_uid) as lektoren,
array_agg(ort_kurzbz) as orte,
array_agg(titel) as titel
FROM
lehre.tbl_stundenplandev as stpl
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
WHERE ";
if ($lehrveranstaltung_id != '')
{
$qry.="
lehreinheit_id IN (
SELECT lehreinheit_id FROM lehre.tbl_lehreinheit
WHERE lehrveranstaltung_id = ?
AND studiensemester_kurzbz = ?
)";
$params[]= $lehrveranstaltung_id;
$params[]= $studiensemester_kurzbz;
}
elseif ($lehreinheit_id!='')
{
$qry.=" lehreinheit_id = ?";
$params[]= $lehreinheit_id;
}
elseif ($mitarbeiter_uid != '')
{
$qry.= "
mitarbeiter_uid = ?
AND lehreinheit_id IN (
SELECT lehreinheit_id
FROM lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
WHERE mitarbeiter_uid = ?
AND studiensemester_kurzbz IN ( ? )
)";
$params[] = $mitarbeiter_uid;
$params[] = $mitarbeiter_uid;
$params[] = $studiensemester_kurzbz;
}
elseif ($student_uid != '')
{
$qry.="
lehreinheit_id IN (
SELECT lehreinheit_id
FROM campus.vw_student_lehrveranstaltung
WHERE uid = ?
AND studiensemester_kurzbz = ?
)";
$params[] = $student_uid;
$params[] = $studiensemester_kurzbz;
}
else
return false;
if($nurBevorstehende)
{
$qry.= " AND stpl.datum >= NOW()::date ";
}
$qry.= "
GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung
ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id
";
return $this->execQuery($qry, $params);
}
}
@@ -12,6 +12,47 @@ class Zeitsperre_model extends DB_Model
$this->pk = 'zeitsperre_id';
}
/**
* Save or update Zeitsperre.
*
* @param $zeitsperretyp_kurzbz
* @param $mitarbeiter_uid
* @param $vonDatum
* @param $bisDatum
* @param null $vonStunde
* @param null $bisStunde
* @param null $bezeichnung
* @param null $vertretung_uid
* @param null $erreichbarkeit_kurzbz
* @param null $freigabeamum
* @param null $freigabevon
* @return array
*/
public function save($zeitsperretyp_kurzbz, $mitarbeiter_uid, $vonDatum, $bisDatum,
$vonStunde = null, $bisStunde = null, $bezeichnung = null, $vertretung_uid = null,
$erreichbarkeit_kurzbz = null, $freigabeamum = null, $freigabevon = null)
{
return $this->insert(array(
'zeitsperretyp_kurzbz' => $zeitsperretyp_kurzbz,
'mitarbeiter_uid' => $mitarbeiter_uid,
'vondatum' => $vonDatum,
'bisdatum' => $bisDatum,
'vonstunde' => $vonStunde,
'bisstunde' => $bisStunde,
'bezeichnung' => $bezeichnung,
'vertretung_uid' => $vertretung_uid,
'insertvon' => getAuthUID(),
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'erreichbarkeit_kurzbz' => $erreichbarkeit_kurzbz,
'freigabeamum' => $freigabeamum,
'freigabevon' => $freigabevon
));
}
/**
* Delete Zeitsperre.
* @return array|stdClass|null
*/
public function deleteEntriesForCurrentDay()
{
$today = date('Y-m-d');
@@ -0,0 +1,14 @@
<?php
class Zeitwunsch_gueltigkeit_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'campus.tbl_zeitwunsch_gueltigkeit';
$this->pk = 'zeitwunsch_gueltigkeit_id';
}
}
@@ -43,7 +43,7 @@ class Benutzerrolle_model extends DB_Model
* @param null $oe_kurzbz
* @return array
*/
public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null)
public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null, $art = null)
{
$params = array();
$query = '
@@ -62,6 +62,12 @@ class Benutzerrolle_model extends DB_Model
$params[] = $oe_kurzbz;
}
if (!is_null($art))
{
$query .= ' AND art = ?';
$params[] = $art;
}
return $this->execQuery($query, $params);
}
}
@@ -0,0 +1,58 @@
<?php
class Fehlerzustaendigkeiten_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'system.tbl_fehler_zustaendigkeiten';
$this->pk = 'fehlerzustaendigkeiten_id';
}
/**
* Gets active Mitarbeiter not assigned to a Fehler.
* @param $fehlercode
* @return object
*/
public function getNonAssignedMitarbeiter($fehlercode)
{
$query = "SELECT person_id, ben.uid, vorname, nachname, titelpre, titelpost, personalnummer
FROM public.tbl_mitarbeiter
JOIN public.tbl_benutzer ben ON tbl_mitarbeiter.mitarbeiter_uid = ben.uid
JOIN public.tbl_person pers USING (person_id)
WHERE ben.aktiv
AND NOT EXISTS (
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten
WHERE person_id = pers.person_id
AND fehlercode = ?
)
ORDER BY nachname, vorname, uid";
return $this->execReadOnlyQuery($query, array($fehlercode));
}
/**
* Gets Funktionen not assigned to a Fehler (over an organisational unit).
* @param $fehlercode
* @param $oe_kurzbz
* @return object
*/
public function getNonAssignedFunktionen($fehlercode, $oe_kurzbz)
{
$query = "SELECT funktion_kurzbz, beschreibung
FROM public.tbl_funktion funk
WHERE aktiv
AND NOT EXISTS (
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten
WHERE funktion_kurzbz = funk.funktion_kurzbz
AND fehlercode = ?
AND oe_kurzbz = ?
)
ORDER BY beschreibung";
return $this->execReadOnlyQuery($query, array($fehlercode, $oe_kurzbz));
}
}
@@ -176,4 +176,20 @@ class MessageToken_model extends DB_Model
return $this->execQuery($sql, array($oe_kurzbz));
}
/**
*
*/
public function crossClientData($token, $relationmessage_id, $receiver_id)
{
$sql = 'SELECT mm.message_id
FROM public.tbl_msg_message mm
JOIN public.tbl_msg_recipient mr USING(message_id)
WHERE mr.token = ?
AND mm.message_id = ?
AND mm.person_id = ?';
return $this->execQuery($sql, array($token, $relationmessage_id, $receiver_id));
}
}
@@ -12,7 +12,14 @@ class Variablenname_model extends DB_Model
) sem
WHERE start > now()
LIMIT 1;',
'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1'
'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1;',
'projektuebersicht_studiensemester' => 'SELECT studiensemester_kurzbz FROM (
SELECT DISTINCT ON (studienjahr_kurzbz) start, studiensemester_kurzbz
FROM public.tbl_studiensemester
ORDER BY studienjahr_kurzbz, start
) sem
WHERE start > now()
LIMIT 1;'
);
/**