'lehre/lehrauftrag_bestellen:r', 'orderLehrauftrag' => 'lehre/lehrauftrag_bestellen:rw', 'Dashboard' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:r'), 'LehrendeUebersicht' => array('lehre/lehrauftrag_erteilen:r') ) ); // Load models $this->load->model('system/Benutzerrolle_model', 'BenutzerrolleModel'); $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); $this->load->model('accounting/Vertrag_model', 'VertragModel'); // Load libraries $this->load->library('WidgetLib'); $this->load->library('PermissionLib'); // Load helpers $this->load->helper('array'); $this->load->helper('url'); $this->load->helper('hlp_sancho_helper'); // Load language phrases $this->loadPhrases( array( 'global', 'ui', 'lehre', 'table' ) ); $this->_setAuthUID(); // sets property uid $this->setControllerId(); // sets the controller id } /** * Display of Custom Dashboard for Lehraufträge App * Charts are hooked from Reporting Addon */ public function Dashboard() { $this->load->view('lehre/lehrauftrag/Dashboard.php'); } /** * Display of Lehrauftragsübersicht report */ public function LehrendeUebersicht() { $this->load->view('lehre/lehrauftrag/LehrendeUebersicht.php'); } // ----------------------------------------------------------------------------------------------------------------- // Public methods /** * Main page of Lehrauftrag */ public function index() { // Set studiengang selected for studiengang dropdown $studiengang_kz = $this->input->get('studiengang'); // if provided by selected studiengang $studiengang_kz = ($studiengang_kz == 'null' ? null : $studiengang_kz); // Retrieve studiengaenge the user is entitled for to populate studiengang dropdown if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN)) { show_error('Keine Studiengänge gefunden.
Es muss eine passende Organisationseinheit hinterlegt werden.
'); } // If studiengang_kz get param was set, check against entitled stg if (!is_null($studiengang_kz)) { if (!in_array($studiengang_kz, $studiengang_kz_arr)) { show_error('Keine Berechtigung für diesen Studiengang'); } } // Set studiensemester selected for studiengang dropdown $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; } elseif (isError($studiensemester)) { show_error(getError($studiensemester)); } } // Set ausbildungssemester selected for ausbildungssemester dropdown $ausbildungssemester = $this->input->get('ausbildungssemester'); // if provided by selected ausbildungssemester $ausbildungssemester = ($ausbildungssemester == 'null' ? null : $ausbildungssemester); $view_data = array( 'studiengang_selected' => $studiengang_kz, 'studiengang' => $studiengang_kz_arr, 'studiensemester_selected' => $studiensemester_kurzbz, 'ausbildungssemester_selected' => $ausbildungssemester, ); $this->load->view('lehre/lehrauftrag/orderLehrauftrag.php', $view_data); } public function orderLehrauftrag() { $new_lehrvertrag_data_arr = array(); // information of new lehrvertraege to be used in mail $lehrauftrag_arr = json_decode($this->input->post('selected_data')); // Loop through lehraufträge if(is_array($lehrauftrag_arr)) { foreach($lehrauftrag_arr as $lehrauftrag) { $lehreinheit_id = (isset($lehrauftrag->lehreinheit_id)) ? $lehrauftrag->lehreinheit_id : null; $lehrveranstaltung_id = (isset($lehrauftrag->lehrveranstaltung_id)) ? $lehrauftrag->lehrveranstaltung_id : null; $person_id = (isset($lehrauftrag->person_id)) ? $lehrauftrag->person_id : null; $mitarbeiter_uid = (isset($lehrauftrag->mitarbeiter_uid)) ? $lehrauftrag->mitarbeiter_uid : null; $vertrag_id = (isset($lehrauftrag->vertrag_id)) ? $lehrauftrag->vertrag_id : null; $projektarbeit_id = (isset($lehrauftrag->projektarbeit_id)) ? $lehrauftrag->projektarbeit_id : null; $stunden = (isset($lehrauftrag->stunden)) ? $lehrauftrag->stunden : 0; $betrag = (isset($lehrauftrag->betrag)) ? $lehrauftrag->betrag : 0; $studiensemester_kurzbz = (isset($lehrauftrag->studiensemester_kurzbz)) ? $lehrauftrag->studiensemester_kurzbz : null; $studiengang_kz = (isset($lehrauftrag->studiengang_kz)) ? $lehrauftrag->studiengang_kz : null; // Check if user is entitled to order this Lehrauftrag if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN, 'suid', $studiengang_kz)) { return $this->outputJsonError('Sie haben keine Bestellberechtigung für diesen Studiengang: '. $studiengang_kz); } // update contract if contract exists and the betrag was changed if (!is_null($vertrag_id)) { $this->VertragModel->addSelect('vertragsstunden, betrag'); if($result = getData($this->VertragModel->load($vertrag_id))) { $vertrag_betrag = $result[0]->betrag; $vertrag_stunden = $result[0]->vertragsstunden; } elseif (isError($result)) { return $this->outputJsonError('Fehler beim Laden des Vertrags'); } $hasChanged = ($betrag != floatval($vertrag_betrag) || $stunden != $vertrag_stunden) ? true : false; if ($hasChanged) { $result = $this->VertragModel->updateVertrag( $vertrag_id, $stunden, $betrag, $mitarbeiter_uid ); if (isSuccess($result)) { $json []= array( 'row_index' => $lehrauftrag->row_index, 'bestellt' => date('Y-m-d'), 'vertrag_betrag' => $betrag, 'vertrag_stunden' => $stunden, 'erteilt' => null ); } else { return $this->outputJsonError('Fehler beim Vertragsupdate'); } } } // else save new contract else { $result = $this->VertragModel->save( $person_id, $mitarbeiter_uid, $lehrveranstaltung_id, $lehreinheit_id, $projektarbeit_id, $stunden, $betrag, $studiensemester_kurzbz ); if (isSuccess($result)) { $json []= array( 'row_index' => $lehrauftrag->row_index, 'bestellt' => date('Y-m-d'), 'vertrag_betrag' => $betrag, 'vertrag_stunden' => $stunden ); } elseif (isError($result) && $result->retval) { return $this->outputJsonError($result->retval); } else { return $this->outputJsonError('Fehler beim Speichern des Vertrags'); } $new_lehrvertrag_data_arr[] = array( 'studiensemester_kurzbz' => $lehrauftrag->studiensemester_kurzbz, 'studiengang_kz' => $lehrauftrag->studiengang_kz, 'lv_oe_kurzbz' => $lehrauftrag->lv_oe_kurzbz ); } } } else { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } if (isset($json) && !isEmptyArray($json)) { $this->outputJsonSuccess($json); } } // ----------------------------------------------------------------------------------------------------------------- // Private methods /** * 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'); } private function _sendMail($lehrvertrag_data_arr) { // Cluster data of new lehrvertraege as needed to send mail foreach ($lehrvertrag_data_arr as $lehrvertrag_data) { // Get mail recipients $result = $this->BenutzerrolleModel->getBenutzerByBerechtigung('lehre/lehrauftrag_erteilen', $lehrvertrag_data['lv_oe_kurzbz']); // If given lv organisational unit has no authorized user, check if is a Kompetenzfeld. // If so, look up for authorized user on Department level. if (!hasData($result)) { $result = $this->OrganisationseinheitModel->getParent($lehrvertrag_data['lv_oe_kurzbz']); if (hasData($result)) { if ($result->retval[0]->organisationseinheittyp_kurzbz === 'Department') { $result = $this->BenutzerrolleModel->getBenutzerByBerechtigung('lehre/lehrauftrag_erteilen', $result->retval[0]->oe_kurzbz); } } } // Set mail recipients (department assistance/leader) $to = ''; $to_arr = array(); foreach ($result->retval as $berechtigung) { $to_arr []= $berechtigung->uid . '@' . DOMAIN; // TODO: als array, dann splitten mit ;? oder als array lassen? } $to = implode(', ', $to_arr); // Set link to lehrauftrag-site with preselected studiengang and studiensemester of new lehrauftraege $url = site_url(self::LEHRAUFTRAG_URI).'?studiensemester='. $lehrvertrag_data['studiensemester_kurzbz']. '&studiengang='. $lehrvertrag_data['studiengang_kz']; // Prepare mail content $content_data_arr = array( 'anzahl' => $lehrvertrag_data['amount_new_lehrvertraege'], 'studiengang' => $lehrvertrag_data['studiengang_kz'], 'studiensemester' => $lehrvertrag_data['studiensemester_kurzbz'], 'link' => anchor($url, 'Lehrverträge Übersicht') ); // Send mail sendSanchoMail( 'LehrauftragBestellMail', $content_data_arr, $to, 'Bestellung neuer Lehraufträge', 'sancho_header_min_bw.jpg', 'sancho_footer_min_bw.jpg' ); } } /** * Clusters data as needed for _sendMail. * Makes array of new lehrvertraege unique (by studiensemester, studiengang and lv_oe_kurzbz) * Adds the amount of lehrvertraege of each unique array element. * @param $new_lehrvertrag_data_arr * @return array */ private function _cluster_newVertragData($new_lehrvertrag_data_arr) { $unique_new_lehrvertrag_data_arr = array_unique($new_lehrvertrag_data_arr, SORT_REGULAR); foreach ($unique_new_lehrvertrag_data_arr as &$new_lehrvertrag) { $cnt = 1; foreach ($new_lehrvertrag_data_arr as $item) { if ($new_lehrvertrag['studiensemester_kurzbz'] === $item['studiensemester_kurzbz'] && $new_lehrvertrag['studiengang_kz'] === $item['studiengang_kz'] && $new_lehrvertrag['lv_oe_kurzbz'] === $item['lv_oe_kurzbz']) { $new_lehrvertrag['amount_new_lehrvertraege'] = $cnt++; } } } return $unique_new_lehrvertrag_data_arr; } }