diff --git a/application/config/navigation.php b/application/config/navigation.php index 7f1b29932..d123399b6 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -9,20 +9,60 @@ $config['navigation_header'] = array( 'link' => site_url(''), 'icon' => '', 'description' => 'FH-Complete', - 'sort' => 1 + 'sort' => 10 ), - 'vilesci' => array( - 'link' => base_url('vilesci'), - 'icon' => '', - 'description' => 'Vilesci', - 'sort' => 2, - 'requiredPermissions' => 'basis/vilesci:r' + 'Organisation' => array( + 'link' => '#', + 'icon' => 'sitemap', + 'description' => 'Organisation', + 'sort' => 20, + 'children'=> array( + 'vilesci' => array( + 'link' => base_url('vilesci'), + 'icon' => '', + 'description' => 'Vilesci', + 'expand' => true, + 'sort' => 1, + 'requiredPermissions' => 'basis/vilesci:r' + ) + ) ), - 'cis' => array( - 'link' => CIS_ROOT, - 'icon' => '', - 'description' => 'CIS', - 'sort' => 3 + 'Lehre' => array( + 'link' => '#', + 'icon' => 'graduation-cap', + 'description' => 'Lehre', + 'sort' => 30, + 'children'=> array( + 'cis' => array( + 'link' => CIS_ROOT, + 'icon' => '', + 'description' => 'CIS', + 'sort' => 10 + ), + 'infocenter' => array( + 'link' => site_url('system/infocenter/InfoCenter'), + 'icon' => 'info', + 'description' => 'Infocenter', + 'expand' => true, + 'sort' => 20, + 'requiredPermissions' => 'infocenter:r' + ), + ) + ), + 'Personen' => array( + 'link' => '#', + 'icon' => 'user', + 'description' => 'Personen', + 'sort' => 40, + 'children'=> array( + 'bpk' => array( + 'link' => site_url('person/BPKWartung'), + 'icon' => '', + 'description' => 'BPK Wartung', + 'sort' => 10, + 'requiredPermissions' => 'admin:r' + ) + ) ) ) ); diff --git a/application/controllers/api/v1/crm/Buchungstyp.php b/application/controllers/api/v1/crm/Buchungstyp.php index a5bf44dfc..0253050f3 100644 --- a/application/controllers/api/v1/crm/Buchungstyp.php +++ b/application/controllers/api/v1/crm/Buchungstyp.php @@ -21,7 +21,7 @@ class Buchungstyp extends APIv1_Controller */ public function __construct() { - parent::__construct(array('Buchungstyp' => 'basis/buchungstyp:rw'); + parent::__construct(array('Buchungstyp' => 'basis/buchungstyp:rw')); // Load model BuchungstypModel $this->load->model('crm/buchungstyp_model', 'BuchungstypModel'); diff --git a/application/controllers/person/BPKWartung.php b/application/controllers/person/BPKWartung.php new file mode 100644 index 000000000..a8e9b8829 --- /dev/null +++ b/application/controllers/person/BPKWartung.php @@ -0,0 +1,199 @@ + 'admin:r', + 'showDetails' => 'admin:r', + 'saveBPK' => 'admin:rw', + ) + ); + + // Loads models + $this->load->model('crm/akte_model', 'AkteModel'); + $this->load->model('person/person_model', 'PersonModel'); + $this->load->model('person/adresse_model', 'AdressModel'); + + $this->load->library('WidgetLib'); + $this->loadPhrases( + array( + 'global', + 'person', + 'lehre', + 'ui', + 'infocenter', + 'filter' + ) + ); + + $this->setControllerId(); // sets the controller id + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + * Main page of the InfoCenter tool + */ + public function index() + { + $this->_setNavigationMenuIndex(); // define the navigation menu for this page + + $this->load->view('person/bpk/bpkwartung.php'); + } + + /** + * Personal details page of the InfoCenter tool + * Initialization function, gets person and prestudent data and loads the view with the data + * @param $person_id + */ + public function showDetails() + { + $this->_setNavigationMenuShowDetails(); + $person_id = $this->input->get('person_id'); + + if (!is_numeric($person_id)) + show_error('person id is not numeric!'); + + $personexists = $this->PersonModel->load($person_id); + + if (isError($personexists)) + show_error($personexists->retval); + + if (!hasData($personexists)) + show_error('Person does not exist!'); + + $persondata = $this->_loadPersonData($person_id); + + + $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); + + $this->load->view('person/bpk/bpkDetails.php', $persondata); + } + + /** + * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master + * @param $prestudent_id + */ + public function saveBPK() + { + $person_id = $this->input->post('person_id'); + $bpk = $this->input->post('bpk'); + + if (isEmptyString($person_id)) + $result = error('PersonID missing'); + else + { + $result = $this->PersonModel->update( + $person_id, + array( + 'bpk' => $bpk, + 'updateamum' => date('Y-m-d H:i:s') + ) + ); + redirect('person/BPKWartung/index'); + } + } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Loads all necessary Person data: Stammdaten (name, svnr, contact, ...), Dokumente, Logs and Notizen + * @param $person_id + * @return array + */ + private function _loadPersonData($person_id) + { + $stammdaten = $this->PersonModel->getPersonStammdaten($person_id, true); + + if (isError($stammdaten)) + { + show_error($stammdaten->retval); + } + + if (!isset($stammdaten->retval)) + return null; + + $adresse = $this->AdressModel->getZustellAdresse($person_id); + + if (isError($adresse)) + { + show_error($adresse->retval); + } + + $data = array( + 'stammdaten' => $stammdaten->retval, + 'adresse' => $adresse->retval[0] + ); + + return $data; + } + + /** + * Define the navigation menu for the showDetails page + */ + private function _setNavigationMenuShowDetails() + { + $this->load->library('NavigationLib', array('navigation_page' => 'person/BPKWartung/showDetails')); + + $link = site_url('person/BPKWartung'); + + $this->navigationlib->setSessionMenu( + array( + 'back' => $this->navigationlib->oneLevel( + 'Zurück', // description + $link, // link + array(), // children + 'angle-left', // icon + true, // expand + null, // subscriptDescription + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 1 // sort + ) + ) + ); + } + + /** + * Define the navigation menu for the showDetails page + */ + private function _setNavigationMenuIndex() + { + $this->load->library('NavigationLib', array('navigation_page' => 'person/BPKWartung/index')); + + $link = site_url(); + + $this->navigationlib->setSessionMenu( + array( + 'back' => $this->navigationlib->oneLevel( + 'Zurück', // description + $link, // link + array(), // children + 'angle-left', // icon + true, // expand + null, // subscriptDescription + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 1 // sort + ) + ) + ); + } +} diff --git a/application/controllers/system/Navigation.php b/application/controllers/system/Navigation.php index 3471165a8..7f10fadc8 100644 --- a/application/controllers/system/Navigation.php +++ b/application/controllers/system/Navigation.php @@ -57,7 +57,7 @@ class Navigation extends Auth_Controller // Private methods /** - * Loads the FiltersLib with the NAVIGATION_PAGE_PARAM parameter + * Loads the NavigationLib with the NAVIGATION_PAGE_PARAM parameter * If the parameter NAVIGATION_PAGE_PARAM is not given then the execution of the controller is terminated and * an error message is printed */ @@ -76,7 +76,7 @@ class Navigation extends Auth_Controller $navigationPage = $this->input->post(self::NAVIGATION_PAGE_PARAM); // is retrived from the HTTP POST } - // Loads the FiltersLib that contains all the used logic + // Loads the NavigationLib that contains all the used logic $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE_PARAM => $navigationPage)); } else // Otherwise an error will be written in the output diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 4662fbc40..670dabddd 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -74,6 +74,7 @@ class InfoCenter extends Auth_Controller 'saveFormalGeprueft' => 'infocenter:rw', 'getLastPrestudentWithZgvJson' => 'infocenter:r', 'getZgvInfoForPrestudent' => 'infocenter:r', + 'saveBewPriorisierung' => 'infocenter:rw', 'saveZgvPruefung' => 'infocenter:rw', 'saveAbsage' => 'infocenter:rw', 'saveFreigabe' => 'infocenter:rw', @@ -81,6 +82,7 @@ class InfoCenter extends Auth_Controller 'updateNotiz' => 'infocenter:rw', 'reloadNotizen' => 'infocenter:r', 'reloadLogs' => 'infocenter:r', + 'reloadZgvPruefungen' => 'infocenter:r', 'outputAkteContent' => 'infocenter:r', 'getParkedDate' => 'infocenter:r', 'park' => 'infocenter:rw', @@ -280,6 +282,22 @@ class InfoCenter extends Auth_Controller $this->load->view('system/infocenter/studiengangZgvInfo.php', $data); } + /** + * Saves application priority for a prestudent + */ + public function saveBewPriorisierung() + { + $prestudent_id = $this->input->post('prestudentid'); + $change = $this->input->post('change'); + + if (!is_numeric($change) || !is_numeric($prestudent_id)) + $result = error('Parameteres missing'); + else + $result = $this->PrestudentModel->changePrio($prestudent_id, intval($change)); + + $this->output->set_content_type('application/json')->set_output(json_encode($result)); + } + /** * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master * @param $prestudent_id @@ -338,55 +356,50 @@ class InfoCenter extends Auth_Controller * inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status. * @param $prestudent_id */ - public function saveAbsage($prestudent_id) + public function saveAbsage() { + $json = null; + $prestudent_id = $this->input->post('prestudent_id'); $statusgrund = $this->input->post('statusgrund'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); - if (isError($lastStatus)) + $this->StatusgrundModel->addSelect('bezeichnung_mehrsprachig'); + $statusgrresult = $this->StatusgrundModel->load($statusgrund); + + if (hasData($lastStatus) && hasData($statusgrresult)) { - show_error($lastStatus->retval); - } - - //check if still Interessent and not freigegeben yet - if (count($lastStatus->retval) > 0 && $lastStatus->retval[0]->status_kurzbz === 'Interessent' && !isset($lastStatus->retval[0]->bestaetigtam)) - { - $result = $this->PrestudentstatusModel->insert( - array( - 'prestudent_id' => $prestudent_id, - 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz, - 'ausbildungssemester' => $lastStatus->retval[0]->ausbildungssemester, - 'datum' => date('Y-m-d'), - 'orgform_kurzbz' => $lastStatus->retval[0]->orgform_kurzbz, - 'studienplan_id' => $lastStatus->retval[0]->studienplan_id, - 'status_kurzbz' => 'Abgewiesener', - 'statusgrund_id' => $statusgrund, - 'insertvon' => $this->_uid, - 'insertamum' => date('Y-m-d H:i:s') - ) - ); - - if (isError($result)) + //check if still Interessent and not freigegeben yet + if ($lastStatus->retval[0]->status_kurzbz === 'Interessent' && !isset($lastStatus->retval[0]->bestaetigtam)) { - show_error($result->retval); + $result = $this->PrestudentstatusModel->insert( + array( + 'prestudent_id' => $prestudent_id, + 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz, + 'ausbildungssemester' => $lastStatus->retval[0]->ausbildungssemester, + 'datum' => date('Y-m-d'), + 'orgform_kurzbz' => $lastStatus->retval[0]->orgform_kurzbz, + 'studienplan_id' => $lastStatus->retval[0]->studienplan_id, + 'status_kurzbz' => 'Abgewiesener', + 'statusgrund_id' => $statusgrund, + 'insertvon' => $this->_uid, + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + + $json = $result; + if (isSuccess($result)) + { + $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); + + //statusgrund bezeichnung for logging + $statusgrund_bez = $statusgrresult->retval[0]->bezeichnung_mehrsprachig[1]; + + $this->_log($logdata['person_id'], 'abgewiesen', array($prestudent_id, $logdata['studiengang_kurzbz'], $statusgrund_bez)); + } } - - $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); - - //statusgrund bezeichnung for logging - $this->StatusgrundModel->addSelect('bezeichnung_mehrsprachig'); - $result = $this->StatusgrundModel->load($statusgrund); - if (isError($result)) - { - show_error($result->retval); - } - - $statusgrund_bez = $result->retval[0]->bezeichnung_mehrsprachig[1]; - - $this->_log($logdata['person_id'], 'abgewiesen', array($prestudent_id, $logdata['studiengang_kurzbz'], $statusgrund_bez)); } - $this->_redirectToStart($prestudent_id, 'ZgvPruef'); + $this->output->set_content_type('application/json')->set_output(json_encode($json)); } /** @@ -394,16 +407,18 @@ class InfoCenter extends Auth_Controller * updates bestaetigtam and bestaetigtvon fields of the last status * @param $prestudent_id */ - public function saveFreigabe($prestudent_id) + public function saveFreigabe() { + $json = null; + $prestudent_id = $this->input->post('prestudent_id'); + $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); - if (isError($lastStatus)) - { - show_error($lastStatus->retval); - } + $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); - if (count($lastStatus->retval) > 0) + $akteresult = $this->AkteModel->loadWhere(array('person_id' => $logdata['person_id'], 'formal_geprueft_amum !=' => NULL)); + + if (hasData($lastStatus) && isSuccess($akteresult)) { $lastStatus = $lastStatus->retval[0]; @@ -425,45 +440,36 @@ class InfoCenter extends Auth_Controller ) ); - if (isError($result)) + $json = $result; + + if (isSuccess($result)) { - show_error($result->retval); + $this->load->model('crm/dokumentprestudent_model', 'DokumentprestudentModel'); + + //set documents which have been formal geprüft to accepted + $dokument_kurzbzs = array(); + + foreach ($akteresult->retval as $akte) + { + $dokument_kurzbzs[] = $akte->dokument_kurzbz; + } + + $acceptresult = $this->DokumentprestudentModel->setAcceptedDocuments($prestudent_id, $dokument_kurzbzs); + + //returns null if no documents to accept + if ($acceptresult !== null && isError($acceptresult)) + { + $json->error = 2; + } + + $this->_log($logdata['person_id'], 'freigegeben', array($prestudent_id, $logdata['studiengang_kurzbz'])); + + $this->_sendFreigabeMail($prestudent_id); } - - $this->load->model('crm/dokumentprestudent_model', 'DokumentprestudentModel'); - - $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); - - //set documents which have been formal geprüft to accepted - $result = $this->AkteModel->loadWhere(array('person_id' => $logdata['person_id'], 'formal_geprueft_amum !=' => NULL)); - - if (isError($result)) - { - show_error($result->retval); - } - - $dokument_kurzbzs = array(); - - foreach ($result->retval as $akte) - { - $dokument_kurzbzs[] = $akte->dokument_kurzbz; - } - - $result = $this->DokumentprestudentModel->setAcceptedDocuments($prestudent_id, $dokument_kurzbzs); - - //returns null if no documents to accept - if ($result !== null && isError($result)) - { - show_error($result->retval); - } - - $this->_sendFreigabeMail($prestudent_id); - - $this->_log($logdata['person_id'], 'freigegeben', array($prestudent_id, $logdata['studiengang_kurzbz'])); } } - $this->_redirectToStart($prestudent_id, 'ZgvPruef'); + $this->output->set_content_type('application/json')->set_output(json_encode($json)); } /** @@ -543,6 +549,19 @@ 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 @@ -864,7 +883,7 @@ class InfoCenter extends Auth_Controller 'filters' => $this->navigationlib->oneLevel( 'Filter', // description '#', // link - (isset($filtersArray['children'])?$filtersArray['children']:''), // children + (isset($filtersArray['children']) ? $filtersArray['children'] : ''), // children '', // icon true, // expand null, // subscriptDescription @@ -880,20 +899,18 @@ class InfoCenter extends Auth_Controller /** * Utility method used to fill elements of the InfoCenter left menu of the main InfoCenter page */ - private function _fillFilters($filters, &$tofill) + private function _fillFilters($filters, &$toFill) { - $toPrint = "%s?%s=%s&%s=%s"; - foreach ($filters as $filterId => $description) { - $tofill['children'][] = array( - 'link' => sprintf( - $toPrint, - site_url(self::INFOCENTER_URI), 'filter_id', $filterId, - FHC_Controller::FHC_CONTROLLER_ID, - $this->getControllerId() - ), - 'description' => $description + $toFill['children'][] = $this->navigationlib->oneLevel( + $description, // description + sprintf( + '%s?%s=%s', + site_url(self::INFOCENTER_URI), + 'filter_id', + $filterId + ) // link ); } } @@ -901,20 +918,18 @@ class InfoCenter extends Auth_Controller /** * Utility method used to fill elements of the InfoCenter left menu of the freigegeben InfoCenter page */ - private function _fillFiltersFreigegeben($filters, &$tofill) + private function _fillFiltersFreigegeben($filters, &$toFill) { - $toPrint = "%s?%s=%s&%s=%s"; - foreach ($filters as $filterId => $description) { - $tofill['children'][] = array( - 'link' => sprintf( - $toPrint, - site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE), 'filter_id', $filterId, - FHC_Controller::FHC_CONTROLLER_ID, - $this->getControllerId() - ), - 'description' => $description + $toFill['children'][] = $this->navigationlib->oneLevel( + $description, // description + sprintf( + '%s?%s=%s', + site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE), + 'filter_id', + $filterId + ) // link ); } } @@ -923,23 +938,26 @@ class InfoCenter extends Auth_Controller * Utility method used to fill elements of the InfoCenter left menu * with the list of the custom filter of the authenticated user */ - private function _fillCustomFilters($filters, &$tofill) + private function _fillCustomFilters($filters, &$toFill) { - $toPrint = "%s?%s=%s&%s=%s"; - foreach ($filters as $filterId => $description) { - $tofill['children'][] = array( - 'link' => sprintf( - $toPrint, - site_url(self::INFOCENTER_URI), 'filter_id', $filterId, - FHC_Controller::FHC_CONTROLLER_ID, - $this->getControllerId() - ), - 'description' => $description, - 'subscriptDescription' => 'Remove', - 'subscriptLinkClass' => 'remove-custom-filter', - 'subscriptLinkValue' => $filterId + $toFill['children'][] = $this->navigationlib->oneLevel( + $description, // description + sprintf( + '%s?%s=%s', + site_url(self::INFOCENTER_URI), + 'filter_id', + $filterId + ), // link + null, // children + '', // icon + false, // expand + 'Remove', // subscriptDescription + 'remove-custom-filter', // subscriptLinkClass + $filterId, // subscriptLinkValue + null, // sort + null // requiredPermissions ); } } @@ -1058,6 +1076,8 @@ class InfoCenter extends Auth_Controller show_error($prestudenten->retval); } + $interessentenCount = array(); + foreach ($prestudenten->retval as $prestudent) { $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent->prestudent_id); @@ -1079,43 +1099,128 @@ 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 + $zgvpruefung->changeup = false; + $zgvpruefung->changedown = false; + + if (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz == 'Interessent') + { + if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) + { + $studiensemester = $zgvpruefung->prestudentstatus->studiensemester_kurzbz; + $zgvpruefung->changeup = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, -1); + $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); + if (array_key_exists($studiensemester, $interessentenCount)) + $interessentenCount[$studiensemester]++; + else + $interessentenCount[$studiensemester] = 1; + } + } + $zgvpruefungen[] = $zgvpruefung; } - // Interessenten come first, otherwise by bewerbungsdatum desc, then by prestudent_id desc - usort($zgvpruefungen, function ($a, $b) { - $bewdatesort = isset($a->prestudentstatus) && isset($b->prestudentstatus) ? strcmp($b->prestudentstatus->bewerbung_abgeschicktamum, $a->prestudentstatus->bewerbung_abgeschicktamum) : 0; - $defaultsort = $bewdatesort === 0 ? (int)$b->prestudent_id - (int)$a->prestudent_id : $bewdatesort; - if (!isset($a->prestudentstatus->status_kurzbz) || !isset($b->prestudentstatus->status_kurzbz)) - return $defaultsort; - elseif ($a->prestudentstatus->status_kurzbz === 'Interessent' && $b->prestudentstatus->status_kurzbz === 'Interessent') - { - //infoonly Interessenten come after new Interessenten - if ($a->infoonly === $b->infoonly) - return $defaultsort; - elseif ($a->infoonly) - return 1; - elseif ($b->infoonly) - return -1; - } - elseif ($a->prestudentstatus->status_kurzbz === 'Interessent') - return -1; - elseif ($b->prestudentstatus->status_kurzbz === 'Interessent') - return 1; - else - return $defaultsort; - }); + $this->load->model('organisation/studiensemester_model', 'StudiensemesterModel'); + + $this->_sortPrestudents($zgvpruefungen); $statusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => 'Abgewiesener'))->retval; $data = array ( 'zgvpruefungen' => $zgvpruefungen, + 'numberinteressenten' => $interessentenCount, 'statusgruende' => $statusgruende ); return $data; } + /** + * Helper function for sorting prestudents + * @param $zgvpruefungen + */ + private function _sortPrestudents(&$zgvpruefungen) + { + usort($zgvpruefungen, function ($a, $b) { + //sort: + // 1: Studiensemester + if (isset($a->prestudentstatus->studiensemester_kurzbz) || isset($b->prestudentstatus->studiensemester_kurzbz)) + { + if (!isset($a->prestudentstatus->studiensemester_kurzbz)) + return 1; + elseif(!isset($b->prestudentstatus->studiensemester_kurzbz)) + return -1; + + $starta = $this->StudiensemesterModel->load($a->prestudentstatus->studiensemester_kurzbz); + if (!hasData($starta)) + { + show_error($starta->retval); + } + + $startb = $this->StudiensemesterModel->load($b->prestudentstatus->studiensemester_kurzbz); + if (!hasData($startb)) + { + show_error($startb->retval); + } + + $starta = date_format(date_create($starta->retval[0]->start), 'Y-m-d'); + $startb = date_format(date_create($startb->retval[0]->start), 'Y-m-d'); + + if ($starta > $startb) + return -1; + elseif ($starta < $startb) + return 1; + } + // 2: Status + if (isset($a->prestudentstatus->status_kurzbz) || isset($a->prestudentstatus->status_kurzbz)) + { + if (!isset($b->prestudentstatus->status_kurzbz)) + return -1; + elseif (!isset ($a->prestudentstatus->status_kurzbz)) + return 1; + elseif ($a->prestudentstatus->status_kurzbz !== $b->prestudentstatus->status_kurzbz) + { + if ($a->prestudentstatus->status_kurzbz === 'Interessent') + return -1; + elseif ($b->prestudentstatus->status_kurzbz === 'Interessent') + return 1; + } + } + + // 3: Priorisierung, Nulls last + if (isset($a->priorisierung) || isset($b->priorisierung)) + { + if (!isset($a->priorisierung)) + return 1; + elseif (!isset($b->priorisierung)) + return -1; + elseif ($a->priorisierung > $b->priorisierung) + return 1; + elseif ($a->priorisierung < $b->priorisierung) + return -1; + } + + // 4: Bewerbungsdatum + $starta = isset($a->prestudentstatus->bewerbung_abgeschicktamum) ? $a->prestudentstatus->bewerbung_abgeschicktamum : null; + $startb = isset($b->prestudentstatus->bewerbung_abgeschicktamum) ? $b->prestudentstatus->bewerbung_abgeschicktamum : null; + + if (isset($starta) || isset($startb)) + { + if (!isset($starta)) + return 1; + elseif(!isset($startb)) + return -1; + elseif ($starta > $startb) + return -1; + elseif ($starta < $startb) + return 1; + } + + // 5: prestudentid + return (int)$b->prestudent_id - (int)$a->prestudent_id; + }); + } + /** * Helper function for redirecting to initial page for person from a prestudent-specific page * @param $prestudent_id diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index 6273cb962..b636c3fe5 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -26,6 +26,8 @@ class DB_Model extends FHC_Model private $executedQueryMetaData; private $executedQueryListFields; + private $debugMode; + /** * Constructor */ @@ -42,6 +44,10 @@ class DB_Model extends FHC_Model // Loads the UDF library $this->load->library('UDFLib'); + // Loads the logs library + $this->load->library('LogLib'); + + $this->debugMode = isset($this->db->db_debug) && $this->db->db_debug === true; } // ------------------------------------------------------------------------------------------ @@ -62,7 +68,11 @@ class DB_Model extends FHC_Model if (isError($validate = $this->_manageUDFs($data, $this->dbTable))) return $validate; // DB-INSERT - if ($this->db->insert($this->dbTable, $data)) + $insert = $this->db->insert($this->dbTable, $data); + + $this->_logLastQuery(); + + if ($insert) { // If the table has a primary key that uses a sequence if ($this->hasSequence === true) @@ -126,7 +136,11 @@ class DB_Model extends FHC_Model $this->db->where($tmpId); // DB-UPDATE - if ($this->db->update($this->dbTable, $data)) + $update = $this->db->update($this->dbTable, $data); + + $this->_logLastQuery(); + + if ($update) { return success($id); } @@ -164,7 +178,11 @@ class DB_Model extends FHC_Model } // DB-DELETE - if ($this->db->delete($this->dbTable, $tmpId)) + $delete = $this->db->delete($this->dbTable, $tmpId); + + $this->_logLastQuery(); + + if ($delete) { return success($id); } @@ -201,15 +219,7 @@ class DB_Model extends FHC_Model $tmpId = array($this->pk => $id); } - // DB-SELECT - if ($result = $this->db->get_where($this->dbTable, $tmpId)) - { - return success($this->_toPhp($result)); - } - else - { - return error($this->db->error(), FHC_DB_ERROR); - } + return $this->loadWhere($tmpId); } /** @@ -223,7 +233,11 @@ class DB_Model extends FHC_Model if (is_null($this->dbTable)) return error(FHC_MODEL_ERROR, FHC_NODBTABLE); // Execute query - if ($result = $this->db->get_where($this->dbTable, $where)) + $result = $this->db->get_where($this->dbTable, $where); + + $this->_logLastQuery(); + + if ($result) { return success($this->_toPhp($result)); } @@ -292,6 +306,9 @@ class DB_Model extends FHC_Model // Execute the query $resultDB = $this->db->get_where($this->dbTable, $where); + + $this->_logLastQuery(); + // If everything went ok... if ($resultDB) { @@ -603,7 +620,6 @@ class DB_Model extends FHC_Model // Workaround to get metadata from this table $result = $this->db->query(sprintf(DB_Model::QUERY_LIST_FIELDS, $this->dbTable)); - if (is_object($result)) { $listFields = $result->list_fields(); @@ -736,6 +752,8 @@ class DB_Model extends FHC_Model $resultDB = $this->db->query($query); } + $this->_logLastQuery(); + // If no errors occurred if ($resultDB) { @@ -940,4 +958,12 @@ class DB_Model extends FHC_Model return $this->execQuery($query, array(strtolower($schema), strtolower($table))); } + + /** + * + */ + private function _logLastQuery() + { + if ($this->debugMode) $this->loglib->logDebug($this->db->last_query()); + } } diff --git a/application/libraries/FiltersLib.php b/application/libraries/FiltersLib.php index 51c399f29..5d9fb5b26 100644 --- a/application/libraries/FiltersLib.php +++ b/application/libraries/FiltersLib.php @@ -263,7 +263,6 @@ class FiltersLib public function generateDatasetQuery($query, $filters) { $datasetQuery = 'SELECT * FROM ('.$query.') '.self::DATASET_TABLE_ALIAS; - $trimedval = trim($query); // If the given query is valid and the parameter filters is an array if (!isEmptyString($query) && $filters != null && is_array($filters)) @@ -366,7 +365,7 @@ class FiltersLib public function removeSelectedField($selectedField) { $removeSelectedField = false; - $trimedval = (isset($selectedField)?trim($selectedField):''); + // Checks the parameter selectedField if (!isEmptyString($selectedField)) { @@ -400,7 +399,7 @@ class FiltersLib public function addSelectedField($selectedField) { $removeSelectedField = false; - $trimedval = (isset($selectedField)?trim($selectedField):''); + // Checks the parameter selectedField if (!isEmptyString($selectedField)) { @@ -429,7 +428,7 @@ class FiltersLib public function removeAppliedFilter($appliedFilter) { $removeAppliedFilter = false; - $trimedval = (isset($appliedFilter)?trim($appliedFilter):''); + // Checks the parameter appliedFilter if (!isEmptyString($appliedFilter)) { @@ -517,7 +516,7 @@ class FiltersLib public function addFilter($filter) { $addFilter = false; - $trimedval = (isset($filter)?trim($filter):''); + // Checks the parameter filter if (!isEmptyString($filter)) { @@ -560,7 +559,7 @@ class FiltersLib public function saveCustomFilter($customFilterDescription) { $saveCustomFilter = false; // by default returns a failure - $trimedval = (isset($customFilterDescription)?trim($customFilterDescription):''); + // Checks parameter customFilterDescription if not valid stop the execution if (isEmptyString($customFilterDescription)) { diff --git a/application/libraries/LogLib.php b/application/libraries/LogLib.php index a42132644..cb0541003 100644 --- a/application/libraries/LogLib.php +++ b/application/libraries/LogLib.php @@ -16,27 +16,48 @@ class LogLib const CLASS_POSTFIX = '->'; const LINE_SEPARATOR = ':'; + // -------------------------------------------------------------------------------------------------------------- + // Public methods + /** - * format + * logDebug */ - private function format($class, $function, $line) + public function logDebug($message) { - $formatted = LogLib::CALLER_PREFIX; - - if (!is_null($class) && $class != '') - { - $formatted .= $class.LogLib::CLASS_POSTFIX; - } - - $formatted .= $function.LogLib::LINE_SEPARATOR.$line.LogLib::CALLER_POSTFIX.' '; - - return $formatted; + $this->_log(LogLib::DEBUG, $message); } /** - * getCaller + * logInfo */ - private function getCaller() + public function logInfo($message) + { + $this->_log(LogLib::INFO, $message); + } + + /** + * logError + */ + public function logError($message) + { + $this->_log(LogLib::ERROR, $message); + } + + // -------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * log + */ + private function _log($level, $message) + { + log_message($level, $this->_getCaller().$message); + } + + /** + * _getCaller + */ + private function _getCaller() { $classIndex = 3; $functionIndex = 3; @@ -60,38 +81,23 @@ class LogLib $line = $backtrace_arr[$lineIndex]['line']; } - return $this->format($class, $function, $line); + return $this->_format($class, $function, $line); } /** - * log + * format */ - private function log($level, $message) + private function _format($class, $function, $line) { - log_message($level, $this->getCaller().$message); - } + $formatted = LogLib::CALLER_PREFIX; - /** - * logDebug - */ - public function logDebug($message) - { - $this->log(LogLib::DEBUG, $message); - } + if (!is_null($class) && $class != '') + { + $formatted .= $class.LogLib::CLASS_POSTFIX; + } - /** - * logInfo - */ - public function logInfo($message) - { - $this->log(LogLib::INFO, $message); - } + $formatted .= $function.LogLib::LINE_SEPARATOR.$line.LogLib::CALLER_POSTFIX.' '; - /** - * logError - */ - public function logError($message) - { - $this->log(LogLib::ERROR, $message); + return $formatted; } } diff --git a/application/libraries/NavigationLib.php b/application/libraries/NavigationLib.php index 1b15943ea..812467c78 100644 --- a/application/libraries/NavigationLib.php +++ b/application/libraries/NavigationLib.php @@ -69,7 +69,7 @@ class NavigationLib public function oneLevel( $description, $link = '#', $children = null, $icon = '', $expand = false, $subscriptDescription = null, $subscriptLinkClass = null, $subscriptLinkValue = null, $target = '', - $sort = null, $requiredPermissions = null) + $sort = null, $requiredPermissions = null, $subscriptLinkHref = '#') { return array( 'description' => $description, @@ -82,7 +82,8 @@ class NavigationLib 'subscriptLinkClass' => $subscriptLinkClass, 'subscriptLinkValue' => $subscriptLinkValue, 'sort' => $sort, - 'requiredPermissions' => $requiredPermissions + 'requiredPermissions' => $requiredPermissions, + 'subscriptLinkHref' => $subscriptLinkHref ); } @@ -235,8 +236,7 @@ class NavigationLib { $extensionArray = array_merge_recursive( $extensionArray, - $this->_wildcardsearch($config[$configName], - $navigationPage) + $this->_wildcardsearch($config[$configName], $navigationPage) ); } } diff --git a/application/libraries/PhrasesLib.php b/application/libraries/PhrasesLib.php index 88e79b467..6793f38e0 100644 --- a/application/libraries/PhrasesLib.php +++ b/application/libraries/PhrasesLib.php @@ -194,7 +194,6 @@ class PhrasesLib { $_phrase = $this->_phrases[$i]; // single phrase - $trimedval = trim($_phrase->text); // If the single phrase match the given parameters and is not an empty string if ($_phrase->category == $category && $_phrase->phrase == $phrase diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 4cfe08e9a..b7e54185e 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -185,7 +185,6 @@ class Prestudent_model extends DB_Model return $this->execQuery(sprintf($query, is_array($prestudent_id) ? 'IN' : '='), array($prestudent_id)); } - /** * gets extended zgv data (with zgv bezeichnung) for a prestudent * includes last status, Studiengang, zgv, zgv master @@ -219,6 +218,18 @@ class Prestudent_model extends DB_Model if (count($lastStatus->retval) > 0) { + // get Studiengangname from Studienlan and -ordnung + $studienordnung = $this->PrestudentstatusModel->getStudienordnungFromPrestudent($prestudent_id); + if ($studienordnung->error) + return error($studienordnung->retval); + + if (count($studienordnung->retval) > 0) + { + $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; + } + $this->load->model('system/sprache_model', 'SpracheModel'); $language = $this->SpracheModel->load($lastStatus->retval[0]->sprache); @@ -278,4 +289,234 @@ class Prestudent_model extends DB_Model return $this->execQuery($qry, $parametersArray); } + + /** + * Returns a list with Bewerbungen (applications) + * @param $person_id person who sent application(s) + * @param string $studiensemester_kurzbz + * @param bool $abgeschickt optional, wether application was filled out and sent + * @param bool $bestaetigt optional, wether application was confirmed by infocenter + * @return array with Bewerber + */ + public function getBewerbungen($person_id, $studiensemester_kurzbz = null, $abgeschickt = null, $bestaetigt = null) + { + $bewerbungen = array(); + $prestudents = $this->loadWhere(array('person_id' => $person_id)); + + if (!hasData($prestudents)) + return $bewerbungen; + + $this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel'); + + foreach ($prestudents->retval as $prestudent) + { + $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent->prestudent_id, $studiensemester_kurzbz); + + if (!hasData($lastStatus)) + continue; + + $lastStatus = $lastStatus->retval[0]; + + if ($lastStatus->status_kurzbz !== 'Interessent') + continue; + + $bewerbung_abgeschicktamum = $lastStatus->bewerbung_abgeschicktamum; + $bestaetigtam = $lastStatus->bestaetigtam; + + $abgeschicktcond = true; + if (($abgeschickt === false && isset($bewerbung_abgeschicktamum)) || ($abgeschickt === true && !isset($bewerbung_abgeschicktamum))) + $abgeschicktcond = false; + + $bestaetigtcond = true; + if (($bestaetigt === false && isset($bestaetigtam)) || ($bestaetigt === true && !isset($bestaetigtam))) + $bestaetigtcond = false; + + if ($bestaetigtcond && $abgeschicktcond) + { + $prestudent->lastStatus = $lastStatus; + $bewerbungen[] = $prestudent; + } + } + + return $bewerbungen; + } + + /** + * Checks if application priority can be changed for a prestudent + * @param $prestudent_id + * @param $studiensemester Semester in which Prestudent applied + * @param $change increase priority (< 0) or decrease priority (> 0) + * @return bool wether priority can be changed + */ + public function checkPrioChange($prestudent_id, $studiensemester, $change) + { + if (!is_numeric($change)) + return false; + + $this->addSelect('person_id, priorisierung'); + $prestudent = $this->load($prestudent_id); + + if (!hasData($prestudent)) + return false; + + $person_id = $prestudent->retval[0]->person_id; + + $bewerberarr = $this->getBewerbungen($person_id, $studiensemester); + + //Prio can be added when prio is null and there is only one prestudent + if (count($bewerberarr) === 1 && !isset($prestudent->retval[0]->priorisierung) && $change < 0) + return true; + + if (count($bewerberarr) <= 1) + return false; + + if (!isset($prestudent->retval[0]->priorisierung)) + { + if ($change < 0) + return true; //null values can be changed to priority numbers (prority increase) + else + return false; + } + + $priomin = 0; + $priomax = PHP_INT_MAX; + $currprio = intval($prestudent->retval[0]->priorisierung); + + foreach ($bewerberarr as $bewerber) + { + if (is_numeric($bewerber->priorisierung)) + { + $bewprio = intval($bewerber->priorisierung); + if ($bewprio < $priomax) + $priomax = $bewprio; + + if ($bewprio > $priomin) + $priomin = $bewprio; + } + } + + //no prio change when prestudent has max or min prio + if (($currprio === $priomax && $change < 0) || ($currprio === $priomin && $change > 0)) + { + return false; + } + + return true; + } + + /** + * Changes application priority for a prestudent + * Swaps priorities with nearest neighbour (nearest bewerber/prestudent) + * for the same studiensemester in order to move priority up/down + * @param $prestudent_id + * @param $change increase priority (< 0) or decrease priority (> 0) + * @return bool wether change of priority was sucessfull + */ + public function changePrio($prestudent_id, $change) + { + $this->addSelect('person_id, priorisierung'); + $prestudent = $this->load($prestudent_id); + + if (!hasData($prestudent)) + return false; + + $this->load->model('prestudentstatus_model', 'PrestudentstatusModel'); + $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id, null, 'Interessent'); + + if (!hasData($lastStatus)) + return false; + + $studiensemester_kurzbz = $lastStatus->retval[0]->studiensemester_kurzbz; + + if (!$this->checkPrioChange($prestudent_id, $studiensemester_kurzbz, $change)) + return false; + + $person_id = $prestudent->retval[0]->person_id; + $currprio = intval($prestudent->retval[0]->priorisierung); + + $difftonext = PHP_INT_MAX; + $neighbour = null; + + $bewerberarr = $this->getBewerbungen($person_id, $studiensemester_kurzbz ); + + foreach ($bewerberarr as $bewerber) + { + if (is_numeric($bewerber->priorisierung)) + { + $bewprio = intval($bewerber->priorisierung); + + $diff = 0; + if ($change < 0 && ($bewprio < $currprio || is_null($prestudent->retval[0]->priorisierung))) //prio up + { + $diff = $currprio - $bewprio; + } + elseif ($change > 0 && $bewprio > $currprio) + { + $diff = $bewprio - $currprio; + } + + if ($diff !== 0 && $diff < $difftonext) + { + $difftonext = $diff; + $neighbour = $bewerber; + } + } + } + + if (is_null($prestudent->retval[0]->priorisierung)) + { + //if null value, add as prio 1 + $newprio = isset($neighbour->priorisierung) ? intval($neighbour->priorisierung) + 1 : 1; + + $result = $this->PrestudentModel->update( + $prestudent_id, + array( + 'priorisierung' => $newprio + ) + ); + + if (isError($result)) + { + return false; + } + else + { + return true; + } + } + else + { + $this->db->trans_start(false); + //prio swap + $resultFirst = $this->PrestudentModel->update( + $prestudent_id, + array( + 'priorisierung' => intval($neighbour->priorisierung) + ) + ); + + + $resultSecond = $this->PrestudentModel->update( + $neighbour->prestudent_id, + array( + 'priorisierung' => $currprio + ) + ); + + // Transaction complete! + $this->db->trans_complete(); + + // Check if everything went ok during the transaction + if ($this->db->trans_status() === false || isError($resultFirst) || isError($resultSecond)) + { + $this->db->trans_rollback(); + return false; + } + else + { + $this->db->trans_commit(); + return true; + } + } + } } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index db98ddff6..fb265edbe 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -37,10 +37,11 @@ class Prestudentstatus_model extends DB_Model array_push($parametersArray, $studiensemester_kurzbz); $query .= ' AND studiensemester_kurzbz = ?'; } + if ($status_kurzbz != '') { array_push($parametersArray, $status_kurzbz); - $query .= ' AND status_kurzbz = ?'; + $query .= ' AND tbl_prestudentstatus.status_kurzbz = ?'; } $query .= ' ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1'; @@ -113,6 +114,41 @@ class Prestudentstatus_model extends DB_Model * @param $prestudent_id * @return array */ + public function getStudienordnungFromPrestudent($prestudent_id) + { + $lastStatus = $this->getLastStatus($prestudent_id); + + if ($lastStatus->error) + { + return error($lastStatus->retval); + } + + if (count($lastStatus->retval) > 0) + { + $lastStatus = $lastStatus->retval[0]; + + $this->addJoin('lehre.tbl_studienplan', 'studienplan_id'); + $this->addJoin('lehre.tbl_studienordnung', 'studienordnung_id'); + return $this->loadWhere( + array( + 'public.tbl_prestudentstatus.prestudent_id' => $lastStatus->prestudent_id, + 'public.tbl_prestudentstatus.status_kurzbz' => $lastStatus->status_kurzbz, + 'public.tbl_prestudentstatus.studiensemester_kurzbz' => $lastStatus->studiensemester_kurzbz, + 'public.tbl_prestudentstatus.ausbildungssemester' => $lastStatus->ausbildungssemester + ) + ); + } + else + { + return success(array()); + } + } + + /** + * Gets Studienordnung for last status of Prestudent, including ZGV information text + * @param $prestudent_id + * @return array + */ public function getStudienordnungWithZgvText($prestudent_id) { $lastStatus = $this->getLastStatus($prestudent_id); @@ -140,7 +176,7 @@ class Prestudentstatus_model extends DB_Model } else { - return sucess(array()); + return success(array()); } } } diff --git a/application/models/person/Adresse_model.php b/application/models/person/Adresse_model.php index 3b17ce956..e049f5ad6 100644 --- a/application/models/person/Adresse_model.php +++ b/application/models/person/Adresse_model.php @@ -11,4 +11,15 @@ class Adresse_model extends DB_Model $this->dbTable = 'public.tbl_adresse'; $this->pk = 'adresse_id'; } + + + /** + * gets person data from uid + * @param $uid + * @return array + */ + public function getZustellAdresse($person_id) + { + return $this->loadWhere(array('person_id' => $person_id, 'zustelladresse'=> true)); + } } diff --git a/application/views/person/bpk/bpkData.php b/application/views/person/bpk/bpkData.php new file mode 100644 index 000000000..f7bf75b50 --- /dev/null +++ b/application/views/person/bpk/bpkData.php @@ -0,0 +1,58 @@ + ' + SELECT + person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr, + staatsbuergerschaft, gebdatum + FROM + public.tbl_person + WHERE + matr_nr is not null + AND bpk is null + AND EXISTS(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) AND + person_id=tbl_person.person_id AND tbl_benutzer.aktiv=true) + ', + 'requiredPermissions' => 'admin', + 'additionalColumns' => array('Details'), + 'columnsAliases' => array( + 'PersonID', + ucfirst($this->p->t('person', 'vorname')) , + ucfirst($this->p->t('person', 'nachname')), + ucfirst($this->p->t('person', 'geschlecht')), + ucfirst($this->p->t('person', 'svnr')), + ucfirst($this->p->t('person', 'ersatzkennzeichen')), + ucfirst($this->p->t('person', 'matrikelnummer')), + ucfirst($this->p->t('person', 'staatsbuergerschaft')), + ucfirst($this->p->t('person', 'geburtsdatum')), + ), + 'formatRow' => function($datasetRaw) { + + /* NOTE: Dont use $this here for PHP Version compatibility */ + $datasetRaw->{'Details'} = sprintf( + 'Details', + site_url('person/BPKWartung/showDetails'), + $datasetRaw->{'person_id'}, + 'index', + (isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'') + ); + + if ($datasetRaw->{'ersatzkennzeichen'} == null) + { + $datasetRaw->{'ersatzkennzeichen'} = '-'; + } + if ($datasetRaw->{'svnr'} == null) + { + $datasetRaw->{'svnr'} = '-'; + } + + return $datasetRaw; + } + ); + + $filterWidgetArray['app'] = 'core'; + $filterWidgetArray['datasetName'] = 'overview'; + $filterWidgetArray['filterKurzbz'] = 'BPKWartung'; + $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); + + echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); +?> diff --git a/application/views/person/bpk/bpkDetails.php b/application/views/person/bpk/bpkDetails.php new file mode 100644 index 000000000..e771cb7f5 --- /dev/null +++ b/application/views/person/bpk/bpkDetails.php @@ -0,0 +1,153 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'bPK Details', + 'jquery' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'jqueryui' => true, + 'ajaxlib' => true, + 'tablesorter' => true, + 'tinymce' => true, + 'sbadmintemplate' => true, + 'addons' => true, + 'navigationwidget' => true, + 'customCSSs' => array( + 'public/css/sbadmin2/admintemplate.css', + 'public/css/sbadmin2/tablesort_bootstrap.css', + 'public/css/infocenter/infocenterDetails.css' + ), + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/tablesort/tablesort.js' + ), + 'phrases' => array( + 'ui' => array( + 'gespeichert', + 'fehlerBeimSpeichern' + ), + 'global' => array( + 'bis', + 'zeilen' + ) + ) + ) + ); +?> + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+

p->t('global', 'stammdaten')) ?>

+
+
+
+
+ + titelpre)): ?> + + + + + + + + + + + + + + titelpost)): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('person','titelpre')) ?>titelpre ?>
p->t('person','vorname')) ?>vorname ?>
p->t('person','nachname')) ?> + nachname ?>
p->t('person','titelpost')) ?>titelpost ?>
p->t('person','geburtsdatum')) ?> + gebdatum), 'd.m.Y') ?>
p->t('person','svnr')) ?> + svnr ?>
p->t('person','ersatzkennzeichen')) ?> + ersatzkennzeichen ?>
p->t('person','staatsbuergerschaft')) ?> + staatsbuergerschaft ?>
p->t('person','geschlecht')) ?> + geschlecht ?>
p->t('person','bpk')) ?> + bpk ?>
p->t('person','postleitzahl')) ?> + plz ?>
p->t('person','strasse')) ?> + strasse ?>
+
+
+
+ + + + + +
+

