diff --git a/application/config/message.php b/application/config/message.php index 35d34124b..8232cdfb7 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', 'fachzuordnung', 'oezuordnung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); 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' ) ) 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 diff --git a/application/controllers/jobs/MailJob.php b/application/controllers/jobs/MailJob.php index 721db0068..f459d4d3e 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/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 84a5fe614..859b8f265 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,300 @@ 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, /* Todo: 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' /* Todo: 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)) + { + // Derzeit nur Info an Admins schicken, wenn er Bewerber war + $mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenWeilBewerber'][] + = $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]['AbgewiesenGesetztWartender'][] + = $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.')'; + } + } + } + + // 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 = ''; + + foreach ($orgform AS $art=>$value) + { + // Orgform nur dazu schreiben, wenn es mehr als Eine gibt + if (count($orgform) > 1) + { + $mailcontent .= '

Orgform '.$art.'

'; + } + if (isset($value['AbgewiesenGesetztWartender']) && !isEmptyArray($value['AbgewiesenGesetztWartender'])) + { + $mailcontent .= '

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

'; + $mailcontent .= ''; + //$mailcontent .= ''; + $mailcontent .= ' '; + sort($value['AbgewiesenGesetztWartender']); + foreach ($value['AbgewiesenGesetztWartender'] AS $key=>$bewerber) + { + $mailcontent .= ''; + } + $mailcontent .= '
Zuvor Warteliste
'.$bewerber.'


'; + } + if (isset($value['AufnahmeHoeherePrio']) && !isEmptyArray($value['AufnahmeHoeherePrio'])) + { + $mailcontent .= '

+ Folgende Aufgenommene wurden in einem höher priorisierten Studiengang aufgenommen:

'; + $mailcontent .= ''; + //$mailcontent .= ''; + $mailcontent .= ' '; + sort($value['AufnahmeHoeherePrio']); + foreach ($value['AufnahmeHoeherePrio'] AS $key=>$bewerber) + { + $mailcontent .= ''; + } + $mailcontent .= '
Aufgenommene
'.$bewerber.'
'; + } + if ($bcc != '' && isset($value['AbgewiesenWeilBewerber']) && !isEmptyArray($value['AbgewiesenWeilBewerber'])) + { + $mailcontent .= '

+ Folgende BewerberInnen wurden zu Abgewiesenen gemacht:

'; + $mailcontent .= ''; + //$mailcontent .= ''; + $mailcontent .= ' '; + sort($value['AbgewiesenWeilBewerber']); + foreach ($value['AbgewiesenWeilBewerber'] AS $key => $bewerber) + { + $mailcontent .= ''; + } + $mailcontent .= '
Aufgenommene
'.$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); + } + } + } + } } 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; diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 29128a05d..92636e6df 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)) { @@ -529,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(); @@ -542,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'], ''); @@ -554,8 +559,69 @@ 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, 'b'); - $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 + { + $json->retval['infoMessages'][] = $this->p->t('infocenter', 'rtPunkteEintragenInfo'); + $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); } @@ -1496,7 +1562,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/controllers/system/messages/Messages.php b/application/controllers/system/messages/Messages.php index 7b48b1fcf..296022ca4 100644 --- a/application/controllers/system/messages/Messages.php +++ b/application/controllers/system/messages/Messages.php @@ -92,9 +92,9 @@ class Messages extends Auth_Controller */ public function parseMessageText() { - $receiver_id = $this->input->get('receiver_id'); - $text = $this->input->get('text'); - $type = $this->input->get('type'); + $receiver_id = $this->input->post('receiver_id'); + $text = $this->input->post('text'); + $type = $this->input->post('type'); if ($type == Messages_model::TYPE_PERSONS) { diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index 3a8f133cf..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 @@ -26,8 +27,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; /** @@ -139,27 +138,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); } //------------------------------------------------------------------------------------------------------------------ @@ -221,13 +224,20 @@ class MessageLib $this->_ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); // Retrieves organisation units for a user from database - $benutzer = $this->_ci->BenutzerfunktionModel->getByPersonId($sender_id); + $benutzer = $this->_ci->BenutzerfunktionModel->getActiveFunctionsByPersonId($sender_id); if (isSuccess($benutzer)) // if everything is ok { $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); } @@ -494,7 +504,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)) { @@ -759,15 +769,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! { @@ -776,6 +786,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 de6ec5a10..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) ? '' : ' *') ); } @@ -509,7 +511,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/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/models/person/Benutzerfunktion_model.php b/application/models/person/Benutzerfunktion_model.php index ceb427687..fb9b51c1a 100644 --- a/application/models/person/Benutzerfunktion_model.php +++ b/application/models/person/Benutzerfunktion_model.php @@ -11,16 +11,20 @@ class Benutzerfunktion_model extends DB_Model $this->dbTable = 'public.tbl_benutzerfunktion'; $this->pk = 'benutzerfunktion_id'; } - + /** * Get the Benutzerfunktion using the person_id */ - public function getByPersonId($person_id) + public function getActiveFunctionsByPersonId($person_id) { - // Join with the table - $this->addJoin('public.tbl_benutzer', 'uid'); - - return $this->loadWhere(array('person_id' => $person_id)); + $query = 'SELECT bf.* + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_benutzer b USING (uid) + WHERE b.person_id = ? + AND (bf.datum_von IS NULL OR bf.datum_von <= now()) + AND (bf.datum_bis IS NULL OR bf.datum_bis >= now())'; + + return $this->execQuery($query, array($person_id)); } /** diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 388f77b0a..d8ddb381c 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -213,4 +213,39 @@ 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, $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"; + + 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 tbl_prestudentstatus.status_kurzbz = 'Bewerber' + AND reihungstestangetreten"; + + if (isset($studiengangtyp)) + { + $parametersArray[] = $studiengangtyp; + $qry .= " AND tbl_studiengang.typ = ?"; + } + + return $this->execQuery($qry, $parametersArray); + } } diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php index cea11a7a7..d74d03243 100644 --- a/application/models/system/Recipient_model.php +++ b/application/models/system/Recipient_model.php @@ -199,66 +199,24 @@ 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) { - $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 mr.sentinfo 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)); } /** diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 14ebacecb..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( - @@ -166,12 +161,13 @@ $this->load->view(
-
- - - - -
+
+ + + + + +

@@ -195,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/application/views/system/messages/htmlWriteTemplate.php b/application/views/system/messages/htmlWriteTemplate.php index 64a8c8236..b6876dc91 100644 --- a/application/views/system/messages/htmlWriteTemplate.php +++ b/application/views/system/messages/htmlWriteTemplate.php @@ -62,7 +62,7 @@
-
+
-
+
-
+
-
-
- +
+
+
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')).': ', 'name' => 'recipients[]', 'id' => 'recipients' ) ); ?> - + + + p->t('ui', 'refresh')); ?> + + +
-

diff --git a/application/views/widgets/dropdown.php b/application/views/widgets/dropdown.php index 3db602755..d9faf1978 100644 --- a/application/views/widgets/dropdown.php +++ b/application/views/widgets/dropdown.php @@ -11,7 +11,7 @@ $align = "valign-top"; } ?> -
+
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
"; + $tbl .= ""; + } + else + $tbl .= $tblHead.$tblBody; - $tbl .= "
*" . $p->t('tools/legendeNotendurchschnitt') . "
**" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
"; - $tbl .= ""; if ($legende) { $tbl .= ""; diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index dbef13bfd..3117aec55 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.'
'; } @@ -427,6 +427,7 @@ if (!$ansicht) usort($kontakt->result, "sortKontakt"); echo '
*" . $p->t('tools/legendeNotendurchschnitt') . "
**" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
" . $p->t('tools/hinweistextMarkierung') . "
'; + $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/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index c4f54ce94..f2d175dbf 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -37,46 +37,51 @@ 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'); +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 @@ -89,401 +94,426 @@ require_once('../../../include/benutzerberechtigung.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 '
'; - 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); - $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').'


'; ?> diff --git a/cis/testtool/admin/edit_gebiet.php b/cis/testtool/admin/edit_gebiet.php index 68c502577..2fe6af39f 100644 --- a/cis/testtool/admin/edit_gebiet.php +++ b/cis/testtool/admin/edit_gebiet.php @@ -268,7 +268,7 @@ if ($gebiet_id != '') $offsethinweis = ' empfohlene Offsetpunkteanzahl: '.round($offsetpunkte).(round($offsetpunkte) != $offsetpunkte ? ' ('.$offsetpunkte.' gerundet)' : '').''; $offsethinweis .= ''.$offsetwarnung.''; } - echo 'Offsetpunkte (minimale Punkteanzahl)'.$offsethinweis.''; + echo 'Offsetpunkte (maximale Negativpunkte)'.$offsethinweis.''; echo ''; echo 'Maximale Fragenanzahl'; echo ''; 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 ' - + - - + + - - - - - - - - - - - - - - - - -'; +echo 'XML Herunterladen'; -foreach($mitarbeiter_gesamt as $row) +// --------------------------------------------------------------------------------------------------------------------- +// 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) { - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($row['verwendung'] as $row_verwendung) + 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) { - // Ba1Code - if(isset($ba1_arr[$row_verwendung['ba1code']])) - echo ''; - else - echo ''; + $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); + $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; - // Ba2Code - if(isset($ba2_arr[$row_verwendung['ba2code']])) - echo ''; - else - echo ''; + /** + * 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 - // Ausmass - if(isset($ausmass_arr[$row_verwendung['beschausmasscode']])) - echo ''; - else - echo ''; - - // Verwendung - if(isset($verwendung_arr[$row_verwendung['verwendung_code']])) - echo ''; - else - echo ''; - - echo ''; + 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 + * @return array + */ +function _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr) +{ + global $tage_imJahr; + + foreach ($bisverwendung_arr as &$bisverwendung) + { + $bisverwendung_beginn_imBISMeldungsJahr = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_imBISMeldungsJahr = new DateTime($bisverwendung->ende_imBISMeldungsJahr); + + $bisverwendung->dauer_imBISMeldungsJahr = $bisverwendung_ende_imBISMeldungsJahr->diff($bisverwendung_beginn_imBISMeldungsJahr)->days + 1; + $bisverwendung->gewichtung = round($bisverwendung->dauer_imBISMeldungsJahr / $tage_imJahr, 2); + } + + return $bisverwendung_arr; +} + +/** + * 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; +} + +/** + * 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; +} + +/** + * 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 = 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; + } + 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; +} + +function _generateXML($person_arr) +{ + $xml = ''; + $xml .= ''; + + $erhalter = new erhalter(); + $erhalter->getAll(); + + if(isset($erhalter->result[0])) + { + $erhalter = sprintf("%03s",trim($erhalter->result[0]->erhalter_kz)); + } + else + $erhalter = ''; + + $xml .= ''; + $xml .= ''.$erhalter.''; + $xml .= '1504'.date('Y').''; + $xml .= ''; + + foreach ($person_arr as $person) + { + $xml .= ''; + + $xml .= 'personalnummer. ']]>'; + $xml .= 'geschlecht. ']]>'; + if ($person->geschlecht == 'x') + $xml .= 'geschlechtX. ']]>'; + $xml .= 'geburtsjahr. ']]>'; + $xml .= 'staatsangehoerigkeit. ']]>'; + $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; + $xml .= 'habilitation. ']]>'; + $xml .= (!is_null($person->hauptberufcode)) + ? '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 .= (!is_null($funktion->besondereQualifikationCode)) + ? 'besondereQualifikationCode. ']]>' + : ''; + + if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) + { + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + $xml .= ''; + $xml .= ''; + $xml .= ''; + } + } + else if (!is_null($funktion->studiengang)) + { + $xml .= ''; + $xml .= 'studiengang. ']]>'; + $xml .= ''; + } + } + + $xml .= ''; + } + + foreach ($person->lehre_arr as $lehre) + { + $xml .= ''; + $xml .= 'StgKz. ']]>'; + $xml .= 'SommersemesterSWS. ']]>'; + $xml .= 'WintersemesterSWS. ']]>'; + $xml .= ''; + } + + $xml .= ''; + } + + $xml .= ''; + $xml .= ''; + + 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

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

