diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 05ac22ebd..883f8b8f8 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -234,7 +234,7 @@ class InfoCenter extends Auth_Controller $akte_id = $this->input->post('akte_id'); $formalgeprueft = $this->input->post('formal_geprueft'); - $json = false; + $json = null; if (isset($akte_id) && isset($formalgeprueft) && isset($person_id)) { @@ -247,7 +247,7 @@ class InfoCenter extends Auth_Controller if (isSuccess($result)) { - $json = $timestamp; + $json = is_null($timestamp) ? '' : $timestamp; $this->_log( $person_id, @@ -261,7 +261,7 @@ class InfoCenter extends Auth_Controller } } - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + $this->outputJsonSuccess(array($json)); } /** @@ -272,7 +272,7 @@ class InfoCenter extends Auth_Controller { $prestudentdata = $this->_loadPrestudentData($person_id); - $this->output->set_content_type('application/json')->set_output(json_encode($prestudentdata['zgvpruefungen'])); + $this->outputJsonSuccess($prestudentdata['zgvpruefungen']); } /** @@ -283,7 +283,7 @@ class InfoCenter extends Auth_Controller { $prestudent = $this->PrestudentModel->getLastPrestudent($person_id, true); - $this->output->set_content_type('application/json')->set_output(json_encode($prestudent)); + $this->outputJson($prestudent); } /** @@ -299,10 +299,10 @@ class InfoCenter extends Auth_Controller $studiengangbezeichnung = $prestudentdata['studiengang_bezeichnung']; $data = array( - 'studiengang_bezeichnung' => $studiengangbezeichnung, - 'studiengang_kurzbz' => $studiengangkurzbz, - 'data' => null - ); + 'studiengang_bezeichnung' => $studiengangbezeichnung, + 'studiengang_kurzbz' => $studiengangkurzbz, + 'data' => null + ); if (hasData($studienordnung)) { @@ -319,13 +319,14 @@ class InfoCenter extends Auth_Controller { $prestudent_id = $this->input->post('prestudentid'); $change = $this->input->post('change'); + $json = false; - if (!is_numeric($change) || !is_numeric($prestudent_id)) - $result = error('Parameteres missing'); - else - $result = $this->PrestudentModel->changePrio($prestudent_id, intval($change)); + if (is_numeric($change) || is_numeric($prestudent_id)) + { + $json = $this->PrestudentModel->changePrio($prestudent_id, intval($change)); + } - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJsonSuccess(array($json)); } /** @@ -403,7 +404,8 @@ class InfoCenter extends Auth_Controller $this->_log($logdata['person_id'], 'savezgv', array($logdata['studiengang_kurzbz'], $prestudent_id)); } } - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + + $this->outputJson($json); } /** @@ -454,7 +456,8 @@ class InfoCenter extends Auth_Controller } } } - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + + $this->outputJson($json); } /** @@ -521,9 +524,7 @@ class InfoCenter extends Auth_Controller // acceptresult returns null if no documents to accept if ($acceptresult !== null && isError($acceptresult)) - { - $json->error = 2; - } + $json->retval['nonCriticalErrors'] = 'error when accepting documents in FAS'; $logparams = array($prestudent_id, $logdata['studiengang_kurzbz'], ''); @@ -543,7 +544,7 @@ class InfoCenter extends Auth_Controller } } - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + $this->outputJson($json); } /** @@ -557,7 +558,7 @@ class InfoCenter extends Auth_Controller $notiz_id ); - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJson($result); } /** @@ -577,7 +578,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'savenotiz', array($titel)); } - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJson($result); } /** @@ -608,7 +609,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'updatenotiz', array($titel)); } - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJson($result); } /** @@ -696,9 +697,9 @@ class InfoCenter extends Auth_Controller */ public function getParkedDate($person_id) { - $result = $this->personloglib->getParkedDate($person_id); + $parkedDate = $this->personloglib->getParkedDate($person_id); - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJsonSuccess(array($parkedDate)); } /** @@ -711,7 +712,7 @@ class InfoCenter extends Auth_Controller $result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid); - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->outputJson($result); } /** @@ -722,14 +723,8 @@ class InfoCenter extends Auth_Controller $person_id = $this->input->post('person_id'); $result = $this->personloglib->unPark($person_id); - if (isError($result)) - { - $this->outputJsonError($result); - } - else - { - $this->output->set_content_type('application/json')->set_output(json_encode(getData($result))); - } + + $this->outputJson($result); } /** @@ -741,14 +736,14 @@ class InfoCenter extends Auth_Controller $result = $this->StudienjahrModel->getCurrStudienjahr(); - $json = false; + $json = null; if (hasData($result)) { $json = $result->retval[0]->ende; } - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + $this->outputJsonSuccess(array($json)); } /** @@ -1254,7 +1249,6 @@ class InfoCenter extends Auth_Controller $data = array ( 'zgvpruefungen' => $zgvpruefungen, - 'numberinteressenten' => $interessentenCount, 'abwstatusgruende' => $abwstatusgruende, 'intstatusgruende' => $intstatusgruende ); diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index 5b6901f52..7b29b43e7 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -96,7 +96,7 @@ class FHC_Controller extends CI_Controller */ protected function outputJsonSuccess($mixed) { - $this->_outputJson(success($mixed)); + $this->outputJson(success($mixed)); } /** @@ -105,7 +105,7 @@ class FHC_Controller extends CI_Controller */ protected function outputJsonError($mixed) { - $this->_outputJson(error($mixed)); + $this->outputJson(error($mixed)); } /** @@ -119,13 +119,10 @@ class FHC_Controller extends CI_Controller exit; } - //------------------------------------------------------------------------------------------------------------------ - // Private methods - /** * Utility method to output using JSON as content type */ - private function _outputJson($mixed) + protected function outputJson($mixed) { $this->output->set_content_type('application/json')->set_output(json_encode($mixed)); } diff --git a/application/models/accounting/Kostenstelle_model.php b/application/models/accounting/Kostenstelle_model.php index 719d08835..592b6e9f2 100644 --- a/application/models/accounting/Kostenstelle_model.php +++ b/application/models/accounting/Kostenstelle_model.php @@ -52,7 +52,7 @@ class Kostenstelle_model extends DB_Model * @param null $geschaeftsjahr * @return array|null */ - public function getKostenstellenForGegitschaeftsjahrWithOe($geschaeftsjahr = null) + public function getKostenstellenForGeschaeftsjahrWithOe($geschaeftsjahr = null) { $this->load->model('organisation/geschaeftsjahr_model', 'GeschaeftsjahrModel'); @@ -106,6 +106,31 @@ class Kostenstelle_model extends DB_Model } } + /** + * Gets all Kostenstellen for which logged in user is berechtigt. + * @param null $berechtigung_kurzbz + * @param null $art + * @return array + */ + public function getKostenstellenBerechtigt($berechtigung_kurzbz = null, $art = null) + { + $allkostenstellen = $this->load(); + $kostenstellen = array(); + + if (hasData($allkostenstellen)) + { + foreach ($allkostenstellen->retval as $kostenstelle) + { + if ($this->permissionlib->isBerechtigt($berechtigung_kurzbz, $art, null, $kostenstelle->kostenstelle_id)) + { + $kostenstellen[] = $kostenstelle; + } + } + } + + return success($kostenstellen); + } + /** * Gets either given Geschaeftsjahr, current Geschaeftsjahr if not given, or chronologically last Geschaeftsjahr if there is no current * @param $geschaeftsjahr diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 737d482f8..7dba40153 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -14,6 +14,7 @@ class Lehreinheit_model extends DB_Model $this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel'); $this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel'); $this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + $this->load->model('organisation/studiengang_model', 'StudiengangModel'); } /** @@ -57,13 +58,22 @@ class Lehreinheit_model extends DB_Model { foreach ($lehreinheitgruppen->retval as $lehreinheitgruppe) { - $letoadd->lehreinheitgruppen[] = array( - 'semester' => $lehreinheitgruppe->semester, - 'verband' => $lehreinheitgruppe->verband, - 'gruppe' => $lehreinheitgruppe->gruppe, - 'gruppe_kurzbz' => $lehreinheitgruppe->gruppe_kurzbz, - 'direktinskription' => $lehreinheitgruppe->direktinskription - ); + $studiengangresponse = $this->StudiengangModel->load($lehreinheitgruppe->studiengang_kz); + if (hasData($studiengangresponse)) + { + $studiengang = $studiengangresponse->retval[0]; + $stgkuerzel = mb_strtoupper($studiengang->typ . $studiengang->kurzbz); + + $letoadd->lehreinheitgruppen[] = array( + 'semester' => $lehreinheitgruppe->semester, + 'verband' => $lehreinheitgruppe->verband, + 'gruppe' => $lehreinheitgruppe->gruppe, + 'gruppe_kurzbz' => $lehreinheitgruppe->gruppe_kurzbz, + 'direktinskription' => $lehreinheitgruppe->direktinskription, + 'studiengang_kz' => $lehreinheitgruppe->studiengang_kz, + 'studiengang_kuerzel' => $stgkuerzel + ); + } } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index c7455f62e..1685ddf81 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -208,11 +208,11 @@ class Lehrveranstaltung_model extends DB_Model * Gets valid Lehrveranstaltungen with incoming places for a Studiensemester. * Only * 1. Lvs with incoming places > 0 - * 2. Studienordnung valid in current semester or with Lehrauftrag (i.e. assigned Lehreinheit) + * 2. Studienplan valid in current semester or with Lehrauftrag (i.e. assigned Lehreinheit) * @param $studiensemester_kurzbz * @return object */ - public function getLvsWithIncomings($studiensemester_kurzbz) + public function getLvsWithIncomingPlaces($studiensemester_kurzbz) { $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); @@ -221,36 +221,45 @@ class Lehrveranstaltung_model extends DB_Model if (!hasData($studsemres)) return success(array()); - $semstart = $studsemres->retval[0]->start; - $semende = $studsemres->retval[0]->ende; - - $parametersarray = array($studiensemester_kurzbz, $studsemres->retval[0]->studienjahr_kurzbz, $semstart, $semende, $studiensemester_kurzbz); + $parametersarray = array($studiensemester_kurzbz, $studsemres->retval[0]->studienjahr_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); $query = " - SELECT lv.*, ? AS studiensemester_kurzbz, ? AS studienjahr_kurzbz, UPPER(stg.typ::varchar(1) || stg.kurzbz) AS studiengang_kuerzel, - stg.bezeichnung AS studiengang_bezeichnung, stg.english AS studiengang_bezeichnung_english, stg.typ, tbl_sprache.locale - FROM lehre.tbl_lehrveranstaltung lv - JOIN public.tbl_studiengang stg ON lv.studiengang_kz = stg.studiengang_kz - JOIN public.tbl_sprache ON lv.sprache = tbl_sprache.sprache - WHERE lv.lehrtyp_kurzbz != 'modul' - AND ( - EXISTS - ( - SELECT 1 FROM - lehre.tbl_studienplan_lehrveranstaltung - JOIN lehre.tbl_studienplan ON tbl_studienplan_lehrveranstaltung.studienplan_id = tbl_studienplan.studienplan_id - JOIN lehre.tbl_studienordnung ON tbl_studienordnung.studienordnung_id = tbl_studienplan.studienordnung_id - JOIN public.tbl_studiensemester semvon ON lehre.tbl_studienordnung.gueltigvon = semvon.studiensemester_kurzbz OR lehre.tbl_studienordnung.gueltigvon IS NULL - JOIN public.tbl_studiensemester sembis ON lehre.tbl_studienordnung.gueltigbis = sembis.studiensemester_kurzbz OR lehre.tbl_studienordnung.gueltigbis IS NULL - WHERE tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id = lv.lehrveranstaltung_id - AND (?::date >= semvon.start OR semvon.start IS NULL) AND (?::date <= sembis.ende OR sembis.ende IS NULL) - ) - OR EXISTS (SELECT 1 FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id = lv.lehrveranstaltung_id AND studiensemester_kurzbz = ?) - ) - AND lv.incoming > 0 - AND lv.aktiv - AND stg.typ IN ('b', 'm') - ORDER BY studiengang_kuerzel, orgform_kurzbz, lv.bezeichnung, lv.lehrform_kurzbz, lv.lehrveranstaltung_id + SELECT * FROM ( + SELECT DISTINCT ON (lv.lehrveranstaltung_id) lv.lehrveranstaltung_id, lv.bezeichnung AS lv_bezeichnung, lv.kurzbz AS lv_kurzbz, lv.sprache, lv.ects, lv.lehre, + lv.lehreverzeichnis, lv.sws, lv.lvs, lv.alvs, lv.lvps, lv.las, lv.incoming, lv.lehrform_kurzbz, lv.orgform_kurzbz AS lv_orgform, lv.semester, + ? AS studiensemester_kurzbz, ? AS studienjahr_kurzbz, UPPER(stg.typ::VARCHAR(1) || stg.kurzbz) AS studiengang_kuerzel, + stg.bezeichnung AS studiengang_bezeichnung, stg.english AS studiengang_bezeichnung_english, stg.typ, stg.orgform_kurzbz AS studiengang_orgform, + tbl_sprache.locale, CASE WHEN lv.orgform_kurzbz NOTNULL THEN lv.orgform_kurzbz ELSE stg.orgform_kurzbz END AS orgform_kurzbz + FROM lehre.tbl_lehrveranstaltung lv + JOIN public.tbl_studiengang stg ON lv.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_sprache ON lv.sprache = tbl_sprache.sprache + WHERE lv.lehrtyp_kurzbz != 'modul' + AND ( + EXISTS + ( + WITH gueltige_studienplaene AS ( + SELECT studienplan_id, semester + FROM lehre.tbl_studienplan + JOIN lehre.tbl_studienplan_semester USING(studienplan_id) + WHERE tbl_studienplan.aktiv + AND lehre.tbl_studienplan_semester.studiensemester_kurzbz = ? + ) + SELECT 1 + FROM lehre.tbl_studienplan_lehrveranstaltung + WHERE tbl_studienplan_lehrveranstaltung.studienplan_id IN (SELECT studienplan_id FROM gueltige_studienplaene) + AND tbl_studienplan_lehrveranstaltung.semester IN + (SELECT semester FROM gueltige_studienplaene + WHERE gueltige_studienplaene.studienplan_id = tbl_studienplan_lehrveranstaltung.studienplan_id) + AND tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id = lv.lehrveranstaltung_id + AND tbl_studienplan_lehrveranstaltung.export + ) + OR EXISTS (SELECT 1 FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id = lv.lehrveranstaltung_id AND studiensemester_kurzbz = ?) + ) + AND lv.incoming > 0 + AND lv.aktiv + AND (stg.typ IN ('b', 'm') OR stg.studiengang_kz = 10006)-- ECI Studiengang Campus International + ) lvs + ORDER BY studiengang_kuerzel, orgform_kurzbz, lv_bezeichnung, lehrform_kurzbz, lehrveranstaltung_id; "; return $this->execQuery($query, $parametersarray); diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 806f87410..86344d06b 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -387,19 +387,19 @@ if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum)) { $disabled = $disabledStg = 'disabled'; - $disabledTxt = $disabledStgTxt = 'Die Bewerbung muss erst abgeschickt worden sein.'; + $disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt'); } if ($studiengangtyp !== 'b') { $disabled = 'disabled'; - $disabledTxt = 'Nur Bachelorstudiengänge können freigegeben werden.'; + $disabledTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); // FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter if (!in_array($studiengang_kz, $fit_programme_studiengaenge)) { $disabledStg = 'disabled'; - $disabledStgTxt = 'Nur Bachelorstudiengänge können freigegeben werden.'; + $disabledStgTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); } } ?> diff --git a/cis/private/lehre/lehrtaetigkeit.pdf.php b/cis/private/lehre/lehrtaetigkeit.pdf.php new file mode 100644 index 000000000..d99f2bf6b --- /dev/null +++ b/cis/private/lehre/lehrtaetigkeit.pdf.php @@ -0,0 +1,276 @@ +. + */ + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/dokument_export.class.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/person.class.php'); +require_once('../../../include/lehreinheitmitarbeiter.class.php'); +require_once('../../../include/lehreinheit.class.php'); +require_once('../../../include/projektbetreuer.class.php'); +require_once('../../../include/projektarbeit.class.php'); +require_once('../../../include/bisverwendung.class.php'); +require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); + +$user = get_uid(); +$sprache = getSprache(); +$p = new phrasen($sprache); + +$doc = new dokument_export('Lehrtaetigkeit'); + + +if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +// Check permission +$berechtigung = new benutzerberechtigung(); +$berechtigung->getBerechtigungen($user); +if (!$berechtigung->isBerechtigt('admin') && + !$berechtigung->isBerechtigt('mitarbeiter')) + die('Sie muessen das Recht "ADMIN" oder "MITARBEITER" haben, um diese Seite aufrufen zu koennen'); + +// Get GET params +$uid = (isset($_GET['uid']) && is_string($_GET['uid'])) ? $_GET['uid'] : die($p->t('global/fehlerBeimErmittelnDerUID')); +$output = (isset($_GET['output']) && ($_GET['output'] == 'odt' || $_GET['output'] == 'doc')) ? $_GET['output'] : 'pdf'; + +// Personal data of lector +$person = new Person(); +$person->getPersonFromBenutzer($uid); +$person_id = $person->person_id; +$anrede = $person->anrede; +$fullname = $person->getFullName(); +$birthday_date = new DateTime($person->gebdatum); + +// Get the lectors lehreinheiten-semesterstunden per semester +$semesterstunden_per_semester = array(); +$le_ma = new Lehreinheitmitarbeiter(); + +// * get all semester of the lector where he was teaching actively +$active_semester_arr = $le_ma->getSemesterZuLektor($uid); +$active_semester_arr = array_keys($active_semester_arr); + +// * for each semester: +foreach($active_semester_arr as $active_semester) +{ + // * get all the lectors lehreinheiten + $le_id_arr = array(); + $le_array = $le_ma->getLehreinheiten($uid, $active_semester); + foreach($le_array as $le) + { + $le_id_arr[]= $le->lehreinheit_id; + } + + // * get begin- and end date of studiensemester + $ss = new Studiensemester($active_semester); + $studiensemester_start_date = $ss->start; + $studiensemester_end_date = $ss->ende; + + // * get total amount of semesterstunden of the lehreinheiten, where stundensatz > 0 + $total_semesterstunden = 0; + foreach ($le_id_arr as $le_id) + { + $le_ma = new Lehreinheitmitarbeiter($le_id, $uid); + if ($le_ma && (!is_null ($le_ma->stundensatz) && $le_ma->stundensatz > 0)) + { + $total_semesterstunden = $total_semesterstunden + $le_ma->semesterstunden; + } + } + + // * store data only if semesterstunden > 0 + if ($total_semesterstunden > 0) + { + $semesterstunden_per_semester []= ( + array( + 'studiensemester_kurzbz'=> $active_semester, + 'total_semesterstunden' => $total_semesterstunden, + 'studiensemester_start_date' => $studiensemester_start_date, + 'studiensemester_end_date' => $studiensemester_end_date + ) + ); + } +} + +// Get the lectors projektarbeitstunden per semester +$projektstunden_per_semester = array(); +$pb = new Projektbetreuer(); +$pb->getAllProjects($person_id); +$project_arr = $pb->result; + +// * for each project +foreach ($project_arr as $project) +{ + $pa_id = $project->projektarbeit_id; + $projektstunden = $project->stunden; + + // * get studiensemester + $pa = new Projektarbeit($pa_id); + $le = new Lehreinheit($pa->lehreinheit_id); + $studiensemester_kurzbz = $le->studiensemester_kurzbz; + + // * get begin- and end date of studiensemester + $ss = new Studiensemester($studiensemester_kurzbz); + $studiensemester_start_date = $ss->start; + $studiensemester_end_date = $ss->ende; + + // Get total amount of semesterstunden by studiensemester + // * check if studiensemester already exists. If so, get array index. + $studiensemester_index = array_search($studiensemester_kurzbz, array_map(function($val) { + return $val['studiensemester_kurzbz']; + }, $projektstunden_per_semester + )); + + // * if studiensemester exists, sum up hours of projektarbeit, where stundensatz > 0 + if ($studiensemester_index !== false) + { + $projektstunden_per_semester [$studiensemester_index]['total_semesterstunden'] = $projektstunden_per_semester [$studiensemester_index]['total_semesterstunden'] + $projektstunden; + } + // * if not, create new index + else + { + $projektstunden_per_semester []= ( + array( + 'studiensemester_kurzbz'=> $studiensemester_kurzbz, + 'total_semesterstunden' => $projektstunden, + 'studiensemester_start_date' => $studiensemester_start_date, + 'studiensemester_end_date' => $studiensemester_end_date + ) + ); + } +} + +// Merge lehreinheit- and projektarbeitstunden arrays +foreach ($projektstunden_per_semester as $item) +{ + // check if studiensemester already exists in projektstunden-per-term-array. If so, get array index. + $studiensemester_index = array_search($item['studiensemester_kurzbz'], array_map(function($val) { + return $val['studiensemester_kurzbz']; + }, $semesterstunden_per_semester + )); + + // * if studiensemester exists, merge lehreinheit- and projektarbeit hours + if ($studiensemester_index !== false) + { + $semesterstunden_per_semester [$studiensemester_index]['total_semesterstunden'] = $semesterstunden_per_semester [$studiensemester_index]['total_semesterstunden'] + $item['total_semesterstunden']; + } + // * if not, create new index + else + { + $semesterstunden_per_semester []= ( + array( + 'studiensemester_kurzbz'=> $item['studiensemester_kurzbz'], + 'total_semesterstunden' => intval($item['total_semesterstunden']), + 'studiensemester_start_date' => $item['studiensemester_start_date'], + 'studiensemester_end_date' => $item['studiensemester_end_date'] + ) + ); + } +} + +// Sort lehreinheit- and projektarbeitstunden array by date +usort($semesterstunden_per_semester, function($a, $b) +{ + return strtotime($a['studiensemester_start_date']) - strtotime($b['studiensemester_start_date']); +}); + +// Split studiensemester array into actual studiensemester array and former studiensemester array +// * get actual studiensemester +$ss = new Studiensemester(); +$actual_studiensemester = $ss->getakt(); +$actual_studiensemester_index = array_search($actual_studiensemester, array_map(function($val) { + return $val['studiensemester_kurzbz']; +}, $semesterstunden_per_semester +)); + +// * if lector is teaching actually, split former teaching activities from actual teaching activities of actual studiensemester +$semesterstunden_of_actual_semester = array(); +if ($actual_studiensemester_index !== false) +{ + $semesterstunden_of_actual_semester = array_slice($semesterstunden_per_semester, $actual_studiensemester_index); // array with actual + future semester + $semesterstunden_per_semester = array_slice($semesterstunden_per_semester, 0, $actual_studiensemester_index); // array with all former semester +} + +// Semester begin and ending date of lehreinheit- and projektarbeit studiensemester +// * begin date of first lehreinheit- and projektarbeit studiensemester +$earliest_ss = current($semesterstunden_per_semester)['studiensemester_start_date']; +$begin_date = !is_null($earliest_ss) ? new DateTime($earliest_ss) : null; + +// * end date of last lehreinheit- and projektarbeit studiensemester +// * if lector is teaching on actual studiensemester, get end date of actual studiensemester +$latest_ss = !empty($semesterstunden_of_actual_semester) + ? current($semesterstunden_of_actual_semester)['studiensemester_end_date'] +// * else get end date of the last of his teaching studiensemester + : end($semesterstunden_per_semester)['studiensemester_end_date']; +$end_date = !is_null($latest_ss) ? new DateTime($latest_ss) : null; + +$actual_date = new DateTime(); + +// if the lector is still employed, reset the end date to null +if ($end_date > $actual_date) +{ + $end_date = null; +} + +$data = array ( + 'anrede' => $anrede, + 'full_name' => $fullname, + 'birthday' => $birthday_date->format('d.m.Y'), + 'begin_date' => !is_null($begin_date) ? $begin_date->format('d.m.Y') : '', + 'end_date' => !is_null($end_date) ? $end_date->format('d.m.Y') : '', // empty, if lector is still employed + 'total_ss_actual_semester' => current($semesterstunden_of_actual_semester), // empty, if lector has no lehreinheit- or projektarbeitsstunden at the actual studiensemester + 'actual_date' => $actual_date->format('d.m.Y') +); + +// Put semesterstunden per semester array in correct format for xsl template +if (!empty($semesterstunden_per_semester)) +{ + foreach ($semesterstunden_per_semester as &$item) + { + $data[]= array('total_ss_per_semester'=> + array( + 'studiensemester_kurzbz'=> $item['studiensemester_kurzbz'], + 'total_semesterstunden' => $item['total_semesterstunden'] + ) + ); + } +} +else +{ + $data[]= array('total_ss_per_semester'=> ''); // empty if lector has no lehreinheit- or projektarbeitsstunden in the past (before the actual studiensemester) +} + +// Add data to lehrtaetigkeit.xsl +$doc->addDataArray($data, 'lehrtaetigkeit'); + +// Set doc name +$doc->setFilename('Lehrtaetigkeit_'. rtrim($fullname, '.')); + +// Create doc in format required +if (!$doc->create($output)) + die($doc->errormsg); + +// Download doc +$doc->output(); + +// unlink doc from tmp-folder +$doc->close(); + + diff --git a/cis/private/tools/ampelverwaltung.php b/cis/private/tools/ampelverwaltung.php index c3135b71e..893ac8764 100644 --- a/cis/private/tools/ampelverwaltung.php +++ b/cis/private/tools/ampelverwaltung.php @@ -124,10 +124,10 @@ if ($is_popup) $user_ampel_arr, $cnt_ueberfaellig_und_verpflichtend) = //counts mandatory, overdue (not expired), unconfirmed, not before vorlaufzeit getPopupUserAmpelData($user_ampel_arr); -} +} //filter ampeln of actual term (if radiobutton is set to aktuell) -if ($show == 'aktuell') +if (!$is_popup && $show == 'aktuell') $user_ampel_arr = getActualUserAmpelData($user_ampel_arr, $semester_start); @@ -361,7 +361,7 @@ function typeWrite(span){
sancho_verpflichtende_ampeln
-



'; +



'; } } ?> @@ -401,7 +401,7 @@ function typeWrite(span){ $cnt_active++; } - if ($cnt_active == 0) + if ($cnt_active == 0 && !$is_popup) { echo '
diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index ed63324a3..cb1feb67e 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -193,7 +193,8 @@ if (isset($_SESSION['pruefling_id'])) ) - SELECT DISTINCT + SELECT DISTINCT ON + (gebiet_id, semester) semester, gebiet_id, bezeichnung, @@ -252,6 +253,7 @@ if (isset($_SESSION['pruefling_id'])) ORDER BY semester, + gebiet_id, reihung "; diff --git a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php index 4f9951d57..894540d3e 100644 --- a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php +++ b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php @@ -49,7 +49,8 @@ echo "