+
+ bPK + + +
+
+
+
+
+
+
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/person/bpk/bpkwartung.php b/application/views/person/bpk/bpkwartung.php new file mode 100644 index 000000000..53450a9d8 --- /dev/null +++ b/application/views/person/bpk/bpkwartung.php @@ -0,0 +1,51 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'bPK Wartung', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', + 'customJSs' => array('public/js/bootstrapper.js') + ) + ); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ Bei folgenden Personen mit Matrikelnummer konnte kein bPK ermittelt werden. + Es ist die Namensschreibweise zu prüfen und ggf zu korrigieren. + Falls die Person keine Meldeadresse hat, ist eine Eintragung der + Person in das "Ergänzungsregister für natürliche Personen" notwendig. +

+ load->view('person/bpk/bpkData.php'); ?> +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index f1276bb36..424bac3f9 100755 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -1,200 +1,209 @@ ' - SELECT + WITH currentOrNextStudiensemester AS ( + SELECT ss.studiensemester_kurzbz + FROM public.tbl_studiensemester ss + WHERE ss.ende > NOW() + ORDER BY ss.ende + LIMIT 3 + ) + + SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", p.nachname AS "Nachname", p.gebdatum AS "Gebdatum", p.staatsbuergerschaft AS "Nation", + pl.zeitpunkt AS "LockDate", + pl.lockuser AS "LockUser", + pd.parkdate AS "ParkDate", ( - SELECT zeitpunkt - FROM system.tbl_log - WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') - AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\', \'Interessent rejected\') - AND person_id = p.person_id - ORDER BY zeitpunkt DESC - LIMIT 1 + SELECT l.zeitpunkt + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 ) AS "LastAction", ( - SELECT insertvon - FROM system.tbl_log - WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') - AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\', \'Interessent rejected\') - AND person_id = p.person_id - ORDER BY zeitpunkt DESC - LIMIT 1 + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 ) AS "User/Operator", ( - SELECT - pss.studiensemester_kurzbz - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 + SELECT pss.studiensemester_kurzbz + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 ) AS "Studiensemester", ( SELECT pss.bewerbung_abgeschicktamum - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) ) - AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\' and psss.studiensemester_kurzbz = \'WS2018\') - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 ) AS "SendDate", ( - SELECT count(*) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() + SELECT COUNT(*) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) ) - AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\' and psss.studiensemester_kurzbz = \'WS2018\') - LIMIT 1 + LIMIT 1 ) AS "AnzahlAbgeschickt", - array_to_string( - ( - SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - JOIN lehre.tbl_studienplan using (studienplan_id) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) ) - AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\' and psss.studiensemester_kurzbz = \'WS2018\') - LIMIT 1 - ),\', \' + LIMIT 1 ) AS "StgAbgeschickt", - array_to_string( - ( - SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - JOIN lehre.tbl_studienplan using (studienplan_id) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NULL) - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) ) - AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\' and psss.studiensemester_kurzbz = \'WS2018\') - LIMIT 1 - ),\', \' + LIMIT 1 ) AS "StgNichtAbgeschickt", - array_to_string( - ( - SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - JOIN lehre.tbl_studienplan using (studienplan_id) - WHERE pss.status_kurzbz in (\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\') - AND (pss.bewerbung_abgeschicktamum IS NULL) - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE start >= NOW() + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.') + AND pss.bewerbung_abgeschicktamum IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.start >= NOW()) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) ) - AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\' and psss.studiensemester_kurzbz = \'WS2018\') - LIMIT 1 - ),\', \' - ) AS "StgAktiv", - pl.zeitpunkt AS "LockDate", - pl.lockuser AS "LockUser", - pd.parkdate AS "ParkDate" - FROM public.tbl_person p - LEFT JOIN (SELECT person_id, zeitpunkt, uid as lockuser FROM system.tbl_person_lock WHERE app = \''.$APP.'\') pl USING(person_id) - LEFT JOIN ( - SELECT person_id, zeitpunkt as parkdate - FROM system.tbl_log - WHERE logtype_kurzbz = \'Processstate\' - AND logdata->>\'name\' = \'Parked\' - AND zeitpunkt >= now() + LIMIT 1 + ) AS "StgAktiv" + FROM public.tbl_person p + LEFT JOIN ( + SELECT tpl.person_id, + tpl.zeitpunkt, + tpl.uid AS lockuser + FROM system.tbl_person_lock tpl + WHERE tpl.app = '.$APP.' + ) pl USING(person_id) + LEFT JOIN ( + SELECT l.person_id, + l.zeitpunkt AS parkdate + FROM system.tbl_log l + WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' + AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.' + AND l.zeitpunkt >= NOW() ) pd USING(person_id) - WHERE - EXISTS( + WHERE + EXISTS ( SELECT 1 - FROM - public.tbl_prestudent - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE - person_id=p.person_id - AND tbl_studiengang.typ in(\'b\') - AND \'Interessent\' = (SELECT status_kurzbz FROM public.tbl_prestudentstatus - WHERE prestudent_id=tbl_prestudent.prestudent_id - ORDER BY datum DESC, insertamum DESC, ext_id DESC - LIMIT 1 - ) - AND EXISTS ( - SELECT - 1 - FROM - public.tbl_prestudentstatus - WHERE - prestudent_id = tbl_prestudent.prestudent_id - AND status_kurzbz = \'Interessent\' - AND (bestaetigtam IS NULL AND (bewerbung_abgeschicktamum is null OR bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\')) - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - ) + FROM public.tbl_prestudent sps + JOIN public.tbl_studiengang ssg USING(studiengang_kz) + WHERE sps.person_id = p.person_id + AND ssg.typ IN ('.$STUDIENGANG_TYP.') + AND '.$INTERESSENT_STATUS.' = ( + SELECT spss.status_kurzbz + FROM public.tbl_prestudentstatus spss + WHERE spss.prestudent_id = sps.prestudent_id + ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC + LIMIT 1 + ) + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus spss + WHERE spss.prestudent_id = sps.prestudent_id + AND spss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND spss.bestaetigtam IS NULL + AND spss.bewerbung_abgeschicktamum IS NOT NULL + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) ) - ORDER BY "LastAction" ASC + ORDER BY "LastAction" ASC ', 'requiredPermissions' => 'infocenter', 'checkboxes' => 'PersonId', @@ -307,7 +316,7 @@ } ); - $filterWidgetArray['app'] = $APP; + $filterWidgetArray['app'] = 'infocenter'; $filterWidgetArray['datasetName'] = 'overview'; $filterWidgetArray['filterKurzbz'] = 'InfoCenterSentApplicationAll'; $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 2fbfa7987..9a8a0a35e 100755 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -15,7 +15,8 @@ 'navigationwidget' => true, 'customCSSs' => array( 'public/css/sbadmin2/admintemplate.css', - 'public/css/sbadmin2/tablesort_bootstrap.css' + 'public/css/sbadmin2/tablesort_bootstrap.css', + 'public/css/infocenter/infocenterDetails.css' ), 'customJSs' => array( 'public/js/bootstrapper.js', @@ -71,6 +72,8 @@  p->t('ui', 'freigeben')) ?> + +   @@ -118,7 +121,7 @@ p->t('infocenter', 'zgv').' - '.ucfirst($this->p->t('lehre', 'pruefung'))?> -
+
load->view('system/infocenter/zgvpruefungen.php'); ?>
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index d96f42c9f..818eda1d5 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -1,137 +1,114 @@ ' - SELECT + SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", p.nachname AS "Nachname", p.gebdatum AS "Gebdatum", p.staatsbuergerschaft AS "Nation", + pl.zeitpunkt AS "LockDate", + pl.lockuser AS "LockUser", ( - SELECT zeitpunkt - FROM system.tbl_log - WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') - AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') - AND person_id = p.person_id - ORDER BY zeitpunkt DESC - LIMIT 1 + SELECT l.zeitpunkt + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 ) AS "LastAction", ( - SELECT insertvon - FROM system.tbl_log - WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') - AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') - AND person_id = p.person_id - ORDER BY zeitpunkt DESC - LIMIT 1 + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 ) AS "User/Operator", ( - SELECT - pss.studiensemester_kurzbz - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 + SELECT pss.studiensemester_kurzbz + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 ) AS "Studiensemester", ( SELECT pss.bewerbung_abgeschicktamum - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 ) AS "SendDate", ( - SELECT count(*) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - LIMIT 1 + SELECT COUNT(*) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + LIMIT 1 ) AS "AnzahlAbgeschickt", - array_to_string( - ( - SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz)) - FROM - public.tbl_prestudentstatus pss - INNER JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE pss.status_kurzbz = \'Interessent\' - AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') - AND ps.person_id = p.person_id - AND tbl_studiengang.typ in(\'b\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) - LIMIT 1 - ),\', \' - ) AS "StgAbgeschickt", - pl.zeitpunkt AS "LockDate", - pl.lockuser as "LockUser" - FROM public.tbl_person p - LEFT JOIN (SELECT person_id, zeitpunkt, uid as lockuser FROM system.tbl_person_lock WHERE app = \''.$APP.'\') pl USING(person_id) - WHERE - EXISTS( + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz)), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + LIMIT 1 + ) AS "StgAbgeschickt" + FROM public.tbl_person p + LEFT JOIN ( + SELECT tpl.person_id, + tpl.zeitpunkt, + tpl.uid AS lockuser + FROM system.tbl_person_lock tpl + WHERE tpl.app = '.$APP.' + ) pl USING(person_id) + WHERE + EXISTS ( SELECT 1 - FROM - public.tbl_prestudent - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE - person_id=p.person_id - AND tbl_studiengang.typ in(\'b\') - - AND EXISTS ( - SELECT - 1 - FROM - public.tbl_prestudentstatus - WHERE - prestudent_id = tbl_prestudent.prestudent_id - AND status_kurzbz = \'Interessent\' - AND (bestaetigtam IS NOT NULL AND bewerbung_abgeschicktamum >= \''.$NOTBEFORE.'\') - AND studiensemester_kurzbz IN ( - SELECT studiensemester_kurzbz - FROM public.tbl_studiensemester - WHERE ende >= NOW() - ) + FROM public.tbl_prestudent ps + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus pss + WHERE pss.prestudent_id = ps.prestudent_id + AND pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bestaetigtam IS NOT NULL + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) ) ) - ORDER BY "LastAction" DESC + ORDER BY "LastAction" DESC ', 'requiredPermissions' => 'infocenter', 'checkboxes' => 'PersonId', @@ -216,7 +193,7 @@ } ); - $filterWidgetArray['app'] = $APP; + $filterWidgetArray['app'] = 'infocenter'; $filterWidgetArray['datasetName'] = 'freigegeben'; $filterWidgetArray['filterKurzbz'] = 'InfoCenterFreigegeben5days'; $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); diff --git a/application/views/system/infocenter/stammdaten.php b/application/views/system/infocenter/stammdaten.php index 709370012..6681e29d3 100755 --- a/application/views/system/infocenter/stammdaten.php +++ b/application/views/system/infocenter/stammdaten.php @@ -1,6 +1,12 @@
+ titelpre)): ?> + + + + + @@ -10,6 +16,12 @@ + titelpost)): ?> + + + + + kontakttyp === 'email'): ?> - - kontakttyp === 'telefon'): ?> - + + kontakttyp === 'telefon' || $kontakt->kontakttyp === 'mobil'): ?> + + + diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index b68ac5310..8640b70db 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -1,43 +1,90 @@
infoonly; + $studiensemester = isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz) ? $zgvpruefung->prestudentstatus->studiensemester_kurzbz : ''; + $studiengangkurzbz = empty($zgvpruefung->prestudentstatus->studiengangkurzbzlang) ? $zgvpruefung->studiengang : $zgvpruefung->prestudentstatus->studiengangkurzbzlang; + $studiengangbezeichnung = empty($zgvpruefung->prestudentstatus->studiengangbezeichnung) ? $zgvpruefung->studiengangbezeichnung : $zgvpruefung->prestudentstatus->studiengangbezeichnung; + //set bootstrap columns for zgv form $columns = array(4, 3, 2, 3); $headercolumns = array(7, 5); if (!$infoonly && isset($zgvpruefung->prestudentstatus->bewerbungsnachfrist) && isset($zgvpruefung->prestudentstatus->bewerbungstermin)) { - $headercolumns[0] = 5; - $headercolumns[1] = 7; + $headercolumns[0] = 4; + $headercolumns[1] = 8; } + + if (!$first) + echo '
'; + + if (!in_array($studiensemester, $unique_studsemester)): + $unique_studsemester[] = $studiensemester; + + if (!$first) + echo '
'; + + if (isEmptyString($studiensemester)): ?> -
+

p->t('global', 'ohne').' '.$this->p->t('lehre', 'studiensemester') ?>

+ +

