From 3116d4c7c90ca96f53919378989295041bdb94c7 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 14 Jan 2021 14:04:49 +0100 Subject: [PATCH] Adapted index method and library(deadline, status, refactored code, lib functions) - Check if application deadline is expired - Refactored retrieving Anrechnung data (reusable) - Adapted status for student view (new, in progress) Signed-off-by: cris-technikum --- .../lehre/anrechnung/RequestAnrechnung.php | 122 +++++++++++++++++- application/libraries/AnrechnungLib.php | 95 ++++++++++++-- 2 files changed, 201 insertions(+), 16 deletions(-) diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index b79c2797b..482c5ab7b 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -4,6 +4,15 @@ class requestAnrechnung extends Auth_Controller { + const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung'; + + const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; + const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF'; + const ANRECHNUNGSTATUS_APPROVED = 'approved'; + const ANRECHNUNGSTATUS_REJECTED = 'rejected'; + + const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application + public function __construct() { // Set required permissions @@ -15,12 +24,14 @@ class requestAnrechnung extends Auth_Controller ); // Load models - $this->load->model('system/Benutzerrolle_model', 'BenutzerrolleModel'); + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); // Load libraries $this->load->library('WidgetLib'); $this->load->library('PermissionLib'); $this->load->library('AnrechnungLib'); + $this->load->library('DmsLib'); // Load helpers $this->load->helper('form'); @@ -46,10 +57,35 @@ class requestAnrechnung extends Auth_Controller public function index() { $studiensemester_kurzbz = $this->input->get('studiensemester'); - $lv_id = $this->input->get('lv_id'); + $lehrveranstaltung_id = $this->input->get('lv_id'); + + if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz)) + { + show_error('Missing correct parameter'); + } + + // Check if application deadline is expired + $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz); + + // Get Anrechung data + $result = $this->anrechnunglib->getAnrechnungData($lehrveranstaltung_id); + if (!$anrechnungData = getData($result)) + { + show_error(getError($anrechnungData)); + } + + // Overwrite progress status for student view. If no Anrechnung exists yet, set to new. + $anrechnungData->status = empty($anrechnungData->status) + ? getUserLanguage() == 'German' ? 'neu' : 'new' + : $this->_getLastAnrechnungstatus($anrechnungData->anrechnung_id); $viewData = array( - 'anrechnungData' => $this->anrechnunglib->getAnrechnungData($this->_uid, $studiensemester_kurzbz, $lv_id) + 'antragData' => $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id), + 'anrechnungData' => $anrechnungData, + 'is_expired' => $is_expired, + 'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id) + ? 'disabled' + : '' ); $this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData); @@ -71,5 +107,85 @@ class requestAnrechnung extends Auth_Controller if (!$this->_uid) show_error('User authentification failed'); } + /** + * Load Prestudent by uid and Studiensemester. + * @param $uid + * @param $studiensemester_kurzbz + * @return mixed + */ + private function _loadPrestudent($uid, $studiensemester_kurzbz) + { + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + + $this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id'); + return $this->PrestudentstatusModel->loadWhere(array( + 'student_uid' => $uid, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ) + ); + } + /** + * Check if application deadline is expired. + * @param $studiensemester_kurzbz + * @return bool True if semester start is more then 1 week ago + * @throws Exception + */ + private function _checkAntragDeadline($studiensemester_kurzbz) + { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->StudiensemesterModel->addSelect('start'); + if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz))) + { + show_error(getError($start)); + } + + $start = new DateTime($start[0]->start); + $today = new DateTime('today midnight'); + + // True if today > application deadline + return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART)))); + } + + /** + * Get Anrechnung by Lehrveranstaltung + * @param $lehrveranstaltung_id + * @return mixed + */ + private function _getAnrechnung($lehrveranstaltung_id) + { + $result = $this->AnrechnungModel->loadWhere(array( + 'lehrveranstaltung_id' => $lehrveranstaltung_id + )); + + if (isError($result)) + { + show_error(getError($result)); + } + + return $result; + } + + /** + * Get last Anrechnungstatus. Modify progress status for student view. + * @param $anrechnung_id + * @return string + */ + private function _getLastAnrechnungstatus($anrechnung_id) + { + $result = $this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id); + $status_kurzbz = getData($result)[0]->status_kurzbz; + + // Dont show who is progressing the application + if ($status_kurzbz == 'inProgressDP' || $status_kurzbz == 'inProgressKF') + { + return getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process'; + } + else + { + $status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig; + return getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1]; + } + } } \ No newline at end of file diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 472a2c0e1..ad3ce44b9 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -8,21 +8,23 @@ class AnrechnungLib { $this->ci =& get_instance(); + $this->ci->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->ci->load->model('person/Person_model', 'PersonModel'); $this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); $this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel'); } /** - * Get Anrechnung data + * Get Antrag data * @param $uid * @param $studiensemester_kurzbz * @param $lv_id * @return StdClass */ - public function getAnrechnungData($uid, $studiensemester_kurzbz, $lv_id) + public function getAntragData($uid, $studiensemester_kurzbz, $lv_id) { - $anrechnung_data = new StdClass(); + $antrag_data = new StdClass(); // Get lehrveranstaltung data. Break, if course is not assigned to student. if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0]) @@ -43,23 +45,90 @@ class AnrechnungLib } // Get lectors of lehrveranstaltung - $anrechnung_data->lektoren = array(); + $antrag_data->lektoren = array(); if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id))) { show_error('Failed loading course lectors.'); } // Set the given studiensemester - $anrechnung_data->lv_bezeichnung = $lv->bezeichnung; - $anrechnung_data->ects = $lv->ects; - $anrechnung_data->studiensemester_kurzbz = $studiensemester_kurzbz; - $anrechnung_data->vorname = $person->vorname; - $anrechnung_data->nachname = $person->nachname; - $anrechnung_data->bpk = $person->bpk; - $anrechnung_data->stg_bezeichnung = $studiengang->bezeichnung; - $anrechnung_data->lektoren = $lv_lektoren; + $antrag_data->lv_id = $lv_id; + $antrag_data->lv_bezeichnung = $lv->bezeichnung; + $antrag_data->ects = $lv->ects; + $antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz; + $antrag_data->vorname = $person->vorname; + $antrag_data->nachname = $person->nachname; + $antrag_data->bpk = $person->bpk; + $antrag_data->stg_bezeichnung = $studiengang->bezeichnung; + $antrag_data->lektoren = $lv_lektoren; - return $anrechnung_data; + return $antrag_data; + } + + /** + * Get Anrechnung data by Lehrveranstaltung. Also retrieves last status and Nachweisdokument dms data. + * @param $lehrveranstaltung_id + * @return array + * @throws Exception + */ + public function getAnrechnungData($lehrveranstaltung_id) + { + $anrechnung_data = new StdClass(); + $anrechnung_data->anrechnung_id = ''; + $anrechnung_data->begruendung_id = ''; + $anrechnung_data->anmerkung = ''; + $anrechnung_data->dms_id = ''; + $anrechnung_data->insertamum = ''; + $anrechnung_data->insertvon = ''; + $anrechnung_data->studiensemester_kurzbz = ''; + $anrechnung_data->empfehlung = false; + $anrechnung_data->status = ''; + $anrechnung_data->dokumentname = ''; + + $result = $this->ci->AnrechnungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id)); + + if (isError($result)) + { + show_error(getError($result)); + } + + if ($anrechnung = getData($result)[0]) + { + // Get Anrechnung data + $anrechnung_data->anrechnung_id = $anrechnung->anrechnung_id; + $anrechnung_data->begruendung_id = $anrechnung->begruendung_id; + $anrechnung_data->anmerkung = $anrechnung->anmerkung_student; + $anrechnung_data->dms_id = $anrechnung->dms_id; + $anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y'); + $anrechnung_data->insertvon= $anrechnung->insertvon; + $anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemster_kurzbz; + $anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung; + + // Get last status bezeichnung in the users language + $anrechnung_data->status = $this->getLastAnrechnungstatus($anrechnung->anrechnung_id); + + // Get document name + $this->ci->DmsVersionModel->addSelect('name'); + $result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id)); + $anrechnung_data->dokumentname = $result->retval[0]->name; + } + + return success($anrechnung_data); + } + + /** + * @param $anrechnung_id + * @return mixed + */ + public function getLastAnrechnungstatus($anrechnung_id) + { + $result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id); + + $status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig; + $status = getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1]; + + return $status; } + } \ No newline at end of file