From 7fdaaace50f6bc74554f3bb004f948eccb15c217 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 7 Feb 2020 17:46:29 +0100 Subject: [PATCH 01/66] If Prestudent is freigegeben for RT and has already a Bewerber with reihungstestangetreten = true, a new Bewerber for the prestudent is created, reihungstestangetreten and teilgenommen are set to true --- .../system/infocenter/InfoCenter.php | 67 ++++++++++++++++++- application/models/person/Person_model.php | 19 ++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d085e7db0..e4d2c4e21 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -69,6 +69,7 @@ class InfoCenter extends Auth_Controller // Name of Interessentenstatus const INTERESSENTSTATUS = 'Interessent'; const ABGEWIESENERSTATUS = 'Abgewiesener'; + const BEWERBERSTATUS = 'Bewerber'; // Statusgruende for which no Studiengangsfreigabemessage should be sent private $_statusgruendeNoStgFreigabeMessage = array('FIT Programm', 'FIT program', 'FIT programme'); @@ -493,7 +494,9 @@ class InfoCenter extends Auth_Controller $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); - $akteresult = $this->AkteModel->loadWhere(array('person_id' => $logdata['person_id'], 'formal_geprueft_amum !=' => NULL)); + $person_id = $logdata['person_id']; + + $akteresult = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'formal_geprueft_amum !=' => NULL)); if (hasData($lastStatus) && isSuccess($akteresult)) { @@ -554,8 +557,68 @@ class InfoCenter extends Auth_Controller if (hasData($statusgrund_kurzbz)) $logparams[2] = ', confirmation type '.$statusgrund_kurzbz->retval[0]->bezeichnung_mehrsprachig[0]; } + else + { + // check if there is already a Bewerberstatus and Reihungsverfahren already absolviert + $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz); - $this->_log($logdata['person_id'], 'freigegeben', $logparams); + if (hasData($bewerber)) + { + $bewerbercnt = getData($bewerber); + + if (is_numeric($bewerbercnt[0]->anzahl_bewerber) && $bewerbercnt[0]->anzahl_bewerber > 0) + { + // then insert Bewerberstatus and rt absolviert, teilgenommen for prestudent + $bewerberresult = $this->PrestudentstatusModel->insert( + array( + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => self::BEWERBERSTATUS, + 'studiensemester_kurzbz' => $lastStatus->studiensemester_kurzbz, + 'ausbildungssemester' => $lastStatus->ausbildungssemester, + 'datum' => date('Y-m-d'), + 'orgform_kurzbz' => $lastStatus->orgform_kurzbz, + 'studienplan_id' => $lastStatus->studienplan_id, + 'insertvon' => $this->_uid, + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + + if (isError($bewerberresult)) + $json->retval['nonCriticalErrors'] = 'error when inserting Bewerberstatus'; + + $rtangetretenres = $this->PrestudentModel->update( + $prestudent_id, + array( + 'reihungstestangetreten' => true + ) + ); + + if (isError($rtangetretenres)) + { + $json->retval['nonCriticalErrors'] = 'error when setting reihungstestangetreten'; + } + else + { + $this->load->model('crm/RtPerson_model', 'RtPersonModel'); + + $rtteilgenommenres = $this->RtPersonModel->update( + array( + 'person_id' => $person_id, + 'studienplan_id' => $lastStatus->studienplan_id + ), + array( + 'teilgenommen' => true + ) + ); + + if (isError($rtteilgenommenres)) + $json->retval['nonCriticalErrors'] = 'error when setting reihungstest teilgenommen'; + } + } + } + } + + $this->_log($person_id, 'freigegeben', $logparams); $this->_sendFreigabeMail($prestudent_id); } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 388f77b0a..4f826dac1 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -213,4 +213,23 @@ class Person_model extends DB_Model return $this->loadWhere(array('uid' => $uid, 'content' => true)); } + + /** + * Checks if a person has a Bewerberstatus and reihungstestangetreten = true + * @param $person_id + * @param $studiensemester_kurzbz + * @return array + */ + public function hasBewerber($person_id, $studiensemester_kurzbz) + { + $qry = "SELECT count(*) AS anzahl_bewerber FROM public.tbl_person + JOIN public.tbl_prestudent USING (person_id) + JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id + WHERE person_id = ? + AND studiensemester_kurzbz = ? + AND status_kurzbz = 'Bewerber' + AND reihungstestangetreten"; + + return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz)); + } } From 5953b6932f45c67d6d596ec0617c36929947fe14 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 10 Feb 2020 15:42:34 +0100 Subject: [PATCH 02/66] Bufixed Chromes autofilling username in random input field If no username input field is required, Chorme is autofilling a random inputfield with username. This is a Chrome bug. Workaround by adding a hidden username field. Also setting autocomplete= new-password should help stopping random autofill in some browsers. --- .../views/lehre/lehrauftrag/acceptLehrauftrag.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 14ebacecb..3f2575ec1 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -166,12 +166,13 @@ $this->load->view(
-
- - - - -
+
+ + + + + +

From 8f915d3c3945dfdee9f9018c613daea2f8393c2b Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Tue, 11 Feb 2020 14:44:23 +0100 Subject: [PATCH 03/66] Initial File --- application/controllers/jobs/Priorisation.php | 787 ++++++++++++++++++ 1 file changed, 787 insertions(+) create mode 100644 application/controllers/jobs/Priorisation.php diff --git a/application/controllers/jobs/Priorisation.php b/application/controllers/jobs/Priorisation.php new file mode 100644 index 000000000..7e63eb9b1 --- /dev/null +++ b/application/controllers/jobs/Priorisation.php @@ -0,0 +1,787 @@ +load->model('crm/Prestudent_model', 'PrestudentModel'); + //$this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + //$this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + + // Load helpers + //$this->load->helper('hlp_sancho_helper'); + } + + /** + * runReihungstestJob + */ + public function runReihungstestJob() + { + // Get study plans that have no assigned placement tests yet + $result = $this->ReihungstestModel->checkMissingReihungstest(); + + $missing_rt_arr = array(); + if (hasData($result)) + { + $missing_rt_arr = $result->retval; + } + elseif (isError($result)) + { + show_error(getError($result)); + } + + // Get free places + $result = $this->ReihungstestModel->getFreePlaces(); + + $free_places_arr = array(); + if (hasData($result)) + { + $free_places_arr = $result->retval; + } + elseif (isError($result)) + { + show_error(getError($result)); + } + + // Prepare data for mail template 'ReihungstestJob' + $content_data_arr = $this->_getContentData($missing_rt_arr, $free_places_arr); + + // Send email in Sancho design + if (!empty($missing_rt_arr) || !empty($free_places_arr)) + { + sendSanchoMail( + 'ReihungstestJob', + $content_data_arr, + MAIL_INFOCENTER, + 'Support für die Reihungstest-Verwaltung'); + } + } + + /* + * Sends an email to all assistants of a placement test when an anmeldeschluss has been reached + * + * @param integer $degreeProgram. Kennzahl of Degree Program to check + * @param string $bcc. Optional. BCC-Mailadress to send the Mails to + * @param string $from. Optional. Sender-Mailadress shown to recipient + */ + public function runZentraleReihungstestAnmeldefristAssistenzJob($degreeProgram, $bcc = null, $from = null) + { + // Encode Params + if ($bcc != '') + { + // $bcc can be given as null-string, so check that too + if ($bcc == 'null') + { + $bcc = ''; + } + else + { + $bcc = urldecode($bcc); + } + } + if ($from != '') + { + $from = urldecode($from); + } + + // Get placement tests where registration date was yesterday + $result = $this->ReihungstestModel->checkReachedRegistrationDate($degreeProgram); + + $reachedRegistration_rt_arr = array(); + + if (hasData($result)) + { + $reachedRegistration_rt_arr = $result->retval; + } + elseif (isError($result)) + { + show_error(getError($result)); + } + + $applicants_arr = array(); + + foreach ($reachedRegistration_rt_arr as $reihungstest) + { + $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTestForCronjob($reihungstest->reihungstest_id); + + if (hasData($applicants)) + { + $applicants_arr = $applicants->retval; + } + elseif (isError($applicants)) + { + show_error(getError($applicants)); + } + + // Get all Bachelor-Degree-Programs with Mailadress + $bachelorStudiengeange = $this->StudiengangModel->loadStudiengaengeFromTyp('b'); + $bachelorStudiengeange_arr = array(); + + if (hasData($bachelorStudiengeange)) + { + $bachelorStudiengeange_arr = $bachelorStudiengeange->retval; + } + elseif (isError($bachelorStudiengeange)) + { + show_error(getError($bachelorStudiengeange)); + } + + // If a person ist an applicant of this degree-program send mail with application data + // Otherwise inform assistant, that no applicant is registered in this test + foreach ($bachelorStudiengeange_arr as $bachelorStudiengang) + { + $studiengang_kuerzel = strtoupper($bachelorStudiengang->typ.$bachelorStudiengang->kurzbz); + $applicantCounter = 0; + $mailcontent_data_arr = array(); + foreach ($applicants_arr as $applicant) + { + if ($bachelorStudiengang->studiengang_kz == $applicant->studiengang_kz) + { + $applicantCounter ++; + } + } + if ($applicantCounter == 0) + { + $mailcontent = '

Der Anmeldeschluss für den zentralen Reihungstest am ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' um ' . $reihungstest->uhrzeit . ' Uhr wurde gestern erreicht.

'; + $mailcontent .= '

Für den Studiengang '.$studiengang_kuerzel.' nehmen keine InteressentInnen an diesem Reihungstest teil

'; + } + else + { + $mailcontent = '

Der Anmeldeschluss für den zentralen Reihungstest am ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' um ' . $reihungstest->uhrzeit . ' Uhr wurde gestern erreicht.

'; + $mailcontent .= ' +

' . $applicantCounter . ' InteressentIn(nen) des Studiengangs ' . $studiengang_kuerzel . ' nehmen daran teil:

+

+ + Liste der Anmeldungen + +