+ +
- prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz === 'Interessent'/* && !$infoonly*/): ?> + changeup) && $zgvpruefung->changeup === true; + $changedown = isset($zgvpruefung->changedown) && $zgvpruefung->changedown === true; + ?> +
+ prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz === 'Interessent'): ?> + > prestudentstatus->bestaetigtam)): ?> -
p->t('global', 'anStudiengangFreigegeben') ?> -
-
- p->t('infocenter','bewerbung')) . ' ' . $this->p->t('global','abgeschickt') . ': '.(isset($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum) ? '' : ''); ?> + p->t('infocenter', 'bewerbung')) . ' ' . $this->p->t('global', 'abgeschickt') . ': '.(isset($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum) ? '' : ''); ?> prestudentstatus->bewerbungsnachfrist) ? ' | ' . $this->p->t('infocenter', 'nachfrist') . ': ' . date_format(date_create($zgvpruefung->prestudentstatus->bewerbungsnachfrist), 'd.m.Y') : ''); ?> prestudentstatus->bewerbungstermin) ? ' | ' . $this->p->t('infocenter', 'bewerbungsfrist') . ': ' . date_format(date_create($zgvpruefung->prestudentstatus->bewerbungstermin), 'd.m.Y') : ''); ?> -
+ p->t('infocenter', 'priorisierung')) . ': '; + echo isset($zgvpruefung->priorisierung) ? $zgvpruefung->priorisierung : $this->p->t('global', 'nichtvorhanden'); ?> + + + + + + + + + + + +
- + prestudentstatus->status_kurzbz)) { @@ -60,8 +107,8 @@
- - prestudentstatus->studiensemester_kurzbz) ? $zgvpruefung->prestudentstatus->studiensemester_kurzbz : '' ?> + +
@@ -73,7 +120,7 @@
- + prestudentstatus->orgform)) ? ', ' : ''; @@ -101,7 +148,7 @@ $zgvinfocolumns = $infoonly ? 4 : 9; ?>
- + zgvort); else: @@ -127,7 +174,7 @@
- + zgvdatum) ? "" : date_format(date_create($zgvpruefung->zgvdatum), 'd.m.Y'); if ($infoonly): @@ -143,7 +190,7 @@
- + zgvnation_bez; else @@ -173,7 +220,7 @@
- + zgvmaort; else: @@ -186,7 +233,7 @@
- + zgvmadatum) ? "" : date_format(date_create($zgvpruefung->zgvmadatum), 'd.m.Y'); if ($infoonly): @@ -201,7 +248,7 @@
-
+
zgvmanation_bez; @@ -237,69 +284,65 @@ //Prestudenten cannot be abgewiesen or freigegeben if already done if (!$infoonly) : ?> - diff --git a/application/views/system/messageList.php b/application/views/system/messageList.php index 11f83bc9c..76c77612a 100644 --- a/application/views/system/messageList.php +++ b/application/views/system/messageList.php @@ -47,7 +47,8 @@ $widthColumn = $msgExists === true ? 8 : 12; autoresize_min_height: 140, autoresize_max_height: 495, //callback to avoid conflict with ajax (for getting body of first message) - init_instance_callback: "initMsgBody" + init_instance_callback: "initMsgBody", + responsive: true }); function initMsgBody() diff --git a/cis/private/coodle/termin.php b/cis/private/coodle/termin.php old mode 100644 new mode 100755 index 93b4233fd..8f0a2cfb7 --- a/cis/private/coodle/termin.php +++ b/cis/private/coodle/termin.php @@ -619,7 +619,7 @@ echo ' }); } }); - + // Autocomplete Feld fuer Ressourcen initialisieren $("#input_ressource").autocomplete({ source: "coodle_autocomplete.php?work=ressource", @@ -708,8 +708,8 @@ echo ' error: function() { alert("Error fetching data for "+typ+" "+id); }, - color:"lightgrey" - //textColor:"black" + color:"lightgrey", + textColor:"#777" }); } diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index a41e362fd..d3919d25e 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -286,39 +286,39 @@ foreach ($noten_obj->result as $row) changedwarning.innerHTML = '
t('benotungstool/geaenderteNotenVorhanden'); ?>
'; } } - else - { - alert(resp); - document.getElementById(uid).note.value=""; + else + { + alert(resp); + document.getElementById(uid).note.value=""; } - }, + }, error:function(result) { alert('Speichern der Note fehlgeschlagen'); } }); - } - - // ************************************************* - // * Formular zum Eintragen einer Pruefung erstellen - // ************************************************* - function pruefungAnlegen(uid,datum,note,lehreinheit_id,punkte,typ) - { - if(typeof(typ)=='undefined') - typ = 'Termin2'; - var str = "
p->t('person','titelpre')) ?>titelpre ?>
p->t('person','vorname')) ?> vorname ?> nachname ?>
p->t('person','titelpost')) ?>titelpost ?>
p->t('person','geburtsdatum')) ?> @@ -57,21 +69,23 @@ kontakte as $kontakt): ?>
p->t('person','email')) ?>p->t('person','telefon')) ?>p->t('person', 'email')) ?>p->t('person', 'telefon')) ?>kontakttyp) ?> kontakttyp.'">';?> kontakttyp === 'email'): ?> - + kontakt; if ($kontakt->kontakttyp === 'email'): ?> - - + + '?> anmerkung; ?>
"; - str += ""; - - var anlegendiv = document.getElementById("nachpruefung_div"); - var y = getOffset('y'); y = y+50; - anlegendiv.style.top = y+"px"; - var x = getOffset('x'); x = x+300; - anlegendiv.style.left = x+"px"; - str += ""; - str += ""; - str += "
X
t('benotungstool/pruefungAnlegenFuer');?> "+uid+":
t('global/datum');?>:"; - str += ""; - str += ""; + } + + // ************************************************* + // * Formular zum Eintragen einer Pruefung erstellen + // ************************************************* + function pruefungAnlegen(uid,datum,note,lehreinheit_id,punkte,typ) + { + if(typeof(typ)=='undefined') + typ = 'Termin2'; + var str = " "; + str += ""; + + var anlegendiv = document.getElementById("nachpruefung_div"); + var y = getOffset('y'); y = y+50; + anlegendiv.style.top = y+"px"; + var x = getOffset('x'); x = x+300; + anlegendiv.style.left = x+"px"; + str += ""; + str += ""; + str += ""; result as $row) } echo ''; ?>'; - str += "
X
t('benotungstool/pruefungAnlegenFuer');?> "+uid+":
t('global/datum');?>:"; + str += ""; + str += ""; str += " [DD.MM.YYYY]
"; + str += "
"; str += "result as $row) if (resp == "update_f" || resp == "update") { - notenstatus.innerHTML = ""; + notenstatus.innerHTML = ""; if (warningdiv != null) warningdiv.parentNode.removeChild(warningdiv); // Entfernt das Warning-Div - changedwarning.innerHTML = '
t('benotungstool/geaenderteNotenVorhanden'); ?>
'; - } - document.getElementById("lvnoteneingabe_"+uid).style.visibility = "hidden"; - anlegendiv.innerHTML = ""; - anlegendiv.style.visibility = "hidden"; - var pruefhtml = ""; + changedwarning.innerHTML = '
t('benotungstool/geaenderteNotenVorhanden'); ?>
'; + } + document.getElementById("lvnoteneingabe_"+uid).style.visibility = "hidden"; + anlegendiv.innerHTML = ""; + anlegendiv.style.visibility = "hidden"; + var pruefhtml = "
"+datum+"
"; pruefhtml += ""; pruefhtml += "
"+datum+""+noten_array[note]+"result as $row) // **** function GradeImport() { - var str = "
"; - str += ""; - var anlegendiv = document.getElementById("nachpruefung_div"); - var y = getOffset('y'); y = y+50; anlegendiv.style.top = y+"px"; - str += ''; - str += ''; - str += "'; - + // Bereits eingetragene Note ermitteln if ($lvgesamtnote = new lvgesamtnote($lvid, $uid, $stsem)) { @@ -1147,7 +1157,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $note_lv = null; $punkte_lv = null; } - + $notensumme = 0; $notensumme_gewichtet = 0; $gewichtsumme = 0; @@ -1157,7 +1167,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $negativeteilnote = false; $note_zusatztext = ''; $note_zusatztext_tooltip = ''; - + if (isset($data['grades'])) { // Teilnoten summieren und Notenvorschlag berechnen @@ -1173,7 +1183,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $anzahlnoten += 1; } $note_zusatztext_tooltip .= $row_grades['text'] . "\n"; - + if (isset($noten_array[$row_grades['grade']]) && ! $noten_array[$row_grades['grade']]['positiv']) { $negativeteilnote = true; @@ -1186,7 +1196,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $note_zusatztext .= '
'; } } - + $punkte_vorschlag = ''; if (! is_null($note_lv)) { @@ -1226,23 +1236,23 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG { $note_vorschlag = null; } - + if ($zeugnisnote = new zeugnisnote($lvid, $uid, $stsem)) $znote = $zeugnisnote->note; else $znote = null; - + if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE) { $htmlstring .= ''; } - + if (key_exists($uid, $studpruef_arr)) $hide = "style='display:none;visibility:hidden;'"; else $hide = "style='display:block;visibility:visible;'"; - + if (! defined('CIS_GESAMTNOTE_UEBERSCHREIBEN') || CIS_GESAMTNOTE_UEBERSCHREIBEN || (! CIS_GESAMTNOTE_UEBERSCHREIBEN && is_null($znote))) { $htmlstring .= "'; } - + if (isset($noten_array[$note_lv]) && $noten_array[$note_lv]['positiv'] == false) $negmarkier = ' class="negative"'; else $negmarkier = ""; - + // LV Note $htmlstring .= ''; - + // status $htmlstring .= ""; if (($znote) && ($note_lv != $znote)) $stylestr = " style='color:red; border-color:red; border-style:solid; border-width:1px;'"; else $stylestr = ""; - + // Zeugnisnote $htmlstring .= ""; if (isset($noten_array[$znote])) $htmlstring .= $noten_array[$znote]['bezeichnung_mehrsprachig'][$sprache]; $htmlstring .= ""; - + if (isset($noten_array[$znote]) && $noten_array[$znote]['positiv'] == false) $summe_ng ++; - + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) { // Pruefung 2. Termin @@ -1372,7 +1382,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $pr_punkte = $studpruef_arr[$uid][$le_id_stud]["punkte"]; $pr_datum = $studpruef_arr[$uid][$le_id_stud]["datum"]; $pr_le_id = $le_id_stud; - + if ($pr_punkte != '') { $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; @@ -1380,10 +1390,10 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } else $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; - + $onclick = "pruefungAnlegen('" . $uid . "','" . $pr_datum . "','" . $pr_note . "',"; $onclick .= "'" . $pr_le_id . "','" . $pr_punkte . "')"; - + $htmlstring .= ' @@ -1425,7 +1435,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } } } - + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) { // Pruefung 3. Termin @@ -1442,7 +1452,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $pr_punkte = $studpruef_arr_t3[$uid][$le_id_stud]["punkte"]; $pr_datum = $studpruef_arr_t3[$uid][$le_id_stud]["datum"]; $pr_le_id = $le_id_stud; - + if ($pr_punkte != '') { $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; @@ -1450,10 +1460,10 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } else $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; - + $onclick = "pruefungAnlegen('" . $uid . "',"; $onclick .= "'" . $pr_datum . "','" . $pr_note . "','" . $pr_le_id . "','" . $pr_punkte . "','Termin3')"; - + $htmlstring .= ' @@ -1488,7 +1498,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $htmlstring .= ""; } } - + if (defined('CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF') && CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF) { // komm Pruefung @@ -1505,7 +1515,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $pr_punkte = $studpruef_komm[$uid][$le_id_stud]["punkte"]; $pr_datum = $studpruef_komm[$uid][$le_id_stud]["datum"]; $pr_le_id = $le_id_stud; - + if ($pr_punkte != '') { $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; @@ -1513,7 +1523,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } else $pr_notenbezeichnung = $noten_array[$pr_note]['bezeichnung_mehrsprachig'][$sprache]; - + $htmlstring .= ' @@ -1529,7 +1539,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $htmlstring .= ""; } } - + $htmlstring .= ""; $i ++; } diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 18930b7b6..4f6437358 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -45,47 +45,47 @@ if(!check_lektor($uid)) if (!$db = new basis_db()) die('Fehler beim Herstellen der Datenbankverbindung'); - + if(isset($_GET['lvid']) && is_numeric($_GET['lvid'])) $lvid=$_GET['lvid']; else die("Fehlerhafte Parameteruebergabe"); - + if(isset($_GET['stg']) && is_numeric($_GET['stg'])) $stg=$_GET['stg']; -else +else die("Fehlerhafte Parameteruebergabe"); - + if(isset($_GET['gruppe_kurzbz'])) $gruppe_kurzbz = $_GET['gruppe_kurzbz']; -else +else $gruppe_kurzbz = ''; - + if(isset($_GET['sem']) && is_numeric($_GET['sem'])) $sem = $_GET['sem']; -else +else $sem = ''; - + if(isset($_GET['verband'])) $verband = $_GET['verband']; -else +else $verband = ''; - + if(isset($_GET['gruppe']) && is_numeric($_GET['gruppe'])) $gruppe = $_GET['gruppe']; else $gruppe = ''; - + if(isset($_GET['stsem'])) $stsem = $_GET['stsem']; else die('Studiensemester muss uebergeben werden'); - + if(isset($_GET['lehreinheit_id'])) $lehreinheit_id = $_GET['lehreinheit_id']; -else +else $lehreinheit_id = ''; - + /* * Create Excel File */ @@ -93,7 +93,7 @@ else // Creating a workbook $workbook = new Spreadsheet_Excel_Writer(); $workbook->setVersion(8); - + // sending HTTP headers $workbook->send($p->t('anwesenheitsliste/notenliste'). "_" . date("d_m_Y") . ".xls"); $workbook->setCustomColor (15,192,192,192); //Setzen der HG-Farbe Hellgrau @@ -105,12 +105,12 @@ else $format_bold =& $workbook->addFormat(); $format_bold->setBold(); - + $format_highlight =& $workbook->addFormat(); $format_highlight->setFgColor(15); $format_highlight->setBorder(1); $format_highlight->setBorderColor('white'); - + $format_border_bottom =& $workbook->addFormat(); $format_border_bottom ->setBottom(2); $format_border_bottom->setBold(); @@ -124,17 +124,17 @@ else $format_title->setAlign('merge'); $lvobj = new lehrveranstaltung($lvid); - + $worksheet->write(0,0,$p->t('anwesenheitsliste/notenliste')." ".($sprache=='English'?$lvobj->bezeichnung_english:$lvobj->bezeichnung),$format_bold); - + $stg_obj = new studiengang($stg); - + $qry = "SELECT - distinct on(kuerzel, semester, verband, gruppe, gruppe_kurzbz) UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel, - semester, verband, gruppe, gruppe_kurzbz + distinct on(kuerzel, semester, verband, gruppe, gruppe_kurzbz) UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel, + semester, verband, gruppe, gruppe_kurzbz FROM - campus.vw_lehreinheit - WHERE + campus.vw_lehreinheit + WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND studiensemester_kurzbz=".$db->db_add_param($stsem); if($lehreinheit_id!='') $qry.=" AND lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); @@ -152,26 +152,26 @@ else $gruppen.=$row->gruppe_kurzbz; } } - + $worksheet->write(1,0,$p->t('global/studiengang').": $stg_obj->bezeichnung $gruppen"); $lines=2; //Lektoren ermitteln - - $qry = "SELECT - distinct vorname, nachname - FROM - campus.vw_benutzer, lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter - WHERE - uid=mitarbeiter_uid AND - tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND - lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND + + $qry = "SELECT + distinct vorname, nachname + FROM + campus.vw_benutzer, lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter + WHERE + uid=mitarbeiter_uid AND + tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND + lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND studiensemester_kurzbz=".$db->db_add_param($stsem); - + if($lehreinheit_id!='') $qry.=" AND tbl_lehreinheit.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); - + $qry.=' ORDER BY nachname, vorname'; - + if($result = $db->db_query($qry)) { while($row=$db->db_fetch_object($result)) @@ -183,42 +183,43 @@ else //Studenten holen $lines++; - $worksheet->write($lines,1,$p->t('global/nachname'),$format_border_bottom); - $worksheet->write($lines,2,$p->t('global/vorname'),$format_border_bottom); - $worksheet->write($lines,3,$p->t('global/gruppe'),$format_border_bottom); - $worksheet->write($lines,4,$p->t('global/personenkennzeichen'),$format_border_bottom); + $worksheet->write($lines,1,$p->t('global/uid'),$format_border_bottom); + $worksheet->write($lines,2,$p->t('global/nachname'),$format_border_bottom); + $worksheet->write($lines,3,$p->t('global/vorname'),$format_border_bottom); + $worksheet->write($lines,4,$p->t('global/gruppe'),$format_border_bottom); + $worksheet->write($lines,5,$p->t('global/personenkennzeichen'),$format_border_bottom); if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) - $worksheet->write($lines,5,$p->t('benotungstool/punkte'),$format_border_bottom); + $worksheet->write($lines,6,$p->t('benotungstool/punkte'),$format_border_bottom); else - $worksheet->write($lines,5,$p->t('benotungstool/note'),$format_border_bottom); + $worksheet->write($lines,6,$p->t('benotungstool/note'),$format_border_bottom); $stsem_obj = new studiensemester(); $stsem_obj->load($stsem); $stsemdatumvon = $stsem_obj->start; - $stsemdatumbis = $stsem_obj->ende; - - $qry = "SELECT + $stsemdatumbis = $stsem_obj->ende; + + $qry = "SELECT distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid, tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, - tbl_zeugnisnote.note - FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) + tbl_zeugnisnote.note + FROM + campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - WHERE - vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND + WHERE + vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem); if($lehreinheit_id!='') $qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); - + $qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC'; - + if($result = $db->db_query($qry)) { $i=1; @@ -226,36 +227,37 @@ else while($elem = $db->db_fetch_object($result)) { if(!preg_match('*dummy*',$elem->uid) && $elem->semester!=10) - { + { if($elem->status!='Abbrecher' && $elem->status!='Unterbrecher') { $worksheet->write($lines,0,$i); if($elem->status=='Incoming') $inc=' (i)'; - else + else $inc=''; if($elem->bisio_id!='' && $elem->status!='Incoming' && ($elem->bis > $stsemdatumvon || $elem->bis=='') && $elem->von < $stsemdatumbis) //Outgoing $inc.=' (o)'; - + if($elem->note==6) //angerechnet { $inc.=' (ar)'; $note='ar'; } - else + else $note=''; - $worksheet->write($lines,1,$elem->nachname.$inc); - $worksheet->write($lines,2,$elem->vorname); - $worksheet->write($lines,3,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"'); - $worksheet->write($lines,4,'="'.trim($elem->matrikelnr).'"',$format_highlight); - $worksheet->write($lines,5,$note,$format_highlight); + $worksheet->write($lines,1,$elem->uid); + $worksheet->write($lines,2,$elem->nachname.$inc); + $worksheet->write($lines,3,$elem->vorname); + $worksheet->write($lines,4,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"'); + $worksheet->write($lines,5,'="'.trim($elem->matrikelnr).'"',$format_highlight); + $worksheet->write($lines,6,$note,$format_highlight); $i++; $lines++; } } } } - + //Noten $note = new note(); $note->getAll(); @@ -266,8 +268,8 @@ else $aufteilung = array(); foreach($notenschluessel->result as $row) - $aufteilung[$row->note]=$row->punkte; - + $aufteilung[$row->note]=$row->punkte; + $worksheet->write(++$lines,0,$p->t('benotungstool/note').":"); foreach($note->result as $row) { @@ -285,19 +287,20 @@ else $worksheet->write(++$lines,0,$row->bezeichnung.' ('.$row->anmerkung.')'); } } - + $worksheet->writeBlank(++$lines,0,0); $worksheet->writeBlank(++$lines,0,$format_highlight); $worksheet->write($lines,1,'...'.$p->t('anwesenheitsliste/anleitungImportFunktion')); $lines++; - $worksheet->write(++$lines,0,'(i) ... Incoming'); + $worksheet->write(++$lines,0,'(i) ... Incoming'); $worksheet->write(++$lines,0,'(o) ... Outgoing'); $worksheet->write(++$lines,0,'(ar) ... '.$p->t('anwesenheitsliste/angerechnet')); - + $worksheet->setColumn(0, 0, 5); - $worksheet->setColumn(1, 1, 25); - $worksheet->setColumn(2, 2, 25); - $worksheet->setColumn(3, 3, 7); - $worksheet->setColumn(4, 4, 21); + $worksheet->setColumn(0, 1, 16); + $worksheet->setColumn(0, 2, 25); + $worksheet->setColumn(0, 3, 25); + $worksheet->setColumn(0, 4, 7); + $worksheet->setColumn(0, 5, 21); $workbook->close(); ?> diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index d35b53655..6f2848bdf 100755 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -24,6 +24,7 @@ require_once('../../../config/cis.config.inc.php'); require_once('../../../config/global.config.inc.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/globals.inc.php'); +require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/studiengang.class.php'); require_once('../../../include/studienordnung.class.php'); require_once('../../../include/person.class.php'); @@ -42,6 +43,7 @@ require_once('../../../include/fotostatus.class.php'); require_once('../../../include/addon.class.php'); require_once('../../../include/gruppe.class.php'); require_once('../../../include/adresse.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); @@ -51,14 +53,21 @@ if (!$db = new basis_db()) $uid = get_uid(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + $datum_obj = new datum(); -$ansicht = false; //Wenn ein anderer User sich das Profil ansieht (Bei Personensuche) -if (isset($_GET['uid'])) +// Wenn ein anderer User sich das Profil ansieht (Bei Personensuche) sollen bestimmte persönliche Daten nicht angezeigt werden +// außer der User selber oder berechtigte Personen +$ansicht = false; +if (isset($_GET['uid']) && $_GET['uid'] != $uid) { $uid = stripslashes($_GET['uid']); $ansicht = true; } +if ($rechte->isBerechtigt('basis/kontakt')) + $ansicht = false; if (!$ansicht && isset($_GET['action'])) { @@ -230,7 +239,10 @@ echo ''; //echo ''; echo ''; @@ -171,8 +171,47 @@ function searchPerson($searchItems) echo ''; //echo ''; echo ''; - echo ''; - echo ''; + echo ''; + // Display phone number + echo ''; echo ''; if($row->alias!='' && !in_array($row->studiengang_kz, $noalias)) $mail = $row->alias.'@'.DOMAIN; @@ -271,9 +310,46 @@ function searchOE($searchItems) echo ''; - - echo ''; + echo ''; + + // Display phone number + echo ''; + echo ''; //if($row->alias!='' && !in_array($row->studiengang_kz, $noalias)) ??? Was macht $noalias? if($person->alias!='') diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 59715d4fa..f044c1472 100755 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1087,7 +1087,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) $summe=0; $dr = new zeitaufzeichnung(); - $dr->getDienstreisenUser($user); + $dr->getDienstreisenUser($user, 180); $dr_arr = $dr->result; //var_dump($dr->result); diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 51e961223..da435c5dc 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -62,7 +62,7 @@ $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); $ztauf = new zeitaufzeichnung(); -$activitiesToIgnore = array('DienstreiseMT');//aktivitaetstypen which shouldn't be added to worktime +$activitiesToIgnore = array('DienstreiseMT', 'Ersatzruhe');//aktivitaetstypen which shouldn't be added to worktime $ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$daysinmonth, $activitiesToIgnore); //objects for one projectline of list (corresponds to one day) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index f33f91db4..21f2cc2c3 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -89,6 +89,10 @@ define('CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE', true); // Vertraege fuer Pruefungshonorare anzulegen define('FAS_GESAMTNOTE_PRUEFUNGSHONORAR',false); +// Gibt an ob die Note im Notenfreigabemail enthalten ist oder nicht +// Aus Datenschutzgründen ist dies per default deaktiviert +define('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE', false); + // Grenzwerte für Anwesenheit define('FAS_ANWESENHEIT_ROT', 70); define('FAS_ANWESENHEIT_GELB', 90); diff --git a/content/statistik/alvsstatistik.php b/content/statistik/alvsstatistik.php index e1b851654..982427c9a 100644 --- a/content/statistik/alvsstatistik.php +++ b/content/statistik/alvsstatistik.php @@ -22,7 +22,6 @@ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/studiengang.class.php'); -require_once('../../include/fachbereich.class.php'); require_once('../../include/Excel/excel.php'); require_once('../../include/benutzerberechtigung.class.php'); @@ -45,24 +44,31 @@ $stg_arr = array(); foreach ($studiengang->result as $row) $stg_arr[$row->studiengang_kz] = $row->kuerzel.' ('.$row->kurzbzlang.')'; -$fachbereich = new fachbereich(); -$fachbereich->getAll(); +$oe_obj = new organisationseinheit(); +$oe_obj->getTypen(); +foreach($oe_obj->result as $row) +{ + $oetyp_arr[$row->organisationseinheittyp_kurzbz] = $row->bezeichnung; +} -$fb_arr = array(); -foreach ($fachbereich->result as $row) - $fb_arr[$row->fachbereich_kurzbz]=$row->bezeichnung; +$oe_obj = new organisationseinheit(); +$oe_obj->getAll(); + +$oe_arr = array(); +$oe_arr['']='Nicht Zugewiesen'; +foreach ($oe_obj->result as $row) + $oe_arr[$row->oe_kurzbz]=$oetyp_arr[$row->organisationseinheittyp_kurzbz].' '.$row->bezeichnung; $db = new basis_db(); -// ALVS pro Fachbereich +// ALVS pro OE $qry = " SELECT * FROM ( SELECT - fachbereich_kurzbz, tbl_lehrveranstaltung.studiengang_kz, geschlecht,sum(tbl_lehreinheitmitarbeiter.semesterstunden) as semesterstunden + lehrfach.oe_kurzbz as lehrfach_oe_kurzbz, tbl_lehrveranstaltung.studiengang_kz, geschlecht,sum(tbl_lehreinheitmitarbeiter.semesterstunden) as semesterstunden FROM lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_lehrveranstaltung as lehrfach, - public.tbl_fachbereich, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person @@ -73,28 +79,27 @@ SELECT * FROM ( tbl_lehreinheitmitarbeiter.mitarbeiter_uid = tbl_benutzer.uid AND tbl_benutzer.person_id = tbl_person.person_id AND tbl_lehreinheitmitarbeiter.semesterstunden<>0 AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND faktor<>0 AND stundensatz<>0 AND tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id - GROUP BY fachbereich_kurzbz, geschlecht, tbl_lehrveranstaltung.studiengang_kz + GROUP BY lehrfach.oe_kurzbz, geschlecht, tbl_lehrveranstaltung.studiengang_kz ) as a JOIN public.tbl_studiengang USING(studiengang_kz) -ORDER BY typ, tbl_studiengang.kurzbz, fachbereich_kurzbz +ORDER BY typ, tbl_studiengang.kurzbz, lehrfach_oe_kurzbz "; if(!$db->db_query($qry)) die('Fehler bei Datenbankabfrage'); -$fachbereiche = array(); +$organisationseinheiten = array(); while($row = $db->db_fetch_object()) { - if(!in_array($row->fachbereich_kurzbz, $fachbereiche)) - $fachbereiche[] = $row->fachbereich_kurzbz; - $data[$row->studiengang_kz][$row->fachbereich_kurzbz][$row->geschlecht]=$row->semesterstunden; + if(!in_array($row->lehrfach_oe_kurzbz, $organisationseinheiten)) + $organisationseinheiten[] = $row->lehrfach_oe_kurzbz; + $data[$row->studiengang_kz][$row->lehrfach_oe_kurzbz][$row->geschlecht]=$row->semesterstunden; } -sort($fachbereiche); +sort($organisationseinheiten); //Betreuerstunden $qry = " @@ -138,7 +143,6 @@ if($format=='xls') //Formate Definieren $format_bold =& $workbook->addFormat(); $format_bold->setBold(); - //$format_bold->setBorder(1); $format_border =& $workbook->addFormat(); $format_border->setBorder(1); @@ -147,19 +151,19 @@ if($format=='xls') $format_rotate->setTextRotation(270); $format_rotate->setAlign("center"); $format_rotate->setBold(); - + $format_m_w =& $workbook->addFormat(); $format_m_w->setAlign("center"); $format_m_w->setBold(); - + $format_data =& $workbook->addFormat(); $format_data->setNumFormat("0.00"); - + $format_bold_data =& $workbook->addFormat(); $format_bold_data->setBold(); $format_bold_data->setNumFormat("0.00"); $format_bold_data->setVAlign("vcenter"); - + $format_bold_center_data =& $workbook->addFormat(); $format_bold_center_data->setBold(); $format_bold_center_data->setNumFormat("0.00"); @@ -168,59 +172,45 @@ if($format=='xls') $spalte=0; $zeile=0; - $worksheet->write($zeile,$spalte,$stsem, $format_bold); $maxlength[$spalte]=13; - $summe_fb = array(); - foreach ($fachbereiche as $fb) + $summe_oe = array(); + foreach ($organisationseinheiten as $oe) { $zeile=0; - $worksheet->write($zeile,++$spalte,$fb_arr[$fb], $format_rotate); + $worksheet->write($zeile,++$spalte,$oe_arr[$oe], $format_rotate); $worksheet->mergeCells($zeile,$spalte,0,$spalte+1); - $fachbereiche[$fb]=$spalte; - + $organisationseinheiten_idx[$oe]=$spalte; + $worksheet->write(++$zeile,$spalte,'m',$format_m_w); $worksheet->write($zeile,++$spalte,'w',$format_m_w); - - //$fachbereiche[$fb]=$spalte; - $summe_fb[$fb]=array(); - //++$spalte; + + $summe_oe[$oe]=array(); + $maxlength[$spalte]=7; $maxlength[$spalte-1]=7; } $zeile=0; $worksheet->write($zeile,++$spalte,'Betreuungen', $format_rotate); $worksheet->mergeCells($zeile,$spalte,0,$spalte+1); - + $worksheet->write(++$zeile,$spalte,'m',$format_m_w); $worksheet->write($zeile,++$spalte,'w',$format_m_w); - + $maxlength[$spalte]=7; $maxlength[$spalte-1]=7; - - $fachbereiche['betreuungen']=$spalte-1; - //$maxlength[$spalte]=3; - $summe_fb['betreuungen']=array(); - //++$spalte; - + + $organisationseinheiten_idx['betreuungen']=$spalte-1; + $summe_oe['betreuungen']=array(); + $zeile=0; $worksheet->write($zeile,++$spalte,'Summe', $format_rotate); $worksheet->mergeCells($zeile,$spalte,0,$spalte+2); $worksheet->write(++$zeile,$spalte,'m',$format_m_w); $worksheet->write($zeile,++$spalte,'w',$format_m_w); $worksheet->write($zeile,++$spalte,'Gesamt',$format_m_w); - + $maxspalten=$spalte; - - /*++$zeile; - $spalte=0; - foreach ($fachbereiche as $fb) - { - $worksheet->write($zeile,++$spalte,'m'); - $worksheet->write($zeile,++$spalte,'w'); - //$fachbereiche[$fb]=$spalte; - //++$spalte; - }*/ if(isset($data)) { @@ -231,27 +221,23 @@ if($format=='xls') $worksheet->write($zeile,$spalte,$stg_arr[$key], $format_bold); $summe_m=0; $summe_w=0; - foreach ($data[$key] as $fb=>$stunden) + foreach ($data[$key] as $oe=>$stunden) { if(!isset($stunden['m'])) $stunden['m']=0; $summe_m+=$stunden['m']; - if(!isset($summe_fb[$fb]['m'])) - $summe_fb[$fb]['m']=0; - $summe_fb[$fb]['m']+=$stunden['m']; - $worksheet->write($zeile,$fachbereiche[$fb],$stunden['m'],$format_data); - //if($maxlength[$fachbereiche[$fb]]write($zeile,$organisationseinheiten_idx[$oe],$stunden['m'],$format_data); + if(!isset($stunden['w'])) $stunden['w']=0; $summe_w+=$stunden['w']; - if(!isset($summe_fb[$fb]['w'])) - $summe_fb[$fb]['w']=0; - $summe_fb[$fb]['w']+=$stunden['w']; - $worksheet->write($zeile,$fachbereiche[$fb]+1,$stunden['w'],$format_data); - //if($maxlength[$fachbereiche[$fb]]write($zeile,$organisationseinheiten_idx[$oe]+1,$stunden['w'],$format_data); } $worksheet->write($zeile,$maxspalten-2,number_format($summe_m,2,'.',''), $format_bold_data); $worksheet->write($zeile,$maxspalten-1,number_format($summe_w,2,'.',''), $format_bold_data); @@ -264,20 +250,20 @@ if($format=='xls') $zeile++; $worksheet->write($zeile,0,'Summe', $format_bold_data); $worksheet->mergeCells($zeile,0,$zeile+1,0); - //foreach ($summe_fb as $fb=>$summe) - foreach ($summe_fb as $fb=>$summe) + + foreach ($summe_oe as $oe=>$summe) { if(!isset($summe['m'])) $summe['m']=0; if(!isset($summe['w'])) $summe['w']=0; - - if(isset($fachbereiche[$fb])) - $worksheet->write($zeile,$fachbereiche[$fb],number_format($summe['m'],2,'.',''), $format_bold_center_data); - $worksheet->write($zeile,$fachbereiche[$fb]+1,number_format($summe['w'],2,'.',''), $format_bold_center_data); + + if(isset($organisationseinheiten_idx[$oe])) + $worksheet->write($zeile,$organisationseinheiten_idx[$oe],number_format($summe['m'],2,'.',''), $format_bold_center_data); + $worksheet->write($zeile,$organisationseinheiten_idx[$oe]+1,number_format($summe['w'],2,'.',''), $format_bold_center_data); $gesamt = $summe['m']+$summe['w']; - $worksheet->write(++$zeile,$fachbereiche[$fb],number_format($gesamt,2,'.',''), $format_bold_center_data); - $worksheet->mergeCells($zeile,$fachbereiche[$fb],$zeile,$fachbereiche[$fb]+1); + $worksheet->write(++$zeile,$organisationseinheiten_idx[$oe],number_format($gesamt,2,'.',''), $format_bold_center_data); + $worksheet->mergeCells($zeile,$organisationseinheiten_idx[$oe],$zeile,$organisationseinheiten_idx[$oe]+1); --$zeile; } @@ -303,72 +289,70 @@ else } td { - + } '; - - echo "

