diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index e58595bb0..261667002 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -42,6 +42,7 @@ class ReihungstestJob extends FHC_Controller // Load models $this->load->model('crm/Reihungstest_model', 'ReihungstestModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); // Load helpers $this->load->helper('hlp_sancho_helper'); @@ -102,6 +103,304 @@ class ReihungstestJob extends FHC_Controller } } + public function runZentraleReihungstestAnmeldefristAssistenzJob() + { + // Get placement tests where registration date was yesterday + $result = $this->ReihungstestModel->checkReachedRegistrationDate(11000); + + $reachedRegistration_rt_arr = array(); + + if (hasData($result)) + { + $reachedRegistration_rt_arr = $result->retval; + } + elseif (isError($result)) + { + show_error($result->error); + } + + $applicants_arr = array(); + + foreach ($reachedRegistration_rt_arr as $reihungstest) + { + $applicants = $this->ReihungstestModel->getApplicantsOfPlacementTestForCronjob($reihungstest->reihungstest_id); + + if (hasData($applicants)) + { + $applicants_arr = $applicants->retval; + } + elseif (isError($applicants)) + { + show_error($applicants->error); + } + + // Get all Bachelor-Degree-Programs with Mailadress + $bachelorStudiengeange = $this->StudiengangModel->loadStudiengaengeFromTyp('b'); + + if (hasData($bachelorStudiengeange)) + { + $bachelorStudiengeange_arr = $bachelorStudiengeange->retval; + } + elseif (isError($bachelorStudiengeange)) + { + show_error($bachelorStudiengeange->error); + } + + // If a person ist an applicant of this degree-program send mail with application data + // Otherwise inform assistant, that no applicant is registered in this test + foreach ($bachelorStudiengeange_arr as $bachelorStudiengang) + { + $studiengang_kuerzel = strtoupper($bachelorStudiengang->typ.$bachelorStudiengang->kurzbz); + $applicants_list = ''; + $applicantCounter = 0; + $rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"'; + $mailReceipients = ''; // String with all mailadresses + $mailcontent_data_arr = array(); + foreach ($applicants_arr as $applicant) + { + if ($bachelorStudiengang->studiengang_kz == $applicant->studiengang_kz) + { + $mailReceipients .= $applicant->email. ';'; + $applicantCounter ++; + $applicants_list .= ' + + '. $applicant->orgform_kurzbz. ' + '. $applicant->ausbildungssemester. ' + '. $applicant->nachname. ' + '. $applicant->vorname. ' + '. $applicant->zgv_kurzbz. ' + '. $applicant->prioritaet. ' + '. $applicant->qualifikationskurs. ' + '. $applicant->email. ' + + '; + } + } + if ($applicantCounter == 0) + { + $mailcontent = '

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

'; + $mailcontent .= '

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

'; + } + else + { + $headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"'; + + $mailcontent = '

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

'; + $mailcontent .= ' +

Folgende ' . $applicantCounter . ' InteressentInnen des Studiengangs ' . $studiengang_kuerzel . ' nehmen daran teil:

+ + + + + + + + + + + + + '; + $mailcontent .= $applicants_list; + $mailcontent .= ' + +
OrgFormSemesterNachnameVornameZGVPrioritätQualikursE-Mail
+ '; + $mailcontent .= '

Mail an alle schicken

