diff --git a/application/config/studierendenantrag.php b/application/config/studierendenantrag.php
index 4e25aef28..ef2098aca 100644
--- a/application/config/studierendenantrag.php
+++ b/application/config/studierendenantrag.php
@@ -168,3 +168,32 @@ $config['stgkz_blacklist_wiederholung'] = [];
* @var array An array of noten ids
*/
$config['note_blacklist_wiederholung'] = [];
+
+/**
+ * Enable/disable the Abmeldung StG process
+ *
+ * @var bool
+ */
+$config['abmeldung_stg_enabled'] = true;
+
+/**
+ * Enable/disable the Abmeldung process
+ *
+ * @var bool
+ */
+$config['abmeldung_enabled'] = true;
+
+/**
+ * Enable/disable the Unterbrecher process
+ *
+ * @var bool
+ */
+$config['unterbrechung_enabled'] = true;
+
+/**
+ * Enable/disable the Wiederholer process
+ *
+ * @var bool
+ */
+$config['wiederholung_enabled'] = true;
+
diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php
index b8c7830bd..913a57dc4 100644
--- a/application/controllers/api/frontend/v1/stv/Dokumente.php
+++ b/application/controllers/api/frontend/v1/stv/Dokumente.php
@@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
-
- $arrayAccepted = [];
$person_id = $this->_getPersonId($prestudent_id);
- $docNames = array_map(function ($item) {
- return $item->dokument_kurzbz;
- }, $resultPreDoc);
+ $mergedArray = [];
- foreach($docNames as $doc)
+ foreach ($resultPreDoc as $pre)
{
- $result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
+ $result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true);
if (isError($result))
- {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
- }
+
if (hasData($result))
{
- $data = getData($result);
- foreach ($data as $value)
+ foreach (getData($result) as $doc)
{
- array_push($arrayAccepted, $value);
+ $merged = clone $doc;
+ $merged->docdatum = $pre->docdatum;
+ $merged->insertvonma = $pre->insertvonma;
+ $merged->bezeichnung = $pre->bezeichnung;
+ $mergedArray[] = $merged;
}
}
- }
-
- //Mapping with document_kurzbz
- $preDocMap = [];
- foreach ($resultPreDoc as $pre) {
- $preDocMap[$pre->dokument_kurzbz] = $pre;
- }
-
- $mergedArray = [];
- foreach ($arrayAccepted as $doc) {
- $merged = clone $doc;
-
- if (isset($preDocMap[$doc->dokument_kurzbz])) {
- $merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum;
- $merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma;
- $merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung;
- } else {
- $merged->akzeptiertdatum = null;
- $merged->akzeptiertvon = null;
+ else
+ {
+ $mergedArray[] = $pre;
}
-
- $mergedArray[] = $merged;
}
$this->terminateWithSuccess($mergedArray);
diff --git a/application/controllers/api/frontend/v1/stv/Konto.php b/application/controllers/api/frontend/v1/stv/Konto.php
index ecd58671a..d59bc76b0 100644
--- a/application/controllers/api/frontend/v1/stv/Konto.php
+++ b/application/controllers/api/frontend/v1/stv/Konto.php
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
// Load language phrases
$this->loadPhrases([
- 'konto'
+ 'konto',
+ 'lehre'
]);
}
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
*
* @return void
*/
- public function getBuchungstypen()
+ public function getBuchungstypen($studiensemester_kurzbz = null)
{
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
$data = $this->getDataOrTerminateWithError($result);
+ $this->_getOEHBeitrag($data, $studiensemester_kurzbz);
$this->terminateWithSuccess($data);
}
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
$this->terminateWithSuccess();
}
+
+ private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
+ {
+ if (is_null($studiensemester_kurzbz))
+ {
+ $this->load->library('VariableLib', ['uid' => getAuthUID()]);
+ $studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
+ }
+ else
+ {
+ $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+ if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
+ $studiensemester_akt = $studiensemester_kurzbz;
+ else
+ $this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
+ }
+
+ $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
+ $oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
+
+ $oehStandardbetrag = null;
+ if (hasData($oehBeitrag))
+ {
+ $oeh = getData($oehBeitrag)[0];
+ $summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
+ $oehStandardbetrag = number_format((float)$summe, 2, '.', '');
+ }
+
+ if ($oehStandardbetrag !== null)
+ {
+ $data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
+ if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
+ {
+ $buchungstyp->standardbetrag = $oehStandardbetrag;
+ }
+ return $buchungstyp;
+ }, $data);
+ }
+ }
}
diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php
index f87e527e0..047652452 100644
--- a/application/controllers/api/frontend/v1/stv/Students.php
+++ b/application/controllers/api/frontend/v1/stv/Students.php
@@ -25,9 +25,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class Students extends FHCAPI_Controller
{
- private $allowedStgs = [];
-
-
public function __construct()
{
$permissions = [];
@@ -35,16 +32,17 @@ class Students extends FHCAPI_Controller
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
parent::__construct($permissions);
- $this->allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
- $this->allowedStgs = array_merge($this->allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
+ $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
+ $allowedStgs = array_merge($allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
- if (!$this->allowedStgs) {
+ if (!$allowedStgs) {
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
exit;
}
// Load Libraries
$this->load->library('PhrasesLib');
+ $this->load->library('stv/StudentListLib', ['allowedStgs' => $allowedStgs]);
$this->loadPhrases(
array(
'lehre'
@@ -111,23 +109,19 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM public.tbl_prestudentstatus
WHERE status_kurzbz = 'Incoming'
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
) test",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -135,16 +129,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
-
- $this->addSelectPrioRel();
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
+
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -164,10 +155,7 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM bis.tbl_bisio bis
@@ -187,14 +175,12 @@ class Students extends FHCAPI_Controller
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
GROUP BY prestudent_id
) test",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -202,16 +188,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -231,23 +214,18 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM bis.tbl_mobilitaet
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
) bis",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -255,16 +233,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -313,8 +288,6 @@ class Students extends FHCAPI_Controller
*/
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
{
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
$selectRT = "
@@ -331,38 +304,38 @@ class Students extends FHCAPI_Controller
AND r.studiensemester_kurzbz=" . $stdsemEsc;
- $where = ['tbl_prestudent.studiengang_kz' => $studiengang_kz];
+ $this->studentlistlib->addWhere('tbl_prestudent.studiengang_kz', $studiengang_kz);
if ($orgform_kurzbz) {
- $where['ps.orgform_kurzbz'] = $orgform_kurzbz;
+ $this->studentlistlib->addWhere('ps.orgform_kurzbz', $orgform_kurzbz);
}
switch ($filter) {
case "interessenten":
- $where['ps.status_kurzbz'] = 'Interessent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
break;
case "bewerbungnichtabgeschickt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bewerbung_abgeschicktamum'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NULL');
break;
case "bewerbungabgeschickt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bewerbung_abgeschicktamum IS NOT NULL'] = null;
- $where['ps.bestaetigtam'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NOT NULL');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NULL');
break;
case "statusbestaetigt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
break;
case "statusbestaetigtrtnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "statusbestaetigtrtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "zgv":
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
@@ -374,69 +347,69 @@ class Students extends FHCAPI_Controller
$this->terminateWithSuccess([]);
$stg = current($stg);
- $where['ps.status_kurzbz'] = 'Interessent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
if ($stg->typ == 'm') {
- $where['zgvmas_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgvmas_code IS NOT NULL');
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
- $where['zgvmas_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgvmas_erfuellt', true);
} elseif ($stg->typ == 'p') {
- $where['zgvdoktor_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgvdoktor_code IS NOT NULL');
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
- $where['zgvdoktor_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgvdoktor_erfuellt', true);
} else {
- $where['zgv_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgv_code IS NOT NULL');
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
- $where['zgv_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgv_erfuellt', true);
}
break;
case "reihungstestangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "reihungstestnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerber":
- $where['ps.status_kurzbz'] = 'Bewerber';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
break;
case "bewerberrtnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerberrtangemeldet":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerberrtangemeldetteilgenommen":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
- $where['reihungstestangetreten'] = true;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('reihungstestangetreten', true);
break;
case "bewerberrtangemeldetnichtteilgenommen":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
- $where['reihungstestangetreten'] = false;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('reihungstestangetreten', false);
break;
case "aufgenommen":
- $where['ps.status_kurzbz'] = 'Aufgenommener';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Aufgenommener');
break;
case "warteliste":
- $where['ps.status_kurzbz'] = 'Wartender';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Wartender');
break;
case "absage":
- $where['ps.status_kurzbz'] = 'Abgewiesener';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Abgewiesener');
break;
case "incoming":
// NOTE(chris): in FAS it was not filtered for studiengang_kz
- $where['ps.status_kurzbz'] = 'Incoming';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Incoming');
break;
case "absolvent":
- $where['ps.status_kurzbz'] = 'Absolvent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Absolvent');
break;
case "diplomand":
- $where['ps.status_kurzbz'] = 'Diplomand';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Diplomand');
break;
default:
if (!$studiensemester_kurzbz) {
@@ -444,9 +417,9 @@ class Students extends FHCAPI_Controller
* show all prestudents in this stg who don't have a status
* $orgform_kurzbz does not change the results since orgform is stored in the status table
*/
- $where['ps.status_kurzbz'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz IS NULL');
} else {
- $this->PrestudentModel->db->where_in('ps.status_kurzbz', [
+ $this->studentlistlib->addWhere('ps.status_kurzbz', [
'Interessent',
'Bewerber',
'Aufgenommener',
@@ -457,21 +430,19 @@ class Students extends FHCAPI_Controller
break;
}
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("
+ $this->studentlistlib->addSelect("
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
THEN ps.ausbildungssemester::text
ELSE ''::text
END AS semester", false);
- $this->PrestudentModel->addSelect("'' AS verband");
- $this->PrestudentModel->addSelect("'' AS gruppe");
- $this->addSelectPrioRel();
+ $this->studentlistlib->addSelect("'' AS verband");
+ $this->studentlistlib->addSelect("'' AS gruppe");
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere($where);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -574,7 +545,6 @@ class Students extends FHCAPI_Controller
$gruppe_kurzbz = null,
$orgform_kurzbz = null
) {
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
@@ -582,34 +552,29 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->prepareQuery($studiensemester_kurzbz, '');
+ // NOTE(chris): overwrite 'LEFT JOIN' with 'JOIN'
+ $this->studentlistlib->addJoin("public.tbl_student s", "prestudent_id");
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
- $this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
-
-
- $where = [];
+ $this->studentlistlib->addSelect("'' AS priorisierung_relativ");
if ($gruppe_kurzbz !== null) {
- $this->PrestudentModel->addJoin('public.tbl_benutzergruppe g', 'uid');
- $where['g.gruppe_kurzbz'] = $gruppe_kurzbz;
- $where['g.studiensemester_kurzbz'] = $studiensemester_kurzbz;
+ $this->studentlistlib->addJoin('public.tbl_benutzergruppe g', 'uid', '', 'after_b');
+ $this->studentlistlib->addWhere('g.gruppe_kurzbz', $gruppe_kurzbz);
+ $this->studentlistlib->addWhere('g.studiensemester_kurzbz', $studiensemester_kurzbz);
} else {
- $where['v.studiengang_kz'] = $studiengang_kz;
+ $this->studentlistlib->addWhere('v.studiengang_kz', $studiengang_kz);
if ($semester !== null)
- $where['v.semester'] = $semester;
+ $this->studentlistlib->addWhere('v.semester', $semester);
if ($verband !== null)
- $where['v.verband'] = $verband;
+ $this->studentlistlib->addWhere('v.verband', $verband);
if ($gruppe !== null)
- $where['v.gruppe'] = $gruppe;
+ $this->studentlistlib->addWhere('v.gruppe', $gruppe);
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
- $this->PrestudentModel->db->where(
+ $this->studentlistlib->addWhere(
"(
SELECT orgform_kurzbz
FROM public.tbl_prestudentstatus
@@ -623,9 +588,10 @@ class Students extends FHCAPI_Controller
}
}
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere($where);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -652,11 +618,8 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(
+
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -664,16 +627,15 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
+
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_id);
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 'tbl_prestudent.prestudent_id' => $prestudent_id
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -700,23 +662,13 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- $this->addSelectPrioRel();
-
+ $this->studentlistlib->addWhere('s.student_uid', $student_uid);
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 's.student_uid' => $student_uid
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -744,21 +696,13 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- $this->addSelectPrioRel();
+ $this->studentlistlib->addWhere('p.person_id', $person_id);
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 'p.person_id' => $person_id
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -790,29 +734,8 @@ class Students extends FHCAPI_Controller
$data = $this->getDataOrTerminateWithError($result);
-
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- //add status per semester
- $this->PrestudentModel->addSelect(
- "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
- . $this->PrestudentModel->escape($studiensemester_kurzbz)
- . ") AS statusofsemester"
- );
-
- $this->addSelectPrioRel();
-
- $this->addFilter($studiensemester_kurzbz);
-
$prestudent_ids = [];
$student_uids = [];
- $this->addMeta('data', $data);
foreach ($data as $row) {
$dataset = json_decode($row->data);
if ($row->type == 'prestudent') {
@@ -822,197 +745,38 @@ class Students extends FHCAPI_Controller
}
}
+
+ $this->studentlistlib->addSelect("COALESCE(
+ v.semester::text,
+ CASE
+ WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
+ THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text
+ ELSE ''::text
+ END
+ ) AS semester", false);
+
+
if ($prestudent_ids && $student_uids) {
- $this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
- $this->PrestudentModel->db->or_where_in('s.student_uid', $student_uids);
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
+ $this->studentlistlib->addOrWhere('s.student_uid', $student_uids);
} elseif ($prestudent_ids) {
- $this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
} elseif ($student_uids) {
- $this->PrestudentModel->db->where_in('s.student_uid', $student_uids);
+ $this->studentlistlib->addWhere('s.student_uid', $student_uids);
} else {
$this->terminateWithSuccess([]);
}
- $result = $this->PrestudentModel->load();
+
+ $this->addFilter($studiensemester_kurzbz);
+
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
- /**
- * @param string|null $studiensemester_kurzbz
- * @param string $type
- *
- * @return void
- */
- protected function prepareQuery($studiensemester_kurzbz, $type = 'LEFT')
- {
- $stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
-
- $this->load->config('stv');
-
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $tags = $this->config->item('stv_prestudent_tags');
-
- $whereTags = '';
- if (is_array($tags) && !isEmptyArray($tags)) {
- $tags = array_keys($tags);
-
- foreach ($tags as $key => $tag) {
- $tags[$key] = $this->db->escape($tag);
- }
- $whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
- }
- $subQueryTag = "
- (
- SELECT
- tag.prestudent_id,
- COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
- FROM (
- SELECT DISTINCT ON (n.notiz_id)
- n.notiz_id AS id,
- nt.typ_kurzbz,
- array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
- n.text AS notiz,
- nt.style,
- n.erledigt AS done,
- nz.prestudent_id
- FROM public.tbl_notizzuordnung AS nz
- JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
- JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
- . $whereTags .
- "
- ) AS tag
- GROUP BY tag.prestudent_id
- ) AS tag_data_agg
- ";
- }
-
- $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
- $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
- $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', $type);
- $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', '
- pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
- AND pls.prestudent_id=tbl_prestudent.prestudent_id
- AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
- AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
- $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
- $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
- $this->PrestudentModel->addJoin(
- 'public.tbl_studentlehrverband v',
- 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
- $type
- );
- $this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', '
- ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
- AND ps.prestudent_id=tbl_prestudent.prestudent_id
- AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
- AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
-
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
- }
-
-
- $this->PrestudentModel->addSelect("b.uid");
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $this->PrestudentModel->addSelect('tag_data_agg.tags');
- }
- $this->PrestudentModel->addSelect('titelpre');
- $this->PrestudentModel->addSelect('nachname');
- $this->PrestudentModel->addSelect('vorname');
- $this->PrestudentModel->addSelect('wahlname');
- $this->PrestudentModel->addSelect('vornamen');
- $this->PrestudentModel->addSelect('titelpost');
- $this->PrestudentModel->addSelect('ersatzkennzeichen');
- $this->PrestudentModel->addSelect('gebdatum');
- $this->PrestudentModel->addSelect('geschlecht');
- $this->PrestudentModel->addSelect('foto');
- $this->PrestudentModel->addSelect('foto_sperre');
-
- // semester
- // verband
- // gruppe
-
- //add status per semester
- $this->PrestudentModel->addSelect(
- "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
- . $this->PrestudentModel->escape($studiensemester_kurzbz)
- . ") AS statusofsemester"
- );
-
- $this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
- $this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
- $this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
- $this->PrestudentModel->addSelect("s.matrikelnr");
- $this->PrestudentModel->addSelect('p.person_id');
- $this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
- $this->PrestudentModel->addSelect('pls.datum AS status_datum');
- $this->PrestudentModel->addSelect('pls.bestaetigtam AS status_bestaetigung');
- $this->PrestudentModel->addSelect(
- "(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
- false
- );
- $this->PrestudentModel->addSelect("
- CASE WHEN b.uid IS NOT NULL AND b.uid<>''
- THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
- ELSE '' END AS mail_intern", false);
- $this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
- $this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
- $this->PrestudentModel->addSelect('pls.orgform_kurzbz');
- $this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
- $this->PrestudentModel->addSelect(
- "(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
- false
- );
- $this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
- $this->PrestudentModel->addSelect('tbl_prestudent.dual');
- $this->PrestudentModel->addSelect('p.matr_nr');
- $this->PrestudentModel->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
- $this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
-
- // priorisierung_relativ
-
- $this->PrestudentModel->addSelect('mentor');
- $this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
- $this->PrestudentModel->addSelect('unruly');
-
- $this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
-
- $this->PrestudentModel->addOrder('nachname');
- $this->PrestudentModel->addOrder('vorname');
- }
-
- /**
- * @return void
- */
- protected function addSelectPrioRel()
- {
- $this->PrestudentModel->addSelect("(
- SELECT count(*)
- FROM (
- SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
- FROM public.tbl_prestudent pss
- JOIN public.tbl_prestudentstatus USING (prestudent_id)
- WHERE person_id = p.person_id
- AND studiensemester_kurzbz = (
- SELECT studiensemester_kurzbz
- FROM public.tbl_prestudentstatus
- WHERE prestudent_id = tbl_prestudent.prestudent_id
- AND status_kurzbz = 'Interessent'
- LIMIT 1
- )
- AND status_kurzbz = 'Interessent'
- ) prest
- WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
- AND priorisierung <= tbl_prestudent.priorisierung
- ) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false);
- }
-
/**
* Adds additional filters to the query
*
diff --git a/application/controllers/jobs/AntragJob.php b/application/controllers/jobs/AntragJob.php
index 8dc4870ea..5b72518d2 100644
--- a/application/controllers/jobs/AntragJob.php
+++ b/application/controllers/jobs/AntragJob.php
@@ -40,6 +40,13 @@ class AntragJob extends JOB_Controller
*/
public function sendStglSammelmail()
{
+
+ if ($this->config->item('abmeldung_enabled') !== true &&
+ $this->config->item('abmeldung_stg_enabled') !== true &&
+ $this->config->item('unterbrechung_enabled') !== true &&
+ $this->config->item('wiederholung_enabled') !== true)
+ return $this->logError('Konnte Job nicht starten: Keine der Configs "abmeldung_stg_enabled", "abmeldung_enabled", "unterbrechung_enabled", "wiederholung_enabled" auf true gesetzt');
+
$this->load->model('person/Person_model', 'PersonModel');
$this->logInfo('Start Job sendStglSammelmail');
@@ -47,25 +54,38 @@ class AntragJob extends JOB_Controller
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->StudierendenantragModel->addJoin('public.tbl_prestudent', 'prestudent_id');
- $this->db->group_start();
- $this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG);
- $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
- $this->db->group_end();
- $this->db->or_group_start();
- $this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
- $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
- $this->db->group_end();
+ if ($this->config->item('abmeldung_enabled') === true)
+ {
+ $this->db->group_start();
+ $this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG);
+ $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
+ $this->db->group_end();
+ }
- $this->db->or_group_start();
- $this->db->where('typ', Studierendenantrag_model::TYP_UNTERBRECHUNG);
- $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
- $this->db->group_end();
+ if ($this->config->item('abmeldung_stg_enabled') === true)
+ {
+ $this->db->or_group_start();
+ $this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
+ $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
+ $this->db->group_end();
+ }
- $this->db->or_group_start();
- $this->db->where('typ', Studierendenantrag_model::TYP_WIEDERHOLUNG);
- $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_LVSASSIGNED);
- $this->db->group_end();
+ if ($this->config->item('unterbrechung_enabled') === true)
+ {
+ $this->db->or_group_start();
+ $this->db->where('typ', Studierendenantrag_model::TYP_UNTERBRECHUNG);
+ $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
+ $this->db->group_end();
+ }
+
+ if ($this->config->item('wiederholung_enabled') === true)
+ {
+ $this->db->or_group_start();
+ $this->db->where('typ', Studierendenantrag_model::TYP_WIEDERHOLUNG);
+ $this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_LVSASSIGNED);
+ $this->db->group_end();
+ }
$result = $this->StudierendenantragModel->load();
if(isError($result))
@@ -206,6 +226,10 @@ class AntragJob extends JOB_Controller
public function sendReminderWiedereinstieg()
{
$now = new DateTime();
+
+ if ($this->config->item('unterbrechung_enabled') !== true)
+ return $this->logError('Konnte Job nicht starten: Config "unterbrechung_enabled" nicht auf true gesetzt');
+
$modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier');
if (!$modifier)
@@ -363,6 +387,13 @@ class AntragJob extends JOB_Controller
{
$this->logInfo('Start Job handleWiederholerDeadline');
+ if ($this->config->item('wiederholung_enabled') !== true)
+ {
+ $this->logError('Config "wiederholung_enabled" nicht auf true gesetzt');
+ $this->logInfo('Ende Job handleWiederholerDeadline');
+ return;
+ }
+
$this->load->library('PrestudentLib');
$insertvon = $this->config->item('antrag_job_systemuser');
@@ -481,6 +512,13 @@ class AntragJob extends JOB_Controller
{
$this->logInfo('Start Job handleAbmeldungenStglDeadline');
+ if ($this->config->item('abmeldung_stg_enabled') !== true)
+ {
+ $this->logError('Config "abmeldung_stg_enabled" nicht auf true gesetzt');
+ $this->logInfo('Ende Job handleAbmeldungenStglDeadline');
+ return;
+ }
+
$insertvon = $this->config->item('antrag_job_systemuser');
if (!$insertvon) {
$this->logError('Config "antrag_job_systemuser" nicht gesetzt');
@@ -614,6 +652,13 @@ class AntragJob extends JOB_Controller
{
$this->logInfo('Start Job sendAufforderungWiederholer');
+ if ($this->config->item('wiederholung_enabled') !== true)
+ {
+ $this->logError('Config "wiederholung_enabled" nicht auf true gesetzt');
+ $this->logInfo('Ende Job sendAufforderungWiederholer');
+ return;
+ }
+
$modifier_request_1 = $this->config->item('wiederholung_job_request_1_date_modifier');
$modifier_request_2 = $this->config->item('wiederholung_job_request_2_date_modifier');
$modifier_deadline = $this->config->item('wiederholung_job_deadline_date_modifier');
diff --git a/application/controllers/lehre/Studierendenantrag.php b/application/controllers/lehre/Studierendenantrag.php
index 107c9af96..ebc1d2eaa 100644
--- a/application/controllers/lehre/Studierendenantrag.php
+++ b/application/controllers/lehre/Studierendenantrag.php
@@ -28,7 +28,9 @@ class Studierendenantrag extends FHC_Controller
'studierendenantrag'
]);
- if (strtolower($this->router->method) === 'leitung')
+ $this->load->config('studierendenantrag');
+
+ if (strtolower($this->router->method) === 'leitung')
$this->_isAllowed([
'leitung' => ['student/studierendenantrag:r', 'student/antragfreigabe:r']
]);
@@ -54,18 +56,27 @@ class Studierendenantrag extends FHC_Controller
'bezeichnungStg' => $antrag->bezeichnung,
'bezeichnungOrgform' => $antrag->orgform
);
-
- $result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
- if (getData($result) == 1)
- $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
- $result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
- if (getData($result) == 1)
- $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
+ if ($this->config->item('wiederholung_enabled') === true)
+ {
+ $result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
+ if (getData($result) == 1)
+ $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
+ }
- $result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
- if (getData($result) == 1)
- $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
+ if ($this->config->item('unterbrechung_enabled') === true)
+ {
+ $result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
+ if (getData($result) == 1)
+ $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
+ }
+
+ if ($this->config->item('abmeldung_enabled') === true)
+ {
+ $result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
+ if (getData($result) == 1)
+ $prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
+ }
}
if ($antrag->studierendenantrag_id == null)
continue;
@@ -88,45 +99,59 @@ class Studierendenantrag extends FHC_Controller
$this->load->view('lehre/Antrag/Leitung/List', [
'stgA' => $stgA,
- 'stgL' => $stgL
+ 'stgL' => $stgL,
+ 'abmeldung_enabled' => $this->config->item('abmeldung_stg_enabled')
]);
}
public function abmeldung($prestudent_id, $studierendenantrag_id = null)
{
- $this->load->view('lehre/Antrag/Create', [
- 'prestudent_id' => $prestudent_id,
- 'studierendenantrag_id' => $studierendenantrag_id,
- 'antrag_type' => 'Abmeldung'
- ]);
+ if ($this->config->item('abmeldung_enabled') === true)
+ {
+ $this->load->view('lehre/Antrag/Create', [
+ 'prestudent_id' => $prestudent_id,
+ 'studierendenantrag_id' => $studierendenantrag_id,
+ 'antrag_type' => 'Abmeldung'
+ ]);
+ }
}
public function abmeldungstgl($prestudent_id, $studierendenantrag_id = null)
{
- $this->load->view('lehre/Antrag/Create', [
- 'prestudent_id' => $prestudent_id,
- 'studierendenantrag_id' => $studierendenantrag_id,
- 'antrag_type' => 'AbmeldungStgl'
- ]);
+ if ($this->config->item('abmeldung_stg_enabled') === true)
+ {
+ $this->load->view('lehre/Antrag/Create', [
+ 'prestudent_id' => $prestudent_id,
+ 'studierendenantrag_id' => $studierendenantrag_id,
+ 'antrag_type' => 'AbmeldungStgl'
+ ]);
+ }
}
public function unterbrechung($prestudent_id, $studierendenantrag_id = null)
{
- $this->load->view('lehre/Antrag/Create', [
- 'prestudent_id' => $prestudent_id,
- 'studierendenantrag_id' => $studierendenantrag_id,
- 'antrag_type' => 'Unterbrechung'
- ]);
+ if ($this->config->item('unterbrechung_enabled') === true)
+ {
+ $this->load->view('lehre/Antrag/Create', [
+ 'prestudent_id' => $prestudent_id,
+ 'studierendenantrag_id' => $studierendenantrag_id,
+ 'antrag_type' => 'Unterbrechung'
+ ]);
+ }
+
}
public function wiederholung($prestudent_id, $studierendenantrag_id = null)
{
- $this->load->view('lehre/Antrag/Create', [
- 'prestudent_id' => $prestudent_id,
- 'studierendenantrag_id' => $studierendenantrag_id,
- 'antrag_type' => 'Wiederholung'
- ]);
+ if ($this->config->item('wiederholung_enabled') === true)
+ {
+ $this->load->view('lehre/Antrag/Create', [
+ 'prestudent_id' => $prestudent_id,
+ 'studierendenantrag_id' => $studierendenantrag_id,
+ 'antrag_type' => 'Wiederholung'
+ ]);
+ }
}
/**
diff --git a/application/core/Notiz_Controller.php b/application/core/Notiz_Controller.php
index 923970923..7269c3b09 100644
--- a/application/core/Notiz_Controller.php
+++ b/application/core/Notiz_Controller.php
@@ -417,6 +417,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$notiz_id = $this->input->post('notiz_id');
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
+ $this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || public.tbl_notiz_dokument.dms_id AS preview');
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php
index 3d8a2ea26..35edc826c 100644
--- a/application/libraries/AntragLib.php
+++ b/application/libraries/AntragLib.php
@@ -1657,7 +1657,7 @@ class AntragLib
$result = $this->_ci->StudierendenantragModel->loadWithStatusWhere($where);
if (isError($result))
- return $result;
+ return $result;
if (!hasData($result))
return error($this->_ci->p->t('studierendenantrag', "error_no_antrag_found", ['id' => $studierendenantrag_id]));
@@ -1709,6 +1709,7 @@ class AntragLib
$result->statustyp = $antrag->statustyp;
$result->status_insertvon = $antrag->status_insertvon;
$result->grund = $antrag->grund;
+ $result->status_grund = $antrag->status_grund;
$result->studierendenantrag_id = $antrag->studierendenantrag_id;
$result->typ = $antrag->typ;
$result->datum = $antrag->datum;
diff --git a/application/libraries/stv/StudentListLib.php b/application/libraries/stv/StudentListLib.php
new file mode 100644
index 000000000..bb44c8bb0
--- /dev/null
+++ b/application/libraries/stv/StudentListLib.php
@@ -0,0 +1,363 @@
+.
+ */
+
+if (! defined('BASEPATH')) exit('No direct script access allowed');
+
+/**
+ * This generates a list of students and or prestudents used for Studierendenverwaltung
+ */
+class StudentListLib
+{
+ private $_ci; // Code igniter instance
+
+ private $_allowedStgs = [];
+ private $_selects = [];
+ private $_joins = [];
+
+ /**
+ * Gets the CI instance, loads model and prepares default values
+ *
+ * @param array $params
+ *
+ * @return void
+ */
+ public function __construct($params = null)
+ {
+ $this->_ci =& get_instance(); // get code igniter instance
+
+ $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
+
+ if (isset($params['allowedStgs']))
+ $this->_allowedStgs = $params['allowedStgs'];
+
+ // Add default SELECTs
+ $this->addSelect("b.uid");
+ if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
+ $this->addSelect('tag_data_agg.tags');
+ $this->addSelect('titelpre');
+ $this->addSelect('nachname');
+ $this->addSelect('vorname');
+ $this->addSelect('wahlname');
+ $this->addSelect('vornamen');
+ $this->addSelect('titelpost');
+ $this->addSelect('ersatzkennzeichen');
+ $this->addSelect('gebdatum');
+ $this->addSelect('geschlecht');
+ $this->addSelect('foto');
+ $this->addSelect('foto_sperre');
+ $this->addSelect('v.semester');
+ $this->addSelect('v.verband');
+ $this->addSelect('v.gruppe');
+ $this->addSelect("statusofsemester"); // Will be replaced later
+ $this->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
+ $this->addSelect('tbl_prestudent.studiengang_kz');
+ $this->addSelect('stg.bezeichnung AS stg_bezeichnung');
+ $this->addSelect("s.matrikelnr");
+ $this->addSelect('p.person_id');
+ $this->addSelect('pls.status_kurzbz AS status');
+ $this->addSelect('pls.datum AS status_datum');
+ $this->addSelect('pls.bestaetigtam AS status_bestaetigung');
+ $this->addSelect(
+ "(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
+ false
+ );
+ $this->addSelect("
+ CASE WHEN b.uid IS NOT NULL AND b.uid<>''
+ THEN CONCAT(b.uid, '@', " . $this->_ci->PrestudentModel->escape(DOMAIN) . ")
+ ELSE '' END AS mail_intern", false);
+ $this->addSelect('p.anmerkung AS anmerkungen');
+ $this->addSelect('tbl_prestudent.anmerkung');
+ $this->addSelect('pls.orgform_kurzbz');
+ $this->addSelect('aufmerksamdurch_kurzbz');
+ $this->addSelect(
+ "(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
+ false
+ );
+ $this->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
+ $this->addSelect('tbl_prestudent.dual');
+ $this->addSelect('p.matr_nr');
+ $this->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
+ $this->addSelect('tbl_prestudent.prestudent_id');
+ $this->addSelect("(
+ SELECT count(*)
+ FROM (
+ SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
+ FROM public.tbl_prestudent pss
+ JOIN public.tbl_prestudentstatus USING (prestudent_id)
+ WHERE person_id = p.person_id
+ AND studiensemester_kurzbz = (
+ SELECT studiensemester_kurzbz
+ FROM public.tbl_prestudentstatus
+ WHERE prestudent_id = tbl_prestudent.prestudent_id
+ AND status_kurzbz = 'Interessent'
+ LIMIT 1
+ )
+ AND status_kurzbz = 'Interessent'
+ ) prest
+ WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
+ AND priorisierung <= tbl_prestudent.priorisierung
+ ) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); // TODO(chris): overwrite in fetchStudents
+ $this->addSelect('mentor');
+ $this->addSelect('b.aktiv AS bnaktiv');
+ $this->addSelect('unruly');
+
+ // Add default JOINs
+ $this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
+ $this->addJoin('public.tbl_person p', 'person_id');
+ $this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); // TODO(chris): overwrite in fetchStudents
+ $this->addJoin('public.tbl_prestudentstatus pls', '
+ pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
+ AND pls.prestudent_id=tbl_prestudent.prestudent_id
+ AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
+ AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
+ $this->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
+ $this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
+ $this->addJoin("v", "", ""); // Will be replaced later
+ $this->addJoin("ps", "", ""); // Will be replaced later
+ if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
+ $this->_ci->load->config('stv');
+ $tags = $this->_ci->config->item('stv_prestudent_tags');
+
+ $whereTags = '';
+ if (is_array($tags) && !isEmptyArray($tags)) {
+ $tags = array_keys($tags);
+
+ foreach ($tags as $key => $tag) {
+ $tags[$key] = $this->_ci->PrestudentModel->escape($tag);
+ }
+ $whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
+ }
+ $subQueryTag = "(
+ SELECT
+ tag.prestudent_id,
+ COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
+ FROM (
+ SELECT DISTINCT ON (n.notiz_id)
+ n.notiz_id AS id,
+ nt.typ_kurzbz,
+ array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
+ n.text AS notiz,
+ nt.style,
+ n.erledigt AS done,
+ nz.prestudent_id
+ FROM public.tbl_notizzuordnung AS nz
+ JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
+ JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " . $whereTags . "
+ ) AS tag
+ GROUP BY tag.prestudent_id
+ ) AS tag_data_agg";
+
+ $this->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
+ }
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Adds a SELECT statement to the query.
+ *
+ * @param string|array $select
+ * @param boolean $escape (optional)
+ *
+ * @return void
+ */
+ public function addSelect($select, $escape = true)
+ {
+ if (is_array($select)) {
+ foreach ($select as $s)
+ $this->addSelect($s, $escape);
+ return;
+ }
+ $alias = $this->getAliasFromSelect($select);
+ $this->_selects[$alias] = [$select, $escape];
+ }
+
+ /**
+ * Joins a table to the query.
+ *
+ * @param string $table
+ * @param string $cond
+ * @param string $type (optional)
+ * @param string $position (optional)
+ *
+ * @return void
+ */
+ public function addJoin($table, $cond, $type = '', $position = 'end')
+ {
+ $alias = $this->getAliasFromTable($table);
+
+ if ($position == 'end') {
+ return $this->_joins[$alias] = [$table, $cond, $type];
+ }
+
+ if ($position == 'start') {
+ return $this->_joins = [$alias => [$table, $cond, $type]] + $this->_joins;
+ }
+
+ if (substr($position, 0, 7) == 'before_') {
+ $ref = substr($position, 7);
+ $index = 0;
+ } elseif (substr($position, 0, 6) == 'after_') {
+ $ref = substr($position, 6);
+ $index = 1;
+ } else {
+ return $this->addJoin($table, $cond, $type);
+ }
+ if (!isset($this->_joins[$ref]))
+ return $this->addJoin($table, $cond, $type);
+
+ $key_indeces = array_flip(array_keys($this->_joins));
+ $index += $key_indeces[$ref];
+
+ if (!$index)
+ return $this->addJoin($table, $cond, $type, 'start');
+
+ $front_part = array_slice($this->_joins, 0, $index, true);
+ $back_part = array_slice($this->_joins, $index, null, true);
+
+ if (isset($front_part[$alias])) {
+ unset($front_part[$alias]);
+ }
+
+ $this->_joins = $front_part + [$alias => [$table, $cond, $type]] + $back_part;
+ }
+
+ /**
+ * Adds a WHERE clause to the query.
+ *
+ * @param string|array $key
+ * @param string|array $value
+ * @param boolean $escape
+ *
+ * @return void
+ */
+ public function addWhere($key, $value = null, $escape = true)
+ {
+ if (!is_array($key) && is_array($value)) {
+ $this->_ci->PrestudentModel->db->where_in($key, $value, $escape);
+ } else {
+ $this->_ci->PrestudentModel->db->where($key, $value, $escape);
+ }
+ }
+
+ /**
+ * Adds a OR WHERE clause to the query.
+ *
+ * @param string|array $key
+ * @param string|array $value
+ * @param boolean $escape
+ *
+ * @return void
+ */
+ public function addOrWhere($key, $value = null, $escape = true)
+ {
+ if (!is_array($key) && is_array($value)) {
+ $this->_ci->PrestudentModel->db->or_where_in($key, $value, $escape);
+ } else {
+ $this->_ci->PrestudentModel->db->or_where($key, $value, $escape);
+ }
+ }
+
+ /**
+ * Generates the query and executes it.
+ *
+ * @param string|null $studiensemester_kurzbz
+ *
+ * @return stdClass result of the query
+ */
+ public function execute($studiensemester_kurzbz)
+ {
+ $stdsemEsc = $studiensemester_kurzbz ? $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
+
+
+ $this->addSelect(
+ "public.get_rolle_prestudent(
+ public.tbl_prestudent.prestudent_id,
+ " . $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) . "
+ ) AS statusofsemester"
+ );
+ $this->addJoin(
+ 'public.tbl_studentlehrverband v',
+ 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
+ 'LEFT'
+ );
+ $this->addJoin(
+ 'public.tbl_prestudentstatus ps',
+ 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ AND ps.prestudent_id=tbl_prestudent.prestudent_id
+ AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ ',
+ 'LEFT'
+ );
+
+ $this->addWhere('tbl_prestudent.studiengang_kz', $this->_allowedStgs);
+
+ foreach ($this->_joins as $join)
+ $this->_ci->PrestudentModel->addJoin($join[0], $join[1], $join[2]);
+
+ foreach ($this->_selects as $select)
+ $this->_ci->PrestudentModel->addSelect($select[0], $select[1]);
+
+ $this->_ci->PrestudentModel->addOrder('nachname');
+ $this->_ci->PrestudentModel->addOrder('vorname');
+
+ return $this->_ci->PrestudentModel->load();
+ }
+
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Protected methods
+
+ /**
+ * Get alias of a table or select statement
+ *
+ * @param string $select
+ *
+ * @return string
+ */
+ final protected function getAliasFromSelect($select)
+ {
+ if (strpos($select, ' ') !== false) {
+ return trim(strrchr($select, ' '));
+ }
+
+ if (strpos($select, '.') !== false) {
+ return substr(strrchr($select, '.'), 1);
+ }
+
+ return $select;
+ }
+
+ /**
+ * Get alias of a table or select statement
+ *
+ * @param string|array $table
+ *
+ * @return string|array
+ */
+ final protected function getAliasFromTable($table)
+ {
+ if (strpos($table, ' ') !== false) {
+ return trim(strrchr($table, ' '));
+ }
+
+ return $table;
+ }
+}
diff --git a/application/libraries/vertragsbestandteil/AbstractBestandteil.php b/application/libraries/vertragsbestandteil/AbstractBestandteil.php
index ccd05f5e2..4e1e8b9d0 100644
--- a/application/libraries/vertragsbestandteil/AbstractBestandteil.php
+++ b/application/libraries/vertragsbestandteil/AbstractBestandteil.php
@@ -40,7 +40,9 @@ abstract class AbstractBestandteil implements IValidation
if( is_bool($new_value) && ($old_value !== $new_value) ) {
$this->modifiedcolumns[$columnname] = $columnname;
- } else if($old_value != $new_value) {
+ } else if(is_null($old_value) xor is_null($new_value)) {
+ $this->modifiedcolumns[$columnname] = $columnname;
+ } else if($old_value != $new_value) {
$this->modifiedcolumns[$columnname] = $columnname;
}
}
diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php
index 0e071f36b..71104fa91 100644
--- a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php
+++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php
@@ -137,19 +137,25 @@ EOTXT;
return parent::__toString() . $txt;
}
- /* public function validate()
+ public function validate()
{
- if( !(filter_var($this->tage, FILTER_VALIDATE_INT,
- array(
- 'options' => array(
- 'min_range' => 1,
- 'max_range' => 50
- )
- )
- )) ) {
- $this->validationerrors[] = 'Urlaubsanspruch muss eine Tagesanzahl im Bereich 1 bis 50 sein.';
+ $value = $this->vordienstzeit;
+
+ if ($value === null || $value === '') {
+ $result = null; // allow null value
+ } else {
+ $result = filter_var($value, FILTER_VALIDATE_INT, [
+ 'options' => [
+ 'min_range' => 0,
+ 'max_range' => 100
+ ]
+ ]);
+
+ if ($result === false) {
+ $this->validationerrors[] = 'Vordienstjahre muss eine ganze Zahl (0 bis 100) enthalten oder leer sein.';
+ }
}
return parent::validate();
- } */
+ }
}
diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php
index 677d01f04..40224ffc9 100644
--- a/application/models/education/Studierendenantrag_model.php
+++ b/application/models/education/Studierendenantrag_model.php
@@ -149,6 +149,7 @@ class Studierendenantrag_model extends DB_Model
$this->addSelect($this->dbTable . '.grund AS grund');
$this->addSelect('s.studierendenantrag_statustyp_kurzbz status');
$this->addSelect('s.insertvon status_insertvon');
+ $this->addSelect('s.grund AS status_grund');
$this->addSelect('t.bezeichnung[(' . $lang . ')] statustyp');
$this->addSelect('p.unruly AS unruly');
$this->addSelect($this->dbTable . '.insertamum AS insertamum');
@@ -269,6 +270,7 @@ class Studierendenantrag_model extends DB_Model
$this->addSelect($this->dbTable . '.grund');
$this->addSelect($this->dbTable . '.dms_id');
$this->addSelect('s.insertvon AS status_insertvon');
+ $this->addSelect('s.grund AS status_grund');
$this->addSelect(
"(SELECT count(1) FROM campus.tbl_studierendenantrag_status WHERE studierendenantrag_id = " .
$this->dbTable .
diff --git a/application/models/education/Studierendenantragstatus_model.php b/application/models/education/Studierendenantragstatus_model.php
index cf9cce1be..354af7491 100644
--- a/application/models/education/Studierendenantragstatus_model.php
+++ b/application/models/education/Studierendenantragstatus_model.php
@@ -50,7 +50,7 @@ class Studierendenantragstatus_model extends DB_Model
$this->addSelect('bezeichnung[(' . $lang . ')] AS typ');
$this->addJoin('campus.tbl_studierendenantrag_statustyp', 'studierendenantrag_statustyp_kurzbz');
-
+ $this->addOrder($this->dbTable. '.insertamum', 'DESC');
return $this->loadWhere($where);
}
diff --git a/application/views/lehre/Antrag/Leitung/List.php b/application/views/lehre/Antrag/Leitung/List.php
index 1225b16b6..e7d3a47f1 100644
--- a/application/views/lehre/Antrag/Leitung/List.php
+++ b/application/views/lehre/Antrag/Leitung/List.php
@@ -44,6 +44,7 @@ $this->load->view(