Meldedaten

"; + echo "Anzahl der gemeldeten Personen: ".count($person_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'])) + // Karenzzeit + // ------------------------------------------------------------------------------------------------------------- + if ($is_karenziert_VZ) { + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); + $bisverwendung->jvzae_anteilig = 0; + continue; + } - foreach($row_verwendung['stgltg'] as $row_stgl) + // 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) { - echo 'Leitung:'.$stg_obj->kuerzel_arr[$row_stgl]; - echo '
'; + $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; + } + } } } - if(isset($row_verwendung['fkt'])) + // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden + // Freie Dienstvertraege auf Stundenbasis + // ------------------------------------------------------------------------------------------------------------- + else if (!$has_vertragsstunden && $has_lehrtaetigkeit) { - foreach($row_verwendung['fkt'] as $row_fkt) + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) { - echo $stg_obj->kuerzel_arr[$row_fkt['stgkz']].': '.$row_fkt['sws'].' SWS'; - echo '
'; + 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') + ); - echo '
+ + + + + + + + + + + + + + + + + + '; + + + 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 '
'; +} + +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
"; + } } - echo ''; } -echo '
'; -echo 'Mitarbeiter-BIS-Meldung archivieren
'; -echo "XML-Datei für Mitarbeiter-BIS-Meldung