'; + } + $mailcontent_data_arr['table'] = $mailcontent; + //$mailcontent_data_arr['link'] = $this->VILESCI_RT_VERWALTUNGS_URL; + //var_dump($mailcontent_data_arr); + // Send email in Sancho design + if (!isEmptyString($mailcontent)) + { + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + array($bachelorStudiengang->email,'kindlm@technikum-wien.at'), + 'Anmeldeschluss Reihungstest ' . date_format(date_create($reihungstest->datum), 'd.m.Y') . ' ' . $reihungstest->uhrzeit . ' Uhr', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg'); + } + } + } + } + + // Checks, if an applicant was assigned to a test after Anmeldefrist + public function runZentraleReihungstestNachtraeglichHinzugefuegtJob() + { + // Get applicants that have been added to a test after Anmeldefrist + $result = $this->ReihungstestModel->getApplicantAssignedAfterDate(11000); + + $applicants_after_anmeldefrist_arr = array(); + + if (hasData($result)) + { + $applicants_after_anmeldefrist_arr = $result->retval; + } + elseif (isError($result)) + { + show_error($result->error); + } + + $studiengang = ''; + $mailReceipients = ''; // String with all mailadresses + $mailcontent_data_arr = array(); + $headerstyle = 'style="background: #DCE4EF; border: 1px solid #FFF; padding: 4px; text-align: left;"'; + $rowstyle = 'style="background-color: #EEEEEE; padding: 4px;"'; + $mailcontent = ''; + $applicants_list = ''; + + if (count($applicants_after_anmeldefrist_arr) > 0) + { + foreach ($applicants_after_anmeldefrist_arr as $applicant) + { + if ($studiengang != $applicant->studiengang_kz) + { + if ($studiengang != '' && $studiengang != $applicant->studiengang_kz) + { + $bachelorStudiengang = $this->StudiengangModel->load($studiengang); + $mailcontent .= $applicants_list; + $mailcontent .= ''; + $mailcontent .= '

Mail an alle schicken

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

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

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

Mail an alle schicken