'; + } + $mailcontent_data_arr['table'] = $mailcontent; + + // Send email in Sancho design + if (!isEmptyString($mailcontent)) + { + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + $bachelorStudiengang->email, + 'Anmeldeschluss Reihungstest ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' ' . $reihungstest->uhrzeit . ' Uhr', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $from, + '', + $bcc); + } + } + } + } + + /* + * Checks, if an applicant was assigned to a test after Anmeldefrist and sends an email to all responsible assistants + * + * @param integer $degreeProgram. Kennzahl of Degree Program to check + * @param string $bcc. Optional. BCC-Mailadress to send the Mails to + * @param string $from. Optional. Sender-Mailadress shown to recipient + */ + public function runZentraleReihungstestNachtraeglichHinzugefuegtJob($degreeProgram, $bcc = null, $from = null) + { + // Encode Params + if ($bcc != '') + { + // $bcc can be given as null-string, so check that too + if ($bcc == 'null') + { + $bcc = ''; + } + else + { + $bcc = urldecode($bcc); + } + } + if ($from != '') + { + $from = urldecode($from); + } + + // Get applicants that have been added to a test after Anmeldefrist + $result = $this->ReihungstestModel->getApplicantAssignedAfterDate($degreeProgram); + + $applicants_after_anmeldefrist_arr = array(); + + if (hasData($result)) + { + $applicants_after_anmeldefrist_arr = $result->retval; + } + elseif (isError($result)) + { + show_error(getError($result)); + } + + $studiengang = ''; + $mailReceipients = ''; // String with all mailadresses + $mailcontent_data_arr = array(); + $headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"'; + $rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"'; + $mailcontent = ''; + $applicants_list = ''; + + if (count($applicants_after_anmeldefrist_arr) > 0) + { + foreach ($applicants_after_anmeldefrist_arr as $applicant) + { + if ($studiengang != $applicant->studiengang_kz) + { + if ($studiengang != '' && $studiengang != $applicant->studiengang_kz) + { + $bachelorStudiengang = $this->StudiengangModel->load($studiengang); + $mailcontent .= $applicants_list; + $mailcontent .= ''; + $mailcontent .= '

+ + Liste der Anmeldungen + +

'; + $mailcontent_data_arr['table'] = $mailcontent; + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + $bachelorStudiengang->retval[0]->email, + 'InteressentIn nach Reihungstest-Anmeldeschluss hinzugefügt', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $from, + '', + $bcc); + $applicants_list = ''; + $mailcontent_data_arr = array(); + } + + $mailcontent = '

Folgende InteressentInnen wurden nach der Anmeldefrist zu einem Reihungstest hinzugefügt.
Details siehe Link

'; + $mailcontent .= ' + + + + + + + + + + + '; + } + + $studiengang = $applicant->studiengang_kz; + $mailReceipients .= $applicant->email . ';'; + $applicants_list .= ' + + + + + + + + + '; + }; + $bachelorStudiengang = $this->StudiengangModel->load($studiengang); + $mailcontent .= $applicants_list; + $mailcontent .= '
Datum des TestsUhrzeit des TestsOrgFormSemesterNachnameVorname
' . date_format(date_create($applicant->datum), 'd.m.Y') . '' . $applicant->uhrzeit . '' . $applicant->orgform_kurzbz . '' . $applicant->ausbildungssemester . '' . $applicant->nachname . '' . $applicant->vorname . '
'; + $mailcontent .= '

+ + Liste der Anmeldungen + +

'; + $mailcontent_data_arr['table'] = $mailcontent; + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + $bachelorStudiengang->retval[0]->email, + 'InteressentIn nach Reihungstest-Anmeldeschluss hinzugefügt', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $from, + '', + $bcc); + } + } + + /* + * Sends an email to all applicants of a placement test to remind them 3 working days before + * + * @param integer $degreeProgram. Kennzahl of Degree Program to check + * @param string $bcc. Optional. BCC-Mailadress to send the Mails to + * @param string $from. Optional. Sender-Mailadress shown to recipient + */ + public function remindApplicantsOfPlacementTest($degreeProgram, $bcc = null, $from = null) + { + // Encode Params + if ($bcc != '') + { + // $bcc can be given as null-string, so check that too + if ($bcc == 'null') + { + $bcc = ''; + } + else + { + $bcc = urldecode($bcc); + } + } + if ($from != '') + { + $from = urldecode($from); + } + + // Get placement tests with testdate within the next 2 weeks + $resultNextTestDates = $this->ReihungstestModel->getNextPlacementtests($degreeProgram, 14); + if (hasData($resultNextTestDates)) + { + $nextTestDates = $resultNextTestDates->retval; + $enddate = ''; + // Loop through the dates + foreach ($nextTestDates as $testDates) + { + $workingdays = 0; + $testsOndate = array(); + + // Deduct days till 3 working days are reached + for ($i = 1; ; $i++) + { + if (isDateWorkingDay($testDates->datum, $i) === true) + { + $workingdays++; + } + if ($workingdays == 3) + { + $enddate = date("Y-m-d", strtotime("$testDates->datum -" . $i . " days")); + break; + } + else + { + continue; + } + } + + // If $enddate is today -> load all tests of $testDates->datum + if (date("Y-m-d", strtotime($enddate)) == date('Y-m-d')) + { + $resultTestsOnDate = $this->ReihungstestModel->getTestsOnDate($testDates->datum, $degreeProgram); + + if (hasData($resultTestsOnDate)) + { + $testsOndate = $resultTestsOnDate->retval; + } + elseif (isError($resultTestsOnDate)) + { + show_error(getError($resultTestsOnDate)); + } + } + + if (!isEmptyArray($testsOndate)) + { + foreach ($testsOndate as $reihungstest) + { + // Loads applicants of a test + $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTest($reihungstest->reihungstest_id); + + if (hasData($applicants)) + { + $applicants_arr = $applicants->retval; + } + elseif (isError($applicants)) + { + show_error(getError($applicants)); + } + + foreach ($applicants_arr as $applicant) + { + $mailcontent_data_arr = array(); + $mailcontent_data_arr['anrede'] = $applicant->anrede; + $mailcontent_data_arr['nachname'] = $applicant->nachname; + $mailcontent_data_arr['vorname'] = $applicant->vorname; + $mailcontent_data_arr['rt_datum'] = date_format(date_create($reihungstest->datum), 'd.m.Y'); + $mailcontent_data_arr['rt_uhrzeit'] = date_format(date_create($reihungstest->uhrzeit), 'H:i'); + $mailcontent_data_arr['rt_raum'] = $applicant->planbezeichnung; + if ($applicant->lageplan == '') + { + $mailcontent_data_arr['wegbeschreibung'] = 'Für diesen Raum liegt noch keine Wegbeschreibung vor.

No directions were found for this room'; + } + else + { + $mailcontent_data_arr['wegbeschreibung'] = $applicant->lageplan; + } + + sendSanchoMail( + 'Sancho_RemindApplicantsOfTest', + $mailcontent_data_arr, + $applicant->email, + 'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder', + DEFAULT_SANCHO_HEADER_IMG, + DEFAULT_SANCHO_FOOTER_IMG, + $from, + '', + $bcc); + } + } + } + } + } + } + + /** + * This job sends eMail(s) to the relevant stg assistance(s) informing about: + * All applicants, who have sent new applications AFTER they had absolved a + * placement test in the actual studiensemester + * AND who have been confirmed yesterday. + */ + public function mailNewApplicants() + { + // Get yesterdays confirmed applicants for Bachelor-studies + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->PrestudentstatusModel->addSelect(' + tbl_person.person_id, + tbl_prestudentstatus.prestudent_id, + tbl_prestudent.studiengang_kz, + tbl_prestudentstatus.studiensemester_kurzbz, + tbl_prestudentstatus.bestaetigtam, + tbl_prestudentstatus.bewerbung_abgeschicktamum + '); + $this->PrestudentstatusModel->addJoin('public.tbl_prestudent', 'prestudent_id'); + $this->PrestudentstatusModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $this->PrestudentstatusModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->PrestudentstatusModel->addJoin('public.tbl_person', 'person_id'); + + $yesterdays_applicants_arr = $this->PrestudentstatusModel->loadWhere(' + status_kurzbz = \'Interessent\' AND + typ = \'b\' AND + bestaetigtam = current_date - 1 + '); + + // Retrieve the person_ids of yesterdays confirmed applicants + $person_id_arr = array(); + if (hasData($yesterdays_applicants_arr)) + { + foreach ($yesterdays_applicants_arr->retval as $yesterdays_applicant) + { + if (isset($yesterdays_applicant->person_id)) { + $person_id_arr[] = $yesterdays_applicant->person_id; + } + } + } + elseif (isError($yesterdays_applicants_arr)) + { + show_error(getError($yesterdays_applicants_arr)); + } + + // Get all other prestudenten of the given persons. + if (!isEmptyArray($person_id_arr)) + { + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->PrestudentModel->addDistinct(); + $this->PrestudentModel->addSelect(' + person_id, + tbl_reihungstest.studiensemester_kurzbz, + tbl_reihungstest.reihungstest_id, + (SELECT(tbl_reihungstest.datum::text || \' \' || tbl_reihungstest.uhrzeit::text)::timestamp) AS reihungstest_timestamp + '); + $this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $this->PrestudentModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + $this->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_rt_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_reihungstest', 'tbl_reihungstest.reihungstest_id = tbl_rt_person.rt_id'); + + // Store them, if they have already absolved a placement test in the same study term they have applied for. + $placement_absolvents_arr = $this->PrestudentModel->loadWhere(' + person_id IN (' . implode(', ', $person_id_arr) . ') AND + typ = \'b\' AND + teilgenommen = \'t\' AND + tbl_reihungstest.studiensemester_kurzbz IN ( + SELECT + studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + ende >= now() + ) + '); + } + + // Store data to be send in the email-link + $result_arr = array(); + foreach($yesterdays_applicants_arr->retval as $yesterdays_applicant) + { + foreach ($placement_absolvents_arr->retval as $placement_absolvent) + { + if ($yesterdays_applicant->person_id == $placement_absolvent->person_id && + $yesterdays_applicant->studiensemester_kurzbz == $placement_absolvent->studiensemester_kurzbz && + $yesterdays_applicant->bewerbung_abgeschicktamum >= $placement_absolvent->reihungstest_timestamp) + { + $obj = new stdClass(); + $obj->prestudent_id = $yesterdays_applicant->prestudent_id; // prestudent_id of the yesterdays applicant + $obj->studiengang_kz = $yesterdays_applicant->studiengang_kz; // study program of interest of the yesterdays applicant + $obj->reihungstest_id = $placement_absolvent->reihungstest_id; // reihungstest_id of absolved reihungstest of that person + + $result_arr[]= $obj; + } + } + } + + // Sort by STG. This is important to send the mails clustered by STG to the different STG assistances. + usort($result_arr, function ($a, $b) + { + if ($a->studiengang_kz == $b->studiengang_kz) { + return 0; + } + return ($a->studiengang_kz < $b->studiengang_kz) ? -1 : 1; + }); + + $to = ''; // mail recipient (stg assistance) + $content_arr = array(); // url paths to the new applicants + $base_link = base_url('vilesci/stammdaten/auswertung_fhtw.php'); + + $i = 0; // loop counter + $len = count($result_arr); + + // Loop trough list of new applicants + foreach($result_arr as $result) + { + $studiengang = $this->StudiengangModel->load($result->studiengang_kz); + $mail_stg_assistance = $studiengang->retval[0]->email; + + // If first loop + if ($i == 0) + { + $to = $mail_stg_assistance; // set recipient initially + } + + // If new study is encountered but is not the first loop + if ($to != $mail_stg_assistance && $i != 0) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + + // Reset content for new study applicants & reset recipient (new stg assistance) + $content_arr = array($base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id); + $to = $mail_stg_assistance; + } + // If same study + else + { + // just add content + $content_arr[]= $base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id; // add to content + } + + // If last loop + if (($i == $len - 1)) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + } + $i++; // iterate counter + } + } + + // ------------------------------------------------------------------------ + // Private methods + /** + * Returns associative array with data as needed in the reihungstest job template. + * @param array $missing_rt_arr Array with studienpläne, which have no assigned placement tests. + * @param array $free_places_arr Array with info and amount of free placement test places. + * @return array + */ + private function _getContentData($missing_rt_arr, $free_places_arr) + { + $style_tbl1 = ' cellpadding="0" cellspacing="10" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + $style_tbl2 = ' cellpadding="0" cellspacing="20" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + + // Prepare HTML table with study plans that have no placement tests yet + if (!empty($missing_rt_arr)) { + $studienplan_list + = ' + + '; + + foreach ($missing_rt_arr as $rt) { + $studienplan_list .= ' + ' . $rt->bezeichnung . ' + '; + } + + $studienplan_list .= ' + + '; + } else { + $studienplan_list = ' + + Alles okay! Alle Studienpläne haben zumindest einen Reihungstest. + + '; + } + + // Prepare HTML table with information and amount of free places + if (!empty($free_places_arr)) { + $freie_plaetze_list = ' + + + Fakultät + Reihungstesttermine + Freie Plätze + + '; + + foreach ($free_places_arr as $free_place) { + $datum = new DateTime($free_place->datum); + $style_alarm = ($free_place->freie_plaetze <= 5) ? ' style=" color: red; font-weight: bold" ' : ''; // mark if <=5 free places + + $freie_plaetze_list .= ' + + ' . $free_place->fakultaet . ' + ' . $datum->format('d.m.Y') . ' + ' . $free_place->freie_plaetze . ' + + '; + } + + $freie_plaetze_list .= ' + + '; + } else { + $freie_plaetze_list = ' + + Es gibt heute keine Ergebnisse zu freien Reihungstestplätze. + + '; + } + + // Set associative array with the prepared HTML tables and URL be used by the template's variables + $content_data_arr['studienplan_list'] = $studienplan_list; + $content_data_arr['freie_plaetze_list'] = $freie_plaetze_list; + $content_data_arr['link'] = site_url('/organisation/Reihungstest'); + + return $content_data_arr; + } + + /** + * Returns associative array with data as needed in the BewerberNachReihungstest-template. + * @param array $content_arr Array with links to the testtool evaluation page of the new applicants. + * @return array + */ + private function _getContentDataNewApplicant($content_arr) + { + $content = ''; + $counter = 1; + foreach ($content_arr as $row) + { + $content .= '
Link zu: Bewerber '. $counter. ''; + $counter++; + } + + $content_data_arr['link'] = $content; + return $content_data_arr; + } + + + /** + * Checks the upcoming placement tests if there are correct studyplans assigned + * If there are invalid studyplans assigned (outdated because there exists a new version), + * it tries to find a better one and assigns it additionaly + */ + public function correctStudienplan() + { + // get all placement tests with incorrect studyplan + $qry = " + SELECT + tbl_reihungstest.reihungstest_id, + tbl_studienplan.studienplan_id, + tbl_reihungstest.studiensemester_kurzbz, + tbl_studienordnung.studiengang_kz + FROM + public.tbl_reihungstest + JOIN public.tbl_rt_studienplan ON(tbl_rt_studienplan.reihungstest_id=tbl_reihungstest.reihungstest_id) + JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + WHERE + NOT EXISTS( + SELECT 1 FROM lehre.tbl_studienplan_semester + WHERE studienplan_id=tbl_rt_studienplan.studienplan_id + AND tbl_studienplan_semester.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz + ) + AND tbl_reihungstest.datum >= now() + AND NOT EXISTS( + SELECT + 1 + FROM + public.tbl_rt_studienplan rtstp + JOIN lehre.tbl_studienplan stp USING(studienplan_id) + JOIN lehre.tbl_studienordnung sto USING(studienordnung_id) + JOIN lehre.tbl_studienplan_semester stpsem USING(studienplan_id) + WHERE + sto.studiengang_kz=tbl_studienordnung.studiengang_kz + AND rtstp.reihungstest_id=tbl_reihungstest.reihungstest_id + AND stpsem.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz + ) + "; + + $db = new DB_Model(); + $result_rt = $db->execReadOnlyQuery($qry); + + if (hasdata($result_rt)) { + foreach ($result_rt->retval as $row_rt) { + // find an active studyplan for the same degree program with is valid in this semester + $result_stpl = $this->StudienplanModel->getStudienplaeneBySemester( + $row_rt->studiengang_kz, + $row_rt->studiensemester_kurzbz + ); + + if (hasData($result_stpl)) { + foreach ($result_stpl->retval as $row_stpl) { + // Add new Studyplan to RtStudienplan if missing + $rt_studienplan = $this->RtStudienplanModel->loadWhere(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); + + if (!hasData($rt_studienplan)) { + echo "\nAdding StudienplanId: $row_stpl->studienplan_id"; + echo " to ReihungstestId: $row_rt->reihungstest_id"; + + $this->RtStudienplanModel->insert(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); + } + } + } + } + } + } +} From b41ef00b3d395e66505dfcae6cbb6ebd5e26fb88 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 11 Feb 2020 16:42:04 +0100 Subject: [PATCH 04/66] crm/Prestudent_model: hasBewerber can optionally check bewerber only for a Studiengangtyp. In InfoCenter, only Bachelors are checked after Freigabe (for setting Bewerber and Reihungstestbooleans) --- .../system/infocenter/InfoCenter.php | 4 +-- application/models/person/Person_model.php | 26 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index e4d2c4e21..d5a751b05 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -560,7 +560,7 @@ class InfoCenter extends Auth_Controller else { // check if there is already a Bewerberstatus and Reihungsverfahren already absolviert - $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz); + $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz, 'b'); if (hasData($bewerber)) { @@ -1559,7 +1559,7 @@ class InfoCenter extends Auth_Controller } /** - * Sends infomail with prestudent and person data when Prestudent is freigegeben + * Sends infomail to Studiengang with prestudent and person data when Prestudent is freigegeben * @param $prestudent_id */ private function _sendFreigabeMail($prestudent_id) diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 4f826dac1..d8ddb381c 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -220,16 +220,32 @@ class Person_model extends DB_Model * @param $studiensemester_kurzbz * @return array */ - public function hasBewerber($person_id, $studiensemester_kurzbz) + public function hasBewerber($person_id, $studiensemester_kurzbz, $studiengangtyp = null) { + $parametersArray = array($person_id, $studiensemester_kurzbz); + $qry = "SELECT count(*) AS anzahl_bewerber FROM public.tbl_person JOIN public.tbl_prestudent USING (person_id) - JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id - WHERE person_id = ? + JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id"; + + if (isset($studiengangtyp)) + { + $qry .= " JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN public.tbl_studiengang ON tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz"; + } + + $qry .= " WHERE person_id = ? AND studiensemester_kurzbz = ? - AND status_kurzbz = 'Bewerber' + AND tbl_prestudentstatus.status_kurzbz = 'Bewerber' AND reihungstestangetreten"; - return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz)); + if (isset($studiengangtyp)) + { + $parametersArray[] = $studiengangtyp; + $qry .= " AND tbl_studiengang.typ = ?"; + } + + return $this->execQuery($qry, $parametersArray); } } From 99dc36b50165fafe4e7e9150b5cddba13c47c4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Feb 2020 13:54:06 +0100 Subject: [PATCH 05/66] =?UTF-8?q?Stundensatz=20wird=20bei=20Fixangestellte?= =?UTF-8?q?n=20mit=20voller=20inkludierter=20Lehre=20(-1)=20immer=20auf=20?= =?UTF-8?q?NULL=20gesetzt.=20(abh=C3=A4ngig=20von=20Config)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/global.config-default.inc.php | 3 + content/lvplanung/lehrveranstaltungDBDML.php | 92 +++++++++++++++----- include/bisverwendung.class.php | 75 ++++++++++++++-- 3 files changed, 144 insertions(+), 26 deletions(-) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 82dcbda10..bb619586d 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -128,6 +128,9 @@ define('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN',false); // Legt fest, ob Vertragsdetails zum Lehrauftrag im Reiter LektorInnenzuteilung angezeigt werden define('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN', false); +// Legt fest ob bei Fixangestellten Lektoren der Stundensatz vorgeschlagen wird +define('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ', true); + // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5e4a3ba61..5972c4b4f 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -36,6 +36,7 @@ // **************************************** require_once('../../config/vilesci.config.inc.php'); +require_once('../../config/global.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/lehreinheit.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); @@ -52,6 +53,7 @@ require_once('../../include/lehrveranstaltung.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/vertrag.class.php'); require_once('../../include/benutzergruppe.class.php'); +require_once('../../include/bisverwendung.class.php'); $user = get_uid(); $db = new basis_db(); @@ -440,11 +442,18 @@ if(!$error) elseif(isset($_POST['type']) && $_POST['type']=='lehreinheit_mitarbeiter_add') { //neue Lehreinheitmitarbeiterzuteilung anlegen - $qry = "SELECT tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, - (SELECT fachbereich_kurzbz FROM public.tbl_fachbereich WHERE oe_kurzbz=lehrfach.oe_kurzbz) as fachbereich_kurzbz - FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach - WHERE tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND lehreinheit_id=".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + $qry = "SELECT + tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, + lehrfach.oe_kurzbz as lehrfach_oe_kurzbz + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id + AND tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id + AND lehreinheit_id = ".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + if($db->db_query($qry)) { if($row = $db->db_fetch_object()) @@ -454,8 +463,8 @@ if(!$error) if(!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('lv-plan', $lva->getAllOe(), 'suid') && - !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz) && - !$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz)) + !$rechte->isBerechtigtMultipleOe('assistenz', $row->lehrfach_oe_kurzbz, 'suid') && + !$rechte->isBerechtigtMultipleOe('admin', $row->lehrfach_oe_kurzbz, 'suid')) { $error = true; $return = false; @@ -496,29 +505,47 @@ if(!$error) $fixangestellt=false; //Stundensatz aus tbl_mitarbeiter holen - $qry = "SELECT stundensatz, fixangestellt FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=".$db->db_add_param($_POST['mitarbeiter_uid']); - if($result = $db->db_query($qry)) + $mitarbeiter = new mitarbeiter(); + if ($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - if($row = $db->db_fetch_object($result)) + $fixangestellt = $mitarbeiter->fixangestellt; + $lem->stundensatz = $mitarbeiter->stundensatz; + + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) { - if($row->stundensatz!='') - $lem->stundensatz = $row->stundensatz; - else - $lem->stundensatz = '0'; - $fixangestellt = ($row->fixangestellt=='t'?true:false); + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $fixangestellt = true; + $lem->stundensatz = ''; + break; + } + } } else { - $error=true; - $return=false; - $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; + $lem->stundensatz = $mitarbeiter->stundensatz; } } else { $error=true; $return=false; - $errormsg='Fehler bei einer Datenbankabfrage:'.$db->db_last_error(); + $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; } $maxstunden=9999; @@ -1381,7 +1408,32 @@ if(!$error) $mitarbeiter = new mitarbeiter(); if($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - $data = $mitarbeiter->stundensatz; + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) + { + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $data = ''; + break; + } + } + } + else + $data = $mitarbeiter->stundensatz; $return = true; } else diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index 0e4e4fc06..6417e9a86 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -404,8 +404,8 @@ class bisverwendung extends basis_db $obj->verwendung_code = $row->verwendung_code; $obj->mitarbeiter_uid = $row->mitarbeiter_uid; $obj->hauptberufcode = $row->hauptberufcode; - $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $obj->habilitation = $this->db_parse_bool($row->habilitation); + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->habilitation = $this->db_parse_bool($row->habilitation); $obj->beginn = $row->beginn; $obj->ende = $row->ende; $obj->updatevon = $row->updatevon; @@ -513,8 +513,8 @@ class bisverwendung extends basis_db $this->verwendung_code = $row->verwendung_code; $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->hauptberufcode = $row->hauptberufcode; - $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $this->habilitation = $this->db_parse_bool($row->habilitation); + $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $this->habilitation = $this->db_parse_bool($row->habilitation); $this->beginn = $row->beginn; $this->ende = $row->ende; $this->updatevon = $row->updatevon; @@ -566,8 +566,8 @@ class bisverwendung extends basis_db $this->verwendung_code = $row->verwendung_code; $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->hauptberufcode = $row->hauptberufcode; - $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $this->habilitation = $this->db_parse_bool($row->habilitation); + $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $this->habilitation = $this->db_parse_bool($row->habilitation); $this->beginn = $row->beginn; $this->ende = $row->ende; $this->updatevon = $row->updatevon; @@ -587,5 +587,68 @@ class bisverwendung extends basis_db return false; } } + + /** + * Laedt alle Verwendungen eines Mitarbeiters die in einen Datumsbereich fallen + * @param $uid UID des Mitarbeiters + * @param $von + * @param $bis + * @return true wenn ok, false wenn Fehler + */ + public function getVerwendungRange($uid, $von, $bis) + { + $datum_obj = new datum(); + //laden des Datensatzes + $qry = " + SELECT + * + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid=".$this->db_add_param($uid)." + AND + ( + ".$this->db_add_param($datum_obj->formatDatum($von,'Y-m-d'))." BETWEEN COALESCE(beginn,'1970-01-01') AND COALESCE(ende,'2999-12-31') + OR + ".$this->db_add_param($datum_obj->formatDatum($bis,'Y-m-d'))." BETWEEN COALESCE(beginn,'1970-01-01') AND COALESCE(ende,'2999-12-31') + ) + ORDER BY ende desc;"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new bisverwendung(); + + $obj->bisverwendung_id = $row->bisverwendung_id; + $obj->ba1code = $row->ba1code; + $obj->ba2code = $row->ba2code; + $obj->beschausmasscode = $row->beschausmasscode; + $obj->verwendung_code = $row->verwendung_code; + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->hauptberufcode = $row->hauptberufcode; + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->habilitation = $this->db_parse_bool($row->habilitation); + $obj->beginn = $row->beginn; + $obj->ende = $row->ende; + $obj->updatevon = $row->updatevon; + $obj->updateamum = $row->updateamum; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->vertragsstunden = $row->vertragsstunden; + $obj->dv_art = $row->dv_art; + $obj->inkludierte_lehre = $row->inkludierte_lehre; + $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } } ?> From 119a2b200adac77613c1541e884ae4970961236e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Feb 2020 14:46:54 +0100 Subject: [PATCH 06/66] =?UTF-8?q?Neuen=20Modus=20f=C3=BCr=20Lehreinheitenv?= =?UTF-8?q?orr=C3=BCckung=20hinzugef=C3=BCgt=20bei=20dem=20die=20Stundens?= =?UTF-8?q?=C3=A4tze=20abh=C3=A4ngig=20von=20der=20Beschaeftigungsart=20ak?= =?UTF-8?q?tualisiert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/global.config-default.inc.php | 4 ++ vilesci/lehre/lehreinheiten_vorrueckung.php | 44 +++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index bb619586d..7c9d7b1c0 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -251,6 +251,10 @@ define('FAS_KONTO_SHOW_CREDIT_POINTS','false'); // Bei "default" wird der Standard-Stundensatz des Lektors (aus tbl_mitarbeiter) ermittelt, und dieser eingetragen. // Wenn numerisch, wird dieser Wert bei allen LektorInnen eingetragen. // Wenn nicht definiert, wird der Stundensatz des Vorjahres übernommen. +// Bei "nachbeschaeftigungsart" wird +// bei echten Dienstvertraegen mit voller inkludierter Lehre (-1) der Stundensatz auf null gesetzt +// bei echten Dienstvertraegen mit teilweise oder nicht inkludierter Lehre der Default Stundensatz gesetzt +// bei sonstigen Dienstvertraegen der Default Stundensatz gesetzt define('VILESCI_STUNDENSATZ_VORRUECKUNG', ''); // Wenn true, werden die Content-Aufrufe des CIS in der tbl_webservicelog mitgeloggt. Zuvor manuell einen neuen Webservicetyp "content" anlegen! diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index af12376ae..31a51c003 100644 --- a/vilesci/lehre/lehreinheiten_vorrueckung.php +++ b/vilesci/lehre/lehreinheiten_vorrueckung.php @@ -32,6 +32,7 @@ require_once('../../include/lehreinheitgruppe.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/gruppe.class.php'); +require_once('../../include/bisverwendung.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -162,6 +163,14 @@ elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') Alle Lehraufträge werden mit dem aktuell hinterlegten Standard-Stundensatz der/des Lehrenden vorgerückt '; } +elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') + && VILESCI_STUNDENSATZ_VORRUECKUNG != '' + && VILESCI_STUNDENSATZ_VORRUECKUNG == 'nachbeschaeftigungsart') +{ + echo '
+ Stundensätze werden abhängig von der Beschaeftigungsart aktualisiert. + '; +} else { echo '
@@ -219,6 +228,9 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') } } + $stsem_nach_obj = new studiensemester(); + $stsem_nach_obj->load($stsem_nach); + if ($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) @@ -314,6 +326,38 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') $stundensatz = new mitarbeiter($row_lem->mitarbeiter_uid); $lem_obj->stundensatz = $stundensatz->stundensatz; } + // Wenn VILESCI_STUNDENSATZ_VORRUECKUNG nachbeschaeftigungsart ist, wird + // bei echten Dienstvertraegen mit voller inkludierter Lehre (-1) der Stundensatz auf null gesetzt + // bei echten Dienstvertraegen mit teilweise oder nicht inkludierter Lehre der Default Stundensatz gesetzt + // bei sonstigen Dienstvertraegen der Default Stundensatz gesetzt + elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') + && VILESCI_STUNDENSATZ_VORRUECKUNG != '' + && VILESCI_STUNDENSATZ_VORRUECKUNG == 'nachbeschaeftigungsart') + { + if ($lem_obj->stundensatz != '0') + { + $stundensatz = new mitarbeiter($row_lem->mitarbeiter_uid); + $lem_obj->stundensatz = $stundensatz->stundensatz; + + $bisverwendung = new bisverwendung(); + if(!$bisverwendung->getVerwendungRange($row_lem->mitarbeiter_uid, $stsem_nach_obj->start, $stsem_nach_obj->ende)) + { + $bisverwendung->getLastAktVerwendung($row_lem->mitarbeiter_uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $lem_obj->stundensatz = ''; + break; + } + } + } + } $lem_obj->insertamum = date('Y-m-d H:i:s'); $lem_obj->insertvon = 'Vorrueckung_'.$user; $lem_obj->ext_id = ''; From ed332717ce3bec047ea34ff9afb71a5689f48cc6 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 14 Feb 2020 18:23:14 +0100 Subject: [PATCH 07/66] Infocenter Details: - added notice for entering the placement test points when Freigabe after RT participation --- .../system/infocenter/InfoCenter.php | 11 +++++---- public/js/infocenter/infocenterDetails.js | 9 ++++--- system/phrasesupdate.php | 24 +++++++++++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d5a751b05..234efd60d 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -532,6 +532,8 @@ class InfoCenter extends Auth_Controller if (isSuccess($result)) { $this->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel'); + $json->retval['nonCriticalErrors'] = array(); + $json->retval['infoMessages'] = array(); //set documents which have been formal geprüft to accepted $dokument_kurzbzs = array(); @@ -545,7 +547,7 @@ class InfoCenter extends Auth_Controller // acceptresult returns null if no documents to accept if ($acceptresult !== null && isError($acceptresult)) - $json->retval['nonCriticalErrors'] = 'error when accepting documents in FAS'; + $json->retval['nonCriticalErrors'][] = 'error when accepting documents in FAS'; $logparams = array($prestudent_id, $logdata['studiengang_kurzbz'], ''); @@ -584,7 +586,7 @@ class InfoCenter extends Auth_Controller ); if (isError($bewerberresult)) - $json->retval['nonCriticalErrors'] = 'error when inserting Bewerberstatus'; + $json->retval['nonCriticalErrors'][] = 'error when inserting Bewerberstatus'; $rtangetretenres = $this->PrestudentModel->update( $prestudent_id, @@ -595,10 +597,11 @@ class InfoCenter extends Auth_Controller if (isError($rtangetretenres)) { - $json->retval['nonCriticalErrors'] = 'error when setting reihungstestangetreten'; + $json->retval['nonCriticalErrors'][] = 'error when setting reihungstestangetreten'; } else { + $json->retval['infoMessages'][] = $this->p->t('infocenter', 'rtPunkteEintragenInfo'); $this->load->model('crm/RtPerson_model', 'RtPersonModel'); $rtteilgenommenres = $this->RtPersonModel->update( @@ -612,7 +615,7 @@ class InfoCenter extends Auth_Controller ); if (isError($rtteilgenommenres)) - $json->retval['nonCriticalErrors'] = 'error when setting reihungstest teilgenommen'; + $json->retval['nonCriticalErrors'][] = 'error when setting reihungstest teilgenommen'; } } } diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 0bcb88124..82a459e42 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -284,10 +284,13 @@ var InfocenterDetails = { { var freigabeResponseData = FHC_AjaxClient.getData(data); - if (freigabeResponseData.nonCriticalErrors && freigabeResponseData.nonCriticalErrors.length > 0 - && typeof freigabeResponseData.nonCriticalErrors == "string") + if (freigabeResponseData.nonCriticalErrors && freigabeResponseData.nonCriticalErrors.length > 0) { - FHC_DialogLib.alertWarning(freigabeResponseData.nonCriticalErrors); + FHC_DialogLib.alertWarning(freigabeResponseData.nonCriticalErrors.join(", ")); + } + else if (freigabeResponseData.infoMessages && freigabeResponseData.infoMessages.length > 0) + { + FHC_DialogLib.alertInfo(freigabeResponseData.infoMessages.join(", ")); } FHC_AjaxClient.showVeil(); InfocenterDetails.initFrgMessageSend(freigabeData); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d5f5e47d9..e31235943 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -3615,6 +3615,30 @@ When on hold, the date is only a reminder.', ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'rtPunkteEintragenInfo', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Es existierte bereits ein Bewerberstatus und eine Reihungstestteilnahme. + Deshalb wurde bei der Freigabe der Bewerberstatus automatisch hinzugefügt und der Bewerber als Reihungstestabsolvent markiert. + Die Reihungstestpunkte müssen aber noch manuell eingetragen werden!', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'An applicant status and a placement test participation already existed for this person. + Thus, the applicant status was added automatically and the applicant was marked as placement test participant. + However, the placement test result is yet to be entered manually!', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'password', From ff7f150cb63612e1ecd14f3b8cee7429ac54d424 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 20 Feb 2020 20:42:37 +0100 Subject: [PATCH 08/66] prioritizationJob created --- .../controllers/jobs/ReihungstestJob.php | 994 +++++++++++------- 1 file changed, 619 insertions(+), 375 deletions(-) diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 84a5fe614..948eeb0b8 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -3,30 +3,32 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class ReihungstestJob extends CLI_Controller { - /** - * Constructor - */ - public function __construct() - { - parent::__construct(); + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); - // Load models - $this->load->model('crm/Reihungstest_model', 'ReihungstestModel'); - $this->load->model('crm/RtStudienplan_model', 'RtStudienplanModel'); - $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + // Load models + $this->load->model('crm/Reihungstest_model', 'ReihungstestModel'); + $this->load->model('crm/RtStudienplan_model', 'RtStudienplanModel'); + $this->load->model('crm/Konto_model', 'KontoModel'); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); - // Load helpers - $this->load->helper('hlp_sancho_helper'); - } + // Load helpers + $this->load->helper('hlp_sancho_helper'); + } - /** - * runReihungstestJob - */ - public function runReihungstestJob() - { - // Get study plans that have no assigned placement tests yet - $result = $this->ReihungstestModel->checkMissingReihungstest(); + /** + * runReihungstestJob + */ + public function runReihungstestJob() + { + // Get study plans that have no assigned placement tests yet + $result = $this->ReihungstestModel->checkMissingReihungstest(); $missing_rt_arr = array(); if (hasData($result)) @@ -38,8 +40,8 @@ class ReihungstestJob extends CLI_Controller show_error(getError($result)); } - // Get free places - $result = $this->ReihungstestModel->getFreePlaces(); + // Get free places + $result = $this->ReihungstestModel->getFreePlaces(); $free_places_arr = array(); if (hasData($result)) @@ -51,8 +53,8 @@ class ReihungstestJob extends CLI_Controller show_error(getError($result)); } - // Prepare data for mail template 'ReihungstestJob' - $content_data_arr = $this->_getContentData($missing_rt_arr, $free_places_arr); + // Prepare data for mail template 'ReihungstestJob' + $content_data_arr = $this->_getContentData($missing_rt_arr, $free_places_arr); // Send email in Sancho design if (!empty($missing_rt_arr) || !empty($free_places_arr)) @@ -95,7 +97,7 @@ class ReihungstestJob extends CLI_Controller // Get placement tests where registration date was yesterday $result = $this->ReihungstestModel->checkReachedRegistrationDate($degreeProgram); - $reachedRegistration_rt_arr = array(); + $reachedRegistration_rt_arr = array(); if (hasData($result)) { @@ -106,11 +108,11 @@ class ReihungstestJob extends CLI_Controller show_error(getError($result)); } - $applicants_arr = array(); + $applicants_arr = array(); - foreach ($reachedRegistration_rt_arr as $reihungstest) - { - $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTestForCronjob($reihungstest->reihungstest_id); + foreach ($reachedRegistration_rt_arr as $reihungstest) + { + $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTestForCronjob($reihungstest->reihungstest_id); if (hasData($applicants)) { @@ -214,24 +216,24 @@ class ReihungstestJob extends CLI_Controller // Get applicants that have been added to a test after Anmeldefrist $result = $this->ReihungstestModel->getApplicantAssignedAfterDate($degreeProgram); - $applicants_after_anmeldefrist_arr = array(); + $applicants_after_anmeldefrist_arr = array(); - if (hasData($result)) - { - $applicants_after_anmeldefrist_arr = $result->retval; - } - elseif (isError($result)) - { - show_error(getError($result)); - } + if (hasData($result)) + { + $applicants_after_anmeldefrist_arr = $result->retval; + } + elseif (isError($result)) + { + show_error(getError($result)); + } - $studiengang = ''; - $mailReceipients = ''; // String with all mailadresses - $mailcontent_data_arr = array(); - $headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"'; - $rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"'; - $mailcontent = ''; - $applicants_list = ''; + $studiengang = ''; + $mailReceipients = ''; // String with all mailadresses + $mailcontent_data_arr = array(); + $headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"'; + $rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"'; + $mailcontent = ''; + $applicants_list = ''; if (count($applicants_after_anmeldefrist_arr) > 0) { @@ -277,11 +279,11 @@ class ReihungstestJob extends CLI_Controller '; - } + } - $studiengang = $applicant->studiengang_kz; - $mailReceipients .= $applicant->email . ';'; - $applicants_list .= ' + $studiengang = $applicant->studiengang_kz; + $mailReceipients .= $applicant->email . ';'; + $applicants_list .= ' ' . date_format(date_create($applicant->datum), 'd.m.Y') . ' ' . $applicant->uhrzeit . ' @@ -315,7 +317,7 @@ class ReihungstestJob extends CLI_Controller } /* - * Sends an email to all applicants of a placement test to remind them 3 working days before + * Sends an email to all applicants of a placement test to remind them 2 working days before * * @param integer $degreeProgram. Kennzahl of Degree Program to check * @param string $bcc. Optional. BCC-Mailadress to send the Mails to @@ -341,66 +343,66 @@ class ReihungstestJob extends CLI_Controller $from = urldecode($from); } - // Get placement tests with testdate within the next 2 weeks - $resultNextTestDates = $this->ReihungstestModel->getNextPlacementtests($degreeProgram, 14); - if (hasData($resultNextTestDates)) - { - $nextTestDates = $resultNextTestDates->retval; - $enddate = ''; - // Loop through the dates - foreach ($nextTestDates as $testDates) - { - $workingdays = 0; - $testsOndate = array(); + // Get placement tests with testdate within the next 2 weeks + $resultNextTestDates = $this->ReihungstestModel->getNextPlacementtests($degreeProgram, 14); + if (hasData($resultNextTestDates)) + { + $nextTestDates = $resultNextTestDates->retval; + $enddate = ''; + // Loop through the dates + foreach ($nextTestDates as $testDates) + { + $workingdays = 0; + $testsOndate = array(); - // Deduct days till 3 working days are reached - for ($i = 1; ; $i++) - { - if (isDateWorkingDay($testDates->datum, $i) === true) - { - $workingdays++; - } - if ($workingdays == 3) - { - $enddate = date("Y-m-d", strtotime("$testDates->datum -" . $i . " days")); - break; - } - else - { - continue; - } - } + // Deduct days till 2 working days are reached + for ($i = 1; ; $i++) + { + if (isDateWorkingDay($testDates->datum, $i) === true) + { + $workingdays++; + } + if ($workingdays == 2) + { + $enddate = date("Y-m-d", strtotime("$testDates->datum -" . $i . " days")); + break; + } + else + { + continue; + } + } - // If $enddate is today -> load all tests of $testDates->datum - if (date("Y-m-d", strtotime($enddate)) == date('Y-m-d')) - { - $resultTestsOnDate = $this->ReihungstestModel->getTestsOnDate($testDates->datum, $degreeProgram); + // If $enddate is today -> load all tests of $testDates->datum + if (date("Y-m-d", strtotime($enddate)) == date('Y-m-d')) + { + $resultTestsOnDate = $this->ReihungstestModel->getTestsOnDate($testDates->datum, $degreeProgram); - if (hasData($resultTestsOnDate)) - { - $testsOndate = $resultTestsOnDate->retval; - } - elseif (isError($resultTestsOnDate)) - { - show_error(getError($resultTestsOnDate)); - } - } + if (hasData($resultTestsOnDate)) + { + $testsOndate = $resultTestsOnDate->retval; + } + elseif (isError($resultTestsOnDate)) + { + show_error(getError($resultTestsOnDate)); + } + } - if (!isEmptyArray($testsOndate)) - { - foreach ($testsOndate as $reihungstest) - { - // Loads applicants of a test - $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTest($reihungstest->reihungstest_id); + if (!isEmptyArray($testsOndate)) + { + foreach ($testsOndate as $reihungstest) + { + // Loads applicants of a test + $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTest($reihungstest->reihungstest_id); - if (hasData($applicants)) - { - $applicants_arr = $applicants->retval; - } - elseif (isError($applicants)) - { - show_error(getError($applicants)); - } + if (hasData($applicants)) + { + $applicants_arr = $applicants->retval; + } + elseif (isError($applicants)) + { + show_error(getError($applicants)); + } foreach ($applicants_arr as $applicant) { @@ -420,237 +422,237 @@ class ReihungstestJob extends CLI_Controller $mailcontent_data_arr['wegbeschreibung'] = $applicant->lageplan; } - sendSanchoMail( - 'Sancho_RemindApplicantsOfTest', - $mailcontent_data_arr, - $applicant->email, - 'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder', - DEFAULT_SANCHO_HEADER_IMG, - DEFAULT_SANCHO_FOOTER_IMG, - $from, - '', - $bcc); - } - } - } - } - } - } + sendSanchoMail( + 'Sancho_RemindApplicantsOfTest', + $mailcontent_data_arr, + $applicant->email, + 'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder', + DEFAULT_SANCHO_HEADER_IMG, + DEFAULT_SANCHO_FOOTER_IMG, + $from, + '', + $bcc); + } + } + } + } + } + } - /** - * This job sends eMail(s) to the relevant stg assistance(s) informing about: - * All applicants, who have sent new applications AFTER they had absolved a - * placement test in the actual studiensemester - * AND who have been confirmed yesterday. - */ - public function mailNewApplicants() - { - // Get yesterdays confirmed applicants for Bachelor-studies - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - $this->PrestudentstatusModel->addSelect(' - tbl_person.person_id, - tbl_prestudentstatus.prestudent_id, - tbl_prestudent.studiengang_kz, - tbl_prestudentstatus.studiensemester_kurzbz, - tbl_prestudentstatus.bestaetigtam, - tbl_prestudentstatus.bewerbung_abgeschicktamum - '); - $this->PrestudentstatusModel->addJoin('public.tbl_prestudent', 'prestudent_id'); - $this->PrestudentstatusModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); - $this->PrestudentstatusModel->addJoin('public.tbl_studiengangstyp', 'typ'); - $this->PrestudentstatusModel->addJoin('public.tbl_person', 'person_id'); + /** + * This job sends eMail(s) to the relevant stg assistance(s) informing about: + * All applicants, who have sent new applications AFTER they had absolved a + * placement test in the actual studiensemester + * AND who have been confirmed yesterday. + */ + public function mailNewApplicants() + { + // Get yesterdays confirmed applicants for Bachelor-studies + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->PrestudentstatusModel->addSelect(' + tbl_person.person_id, + tbl_prestudentstatus.prestudent_id, + tbl_prestudent.studiengang_kz, + tbl_prestudentstatus.studiensemester_kurzbz, + tbl_prestudentstatus.bestaetigtam, + tbl_prestudentstatus.bewerbung_abgeschicktamum + '); + $this->PrestudentstatusModel->addJoin('public.tbl_prestudent', 'prestudent_id'); + $this->PrestudentstatusModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $this->PrestudentstatusModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->PrestudentstatusModel->addJoin('public.tbl_person', 'person_id'); - $yesterdays_applicants_arr = $this->PrestudentstatusModel->loadWhere(' - status_kurzbz = \'Interessent\' AND - typ = \'b\' AND - bestaetigtam = current_date - 1 - '); + $yesterdays_applicants_arr = $this->PrestudentstatusModel->loadWhere(' + status_kurzbz = \'Interessent\' AND + typ = \'b\' AND + bestaetigtam = current_date - 1 + '); - // Retrieve the person_ids of yesterdays confirmed applicants - $person_id_arr = array(); - if (hasData($yesterdays_applicants_arr)) - { - foreach ($yesterdays_applicants_arr->retval as $yesterdays_applicant) - { - if (isset($yesterdays_applicant->person_id)) { - $person_id_arr[] = $yesterdays_applicant->person_id; - } - } - } - elseif (isError($yesterdays_applicants_arr)) - { - show_error(getError($yesterdays_applicants_arr)); - } + // Retrieve the person_ids of yesterdays confirmed applicants + $person_id_arr = array(); + if (hasData($yesterdays_applicants_arr)) + { + foreach ($yesterdays_applicants_arr->retval as $yesterdays_applicant) + { + if (isset($yesterdays_applicant->person_id)) { + $person_id_arr[] = $yesterdays_applicant->person_id; + } + } + } + elseif (isError($yesterdays_applicants_arr)) + { + show_error(getError($yesterdays_applicants_arr)); + } - // Get all other prestudenten of the given persons. - if (!isEmptyArray($person_id_arr)) - { - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $this->PrestudentModel->addDistinct(); - $this->PrestudentModel->addSelect(' - person_id, - tbl_reihungstest.studiensemester_kurzbz, - tbl_reihungstest.reihungstest_id, - (SELECT(tbl_reihungstest.datum::text || \' \' || tbl_reihungstest.uhrzeit::text)::timestamp) AS reihungstest_timestamp - '); - $this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); - $this->PrestudentModel->addJoin('public.tbl_studiengangstyp', 'typ'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); - $this->PrestudentModel->addJoin('public.tbl_person', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_rt_person', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_reihungstest', 'tbl_reihungstest.reihungstest_id = tbl_rt_person.rt_id'); + // Get all other prestudenten of the given persons. + if (!isEmptyArray($person_id_arr)) + { + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->PrestudentModel->addDistinct(); + $this->PrestudentModel->addSelect(' + person_id, + tbl_reihungstest.studiensemester_kurzbz, + tbl_reihungstest.reihungstest_id, + (SELECT(tbl_reihungstest.datum::text || \' \' || tbl_reihungstest.uhrzeit::text)::timestamp) AS reihungstest_timestamp + '); + $this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $this->PrestudentModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + $this->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_rt_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_reihungstest', 'tbl_reihungstest.reihungstest_id = tbl_rt_person.rt_id'); - // Store them, if they have already absolved a placement test in the same study term they have applied for. - $placement_absolvents_arr = $this->PrestudentModel->loadWhere(' - person_id IN (' . implode(', ', $person_id_arr) . ') AND - typ = \'b\' AND - teilgenommen = \'t\' AND - tbl_reihungstest.studiensemester_kurzbz IN ( - SELECT - studiensemester_kurzbz - FROM - public.tbl_studiensemester - WHERE - ende >= now() - ) - '); - } + // Store them, if they have already absolved a placement test in the same study term they have applied for. + $placement_absolvents_arr = $this->PrestudentModel->loadWhere(' + person_id IN (' . implode(', ', $person_id_arr) . ') AND + typ = \'b\' AND + teilgenommen = \'t\' AND + tbl_reihungstest.studiensemester_kurzbz IN ( + SELECT + studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + ende >= now() + ) + '); + } - // Store data to be send in the email-link - $result_arr = array(); - foreach($yesterdays_applicants_arr->retval as $yesterdays_applicant) - { - foreach ($placement_absolvents_arr->retval as $placement_absolvent) - { - if ($yesterdays_applicant->person_id == $placement_absolvent->person_id && - $yesterdays_applicant->studiensemester_kurzbz == $placement_absolvent->studiensemester_kurzbz && - $yesterdays_applicant->bewerbung_abgeschicktamum >= $placement_absolvent->reihungstest_timestamp) - { - $obj = new stdClass(); - $obj->prestudent_id = $yesterdays_applicant->prestudent_id; // prestudent_id of the yesterdays applicant - $obj->studiengang_kz = $yesterdays_applicant->studiengang_kz; // study program of interest of the yesterdays applicant - $obj->reihungstest_id = $placement_absolvent->reihungstest_id; // reihungstest_id of absolved reihungstest of that person + // Store data to be send in the email-link + $result_arr = array(); + foreach($yesterdays_applicants_arr->retval as $yesterdays_applicant) + { + foreach ($placement_absolvents_arr->retval as $placement_absolvent) + { + if ($yesterdays_applicant->person_id == $placement_absolvent->person_id && + $yesterdays_applicant->studiensemester_kurzbz == $placement_absolvent->studiensemester_kurzbz && + $yesterdays_applicant->bewerbung_abgeschicktamum >= $placement_absolvent->reihungstest_timestamp) + { + $obj = new stdClass(); + $obj->prestudent_id = $yesterdays_applicant->prestudent_id; // prestudent_id of the yesterdays applicant + $obj->studiengang_kz = $yesterdays_applicant->studiengang_kz; // study program of interest of the yesterdays applicant + $obj->reihungstest_id = $placement_absolvent->reihungstest_id; // reihungstest_id of absolved reihungstest of that person - $result_arr[]= $obj; - } - } - } + $result_arr[]= $obj; + } + } + } - // Sort by STG. This is important to send the mails clustered by STG to the different STG assistances. - usort($result_arr, function ($a, $b) - { - if ($a->studiengang_kz == $b->studiengang_kz) { - return 0; - } - return ($a->studiengang_kz < $b->studiengang_kz) ? -1 : 1; - }); + // Sort by STG. This is important to send the mails clustered by STG to the different STG assistances. + usort($result_arr, function ($a, $b) + { + if ($a->studiengang_kz == $b->studiengang_kz) { + return 0; + } + return ($a->studiengang_kz < $b->studiengang_kz) ? -1 : 1; + }); - $to = ''; // mail recipient (stg assistance) - $content_arr = array(); // url paths to the new applicants - $base_link = base_url('vilesci/stammdaten/auswertung_fhtw.php'); + $to = ''; // mail recipient (stg assistance) + $content_arr = array(); // url paths to the new applicants + $base_link = base_url('vilesci/stammdaten/auswertung_fhtw.php'); - $i = 0; // loop counter - $len = count($result_arr); + $i = 0; // loop counter + $len = count($result_arr); - // Loop trough list of new applicants - foreach($result_arr as $result) - { - $studiengang = $this->StudiengangModel->load($result->studiengang_kz); - $mail_stg_assistance = $studiengang->retval[0]->email; + // Loop trough list of new applicants + foreach($result_arr as $result) + { + $studiengang = $this->StudiengangModel->load($result->studiengang_kz); + $mail_stg_assistance = $studiengang->retval[0]->email; - // If first loop - if ($i == 0) - { - $to = $mail_stg_assistance; // set recipient initially - } + // If first loop + if ($i == 0) + { + $to = $mail_stg_assistance; // set recipient initially + } - // If new study is encountered but is not the first loop - if ($to != $mail_stg_assistance && $i != 0) - { - // Prepare content for mail template - $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + // If new study is encountered but is not the first loop + if ($to != $mail_stg_assistance && $i != 0) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); - // Send mail - sendSanchoMail( - 'BewerberNachReihungstest', - $content_data_arr, - $to, - 'Neue Bewerbungen nach absolviertem Reihungstest', - 'sancho_header_min_bw.jpg', - 'sancho_footer_min_bw.jpg' - ); + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); - // Reset content for new study applicants & reset recipient (new stg assistance) - $content_arr = array($base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id); - $to = $mail_stg_assistance; - } - // If same study - else - { - // just add content - $content_arr[]= $base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id; // add to content - } + // Reset content for new study applicants & reset recipient (new stg assistance) + $content_arr = array($base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id); + $to = $mail_stg_assistance; + } + // If same study + else + { + // just add content + $content_arr[]= $base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id; // add to content + } - // If last loop - if (($i == $len - 1)) - { - // Prepare content for mail template - $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + // If last loop + if (($i == $len - 1)) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); - // Send mail - sendSanchoMail( - 'BewerberNachReihungstest', - $content_data_arr, - $to, - 'Neue Bewerbungen nach absolviertem Reihungstest', - 'sancho_header_min_bw.jpg', - 'sancho_footer_min_bw.jpg' - ); - } - $i++; // iterate counter - } - } + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + } + $i++; // iterate counter + } + } - // ------------------------------------------------------------------------ - // Private methods - /** - * Returns associative array with data as needed in the reihungstest job template. - * @param array $missing_rt_arr Array with studienpläne, which have no assigned placement tests. - * @param array $free_places_arr Array with info and amount of free placement test places. - * @return array - */ - private function _getContentData($missing_rt_arr, $free_places_arr) - { - $style_tbl1 = ' cellpadding="0" cellspacing="10" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; - $style_tbl2 = ' cellpadding="0" cellspacing="20" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + // ------------------------------------------------------------------------ + // Private methods + /** + * Returns associative array with data as needed in the reihungstest job template. + * @param array $missing_rt_arr Array with studienpläne, which have no assigned placement tests. + * @param array $free_places_arr Array with info and amount of free placement test places. + * @return array + */ + private function _getContentData($missing_rt_arr, $free_places_arr) + { + $style_tbl1 = ' cellpadding="0" cellspacing="10" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + $style_tbl2 = ' cellpadding="0" cellspacing="20" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; - // Prepare HTML table with study plans that have no placement tests yet - if (!empty($missing_rt_arr)) { - $studienplan_list - = ' + // Prepare HTML table with study plans that have no placement tests yet + if (!empty($missing_rt_arr)) { + $studienplan_list + = ' '; - foreach ($missing_rt_arr as $rt) { - $studienplan_list .= ' + foreach ($missing_rt_arr as $rt) { + $studienplan_list .= ' ' . $rt->bezeichnung . ' '; - } + } - $studienplan_list .= ' + $studienplan_list .= ' '; - } else { - $studienplan_list = ' + } else { + $studienplan_list = ' Alles okay! Alle Studienpläne haben zumindest einen Reihungstest. '; - } + } - // Prepare HTML table with information and amount of free places - if (!empty($free_places_arr)) { - $freie_plaetze_list = ' + // Prepare HTML table with information and amount of free places + if (!empty($free_places_arr)) { + $freie_plaetze_list = ' Fakultät @@ -659,67 +661,67 @@ class ReihungstestJob extends CLI_Controller '; - foreach ($free_places_arr as $free_place) { - $datum = new DateTime($free_place->datum); - $style_alarm = ($free_place->freie_plaetze <= 5) ? ' style=" color: red; font-weight: bold" ' : ''; // mark if <=5 free places + foreach ($free_places_arr as $free_place) { + $datum = new DateTime($free_place->datum); + $style_alarm = ($free_place->freie_plaetze <= 5) ? ' style=" color: red; font-weight: bold" ' : ''; // mark if <=5 free places - $freie_plaetze_list .= ' + $freie_plaetze_list .= ' ' . $free_place->fakultaet . ' ' . $datum->format('d.m.Y') . ' ' . $free_place->freie_plaetze . ' '; - } + } - $freie_plaetze_list .= ' + $freie_plaetze_list .= ' '; - } else { - $freie_plaetze_list = ' + } else { + $freie_plaetze_list = ' Es gibt heute keine Ergebnisse zu freien Reihungstestplätze. '; - } + } - // Set associative array with the prepared HTML tables and URL be used by the template's variables - $content_data_arr['studienplan_list'] = $studienplan_list; - $content_data_arr['freie_plaetze_list'] = $freie_plaetze_list; - $content_data_arr['link'] = site_url('/organisation/Reihungstest'); + // Set associative array with the prepared HTML tables and URL be used by the template's variables + $content_data_arr['studienplan_list'] = $studienplan_list; + $content_data_arr['freie_plaetze_list'] = $freie_plaetze_list; + $content_data_arr['link'] = site_url('/organisation/Reihungstest'); - return $content_data_arr; - } + return $content_data_arr; + } - /** - * Returns associative array with data as needed in the BewerberNachReihungstest-template. - * @param array $content_arr Array with links to the testtool evaluation page of the new applicants. - * @return array - */ - private function _getContentDataNewApplicant($content_arr) - { - $content = ''; - $counter = 1; - foreach ($content_arr as $row) - { - $content .= '
Link zu: Bewerber '. $counter. ''; - $counter++; - } + /** + * Returns associative array with data as needed in the BewerberNachReihungstest-template. + * @param array $content_arr Array with links to the testtool evaluation page of the new applicants. + * @return array + */ + private function _getContentDataNewApplicant($content_arr) + { + $content = ''; + $counter = 1; + foreach ($content_arr as $row) + { + $content .= '
Link zu: Bewerber '. $counter. ''; + $counter++; + } - $content_data_arr['link'] = $content; - return $content_data_arr; - } + $content_data_arr['link'] = $content; + return $content_data_arr; + } - /** - * Checks the upcoming placement tests if there are correct studyplans assigned - * If there are invalid studyplans assigned (outdated because there exists a new version), - * it tries to find a better one and assigns it additionaly - */ - public function correctStudienplan() - { - // get all placement tests with incorrect studyplan - $qry = " + /** + * Checks the upcoming placement tests if there are correct studyplans assigned + * If there are invalid studyplans assigned (outdated because there exists a new version), + * it tries to find a better one and assigns it additionaly + */ + public function correctStudienplan() + { + // get all placement tests with incorrect studyplan + $qry = " SELECT tbl_reihungstest.reihungstest_id, tbl_studienplan.studienplan_id, @@ -752,37 +754,279 @@ class ReihungstestJob extends CLI_Controller ) "; - $db = new DB_Model(); - $result_rt = $db->execReadOnlyQuery($qry); + $db = new DB_Model(); + $result_rt = $db->execReadOnlyQuery($qry); - if (hasdata($result_rt)) { - foreach ($result_rt->retval as $row_rt) { - // find an active studyplan for the same degree program with is valid in this semester - $result_stpl = $this->StudienplanModel->getStudienplaeneBySemester( - $row_rt->studiengang_kz, - $row_rt->studiensemester_kurzbz - ); + if (hasdata($result_rt)) { + foreach ($result_rt->retval as $row_rt) { + // find an active studyplan for the same degree program with is valid in this semester + $result_stpl = $this->StudienplanModel->getStudienplaeneBySemester( + $row_rt->studiengang_kz, + $row_rt->studiensemester_kurzbz + ); - if (hasData($result_stpl)) { - foreach ($result_stpl->retval as $row_stpl) { - // Add new Studyplan to RtStudienplan if missing - $rt_studienplan = $this->RtStudienplanModel->loadWhere(array( - "reihungstest_id" => $row_rt->reihungstest_id, - "studienplan_id" => $row_stpl->studienplan_id - )); + if (hasData($result_stpl)) { + foreach ($result_stpl->retval as $row_stpl) { + // Add new Studyplan to RtStudienplan if missing + $rt_studienplan = $this->RtStudienplanModel->loadWhere(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); - if (!hasData($rt_studienplan)) { - echo "\nAdding StudienplanId: $row_stpl->studienplan_id"; - echo " to ReihungstestId: $row_rt->reihungstest_id"; + if (!hasData($rt_studienplan)) { + echo "\nAdding StudienplanId: $row_stpl->studienplan_id"; + echo " to ReihungstestId: $row_rt->reihungstest_id"; - $this->RtStudienplanModel->insert(array( - "reihungstest_id" => $row_rt->reihungstest_id, - "studienplan_id" => $row_stpl->studienplan_id - )); - } - } - } - } - } - } + $this->RtStudienplanModel->insert(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); + } + } + } + } + } + } + + /* + * Cronjob for priorisation process of FHTW + * + * Wenn ein Student in einer höheren Prio aufgenommen wird, werden die anderen Bewerbungen auf "Abgewiesen" gesetzt, + * solang diese noch im Status "Bewerber" sind. + * Andernfalls wird eine Mail an die niedrigeren Prios verschickt, dass eine höhere Prio aufgenommen hat + * Die Kaution wird automatisch gebucht + * + * @param string $bcc. Optional. BCC-Mailadress to send the Mails to + * @param string $from. Optional. Sender-Mailadress shown to recipient + */ + public function prioritizationJob($bcc = null, $from = null) + { + $qry = " + SELECT DISTINCT + get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') AS laststatus, /* Studiensemester dynamisch ermitteln oder als Parameter */ + tbl_prestudentstatus.studiensemester_kurzbz, + tbl_prestudent.* + FROM PUBLIC.tbl_person + JOIN PUBLIC.tbl_prestudent USING (person_id) + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + JOIN lehre.tbl_studienplan USING (studienplan_id) + JOIN lehre.tbl_studienordnung USING (studienordnung_id) + JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz) + WHERE tbl_prestudentstatus.datum >= (SELECT CURRENT_DATE -1) + AND get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') IN ('Aufgenommener','Bewerber','Wartender') + AND studiensemester_kurzbz = 'WS2020' /* Studiensemester dynamisch ermitteln oder als Parameter */ + AND tbl_studiengang.typ = 'b' + ORDER BY studiengang_kz, laststatus + "; + + // Encode Params + if ($bcc != '') + { + // $bcc can be given as null-string, so check that too + if ($bcc == 'null') + { + $bcc = ''; + } + else + { + $bcc = urldecode($bcc); + } + } + if ($from != '') + { + $from = urldecode($from); + } + + $db = new DB_Model(); + $result_prestudents = $db->execReadOnlyQuery($qry); + $mailArray = array(); + + if (hasdata($result_prestudents)) + { + foreach ($result_prestudents->retval as $row_ps) + { + // Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen + // falls diese Bewerber oder Warteliste sind + // Danach Kaution einbuchen + if ($row_ps->laststatus == 'Aufgenommener') + { + // Alle niedrigeren Prios laden + $qryNiedrPrios = " + SELECT DISTINCT + get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') AS laststatus, + tbl_studienplan.orgform_kurzbz, + tbl_person.nachname, + tbl_person.vorname, + tbl_prestudent.* + FROM PUBLIC.tbl_person + JOIN PUBLIC.tbl_prestudent USING (person_id) + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + JOIN lehre.tbl_studienplan USING (studienplan_id) + JOIN PUBLIC.tbl_studiengang ON (tbl_prestudent.studiengang_kz = tbl_studiengang.studiengang_kz) + WHERE tbl_prestudent.person_id = ".$row_ps->person_id." + AND tbl_prestudent.prestudent_id != ".$row_ps->prestudent_id." + AND get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') IN ('Aufgenommener','Bewerber','Wartender') + AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."' + AND tbl_studiengang.typ = 'b' + AND priorisierung > ".$row_ps->priorisierung." + ORDER BY studiengang_kz, laststatus + "; + + $resultNiedrPrios = $db->execReadOnlyQuery($qryNiedrPrios); + + if (hasdata($resultNiedrPrios)) + { + foreach ($resultNiedrPrios->retval as $rowNiedrPrios) + { + if ($rowNiedrPrios->laststatus == 'Bewerber') + { + // Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen + $lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id); + + $result = $this->PrestudentstatusModel->insert( + array( + 'prestudent_id' => $rowNiedrPrios->prestudent_id, + 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz, + 'ausbildungssemester' => $lastStatus->retval[0]->ausbildungssemester, + 'datum' => date('Y-m-d'), + 'orgform_kurzbz' => $lastStatus->retval[0]->orgform_kurzbz, + 'studienplan_id' => $lastStatus->retval[0]->studienplan_id, + 'status_kurzbz' => 'Abgewiesener', + 'statusgrund_id' => 5, + 'insertvon' => 'prioritizationJob', + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + if (isSuccess($result)) + { + $mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenGesetzt'][] + = $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')'; + } + } + elseif ($rowNiedrPrios->laststatus == 'Wartender') + { + // Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen + // Mail zur Info an Assistenz schicken + $lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id); + + $result = $this->PrestudentstatusModel->insert( + array( + 'prestudent_id' => $rowNiedrPrios->prestudent_id, + 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz, + 'ausbildungssemester' => $lastStatus->retval[0]->ausbildungssemester, + 'datum' => date('Y-m-d'), + 'orgform_kurzbz' => $lastStatus->retval[0]->orgform_kurzbz, + 'studienplan_id' => $lastStatus->retval[0]->studienplan_id, + 'status_kurzbz' => 'Abgewiesener', + 'statusgrund_id' => 5, + 'insertvon' => 'prioritizationJob', + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + if (isSuccess($result)) + { + $mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenGesetzt'][] + = $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')'; + } + } + elseif ($rowNiedrPrios->laststatus == 'Aufgenommener') + { + // Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde + $mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][] + = $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')'; + } + } + } + echo '
', var_dump($mailArray), '
'; + // Kaution einbuchen für $row_ps->prestudent_id + // Vorher prüfen, ob schon eine Kaution gebucht ist + // Todo: Betrag automatisch aus tbl_buchungstyp laden + + $qryKautionExists = " + SELECT count(*) as anzahl + FROM public.tbl_konto + WHERE person_id = ".$row_ps->person_id." + AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."' + AND buchungstyp_kurzbz = 'Kaution'"; + + $resultKautionExists = $db->execReadOnlyQuery($qryKautionExists); + if (hasdata($resultKautionExists)) + { + if ($resultKautionExists->retval[0]->anzahl == '0') + { + // Todo: Zahlungsreferenz generieren (StudiengangsOE+Buchungsnummer) + $this->KontoModel->insert(array( + "person_id" => $row_ps->person_id, + "studiengang_kz" => $row_ps->studiengang_kz, + "studiensemester_kurzbz" => $row_ps->studiensemester_kurzbz, + "betrag" => -150, + "buchungsdatum" => date('Y-m-d'), + "buchungstext" => 'Kaution', + "buchungstyp_kurzbz" => 'Kaution', + "insertvon" => 'prioritizationJob', + "insertamum" => date('Y-m-d H:i:s') + )); + } + } + } + } + } + // Mails senden + if (!isEmptyArray($mailArray)) + { + foreach ($mailArray AS $stg=>$orgform) + { + $studiengang = $this->StudiengangModel->load($stg); + + $mailcontent = '

