From e52e1fa001eb7e0b607157414e06fa4abc1ccde2 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 27 May 2019 10:42:02 +0200 Subject: [PATCH] Added job that informs about new applications sent after reihungstest absolved. Added job that 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. --- .../controllers/jobs/ReihungstestJob.php | 876 +++++++++++------- 1 file changed, 528 insertions(+), 348 deletions(-) diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 2ef2d30f7..e0c2c8336 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -1,33 +1,32 @@ 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('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)) @@ -39,8 +38,8 @@ class ReihungstestJob extends CLI_Controller show_error($result->error); } - // Get free places - $result = $this->ReihungstestModel->getFreePlaces(); + // Get free places + $result = $this->ReihungstestModel->getFreePlaces(); $free_places_arr = array(); if (hasData($result)) @@ -52,8 +51,8 @@ class ReihungstestJob extends CLI_Controller show_error($result->error); } - // 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)) @@ -66,15 +65,15 @@ class ReihungstestJob extends CLI_Controller } } - /** - * runZentraleReihungstestAnmeldefristAssistenzJob - */ - public function runZentraleReihungstestAnmeldefristAssistenzJob() - { - // Get placement tests where registration date was yesterday - $result = $this->ReihungstestModel->checkReachedRegistrationDate(11000); + /** + * runZentraleReihungstestAnmeldefristAssistenzJob + */ + public function runZentraleReihungstestAnmeldefristAssistenzJob() + { + // Get placement tests where registration date was yesterday + $result = $this->ReihungstestModel->checkReachedRegistrationDate(11000); - $reachedRegistration_rt_arr = array(); + $reachedRegistration_rt_arr = array(); if (hasData($result)) { @@ -85,11 +84,11 @@ class ReihungstestJob extends CLI_Controller show_error($result->error); } - $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)) { @@ -100,8 +99,8 @@ class ReihungstestJob extends CLI_Controller show_error($applicants->error); } - // Get all Bachelor-Degree-Programs with Mailadress - $bachelorStudiengeange = $this->StudiengangModel->loadStudiengaengeFromTyp('b'); + // Get all Bachelor-Degree-Programs with Mailadress + $bachelorStudiengeange = $this->StudiengangModel->loadStudiengaengeFromTyp('b'); if (hasData($bachelorStudiengeange)) { @@ -140,110 +139,110 @@ class ReihungstestJob extends CLI_Controller '. $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;"'; + } + } + 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 .= ' + $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 .= ' + $mailcontent .= $applicants_list; + $mailcontent .= '
OrgFormSemesterNachnameVornameZGVPrioritätQualikursE-MailOrgFormSemesterNachnameVornameZGVPrioritätQualikursE-Mail
'; - $mailcontent .= '

Mail an alle schicken

'; - } - $mailcontent_data_arr['table'] = $mailcontent; + $mailcontent .= '

Mail an alle schicken

'; + } + $mailcontent_data_arr['table'] = $mailcontent; - // 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'); - } - } - } - } + // 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); + /** + * 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(); + $applicants_after_anmeldefrist_arr = array(); - if (hasData($result)) - { - $applicants_after_anmeldefrist_arr = $result->retval; - } - elseif (isError($result)) - { - show_error($result->error); - } + 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 = ''; + $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(); - } + 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 .= ' + $mailcontent = '

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

