Merge branch 'master' into feature-52803/MobilityOnline_Personenkennzeichen_Meldestichtag

This commit is contained in:
Alexei Karpenko
2026-05-02 00:06:02 +02:00
1097 changed files with 148963 additions and 11676 deletions
+112 -1
View File
@@ -92,7 +92,7 @@ class Akte_model extends DB_Model
a.anmerkung,
a.nachgereicht,
a.nachgereicht_am,
CASE WHEN MAX(dp.dokument_kurzbz) IS NOT NULL THEN TRUE ELSE FALSE END AS accepted
CASE WHEN MAX(dp.dokument_kurzbz) IS NOT NULL THEN TRUE ELSE FALSE END AS accepted,
FROM public.tbl_akte a
INNER JOIN public.tbl_prestudent p USING(person_id)
LEFT JOIN public.tbl_dokumentprestudent dp USING(prestudent_id, dokument_kurzbz)
@@ -111,6 +111,61 @@ class Akte_model extends DB_Model
return $this->execQuery($query, $parametersArray);
}
/**
* getAktenAccepted FAS
*/
public function getAktenFAS($person_id, $dokument_kurzbz = null, $stg_kz = null, $prestudent_id = null, $returnInhalt = false)
{
$query = 'SELECT
a.akte_id,
a.bezeichnung,
a.dokument_kurzbz,
a.titel_intern,
a.anmerkung_intern,
a.insertamum as hochgeladenamum,
a.updatevon, a.insertvon, a.uid,
a.dms_id, a.anmerkung as infotext,
a.nachgereicht,
CASE
WHEN inhalt IS NOT NULL OR a.dms_id IS NOT NULL
THEN true
ELSE false
END AS vorhanden,
a.nachgereicht_am,
ausstellungsnation, formal_geprueft_amum, archiv,
signiert, stud_selfservice, akzeptiertamum, inhalt
FROM public.tbl_akte a
WHERE a.person_id = ?';
$parametersArray = array($person_id);
if (!isEmptyString($dokument_kurzbz))
{
$query .= " AND dokument_kurzbz = ?
AND dokument_kurzbz NOT IN ('Zeugnis','DiplSupp','Bescheid')";
array_push($parametersArray, $dokument_kurzbz);
}
if($stg_kz != null && $prestudent_id != null)
{
$query.= " AND dokument_kurzbz not in (
SELECT dokument_kurzbz
FROM public.tbl_dokument
JOIN public.tbl_dokumentstudiengang USING(dokument_kurzbz)
WHERE studiengang_kz= ?
AND dokument_kurzbz NOT IN(
SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent
JOIN public.tbl_dokument USING(dokument_kurzbz)
WHERE prestudent_id=?))";
array_push($parametersArray, $stg_kz);
array_push($parametersArray, $prestudent_id);
}
$query .= ' ORDER BY erstelltam';
return $this->execQuery($query, $parametersArray);
}
/**
* getAktenAcceptedDms
*/
@@ -193,4 +248,60 @@ class Akte_model extends DB_Model
return success($dokumente->retval);
}
/**
* Liefert die Archivdokumente einer Person/mehrerer Personen
*
* @param integer/array $person_id
* @param boolean|null $signiert Wenn true werden nur Dokumente geliefert die digital signiert wurden.
* @param boolean|null $stud_selfservice Wenn true werden nur Dokumente geliefert die Studierende selbst herunterladen duerfen.
*
* @return stdClass
*/
public function getArchiv($person_id, $signiert = null, $stud_selfservice = null)
{
$this->addSelect('akte_id');
$this->addSelect('person_id');
$this->addSelect('dokument_kurzbz');
$this->addSelect('mimetype');
$this->addSelect('erstelltam');
$this->addSelect('gedruckt');
$this->addSelect('titel_intern');
$this->addSelect('anmerkung_intern');
$this->addSelect('titel');
$this->addSelect('bezeichnung');
$this->addSelect('updateamum');
$this->addSelect('insertamum');
$this->addSelect('updatevon');
$this->addSelect('insertvon');
$this->addSelect('uid');
$this->addSelect('dms_id');
$this->addSelect('anmerkung');
$this->addSelect('nachgereicht');
$this->addSelect('CASE WHEN inhalt is not null THEN true ELSE false END as inhalt_vorhanden', false);
$this->addSelect('nachgereicht_am');
$this->addSelect('ausstellungsnation');
$this->addSelect('formal_geprueft_amum');
$this->addSelect('archiv');
$this->addSelect('signiert');
$this->addSelect('stud_selfservice');
$this->addSelect('akzeptiertamum');
if ($signiert !== null)
$this->db->where('signiert', (boolean)$signiert);
if ($stud_selfservice !== null)
$this->db->where('stud_selfservice', (boolean)$stud_selfservice);
if (is_array($person_id))
$this->db->where_in('person_id', $person_id);
else
$this->db->where('person_id', $person_id);
$this->addOrder('erstelltam', 'DESC');
$this->addOrder('akte_id', 'DESC');
return $this->loadWhere([
'archiv' => true
]);
}
}
+87
View File
@@ -11,4 +11,91 @@ class Dokument_model extends DB_Model
$this->dbTable = 'public.tbl_dokument';
$this->pk = 'dokument_kurzbz';
}
/**
* Loads all missing Documents of a Studiengang
* a Prestudent has not submitted
* @param integer studiengang_kz
* @param integer prestudent_id
* @param boolean archivdokumente
* Default: true.
* If false, documents that are archivable (tbl_vorlage.archivierbar e.g. certificate, notice, ...) not retrieved
* @return Array of Documents || error
*/
public function getMissingDocuments($studiengang_kz, $prestudent_id = null, $archivdokumente = false, $person_id = null)
{
$parametersArray = array($studiengang_kz);
$qry = "SELECT
tbl_dokument.* ,
tbl_dokumentstudiengang.*
FROM public.tbl_dokument
JOIN public.tbl_dokumentstudiengang USING(dokument_kurzbz)
LEFT JOIN public.tbl_vorlage ON (tbl_dokument.dokument_kurzbz = tbl_vorlage.vorlage_kurzbz)
WHERE studiengang_kz = ? ";
if($prestudent_id)
{
array_push($parametersArray, $prestudent_id);
$qry.=" AND tbl_dokument.dokument_kurzbz NOT IN (
SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent WHERE prestudent_id= ?)";
}
if(!$archivdokumente)
{
$qry.=" AND (tbl_vorlage.archivierbar = FALSE OR tbl_vorlage.archivierbar IS NULL)";
}
$qry.=" ORDER BY tbl_dokument.dokument_kurzbz;";
return $this->execQuery($qry, $parametersArray);
}
public function getUnacceptedDocuments($prestudent_id, $person_id)
{
$parametersArray = array($person_id, $prestudent_id);
$qry = " SELECT
a.akte_id,
a.bezeichnung,
a.dokument_kurzbz,
a.titel_intern,
a.anmerkung_intern,
a.insertamum as hochgeladenamum,
a.updatevon,
a.insertvon,
a.uid,
a.dms_id,
a.anmerkung as infotext,
a.nachgereicht,
CASE
WHEN inhalt IS NOT NULL
OR a.dms_id IS NOT NULL THEN true
ELSE false
END AS vorhanden,
a.nachgereicht_am,
ausstellungsnation,
formal_geprueft_amum,
archiv,
signiert,
stud_selfservice,
akzeptiertamum,
inhalt
FROM
public.tbl_akte a
WHERE
a.person_id = ?
AND a.dokument_kurzbz NOT IN (
SELECT
dokument_kurzbz
FROM
public.tbl_dokumentprestudent
WHERE
prestudent_id = ?
)
AND a.dokument_kurzbz NOT IN ('Zeugnis','DiplSupp','Bescheid')
ORDER BY a.dokument_kurzbz;";
return $this->execQuery($qry, $parametersArray);
}
}
@@ -69,4 +69,41 @@ class Dokumentprestudent_model extends DB_Model
return $result;
}
/**
* Loads all Documents of Prestudent, already submitted
* @param integer prestudent_id
* @param boolean archivdokumente Default true. if false, archivable Documents (tbl_vorlage.archivierbar zB Zeugnis, Bescheid, ...) not retrieved
* @return Array of Documents || error
*/
public function getPrestudentDokumente($prestudent_id, $archivdokumente = true)
{
$parametersArray = array($prestudent_id);
$qry = "SELECT
d.bezeichnung,
d.dokument_kurzbz,
dp.datum as Docdatum,
dp.mitarbeiter_uid as DocMitarbeiter_uid,
dp.insertamum as Docinsertamum,
dp.prestudent_id,
CONCAT(p.vorname, ' ', p.nachname) as insertvonma
FROM
public.tbl_dokumentprestudent dp
JOIN public.tbl_dokument d USING(dokument_kurzbz)
LEFT JOIN public.tbl_vorlage v ON (d.dokument_kurzbz = v.vorlage_kurzbz)
LEFT JOIN public.tbl_benutzer bn ON (bn.uid = dp.mitarbeiter_uid)
LEFT JOIN public.tbl_person p ON (p.person_id = bn.person_id)
WHERE
prestudent_id = ?";
if(!$archivdokumente)
{
$qry.=" AND (v.archivierbar = FALSE OR v.archivierbar IS NULL)";
}
$qry.=" ORDER BY d.bezeichnung ASC";
return $this->execQuery($qry, $parametersArray);
}
}
+28
View File
@@ -340,6 +340,34 @@ class Konto_model extends DB_Model
}
/**
* @param integer $prestudent_id
* @param string $stsem
* @param array $buchungstypen
*
* @return stdClass
*/
public function checkStudienbeitragFromPrestudent($prestudent_id, $stsem, $buchungstypen)
{
$this->addSelect($this->dbTable . '.buchungsnr');
$this->addSelect($this->dbTable . '.buchungsdatum');
$this->addJoin('public.tbl_prestudent s', $this->dbTable . '.person_id=s.person_id AND ' . $this->dbTable . '.studiengang_kz=s.studiengang_kz');
$this->db->where_in('buchungstyp_kurzbz', $buchungstypen);
$this->db->where('0 >= (
SELECT sum(betrag)
FROM ' . $this->dbTable . ' skonto
WHERE skonto.buchungsnr = ' . $this->dbTable . '.buchungsnr_verweis
OR skonto.buchungsnr_verweis = ' . $this->dbTable . '.buchungsnr_verweis
)', null, false);
return $this->loadWhere([
'prestudent_id' => $prestudent_id,
'studiensemester_kurzbz' => $stsem
]);
}
/*
* check if student has paid studienbeitrag for certain semester
*
* @param $person_id person_id
+144 -8
View File
@@ -1,5 +1,7 @@
<?php
use CI3_Events as Events;
class Prestudent_model extends DB_Model
{
/**
@@ -677,7 +679,7 @@ class Prestudent_model extends DB_Model
));
}
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt)
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $ignoreAbgeschickt = false)
{
$query = "SELECT ps.prestudent_id
FROM public.tbl_prestudentstatus pss
@@ -687,22 +689,42 @@ class Prestudent_model extends DB_Model
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE ps.person_id = ?
AND UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz) = ?
AND pss.studiensemester_kurzbz = ?
AND";
AND pss.studiensemester_kurzbz = ?";
if ($abgeschickt === 'true')
$query .= " EXISTS";
else
$query .= " NOT EXISTS";
if (!$ignoreAbgeschickt)
{
$query .= "AND";
$query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss
if ($abgeschickt === 'true')
$query .= " EXISTS";
else
$query .= " NOT EXISTS";
$query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss
JOIN public.tbl_prestudent sps USING(prestudent_id)
WHERE sps.prestudent_id = ps.prestudent_id
AND spss.bewerbung_abgeschicktamum IS NOT NULL)";
}
return $this->execQuery($query, array($person, $studiengang, $studienSemester));
}
public function getByPersonWithoutLehrgang($person, $studienSemester)
{
$query = "SELECT DISTINCT(ps.prestudent_id)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE ps.person_id = ?
AND (sg.typ = 'b' OR sg.typ = 'm')
AND pss.studiensemester_kurzbz = ?";
return $this->execQuery($query, array($person, $studienSemester));
}
/**
* Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang
* @param int $prestudent_id
@@ -762,4 +784,118 @@ class Prestudent_model extends DB_Model
return $this->execQuery($query, array($person_id));
}
/**
* Adds a filter to the query builder
*
* @param array $filter
* @return boolean
*/
public function addFilter($filter)
{
if (!isset($filter['type']))
return false;
switch ($filter['type']) {
case 'konto':
$bt = '';
$stdsem = '';
$comp = '!=';
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
$bt = ' AND buchungstyp_kurzbz=' . $this->escape($filter['buchungstyp_kurzbz']);
if (isset($filter['studiensemester_kurzbz']))
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
if (isset($filter['missing']) && $filter['missing']) {
$comp = '=';
$this->db->where('get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) !=', 'Incoming');
}
$this->db->where('(
SELECT count(*)
FROM public.tbl_konto
WHERE person_id=tbl_prestudent.person_id
' . $bt . '
' . $stdsem . '
) ' . $comp, 0);
break;
case 'konto_counter':
$bt = '';
$samestg = '';
$past = '';
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
$bt = ' AND buchungstyp_kurzbz = ' . $this->escape($filter['buchungstyp_kurzbz']);
if (isset($filter['samestg']) && $filter['samestg'])
$samestg = ' AND studiengang_kz = tbl_prestudent.studiengang_kz';
if (isset($filter['past']) && $filter['past'])
$past = ' AND buchungsdatum < NOW()';
$this->db->where('(
SELECT sum(betrag)
FROM public.tbl_konto
WHERE person_id = tbl_prestudent.person_id
' . $bt . '
' . $samestg . '
' . $past . '
) !=', 0);
break;
case 'zgv':
$this->db
->group_start()
->group_start()
->where('zgv_code IS NOT NULL')
->where('zgvdatum IS NULL')
->group_end()
->or_group_start()
->where('zgvmas_code IS NOT NULL')
->where('zgvmadatum IS NULL')
->group_end()
->or_group_start()
->where('zgvdoktor_code IS NOT NULL')
->where('zgvdoktordatum IS NULL')
->group_end()
->group_end();
break;
case 'documents':
$this->db->where('(
SELECT count(*)
FROM public.tbl_dokumentstudiengang
WHERE dokument_kurzbz NOT IN (
SELECT dokument_kurzbz
FROM tbl_dokumentprestudent
WHERE prestudent_id=tbl_prestudent.prestudent_id
)
AND studiengang_kz=tbl_prestudent.studiengang_kz
) !=', 0);
break;
case 'statusgrund':
if (!isset($filter['statusgrund_id']))
return false;
if (isset($filter['studiensemester_kurzbz']))
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
$this->db->where('(
SELECT count(*)
FROM public.tbl_prestudentstatus
WHERE prestudent_id = tbl_prestudent.prestudent_id
AND statusgrund_id = ' . $this->escape($filter['statusgrund_id']) . '
' . $stdsem . '
) !=', 0);
break;
}
Events::trigger('prestudent_add_filter', $filter);
return true;
}
}
@@ -26,6 +26,77 @@ class Prestudentstatus_model extends DB_Model
$this->hasSequence = false;
}
/**
* loadWhereUid
*
* loads all rows for a student_uid
*
* @param string $uid
* @param array $where Optional. Default empty array
* @param boolean $withPrestudent Optional. Default true
*
* @return stdClass
*/
public function loadWhereUid($uid, $where = null, $withPrestudent = false)
{
$this->addSelect($this->dbTable . '.*');
$this->addJoin('public.tbl_student', 'prestudent_id');
if ($withPrestudent) {
$this->addJoin('public.tbl_prestudent s', 'prestudent_id');
$this->addSelect('s.aufmerksamdurch_kurzbz');
$this->addSelect('s.person_id');
$this->addSelect('s.studiengang_kz');
$this->addSelect('s.berufstaetigkeit_code');
$this->addSelect('s.ausbildungcode');
$this->addSelect('s.zgv_code');
$this->addSelect('s.zgvort');
$this->addSelect('s.zgvdatum');
$this->addSelect('s.zgvmas_code');
$this->addSelect('s.zgvmaort');
$this->addSelect('s.zgvmadatum');
$this->addSelect('s.aufnahmeschluessel');
$this->addSelect('s.facheinschlberuf');
$this->addSelect('s.reihungstest_id');
$this->addSelect('s.anmeldungreihungstest');
$this->addSelect('s.reihungstestangetreten');
$this->addSelect('s.rt_gesamtpunkte');
$this->addSelect('s.bismelden');
$this->addSelect('s.dual');
$this->addSelect('s.rt_punkte1');
$this->addSelect('s.rt_punkte2');
$this->addSelect('s.ausstellungsstaat');
$this->addSelect('s.rt_punkte3');
$this->addSelect('s.zgvdoktor_code');
$this->addSelect('s.zgvdoktorort');
$this->addSelect('s.zgvdoktordatum');
$this->addSelect('s.mentor');
$this->addSelect('s.zgvnation');
$this->addSelect('s.zgvmanation');
$this->addSelect('s.zgvdoktornation');
$this->addSelect('s.gsstudientyp_kurzbz');
$this->addSelect('s.aufnahmegruppe_kurzbz');
$this->addSelect('s.udf_values');
$this->addSelect('s.priorisierung');
$this->addSelect('s.foerderrelevant');
$this->addSelect('s.standort_code');
$this->addSelect('s.zgv_erfuellt');
$this->addSelect('s.zgvmas_erfuellt');
$this->addSelect('s.zgvdoktor_erfuellt');
}
$this->addOrder('datum');
$this->addOrder('insertamum');
if (!$where)
$where = [];
$where['student_uid'] = $uid;
return $this->loadWhere($where);
}
/**
* getLastStatus
*/
@@ -219,7 +290,11 @@ class Prestudentstatus_model extends DB_Model
*/
public function getLastStatusPerson($person_id, $studiensemester_kurzbz = null)
{
$query = 'SELECT *
$query = 'SELECT p.*, ps.*, s.*,
stg.kurzbz AS studiengang_kurzbz, stg.kurzbzlang AS studiengang_kurzbzlang,
UPPER(typ::varchar(1) || kurzbz) AS studiengang_kuerzel,
stg.typ AS studiengang_typ, stg.bezeichnung AS studiengang_bezeichnung, stg.english AS studiengang_bezeichnung_english,
stg.orgform_kurzbz AS studiengang_orgform
FROM public.tbl_prestudent p
JOIN (
SELECT DISTINCT ON(prestudent_id) *
@@ -227,7 +302,8 @@ class Prestudentstatus_model extends DB_Model
WHERE prestudent_id IN (SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id = ?)
ORDER BY prestudent_id, datum desc, insertamum desc
) ps USING(prestudent_id)
JOIN public.tbl_status USING(status_kurzbz)';
JOIN public.tbl_status s USING(status_kurzbz)
JOIN public.tbl_studiengang stg USING (studiengang_kz)';
$parametersArray = array($person_id);
@@ -430,17 +506,14 @@ class Prestudentstatus_model extends DB_Model
$this->addSelect('tbl_prestudentstatus.studiensemester_kurzbz');
$this->addSelect('tbl_prestudentstatus.ausbildungssemester');
$this->addSelect('tbl_prestudentstatus.datum');
$this->addSelect("TO_CHAR(tbl_prestudentstatus.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
$this->addSelect('tbl_prestudentstatus.insertamum');
$this->addSelect('tbl_prestudentstatus.insertvon');
$this->addSelect('tbl_prestudentstatus.updateamum');
$this->addSelect('tbl_prestudentstatus.updatevon');
$this->addSelect('tbl_prestudentstatus.orgform_kurzbz');
$this->addSelect('tbl_prestudentstatus.bestaetigtam');
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bestaetigtam::timestamp, 'DD.MM.YYYY') AS format_bestaetigtam");
$this->addSelect('tbl_prestudentstatus.bestaetigtvon');
$this->addSelect('tbl_prestudentstatus.bewerbung_abgeschicktamum');
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bewerbung_abgeschicktamum::timestamp, 'DD.MM.YYYY') AS format_bewerbung_abgeschicktamum");
$this->addSelect('tbl_prestudentstatus.anmerkung');
$this->addSelect('plan.studienplan_id');
$this->addSelect('plan.bezeichnung');
+294 -10
View File
@@ -10,7 +10,7 @@ class Reihungstest_model extends DB_Model
parent::__construct();
$this->dbTable = 'public.tbl_reihungstest';
$this->pk = 'reihungstest_id';
}
}
/**
* Gets a test from a test id only if it is available
@@ -42,8 +42,8 @@ class Reihungstest_model extends DB_Model
/**
* Checks if there are active studyplans which have no public placement tests assigned yet.
* Only check assignment to studyplans that are
* - Bachelor,
* - active,
* - Bachelor,
* - active,
* - set as online application
* - valid for 1st terms
* @return array Returns object array with studyplans that have no public placement tests assigned yet.
@@ -97,7 +97,7 @@ class Reihungstest_model extends DB_Model
USING (reihungstest_id)
WHERE
datum >= now()
AND
AND
oeffentlich = \'t\'
)
';
@@ -105,7 +105,7 @@ class Reihungstest_model extends DB_Model
return $this->execQuery($query);
}
/**
/**
* Gets amount of free places.
* @return array Returns object array with faculty and amount of free places
* for each public actual placement test date.
@@ -432,10 +432,10 @@ class Reihungstest_model extends DB_Model
}
/**
* Loads all applicants of a placement test
* @param integer $reihungstest_id ID of placement test
* @return array Returns object array with data of applicants.
*/
* Loads all applicants of a placement test
* @param integer $reihungstest_id ID of placement test
* @return array Returns object array with data of applicants.
*/
public function getApplicantsOfPlacementTest($reihungstest_id)
{
$query = '
@@ -511,4 +511,288 @@ class Reihungstest_model extends DB_Model
return $this->execQuery($query, array($date, $studiengang_kz));
}
}
/**
* Loads all placement tests of a given person
* @param integer $person_id
* @return array Returns object array with data of placement tests
*/
public function getReihungstestPerson($person_id)
{
$query = '
SELECT
tbl_rt_person.*,
tbl_reihungstest.studiengang_kz,
tbl_reihungstest.anmerkung,
tbl_reihungstest.datum,
tbl_reihungstest.uhrzeit,
tbl_reihungstest.ext_id,
tbl_reihungstest.max_teilnehmer,
tbl_reihungstest.oeffentlich,
tbl_reihungstest.freigeschaltet,
tbl_reihungstest.studiensemester_kurzbz as studiensemester,
tbl_reihungstest.stufe,
tbl_reihungstest.anmeldefrist,
tbl_reihungstest.aufnahmegruppe_kurzbz,
tbl_studiengang.typ,
UPPER(typ::varchar(1) || kurzbz) AS stg_kuerzel,
so.studiengangbezeichnung,
so.studiengangbezeichnung_englisch,
so.studiengangkurzbzlang
FROM
public.tbl_rt_person
JOIN public.tbl_reihungstest ON (rt_id=reihungstest_id)
JOIN public.tbl_studiengang ON tbl_reihungstest.studiengang_kz = tbl_studiengang.studiengang_kz
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
WHERE
tbl_rt_person.person_id = ?
ORDER BY datum, uhrzeit ASC';
return $this->execQuery($query, array($person_id));
}
/**
* Calculates Result of Placement Test for a given Person and given placementtest
* and with taking account of weighting per area
*
* @param Number $person_id ID of Person
* @param Boolean $punkte if true result is points else result is percentage of sum
* @param Number $reihungstest_id ID of Placementtest
* @param Array $weightedArray array of weighting per area (gewicht per gebiet_id)
* @param Boolean $has_excluded_gebiete if true, areas in the configArray will be excluded
* @param Array $basis_gebiet_id_toString areas to exclude
* @return float result points of RT
*/
public function getReihungstestErgebnisPerson(
$person_id,
$punkte,
$reihungstest_id,
$weightedArray = null,
$has_excluded_gebiete = false,
$basis_gebiet_id_toString = null
)
{
$parametersArray = array($reihungstest_id);
$qry = "
SELECT DISTINCT ON (vw_auswertung_ablauf.gebiet_id) gebiet_id,
vw_auswertung_ablauf.*,
tbl_studiengang.typ
FROM
testtool.vw_auswertung_ablauf
JOIN
public.tbl_studiengang USING (studiengang_kz)
WHERE
reihungstest_id = ? ";
//areas of Studiengang
if (!empty($basis_gebiet_id_toString))
{
$qry .= "
AND
gebiet_id IN (". $basis_gebiet_id_toString. ")
";
}
//areas to exclude
if($has_excluded_gebiete)
{
if (defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE))
{
$excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE);
$exclude_gebiet_id_arr = $excluded_gebiete;
if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0)
{
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
$qry .= "
AND
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
-- AND
-- typ = 'b'
";
}
}
}
//using prestudent Status to avoid to get the sum of more than 1 placement tests
$qry .= "
AND prestudent_id = (
SELECT
prestudent_id
FROM
public.tbl_rt_person
JOIN
public.tbl_prestudent USING(person_id)
JOIN
public.tbl_prestudentstatus USING (prestudent_id, studienplan_id)
JOIN
tbl_reihungstest ON (
tbl_rt_person.rt_id = tbl_reihungstest.reihungstest_id
)
WHERE
tbl_rt_person.person_id = ?
AND
tbl_rt_person.rt_id = ?
AND
tbl_prestudentstatus.status_kurzbz = 'Interessent'
AND
tbl_prestudentstatus.studiensemester_kurzbz = tbl_reihungstest.studiensemester_kurzbz
ORDER BY tbl_reihungstest.datum DESC, tbl_prestudent.priorisierung ASC LIMIT 1
)
";
array_push($parametersArray, $person_id);
array_push($parametersArray, $reihungstest_id);
$resultRtPerson = $this->execQuery($qry, $parametersArray);
$ergebnis = 0;
$summeGewicht = 0;
foreach ($resultRtPerson->retval as $row)
{
$prozent = 0;
if($row->punkte>=$row->maxpunkte)
{
$prozent = 100;
$row->punkte = $row->maxpunkte;
}
else
$prozent = (($row->punkte + $row->offsetpunkte)/($row->maxpunkte + $row->offsetpunkte))*100;
if($punkte == 'true')
{
if($row->punkte)
{
$ergebnis += $row->punkte;
}
}
else
{
if ($row->punkte)
{
$gew = isset($weightedArray[$row->gebiet_id]) ? $weightedArray[$row->gebiet_id] : 1;
$ergebnis += $prozent * $gew;
$summeGewicht += $gew;
}
}
}
$return = $summeGewicht > 0
? number_format($ergebnis/$summeGewicht, 4, '.', '')
: number_format($ergebnis, 4, '.', '');
return $return;
}
/**
* returns Reihungstests for given studyplans and include_ids
*
* @param Array $studienplan_arr array of studienplaene
* @param Array $include_ids array of include_ids
* @return Array List of Reihungstests
*/
public function getReihungstestByStudyPlanAndIds($studienplan_arr, $include_ids = null)
{
$studienplan_ids_string = implode(',', $studienplan_arr);
$studienplan_arr = explode(',', $studienplan_ids_string);
$parametersArray = array($studienplan_arr);
$qry = "
SELECT
distinct a.*,
CASE EXTRACT(DOW FROM a.datum)
WHEN 0 THEN 'So'
WHEN 1 THEN 'Mo'
WHEN 2 THEN 'Di'
WHEN 3 THEN 'Mi'
WHEN 4 THEN 'Do'
WHEN 5 THEN 'Fr'
WHEN 6 THEN 'Sa'
END AS wochentag,
sg.kurzbzlang as stg,
(
SELECT count(*) FROM public.tbl_rt_person
WHERE rt_id = a.reihungstest_id
) as angemeldete_teilnehmer
FROM
public.tbl_reihungstest a
JOIN public.tbl_rt_studienplan USING(reihungstest_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE studienplan_id IN ?";
if($include_ids && is_array($include_ids) && count($include_ids) > 0)
{
$include_ids_string = implode(',', $include_ids);
$include_ids = explode(',', $include_ids_string);
array_push($parametersArray, $include_ids);
$qry .= "OR reihungstest_id in ?";
}
$qry .= "ORDER BY a.datum DESC";
return $this->execQuery($qry, $parametersArray);
}
/**
* returns Reihungstests for given studyplans and include_ids
*
* @param Integer $studiengang_kz
* @param $include_id optional (here null)
* @return Array List of Reihungstests
*/
public function getZukuenftigeReihungstestStg($studiengang_kz, $include_id = null)
{
$parametersArray = array($studiengang_kz, $studiengang_kz, $include_id);
$qry = "
SELECT *,
CASE EXTRACT(DOW FROM a.datum)
WHEN 0 THEN 'So'
WHEN 1 THEN 'Mo'
WHEN 2 THEN 'Di'
WHEN 3 THEN 'Mi'
WHEN 4 THEN 'Do'
WHEN 5 THEN 'Fr'
WHEN 6 THEN 'Sa'
END AS wochentag,
(
SELECT count(*) FROM public.tbl_prestudent
WHERE reihungstest_id=a.reihungstest_id
) as angemeldete_teilnehmer
FROM
(
SELECT *, '1' as sortierung,
(
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
) as stg
FROM
public.tbl_reihungstest
WHERE
datum>=now()-'1 days'::interval AND studiengang_kz=?
UNION
SELECT *, '2' as sortierung,
(
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
) as stg
FROM
public.tbl_reihungstest
WHERE datum>=now()-'1 days'::interval AND studiengang_kz!=?
UNION
SELECT *, '0' as sortierung,
(
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
) as stg
FROM
public.tbl_reihungstest
WHERE reihungstest_id=?
ORDER BY sortierung, stg, datum
) a
";
return $this->execQuery($qry, $parametersArray);
}
}
+31 -1
View File
@@ -19,6 +19,28 @@ class Student_model extends DB_Model
$this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
}
/**
* Checks if the user is a Student.
* @param string $uid
* @return array
*/
public function isStudent($uid)
{
$this->addSelect('1');
$result = $this->loadWhere(array('student_uid' => $uid));
if(hasData($result))
{
return success(true);
}
else
{
return success(false);
}
}
// ****
// * Generiert die Matrikelnummer
// * FORMAT: 0710254001
@@ -164,7 +186,7 @@ class Student_model extends DB_Model
$max = 0;
if ($matrikelnrres && hasData($matrikelnrres)) {
$max = mb_substr($matrikelnrres->retval[0]->matrikelnr, 7);
$max = mb_substr(trim(getData($matrikelnrres)[0]->matrikelnr), -3);
if (!is_numeric($max)) {
$max = (int)$max;
}
@@ -274,4 +296,12 @@ class Student_model extends DB_Model
{
return $student_uid . '@' . DOMAIN;
}
public function getEmailAnredeForStudentUID($student_uid) {
$qry = "SELECT anrede, titelpre, vorname, vornamen, nachname, titelpost
FROM campus.vw_student
WHERE uid = ?";
return $this->execReadOnlyQuery($qry, array($student_uid));
}
}