+ Folgende BewerberInnen wurden in einem höher priorisierten Studiengang aufgenommen und haben deshalb einen Status "Abgewiesen" erhalten:

'; + + foreach ($orgform AS $art=>$value) + { + $mailcontent .= '

Orgform '.$art.'

'; + if (isset($value['AbgewiesenGesetzt']) && !isEmptyArray($value['AbgewiesenGesetzt'])) + { + $mailcontent .= ' + + '; + sort($value['AbgewiesenGesetzt']); + foreach ($value['AbgewiesenGesetzt'] AS $key=>$bewerber) + { + $mailcontent .= ''; + } + $mailcontent .= '
Zuvor Warteliste
'.$bewerber.'


'; + } + if (isset($value['AufnahmeHoeherePrio']) && !isEmptyArray($value['AufnahmeHoeherePrio'])) + { + $mailcontent .= ' + + '; + sort($value['AufnahmeHoeherePrio']); + foreach ($value['AufnahmeHoeherePrio'] AS $key=>$bewerber) + { + $mailcontent .= ''; + } + $mailcontent .= '
Zuvor BewerberIn
'.$bewerber.'
'; + } + } + + $mailcontent_data_arr['table'] = $mailcontent; + + // Send email in Sancho design + if (!isEmptyString($mailcontent)) + { + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + $studiengang->retval[0]->email, + 'Status Abgewiesen gesetzt', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $from, + '', + $bcc); + } + } + } + } } From 304d7727f000fc30a051b4d4235f21df7764e6d0 Mon Sep 17 00:00:00 2001 From: Paolo Date: Fri, 21 Feb 2020 16:59:25 +0100 Subject: [PATCH 09/66] - CL/Messages_model-> sendReply applied workaround for Infocenter - MailJob now extends JOB_Controller and writes logs in DB - MailJob->sendMessages renamed to sendAllMessageEmailNotices - sendAllMessageEmailNotices now accept new parameter since to restrict number of messages - MessageLib->sendAllEmailNotices now accept new parameter since and adapted to use new MessageLib->_sendNoticeEmails - Recipient_model->getMessages renamed to getNotSentMessages - Now accepts only limit and since as parameters - Changed query to retrieve only message ids --- application/controllers/jobs/MailJob.php | 42 ++++++----- application/libraries/MessageLib.php | 26 ++++--- application/models/CL/Messages_model.php | 3 +- application/models/system/Recipient_model.php | 69 ++++--------------- 4 files changed, 55 insertions(+), 85 deletions(-) diff --git a/application/controllers/jobs/MailJob.php b/application/controllers/jobs/MailJob.php index 721db0068..b4b772f78 100644 --- a/application/controllers/jobs/MailJob.php +++ b/application/controllers/jobs/MailJob.php @@ -1,20 +1,8 @@ messagelib->sendAllNotices($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem); + $this->logInfo('Send all message email notices started'); + + // Send them all! + $sendAllEmailNotices = $this->messagelib->sendAllEmailNotices($since, $numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem); + if (isError($sendAllEmailNotices)) + { + $optionalParameters = new stdClass(); + $optionalParameters->$since = $since; + $optionalParameters->$numberToSent = $numberToSent; + $optionalParameters->$numberPerTimeRange = $numberPerTimeRange; + $optionalParameters->$emailTimeRange = $emailTimeRange; + $optionalParameters->$emailFromSystem = $emailFromSystem; + + $this->logError($sendAllEmailNotices->retval, $optionalParameters); + } + elseif (!hasData($sendAllEmailNotices)) + { + $this->logInfo('There were no unsent messages'); + } + + $this->logInfo('Send all message email notices ended'); } } diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index 3a8f133cf..cfd450f98 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -139,27 +139,31 @@ class MessageLib // Public methods called by a job /** - * Gets all NOT sent messages from DB and sends for each of them the notice email - * Does not return anything, it logs info and errors on CI logs and in tbl_msg_recipient table + * Gets all messages for which notice emails are still not sent from DB and sends for each of them the notice email * Wrapper for _sendNoticeEmail. */ - public function sendAllEmailNotices($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem) + public function sendAllEmailNotices($since, $numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem) { // Overrides MailLib configs with the given parameters $this->_ci->maillib->overrideConfigs($numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem); - // Retrieves a certain amount of NOT sent messages, the amount is given by maillib->email_number_to_sent - $messagesResult = $this->_ci->RecipientModel->getMessages( - self::EMAIL_KONTAKT_TYPE, - null, - $this->_ci->maillib->getEmailNumberToSent() + // Retrieves a certain amount of NOT sent messages + $messagesResult = $this->_ci->RecipientModel->getNotSentMessages( + $this->_ci->maillib->getEmailNumberToSent(), + $since ); - if (isError($messagesResult)) terminateWithError(getData($messagesResult)); // If an error occurred then log it and terminate + if (isError($messagesResult) || !hasData($messagesResult)) return $messagesResult; - $sendNotice = $this->_sendNoticeEmails(getData($messagesResult)); + // Collects all the message ids in an array + $messageIds = array(); + foreach (getData($messagesResult) as $message) + { + $messageIds[] = $message->message_id; + } - if (isError($sendNotice)) terminateWithError(getData($sendNotice)); // If an error occurred then log it and terminate + // Send'em all + return $this->_sendNoticeEmails($messageIds); } //------------------------------------------------------------------------------------------------------------------ diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index de6ec5a10..9cc4a76da 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -509,7 +509,8 @@ class Messages_model extends CI_Model if (!hasData($message)) return error('No messages were saved in database'); // Write log entry - $personLog = $this->_personLog($sender_id, $receiver_id, getData($message)[0]); + // NOTE: $receiver_id and $sender_id are switched!!! Currently this is a workaround + $personLog = $this->_personLog($receiver_id, $sender_id, getData($message)[0]); if (isError($personLog)) return $personLog; return success('Messages sent successfully'); diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php index cea11a7a7..ad1c1e850 100644 --- a/application/models/system/Recipient_model.php +++ b/application/models/system/Recipient_model.php @@ -199,66 +199,23 @@ class Recipient_model extends DB_Model } /** - * getMessages + * Gets all messages for which notice emails are still not sent * - * Gets all the messages to be sent - * - * @param kontaktType specifies the type of the kontakt to get - * @param sent specifies the status of the messages to get (NULL never sent, otherwise the shipping date) - * @param limit specifies the number of messages to get - * @param message_id specifies a single message + * @param kontaktType specifies the type of the kontakt to get (email,...) + * @param limit specifies the max number of messages to get + * @param since specifies from which date messages have to be retrieved */ - public function getMessages($kontaktType, $message_id = null, $limit = 1) + public function getNotSentMessages($limit, $since = '1970-01-01') { - $query = 'SELECT mm.message_id, - ks.kontakt as sender, - kr.kontakt as receiver, - mu.mitarbeiter_uid as employeeContact, - ms.mitarbeiter_uid as senderemployeeContact, - mr.person_id as receiver_id, - mr.token, - mm.subject, - mm.body, - mr.sentinfo, - mr.oe_kurzbz - FROM public.tbl_msg_recipient mr INNER JOIN public.tbl_msg_message mm USING (message_id) - LEFT JOIN ( - SELECT person_id, kontakt FROM public.tbl_kontakt WHERE zustellung = true AND kontakttyp = ? - ) ks ON (ks.person_id = mm.person_id) - LEFT JOIN ( - SELECT person_id, kontakt FROM public.tbl_kontakt WHERE zustellung = true AND kontakttyp = ? - ) kr ON (kr.person_id = mr.person_id) - LEFT JOIN ( - SELECT b.person_id, - m.mitarbeiter_uid - FROM public.tbl_benutzer b INNER JOIN public.tbl_mitarbeiter m ON(b.uid = m.mitarbeiter_uid) - WHERE b.aktiv = TRUE - ) mu ON (mu.person_id = mr.person_id) - LEFT JOIN ( - SELECT b.person_id, - m.mitarbeiter_uid - FROM public.tbl_benutzer b INNER JOIN public.tbl_mitarbeiter m ON(b.uid = m.mitarbeiter_uid) - WHERE b.aktiv = TRUE - ) ms ON (ms.person_id = mm.person_id) - WHERE mr.sent IS NULL'; + $query = 'SELECT mm.message_id + FROM public.tbl_msg_recipient mr + JOIN public.tbl_msg_message mm USING (message_id) + WHERE mr.sent IS NULL + AND mm.insertamum > ? + ORDER BY mr.insertamum ASC + LIMIT ?'; - $parametersArray = array($kontaktType, $kontaktType); - - if (is_numeric($message_id)) - { - array_push($parametersArray, $message_id); - $query .= ' AND mm.message_id = ?'; - } - - $query .= ' ORDER BY mr.insertamum ASC'; - - if (is_numeric($limit)) - { - $query .= ' LIMIT ?'; - array_push($parametersArray, $limit); - } - - return $this->execQuery($query, $parametersArray); + return $this->execQuery($query, array($since, $limit)); } /** From 0addc4ffb59108aa384e4791c19d1e668c67721f Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 21 Feb 2020 17:22:50 +0100 Subject: [PATCH 10/66] gebiet.class.php: improved offset calculation, LIMIT maxfragen instead multiplication --- include/gebiet.class.php | 138 +++++++++++++++++++++++---------------- 1 file changed, 82 insertions(+), 56 deletions(-) diff --git a/include/gebiet.class.php b/include/gebiet.class.php index 7f622c299..a4df72338 100644 --- a/include/gebiet.class.php +++ b/include/gebiet.class.php @@ -677,13 +677,13 @@ class gebiet extends basis_db $qry = " WITH fragen AS ( - SELECT tbl_frage.frage_id, tbl_frage.gebiet_id, tbl_frage.level, punkte - FROM testtool.tbl_frage - JOIN testtool.tbl_vorschlag USING (frage_id) - WHERE tbl_vorschlag.aktiv - AND tbl_vorschlag.punkte < 0 - AND tbl_frage.demo = false - AND tbl_frage.aktiv + SELECT tbl_frage.frage_id, tbl_frage.gebiet_id, tbl_frage.level, tbl_frage.nummer, punkte + FROM testtool.tbl_frage + JOIN testtool.tbl_vorschlag USING (frage_id) + WHERE tbl_vorschlag.aktiv + AND tbl_vorschlag.punkte < 0 + AND tbl_frage.demo = false + AND tbl_frage.aktiv ), fragenanzahl AS ( SELECT gebiet_id, level, levelgleichverteilung, @@ -712,57 +712,83 @@ class gebiet extends basis_db tbl_gebiet.level_start, ( CASE WHEN tbl_gebiet.levelgleichverteilung THEN - (CASE WHEN tbl_gebiet.multipleresponse=false THEN - (SELECT sum(frprolevel) FROM - ( - SELECT fragen.level, (min(punkte) - * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = fragen.gebiet_id and fragenanzahl.level = fragen.level LIMIT 1)) AS frprolevel - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id - GROUP BY fragen.gebiet_id, level - ) pkteprolevel) - ELSE - (SELECT sum(frprolevel) FROM - ( - SELECT fragen.level, (sum(punkte) - * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = fragen.gebiet_id and fragenanzahl.level = fragen.level LIMIT 1)) AS frprolevel - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id - AND frage_id = (SELECT min(frage_id) FROM fragen fr WHERE fr.gebiet_id = fragen.gebiet_id AND fr.level = fragen.level) - GROUP BY fragen.gebiet_id, level - ) pkteprolevel) - END) + (CASE WHEN tbl_gebiet.multipleresponse=false THEN + (SELECT sum(frprolevel) FROM + ( + SELECT fragen.level, (SELECT sum(punkte) FROM (SELECT min(punkte) AS punkte FROM fragen lvlfr WHERE lvlfr.gebiet_id = fragen.gebiet_id and lvlfr.level = fragen.level + GROUP BY lvlfr.frage_id, lvlfr.nummer + ORDER BY lvlfr.nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = fragen.gebiet_id and fragenanzahl.level = fragen.level LIMIT 1)) fr) + AS frprolevel + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + GROUP BY fragen.gebiet_id, level + ) pkteprolevel) + ELSE + (SELECT sum(frprolevel) FROM + ( + SELECT fragen.level, + (SELECT sum(punkte) FROM (SELECT sum(punkte) AS punkte FROM fragen lvlfr WHERE lvlfr.gebiet_id = fragen.gebiet_id and lvlfr.level = fragen.level + GROUP by lvlfr.frage_id, lvlfr.nummer + ORDER BY lvlfr.nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = fragen.gebiet_id and fragenanzahl.level = fragen.level LIMIT 1)) fr) + AS frprolevel + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + GROUP BY fragen.gebiet_id, level + ) pkteprolevel) + END) WHEN tbl_gebiet.level_start IS NOT NULL THEN - (CASE WHEN tbl_gebiet.multipleresponse=false THEN - ( - SELECT min(punkte) - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + (CASE WHEN tbl_gebiet.multipleresponse=false THEN + (SELECT sum(pkte) + FROM ( + SELECT min(punkte) AS pkte + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id AND fragen.level = tbl_gebiet.level_start - ) * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1) - ELSE - (SELECT sum(punkte) - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id - AND frage_id = (SELECT min(frage_id) FROM fragen WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id) - AND fragen.level = tbl_gebiet.level_start - )* (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1) - END) + GROUP BY frage_id, nummer + ORDER BY nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1) + ) minpkte + ) + ELSE + ( + SELECT sum(pkte) + FROM (SELECT sum(punkte) AS pkte + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + AND fragen.level = tbl_gebiet.level_start + GROUP BY frage_id, nummer + ORDER BY nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1) + ) sumpkte + ) + END) ELSE - (CASE WHEN tbl_gebiet.multipleresponse=false THEN - ( - SELECT min(punkte) - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id - ) * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1) - ELSE - (SELECT sum(punkte) - FROM fragen - WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id - AND frage_id = (SELECT min(frage_id) FROM fragen WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id) - )* (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1) - END) - + (CASE WHEN tbl_gebiet.multipleresponse=false THEN + ( + SELECT sum(pkte) + FROM (SELECT min(punkte) AS pkte + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + GROUP BY frage_id, nummer + ORDER BY nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1) + ) minpkte + ) + ELSE + ( + SELECT sum(pkte) + FROM (SELECT sum(punkte) AS pkte + FROM fragen + WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id + GROUP BY frage_id, nummer + ORDER BY nummer + LIMIT (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1) + ) sumpkte + ) + END) + END) * (-1) AS offsetpunkte FROM testtool.tbl_gebiet @@ -770,7 +796,7 @@ class gebiet extends basis_db EXISTS( SELECT 1 FROM fragen WHERE fragen.gebiet_id=tbl_gebiet.gebiet_id ) - AND gebiet_id = ".$this->db_add_param($gebiet_id, FHC_INTEGER)." + AND gebiet_id = ".$this->db_add_param($gebiet_id, FHC_INTEGER)." "; if($this->db_query($qry)) From d07b0684c3fc005c2060a4412d19aedbb28de0d5 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Sun, 23 Feb 2020 20:47:54 +0100 Subject: [PATCH 11/66] Orgform nur dazu schreiben, wenn es mehr als Eine gibt --- application/controllers/jobs/ReihungstestJob.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 948eeb0b8..c548d2495 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -899,8 +899,8 @@ class ReihungstestJob extends CLI_Controller ); if (isSuccess($result)) { - $mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenGesetzt'][] - = $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')'; + /*$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenGesetzt'][] + = $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';*/ } } elseif ($rowNiedrPrios->laststatus == 'Wartender') @@ -937,7 +937,8 @@ class ReihungstestJob extends CLI_Controller } } } - echo '
', var_dump($mailArray), '
'; + + // Kaution einbuchen für $row_ps->prestudent_id // Vorher prüfen, ob schon eine Kaution gebucht ist // Todo: Betrag automatisch aus tbl_buchungstyp laden @@ -971,6 +972,7 @@ class ReihungstestJob extends CLI_Controller } } } + echo '
', var_dump($mailArray), '
'; // Mails senden if (!isEmptyArray($mailArray)) { @@ -983,7 +985,11 @@ class ReihungstestJob extends CLI_Controller foreach ($orgform AS $art=>$value) { - $mailcontent .= '

