diff --git a/application/controllers/system/Messages.php b/application/controllers/system/Messages.php index 4dac2663f..44081da16 100644 --- a/application/controllers/system/Messages.php +++ b/application/controllers/system/Messages.php @@ -15,6 +15,7 @@ class Messages extends Auth_Controller array( 'write' => array('basis/message:rw', 'infocenter:rw'), 'send' => array('basis/message:rw', 'infocenter:rw'), + 'sendJson' => array('basis/message:rw', 'infocenter:rw'), 'getVorlage' => array('basis/message:r', 'infocenter:r'), 'parseMessageText' => array('basis/message:r', 'infocenter:r'), 'getMessageFromIds' => array('basis/message:r', 'infocenter:r') @@ -190,6 +191,38 @@ class Messages extends Auth_Controller * send */ public function send($sender_id = null) + { + $result = $this->_execSend($sender_id); + + if (isSuccess($result)) + { + echo "Messages sent successfully"; + } + else + { + echo "Error when sending message"; + } + } + + /** + * Send message, response is in JSON format + * @param $sender_id + */ + public function sendJson($sender_id = null) + { + $result = $this->_execSend($sender_id); + + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($result)); + } + + /** + * Executes message sending + * @param $sender_id + * @return array wether execution was successfull - error or success + */ + private function _execSend($sender_id) { if ($sender_id === null) { @@ -197,18 +230,19 @@ class Messages extends Auth_Controller if (!hasData($user_person)) { - show_error('no sender'); + return error('no sender'); } $sender_id = $user_person->retval[0]->person_id; } - $error = false; - $subject = $this->input->post('subject'); $body = $this->input->post('body'); $prestudents = $this->input->post('prestudents'); $persons = $this->input->post('persons'); $relationmessage_id = $this->input->post('relationmessage_id'); + $vorlage_kurzbz = $this->input->post('vorlage_kurzbz'); + $oe_kurzbz = $this->input->post('oe_kurzbz'); + $msgvars = $this->input->post('msgvars'); if (!isset($relationmessage_id) || $relationmessage_id == '') { @@ -240,10 +274,8 @@ class Messages extends Auth_Controller $dataArray[$newKey] = $dataArray[$key]; } - $parsedText = $this->messagelib->parseMessageText($body, $dataArray); - - $oe_kurzbz = null; - if (hasData($prestudentsData)) + // if oe not given, get from prestudent + if (isEmptyString($oe_kurzbz) && hasData($prestudentsData)) { for ($p = 0; $p < count($prestudentsData->retval); $p++) { @@ -254,12 +286,29 @@ class Messages extends Auth_Controller } } - $msg = $this->messagelib->sendMessage($sender_id, $dataArray['person_id'], $subject, $parsedText, PRIORITY_NORMAL, $relationmessage_id, $oe_kurzbz); + // send without vorlage + if (isEmptyString($vorlage_kurzbz)) + { + $parsedText = $this->messagelib->parseMessageText($body, $dataArray); + $msg = $this->messagelib->sendMessage($sender_id, $dataArray['person_id'], $subject, $parsedText, PRIORITY_NORMAL, $relationmessage_id, $oe_kurzbz); + } + // send with vorlage + else + { + if (isset($msgvars) && is_array($msgvars)) + { + //additional message variables + foreach ($msgvars as $key => $msgvar) + { + $dataArray[$key] = $msgvar; + } + } + $msg = $this->messagelib->sendMessageVorlage($sender_id, $dataArray['person_id'], $vorlage_kurzbz, $oe_kurzbz, $dataArray); + } + if ($msg->error) { - show_error($msg->retval); - $error = true; - break; + return error($msg->msg); } // Loads the person log library @@ -279,12 +328,9 @@ class Messages extends Auth_Controller null, $this->uid ); - } - } - if (!$error) - { - echo "Messages sent successfully"; + return success($msg->retval); + } } } @@ -383,8 +429,10 @@ class Messages extends Auth_Controller * @param $msg_id * @param $receiver_id */ - public function getMessageFromIds($msg_id, $receiver_id) + public function getMessageFromIds() { + $msg_id = $this->input->get('msg_id'); + $receiver_id = $this->input->get('receiver_id'); $msg = $this->messagelib->getMessage($msg_id, $receiver_id); $this->output diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index fdc0db7d0..e669a105a 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -11,6 +11,7 @@ class InfoCenter extends Auth_Controller // App and Verarbeitungstaetigkeit name for logging const APP = 'infocenter'; const TAETIGKEIT = 'bewerbung'; + const FREIGABE_MAIL_VORLAGE = 'InfocenterMailFreigabeAssistenz'; const INFOCENTER_URI = 'system/infocenter/InfoCenter'; // URL prefix for this controller const INDEX_PAGE = 'index'; @@ -83,9 +84,10 @@ class InfoCenter extends Auth_Controller 'saveFreigabe' => 'infocenter:rw', 'saveNotiz' => 'infocenter:rw', 'updateNotiz' => 'infocenter:rw', + 'reloadZgvPruefungen' => 'infocenter:r', + 'reloadMessages' => 'infocenter:r', 'reloadNotizen' => 'infocenter:r', 'reloadLogs' => 'infocenter:r', - 'reloadZgvPruefungen' => 'infocenter:r', 'outputAkteContent' => 'infocenter:r', 'getParkedDate' => 'infocenter:r', 'park' => 'infocenter:rw', @@ -307,12 +309,16 @@ class InfoCenter extends Auth_Controller */ public function saveZgvPruefung() { + $json = null; + $prestudent_id = $this->input->post('prestudentid'); if (isEmptyString($prestudent_id)) - $result = error('Prestudentid missing'); + $json = error('Prestudentid missing'); else { + $ausbildungssemester = $this->input->post('ausbildungssemester'); + // zgvdata // Check for string null, in case dropdown changed to default value $zgv_code = $this->input->post('zgv') === 'null' ? null : $this->input->post('zgv'); @@ -321,14 +327,28 @@ class InfoCenter extends Auth_Controller $zgvdatum = isEmptyString($zgvdatum) ? null : date_format(date_create($zgvdatum), 'Y-m-d'); $zgvnation_code = $this->input->post('zgvnation') === 'null' ? null : $this->input->post('zgvnation'); - //zgvmasterdata + // zgvmasterdata $zgvmas_code = $this->input->post('zgvmas') === 'null' ? null : $this->input->post('zgvmas'); $zgvmaort = $this->input->post('zgvmaort'); $zgvmadatum = $this->input->post('zgvmadatum'); $zgvmadatum = isEmptyString($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d'); $zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation'); - $result = $this->PrestudentModel->update( + $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id, '', 'Interessent'); + + $semresult = null; + + if (hasData($lastStatus)) + { + $semresult = $this->PrestudentstatusModel->update( + array('prestudent_id' => $lastStatus->retval[0]->prestudent_id, + 'status_kurzbz' => $lastStatus->retval[0]->status_kurzbz, + 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz), + array('ausbildungssemester' => $ausbildungssemester) + ); + } + + $prestresult = $this->PrestudentModel->update( $prestudent_id, array( 'zgv_code' => $zgv_code, @@ -343,7 +363,14 @@ class InfoCenter extends Auth_Controller ) ); - if (isSuccess($result)) + if (isError($prestresult)) + $json = error('Error when updating Prestudent!'); + elseif (isError($semresult)) + $json = error('Error when updating Ausbildungssemester!'); + else + $json = success('Zgv saved successfully!'); + + if (isSuccess($semresult) || isSuccess($prestresult)) { //get extended Prestudent data for logging $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); @@ -351,7 +378,7 @@ class InfoCenter extends Auth_Controller $this->_log($logdata['person_id'], 'savezgv', array($logdata['studiengang_kurzbz'], $prestudent_id)); } } - $this->output->set_content_type('application/json')->set_output(json_encode($result)); + $this->output->set_content_type('application/json')->set_output(json_encode($json)); } /** @@ -414,6 +441,7 @@ class InfoCenter extends Auth_Controller { $json = null; $prestudent_id = $this->input->post('prestudent_id'); + $statusgrund_id = $this->input->post('statusgrund_id'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -428,6 +456,18 @@ class InfoCenter extends Auth_Controller //check if still Interessent and not freigegeben yet if ($lastStatus->status_kurzbz === 'Interessent' && !isset($lastStatus->bestaetigtam)) { + $statusdata = array( + 'bestaetigtvon' => $this->_uid, + 'bestaetigtam' => date('Y-m-d'), + 'updatevon' => $this->_uid, + 'updateamum' => date('Y-m-d H:i:s') + ); + + if (isset($statusgrund_id) && is_numeric($statusgrund_id)) + { + $statusdata['statusgrund_id'] = $statusgrund_id; + } + $result = $this->PrestudentstatusModel->update( array( 'prestudent_id' => $prestudent_id, @@ -435,12 +475,7 @@ class InfoCenter extends Auth_Controller 'studiensemester_kurzbz' => $lastStatus->studiensemester_kurzbz, 'ausbildungssemester' => $lastStatus->ausbildungssemester ), - array( - 'bestaetigtvon' => $this->_uid, - 'bestaetigtam' => date('Y-m-d'), - 'updatevon' => $this->_uid, - 'updateamum' => date('Y-m-d H:i:s') - ) + $statusdata ); $json = $result; @@ -459,7 +494,7 @@ class InfoCenter extends Auth_Controller $acceptresult = $this->DokumentprestudentModel->setAcceptedDocuments($prestudent_id, $dokument_kurzbzs); - //returns null if no documents to accept + // acceptresult returns null if no documents to accept if ($acceptresult !== null && isError($acceptresult)) { $json->error = 2; @@ -526,6 +561,29 @@ class InfoCenter extends Auth_Controller $this->output->set_content_type('application/json')->set_output(json_encode($result)); } + /** + * Loads Zgv Prüfung view for a person, helper for reloading after ajax request + * @param $person_id + */ + public function reloadZgvPruefungen($person_id) + { + $prestudentdata = $this->_loadPrestudentData($person_id); + + $prestudentdata[self::FHC_CONTROLLER_ID] = $this->getControllerId(); + + $this->load->view('system/infocenter/zgvpruefungen.php', $prestudentdata); + } + + /** + * Loads Messages view for a person, helper for reloading after ajax request + * @param $person_id + */ + public function reloadMessages($person_id) + { + $messages = $this->MessageModel->getMessagesOfPerson($person_id, 1); + $this->load->view('system/messageList.php', array('messages' => $messages->retval)); + } + /** * Loads Notizen view for a person, helper for reloading after ajax request * @param $person_id @@ -552,19 +610,6 @@ class InfoCenter extends Auth_Controller $this->load->view('system/infocenter/logs.php', array('logs' => $logs)); } - /** - * Loads Zgv Prüfung view for a person, helper for reloading after ajax request - * @param $person_id - */ - public function reloadZgvPruefungen($person_id) - { - $prestudentdata = $this->_loadPrestudentData($person_id); - - $prestudentdata[self::FHC_CONTROLLER_ID] = $this->getControllerId(); - - $this->load->view('system/infocenter/zgvpruefungen.php', $prestudentdata); - } - /** * Outputs content of an Akte, sends appropriate headers (so the document can be downloaded) * @param $akte_id @@ -1087,7 +1132,7 @@ class InfoCenter extends Auth_Controller //if prestudent is not interessent or is already bestaetigt, then show only as information, non-editable $zgvpruefung->infoonly = !isset($zgvpruefung->prestudentstatus) || isset($zgvpruefung->prestudentstatus->bestaetigtam) || $zgvpruefung->prestudentstatus->status_kurzbz != 'Interessent'; - //numeric application priority and arrows for changing + //numeric application priority $zgvpruefung->changeup = false; $zgvpruefung->changedown = false; @@ -1108,16 +1153,16 @@ class InfoCenter extends Auth_Controller $zgvpruefungen[] = $zgvpruefung; } - $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); - $this->_sortPrestudents($zgvpruefungen); - $statusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => 'Abgewiesener'))->retval; + $abwstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => 'Abgewiesener'))->retval; + $intstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => 'Interessent'))->retval; $data = array ( 'zgvpruefungen' => $zgvpruefungen, 'numberinteressenten' => $interessentenCount, - 'statusgruende' => $statusgruende + 'abwstatusgruende' => $abwstatusgruende, + 'intstatusgruende' => $intstatusgruende ); return $data; @@ -1129,6 +1174,8 @@ class InfoCenter extends Auth_Controller */ private function _sortPrestudents(&$zgvpruefungen) { + $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); + @usort($zgvpruefungen, function ($a, $b) { //sort: // 1: Studiensemester @@ -1209,30 +1256,6 @@ class InfoCenter extends Auth_Controller }); } - /** - * Helper function for redirecting to initial page for person from a prestudent-specific page - * @param $prestudent_id - * @param $section optional section of the page to go to - */ - private function _redirectToStart($prestudent_id, $section = '') - { - $this->PrestudentModel->addSelect('person_id'); - $person_id = $this->PrestudentModel->load($prestudent_id)->retval[0]->person_id; - - redirect( - sprintf( - '/%s/%s?%s=%s&%s=%s#%s', - self::INFOCENTER_URI, - self::SHOW_DETAILS_PAGE, - 'person_id', - $person_id, - self::FHC_CONTROLLER_ID, - $this->getControllerId(), - $section - ) - ); - } - /** * Helper function retrieves personid and studiengang kurzbz from a prestudent id * @param $prestudent_id @@ -1371,12 +1394,8 @@ class InfoCenter extends Auth_Controller 'dokumente_nachgereicht' => $dokumenteNachzureichenMail ); - $this->load->library('parser'); - $this->load->library('MailLib'); $this->load->library('LogLib'); - - //parse freigabe html email template, wordwrap wraps text so no display errors - $email = wordwrap($this->parser->parse('templates/mailtemplates/interessentFreigabe', $data, true), 70); + $this->load->helper('hlp_sancho'); $subject = ($person->geschlecht == 'm' ? 'Interessent ' : 'Interessentin ').$person->vorname.' '.$person->nachname.' für '.$prestudent->studiengangbezeichnung.$orgform.' freigegeben'; @@ -1385,10 +1404,12 @@ class InfoCenter extends Auth_Controller if (!isEmptyString($receiver)) { //Freigabeinformationmail sent from default system mail to studiengang mail(s) - $sent = $this->maillib->send('', $receiver, $subject, $email, '', null, null, 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Inhalt vollständig darzustellen.'); - - if (!$sent) - $this->loglib->logError('Error when sending Freigabe mail'); + sendSanchoMail( + self::FREIGABE_MAIL_VORLAGE, + $data, + $receiver, + $subject + ); } else { diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index ce03fe6dc..45ccce876 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -315,7 +315,8 @@ class MessageLib { // Parses template text $parsedText = $this->ci->vorlagelib->parseVorlagetext($result->retval[0]->text, $data); - $subject = $result->retval[0]->subject; + // Parses subject + $subject = $this->ci->vorlagelib->parseVorlagetext($result->retval[0]->subject, $data); // Save message $result = $this->_saveMessage($sender_id, $receiver_id, $subject, $parsedText, $relationmessage_id, $oe_kurzbz); diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index b7e54185e..89ab2623d 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -228,8 +228,10 @@ class Prestudent_model extends DB_Model $lastStatus->retval[0]->studiengangkurzbzlang = $studienordnung->retval[0]->studiengangkurzbzlang; $lastStatus->retval[0]->studiengangbezeichnung = $studienordnung->retval[0]->studiengangbezeichnung; $lastStatus->retval[0]->studiengangbezeichnung_englisch = $studienordnung->retval[0]->studiengangbezeichnung_englisch; + $lastStatus->retval[0]->regelstudiendauer = $studienordnung->retval[0]->regelstudiendauer; } + //get Sprache $this->load->model('system/sprache_model', 'SpracheModel'); $language = $this->SpracheModel->load($lastStatus->retval[0]->sprache); diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 0492719a4..7a42532e1 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -173,6 +173,8 @@ class Person_model extends DB_Model if($kontakte->error) return error($kontakte->retval); $where = $zustellung_only === true ? array('person_id' => $person_id, 'zustelladresse' => true) : array('person_id' => $person_id); + $this->AdresseModel->addSelect('public.tbl_adresse.*, bis.tbl_nation.kurztext AS nationkurztext'); + $this->AdresseModel->addJoin('bis.tbl_nation', 'tbl_adresse.nation = tbl_nation.nation_code', 'LEFT'); $adressen = $this->AdresseModel->loadWhere($where); if($adressen->error) return error($adressen->retval); diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 9a8a0a35e..2a64f2478 100755 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -21,6 +21,7 @@ 'customJSs' => array( 'public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', + 'public/js/messaging/messageList.js', 'public/js/infocenter/infocenterDetails.js' ), 'phrases' => array( @@ -139,7 +140,7 @@