mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 06:54:04 +00:00
Merge branch 'bug-78215/LVPlanEintraege_in_Sommerluecke_werden_nicht_immer_angezeigt'
This commit is contained in:
@@ -80,10 +80,12 @@ class StundenplanLib
|
||||
if (isError($semester_range))
|
||||
return $semester_range;
|
||||
$semester_range = getData($semester_range);
|
||||
$this->_ci->addMeta('semester_range', $semester_range);
|
||||
|
||||
$this->sortStudienSemester($semester_range);
|
||||
|
||||
$function_error = $this->applyLoadUeberSemesterHaelfte($semester_range);
|
||||
$this->_ci->addMeta('nach_apply_semester_range', $semester_range);
|
||||
if ($function_error)
|
||||
return $function_error;
|
||||
|
||||
@@ -784,7 +786,8 @@ class StundenplanLib
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// gets all studiensemester from the student from start_date to end_date
|
||||
$semester_range = $this->_ci->StudiensemesterModel->getByDateRange($start_date, $end_date);
|
||||
//$semester_range = $this->_ci->StudiensemesterModel->getByDateRange($start_date, $end_date);
|
||||
$semester_range = $this->_ci->StudiensemesterModel->getContainingOrNearestByDateRange($start_date, $end_date);
|
||||
if (isError($semester_range))
|
||||
return $semester_range;
|
||||
|
||||
|
||||
@@ -229,6 +229,82 @@ class Studiensemester_model extends DB_Model
|
||||
return $this->execQuery($query, array($date,$date,$date,$date));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Studiensemester where the range dates are contained
|
||||
* or the nearest if date is not contained
|
||||
* @param $from
|
||||
* @param $to
|
||||
* @return array|null
|
||||
*/
|
||||
public function getContainingOrNearestByDateRange($from, $to)
|
||||
{
|
||||
if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d')))
|
||||
return success(array());
|
||||
|
||||
$query = <<<EOSQL
|
||||
WITH semester_interval_startdate AS (
|
||||
SELECT
|
||||
s.*
|
||||
FROM
|
||||
public.tbl_studiensemester s
|
||||
WHERE
|
||||
{$this->db->escape($from)}::date BETWEEN s.start AND s.ende
|
||||
ORDER BY
|
||||
s.start DESC
|
||||
LIMIT 1
|
||||
),
|
||||
semester_interval_enddate AS (
|
||||
SELECT
|
||||
s.*
|
||||
FROM
|
||||
public.tbl_studiensemester s
|
||||
WHERE
|
||||
{$this->db->escape($to)}::date BETWEEN s.start AND s.ende
|
||||
ORDER BY
|
||||
s.start DESC
|
||||
LIMIT 1
|
||||
),
|
||||
nearest_semester_interval_startdate AS (
|
||||
SELECT
|
||||
LEAST(ABS(s.start - {$this->db->escape($from)}::date), ABS(s.ende - {$this->db->escape($from)}::date)) AS mindiff,
|
||||
s.*
|
||||
FROM
|
||||
public.tbl_studiensemester s
|
||||
WHERE
|
||||
s.ende < {$this->db->escape($from)}::date
|
||||
ORDER BY
|
||||
1 ASC
|
||||
LIMIT 1
|
||||
),
|
||||
nearest_semester_interval_enddate AS (
|
||||
SELECT
|
||||
LEAST(ABS(s.start - {$this->db->escape($to)}::date), ABS(s.ende - {$this->db->escape($to)}::date)) AS mindiff,
|
||||
s.*
|
||||
FROM
|
||||
public.tbl_studiensemester s
|
||||
WHERE
|
||||
s.start > {$this->db->escape($to)}::date
|
||||
ORDER BY
|
||||
1 ASC
|
||||
LIMIT 1
|
||||
)
|
||||
SELECT
|
||||
COALESCE(
|
||||
(SELECT studiensemester_kurzbz FROM semester_interval_startdate),
|
||||
(SELECT studiensemester_kurzbz FROM nearest_semester_interval_startdate)
|
||||
) AS studiensemester_kurzbz
|
||||
UNION
|
||||
SELECT
|
||||
COALESCE(
|
||||
(SELECT studiensemester_kurzbz FROM semester_interval_enddate),
|
||||
(SELECT studiensemester_kurzbz FROM nearest_semester_interval_enddate)
|
||||
) AS studiensemester_kurzbz
|
||||
|
||||
EOSQL;
|
||||
|
||||
return $this->execReadonlyQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Studiensemester between two dates
|
||||
* @param $from
|
||||
|
||||
Reference in New Issue
Block a user