Orgform '.$art.'

'; + // Orgform nur dazu schreiben, wenn es mehr als Eine gibt + if (count($orgform) > 1) + { + $mailcontent .= '

Orgform '.$art.'

'; + } if (isset($value['AbgewiesenGesetzt']) && !isEmptyArray($value['AbgewiesenGesetzt'])) { $mailcontent .= ' From 8507f639366fd74deb574b8e11a5bbafa414948b Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Sun, 23 Feb 2020 20:51:16 +0100 Subject: [PATCH 12/66] GUI-changes in writeTemplate - Show only "bezeichnung" of template in select for regular users - New styled "Preview"-Button. - Click on "Preview" automatically scrolls to Preview-Div --- .../system/messages/htmlWriteTemplate.php | 28 ++++++++----------- application/widgets/Vorlage_widget.php | 3 +- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/application/views/system/messages/htmlWriteTemplate.php b/application/views/system/messages/htmlWriteTemplate.php index 64a8c8236..bb031a370 100644 --- a/application/views/system/messages/htmlWriteTemplate.php +++ b/application/views/system/messages/htmlWriteTemplate.php @@ -129,34 +129,30 @@ -
+
-
-
- +
+
+
widgetlib->widget( 'Dropdown_widget', - array('elements' => success($recipientsArray), 'emptyElement' => 'Select...'), + array('elements' => success($recipientsArray), 'emptyElement' => ucfirst($this->p->t('global', 'empfaenger')).'...'), array( - 'title' => ucfirst($this->p->t('global', 'empfaenger')).': ', + /*'title' => ucfirst($this->p->t('global', 'empfaenger')).': ',*/ 'name' => 'recipients[]', 'id' => 'recipients' ) ); ?> - + + + p->t('ui', 'refresh')); ?> + + +
-

diff --git a/application/widgets/Vorlage_widget.php b/application/widgets/Vorlage_widget.php index 9c9abe430..1c05db9e3 100644 --- a/application/widgets/Vorlage_widget.php +++ b/application/widgets/Vorlage_widget.php @@ -63,7 +63,8 @@ class Vorlage_widget extends DropdownWidget FROM tbl_vorlagestudiengang vs INNER JOIN tbl_vorlage v USING(vorlage_kurzbz) ) templates'; $alias = 'templates'; - $fields = array("templates.vorlage_kurzbz AS id", "UPPER(templates.oe_kurzbz) || ' - ' || templates.bezeichnung || ' - V' || templates.version AS description"); + //$fields = array("templates.vorlage_kurzbz AS id", "UPPER(templates.oe_kurzbz) || ' - ' || templates.bezeichnung || ' - V' || templates.version AS description"); + $fields = array("templates.vorlage_kurzbz AS id", "templates.bezeichnung AS description"); $where = 'templates.aktiv = TRUE AND templates.subject IS NOT NULL AND templates.text IS NOT NULL From 166a4a76e84ba5c65b6364fa236e4ed61a7a6d8d Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 24 Feb 2020 16:44:57 +0100 Subject: [PATCH 13/66] stammdaten/auswertung_fhtw.php: - added column "Punkte mit offset" - removed commented code concerning RT-punkte without Physik --- vilesci/stammdaten/auswertung_fhtw.php | 83 +++++++++++--------------- 1 file changed, 36 insertions(+), 47 deletions(-) diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index a47230087..18b783e8e 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -1211,7 +1211,11 @@ if (isset($_REQUEST['reihungstest'])) } $gebiet[$row->gebiet_id]->name = $row->gebiet; $gebiet[$row->gebiet_id]->gebiet_id = $row->gebiet_id; - $gebiet[$row->gebiet_id]->gewicht = $row->gewicht; + //gewicht ist meist für alle Studiengänge gleich (Bachelor, Master und Distance haben jeweilsandere Gebiete) + if (!isset($gebiet[$row->gebiet_id]->gewicht)) + { + $gebiet[$row->gebiet_id]->gewicht = $row->gewicht; + } } // Alle Ergebnisse laden @@ -1476,18 +1480,22 @@ if (isset($_REQUEST['reihungstest'])) $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->prozent = null; $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->punkte = $punkte; + $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->punktemitoffset = null; // Punkte berechnen if (isset($punkte)) { + //offset zur Vermeidung negativer Prozentzahlen + $punkte_positiv = $punkte + $row->offsetpunkte; + $maxpunkte_positiv = $row->maxpunkte + $row->offsetpunkte; + $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->punktemitoffset = $punkte_positiv; + if ($row->punkte >= $row->maxpunkte) + { $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->prozent = 100; + } else { - //offset zur Vermeidung negativer Prozentzahlen - $punkte_positiv = $punkte + $row->offsetpunkte; - $maxpunkte_positiv = $row->maxpunkte + $row->offsetpunkte; - //Formel: Summe(Punkte/Maxpunkte * Gewicht) $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->prozent = $maxpunkte_positiv > 0 ? $punkte_positiv / $maxpunkte_positiv * /*$row->gewicht **/ 100 : null; } } @@ -1518,6 +1526,15 @@ if (isset($_REQUEST['reihungstest'])) $ergebnis[$row->prestudent_id]->gesamtpunkte = $punkte; } + if (isset($ergebnis[$row->prestudent_id]->gesamtoffsetpunkte)) + { + $ergebnis[$row->prestudent_id]->gesamtoffsetpunkte += $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->punktemitoffset; + } + else + { + $ergebnis[$row->prestudent_id]->gesamtoffsetpunkte = $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->punktemitoffset; + } + if (isset($row->punkte)) { if (isset($ergebnis[$row->prestudent_id]->gesamtgewicht)) @@ -1529,28 +1546,6 @@ if (isset($_REQUEST['reihungstest'])) $ergebnis[$row->prestudent_id]->gesamtgewicht = $row->gewicht; } } - - // Gesamtpunkte ohne Physik -/* if ($row->gebiet_id != 10) - { - if (isset($ergebnis[$row->prestudent_id]->gesamt_ohne_physik)) - { - $ergebnis[$row->prestudent_id]->gesamt_ohne_physik += $prozent * $row->gewicht; - } - else - { - $ergebnis[$row->prestudent_id]->gesamt_ohne_physik = $prozent * $row->gewicht; - } - - if (isset($ergebnis[$row->prestudent_id]->gesamtpunkte_ohne_physik)) - { - $ergebnis[$row->prestudent_id]->gesamtpunkte_ohne_physik += $punkte; - } - else - { - $ergebnis[$row->prestudent_id]->gesamtpunkte_ohne_physik = $punkte; - } - }*/ } } @@ -1703,7 +1698,7 @@ if (isset($_REQUEST['format']) && $_REQUEST['format'] == 'xls') foreach ($gebiet AS $gbt) { ++$spalte; - $worksheet->write($zeile, ++$spalte, strip_tags($gbt->name) . (isset($gbt->gewicht) ? " (Gew: $gbt->gewicht)" : ""), $format_bold_border); + $worksheet->write($zeile, ++$spalte, strip_tags($gbt->name) . ( isset($gbt->gewicht) ? " (Gew: $gbt->gewicht)" : ""), $format_bold_border); $worksheet->mergeCells($zeile, $spalte, 0, $spalte + 1); $maxlength[$spalte] = 10; } @@ -2142,7 +2137,7 @@ else $("#auswertung_table").tablesorter( { widgets: ["zebra", "filter", "columnSelector"], - sortList: [[15,1],[17,1],[3,0],[4,0]],//16th fake hidden column for correct sort with colspan + sortList: [[15,1],[18,1],[3,0],[4,0]],//16th (index 15) fake hidden column for correct sort with colspan headers: {0: { sorter: false, filter: false}, 2: { sorter: false, filter: false}, 4: { dateFormat: "ddmmyyyy" }, 15: { sorter: false, filter: false}} /*widgetOptions : { columnSelector_container : $("#columnSelector"), @@ -2940,22 +2935,24 @@ else
- '; + '; foreach ($gebiet AS $gbt) { - echo ''; + echo ''; } echo ' + '; foreach ($gebiet AS $gbt) { echo ""; + echo ""; echo ""; } @@ -3010,25 +3007,16 @@ else echo ' ' . ($erg->gesamtpunkte != '' ? number_format($erg->gesamtpunkte, 2, ',', ' ') : '') . ''; } echo ' '; -/* if (!isset($erg->gesamtpunkte_ohne_physik)) - { - $erg->gesamtpunkte_ohne_physik = ''; - }*/ -/* if (!isset($erg->gesamt_ohne_physik)) - { - $erg->gesamt_ohne_physik = ''; - }*/ + + echo ' '; + echo ' '; -/* echo ' ';*/ -/* echo ' ';*/ + foreach ($gebiet AS $gbt) { if (isset($erg->gebiet[$gbt->gebiet_id])) @@ -3060,11 +3048,12 @@ else echo ' ' . ($erg->gebiet[$gbt->gebiet_id]->punkte != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->punkte, 2, ',', ' ') : '') . ''; } echo ''; + echo ''; echo ''; } else { - echo ''; + echo ''; } } From a50cc6cba87c1ff25abc1d84032437e4248c1ef6 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 25 Feb 2020 16:41:27 +0100 Subject: [PATCH 14/66] - jobs/MailJob->sendAllMessageEmailNotices changed since parameter default value - Moved ALT_OE from MessageLib to CL/Messages_model - MessageLib->_setSentError renamed to _updatedRecipientNoticeEmailInfo - MessageLib->_sendNoticeEmail changed to have more information about a not sent notice email - Recipient_model->getNotSentMessages now does not retrieve messages with notice email send failure --- application/controllers/jobs/MailJob.php | 3 +- application/libraries/MessageLib.php | 33 +++++++++++++++---- application/models/CL/Messages_model.php | 4 ++- application/models/system/Recipient_model.php | 3 +- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/application/controllers/jobs/MailJob.php b/application/controllers/jobs/MailJob.php index b4b772f78..f459d4d3e 100644 --- a/application/controllers/jobs/MailJob.php +++ b/application/controllers/jobs/MailJob.php @@ -19,12 +19,13 @@ class MailJob extends JOB_Controller * Send all the NOT sent notice emails for messaging system * The parameters are all not mandatory, they could be used to overrides the configs for testing, debug or one shot purposes */ - public function sendAllMessageEmailNotices($since = null, $numberToSent = null, $numberPerTimeRange = null, $emailTimeRange = null, $emailFromSystem = null) + public function sendAllMessageEmailNotices($since = '1970-01-01', $numberToSent = null, $numberPerTimeRange = null, $emailTimeRange = null, $emailFromSystem = null) { $this->logInfo('Send all message email notices started'); // Send them all! $sendAllEmailNotices = $this->messagelib->sendAllEmailNotices($since, $numberToSent, $numberPerTimeRange, $emailTimeRange, $emailFromSystem); + if (isError($sendAllEmailNotices)) { $optionalParameters = new stdClass(); diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index cfd450f98..f2ede9cef 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -26,8 +26,6 @@ class MessageLib const EMAIL_KONTAKT_TYPE = 'email'; // Email kontakt type const SENT_INFO_NEWLINE = '\n'; // tbl_msg_recipient->sentInfo separator - const ALT_OE = 'infocenter'; // alternative organisation unit when no one is found for a presetudent - private $_ci; /** @@ -498,7 +496,7 @@ class MessageLib * Stores the type of error in 'sentinfo' column keeping en eventual previous error * sent column is set to null */ - private function _setSentError($message_id, $receiver_id, $sentInfo, $prevSentInfo) + private function _updatedRecipientNoticeEmailInfo($message_id, $receiver_id, $sentInfo, $prevSentInfo) { if (!isEmptyString($prevSentInfo)) { @@ -763,15 +761,15 @@ class MessageLib if (!$sent) { // Set in database why this email is NOT going to be send - $sse = $this->_setSentError( + $sse = $this->_updatedRecipientNoticeEmailInfo( $messageData->message_id, $messageData->receiver_id, - 'An error occurred while sending the notice email', - $messageData->sentinfo + 'An error occurred while sending the notice email', // current info + $messageData->sentinfo // previous info ); // If database error occurred then return it, otherwise return a logic error - return isError($sse) ? $sse : error('An error occurred while sending the notice email'); + return isError($sse) ? $sse : error('An error occurred while updating the recipient notice email info'); } else // success! { @@ -780,6 +778,27 @@ class MessageLib if (isError($sss)) return $sss; // If database error occurred then return it } } + else // Because was not possible to find a valid contact + { + $reason = 'Was not possible to find a valid contact for this user'; // default reason + + // In case that the organisation unit does not receive any email notices + if (!isEmptyString($messageData->receiver_ou)) $reason = 'This organization unit does not receive email notices'; + + // In case that a degree program sent a message to a user without a valid contact or UID + if (!isEmptyString($messageData->sender_ou)) $reason = 'Sent from a degree program to a user that does not have a valid UID or a valid contact'; + + // Set in database why this email is NOT going to be send + $sse = $this->_updatedRecipientNoticeEmailInfo( + $messageData->message_id, + $messageData->receiver_id, + $reason, // current info + $messageData->sentinfo // previous info + ); + + // If database error occurred then return it + if (isError($sse)) return $sse; + } } return success('Notice emails sent successfully'); diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index 9cc4a76da..cbb42543f 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -26,6 +26,8 @@ class Messages_model extends CI_Model const TYPE_PERSONS = 'persons'; const TYPE_PRESTUDENTS = 'prestudents'; + const ALT_OE = 'infocenter'; // alternative organisation unit when no one is found for a presetudent + /** * Constructor */ @@ -106,7 +108,7 @@ class Messages_model extends CI_Model { $ouOptions .= sprintf( "\n".'', - is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : MessageLib::ALT_OE, + is_numeric($ou->prestudent_id) ? $ou->oe_kurzbz : self::ALT_OE, $ou->bezeichnung . (is_numeric($ou->prestudent_id) ? '' : ' *') ); } diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php index ad1c1e850..d74d03243 100644 --- a/application/models/system/Recipient_model.php +++ b/application/models/system/Recipient_model.php @@ -205,12 +205,13 @@ class Recipient_model extends DB_Model * @param limit specifies the max number of messages to get * @param since specifies from which date messages have to be retrieved */ - public function getNotSentMessages($limit, $since = '1970-01-01') + public function getNotSentMessages($limit, $since) { $query = 'SELECT mm.message_id FROM public.tbl_msg_recipient mr JOIN public.tbl_msg_message mm USING (message_id) WHERE mr.sent IS NULL + AND mr.sentinfo IS NULL AND mm.insertamum > ? ORDER BY mr.insertamum ASC LIMIT ?'; From 6509d74f4b4f5c47a3780c8fe006486808d061ba Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 26 Feb 2020 15:20:08 +0100 Subject: [PATCH 15/66] Fix height of Prestudent-Statuslist on smaller Screens --- content/student/studentdetailoverlay.xul.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php index 0a014b20a..7f45342dc 100644 --- a/content/student/studentdetailoverlay.xul.php +++ b/content/student/studentdetailoverlay.xul.php @@ -509,7 +509,7 @@ echo '';
Raum TG GesamtGesamt' . $gbt->name . '' . $gbt->name . '
PunktePunkte mit Offset ProzentPunktePunkte mit OffsetProzent + ' . ($erg->gesamtoffsetpunkte != '' ? number_format($erg->gesamtoffsetpunkte, 2, ',', ' ') : '') . ' + ' . $gesamtprozent . ' - ' . ($erg->gesamtpunkte_ohne_physik != '' ? number_format($erg->gesamtpunkte_ohne_physik, 2, ',', ' ') : '') . ' - - ' . ($erg->gesamt_ohne_physik != '' ? number_format($erg->gesamt_ohne_physik, 2, ',', ' ') : '') . ' - - ' . ($erg->gebiet[$gbt->gebiet_id]->punktemitoffset != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->punktemitoffset, 2, ',', ' ') : '') . '' . ($erg->gebiet[$gbt->gebiet_id]->prozent != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->prozent, 2, ',', ' ') . ' %' : '') . '
Date: Wed, 26 Feb 2020 17:11:00 +0100 Subject: [PATCH 16/66] Added function getLehreinheiten_SWS_BISMeldung This function retrieves semesterwochenstunden of a given studiensemester for all employees who should be BIS reported. --- include/lehreinheitmitarbeiter.class.php | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 48d0de485..d7d469c2f 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -495,6 +495,41 @@ class lehreinheitmitarbeiter extends basis_db return $ret; } + public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester) + { + $qry = ' + SELECT + round(sum(semesterstunden) / 15) AS sws + FROM ( + SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden + FROM lehre.tbl_lehreinheitmitarbeiter + JOIN public.tbl_mitarbeiter ma USING (mitarbeiter_uid) + JOIN public.tbl_benutzer ON (mitarbeiter_uid = uid) + JOIN public.tbl_person USING (person_id) + JOIN bis.tbl_bisverwendung USING (mitarbeiter_uid) + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) + WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' + AND ma.bismelden + AND studiensemester_kurzbz = '. $this->db_add_param($studiensemester).' + ) tbl_semesterstunden + '; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[] = $row->sws; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + /** * Laedt die Lektoren einer Lehrveranstaltung in einem Studiensemester * @param lehrveranstaltung_id From 6874408200d5172ff2939482dd42fe35a3013c46 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 26 Feb 2020 17:11:11 +0100 Subject: [PATCH 17/66] Bugfix Fallback Bild Bugfix Loginliste --- cis/testtool/frage.php | 157 ++++++++++++++++++----------------- cis/testtool/login.php | 6 +- include/prestudent.class.php | 27 ++++-- 3 files changed, 104 insertions(+), 86 deletions(-) diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index 86ed76252..e2c87ed67 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -16,8 +16,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Christian Paminger , - * Andreas Oesterreicher , - * Rudolf Hangl , + * Andreas Oesterreicher , + * Rudolf Hangl , * Gerald Simane-Sequens , * Manfred Kindl */ @@ -48,8 +48,8 @@ session_start(); // If language is changed by language select menu, reset language variables if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) { - $_SESSION['sprache_user'] = $_GET['sprache_user']; - $sprache_user = $_GET['sprache_user']; + $_SESSION['sprache_user'] = $_GET['sprache_user']; + $sprache_user = $_GET['sprache_user']; } // Set language variable, which impacts the question language @@ -78,10 +78,10 @@ echo ' - + - - + + - - - - - - - - - - - - - - - - -'; - -foreach($mitarbeiter_gesamt as $row) +// --------------------------------------------------------------------------------------------------------------------- +// Private Functions +// --------------------------------------------------------------------------------------------------------------------- +/** + * Funktion ermittelt fuer jede BIS-Verwendung die Dauer (in Tagen) und Gewichtung (Dauer / Tage im Jahr) + * @param array $bisverwendung_arr Array mit BIS-Verwendungsobjekten + * @return array + */ +function _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr) { - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($row['verwendung'] as $row_verwendung) + global $tage_imJahr; + + foreach ($bisverwendung_arr as &$bisverwendung) { - // Ba1Code - if(isset($ba1_arr[$row_verwendung['ba1code']])) - echo ''; - else - echo ''; + $bisverwendung_beginn_imBISMeldungsJahr = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_imBISMeldungsJahr = new DateTime($bisverwendung->ende_imBISMeldungsJahr); - // Ba2Code - if(isset($ba2_arr[$row_verwendung['ba2code']])) - echo ''; - else - echo ''; - - // Ausmass - if(isset($ausmass_arr[$row_verwendung['beschausmasscode']])) - echo ''; - else - echo ''; - - // Verwendung - if(isset($verwendung_arr[$row_verwendung['verwendung_code']])) - echo ''; - else - echo ''; - - echo ''; + $bisverwendung->dauer_imBISMeldungsJahr = $bisverwendung_ende_imBISMeldungsJahr->diff($bisverwendung_beginn_imBISMeldungsJahr)->days + 1; + $bisverwendung->gewichtung = round($bisverwendung->dauer_imBISMeldungsJahr / $tage_imJahr, 2); } - echo ''; + + return $bisverwendung_arr; } -echo '
UIDVornameNachnamePersonalnummerFixangestelltLektorBeschaeftigungsArt1BeschaeftigungsArt2AusmassVerwendungDetails (Funktion/Lehre)
'.$row['uid'].''.$row['vorname'].''.$row['nachname'].''.$row['personalnummer'].''.($row['fixangestellt']?'Ja':'Nein').''.($row['lektor']?'Ja':'Nein').''.$ba1_arr[$row_verwendung['ba1code']].''.$row_verwendung['ba1code'].''.$ba2_arr[$row_verwendung['ba2code']].''.$row_verwendung['ba2code'].''.$ausmass_arr[$row_verwendung['beschausmasscode']].''.$row_verwendung['beschausmasscode'].''.$verwendung_arr[$row_verwendung['verwendung_code']].''.$row_verwendung['verwendung_code'].''; - // Details - if(isset($row_verwendung['stgltg'])) - { - - foreach($row_verwendung['stgltg'] as $row_stgl) - { - echo 'Leitung:'.$stg_obj->kuerzel_arr[$row_stgl]; - echo '
'; - } - } - - if(isset($row_verwendung['fkt'])) - { - foreach($row_verwendung['fkt'] as $row_fkt) - { - echo $stg_obj->kuerzel_arr[$row_fkt['stgkz']].': '.$row_fkt['sws'].' SWS'; - echo '
'; - } - } - - echo '

'; -echo 'Mitarbeiter-BIS-Meldung archivieren
'; -echo "XML-Datei für Mitarbeiter-BIS-Meldung

