Cleaned up commit from 'feature-27351/Digitalisierung_Formulare_Abmeldung_Unterbrechung_Wiederholung'

This commit is contained in:
cgfhtw
2023-07-04 10:34:14 +02:00
parent 5213ab44ff
commit 64ce3d1f6a
82 changed files with 12192 additions and 61 deletions
@@ -511,10 +511,10 @@ class Studiengang_model extends DB_Model
public function getStudiengangTyp($studiengang_kz, $typ = null)
{
$query = "SELECT DISTINCT(sgt.*)
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
WHERE studiengang_kz IN ?";
$params[] = $studiengang_kz;
$params = [$studiengang_kz];
if (!is_null($typ))
{
@@ -524,4 +524,53 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, $params);
}
/**
* @param array $studiengang_kzs
* @param array $not_antrag_typ (optional) If the prestudent has an antrag with one of the specified types it will be excluded from the result
* @param array $prestudent_stati (optional)
*
* @return stdClass
*/
public function getAktivePrestudenten($studiengang_kzs, $not_antrag_typ = null)
{
$this->load->config('studierendenantrag');
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect($this->dbTable . '.studiengang_kz');
$this->addSelect($this->dbTable . '.bezeichnung');
$this->addSelect('o.orgform_kurzbz');
$this->addSelect('o.bezeichnung_mehrsprachig[(' . $sql . ')] AS orgform', false);
$this->addSelect('ps.ausbildungssemester AS semester');
$this->addSelect('ps.studiensemester_kurzbz');
$this->addSelect('p.prestudent_id');
$this->addSelect('pers.vorname');
$this->addSelect('pers.nachname');
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
$this->addJoin(
'public.tbl_prestudentstatus ps',
'ps.prestudent_id=p.prestudent_id
AND ps.studiensemester_kurzbz=get_stdsem_prestudent(p.prestudent_id, NULL)
AND ps.ausbildungssemester=get_absem_prestudent(p.prestudent_id, NULL)
AND ps.status_kurzbz=get_rolle_prestudent(p.prestudent_id, NULL)'
);
$this->addJoin('bis.tbl_orgform o', $this->dbTable . '.orgform_kurzbz=o.orgform_kurzbz');
$this->addJoin('public.tbl_person pers', 'person_id');
$this->db->where_in($this->dbTable . '.studiengang_kz', $studiengang_kzs);
$this->db->where_in('ps.status_kurzbz', $this->config->item('antrag_prestudentstatus_whitelist'));
$this->db->where($this->dbTable . ".aktiv", true);
if ($not_antrag_typ !== null && is_array($not_antrag_typ)) {
$this->addJoin('campus.tbl_studierendenantrag a', 'a.prestudent_id=p.prestudent_id', 'LEFT');
$this->db->group_start();
$this->db->where_not_in('a.typ', $not_antrag_typ);
$this->db->or_where('a.typ IS NULL');
$this->db->group_end();
}
return $this->load();
}
}
@@ -45,7 +45,7 @@ class Studienplan_model extends DB_Model
$whereArray["tbl_studienplan.sprache"] = $sprache;
}
return $this->StudienplanModel->loadWhere($whereArray);
return $this->loadWhere($whereArray);
}
public function getStudienplanLehrveranstaltung($studienplan_id, $semester)
@@ -53,6 +53,38 @@ class Studienplan_model extends DB_Model
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'studienplan_id');
$this->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
$this->addOrder('tbl_lehrveranstaltung.sort');
return $this->loadWhere(array(
'studienplan_id' => $studienplan_id,
'tbl_studienplan_lehrveranstaltung.semester' => $semester
));
}
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id, $note_stsem)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$sql = 'SELECT student_uid FROM public.tbl_student WHERE prestudent_id=' . $this->escape($prestudent_id);
$this->addSelect($this->dbTable . '.*');
$this->addSelect('lv.*');
$this->addSelect('COALESCE(n.bezeichnung_mehrsprachig[(' . $lang . ')], NULL) AS note');
$this->addSelect('n.positiv');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.sort plan_sort');
$this->addSelect('lehre.tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent');
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'studienplan_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin(
'lehre.tbl_zeugnisnote zn',
'zn.lehrveranstaltung_id=lv.lehrveranstaltung_id AND zn.student_uid=(' . $sql . ') AND zn.studiensemester_kurzbz=' . $this->escape($note_stsem),
'LEFT'
);
$this->addJoin('lehre.tbl_note n', 'n.note=zn.note', 'LEFT');
$this->addOrder('lehre.tbl_studienplan_lehrveranstaltung.sort');
$this->addOrder('lv.sort');
return $this->loadWhere(array(
'studienplan_id' => $studienplan_id,
'tbl_studienplan_lehrveranstaltung.semester' => $semester
@@ -204,4 +204,34 @@ class Studiensemester_model extends DB_Model
return $this->execQuery($query, array($studiensemester_kurzbz));
}
public function getFollowingSemester($studienplan_ids, $studiensemester_kurzbz, $ausbildungssemester)
{
$query = '
WITH RECURSIVE following(studiensemester_kurzbz, semester, start) AS (
SELECT studiensemester_kurzbz, ?, start
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz=?
UNION ALL
SELECT * FROM (
SELECT s.studiensemester_kurzbz, s.semester, ss.start
FROM lehre.tbl_studienplan_semester s
JOIN public.tbl_studiensemester ss USING(studiensemester_kurzbz)
INNER JOIN following a ON(s.semester=a.semester+1 AND ss.start > a.start)
WHERE studienplan_id IN ?
ORDER BY start ASC
LIMIT 1
) wrapper
)
SELECT sem.*, following.semester
FROM following
LEFT JOIN ' . $this->dbTable . ' sem USING(studiensemester_kurzbz)
ORDER BY start';
return $this->execQuery($query, [
$ausbildungssemester,
$studiensemester_kurzbz,
$studienplan_ids
]);
}
}