diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index ae83fa4ff..a8f076b88 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,23 +430,21 @@ 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"); + $query_studiensemester_kurzbz = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : '\'NULL\''; - $this->PrestudentModel->addSelect($query_studiensemester_kurzbz . ' as query_studiensemester_kurzbz'); + $this->studentlistlib->addSelect($query_studiensemester_kurzbz . ' as query_studiensemester_kurzbz'); $this->addFilter($studiensemester_kurzbz); - $result = $this->PrestudentModel->loadWhere($where); + $result = $this->studentlistlib->execute($studiensemester_kurzbz); $data = $this->getDataOrTerminateWithError($result); @@ -576,7 +547,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)) @@ -584,35 +554,30 @@ 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"); - $this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz'); - - - $where = []; + $this->studentlistlib->addSelect("'' AS priorisierung_relativ"); + $this->studentlistlib->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz'); 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 @@ -626,9 +591,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); @@ -655,11 +621,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') @@ -667,16 +630,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); @@ -703,23 +665,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); @@ -747,21 +699,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); @@ -793,30 +737,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'); - $this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz'); - - //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') { @@ -826,204 +748,39 @@ 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); + + $this->studentlistlib->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz'); + 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(" - CASE - WHEN pls.status_kurzbz = 'Interessent' - THEN pls.ausbildungssemester - ELSE s.semester - END AS semester_berechnet - "); - $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/libraries/stv/StudentListLib.php b/application/libraries/stv/StudentListLib.php new file mode 100644 index 000000000..b10539f53 --- /dev/null +++ b/application/libraries/stv/StudentListLib.php @@ -0,0 +1,370 @@ +. + */ + +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(" + CASE + WHEN pls.status_kurzbz = 'Interessent' + THEN pls.ausbildungssemester + ELSE s.semester + END AS semester_berechnet + "); + $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/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index ebfd1db37..d1ce87422 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -315,22 +315,15 @@ WHERE tpl.app = '.$APP.' ) pl USING(person_id) LEFT JOIN ( - SELECT + SELECT DISTINCT ON (tbl_rueckstellung.person_id) tbl_rueckstellung.person_id, tbl_rueckstellung.datum_bis, tbl_rueckstellung.status_kurzbz, array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung FROM public.tbl_rueckstellung JOIN public.tbl_rueckstellung_status USING(status_kurzbz) - JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id - WHERE tbl_rueckstellung.rueckstellung_id = - ( - SELECT srueck.rueckstellung_id - FROM public.tbl_rueckstellung srueck - WHERE srueck.person_id = tbl_rueckstellung.person_id - AND datum_bis >= NOW() - ORDER BY srueck.datum_bis DESC LIMIT 1 - ) + WHERE tbl_rueckstellung.datum_bis >= NOW() + ORDER BY tbl_rueckstellung.person_id, tbl_rueckstellung.datum_bis DESC ) rueck ON rueck.person_id = p.person_id WHERE EXISTS ( diff --git a/application/views/system/infocenter/onboardingData.php b/application/views/system/infocenter/onboardingData.php index 5ee66fdde..bf126f283 100644 --- a/application/views/system/infocenter/onboardingData.php +++ b/application/views/system/infocenter/onboardingData.php @@ -24,22 +24,15 @@ $query = ' WHERE tpl.app = '.$APP.' ) pl ON p.person_id = pl.person_id LEFT JOIN ( - SELECT + SELECT DISTINCT ON (tbl_rueckstellung.person_id) tbl_rueckstellung.person_id, tbl_rueckstellung.datum_bis, tbl_rueckstellung.status_kurzbz, array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung FROM public.tbl_rueckstellung - JOIN public.tbl_rueckstellung_status USING(status_kurzbz) - JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id - WHERE tbl_rueckstellung.rueckstellung_id = - ( - SELECT srueck.rueckstellung_id - FROM public.tbl_rueckstellung srueck - WHERE srueck.person_id = tbl_rueckstellung.person_id - AND datum_bis >= NOW() - ORDER BY srueck.datum_bis DESC LIMIT 1 - ) + JOIN public.tbl_rueckstellung_status USING(status_kurzbz) + WHERE tbl_rueckstellung.datum_bis >= NOW() + ORDER BY tbl_rueckstellung.person_id, tbl_rueckstellung.datum_bis DESC ) rueck ON rueck.person_id = p.person_id WHERE p.person_id NOT IN (SELECT person_id FROM public.tbl_prestudent)'; diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index a5f4100c9..5a5aaaa18 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -80,9 +80,17 @@ echo '
+ + +