"; -?> diff --git a/vilesci/bis/personalmeldung_uebersicht.php b/vilesci/bis/personalmeldung_uebersicht.php index c640d09d3..7f14dd4ef 100644 --- a/vilesci/bis/personalmeldung_uebersicht.php +++ b/vilesci/bis/personalmeldung_uebersicht.php @@ -42,10 +42,6 @@ echo ' Plausibilitätsprüfungen Verwendungen
Diverse Prüfungen auf inkonsistente Daten

-
  • - Funktionen generieren
    - Funktionen zu den Verwendungen generieren (SWS pro Studiengang)

    -
  • Meldung generieren
    Abschließende Plausibilitätsprüfungen durchführen und Meldung generieren

    diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index af12376ae..7d48c4778 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 == 103 && $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 = ''; diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index e38be43bf..88e7ef4d8 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -504,7 +504,7 @@ if ($testende) // Setzt "teilgenommen" (Zum Reihungstest angetreten) auf TRUE $teilgenommen = new reihungstest(); - $teilgenommen->getPersonReihungstest($prestudentrolle->person_id, $_POST['reihungstest_id']); + $teilgenommen->getPersonReihungstest($prestudentrolle->person_id, $_POST['reihungstest_id'], $prestudentrolle->studienplan_id); $teilgenommen->new = false; $teilgenommen->teilgenommen = true; @@ -565,6 +565,7 @@ if ($testende) $mailtext .= '
    Es haben '.$anzahl.' Person(en) aus dem Studiengang '.$stg->kuerzel.'-'.$orgForm.' teilgenommen.'; $mailtext .= '

    Link zur Auswertung'; $mailtext .= '

    Link zur Pivot-Tabelle für die Priorisierung'; + $mailtext .= '

    Reihung der BewerberInnen: Prio 1 innerhalb von 2 Werktagen, Prio 2 am 3. Werktag und Prio 3 am 4. Werktag'; $mailtext .= ' @@ -765,7 +766,7 @@ if ($punkteUebertragen) } else { - $msg_warning .= '
    Der Prestudent '.$array['prestudent_id'].' hat bereits Punkte eingetragen.'; + $msg_warning .= '
    Der Prestudent '.$array['prestudent_id'].' hat bereits Punkte für den Studienplan '.$prestudentrolle->studienplan_id.' eingetragen.'; } } else @@ -778,6 +779,7 @@ if ($punkteUebertragen) { $ort_kurzbz = $setRTPunkte->ort_kurzbz; } + $setRTPunkte = new reihungstest(); $setRTPunkte->getPersonReihungstest($prestudentrolle->person_id, $_POST['reihungstest_id'], $prestudentrolle->studienplan_id); // Check, ob Punkte schon befüllt sind @@ -787,6 +789,7 @@ if ($punkteUebertragen) $setRTPunkte->person_id = $prestudentrolle->person_id; $setRTPunkte->reihungstest_id = $_POST['reihungstest_id']; $setRTPunkte->anmeldedatum = ''; + $setRTPunkte->teilgenommen = true; $setRTPunkte->ort_kurzbz = $ort_kurzbz; $setRTPunkte->studienplan_id = $prestudentrolle->studienplan_id; $setRTPunkte->punkte = $rtpunkte; @@ -804,7 +807,7 @@ if ($punkteUebertragen) } else { - $msg_warning .= '
    Der Prestudent '.$array['prestudent_id'].' hat bereits Punkte eingetragen.'; + $msg_warning .= '
    Der Prestudent '.$array['prestudent_id'].' hat bereits Punkte für den Studienplan '.$prestudentrolle->studienplan_id.' eingetragen.'; } } @@ -818,7 +821,7 @@ if ($punkteUebertragen) if ($prestudent->punkte == '') { $prestudent->new = false; - $prestudent->punkte = number_format($array['ergebnis'], 4); + $prestudent->punkte = $rtpunkte; $prestudent->reihungstestangetreten = true; $setRTPunkte->updateamum = date('Y-m-d H:i:s'); $setRTPunkte->updatevon = $user; @@ -1197,7 +1200,7 @@ if (isset($_REQUEST['reihungstest'])) } if ($orgform_kurzbz != '' && $studiengang != '') { - $query .= " AND tbl_ablauf.studienplan_id=( + $query .= " AND (tbl_ablauf.studienplan_id=( SELECT studienplan_id FROM lehre.tbl_studienplan JOIN lehre.tbl_studienordnung USING (studienordnung_id) WHERE studiengang_kz=".$db->db_add_param($studiengang, FHC_INTEGER)." @@ -1207,7 +1210,8 @@ if (isset($_REQUEST['reihungstest'])) AND ((SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=tbl_studienordnung.gueltigvon) <= now() OR tbl_studienordnung.gueltigvon IS NULL) AND ((SELECT ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=tbl_studienordnung.gueltigbis) >= now() OR tbl_studienordnung.gueltigbis IS NULL) - ORDER BY studienplan_id DESC LIMIT 1)"; + ORDER BY studienplan_id DESC LIMIT 1) + OR tbl_ablauf.studienplan_id IS NULL)"; } //$query .= " AND nachname='Al-Mafrachi'"; $query .= " ORDER BY tbl_ablauf.studiengang_kz, tbl_ablauf.semester, reihung"; @@ -1224,7 +1228,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 @@ -1469,18 +1477,6 @@ if (isset($_REQUEST['reihungstest'])) } $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->name = $row->gebiet; - /*if ($row->punkte == 0 && $row->punkte != '') - { - $prozent = '0'; - } - elseif ($row->punkte >= $row->maxpunkte) //wenn maxpunkte ueberschritten wurde -> 100% - { - $prozent = 100; - } - else - { - $prozent = ($row->punkte / $row->maxpunkte) * 100; - }*/ if ($row->punkte >= $row->maxpunkte) { @@ -1493,19 +1489,23 @@ 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; + $ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id]->prozent = $maxpunkte_positiv > 0 ? $punkte_positiv / $maxpunkte_positiv * 100 : null; } } @@ -1535,6 +1535,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)) @@ -1546,28 +1555,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; - } - }*/ } } @@ -1714,32 +1701,33 @@ if (isset($_REQUEST['format']) && $_REQUEST['format'] == 'xls') $worksheet->mergeCells(0, 12, 1, 12); $maxlength[12] = 20; - $spalte = 11; + $spalte = 12; $zeile = 0; foreach ($gebiet AS $gbt) { - ++$spalte; - $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; + $worksheet->write($zeile, ++$spalte, strip_tags($gbt->name) . ( isset($gbt->gewicht) ? " (Gew: $gbt->gewicht)" : ""), $format_bold_border); + $worksheet->mergeCells($zeile, $spalte, 0, $spalte + 2); + $spalte += 2; } - $worksheet->write($zeile, ++$spalte + 1, 'Gesamt', $format_bold_border); - $worksheet->mergeCells($zeile, ++$spalte, 0, $spalte + 1); - $maxlength[$spalte] = 12; + $worksheet->write($zeile, ++$spalte, 'Gesamt', $format_bold_border); + $worksheet->mergeCells($zeile, $spalte, 0, $spalte + 2); $spalte = 12; $zeile = 0; foreach ($gebiet AS $gbt) { + $maxlength[$spalte +1] = $maxlength[$spalte + 2] = $maxlength[$spalte + 3] = 14; $worksheet->write($zeile + 1, ++$spalte, 'Punkte', $format_bold_border); + $worksheet->write($zeile + 1, ++$spalte, 'Punkte + Offset', $format_bold_border); $worksheet->write($zeile + 1, ++$spalte, 'Prozent', $format_bold_border); - $maxlength[$spalte] = 10; } + $maxlength[$spalte +1] = $maxlength[$spalte + 2] = 14; + $maxlength[$spalte + 3] = 17; $worksheet->write($zeile + 1, ++$spalte, 'Punkte', $format_bold_border); - $worksheet->write($zeile + 1, ++$spalte, 'Prozent', $format_bold_border); - $maxlength[$spalte] = 10; + $worksheet->write($zeile + 1, ++$spalte, 'Punkte + Offset', $format_bold_border); + $worksheet->write($zeile + 1, ++$spalte, 'Prozent (gewichtet)', $format_bold_border); $maxspalten = $spalte; @@ -1784,6 +1772,14 @@ if (isset($_REQUEST['format']) && $_REQUEST['format'] == 'xls') { $worksheet->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->punkte, $format_punkte_rot); } + if ($erg->gebiet[$gbt->gebiet_id]->punktemitoffset != '' && $erg->gebiet[$gbt->gebiet_id]->punktemitoffset != '0') + { + $worksheet->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->punktemitoffset, $format_punkte); + } + else + { + $worksheet->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->punktemitoffset, $format_punkte_rot); + } if ($erg->gebiet[$gbt->gebiet_id]->prozent != '0%') { $worksheet->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->prozent / 100, $format_prozent); @@ -1797,10 +1793,12 @@ if (isset($_REQUEST['format']) && $_REQUEST['format'] == 'xls') { $worksheet->write($zeile, ++$spalte, ''); $worksheet->write($zeile, ++$spalte, ''); + $worksheet->write($zeile, ++$spalte, ''); } } $worksheet->writeNumber($zeile, ++$spalte, $erg->gesamtpunkte, $format_punkte); - $worksheet->writeNumber($zeile, ++$spalte, $erg->gesamt, $format_punkte); + $worksheet->writeNumber($zeile, ++$spalte, $erg->gesamtoffsetpunkte, $format_punkte); + $worksheet->writeNumber($zeile, ++$spalte, $erg->gesamt / 100, $format_prozent); } } @@ -1810,165 +1808,6 @@ if (isset($_REQUEST['format']) && $_REQUEST['format'] == 'xls') $worksheet->setColumn($i, $i, $breite); } - // Worksheet ohne Physik nur für Bachelor-Studiengänge - /*if (isset($studiengangObj) && $studiengangObj->typ == 'b') - { - $worksheetOhnePhsyik =& $workbook->addWorksheet("Auswertung OHNE Physik " . ($titel_studiengang ? $stg_arr[$_REQUEST['studiengang']] : '') . ($titel_semester ? ' ' . $semester . '.Semester' : '')); - $worksheetOhnePhsyik->setInputEncoding('utf-8'); - $worksheetOhnePhsyik->setZoom(85); - - $spalte = 0; - $zeile = 0; - - $worksheetOhnePhsyik->write(0, $spalte, 'PrestudentIn_ID', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 0, 1, 0); - $maxlength[0] = 15; - $worksheetOhnePhsyik->write(0, ++$spalte, 'Nachname', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 1, 1, 1); - $maxlength[1] = 15; - $worksheetOhnePhsyik->write(0, ++$spalte, 'Vorname', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 2, 1, 2); - $maxlength[2] = 15; - $worksheetOhnePhsyik->write(0, ++$spalte, 'GebDatum', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 3, 1, 3); - $maxlength[3] = 10; - $worksheetOhnePhsyik->write(0, ++$spalte, 'G', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 4, 1, 4); - $maxlength[4] = 2; - $worksheetOhnePhsyik->write(0, ++$spalte, 'Registriert', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 5, 1, 5); - $maxlength[5] = 18; - $worksheetOhnePhsyik->write(0, ++$spalte, 'STG', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 6, 1, 6); - $maxlength[6] = 4; - $worksheetOhnePhsyik->write(0, ++$spalte, 'Studiengang', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 7, 1, 7); - $maxlength[7] = 25; - $worksheetOhnePhsyik->write(0, ++$spalte, 'S', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 8, 1, 8); - $maxlength[8] = 2; - $worksheetOhnePhsyik->write(0, ++$spalte, 'OrgForm', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 9, 1, 9); - $maxlength[9] = 8; - $worksheetOhnePhsyik->write(0, ++$spalte, 'Prio', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 10, 1, 10); - $maxlength[10] = 5; - $worksheetOhnePhsyik->write(0, ++$spalte, 'ZGV', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 11, 1, 11); - $maxlength[11] = 20; - $worksheetOhnePhsyik->write(0, ++$spalte, 'ZGV MA', $format_bold); - $worksheetOhnePhsyik->mergeCells(0, 12, 1, 12); - $maxlength[12] = 20; - - $spalte = 11; - $zeile = 0; - - foreach ($gebiet AS $gbt) - { - if ($gbt->gebiet_id == 10) - { - continue; - } - ++$spalte; - $worksheetOhnePhsyik->write($zeile, ++$spalte, strip_tags($gbt->name), $format_bold_border); - $worksheetOhnePhsyik->mergeCells($zeile, $spalte, 0, $spalte + 1); - $maxlength[$spalte] = 10; - } - $worksheetOhnePhsyik->write($zeile, ++$spalte + 1, 'Gesamt', $format_bold_border); - $worksheetOhnePhsyik->mergeCells($zeile, ++$spalte, 0, $spalte + 1); - $maxlength[$spalte] = 12; - - $spalte = 12; - $zeile = 0; - - foreach ($gebiet AS $gbt) - { - if ($gbt->gebiet_id == 10) - { - continue; - } - $worksheetOhnePhsyik->write($zeile + 1, ++$spalte, 'Punkte', $format_bold_border); - $worksheetOhnePhsyik->write($zeile + 1, ++$spalte, 'Prozent', $format_bold_border); - $maxlength[$spalte] = 10; - } - $worksheetOhnePhsyik->write($zeile + 1, ++$spalte, 'Punkte', $format_bold_border); - $worksheetOhnePhsyik->write($zeile + 1, ++$spalte, 'Prozent', $format_bold_border); - $maxlength[$spalte] = 10; - - $maxspalten = $spalte; - - $zeile = 1; - $spalte = 0; - - if (isset($ergb)) - { - foreach ($ergb AS $erg) - { - $zeile++; - $spalte = 0; - $worksheetOhnePhsyik->write($zeile, $spalte, $erg->prestudent_id); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->nachname); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->vorname); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->gebdatum, $format_date); - if ($erg->geschlecht == 'm') - { - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->geschlecht, $format_male); - } - else - { - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->geschlecht, $format_female); - } - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->registriert, $format_registriert); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->stg_kurzbz); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->stg_bez); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->ausbildungssemester); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->orgform); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $erg->prioritaet); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $zgv_arr[$erg->zgv]); - $worksheetOhnePhsyik->write($zeile, ++$spalte, $zgvma_arr[$erg->zgvma]); - foreach ($gebiet AS $gbt) - { - if ($gbt->gebiet_id == 10) - { - continue; - } - if (isset($erg->gebiet[$gbt->gebiet_id])) - { - if ($erg->gebiet[$gbt->gebiet_id]->punkte != '' && $erg->gebiet[$gbt->gebiet_id]->punkte != '0') - { - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->punkte, $format_punkte); - } - else - { - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->punkte, $format_punkte_rot); - } - if ($erg->gebiet[$gbt->gebiet_id]->prozent != '0%') - { - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->prozent / 100, $format_prozent); - } - else - { - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gebiet[$gbt->gebiet_id]->prozent / 100, $format_prozent_rot); - } - } - else - { - $worksheetOhnePhsyik->write($zeile, ++$spalte, ''); - $worksheetOhnePhsyik->write($zeile, ++$spalte, ''); - } - } - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gesamtpunkte_ohne_physik, $format_punkte); - $worksheetOhnePhsyik->writeNumber($zeile, ++$spalte, $erg->gesamt_ohne_physik, $format_punkte); - } - } - - //Die Breite der Spalten setzen - foreach ($maxlength as $i => $breite) - { - $worksheetOhnePhsyik->setColumn($i, $i, $breite); - } - }*/ - if (isset($erg_kat) && count($erg_kat) > 0) { // Creating second worksheet @@ -2159,7 +1998,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"), @@ -2574,6 +2413,10 @@ else $("#msgbox").show(); $("#msgbox").append(data["msg_success"]); } + else + { + $(".loaderIcon").hide(); + } if(data["msg_warning"] !== "") { $("#msgbox").attr("class","alert alert-warning"); @@ -2582,6 +2425,10 @@ else $("#msgbox").append(data["msg_warning"]); //$("#msgbox").html(data["msg"]).delay(2000).fadeOut(); } + else + { + $(".loaderIcon").hide(); + } if(data["msg_error"] !== "") { $("#msgbox").attr("class","alert alert-danger"); @@ -2589,6 +2436,10 @@ else $("#msgbox").show(); $("#msgbox").append(data["msg_error"]); } + else + { + $(".loaderIcon").hide(); + } }, error: function(data) { @@ -2957,22 +2808,24 @@ else Raum TG - Gesamt'; + Gesamt'; foreach ($gebiet AS $gbt) { - echo '' . $gbt->name . ''; + echo '' . $gbt->name . ''; } echo ' Punkte - Prozent'; + Punkte mit Offset + Prozent (gewichtet)'; foreach ($gebiet AS $gbt) { echo "Punkte"; + echo "Punkte mit Offset"; echo "Prozent"; } @@ -3009,7 +2862,7 @@ else $erg->raum ".($erg->teilgenommen == true ? "" : "").""; //$erg->idnachweis - $gesamtprozent = ($erg->gesamt != '' ? number_format($erg->gesamt, 2, ',', ' ') : ''); + $gesamtprozent = ($erg->gesamt != '' ? number_format($erg->gesamt, 2, ',', ' ') . ' %': ''); echo ''. $gesamtprozent .''; echo ' '; // Punkte können nur gelöscht werden, solange "Zum Reihungstest angetreten" nicht gesetzt ist @@ -3027,25 +2880,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 ' + ' . ($erg->gesamtoffsetpunkte != '' ? number_format($erg->gesamtoffsetpunkte, 2, ',', ' ') : '') . ' + '; + echo ' ' . $gesamtprozent . ' '; -/* echo ' - ' . ($erg->gesamtpunkte_ohne_physik != '' ? number_format($erg->gesamtpunkte_ohne_physik, 2, ',', ' ') : '') . ' - ';*/ -/* echo ' - ' . ($erg->gesamt_ohne_physik != '' ? number_format($erg->gesamt_ohne_physik, 2, ',', ' ') : '') . ' - - ';*/ + foreach ($gebiet AS $gbt) { if (isset($erg->gebiet[$gbt->gebiet_id])) @@ -3077,11 +2921,12 @@ else echo ' ' . ($erg->gebiet[$gbt->gebiet_id]->punkte != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->punkte, 2, ',', ' ') : '') . ''; } echo ''; + echo '' . ($erg->gebiet[$gbt->gebiet_id]->punktemitoffset != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->punktemitoffset, 2, ',', ' ') : '') . ''; echo '' . ($erg->gebiet[$gbt->gebiet_id]->prozent != '' ? number_format($erg->gebiet[$gbt->gebiet_id]->prozent, 2, ',', ' ') . ' %' : '') . ''; } else { - echo ''; + echo ''; } }