diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php new file mode 100644 index 000000000..f4c92b7fb --- /dev/null +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -0,0 +1,309 @@ + 'lehre/anrechnung_empfehlen:rw', + 'download' => 'lehre/anrechnung_empfehlen:rw', + 'recommend' => 'lehre/anrechnung_empfehlen:rw', + 'dontRecommend' => 'lehre/anrechnung_empfehlen:rw' + ) + ); + + // Load models + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); + $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + + // Load libraries + $this->load->library('WidgetLib'); + $this->load->library('PermissionLib'); + $this->load->library('AnrechnungLib'); + $this->load->library('DmsLib'); + + // Load helpers + $this->load->helper('form'); + $this->load->helper('url'); + $this->load->helper('hlp_sancho_helper'); + + // Load language phrases + $this->loadPhrases( + array( + 'global', + 'ui', + 'anrechnung', + 'person', + 'lehre', + 'table' + ) + ); + + $this->_setAuthUID(); + + $this->setControllerId(); + } + + public function index() + { + $anrechnung_id = $this->input->get('anrechnung_id'); + + if (!is_numeric($anrechnung_id)) + { + show_error('Missing correct parameter'); + } + + // Get Anrechung data + $result = $this->anrechnunglib->getAnrechnungData($anrechnung_id); + if (!$anrechnungData = getData($result)) + { + show_error(getError($anrechnungData)); + } + + $viewData = array( + 'antragData' => $this->anrechnunglib->getAntragData( + $student_uid = $this->PrestudentModel->getUID($anrechnungData->prestudent_id), + $anrechnungData->studiensemester_kurzbz, + $anrechnungData->lehrveranstaltung_id + ), + 'anrechnungData' => $anrechnungData + ); + + $this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData); + } + + /** + * Recommend Anrechnungen. + */ + public function recommend() + { + $data = $this->input->post('data'); + + if(isEmptyArray($data)) + { + return $this->outputJsonError('Fehler beim Übertragen der Daten.'); + } + + // Get statusbezeichnung for 'inProgressDP' + $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; + $inProgressDP = getUserLanguage() == 'German' + ? $inProgressDP->bezeichnung_mehrsprachig[0] + : $inProgressDP->bezeichnung_mehrsprachig[1]; + + foreach ($data as $item) + { + // Approve Anrechnung + if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + { + $json[]= array( + 'anrechnung_id' => $item['anrechnung_id'], + 'empfehlung_anrechnung' => 'true', + 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, + 'status_bezeichnung' => $inProgressDP + ); + } + } + + // Output json to ajax + if (isset($json) && !isEmptyArray($json)) + { + /** + * Send mails to STGL (if not present STGL, send to STGL assistance) + * NOTE: mails are sent at the end to ensure sending only one mail to each STGL + * */ + if (!$this->_sendSanchoMails($json, true)) + { + show_error('Failed sending emails'); + } + + return $this->outputJsonSuccess($json); + } + else + { + return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + } + } + + /** + * Dont recommend Anrechnungen. + */ + public function dontRecommend() + { + $data = $this->input->post('data'); + + if(isEmptyArray($data)) + { + return $this->outputJsonError('Fehler beim Übertragen der Daten.'); + } + + // Get statusbezeichnung for 'inProgressDP' + $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; + $inProgressDP = getUserLanguage() == 'German' + ? $inProgressDP->bezeichnung_mehrsprachig[0] + : $inProgressDP->bezeichnung_mehrsprachig[1]; + + foreach ($data as $item) + { + // Approve Anrechnung + if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id']))) + { + $json[]= array( + 'anrechnung_id' => $item['anrechnung_id'], + 'empfehlung_anrechnung' => 'false', + 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, + 'status_bezeichnung' => $inProgressDP + ); + } + } + + // Output json to ajax + if (isset($json) && !isEmptyArray($json)) + { + // Send mails to STGL (if not present STGL, send to STGL assistance) + if (!$this->_sendSanchoMails($json, false)) + { + show_error('Failed sending emails'); + } + + return $this->outputJsonSuccess($json); + } + else + { + return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + } + } + + /** + * Download and open uploaded document (Nachweisdokument). + */ + public function download() + { + $dms_id = $this->input->get('dms_id'); + + if (!is_numeric($dms_id)) + { + show_error('Wrong parameter'); + } + + $this->dmslib->download($dms_id); + } + + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } + + /** + * Send mails to STGL (if not present then to STGL assistance) + * @param $mail_params + * @param $empfehlung + * @return bool + */ + private function _sendSanchoMails($mail_params, $empfehlung) + { + // Get studiengaenge + $studiengang_kz_arr = array(); + + foreach ($mail_params as $item) + { + $this->AnrechnungModel->addSelect('studiengang_kz'); + $this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id'); + + $studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz; + } + + $studiengang_kz_arr = array_unique($studiengang_kz_arr); + + // Send mail to STGL of each studiengang + foreach ($studiengang_kz_arr as $studiengang_kz) + { + // Get STGL mail address, if available, otherwise get assistance mail address + list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz); + + // Get full name of lector + $this->load->model('person/Person_model', 'PersonModel'); + if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid))) + { + show_error ('Failed retrieving person'); + } + + // Link to Antrag genehmigen + $url = + CIS_ROOT. 'cis/index.php?menu='. + CIS_ROOT. 'cis/menu.php?content_id=&content='. + CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; + + // Prepare mail content + $body_fields = array( + 'vorname' => $vorname, + 'lektor_name' => $lector_name, + 'empfehlung' => $empfehlung ? 'positive' : 'negative', + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); + + sendSanchoMail( + 'AnrechnungEmpfehlungAbgeben', + $body_fields, + $to, + 'Neue '. ($empfehlung ? 'positive' : 'negative'). ' Empfehlungen für LV-Anrechnungsanträge' + ); + } + + return true; + } + + // Get STGL mail address, if available, otherwise get assistance mail address + private function _getSTGLMailAddress($stg_kz) + { + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $result = $this->StudiengangModel->getLeitung($stg_kz); + + // Get STGL mail address, if available + if (hasData($result)) + { + return array( + $result->retval[0]->uid. '@'. DOMAIN, + $result->retval[0]->vorname + ); + } + // ...otherwise get assistance mail address + else + { + $result = $this->StudiengangModel->load($stg_kz); + + if (hasData($result)) + { + return array( + $result->retval[0]->email, + '' + ); + } + } + } + +} \ No newline at end of file diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 503d1afca..d86dbbef0 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -120,6 +120,8 @@ class AnrechnungLib { $anrechnung_data = new StdClass(); $anrechnung_data->anrechnung_id = ''; + $anrechnung_data->prestudent_id = ''; + $anrechnung_data->lehrveranstaltung = ''; $anrechnung_data->begruendung_id = ''; $anrechnung_data->anmerkung = ''; $anrechnung_data->dms_id = ''; @@ -493,6 +495,8 @@ class AnrechnungLib // Get Anrechnung data $anrechnung_data->anrechnung_id = $anrechnung->anrechnung_id; + $anrechnung_data->prestudent_id = $anrechnung->prestudent_id; + $anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id; $anrechnung_data->begruendung_id = $anrechnung->begruendung_id; $anrechnung_data->anmerkung = $anrechnung->anmerkung_student; $anrechnung_data->dms_id = $anrechnung->dms_id; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7b9d6e799..72a5bbb3e 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -8748,6 +8748,46 @@ Any unusual occurrences 'insertvon' => 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'detailsicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Detailsicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Details', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'lektorInnen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LektorInnen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Lectors', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) );