mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 06:54:04 +00:00
Compare commits
2
Commits
8b68e60ae8
...
47716f1aff
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47716f1aff | ||
|
|
682ad7c0e8 |
@@ -11,6 +11,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
parent::__construct([
|
||||
'getStundenplan' => ['admin:r', 'assistenz:r'],
|
||||
'getStudiensemester' => ['admin:r', 'assistenz:r'],
|
||||
'getStundenplanForStudiensemester' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
@@ -37,13 +38,33 @@ class LvTermine extends FHCAPI_Controller
|
||||
$this->getStundenplanbh($uid, '2026-02-04', '2027-02-03', $dbStundenplanTable, $groupConsecutiveHours);
|
||||
}
|
||||
|
||||
public function getStundenplanForStudiensemester($uid, $studiensemester_kurzbz, $dbStundenplanTable = "stundenplan", $groupConsecutiveHours = false)
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$resstudiensemester = getData($this->StudiensemesterModel->getStartEndeFromStudiensemester($studiensemester_kurzbz));
|
||||
$resnextstudiensemester = getData($this->StudiensemesterModel->getNextFrom($studiensemester_kurzbz));
|
||||
|
||||
$studiensemester = ($resstudiensemester && count($resstudiensemester) > 0) ? $resstudiensemester[0] : null;
|
||||
$studiensemester->studiensemester_kurzbz = $studiensemester_kurzbz;
|
||||
$nextstudiensemester = ($resnextstudiensemester && count($resnextstudiensemester) > 0) ? $resnextstudiensemester[0] : null;
|
||||
|
||||
$this->addMeta('bhsemester', $studiensemester);
|
||||
$this->addMeta('bhnextsemester', $nextstudiensemester);
|
||||
|
||||
$this->getStundenplanbh($uid, $studiensemester, $nextstudiensemester, $dbStundenplanTable, $groupConsecutiveHours);
|
||||
}
|
||||
|
||||
//TODO Build own lib or combine with Controller Stundenplan.php
|
||||
//here use of logic of Stundenplan.php, extended with parameters uid, grouping, and used dbTable
|
||||
public function getStundenplanbh($uid, $start_date = null, $end_date = null, $dbStundenplanTable = "stundenplan", $groupConsecutiveHours = false)
|
||||
public function getStundenplanbh($uid, $studiensemester, $nextstudiensemester, $dbStundenplanTable = "stundenplan", $groupConsecutiveHours = false)
|
||||
{
|
||||
$start_date = $studiensemester->start;
|
||||
$end_date = $nextstudiensemester->ende;
|
||||
$this->load->library('StundenplanLib');
|
||||
|
||||
$ci = get_instance();
|
||||
$student_uid = $uid;
|
||||
$semester_range = $this->studienSemesterErmitteln($start_date, $end_date);
|
||||
$semester_range = $this->stundenplanlib->studienSemesterErmitteln($start_date, $end_date);
|
||||
if (isError($semester_range))
|
||||
return $semester_range;
|
||||
$semester_range = getData($semester_range);
|
||||
@@ -52,12 +73,12 @@ class LvTermine extends FHCAPI_Controller
|
||||
$first_semester = $semester_range[0];
|
||||
|
||||
$this->sortStudienSemester($semester_range);
|
||||
$function_error = $this->applyLoadUeberSemesterHaelfte($semester_range);
|
||||
$function_error = $this->stundenplanlib->applyLoadUeberSemesterHaelfte($semester_range);
|
||||
$ci->addMeta('nach_apply_semester_range', $semester_range);
|
||||
if ($function_error)
|
||||
return $function_error;
|
||||
|
||||
$benutzer_gruppen = $this->fetchBenutzerGruppenFromStudiensemester($student_uid, $semester_range);
|
||||
$benutzer_gruppen = $this->fetchBenutzerGruppenFromStudiensemester($student_uid, $semester_range, $nextstudiensemester->studiensemester_kurzbz);
|
||||
if (isError($benutzer_gruppen))
|
||||
return $benutzer_gruppen;
|
||||
$benutzer_gruppen = getData($benutzer_gruppen);
|
||||
@@ -65,7 +86,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
// getting the student_lehrverbaende of the student in the different studiensemester
|
||||
|
||||
$ci->addMeta('bhsemtest', print_r($semester_range, true));
|
||||
|
||||
/*
|
||||
$semester_range = array(
|
||||
'SS2026' => array(
|
||||
'WS2025' => (object) array(
|
||||
@@ -82,14 +103,14 @@ class LvTermine extends FHCAPI_Controller
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($student_uid, $semester_range);
|
||||
*/
|
||||
$student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($student_uid, $semester_range, $studiensemester->studiensemester_kurzbz, $nextstudiensemester->studiensemester_kurzbz);
|
||||
|
||||
//get semester
|
||||
if (isError($student_lehrverband))
|
||||
return $student_lehrverband;
|
||||
$student_lehrverband = getData($student_lehrverband);
|
||||
|
||||
/*
|
||||
$student_lehrverband = array (
|
||||
'SS2026' =>
|
||||
array (
|
||||
@@ -122,7 +143,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
*/
|
||||
$ci->addMeta('studentlehrverbaende', $student_lehrverband);
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
@@ -140,8 +161,6 @@ class LvTermine extends FHCAPI_Controller
|
||||
$semesterStud = $data->ausbildungssemester;
|
||||
}
|
||||
|
||||
$ci->addMeta('semester of studentUid', $semesterStud);
|
||||
|
||||
$stundenplan_query = $this->StundenplanModel->getStundenplanQuery(
|
||||
$start_date,
|
||||
$end_date, //will be overwritten in model if $ende_semProlonged
|
||||
@@ -231,7 +250,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
);
|
||||
}
|
||||
|
||||
private function fetchBenutzerGruppenFromStudiensemester($student_uid, $semester_range)
|
||||
private function fetchBenutzerGruppenFromStudiensemester($student_uid, $semester_range, $skip_semester_kurzbz)
|
||||
{
|
||||
$this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel');
|
||||
|
||||
@@ -250,6 +269,10 @@ class LvTermine extends FHCAPI_Controller
|
||||
// each semester could have ajoint semesters that need to be checked
|
||||
foreach($semester_array as $semester=>$semester_date_range)
|
||||
{
|
||||
if($semester === $skip_semester_kurzbz)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// for each active semester query the benutzer_gruppen associated to the semester
|
||||
$benutzer_query = $this->BenutzergruppeModel->execReadOnlyQuery("
|
||||
SELECT * FROM tbl_benutzergruppe where uid = ? AND studiensemester_kurzbz = ?",[$student_uid, $semester]);
|
||||
@@ -295,7 +318,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
return success($benutzer_gruppen);
|
||||
}
|
||||
|
||||
private function fetchStudentlehrverbandFromStudiensemester($student_uid, $semester_range)
|
||||
private function fetchStudentlehrverbandFromStudiensemester($student_uid, $semester_range, $studiensemester_kurzbz, $nextstudiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel');
|
||||
|
||||
@@ -322,7 +345,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
$lehrverband_query_result = getData($lehrverband_query)??[];
|
||||
|
||||
$converted_studentLehrverband= array_map(
|
||||
function ($item)
|
||||
function ($item) use($nextstudiensemester_kurzbz, $studiensemester_kurzbz)
|
||||
{
|
||||
$result = new stdClass();
|
||||
$result->verbandsgruppe = $item->stg . $item->semester . trim($item->verband) . trim($item->gruppe);
|
||||
@@ -331,6 +354,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
$result->verband = $item->verband;
|
||||
$result->gruppe = $item->gruppe;
|
||||
$result->studiensemester_kurzbz = $item->studiensemester_kurzbz;
|
||||
$result->query_studiensemester_kurzbz = ($item->studiensemester_kurzbz === $nextstudiensemester_kurzbz) ? $studiensemester_kurzbz : $item->studiensemester_kurzbz;
|
||||
return $result;
|
||||
},
|
||||
$lehrverband_query_result);
|
||||
|
||||
@@ -683,8 +683,9 @@ class StundenplanLib
|
||||
return success($student_lehrverband);
|
||||
}
|
||||
|
||||
private function applyLoadUeberSemesterHaelfte(&$semester_range)
|
||||
public function applyLoadUeberSemesterHaelfte(&$semester_range)
|
||||
{
|
||||
$this->_ci = &get_instance();
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
/*
|
||||
@@ -812,8 +813,9 @@ class StundenplanLib
|
||||
}
|
||||
}
|
||||
|
||||
private function studienSemesterErmitteln($start_date, $end_date)
|
||||
public function studienSemesterErmitteln($start_date, $end_date)
|
||||
{
|
||||
$this->_ci = &get_instance();
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// gets all studiensemester from the student from start_date to end_date
|
||||
|
||||
@@ -557,7 +557,7 @@ class Stundenplan_model extends DB_Model
|
||||
(
|
||||
{$this->escape($lehrverband->verbandsgruppe)} like sp.verbandsgruppe || '%'
|
||||
and sp.datum between {$this->escape($sem_date_range->start)} and {$this->escape($sem_date_range->ende)}
|
||||
and (sp.studiensemester_kurzbz is null or sp.studiensemester_kurzbz = {$this->escape($lehrverband->studiensemester_kurzbz)})
|
||||
and (sp.studiensemester_kurzbz is null or sp.studiensemester_kurzbz = {$this->escape($lehrverband->query_studiensemester_kurzbz)})
|
||||
)
|
||||
EOCLAUSE;
|
||||
|
||||
@@ -599,10 +599,10 @@ EOSQL;
|
||||
// converts the array of gruppen strings into a sql IN (_,_,_) chain
|
||||
$groups = implode(', ', $gruppen[$sem_date]);
|
||||
$spezgrpclauses[] = <<<EOSPEZGRP
|
||||
(
|
||||
sp.gruppe_kurzbz IN ({$groups})
|
||||
AND sp.datum BETWEEN {$this->escape($sem_date_range->start)} AND {$this->escape($sem_date_range->ende)}
|
||||
)
|
||||
(
|
||||
sp.gruppe_kurzbz IN ({$groups})
|
||||
AND sp.datum BETWEEN {$this->escape($sem_date_range->start)} AND {$this->escape($sem_date_range->ende)}
|
||||
)
|
||||
EOSPEZGRP;
|
||||
|
||||
}
|
||||
@@ -650,7 +650,7 @@ EOSQL;
|
||||
|
||||
$lvbdclauses = $this->genLehrverbandClauses($semester, $studentlehrverbaende);
|
||||
$spezgrpclauses = $this->genSpezialgruppenClauses($semester, $gruppen);
|
||||
$chainingand = ($lvbdclauses && $spezgrpclauses) ? 'AND' : '';
|
||||
$chainingor = ($lvbdclauses && $spezgrpclauses) ? 'OR' : '';
|
||||
|
||||
$query = <<<EOSQL
|
||||
with preprocessedsp as (
|
||||
@@ -673,7 +673,7 @@ EOSQL;
|
||||
preprocessedsp sp
|
||||
where
|
||||
{$lvbdclauses}
|
||||
{$chainingand}
|
||||
{$chainingor}
|
||||
{$spezgrpclauses}
|
||||
)
|
||||
|
||||
|
||||
@@ -26,6 +26,15 @@ export default {
|
||||
+ encodeURIComponent(true)
|
||||
};
|
||||
},
|
||||
getCourselistByStudiensemester(student_uid, studiensemester_kurzbz, stundenplan) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/LvTermine/getStundenplanForStudiensemester/' + encodeURIComponent(student_uid) + '/'
|
||||
+ encodeURIComponent(studiensemester_kurzbz) + '/'
|
||||
+ encodeURIComponent(stundenplan) + '/'
|
||||
+ encodeURIComponent(true)
|
||||
};
|
||||
},
|
||||
exportCalendar(student_uid, stundenplan)
|
||||
{
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'content/statistik/termine.xls.php?student_uid=' + encodeURIComponent(student_uid) + '&db_stpl_table='+encodeURIComponent(stundenplan);
|
||||
|
||||
+2
-1
@@ -54,7 +54,8 @@ export default {
|
||||
initTabulatorOptions(){
|
||||
this.tabulatorOptions = {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getCourselist(this.id, this.dataSem.start, this.dataSem.ende, this.dbStundenplanTable)),
|
||||
//ajaxRequestFunc: () => this.$api.call(this.endpoint.getCourselist(this.id, this.dataSem.start, this.dataSem.ende, this.dbStundenplanTable)),
|
||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getCourselistByStudiensemester(this.id, this.currentSemester, this.dbStundenplanTable)),
|
||||
ajaxResponse: (url, params, response) => {
|
||||
return response.data;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user