Merge branch 'feature-63192/FHC4-Studierendenverwaltung_Semsterauswahl_fuer_mehrere_Tabs_anpassen' into rc1_FHC4_C4

This commit is contained in:
Harald Bamberger
2025-08-01 16:26:01 +02:00
29 changed files with 720 additions and 272 deletions
+47
View File
@@ -63,6 +63,53 @@ $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
// Studierendenverwaltung List Routes
$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/index';
// (studiensemester_kurzbz)/inout[/(incoming|outgoing|gemeinsamestudien)]
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout'] = 'api/frontend/v1/stv/Students/index';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien';
// (studiengang_kz)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]]
$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudents/$1';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2/$3';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2/$4';
// (studiengang_kz)/(orgform)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]]
$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3/$4';
$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3/$5';
// (studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe)
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/grp/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsSpezialgruppe/$1/$2/$3/$4';
// (studiensemester_kurzbz)/(studiengang_kz)[/(semester)[/(verband)[/(gruppe)]]]
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/(:any)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3/$4';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3/$4/$5';
// (studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/grp/(gruppe)
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/grp/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgformSpezialgruppe/$1/$2/$3/$4/$5';
// (studiensemester_kurzbz)/(studiengang_kz)/(orgform)[/(semester)[/(verband)[/(gruppe)]]]
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4/$5';
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4/$5/$6';
// // (studiensemester_kurzbz)/uid/(uid)
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/uid/(:any)'] = 'api/frontend/v1/stv/Students/getStudent/$1/$2';
// // (studiensemester_kurzbz)/prestudent/(prestudent_id)
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/prestudent/(:num)'] = 'api/frontend/v1/stv/Students/getPrestudent/$1/$2';
// // (studiensemester_kurzbz)/person/(person_id)
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/person/(:num)'] = 'api/frontend/v1/stv/Students/getPerson/$1/$2';
// load routes from extensions
$subdir = 'application/config/extensions';
$dirlist = scandir($subdir);
+1
View File
@@ -1,5 +1,6 @@
<?php
$config['number_displayed_past_studiensemester_default'] = 5;
$config['tabs'] =
[
'details' => [
@@ -74,14 +74,15 @@ class Grades extends FHCAPI_Controller
* (Entries in lehre.tbl_zeugnisnote)
*
* @param string $prestudent_id
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
* @param string|null $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded.
*
* @return void
*/
public function getCertificate($prestudent_id, $all = null)
public function getCertificate($prestudent_id, $studiensemester_kurzbz = null)
{
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudentModel->loadWhere([
'prestudent_id' => $prestudent_id
@@ -91,12 +92,13 @@ class Grades extends FHCAPI_Controller
if (!$student)
$this->terminateWithSuccess([]);
$student_uid = current($student)->student_uid;
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null;
if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$result = $this->ZeugnisnoteModel->getZeugnisnoten($student_uid, $studiensemester_kurzbz);
$grades = $this->getDataOrTerminateWithError($result);
@@ -109,14 +111,15 @@ class Grades extends FHCAPI_Controller
* (Entries in campus.tbl_lvgesamtnote)
*
* @param string $prestudent_id
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
* @param string|null $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded.
*
* @return void
*/
public function getTeacherProposal($prestudent_id, $all = null)
public function getTeacherProposal($prestudent_id, $studiensemester_kurzbz = null)
{
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudentModel->loadWhere([
'prestudent_id' => $prestudent_id
@@ -129,9 +132,11 @@ class Grades extends FHCAPI_Controller
$student_uid = current($student)->student_uid;
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null;
if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$result = $this->LvgesamtnoteModel->getLvGesamtNoten(null, $student_uid, $studiensemester_kurzbz);
$grades = $this->getDataOrTerminateWithError($result);
@@ -144,17 +149,20 @@ class Grades extends FHCAPI_Controller
* or as not allowed because of the repeating of a semester.
*
* @param string $prestudent_id
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
* @param string|false $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded.
*
* @return void
*/
public function getRepeaterGrades($prestudent_id, $all = null)
public function getRepeaterGrades($prestudent_id, $studiensemester_kurzbz = false)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->load->library('AntragLib');
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : false;
if ($studiensemester_kurzbz !== false && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$result = $this->antraglib->getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz);
$grades = $this->getDataOrTerminateWithError($result);
@@ -456,13 +464,19 @@ class Grades extends FHCAPI_Controller
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
$this->form_validation->set_rules("points", $this->p->t("stv", "grades_points"), "required|numeric");
$this->form_validation->set_rules("studiensemester_kurzbz", $this->p->t("lehre", "studiensemester"), "required|regex_match[/^[WS]S[0-9]{4}$/]");
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
$this->load->model('education/Notenschluesselaufteilung_model', 'NotenschluesselaufteilungModel');
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$this->load->model('education/Notenschluesselaufteilung_model', 'NotenschluesselaufteilungModel');
$result = $this->NotenschluesselaufteilungModel->getNote(
$this->input->post('points'),
@@ -30,6 +30,7 @@ class Status extends FHCAPI_Controller
//Load Models
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
@@ -189,9 +190,13 @@ class Status extends FHCAPI_Controller
$studiensemester_kurzbz = $lastStatusData->studiensemester_kurzbz;
if ($status_kurzbz == Prestudentstatus_model::STATUS_ABSOLVENT
|| $status_kurzbz == Prestudentstatus_model::STATUS_DIPLOMAND
) {
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
)
{
$studiensemester_kurzbz = $this->input->post('currentSemester');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
}
$ausbildungssemester = $lastStatusData->ausbildungssemester;
@@ -68,12 +68,14 @@ class Student extends FHCAPI_Controller
* @param string $prestudent_id
* @return void
*/
public function get($prestudent_id)
public function get($prestudent_id, $studiensemester_kurzbz)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('p.titelpre');
@@ -172,7 +174,7 @@ class Student extends FHCAPI_Controller
* @param string $prestudent_id
* @return void
*/
public function save($prestudent_id)
public function save($prestudent_id, $studiensemester_kurzbz)
{
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
@@ -180,14 +182,18 @@ class Student extends FHCAPI_Controller
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->load->library('form_validation');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$authuid = getAuthUID();
$now = date('c');
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date');
$this->form_validation->set_rules('semester', 'Semester', 'integer', [
@@ -48,139 +48,108 @@ class Students extends FHCAPI_Controller
}
/**
* Remap calls:
* / => return []
* /inout => return []
* /inout/incoming => getIncoming
* /inout/outgoing => getOutgoing
* /inout/gemeinsamestudien => getGemeinsamestudien
* /(studiengang_kz) => getStudents
* /(studiengang_kz)/prestudent => getPrestudents
* /(studiengang_kz)/prestudent/* => getPrestudents
* /(studiengang_kz)/(semester) => getStudents
* /(studiengang_kz)/(semester)/grp/(gruppe_kurzbz) => getStudents
* /(studiengang_kz)/(semester)/(verband) => getStudents
* /(studiengang_kz)/(semester)/(verband)/(gruppe) => getStudents
* /(studiengang_kz)/(org_form) => getStudents
* /(studiengang_kz)/(org_form)/prestudent => getPrestudents
* /(studiengang_kz)/(org_form)/prestudent/* => getPrestudents
* /(studiengang_kz)/(org_form)/(semester) => getStudents
* /(studiengang_kz)/(org_form)/(semester)/grp/(gruppe_kurzbz)
* => getStudents
* /(studiengang_kz)/(org_form)/(semester)/(verband) => getStudents
* /(studiengang_kz)/(org_form)/(semester)/(verband)/(gruppe)
* => getStudents
* /student/(student_uid) => getStudent
* /prestudent/(prestudent_id) => getPrestudent
* /person/(person_id) => getPerson
* Routing
*
* @param string $method
* @param array $params (optional)
* /inout => index
* /(studiensemester_kurzbz) => index
* /(studiensemester_kurzbz)/inout => index
*
* /(studiensemester_kurzbz)/inout/incoming => getIncoming
* /(studiensemester_kurzbz)/inout/outgoing => getOutgoing
* /(studiensemester_kurzbz)/inout/gemeinsamestudien => getGemeinsamestudien
*
* /(studiengang_kz)/prestudent => getPrestudents
* /(studiengang_kz)/prestudent/(studiensemester_kurzbz) => getPrestudents
* /(studiengang_kz)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudents
* /(studiengang_kz)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudents
*
* /(studiengang_kz)/(orgform)/prestudent => getPrestudentsOrgform
* /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz) => getPrestudentsOrgform
* /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudentsOrgform
* /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudentsOrgform
*
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialguppe
*
* /(studiensemester_kurzbz)/(studiengang_kz) => getStudents
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester) => getStudents
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/(verband) => getStudents
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/(verband)/(gruppe) => getStudents
*
* /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/grp/(gruppe) => getStudentsOrgformSpezialgruppe
*
* /(studiensemester_kurzbz)/(studiengang_kz)/(orgform) => getStudentsOrgform
* /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester) => getStudentsOrgform
* /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/(verband) => getStudentsOrgform
* /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/(verband)/(gruppe) => getStudentsOrgform
*
* /(studiensemester_kurzbz)/uid/(student_uid) => getStudent
* /(studiensemester_kurzbz)/prestudent/(prestudent_id) => getPrestudent
* /(studiensemester_kurzbz)/person/(person_id) => getPerson
*/
public function index()
{
$this->addMeta('ci_method', __FUNCTION__);
$this->terminateWithSuccess([]);
}
/**
* @return void
*/
public function _remap($method, $params = [])
public function getIncoming()
{
if ($method == '' || $method == 'index')
return $this->terminateWithSuccess([]);
$this->addMeta('ci_method', __FUNCTION__);
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
}
if ($method == 'inout') {
if (!count($params))
return $this->terminateWithSuccess([]);
switch ($params[0]) {
case 'incoming':
return $this->getIncoming();
case 'outgoing':
return $this->getOutgoing();
case 'gemeinsamestudien':
return $this->getGemeinsamestudien();
default:
return show_404();
}
}
/**
* @return void
*/
public function getOutgoing()
{
$this->addMeta('ci_method', __FUNCTION__);
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
}
$count = count($params);
if (!$count)
return $this->getStudents($method);
/**
* @return void
*/
public function getGemeinsamestudien()
{
$this->addMeta('ci_method', __FUNCTION__);
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
}
if ($method == 'uid' && $count == 1)
return $this->getStudent($params[0]);
if ($method == 'prestudent' && $count == 1)
return $this->getPrestudent($params[0]);
if ($method == 'person' && $count == 1)
return $this->getPerson($params[0]);
if (is_numeric($params[0])) {
$sem = $params[0];
if ($count == 3 && $params[1] == 'grp') {
$g = $params[2];
$ver = null;
$grp = null;
} else {
$g = null;
$ver = $count > 1 ? $params[1] : null;
$grp = $count > 2 ? $params[2] : null;
}
return $this->getStudents($method, $sem, $ver, $grp, $g);
} elseif ($params[0] == 'prestudent') {
if ($count == 1)
return $this->getPrestudents($method);
if ($count == 2)
return $this->getPrestudents($method, $params[1]);
return $this->getPrestudents($method, $params[1], $params[$count-1]);
} else {
$org = $params[0];
if ($count > 1 && $params[1] == 'prestudent') {
if ($count == 2)
return $this->getPrestudents($method, null, null, $org);
if ($count == 3)
return $this->getPrestudents($method, $params[2], null, $org);
return $this->getPrestudents($method, $params[2], $params[$count-1], $org);
}
$sem = $count > 1 ? $params[1] : null;
if ($count == 4 && $params[2] == 'grp') {
$g = $params[3];
$ver = null;
$grp = null;
} else {
$g = null;
$ver = $count > 2 ? $params[2] : null;
$grp = $count > 3 ? $params[3] : null;
}
return $this->getStudents($method, $sem, $ver, $grp, $g, $org);
}
public function getPrestudents($studiengang_kz,
$studiensemester_kurzbz = null, $filter = null
)
{
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiengang_kz' => $studiengang_kz,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'filter' => $filter
));
show_404();
$this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter);
}
/**
* @return void
*/
protected function getIncoming()
public function getPrestudentsOrgform($studiengang_kz, $orgform_kurzbz,
$studiensemester_kurzbz = null, $filter = null
)
{
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
}
/**
* @return void
*/
protected function getOutgoing()
{
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
}
/**
* @return void
*/
protected function getGemeinsamestudien()
{
// TODO(chris): IMPLEMENT!
$this->terminateWithSuccess([]);
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiengang_kz' => $studiengang_kz,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'filter' => $filter,
'orgform_kurzbz' => $orgform_kurzbz
));
$this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter, $orgform_kurzbz);
}
/**
@@ -191,7 +160,7 @@ class Students extends FHCAPI_Controller
*
* @return void
*/
protected function getPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
@@ -379,8 +348,73 @@ class Students extends FHCAPI_Controller
$this->terminateWithSuccess($data);
}
public function getStudents($studiensemester_kurzbz,
$studiengang_kz, $semester = null, $verband = null, $gruppe = null
)
{
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'studiengang_kz' => $studiengang_kz,
'semester' => $semester,
'verband' => $verband,
'gruppe' => $gruppe
));
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, null);
}
public function getStudentsOrgform($studiensemester_kurzbz,
$studiengang_kz, $orgform_kurzbz, $semester = null, $verband = null, $gruppe = null
)
{
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'studiengang_kz' => $studiengang_kz,
'orgform_kurzbz' => $orgform_kurzbz,
'semester' => $semester,
'verband' => $verband,
'gruppe' => $gruppe
));
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, $orgform_kurzbz);
}
public function getStudentsSpezialgruppe($studiensemester_kurzbz,
$studiengang_kz, $semester, $gruppe_kurzbz,
$orgform_kurzbz = null)
{
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'studiengang_kz' => $studiengang_kz,
'semester' => $semester,
'gruppe_kurzbz' => $gruppe_kurzbz
));
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, null);
}
public function getStudentsOrgformSpezialgruppe($studiensemester_kurzbz,
$orgform_kurzbz, $studiengang_kz, $semester, $gruppe_kurzbz
)
{
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'orgform_kurzbz' => $orgform_kurzbz,
'studiengang_kz' => $studiengang_kz,
'semester' => $semester,
'gruppe_kurzbz' => $gruppe_kurzbz
));
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, $orgform_kurzbz);
}
/**
* @param integer $studiengang_kz
* @param string $studiensemester_kurzbz
* @param integer $semester (optional)
* @param string $verband (optional)
* @param integer $gruppe (optional)
@@ -389,11 +423,15 @@ class Students extends FHCAPI_Controller
*
* @return void
*/
protected function getStudents($studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null)
protected function fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
/*
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
@@ -478,9 +516,20 @@ class Students extends FHCAPI_Controller
*
* @return void
*/
protected function getPrestudent($prestudent_id)
public function getPrestudent($studiensemester_kurzbz, $prestudent_id)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id,
));
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
@@ -536,9 +585,20 @@ class Students extends FHCAPI_Controller
*
* @return void
*/
protected function getStudent($student_uid)
public function getStudent($studiensemester_kurzbz, $student_uid)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $student_uid,
));
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
@@ -592,13 +652,25 @@ class Students extends FHCAPI_Controller
}
/**
* @param string $studiensemester_kurzbz
* @param integer $person_id
*
* @return void
*/
protected function getPerson($person_id)
public function getPerson($studiensemester_kurzbz, $person_id)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->addMeta('ci_method', __FUNCTION__);
$this->addMeta('ci_params', array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'person_id' => $person_id,
));
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
{
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
@@ -355,7 +355,11 @@ class Verband extends FHCAPI_Controller
$this->load->model('system/Variable_model', 'VariableModel');
$result = $this->VariableModel->getVariables(getAuthUID(), ['number_displayed_past_studiensemester']);
$data = $this->getDataOrTerminateWithError($result);
$number_displayed_past_studiensemester = $data['number_displayed_past_studiensemester'] ?? null;
$this->load->config('stv');
$number_displayed_past_studiensemester_default = $this->config->item('number_displayed_past_studiensemester_default');
$number_displayed_past_studiensemester = $data['number_displayed_past_studiensemester'] ?? $number_displayed_past_studiensemester_default;
$this->StudiensemesterModel->addPlusMinus(null, $number_displayed_past_studiensemester);
$this->StudiensemesterModel->addOrder('ende');
+2 -7
View File
@@ -500,11 +500,6 @@ class PrestudentLib
$student = current(getData($result));
$this->_ci->load->library('VariableLib', ['uid' => $authUID]);
$semester_aktuell = $this->_ci->variablelib->getVar('semester_aktuell');
// Update Aktionen
// Status updaten
@@ -545,8 +540,8 @@ class PrestudentLib
// Studentlehrverband updaten
$result = $this->_ci->StudentlehrverbandModel->update([
'student_uid' => $student->student_uid,
'studiensemester_kurzbz' => $semester_aktuell
], [
'studiensemester_kurzbz' => $studiensemester_kurzbz
], [
'semester' => $ausbildungssemester,
'verband' => '',
'gruppe' => '',
@@ -341,4 +341,10 @@ class Studiensemester_model extends DB_Model
WHERE studiensemester_kurzbz = ?",[$studiensemester_kurzbz]);
}
public function isValidStudiensemester($studiensemester_kurzbz)
{
$result = $this->load($studiensemester_kurzbz);
return hasData($result);
}
}
+10 -4
View File
@@ -16,16 +16,22 @@
*/
export default {
get(prestudent_id) {
get(prestudent_id, studiensemester_kurzbz) {
return {
method: 'post',
url: 'api/frontend/v1/stv/student/get/' + prestudent_id
url: 'api/frontend/v1/stv/student/get/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz)
};
},
save(prestudent_id, params) {
save(prestudent_id, studiensemester_kurzbz, params) {
return {
method: 'post',
url: 'api/frontend/v1/stv/student/save/' + prestudent_id,
url: 'api/frontend/v1/stv/student/save/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz),
params
};
},
+24 -11
View File
@@ -22,25 +22,34 @@ export default {
url: 'api/frontend/v1/stv/grades/list'
};
},
getCertificate(prestudent_id, all) {
all = all ? '/all' : '';
getCertificate(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return {
method: 'get',
url: 'api/frontend/v1/stv/grades/getCertificate/' + prestudent_id + all
url: url
};
},
getTeacherProposal(prestudent_id, all) {
all = all ? '/all' : '';
getTeacherProposal(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return {
method: 'get',
url: 'api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all
url: url
};
},
getRepeaterGrades(prestudent_id, all) {
all = all ? '/all' : '';
getRepeaterGrades(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return {
method: 'get',
url: 'api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id + all
url: url
};
},
updateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {
@@ -86,11 +95,15 @@ export default {
}
};
},
getGradeFromPoints(points, lehrveranstaltung_id) {
getGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz) {
return {
method: 'post',
url: 'api/frontend/v1/stv/grades/getGradeFromPoints',
params: { points, lehrveranstaltung_id }
params: {
"points": points,
"lehrveranstaltung_id": lehrveranstaltung_id,
"studiensemester_kurzbz": studiensemester_kurzbz
}
};
}
};
+5 -2
View File
@@ -17,10 +17,13 @@
export default {
//------------- Prestudent.js------------------------------------------------------
get(prestudent_id) {
get(prestudent_id, studiensemester_kurzbz) {
return {
method: 'post',
url: 'api/frontend/v1/stv/prestudent/get/' + prestudent_id
url: 'api/frontend/v1/stv/prestudent/get/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz)
};
},
updatePrestudent(prestudent_id, params) {
+18 -6
View File
@@ -16,22 +16,34 @@
*/
export default {
uid(uid) {
uid(uid, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/uid/'
+ encodeURIComponent(uid);
return {
method: 'get',
url: 'api/frontend/v1/stv/students/uid/' + uid
url: url
};
},
prestudent(prestudent_id) {
prestudent(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/prestudent/'
+ encodeURIComponent(prestudent_id);
return {
method: 'get',
url: 'api/frontend/v1/stv/students/prestudent/' + prestudent_id
url: url
};
},
person(person_id) {
person(person_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/person/'
+ encodeURIComponent(person_id);
return {
method: 'get',
url: 'api/frontend/v1/stv/students/person/' + person_id
url: url
};
},
verband(relative_path) {
+12 -6
View File
@@ -1,10 +1,16 @@
export default {
get(prestudent_id) {
return this.$fhcApi.post('api/frontend/v1/stv/student/get/' + prestudent_id);
get(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/student/get/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz);
return this.$fhcApi.post(url);
},
save(form, prestudent_id, data) {
return this.$fhcApi.post(form, 'api/frontend/v1/stv/student/save/' + prestudent_id,
data
);
save(form, prestudent_id, studiensemester_kurzbz, data) {
let url = 'api/frontend/v1/stv/student/save/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz);
return this.$fhcApi.post(form, url, data);
},
}
+27 -11
View File
@@ -2,17 +2,26 @@ export default {
list() {
return this.$fhcApi.get('api/frontend/v1/stv/grades/list');
},
getCertificate(prestudent_id, all) {
all = all ? '/all' : '';
return this.$fhcApi.get('api/frontend/v1/stv/grades/getCertificate/' + prestudent_id + all);
getCertificate(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return this.$fhcApi.get(url);
},
getTeacherProposal(prestudent_id, all) {
all = all ? '/all' : '';
return this.$fhcApi.get('api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all);
getTeacherProposal(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return this.$fhcApi.get(url);
},
getRepeaterGrades(prestudent_id, all) {
all = all ? '/all' : '';
return this.$fhcApi.get('api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id + all);
getRepeaterGrades(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);
if (!!studiensemester_kurzbz) {
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
}
return this.$fhcApi.get(url);
},
updateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {
return this.$fhcApi.post(
@@ -65,8 +74,15 @@ export default {
}
);
},
getGradeFromPoints(points, lehrveranstaltung_id, manualErrorHandling) {
getGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {
const config = manualErrorHandling ? {errorHandling: false} : {};
return this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints', {points, lehrveranstaltung_id}, config);
return this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',
{
"points": points,
"lehrveranstaltung_id": lehrveranstaltung_id,
"studiensemester_kurzbz": studiensemester_kurzbz
},
config
);
}
}
+7 -2
View File
@@ -2,8 +2,13 @@ export default {
//------------- Prestudent.js------------------------------------------------------
get(prestudent_id){
return this.$fhcApi.post('api/frontend/v1/stv/prestudent/get/' + prestudent_id);
get(prestudent_id, studiensemester_kurzbz) {
return this.$fhcApi.post(
'api/frontend/v1/stv/prestudent/get/'
+ encodeURIComponent(prestudent_id)
+ '/'
+ encodeURIComponent(studiensemester_kurzbz)
);
},
updatePrestudent(form, prestudent_id, data){
return this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,
+18 -6
View File
@@ -1,12 +1,24 @@
export default {
uid(uid) {
return this.$fhcApi.getUri('api/frontend/v1/stv/students/uid/' + uid);
uid(uid, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/uid/'
+ encodeURIComponent(uid);
return this.$fhcApi.getUri(url);
},
prestudent(prestudent_id) {
return this.$fhcApi.getUri('api/frontend/v1/stv/students/prestudent/' + prestudent_id);
prestudent(prestudent_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/prestudent/'
+ encodeURIComponent(prestudent_id);
return this.$fhcApi.getUri(url);
},
person(person_id) {
return this.$fhcApi.getUri('api/frontend/v1/stv/students/person/' + person_id);
person(person_id, studiensemester_kurzbz) {
let url = 'api/frontend/v1/stv/students/'
+ encodeURIComponent(studiensemester_kurzbz)
+ '/person/'
+ encodeURIComponent(person_id);
return this.$fhcApi.getUri(url);
},
verband(relative_path) {
return this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);
+109 -5
View File
@@ -26,14 +26,118 @@ const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes: [
{ path: `/${ciPath}/studentenverwaltung`, component: FhcStudentenverwaltung },
{ path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id`, component: FhcStudentenverwaltung },
{ path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id/:tab`, component: FhcStudentenverwaltung },
{ path: `/${ciPath}/studentenverwaltung/student/:id`, component: FhcStudentenverwaltung },
{ path: `/${ciPath}/studentenverwaltung/person/:person_id`, component: FhcStudentenverwaltung }
{
name: 'index',
path: `/${ciPath}/studentenverwaltung`,
component: FhcStudentenverwaltung
},
{
name: 'studiensemester',
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz`,
component: FhcStudentenverwaltung,
props: (route) => {
return {
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz
};
},
beforeEnter: (to, from, next) => {
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
if (!isSemester) {
return next({name: 'index'});
}
next();
}
},
{
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id`,
component: FhcStudentenverwaltung,
props: (route) => {
return {
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
url_mode: 'prestudent',
url_prestudent_id: route.params.prestudent_id
};
},
beforeEnter: (to, from, next) => {
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
if (!isSemester) {
return next({name: 'index'});
}
next();
}
},
{
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id/:tab`,
component: FhcStudentenverwaltung,
props: (route) => {
return {
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
url_mode: 'prestudent',
url_prestudent_id: route.params.prestudent_id,
url_tab: route.params.tab
};
},
beforeEnter: (to, from, next) => {
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
if (!isSemester) {
return next({name: 'index'});
}
next();
}
},
{
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/student/:id`,
component: FhcStudentenverwaltung,
props: (route) => {
return {
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
url_mode: 'student',
url_student_id: route.params.id
};
},
beforeEnter: (to, from, next) => {
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
if (!isSemester) {
return next({name: 'index'});
}
next();
}
},
{
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/person/:person_id`,
component: FhcStudentenverwaltung,
props: (route) => {
return {
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
url_mode: 'person',
url_prestudent_id: route.params.person_id
};
},
beforeEnter: (to, from, next) => {
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
if (!isSemester) {
return next({name: 'index'});
}
next();
}
},
{
path: '/:pathMatch(.*)*',
redirect: {
name: 'index'
}
}
]
});
router.afterEach((to, from, failure) => {
if (to.params.studiensemester_kurzbz) {
document.title = to.params.studiensemester_kurzbz + ' - Studierendenverwaltung FH-Complete';
} else {
document.title = 'Studierendenverwaltung FH-Complete';
}
});
const app = Vue.createApp({
name: 'StudentenverwaltungApp'
});
+82 -27
View File
@@ -85,9 +85,7 @@ export default {
student: {
defaultaction: {
type: "link",
action: function(data) {
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/student/' + data.uid;
}
action: this.buildStudentSearchResultLink
},
childactions: [
]
@@ -95,9 +93,7 @@ export default {
prestudent: {
defaultaction: {
type: "link",
action: function(data) {
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/prestudent/' + data.prestudent_id;
}
action: this.buildPrestudentSearchResultLink
},
childactions: [
]
@@ -133,15 +129,61 @@ export default {
}
}
},
watch: {
'$attrs.url_studiensemester_kurzbz': function (newVal, oldVal) {
if (newVal !== oldVal) {
this.studiensemesterKurzbz = newVal;
this.$refs.stvList.updateUrl();
this.$refs.details.reload();
}
},
'$attrs.url_mode': function () {
this.handlePersonUrl();
}
},
methods: {
onSelectVerband({link, studiengang_kz}) {
buildPrestudentSearchResultLink(data) {
return FHC_JS_DATA_STORAGE_OBJECT.app_root
+ FHC_JS_DATA_STORAGE_OBJECT.ci_router
+ '/studentenverwaltung'
+ '/' + this.studiensemesterKurzbz
+ '/prestudent/'
+ data.prestudent_id;
},
buildStudentSearchResultLink(data) {
return FHC_JS_DATA_STORAGE_OBJECT.app_root
+ FHC_JS_DATA_STORAGE_OBJECT.ci_router
+ '/studentenverwaltung'
+ '/' + this.studiensemesterKurzbz
+ '/student/'
+ data.uid;
},
onSelectVerband( {link, studiengang_kz}) {
let urlpath = String(link);
if (!urlpath.match(/\/prestudent/))
{
urlpath = 'CURRENT_SEMESTER' + '/' + urlpath;
}
this.studiengangKz = studiengang_kz;
this.$refs.stvList.updateUrl(
ApiStv.students.verband(link)
);
ApiStv.students.verband(urlpath)
);
this.$router.push({
name: 'studiensemester',
params: {
studiensemester_kurzbz: this.studiensemesterKurzbz
}
});
},
studiensemesterChanged(v) {
this.studiensemesterKurzbz = v;
this.$router.push({
params: {
studiensemester_kurzbz: v
}
});
this.$refs.stvList.updateUrl();
this.$refs.details.reload();
},
@@ -150,9 +192,38 @@ export default {
},
searchfunction(params, config) {
return this.$api.call(ApiSearchbar.searchStv(params), config);
},
handlePersonUrl() {
if (this.$route.params.id) {
this.$refs.stvList.updateUrl(
ApiStv.students.uid(this.$route.params.id, 'CURRENT_SEMESTER'),
true
);
} else if (this.$route.params.prestudent_id) {
this.$refs.stvList.updateUrl(
ApiStv.students.prestudent(this.$route.params.prestudent_id, 'CURRENT_SEMESTER'),
true
);
} else if (this.$route.params.person_id) {
this.$refs.stvList.updateUrl(
ApiStv.students.person(this.$route.params.person_id, 'CURRENT_SEMESTER'),
true
);
}
}
},
created() {
if (!this.$attrs?.url_studiensemester_kurzbz) {
this.$router.replace({
name: 'studiensemester',
params: {
studiensemester_kurzbz: this.defaultSemester
}
});
} else {
this.studiensemesterKurzbz = this.$attrs.url_studiensemester_kurzbz;
}
this.$api
.call(ApiStv.kontakt.address.getNations())
.then(result => {
@@ -214,23 +285,7 @@ export default {
mounted() {
//Test manu Systemerror
//FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto = 'ma0068@technikum-wien.at';this.$fhcAlert.handleSystemError(1);
if (this.$route.params.id) {
this.$refs.stvList.updateUrl(
ApiStv.students.uid(this.$route.params.id),
true
);
} else if (this.$route.params.prestudent_id) {
this.$refs.stvList.updateUrl(
ApiStv.students.prestudent(this.$route.params.prestudent_id),
true
);
} else if (this.$route.params.person_id) {
this.$refs.stvList.updateUrl(
ApiStv.students.person(this.$route.params.person_id),
true
);
}
this.handlePersonUrl();
},
template: `
<div class="stv">
@@ -250,7 +305,7 @@ export default {
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button>
</div>
<stv-verband @select-verband="onSelectVerband" class="col" style="height:0%"></stv-verband>
<stv-studiensemester :default="defaultSemester" @changed="studiensemesterChanged"></stv-studiensemester>
<stv-studiensemester v-model:studiensemester-kurzbz="studiensemesterKurzbz" @update:studiensemester-kurzbz="studiensemesterChanged"></stv-studiensemester>
</nav>
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
<vertical-split>
@@ -41,6 +41,10 @@ export default {
$reloadList: {
from: '$reloadList',
required: true
},
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
@@ -101,7 +105,7 @@ export default {
methods: {
updateStudent(n) {
return this.$api
.call(ApiStvDetails.get(n.prestudent_id))
.call(ApiStvDetails.get(n.prestudent_id, this.currentSemester))
.then(result => {
this.data = result.data;
if (!this.data.familienstand)
@@ -116,7 +120,11 @@ export default {
this.$refs.form.clearValidation();
return this.$refs.form
.call(ApiStvDetails.save(this.modelValue.prestudent_id, this.changed))
.call(ApiStvDetails.save(
this.modelValue.prestudent_id,
this.currentSemester,
this.changed
))
.then(result => {
this.original = {...this.data};
this.changed = {};
@@ -9,6 +9,12 @@ export default {
emits: [
"copied"
],
inject: {
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
student: Object,
allSemester: Boolean
@@ -24,7 +30,7 @@ export default {
ajaxURL: 'dummy',
ajaxRequestFunc: () => this.$api.call(ApiStvGrades.getRepeaterGrades(
this.student.prestudent_id,
this.allSemester
(!this.allSemester ? this.currentSemester : null)
)),
ajaxResponse: (url, params, response) => {
return response.data || [];
@@ -9,6 +9,12 @@ export default {
emits: [
"copied"
],
inject: {
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
student: Object,
allSemester: Boolean
@@ -24,7 +30,7 @@ export default {
ajaxURL: 'dummy',
ajaxRequestFunc: () => this.$api.call(ApiStvGrades.getTeacherProposal(
this.student.prestudent_id,
this.allSemester
(!this.allSemester ? this.currentSemester : null)
)),
ajaxResponse: (url, params, response) => {
return response.data || [];
@@ -5,14 +5,22 @@ import ZeugnisDocuments from './Zeugnis/Documents.js';
import ApiStvGrades from '../../../../../api/factory/stv/grades.js';
export default {
name: 'Zeugnis',
components: {
CoreFilterCmpt,
ZeugnisActions,
ZeugnisDocuments
},
inject: [
'config'
],
inject: {
config: {
from: 'config',
required: true
},
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
student: Object,
allSemester: Boolean
@@ -103,7 +111,8 @@ export default {
.call(
ApiStvGrades.getGradeFromPoints(
filterTerm,
cell.getData().lehrveranstaltung_id
cell.getData().lehrveranstaltung_id,
this.currentSemester
),
{ errorHandling: false }
)
@@ -201,7 +210,7 @@ export default {
ajaxURL: 'dummy',
ajaxRequestFunc: () => this.$api.call(ApiStvGrades.getCertificate(
this.student.prestudent_id,
this.allSemester
(!this.allSemester ? this.currentSemester : null)
)),
ajaxResponse: (url, params, response) => {
return response.data || [];
@@ -5,6 +5,7 @@ import ZeugnisDocuments from './Documents.js';
import ApiStvGrades from '../../../../../../api/factory/stv/grades.js';
export default {
name: 'ZeugnisActions',
components: {
CoreForm,
FormInput,
@@ -14,9 +15,16 @@ export default {
'setGrade',
'deleteGrade'
],
inject: [
'config'
],
inject: {
config: {
from: 'config',
required: true
},
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
selected: Array
},
@@ -66,7 +74,8 @@ export default {
this.$refs.points
.call(ApiStvGrades.getGradeFromPoints(
query,
this.selected.find(Boolean)?.lehrveranstaltung_id
this.selected.find(Boolean)?.lehrveranstaltung_id,
this.currentSemester
))
.then(result => {
if (result.data === null) {
@@ -8,6 +8,7 @@ async function callPermissionUrl($api, url) {
}
export default {
name: 'ZeugnisDocuments',
components: {
PvTieredMenu: primevue.tieredmenu
},
@@ -30,8 +30,9 @@ export default {
from: 'hasAdminPermission',
default: false
},
defaultSemester: {
from: 'defaultSemester',
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
@@ -107,7 +108,7 @@ export default {
methods: {
loadPrestudent() {
return this.$api
.call(ApiStvPrestudent.get(this.modelValue.prestudent_id))
.call(ApiStvPrestudent.get(this.modelValue.prestudent_id, this.currentSemester))
.then(result => result.data)
.then(result => {
this.data = result;
@@ -14,6 +14,10 @@ export default {
$reloadList: {
from: '$reloadList',
required: true
},
currentSemester: {
from: 'currentSemester',
required: true
}
},
emits: [
@@ -242,6 +246,7 @@ export default {
return askForSemester();
},
changeStatus(data) {
data.currentSemester = this.currentSemester;
Promise
.allSettled(
this.prestudentIds.map(prestudent_id => this.$api.call(
@@ -8,9 +8,16 @@ export default {
CoreFilterCmpt,
ListNew
},
inject: [
'lists'
],
inject: {
'lists': {
from: 'lists',
required: true
},
currentSemester: {
from: 'currentSemester',
required: true
}
},
props: {
selected: Array,
studiengangKz: Number,
@@ -155,7 +162,8 @@ export default {
filterKontoMissingCounter: undefined,
count: 0,
filteredcount: 0,
selectedcount: 0
selectedcount: 0,
currentEndpointRawUrl: ''
}
},
methods: {
@@ -192,13 +200,21 @@ export default {
if( endpoint === undefined )
{
endpoint = { url: '' };
endpoint = {url: this.currentEndpointRawUrl};
}
else if( endpoint.url === undefined )
{
endpoint.url = '';
endpoint.url = this.currentEndpointRawUrl;
} else
{
this.currentEndpointRawUrl = endpoint.url;
}
endpoint.url = endpoint.url.replace(
'CURRENT_SEMESTER',
encodeURIComponent(this.currentSemester)
);
const params = {}, filter = {};
if (this.filterKontoCount0)
filter.konto_count_0 = this.filterKontoCount0;
@@ -2,12 +2,12 @@ import {CoreRESTClient} from '../../../RESTClient.js';
export default {
emits: [
'changed'
'update:studiensemesterKurzbz'
],
props: {
default: {
studiensemesterKurzbz: {
type: String,
default: ''
required: true
}
},
data() {
@@ -68,7 +68,7 @@ export default {
})
.then(() => {
this.loading = false;
this.$emit('changed', this.list[this.current]);
this.$emit('update:studiensemesterKurzbz', this.list[this.current]);
})
.catch(error => {
this.current = fallback;
@@ -77,6 +77,11 @@ export default {
});
}
},
watch: {
'studiensemesterKurzbz': function () {
this.current = this.list.indexOf(this.studiensemesterKurzbz);
}
},
created() {
CoreRESTClient
.get('components/stv/studiensemester')
@@ -84,7 +89,7 @@ export default {
.then(result => {
this.list = result.map(el => el.studiensemester_kurzbz);
this.loading = false;
this.current = this.list.indexOf(this.default);
this.current = this.list.indexOf(this.studiensemesterKurzbz);
})
.catch(this.$fhcAlert.handleSystemError);
},