mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-26 00:54:27 +00:00
Merge branch 'master' into feature-52803/MobilityOnline_Personenkennzeichen_Meldestichtag
This commit is contained in:
@@ -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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user