'; + $mailcontent_data_arr['table'] = $mailcontent; + sendSanchoMail( + 'Sancho_ReihungstestteilnehmerJob', + $mailcontent_data_arr, + array($bachelorStudiengang->retval[0]->email,'kindlm@technikum-wien.at'), + 'InteressentIn nach Reihungstest-Anmeldeschluss hinzugefügt', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg'); + } + } + + public function runRemindApplicantsOfPlacementTestJob() + { + // Get placement tests with testdate within 3 working days + + // Check if today +3 days is working day + $todayPlus3 = date('Y-m-d', strtotime("+3 days")); + + if (getWorkingDays($todayPlus3, $todayPlus3) == 0) + { + // If not increase counting days till next working day + for ($i = 3; $i < 100; $i++) + { + $dateToCheck = date('Y-m-d', strtotime("+".$i." days")); + if (getWorkingDays($dateToCheck, $dateToCheck) == 1) + { + $nextWorkingDay = $dateToCheck; + break; + } + } + } + else + { + $nextWorkingDay = date('Y-m-d', strtotime("+3 days")); + } + + // Check if a placement test happens on $nextWorkingDay + $result = $this->ReihungstestModel->getTestsOnDate($nextWorkingDay, 11000); + + $testsOndate = array(); + + if (hasData($result)) + { + $testsOndate = $result->retval; + } + elseif (isError($result)) + { + show_error($result->error); + } + + $applicants_arr = array(); + + 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($applicants->error); + } + + foreach ($applicants_arr as $applicant) + { + $mailcontent_data_arr = array(); + $mailcontent_data_arr['anrede'] = $applicant->anrede; + $mailcontent_data_arr['nachname'] = $applicant->nachname; + $mailcontent_data_arr['vorname'] = $applicant->vorname; + $mailcontent_data_arr['rt_datum'] = date_format(date_create($reihungstest->datum), 'd.m.Y'); + $mailcontent_data_arr['rt_uhrzeit'] = date_format(date_create($reihungstest->uhrzeit), 'H:i'); + $mailcontent_data_arr['rt_raum'] = $applicant->planbezeichnung; + $mailcontent_data_arr['wegbeschreibung'] = $applicant->lageplan; + + sendSanchoMail( + 'Sancho_RemindApplicantsOfTest', + $mailcontent_data_arr, + array($applicant->email,'kindlm@technikum-wien.at'), + 'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder'); + } + } + } + // ------------------------------------------------------------------------ // Private methods /** @@ -118,7 +417,8 @@ class ReihungstestJob extends FHC_Controller // Prepare HTML table with study plans that have no placement tests yet if (!empty($missing_rt_arr)) { - $studienplan_list = ' + $studienplan_list + = ' '; diff --git a/application/helpers/hlp_common_helper.php b/application/helpers/hlp_common_helper.php index 425b40e3f..9ff72fb91 100644 --- a/application/helpers/hlp_common_helper.php +++ b/application/helpers/hlp_common_helper.php @@ -167,3 +167,100 @@ function isEmptyArray($array) { return ($array == null) || ($array != null && !is_array($array) || (is_array($array) && count($array) == 0)); } + +/** + * The function returns the number of business days between two dates and it skips the (static) holidays + * @param string $startDate Date (YYYY-MM-DD) to start counting from (included) + * @param string $endDate Date (YYYY-MM-DD) to end counting (included) + * @param array $dynamic_holidays Optional. Static holidays that have the same date every year are included automatically. + * You can give an array with dates (YYYY-MM-DD) that should be included furthermore + * @return integer Number of working days between $startDate and $endDate + */ +function getWorkingDays($startDate, $endDate, $dynamic_holidays = array()) +{ + //Get year of $startDate + $startYear = substr($startDate, 0, 4); + //Get year of $endDate + $endYear = substr($endDate, 0, 4); + + $datediff = $endYear - $startYear; + $austrian_holidays = array(); + for ($i = 0; $i <= $datediff; $i++) + { + $austrian_holidays[] = $startYear.'-01-01'; // Neujahr + $austrian_holidays[] = $startYear.'-01-06'; // 3 Könige + $austrian_holidays[] = $startYear.'-05-01'; // Staatsfeiertag + $austrian_holidays[] = $startYear.'-08-15'; // Maria Himmelfahrt + $austrian_holidays[] = $startYear.'-10-26'; // Nationalfeiertag + $austrian_holidays[] = $startYear.'-11-01'; // Allerheiligen + $austrian_holidays[] = $startYear.'-12-08'; // Maria Empfängnis + $austrian_holidays[] = $startYear.'-12-25'; // Weihnachten + $austrian_holidays[] = $startYear.'-12-26'; // Stefanitag + $startYear++; + } + if (count($dynamic_holidays) > 0) + { + $austrian_holidays = array_merge($austrian_holidays, $dynamic_holidays); + } + // do strtotime calculations just once + $endDate = strtotime($endDate); + $startDate = strtotime($startDate); + + //The total number of days between the two dates. We compute the no. of seconds and divide it to 60*60*24 + //We add one to inlude both dates in the interval. + $days = ($endDate - $startDate) / 86400 + 1; + + $no_full_weeks = floor($days / 7); + $no_remaining_days = fmod($days, 7); + + //It will return 1 if it's Monday,.. ,7 for Sunday + $the_first_day_of_week = date("N", $startDate); + $the_last_day_of_week = date("N", $endDate); + + //---->The two can be equal in leap years when february has 29 days, the equal sign is added here + //In the first case the whole interval is within a week, in the second case the interval falls in two weeks. + if ($the_first_day_of_week <= $the_last_day_of_week) + { + if ($the_first_day_of_week <= 6 && 6 <= $the_last_day_of_week) $no_remaining_days--; + if ($the_first_day_of_week <= 7 && 7 <= $the_last_day_of_week) $no_remaining_days--; + } + else { + // (edit by Tokes to fix an edge case where the start day was a Sunday + // and the end day was NOT a Saturday) + + // the day of the week for start is later than the day of the week for end + if ($the_first_day_of_week == 7) { + // if the start date is a Sunday, then we definitely subtract 1 day + $no_remaining_days--; + + if ($the_last_day_of_week == 6) { + // if the end date is a Saturday, then we subtract another day + $no_remaining_days--; + } + } + else { + // the start date was a Saturday (or earlier), and the end date was (Mon..Fri) + // so we skip an entire weekend and subtract 2 days + $no_remaining_days -= 2; + } + } + + //The no. of business days is: (number of weeks between the two dates) * (5 working days) + the remainder + //---->february in none leap years gave a remainder of 0 but still calculated weekends between first and last day, this is one way to fix it + $workingDays = $no_full_weeks * 5; + if ($no_remaining_days > 0 ) + { + $workingDays += $no_remaining_days; + } + + //We subtract the holidays + foreach($austrian_holidays as $key=>$value) + { + $time_stamp=strtotime($value); + //If the holiday doesn't fall in weekend + if ($startDate <= $time_stamp && $time_stamp <= $endDate && date("N",$time_stamp) != 6 && date("N",$time_stamp) != 7) + $workingDays--; + } + + return $workingDays; +} \ No newline at end of file diff --git a/application/helpers/hlp_sancho_helper.php b/application/helpers/hlp_sancho_helper.php index 6e311897f..204b17f11 100644 --- a/application/helpers/hlp_sancho_helper.php +++ b/application/helpers/hlp_sancho_helper.php @@ -29,7 +29,7 @@ const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg'; /** * Send single Mail with Sancho Design and Layout. * @param string $vorlage_kurzbz Name of the template for specific mail content. - * @param array $vorlage_data Associative array with specific mail content varibales + * @param array $vorlage_data Associative array with specific mail content variables * to be replaced in the content template. * @param string $to Email-adress. * @param string $subject Subject of mail. diff --git a/application/models/crm/Reihungstest_model.php b/application/models/crm/Reihungstest_model.php index 9614c2e38..d0efb8bc8 100644 --- a/application/models/crm/Reihungstest_model.php +++ b/application/models/crm/Reihungstest_model.php @@ -224,4 +224,270 @@ class Reihungstest_model extends DB_Model return $this->execQuery($query); } + + /** + * Checks if a registration date (Anmeldefrist) of a placement test has been reached yesterday. + * @param integer $studiengang_kz Optional. Kennzahl of degree program whose registration date should be checked. + * @return array Returns object array with reihungstest_ids whose registration date has been reached yesterday. + */ + public function checkReachedRegistrationDate($studiengang_kz = null) + { + $query = ' + SELECT * + FROM PUBLIC.tbl_reihungstest + WHERE anmeldefrist = ( + SELECT CURRENT_DATE - 1 + ) + '; + + $parametersArray = array(); + + if (!isEmptyString($studiengang_kz)) + { + $query .= ' AND studiengang_kz = ?'; + array_push($parametersArray, $studiengang_kz); + } + + return $this->execQuery($query, $parametersArray); + } + + /** + * Loads all applicants of a placement test for runZentraleReihungstestAnmeldefristAssistenzJob + * @param integer $reihungstest_id ID of placement test + * @return array Returns object array with data of applicants. + */ + public function getApplicantsOfPlacementTestForCronjob($reihungstest_id) + { + $query = ' + SELECT tbl_rt_person.person_id, + ps.prestudent_id, + tbl_studienplan.orgform_kurzbz, + tbl_prestudentstatus.studienplan_id, + tbl_prestudentstatus.ausbildungssemester, + nachname, + vorname, + tbl_zgv.zgv_kurzbz, + ps.studiengang_kz, + CASE WHEN tbl_prestudentstatus.statusgrund_id=9 + THEN \'Ja\' + ELSE \'Nein\' + END AS "qualifikationskurs", + ( + SELECT count(*) AS prio_relativ + FROM ( + SELECT *, + ( + SELECT status_kurzbz + FROM PUBLIC.tbl_prestudentstatus + WHERE prestudent_id = pst.prestudent_id + ORDER BY datum DESC, + tbl_prestudentstatus.insertamum DESC LIMIT 1 + ) AS laststatus + FROM PUBLIC.tbl_prestudent pst + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + WHERE person_id = ( + SELECT person_id + FROM PUBLIC.tbl_prestudent + WHERE prestudent_id = ps.prestudent_id + ) + AND studiensemester_kurzbz = ( + SELECT studiensemester_kurzbz + FROM PUBLIC.tbl_prestudentstatus + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz = \'Interessent\' LIMIT 1 + ) + AND status_kurzbz = \'Interessent\' + ) prest + WHERE laststatus NOT IN (\'Abbrecher\', \'Abgewiesener\', \'Absolvent\') + AND priorisierung <= ( + SELECT priorisierung + FROM PUBLIC.tbl_prestudent + WHERE prestudent_id = ps.prestudent_id + ) + ) AS "prioritaet", + ( + SELECT kontakt + FROM PUBLIC.tbl_kontakt + WHERE kontakttyp = \'email\' + AND zustellung = true + AND person_id = tbl_rt_person.person_id + ORDER BY insertamum DESC, + updateamum DESC LIMIT 1 + ) AS "email" + FROM PUBLIC.tbl_rt_person + JOIN PUBLIC.tbl_person ON (tbl_rt_person.person_id = tbl_person.person_id) + JOIN PUBLIC.tbl_reihungstest rt ON (rt_id = reihungstest_id) + JOIN PUBLIC.tbl_prestudent ps ON (ps.person_id = tbl_rt_person.person_id) + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + JOIN lehre.tbl_studienplan ON (tbl_prestudentstatus.studienplan_id = tbl_studienplan.studienplan_id) + LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code) + WHERE rt_id = ? + AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\' + AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz + AND bewerbung_abgeschicktamum IS NOT NULL + AND bestaetigtam IS NOT NULL + ORDER BY studiengang_kz, + orgform_kurzbz, + prioritaet, + nachname, + vorname, + person_id + '; + + return $this->execQuery($query, array($reihungstest_id)); + } + + /** + * Checks if an Applicant was assigned to a plament test after Anmeldefrist and before Test-Date + * @param integer $studiengang_kz Kennzahl of degree program those tests should be checked + * @return array Returns object array with data of applicants. + */ + public function getApplicantAssignedAfterDate($studiengang_kz) + { + $query = ' + SELECT tbl_rt_person.person_id, + ps.prestudent_id, + rt.datum, + rt.uhrzeit, + tbl_studienplan.orgform_kurzbz, + tbl_prestudentstatus.studienplan_id, + tbl_prestudentstatus.ausbildungssemester, + nachname, + vorname, + tbl_zgv.zgv_kurzbz, + ps.studiengang_kz, + CASE WHEN tbl_prestudentstatus.statusgrund_id=9 + THEN \'Ja\' + ELSE \'Nein\' + END AS "qualifikationskurs", + ( + SELECT count(*) AS prio_relativ + FROM ( + SELECT *, + ( + SELECT status_kurzbz + FROM PUBLIC.tbl_prestudentstatus + WHERE prestudent_id = pst.prestudent_id + ORDER BY datum DESC, + tbl_prestudentstatus.insertamum DESC LIMIT 1 + ) AS laststatus + FROM PUBLIC.tbl_prestudent pst + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + WHERE person_id = ( + SELECT person_id + FROM PUBLIC.tbl_prestudent + WHERE prestudent_id = ps.prestudent_id + ) + AND studiensemester_kurzbz = ( + SELECT studiensemester_kurzbz + FROM PUBLIC.tbl_prestudentstatus + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz = \'Interessent\' LIMIT 1 + ) + AND status_kurzbz = \'Interessent\' + ) prest + WHERE laststatus NOT IN (\'Abbrecher\', \'Abgewiesener\', \'Absolvent\') + AND priorisierung <= ( + SELECT priorisierung + FROM PUBLIC.tbl_prestudent + WHERE prestudent_id = ps.prestudent_id + ) + ) AS "prioritaet", + ( + SELECT kontakt + FROM PUBLIC.tbl_kontakt + WHERE kontakttyp = \'email\' + AND zustellung = true + AND person_id = tbl_rt_person.person_id + ORDER BY insertamum DESC, + updateamum DESC LIMIT 1 + ) AS "email" + FROM PUBLIC.tbl_rt_person + JOIN PUBLIC.tbl_person ON (tbl_rt_person.person_id = tbl_person.person_id) + JOIN PUBLIC.tbl_reihungstest rt ON (rt_id = reihungstest_id) + JOIN PUBLIC.tbl_prestudent ps ON (ps.person_id = tbl_rt_person.person_id) + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + JOIN lehre.tbl_studienplan ON (tbl_prestudentstatus.studienplan_id = tbl_studienplan.studienplan_id) + LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code) + WHERE rt.studiengang_kz = ? + AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\' + AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz + AND bewerbung_abgeschicktamum IS NOT NULL + AND bestaetigtam IS NOT NULL + AND anmeldefrist < (SELECT CURRENT_DATE) + AND rt.datum > (SELECT CURRENT_DATE) + --AND tbl_rt_person.insertamum > anmeldefrist + --AND tbl_rt_person.insertamum < rt.datum + AND tbl_rt_person.insertamum::date = (SELECT CURRENT_DATE -1) + ORDER BY studiengang_kz, + orgform_kurzbz, + prioritaet, + nachname, + vorname, + person_id + '; + + return $this->execQuery($query, array($studiengang_kz)); + } + + /** + * Loads all applicants of a placement test + * @param integer $reihungstest_id ID of placement test + * @return array Returns object array with data of applicants. + */ + public function getApplicantsOfPlacementTest($reihungstest_id) + { + $query = ' + SELECT DISTINCT tbl_rt_person.person_id, + anrede, + nachname, + vorname, + ( + SELECT kontakt + FROM PUBLIC.tbl_kontakt + WHERE kontakttyp = \'email\' + AND zustellung = true + AND person_id = tbl_rt_person.person_id + ORDER BY insertamum DESC, + updateamum DESC LIMIT 1 + ) AS "email", + tbl_ort.planbezeichnung, + tbl_ort.lageplan + FROM PUBLIC.tbl_rt_person + JOIN PUBLIC.tbl_person ON (tbl_rt_person.person_id = tbl_person.person_id) + JOIN PUBLIC.tbl_reihungstest rt ON (rt_id = reihungstest_id) + JOIN PUBLIC.tbl_prestudent ps ON (ps.person_id = tbl_rt_person.person_id) + JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + LEFT JOIN bis.tbl_zgv ON (ps.zgv_code = tbl_zgv.zgv_code) + LEFT JOIN PUBLIC.tbl_ort ON (tbl_rt_person.ort_kurzbz = tbl_ort.ort_kurzbz) + WHERE rt_id = ? + AND get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) = \'Interessent\' + AND tbl_prestudentstatus.studiensemester_kurzbz = rt.studiensemester_kurzbz + AND bewerbung_abgeschicktamum IS NOT NULL + AND bestaetigtam IS NOT NULL + ORDER BY nachname, + vorname, + person_id + '; + + return $this->execQuery($query, array($reihungstest_id)); + } + + /** + * Loads all placement tests of the given day and optional degree program + * @param string $date Date of the tests to be loaded (YYYY-MM-DD) + * @param integer $studiengang_kz Optional. Kennzahl of degree program to load + * @return array Returns object array with data of applicants. + */ + public function getTestsOnDate($date, $studiengang_kz = null) + { + $query = ' + SELECT * + FROM PUBLIC.tbl_reihungstest + WHERE datum = ? + AND studiengang_kz = ? + '; + + return $this->execQuery($query, array($date, $studiengang_kz)); + } } \ No newline at end of file diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 78c81836f..1c9c6e944 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -429,4 +429,23 @@ class Studiengang_model extends DB_Model return $this->execQuery($query, array($studiensemester_kurzbz)); } + + /** + * Loads degree programs of the given type + * @param string $typ Type of degree programs to be loaded + * @return array + */ + public function loadStudiengaengeFromTyp($typ) + { + $query = "SELECT + distinct tbl_studiengang.* + FROM + public.tbl_studiengang + WHERE + tbl_studiengang.typ=? + ORDER BY + kurzbz"; + + return $this->execQuery($query, array($typ)); + } } diff --git a/skin/images/sancho/sancho_footer.jpg b/skin/images/sancho/sancho_footer.jpg index 94274de92..ecf234021 100644 Binary files a/skin/images/sancho/sancho_footer.jpg and b/skin/images/sancho/sancho_footer.jpg differ diff --git a/skin/images/sancho/sancho_footer_min_bw.jpg b/skin/images/sancho/sancho_footer_min_bw.jpg index d457ef19e..7cde838cb 100644 Binary files a/skin/images/sancho/sancho_footer_min_bw.jpg and b/skin/images/sancho/sancho_footer_min_bw.jpg differ