ALVS $stsem

"; echo '
X
t('benotungstool/importAnweisung');?>:
' onclick='saveGradeBulk();'>"; + var str = "
"; + str += ""; + var anlegendiv = document.getElementById("nachpruefung_div"); + var y = getOffset('y'); y = y+50; anlegendiv.style.top = y+"px"; + str += ''; + str += ''; + str += "
X
t('benotungstool/importAnweisung');?>:
' onclick='saveGradeBulk();'>"; str += "
"; anlegendiv.innerHTML = str; anlegendiv.style.visibility = "visible"; @@ -749,7 +749,7 @@ foreach ($stsem_obj->studiensemester as $studiensemester) { $selected = ($stsem == $studiensemester->studiensemester_kurzbz ? 'selected' : ''); $optionvalue = "lvgesamtnoteverwalten.php?lvid=$lvid&stsem=$studiensemester->studiensemester_kurzbz"; - + $stsem_content .= "\n"; @@ -768,7 +768,7 @@ if (! $rechte->isBerechtigt('admin', 0) && ! $rechte->isBerechtigt('admin', $lv_ tbl_lehrveranstaltung.lehrveranstaltung_id=" . $db->db_add_param($lvid, FHC_INTEGER) . " AND tbl_lehreinheit.studiensemester_kurzbz=" . $db->db_add_param($stsem) . " AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid=" . $db->db_add_param($user) . ';'; - + if ($result = $db->db_query($qry)) { if ($db->db_num_rows($result) == 0) @@ -803,19 +803,21 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) { $jetzt = date("Y-m-d H:i:s"); $neuenoten = 0; + $studlist = " - - - - "; - + + + + "; + if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) { $studlist .= "\n"; } $studlist .= "\n"; + $studlist .= "\n"; - + // studentenquery $qry_stud = "SELECT DISTINCT uid, vorname, nachname, matrikelnr @@ -839,9 +841,11 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) $lvgesamtnote->freigabedatum = $jetzt; $lvgesamtnote->freigabevon_uid = $user; $lvgesamtnote->save(); + $studlist .= ""; $studlist .= ""; $studlist .= ""; + if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) { $studlist .= "\n"; } $studlist .= ""; + $studlist .= "\n"; + $neuenoten ++; } } } } - + $studlist .= "
" . $p->t('global/personenkz') . "" . $p->t('global/nachname') . "" . $p->t('global/vorname') . "
" . $p->t('global/personenkz') . "" . $p->t('global/nachname') . "" . $p->t('global/vorname') . "" . $p->t('benotungstool/punkte') . "" . $p->t('benotungstool/note') . "" . $p->t('benotungstool/bearbeitetvon') . "
" . trim($row_stud->matrikelnr) . "" . trim($row_stud->nachname) . "" . trim($row_stud->vorname) . ""; @@ -850,18 +854,20 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) $studlist .= "" . $noten_array[trim($lvgesamtnote->note)]['bezeichnung_mehrsprachig'][$sprache] . "" . $lvgesamtnote->mitarbeiter_uid; if ($lvgesamtnote->updatevon != '') $studlist .= " (" . $lvgesamtnote->updatevon . ")"; $studlist .= "
"; - + // mail an assistentin und den user selber verschicken if ($neuenoten > 0) { @@ -869,29 +875,33 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) $sg = new studiengang($lv->studiengang_kz); $lektor_adresse = $user . "@" . DOMAIN; $adressen = $sg->email . ", " . $user . "@" . DOMAIN; - + $studienplan = new studienplan(); $studienplan->getStudienplanLehrveranstaltung($lvid, $stsem); $studienplan_bezeichnung = ''; foreach ($studienplan->result as $row) $studienplan_bezeichnung .= $row->bezeichnung . ' '; - + $mit = new mitarbeiter(); $mit->load($user); - - $freigeber = "" . mb_strtoupper($user) . ""; + $name = $mit->anrede.' '.$mit->vorname.' '.$mit->nachname.' ('.$mit->kurzbz.')'; + $betreff = 'Notenfreigabe ' . $lv->bezeichnung . ' ' . $lv->orgform_kurzbz . ' - ' . $studienplan_bezeichnung; $mail = new mail($adressen, 'vilesci@' . DOMAIN, $betreff, ''); $htmlcontent = " + $name hat neue Noten für die Lehrveranstaltung\n\n
" . $sg->kuerzel . ' ' . $lv->semester . '.Semester ' . $lv->bezeichnung . " " . $lv->orgform_kurzbz . " - " . $stsem . " - (" . $lv->semester . ". Sem.) -

" . $p->t('global/benutzer') . " " . $freigeber . " (" . $mit->kurzbz . ") - " . $p->t('benotungstool/hatDieLvNotenFuerFolgendeStudenten') . ": -

\n" . $studlist . " +
eingetragen.\n

+ Die Noten können jetzt ins Zeugnis übernommen werden.\n"; + + if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) + $htmlcontent.= $studlist; + + $htmlcontent.= "
Anzahl der Noten:" . $neuenoten . " -
" . $p->t('abgabetool/mailVerschicktAn') . ": " . $adressen . " +