'; + $mailcontent .= ' @@ -259,11 +258,11 @@ class ReihungstestJob extends CLI_Controller '; - } + } - $studiengang = $applicant->studiengang_kz; - $mailReceipients .= $applicant->email . ';'; - $applicants_list .= ' + $studiengang = $applicant->studiengang_kz; + $mailReceipients .= $applicant->email . ';'; + $applicants_list .= ' @@ -277,180 +276,349 @@ class ReihungstestJob extends CLI_Controller '; - }; - $bachelorStudiengang = $this->StudiengangModel->load($studiengang); - $mailcontent .= $applicants_list; - $mailcontent .= '
Datum des Tests
' . date_format(date_create($applicant->datum), 'd.m.Y') . ' ' . $applicant->uhrzeit . '' . $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'); - } - } + }; + $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'); + } + } - /* - * Sends an email to all applicants of a placement test to remind them 3 working days before - * - * @param integer $degreeProgram. Kennzahl of Degree Program to check - * @param string $bcc. Optional. BCC-Mailadress to send the Mails to - * @param string $from. Optional. Sender-Mailadress shown to recipient - */ - public function remindApplicantsOfPlacementTest() - { - $degreeProgram = $this->input->get('degreeprogram'); - $bcc = $this->input->get('bcc'); - $from = $this->input->get('from'); + /* + * Sends an email to all applicants of a placement test to remind them 3 working days before + * + * @param integer $degreeProgram. Kennzahl of Degree Program to check + * @param string $bcc. Optional. BCC-Mailadress to send the Mails to + * @param string $from. Optional. Sender-Mailadress shown to recipient + */ + public function remindApplicantsOfPlacementTest() + { + $degreeProgram = $this->input->get('degreeprogram'); + $bcc = $this->input->get('bcc'); + $from = $this->input->get('from'); - // Encode Params - if ($bcc != '') - { - $bcc = urldecode($bcc); - } - if ($from != '') - { - $from = urldecode($from); - } + // Encode Params + if ($bcc != '') + { + $bcc = urldecode($bcc); + } + if ($from != '') + { + $from = urldecode($from); + } - // Get placement tests with testdate within the next 2 weeks - $resultNextTestDates = $this->ReihungstestModel->getNextPlacementtests($degreeProgram, 14); - if (hasData($resultNextTestDates)) - { - $nextTestDates = $resultNextTestDates->retval; - $enddate = ''; - // Loop through the dates - foreach ($nextTestDates as $testDates) - { - $workingdays = 0; - $testsOndate = array(); + // 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 3 working days are reached + for ($i = 1; ; $i++) + { + if (isDateWorkingDay($testDates->datum, $i) === true) + { + $workingdays++; + } + if ($workingdays == 3) + { + $enddate = date("Y-m-d", strtotime("$testDates->datum -" . $i . " days")); + break; + } + else + { + continue; + } + } - // If $enddate is today -> load all tests of $testDates->datum - if (date("Y-m-d", strtotime($enddate)) == date('Y-m-d')) - { - $resultTestsOnDate = $this->ReihungstestModel->getTestsOnDate($testDates->datum, $degreeProgram); + // If $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($resultTestsOnDate->error); - } - } + if (hasData($resultTestsOnDate)) + { + $testsOndate = $resultTestsOnDate->retval; + } + elseif (isError($resultTestsOnDate)) + { + show_error($resultTestsOnDate->error); + } + } - 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($applicants->error); - } + 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; + 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, - $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); + } + } + } + } + } + } - // ------------------------------------------------------------------------ - // 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;" '; + /** + * 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'); - // Prepare HTML table with study plans that have no placement tests yet - if (!empty($missing_rt_arr)) - { - $studienplan_list - = ' - + $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($yesterdays_applicants_arr->error); + } + + // Get all other prestudenten of the given persons. + if (!isEmptyArray($person_id_arr)) + { + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->PrestudentModel->addDistinct(); + $this->PrestudentModel->addSelect(' + person_id, + tbl_reihungstest.studiensemester_kurzbz, + tbl_reihungstest.reihungstest_id, + (SELECT(tbl_reihungstest.datum::text || \' \' || tbl_reihungstest.uhrzeit::text)::timestamp) AS reihungstest_timestamp + '); + $this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $this->PrestudentModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + $this->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_rt_person', 'person_id'); + $this->PrestudentModel->addJoin('public.tbl_reihungstest', 'tbl_reihungstest.reihungstest_id = tbl_rt_person.rt_id'); + + // Store them, if they have already absolved a placement test in the same study term they have applied for. + $placement_absolvents_arr = $this->PrestudentModel->loadWhere(' + person_id IN (' . implode(', ', $person_id_arr) . ') AND + typ = \'b\' AND + teilgenommen = \'t\' AND + tbl_reihungstest.studiensemester_kurzbz IN ( + SELECT + studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + ende >= now() + ) + '); + } + + // Store data to be send in the email-link + $result_arr = array(); + foreach($yesterdays_applicants_arr->retval as $yesterdays_applicant) + { + foreach ($placement_absolvents_arr->retval as $placement_absolvent) + { + if ($yesterdays_applicant->person_id == $placement_absolvent->person_id && + $yesterdays_applicant->studiensemester_kurzbz == $placement_absolvent->studiensemester_kurzbz && + $yesterdays_applicant->bewerbung_abgeschicktamum >= $placement_absolvent->reihungstest_timestamp) + { + $obj = new stdClass(); + $obj->prestudent_id = $yesterdays_applicant->prestudent_id; // prestudent_id of the yesterdays applicant + $obj->studiengang_kz = $yesterdays_applicant->studiengang_kz; // study program of interest of the yesterdays applicant + $obj->reihungstest_id = $placement_absolvent->reihungstest_id; // reihungstest_id of absolved reihungstest of that person + + $result_arr[]= $obj; + } + } + } + + // Sort by STG. This is important to send the mails clustered by STG to the different STG assistances. + usort($result_arr, function ($a, $b) + { + if ($a->studiengang_kz == $b->studiengang_kz) { + return 0; + } + return ($a->studiengang_kz < $b->studiengang_kz) ? -1 : 1; + }); + + $to = ''; // mail recipient (stg assistance) + $content_arr = array(); // url paths to the new applicants + $base_link = base_url('vilesci/stammdaten/auswertung_fhtw.php'); + + $i = 0; // loop counter + $len = count($result_arr); + + // Loop trough list of new applicants + foreach($result_arr as $result) + { + $studiengang = $this->StudiengangModel->load($result->studiengang_kz); + $mail_stg_assistance = $studiengang->retval[0]->email; + + // If first loop + if ($i == 0) + { + $to = $mail_stg_assistance; // set recipient initially + } + + // If new study is encountered but is not the first loop + if ($to != $mail_stg_assistance && $i != 0) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + + // Reset content for new study applicants & reset recipient (new stg assistance) + $content_arr = array($base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id); + $to = $mail_stg_assistance; + } + // If same study + else + { + // just add content + $content_arr[]= $base_link. '?reihungstest='. $result->reihungstest_id. '&prestudent_id='. $result->prestudent_id; // add to content + } + + // If last loop + if (($i == $len - 1)) + { + // Prepare content for mail template + $content_data_arr = $this->_getContentDataNewApplicant($content_arr); + + // Send mail + sendSanchoMail( + 'BewerberNachReihungstest', + $content_data_arr, + $to, + 'Neue Bewerbungen nach absolviertem Reihungstest', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + } + $i++; // iterate counter + } + } + + // ------------------------------------------------------------------------ + // Private methods + /** + * Returns associative array with data as needed in the reihungstest job template. + * @param array $missing_rt_arr Array with studienpläne, which have no assigned placement tests. + * @param array $free_places_arr Array with info and amount of free placement test places. + * @return array + */ + private function _getContentData($missing_rt_arr, $free_places_arr) + { + $style_tbl1 = ' cellpadding="0" cellspacing="10" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + $style_tbl2 = ' cellpadding="0" cellspacing="20" width="100%" style="font-family: courier, verdana, sans-serif; font-size: 0.95em; border: 1px solid #000000;" '; + + // Prepare HTML table with study plans that have no placement tests yet + if (!empty($missing_rt_arr)) { + $studienplan_list + = ' + '; - foreach ($missing_rt_arr as $rt) - { - $studienplan_list .= ' - '. $rt->bezeichnung. ' + 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 Reihungstesttermine @@ -458,51 +626,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. ' + ' . $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++; + } + + $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, @@ -535,42 +719,38 @@ 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 + )); + } + } + } + } + } + } } +