diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php new file mode 100644 index 000000000..39e0a946c --- /dev/null +++ b/application/controllers/jobs/OneTimeMessages.php @@ -0,0 +1,122 @@ +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) + * The sender of all the messages is specified by the parameter senderId (sender person_id) + */ + public function sendMessageToApplicantsStillWaiting($senderId, $studyCourseType, $semester, $months, $messageTemplate) + { + $this->logInfo('Send message to applicants still waiting start'); + + $queryParams = array( + $semester, + $studyCourseType, + $semester, + $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 = \'Wartender\' + AND ps.studiensemester_kurzbz = ? + AND ps.datum <= NOW() - \''.$months.' months\'::interval + AND s.typ = ? + AND NOT EXISTS ( + SELECT pp.person_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 pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.person_id = p.person_id + ) + AND NOT EXISTS ( + SELECT pp.person_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 = \'Student\' + AND pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.person_id = p.person_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->sendExplicitTemplateSenderId( + $senderId, // sender person id + $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('Total amount of prestudents: '.count($prestudentIdsArray)); + } + + $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..119f9b37c 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -422,10 +422,10 @@ class Messages_model extends CI_Model return success('Messages sent successfully'); } - + /** - * Sends a new message using the given template and information present in parameter prestudents - * Extra variables can be added using parameter $msgVars + * Wrapper method for sendExplicitTemplateSenderId + * The sender id is retrieved from the authentication session, if not present an error would be raised */ public function sendExplicitTemplate($prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) { @@ -433,6 +433,15 @@ class Messages_model extends CI_Model $sender_id = getAuthPersonId(); if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + return $this->sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars); + } + + /** + * Sends a new message using the given template and information present in parameter prestudents + * Extra variables can be added using parameter $msgVars + */ + public function sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) + { // Retrieves message vars data for the given user/s $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); if (isError($msgVarsData)) show_error(getError($msgVarsData)); @@ -454,12 +463,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;