diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php new file mode 100644 index 000000000..5d00611fd --- /dev/null +++ b/application/controllers/jobs/OneTimeMessages.php @@ -0,0 +1,117 @@ +load->model('CL/Messages_model', 'CLMessagesModel'); + } + + /** + * Sends the same message to all the applicants whith: + * - Status set as "Wartender" + * - The given study course type (b = bachelor, m = master) + * - The given semester (ex WS2020) + * - How long since applicant (months) + * - The given template id to be used as message subject and body (vorlage_kurzbz) + */ + public function sendMessageToApplicantsStillWaiting($studyCourseType, $semester, $months, $messageTemplate) + { + $this->logInfo('Send message to applicants still waiting start'); + + $queryParams = array( + $semester, + $studyCourseType, + $studyCourseType, + $semester, + $studyCourseType + ); + + $dbModel = new DB_Model(); + + $dbPrestudents = $dbModel->execReadOnlyQuery( + 'SELECT p.prestudent_id + FROM public.tbl_prestudent p + JOIN public.tbl_prestudentstatus ps USING (prestudent_id) + JOIN public.tbl_studiengang s USING (studiengang_kz) + WHERE ps.status_kurzbz = \'Interessent\' + AND ps.studiensemester_kurzbz = ? + AND ps.datum >= NOW() - \''.$months.' months\'::interval + AND s.typ = ? + AND p.prestudent_id NOT IN ( + SELECT pp.prestudent_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Aufgenommener\' + AND ss.typ = ? + AND pp.prestudent_id = p.prestudent_id + ) + AND p.prestudent_id NOT IN ( + SELECT pp.prestudent_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Bewerber\' + AND pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.prestudent_id = p.prestudent_id + )', + $queryParams + ); + + if (isError($dbPrestudents)) + { + $this->logError(getError($dbPrestudents), $queryParams); + } + elseif (!hasData($dbPrestudents)) + { + $this->logInfo('There were no users to send message'); + } + else + { + $prestudentIdsArray = array(); + + foreach (getData($dbPrestudents) as $dbPrestudent) + { + $prestudentIdsArray[] = $dbPrestudent->prestudent_id; + } + + $sendMessage = $this->CLMessagesModel->sendExplicitTemplate( + $prestudentIdsArray, // prestudents id + null, // organization unit + $messageTemplate, // template id + null // extra variables + ); + + if (isError($sendMessage)) + { + $this->logError( + getError($sendMessage), + array( + 'prestudents' => $prestudentIdsArray, + 'template' => $messageTemplate + ) + ); + } + } + + $this->logInfo('Send message to applicants still waiting end'); + } +} + diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index cbb42543f..a162d6639 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -430,8 +430,8 @@ class Messages_model extends CI_Model public function sendExplicitTemplate($prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) { // Retrieves the sender id - $sender_id = getAuthPersonId(); - if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + $sender_id = isLogged() ? getAuthPersonId() : null; + if (!is_numeric($sender_id)) $sender_id = $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID); // Retrieves message vars data for the given user/s $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); @@ -454,12 +454,12 @@ class Messages_model extends CI_Model if (is_array($msgVars)) $msgVarsDataArray = array_merge($msgVarsDataArray, $msgVars); $message = $this->messagelib->sendMessageUserTemplate( - $msgVarsDataArray['person_id'], // receiversPersonId - $vorlage_kurzbz, // vorlage - $msgVarsDataArray, // parseData - null, // orgform - $sender_id, // sender_id - $oe_kurzbz // senderOU + $msgVarsDataArray['person_id'], // receiversPersonId + $vorlage_kurzbz, // vorlage + $msgVarsDataArray, // parseData + null, // orgform + $sender_id, // sender_id + $oe_kurzbz // senderOU ); if (isError($message)) return $message;