"; -?> + +/** + * Funktion ermittelt, ob Person im BIS Meldungsjahr vorwiegend haupt- oder nebenberuflich taetig war. + * @param $bisverwendung_arr Array mit BIS-Verwendungsobjekten + * @return boolean True wenn vorwiegend hauptberuflich + */ +function _getUeberwiegendeTaetigkeit_HauptNebenberuf($bisverwendung_arr) +{ + // Zeiten vergleichen + $sum_dauer_hauptberuflich = 0; + $sum_dauer_nebenberuflich = 0; + + foreach ($bisverwendung_arr as $bisverwendung) + { + if ($bisverwendung->hauptberuflich == true) + { + $sum_dauer_hauptberuflich += $bisverwendung->dauer_imBISMeldungsJahr; + } + else + { + $sum_dauer_nebenberuflich += $bisverwendung->dauer_imBISMeldungsJahr; + } + } + + // Laengere Dauer bestimmt Haupt- oder Nebenberuf + $is_hauptberuflich = $sum_dauer_hauptberuflich > $sum_dauer_nebenberuflich; + + return array($is_hauptberuflich); +} + +/** + * Funktion erstellt Verwendung fuer Lehrtaetigkeiten fuer Personen mit echtem Dienstvertrag. + * (zB STG Leiter mit Lehrtaetigkeit) + * @param object $studiensemester Sommer- / Winterstudiensemester + * @param object $bisverwendung + * @return array + */ +function _addVerwendung_fuerLehre_inkludiert($studiensemester, $bisverwendung) +{ + $verwendung_lehre_obj = new StdClass(); + + $verwendung_lehre_obj->ba1code = $bisverwendung->ba1code; + $verwendung_lehre_obj->ba2code = $bisverwendung->ba2code; + $verwendung_lehre_obj->beschausmasscode = $bisverwendung->beschausmasscode; + $verwendung_lehre_obj->verwendung_code = 1; + $verwendung_lehre_obj->beginn_imBISMeldungsJahr = $bisverwendung->beginn_imBISMeldungsJahr; + $verwendung_lehre_obj->ende_imBISMeldungsJahr = $bisverwendung->ende_imBISMeldungsJahr; + + /** + * Anteilige Lehrtage im Studiensemester ermitteln + * NOTE: Da die gesamte Lehrtaetigkeit fuer SS und WS im BIS Meldungsjahr gemeldet wird, muss die WS Lehrtaetigkeit + * jahresuebergreifend erfasst werden. Daher Datumsvergleiche mit dem tatsaechlichen BIS-Verwendungsende. + * */ + $tage_lehre_imSemester = 182; // default Tage im Halbjahr entsprechend der default Gewichtung von 0.5 + $studsem_start = new DateTime($studiensemester->start); + $studsem_ende = new DateTime($studiensemester->ende); + $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende = new DateTime($bisverwendung->ende); + + $beginn_im_semester = ($bisverwendung_beginn_BIS < $studsem_start) ? $studsem_start : $bisverwendung_beginn_BIS; + $ende_im_semester = (!is_null($bisverwendung_ende) && $bisverwendung_ende > $studsem_ende) ? $studsem_ende : $bisverwendung_ende; + $tage_lehre_imSemester = $beginn_im_semester->diff($ende_im_semester)->days + 1; + + return array($tage_lehre_imSemester, $verwendung_lehre_obj); +} + +/** + * Funktion erstellt Verwendung fuer Lehrtaetigkeiten fuer freie Lektoren. + * @param object $bisverwendung + * @return object Verwendung fuer Lehrtaetigkeit + */ +function _addVerwendung_fuerLehre_Stundenbasis($bisverwendung) +{ + $verwendung_lehre_obj = new StdClass(); + + $verwendung_lehre_obj->ba1code = $bisverwendung->ba1code; + $verwendung_lehre_obj->ba2code = $bisverwendung->ba2code; + $verwendung_lehre_obj->beschausmasscode = $bisverwendung->beschausmasscode; + $verwendung_lehre_obj->verwendung_code = 1; + $verwendung_lehre_obj->beginn_imBISMeldungsJahr =$bisverwendung->beginn_imBISMeldungsJahr; + $verwendung_lehre_obj->ende_imBISMeldungsJahr = $bisverwendung->ende_imBISMeldungsJahr; + + return $verwendung_lehre_obj; +} + + From 3d663cdbd715534210d6775a822cc32f6a4e2c14 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 5 Mar 2020 14:29:56 +0100 Subject: [PATCH 33/66] Added getVerwendungenBISMeldung() + isHabilitiert() . getVerwendungenBISMeldung: Holt alle Verwendungen eines Mitarbeiters innerhalb des BIS Meldungszeitraums . isHabilitiert: Prueft, ob Mitarbeiter habilitiert ist --- include/bisverwendung.class.php | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index 0e4e4fc06..ab8b5a4e4 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -587,5 +587,96 @@ class bisverwendung extends basis_db return false; } } + + /** + * Prueft, ob Mitarbeiter habilitiert ist + * @param $uid UID des Mitarbeiters + * @return bool + */ + public function isHabilitiert($uid) + { + $qry = ' + SELECT + * + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND + habilitation = true; + '; + + if ($this->db_query($qry)) + { + return $this->db_num_rows() > 0; + } + } + + /** + * Holt alle Verwendungen eines Mitarbeiters innerhalb des BIS Meldungszeitraums + * @param $uid UID des Mitarbeiters + * @param $stichtag + * @return bool + */ + public function getVerwendungenBISMeldung($uid, $stichtag) + { + $datetime = new DateTime($stichtag); + $stichtag = $datetime->format('Y-m-d'); + $bismeldung_jahr = $datetime->format('Y'); + + $qry = ' + SELECT + *, + CASE + WHEN (beginn is null OR beginn < make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1)) + THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1) + ELSE beginn + END as beginn_imBISMeldungsJahr, + CASE + WHEN (ende is null OR ende > make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31)) + THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31) + ELSE ende + END as ende_imBISMeldungsJahr + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid).' + AND (beginn <= '. $this->db_add_param($stichtag).' OR beginn is null) + AND (ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1) OR ende is null) + ORDER BY ende + '; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new StdClass(); + + $obj->bisverwendung_id = $row->bisverwendung_id; + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->vertragsstunden = $row->vertragsstunden; + $obj->ba1code = $row->ba1code; + $obj->ba2code = $row->ba2code; + $obj->verwendung_code = $row->verwendung_code; + $obj->beschausmasscode = $row->beschausmasscode; + $obj->hauptberufcode = $row->hauptberufcode; + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->beginn = $row->beginn; + $obj->ende = $row->ende; + $obj->beginn_imBISMeldungsJahr = $row->beginn_imbismeldungsjahr; + $obj->ende_imBISMeldungsJahr = $row->ende_imbismeldungsjahr; + + + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } } ?> From afb5cc3205c56f6684e59cb8925b07ccdc9b1091 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 5 Mar 2020 14:31:20 +0100 Subject: [PATCH 34/66] Added getMitarbeiterBISMeldung() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getMitarbeiterBISMeldung: Gibt alle Mitarbeiter zurück, die im BIS Meldungszeitraum bisgemeldet sind --- include/mitarbeiter.class.php | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 467bff8f8..78bc1a439 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1539,5 +1539,56 @@ class mitarbeiter extends benutzer } } + /** + * Gibt alle Mitarbeiter zurück, die im BIS Meldungszeitraum bisgemeldet sind + * @param String $stichtag BIS Meldung Stichtag + * @return boolean + */ + public function getMitarbeiterBISMeldung($stichtag) + { + $datetime = new DateTime($stichtag); + $bismeldung_jahr = $datetime->format('Y'); + + $qry = ' + SELECT DISTINCT ON (UID) *, + transform_geschlecht(tbl_person.geschlecht, tbl_person.gebdatum) as geschlecht_imputiert + FROM + public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) + JOIN public.tbl_person USING(person_id) + JOIN bis.tbl_bisverwendung USING(mitarbeiter_uid) + JOIN bis.tbl_beschaeftigungsausmass USING(beschausmasscode) + WHERE + bismelden + AND personalnummer > 0 + AND (beginn <= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31) OR beginn is null) + AND (tbl_bisverwendung.ende is NULL OR tbl_bisverwendung.ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1)) + ORDER BY uid, nachname, vorname + '; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new StdClass(); + + $obj->uid = $row->uid; + $obj->vorname = $row->vorname; + $obj->vornamen = $row->vornamen; + $obj->nachname = $row->nachname; + $obj->gebdatum = $row->gebdatum; + $obj->geschlecht = $row->geschlecht; + $obj->geschlechtX = $row->geschlecht_imputiert; + $obj->staatsbuergerschaft = $row->staatsbuergerschaft; + $obj->personalnummer = $row->personalnummer; + $obj->ausbildungcode = $row->ausbildungcode; + + $this->result []= $obj; + } + return true; + } + return false; + } + } ?> From 88fc901bf7a3383fa447e62911bd38243d8d5ac2 Mon Sep 17 00:00:00 2001 From: Paolo Date: Fri, 6 Mar 2020 16:56:27 +0100 Subject: [PATCH 35/66] - Added new config entry ou_function_whitelist in message.php - Added new constant CFG_OU_FUNCTION_WHITELIST in library MessageLib - MessageLib->getOeKurzbz now filters out organization units based on config entry ou_function_whitelist - Removed redundant templates in Vorlage_widget --- application/config/message.php | 2 + application/libraries/MessageLib.php | 10 ++- .../Organisationseinheit_model.php | 14 ++-- application/widgets/Vorlage_widget.php | 65 +++++++++++++------ 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/application/config/message.php b/application/config/message.php index 35d34124b..3a9629279 100644 --- a/application/config/message.php +++ b/application/config/message.php @@ -18,6 +18,8 @@ $config['ou_receivers'] = array('ass'); $config['ou_receivers_no_notice'] = array('infocenter'); // Organization units that will not send the notice email to the internal account, but to the private one $config['ou_receivers_private'] = array('eac', 'ewu', 'scs'); +// +$config['ou_function_whitelist'] = array('ass', 'Leitung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index b97ef4bae..fd2051f48 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -15,6 +15,7 @@ class MessageLib const CFG_OU_RECEIVERS = 'ou_receivers'; const CFG_OU_RECEIVERS_NO_NOTICE = 'ou_receivers_no_notice'; const CFG_OU_RECEIVERS_PRIVATE = 'ou_receivers_private'; + const CFG_OU_FUNCTION_WHITELIST = 'ou_function_whitelist'; const CFG_REDIRECT_VIEW_MESSAGE_URL = 'redirect_view_message_url'; // Templates names @@ -229,7 +230,14 @@ class MessageLib $ouArray = array(); // Copies organisation units in $ouArray array - foreach (getData($benutzer) as $val) $ouArray[] = $val->oe_kurzbz; + foreach (getData($benutzer) as $val) + { + // If the function is in the white list then get the organisation unit + if (in_array($val->funktion_kurzbz, $this->_ci->config->item(self::CFG_OU_FUNCTION_WHITELIST))) + { + $ouArray[] = $val->oe_kurzbz; + } + } return success($ouArray); } diff --git a/application/models/organisation/Organisationseinheit_model.php b/application/models/organisation/Organisationseinheit_model.php index 3efc8472a..6439bc8d6 100644 --- a/application/models/organisation/Organisationseinheit_model.php +++ b/application/models/organisation/Organisationseinheit_model.php @@ -125,12 +125,12 @@ class Organisationseinheit_model extends DB_Model public function getChilds($oe_kurzbz, $includeinactive = false) { $query = " - WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as + WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as ( - SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit + SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit WHERE oe_kurzbz=? %s UNION ALL - SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes + SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes WHERE o.oe_parent_kurzbz=oes.oe_kurzbz %s ) SELECT oe_kurzbz @@ -150,12 +150,12 @@ class Organisationseinheit_model extends DB_Model public function getParents($oe_kurzbz, $includeinactive = false) { $query= - "WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as + "WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as ( - SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit + SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit WHERE oe_kurzbz=? %s UNION ALL - SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes + SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes WHERE o.oe_kurzbz=oes.oe_parent_kurzbz %s ) SELECT oe_kurzbz @@ -177,7 +177,7 @@ class Organisationseinheit_model extends DB_Model { $condition = ' oe_kurzbz = ( - SELECT + SELECT oe_parent_kurzbz FROM public.tbl_organisationseinheit diff --git a/application/widgets/Vorlage_widget.php b/application/widgets/Vorlage_widget.php index 9ec13250f..2ba685edc 100644 --- a/application/widgets/Vorlage_widget.php +++ b/application/widgets/Vorlage_widget.php @@ -11,9 +11,9 @@ class Vorlage_widget extends DropdownWidget $vorlage = null; // If the user is an admin - if ($idAdmin === true) + if ($idAdmin) { - // Get all the vorlage with mimetype = text/html + // Get all the vorlage with mimetype = text/html $vorlage = $this->_getAllHTMLVorlage(); } else @@ -39,7 +39,7 @@ class Vorlage_widget extends DropdownWidget private function _getAllHTMLVorlage() { $this->load->model('system/Vorlage_model', 'VorlageModel'); - $this->VorlageModel->addOrder('vorlage_kurzbz'); + $this->VorlageModel->addOrder('bezeichnung'); $this->addSelectToModel($this->VorlageModel, 'vorlage_kurzbz', 'bezeichnung'); @@ -59,15 +59,31 @@ class Vorlage_widget extends DropdownWidget $vorlage = success(array()); // Default value $table = '( - SELECT v.vorlage_kurzbz, v.bezeichnung, vs.version, vs.oe_kurzbz, vs.aktiv, vs.subject, vs.text, v.mimetype - FROM tbl_vorlagestudiengang vs INNER JOIN tbl_vorlage v USING(vorlage_kurzbz) + SELECT v.vorlage_kurzbz, + v.bezeichnung, + vs.version, + vs.oe_kurzbz, + vs.aktiv, + vs.subject, + vs.text, + v.mimetype + FROM tbl_vorlagestudiengang vs + JOIN tbl_vorlage v USING(vorlage_kurzbz) ) templates'; + $alias = 'templates'; - $fields = array("templates.vorlage_kurzbz AS id", "templates.bezeichnung AS description"); + + $fields = array( + 'templates.vorlage_kurzbz AS id', + 'templates.bezeichnung || \' (\' || UPPER(templates.oe_kurzbz) || \')\' AS description' + ); + $where = 'templates.aktiv = TRUE - AND templates.subject IS NOT NULL - AND templates.text IS NOT NULL - AND templates.mimetype = \'text/html\''; + AND templates.subject IS NOT NULL + AND templates.text IS NOT NULL + AND templates.mimetype = \'text/html\' + GROUP BY 1, 2, 3'; + $order_by = 'description ASC'; if (!is_array($oe_kurzbz)) @@ -99,30 +115,37 @@ class Vorlage_widget extends DropdownWidget if (hasData($tmpVorlage)) { // If it's the first vorlage copy it - if (count($vorlage->retval) == 0) + if (!hasData($vorlage)) { - for ($j = 0; $j < count($tmpVorlage->retval); $j++) + for ($j = 0; $j < count(getData($tmpVorlage)); $j++) { - if ($tmpVorlage->retval[$j]->id != '') + if (getData($tmpVorlage)[$j]->id != '') { - array_push($vorlage->retval, $tmpVorlage->retval[$j]); + array_push($vorlage->retval, getData($tmpVorlage)[$j]); } } } - else // checks for duplicates, if it's not already present push it into the array $vorlage->retval + else // checks for duplicates, if it's not already present push it into the array getData($vorlage) { - for ($i = 0; $i < count($vorlage->retval); $i++) + for ($j = 0; $j < count(getData($tmpVorlage)); $j++) { - for ($j = 0; $j < count($tmpVorlage->retval); $j++) + $found = false; + $currentTmpVorlageData = null; + + for ($i = 0; $i < count(getData($vorlage)); $i++) { - if ($tmpVorlage->retval[$j]->id != '' - && $vorlage->retval[$i]->_pk != $tmpVorlage->retval[$j]->_pk - && $vorlage->retval[$i]->_ppk != $tmpVorlage->retval[$j]->_ppk - && $vorlage->retval[$i]->_jtpk != $tmpVorlage->retval[$j]->_jtpk) + $currentTmpVorlageData = getData($tmpVorlage)[$j]; + + if (getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk + && getData($vorlage)[$i]->_ppk == getData($tmpVorlage)[$j]->_ppk + && getData($vorlage)[$i]->_jtpk == getData($tmpVorlage)[$j]->_jtpk) { - array_push($vorlage->retval, $tmpVorlage->retval[$j]); + $found = true; + break; } } + + if (!$found && $currentTmpVorlageData->id != '') array_push($vorlage->retval, $currentTmpVorlageData); } } } From da201df53430b1250f3461c75400297fe45ed5c3 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 9 Mar 2020 12:23:47 +0100 Subject: [PATCH 36/66] Added Berechnung fuer Studentische Hilfskraefte Die Jahres-/Vollzeitaequivalenz fuer Studentische Hilfskraefte werden ueber eine kalkulatorische Stundenpauschale berechnet. --- vilesci/bis/personalmeldung.php | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 2f5745dd7..c41c3fdd8 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -9,6 +9,7 @@ require_once('../../include/bisverwendung.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); +require_once('../../include/benutzerfunktion.class.php'); $uid = get_uid(); @@ -46,6 +47,11 @@ if (!defined('BIS_HALBJAHRES_GEWICHTUNG_SWS') || empty('BIS_HALBJAHRES_GEWICHTUN die('config var BIS_HALBJAHRES_GEWICHTUNG_SWS fehlt'); } +if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT')) +{ + die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); +} + // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); @@ -68,6 +74,7 @@ $beginn_imJahr = new DateTime(($jahr - 1). '-01-01'); $ende_imJahr = new DateTime(($jahr - 1). '-12-31'); $tage_imJahr = $ende_imJahr->diff($beginn_imJahr)->days + 1; +$wochen_imJahr = $tage_imJahr / 7; // Sommer- und Wintersemester im BIS Meldungsjahr $ss_kurzbz = $studiensemester->getBeforePrevious(); @@ -252,6 +259,36 @@ foreach ($mitarbeiter_arr as $mitarbeiter) } } } + else + { + // Studentische Hilfskraft + // --------------------------------------------------------------------------------------------------------- + $benutzerfunktion = new Benutzerfunktion(); + $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( + $person_obj->uid, + 'hilfskraft', + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + + if ($is_studentische_hilfskraft) + { + // Kalkulatorische Umrechnung der Jahrespauschale + $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + // Mitarbeiter ohne Vertragsstunden und keine SWS + // --------------------------------------------------------------------------------------------------------- + else + { + // TODO: Plausicheck + } + } } // ***************************************************************************************************************** From 9bb4e2507a2056fdede0f4c7ac39f7fd56fccdd9 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 9 Mar 2020 13:41:17 +0100 Subject: [PATCH 37/66] - Added two new functions to config entry ou_function_whitelist - Fixed Vorlage_widget to retrieve univocally templates --- application/config/message.php | 2 +- application/widgets/Vorlage_widget.php | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/application/config/message.php b/application/config/message.php index 3a9629279..8232cdfb7 100644 --- a/application/config/message.php +++ b/application/config/message.php @@ -19,7 +19,7 @@ $config['ou_receivers_no_notice'] = array('infocenter'); // Organization units that will not send the notice email to the internal account, but to the private one $config['ou_receivers_private'] = array('eac', 'ewu', 'scs'); // -$config['ou_function_whitelist'] = array('ass', 'Leitung'); +$config['ou_function_whitelist'] = array('ass', 'Leitung', 'fachzuordnung', 'oezuordnung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); diff --git a/application/widgets/Vorlage_widget.php b/application/widgets/Vorlage_widget.php index 2ba685edc..f1898eb09 100644 --- a/application/widgets/Vorlage_widget.php +++ b/application/widgets/Vorlage_widget.php @@ -136,7 +136,8 @@ class Vorlage_widget extends DropdownWidget { $currentTmpVorlageData = getData($tmpVorlage)[$j]; - if (getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk + if (getData($vorlage)[$i]->id == getData($tmpVorlage)[$j]->id + && getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk && getData($vorlage)[$i]->_ppk == getData($tmpVorlage)[$j]->_ppk && getData($vorlage)[$i]->_jtpk == getData($tmpVorlage)[$j]->_jtpk) { @@ -145,7 +146,10 @@ class Vorlage_widget extends DropdownWidget } } - if (!$found && $currentTmpVorlageData->id != '') array_push($vorlage->retval, $currentTmpVorlageData); + if (!$found && $currentTmpVorlageData->id != '') + { + array_push($vorlage->retval, $currentTmpVorlageData); + } } } } From 40915ba3e160c3c6cdd31fb1442a64e2fa912bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 10 Mar 2020 16:36:21 +0100 Subject: [PATCH 38/66] =?UTF-8?q?Neue=20Funktionen=20f=C3=BCr=20BIS-Meldun?= =?UTF-8?q?g=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 2700bf43d..00d075dfd 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3616,6 +3616,12 @@ if (!$result = @$db->db_query("SELECT ba1code_bis FROM bis.tbl_beschaeftigungsar DELETE FROM bis.tbl_verwendung WHERE verwendung_code=9; "; + $qry.=" + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('vertrBefugter','Vertretungsbefugte/r des Erhalters',true,false,false); + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('kollegium_Ltg','Leiter/in des Kollegiums',true,false,false); + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('kollegium_stvLtg','Stellv. Leiter/in des Kollegiums',true,false,false); + "; + if(!$db->db_query($qry)) echo 'bis.tbl_verwendung und bis.tbl_beschaeftigungsart: '.$db->db_last_error().'
'; else From 2df57dd019f8bb925e6aacf967cc6b4ff6438295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 10 Mar 2020 16:41:01 +0100 Subject: [PATCH 39/66] Fixed Syntax Error in Message API --- application/controllers/api/v1/system/Message.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/controllers/api/v1/system/Message.php b/application/controllers/api/v1/system/Message.php index 5c663e832..1825b7db9 100644 --- a/application/controllers/api/v1/system/Message.php +++ b/application/controllers/api/v1/system/Message.php @@ -149,10 +149,10 @@ class Message extends APIv1_Controller if (isSuccess($postMessage)) { $result = $this->messagelib->sendMessageUser( - $this->post()['receiver_id']), // receiverPersonId + $this->post()['receiver_id'], // receiverPersonId $this->post()['subject'], // subject $this->post()['body'], // body - $this->post()['person_id']) ? $this->post()['person_id'] : null, // sender_id + $this->post()['person_id'] ? $this->post()['person_id'] : null, // sender_id isset($this->post()['oe_kurzbz']) ? $this->post()['oe_kurzbz'] : null, // senderOU isset($this->post()['relationmessage_id']) ? $this->post()['relationmessage_id'] : null, // relationmessage_id MSG_PRIORITY_NORMAL, // priority From 505dba7f4c2bffea392d918d7c31d533d7451dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 10 Mar 2020 16:42:22 +0100 Subject: [PATCH 40/66] Added Inbox/Outbox Link to CI Page --- application/config/navigation.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/application/config/navigation.php b/application/config/navigation.php index 9253c87a1..a89c259ee 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -72,11 +72,18 @@ $config['navigation_header'] = array( 'sort' => 40, 'requiredPermissions' => 'basis/vilesci:r', 'children'=> array( + 'messages' => array( + 'link' => site_url('system/messages/MessageClient/read'), + 'icon' => '', + 'target' => '_blank', + 'description' => 'Messages', + 'sort' => 10, + ), 'bpk' => array( 'link' => site_url('person/BPKWartung'), 'icon' => '', 'description' => 'BPK Wartung', - 'sort' => 10, + 'sort' => 20, 'requiredPermissions' => 'admin:r' ) ) From e8460f03c19b6ccc2a44ecfde346a25e8c708302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 10 Mar 2020 16:56:00 +0100 Subject: [PATCH 41/66] Fixed Syntax Error in Phrases Page --- application/controllers/system/Phrases.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/system/Phrases.php b/application/controllers/system/Phrases.php index f589eaeb2..2bb003567 100644 --- a/application/controllers/system/Phrases.php +++ b/application/controllers/system/Phrases.php @@ -161,7 +161,7 @@ class Phrases extends Auth_Controller $phrase_inhalt = $this->phraseslib->insertPhraseinhalt($data); if ($phrase_inhalt->error) - show_error(getError($phrase_inhalt); + show_error(getError($phrase_inhalt)); $phrase_inhalt_id = $phrase_inhalt->retval; From 72c2ce6410a1e0ed43154a6cdb7587f43229359f Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 11 Mar 2020 14:42:07 +0100 Subject: [PATCH 42/66] Added Container Funktion . FunktionsCode . BesondereQualifikationsCode . Studiengang - StgKz --- vilesci/bis/personalmeldung.php | 191 ++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index c41c3fdd8..5bd0a0e89 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -10,6 +10,8 @@ require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); require_once('../../include/benutzerfunktion.class.php'); +require_once('../../include/organisationseinheit.class.php'); +require_once('../../include/entwicklungsteam.class.php'); $uid = get_uid(); @@ -52,6 +54,21 @@ if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_ST die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); } +if (!defined('BIS_FUNKTIONSCODE_1234_ARR') || empty('BIS_FUNKTIONSCODE_1234_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_1234_ARR fehlt'); +} + +if (!defined('BIS_FUNKTIONSCODE_5_ARR') || empty('BIS_FUNKTIONSCODE_5_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_5_ARR fehlt'); +} + +if (!defined('BIS_FUNKTIONSCODE_6_ARR') || empty('BIS_FUNKTIONSCODE_6_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_6_ARR fehlt'); +} + // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); @@ -366,6 +383,43 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // Container Verwendung dem Container Person anhaengen // ----------------------------------------------------------------------------------------------------------------- $person_obj->verwendung_arr = $verwendung_arr; + + + // ********************************************************************************************************************* + // Container Funktion und Lehre werden nur für STG generiert (nicht für Lehrgaenge) + // ********************************************************************************************************************* + // ----------------------------------------------------------------------------------------------------------------- + // Container Funktion generieren + // ----------------------------------------------------------------------------------------------------------------- + $funktion_arr = array(); + + // Alle Benutzerfunktionen im BIS Meldungsjahr holen + $benutzerfunktion = new Benutzerfunktion(); + $benutzerfunktion->getBenutzerFunktionByUid( + $person_obj->uid, null, + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + $bisfunktion_arr = $benutzerfunktion->result; + + /** + * Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + * Exkludiert Funktionen, die einem Lehrgang bzw. STG, die nicht BIS-gemeldet werden, zugeordnet sind. + */ + // ------------------------------------------------------------------------------------------------------------- + $funktion_arr = _getFunktionscontainer_Funktionscode123456($bisfunktion_arr); + + /** + * Funktionscode 7 aus Entwicklungsteam-Tabelle ermitteln + * Exkludiert Funktionen, die einem Lehrgang bzw. STG, die nicht BIS-gemeldet werden, zugeordnet sind. + */ + // ------------------------------------------------------------------------------------------------------------- + $funktion_arr = _addFunktionscontainer_Funktionscode7($person_obj->uid, $funktion_arr); + + // Container Funktion dem Container Person anhaengen + // ----------------------------------------------------------------------------------------------------------------- + $person_obj->funktion_arr = $funktion_arr; + $person_arr []= $person_obj; } @@ -477,4 +531,141 @@ function _addVerwendung_fuerLehre_Stundenbasis($bisverwendung) return $verwendung_lehre_obj; } +/** + * Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + * @param array $bisfunktion_arr + * @return array + */ +function _getFunktionscontainer_Funktionscode123456($bisfunktion_arr) +{ + $funktion_arr = array(); + + foreach ($bisfunktion_arr as $bisfunktion) + { + $funktion_code = NULL; + $has_oe_lehrgang = false; // default + + $studiengang = new Studiengang(); + $studiengang->getStudiengangFromOe($bisfunktion->oe_kurzbz); + + // Wenn OE der Funktion eine STG-Kennzahl ist + if (!is_null($studiengang->studiengang_kz)) + { + // Pruefen ob STG-Kennzahl STG oder Lehrgang + $has_oe_lehrgang = !($studiengang->studiengang_kz > 0 && $studiengang->studiengang_kz < 10000); + + // STG, die nicht BIS-bemeldet werden, ueberspringen + if (in_array($studiengang->studiengang_kz, BIS_EXCLUDE_STG)) + { + continue; + } + } + + // Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + // ------------------------------------------------------------------------------------------------------------- + // Wenn OE der Funktion nicht einem Lehrgang zugeordnet ist + if (!$has_oe_lehrgang) + { + // FunktionsCode 1-4 + if (array_key_exists($bisfunktion->funktion_kurzbz, BIS_FUNKTIONSCODE_1234_ARR)) + { + $funktion_code = BIS_FUNKTIONSCODE_1234_ARR[$bisfunktion->funktion_kurzbz]; + } + + if (in_array($bisfunktion->funktion_kurzbz, BIS_FUNKTIONSCODE_5_ARR)) // Leitung + { + // FunktionsCode 5 : STG-Leitung + if (!is_null($studiengang->studiengang_kz)) + { + $funktion_code = 5; + } + + // FunktionsCode 6 : Leitung Organisationseinheit der postsekundaeren Bildungseinrichtung + $organisationseinheit = new Organisationseinheit($bisfunktion->oe_kurzbz); + if (is_null($studiengang->studiengang_kz) && + !in_array($organisationseinheit->oetyp_bezeichnung, BIS_FUNKTIONSCODE_6_ARR)) // nicht Teamleitung + { + $funktion_code = 6; + } + } + } + + // Funktionsobjekt generieren + if (!is_null($funktion_code) && // Funktionscode vorhanden UND + (empty($funktion_arr) || // (Erster Durchlauf ODER + !in_array($funktion_code, array_column($funktion_arr, 'funktionscode')))) // Funktionsobjekt mit diesem Funktionscode nicht vorhanden) + { + $funktion_obj = new StdClass(); + $funktion_obj->funktionscode = $funktion_code; + $funktion_obj->besondereQualifikationCode = NULL; + $funktion_obj->studiengang = ($funktion_code == 5) + ? array(setLeadingZero(intval($studiengang->studiengang_kz), 4)) // STG bei Funktionscode 5 melden + : NULL; + + // Funktionsobjekt dem Funktionscontainer anhaengen + $funktion_arr []= $funktion_obj; + } + else if ($funktion_code == 5) // Funktionscontainer vorhanden und Funktionscode 5 + { + $funktion_obj_arr = array_filter($funktion_arr, function (&$obj) { + return $obj->funktionscode == 5; + }); + + $funktion_obj_arr[0]->studiengang[]= setLeadingZero(intval($studiengang->studiengang_kz), 4); // STG ergaenzen + } + } + + return $funktion_arr; +} + +/** + * Funktionscode 7 aus Entwicklungsteam-Tabelle ermitteln + * @param String $uid + * @param array $funktion_arr Object-Array + * @return array + * + */ +function _addFunktionscontainer_Funktionscode7($uid, $funktion_arr) +{ + $entwicklungsteam = new Entwicklungsteam(); + $entwicklungsteam->getEntwicklungsteam($uid); + $entwicklungsteam_arr = $entwicklungsteam->result; + + if (!empty($entwicklungsteam_arr)) + { + // Lehrgaenge und STG, die nicht BIS gemeldet werden, extrahieren + $entwicklungsteam_arr = array_filter($entwicklungsteam_arr, function ($obj) + { + return + !in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) && + $obj->studiengang_kz > 0 && + $obj->studiengang_kz < 10000; + }); + } + + if (!empty($entwicklungsteam_arr)) + { + // Hoechste besondere Qualifikation + $besondere_qualifikation_code_arr = array_values(array_column($entwicklungsteam_arr, 'besqualcode')); + $besondere_qualifikation_code = max($besondere_qualifikation_code_arr); + + // Studiengaenge, wo Person Teil des Entwicklungsteams gewesen ist + $studiengang_kz_arr = array_values(array_column($entwicklungsteam_arr, 'studiengang_kz')); + sort($studiengang_kz_arr); // sortieren + foreach($studiengang_kz_arr as &$studiengang_kz) // fuehrende Nullen fuer STG + { + $studiengang_kz = setLeadingZero(intval($studiengang_kz), 4); + } + + // Funktionsobjekt generieren und dem Funktionscontainer anhaengen + $funktion_obj = new StdClass(); + $funktion_obj->funktionscode = 7; + $funktion_obj->besondereQualifikationCode = $besondere_qualifikation_code; + $funktion_obj->studiengang = $studiengang_kz_arr; + $funktion_arr []= $funktion_obj; + } + + return $funktion_arr; +} + From a5884127f7f933ccf01efa782db463c897137c86 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 11 Mar 2020 14:54:09 +0100 Subject: [PATCH 43/66] Corrected Realtives Beschaeftigungsausmass Fuer Verwendungen von angestellten Personen in der Admin/Verwaltung, jedoch mit Lehrtaetigkeit, werden fuer die Lehre eigene Verwendungen mit Verwendungscode 1 erstellt. Das relative Beschaeftigungsausmass muss dann entsprechend angepasst werden. Zuvor wurden dem rel BA der Hauptverwendung die rel BA von Sommer- und Wintersemester abgezogen. Fuer die richtige Berechnung der VZAE darf jedoch nur das rel BA Wintersemester abgezogen werden. (Faellt in den Stichtag 31.12) --- vilesci/bis/personalmeldung.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 5bd0a0e89..a6fde06ea 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -241,8 +241,13 @@ foreach ($mitarbeiter_arr as $mitarbeiter) /** * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) + * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der + * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. * */ - $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + if(substr($studsem_kurzbz, 0, 2) == 'WS') + { + $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + } /** * Anteilige JVZAE der BIS-Verwendung berichtigen From 9c8312f880b978c84f7cfc9256dd899a5c590370 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:20:30 +0100 Subject: [PATCH 44/66] Added Lehre-Container Lehrecontainer mit . StgKz . SommersemesterSWS . WintersemesterSWS Lehrtaetigkeit an Lehrgaengen bzw. Lehrtaetigkeit an STG, die nicht BIS-gemeldet werden, werden exkludiert. --- vilesci/bis/personalmeldung.php | 92 +++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index a6fde06ea..6437f24a5 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -425,6 +425,34 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // ----------------------------------------------------------------------------------------------------------------- $person_obj->funktion_arr = $funktion_arr; + + // ----------------------------------------------------------------------------------------------------------------- + // Container Lehre generieren + // ----------------------------------------------------------------------------------------------------------------- + $lehre_arr = array(); + + // Alle Semesterwochenstunden, summiert nach STG und Studiensemester + $lehreinheitmitarbeiter = new Lehreinheitmitarbeiter(); + $lehreinheitmitarbeiter->get_SWS_groupByStg( + $person_obj->uid, + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + $sws_proStg_arr = $lehreinheitmitarbeiter->result; + + /** + * Lehrtaetigkeit (Semesterwochenstunden) pro STG ermitteln. + * Exkludiert Lehrtaetigkeit an Lehrgaengen bzw. Lehrtaetigkeit an STG, die nicht BIS-gemeldet werden. + */ + $lehre_arr = _getLehrecontainer($sws_proStg_arr); + + // Container Lehre dem Container Person anhaengen + // ----------------------------------------------------------------------------------------------------------------- + $person_obj->lehre_arr = $lehre_arr; + + + // Container Person dem Gesamt-Container anhaengen + // ----------------------------------------------------------------------------------------------------------------- $person_arr []= $person_obj; } @@ -673,4 +701,68 @@ function _addFunktionscontainer_Funktionscode7($uid, $funktion_arr) return $funktion_arr; } +/** + * Lehrecontainer fuer Lehrtaetigkeit (Semesterwochenstunden) pro STG erstellen. + * @param array $sws_proStg_arr Object-Array + * @return array + */ +function _getLehrecontainer($sws_proStg_arr) +{ + $lehre_arr = array(); + + if (!empty($sws_proStg_arr)) + { + // Lehrgaenge und STG, die nicht BIS gemeldet werden, extrahieren + $sws_proStg_arr = array_filter($sws_proStg_arr, function ($obj) + { + return + !in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) && + $obj->studiengang_kz > 0 && + $obj->studiengang_kz < 10000; + }); + } + + if (!empty($sws_proStg_arr)) + { + foreach ($sws_proStg_arr as $sws_proStg) + { + $is_sommersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'SS'; + $is_wintersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'WS'; + + // Lehreobjekt generieren + if (empty($lehre_arr) || // Erster Durchlauf ODER + !in_array($sws_proStg->studiengang_kz, array_column($lehre_arr, 'StgKz'))) // Neu + { + $lehre_obj = new StdClass(); + + $lehre_obj->StgKz = $sws_proStg->studiengang_kz; + $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : NULL; + $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : NULL; + + // Lehreobjekt dem Lehrecontainer anhaengen + $lehre_arr []= $lehre_obj; + } + else // Lehrecontainer mit STG schon vorhanden + { + $lehre_obj_arr = array_filter($lehre_arr, function (&$obj) use ($sws_proStg) { + return $obj->StgKz == $sws_proStg->studiengang_kz; + }); + + // SWS ergaenzen + if ($is_sommersemester) + { + current($lehre_obj_arr)->SommersemesterSWS = $sws_proStg->sws; + } + else if ($is_wintersemester) + { + current($lehre_obj_arr)->WintersemesterSWS = $sws_proStg->sws; + } + } + } + } + + + return $lehre_arr; +} + From 588f2996b3f71207f1bbe42d1cce137448654592 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:22:57 +0100 Subject: [PATCH 45/66] Added get_SWS_groupByStg() Ladet Semesterwochenstunden-Summe gruppiert nach Studiengang und Studiensemester. Es werden die Studiensemester herangezogen, die im Zeitraum zwischen beginn und ende beginnen. --- include/lehreinheitmitarbeiter.class.php | 68 ++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index d7d469c2f..64140a174 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -530,6 +530,74 @@ class lehreinheitmitarbeiter extends basis_db } } + /** + * Ladet Semesterwochenstunden-Summe gruppiert nach Studiengang und Studiensemester. + * Es werden die Studiensemester herangezogen, die im Zeitraum zwischen beginn und ende beginnen. + * @param String $uid + * @param String $beginn + * @param String $ende + * @return bool + */ + public function get_SWS_groupByStg($uid, $beginn, $ende) + { + $beginn = new DateTime($beginn); + $ende = new DateTime($ende); + + $qry = ' + WITH semester_sws_tbl AS ( + SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden, stg.studiengang_kz + FROM lehre.tbl_lehreinheitmitarbeiter lema + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + JOIN lehre.tbl_studienplan_lehrveranstaltung USING (lehrveranstaltung_id) + JOIN lehre.tbl_studienplan USING (studienplan_id) + JOIN lehre.tbl_studienordnung sto USING (studienordnung_id) + JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz + JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) + WHERE mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND ( + ss.start BETWEEN + '. $this->db_add_param($beginn->format('Y-m-d')). ' AND + '. $this->db_add_param($ende->format('Y-m-d')). ') + -- nur lehre, die bisgemeldet wird + AND lema.bismelden + -- keine lehreinheiten ohne semesterstunden + AND lema.semesterstunden != 0 + ) + + SELECT + studiengang_kz, + studiensemester_kurzbz, + sum(semesterstunden) AS summe, + round(sum(semesterstunden) / 15, 2) AS sws + FROM + semester_sws_tbl + GROUP BY + studiengang_kz, + studiensemester_kurzbz + ORDER BY + studiengang_kz; + '; + + if ($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new StdClass(); + $obj->studiengang_kz = $row->studiengang_kz; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->sws = $row->sws; + $this->result []= $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + /** * Laedt die Lektoren einer Lehrveranstaltung in einem Studiensemester * @param lehrveranstaltung_id From a03e3f3355793ca1e4095ad3bb8cd41f4686adc2 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:24:17 +0100 Subject: [PATCH 46/66] Added result array to properties of Lehreinheitmitarbeiter class --- include/lehreinheitmitarbeiter.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 64140a174..9941a7e12 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -44,6 +44,8 @@ class lehreinheitmitarbeiter extends basis_db public $ext_id; // bigint public $vertrag_id; + public $result = array(); + /** * Konstruktor - Laedt optional einee LEMitarbeiterzuordnung * @param $lehreinheit_id From 67a100ea50d2a9e1854d83df1e22d3f3abd2ad86 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:29:48 +0100 Subject: [PATCH 47/66] Corrected BIS-meldungsrelevante SWS in getLehreinheiten_SWS_BISMeldung Zuvor wurde boolean bismelden der Mitarbeiter-Tabelle geprueft. Nun wird der korrekte boolean bismelden der Lehreinheitmitarbeiter-Tabelle geprueft, da nur die bisrelevanten Lehreinheiten herangezogen werden sollen. --- include/lehreinheitmitarbeiter.class.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 9941a7e12..6be66bb77 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -497,6 +497,13 @@ class lehreinheitmitarbeiter extends basis_db return $ret; } + /** + * Ladet Semesterwochenstunden-Summe eines Mitarbeiters eines Semesters. + * Nur bisrelevante SWS. + * @param String $uid + * @param String $studiensemester + * @return bool + */ public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester) { $qry = ' @@ -504,7 +511,7 @@ class lehreinheitmitarbeiter extends basis_db round(sum(semesterstunden) / 15) AS sws FROM ( SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden - FROM lehre.tbl_lehreinheitmitarbeiter + FROM lehre.tbl_lehreinheitmitarbeiter lema JOIN public.tbl_mitarbeiter ma USING (mitarbeiter_uid) JOIN public.tbl_benutzer ON (mitarbeiter_uid = uid) JOIN public.tbl_person USING (person_id) @@ -512,7 +519,7 @@ class lehreinheitmitarbeiter extends basis_db JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' - AND ma.bismelden + AND lema.bismelden AND studiensemester_kurzbz = '. $this->db_add_param($studiensemester).' ) tbl_semesterstunden '; From a65c5076be7243761844f994df2a4829ee5374f4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:45:07 +0100 Subject: [PATCH 48/66] Started XML generieren - NOT COMPLETED - --- vilesci/bis/personalmeldung.php | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 6437f24a5..324a181e8 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -456,6 +456,16 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_arr []= $person_obj; } +// ********************************************************************************************************************* +// XML generieren +// ********************************************************************************************************************* +$xml = ''; +$xml = _generateXML($person_arr); + +echo '
', print_r($xml, 1), '
'; + + + // --------------------------------------------------------------------------------------------------------------------- // Private Functions // --------------------------------------------------------------------------------------------------------------------- @@ -765,4 +775,74 @@ function _getLehrecontainer($sws_proStg_arr) return $lehre_arr; } +function _generateXML($person_arr) +{ + $xml = ''; + $xml .= ''; + + $xml .= ''; + + foreach ($person_arr as $person) + { + $xml .= ''; + + $xml .= 'personalnummer. ']]>'; + $xml .= 'geschlecht. ']]>'; + $xml .= 'geschlechtX. ']]>'; + $xml .= 'geburtsjahr. ']]>'; + $xml .= 'staatsangehoerigkeit. ']]>'; + $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; + $xml .= 'habilitation. ']]>'; + $xml .= 'hauptberufcode. ']]>'; + + foreach ($person->verwendung_arr as $verwendung) + { + $xml .= ''; + $xml .= 'verwendung_code. ']]>'; + $xml .= 'ba1code. ']]>'; + $xml .= 'ba2code. ']]>'; + $xml .= 'vzae. ']]>'; + $xml .= 'jvzae. ']]>'; + $xml .= ''; + } + + foreach ($person->funktion_arr as $funktion) + { + $xml .= ''; + $xml .= 'funktionscode. ']]>'; + $xml .= 'besondereQualifikationCode. ']]>'; + $xml .= ''; + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + $xml .= ''; + } + } + else if (!is_null($funktion->studiengang)) + { + $xml .= 'studiengang. ']]>'; + + } + $xml .= ''; + $xml .= ''; + } + + foreach ($person->lehre_arr as $lehre) + { + $xml .= ''; + $xml .= 'StgKz. ']]>'; + $xml .= 'SommersemesterSWS. ']]>'; + $xml .= 'WintersemesterSWS. ']]>'; + $xml .= ''; + } + + $xml .= ''; + } + + $xml .= ''; + + return $xml; +} + From 2767dcde9fc688fd1a26dc5490301d662c1937ca Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:48:41 +0100 Subject: [PATCH 49/66] Added BIS configs --- config/vilesci.config-default.inc.php | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index 1d68cfdb3..e737fc58a 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -208,4 +208,43 @@ define('DVB_PASSWORD','passwort'); define('CI_ENVIRONMENT', 'development'); // Code igniter environment variable +// BIS Personalmeldung + +// Studiengaenge, die nicht gemeldet werden +define('BIS_EXCLUDE_STG', array()); + +// Basis Vollzeit Arbeitsstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE (echte Dienstverträge) +define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '0'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE auf Stundenbasis (freie Dienstverträge) +define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '0'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE für inkludierte Lehre bei echten Dienstverträgen +define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '0'); + +// Semester Gewichtung für Berechnung von Jahresvollzeitaequivalenz JVZAE +define('BIS_HALBJAHRES_GEWICHTUNG_SWS', 0.5); + +// Jahrespauschale fuer studentische Hilfskraefte (in Stunden) +define('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT', 0); + +// Jahrespauschale fuer sonstige Dienstverhaeltnisse, zb Werkvertrag (in Stunden) +define('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS', 0); + +define('BIS_FUNKTIONSCODE_1234_ARR', array( + 'vertrBefugter' => 1, // Vertretungsbefugte/r des Erhalters (GF, Prokura) + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_stvLtg' => 3, // stellv. Leiter/In des Kollegiums + 'kollegium' => 4 // Mitglied des Kollegiums +)); + +define('BIS_FUNKTIONSCODE_5_ARR', array( + 'Leitung' +)); + +define('BIS_FUNKTIONSCODE_6_ARR', array( + 'Team' +)); + ?> From c171ba3de67c340853e76068ba46e93ba5c4faa1 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:59:09 +0100 Subject: [PATCH 50/66] Added Berechnung Sonstiges Dienstverhaeltnis (zB. Werkvertraege) --- vilesci/bis/personalmeldung.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 324a181e8..06e7fcd52 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -54,6 +54,11 @@ if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_ST die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); } +if (!defined('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS') || empty('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS')) +{ + die('config var BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS fehlt'); +} + if (!defined('BIS_FUNKTIONSCODE_1234_ARR') || empty('BIS_FUNKTIONSCODE_1234_ARR')) { die('config var BIS_FUNKTIONSCODE_1234_ARR fehlt'); @@ -258,7 +263,6 @@ foreach ($mitarbeiter_arr as $mitarbeiter) } } } - // TODO: Interner Check: if ($bisverwendung->jvzae_anteilig < 0) -> Anteil für 'Nicht-Lehre'-Teil muss gegeben sein. } // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden @@ -304,11 +308,17 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); } - // Mitarbeiter ohne Vertragsstunden und keine SWS + // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) // --------------------------------------------------------------------------------------------------------- else { - // TODO: Plausicheck + $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); } } } From e99112dc64b54dc9025658f555b7d7981bb0e09f Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 16:35:24 +0100 Subject: [PATCH 51/66] Enhanced code readability (structure) --- vilesci/bis/personalmeldung.php | 388 +++++++++++++++++--------------- 1 file changed, 205 insertions(+), 183 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 06e7fcd52..5c214e730 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -138,11 +138,11 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // BIS Verwendungsdauer und -gewichtung ergaenzen $bisverwendung_arr = _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr); - // Hauptberufcode: wenn Hauptberuf / Nebenberuf im gleichen Jahr - laengere Dauer entscheidet + // Hauptberufcode // ----------------------------------------------------------------------------------------------------------------- - $is_hauptberuflich = $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberuflich; // default: hauptberuflich der letzten BIS-Verwendung + $is_hauptberuflich = $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberuflich; - // Wenn im selben Jahr hauptberuflich UND nebenberuflich -> laengere Dauer wird gemeldet (Ueberwiegenheitprinzip) + // wenn Hauptberuf / Nebenberuf im gleichen Jahr - laengere Dauer melden (Ueberwiegenheitprinzip) if (in_array(true, array_column($bisverwendung_arr, 'hauptberuflich')) && // hauptberuflich UND in_array(false, array_column($bisverwendung_arr, 'hauptberuflich'))) // nebenberuflich { @@ -154,181 +154,22 @@ foreach ($mitarbeiter_arr as $mitarbeiter) * - hauptberuflich Lehrender: NULL, * - nebenberuflich Lehrender: Hauptberufscode der letzten BIS-Verwendung */ - $person_obj->hauptberufcode = ($is_hauptberuflich == true) ? NULL : $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberufcode; + $person_obj->hauptberufcode = ($is_hauptberuflich == true) + ? NULL + : $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberufcode; + + + // ***************************************************************************************************************** + // Container Verwendung generieren (mit JVZAE und VZAE) + // ***************************************************************************************************************** + $verwendung_arr = array(); - // ----------------------------------------------------------------------------------------------------------------- // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln // ----------------------------------------------------------------------------------------------------------------- + $bisverwendung_arr = _add_relativesBA_und_anteiligeJVZAE($person_obj->uid, $bisverwendung_arr); - // Lehrtaetigkeit ermitteln - $lema = new lehreinheitmitarbeiter(); - $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ss_kurzbz); - $lehre_ss_sws = $lema->result[0]; // Anzahl SS - Semesterwochenstunden - - $lema = new lehreinheitmitarbeiter(); - $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ws_kurzbz); - $lehre_ws_sws = $lema->result[0]; // Anzahl WS - Semesterwochenstunden - - $has_lehrtaetigkeit = !is_null($lehre_ss_sws) || !is_null($lehre_ws_sws); - - foreach ($bisverwendung_arr as $index => $bisverwendung) - { - $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); - $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; - - /** - * NOTE: is_karenziert ist ein boolean fuer Vollzeit-Karenz, nicht fuer Teilzeit-(Bildungs-)Karenz! - * Die Unterscheidung ist wichtig fuer die weitere Ermittlung der JVZAE. - * Vollzeitkarenz: Anteiliger Beschaeftigungsausmass und JVZAE wird auf 0 gesetzt. - * Bildungs-Teilzeitkarenz: entspricht im System - */ - $is_karenziert_VZ = $bisverwendung->beschausmasscode == 5 && !$has_vertragsstunden; // VZ-Kinder- und Bildungskarenz - $is_karenziert_TZ = $bisverwendung->beschausmasscode == 5 && $has_vertragsstunden; // TZ-Bildungskarenz - - // Karenzzeit - // ------------------------------------------------------------------------------------------------------------- - if ($is_karenziert_VZ) - { - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); - $bisverwendung->jvzae_anteilig = 0; - continue; - } - - // Echter Dienstvertrag - d.h. Vertragsstunden sind vorhanden - // Bsp. angestellte Lektoren, angestellte MA in Verwaltung/Management/Wartung - // ------------------------------------------------------------------------------------------------------------- - else if ($has_vertragsstunden) - { - // Vertragsstunden koennen max. VZ Aequivalenz-Basiswert haben - if ($bisverwendung->vertragsstunden > BIS_VOLLZEIT_ARBEITSSTUNDEN) - { - $bisverwendung->vertragsstunden = BIS_VOLLZEIT_ARBEITSSTUNDEN; - } - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($bisverwendung->vertragsstunden / BIS_VOLLZEIT_ARBEITSSTUNDEN, 2); - $bisverwendung->jvzae_anteilig = round($bisverwendung->beschaeftigungsausmass_relativ * $bisverwendung->gewichtung, 2); - - // Echter Dienstvertrag - mit Lehrtaetigkeit, jedoch kein Lektor. - // Bsp. STG-Leiter mit Lehrtaetigkeit - // --------------------------------------------------------------------------------------------------------- - if (!$is_lektor && $has_lehrtaetigkeit) - { - /** - * Verwendungen ergänzen, wenn Mitarbeiter in Verwaltung/Managment/Wartung (jedenfalls nicht in Lehre) - * zugeteilt ist und dennoch lehrt. - * Die SWS werden sowohl fuer Sommer- als auch Wintersemster ermittelt und jeweils in einer eigenen - * Verwendung mit dem Verwendungscode 1 ergaenzt. - */ - $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); - $bisverwendung_ende_BIS = new DateTime($bisverwendung->ende_imBISMeldungsJahr); - - foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem_kurzbz => $lehre_sws) - { - $studsem = new studiensemester($studsem_kurzbz); - $studsem_start = new DateTime($studsem->start); - $studsem_ende = new DateTime($studsem->ende); - - // Wenn Lehrzeit in die BIS Verwendungszeit hineinfaellt, Verwendung erstellen - if (!is_null($lehre_sws) && - (!($studsem_start > $bisverwendung_ende_BIS) && - !($studsem_ende < $bisverwendung_beginn_BIS))) - { - // Verwendung erstellen - list($tage_lehre_imSemester, $verwendung_lehre_obj) = _addVerwendung_fuerLehre_inkludiert($studsem, $bisverwendung); - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE, 2); // VZ-Basis fuer inkludierte Lehre - $verwendung_lehre_obj->gewichtung = ($tage_lehre_imSemester == 182) ? BIS_HALBJAHRES_GEWICHTUNG_SWS : round(BIS_HALBJAHRES_GEWICHTUNG_SWS / ($tage_imJahr / 2) * $tage_lehre_imSemester, 2); - $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 3); - - /** - * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen - * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) - * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der - * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. - * */ - if(substr($studsem_kurzbz, 0, 2) == 'WS') - { - $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; - } - - /** - * Anteilige JVZAE der BIS-Verwendung berichtigen - * (durch Abzug der eben erstellten anteiligen JVZAE fuer Lehrtaetigkeiten) - */ - $bisverwendung->jvzae_anteilig -= $verwendung_lehre_obj->jvzae_anteilig; - $bisverwendung_arr [] = $verwendung_lehre_obj; - } - } - } - } - - // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden - // Freie Dienstvertraege auf Stundenbasis - // ------------------------------------------------------------------------------------------------------------- - else if (!$has_vertragsstunden && $has_lehrtaetigkeit) - { - foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) - { - if (!is_null($lehre_sws)) - { - // Verwendungen erstellen - $verwendung_lehre_obj = _addVerwendung_fuerLehre_Stundenbasis($bisverwendung); - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS, 2); // VZ-Basis nach BIS-Vorgabe fuer Stundenbasis - $verwendung_lehre_obj->gewichtung = BIS_HALBJAHRES_GEWICHTUNG_SWS; - $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 2); - $bisverwendung_arr []= $verwendung_lehre_obj; - } - } - } - else - { - // Studentische Hilfskraft - // --------------------------------------------------------------------------------------------------------- - $benutzerfunktion = new Benutzerfunktion(); - $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( - $person_obj->uid, - 'hilfskraft', - $beginn_imJahr->format('Y-m-d'), - $ende_imJahr->format('Y-m-d') - ); - - if ($is_studentische_hilfskraft) - { - // Kalkulatorische Umrechnung der Jahrespauschale - $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) - $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr - $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - } - // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) - // --------------------------------------------------------------------------------------------------------- - else - { - $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) - $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr - $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - } - } - } - - // ***************************************************************************************************************** - // JVZAE und VZAE ermitteln (Jahresvollzeitaequivalenz, Vollzeitaequivalenz) - // ***************************************************************************************************************** - - // Container Verwendung aus dem bisverwendung_arr generieren, formatieren und dem Container Person anhängen - $verwendung_arr = array(); + // JVZAE und VZAE ermitteln und Container Verwendung generieren + // ----------------------------------------------------------------------------------------------------------------- foreach ($bisverwendung_arr as $bisverwendung) { if (empty($verwendung_arr) || // wenn erster Durchlauf ODER @@ -400,12 +241,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->verwendung_arr = $verwendung_arr; - // ********************************************************************************************************************* - // Container Funktion und Lehre werden nur für STG generiert (nicht für Lehrgaenge) - // ********************************************************************************************************************* - // ----------------------------------------------------------------------------------------------------------------- - // Container Funktion generieren - // ----------------------------------------------------------------------------------------------------------------- + // ***************************************************************************************************************** + // Container Funktion generieren (nicht für Lehrgaenge) + // ***************************************************************************************************************** $funktion_arr = array(); // Alle Benutzerfunktionen im BIS Meldungsjahr holen @@ -436,9 +274,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->funktion_arr = $funktion_arr; - // ----------------------------------------------------------------------------------------------------------------- - // Container Lehre generieren - // ----------------------------------------------------------------------------------------------------------------- + // ***************************************************************************************************************** + // Container Lehre generieren (nicht für Lehrgaenge) + // ***************************************************************************************************************** $lehre_arr = array(); // Alle Semesterwochenstunden, summiert nach STG und Studiensemester @@ -479,6 +317,190 @@ echo '
', print_r($xml, 1), '
'; // --------------------------------------------------------------------------------------------------------------------- // Private Functions // --------------------------------------------------------------------------------------------------------------------- + +/** + * Funktion ermittelt relatives Beschaeftigungsausmass und anteilige Jahresvollzeitaequivalenz + * @param String $uid + * @param array $bisverwendung_arr Object-Array + * @return array + */ +function _add_relativesBA_und_anteiligeJVZAE($uid, $bisverwendung_arr) +{ + global $beginn_imJahr; + global $ende_imJahr; + global $wochen_imJahr; + global $tage_imJahr; + global $ss_kurzbz; + global $ws_kurzbz; + + // Lehrtaetigkeit ermitteln + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($uid, $ss_kurzbz); + $lehre_ss_sws = $lema->result[0]; // Anzahl SS - Semesterwochenstunden + + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($uid, $ws_kurzbz); + $lehre_ws_sws = $lema->result[0]; // Anzahl WS - Semesterwochenstunden + + $has_lehrtaetigkeit = !is_null($lehre_ss_sws) || !is_null($lehre_ws_sws); + + foreach ($bisverwendung_arr as $index => $bisverwendung) + { + $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); + $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; + + /** + * NOTE: is_karenziert ist ein boolean fuer Vollzeit-Karenz, nicht fuer Teilzeit-(Bildungs-)Karenz! + * Die Unterscheidung ist wichtig fuer die weitere Ermittlung der JVZAE. + * Vollzeitkarenz: Anteiliger Beschaeftigungsausmass und JVZAE wird auf 0 gesetzt. + * Bildungs-Teilzeitkarenz: entspricht im System + */ + $is_karenziert_VZ = $bisverwendung->beschausmasscode == 5 && !$has_vertragsstunden; // VZ-Kinder- und Bildungskarenz + $is_karenziert_TZ = $bisverwendung->beschausmasscode == 5 && $has_vertragsstunden; // TZ-Bildungskarenz + + // Karenzzeit + // ------------------------------------------------------------------------------------------------------------- + if ($is_karenziert_VZ) + { + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); + $bisverwendung->jvzae_anteilig = 0; + continue; + } + + // Echter Dienstvertrag - d.h. Vertragsstunden sind vorhanden + // Bsp. angestellte Lektoren, angestellte MA in Verwaltung/Management/Wartung + // ------------------------------------------------------------------------------------------------------------- + else if ($has_vertragsstunden) + { + // Vertragsstunden koennen max. VZ Aequivalenz-Basiswert haben + if ($bisverwendung->vertragsstunden > BIS_VOLLZEIT_ARBEITSSTUNDEN) + { + $bisverwendung->vertragsstunden = BIS_VOLLZEIT_ARBEITSSTUNDEN; + } + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($bisverwendung->vertragsstunden / BIS_VOLLZEIT_ARBEITSSTUNDEN, 2); + $bisverwendung->jvzae_anteilig = round($bisverwendung->beschaeftigungsausmass_relativ * $bisverwendung->gewichtung, 2); + + // Echter Dienstvertrag - mit Lehrtaetigkeit, jedoch kein Lektor. + // Bsp. STG-Leiter mit Lehrtaetigkeit + // --------------------------------------------------------------------------------------------------------- + if (!$is_lektor && $has_lehrtaetigkeit) + { + /** + * Verwendungen ergänzen, wenn Mitarbeiter in Verwaltung/Managment/Wartung (jedenfalls nicht in Lehre) + * zugeteilt ist und dennoch lehrt. + * Die SWS werden sowohl fuer Sommer- als auch Wintersemster ermittelt und jeweils in einer eigenen + * Verwendung mit dem Verwendungscode 1 ergaenzt. + */ + $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_BIS = new DateTime($bisverwendung->ende_imBISMeldungsJahr); + + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem_kurzbz => $lehre_sws) + { + $studsem = new studiensemester($studsem_kurzbz); + $studsem_start = new DateTime($studsem->start); + $studsem_ende = new DateTime($studsem->ende); + + // Wenn Lehrzeit in die BIS Verwendungszeit hineinfaellt, Verwendung erstellen + if (!is_null($lehre_sws) && + (!($studsem_start > $bisverwendung_ende_BIS) && + !($studsem_ende < $bisverwendung_beginn_BIS))) + { + // Verwendung erstellen + list($tage_lehre_imSemester, $verwendung_lehre_obj) = _addVerwendung_fuerLehre_inkludiert($studsem, $bisverwendung); + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE, 2); // VZ-Basis fuer inkludierte Lehre + $verwendung_lehre_obj->gewichtung = ($tage_lehre_imSemester == 182) + ? BIS_HALBJAHRES_GEWICHTUNG_SWS + : round(BIS_HALBJAHRES_GEWICHTUNG_SWS / ($tage_imJahr / 2) * $tage_lehre_imSemester, 2); + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 3); + + /** + * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen + * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) + * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der + * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. + * */ + if(substr($studsem_kurzbz, 0, 2) == 'WS') + { + $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + } + + /** + * Anteilige JVZAE der BIS-Verwendung berichtigen + * (durch Abzug der eben erstellten anteiligen JVZAE fuer Lehrtaetigkeiten) + */ + $bisverwendung->jvzae_anteilig -= $verwendung_lehre_obj->jvzae_anteilig; + $bisverwendung_arr [] = $verwendung_lehre_obj; + } + } + } + } + + // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden + // Freie Dienstvertraege auf Stundenbasis + // ------------------------------------------------------------------------------------------------------------- + else if (!$has_vertragsstunden && $has_lehrtaetigkeit) + { + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) + { + if (!is_null($lehre_sws)) + { + // Verwendungen erstellen + $verwendung_lehre_obj = _addVerwendung_fuerLehre_Stundenbasis($bisverwendung); + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS, 2); // VZ-Basis nach BIS-Vorgabe fuer Stundenbasis + $verwendung_lehre_obj->gewichtung = BIS_HALBJAHRES_GEWICHTUNG_SWS; + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 2); + $bisverwendung_arr []= $verwendung_lehre_obj; + } + } + } + else + { + // Studentische Hilfskraft + // --------------------------------------------------------------------------------------------------------- + $benutzerfunktion = new Benutzerfunktion(); + $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( + $uid, + 'hilfskraft', + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + + if ($is_studentische_hilfskraft) + { + // Kalkulatorische Umrechnung der Jahrespauschale + $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) + // --------------------------------------------------------------------------------------------------------- + else + { + $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + } + } + + return $bisverwendung_arr; +} + /** * Funktion ermittelt fuer jede BIS-Verwendung die Dauer (in Tagen) und Gewichtung (Dauer / Tage im Jahr) * @param array $bisverwendung_arr Array mit BIS-Verwendungsobjekten From a25851613b3cd1881a41599a2ea04a195fdf026f Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:50:03 +0100 Subject: [PATCH 52/66] Changed ba1code to ba1code_bis in getVerwendungenBISMeldung() --- include/bisverwendung.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index ab8b5a4e4..44c70eb21 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -639,6 +639,7 @@ class bisverwendung extends basis_db END as ende_imBISMeldungsJahr FROM bis.tbl_bisverwendung + JOIN bis.tbl_beschaeftigungsart1 USING (ba1code) WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' AND (beginn <= '. $this->db_add_param($stichtag).' OR beginn is null) @@ -655,7 +656,7 @@ class bisverwendung extends basis_db $obj->bisverwendung_id = $row->bisverwendung_id; $obj->mitarbeiter_uid = $row->mitarbeiter_uid; $obj->vertragsstunden = $row->vertragsstunden; - $obj->ba1code = $row->ba1code; + $obj->ba1code = $row->ba1code_bis; $obj->ba2code = $row->ba2code; $obj->verwendung_code = $row->verwendung_code; $obj->beschausmasscode = $row->beschausmasscode; From 54dd6734ba365b5d3b7ed13de40b664810e32d4c Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:53:21 +0100 Subject: [PATCH 53/66] Added XML Output --- vilesci/bis/personalmeldung.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 5c214e730..61f59b603 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -310,7 +310,15 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $xml = ''; $xml = _generateXML($person_arr); -echo '
', print_r($xml, 1), '
'; +$xml_datei = 'bisdaten/bismeldung_mitarbeiter.xml'; +$dateiausgabe = fopen($xml_datei,'w'); +fwrite($dateiausgabe, $xml); +fclose($dateiausgabe); + +echo 'Herunterladen'; + +//header("Content-Type: text/xml"); +//echo $xml; From d1e47ad73e4e5a52183f1a246316cea0982b67cf Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:55:28 +0100 Subject: [PATCH 54/66] Corrected: erste Korrekturen nach BIS Uplaod und Validierung, -- ACHTUNG: TODO ! - . kleine Korrekturen (Typen-, Semantikecheck) . TODO!!!: Meldedatum und ErhKz ersetzen! --- vilesci/bis/personalmeldung.php | 62 +++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 61f59b603..9d0f92894 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -12,6 +12,7 @@ require_once('../../include/lehreinheitmitarbeiter.class.php'); require_once('../../include/benutzerfunktion.class.php'); require_once('../../include/organisationseinheit.class.php'); require_once('../../include/entwicklungsteam.class.php'); +require_once('../../include/erhalter.class.php'); $uid = get_uid(); @@ -118,7 +119,7 @@ foreach ($mitarbeiter_arr as $mitarbeiter) { $person_obj = new StdClass(); - $person_obj->personalnummer = $mitarbeiter->personalnummer; + $person_obj->personalnummer = setLeadingZero(intval($mitarbeiter->personalnummer), 15); $person_obj->uid = $mitarbeiter->uid; $person_obj->geschlecht = $mitarbeiter->geschlecht; $person_obj->geschlechtX = $mitarbeiter->geschlechtX; @@ -191,7 +192,7 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $verwendung_obj->ba1code = $bisverwendung->ba1code; $verwendung_obj->ba2code = $bisverwendung->ba2code; $verwendung_obj->verwendung_code = $bisverwendung->verwendung_code; - $verwendung_obj->jvzae = 0; + $verwendung_obj->jvzae = 0.00; $verwendung_obj->vzae = -1; // default // Loop innerhalb Verwendungen mit selben Beschaeftigungsverhaeltnissen und Verwendung_codes @@ -204,7 +205,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) * Berechnung: * JVZAE wird aus der Summe aller anteiligen JVZE gebildet. */ - $verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig)) ? $verwendung_tmp->jvzae_anteilig * 100 : NULL; // TODO: not null... + $verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig)) + ? number_format($verwendung_tmp->jvzae_anteilig * 100, 2) + : NULL; // TODO: not null... // Vollzeitaequivalenz VZAE ermitteln (Beschaeftigungsausmass zum Stichtag 31.12) @@ -785,9 +788,9 @@ function _getLehrecontainer($sws_proStg_arr) { $lehre_obj = new StdClass(); - $lehre_obj->StgKz = $sws_proStg->studiengang_kz; - $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : NULL; - $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : NULL; + $lehre_obj->StgKz = setLeadingZero(intval($sws_proStg->studiengang_kz), 4); + $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : 0.00; + $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : 0.00; // Lehreobjekt dem Lehrecontainer anhaengen $lehre_arr []= $lehre_obj; @@ -820,6 +823,10 @@ function _generateXML($person_arr) $xml = ''; $xml .= ''; +// TODO: ErhKz und Meldedatum aendern + $xml .= ''; + $xml .= '005'; + $xml .= '15042020'; $xml .= ''; foreach ($person_arr as $person) @@ -830,15 +837,17 @@ function _generateXML($person_arr) $xml .= 'geschlecht. ']]>'; $xml .= 'geschlechtX. ']]>'; $xml .= 'geburtsjahr. ']]>'; - $xml .= 'staatsangehoerigkeit. ']]>'; + $xml .= 'staatsangehoerigkeit. ']]>'; $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; $xml .= 'habilitation. ']]>'; - $xml .= 'hauptberufcode. ']]>'; + $xml .= (!is_null($person->hauptberufcode)) + ? 'hauptberufcode. ']]>' + : ''; foreach ($person->verwendung_arr as $verwendung) { $xml .= ''; - $xml .= 'verwendung_code. ']]>'; + $xml .= 'verwendung_code. ']]>'; $xml .= 'ba1code. ']]>'; $xml .= 'ba2code. ']]>'; $xml .= 'vzae. ']]>'; @@ -850,21 +859,29 @@ function _generateXML($person_arr) { $xml .= ''; $xml .= 'funktionscode. ']]>'; - $xml .= 'besondereQualifikationCode. ']]>'; - $xml .= ''; - if (is_array($funktion->studiengang)) - { - foreach ($funktion->studiengang as $studiengang) - { - $xml .= ''; - } - } - else if (!is_null($funktion->studiengang)) - { - $xml .= 'studiengang. ']]>'; + $xml .= (!is_null($funktion->besondereQualifikationCode)) + ? 'besondereQualifikationCode. ']]>' + : ''; + if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) + { + $xml .= ''; + + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + $xml .= ''; + } + } + else if (!is_null($funktion->studiengang)) + { + $xml .= 'studiengang. ']]>'; + + } + $xml .= ''; } - $xml .= ''; + $xml .= ''; } @@ -881,6 +898,7 @@ function _generateXML($person_arr) } $xml .= ''; + $xml .= ''; return $xml; } From 1f4722b7a0b30227b1ae4a3a0476d543f5bd5bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 12 Mar 2020 19:24:47 +0100 Subject: [PATCH 55/66] =?UTF-8?q?-=20Config=20hinzugef=C3=BCgt=20um=20Lekt?= =?UTF-8?q?orenzuordnungen=20im=20CIS=20nur=20anzuzeigen=20wenn=20der=20Ve?= =?UTF-8?q?rtrag=20erteilt=20wurde=20-=20Vertr=C3=A4ge=20werden=20erst=20a?= =?UTF-8?q?b=20Status=20erteilt=20f=C3=BCr=20Lektoren=20angezeigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lehre/lehrauftrag/acceptLehrauftrag.php | 7 +- .../lehrauftrag/acceptLehrauftragData.php | 10 +-- cis/private/lehre/anwesenheitsliste.php | 13 +++- cis/private/lehre/lesson.php | 18 ++++- cis/private/profile/lva_liste.php | 13 ++++ cms/menu/menu_addon_meinelv.inc.php | 13 ++++ config/global.config-default.inc.php | 4 + include/vertrag.class.php | 77 +++++++++++++++++++ .../js/lehre/lehrauftrag/acceptLehrauftrag.js | 20 ++++- 9 files changed, 157 insertions(+), 18 deletions(-) diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 3f2575ec1..a4116e8d0 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -69,13 +69,11 @@ $this->load->view( - - @@ -148,9 +146,6 @@ $this->load->view( - @@ -196,7 +191,7 @@ $this->load->view(
- +
diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index 2a9cc4245..6ac3abbdc 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -170,7 +170,7 @@ FROM /* filter active organisationseinheiten */ AND oe.aktiv = TRUE /* filter vertragsstatus to avoid showing before status is bestellt */ - AND vvs.vertragsstatus_kurzbz IN (\'bestellt\', \'erteilt\', \'akzeptiert\') + AND vvs.vertragsstatus_kurzbz IN (\'erteilt\', \'akzeptiert\') ) tmp_lehrauftraege UNION @@ -182,8 +182,8 @@ FROM (SELECT uid FROM - public.tbl_benutzer JOIN public.tbl_mitarbeiter ma - ON tbl_benutzer.uid = ma.mitarbeiter_uid + public.tbl_benutzer JOIN public.tbl_mitarbeiter ma + ON tbl_benutzer.uid = ma.mitarbeiter_uid WHERE person_id = tmp_projektbetreuung.person_id ORDER BY aktiv DESC, updateaktivam DESC -- accept inactive as some person_ids have no active, but order them last @@ -285,8 +285,8 @@ FROM AND lv.aktiv = TRUE /* filter active organisationseinheiten */ AND oe.aktiv = TRUE - /* filter vertragsstatus to avoid showing before status is bestellt */ - AND vvs.vertragsstatus_kurzbz IN (\'bestellt\', \'erteilt\', \'akzeptiert\') + /* filter vertragsstatus to avoid showing before status is erteilt */ + AND vvs.vertragsstatus_kurzbz IN (\'erteilt\', \'akzeptiert\') ) tmp_projektbetreuung ) auftraege ORDER BY "akzeptiert" NULLS FIRST, "erteilt" NULLS LAST, "bestellt" diff --git a/cis/private/lehre/anwesenheitsliste.php b/cis/private/lehre/anwesenheitsliste.php index 4e328f5f2..bc7d96083 100644 --- a/cis/private/lehre/anwesenheitsliste.php +++ b/cis/private/lehre/anwesenheitsliste.php @@ -33,7 +33,7 @@ require_once('../../../include/studiengang.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/phrasen.class.php'); - + require_once('../../../include/vertrag.class.php'); $sprache = getSprache(); $p=new phrasen($sprache); @@ -134,6 +134,17 @@ { while($row_lkt = $db->db_fetch_object($result_lkt)) { + // Lektor wird erst angezeigt wenn der Auftrag erteilt wurde + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lvid, $stsem, $row_lkt->mitarbeiter_uid)) + { + continue; + } + } + if($lektoren!='') $lektoren.=', '; $lektoren .= $row_lkt->kurzbz; diff --git a/cis/private/lehre/lesson.php b/cis/private/lehre/lesson.php index 6d35e46c7..4d8c872a1 100644 --- a/cis/private/lehre/lesson.php +++ b/cis/private/lehre/lesson.php @@ -33,6 +33,7 @@ require_once('../../../include/lvangebot.class.php'); require_once('../../../include/benutzergruppe.class.php'); require_once('../../../include/lehreinheit.class.php'); require_once('../../../include/variable.class.php'); +require_once('../../../include/vertrag.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); @@ -316,6 +317,17 @@ $( document ).ready(function() $i=0; while($row_lector = $db->db_fetch_object($result)) { + // Lektor wird erst angezeigt wenn der Auftrag erteilt wurde + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lvid, $angezeigtes_stsem, $row_lector->uid)) + { + continue; + } + } + $i++; if($user==$row_lector->uid) { @@ -327,9 +339,11 @@ $( document ).ready(function() $style='style="font-weight: bold"'; else $style=''; - echo ''.$row_lector->vorname.' '.$row_lector->nachname.''; - if($i!=$num_rows_result) + + if ($i != 1) echo ', '; + echo ''.$row_lector->vorname.' '.$row_lector->nachname.''; + } } } diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index c4f54ce94..8b8829099 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -37,6 +37,7 @@ require_once('../../../include/datum.class.php'); require_once('../../../include/lvangebot.class.php'); require_once('../../../include/addon.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/vertrag.class.php'); if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); @@ -211,6 +212,18 @@ require_once('../../../include/benutzerberechtigung.class.php'); for ($i=0; $i<$num_rows; $i++) { $row=$db->db_fetch_object($result); + + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) + { + continue; + } + } + $lvangebot = new lvangebot(); echo ''; if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) diff --git a/cms/menu/menu_addon_meinelv.inc.php b/cms/menu/menu_addon_meinelv.inc.php index 89eecf088..b27029586 100644 --- a/cms/menu/menu_addon_meinelv.inc.php +++ b/cms/menu/menu_addon_meinelv.inc.php @@ -24,11 +24,13 @@ */ require_once(dirname(__FILE__).'/menu_addon.class.php'); require_once(dirname(__FILE__).'/../../config/cis.config.inc.php'); +require_once(dirname(__FILE__).'/../../config/global.config.inc.php'); require_once(dirname(__FILE__).'/../../include/functions.inc.php'); require_once(dirname(__FILE__).'/../../include/phrasen.class.php'); require_once(dirname(__FILE__).'/../../include/studiensemester.class.php'); require_once(dirname(__FILE__).'/../../include/studiengang.class.php'); require_once(dirname(__FILE__).'/../../include/lehrveranstaltung.class.php'); +require_once(dirname(__FILE__).'/../../include/vertrag.class.php'); class menu_addon_meinelv extends menu_addon { @@ -187,6 +189,17 @@ class menu_addon_meinelv extends menu_addon $lv_obj = new lehrveranstaltung(); $lv_obj->load($row->lehrveranstaltung_id); + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lv_obj->lehrveranstaltung_id, $stsem, $user)) + { + continue; + } + } + if($row->studiengang_kz==0 AND $row->semester==0) { $this->items[] = array('title'=>$lv_obj->bezeichnung_arr[$sprache], diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 05da2cb94..a888ee57e 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -132,6 +132,10 @@ define('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN',false); // Legt fest, ob Vertragsdetails zum Lehrauftrag im Reiter LektorInnenzuteilung angezeigt werden define('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN', false); +// Gibt an, ob/ab welchen Studiensemester eine zusätzliche Vertragspruefung der Lektoren erfolgt. +// Ab diesem Semester wird die Lektorenzuordnung nur angezeigt wenn ein erteilter Vertrag vorhanden ist +define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', ''); + // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); diff --git a/include/vertrag.class.php b/include/vertrag.class.php index 01b10c2b0..37c2fc9e2 100644 --- a/include/vertrag.class.php +++ b/include/vertrag.class.php @@ -1168,5 +1168,82 @@ class vertrag extends basis_db return false; } } + + /** + * Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehrveranstaltung besitzt. + * @param $lehrveranstaltung_id ID der Lehrveranstaltung + * @param $studiensemester_kurzbz Studiensemester das geprueft wird + * @param $mitarbeiter_uid UID des Mitarbeiters + */ + public function isVertragErteiltLV($lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid) + { + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + // Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt + $qry = " + SELECT + tbl_studiensemester.start + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND tbl_studiensemester.start < (SELECT start + FROM public.tbl_studiensemester stsem WHERE + stsem.studiensemester_kurzbz=".$this->db_add_param(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)." + )"; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result)>0) + { + // Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt. + return true; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Studiensemesters'; + return false; + } + } + + $qry = " + SELECT + 1 + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_vertrag USING(vertrag_id) + JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id) + WHERE + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." + AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND tbl_lehreinheit.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt' + AND NOT EXISTS( + SELECT 1 FROM lehre.tbl_vertrag_vertragsstatus vstatus + WHERE vstatus.vertrag_id = tbl_vertrag.vertrag_id + AND vstatus.vertragsstatus_kurzbz='storno' + ) + "; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } } ?> diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js index fffed4f87..da041c232 100644 --- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js +++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js @@ -294,11 +294,12 @@ function footer_downloadCSV(){ */ function footer_selectAll(){ $('#tableWidgetTabulator').tabulator('getRows', true) - .filter(row => row.getData().bestellt != null && // bestellt + .filter(function(row){ return row.getData().bestellt != null && // bestellt row.getData().erteilt != null && // AND erteilt row.getData().akzeptiert == null && // AND NOT akzeptiert - row.getData().status != 'Geändert') // AND NOT geändert - .forEach((row => row.select())); + row.getData().status != 'Geändert' + ;}) // AND NOT geändert + .forEach((function(row){ return row.select();})); } /* @@ -464,6 +465,17 @@ storniert_tooltip = function(cell){ } $(function() { + + // Pruefen ob Promise unterstuetzt wird + // Tabulator funktioniert nicht mit IE + var canPromise = !! window.Promise; + if(!canPromise) + { + alert("Diese Seite kann mit ihrem Browser nicht angezeigt werden. Bitte verwenden Sie Firefox, Chrome oder Edge um die Seite anzuzeigen"); + window.location.href='about:blank'; + return; + } + // Show all rows $("#show-all").click(function(){ $('#tableWidgetTabulator').tabulator('clearFilter'); @@ -582,7 +594,7 @@ $(function() { // Print error message FHC_DialogLib.alertWarning(data.retval); } - + if (!data.error && data.retval != null) { // Update status 'Erteilt' From dd2c384de04dc089c1d5fc0ae8d9fc14b826cfc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 11:04:40 +0100 Subject: [PATCH 56/66] =?UTF-8?q?Personalmeldung=20angepasst:=20=20=20=20?= =?UTF-8?q?=C3=9Cbersichtstabelle=20hinzugef=C3=BCgt=20=20=20=20Erhalterke?= =?UTF-8?q?nnzahl=20und=20Meldedatum=20wird=20dynamisch=20ermittelt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/personalmeldung.php | 233 ++++++++++++++++++++++++++++++-- 1 file changed, 221 insertions(+), 12 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 9d0f92894..2e2910247 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -1,5 +1,22 @@ + */ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/datum.class.php'); @@ -78,7 +95,7 @@ if (!defined('BIS_FUNKTIONSCODE_6_ARR') || empty('BIS_FUNKTIONSCODE_6_ARR')) // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); -$stsem = (isset($_GET['stsem'])) ? $_GET['stsem'] : $studiensemester->getaktorNext(1); // aktuelles Studiensemester +$stsem = (isset($_GET['stsem'])) ? $_GET['stsem'] : $studiensemester->getaktorNext(); // aktuelles Studiensemester $datum_obj = new datum(); if(mb_strstr($stsem,'SS')) @@ -121,6 +138,8 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->personalnummer = setLeadingZero(intval($mitarbeiter->personalnummer), 15); $person_obj->uid = $mitarbeiter->uid; + $person_obj->vorname = $mitarbeiter->vorname; + $person_obj->nachname = $mitarbeiter->nachname; $person_obj->geschlecht = $mitarbeiter->geschlecht; $person_obj->geschlechtX = $mitarbeiter->geschlechtX; $person_obj->geburtsjahr = $datum_obj->formatDatum($mitarbeiter->gebdatum, 'Y'); @@ -311,6 +330,8 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // XML generieren // ********************************************************************************************************************* $xml = ''; + +_outputHTML($person_arr); $xml = _generateXML($person_arr); $xml_datei = 'bisdaten/bismeldung_mitarbeiter.xml'; @@ -318,12 +339,7 @@ $dateiausgabe = fopen($xml_datei,'w'); fwrite($dateiausgabe, $xml); fclose($dateiausgabe); -echo 'Herunterladen'; - -//header("Content-Type: text/xml"); -//echo $xml; - - +echo 'XML Herunterladen'; // --------------------------------------------------------------------------------------------------------------------- // Private Functions @@ -823,10 +839,19 @@ function _generateXML($person_arr) $xml = ''; $xml .= ''; -// TODO: ErhKz und Meldedatum aendern + $erhalter = new erhalter(); + $erhalter->getAll(); + + if(isset($erhalter->result[0])) + { + $erhalter = sprintf("%03s",trim($erhalter->result[0]->erhalter_kz)); + } + else + $erhalter = ''; + $xml .= ''; - $xml .= '005'; - $xml .= '15042020'; + $xml .= ''.$erhalter.''; + $xml .= '1504'.date('Y').''; $xml .= ''; foreach ($person_arr as $person) @@ -835,7 +860,8 @@ function _generateXML($person_arr) $xml .= 'personalnummer. ']]>'; $xml .= 'geschlecht. ']]>'; - $xml .= 'geschlechtX. ']]>'; + if ($person->geschlecht == 'x') + $xml .= 'geschlechtX. ']]>'; $xml .= 'geburtsjahr. ']]>'; $xml .= 'staatsangehoerigkeit. ']]>'; $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; @@ -903,4 +929,187 @@ function _generateXML($person_arr) return $xml; } +/** + * Prints the HTML Table with all Persons + * @param $person_arr Array of PersonData + */ +function _outputHTML($person_arr) +{ + echo ' + + BIS - Meldung Personal + + '; + include('../../include/meta/jquery.php'); + include('../../include/meta/jquery-tablesorter.php'); + echo ' + + +

Personalmeldung

'; + echo ' + + '; + + echo "Anzahl der gemeldeten Personen: ".count($person_arr); + + echo ' +
Alle
Alle Lehraufträge mit jedem Status
Bestellt
Nur bestellte UND bestellte Lehraufträge, die in Bearbeitung sind
Erteilt
Nur erteilte UND geänderte Lehraufträge, die in Bearbeitung sind
Angenommen
Nur von Ihnen angenommene Lehraufträge
+ + + + + + + + + + + + + + + + + + '; + + + foreach ($person_arr as $person) + { + echo ' + + + + + + + + + + + '; + + echo ''; + + echo ''; + + echo ' + '; + } + + echo ' +
PersNrVornameNachnameUIDGeschlecht (X)Geb.JahrStaatHöchste Ausb.Habil.HautpberufcodeVerwendungFunktionLehre
'.$person->personalnummer.''.$person->vorname.''.$person->nachname.''.$person->uid.''.$person->geschlecht.($person->geschlecht=='x'?'('.$person->geschlechtX.')':'').''.$person->geburtsjahr.''.$person->staatsangehoerigkeit.''.$person->hoechste_abgeschlossene_ausbildung.''.$person->habilitation.''.$person->hauptberufcode.''; + + if (count($person->verwendung_arr) > 0) + { + echo ' + + + + + + + + + + + + '; + + foreach ($person->verwendung_arr as $verwendung) + { + echo ' + + + + + + + '; + } + echo ' +
VerwendungBa1CodeBa2CodeVZÄJVZÄ
'.$verwendung->verwendung_code.''.$verwendung->ba1code.''.$verwendung->ba2code.''.$verwendung->vzae.''.$verwendung->jvzae.'
'; + } + echo '
'; + + if (count($person->funktion_arr) > 0) + { + echo ' + + + + + + + + + + '; + + foreach ($person->funktion_arr as $funktion) + { + echo ' + + + + + '; + } + echo ' +
FunktionBes.QualStgKZ
'. $funktion->funktionscode. ''. $funktion->besondereQualifikationCode. ''; + + if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) + { + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + echo $studiengang.' '; + } + } + else if (!is_null($funktion->studiengang)) + { + echo $funktion->studiengang.' '; + } + } + echo '
'; + } + echo '
'; + if ($person->lehre_arr > 0) + { + echo ' + + + + + + + + + '; + + foreach ($person->lehre_arr as $lehre) + { + echo ' + + + + + '; + } + + echo ' +
StgKZSommerSWSWinterSWS
'. $lehre->StgKz. ''. $lehre->SommersemesterSWS. ''. $lehre->WintersemesterSWS. '
'; + } + echo '
'; +} From fd95f0f67c28df15daa62adf0692b9cf51866bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 13:11:16 +0100 Subject: [PATCH 57/66] Firmenhandys werden immer angezeigt auch wenn eine normale Klappe vorhanden ist --- cis/private/profile/index.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index dbef13bfd..17593ec15 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -341,16 +341,16 @@ if ($type == 'mitarbeiter') echo $p->t('profil/telefonTw').": $vorwahl - $user->telefonklappe
"; //echo $p->t('profil/faxTw').": $vorwahl - 99 $user->telefonklappe
"; } - else { - $kontakt = new kontakt(); - $kontakt->load_pers($user->person_id); - foreach($kontakt->result as $k) - { - if ($k->kontakttyp == 'firmenhandy') - echo $p->t('profil/telefonTw').': '.$k->kontakt.'
'; - } + $kontakt = new kontakt(); + $kontakt->load_pers($user->person_id); + foreach($kontakt->result as $k) + { + if ($k->kontakttyp == 'firmenhandy') + echo 'Firmenhandy: '.$k->kontakt.'
'; } + + if ($user->ort_kurzbz != '') echo $p->t('profil/buero').': '.$user->ort_kurzbz.'
'; } From 7b9b5e0dd59e957a64985bbdd39dd013c0534cab Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Mon, 16 Mar 2020 13:36:52 +0100 Subject: [PATCH 58/66] ohne Angabe des Studiensemesters werden nun alle LVs exportiert --- include/lehreinheit.class.php | 54 +++++++++++++++++++++++++++++++++++ rdf/lehreinheit.rdf.php | 6 +++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 3d754d7ec..23677a6e3 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -257,6 +257,60 @@ class lehreinheit extends basis_db } } + /** + * Laedt alle vorhandenen Lehreinheiten zu einer Lehrveranstaltung + * + * @param $lehrveranstaltung_id + * @return bool + */ + public function load_all_lehreinheiten($lehrveranstaltung_id) + { + $this->lehreinheiten = array(); + $this->errormsg =''; + + $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE + lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." + ORDER BY lehreinheit_id;"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $le_obj = new lehreinheit(); + + $le_obj->lehreinheit_id = $row->lehreinheit_id; + $le_obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $le_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $le_obj->lehrfach_id = $row->lehrfach_id; + $le_obj->lehrform_kurzbz = $row->lehrform_kurzbz; + $le_obj->stundenblockung = $row->stundenblockung; + $le_obj->wochenrythmus = $row->wochenrythmus; + $le_obj->start_kw = $row->start_kw; + $le_obj->raumtyp = $row->raumtyp; + $le_obj->raumtypalternativ = $row->raumtypalternativ; + $le_obj->lehre = $this->db_parse_bool($row->lehre); + $le_obj->anmerkung = $row->anmerkung; + $le_obj->unr = $row->unr; + $le_obj->lvnr = $row->lvnr; + $le_obj->sprache = $row->sprache; + $le_obj->insertamum = $row->insertamum; + $le_obj->insertvon = $row->insertvon; + $le_obj->updateamum = $row->updateamum; + $le_obj->updatevon = $row->updatevon; + $le_obj->ext_id = $row->ext_id; + $le_obj->gewicht = $row->gewicht; + + $this->lehreinheiten[] = $le_obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheiten'; + return false; + } + } + /** * Prueft die Variablen vor dem Speichern * auf Gueltigkeit. diff --git a/rdf/lehreinheit.rdf.php b/rdf/lehreinheit.rdf.php index e010768d5..b0e668290 100644 --- a/rdf/lehreinheit.rdf.php +++ b/rdf/lehreinheit.rdf.php @@ -86,7 +86,11 @@ else { if($lehrveranstaltung_id!='') { - $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); + if($studiensemester_kurzbz=!'') + $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); + else + $lehreinheit->load_all_lehreinheiten($lehrveranstaltung_id); + foreach ($lehreinheit->lehreinheiten as $row) draw_row($row); } From 8c76f38b4d29b956ef7cfa36b3c3fb0c79caf8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 13:52:29 +0100 Subject: [PATCH 59/66] =?UTF-8?q?Plausibilit=C3=A4tspr=C3=BCfungen=20f?= =?UTF-8?q?=C3=BCr=20Personalmeldung=20erg=C3=A4nzt.=20Anpassungen=20f?= =?UTF-8?q?=C3=BCr=20Studiengang-Container?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/personalmeldung.php | 105 ++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 4 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 2e2910247..3b2a43411 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -891,21 +891,21 @@ function _generateXML($person_arr) if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) { - $xml .= ''; - if (is_array($funktion->studiengang)) { foreach ($funktion->studiengang as $studiengang) { + $xml .= ''; $xml .= ''; + $xml .= ''; } } else if (!is_null($funktion->studiengang)) { + $xml .= ''; $xml .= 'studiengang. ']]>'; - + $xml .= ''; } - $xml .= ''; } $xml .= ''; @@ -947,6 +947,7 @@ function _outputHTML($person_arr)

Personalmeldung

'; + outputPlausibilitaetschecks($person_arr); echo ' '; + echo "

Meldedaten

"; echo "Anzahl der gemeldeten Personen: ".count($person_arr); echo ' @@ -1113,3 +1115,98 @@ function _outputHTML($person_arr) echo '
'; } + +function outputPlausibilitaetschecks($person_arr) +{ + echo "

Plausibilitätsprüfung

"; + + foreach ($person_arr as $row) + { + $msg = array(); + if ($row->personalnummer == '') + { + $msg[] = 'Personalnummer fehlt '; + } + if ($row->geschlecht == '') + { + $msg[] = 'Geschlecht fehlt '; + } + if ($row->geburtsjahr == '') + { + $msg[] = 'Geburtsjahr fehlt '; + } + if (date('Y') - $row->geburtsjahr >= 100) + { + $msg[] = 'Person darf nicht älter als 100 sein '; + } + if (date('Y') - $row->geburtsjahr <= 10) + { + $msg[] = 'Person darf nicht jünger als 10 sein '; + } + if ($row->staatsangehoerigkeit == '') + { + $msg[] = 'Staatsangehoerigkeit fehlt '; + } + if ($row->hoechste_abgeschlossene_ausbildung == '') + { + $msg[] = 'Höchste Abgeschlossene Ausbildung fehlt '; + } + if ($row->habilitation == '') + { + $msg[] = 'Habilitation fehlt '; + } + + if (isset($row->verwendung_arr) && is_array($row->verwendung_arr) && count($row->verwendung_arr) > 0) + { + foreach ($row->verwendung_arr as $verwendung) + { + if($verwendung->vzae < -1) + { + $msg[] = 'VZAE ist zu klein -> Vertragsstunden prüfen'; + } + if($verwendung->vzae > 100) + { + $msg[] = 'VZAE ist zu gross -> Vertragsstunden prüfen'; + } + + if($verwendung->jvzae < -1) + { + $msg[] = 'JVZAE ist zu klein -> Vertragsstunden prüfen'; + } + if($verwendung->jvzae > 100) + { + $msg[] = 'JVZAE ist zu gross -> Vertragsstunden prüfen'; + } + } + } + + if (isset($row->lehre_arr) && is_array($row->lehre_arr) && count($row->lehre_arr) > 0) + { + foreach ($row->lehre_arr as $lehre) + { + if ($lehre->SommersemesterSWS > 40) + { + $msg[] = 'Sommersemester SWS zu groß '.$lehre->SommersemesterSWS; + } + if ($lehre->WintersemesterSWS < 0) + { + $msg[] = 'Wintersemester SWS zu groß '.$lehre->WintersemesterSWS; + } + if ($lehre->SommersemesterSWS < 0) + { + $msg[] = 'Sommersemester SWS zu klein '.$lehre->SommersemesterSWS; + } + if ($lehre->WintersemesterSWS < 0) + { + $msg[] = 'Wintersemester SWS zu klein '.$lehre->WintersemesterSWS; + } + } + } + + if (count($msg) > 0) + { + echo "Fehler bei ".$row->vorname.' '.$row->nachname.' : '.implode($msg,', '); + echo "\n
"; + } + } +} From 77e2db5a7c7844fba4f5004d09dab9723f394ff7 Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Mon, 16 Mar 2020 15:24:48 +0100 Subject: [PATCH 60/66] Bugfix --- rdf/lehreinheit.rdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdf/lehreinheit.rdf.php b/rdf/lehreinheit.rdf.php index b0e668290..d6bd47411 100644 --- a/rdf/lehreinheit.rdf.php +++ b/rdf/lehreinheit.rdf.php @@ -86,7 +86,7 @@ else { if($lehrveranstaltung_id!='') { - if($studiensemester_kurzbz=!'') + if($studiensemester_kurzbz!='') $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); else $lehreinheit->load_all_lehreinheiten($lehrveranstaltung_id); From 91ab79d6ebe35c6a960d12b5ad8e6ffae1c8fa37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 17 Mar 2020 12:09:36 +0100 Subject: [PATCH 61/66] =?UTF-8?q?Config=20Eintr=C3=A4ge=20f=C3=BCr=20BIS?= =?UTF-8?q?=20Meldung=20aktualisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/vilesci.config-default.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index e737fc58a..1647cb59a 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -214,13 +214,13 @@ define('CI_ENVIRONMENT', 'development'); // Code igniter environment variable define('BIS_EXCLUDE_STG', array()); // Basis Vollzeit Arbeitsstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE (echte Dienstverträge) -define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '0'); +define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '40'); // Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE auf Stundenbasis (freie Dienstverträge) -define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '0'); +define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '15'); // Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE für inkludierte Lehre bei echten Dienstverträgen -define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '0'); +define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '25'); // Semester Gewichtung für Berechnung von Jahresvollzeitaequivalenz JVZAE define('BIS_HALBJAHRES_GEWICHTUNG_SWS', 0.5); @@ -239,10 +239,12 @@ define('BIS_FUNKTIONSCODE_1234_ARR', array( 'kollegium' => 4 // Mitglied des Kollegiums )); +// Liste der Leitungsfunktionen define('BIS_FUNKTIONSCODE_5_ARR', array( 'Leitung' )); +// Organisationseinheitstypen bei denen KEINE Leiter gemeldet werden define('BIS_FUNKTIONSCODE_6_ARR', array( 'Team' )); From 44fc614f67f047760522d42c2e2ebbc2657d7ab1 Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Tue, 17 Mar 2020 14:19:22 +0100 Subject: [PATCH 62/66] =?UTF-8?q?Durchschnitt=20und=20gewichteter=20Durchs?= =?UTF-8?q?chnitt=20k=C3=B6nnen=20per=20config=20in=20Notenliste=20ausgebl?= =?UTF-8?q?endet=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/lehre/notenliste.php | 11 ++++++++--- config/global.config-default.inc.php | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cis/private/lehre/notenliste.php b/cis/private/lehre/notenliste.php index 56fd4a36d..e7e7ae90f 100644 --- a/cis/private/lehre/notenliste.php +++ b/cis/private/lehre/notenliste.php @@ -417,10 +417,15 @@ else $tblFoot .= ""; - $tbl .= $tblHead.$tblFoot.$tblBody; + if (!defined('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN') || (defined('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN') && CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN)) + { + $tbl .= $tblHead.$tblFoot.$tblBody; + $tbl .= ""; + $tbl .= ""; + } + else + $tbl .= $tblHead.$tblBody; - $tbl .= "
*" . $p->t('tools/legendeNotendurchschnitt') . "
**" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
"; - $tbl .= ""; if ($legende) { $tbl .= ""; diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 05da2cb94..dff96bc38 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -101,6 +101,9 @@ define('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE', false); // Gibt an ob in der Notenliste der Studierenden nur offizielle Noten oder alle angezeigt werden define('CIS_NOTENLISTE_OFFIZIELL_ANZEIGEN', false); +// Gibt an ob in der Notenliste der Durchschnitt und der gewichtete Durchschnitt angezeigt werden +define('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN', true); + // Grenzwerte für Anwesenheit define('FAS_ANWESENHEIT_ROT', 70); define('FAS_ANWESENHEIT_GELB', 90); From 1a9ac9e1fa8d33ffca73d6da8e5a44cbf2de141a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 18 Mar 2020 13:44:36 +0100 Subject: [PATCH 63/66] =?UTF-8?q?LVA=20Liste=20anzeige=20der=20Anzahl=20de?= =?UTF-8?q?r=20Lehrauftr=C3=A4ge=20korrigiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/lva_liste.php | 827 +++++++++++++++--------------- 1 file changed, 422 insertions(+), 405 deletions(-) diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index 8b8829099..f2d175dbf 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -39,45 +39,49 @@ require_once('../../../include/addon.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/vertrag.class.php'); - if (!$db = new basis_db()) - die('Fehler beim Oeffnen der Datenbankverbindung'); +if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); - $adress=MAIL_ADMIN; +$adress = MAIL_ADMIN; - $user=get_uid(); - $studiensemester = new studiensemester(); +$user=get_uid(); +$studiensemester = new studiensemester(); - if (isset($_GET['uid'])) - $uid=$_GET['uid']; - else - $uid = $user; +if (isset($_GET['uid'])) + $uid = $_GET['uid']; +else + $uid = $user; - if (isset($_GET['stdsem'])) - $stdsem=$_GET['stdsem']; - else - $stdsem=$studiensemester->getaktorNext(); +if (isset($_GET['stdsem'])) + $stdsem = $_GET['stdsem']; +else + $stdsem = $studiensemester->getaktorNext(); - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($user); - if(!$rechte->isBerechtigt('admin') && $uid!=$user) - die('Sie haben keine Berechtigung für diesen Vorgang'); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); +if (!$rechte->isBerechtigt('admin') && $uid != $user) + die('Sie haben keine Berechtigung für diesen Vorgang'); - $datum = new datum(); +$datum = new datum(); - $addon = new addon(); - if(in_array('lvinfo',$addon->aktive_addons)) - $lvinfo=true; - else - $lvinfo=false; +$addon = new addon(); +if (in_array('lvinfo',$addon->aktive_addons)) + $lvinfo=true; +else + $lvinfo=false; - //Studiensemester abfragen. Letzten 5, aktuelles und naechstes. - $sql_query='SELECT * FROM public.tbl_studiensemester WHERE (start<=(now()::date+240) AND ende>=(now()::date-900)) ORDER BY start'; - $result_stdsem=$db->db_query($sql_query); - $num_rows_stdsem=$db->db_num_rows($result_stdsem); - //if (!isset($stdsem)) - //$stdsem=$db->db_result($result_stdsem,0,"studiensemester_kurzbz"); +//Studiensemester abfragen. Letzten 5, aktuelles und naechstes. +$sql_query = ' + SELECT + * + FROM + public.tbl_studiensemester + WHERE (start<=(now()::date+240) AND ende>=(now()::date-900)) + ORDER BY start'; +$result_stdsem = $db->db_query($sql_query); +$num_rows_stdsem = $db->db_num_rows($result_stdsem); - $p = new phrasen(getSprache()); +$p = new phrasen(getSprache()); /* 0000453: Sortierung von LVs - Meine LV 1. Bachelor @@ -90,413 +94,426 @@ require_once('../../../include/vertrag.class.php'); 8. Name der LV */ - //Lehrveranstaltungen abfragen. - $sql_query=" - SELECT - *, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz, - tbl_lehrveranstaltung.semester as lv_semester, - lehrfach.kurzbz as lehrfach, - lehrfach.bezeichnung as lehrfach_bez, - tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, - tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, - tbl_lehreinheit.anmerkung as le_anmerkung, - tbl_lehreinheit.lehrform_kurzbz as le_lehrform_kurzbz, - (SELECT kurzbz FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor, - tbl_lehrveranstaltung.lehrveranstaltung_id - FROM +//Lehrveranstaltungen abfragen. +$sql_query = " + SELECT + *, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz, + tbl_lehrveranstaltung.semester as lv_semester, + lehrfach.kurzbz as lehrfach, + lehrfach.bezeichnung as lehrfach_bez, + tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, + tbl_lehreinheit.anmerkung as le_anmerkung, + tbl_lehreinheit.lehrform_kurzbz as le_lehrform_kurzbz, + (SELECT kurzbz FROM public.tbl_mitarbeiter + WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor, + tbl_lehrveranstaltung.lehrveranstaltung_id + FROM lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) JOIN public.tbl_studiengang USING(studiengang_kz) JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND mitarbeiter_uid=".$db->db_add_param($uid); - $sql_query.=" ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung"; - $result=$db->db_query($sql_query); - $num_rows=$db->db_num_rows($result); + WHERE + tbl_lehreinheit.studiensemester_kurzbz = ".$db->db_add_param($stdsem)." + AND mitarbeiter_uid = ".$db->db_add_param($uid)." + ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung"; - echo ' - - - - '.$p->t('lvaliste/titel').' - - - - - - - - - - - - -

