mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 00:12:15 +00:00
Added Cronjob to automatically add direct groups to schedule
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
<?php
|
||||
/* Copyright (C) 2019 fhcomplete.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>
|
||||
*/
|
||||
if (! defined('BASEPATH'))
|
||||
exit('No direct script access allowed');
|
||||
|
||||
class LVPlanJob extends FHC_Controller
|
||||
{
|
||||
/**
|
||||
* Initialize LVPlanJob Class
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// An empty array as parameter will ensure that this controller is ONLY callable from command line
|
||||
parent::__construct(array());
|
||||
|
||||
if ($this->input->is_cli_request())
|
||||
{
|
||||
$cli = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output->set_status_header(403, 'Jobs must be run from the CLI');
|
||||
echo "Jobs must be run from the CLI";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Main function index as help
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$result = "The following are the available command line interface commands\n\n";
|
||||
$result .= "php ".$this->config->item('index_page')." jobs/LVPlanJob AddDirectGroups";
|
||||
|
||||
echo $result.PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check all Courses with direkt Groups attached and adds the Groups to the Schedule if missing
|
||||
*/
|
||||
public function addDirectGroups()
|
||||
{
|
||||
$studiensemester_arr = array();
|
||||
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->load->model('ressource/Stundenplandev_model', 'StundenplandevModel');
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
$this->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||
|
||||
// Get actual Studiensemester
|
||||
$resultsem = $this->StudiensemesterModel->getAktOrNextSemester();
|
||||
|
||||
if(hasData($resultsem))
|
||||
{
|
||||
$studiensemester_arr[] = $resultsem->retval[0]->studiensemester_kurzbz;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'kein Studiensemester gefunden';
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get nearest Studiensemester to actual
|
||||
$resultsem = $this->StudiensemesterModel->getNearestFrom($studiensemester_arr[0]);
|
||||
if(hasData($resultsem))
|
||||
{
|
||||
$studiensemester_arr[] = $resultsem->retval[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
foreach($studiensemester_arr as $studiensemester)
|
||||
{
|
||||
echo "LVPlanJob/addDirectGroups Studiensemester: ".$studiensemester."\n";
|
||||
$succ = 0;
|
||||
$fail = 0;
|
||||
|
||||
// get all schedule entries where group is missing
|
||||
$result = $this->StundenplandevModel->getMissingDirectGroups($studiensemester);
|
||||
if(hasData($result))
|
||||
{
|
||||
foreach($result->retval as $row)
|
||||
{
|
||||
$this->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung','lehrveranstaltung_id');
|
||||
$result_le = $this->LehreinheitModel->loadWhere(array('lehreinheit_id' => $row->lehreinheit_id));
|
||||
|
||||
// load additional data of course
|
||||
$unr = null;
|
||||
$stg_kz = null;
|
||||
$semester = null;
|
||||
$gruppe_kurzbz = null;
|
||||
|
||||
if (hasData($result_le))
|
||||
{
|
||||
$le = $result_le->retval[0];
|
||||
$unr = $le->unr;
|
||||
$stg_kz = $le->studiengang_kz;
|
||||
$semester = $le->semester;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Failed to load Lehreinheit '.$row->lehreinheit_id;
|
||||
$fail++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// get direct group if course
|
||||
$result_leg = $this->LehreinheitgruppeModel->getDirectGroup($row->lehreinheit_id);
|
||||
if (hasData($result_leg))
|
||||
{
|
||||
$gruppe_kurzbz = $result_leg->retval[0]->gruppe_kurzbz;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Failed to load direct group for le '.$row->lehreinheit_id;
|
||||
$fail++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// add group to schedule
|
||||
$result = $this->StundenplandevModel->insert(
|
||||
array(
|
||||
'lehreinheit_id' => $row->lehreinheit_id,
|
||||
'unr' => $unr,
|
||||
'studiengang_kz' => $stg_kz,
|
||||
'semester' => $semester,
|
||||
'verband' => '',
|
||||
'gruppe' => '',
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'mitarbeiter_uid' => $row->mitarbeiter_uid,
|
||||
'ort_kurzbz' => $row->ort_kurzbz,
|
||||
'datum' => $row->datum,
|
||||
'stunde' => $row->stunde,
|
||||
'titel' => null,
|
||||
'anmerkung' => null,
|
||||
'fix' => false,
|
||||
'updateamum' => date('Y-m-d H:i:s'),
|
||||
'updatevon' => 'lvplanjob',
|
||||
'insertvon' => 'lvplanjob',
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
)
|
||||
);
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$succ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$fail++;
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "New Entries ".$succ."\n";
|
||||
echo "Failed ".$fail."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,14 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_lehreinheitgruppe';
|
||||
$this->pk = 'lehreinheitgruppe_id';
|
||||
}
|
||||
|
||||
public function getDirectGroup($lehreinheit_id)
|
||||
{
|
||||
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
||||
return $this->loadWhere(array(
|
||||
'tbl_gruppe.direktinskription' => true,
|
||||
'lehreinheit_id' => $lehreinheit_id
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ class Studiensemester_model extends DB_Model
|
||||
*/
|
||||
public function getAusbildungssemesterByStudiensemesterAndStudiengang($studiensemester_kurzbz, $studiengang_kz)
|
||||
{
|
||||
$query = "SELECT DISTINCT semester
|
||||
$query = "SELECT DISTINCT semester
|
||||
FROM lehre.tbl_studienplan
|
||||
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||
@@ -131,9 +131,9 @@ class Studiensemester_model extends DB_Model
|
||||
if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d')))
|
||||
return success(array());
|
||||
|
||||
$query = "SELECT *
|
||||
$query = "SELECT *
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE
|
||||
WHERE
|
||||
(ende > ?::date AND start < ?::date)
|
||||
OR start = ?::date
|
||||
OR ende = ?::date
|
||||
@@ -141,4 +141,19 @@ class Studiensemester_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($from, $to, $from, $to));
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert das Studiensemester das aktuell am naehesten zu $studiensemester_kurzbz liegt
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return array | null
|
||||
*/
|
||||
public function getNearestFrom($studiensemester_kurzbz)
|
||||
{
|
||||
$query = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester
|
||||
WHERE studiensemester_kurzbz <> ?
|
||||
ORDER BY delta LIMIT 1";
|
||||
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,54 @@ class Stundenplandev_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_stundenplandev';
|
||||
$this->pk = 'stundenplandev_id';
|
||||
}
|
||||
|
||||
public function getMissingDirectGroups($studiensemester_kurzbz = null)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
distinct lehreinheit_id, datum, stunde, mitarbeiter_uid, ort_kurzbz
|
||||
FROM
|
||||
lehre.tbl_stundenplandev stpl
|
||||
WHERE
|
||||
lehreinheit_id IN(
|
||||
SELECT
|
||||
lehreinheit_id
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitgruppe USING(lehreinheit_id)
|
||||
JOIN public.tbl_gruppe USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
tbl_gruppe.direktinskription = true
|
||||
";
|
||||
|
||||
$parametersArray = array();
|
||||
|
||||
if (!is_null($studiensemester_kurzbz))
|
||||
{
|
||||
$parametersArray[] = $studiensemester_kurzbz;
|
||||
$qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz = ?';
|
||||
}
|
||||
$qry .= ")
|
||||
AND NOT EXISTS(
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_stundenplandev
|
||||
WHERE
|
||||
datum=stpl.datum
|
||||
AND stunde=stpl.stunde
|
||||
AND lehreinheit_id=stpl.lehreinheit_id
|
||||
AND gruppe_kurzbz=(SELECT
|
||||
gruppe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehreinheitgruppe
|
||||
JOIN public.tbl_gruppe USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
lehreinheit_id=stpl.lehreinheit_id
|
||||
AND tbl_gruppe.direktinskription = true
|
||||
)
|
||||
)";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user