" . $p->t('abgabetool/mailVerschicktAn') . ": " . $adressen . " "; $mail->setHTMLContent($htmlcontent); $mail->setReplyTo($lektor_adresse); @@ -909,7 +919,7 @@ if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) $onclickpath = "notenschluessel.php?lehrveranstaltung_id=$lvid&stsem=$stsem"; $onclickoptions = "height=200, width=350, left=50, top=50, resizable=yes, status=no,"; $onclickoptions .= "scrollbars=yes,toolbar=no,location=no,menubar=no,dependent=yes"; - + echo '
' . $p->t('gesamtnote/notenschluesselanzeigen') . ''; @@ -1078,7 +1088,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG studiensemester_kurzbz = " . $db->db_add_param($stsem) . " AND lehrveranstaltung_id = " . $db->db_add_param($lvid) . " ORDER BY nachname, vorname "; - + if ($result_stud = $db->db_query($qry_stud)) { $i = 1; @@ -1088,20 +1098,20 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG { $grades[$row_stud->uid]['vorname'] = $row_stud->vorname; $grades[$row_stud->uid]['nachname'] = $row_stud->nachname; - + // Noten aus Uebungstool $le = new lehreinheit(); $le->load_lehreinheiten($lvid, $stsem); foreach ($le->lehreinheiten as $l) { $legesamtnote = new legesamtnote($l->lehreinheit_id); - + if ($legesamtnote->load($row_stud->uid, $l->lehreinheit_id)) { $gewicht = $l->gewicht; if ($l->gewicht == '') $gewicht = 1; - + $grades[$row_stud->uid]['grades'][] = array( 'grade' => $legesamtnote->note, 'points' => null, @@ -1112,7 +1122,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } } } - + // Load Addons to modify grades $addon_obj = new addon(); if ($addon_obj->loadAddons()) @@ -1126,7 +1136,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } } } - + $anzahlChanged = 0; foreach ($grades as $uid => $data) { @@ -1135,7 +1145,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG
' . $db->convert_html_chars($uid) . ' ' . $db->convert_html_chars($data['nachname']) . ' ' . $db->convert_html_chars($data['vorname']) . ''; $htmlstring .= $note_zusatztext . '  @@ -1289,7 +1299,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $selected = 'selected'; else $selected = ''; - + if ($row_note->lehre && $row_note->aktiv) $htmlstring .= ''; } @@ -1307,12 +1317,12 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG { $htmlstring .= ''; if (isset($noten_array[$note_lv])) @@ -1320,7 +1330,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG if ($punkte_lv != '') $htmlstring .= ' (' . number_format($punkte_lv, 2) . ')'; $htmlstring .= '"; if (! $lvgesamtnote->freigabedatum) @@ -1330,7 +1340,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $htmlstring .= ""; $anzahlChanged ++; } - else + else $htmlstring .= ""; } elseif ($lvgesamtnote->benotungsdatum > $lvgesamtnote->freigabedatum) @@ -1340,22 +1350,22 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG } else $htmlstring .= ""; - + $htmlstring .= "
' . $pr_datum . ' ' . $pr_notenbezeichnung . '
' . $pr_datum . ' ' . $pr_notenbezeichnung . '
' . $pr_datum . '
'; echo ' '.($type == "student"?$p->t("profil/student"):$p->t('profil/mitarbeiter')).'

- '.$p->t('global/username').': '.$user->uid.'
+ '.$p->t('global/username').': '.$user->uid.'
'; +if ($type == 'student' && $person->matr_nr) + echo $p->t('global/matrikelnummer'). ": ". $person->matr_nr. "
"; +echo ' '.$p->t('global/anrede').': '.$user->anrede.'
'.$p->t('global/titel').': '.$user->titelpre.'
'; @@ -326,6 +338,16 @@ if ($type == 'mitarbeiter') echo $p->t('profil/telefonTw').": $vorwahl - $user->telefonklappe
"; //echo $p->t('profil/faxTw').": $vorwahl - 99 $user->telefonklappe
"; } + else { + $kontakt = new kontakt(); + $kontakt->load_pers($user->person_id); + foreach($kontakt->result as $k) + { + if ($k->kontakttyp == 'firmenhandy') + echo $p->t('profil/telefonTw').': '.$k->kontakt.'
'; + } + + } if ($user->ort_kurzbz != '') echo $p->t('profil/buero').': '.$user->ort_kurzbz.'
'; } @@ -400,9 +422,24 @@ if (!$ansicht) $kontakt = new kontakt(); $kontakt->load_pers($user->person_id); usort($kontakt->result, "sortKontakt"); + echo ''; foreach($kontakt->result as $k) { + if ($k->kontakttyp != 'firmenhandy' && $k->kontakttyp != 'hidden') + { + if ($k->zustellung) + $zustellung = '✓'; + else + $zustellung = '✗'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + /* if ($k->zustellung === TRUE) { switch($k->kontakttyp) @@ -420,7 +457,9 @@ if (!$ansicht) break; } } + */ } + echo '
'.$k->bezeichnung_mehrsprachig[$sprache].''.$k->kontakt.''.$k->anmerkung.''.$zustellung.'
'; } if ($user->homepage != '') diff --git a/cis/private/tools/suche.php b/cis/private/tools/suche.php index f9452e114..517f3bde0 100644 --- a/cis/private/tools/suche.php +++ b/cis/private/tools/suche.php @@ -52,7 +52,7 @@ echo ' - '; + '; include('../../../include/meta/jquery.php'); include('../../../include/meta/jquery-tablesorter.php'); @@ -158,7 +158,7 @@ function searchPerson($searchItems) { $bisverwendung = new bisverwendung(); $bisverwendung->getLastAktVerwendung($row->uid); - + echo '
',$row->titelpre,'',$row->anrede,'',$row->titelpost,'',($row->studiengang!=''?$row->studiengang:'-'),'',($row->mitarbeiter_uid==NULL?'StudentIn':'MitarbeiterIn'),'',($row->telefonklappe!=''?$row->telefonklappe:'-'),'',($row->mitarbeiter_uid==NULL?'StudentIn':'MitarbeiterIn'),''; + // * if user has telefonklappe, display it + if ($row->telefonklappe != '') + { + echo $row->telefonklappe; + } + // * if user has no telefonklappe, display business handy + else + { + $person = new Person(); + $person->getPersonFromBenutzer($row->uid); + $person_id = $person->person_id; + $kontakt = new Kontakt(); + + if ($kontakt->load_persKontakttyp($person_id, 'firmenhandy')) + { + $is_zugestellt = false; + foreach ($kontakt->result as $kontakt) + { + // display business handy only if zustellung is true + if ($kontakt->zustellung) + { + echo $kontakt->kontakt. "
"; + $is_zugestellt = true; + } + } + // if zustellung is false display '-' + if (!$is_zugestellt) + { + echo '-'; + } + } + // * if neither telefonklappe nor business handy, display '-' + else + { + echo '-'; + } + } + echo '
',($row->raum!=''?$row->raum:'-'),''.$bf->bezeichnung; if($bisverwendung->beschausmasscode=='5') echo ' (karenziert)'; - echo '',($mitarbeiter->telefonklappe!=''?$kontakt->kontakt.'-'.$mitarbeiter->telefonklappe:'-'),''; + // * if user has telefonklappe, display it + if ($mitarbeiter->telefonklappe != '') + { + echo $kontakt->kontakt. '-'. $mitarbeiter->telefonklappe; + } + // * if user has no telefonklappe, display business handy + else + { + $person_id = $person->person_id; + + if ($kontakt->load_persKontakttyp($person_id, 'firmenhandy')) + { + $is_zugestellt = false; + foreach ($kontakt->result as $kontakt) + { + // display business handy only if zustellung is true + if ($kontakt->zustellung) + { + echo $kontakt->kontakt. "
"; + $is_zugestellt = true; + } + } + // if zustellung is false display '-' + if (!$is_zugestellt) + { + echo '-'; + } + } + // * if neither telefonklappe nor business handy, display '-' + else + { + echo '-'; + } + } + echo '
',($mitarbeiter->ort_kurzbz!=''?$mitarbeiter->ort_kurzbz:'-'),'
'; echo ''; - $summe_fb = array(); + $summe_oe = array(); - foreach ($fachbereiche as $fb) + foreach ($organisationseinheiten as $oe) { - echo ""; - $summe_fb[$fb]=array(); + echo ""; + $summe_oe[$oe]=array(); } echo ""; - $summe_fb['betreuungen']=array(); + $summe_oe['betreuungen']=array(); echo ""; echo ""; // Spalten m/w echo ''; - foreach ($fachbereiche as $fb) + foreach ($organisationseinheiten as $oe) { echo ""; } echo ""; echo ""; - //$summe_fb['betreuungen']=0; + echo ""; echo ""; echo ""; echo ""; - // Für jeden Fachbereich eine Variable definieren - foreach ($fachbereiche as $fb) + // Für jede OE eine Variable definieren + foreach ($organisationseinheiten as $oe) { - $summe_fb[$fb]["m"] = 0; - $summe_fb[$fb]["w"] = 0; + $summe_oe[$oe]["m"] = 0; + $summe_oe[$oe]["w"] = 0; } - $summe_fb['betreuungen']['m'] = 0; - $summe_fb['betreuungen']['w'] = 0; + $summe_oe['betreuungen']['m'] = 0; + $summe_oe['betreuungen']['w'] = 0; foreach ($data as $key=>$val) { echo ""; echo ""; $summe_m =0; $summe_w =0; - foreach ($fachbereiche as $fb) + foreach ($organisationseinheiten as $oe) { - if(isset($data[$key][$fb]["m"])) + if(isset($data[$key][$oe]["m"])) { - $summe_m+=$data[$key][$fb]["m"]; - $summe_fb[$fb]["m"]+=$data[$key][$fb]["m"]; - echo ""; + $summe_m+=$data[$key][$oe]["m"]; + $summe_oe[$oe]["m"]+=$data[$key][$oe]["m"]; + echo ""; } else echo ""; - if(isset($data[$key][$fb]["w"])) + if(isset($data[$key][$oe]["w"])) { - $summe_w+=$data[$key][$fb]["w"]; - $summe_fb[$fb]["w"]+=$data[$key][$fb]["w"]; - echo ""; + $summe_w+=$data[$key][$oe]["w"]; + $summe_oe[$oe]["w"]+=$data[$key][$oe]["w"]; + echo ""; } else echo ""; @@ -376,7 +360,7 @@ else if(isset($data[$key]['betreuungen']['m'])) { echo ""; - $summe_fb['betreuungen']['m']+=$data[$key]['betreuungen']['m']; + $summe_oe['betreuungen']['m']+=$data[$key]['betreuungen']['m']; $summe_m+=$data[$key]['betreuungen']['m']; } else @@ -384,7 +368,7 @@ else if(isset($data[$key]['betreuungen']['w'])) { echo ""; - $summe_fb['betreuungen']['w']+=$data[$key]['betreuungen']['w']; + $summe_oe['betreuungen']['w']+=$data[$key]['betreuungen']['w']; $summe_w+=$data[$key]['betreuungen']['w']; } else @@ -398,44 +382,44 @@ else echo ""; echo ""; - foreach ($fachbereiche as $fb) + foreach ($organisationseinheiten as $oe) { - if(isset($summe_fb[$fb]["m"])) - echo ""; + if(isset($summe_oe[$oe]["m"])) + echo ""; else echo ""; - if(isset($summe_fb[$fb]["w"])) - echo ""; + if(isset($summe_oe[$oe]["w"])) + echo ""; else echo ""; } - if(isset($summe_fb['betreuungen']['m'])) - echo ""; + if(isset($summe_oe['betreuungen']['m'])) + echo ""; else echo ""; - if(isset($summe_fb['betreuungen']['w'])) - echo ""; + if(isset($summe_oe['betreuungen']['w'])) + echo ""; else echo ""; echo ""; echo ""; - + echo ""; //echo ""; - foreach ($fachbereiche as $fb) + foreach ($organisationseinheiten as $oe) { - if(isset($summe_fb[$fb]["m"]) || isset($summe_fb[$fb]["w"])) - echo ""; + if(isset($summe_oe[$oe]["m"]) || isset($summe_oe[$oe]["w"])) + echo ""; else echo ""; } - if(isset($summe_fb['betreuungen']['m']) || isset($summe_fb['betreuungen']['w'])) - echo ""; + if(isset($summe_oe['betreuungen']['m']) || isset($summe_oe['betreuungen']['w'])) + echo ""; else echo ""; echo ""; echo ""; - + echo '
'.$stsem.'".$fb_arr[$fb]."".$oe_arr[$oe]."BetreuungenSumme
 mwmwmwGesamt
".$stg_arr[$key]."".$data[$key][$fb]["m"]."".$data[$key][$oe]["m"]." ".$data[$key][$fb]["w"]."".$data[$key][$oe]["w"]." ".number_format($data[$key]['betreuungen']['m'],2)."".number_format($data[$key]['betreuungen']['w'],2)."
Summe".$summe_fb[$fb]["m"]."".$summe_oe[$oe]["m"]." ".$summe_fb[$fb]["w"]."".$summe_oe[$oe]["w"]." ".number_format($summe_fb['betreuungen']['m'],2)."".number_format($summe_oe['betreuungen']['m'],2)." ".number_format($summe_fb['betreuungen']['w'],2)."".number_format($summe_oe['betreuungen']['w'],2)."  
".($summe_fb[$fb]["m"] + $summe_fb[$fb]["w"])."".($summe_oe[$oe]["m"] + $summe_oe[$oe]["w"])." ".number_format(($summe_fb['betreuungen']['m'] + $summe_fb['betreuungen']['w']),2)."".number_format(($summe_oe['betreuungen']['m'] + $summe_oe['betreuungen']['w']),2)."  
'; echo ' '; diff --git a/content/statistik/lvplanung.php b/content/statistik/lvplanung.php index bff0417d5..be06f5c12 100644 --- a/content/statistik/lvplanung.php +++ b/content/statistik/lvplanung.php @@ -25,6 +25,7 @@ require_once('../../include/lehrveranstaltung.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); if(isset($_GET['studiengang_kz'])) $studiengang_kz = $_GET['studiengang_kz']; @@ -43,12 +44,18 @@ else if(isset($_GET['oe_kurzbz'])) $oe_kurzbz = $_GET['oe_kurzbz']; -else +else $oe_kurzbz = ''; $user = get_uid(); loadVariables($user); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if(!$rechte->isBerechtigt('assistenz', null, 's')) + die($rechte->errormsg); + $db = new basis_db(); $stg_arr = array(); @@ -62,6 +69,10 @@ if($studiengang_kz!='') { $studiengang = new studiengang(); $studiengang->load($studiengang_kz); + + if(!$rechte->isBerechtigt('assistenz', $studiengang->oe_kurzbz, 's')) + die($rechte->errormsg); + } if($mitarbeiter_uid!='') @@ -159,9 +170,9 @@ $qry = "SELECT tbl_person.person_id=tbl_benutzer.person_id AND lehrfach.oe_kurzbz=".$db->db_add_param($oe_kurzbz)." AND tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($semester_aktuell); - $qry.=" ORDER BY tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehreinheit.lehreinheit_id"; + $qry.=" ORDER BY tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehreinheit.lehreinheit_id"; } -else +else die('Fehlerhafte Parameteruebergabe'); echo ''; @@ -309,7 +320,7 @@ elseif($oe_kurzbz!='') (tbl_projektbetreuer.faktor*tbl_projektbetreuer.stundensatz*tbl_projektbetreuer.stunden)>0 "; } -else +else die('Something unexpected happend'); if($result = $db->db_query($qry)) @@ -329,7 +340,7 @@ if($result = $db->db_query($qry)) echo ""; echo ''; echo ''; - + $gesamtkosten_betreuung=0; $stunden_betreuung=0; while($row = $db->db_fetch_object($result)) diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php index 237fbe703..c8644f9e9 100644 --- a/content/statistik/lvplanung.xls.php +++ b/content/statistik/lvplanung.xls.php @@ -27,6 +27,8 @@ require_once('../../include/Excel/excel.php'); require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); require_once('../../include/mitarbeiter.class.php'); +require_once('../../include/organisationseinheit.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); $user = get_uid(); @@ -36,119 +38,114 @@ if(isset($_GET['studiensemester_kurzbz'])) $studiensemester_kurzbz = $_GET['studiensemester_kurzbz']; else if(isset($_POST['studiensemester_kurzbz'])) $studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; -else +else die('studiensemester_kurzbz muss uebergeben werden'); - + if(isset($_GET['studiengang_kz'])) $studiengang_kz = $_GET['studiengang_kz']; -else +else $studiengang_kz=''; - + if(isset($_GET['semester'])) $semester = $_GET['semester']; -else +else $semester=''; if(isset($_GET['oe_kurzbz'])) $oe_kurzbz = $_GET['oe_kurzbz']; -else +else $oe_kurzbz = ''; - + if(isset($_GET['uid'])) $uid = $_GET['uid']; -else +else $uid = ''; - + $db = new basis_db(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if($studiengang_kz != '') +{ + if(!$rechte->isBerechtigt('assistenz', $studiengang_kz, 's')) + die($rechte->errormsg); +} +elseif($oe_kurzbz!='') +{ + if(!$rechte->isBerechtigt('assistenz', $oe_kurzbz, 's')) + die($rechte->errormsg); +} +else +{ + if(!$rechte->isBerechtigt('assistenz', null, 's')) + die($rechte->errormsg); +} + +$oetyp = new organisationseinheit(); +$oetyp->getTypen(); + +foreach($oetyp->result as $row) +{ + $oetyp_arr[$row->organisationseinheittyp_kurzbz] = $row->bezeichnung; +} + +$oe = new organisationseinheit(); +$oe->getAll(); + +foreach($oe->result as $row) +{ + $oe_arr[$row->oe_kurzbz] = $oetyp_arr[$row->organisationseinheittyp_kurzbz].' '.$row->bezeichnung; +} +$oe_arr[''] = ''; $stg_obj = new studiengang(); $stg_obj->getAll('typ, kurzbz', false); $qry = " -SELECT (SELECT nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) - WHERE uid=COALESCE(tbl_lehrveranstaltung.koordinator, (SELECT uid FROM public.tbl_benutzerfunktion - WHERE fachbereich_kurzbz=tbl_fachbereich.fachbereich_kurzbz AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) AND - funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) - LIMIT 1 - ) - ) - ) as koordinator, - (SELECT vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) - WHERE uid=COALESCE(tbl_lehrveranstaltung.koordinator, (SELECT uid FROM public.tbl_benutzerfunktion - WHERE fachbereich_kurzbz=tbl_fachbereich.fachbereich_kurzbz AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) AND - funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) - LIMIT 1 - ) - ) - ) as vorname, - - lehrfach.bezeichnung as lf_bezeichnung, tbl_lehrveranstaltung.studiengang_kz, - tbl_fachbereich.fachbereich_kurzbz as fachbereich_kurzbz, tbl_lehreinheitmitarbeiter.mitarbeiter_uid, +SELECT + lehrfach.bezeichnung as lf_bezeichnung, tbl_lehrveranstaltung.studiengang_kz, lehrfach.oe_kurzbz as lehrfach_oe_kurzbz, + tbl_lehreinheitmitarbeiter.mitarbeiter_uid, tbl_lehrveranstaltung.semester as lv_semester, tbl_lehreinheit.lehreinheit_id, tbl_lehreinheitmitarbeiter.faktor, - tbl_lehreinheitmitarbeiter.stundensatz, + tbl_lehreinheitmitarbeiter.stundensatz, tbl_lehreinheitmitarbeiter.semesterstunden lemss, tbl_lehreinheitmitarbeiter.planstunden, tbl_lehreinheit.stundenblockung, tbl_lehreinheit.wochenrythmus, tbl_lehreinheit.raumtyp, tbl_lehreinheit.raumtypalternativ, tbl_lehreinheitmitarbeiter.anmerkung ,tbl_lehreinheit.studiensemester_kurzbz ,tbl_lehrveranstaltung.ects - ,tbl_lehrveranstaltung.semesterstunden + ,tbl_lehrveranstaltung.semesterstunden ,tbl_lehrveranstaltung.semesterstunden as sws ,tbl_lehrveranstaltung.lehrform_kurzbz ,tbl_lehrveranstaltung.lehrveranstaltung_id - ,(SELECT nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) + ,(SELECT nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=(SELECT mitarbeiter_uid FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehre.tbl_lehreinheitmitarbeiter.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id and lehre.tbl_lehreinheitmitarbeiter.lehrfunktion_kurzbz='LV-Leitung' LIMIT 1) - )as lv_leitung - ,(SELECT vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) + )as lv_leitung + ,(SELECT vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=(SELECT mitarbeiter_uid FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehre.tbl_lehreinheitmitarbeiter.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id and lehre.tbl_lehreinheitmitarbeiter.lehrfunktion_kurzbz='LV-Leitung' LIMIT 1) - )as lv_leitung_vorname + )as lv_leitung_vorname ,(SELECT bezeichnung FROM lehre.tbl_lehrform WHERE lehre.tbl_lehrform.lehrform_kurzbz=tbl_lehrveranstaltung.lehrform_kurzbz LIMIT 1) as lv_type ,tbl_lehrveranstaltung.lehrform_kurzbz -FROM - lehre.tbl_lehrveranstaltung - JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id) - JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) +FROM + lehre.tbl_lehrveranstaltung + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id) + JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - LEFT JOIN public.tbl_fachbereich ON(lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz) -WHERE - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz); +WHERE + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz); -# ,(SELECT lv_semesterstunden FROM campus.vw_lehreinheit WHERE lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id and lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id and studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' LIMIT 1) as sws - if($studiengang_kz!='') $qry.=" AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); - + if($oe_kurzbz!='') - $qry.=" AND tbl_fachbereich.oe_kurzbz=".$db->db_add_param($oe_kurzbz); + $qry.=" AND lehrfach.oe_kurzbz=".$db->db_add_param($oe_kurzbz); if($semester!='') $qry.=" AND tbl_lehrveranstaltung.semester=".$db->db_add_param($semester, FHC_INTEGER); - + if($uid!='') $qry.=" AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid=".$db->db_add_param($uid); $qry.=" ORDER BY tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.bezeichnung"; -/* -// exit($qry); -if($result = $db->db_query($qry)) -{ - $row = $db->db_fetch_object($result); - var_dump($row); -} -else - echo 'nix
'; -var_dump($stg_obj); -exit; -*/ - - - // Creating a workbook $workbook = new Spreadsheet_Excel_Writer(); @@ -174,10 +171,8 @@ $zeile=0; $spalte=0; $worksheet->write($zeile,$spalte,"Studiengang", $format_bold); $maxlength[$spalte]=11; -$worksheet->write($zeile,++$spalte,"Institut", $format_bold); +$worksheet->write($zeile,++$spalte,"Organisationseinheit", $format_bold); $maxlength[$spalte]=8; -$worksheet->write($zeile,++$spalte,"Koordinator", $format_bold); -$maxlength[$spalte]=11; $worksheet->write($zeile,++$spalte,"Lektor", $format_bold); $maxlength[$spalte]=6; $worksheet->write($zeile,++$spalte,"Lehrfach", $format_bold); @@ -211,8 +206,8 @@ $maxlength[$spalte]=9; $worksheet->write($zeile,++$spalte,"LV-Nummer", $format_bold); $maxlength[$spalte]=9; -$worksheet->write($zeile,++$spalte,"ALVS", $format_bold); -$maxlength[$spalte]=9; +$worksheet->write($zeile,++$spalte,"Semesterstunden", $format_bold); +$maxlength[$spalte]=15; $worksheet->write($zeile,++$spalte,"ECTS", $format_bold); $maxlength[$spalte]=9; @@ -227,22 +222,20 @@ if($result = $db->db_query($qry)) $spalte=0; $zeile++; - + $mitarbeiter = new mitarbeiter(); $mitarbeiter->load($row->mitarbeiter_uid); - + //Studiengang $worksheet->write($zeile,$spalte,$stg_obj->kuerzel_arr[$row->studiengang_kz]); if($maxlength[$spalte]kuerzel_arr[$row->studiengang_kz])) $maxlength[$spalte]=mb_strlen($stg_obj->kuerzel_arr[$row->studiengang_kz]); - //Fachbereich - $worksheet->write($zeile,++$spalte,$row->fachbereich_kurzbz); - if($maxlength[$spalte]fachbereich_kurzbz)) - $maxlength[$spalte]=mb_strlen($row->fachbereich_kurzbz); - //Koordinator - $worksheet->write($zeile,++$spalte,$row->koordinator.' '.$row->vorname); - if($maxlength[$spalte]koordinator.' '.$row->vorname)) - $maxlength[$spalte]=mb_strlen($row->koordinator.' '.$row->vorname); + + //Organisationseinheit + $worksheet->write($zeile,++$spalte,$oe_arr[$row->lehrfach_oe_kurzbz]); + if($maxlength[$spalte]lehrfach_oe_kurzbz])) + $maxlength[$spalte]=mb_strlen($oe_arr[$row->lehrfach_oe_kurzbz]); + //Lektor $worksheet->write($zeile,++$spalte,$mitarbeiter->nachname.' '.$mitarbeiter->vorname); if($maxlength[$spalte]nachname.' '.$mitarbeiter->vorname)) @@ -255,7 +248,7 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->lv_semester); if($maxlength[$spalte]lv_semester)) $maxlength[$spalte]=mb_strlen($row->lv_semester); - + $qry = "SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id, FHC_INTEGER); $result_gruppe = $db->db_query($qry); $gruppe = ''; @@ -265,10 +258,10 @@ if($result = $db->db_query($qry)) $gruppe.=', '; if($row_gruppe->gruppe_kurzbz!='') $gruppe.=$row_gruppe->gruppe_kurzbz; - else + else $gruppe.=trim($stg_obj->kuerzel_arr[$row_gruppe->studiengang_kz].'-'.$row_gruppe->semester.$row_gruppe->verband.$row_gruppe->gruppe); } - + //Gruppen $worksheet->write($zeile,++$spalte,$gruppe); if($maxlength[$spalte]db_query($qry)) $worksheet->write($zeile,++$spalte,$row->lemss); if($maxlength[$spalte]lemss)) $maxlength[$spalte]=mb_strlen($row->lemss); - + $kosten = ($row->stundensatz*$row->lemss*$row->faktor); - + //Kosten $worksheet->write($zeile,++$spalte,$kosten); if($maxlength[$spalte]db_query($qry)) $worksheet->write($zeile,++$spalte,$row->anmerkung); if($maxlength[$spalte]anmerkung)) $maxlength[$spalte]=mb_strlen($row->anmerkung); - -// Neu 13.11.2009 sequens + //LV-Leitung $worksheet->write($zeile,++$spalte,$row->lv_leitung.' '.$row->lv_leitung_vorname); if($maxlength[$spalte]lv_leitung.' '.$row->lv_leitung_vorname)) @@ -320,22 +312,15 @@ if($result = $db->db_query($qry)) if($maxlength[$spalte]lehrveranstaltung_id)) $maxlength[$spalte]=mb_strlen($row->lehrveranstaltung_id); - //SWS - - -/* $worksheet->write($zeile,++$spalte,$row->sws); - if($maxlength[$spalte]sws)) - $maxlength[$spalte]=mb_strlen($row->sws); -*/ + //Semesterstunden $semesterstunden = $row->semesterstunden; if ($row->stundensatz==0 || $row->lemss==0 || $row->faktor==0) $semesterstunden = 0; - + $worksheet->write($zeile,++$spalte,$semesterstunden); if($maxlength[$spalte]write($zeile,++$spalte,$row->ects); if($maxlength[$spalte]ects)) @@ -347,51 +332,28 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->lv_type); if($maxlength[$spalte]lv_type)) $maxlength[$spalte]=mb_strlen($row->lv_type); - + } - + //Betreuungen $qry = "SELECT - tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz, - (SELECT nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) - WHERE uid=COALESCE(tbl_lehrveranstaltung.koordinator, (SELECT uid FROM public.tbl_benutzerfunktion - WHERE fachbereich_kurzbz=tbl_fachbereich.fachbereich_kurzbz AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) AND - funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) - LIMIT 1 - ) - ) - ) as koordinator, - (SELECT vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) - WHERE uid=COALESCE(tbl_lehrveranstaltung.koordinator, (SELECT uid FROM public.tbl_benutzerfunktion - WHERE fachbereich_kurzbz=tbl_fachbereich.fachbereich_kurzbz AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) AND - funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) - LIMIT 1 - ) - ) - ) as koordinator_vorname, nachname, vorname, lehrfach.bezeichnung, - tbl_lehrveranstaltung.semester, student_uid, stunden, tbl_projektbetreuer.stundensatz, + tbl_lehrveranstaltung.studiengang_kz, lehrfach.oe_kurzbz as lehrfach_oe_kurzbz, + nachname, vorname, lehrfach.bezeichnung, + tbl_lehrveranstaltung.semester, student_uid, stunden, tbl_projektbetreuer.stundensatz, tbl_projektbetreuer.faktor FROM - lehre.tbl_projektarbeit, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, - lehre.tbl_projektbetreuer, public.tbl_person, lehre.tbl_lehrveranstaltung as lehrfach, public.tbl_fachbereich + lehre.tbl_projektarbeit, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, + lehre.tbl_projektbetreuer, public.tbl_person, lehre.tbl_lehrveranstaltung as lehrfach WHERE tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz AND tbl_person.person_id=tbl_projektbetreuer.person_id AND tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND (tbl_projektbetreuer.faktor*tbl_projektbetreuer.stundensatz*tbl_projektbetreuer.stunden)>0 "; - if($uid!=='') { $mitarbeiter = new mitarbeiter($uid); @@ -399,11 +361,11 @@ if($result = $db->db_query($qry)) } if($oe_kurzbz!='') - $qry.=" AND tbl_fachbereich.oe_kurzbz=".$db->db_add_param($oe_kurzbz); - + $qry.=" AND lehrfach.oe_kurzbz=".$db->db_add_param($oe_kurzbz); + if($studiengang_kz!='') $qry.=" AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); - + if($result = $db->db_query($qry)) { $spalte=0; @@ -415,20 +377,17 @@ if($result = $db->db_query($qry)) { $spalte=0; $zeile++; - + //Studiengang $worksheet->write($zeile,$spalte,$stg_obj->kuerzel_arr[$row->studiengang_kz]); if($maxlength[$spalte]kuerzel_arr[$row->studiengang_kz])) $maxlength[$spalte]=mb_strlen($stg_obj->kuerzel_arr[$row->studiengang_kz]); - - //Fachbereich - $worksheet->write($zeile,++$spalte,$row->fachbereich_kurzbz); - if($maxlength[$spalte]fachbereich_kurzbz)) - $maxlength[$spalte]=mb_strlen($row->fachbereich_kurzbz); - //Koordinator - $worksheet->write($zeile,++$spalte,$row->koordinator.' '.$row->koordinator_vorname); - if($maxlength[$spalte]koordinator.' '.$row->koordinator_vorname)) - $maxlength[$spalte]=mb_strlen($row->koordinator.' '.$row->koordinator_vorname); + + //Organisationseinheit + $worksheet->write($zeile,++$spalte,$oe_arr[$row->lehrfach_oe_kurzbz]); + if($maxlength[$spalte]lehrfach_oe_kurzbz])) + $maxlength[$spalte]=mb_strlen($oe_arr[$row->lehrfach_oe_kurzbz]); + //Lektor $worksheet->write($zeile,++$spalte,$row->nachname.' '.$row->vorname); if($maxlength[$spalte]nachname.' '.$row->vorname)) @@ -441,7 +400,7 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->semester); if($maxlength[$spalte]semester)) $maxlength[$spalte]=mb_strlen($row->semester); - + $benutzer = new benutzer(); $benutzer->load($row->student_uid); //Student @@ -456,10 +415,10 @@ if($result = $db->db_query($qry)) $worksheet->write($zeile,++$spalte,$row->stunden*$row->stundensatz*$row->faktor); if($maxlength[$spalte]stunden*$row->stundensatz*$row->faktor)) $maxlength[$spalte]=mb_strlen($row->stunden*$row->stundensatz*$row->faktor); - + } } - + //Die Breite der Spalten setzen foreach($maxlength as $i=>$breite) $worksheet->setColumn($i, $i, $breite+2); diff --git a/include/dvb.class.php b/include/dvb.class.php index 69b407388..886b40eea 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -29,14 +29,17 @@ require_once(dirname(__FILE__).'/studiensemester.class.php'); require_once(dirname(__FILE__).'/adresse.class.php'); require_once(dirname(__FILE__).'/webservicelog.class.php'); require_once(dirname(__FILE__).'/prestudent.class.php'); +require_once(dirname(__FILE__).'/errorhandler.class.php'); class dvb extends basis_db { const DVB_URL_WEBSERVICE_OAUTH = DVB_PORTAL.'/dvb/oauth/token'; const DVB_URL_WEBSERVICE_SVNR = DVB_PORTAL.'/rws/0.2/simpleStudentBySozialVersicherungsnummer.xml'; const DVB_URL_WEBSERVICE_ERSATZKZ = DVB_PORTAL.'/rws/0.2/simpleStudentByErsatzKennzeichen.xml'; + const DVB_URL_WEBSERVICE_NACHNAME = DVB_PORTAL.'/rws/0.2/simpleStudentByNachname.xml'; const DVB_URL_WEBSERVICE_RESERVIERUNG = DVB_PORTAL.'/dvb/matrikelnummern/1.0/reservierung.xml'; const DVB_URL_WEBSERVICE_MELDUNG = DVB_PORTAL.'/dvb/matrikelnummern/1.0/meldung.xml'; + const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.2/pruefeBpk.xml'; public $authentication; private $username; @@ -62,41 +65,82 @@ class dvb extends basis_db * Wenn die Person noch keine Matrikelnummer besitzt, wird eine neue Matrikelnummer * angefordert und der Person zugeordnet * @param int $person_id ID der Person. + * @param boolean $softrun Wird dieser Parameter gesetzt, werden nur bestehende Daten abgerufen, + * es werden keine neuen Vergabemeldungen gemacht * @return boolean true wenn Erfolgreich, false im Fehlerfall */ - public function assignMatrikelnummer($person_id) + public function assignMatrikelnummer($person_id, $softrun = false) { $person = new person(); if (!$person->load($person_id)) { - $this->errormsg = $person->errormsg; - return false; + return ErrorHandler::error($person->errormsg); } + $matrikelnummer = false; + $bpk = false; + if ($person->svnr != '') { - $matrikelnummer = $this->getMatrikelnrBySVNR($person->svnr); + $data = $this->getMatrikelnrBySVNR($person->svnr); - if ($matrikelnummer === false && $this->errormsg != '') + if (ErrorHandler::isSuccess($data)) { - $this->logRequest($person, 'getMatrikelnrBySVNR', false); - return false; + if (ErrorHandler::hasData($data)) + { + $matrikelnummer = $data->retval->matrikelnummer; + $bpk = $data->retval->bpk; + } + } + else + { + return ErrorHandler::error(); } } elseif ($person->ersatzkennzeichen != '') { - $matrikelnummer = $this->getMatrikelnrByErsatzkennzeichen($person->ersatzkennzeichen); - - if ($matrikelnummer === false && $this->errormsg != '') + $data = $this->getMatrikelnrByErsatzkennzeichen($person->ersatzkennzeichen); + if (ErrorHandler::isSuccess($data)) { - $this->logRequest($person, 'getMatrikelnrByErsatzkennzeichen', false); - return false; + if (ErrorHandler::hasData($data)) + { + $matrikelnummer = $data->retval->matrikelnummer; + $bpk = $data->retval->bpk; + } + } + else + { + return ErrorHandler::error(); } } else { - $this->errormsg = 'Person braucht SVNR oder Ersatzkennzeichen'; - return false; + $errormsg = 'Person braucht SVNR oder Ersatzkennzeichen'; + return ErrorHandler::error($errormsg); + } + + // Wenn nicht gefunden, wird zusaetzlich noch eine Namenssuche gestartet + if ($matrikelnummer == false || $matrikelnummer == '') + { + $this->debug('Keine Matrikelnummer gefunden -> Suche per Nachname'); + $nachnameresult = $this->existsByNachname($person_id); + if (ErrorHandler::isSuccess($nachnameresult)) + { + if (ErrorHandler::hasData($nachnameresult) + && isset($nachnameresult->retval->matrikelnummer) + && $nachnameresult->retval->matrikelnummer != '') + { + $this->debug('Nachnamensuche erfolgreich'); + $matrikelnummer = $nachnameresult->retval->matrikelnummer; + if (isset($nachnameresult->retval->bpk)) + $bpk = $nachnameresult->retval->bpk; + } + else + { + $errormsg = 'Namenssuche ergab nicht eindeutige Treffer -> manuelle Pruefung ist erforderlich'; + return ErrorHandler::error($errormsg); + } + } } if ($matrikelnummer !== false && $matrikelnummer != '') @@ -104,14 +148,26 @@ class dvb extends basis_db // Matrikelnummer wurde gefunden // Bei Person speichern $person->matr_nr = $matrikelnummer; + + // Wenn ein bPK gefunden wurde dieses auch speichern + if ($bpk != '') + { + $person->bpk = $bpk; + } + if ($person->save()) { - $this->logRequest($person, 'assignExistingMatrikelnummer', true, $matrikelnummer); - return true; + return ErrorHandler::success(); } } else { + if ($softrun == true) + { + $errormsg = 'Nicht gefunden Softrun enabled keine Meldung'; + return ErrorHandler::error($errormsg); + } + // Es wurde noch keine Matrikelnummer zu dieser Person zugeordnet // Es wird eine neue Matrikelnummer aus dem Kontingent angefordert // und an die Person vergeben @@ -128,7 +184,7 @@ class dvb extends basis_db WHERE tbl_prestudent.person_id=".$this->db_add_param($person->person_id)." AND tbl_benutzer.aktiv - AND tbl_prestudentstatus.status_kurzbz='Student' + AND tbl_prestudentstatus.status_kurzbz in('Student','Incoming') AND tbl_prestudent.bismelden ORDER BY tbl_prestudentstatus.datum desc LIMIT 1 "; @@ -146,15 +202,15 @@ class dvb extends basis_db else { $this->logRequest($person, 'assignNewMatrikelnummer', false); - $this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person'; - return false; + $errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person'; + return ErrorHandler::error($errormsg); } } else { $this->logRequest($person, 'assignNewMatrikelnummer', false); - $this->errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person'; - return false; + $errormsg = 'Fehler beim Ermitteln des Studienjahrs für diese Person'; + return ErrorHandler::error($errormsg); } $studienjahr = substr($studiensemester_kurzbz, 4); @@ -167,57 +223,70 @@ class dvb extends basis_db $studienjahr = 2018; // Neue Matrikelnummer aus Kontingent anfordern - $kontingent = $this->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $studienjahr); + $data = $this->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $studienjahr); - if ($kontingent !== false && isset($kontingent[0])) + if (ErrorHandler::isSuccess($data) && ErrorHandler::hasdata($data)) { - $person_meldung = new stdClass(); - $person_meldung->matrikelnummer = $kontingent[0]; - $person_meldung->vorname = $person->vorname; - $person_meldung->nachname = $person->nachname; - $person_meldung->geburtsdatum = $person->gebdatum; - $person_meldung->geschlecht = mb_strtoupper($person->geschlecht); - $person_meldung->staat = $person->staatsbuergerschaft; - if ($person->svnr != '') - $person_meldung->svnr = $person->svnr; + $kontingent = $data->retval->kontingent; - // PLZ der Meldeadresse laden - $adresse = new adresse(); - if ($adresse->loadZustellAdresse($person->person_id)) - $person_meldung->plz = $adresse->plz; - - // ZGV Datum laden falls vorhanden - $prestudent = new prestudent(); - if ($prestudent->load($prestudent_id) && $prestudent->zgvdatum != '') + if ($kontingent !== false && isset($kontingent[0])) { - $datum_obj = new datum(); - $person_meldung->matura = $datum_obj->formatDatum($prestudent->zgvdatum, 'Ymd'); - } + $person_meldung = new stdClass(); + $person_meldung->matrikelnummer = $kontingent[0]; + $person_meldung->vorname = $person->vorname; + $person_meldung->nachname = $person->nachname; + $person_meldung->geburtsdatum = $person->gebdatum; + $person_meldung->geschlecht = mb_strtoupper($person->geschlecht); + $person_meldung->staat = $person->staatsbuergerschaft; + if ($person->svnr != '') + $person_meldung->svnr = $person->svnr; + else if ($person->ersatzkennzeichen != '') + $person_meldung->svnr = $person->ersatzkennzeichen; - // Meldung der Vergabe der Matrikelnummer - if ($this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person_meldung)) - { - // Matrikelnummer bei Person speichern - $person->matr_nr = $matrikelnummer; - if ($person->save()) + // PLZ der Meldeadresse laden + $adresse = new adresse(); + if ($adresse->loadZustellAdresse($person->person_id)) + $person_meldung->plz = $adresse->plz; + + // ZGV Datum laden falls vorhanden + $prestudent = new prestudent(); + if ($prestudent->load($prestudent_id) && $prestudent->zgvdatum != '') { - $this->logRequest($person, 'assignNewMatrikelnummer', true, $matrikelnummer); - return true; + $datum_obj = new datum(); + $person_meldung->matura = $datum_obj->formatDatum($prestudent->zgvdatum, 'Ymd'); + } + + // Meldung der Vergabe der Matrikelnummer + $data = $this->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person_meldung); + if (ErrorHandler::isSuccess($data)) + { + // Matrikelnummer bei Person speichern + $person->matr_nr = $data->retval->matrikelnummer; + + // Wenn ein BPK bei der Meldung ermittelt wurde, dann dieses auch speichern + if (ErrorHandler::hasData($data) && isset($data->retval->bpk) && $data->retval->bpk != '') + { + $person->bpk = $data->retval->bpk; + } + if ($person->save()) + { + return ErrorHandler::success(); + } + } + else + { + $this->logRequest($person, 'assignNewMatrikelnummer', false, $person_meldung); + $errormsg = 'Vergabe fehlgeschlagen'; + return ErrorHandler::error($errormsg); } } else { - $this->logRequest($person, 'assignNewgMatrikelnummer', false, $person_meldung); - $this->errormsg .= 'Vergabe fehlgeschlagen'; - return false; + $this->logRequest($person, 'assignNewMatrikelnummer', false, $studienjahr); + $errormsg = 'Failed to get Kontingent'; + return ErrorHandler::error($errormsg); } } - else - { - $this->logRequest($person, 'assignNewgMatrikelnummer', false, $studienjahr); - $this->errormsg .= 'Failed to get Kontingent'; - return false; - } } } @@ -279,13 +348,13 @@ class dvb extends basis_db $this->debug('Access_token:'.$this->authentication->access_token); $this->debug('Scope:'.$this->authentication->scope); - return true; + return ErrorHandler::success(); } else { $this->errormsg = 'Authentication failed with HTTP Code:'.$curl_info['http_code']; $this->errormsg .= ' and Response:'.$json_response; - return false; + return ErrorHandler::error(); } } @@ -316,8 +385,9 @@ class dvb extends basis_db { if ($this->tokenIsExpired()) { - if (!$this->authenticate()) - return false; + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); } $this->debug('getMatrikelnrBySVNR'); @@ -358,6 +428,7 @@ class dvb extends basis_db 12345678 Max + sdfaASDAFasdfads+asasdffd= Mustermann M 1999-02-19 @@ -369,6 +440,9 @@ class dvb extends basis_db $dom->loadXML($response); $namespace = 'http://www.brz.gv.at/datenverbund-unis'; $domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student'); + $matrikelnr = false; + $bpk = false; + foreach ($domnodes_student as $row_student) { // Wenn nicht gesperrt und fix vergeben @@ -380,19 +454,38 @@ class dvb extends basis_db $domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer'); foreach ($domnodes_matrikelnummer as $row) { - // Found - return $row->textContent; + // MatrikelNr Found + $matrikelnr = $row->textContent; + break; + } + $domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen'); + foreach ($domnodes_bpk as $row) + { + // BPK Found + $bpk = $row->textContent; + break; } } } - $this->errormsg = ''; - return false; + if ($matrikelnr !== false) + { + $retval = new stdClass(); + $retval->matrikelnummer = $matrikelnr; + $retval->bpk = $bpk; + + return ErrorHandler::success($retval); + } + else + { + $this->errormsg = ''; + return ErrorHandler::success(); + } } else { - $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; - return false; + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); } } @@ -405,8 +498,9 @@ class dvb extends basis_db { if ($this->tokenIsExpired()) { - if (!$this->authenticate()) - return false; + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); } $this->debug('getMatrikelnrByErsatzkennzeichen'); @@ -503,6 +597,10 @@ class dvb extends basis_db $dom->loadXML($xml_response); $namespace = 'http://www.brz.gv.at/datenverbund-unis'; $domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student'); + + $matrikelnr = ''; + $bpk = ''; + foreach ($domnodes_student as $row_student) { // Wenn nicht gesperrt und fix vergeben @@ -515,18 +613,36 @@ class dvb extends basis_db foreach ($domnodes_matrikelnummer as $row) { // Found - return $row->textContent; + $matrikelnr = $row->textContent; + } + + $domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen'); + foreach ($domnodes_bpk as $row) + { + // BPK Found + $bpk = $row->textContent; + break; } } } - $this->errormsg = ''; - return false; + if ($matrikelnr != '') + { + $retval = new stdClass(); + $retval->matrikelnummer = $matrikelnr; + $retval->bpk = $bpk; + return ErrorHandler::success($retval); + } + else + { + $this->errormsg = ''; + return ErrorHandler::success(); + } } else { - $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$xml_response; - return false; + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$xml_response; + return ErrorHandler::error($errormsg); } } @@ -543,8 +659,9 @@ class dvb extends basis_db if ($this->tokenIsExpired()) { - if (!$this->authenticate()) - return false; + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); } $curl = curl_init(); @@ -597,12 +714,14 @@ class dvb extends basis_db { $reservations[] = $row->textContent; } - return $reservations; + $retval = new stdClass(); + $retval->reservations = $reservations; + return ErrorHandler::success($retval); } else { - $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; - return false; + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); } } @@ -620,8 +739,9 @@ class dvb extends basis_db if ($this->tokenIsExpired()) { - if (!$this->authenticate()) - return false; + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); } $data = ' @@ -674,12 +794,15 @@ class dvb extends basis_db { $kontingent[] = $row->textContent; } - return $kontingent; + + $retval = new stdClass(); + $retval->kontingent = $kontingent; + return ErrorHandler::success($retval); } else { - $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; - return false; + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); } } @@ -696,16 +819,18 @@ class dvb extends basis_db if ($this->tokenIsExpired()) { - if (!$this->authenticate()) - return false; + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); } + $gebdat = str_replace("-", "", $person->geburtsdatum); $data = ' '.$uuid.' '.$bildungseinrichtung.' - '.$person->geburtsdatum.' + '.$gebdat.' '.$person->geschlecht.' '.$person->matrikelnummer.''; if (isset($person->matura) && $person->matura != '') @@ -791,6 +916,18 @@ class dvb extends basis_db Korrektur der Matrikelnummer 12345678 + + ED10065 + E + bPK + fehlt oder anders als im Datenverbund ermittelt(Yl329U/jt7fjoo5p+z4lH37ZKrg=) + + Zurückgemeldete bPK in den lokalen Datenbestand übernehmen. Fallsim Fehlertext keine bPK enthalten ist, + müssen die Personendaten geprüft und ggf. ergänzt werden (Abgleich von Name/Geburtsdatum/Adresse mit dem zentralen + Melderegister) + + Yl329keinEchtesbPK4lH37ZKrg= + */ @@ -807,11 +944,13 @@ class dvb extends basis_db $dom->loadXML($response); $domnodes_fehlerliste = $dom->getElementsByTagName('fehlerliste'); - $fehleranzahl = $domnodes_fehlerliste[0]->getAttribute('fehleranzahl'); + $fehleranzahl = $domnodes_fehlerliste->item(0)->getAttribute('fehleranzahl'); if ($fehleranzahl === '0') { // Keine Fehler -> Meldung erfolgreich - return true; + $retval = new stdClass(); + $retval->matrikelnummer = $person->matrikelnummer; + return ErrorHandler::success($retval); } else { @@ -819,18 +958,479 @@ class dvb extends basis_db $domnodes_fehler = $dom->getElementsByTagName('fehler'); foreach ($domnodes_fehler as $row) { - $datenfeld = $row->getElementsByTagName('datenfeld'); - $fehlertext = $row->getElementsByTagName('fehlertext'); - $this->errormsg .= ' Datenfeld:'.$datenfeld[0]->textContent; - $this->errormsg .= ' Fehlertext:'.$fehlertext[0]->textContent; + $fehlernummer = $row->getElementsByTagName('fehlernummer'); + + /** + * Bei Fehlernummer ED10065 wurde die Matrikelnummer korrekt gesetzt. + * Das BPK wurde vom Datenverbund versucht zu ermitteln und wird in der Fehlermeldung + * zurückgeliefert. Dieses sollte dann gespeichert werden. + */ + if ($fehlernummer->length>0 && $fehlernummer->item(0)->textContent == 'ED10065') + { + $this->debug('ED10065 Response'); + $domnodes_feldinhalt = $row->getElementsByTagName('feldinhalt'); + if ($domnodes_feldinhalt->length > 0 && $domnodes_feldinhalt->item(0)->textContent!='') + { + $bpk = $domnodes_feldinhalt->item(0)->textContent; + $retval = new stdClass(); + $retval->matrikelnummer = $person->matrikelnummer; + $retval->bpk = $bpk; + $this->errormsg .= 'ED10065 Response'; + $this->debug('BPK:'.$bpk); + return ErrorHandler::success($retval); + } + } + else + { + $datenfeld = $row->getElementsByTagName('datenfeld'); + $fehlertext = $row->getElementsByTagName('fehlertext'); + $this->errormsg .= ' Datenfeld:'.$datenfeld->item(0)->textContent; + $this->errormsg .= ' Fehlertext:'.$fehlertext->item(0)->textContent; + } } - return false; + return ErrorHandler::error(); } } else { - $this->errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; - return false; + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); + } + } + + /** + * Get BPK from Person + * @param string $person_id ID of the Person. + * @return BPK or false on error. + */ + public function getBPK($person_id) + { + $person = new person(); + if ($person->load($person_id)) + { + if ($person->bpk != '') + { + // BPK exisitert bereits + $retval = new stdClass(); + $retval->bpk = $person->bpk; + return ErrorHandler::success($retval); + } + + if ($person->gebdatum == '') + { + $errormsg = 'Geburtsdatum ist nicht gesetzt'; + return ErrorHandler::error($errormsg); + } + + if ($person->vorname == '') + { + $errormsg = 'Vorname ist nicht gesetzt'; + return ErrorHandler::error($errormsg); + } + + if ($person->nachname == '') + { + $errormsg = 'Nachname ist nicht gesetzt'; + return ErrorHandler::error($errormsg); + } + + $geburtsdatum = str_replace("-", "", $person->gebdatum); + $vorname = $person->vorname; + $nachname = $person->nachname; + $geschlecht = mb_strtoupper($person->geschlecht); + + $adresse = new adresse(); + $adresse->loadZustellAdresse($person_id); + + /** + * Wenn die Person beim Ersten mal nicht eindeutig gefunden wird, + * dann wird nochmal versucht mit Postleitzahl und ggf ein drittes + * mal mit der Strasse der Person + */ + + $try = 1; + $plz = null; + $strasse = null; + + while ($try <= 3) + { + if ($try == 2) + { + $plz = $adresse->plz; + } + elseif ($try == 3) + { + $plz = $adresse->plz; + $strasse = $adresse->strasse; + } + + // Versuchen BPK zu ermitteln + $data = $this->pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz, $strasse); + + if (ErrorHandler::isSuccess($data)) + { + // gefunden + return ErrorHandler::success($data->retval); + } + elseif (!ErrorHandler::hasData($data)) + { + // nicht gefunden + return ErrorHandler::error(); + } + else + { + // mehrere gefunden + if (isset($data->retval->multiple) && $data->retval->multiple === true) + { + // ggf nochmal versuchen mit weiteren Parametern + } + else + { + return ErrorHandler::error(); + } + } + $try++; + } + + // nicht eindeutig auffindbar + return ErrorHandler::error(); + } + else + { + $this->errormsg = $person->errormsg; + return ErrorHandler::error(); + } + } + + /** + * Get BPK from Person + * @param string $geburtsdatum Geburtsdatum der Person im format YYYYMMDD + * @param $vorname Vorname der Person. + * @param $nachname Nachname der Person. + * @param $geschlecht Geschlecht der Person M | W + * @param $plz Postleitzahl der Person (optional). + * @param $strasse Strasse der Person (optional). + * @return BPK or false on error. + */ + public function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null) + { + if ($this->tokenIsExpired()) + { + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); + } + + $this->debug('getBPK'); + + $curl = curl_init(); + + $url = self::DVB_URL_WEBSERVICE_BPK; + $url .= '?geburtsDatum='.curl_escape($curl, $geburtsdatum); + $url .= '&vorname='.curl_escape($curl, $vorname); + $url .= '&nachname='.curl_escape($curl, $nachname); + $url .= '&geschlecht='.curl_escape($curl, $geschlecht); + + if (!is_null($plz)) + $url .= '&plz='.curl_escape($curl, $plz); + + if (!is_null($strasse)) + $url .= '&strasse='.curl_escape($curl, $strasse); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + + $headers = array( + 'Accept: application/json', + 'Authorization: Bearer '.$this->authentication->access_token, + 'User-Agent: FHComplete', + 'Connection: Keep-Alive', + 'Expect:', + 'Content-Length: 0' + ); + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + $this->debug('Sending Request to '.$url); + + $response = curl_exec($curl); + $curl_info = curl_getinfo($curl); + curl_close($curl); + + $this->debug('ResponseCode: '.$curl_info['http_code']); + $this->debug('ResponseData: '.print_r($response, true)); + + if ($curl_info['http_code'] == '200') + { + /* Example Response: + + + 1234567890ABCDEFGH= + + + Max + Mustermann + M + 19901231 + + + + + + + + Example Error: + + + + + + ED10065 + E + bPK + fehlt oder anders als im Datenverbund ermittelt (keine bPK gefunden) + + Zurückgemeldete bPK in den lokalen Datenbestand übernehmen. + Falls im Fehlertext keine bPK enthalten ist, müssen die Personendaten geprüft und + ggf. ergänzt werden (Abgleich von Name/Geburtsdatum/Adresse + mit dem zentralen Melderegister) + + keine bPK gefunden + + + + + */ + + $dom = new DOMDocument(); + $dom->loadXML($response); + $namespace = 'http://www.brz.gv.at/datenverbund-unis'; + $domnodes_fehlernummer = $dom->getElementsByTagNameNS($namespace, 'fehlernummer'); + if ($domnodes_fehlernummer->length > 0) + { + $fehlercode = $domnodes_fehlernummer->item(0)->textContent; + if ($fehlercode == 'ZD00001') + { + // Zu viele Requests pro Minute + $this->debug('Zu viele Requests pro Minute -> Pause'); + sleep(30); + } + } + + $domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'personenkennzeichen'); + if ($domnodes_bpk->length > 0) + { + $retval = new stdClass(); + $retval->bpk = $domnodes_bpk->item(0)->textContent; + return ErrorHandler::success($retval); + } + else + { + $retval = new stdClass(); + $domnodes_personen = $dom->getElementsByTagNameNS($namespace, 'personInfo'); + if ($domnodes_personen->length > 1) + { + $retval = new stdClass(); + $retval->multiple = true; + return ErrorHandler::error(null, $retval); + } + } + return ErrorHandler::error(); + } + else + { + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); + } + } + + /** + * Prueft ob eine Person aufgrund Nachname und Geburtsdatum gefunden wird + * @param $person_id PersonID der gesuchten Person. + * @return Success wenn gefunden, error wenn nicht gefunden. Hat die Person 100% Uebereinstimmung der Daten + * dann wird auch MatrNr und BPK als Retrun geliefert. + */ + public function existsByNachname($person_id) + { + $person = new person(); + if ($person->load($person_id)) + { + $result = $this->getMatrikelnrByNachname($person->nachname, $person->gebdatum); + + if (ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result) + && isset($result->retval->data) + && is_array($result->retval->data) + && count($result->retval->data)>0) + { + foreach($result->retval->data as $row) + { + if (isset($row->vorname) && isset($row->nachname)) + { + $this->debug('Eintrag gefunden -> Pruefe Eindeutigkeit'); + // Vorpruefung des Datenverbund + if (mb_substr(mb_strtolower($row->vorname),0,5) == mb_substr(mb_strtolower($person->vorname),0,5) + && mb_substr(mb_strtolower($row->nachname),0,10) == mb_substr(mb_strtolower($person->nachname),0,10)) + { + // Bei 100% eindeutiger Uebereinstimmung werden die Daten zurueckgeliefert + if (mb_strtolower($row->geschlecht) == mb_strtolower($person->geschlecht) + && $row->staatsangehoerigkeit == $person->staatsbuergerschaft + && mb_strtolower($row->nachname) == mb_strtolower($person->nachname) + && ( + mb_strtolower($row->vorname) == mb_strtolower($person->vorname) + || + mb_strtolower($row->vorname) == mb_strtolower($person->vorname.' '.$person->vornamen) + ) + && $row->matrikelnummer != '' + && count($result->retval->data) == 1 + ) + { + $this->debug('Uebereinstimmung gefunden'); + $retval = new stdClass(); + if (isset($row->bpk) && $row->bpk!='') + $retval->bpk = $row->bpk; + $retval->matrikelnummer = $row->matrikelnummer; + return ErrorHandler::success($retval); + } + else + { + $this->debug('keine 100% Eindeutigkeit gegeben:'.print_r($result->retval->data,true)); + // Uebereinstimmung gefunden aber nicht 100% eindeutig + return ErrorHandler::success(); + } + } + } + } + $this->debug('Keine Uebereinstimmung per Namenssuche'); + return ErrorHandler::error(); + } + else + { + return ErrorHandler::error(); + } + } + } + + /** + * Get Matrikelnummer by Surname + * @param string $nachname Surname of Person. + * @param string $geburtsdatum Date of Birth + * @return Matrikelnummer or false on error. + */ + public function getMatrikelnrByNachname($nachname, $geburtsdatum) + { + if ($this->tokenIsExpired()) + { + $result = $this->authenticate(); + if (ErrorHandler::isError($result)) + return ErrorHandler::error(); + } + + $this->debug('getMatrikelnrByNachname'); + + $curl = curl_init(); + + $geburtsdatum = str_replace("-", "", $geburtsdatum); + + $url = self::DVB_URL_WEBSERVICE_NACHNAME; + $url .= '?nachName='.curl_escape($curl, $nachname); + $url .= '&geburtsDatum='.curl_escape($curl, $geburtsdatum); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + + $headers = array( + 'Accept: application/json', + 'Authorization: Bearer '.$this->authentication->access_token, + 'User-Agent: FHComplete', + 'Connection: Keep-Alive', + 'Expect:', + 'Content-Length: 0' + ); + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + $this->debug('Sending Request to '.$url); + + $response = curl_exec($curl); + $curl_info = curl_getinfo($curl); + curl_close($curl); + + $this->debug('ResponseCode: '.$curl_info['http_code']); + $this->debug('ResponseData: '.print_r($response, true)); + + if ($curl_info['http_code'] == '200') + { + /* Example Response: + + + 12345678 + Max + sdfaASDAFasdfads+asasdffd= + Mustermann + M + 1999-02-19 + A + + + */ + $dom = new DOMDocument(); + $dom->loadXML($response); + $namespace = 'http://www.brz.gv.at/datenverbund-unis'; + $domnodes_student = $dom->getElementsByTagNameNS($namespace, 'student'); + + $retval = new stdClass(); + $retval->data = array(); + + foreach ($domnodes_student as $row_student) + { + // Wenn nicht gesperrt und fix vergeben + $ingesamtpool = $row_student->getAttribute('inGesamtPool'); + $gesperrt = $row_student->getAttribute('gesperrt'); + + if ($ingesamtpool == 'true' && $gesperrt == 'false') + { + $data = new stdClass(); + + $domnodes_matrikelnummer = $row_student->getElementsByTagNameNS($namespace, 'matrikelNummer'); + foreach ($domnodes_matrikelnummer as $row) + { + // MatrikelNr Found + $data->matrikelnummer = $row->textContent; + break; + } + $domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen'); + foreach ($domnodes_bpk as $row) + { + // BPK Found + $data->bpk = $row->textContent; + break; + } + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'vorName'); + if ($domnodes->length>0) + $data->vorname = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'nachName'); + if ($domnodes->length>0) + $data->nachname = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'geschlecht'); + if ($domnodes->length>0) + $data->geschlecht = $domnodes->item(0)->textContent; + $domnodes = $row_student->getElementsByTagNameNS($namespace, 'staatsAngehoerigkeit'); + if ($domnodes->length > 0) + $data->staatsangehoerigkeit = $domnodes->item(0)->textContent; + + $retval->data[] = $data; + } + + } + + return ErrorHandler::success($retval); + } + else + { + $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response; + return ErrorHandler::error($errormsg); } } @@ -855,7 +1455,7 @@ class dvb extends basis_db private function debug($msg) { if ($this->debug) - $this->debug_output .= "\n
".date('Y-m-d H:i:s').': '.htmlentities($msg); + $this->debug_output .= "\n".date('Y-m-d H:i:s').': '.$msg; } /** diff --git a/include/errorhandler.class.php b/include/errorhandler.class.php new file mode 100644 index 000000000..05915832d --- /dev/null +++ b/include/errorhandler.class.php @@ -0,0 +1,93 @@ +, + */ + /** + * This class provides static functions for handling Result values + */ + +class ErrorHandler +{ + /** + * Returns a Success Object + * @param $retval object + * @return result object + */ + public static function success($retval = '') + { + $data = new stdClass(); + $data->error = false; + $data->errormsg = ''; + $data->retval = $retval; + return $data; + } + + /** + * Returns an Error Object + * @param $retval object (optional) + * @return result object + */ + public static function error($errormsg = '', $retval = '') + { + $data = new stdClass(); + $data->error = true; + $data->errormsg = $errormsg; + $data->retval = $retval; + return $data; + } + + /** + * Checks if the Result object is Successfull + * @param result object + * @return boolean + */ + public static function isSuccess($result) + { + if (is_object($result) && isset($result->error) && $result->error === false) + { + return true; + } + + return false; + } + + /** + * Checks if the Result object is an error + * @param result object + * @return boolean + */ + public static function isError($result) + { + return !ErrorHandler::isSuccess($result); + } + + /* + * Checks if the Result object contains additional data + * @param result object + * @return boolean + */ + public static function hasData($result) + { + if (is_object($result) && isset($result->retval) && $result->retval!='') + { + return true; + } + + return false; + } +} diff --git a/include/functions.inc.php b/include/functions.inc.php index c7e7db23c..913c512ac 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -23,6 +23,8 @@ require_once(dirname(__FILE__).'/basis_db.class.php'); require_once(dirname(__FILE__).'/authentication.class.php'); require_once(dirname(__FILE__).'/betriebsmittelperson.class.php'); require_once(dirname(__FILE__).'/personlog.class.php'); +require_once(dirname(__FILE__).'/benutzerberechtigung.class.php'); +require_once(dirname(__FILE__).'/mitarbeiter.class.php'); // Auth: Benutzer des Webportals /** @@ -1112,4 +1114,51 @@ function setLeadingZero($number, $length = 2) } } +/** Check if uid is a supervisor + * + * @param string $uid + * @param string $employee_uid + * @return boolean True if $uid is direct leader of $employee_uid. + */ +function check_isVorgesetzter($uid, $employee_uid) +{ + $mitarbeiter = new Mitarbeiter(); + $mitarbeiter->getUntergebene($uid); + $untergebenen_arr = $mitarbeiter->untergebene; + + // Check, if uid is an employee of supervisor + if (!empty($untergebenen_arr) && + in_array($employee_uid, $untergebenen_arr)) + { + return true; + } + else + { + return false; + } +} +/** Check if uid is a supervisor on higher oe level + * + * @param string $uid + * @param string $employee_uid + * @return boolean True if $uid is indirect supervisor (leader on higher oe-level) + * of $employee_uid. + */ +function check_isVorgesetzter_indirekt($uid, $employee_uid) +{ + $mitarbeiter = new Mitarbeiter(); + $mitarbeiter->getUntergebene($uid, true); + $untergebenen_ofChildOEs_arr = $mitarbeiter->untergebene; + + if (!empty($untergebenen_ofChildOEs_arr) && + in_array($employee_uid, $untergebenen_ofChildOEs_arr)) + { + return true; + } + else + { + return false; + } +} + ?> diff --git a/include/kontakt.class.php b/include/kontakt.class.php old mode 100644 new mode 100755 index d3f43e09e..b09bf6683 --- a/include/kontakt.class.php +++ b/include/kontakt.class.php @@ -24,6 +24,7 @@ * @create 20-12-2006 */ require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/sprache.class.php'); class kontakt extends basis_db { @@ -281,7 +282,7 @@ class kontakt extends basis_db $qry = "SELECT tbl_kontakt.*, tbl_firma.name as firma_name, tbl_firma.firma_id FROM public.tbl_kontakt LEFT JOIN public.tbl_standort USING(standort_id) LEFT JOIN public.tbl_firma USING(firma_id) WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER)." AND kontakttyp =".$this->db_add_param($kontakttyp, FHC_STRING); - + if ($order != null) $qry .= " ORDER BY ".$order; @@ -332,9 +333,10 @@ class kontakt extends basis_db $this->errormsg = 'Person_id ist ungueltig'; return false; } - - $qry = "SELECT tbl_kontakt.*, tbl_firma.name as firma_name, tbl_firma.firma_id - FROM public.tbl_kontakt LEFT JOIN public.tbl_standort USING(standort_id) LEFT JOIN public.tbl_firma USING(firma_id) WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER).';'; + $sprache = new sprache(); + $bezeichnung_mehrsprachig = $sprache->getSprachQuery('bezeichnung_mehrsprachig'); + $qry = "SELECT tbl_kontakt.*, tbl_firma.name as firma_name, tbl_firma.firma_id, tbl_kontakttyp.beschreibung as kontakttyp_name, $bezeichnung_mehrsprachig + FROM public.tbl_kontakt JOIN tbl_kontakttyp USING (kontakttyp) LEFT JOIN public.tbl_standort USING(standort_id) LEFT JOIN public.tbl_firma USING(firma_id) WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER).';'; if($this->db_query($qry)) { @@ -356,6 +358,8 @@ class kontakt extends basis_db $obj->insertamum = $row->insertamum; $obj->insertvon = $row->insertvon; $obj->ext_id = $row->ext_id; + $obj->kontakttyp_name = $row->kontakttyp_name; + $obj->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig',$row); $this->result[] = $obj; } @@ -512,15 +516,15 @@ class kontakt extends basis_db return false; } } - + /** * Sucht nach Kontaktdaten, die den Suchkriterien entsprechen - * @param string $searchstring String, nach dem gesucht werden soll. + * @param string $searchstring String, nach dem gesucht werden soll. * Wenn $typ = nummer ist, werden eventuelle nicht-numerische Zeichen mit preg_replace entfernt, * und es wird nach den Typen "telefon","mobil","so.tel","firmenhandy" und "notfallkontakt" gesucht * @param string $typ Optional. Kontakttyp. Möglich sind "nummer","telefon","mobil","so.tel","firmenhandy","firmenhandy","email","fax" und "homepage". * Wenn $typ = nummer ist, werden eventuelle nicht-numerische Zeichen mit preg_replace entfernt, - * und es wird nach den Typen "telefon","mobil","so.tel","firmenhandy" und "notfallkontakt" gesucht + * und es wird nach den Typen "telefon","mobil","so.tel","firmenhandy" und "notfallkontakt" gesucht * @return boolean */ public function searchKontakt ($searchstring, $typ = '') @@ -534,18 +538,18 @@ class kontakt extends basis_db return false; } } - $qry = "SELECT + $qry = "SELECT * - FROM + FROM public.tbl_kontakt - WHERE + WHERE 1=1"; - + if ($typ == 'nummer') $qry .= " AND regexp_replace(kontakt , '[^0-9]', '', 'g') LIKE ('%".$this->db_escape($searchstring)."%')"; else $qry .= " AND LOWER (kontakt) LIKE LOWER ('%".$this->db_escape($searchstring)."%')"; - + if ($typ != '' && $typ != 'nummer') $qry .= " AND kontakttyp=".$this->db_add_param($typ); @@ -554,7 +558,7 @@ class kontakt extends basis_db while($row = $this->db_fetch_object()) { $obj = new kontakt(); - + $obj->kontakt_id = $row->kontakt_id; $obj->person_id = $row->person_id; $obj->standort_id = $row->standort_id; @@ -567,10 +571,10 @@ class kontakt extends basis_db $obj->insertamum = $row->insertamum; $obj->insertvon = $row->insertvon; $obj->ext_id = $row->ext_id; - + $this->result[] = $obj; } - + return true; } else @@ -580,4 +584,4 @@ class kontakt extends basis_db } } } -?> \ No newline at end of file +?> diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index eb5498581..e6e9e6506 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1091,8 +1091,12 @@ class mitarbeiter extends benutzer /** * Gibt ein Array mit den UIDs der aktiv beschäftigten Untergebenen zurueck + * @param string $uid UID. + * @param boolean $include_OE_childs Wenn true, dann werden auch alle aktiv + * beschäftigten Untergebenen der Kind-OEs des Leiters zurückgegeben. + * @return boolean */ - public function getUntergebene($uid=null) + public function getUntergebene($uid=null, $include_OE_childs = false) { if (is_null($uid)) $uid=$this->uid; @@ -1113,6 +1117,70 @@ class mitarbeiter extends benutzer $oe.=$this->db_add_param($row->oe_kurzbz); } } + + // Kinder-Organisationseinheiten holen + if ($include_OE_childs == true) + { + if (!empty($oe)) + { + $child_oe_arr = array(); // array of string child oes + + $qry = ' + WITH RECURSIVE + oes (oe_kurzbz, oe_parent_kurzbz) AS + ( + SELECT + oe_kurzbz, + oe_parent_kurzbz + FROM + public.tbl_organisationseinheit + WHERE + oe_kurzbz IN ('. $oe. ') + + UNION ALL + + SELECT + o.oe_kurzbz, + o.oe_parent_kurzbz + FROM + public.tbl_organisationseinheit o, oes + WHERE + o.oe_parent_kurzbz = oes.oe_kurzbz + ) + SELECT + oe_kurzbz + FROM + oes + GROUP BY + oe_kurzbz'; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $child_oe_arr []= $this->db_add_param($row->oe_kurzbz); + } + } + + // eliminate duplicates + $child_oe_arr = array_unique($child_oe_arr); + + // check if leader has child oes by comparing the original + // string of oes with string of child oes. + if ($oe == implode(',', $child_oe_arr)) + { + $this->result ['isIndirectSupervisor']= false; + } + else + { + $this->result ['isIndirectSupervisor']= true; + } + + // overwrite $oe with child oes for further query + $oe = implode(',', $child_oe_arr); + } + } + //Alle Personen holen die dieser Organisationseinheit untergeordnet sind $qry = " diff --git a/include/organisationseinheit.class.php b/include/organisationseinheit.class.php index f21482f85..fe2f15fd2 100644 --- a/include/organisationseinheit.class.php +++ b/include/organisationseinheit.class.php @@ -20,6 +20,7 @@ * Rudolf Hangl and * Gerald Simane-Sequens * Stefan Puraner + * Cristina Hainberger */ /** * Klasse Organisationseinheit @@ -46,6 +47,7 @@ class organisationseinheit extends basis_db public $oe_kurzbz_orig; public $beschreibung; + public $oetyp_bezeichnung; /** @@ -454,6 +456,79 @@ class organisationseinheit extends basis_db } } + /** + * Get names and types of ALL parent organisational units recursivly for all ascending + * org units of given organisational unit. (All parent organisational units) + * @param string $oe_kurzbz + * @return boolean True on success. If true, returns object-array with name + * and types of given organisational unit and of its parent organisational units. + */ + public function getParents_withOEType($oe_kurzbz) + { + $parents=array(); + + $qry=" + WITH RECURSIVE + oes (oe_kurzbz, oe_parent_kurzbz) AS + ( + SELECT + oe_kurzbz, + oe_parent_kurzbz, + bezeichnung AS oe_bezeichnung, + organisationseinheittyp_kurzbz + FROM + public.tbl_organisationseinheit + WHERE + oe_kurzbz=".$this->db_add_param($oe_kurzbz)." + AND + aktiv = true + + UNION ALL + + SELECT + o.oe_kurzbz, + o.oe_parent_kurzbz, + o.bezeichnung, + o.organisationseinheittyp_kurzbz + FROM + public.tbl_organisationseinheit o, oes + WHERE + o.oe_kurzbz = oes.oe_parent_kurzbz + AND + aktiv = true + ) + SELECT + oe_kurzbz, + oe_bezeichnung, + tbl_organisationseinheittyp.bezeichnung AS oe_typ_bezeichnung + FROM + oes + JOIN + public.tbl_organisationseinheittyp + USING (organisationseinheittyp_kurzbz)"; + + + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new stdClass(); + + $obj->oe_kurzbz = $row->oe_kurzbz; + $obj->oe_bezeichnung = $row->oe_bezeichnung; + $obj->oe_typ_bezeichnung = (!is_null($row->oe_typ_bezeichnung) ? $row->oe_typ_bezeichnung : ''); + + $this->result[]= $obj; + } + return $this->result; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } /** * Prueft ob $child eine Organisationseinheit unterhalb der OE $oe_kurzbz ist * @@ -756,5 +831,47 @@ class organisationseinheit extends basis_db } } } + + /** + * Get full term of organisational unit type + * @param string $oetyp_kurzbz + * @return boolean True on success. If true, returns full term of given organisational unit type. + */ + public function getOETypBezeichnung($oetyp_kurzbz) + { + if (isset($oetyp_kurzbz) && !empty($oetyp_kurzbz)) + { + $qry = ' + SELECT + bezeichnung + FROM + public.tbl_organisationseinheittyp + WHERE + organisationseinheittyp_kurzbz = '. $this->db_add_param($oetyp_kurzbz). ';'; + + if ($this->db_query($qry)) + { + if ($row = $this->db_fetch_object()) + { + $this->oetyp_bezeichnung = $row->bezeichnung; + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler in der Abfrage zum Einholen OE-Typ Bezeichnung."; + return false; + } + } + else + { + $this->errormsg = 'OE Typ fehlt bzw. darf nicht leer sein.'; + return false; + } + } } ?> diff --git a/include/sancho.inc.php b/include/sancho.inc.php new file mode 100644 index 000000000..a57bc8428 --- /dev/null +++ b/include/sancho.inc.php @@ -0,0 +1,214 @@ + + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/mail.class.php'); +require_once(dirname(__FILE__).'/vorlage.class.php'); + +const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg'; + +/** + * Send single Mail with Sancho Design and Layout. + * @param string $vorlage_kurzbz Name of the template for specific mail content. + * @param array $vorlage_data Associative array with specific mail content varibales + * to be replaced in the content template. + * @param string $to Email-adress. + * @param string $subject Subject of mail. + * @param string $headerImg Filename of the specific Sancho header image. + * @return boolean True, if succeeded. + */ +function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG) +{ + $from = 'sancho@'. DOMAIN; + $sanchoHeader_img = dirname(__FILE__). '/../skin/images/sancho/'. $headerImg; + $sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/sancho_footer.jpg'; + + // Set unique content id for embedding header and footer image + $cid_header = uniqid(); + $cid_footer = uniqid(); + + // Set specific mail content into specific content template + $content = parseMailContent($vorlage_kurzbz, $vorlage_data); + + // Create data array with specific content and image content ids + $layout = array( + 'CID_header' => $cid_header, + 'CID_footer' => $cid_footer, + 'content' => $content + ); + + // Set the data array into overall sancho mail template + $body = parseMailContent('Sancho_Mail_Template', $layout); + + // Send mail + $mail = new Mail($to, $from, $subject, $body); + + // * embed the images + $mail->addEmbeddedImage($sanchoHeader_img, 'image/jpg', '', $cid_header); + $mail->addEmbeddedImage($sanchoFooter_img, 'image/jpg', '', $cid_footer); + + // * embed the html content + $mail->setHTMLContent($body); + + return $mail->send(); +} + + +// ******************************************* HELPER FUNCTIONS +/** + * Replace variables in the mail content template with specific mail content data. + * @param string $vorlage_kurzbz Name of the template for specific mail content. + * @param array $vorlage_data Associative array with specific mail content varibales + * to be replaced in the content template. + * @return string + */ +function parseMailContent($vorlage_kurzbz, $vorlage_data) +{ + $vorlage = new Vorlage(); + $vorlage->getAktuelleVorlage('etw', $vorlage_kurzbz); + + // If the text and the subject of the template are not empty + if (!empty($vorlage->text)) + { + // Parses template text + $parsedText = parseVorlagetext($vorlage->text, $vorlage_data); + + return $parsedText; + } +} + +/** + * parseVorlagetext() - will parse a Vorlagetext. + * + * @param string $text REQUIRED + * @param array $data REQUIRED + * @return string + */ +function parseVorlagetext($text, $data = array()) +{ + if (empty($text)) + return 'Error in parsing Vorlagentext'; + $text = parse_string($text, $data, true); + return $text; +} + +/** + * Parse a String + * + * Parses pseudo-variables contained in the specified string, + * replacing them with the data in the second param + * + * @param string + * @param array + * @param bool + * @return string + */ +function parse_string($template, $data, $return = FALSE) +{ + if ($template === '') + { + return FALSE; + } + + $replace = array(); + foreach ($data as $key => $val) + { + $replace = array_merge( + $replace, + is_array($val) + ? parse_pair($key, $val, $template) + : parse_single($key, (string) $val, $template) + ); + } + + unset($data); + $template = strtr($template, $replace); + + if ($template === FALSE) + { + return false; + } + + return $template; +} + +/** + * Parse a single key/value + * + * @param string + * @param string + * @param string + * @return string + */ +function parse_single($key, $val, $string) +{ + return array('{'. $key. '}' => (string) $val); +} + +/** + * Parse a tag pair + * + * Parses tag pairs: {some_tag} string... {/some_tag} + * + * @param string + * @param array + * @param string + * @return string + */ +function parse_pair($variable, $data, $string) +{ + $replace = array(); + preg_match_all( + '#'.preg_quote('{'. $variable. '}').'(.+?)'.preg_quote('{'.'/'.$variable. '}').'#s', + $string, + $matches, + PREG_SET_ORDER + ); + + foreach ($matches as $match) + { + $str = ''; + foreach ($data as $row) + { + $temp = array(); + foreach ($row as $key => $val) + { + if (is_array($val)) + { + $pair = parse_pair($key, $val, $match[1]); + if ( ! empty($pair)) + { + $temp = array_merge($temp, $pair); + } + + continue; + } + + $temp['{'.$key. '}'] = $val; + } + + $str .= strtr($match[1], $temp); + } + + $replace[$match[0]] = $str; + } + + return $replace; +} diff --git a/include/studiengang.class.php b/include/studiengang.class.php index 679756cab..d36cd894b 100644 --- a/include/studiengang.class.php +++ b/include/studiengang.class.php @@ -244,31 +244,31 @@ class studiengang extends basis_db } /** - * Gibt alle aktiven Studiengaenge und Lehrgaenge (mit Typ) zurueck, bei denen das Attribut onlinebewerbung true ist. + * Gibt alle aktiven Studiengaenge und Lehrgaenge (mit Typ) zurueck, bei denen das Attribut onlinebewerbung true ist. * - * @param string $order Spalten, nach denen Sortiert werden soll.
Default: tbl_studiengang.typ, tbl_lgartcode.bezeichnung ASC, tbl_studiengang.bezeichnung. + * @param string $order Spalten, nach denen Sortiert werden soll.
Default: tbl_studiengang.typ, tbl_lgartcode.bezeichnung ASC, tbl_studiengang.bezeichnung. * @return boolean */ public function getAllForOnlinebewerbung($order = 'tbl_studiengang.typ, tbl_lgartcode.bezeichnung ASC, tbl_studiengang.bezeichnung') { - $qry = "SELECT - tbl_studiengang.studiengang_kz, - tbl_studiengang.typ, + $qry = "SELECT + tbl_studiengang.studiengang_kz, + tbl_studiengang.typ, tbl_studiengangstyp.bezeichnung AS typ_bezeichnung, tbl_studiengang.lgartcode, tbl_studiengang.bezeichnung AS studiengangbezeichnung, tbl_studiengang.english AS studiengangbezeichnung_englisch, - tbl_organisationseinheit.organisationseinheittyp_kurzbz, + tbl_organisationseinheit.organisationseinheittyp_kurzbz, tbl_organisationseinheit.standort, tbl_lgartcode.bezeichnung AS lehrgangsart - FROM public.tbl_studiengang - LEFT JOIN bis.tbl_lgartcode USING (lgartcode) + FROM public.tbl_studiengang + LEFT JOIN bis.tbl_lgartcode USING (lgartcode) LEFT JOIN public.tbl_organisationseinheit USING (oe_kurzbz) JOIN public.tbl_organisationseinheittyp USING (organisationseinheittyp_kurzbz) JOIN public.tbl_studiengangstyp USING (typ) - WHERE tbl_studiengang.onlinebewerbung IS TRUE + WHERE tbl_studiengang.onlinebewerbung IS TRUE AND tbl_studiengang.aktiv IS TRUE"; - + $qry .= " ORDER BY ".$order; if(!$result = $this->db_query($qry)) @@ -276,12 +276,12 @@ class studiengang extends basis_db $this->errormsg = 'Datensatz konnte nicht geladen werden'; return false; } - + while($row = $this->db_fetch_object($result)) { $this->result[] = $row; } - + return true; } @@ -1045,6 +1045,34 @@ class studiengang extends basis_db } return true; } + + /** + * Prueft ob ein Studiengang in einem Studiensemester mehrere Studienplaene mit unterschiedlichen Orgformen hat + * @param $studiengang_kz integer Kennzahl des Studiengangs. + * @param $studiensemester_kurzbz varchar Studiensemester (optional). + * @return true wenn mehrere Orgformen vorhanden sind, false wenn nicht. + */ + public function isMischform($studiengang_kz, $studiensemester_kurzbz = null) + { + $qry = "SELECT distinct orgform_kurzbz + FROM + lehre.tbl_studienplan + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN lehre.tbl_studienplan_semester USING(studienplan_id) + WHERE + studiengang_kz=".$this->db_add_param($studiengang_kz); + + if(!is_null($studiensemester_kurzbz)) + $qry .= " AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>1) + return true; + else + return false; + } + } /** * Laedt die Studiengänge die vom übergeben Typ sind diff --git a/locale/de-AT/profil.php b/locale/de-AT/profil.php old mode 100644 new mode 100755 index a761b8764..52f1c439d --- a/locale/de-AT/profil.php +++ b/locale/de-AT/profil.php @@ -5,7 +5,7 @@ $this->phrasen['profil/home']='HOME'; $this->phrasen['profil/meinCis']='Mein CIS'; $this->phrasen['profil/bildHochladen']='Profilfoto hochladen'; $this->phrasen['profil/email']='eMail'; -$this->phrasen['profil/kontaktPrivat']='Privat'; +$this->phrasen['profil/kontaktPrivat']='Private Kontakte'; $this->phrasen['profil/mobil']='Mobil'; $this->phrasen['profil/telefon']='Telefon'; $this->phrasen['profil/intern']='Intern'; diff --git a/locale/en-US/profil.php b/locale/en-US/profil.php old mode 100644 new mode 100755 index 10f490264..30ea23f1a --- a/locale/en-US/profil.php +++ b/locale/en-US/profil.php @@ -5,6 +5,7 @@ $this->phrasen['profil/mitarbeiter']='Employee'; $this->phrasen['profil/meinCis']='My CIS'; $this->phrasen['profil/bildHochladen']='Upload picture'; $this->phrasen['profil/email']='eMail'; +$this->phrasen['profil/kontaktPrivat']='Private Contacts'; $this->phrasen['profil/intern']='Intern'; $this->phrasen['profil/alias']='Alias'; $this->phrasen['profil/homepage']='Homepage'; diff --git a/public/css/AjaxLib.css b/public/css/AjaxLib.css index 46711a2d9..97e21adfa 100644 --- a/public/css/AjaxLib.css +++ b/public/css/AjaxLib.css @@ -1,5 +1,5 @@ .fhc-ajaxclient-veil { - position: absolute; + position: fixed; z-index: 9999; top: 0; left: 0; diff --git a/public/css/infocenter/infocenterDetails.css b/public/css/infocenter/infocenterDetails.css new file mode 100644 index 000000000..25e5d1820 --- /dev/null +++ b/public/css/infocenter/infocenterDetails.css @@ -0,0 +1,38 @@ +/* styles for infocenter details page */ + +/* styles for right header of the zgv boxes, which includes infos and priorisierung for each prestudent.*/ +.zgvheaderbeforeprio{ + margin-right: 2px; +} + +.zgvheaderrightprio{ + position: relative; + margin-right: 8px; +} + +.zgvheaderrightprio button.prio{ + position: absolute; + font-size: 19px; + height: 13px; + width: 18px; + padding: 0 4px; +} + +.zgvheaderrightprio button.prioalone{ + top: 25%; +} + +.zgvheaderrightprio button.priotogetherup{ + bottom: 50%; +} + +.zgvheaderrightprio button.priotogetherdown{ + top: 55%; +} + +.zgvheaderrightprio button.prio .prioarrow{ + position: absolute; + top: -4px; + right: 2px; + left: 2px; +} \ No newline at end of file diff --git a/public/css/sbadmin2/admintemplate.css b/public/css/sbadmin2/admintemplate.css index a0064e5c2..e793fff4d 100644 --- a/public/css/sbadmin2/admintemplate.css +++ b/public/css/sbadmin2/admintemplate.css @@ -7,7 +7,31 @@ border-bottom: 1px solid #eee; } -/*change of panel colors (grey) */ +.headerrightform +{ + margin: 28px 0 20px -30px; + padding: 6.4px 0 9px; + border-bottom: 1px solid #eee; +} + +.headerrightform .form-group{ + margin-bottom: 0; + margin-left: 5px; +} + +.headerrightform .form-control{ + height: 32px; + font-size: 13px; +} + +/*heading with colored background*/ +.headercolorbg { + background-color: #dfdfdf; + padding: 3px 0; + border-radius: 5px; +} + +/*change of panel colors (to grey) */ .panel-primary > .panel-heading, .panel-primary > .panel-collapse > .panel-footer, .panel-primary > .panel-footer{ color: black; background-color: #dfdfdf; @@ -42,6 +66,10 @@ text-decoration: none !important; } +.panel-footer.solidtop{ + border-top: 1px solid #ddd +} + /*required asterisk for labels for required fields*/ .label-required:after { diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index b87019a55..59cf59da1 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -744,7 +744,7 @@ var FHC_FilterWidget = { */ _renderTableDataset: function(data) { - if (data.hasOwnProperty("checkboxes") && data.checkboxes.trim() != "") + if (data.hasOwnProperty("checkboxes") && data.checkboxes!=null && data.checkboxes.trim() != "") { $("#filterTableDataset > thead > tr").append("
"); } diff --git a/public/js/NavigationWidget.js b/public/js/NavigationWidget.js index 232bff455..4cb4a755e 100644 --- a/public/js/NavigationWidget.js +++ b/public/js/NavigationWidget.js @@ -232,7 +232,7 @@ var FHC_NavigationWidget = { if (item["subscriptLinkClass"] != null && item["subscriptDescription"] != null) { - strLeftMenu += '' + + strLeftMenu += '' + ' (' + item["subscriptDescription"] + ')' + ''; strLeftMenu += ''; diff --git a/public/js/bootstrapper.js b/public/js/bootstrapper.js index 290749c11..5d1749e9a 100644 --- a/public/js/bootstrapper.js +++ b/public/js/bootstrapper.js @@ -3,8 +3,14 @@ * NOTE: avoid using this if possible */ $(document).ready(function() { + Bootstrapper.bootstraphtml(); +}); + +var Bootstrapper = { + bootstraphtml: function () + { $("input[type=text], select").addClass("form-control"); $("button, input[type=button]").addClass("btn btn-default"); $("table").addClass("table-condensed"); } -); +}; \ No newline at end of file diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 64377ae1c..92ebbe1c3 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -16,21 +16,13 @@ $(document).ready(function () InfocenterDetails._formatNotizTable(); InfocenterDetails._formatLogTable(); - //initialise datepicker - $.datepicker.setDefaults($.datepicker.regional['de']); - $(".dateinput").datepicker({ - "dateFormat": "dd.mm.yy" - }); - var personid = $("#hiddenpersonid").val(); //add submit event to message send link - $("#sendmsglink").click( - function () - { - $("#sendmsgform").submit(); - } - ); + $("#sendmsglink").click(function () + { + $("#sendmsgform").submit(); + }); //add click events to "formal geprüft" checkboxes $(".prchbox").click(function () @@ -41,60 +33,8 @@ $(document).ready(function () InfocenterDetails.saveFormalGeprueft(personid, akteid, checked) }); - //zgv übernehmen - $(".zgvUebernehmen").click(function () - { - var btn = $(this); - var prestudentid = this.id.substr(this.id.indexOf("_") + 1); - $('#zgvUebernehmenNotice').remove(); - InfocenterDetails.zgvUebernehmen(personid, prestudentid, btn) - }); - - //zgv speichern - $(".zgvform").on('submit', function (e) - { - e.preventDefault(); - var formdata = $(this).serializeArray(); - - var data = {}; - - for (var i = 0; i < formdata.length; i++) - { - data[formdata[i].name] = formdata[i].value; - } - - InfocenterDetails.saveZgv(data); - } - ); - - //show popup with zgvinfo - $(".zgvinfo").click(function () - { - var prestudentid = this.id.substr(this.id.indexOf("_") + 1); - InfocenterDetails.openZgvInfoForPrestudent(prestudentid); - } - ); - - //prevent opening modal when Statusgrund not chosen - $(".absageModal").on('show.bs.modal', function (e) - { - var id = this.id.substr(this.id.indexOf("_") + 1); - var statusgrvalue = $("#statusgrselect_" + id + " select[name=statusgrund]").val(); - if (statusgrvalue === "null") - { - $("#statusgrselect_" + id).addClass("has-error"); - return e.preventDefault(); - } - } - ); - - //remove red mark when statusgrund is selected again - $("select[name=statusgrund]").change( - function () - { - $(this).parent().removeClass("has-error"); - } - ); + //add click events to zgv Prüfung section + InfocenterDetails._addZgvPruefungEvents(personid); //save notiz $("#notizform").on("submit", function (e) @@ -203,6 +143,25 @@ var InfocenterDetails = { } ); }, + saveBewPriorisierung: function(data) + { + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/saveBewPriorisierung', + data, + { + successCallback: function(data, textStatus, jqXHR) { + if (data === true) + { + InfocenterDetails._refreshZgv(true); + } + else + { + alert("error when saving zgv Prio"); + } + } + } + ); + }, zgvUebernehmen: function(personid, prestudentid, btn) { FHC_AjaxClient.ajaxCallGet( @@ -267,6 +226,55 @@ var InfocenterDetails = { } ); }, + saveAbsage: function(data) + { + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/saveAbsage', + data, + { + successCallback: function(data, textStatus, jqXHR) { + + if (FHC_AjaxClient.hasData(data)) + { + InfocenterDetails._refreshZgv(); + InfocenterDetails._refreshLog(); + } + else + { + alert("error when saving Absage"); + } + } + } + ); + }, + saveFreigabe: function(data) + { + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/saveFreigabe', + data, + { + successCallback: function(data, textStatus, jqXHR) { + + console.log(data.error); + if (FHC_AjaxClient.hasData(data)) + { + InfocenterDetails._refreshZgv(); + InfocenterDetails._refreshLog(); + } + else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) + { + alert("error when setting accepted documents"); + InfocenterDetails._refreshZgv(); + InfocenterDetails._refreshLog(); + } + else + { + alert("error when saving Freigabe"); + } + } + } + ); + }, saveNotiz: function(personid, data) { FHC_AjaxClient.ajaxCallPost( @@ -399,6 +407,145 @@ var InfocenterDetails = { // ----------------------------------------------------------------------------------------------------------------- // (private) methods executed after ajax (refreshers) + + //adds JQuery events to ZGVprüfung section + _addZgvPruefungEvents: function(personid) + { + //add bootstrap to forms + Bootstrapper.bootstraphtml(); + + //initialise datepicker + $.datepicker.setDefaults($.datepicker.regional['de']); + $(".dateinput").datepicker({ + "dateFormat": "dd.mm.yy" + }); + + //up/down prioritize Bewerbungen + $(".prioup").click(function () + { + var prestudentid = this.id.substr(this.id.indexOf("_") + 1); + InfocenterDetails._savePrio(prestudentid, -1); + }); + $(".priodown").click(function () + { + var prestudentid = this.id.substr(this.id.indexOf("_") + 1); + InfocenterDetails._savePrio(prestudentid, 1); + }); + + //zgv übernehmen + $(".zgvUebernehmen").click(function () + { + var btn = $(this); + var prestudentid = this.id.substr(this.id.indexOf("_") + 1); + $('#zgvUebernehmenNotice').remove(); + InfocenterDetails.zgvUebernehmen(personid, prestudentid, btn); + }); + + //zgv speichern + $(".zgvform").on('submit', function (e) + { + e.preventDefault(); + var formdata = $(this).serializeArray(); + + var data = {}; + + for (var i = 0; i < formdata.length; i++) + { + data[formdata[i].name] = formdata[i].value; + } + + InfocenterDetails.saveZgv(data); + } + ); + + //show popup with zgvinfo + $(".zgvinfo").click(function () + { + var prestudentid = this.id.substr(this.id.indexOf("_") + 1); + InfocenterDetails.openZgvInfoForPrestudent(prestudentid); + } + ); + + //prevent opening modal when Statusgrund not chosen + $(".absageModal").on('show.bs.modal', function (e) + { + var id = this.id.substr(this.id.indexOf("_") + 1); + var statusgrvalue = $("#statusgrselect_" + id + " select[name=statusgrund]").val(); + if (statusgrvalue === "null") + { + $("#statusgrselect_" + id).addClass("has-error"); + return e.preventDefault(); + } + } + ); + + //remove red mark when statusgrund is selected again + $("select[name=statusgrund]").change( + function () + { + $(this).parent().removeClass("has-error"); + } + ); + + $(".saveAbsage").click(function() + { + $(".absageModal").modal("hide"); + var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); + var statusgrund_id = $("#statusgrselect_" + prestudent_id + " select[name=statusgrund]").val(); + var data = {"prestudent_id": prestudent_id , "statusgrund": statusgrund_id}; + InfocenterDetails.saveAbsage(data); + } + ); + + $(".saveFreigabe").click(function() + { + $(".freigabeModal").modal("hide"); + var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); + var data = {"prestudent_id": prestudent_id}; + InfocenterDetails.saveFreigabe(data); + } + ) + + }, + _refreshZgv: function(preserveCollapseState) + { + var personid = $("#hiddenpersonid").val(); + + var collapsed = {}; + + //save if panel is collapsed to preserve collapse state + if (preserveCollapseState) + { + $("#zgvpruefungen").find(".panel-collapse").each( + function() + { + var collapseid = $(this).prop("id"); + collapsed[collapseid] = !$(this).hasClass('collapse in'); + } + ); + } + + //show veil until refresh finished? + //FHC_AjaxClient.showVeil(); + $("#zgvpruefungen").load( + CONTROLLER_URL + '/reloadZgvPruefungen/' + personid + '?fhc_controller_id=' + FHC_AjaxClient.getUrlParameter('fhc_controller_id'), + function() + { + InfocenterDetails._addZgvPruefungEvents(personid); + if (preserveCollapseState) + { + for (var i in collapsed) + { + if (collapsed[i]) + $("#"+i).removeClass("in"); + else + $("#"+i).addClass("in"); + } + } + //FHC_AjaxClient.hideVeil(); + } + ); + }, _refreshLog: function() { var personid = $("#hiddenpersonid").val(); @@ -491,5 +638,13 @@ var InfocenterDetails = { _errorSaveNotiz: function() { $("#notizmsg").text(FHC_PhrasesLib.t('ui', 'fehlerBeimSpeichern')); + }, + _savePrio: function(prestudentid, change) + { + var data = { + "prestudentid": prestudentid, + "change": change + }; + InfocenterDetails.saveBewPriorisierung(data); } }; diff --git a/skin/images/sancho/sancho_header_DEFAULT.jpg b/skin/images/sancho/sancho_header_DEFAULT.jpg new file mode 100644 index 000000000..407583318 Binary files /dev/null and b/skin/images/sancho/sancho_header_DEFAULT.jpg differ diff --git a/skin/images/sancho/sancho_header_confirm_timesheet.jpg b/skin/images/sancho/sancho_header_confirm_timesheet.jpg new file mode 100644 index 000000000..de21591fe Binary files /dev/null and b/skin/images/sancho/sancho_header_confirm_timesheet.jpg differ diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php index 1fbf172f5..898e0f734 100644 --- a/soap/datenverbund_client.php +++ b/soap/datenverbund_client.php @@ -25,6 +25,7 @@ require_once('../include/functions.inc.php'); require_once('../include/basis_db.class.php'); require_once('../include/benutzerberechtigung.class.php'); require_once('../include/dvb.class.php'); +require_once('../include/errorhandler.class.php'); $uid = get_uid(); $rechte = new benutzerberechtigung(); @@ -39,9 +40,9 @@ if (isset($_GET['action'])) else $action = 'getBySvnr'; -$username = filter_input(INPUT_POST, 'username'); -$password = filter_input(INPUT_POST, 'password'); -$bildungseinrichtung = filter_input(INPUT_POST, 'bildungseinrichtung'); +$username = DVB_USERNAME; +$password = DVB_PASSWORD; + $studienjahr = filter_input(INPUT_POST, 'studienjahr'); $matrikelnr = filter_input(INPUT_POST, 'matrikelnummer'); $nachname = filter_input(INPUT_POST, 'nachname'); @@ -54,6 +55,7 @@ $matura = filter_input(INPUT_POST, 'matura'); $svnr = filter_input(INPUT_POST, 'svnr'); $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen'); $person_id = filter_input(INPUT_POST, 'person_id'); +$strasse = filter_input(INPUT_POST, 'strasse'); ?> @@ -71,11 +73,18 @@ $person_id = filter_input(INPUT_POST, 'person_id'); Matrikelnummer nach Ersatzkennzeichen suchen +
  • Matrikelnummer nach Nachname suchen
  • Matrikelnummer Reservierungen anzeigen
  • Matrikelnummer Kontingent anfordern
  • Matrikelnummer Vergabe melden
  • Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)
  • +
  • BPK ermitteln
  • +
  • BPK ermitteln manuell
  • + Portal: ".DVB_PORTAL; + echo "
    Bildungseinrichtung: ".DVB_BILDUNGSEINRICHTUNG_CODE; + ?>

    Kosten 
    Select
    @@ -103,9 +112,6 @@ $person_id = filter_input(INPUT_POST, 'person_id'); '; } - printrow('username', 'Username', $username, '', 100); - printrow('password', 'Passwort', $password, '', 100, 'password'); - switch($action) { case 'getOAuth': @@ -118,25 +124,17 @@ $person_id = filter_input(INPUT_POST, 'person_id'); case 'getByErsatzkennzeichen': printrow('ersatzkennzeichen', 'Ersatzkennzeichen', $ersatzkennzeichen); break; + case 'getByNachname': + printrow('nachname', 'Nachname', $nachname); + printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, ' (Format: YYYYMMDD)', 8); + break; case 'getReservations': case 'getKontingent': - printrow( - 'bildungseinrichtung', - 'Bildungseinrichtung', - $bildungseinrichtung, - 'Kurzzeichen der Bildungseinrichtung' - ); printrow('studienjahr', 'Studienjahr', $studienjahr, 'zB 2016 (für WS2016 und SS2017)', 4); break; case 'setMatrikelnummer': - printrow( - 'bildungseinrichtung', - 'Bildungseinrichtung', - $bildungseinrichtung, - 'Kurzzeichen der Bildungseinrichtung' - ); printrow('matrikelnummer', 'Matrikelnummer', $matrikelnr); printrow('nachname', 'Nachname', $nachname, '', 255); printrow('vorname', 'Vorname', $vorname, '', 30); @@ -144,7 +142,7 @@ $person_id = filter_input(INPUT_POST, 'person_id'); printrow('geschlecht', 'Geschlecht', $geschlecht, 'Format: M | W', 1); printrow('postleitzahl', 'Postleitzahl', $postleitzahl, '', 10); printrow('staat', 'Staat', $staat, '1-3 Stellen Codex (zb A für Österreich)', 3); - printrow('svnr', 'SVNR', $staat); + printrow('svnr', 'SVNR', $svnr); printrow('matura', 'Maturadatum', $matura, 'Format: YYYYMMDD (optional)', 10); break; @@ -152,6 +150,20 @@ $person_id = filter_input(INPUT_POST, 'person_id'); printrow('person_id', 'PersonID', $person_id); break; + case 'getBPK': + printrow('person_id', 'PersonID', $person_id); + break; + + case 'pruefeBPK': + printrow('nachname', 'Nachname', $nachname, '', 255); + printrow('vorname', 'Vorname', $vorname, '', 30); + printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, 'Format: YYYYMMDD', 10); + printrow('geschlecht', 'Geschlecht', $geschlecht, 'Format: M | W', 1); + printrow('postleitzahl', 'Postleitzahl', $postleitzahl, 'optional', 10); + printrow('strasse', 'Strasse', $strasse, 'optional', 255); + + break; + default: echo "Unknown action"; break; @@ -180,44 +192,80 @@ if (isset($_REQUEST['submit'])) switch ($action) { case 'getOAuth': - if ($dvb->authenticate()) + $result = $dvb->authenticate(); + if (ErrorHandler::isSuccess($result)) echo '
    OAuth Bearer Token: '.$dvb->authentication->access_token; else echo '
    Failed: '.$dvb->errormsg; break; case 'getBySvnr': - $matrikelnr = $dvb->getMatrikelnrBySVNR($_POST['svnr']); - if ($matrikelnr !== false) - echo '
    Matrikelnummer vorhanden:'.$matrikelnr; + $data = $dvb->getMatrikelnrBySVNR($_POST['svnr']); + + if(ErrorHandler::isSuccess($data) && ErrorHandler::hasData($data)) + { + echo '
    Matrikelnummer vorhanden: '.$data->retval->matrikelnummer; + if(isset($data->retval->bpk) && $data->retval->bpk!='') + echo '
    BPK vorhanden: '.$data->retval->bpk; + } else - echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; + { + echo '
    Matrikelnummer nicht vorhanden:'.$data->errormsg; + } break; case 'getByErsatzkennzeichen': - $matrikelnr = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']); - if ($matrikelnr !== false) - echo '
    Matrikelnummer vorhanden:'.$matrikelnr; + $data = $dvb->getMatrikelnrByErsatzkennzeichen($_POST['ersatzkennzeichen']); + + if (ErrorHandler::isSuccess($data) && ErrorHandler::hasData($data)) + echo '
    Matrikelnummer vorhanden:'.$data->retval->matrikelnummer; else - echo '
    Matrikelnummer nicht vorhanden:'.$dvb->errormsg; + echo '
    Matrikelnummer nicht vorhanden:'.$data->errormsg; break; - case 'getReservations': - $reservierteNummern = $dvb->getReservations($_POST['bildungseinrichtung'], $_POST['studienjahr']); + case 'getByNachname': + $data = $dvb->getMatrikelnrByNachname($_POST['nachname'], $_POST['geburtsdatum']); - if ($reservierteNummern !== false) - echo '
    Reservierte Nummern:'.print_r($reservierteNummern, true); + if(ErrorHandler::isSuccess($data) && ErrorHandler::hasData($data)) + { + if(isset($data->retval->data) && is_array($data->retval->data) && count($data->retval->data)>0) + { + echo '
    Daten gefunden: '; + var_dump($data->retval); + } + else + { + echo 'keine Einträge gefunden'; + } + } else - echo '
    Fehlgeschlagen:'.$dvb->errormsg; + { + echo '
    Matrikelnummer nicht vorhanden:'.$data->errormsg; + } + break; + case 'getReservations': + $result = $dvb->getReservations(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']); + if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result)) + { + $reservierteNummern = $result->retval->reservations; + if ($reservierteNummern !== false) + echo '
    Reservierte Nummern:'.print_r($reservierteNummern, true); + else + echo '
    Fehlgeschlagen:'.$data->errormsg; + } break; case 'getKontingent': - $kontingent = $dvb->getKontingent($_POST['bildungseinrichtung'], $_POST['studienjahr']); + $result = $dvb->getKontingent(DVB_BILDUNGSEINRICHTUNG_CODE, $_POST['studienjahr']); - if ($kontingent !== false) - echo '
    Kontingent:'.print_r($kontingent, true); - else - echo '
    Fehlgeschlagen:'.$dvb->errormsg; + if(ErrorHandler::isSuccess($result) && ErrorHandler::hasData($result)) + { + $kontingent = $result->retval->kontingent; + if ($kontingent !== false) + echo '
    Kontingent:'.print_r($kontingent, true); + else + echo '
    Fehlgeschlagen:'.$data->errormsg; + } break; case 'setMatrikelnummer': @@ -232,27 +280,49 @@ if (isset($_REQUEST['submit'])) $person->matura = $matura; // Optional $person->svnr = $svnr; // Optional - if ($dvb->setMatrikelnummer($_POST['bildungseinrichtung'], $person)) + $result = $dvb->setMatrikelnummer(DVB_BILDUNGSEINRICHTUNG_CODE, $person); + + if (ErrorHandler::isSuccess($result)) echo '
    Erfolgreich gemeldet'; else - echo '
    Fehlgeschlagen:'.$dvb->errormsg; + echo '
    Fehlgeschlagen:'.$data->errormsg; break; case 'assignMatrikelnummer': - if($dvb->assignMatrikelnummer($person_id)) + $result = $dvb->assignMatrikelnummer($person_id); + if(ErrorHandler::isSuccess($result)) { echo '
    OK'; } else - echo '
    Fehlgeschlagen:'.$dvb->errormsg; + echo '
    Fehlgeschlagen:'.$data->errormsg; break; + case 'getBPK': + $data = $dvb->getBPK($person_id); + if(ErrorHandler::isSuccess($data)) + { + echo '
    OK BPK: '.$data->retval->bpk; + } + else + echo '
    Fehlgeschlagen:'.$data->errormsg; + break; + + case 'pruefeBPK': + $data = $dvb->pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $postleitzahl, $strasse); + if(ErrorHandler::isSuccess($data)) + { + echo '
    OK BPK: '.$data->retval->bpk; + } + else + echo '
    Fehlgeschlagen:'.$data->errormsg; + break; default: echo "Unknown action"; break; } if (isset($_POST['debug'])) - echo '
    '.$dvb->debug_output.'
    '; + echo '
    '.nl2br(htmlentities($dvb->debug_output)).'
    '; } ?> diff --git a/system/checkStudenten.php b/system/checkStudenten.php index 12bad24b8..1a660d45f 100644 --- a/system/checkStudenten.php +++ b/system/checkStudenten.php @@ -609,7 +609,7 @@ $text .= "

    Studierender hat keine Matrikelnummer

    "; $qry = " SELECT - distinct on (person_id) + distinct on (tbl_person.person_id) tbl_student.student_uid, tbl_prestudent.prestudent_id, tbl_prestudent.studiengang_kz as studiengang @@ -618,7 +618,7 @@ FROM JOIN public.tbl_prestudentstatus USING(prestudent_id) JOIN public.tbl_person USING(person_id) JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_benutzer ON(tbl_student.student_uid=tbl_benutzer.uid) WHERE status_kurzbz in('Student', 'Diplomand', 'Absolvent', 'Abbrecher') AND tbl_prestudent.bismelden @@ -637,6 +637,62 @@ if ($result = $db->db_query($qry)) } } +/* + * Bewerber die nicht zum Reihungstest angetreten gesetzt sind + */ +$text .= "

    Bewerber aber kein ReihungstestAngetreten gesetzt

    "; +$lastSem = $studiensemester->getPreviousFrom($aktSem); +$qry="SELECT vorname, nachname, tbl_prestudent.prestudent_id, studiengang_kz FROM public.tbl_prestudent + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_person USING(person_id) + LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) + WHERE (studiensemester_kurzbz=".$db->db_add_param($aktSem)." OR studiensemester_kurzbz=".$db->db_add_param($lastSem).") + AND tbl_prestudent.studiengang_kz=".$db->db_add_param($studiengang_kz)." + AND status_kurzbz='Bewerber' AND reihungstestangetreten=false + "; +if ($result = $db->db_query($qry)) +{ + while ($row = $db->db_fetch_object($result)) + { + $ausgabe[$row->studiengang_kz][15][] = $row->vorname.' '.$row->nachname. + ' ('.$row->prestudent_id.')'; + $text .= $row->vorname.' '.$row->nachname. + ' ('.$row->prestudent_id.')'; + } +} + +/* + * Nation der Adresse ist ungleich Österreicher, die Gemeinde ist aber in der Gemeinde Tabelle enthalten + */ +$text .= "

    Adressnation ausserhalb Österreich mit Gemeinde in Gemeindetabelle

    "; +$lastSem = $studiensemester->getPreviousFrom($aktSem); +$qry="SELECT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.studiengang_kz, tbl_student.student_uid +FROM + public.tbl_adresse + JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_benutzer ON(uid=student_uid) +WHERE + tbl_adresse.nation!='A' + AND tbl_benutzer.aktiv + AND gemeinde NOT IN ('Münster') + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = tbl_adresse.gemeinde) +ORDER BY tbl_prestudent.studiengang_kz, tbl_person.nachname +"; + +if ($result = $db->db_query($qry)) +{ + while ($row = $db->db_fetch_object($result)) + { + $ausgabe[$row->studiengang_kz][16][] = $row->vorname.' '.$row->nachname. + ' ('.$row->student_uid.')'; + $text .= $row->vorname.' '.$row->nachname. + ' ('.$row->student_uid.')'; + } +} + + // Ausgabe der Studenten foreach ($ausgabe as $stg_kz => $value) { @@ -795,7 +851,24 @@ foreach ($ausgabe as $stg_kz => $value) "; break; - + case 15: + echo " + + + + + + "; + break; + case 16: + echo " + + + + + + "; + break; default: echo ""; break; diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 50f3f2e02..856a55922 100755 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -1522,6 +1522,33 @@ if (!$result = @$db->db_query("SELECT 1 FROM system.tbl_person_lock LIMIT 1")) echo ' system.tbl_person_lock hinzugefügt
    '; } +// Spalte bezeichnung_mehrsprachig in public.tbl_kontakttyp +if(!$result = @$db->db_query("SELECT bezeichnung_mehrsprachig FROM public.tbl_kontakttyp LIMIT 1")) +{ + $qry = "ALTER TABLE public.tbl_kontakttyp ADD COLUMN bezeichnung_mehrsprachig varchar(128)[];"; + + if(!$db->db_query($qry)) + echo 'public.tbl_kontakttyp '.$db->db_last_error().'
    '; + else + echo 'public.tbl_kontakttyp: Spalte bezeichnung_mehrsprachig hinzugefuegt!
    '; + + // Bezeichnung_mehrsprachig aus existierender Bezeichnung vorausfuellen. Ein Eintrag fuer jede Sprache mit Content aktiv. + $qry_help = "SELECT index FROM public.tbl_sprache WHERE content=TRUE;"; + if(!$result = $db->db_query($qry_help)) + echo 'tbl_kontakttyp bezeichnung_mehrsprachig: Fehler beim ermitteln der Sprachen: '.$db->db_last_error().''; + else + { + $qry=''; + while($row = $db->db_fetch_object($result)) + $qry.= "UPDATE public.tbl_kontakttyp set bezeichnung_mehrsprachig[".$row->index."] = beschreibung;"; + + if(!$db->db_query($qry)) + echo 'Setzen der bezeichnung_mehrsprachig fehlgeschlagen: '.$db->db_last_error().'
    '; + else + echo 'public.tbl_kontakttyp: bezeichnung_mehrprachig automatisch aus existierender Beschreibung uebernommen
    '; + } +} + // INSERT Berechtigungen fuer web User erteilen fuer tbl_msg_status if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_msg_status' AND table_schema='public' AND grantee='web' AND privilege_type='INSERT'")) { @@ -1550,6 +1577,7 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } + /** * Kommentare fuer Datenbanktabellen */ @@ -2455,14 +2483,14 @@ if(!$result = @$db->db_query("SELECT lieferant FROM public.tbl_firma LIMIT 1")) echo '
    public.tbl_firma: Spalte lieferant hinzugefuegt'; } -// INSERT, UPDATE und DELETE Berechtigungen fuer web User erteilen fuer tbl_rt_person und SEQUENCE public.tbl_rt_person_rt_person_id_seq +// INSERT, UPDATE und DELETE Berechtigungen fuer web User erteilen fuer tbl_rt_person und SEQUENCE public.tbl_rt_person_rt_person_id_seq if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_rt_person' AND table_schema='public' AND grantee='web' AND privilege_type='INSERT'")) { if($db->db_num_rows($result)==0) { $qry = "GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rt_person TO web; GRANT SELECT, UPDATE ON SEQUENCE public.tbl_rt_person_rt_person_id_seq TO web;"; - + if(!$db->db_query($qry)) echo 'public.tbl_rt_person Berechtigungen: '.$db->db_last_error().'
    '; else @@ -2647,7 +2675,7 @@ $tabellen=array( "public.tbl_gruppe" => array("gruppe_kurzbz","studiengang_kz","semester","bezeichnung","beschreibung","sichtbar","lehre","aktiv","sort","mailgrp","generiert","updateamum","updatevon","insertamum","insertvon","ext_id","orgform_kurzbz","gid","content_visible","gesperrt","zutrittssystem","aufnahmegruppe"), "public.tbl_kontakt" => array("kontakt_id","person_id","kontakttyp","anmerkung","kontakt","zustellung","updateamum","updatevon","insertamum","insertvon","ext_id","standort_id"), "public.tbl_kontaktmedium" => array("kontaktmedium_kurzbz","beschreibung"), - "public.tbl_kontakttyp" => array("kontakttyp","beschreibung"), + "public.tbl_kontakttyp" => array("kontakttyp","beschreibung","bezeichnung_mehrsprachig"), "public.tbl_konto" => array("buchungsnr","person_id","studiengang_kz","studiensemester_kurzbz","buchungstyp_kurzbz","buchungsnr_verweis","betrag","buchungsdatum","buchungstext","mahnspanne","updateamum","updatevon","insertamum","insertvon","ext_id","credit_points", "zahlungsreferenz", "anmerkung"), "public.tbl_lehrverband" => array("studiengang_kz","semester","verband","gruppe","aktiv","bezeichnung","ext_id","orgform_kurzbz","gid"), "public.tbl_log" => array("log_id","executetime","mitarbeiter_uid","beschreibung","sql","sqlundo"), diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 415dabc49..673cc9457 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -300,6 +300,28 @@ $filters = array( } ', 'oe_kurzbz' => null, + ), + array( + 'app' => 'core', + 'dataset_name' => 'overview', + 'filter_kurzbz' => 'BPKWartung', + 'description' => '{bPK Uebersicht}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Fehlende bPK", + "columns": [ + {"name": "person_id"}, + {"name": "vorname"}, + {"name": "nachname"}, + {"name": "svnr"}, + {"name": "ersatzkennzeichen"} + ], + "filters": [] + } + ', + 'oe_kurzbz' => null, ) ); diff --git a/system/matrikelnummer_clearing_import.php b/system/matrikelnummer_clearing_import.php index 4ab9d6dea..fbd166341 100644 --- a/system/matrikelnummer_clearing_import.php +++ b/system/matrikelnummer_clearing_import.php @@ -53,28 +53,28 @@ if(isset($_FILES['datei'])) $dom = new DOMDocument(); $dom->load($_FILES['datei']['tmp_name']); $studierende = $dom->getElementsByTagName('studierende'); - if(isset($studierende[0])) + if($studierende->length > 0) { - $domnodes_personen = $studierende[0]->getElementsByTagName('personen'); + $domnodes_personen = $studierende->item(0)->getElementsByTagName('personen'); foreach($domnodes_personen as $row_person) { $personid_node = $row_person->getElementsByTagName('personId'); - if(isset($personid_node[0])) + if($personid_node->length > 0) { - $node_bpk = $personid_node[0]->getElementsByTagName('bpk'); - $node_personenkennzeichen = $personid_node[0]->getElementsByTagName('personenkennzeichen'); - $node_matrikelnr = $personid_node[0]->getElementsByTagName('matrikelnummer'); + $node_bpk = $personid_node->item(0)->getElementsByTagName('bpk'); + $node_personenkennzeichen = $personid_node->item(0)->getElementsByTagName('personenkennzeichen'); + $node_matrikelnr = $personid_node->item(0)->getElementsByTagName('matrikelnummer'); $bpk = ''; $personenkennzeichen = ''; $matrikelnr = ''; - if (isset($node_bpk[0])) - $bpk = $node_bpk[0]->textContent; - if (isset($node_personenkennzeichen[0])) - $personenkennzeichen = $node_personenkennzeichen[0]->textContent; - if (isset($node_matrikelnr[0])) - $matrikelnr = $node_matrikelnr[0]->textContent; + if ($node_bpk->length > 0) + $bpk = $node_bpk->item(0)->textContent; + if ($node_personenkennzeichen->length > 0) + $personenkennzeichen = $node_personenkennzeichen->item(0)->textContent; + if ($node_matrikelnr->length > 0) + $matrikelnr = $node_matrikelnr->item(0)->textContent; if($personenkennzeichen != '') { diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ab29ee6e2..959768932 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -18,7 +18,7 @@ * Authors: Cristina Hainberger * * Beschreibung: - * The script checks phrases and phrase-texts for actuality in the database. + * The script checks phrases and phrase-texts for actuality in the database. * Missing attributes are inserted. */ @@ -928,7 +928,7 @@ $phrases = array( ) ) ), - + array( 'app' => 'core', 'category' => 'global', @@ -949,7 +949,7 @@ $phrases = array( ) ) ), - + array( 'app' => 'core', 'category' => 'global', @@ -970,8 +970,49 @@ $phrases = array( ) ) ), - - + + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'nichtvorhanden', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'n.v.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'n/a', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'ohne', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ohne', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'without', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + //******************************* CORE/ui array( 'app' => 'core', @@ -1333,8 +1374,8 @@ $phrases = array( ) ) ), - - + + //*************************** CORE/filter array( 'app' => 'core', @@ -1356,7 +1397,7 @@ $phrases = array( ) ) ), - + array( 'app' => 'core', 'category' => 'filter', @@ -1377,7 +1418,7 @@ $phrases = array( ) ) ), - + array( 'app' => 'core', 'category' => 'filter', @@ -1398,7 +1439,7 @@ $phrases = array( ) ) ), - + array( 'app' => 'core', 'category' => 'filter', @@ -1419,10 +1460,10 @@ $phrases = array( ) ) ), - - - - + + + + //**************************** CORE/person array( 'app' => 'core', @@ -1644,6 +1685,46 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'ersatzkennzeichen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Ersatzkennzeichen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => 'Replacement Label', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'bpk', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'bPK', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => 'bPK', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'person', @@ -1804,7 +1885,87 @@ $phrases = array( ) ) ), - + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'postleitzahl', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Postleitzahl', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => 'ZIP-Code', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'strasse', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Strasse', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => 'Street', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelpre', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'TitelPre', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'TitlePre', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelpost', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'TitelPost', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'TitlePost', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + //**************** CORE/lehre array( 'app' => 'core', @@ -1966,9 +2127,9 @@ $phrases = array( ) ) ), - - - + + + //********************** INFOCENTER/infocenter array( 'app' => 'infocenter', @@ -2600,7 +2761,7 @@ $phrases = array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Bei Freigabe von InteressentInnen wird deren Interessentenstatus bestätigt + 'text' => 'Bei Freigabe von InteressentInnen wird deren Interessentenstatus bestätigt und deren Zgvdaten können im Infocenter nicht mehr bearbeitet oder freigegeben werden.
    Alle nicht gespeicherten Zgvdaten gehen verloren.
    Fortfahren?', @@ -2755,6 +2916,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'priorisierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'prio', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'prio', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', @@ -2895,19 +3076,19 @@ $phrases = array( ) ) ) - + ); -//***** CHECK PHRASES & PHRASENTEXTE in German and English. +//***** CHECK PHRASES & PHRASENTEXTE in German and English. //***** INSERT into phrase_tbl if new app + category + phrase found in phrasen-array. //***** INSERT into phrasentext_tbl if new text found in phrasen-phrases-array, conciders every language apart. foreach ($phrases as $phrase) { - $qry = "SELECT phrase_id + $qry = "SELECT phrase_id FROM system.tbl_phrase - WHERE + WHERE app=". $db->db_add_param($phrase['app']). " AND category=". $db->db_add_param($phrase['category']). " AND phrase=". $db->db_add_param($phrase['phrase']); @@ -2916,16 +3097,16 @@ foreach ($phrases as $phrase) if ($result = $db->db_query($qry)) { $phrase_id = ''; - + //phrase not existing -> insert phrase and get last inserted phrase_id if ($db->db_num_rows($result) === 0) { $qry_insert = "INSERT INTO system.tbl_phrase( - app, - phrase, - insertamum, - insertvon, - category) + app, + phrase, + insertamum, + insertvon, + category) VALUES(". $db->db_add_param($phrase['app']). ','. $db->db_add_param($phrase['phrase']). ','. @@ -2936,7 +3117,7 @@ foreach ($phrases as $phrase) if ($db->db_query($qry_insert)) { $new = true; - + $qry_lastId = "SELECT currval('system.tbl_phrase_phrase_id_seq') as id"; if ($db->db_query($qry_lastId)) { @@ -2960,37 +3141,37 @@ foreach ($phrases as $phrase) } echo 'Kategorie/Phrase: '. $phrase['category']. '/'. $phrase['phrase']. ' vorhanden.
    '; } - - + + //*** CHECK PHRASENTEXT //loop through languages foreach ($phrase['phrases'] as $phrase_phrases) { $language = $phrase_phrases['sprache']; - + //query phrasentext in certain language $qry_language = "SELECT * FROM system.tbl_phrasentext - WHERE + WHERE phrase_id=". $phrase_id. " AND sprache='". $language. "'"; - - + + if ($result_language = $db->db_query($qry_language)) { //if phrasentext not existing in certain language -> insert if ($db->db_num_rows($result_language) === 0 && !empty($phrase_phrases['text'])) { $qry_insert = "INSERT INTO system.tbl_phrasentext( - phrase_id, - sprache, + phrase_id, + sprache, orgeinheit_kurzbz, orgform_kurzbz, text, description, - insertamum, - insertvon) + insertamum, + insertvon) VALUES(". $db->db_add_param($phrase_id, FHC_INTEGER). ','. $db->db_add_param($phrase_phrases['sprache']). ','. diff --git a/system/vorlage_zip/PrProtMAEng.odt b/system/vorlage_zip/PrProtMAEng.odt index bb12b1cc6..cda5e53ba 100644 Binary files a/system/vorlage_zip/PrProtMAEng.odt and b/system/vorlage_zip/PrProtMAEng.odt differ diff --git a/system/xsl/bachelorurkundeEng_0.xsl b/system/xsl/bachelorurkundeEng_0.xsl index eaccc7d4e..7f90e2da1 100644 --- a/system/xsl/bachelorurkundeEng_0.xsl +++ b/system/xsl/bachelorurkundeEng_0.xsl @@ -1,19 +1,19 @@ - @@ -53,7 +53,7 @@ - + @@ -73,6 +73,7 @@ Staatsbürgerschaft nicht angegeben + Prüfungstyp passt nicht zu diesem Dokumenttyp Datum der Abschlussprüfung nicht gesetzt @@ -98,19 +99,19 @@ - born in + born in , , citizen of , - student of the University of Applied Sciences + student of the University of Applied Sciences - Bachelor - Master - Diploma - Course - Short study + Bachelor + Master + Diploma + Course + Short study 's degree program @@ -145,4 +146,4 @@ - \ No newline at end of file + diff --git a/system/xsl/bachelorurkunde_0.xsl b/system/xsl/bachelorurkunde_0.xsl index 917eb7125..447066790 100644 --- a/system/xsl/bachelorurkunde_0.xsl +++ b/system/xsl/bachelorurkunde_0.xsl @@ -1,19 +1,19 @@ - @@ -53,7 +53,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + @@ -68,15 +68,16 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + Diplom-Urkunde Staatsbürgerschaft nicht angegeben + Prüfungstyp passt nicht zu diesem Dokumenttyp Datum der Abschlussprüfung nicht gesetzt Kein akademischer Grad ausgewählt Sponsionsdatum nicht gesetzt Bundesgesetzblattnummer (BGBl) beim Studiengang ist nicht gesetzt - + @@ -86,7 +87,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - geboren am in + geboren am in , @@ -103,15 +104,15 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" die/der - + den - das + das Fachhochschul- - Bachelor - Master - Diplom - Lehrgang - Kurzstudium + Bachelor + Master + Diplom + Lehrgang + Kurzstudium -Studiengang @@ -139,4 +140,4 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - \ No newline at end of file + diff --git a/system/xsl/diplomurkundeEng_0.xsl b/system/xsl/diplomurkundeEng_0.xsl index 3dcbeb634..cf94f8737 100644 --- a/system/xsl/diplomurkundeEng_0.xsl +++ b/system/xsl/diplomurkundeEng_0.xsl @@ -1,19 +1,19 @@ - @@ -53,7 +53,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + @@ -71,11 +71,12 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" Diploma Staatsbürgerschaft nicht angegeben + Prüfungstyp passt nicht zu diesem Dokumenttyp Datum der Abschlussprüfung nicht gesetzt Kein akademischer Grad ausgewählt Sponsionsdatum nicht gesetzt Bundesgesetzblattnummer (BGBl) beim Studiengang ist nicht gesetzt - + @@ -85,19 +86,19 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - born in + born in , , citizen of , - student of the University of Applied Sciences + student of the University of Applied Sciences - Bachelor - Master - Diploma - Course - Short study + Bachelor + Master + Diploma + Course + Short study 's degree program @@ -124,4 +125,4 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - \ No newline at end of file + diff --git a/system/xsl/diplomurkunde_0.xsl b/system/xsl/diplomurkunde_0.xsl index bb7b076c0..2437cc97f 100644 --- a/system/xsl/diplomurkunde_0.xsl +++ b/system/xsl/diplomurkunde_0.xsl @@ -1,19 +1,19 @@ - @@ -53,7 +53,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + @@ -68,15 +68,16 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + Diplom-Urkunde Staatsbürgerschaft nicht angegeben + Prüfungstyp passt nicht zu diesem Dokumenttyp Datum der Abschlussprüfung nicht gesetzt Kein akademischer Grad ausgewählt Sponsionsdatum nicht gesetzt Bundesgesetzblattnummer (BGBl) beim Studiengang ist nicht gesetzt - + @@ -86,7 +87,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - geboren am in + geboren am in , @@ -105,13 +106,13 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" den - das + das Fachhochschul- - Bachelor - Master - Diplom - Lehrgang - Kurzstudium + Bachelor + Master + Diplom + Lehrgang + Kurzstudium -Studiengang @@ -139,4 +140,4 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - \ No newline at end of file + diff --git a/vilesci/bis/checkverwendung.php b/vilesci/bis/checkverwendung.php index a843d41c6..faf0e500e 100644 --- a/vilesci/bis/checkverwendung.php +++ b/vilesci/bis/checkverwendung.php @@ -241,6 +241,7 @@ $qryall=' JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv=false + and bismelden=true AND (ende>now() OR ende IS NULL) GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; diff --git a/vilesci/bis/personal_generateverwendung.php b/vilesci/bis/personal_generateverwendung.php index 17f44537d..6f06140f3 100644 --- a/vilesci/bis/personal_generateverwendung.php +++ b/vilesci/bis/personal_generateverwendung.php @@ -101,7 +101,7 @@ wird das Ende des Semesters letzten Lehrauftrages herangezogen. $qry = "SELECT ma.* FROM ( SELECT - vorname, nachname, uid, personalnummer, insertamum,anmerkung, + vorname, nachname, uid, personalnummer, insertamum, anmerkung, aktiv, ( SELECT studiensemester_kurzbz FROM ( SELECT @@ -198,6 +198,7 @@ if ($result = $db->db_query($qry))
    + @@ -216,6 +217,7 @@ if ($result = $db->db_query($qry)) + diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index 236e8392b..810b5031d 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -300,7 +300,9 @@ if($result = $db->db_query($qry)) //Bewerberblock bei Ausserordentlichen nicht anzeigen if($stg_kz!=('9'.$erhalter)) { - if($orgform_code==3) + $stg_obj = new studiengang(); + + if($orgform_code==3 || $stg_obj->isMischform($stg_kz,$ssem) || $stg_obj->isMischform($stg_kz,$psem)) { $orgcodes = array_unique($orgform_code_array); //Mischform @@ -1005,7 +1007,7 @@ function GenerateXMLStudentBlock($row) $datei.=" ".$row->ersatzkennzeichen.""; } - + $datei.=" ".$row->staatsbuergerschaft."".$plz." @@ -1152,7 +1154,9 @@ function GenerateXMLStudentBlock($row) $datei.=" "; - if($aktstatus=='Student' || $aktstatus=='Diplomand' || $aktstatus=='Praktikant' || $aktstatus=='Outgoing') + // Aktive Studierende - keine Incoming, keine Externen GS + if(($aktstatus=='Student' || $aktstatus=='Diplomand' || $aktstatus=='Praktikant' || $aktstatus=='Outgoing') + && !($gemeinsamestudien && $kodex_studientyp_array[$row->gsstudientyp_kurzbz]=='E')) { if(!isset($stsem[$storgform][$sem])) { diff --git a/vilesci/cronjobs/bpk.php b/vilesci/cronjobs/bpk.php new file mode 100644 index 000000000..2d26634e3 --- /dev/null +++ b/vilesci/cronjobs/bpk.php @@ -0,0 +1,134 @@ + + */ +/** + * Erfragt die BPKs von Personen beim Datenverbund und speichert diese wenn gefunden + * Dieses Script sollte nach dem Matrikelnummer Job aufgerufen werden da dieser bereits bpks ermittelt + * Dieser Job versucht die BPKs zu holen die nicht automatisch über den Matrikelnummer Job gefunden wurden. + */ +require_once(dirname(__FILE__).'/../../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../../include/basis_db.class.php'); +require_once(dirname(__FILE__).'/../../include/dvb.class.php'); +require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); +require_once(dirname(__FILE__).'/../../include/datum.class.php'); +require_once(dirname(__FILE__).'/../../include/errorhandler.class.php'); + +if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$limit = ''; +$debug = false; + +// Wenn das Script nicht ueber Commandline gestartet wird, muss eine +// Authentifizierung stattfinden +if (php_sapi_name() != 'cli') +{ + $nl = '
    '; + // Benutzerdefinierte Variablen laden + $user = get_uid(); + loadVariables($user); + + // Berechtigungen pruefen + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + if (!$rechte->isBerechtigt('admin', null, 'suid')) + die('Sie haben keine Berechtigung für diese Seite'); + + if (isset($_GET['debug'])) + $debug = ($_GET['debug'] == 'true'?true:false); + + if (isset($_GET['limit']) && is_numeric($_GET['limit'])) + $limit = $_GET['limit']; +} +else +{ + $nl = "\n"; + // Commandline Paramter parsen bei Aufruf ueber Cronjob + // zb php matrikelnummer.php --limit 100 --debug true + $longopt = array( + "limit:", + "debug:" + ); + $commandlineparams = getopt('', $longopt); + if (isset($commandlineparams['limit']) && is_numeric($commandlineparams['limit'])) + $limit = $commandlineparams['limit']; + if (isset($commandlineparams['debug'])) + $debug = ($commandlineparams['debug'] == 'true'?true:false); +} + +$webservice = new dvb(DVB_USERNAME, DVB_PASSWORD, $debug); + +$qry = " + SELECT + distinct person_id, vorname, nachname + FROM + public.tbl_person + JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_student ON(tbl_student.student_uid=tbl_benutzer.uid) + WHERE + public.tbl_benutzer.aktiv = true + AND tbl_person.matr_nr is not null + AND tbl_person.bpk is null + AND studiengang_kz<10000 + AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true) + AND gebdatum is not null"; + +if ($limit != '') + $qry .= " LIMIT ".$limit; + +$db = new basis_db(); +$cnt = 0; +if ($result = $db->db_query($qry)) +{ + while ($row = $db->db_fetch_object($result)) + { + $cnt++; + // Nach jeweils 25 Requests eine Pause einlegen damit die + // Anzahl Requests pro Minute nicht überschritten wird + if($cnt%25 == 0) + sleep(30); + + echo $nl."Pruefe $row->person_id $row->vorname $row->nachname"; + $data = $webservice->getBPK($row->person_id); + if (ErrorHandler::isSuccess($data)) + { + if (ErrorHandler::hasData($data) && isset($data->retval->bpk) && $data->retval->bpk != '') + { + $person = new person(); + if ($person->load($row->person_id)) + { + $person->bpk = $data->retval->bpk; + if ($person->save()) + echo ' OK'; + else + echo ' Failed: '.$person->errormsg; + } + } + else + { + echo 'Failed: BPK Empty'; + } + } + else + echo ' Failed:'.$webservice->errormsg; + } +} +if ($debug) + echo $webservice->debug_output; diff --git a/vilesci/cronjobs/matrikelnummern.php b/vilesci/cronjobs/matrikelnummern.php index 669dfb74f..9cb3992b4 100644 --- a/vilesci/cronjobs/matrikelnummern.php +++ b/vilesci/cronjobs/matrikelnummern.php @@ -26,17 +26,20 @@ require_once(dirname(__FILE__).'/../../include/basis_db.class.php'); require_once(dirname(__FILE__).'/../../include/dvb.class.php'); require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); require_once(dirname(__FILE__).'/../../include/datum.class.php'); +require_once(dirname(__FILE__).'/../../include/errorhandler.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $limit = ''; $debug = false; +$softrun = false; // Wenn das Script nicht ueber Commandline gestartet wird, muss eine // Authentifizierung stattfinden if (php_sapi_name() != 'cli') { + $nl = '
    '; // Benutzerdefinierte Variablen laden $user = get_uid(); loadVariables($user); @@ -48,25 +51,32 @@ if (php_sapi_name() != 'cli') if (!$rechte->isBerechtigt('admin', null, 'suid')) die('Sie haben keine Berechtigung für diese Seite'); - if(isset($_GET['debug'])) - $debug = ($_GET['debug']=='true'?true:false); + if (isset($_GET['debug'])) + $debug = ($_GET['debug'] == 'true'?true:false); - if(isset($_GET['limit']) && is_numeric($_GET['limit'])) + if (isset($_GET['limit']) && is_numeric($_GET['limit'])) $limit = $_GET['limit']; + + if (isset($_GET['softrun'])) + $debug = ($_GET['softrun'] == 'true'?true:false); } else { + $nl = "\n"; // Commandline Paramter parsen bei Aufruf ueber Cronjob // zb php matrikelnummer.php --limit 100 --debug true $longopt = array( "limit:", - "debug:" + "debug:", + "softrun:" ); $commandlineparams = getopt('', $longopt); if (isset($commandlineparams['limit']) && is_numeric($commandlineparams['limit'])) $limit = $commandlineparams['limit']; if (isset($commandlineparams['debug'])) - $debug = ($commandlineparams['debug']=='true'?true:false); + $debug = ($commandlineparams['debug'] == 'true'?true:false); + if (isset($commandlineparams['softrun'])) + $softrun = ($commandlineparams['softrun'] == 'true'?true:false); } $matrikelnummer_added = 0; @@ -74,7 +84,7 @@ $webservice = new dvb(DVB_USERNAME, DVB_PASSWORD, $debug); $qry = " SELECT - distinct person_id + distinct person_id, vorname, nachname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) @@ -83,20 +93,23 @@ $qry = " public.tbl_benutzer.aktiv = true AND tbl_person.matr_nr is null AND studiengang_kz<10000 - AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true)"; + AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true) + AND (svnr is not null OR ersatzkennzeichen is not null)"; if ($limit != '') - $qry.=" LIMIT ".$limit; + $qry .= " LIMIT ".$limit; $db = new basis_db(); if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - if($webservice->assignMatrikelnummer($row->person_id)) - echo "\n
    ".$row->person_id.' OK'; + echo $nl."Pruefe $row->person_id $row->vorname $row->nachname"; + $data = $webservice->assignMatrikelnummer($row->person_id, $softrun); + if (ErrorHandler::isSuccess($data)) + echo ' OK'; else - echo "\n
    ".$row->person_id.' Failed:'.$webservice->errormsg; + echo ' Failed:'.$webservice->errormsg; } } if($debug) diff --git a/vilesci/personen/institutsliste.php b/vilesci/personen/institutsliste.php index fdeb1ffeb..326b6ab48 100644 --- a/vilesci/personen/institutsliste.php +++ b/vilesci/personen/institutsliste.php @@ -24,7 +24,7 @@ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/studiengang.class.php'); -require_once('../../include/fachbereich.class.php'); +require_once('../../include/organisationseinheit.class.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/benutzerberechtigung.class.php'); @@ -34,8 +34,15 @@ if (!$db = new basis_db()) $stg_obj = new studiengang(); $stg_obj->getAll('typ, kurzbz', false); -$fb_obj = new fachbereich(); -$fb_obj->getAll(); +$oe_typ = new organisationseinheit(); +$oe_typ->getTypen(); +foreach($oe_typ->result as $row) + $oe_typ_arr[$row->organisationseinheittyp_kurzbz]=$row->bezeichnung; +$oe_obj = new organisationseinheit(); +$oe_obj->getAll(); + +foreach($oe_obj->result as $row) + $oe_arr[$row->oe_kurzbz] = $oe_typ_arr[$row->organisationseinheittyp_kurzbz].' '.$row->bezeichnung; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen(get_uid()); @@ -55,26 +62,26 @@ echo ' -

    Liste der MitarbeiterInnen der Institute

    '; +

    Liste der MitarbeiterInnen der Abteilungen

    '; $stsem = new studiensemester(); if(isset($_GET['ws']) && check_stsem($_GET['ws'])) $ws = $_GET['ws']; else $ws = $stsem->getNearest(1); - + if(isset($_GET['ss']) && check_stsem($_GET['ss'])) $ss = $_GET['ss']; else @@ -82,49 +89,55 @@ else if($rechte->isBerechtigt('admin', 0) || $rechte->isBerechtigt('mitarbeiter', 0)) $where = ''; -else +else { - $fb = $rechte->getFbKz(); - if(count($fb)>0) + $oe = $rechte->getOEkurzbz('assistenz'); + if(count($oe)>0) { - $where = " AND EXISTS (SELECT * FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) JOIN public.tbl_fachbereich ON(lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz) WHERE - tbl_lehreinheit.studiensemester_kurzbz in(".$db->db_add_param($ws).",".$db->db_add_param($ss).") AND mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid AND - fachbereich_kurzbz IN("; - foreach ($fb as $fachbereich_kurzbz) + $where = " AND EXISTS ( + SELECT * FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz in(".$db->db_add_param($ws).",".$db->db_add_param($ss).") + AND mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid + AND lehrfach.oe_kurzbz IN("; + foreach ($oe as $oe_kurzbz) { - $where.=$db->db_add_param($fachbereich_kurzbz).","; + $where.=$db->db_add_param($oe_kurzbz).","; } $where.="''))"; } - else + else die('Sie haben keine Berechtigung fuer diese Seite'); } //Alle aktiven Mitarbeiter holen mit den ALVS-Stunden und der Hauptinstitutszuteilung -$qry = "SELECT - personalnummer, vorname, nachname, fixangestellt, mitarbeiter_uid, kompetenzen, +$qry = "SELECT + personalnummer, vorname, nachname, fixangestellt, mitarbeiter_uid, kompetenzen, ( - SELECT - sum(semesterstunden) - FROM + SELECT + sum(semesterstunden) + FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE - mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid AND + WHERE + mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid AND studiensemester_kurzbz=".$db->db_add_param($ws)." ) as lvs_wintersemester, ( - SELECT - sum(semesterstunden) - FROM + SELECT + sum(semesterstunden) + FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE - mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid AND + WHERE + mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid AND studiensemester_kurzbz=".$db->db_add_param($ss)." ) as lvs_sommersemester, ( - SELECT - tbl_organisationseinheit.bezeichnung - FROM + SELECT + tbl_organisationseinheit.oe_kurzbz + FROM public.tbl_benutzerfunktion JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE uid=tbl_mitarbeiter.mitarbeiter_uid AND @@ -133,9 +146,9 @@ $qry = "SELECT AND (datum_bis>=now() OR datum_bis is null) LIMIT 1 ) as hauptzuteilung - FROM - public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) - JOIN public.tbl_person USING(person_id) + FROM + public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) + JOIN public.tbl_person USING(person_id) WHERE tbl_benutzer.aktiv $where"; if($result = $db->db_query($qry)) @@ -149,12 +162,11 @@ if($result = $db->db_query($qry)) - - - + + "; @@ -166,46 +178,52 @@ if($result = $db->db_query($qry)) echo ""; echo ""; echo ""; - echo ""; echo ""; echo ""; echo ''; - echo ""; + echo ""; echo ""; echo ''; diff --git a/vilesci/personen/leistungsstipendium.php b/vilesci/personen/leistungsstipendium.php old mode 100644 new mode 100755 index f5c282064..693c44f0a --- a/vilesci/personen/leistungsstipendium.php +++ b/vilesci/personen/leistungsstipendium.php @@ -386,6 +386,17 @@ if (!$errorOccurred && $dataPosted)
    Aktive Studierende ohne Matrikelnummer
     
    Folgende Personen wurden zu Bewerbern gemacht, sind aber nicht zum Reihungstest angetreten.
     
    Folgende Personen haben eine Adresse mit Nation Österreichs, die Gemeinde liegt aber in Österreich
     
    Ungültiger Code
    Nachname Vorname UIDAktiv Personalnummer Anlagedatum Letzer Lehrauftrag'.$db->convert_html_chars($row->nachname).' '.$db->convert_html_chars($row->vorname).' '.$db->convert_html_chars($row->uid).''.($db->db_parse_bool($row->aktiv)?'Ja':'Nein').' '.$db->convert_html_chars($row->personalnummer).' '.$db->convert_html_chars($datum_obj->formatDatum($row->insertamum,'d.m.Y')).' '.$db->convert_html_chars($row->letzter_lehrauftrag).' Nachname Vorname Fix / FreiKompetenzen ALVS
    ".$db->convert_html_chars($ws)."
    ALVS
    ".$db->convert_html_chars($ss)."
    StudiengangInstitut HauptzuteilungSonstige InstitutszuteilungenDisziplinäre ZuordnungZuteilungen laut Lehrauträge
    ".$db->convert_html_chars($row->nachname)."".$db->convert_html_chars($row->vorname)."".($row->fixangestellt=='t'?'fix':'frei')."".$db->convert_html_chars($row->kompetenzen)."$row->lvs_wintersemester$row->lvs_sommersemester'; $qry = " - SELECT - distinct studiengang_kz - FROM - lehre.tbl_lehreinheitmitarbeiter - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - WHERE - mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." + SELECT + distinct studiengang_kz + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + WHERE + mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." AND studiensemester_kurzbz in(".$db->db_add_param($ss).", ".$db->db_add_param($ws).")"; - + $text=''; + if($row->hauptzuteilung!='') + $abteilung = $oe_arr[$row->hauptzuteilung]; + else + $abteilung = ''; + if($result_stg = $db->db_query($qry)) while($row_stg = $db->db_fetch_object($result_stg)) $text.= $stg_obj->kuerzel_arr[$row_stg->studiengang_kz].', '; echo mb_substr($text, 0, mb_strlen($text)-2); echo '".$db->convert_html_chars($row->hauptzuteilung)."".$db->convert_html_chars($abteilung).""; $qry = " - SELECT - distinct fachbereich_kurzbz - FROM - lehre.tbl_lehreinheitmitarbeiter - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - JOIN public.tbl_fachbereich ON(lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz) - WHERE - mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." + SELECT + distinct lehrfach.oe_kurzbz + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE + mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." AND studiensemester_kurzbz in(".$db->db_add_param($ss).", ".$db->db_add_param($ws).")"; - + $text=''; - if($result_fb = $db->db_query($qry)) - while($row_fb = $db->db_fetch_object($result_fb)) - $text.= $fb_obj->bezeichnung_arr[$row_fb->fachbereich_kurzbz].', '; + if($result_oe = $db->db_query($qry)) + while($row_oe = $db->db_fetch_object($result_oe)) + { + if($row_oe->oe_kurzbz!='') + $text.= $oe_arr[$row_oe->oe_kurzbz].', '; + } echo mb_substr($text, 0, mb_strlen($text)-2); echo "
    + + + +
    CMS-Format + Zeichensatz: UTF-8
    + Feldtrenner: ;
    + Texttrenner: "
    + Felder:
    +
    Nachname;Vorname;UID/PersKZ;Studiengang;Betrag;Überweisungsdatum
    +Dylan;Bob;1234567;MEE;750;03.10.2016
    +
    diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 05c72abfe..c449341b8 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -152,13 +152,22 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } // Wenn beide Personen eine Matr_nr haben, abbrechen - if (($personToDelete_obj->matr_nr != '' && $personToKeep_obj->matr_nr != '')) + if ($personToDelete_obj->matr_nr != '' && $personToKeep_obj->matr_nr != '' + && $personToDelete_obj->matr_nr != $personToKeep_obj->matr_nr) { $msg_error[] = 'Beide Personen haben eine Matrikelnummer und können nicht zusammengelegt werden.
    Bitte wenden Sie sich an einen Administrator.'; $error = true; } + // Wenn beide Personen ein BPK haben, abbrechen + if ($personToDelete_obj->bpk != '' && $personToKeep_obj->bpk != '' && $personToDelete_obj->bpk != $personToKeep_obj->bpk) + { + $msg_error[] = 'Beide Personen haben unterschiedliche BPK und können nicht zusammengelegt werden.
    + Bitte wenden Sie sich an einen Administrator.'; + $error = true; + } + // Wenn zwei gleiche rt_person Einträge vorhanden sind, wird ein Fehler ausgegeben und abgebrochen $reihungstest_personToKeep = new reihungstest(); $reihungstest_personToKeep->getReihungstestPerson($personToKeep); @@ -276,6 +285,16 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $matr_nr = $personToKeep_obj->matr_nr; if ($personToKeep_obj->matr_nr == '' && $personToDelete_obj->matr_nr != '') $matr_nr = $personToDelete_obj->matr_nr; + else + $matr_nr = $personToKeep_obj->matr_nr; + + $bpk = ''; + if ($personToDelete_obj->bpk == '' && $personToKeep_obj->bpk != '') + $bpk = $personToKeep_obj->bpk; + if ($personToKeep_obj->bpk == '' && $personToDelete_obj->bpk != '') + $bpk = $personToDelete_obj->bpk; + else + $bpk = $personToKeep_obj->bpk; // Letztbenutzten Zugangscode abfragen und übernehmen $zugangscode = ''; @@ -339,6 +358,9 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p // Matr_nr erst setzen, wenn nur mehr eine Person vorhanden ist $sql_query_upd1 .= "UPDATE public.tbl_person SET matr_nr=" . $db->db_add_param($matr_nr, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";"; + // BPK erst setzen, wenn nur mehr eine Person vorhanden ist + $sql_query_upd1 .= "UPDATE public.tbl_person SET bpk=" . $db->db_add_param($bpk, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";"; + if ($db->db_query($sql_query_upd1)) { $msg_info[] = "Update Query:"; diff --git a/vilesci/stammdaten/statistik_details.php b/vilesci/stammdaten/statistik_details.php index ca17935e4..4480de955 100644 --- a/vilesci/stammdaten/statistik_details.php +++ b/vilesci/stammdaten/statistik_details.php @@ -46,10 +46,10 @@ if(!$rechte->isBerechtigt('basis/statistik', null, 'suid')) Statistik - Details - +