'.$p->t('lvaliste/titel').' ( '.$stdsem.' )

'; - echo '
*" . $p->t('tools/legendeNotendurchschnitt') . "
**" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
" . $p->t('tools/hinweistextMarkierung') . "
'; - for ($i=0;$i<$num_rows_stdsem;$i++) - { - $row=$db->db_fetch_object($result_stdsem); - if ($stdsem==$row->studiensemester_kurzbz) - echo ''.$row->studiensemester_kurzbz.' - '; - else - echo ''.$row->studiensemester_kurzbz.' - '; - } - echo ''; - echo ''.$p->t('lvaliste/hilfeAnzeigen').''; - echo '

'; - if ($num_rows>0) - { - - echo '

'.$p->t('lvaliste/lehrveranstaltungen').'

'; - echo $p->t('lvaliste/anzahl').': '.$num_rows; - echo ' - - - '; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - - if($lvinfo) - echo ''; - - echo ' - - - - - - - - - - - - - - - - '; - // Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ' - '; - $stg_obj = new studiengang(); - $stg_obj->getAll(null,null); - $summe_std=0; - - for ($i=0; $i<$num_rows; $i++) + $("#t2").tablesorter( { - $row=$db->db_fetch_object($result); - - // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. - if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') - && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') - { - $vertrag = new vertrag(); - if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) - { - continue; - } - } - - $lvangebot = new lvangebot(); - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - if ($row->lehrfach_bez!=$row->lv_bezeichnung) - echo ''; - else - echo ''; - echo ''; - echo ''; - echo ''; - - $qry ="SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); - $gruppe=''; - if($result_grp = $db->db_query($qry)) - { - while($row_grp = $db->db_fetch_object($result_grp)) - { - if($row_grp->gruppe_kurzbz!='') - $gruppe.= $row_grp->gruppe_kurzbz.'
'; - else - $gruppe.= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
'; - } - } - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } - else - { - echo ''; - } - echo ''; - - $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); - if(!empty($lvangebot->result)) - { - echo ''; - echo ''; - } - else - { - echo ' - '; - } - //echo ''; Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ''; - $summe_std+=$row->semesterstunden; - } - echo ''; - echo ''; - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + $("#t3").tablesorter( { - echo ''; - } - else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis'.$p->t('lvaliste/anmerkung').'
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  '.$row->le_anmerkung.'
             '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").' 
'; - } + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + }); + --> + + + +

'.$p->t('lvaliste/titel').' ( '.$stdsem.' )

'; +echo '
'; +for ($i = 0;$i < $num_rows_stdsem;$i++) +{ + $row = $db->db_fetch_object($result_stdsem); + if ($stdsem == $row->studiensemester_kurzbz) + echo ''.$row->studiensemester_kurzbz.' - '; else - echo $p->t('lvaliste/keineDatensaetze').'
'; + echo ''.$row->studiensemester_kurzbz.' - '; +} +echo '
'; +echo ''.$p->t('lvaliste/hilfeAnzeigen').''; +echo '

'; +if ($num_rows > 0) +{ + $anzahl_lvs = 0; + $lvtable = ' + + + '; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; - //Betreuungen - - $mitarbeiter = new benutzer(); - $mitarbeiter->load($uid); - - $qry = "SELECT - tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, - (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) - WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, - tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden - FROM - lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart - WHERE - tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND - tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND - tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + if ($lvinfo) + $lvtable .= ''; + $lvtable .= ' + + + + + + + + + + + + + + + + + + '; $stg_obj = new studiengang(); $stg_obj->getAll(null,null); $summe_std = 0; - if($result = $db->db_query($qry)) + for ($i = 0; $i < $num_rows; $i++) { - if($db->db_num_rows($result)>0) + $row = $db->db_fetch_object($result); + + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') { - echo '

'.$p->t('lvaliste/betreuungen').'

'; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis
'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) { - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } + continue; + } + } + $anzahl_lvs++; + + $lvangebot = new lvangebot(); + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if ($row->lehrfach_bez != $row->lv_bezeichnung) + $lvtable .= ''; + else + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + + $qry = " + SELECT * FROM lehre.tbl_lehreinheitgruppe + WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); + + $gruppe = ''; + if ($result_grp = $db->db_query($qry)) + { + while ($row_grp = $db->db_fetch_object($result_grp)) + { + if ($row_grp->gruppe_kurzbz != '') + $gruppe .= $row_grp->gruppe_kurzbz.'
'; else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo ''; - - $summe_std+=$row->stunden; + $gruppe .= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
'; } - echo ''; - echo ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + + $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); + if (!empty($lvangebot->result)) + { + $lvtable .= ''; + $lvtable .= ''; + } + else + { + $lvtable .= ' + '; + } + + $lvtable .= ''; + $summe_std += $row->semesterstunden; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.'
'.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  
             '.$p->t('lvaliste/summe').''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").' 
'; + + if($anzahl_lvs > 0) + { + echo '

'.$p->t('lvaliste/lehrveranstaltungen').'

'; + echo $p->t('lvaliste/anzahl').': '.$anzahl_lvs; + echo $lvtable; + } + else + { + echo $p->t('lvaliste/keineDatensaetze').'
'; + } +} +else + echo $p->t('lvaliste/keineDatensaetze').'
'; + +//Betreuungen +$mitarbeiter = new benutzer(); +$mitarbeiter->load($uid); + +$qry = "SELECT + tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, + (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) + WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, + tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden + FROM + lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart + WHERE + tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND + tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND + tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND + tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + +$stg_obj = new studiengang(); +$stg_obj->getAll(null,null); +$summe_std = 0; + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '
'; + echo '

'.$p->t('lvaliste/betreuungen').'

'; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + echo ''; + echo ''; + if (getSprache() == 'German') { - echo ''; - } - if($lvinfo) - - echo ''; - - if(getSprache()=='German') - { - echo ''; + echo ''; } else { - echo ''; + echo ''; } + echo ''; + echo ''; + echo ''; + echo ''; - - echo ''; - - echo ''; - - echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.' '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). ''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.' 
'; + $summe_std += $row->stunden; } - } - - - //Koordination - - $qry = "SELECT - distinct - tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, - tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, - tbl_studiengang.email - FROM - lehre.tbl_lehrveranstaltung, - lehre.tbl_lehreinheit, - lehre.tbl_lehrveranstaltung as lehrfach, - public.tbl_studiengang, - public.tbl_fachbereich - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - (tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." - OR - ( tbl_lehrveranstaltung.koordinator is null and (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN (SELECT studiengang_kz, fachbereich_kurzbz - FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) - WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." - and ( tbl_benutzerfunktion.datum_bis is null or now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) - )) - ) AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz - order by tbl_lehrveranstaltung.studiengang_kz,tbl_lehrveranstaltung.semester ,tbl_lehrveranstaltung.bezeichnung - "; - - - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) + echo ''; + echo ''; + echo ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) { - echo '

'.$p->t('lvaliste/koordination').'

'; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) - { - //Fachbereichskoordinatoren holen - $qry = "SELECT distinct - uid,titelpre, titelpost, vorname, nachname - FROM - lehre.tbl_lehreinheitmitarbeiter, - public.tbl_benutzer, - public.tbl_person, - lehre.tbl_lehreinheit - WHERE - tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND - tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND - tbl_benutzer.person_id=tbl_person.person_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); - $lektoren=''; - if($result_lkt = $db->db_query($qry)) - { - while($row_lkt = $db->db_fetch_object($result_lkt)) - { - if($lektoren!='') - $lektoren.=','; - $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); - } - } - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
'; + echo ' '; } + if ($lvinfo) + + echo ''.$p->t('lvaliste/summe').''; + + if (getSprache() == 'German') + { + echo ''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''; + } + else + { + echo ''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").''; + } + + echo ' '; + echo ''; + echo ''; } +} + +//Koordination +$qry = "SELECT + distinct + tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, + tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, + tbl_studiengang.email + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach, + public.tbl_studiengang, + public.tbl_fachbereich + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND + tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + ( + tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." + OR + ( tbl_lehrveranstaltung.koordinator is null + AND (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN ( + SELECT studiengang_kz, fachbereich_kurzbz + FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) + WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." + AND ( + tbl_benutzerfunktion.datum_bis is null + OR now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) + ) + ) + ) + AND tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz + ORDER BY + tbl_lehrveranstaltung.studiengang_kz, + tbl_lehrveranstaltung.semester, + tbl_lehrveranstaltung.bezeichnung + "; + + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '

'.$p->t('lvaliste/koordination').'

'; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { + //Fachbereichskoordinatoren holen + $qry = "SELECT distinct + uid,titelpre, titelpost, vorname, nachname + FROM + lehre.tbl_lehreinheitmitarbeiter, + public.tbl_benutzer, + public.tbl_person, + lehre.tbl_lehreinheit + WHERE + tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND + tbl_benutzer.person_id=tbl_person.person_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); + $lektoren=''; + if($result_lkt = $db->db_query($qry)) + { + while($row_lkt = $db->db_fetch_object($result_lkt)) + { + if($lektoren!='') + $lektoren.=','; + $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); + } + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
'; + } +} echo '
'.$p->t('lvaliste/fehlerAnStudiengang').'


'; ?> From 96fff5b7590cb33994ac73909dc9112bfcb032c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 20 Mar 2020 15:40:59 +0100 Subject: [PATCH 64/66] BACodes an neue BIS Codes angepasst --- content/lvplanung/lehrveranstaltungDBDML.php | 2 +- vilesci/lehre/lehreinheiten_vorrueckung.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5972c4b4f..acab0c6ad 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -1425,7 +1425,7 @@ if(!$error) { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $data = ''; break; diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index 31a51c003..7d48c4778 100644 --- a/vilesci/lehre/lehreinheiten_vorrueckung.php +++ b/vilesci/lehre/lehreinheiten_vorrueckung.php @@ -350,7 +350,7 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $lem_obj->stundensatz = ''; break; From 0ba7d3fc9473f34bd0b42d5e89bae74d704410ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 25 Mar 2020 14:58:21 +0100 Subject: [PATCH 65/66] Profil zeigt Infotext an wenn der Notfallkontakt fehlt --- cis/private/profile/index.php | 6 ++++++ locale/de-AT/profil.php | 2 ++ locale/en-US/profil.php | 2 ++ 3 files changed, 10 insertions(+) diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index 17593ec15..3117aec55 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -427,6 +427,7 @@ if (!$ansicht) usort($kontakt->result, "sortKontakt"); echo ''; + $has_notfallkontakt = false; foreach($kontakt->result as $k) { if ($k->kontakttyp != 'firmenhandy' && $k->kontakttyp != 'hidden') @@ -441,6 +442,8 @@ if (!$ansicht) echo ''; echo ''; echo ''; + if ($k->kontakttyp == 'notfallkontakt') + $has_notfallkontakt = true; } /* if ($k->zustellung === TRUE) @@ -462,6 +465,9 @@ if (!$ansicht) } */ } + if (!$has_notfallkontakt) + echo ''; + echo '
'.$k->anmerkung.''.$zustellung.'
'.$p->t('profil/notfallkontakt').''.$p->t('profil/notfallkontaktBekanntgeben').'
'; } diff --git a/locale/de-AT/profil.php b/locale/de-AT/profil.php index 074379601..b8dcadcdd 100644 --- a/locale/de-AT/profil.php +++ b/locale/de-AT/profil.php @@ -84,4 +84,6 @@ $this->phrasen['profil/gueltigbis']='Gültig bis'; $this->phrasen['profil/wochenstunden']='Wochenstunden'; $this->phrasen['profil/vertragsstunden']='Vertragsstunden'; $this->phrasen['profil/zukuenftigeFunktionen']='Zukünftige Funktionen'; +$this->phrasen['profil/notfallkontakt']='Notfallkontakt'; +$this->phrasen['profil/notfallkontaktBekanntgeben']='Bitte geben Sie einen Notfallkontakt bekannt!'; ?> diff --git a/locale/en-US/profil.php b/locale/en-US/profil.php index 660936381..e94f180cd 100644 --- a/locale/en-US/profil.php +++ b/locale/en-US/profil.php @@ -82,4 +82,6 @@ $this->phrasen['profil/gueltigbis']='Valid to'; $this->phrasen['profil/wochenstunden']='week hours'; $this->phrasen['profil/vertragsstunden']='contract hours'; $this->phrasen['profil/zukuenftigeFunktionen']='Future functions'; +$this->phrasen['profil/notfallkontakt']='Emergency contact'; +$this->phrasen['profil/notfallkontaktBekanntgeben']='Please provide an emergency contact!'; ?> From 2d1baebf1f148ecf92e2780d487eaa7856cac02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 25 Mar 2020 15:31:24 +0100 Subject: [PATCH 66/66] BACode korrigiert --- content/lvplanung/lehrveranstaltungDBDML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index acab0c6ad..709b3f2c8 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -528,7 +528,7 @@ if(!$error) { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $fixangestellt = true; $lem->stundensatz = '';