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 <hainberg@technikum-wien.at>
This commit is contained in:
Cris
2021-01-14 14:04:49 +01:00
committed by cris-technikum
parent 44e8bd57b0
commit 3116d4c7c9
2 changed files with 201 additions and 16 deletions
@@ -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];
}
}
}
+82 -13
View File
@@ -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;
}
}