mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -7,8 +7,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
$config['interval_blocking_application'] = 'P1M';
|
||||
|
||||
// Application submission period given by start- and enddate.
|
||||
$config['submit_application_start'] = '01.02.2021';
|
||||
$config['submit_application_end'] = '22.02.2021';
|
||||
$config['submit_application_start'] = '05.09.2022';
|
||||
$config['submit_application_end'] = '22.09.2022';
|
||||
|
||||
// Lehrveranstaltungen with these grades will be blocked for application
|
||||
$config['grades_blocking_application'] = array(
|
||||
|
||||
@@ -119,6 +119,13 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'system/issues_verwalten:r'
|
||||
),
|
||||
'gruppenmanagement' => array(
|
||||
'link' => site_url('person/Gruppenmanagement'),
|
||||
'description' => 'Gruppenmanagement',
|
||||
'expand' => true,
|
||||
'sort' => 40,
|
||||
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -45,6 +45,14 @@ class Zgv extends API_Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return zgv
|
||||
*/
|
||||
public function getAllZgv()
|
||||
{
|
||||
$this->response($this->Zgv_model->getAllZgv(), REST_Controller::HTTP_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
||||
@@ -45,6 +45,14 @@ class Zgvmaster extends API_Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return zgvmaster
|
||||
*/
|
||||
public function getAllZgvmaster()
|
||||
{
|
||||
$this->response($this->Zgvmaster_model->getAllZgvmaster(), REST_Controller::HTTP_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
||||
@@ -16,9 +16,11 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
class AnrechnungJob extends JOB_Controller
|
||||
{
|
||||
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
|
||||
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
|
||||
|
||||
const ANRECHNUNGSTATUS_APPROVED = 'approved';
|
||||
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
|
||||
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
|
||||
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
|
||||
|
||||
/**
|
||||
@@ -33,6 +35,8 @@ class AnrechnungJob extends JOB_Controller
|
||||
|
||||
$this->load->helper('url');
|
||||
$this->load->helper('hlp_sancho_helper');
|
||||
|
||||
$this->load->library('AnrechnungLib');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -342,6 +346,79 @@ html;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Sancho mail to remind lecturers to provide their recommendation if not done until one week after request.
|
||||
*/
|
||||
public function sendMailRemindRecommendation(){
|
||||
|
||||
$this->logInfo('Start AnrechnungJob sendMailRemindRecommendation to remind lecturers to provide their recommendation.');
|
||||
|
||||
// Get Anrechnungen with pending recommendations, that were requested 1 week before today.
|
||||
// Restrict query for Anrechnungen of actual semester.
|
||||
$this->AnrechnungModel->addSelect('astat.anrechnung_id, astat.datum, astat.insertamum');
|
||||
$this->AnrechnungModel->addDistinct('astat.anrechnung_id');
|
||||
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus astat', 'anrechnung_id');
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere('
|
||||
studiensemester_kurzbz = (
|
||||
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
|
||||
)
|
||||
AND genehmigt_von IS NULL
|
||||
AND empfehlung_anrechnung IS NULL
|
||||
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
|
||||
AND NOW()::date = (astat.datum + interval \'1 week\') -- eine Woche nach Empfehlungsanfrage
|
||||
ORDER BY astat.anrechnung_id, astat.datum DESC, astat.insertamum DESC -- nur letzten status dabei prüfen
|
||||
');
|
||||
|
||||
// Exit if there are no pending recommendations
|
||||
if (!hasData($result))
|
||||
{
|
||||
$this->logInfo('End AnrechnungJob sendMailRemindRecommendation, because no recommendations to be done.');
|
||||
exit;
|
||||
}
|
||||
|
||||
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
|
||||
|
||||
$arr_lvLector_arr = array();
|
||||
foreach ($anrechnung_id_arr as $anrechnung_id)
|
||||
{
|
||||
$arr_lvLector_arr[]= $this->anrechnunglib->getLectors($anrechnung_id); // Returns LV Leitung. If not present, then all lectors of LV.
|
||||
}
|
||||
|
||||
// Unique lector array to send only one mail per lector
|
||||
$arr_lvLector_arr = array_unique($arr_lvLector_arr, SORT_REGULAR);
|
||||
|
||||
// Link to 'Anrechnungen prüfen' dashboard
|
||||
$url =
|
||||
CIS_ROOT. 'cis/index.php?menu='.
|
||||
CIS_ROOT. 'cis/menu.php?content_id=&content='.
|
||||
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
|
||||
|
||||
foreach ($arr_lvLector_arr as $lvLector_arr)
|
||||
{
|
||||
foreach ($lvLector_arr as $lector)
|
||||
{
|
||||
// Prepare mail content
|
||||
$fields = array(
|
||||
'vorname' => $lector->vorname,
|
||||
'stgl_name' => 'Die Studiengangsleitung',
|
||||
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
|
||||
);
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'AnrechnungEmpfehlungAnfordern',
|
||||
$fields,
|
||||
$lector->uid. '@'. DOMAIN,
|
||||
'Erinnerung: Deine Empfehlung wird benötigt zur Anerkennung nachgewiesener Kenntnisse'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo('SUCCEDED AnrechnungJob sendMailRemindRecommendation');
|
||||
|
||||
}
|
||||
|
||||
// Get STGL mail address
|
||||
private function _getSTGLMailAddress($studiengang_kz)
|
||||
{
|
||||
|
||||
@@ -108,21 +108,29 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
|
||||
}
|
||||
|
||||
$json = array(
|
||||
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
|
||||
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED),
|
||||
'prestudenten' => []
|
||||
);
|
||||
|
||||
// Approve Anrechnung
|
||||
foreach ($data as $item)
|
||||
{
|
||||
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
|
||||
// Get Prestudent
|
||||
$this->AnrechnungModel->addSelect('prestudent_id');
|
||||
$result = $this->AnrechnungModel->load($item['anrechnung_id']);
|
||||
$prestudent_id = getData($result)[0]->prestudent_id;
|
||||
|
||||
// Approve
|
||||
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
|
||||
{
|
||||
$json[]= array(
|
||||
'anrechnung_id' => $item['anrechnung_id'],
|
||||
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
|
||||
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED)
|
||||
);
|
||||
$json['prestudenten'][$prestudent_id][] = $item['anrechnung_id'];
|
||||
}
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
if (isset($json) && !isEmptyArray($json))
|
||||
if (isset($json) && !isEmptyArray($json['prestudenten']))
|
||||
{
|
||||
return $this->outputJsonSuccess($json);
|
||||
}
|
||||
|
||||
@@ -6,13 +6,13 @@ class requestAnrechnung extends Auth_Controller
|
||||
{
|
||||
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
|
||||
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
|
||||
|
||||
|
||||
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
|
||||
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
|
||||
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
|
||||
const ANRECHNUNGSTATUS_APPROVED = 'approved';
|
||||
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// Set required permissions
|
||||
@@ -23,22 +23,22 @@ class requestAnrechnung extends Auth_Controller
|
||||
'download' => 'student/anrechnung_beantragen:rw',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
|
||||
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
|
||||
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('WidgetLib');
|
||||
$this->load->library('PermissionLib');
|
||||
$this->load->library('AnrechnungLib');
|
||||
$this->load->library('DmsLib');
|
||||
|
||||
|
||||
// Load helpers
|
||||
$this->load->helper('form');
|
||||
$this->load->helper('url');
|
||||
$this->load->helper('hlp_sancho_helper');
|
||||
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
@@ -208,11 +208,11 @@ class requestAnrechnung extends Auth_Controller
|
||||
$this->_checkIfEntitledToReadDMSDoc($dms_id);
|
||||
|
||||
// Get file to be downloaded from DMS
|
||||
$download = $this->dmslib->download($dms_id, $filename);
|
||||
if (isError($download)) return $download;
|
||||
$download = $this->dmslib->download($dms_id);
|
||||
if (isError($download)) return $download;
|
||||
|
||||
// Download file
|
||||
$this->outputFile(getData($download));
|
||||
// Download file
|
||||
$this->outputFile(getData($download));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -221,10 +221,10 @@ class requestAnrechnung extends Auth_Controller
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if application deadline is expired.
|
||||
*
|
||||
@@ -237,7 +237,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
private function _isExpired($start, $ende, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
|
||||
// If start is not given, set to Semesterstart.
|
||||
if (!isset($start) || isEmptyString($start))
|
||||
{
|
||||
@@ -245,7 +245,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||
$start = getData($result)[0]->start;
|
||||
}
|
||||
|
||||
|
||||
// If ende is not given, set to Semesterende.
|
||||
if (!isset($ende) || isEmptyString($ende))
|
||||
{
|
||||
@@ -253,15 +253,15 @@ class requestAnrechnung extends Auth_Controller
|
||||
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||
$ende = getData($result)[0]->ende;
|
||||
}
|
||||
|
||||
|
||||
$today = new DateTime('today midnight');
|
||||
$start = new DateTime($start);
|
||||
$ende = new DateTime($ende);
|
||||
|
||||
|
||||
// True if expired
|
||||
return ($today < $start || $today > $ende);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if user is entitled to read dms doc.
|
||||
*
|
||||
@@ -273,9 +273,9 @@ class requestAnrechnung extends Auth_Controller
|
||||
{
|
||||
show_error('Failed loading Student');
|
||||
}
|
||||
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
|
||||
|
||||
|
||||
if($result = getData($result)[0])
|
||||
{
|
||||
if ($result->prestudent_id == $student->prestudent_id)
|
||||
@@ -283,10 +283,10 @@ class requestAnrechnung extends Auth_Controller
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
show_error('You are not entitled to read this document');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if application already exists.
|
||||
*
|
||||
@@ -302,15 +302,15 @@ class requestAnrechnung extends Auth_Controller
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'prestudent_id' => $prestudent_id
|
||||
));
|
||||
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
show_error(getError($result));
|
||||
}
|
||||
|
||||
|
||||
return hasData($result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if applications' study semester is actual study semester.
|
||||
*
|
||||
@@ -322,10 +322,10 @@ class requestAnrechnung extends Auth_Controller
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$result = $this->StudiensemesterModel->getNearest();
|
||||
$actual_ss = getData($result)[0]->studiensemester_kurzbz;
|
||||
|
||||
|
||||
return $studiensemester_kurzbz == $actual_ss;
|
||||
}
|
||||
|
||||
|
||||
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id)
|
||||
{
|
||||
// Get Note of Lehrveranstaltung
|
||||
@@ -336,12 +336,12 @@ class requestAnrechnung extends Auth_Controller
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
// If Lehrveranstaltung has Note
|
||||
if (hasData($result))
|
||||
{
|
||||
$note = getData($result)[0]->note;
|
||||
|
||||
|
||||
// Check if Note is a blocking grade
|
||||
if (in_array($note, $this->config->item('grades_blocking_application')))
|
||||
{
|
||||
@@ -350,7 +350,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Upload file via DMS library.
|
||||
*
|
||||
@@ -367,7 +367,7 @@ class requestAnrechnung extends Auth_Controller
|
||||
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
|
||||
'insertvon' => $this->_uid
|
||||
);
|
||||
|
||||
|
||||
// Upload document
|
||||
return $this->dmslib->upload($dms, 'uploadfile', array('pdf'));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Page for managing groups of which user is the manager
|
||||
*/
|
||||
class Gruppenmanagement extends Auth_Controller
|
||||
{
|
||||
private $_uid; // contains the UID of the logged user
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'lehre/gruppenmanager:r',
|
||||
'showBenutzergruppe' => 'lehre/gruppenmanager:r',
|
||||
'getBenutzer' => 'lehre/gruppenmanager:r',
|
||||
'getAllBenutzer' => 'lehre/gruppenmanager:r',
|
||||
'addBenutzer' => 'lehre/gruppenmanager:rw',
|
||||
'removeBenutzer' => 'lehre/gruppenmanager:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads models
|
||||
$this->load->model('person/benutzer_model', 'BenutzerModel');
|
||||
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
|
||||
$this->load->model('system/Log_model', 'LogModel');
|
||||
|
||||
$this->load->library('WidgetLib');
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'person',
|
||||
'lehre',
|
||||
'ui',
|
||||
'filter',
|
||||
'gruppenmanagement'
|
||||
)
|
||||
);
|
||||
|
||||
$this->setControllerId(); // sets the controller id
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Main page
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view(
|
||||
'person/gruppenmanagement/gruppenmanagement.php',
|
||||
array('uid' => $this->_uid)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows Benutzergruppe overview page.
|
||||
*/
|
||||
public function showBenutzergruppe()
|
||||
{
|
||||
$this->_setNavigationMenuShowDetails();
|
||||
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
|
||||
|
||||
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
|
||||
|
||||
$this->load->view(
|
||||
'person/gruppenmanagement/benutzergruppe.php',
|
||||
array('gruppe_kurzbz' => $gruppe_kurzbz)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Benutzer assigned to a Gruppe
|
||||
*/
|
||||
public function getBenutzer()
|
||||
{
|
||||
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
|
||||
|
||||
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname, ben.aktiv');
|
||||
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer ben', 'uid');
|
||||
$this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
|
||||
$benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
|
||||
|
||||
$this->outputJson($benutzerRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Benutzer for assignment to Gruppe
|
||||
*/
|
||||
public function getAllBenutzer()
|
||||
{
|
||||
$this->BenutzerModel->addSelect('uid, vorname, nachname');
|
||||
$this->BenutzerModel->addJoin('public.tbl_person', 'person_id');
|
||||
$benutzerRes = $this->BenutzerModel->loadWhere(
|
||||
array('tbl_benutzer.aktiv' => true)
|
||||
);
|
||||
$this->outputJson($benutzerRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a Benutzer to Gruppe
|
||||
*/
|
||||
public function addBenutzer()
|
||||
{
|
||||
$uid = $this->input->post('uid');
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
|
||||
if (isEmptyString($uid))
|
||||
$result = error('Uid missing');
|
||||
else
|
||||
{
|
||||
$benutzerExistsRes = $this->BenutzergruppeModel->loadWhere(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($benutzerExistsRes))
|
||||
{
|
||||
$this->outputJsonError(getError($benutzerExistsRes));
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasData($benutzerExistsRes))
|
||||
{
|
||||
$this->outputJsonError($this->p->t('gruppenmanagement', 'benutzerSchonZugewiesen'));
|
||||
return;
|
||||
}
|
||||
|
||||
$result = $this->BenutzergruppeModel->insert(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'insertamum' => date('Y-m-d H:i:s'),
|
||||
'insertvon' => $this->_uid
|
||||
)
|
||||
);
|
||||
|
||||
// log the group add
|
||||
$lastQry = $this->db->last_query();
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$beschreibung = 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt';
|
||||
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes Benutzer from Gruppe
|
||||
*/
|
||||
public function removeBenutzer()
|
||||
{
|
||||
$uid = $this->input->post('uid');
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
|
||||
if (isEmptyString($uid))
|
||||
$result = error('Uid missing');
|
||||
else
|
||||
{
|
||||
$result = $this->BenutzergruppeModel->delete(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// log the group remove
|
||||
$lastQry = $this->db->last_query();
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$beschreibung = 'Gruppenmanagement: Nutzer aus Gruppe entfernt';
|
||||
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
|
||||
}
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Define the navigation menu for the showDetails page
|
||||
*/
|
||||
private function _setNavigationMenuShowDetails()
|
||||
{
|
||||
$this->load->library('NavigationLib', array('navigation_page' => 'person/Gruppenmanagement/showBenutzergruppe'));
|
||||
|
||||
$link = site_url('person/Gruppenmanagement');
|
||||
|
||||
$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
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set uid of authentificated user
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an entry in the log table
|
||||
*/
|
||||
private function _writeLog($uid, $beschreibung, $lastQry)
|
||||
{
|
||||
$mitarbeiterResult = $this->MitarbeiterModel->load(array('mitarbeiter_uid'=>$this->_uid));
|
||||
|
||||
if(!isSuccess($mitarbeiterResult) || !hasData($mitarbeiterResult))
|
||||
{
|
||||
$uid = DUMMY_LEKTOR_UID;
|
||||
$beschreibung .= ': '.$this->_uid;
|
||||
$beschreibung = mb_substr($beschreibung, 0, 64);
|
||||
}
|
||||
|
||||
$this->LogModel->insert(array(
|
||||
'mitarbeiter_uid' => $uid,
|
||||
'beschreibung' => $beschreibung,
|
||||
'sql' => $lastQry
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -88,6 +88,12 @@ class InfoCenter extends Auth_Controller
|
||||
'message' => 'Type of Document %s was updated, set to %s',
|
||||
'success' => null
|
||||
),
|
||||
'deletedoc' => array(
|
||||
'logtype' => 'Action',
|
||||
'name' => 'Document deleted',
|
||||
'message' => 'Document %s deleted',
|
||||
'success' => null
|
||||
),
|
||||
);
|
||||
|
||||
// Name of Interessentenstatus
|
||||
@@ -131,6 +137,7 @@ class InfoCenter extends Auth_Controller
|
||||
'reloadZgvPruefungen' => 'infocenter:r',
|
||||
'reloadMessages' => 'infocenter:r',
|
||||
'reloadDoks' => 'infocenter:r',
|
||||
'reloadUebersichtDoks' => 'infocenter:r',
|
||||
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'reloadLogs' => 'infocenter:r',
|
||||
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
@@ -142,7 +149,9 @@ class InfoCenter extends Auth_Controller
|
||||
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
|
||||
'setNavigationMenuArrayJson' => 'infocenter:r',
|
||||
'getAbsageData' => 'infocenter:r',
|
||||
'saveAbsageForAll' => 'infocenter:rw'
|
||||
'saveAbsageForAll' => 'infocenter:rw',
|
||||
'deleteDoc' => 'infocenter:rw',
|
||||
'getStudienartData' => 'infocenter:rw'
|
||||
)
|
||||
);
|
||||
|
||||
@@ -159,6 +168,10 @@ class InfoCenter extends Auth_Controller
|
||||
$this->load->model('system/Message_model', 'MessageModel');
|
||||
$this->load->model('system/Filters_model', 'FiltersModel');
|
||||
$this->load->model('system/PersonLock_model', 'PersonLockModel');
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('codex/Zgv_model', 'ZgvModel');
|
||||
$this->load->model('codex/Zgvmaster_model', 'ZgvmasterModel');
|
||||
$this->load->model('codex/Nation_model', 'NationModel');
|
||||
|
||||
// Loads libraries
|
||||
$this->load->library('PersonLogLib');
|
||||
@@ -398,6 +411,35 @@ class InfoCenter extends Auth_Controller
|
||||
$this->outputJsonSuccess(array($json));
|
||||
}
|
||||
|
||||
public function deleteDoc($person_id)
|
||||
{
|
||||
$akte_id = $this->input->post('akteid');
|
||||
|
||||
if (isset($akte_id) && isset($person_id))
|
||||
{
|
||||
$this->load->library('AkteLib');
|
||||
$akte = $this->aktelib->get($akte_id);
|
||||
|
||||
if (hasData($akte))
|
||||
{
|
||||
$akte = getData($akte);
|
||||
if ($akte->person_id === (int)$person_id)
|
||||
{
|
||||
$result = $this->aktelib->remove($akte_id);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithJsonError('Error deleting document');
|
||||
}
|
||||
|
||||
$this->_log($person_id, 'deletedoc', array($akte->bezeichnung));
|
||||
|
||||
$this->outputJsonSuccess('success');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets prestudent data for a person in json format
|
||||
* @param $person_id
|
||||
@@ -1074,6 +1116,17 @@ class InfoCenter extends Auth_Controller
|
||||
$this->load->view('system/infocenter/dokNachzureichend.php', array('dokumente_nachgereicht' => $dokumente_nachgereicht->retval));
|
||||
}
|
||||
|
||||
public function reloadUebersichtDoks($person_id)
|
||||
{
|
||||
$dokumente = $this->AkteModel->getAktenWithDokInfo($person_id, null, false);
|
||||
|
||||
$this->DokumentModel->addOrder('bezeichnung');
|
||||
$dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load())));
|
||||
$data = array_merge($dokumentdata, ['dokumente' => $dokumente->retval]);
|
||||
|
||||
$this->load->view('system/infocenter/dokpruefung.php', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs content of an Akte, sends appropriate headers (so the document can be downloaded)
|
||||
* @param $akte_id
|
||||
@@ -1932,10 +1985,13 @@ class InfoCenter extends Auth_Controller
|
||||
$abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
|
||||
$intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval;
|
||||
|
||||
$studienArtBerechtigung = array_column($this->getStudienArtBerechtigung(), 'typ');
|
||||
|
||||
$data = array (
|
||||
'zgvpruefungen' => $zgvpruefungen,
|
||||
'abwstatusgruende' => $abwstatusgruende,
|
||||
'intstatusgruende' => $intstatusgruende
|
||||
'intstatusgruende' => $intstatusgruende,
|
||||
'studienArtBerechtigung' => $studienArtBerechtigung
|
||||
);
|
||||
|
||||
return $data;
|
||||
@@ -2194,18 +2250,36 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
public function getAbsageData()
|
||||
{
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
|
||||
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm']);
|
||||
|
||||
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm'], $studienSemester);
|
||||
if (hasData($stg_typ))
|
||||
{
|
||||
$stg_typ = getData($stg_typ);
|
||||
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester);
|
||||
|
||||
$data = array (
|
||||
'statusgruende' => $statusgruende,
|
||||
'studiengaenge' => $studiengaenge->retval
|
||||
);
|
||||
$data = array (
|
||||
'statusgruende' => $statusgruende,
|
||||
'studiengaenge' => $studiengaenge->retval
|
||||
);
|
||||
|
||||
$this->outputJsonSuccess($data);
|
||||
$this->outputJsonSuccess($data);
|
||||
}
|
||||
else
|
||||
$this->outputJsonSuccess(null);
|
||||
}
|
||||
|
||||
public function getStudienArtBerechtigung()
|
||||
{
|
||||
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
|
||||
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm', 'l']);
|
||||
return getData($stg_typ);
|
||||
}
|
||||
public function getStudienartData()
|
||||
{
|
||||
$this->outputJsonSuccess($this->getStudienArtBerechtigung());
|
||||
}
|
||||
|
||||
public function saveAbsageForAll()
|
||||
|
||||
@@ -22,11 +22,16 @@ class DB_Model extends CI_Model
|
||||
const PGSQL_BOOLEAN_FALSE = 'f';
|
||||
const PGSQL_BOOLEAN_TYPE = 'bool';
|
||||
const PGSQL_BOOLEAN_ARRAY_TYPE = '_bool';
|
||||
const PGSQL_INT2_TYPE = 'int2';
|
||||
const PGSQL_INT4_TYPE = 'int4';
|
||||
const PGSQL_INT8_TYPE = 'int8';
|
||||
const PGSQL_FLOAT4_TYPE = 'float4';
|
||||
const PGSQL_FLOAT8_TYPE = 'float8';
|
||||
|
||||
protected $dbTable; // Name of the DB-Table for CI-Insert, -Update, ...
|
||||
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
|
||||
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
|
||||
protected $hasSequence; // False if this table has a composite primary key that is not using a sequence
|
||||
// True if this table has a primary key that uses a sequence
|
||||
// True if this table has a primary key that uses a sequence
|
||||
|
||||
private $executedQueryMetaData;
|
||||
private $executedQueryListFields;
|
||||
@@ -271,11 +276,6 @@ class DB_Model extends CI_Model
|
||||
/**
|
||||
* Load data and convert a record into a list of data from the main table,
|
||||
* and linked to every element, the data from the side tables
|
||||
*
|
||||
* TODO:
|
||||
* - Adding support for composed primary key
|
||||
* - Adding support for cascading side tables (useful?)
|
||||
*
|
||||
* NOTE: sub queries are not supported in the from clause
|
||||
*
|
||||
* @return array
|
||||
@@ -598,6 +598,28 @@ class DB_Model extends CI_Model
|
||||
return $val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert PG-Int* to PHP-Integer
|
||||
*/
|
||||
public function pgIntPhp($val)
|
||||
{
|
||||
// If it is null, let it be null
|
||||
if ($val == null) return $val;
|
||||
|
||||
return intval($val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert PG-Float* to PHP-Float
|
||||
*/
|
||||
public function pgFloatPhp($val)
|
||||
{
|
||||
// If it is null, let it be null
|
||||
if ($val == null) return $val;
|
||||
|
||||
return floatval($val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts from PostgreSQL array to php array
|
||||
* It also takes care about array of booleans
|
||||
@@ -892,6 +914,11 @@ class DB_Model extends CI_Model
|
||||
// If array type, boolean type OR a UDF
|
||||
if (strpos($eqmd->type, DB_Model::PGSQL_ARRAY_TYPE) !== false
|
||||
|| $eqmd->type == DB_Model::PGSQL_BOOLEAN_TYPE
|
||||
|| $eqmd->type == DB_Model::PGSQL_INT2_TYPE
|
||||
|| $eqmd->type == DB_Model::PGSQL_INT4_TYPE
|
||||
|| $eqmd->type == DB_Model::PGSQL_INT8_TYPE
|
||||
|| $eqmd->type == DB_Model::PGSQL_FLOAT4_TYPE
|
||||
|| $eqmd->type == DB_Model::PGSQL_FLOAT8_TYPE
|
||||
|| $this->udflib->isUDFColumn($eqmd->name, $eqmd->type))
|
||||
{
|
||||
// If UDFs are inside this result set
|
||||
@@ -941,6 +968,19 @@ class DB_Model extends CI_Model
|
||||
{
|
||||
$resultElement->{$toBeConverted->name} = $this->pgBoolPhp($resultElement->{$toBeConverted->name});
|
||||
}
|
||||
// Integer type
|
||||
elseif ($toBeConverted->type == DB_Model::PGSQL_INT2_TYPE
|
||||
|| $toBeConverted->type == DB_Model::PGSQL_INT4_TYPE
|
||||
|| $toBeConverted->type == DB_Model::PGSQL_INT8_TYPE)
|
||||
{
|
||||
$resultElement->{$toBeConverted->name} = $this->pgIntPhp($resultElement->{$toBeConverted->name});
|
||||
}
|
||||
// Float type
|
||||
elseif ($toBeConverted->type == DB_Model::PGSQL_FLOAT4_TYPE
|
||||
|| $toBeConverted->type == DB_Model::PGSQL_FLOAT8_TYPE)
|
||||
{
|
||||
$resultElement->{$toBeConverted->name} = $this->pgFloatPhp($resultElement->{$toBeConverted->name});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,14 +80,24 @@ class AnrechnungLib
|
||||
// Get latest ZGV
|
||||
$result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id);
|
||||
$latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : '';
|
||||
|
||||
|
||||
// Get Sum of berufliche and schulische ECTS
|
||||
$result = $this->ci->LehrveranstaltungModel->getEctsSumSchulisch($uid, $prestudent_id, $lv->studiengang_kz);
|
||||
$sumEctsSchulisch = getData($result)[0]->ectssumschulisch;
|
||||
|
||||
$result = $this->ci->LehrveranstaltungModel->getEctsSumBeruflich($uid);
|
||||
$sumEctsBeruflich = getData($result)[0]->ectssumberuflich;
|
||||
|
||||
// Set the given studiensemester
|
||||
$antrag_data->lv_id = $lv_id;
|
||||
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
|
||||
$antrag_data->ects = $lv->ects;
|
||||
$antrag_data->sumEctsSchulisch = $sumEctsSchulisch;
|
||||
$antrag_data->sumEctsBeruflich = $sumEctsBeruflich;
|
||||
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
|
||||
$antrag_data->vorname = $person->vorname;
|
||||
$antrag_data->nachname = $person->nachname;
|
||||
$antrag_data->student_uid = $uid;
|
||||
$antrag_data->matrikelnr = $student->matrikelnr;
|
||||
$antrag_data->studiengang_kz = $studiengang->studiengang_kz;
|
||||
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
|
||||
@@ -112,6 +122,7 @@ class AnrechnungLib
|
||||
|
||||
$anrechnung_data = new StdClass();
|
||||
|
||||
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
|
||||
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
|
||||
|
||||
if (isError($result))
|
||||
@@ -145,6 +156,7 @@ class AnrechnungLib
|
||||
$anrechnung_data->prestudent_id = '';
|
||||
$anrechnung_data->lehrveranstaltung = '';
|
||||
$anrechnung_data->begruendung_id = '';
|
||||
$anrechnung_data->begruendung = '';
|
||||
$anrechnung_data->anmerkung = '';
|
||||
$anrechnung_data->dms_id = '';
|
||||
$anrechnung_data->insertamum = '';
|
||||
@@ -155,6 +167,7 @@ class AnrechnungLib
|
||||
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
|
||||
$anrechnung_data->dokumentname = '';
|
||||
|
||||
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
|
||||
$result = $this->ci->AnrechnungModel->loadWhere(
|
||||
array(
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
@@ -800,6 +813,7 @@ class AnrechnungLib
|
||||
$anrechnung_data->prestudent_id = $anrechnung->prestudent_id;
|
||||
$anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id;
|
||||
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
|
||||
$anrechnung_data->begruendung = $anrechnung->bezeichnung;
|
||||
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
|
||||
$anrechnung_data->dms_id = $anrechnung->dms_id;
|
||||
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
|
||||
@@ -823,4 +837,110 @@ class AnrechnungLib
|
||||
|
||||
return $anrechnung_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* If Student is a Quereinsteiger, get ECTS Summe of all angerechnete Studiensemester.
|
||||
*
|
||||
* @param $prestudent_id
|
||||
* @param $studiengang_kz Studiengang_kz der LV
|
||||
* @return int|mixed
|
||||
*/
|
||||
public function getQuereinsteigerEctsSumme($prestudent_id, $studiengang_kz)
|
||||
{
|
||||
$sumEctsQuereinsteiger = 0;
|
||||
|
||||
// Check, if student is Quereinsteiger
|
||||
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
$result = $this->ci->PrestudentstatusModel->getFirstStatus($prestudent_id, 'Student');
|
||||
|
||||
$prestudentFirstStudentStatus = getData($result)[0];
|
||||
|
||||
// If Prestudent is not a Quereinsteiger
|
||||
if ($prestudentFirstStudentStatus->ausbildungssemester == 1)
|
||||
{
|
||||
return $sumEctsQuereinsteiger; // return 0
|
||||
}
|
||||
|
||||
$anzahlAngerechneteStudiensemester = $prestudentFirstStudentStatus->ausbildungssemester - 1;
|
||||
|
||||
// If Prestudent is a Quereinsteiger
|
||||
if ($prestudentFirstStudentStatus->ausbildungssemester > 1)
|
||||
{
|
||||
// Get the 'angerechnete Studiensemester'
|
||||
$this->ci->load->model('organisations/Studiensemester_model', 'StudiensemesterModel');
|
||||
$result = $this->ci->StudiensemesterModel->getPreviousFrom(
|
||||
$prestudentFirstStudentStatus->studiensemester_kurzbz,
|
||||
$anzahlAngerechneteStudiensemester
|
||||
);
|
||||
|
||||
// Get ECTS Summe of each 'angerechnetes Studiensemester'
|
||||
foreach (getData($result) as $studiensemester)
|
||||
{
|
||||
$result = $this->ci->LehrveranstaltungModel->getSumQuereinstiegsECTSProSemester(
|
||||
$studiengang_kz,
|
||||
$studiensemester->studiensemester_kurzbz,
|
||||
$anzahlAngerechneteStudiensemester--,
|
||||
$prestudentFirstStudentStatus->orgform_kurzbz
|
||||
);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$sumEctsQuereinsteiger = $sumEctsQuereinsteiger + getData($result)[0]->sum_ects;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $sumEctsQuereinsteiger; // return sum of ects of all 'angerechnete Studiensemester'
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe of all Anrechnungen based on schulische Kenntnisse.
|
||||
*
|
||||
* @param $student_uid
|
||||
* @return int|mixed
|
||||
*/
|
||||
public function getSchulischeAnrechnungenEctsSumme($student_uid)
|
||||
{
|
||||
$sumEctsSchule = 0;
|
||||
|
||||
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $ects)
|
||||
{
|
||||
if ($ects->begruendung_id != 4)
|
||||
{
|
||||
$sumEctsSchule = $sumEctsSchule + $ects->sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $sumEctsSchule;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe of all Anrechnungen based on berufliche Kenntnisse.
|
||||
*
|
||||
* @param $student_uid
|
||||
* @return int
|
||||
*/
|
||||
public function getBeruflicheAnrechnungenEctsSumme($student_uid)
|
||||
{
|
||||
$sumEctsBeruflich = 0;
|
||||
|
||||
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $ects)
|
||||
{
|
||||
if ($ects->begruendung_id == 4)
|
||||
{
|
||||
$sumEctsBeruflich = $ects->sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $sumEctsBeruflich;
|
||||
}
|
||||
}
|
||||
|
||||
+118
-169
@@ -50,62 +50,57 @@ class DmsLib
|
||||
$kategorie_kurzbz = null, $dokument_kurzbz = null, $beschreibung = null, $cis_suche = false, $schlagworte = null
|
||||
)
|
||||
{
|
||||
// write file with content of fileHandle
|
||||
$writeFileResult = $this->_writeNewFile($name, $fileHandle);
|
||||
// create unique filename, using original document name to detect file extension
|
||||
$filename = $this->_getUniqueFilename($name);
|
||||
|
||||
if (isError($writeFileResult)) return $writeFileResult;
|
||||
// copy file from fileHandle to dms folder
|
||||
$copyFileResult = $this->_copyFile($fileHandle, $filename);
|
||||
|
||||
if (hasData($writeFileResult))
|
||||
if (isError($copyFileResult)) return $copyFileResult;
|
||||
|
||||
// if file written successful, insert dms
|
||||
$dmsResult = $this->_ci->DmsModel->insert(
|
||||
array(
|
||||
'kategorie_kurzbz' => $kategorie_kurzbz,
|
||||
'dokument_kurzbz' => $dokument_kurzbz
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($dmsResult)) return $dmsResult;
|
||||
|
||||
if (hasData($dmsResult))
|
||||
{
|
||||
$writeFileData = getData($writeFileResult);
|
||||
$filename = $writeFileData->filename;
|
||||
$dms_id = getData($dmsResult);
|
||||
$version = 0;
|
||||
|
||||
// if file written successful, insert dms
|
||||
$dmsResult = $this->_ci->DmsModel->insert(
|
||||
array(
|
||||
'kategorie_kurzbz' => $kategorie_kurzbz,
|
||||
'dokument_kurzbz' => $dokument_kurzbz
|
||||
)
|
||||
// insert dms version
|
||||
$dmsVersion = array(
|
||||
'dms_id' => $dms_id,
|
||||
'version' => $version,
|
||||
'filename' => $filename,
|
||||
'mimetype' => $mimetype,
|
||||
'name' => $name,
|
||||
'beschreibung' => $beschreibung,
|
||||
'cis_suche' => $cis_suche,
|
||||
'schlagworte' => $schlagworte,
|
||||
'insertvon' => $this->_who,
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
if (isError($dmsResult)) return $dmsResult;
|
||||
$dmsVersionResult = $this->_ci->DmsVersionModel->insert($dmsVersion);
|
||||
|
||||
if (hasData($dmsResult))
|
||||
{
|
||||
$dms_id = getData($dmsResult);
|
||||
$version = 0;
|
||||
if (isError($dmsVersionResult)) return $dmsVersionResult;
|
||||
|
||||
// insert dms version
|
||||
$dmsVersion = array(
|
||||
'dms_id' => $dms_id,
|
||||
'version' => $version,
|
||||
'filename' => $filename,
|
||||
'mimetype' => $mimetype,
|
||||
'name' => $name,
|
||||
'beschreibung' => $beschreibung,
|
||||
'cis_suche' => $cis_suche,
|
||||
'schlagworte' => $schlagworte,
|
||||
'insertvon' => $this->_who,
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
);
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->dms_id = $dms_id;
|
||||
$resObj->version = $version;
|
||||
$resObj->filename = $filename;
|
||||
|
||||
$dmsVersionResult = $this->_ci->DmsVersionModel->insert($dmsVersion);
|
||||
|
||||
if (isError($dmsVersionResult)) return $dmsVersionResult;
|
||||
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->dms_id = $dms_id;
|
||||
$resObj->version = $version;
|
||||
$resObj->filename = $filename;
|
||||
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("error when inserting DMS");
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("file could not be written");
|
||||
return error("error when inserting DMS");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -125,46 +120,41 @@ class DmsLib
|
||||
|
||||
$originalName = isset($name) ? $name : $lastVersion->name;
|
||||
|
||||
// write new file with content of fileHandle
|
||||
$writeFileResult = $this->_writeNewFile($originalName, $fileHandle);
|
||||
// create unique filename, using original document name to detect file extension
|
||||
$filename = $this->_getUniqueFilename($originalName);
|
||||
|
||||
if (isError($writeFileResult)) return $writeFileResult;
|
||||
// copy file from fileHandle to dms folder
|
||||
$copyFileResult = $this->_copyFile($fileHandle, $filename);
|
||||
|
||||
if (hasData($writeFileResult))
|
||||
{
|
||||
$writeFileData = getData($writeFileResult);
|
||||
$filename = $writeFileData->filename;
|
||||
if (isError($copyFileResult)) return $copyFileResult;
|
||||
|
||||
// insert new version
|
||||
$newVersionNumber = $lastVersion->version + 1;
|
||||
// insert new version
|
||||
$newVersionNumber = $lastVersion->version + 1;
|
||||
|
||||
// if new parameters given, use them, otherwise use parameters from last version
|
||||
$newVersion = array(
|
||||
'dms_id' => $dms_id,
|
||||
'name' => $originalName,
|
||||
'filename' => $filename,
|
||||
'version' => $newVersionNumber,
|
||||
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
|
||||
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
|
||||
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
|
||||
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
|
||||
'insertvon' => $this->_who,
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
);
|
||||
// if new parameters given, use them, otherwise use parameters from last version
|
||||
$newVersion = array(
|
||||
'dms_id' => $dms_id,
|
||||
'name' => $originalName,
|
||||
'filename' => $filename,
|
||||
'version' => $newVersionNumber,
|
||||
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
|
||||
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
|
||||
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
|
||||
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
|
||||
'insertvon' => $this->_who,
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
$addVersionResult = $this->_ci->DmsVersionModel->insert($newVersion);
|
||||
$addVersionResult = $this->_ci->DmsVersionModel->insert($newVersion);
|
||||
|
||||
if (isError($addVersionResult)) return $addVersionResult;
|
||||
if (isError($addVersionResult)) return $addVersionResult;
|
||||
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->version = $newVersionNumber;
|
||||
$resObj->filename = $filename;
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->version = $newVersionNumber;
|
||||
$resObj->filename = $filename;
|
||||
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("file could not be written");
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("last version not found");
|
||||
@@ -185,44 +175,37 @@ class DmsLib
|
||||
if (hasData($lastVersionResult))
|
||||
{
|
||||
$lastVersion = getData($lastVersionResult);
|
||||
$filename = $lastVersion->filename;
|
||||
|
||||
// update file in filesystem
|
||||
$writeFileResult = $this->_writeFile($lastVersion->filename, $fileHandle);
|
||||
$copyFileResult = $this->_copyFile($fileHandle, $filename);
|
||||
|
||||
if (isError($writeFileResult)) return $writeFileResult;
|
||||
if (isError($copyFileResult)) return $copyFileResult;
|
||||
|
||||
if (hasData($writeFileResult))
|
||||
{
|
||||
$writeFileData = getData($writeFileResult);
|
||||
$filename = $writeFileData->filename;
|
||||
// if new parameters given, use them, otherwise use parameters from last version
|
||||
$newVersion = array(
|
||||
'name' => isset($name) ? $name : $lastVersion->name,
|
||||
'filename' => $filename,
|
||||
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
|
||||
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
|
||||
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
|
||||
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
|
||||
);
|
||||
|
||||
// if new parameters given, use them, otherwise use parameters from last version
|
||||
$newVersion = array(
|
||||
'name' => isset($name) ? $name : $lastVersion->name,
|
||||
'filename' => $filename,
|
||||
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
|
||||
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
|
||||
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
|
||||
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
|
||||
);
|
||||
// update last dms version
|
||||
$addVersionResult = $this->_ci->DmsVersionModel->update(
|
||||
array($dms_id, $lastVersion->version),
|
||||
$newVersion
|
||||
);
|
||||
|
||||
// update last dms version
|
||||
$addVersionResult = $this->_ci->DmsVersionModel->update(
|
||||
array($dms_id, $lastVersion->version),
|
||||
$newVersion
|
||||
);
|
||||
if (isError($addVersionResult)) return $addVersionResult;
|
||||
|
||||
if (isError($addVersionResult)) return $addVersionResult;
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->version = $lastVersion->version;
|
||||
$resObj->filename = $filename;
|
||||
|
||||
// return dms info
|
||||
$resObj = new stdClass();
|
||||
$resObj->version = $lastVersion->version;
|
||||
$resObj->filename = $filename;
|
||||
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("file could not be written");
|
||||
return success($resObj);
|
||||
}
|
||||
else
|
||||
return error("last version not found");
|
||||
@@ -441,68 +424,35 @@ class DmsLib
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Writes file with content of fileHandle using original document name for file extension
|
||||
* Copies file from sourceFileHandle to destinationFilename in DMS folder
|
||||
* Returns success or error on fail
|
||||
*/
|
||||
private function _writeNewFile($originalName, $fileHandle)
|
||||
private function _copyFile($sourceFileHandle, $destinationFilename)
|
||||
{
|
||||
// create unique filename, using original document name to detect file extension
|
||||
$filename = $this->_getUniqueFilename($originalName);
|
||||
// get file location from file handle
|
||||
$metaData = stream_get_meta_data($sourceFileHandle);
|
||||
|
||||
// write the file
|
||||
return $this->_writeFile($filename, $fileHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes file with content of fileHandle
|
||||
* Returns number of bytes written and filename
|
||||
*/
|
||||
private function _writeFile($filename, $fileHandle)
|
||||
{
|
||||
// file content provided by fileHandle
|
||||
$fileContent = '';
|
||||
|
||||
$readBlockResult = success();
|
||||
|
||||
// While the end of the file is not reached and the read does not fail
|
||||
while (!feof($fileHandle) && isSuccess($readBlockResult = $this->_ci->DmsFSModel->readBlock($fileHandle)))
|
||||
if (isset($metaData['uri']) && !isEmptyString($metaData['uri']))
|
||||
{
|
||||
// Concatenate the content of the file
|
||||
$fileContent .= getData($readBlockResult);
|
||||
// if file location determined, copy file
|
||||
$source = $metaData['uri'];
|
||||
|
||||
if (copy($source, DMS_PATH.$destinationFilename))
|
||||
{
|
||||
return success();
|
||||
}
|
||||
else
|
||||
{
|
||||
// error if copy returned false
|
||||
return error('error occured while copying file');
|
||||
}
|
||||
}
|
||||
|
||||
// If an error occurred while reading then return it
|
||||
if (isError($readBlockResult)) return $readBlockResult;
|
||||
|
||||
// open file for writing
|
||||
$openFileResult = $this->_ci->DmsFSModel->openReadWrite($filename);
|
||||
|
||||
if (isError($openFileResult)) return $openFileResult;
|
||||
|
||||
if (!hasData($openFileResult)) return error("File could not be opened");
|
||||
|
||||
$newFileHandle = getData($openFileResult);
|
||||
|
||||
// write file
|
||||
$writeFileResult = $this->_ci->DmsFSModel->write($newFileHandle, $fileContent);
|
||||
|
||||
if (isError($writeFileResult)) return $writeFileResult;
|
||||
|
||||
// return number of bytes written and filename
|
||||
$resObj = new stdClass();
|
||||
$resObj->bytesWritten = 0;
|
||||
$resObj->filename = '';
|
||||
|
||||
if (hasData($writeFileResult))
|
||||
else
|
||||
{
|
||||
$resObj->bytesWritten = getData($writeFileResult);
|
||||
$resObj->filename = $filename;
|
||||
// error when source location could not be determined
|
||||
return error('error occured while getting source file name');
|
||||
}
|
||||
|
||||
// close handle
|
||||
$closeResult = $this->_ci->DmsFSModel->close($newFileHandle, $fileContent);
|
||||
|
||||
if (isError($closeResult)) return $closeResult;
|
||||
|
||||
return success($resObj);
|
||||
}
|
||||
|
||||
@@ -527,7 +477,7 @@ class DmsLib
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------
|
||||
// Deprecated methods, not to be used
|
||||
|
||||
|
||||
/**
|
||||
* Load a DMS Document.
|
||||
* If no version is particularly given, the latest version is loaded.
|
||||
@@ -543,7 +493,7 @@ class DmsLib
|
||||
$this->_ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
||||
$this->_ci->DmsModel->addOrder('version', 'DESC');
|
||||
$this->_ci->DmsModel->addLimit(1);
|
||||
|
||||
|
||||
if (!is_numeric($version))
|
||||
{
|
||||
return $this->_ci->DmsModel->load($dms_id);
|
||||
@@ -620,7 +570,7 @@ class DmsLib
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Uploads a document and saves it to DMS
|
||||
* @param $dms DMS assoc array
|
||||
@@ -659,7 +609,7 @@ class DmsLib
|
||||
// Return result of uploaded data
|
||||
return success($upload_data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Download a document.
|
||||
*
|
||||
@@ -678,7 +628,7 @@ class DmsLib
|
||||
if (hasData($fileInfoResult))
|
||||
{
|
||||
$fileObj = getData($fileInfoResult);
|
||||
|
||||
|
||||
// Change filename, if filename is provided
|
||||
if (!isEmptyString($filename)) $fileObj->name = $filename;
|
||||
|
||||
@@ -694,7 +644,7 @@ class DmsLib
|
||||
// If no data have been found then return an empty success
|
||||
return success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get file information.
|
||||
*
|
||||
@@ -706,7 +656,7 @@ class DmsLib
|
||||
{
|
||||
// Checks the dms_id parameter
|
||||
if (!is_numeric($dms_id)) return error('Wrong parameter');
|
||||
|
||||
|
||||
// Load DMS from database
|
||||
$result = $this->load($dms_id, $version);
|
||||
if (isError($result)) return error(getError($result));
|
||||
@@ -951,4 +901,3 @@ class DmsLib
|
||||
$this->_ci->upload->initialize($config);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class Nation_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -11,4 +11,14 @@ class Nation_model extends DB_Model
|
||||
$this->dbTable = 'bis.tbl_nation';
|
||||
$this->pk = 'nation_code';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getAllForStyled Dropdown
|
||||
*/
|
||||
public function getAll()
|
||||
{
|
||||
$allNations = 'SELECT * FROM bis.tbl_nation ORDER BY bis.tbl_nation.langtext ASC;';
|
||||
|
||||
return $this->execQuery($allNations);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,16 @@ class Zgv_model extends DB_Model
|
||||
$this->dbTable = 'bis.tbl_zgv';
|
||||
$this->pk = 'zgv_code';
|
||||
}
|
||||
|
||||
/**
|
||||
* getAllForStyled Dropdown
|
||||
*/
|
||||
public function getAllZgv()
|
||||
{
|
||||
$allZgv = 'SELECT * FROM bis.tbl_zgv ORDER BY zgv_bez ASC;';
|
||||
|
||||
return $this->execQuery($allZgv);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,14 @@ class Zgvmaster_model extends DB_Model
|
||||
$this->dbTable = 'bis.tbl_zgvmaster';
|
||||
$this->pk = 'zgvmas_code';
|
||||
}
|
||||
|
||||
/**
|
||||
* getAllForStyled Dropdown
|
||||
*/
|
||||
public function getAllZgvmaster()
|
||||
{
|
||||
$allZgvMaster = 'SELECT * FROM bis.tbl_zgvmaster ORDER BY zgvmas_bez ASC;';
|
||||
|
||||
return $this->execQuery($allZgvMaster);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ class Dokumentprestudent_model extends DB_Model
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_dokumentprestudent';
|
||||
$this->pk = array('prestudent_id', 'dokument_kurzbz');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -74,10 +74,11 @@ class Konto_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
public function getLastStudienbeitrag($uid, $buchungstypen)
|
||||
public function getStudienbeitraege($uid, $buchungstypen)
|
||||
{
|
||||
$query = 'SELECT konto.studiensemester_kurzbz
|
||||
FROM public.tbl_konto konto,
|
||||
FROM public.tbl_konto konto
|
||||
JOIN public.tbl_studiensemester studiensemester ON konto.studiensemester_kurzbz = studiensemester.studiensemester_kurzbz,
|
||||
public.tbl_benutzer,
|
||||
public.tbl_student
|
||||
WHERE tbl_benutzer.uid = \'' . $uid . '\'
|
||||
@@ -91,7 +92,7 @@ class Konto_model extends DB_Model
|
||||
WHERE skonto.buchungsnr = konto.buchungsnr_verweis
|
||||
OR skonto.buchungsnr_verweis = konto.buchungsnr_verweis
|
||||
)
|
||||
ORDER BY buchungsnr DESC LIMIT 1;
|
||||
ORDER BY studiensemester.start DESC;
|
||||
';
|
||||
|
||||
return $this->execQuery($query);
|
||||
|
||||
@@ -52,6 +52,24 @@ class Prestudentstatus_model extends DB_Model
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung.
|
||||
*
|
||||
* @param $prestudent_id
|
||||
* @param $status_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getFirstStatus($prestudent_id, $status_kurzbz)
|
||||
{
|
||||
$this->addOrder('datum, insertamum, ext_id');
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere(array(
|
||||
'prestudent_id' => $prestudent_id,
|
||||
'status_kurzbz' => $status_kurzbz
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* updateStufe
|
||||
*/
|
||||
|
||||
@@ -66,4 +66,20 @@ class Student_model extends DB_Model
|
||||
|
||||
return $result->retval[0]->student_uid;
|
||||
}
|
||||
|
||||
public function searchStudent($filter)
|
||||
{
|
||||
$this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid');
|
||||
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
|
||||
$this->addJoin('public.tbl_person person', 'person_id');
|
||||
|
||||
$result = $this->loadWhere(
|
||||
"lower(student_uid) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.nachname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.vorname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.nachname || ' ' || person.vorname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%'));
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
/**
|
||||
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
|
||||
* Diese funktion ist für autocomplete gedacht
|
||||
*
|
||||
*
|
||||
* @param string $filter Suchfilter
|
||||
* @return \stdClass A return object
|
||||
*/
|
||||
@@ -337,7 +337,7 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
/**
|
||||
* Lädt Template und gibt Id und Label ("bezeichnung [kurzbz]") zurück
|
||||
* Diese funktion ist für autocomplete gedacht
|
||||
*
|
||||
*
|
||||
* @param string $name
|
||||
* @return \stdClass A return object
|
||||
*/
|
||||
@@ -355,4 +355,120 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
|
||||
*
|
||||
* @param $studiengang_kz
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $ausbildungssemester
|
||||
* @param $orgform_kurzbz
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getSumQuereinstiegsECTSProSemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz)
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
sum(tbl_lehrveranstaltung.ects) as "sum_ects"
|
||||
FROM
|
||||
lehre.tbl_studienplan
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_studienplan.studienplan_id = (
|
||||
SELECT
|
||||
studienplan_id
|
||||
FROM
|
||||
lehre.tbl_studienordnung
|
||||
JOIN lehre.tbl_studienplan USING (studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
|
||||
WHERE tbl_studienordnung.studiengang_kz = ?
|
||||
AND tbl_studienplan_semester.semester = ?
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
|
||||
AND tbl_studienplan.orgform_kurzbz = ?
|
||||
|
||||
LIMIT 1
|
||||
)
|
||||
AND tbl_studienplan_lehrveranstaltung.semester = ?
|
||||
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
|
||||
AND tbl_studienplan_lehrveranstaltung.export = TRUE
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array(
|
||||
$studiengang_kz, $ausbildungssemester, $studiensemester_kurzbz, $orgform_kurzbz, $ausbildungssemester)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe aller bisher angerechneten LVs.
|
||||
* Wenn keine explizite Begruendung angegeben ist, wird eine schulische Begruendung angenommen.
|
||||
*
|
||||
* @param $student_uid
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getSumAngerechneteECTSByBegruendung($student_uid)
|
||||
{
|
||||
$qry = '
|
||||
SELECT sum(ects), begruendung_id FROM (
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects, COALESCE(begruendung_id, 1) as begruendung_id -- fallback auf externes Zeugnis
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(student_uid)
|
||||
WHERE
|
||||
tbl_zeugnisnote.note = 6
|
||||
AND student_uid = ?
|
||||
AND (lehre.tbl_anrechnung.prestudent_id = tbl_student.prestudent_id
|
||||
OR lehre.tbl_anrechnung.prestudent_id is null)
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects, begruendung_id -- fallback auf externes Zeugnis
|
||||
FROM
|
||||
lehre.tbl_anrechnung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
WHERE
|
||||
genehmigt_von is not null
|
||||
AND student_uid = ?
|
||||
) lvsangerechnet
|
||||
GROUP BY begruendung_id
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($student_uid, $student_uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe aller bisher schulisch begruendeten angerechneten LVs.
|
||||
* Derzeit wird auch jede Anrechnung, die nicht beruflich ist, als schulisch angenommen.
|
||||
*
|
||||
* @param $student_uid
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getEctsSumSchulisch($student_uid, $prestudent_id, $studiengang_kz)
|
||||
{
|
||||
$qry = '
|
||||
SELECT get_ects_summe_schulisch(?, ?, ?) AS ectsSumSchulisch
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($student_uid, $prestudent_id, $studiengang_kz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe aller bisher beruflich angerechneten LVs.
|
||||
*
|
||||
* @param $student_uid
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getEctsSumBeruflich($student_uid)
|
||||
{
|
||||
$qry = '
|
||||
SELECT get_ects_summe_beruflich(?) AS ectsSumBeruflich
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($student_uid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,4 +507,14 @@ class Studiengang_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($typ, $semester));
|
||||
}
|
||||
|
||||
public function getStudiengangTyp($studiengang_kz, $typ)
|
||||
{
|
||||
$query = "SELECT DISTINCT(sgt.*)
|
||||
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
|
||||
WHERE studiengang_kz IN ? and sgt.typ IN ?";
|
||||
|
||||
return $this->execQuery($query, array($studiengang_kz, $typ));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ class Studiensemester_model extends DB_Model
|
||||
/**
|
||||
* getPreviousFrom
|
||||
*/
|
||||
public function getPreviousFrom($studiensemester_kurzbz)
|
||||
public function getPreviousFrom($studiensemester_kurzbz, $limit = 1)
|
||||
{
|
||||
$query = 'SELECT studiensemester_kurzbz,
|
||||
start,
|
||||
@@ -117,9 +117,9 @@ class Studiensemester_model extends DB_Model
|
||||
WHERE studiensemester_kurzbz = ?
|
||||
)
|
||||
ORDER BY start DESC
|
||||
LIMIT 1';
|
||||
LIMIT ?';
|
||||
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -72,4 +72,28 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
public function getBetriebsmittelByUid($uid, $betriebsmitteltyp = null, $isRetourniert = false)
|
||||
{
|
||||
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
|
||||
|
||||
$condition = ' wawi.tbl_betriebsmittelperson.uid = '. $this->escape($uid);
|
||||
|
||||
if (is_string($betriebsmitteltyp))
|
||||
{
|
||||
$condition .= ' AND betriebsmitteltyp = ' . $this->escape($betriebsmitteltyp);
|
||||
}
|
||||
|
||||
if ($isRetourniert === true) {
|
||||
$condition .= ' AND retouram IS NOT NULL';
|
||||
}
|
||||
elseif ($isRetourniert === false)
|
||||
{
|
||||
$condition .= ' AND retouram IS NULL';
|
||||
}
|
||||
|
||||
$this->addOrder('ausgegebenam', 'DESC');
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,8 @@ $this->load->view(
|
||||
'empfehlungsanforderungWirklichZuruecknehmen',
|
||||
'erfolgreichZurueckgenommen',
|
||||
'empfehlungPositivConfirmed',
|
||||
'empfehlungNegativConfirmed'
|
||||
'empfehlungNegativConfirmed',
|
||||
'anrechnungEctsTooltipTextBeiUeberschreitung'
|
||||
)
|
||||
),
|
||||
'customCSSs' => array(
|
||||
@@ -59,7 +60,6 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<!-- header -->
|
||||
@@ -124,11 +124,27 @@ $this->load->view(
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><?php echo $antragData->ects ?></td>
|
||||
<td colspan="3"><span id="ects"><?php echo $antragData->ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4">
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<span class="approveAnrechnungDetail-anrechnungEctsTooltip"
|
||||
data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<td colspan="3">
|
||||
Total: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
|
||||
[Schulisch: <span id="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>"><?php echo $antragData->sumEctsSchulisch ?></span> /
|
||||
Beruflich: <span id="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>"><?php echo $antragData->sumEctsBeruflich ?></span> ]
|
||||
<span id="sumEctsMsg"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td>
|
||||
<td colspan="3">
|
||||
<?php $len = count($antragData->lektoren) - 1 ?>
|
||||
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
|
||||
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
|
||||
@@ -138,19 +154,23 @@ $this->load->view(
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td><?php echo $antragData->zgv ?></td>
|
||||
<td colspan="3"><?php echo $antragData->zgv ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
|
||||
<td><?php echo $anrechnungData->anmerkung ?></td>
|
||||
<td colspan="3"><?php echo $anrechnungData->anmerkung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
|
||||
<td>
|
||||
<td colspan="3">
|
||||
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
|
||||
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
|
||||
<td colspan="3"><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -178,8 +198,10 @@ $this->load->view(
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<form id="form-empfehlung">
|
||||
<input type="hidden" name="anrechnung_id"
|
||||
value="<?php echo $anrechnungData->anrechnung_id ?>">
|
||||
<input type="hidden" name="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
|
||||
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
|
||||
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
|
||||
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
@@ -291,38 +313,44 @@ $this->load->view(
|
||||
<div style="display: none" id="approveAnrechnungDetail-begruendung-panel">
|
||||
<div>
|
||||
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungNegativQuestion'); ?></h4>
|
||||
<b> <?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
|
||||
<ul>
|
||||
<li>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></span>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
|
||||
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea" data-toggle="tooltip"
|
||||
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
|
||||
</ul>
|
||||
<br>
|
||||
<textarea class="form-control" name="begruendung"
|
||||
id="approveAnrechnungDetail-begruendung"
|
||||
rows="2" required></textarea>
|
||||
rows="2"
|
||||
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
|
||||
</div>
|
||||
<br>
|
||||
<!-- Action Button 'Abbrechen'-->
|
||||
@@ -399,6 +427,5 @@ $this->load->view(
|
||||
|
||||
</div><!--end container-fluid-->
|
||||
</div><!--end page-wrapper-->
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
@@ -87,7 +87,6 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<!-- title -->
|
||||
@@ -134,28 +133,34 @@ $this->load->view(
|
||||
id="approveAnrechnungUebersicht-begruendung-panel">
|
||||
<div>
|
||||
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungenNegativQuestion'); ?></h4>
|
||||
<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
|
||||
<ol>
|
||||
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
|
||||
</ol>
|
||||
<br>
|
||||
<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
|
||||
<span class="text-danger">
|
||||
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
|
||||
</span><br><br>
|
||||
</span></b>
|
||||
<br><br>
|
||||
<ol class="list-group">
|
||||
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
</ol>
|
||||
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
|
||||
rows="2" required></textarea>
|
||||
rows="2"
|
||||
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
|
||||
</div>
|
||||
<br>
|
||||
<!-- Action Button 'Abbrechen'-->
|
||||
@@ -249,6 +254,5 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
@@ -16,7 +16,7 @@ $query = '
|
||||
anrechnung.dms_id,
|
||||
anrechnung.studiensemester_kurzbz,
|
||||
stg.studiengang_kz,
|
||||
stg.bezeichnung AS "stg_bezeichnung",
|
||||
stg.bezeichnung AS stg_bezeichnung,
|
||||
lv.orgform_kurzbz,
|
||||
(SELECT ausbildungssemester
|
||||
FROM public.tbl_prestudentstatus press
|
||||
@@ -26,8 +26,10 @@ $query = '
|
||||
ORDER BY press.datum DESC
|
||||
LIMIT 1
|
||||
),
|
||||
lv.bezeichnung AS "lv_bezeichnung",
|
||||
lv.ects,
|
||||
lv.bezeichnung AS lv_bezeichnung,
|
||||
lv.ects::numeric(4,1),
|
||||
get_ects_summe_schulisch(student.student_uid, anrechnung.prestudent_id, stg.studiengang_kz) AS ectsSumSchulisch,
|
||||
get_ects_summe_beruflich(student.student_uid) AS ectsSumBeruflich,
|
||||
(person.nachname || \' \' || person.vorname) AS "student",
|
||||
begruendung.bezeichnung AS "begruendung",
|
||||
dmsversion.name AS "dokument_bezeichnung",
|
||||
@@ -49,7 +51,9 @@ $query = '
|
||||
WHERE anrechnung_id = anrechnung.anrechnung_id
|
||||
ORDER BY insertamum DESC
|
||||
LIMIT 1
|
||||
) AS status_kurzbz
|
||||
) AS status_kurzbz,
|
||||
student.student_uid,
|
||||
anrechnung.prestudent_id
|
||||
FROM lehre.tbl_anrechnung AS anrechnung
|
||||
JOIN public.tbl_prestudent USING (prestudent_id)
|
||||
JOIN public.tbl_person AS person USING (person_id)
|
||||
@@ -58,44 +62,69 @@ $query = '
|
||||
LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
|
||||
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
|
||||
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
|
||||
JOIN public.tbl_student student USING (prestudent_id)
|
||||
WHERE anrechnung.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
AND stg.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
|
||||
)
|
||||
|
||||
SELECT anrechnungen.*,
|
||||
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
|
||||
CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT insertamum::date
|
||||
FROM lehre.tbl_anrechnungstatus
|
||||
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
|
||||
WHERE anrechnung_id = anrechnungen.anrechnung_id
|
||||
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
|
||||
ORDER BY insertamum DESC
|
||||
LIMIT 1)
|
||||
END "empfehlungsanfrageAm",
|
||||
CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT COALESCE(
|
||||
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
|
||||
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
|
||||
) empfehlungsanfrageAn
|
||||
FROM (
|
||||
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
|
||||
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
|
||||
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
|
||||
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
|
||||
AND benutzer.aktiv = TRUE
|
||||
AND tbl_person.aktiv = TRUE
|
||||
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
|
||||
) as tmp_lvlektoren
|
||||
)
|
||||
END "empfehlungsanfrageAn"
|
||||
SELECT anrechnungen.anrechnung_id,
|
||||
anrechnungen.lehrveranstaltung_id,
|
||||
anrechnungen.begruendung_id,
|
||||
anrechnungen.dms_id,
|
||||
anrechnungen.studiensemester_kurzbz,
|
||||
anrechnungen.studiengang_kz,
|
||||
anrechnungen.stg_bezeichnung,
|
||||
anrechnungen.orgform_kurzbz,
|
||||
anrechnungen.ausbildungssemester,
|
||||
anrechnungen.lv_bezeichnung,
|
||||
anrechnungen.ects::float4 AS ects,
|
||||
NULL AS "ectsSumBisherUndNeu",
|
||||
anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch",
|
||||
anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich",
|
||||
anrechnungen.begruendung,
|
||||
anrechnungen.student,
|
||||
anrechnungen.dokument_bezeichnung,
|
||||
anrechnungen.anmerkung_student,
|
||||
anrechnungen.zgv,
|
||||
anrechnungen.antragsdatum,
|
||||
anrechnungen.empfehlung_anrechnung,
|
||||
anrechnungen.status_kurzbz,
|
||||
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
|
||||
anrechnungen.prestudent_id,
|
||||
CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT insertamum::date
|
||||
FROM lehre.tbl_anrechnungstatus
|
||||
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
|
||||
WHERE anrechnung_id = anrechnungen.anrechnung_id
|
||||
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
|
||||
ORDER BY insertamum DESC
|
||||
LIMIT 1)
|
||||
END "empfehlungsanfrageAm",
|
||||
CASE
|
||||
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
|
||||
ELSE
|
||||
(SELECT COALESCE(
|
||||
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
|
||||
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
|
||||
) empfehlungsanfrageAn
|
||||
FROM (
|
||||
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
|
||||
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
|
||||
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
|
||||
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
|
||||
AND benutzer.aktiv = TRUE
|
||||
AND tbl_person.aktiv = TRUE
|
||||
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
|
||||
) as tmp_lvlektoren
|
||||
)
|
||||
END "empfehlungsanfrageAn"
|
||||
FROM anrechnungen
|
||||
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
|
||||
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
|
||||
@@ -118,9 +147,12 @@ $filterWidgetArray = array(
|
||||
ucfirst($this->p->t('lehre', 'organisationsform')),
|
||||
'Semester',
|
||||
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
|
||||
'ECTS',
|
||||
ucfirst($this->p->t('person', 'studentIn')),
|
||||
'ECTS (LV)',
|
||||
'ECTS (LV + Bisher)',
|
||||
'ECTS (Bisher schulisch)',
|
||||
'ECTS (Bisher beruflich',
|
||||
ucfirst($this->p->t('global', 'begruendung')),
|
||||
ucfirst($this->p->t('person', 'studentIn')),
|
||||
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
|
||||
ucfirst($this->p->t('anrechnung', 'herkunft')),
|
||||
ucfirst($this->p->t('global', 'zgv')),
|
||||
@@ -128,6 +160,7 @@ $filterWidgetArray = array(
|
||||
ucfirst($this->p->t('anrechnung', 'empfehlung')),
|
||||
'status_kurzbz',
|
||||
'Status',
|
||||
'PrestudentID',
|
||||
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')),
|
||||
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn'))
|
||||
),
|
||||
@@ -155,8 +188,8 @@ $filterWidgetArray = array(
|
||||
rowFormatter:function(row){
|
||||
func_rowFormatter(row);
|
||||
},
|
||||
rowUpdated:function(row){
|
||||
func_rowUpdated(row);
|
||||
rowSelectionChanged:function(data, rows){
|
||||
func_rowSelectionChanged(data, rows);
|
||||
},
|
||||
tooltips: function(cell){
|
||||
return func_tooltips(cell);
|
||||
@@ -174,8 +207,11 @@ $filterWidgetArray = array(
|
||||
ausbildungssemester: {headerFilter:"input"},
|
||||
lv_bezeichnung: {headerFilter:"input"},
|
||||
ects: {headerFilter:"input", align:"center"},
|
||||
ectsSumBisherUndNeu: {formatter: format_ectsSumBisherUndNeu},
|
||||
ectsSumSchulisch: {visible: false, headerFilter:"input", align:"right"},
|
||||
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
|
||||
begruendung: {headerFilter:"input", visible: true},
|
||||
student: {headerFilter:"input"},
|
||||
begruendung: {headerFilter:"input"},
|
||||
zgv: {visible: false, headerFilter:"input"},
|
||||
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
|
||||
labelField:"dokument_bezeichnung",
|
||||
@@ -187,6 +223,7 @@ $filterWidgetArray = array(
|
||||
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
|
||||
status_kurzbz: {visible: false, headerFilter:"input"},
|
||||
status_bezeichnung: {headerFilter:"input"},
|
||||
prestudent_id: {visible: false, headerFilter:"input"},
|
||||
empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate},
|
||||
empfehlungsanfrageAn: {visible: false, headerFilter:"input"}
|
||||
}', // col properties
|
||||
|
||||
@@ -38,7 +38,6 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
|
||||
@@ -170,4 +169,5 @@ $this->load->view(
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
@@ -31,7 +31,9 @@ $this->load->view(
|
||||
),
|
||||
'anrechnung' => array(
|
||||
'deadlineUeberschritten',
|
||||
'benotungDerLV'
|
||||
'benotungDerLV',
|
||||
'anrechnungEctsTextBeiUeberschreitung',
|
||||
'anrechnungEctsTooltipTextBeiUeberschreitung'
|
||||
),
|
||||
'person' => array(
|
||||
'student',
|
||||
@@ -60,7 +62,6 @@ $this->load->view(
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<!-- header -->
|
||||
@@ -80,9 +81,13 @@ $this->load->view(
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<form id="requestAnrechnung-form">
|
||||
<input type="hidden" name="anrechnung_id" id="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
|
||||
<input type="hidden" name="lv_id" value="<?php echo $antragData->lv_id ?>">
|
||||
<input type="hidden" name="studiensemester" value="<?php echo $antragData->studiensemester_kurzbz ?>">
|
||||
<!-- Antragsdaten -->
|
||||
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
|
||||
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
|
||||
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
|
||||
<!-- Antragsdaten -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
@@ -119,8 +124,23 @@ $this->load->view(
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><?php echo $antragData->ects ?></td>
|
||||
<td><span id="ects"><?php echo number_format($antragData->ects, 1) ?> ECTS</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<span data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<td colspan="3">
|
||||
Total ECTS: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
|
||||
[ Schulisch: <span id="sumEctsSchulisch"><?php echo $antragData->sumEctsSchulisch ?></span> |
|
||||
Beruflich: <span id="sumEctsBeruflich"><?php echo $antragData->sumEctsBeruflich ?></span> ]
|
||||
<span id="requestAnrechnung-maxEctsUeberschrittenMsg"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo ucfirst($this->p->t('lehre', 'lektorInnen')); ?></th>
|
||||
<td>
|
||||
@@ -152,6 +172,17 @@ $this->load->view(
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="radio" name="begruendung" value="5" required
|
||||
<?php echo $anrechnungData->begruendung_id == '5' ? 'checked' : ''; ?> />
|
||||
<?php echo $this->p->t('anrechnung', 'antragStellenWegenHochschulzeugnis'); ?> 
|
||||
<span id="requestAnrechnung-anrechnungGrundHochschulzeugnisTooltip" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundZeugnisTooltipText'); ?>" />
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="radio" name="begruendung" value="4" required
|
||||
@@ -180,7 +211,7 @@ $this->load->view(
|
||||
<div class="form-inline panel-body">
|
||||
<div class="form-group">
|
||||
<input type="file" id="requestAnrechnung-uploadfile"
|
||||
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 ?>"
|
||||
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 * 1024 ?>"
|
||||
required>
|
||||
</div>
|
||||
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
|
||||
@@ -261,6 +292,5 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
@@ -52,7 +52,6 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<!-- title -->
|
||||
@@ -225,31 +224,29 @@ $this->load->view(
|
||||
<div class="panel panel-default panel-body" style="display: none" id="reviewAnrechnungDetail-begruendung-panel">
|
||||
<div>
|
||||
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungNegativQuestion'); ?></h4>
|
||||
 
|
||||
<b> <?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
|
||||
<ul>
|
||||
<li>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span> 
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span> 
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
|
||||
data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
|
||||
</ul>
|
||||
<br>
|
||||
<textarea class="form-control" name="begruendung"
|
||||
id="reviewAnrechnungDetail-begruendung"
|
||||
rows="2" required></textarea>
|
||||
rows="2"
|
||||
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
|
||||
required></textarea>
|
||||
</div>
|
||||
<br>
|
||||
<!-- Button Abbrechen & Bestaetigen-->
|
||||
@@ -318,6 +315,5 @@ $this->load->view(
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
@@ -80,7 +80,6 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<!-- title -->
|
||||
@@ -127,30 +126,31 @@ $this->load->view(
|
||||
id="reviewAnrechnungUebersicht-begruendung-panel">
|
||||
<div>
|
||||
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungenNegativQuestion'); ?></h4>
|
||||
<b> <?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
|
||||
<ul>
|
||||
<li>
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
|
||||
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
|
||||
</ul>
|
||||
<br>
|
||||
<span class="text-danger">
|
||||
<b><span> <?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></span>
|
||||
<span class="text-danger">
|
||||
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
|
||||
</span><br><br>
|
||||
</span></b>
|
||||
<br><br>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
|
||||
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
|
||||
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
|
||||
rows="2" required></textarea>
|
||||
rows="2"
|
||||
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
|
||||
required></textarea>
|
||||
</div>
|
||||
<br>
|
||||
<!-- Action Button Abbrechen & Bestaetigen-->
|
||||
@@ -235,7 +235,6 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Benutzer in Gruppe',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'ajaxlib' => true,
|
||||
'dialoglib' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'gruppenmanagement',
|
||||
'ui'
|
||||
),
|
||||
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
|
||||
'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/person/benutzergruppe.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
<?php echo ucfirst($this->p->t('gruppenmanagement', 'benutzergruppe')).' '.$gruppe_kurzbz ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="form-inline">
|
||||
<div class="input-group" id="absgstatusgrselect_137998">
|
||||
<input type="text" class="form-control" name="teilnehmerSelect" id="teilnehmerSelect">
|
||||
<input type="hidden" name="teilnehmer_uid" id="teilnehmer_uid">
|
||||
<input type="hidden" name="gruppe_kurzbz" id="gruppe_kurzbz" value="<?php echo $gruppe_kurzbz ?>">
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-default" id="teilnehmerHinzufuegen">
|
||||
<?php echo $this->p->t('gruppenmanagement', 'benutzerHinzufuegen') ?>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<table class="table table-bordered table-condensed table-responsive" id="benutzer-table">
|
||||
<thead>
|
||||
<th>Uid</th>
|
||||
<th><?php echo ucfirst($this->p->t('person', 'vorname')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('person', 'nachname')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('gruppenmanagement', 'aktiv')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('ui', 'entfernen')); ?></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Gruppenmanagement',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'ui'
|
||||
),
|
||||
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
|
||||
'customJSs' => array('public/js/bootstrapper.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
<?php echo ucfirst($this->p->t('gruppenmanagement', 'gruppenmanagement')); ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<?php $this->load->view('person/gruppenmanagement/gruppenmanagementData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
$filterWidgetArray = array(
|
||||
'query' => '
|
||||
SELECT gruppe_kurzbz, grp.bezeichnung AS gruppe_bezeichnung, grp.beschreibung AS gruppe_beschreibung,
|
||||
studiengang_kz, UPPER(stg.typ||stg.kurzbz) AS studiengang_kurzbz, semester, sichtbar, lehre, grp.aktiv, mailgrp, generiert
|
||||
FROM public.tbl_gruppe grp
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
JOIN public.tbl_gruppe_manager grpmgr USING (gruppe_kurzbz)
|
||||
WHERE grp.aktiv = TRUE
|
||||
AND grpmgr.uid = \''.$uid.'\'',
|
||||
'requiredPermissions' => 'lehre/gruppenmanager',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'additionalColumns' => array('Teilnehmer'),
|
||||
'columnsAliases' => array(
|
||||
ucfirst($this->p->t('gruppenmanagement', 'kurzbezeichnung')),
|
||||
ucfirst($this->p->t('gruppenmanagement', 'bezeichnung')),
|
||||
ucfirst($this->p->t('gruppenmanagement', 'beschreibung')),
|
||||
ucfirst($this->p->t('lehre', 'studiengangskennzahlLehre')),
|
||||
ucfirst($this->p->t('lehre', 'studiengang')),
|
||||
ucfirst($this->p->t('lehre', 'semester')),
|
||||
'Sichtbar',
|
||||
'Lehre',
|
||||
'Aktiv',
|
||||
'Mailgrp',
|
||||
'Generiert'
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
|
||||
/* NOTE: Dont use $this here for PHP Version compatibility */
|
||||
$datasetRaw->{'Teilnehmer'} = sprintf(
|
||||
'<a href="%s?gruppe_kurzbz=%s&origin_page=%s&fhc_controller_id=%s">'.$this->p->t('gruppenmanagement', 'zuweisenloeschen').'</a>',
|
||||
site_url('person/Gruppenmanagement/showBenutzergruppe'),
|
||||
$datasetRaw->{'gruppe_kurzbz'},
|
||||
'index',
|
||||
(isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'')
|
||||
);
|
||||
|
||||
if ($datasetRaw->{'gruppe_bezeichnung'} == null)
|
||||
{
|
||||
$datasetRaw->{'gruppe_bezeichnung'} = '-';
|
||||
}
|
||||
if ($datasetRaw->{'gruppe_beschreibung'} == null)
|
||||
{
|
||||
$datasetRaw->{'gruppe_beschreibung'} = '-';
|
||||
}
|
||||
if ($datasetRaw->{'semester'} == null)
|
||||
{
|
||||
$datasetRaw->{'semester'} = '-';
|
||||
}
|
||||
$datasetRaw->{'sichtbar'} = $datasetRaw->{'sichtbar'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'lehre'} = $datasetRaw->{'lehre'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'aktiv'} = $datasetRaw->{'aktiv'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'mailgrp'} = $datasetRaw->{'mailgrp'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'generiert'} = $datasetRaw->{'generiert'} == 'true' ? 'ja' : 'nein';
|
||||
|
||||
return $datasetRaw;
|
||||
}
|
||||
);
|
||||
|
||||
$filterWidgetArray['app'] = 'core';
|
||||
$filterWidgetArray['datasetName'] = 'gruppenmanagement';
|
||||
$filterWidgetArray['filterKurzbz'] = 'gruppenmanagement';
|
||||
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
?>
|
||||
@@ -1,10 +1,11 @@
|
||||
<div class="table-responsive">
|
||||
<table id="doctable" class="table table-bordered">
|
||||
<div class="table-responsive" id="uebersichtDoks">
|
||||
<table id="doctable" class="table table-bordered table-condensed tablesorter tablesorter-default">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo ucfirst($this->p->t('global','name')) ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('global','typ')) ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('global','uploaddatum')) ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('ui','loeschen')) ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('infocenter','ausstellungsnation')) ?></th>
|
||||
<?php
|
||||
if (!isset($formalReadonly))
|
||||
@@ -22,7 +23,7 @@
|
||||
<a href="outputAkteContent/<?php echo $dokument->akte_id ?>"><?php echo isEmptyString($dokument->titel) ? $dokument->bezeichnung : $dokument->titel ?></a>
|
||||
</td>
|
||||
<td>
|
||||
<select class="aktenid" id="aktenid_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?> autocomplete="off">
|
||||
<select class="form-control aktenid" id="aktenid_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?> autocomplete="off">
|
||||
<?php
|
||||
foreach($dokumententypen as $dokumenttyp)
|
||||
echo "<option " . ($dokumenttyp->bezeichnung === $dokument->dokument_bezeichnung ? 'selected' : '') . " value = " . $dokumenttyp->dokument_kurzbz . ">" . $dokumenttyp->bezeichnung . "</option>"
|
||||
@@ -30,7 +31,7 @@
|
||||
</select>
|
||||
|
||||
<div class="row">
|
||||
<button class="nachreichungInfos hidden" id="nachreichungInfos_<?php echo $dokument->akte_id?>"><?php echo ucfirst($this->p->t('infocenter','dokumentWirdNachgereicht')) ?></button>
|
||||
<button class="nachreichungInfos hidden btn btn-default" id="nachreichungInfos_<?php echo $dokument->akte_id?>"><?php echo ucfirst($this->p->t('infocenter','dokumentWirdNachgereicht')) ?></button>
|
||||
</div>
|
||||
|
||||
<div class="nachreichungInputs hidden" id="nachreichungInputs_<?php echo $dokument->akte_id?>">
|
||||
@@ -49,7 +50,7 @@
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="btn-group pull-right">
|
||||
<input type="button" value="OK" class="btn btn-primary nachreichungSpeichern" id="nachreichungSpeichern_<?php echo $dokument->akte_id?>">
|
||||
<input type="button" value="OK" class="btn btn-primary nachreichungSpeichern btn-default" id="nachreichungSpeichern_<?php echo $dokument->akte_id?>">
|
||||
<input type="button" value="Abbrechen" class="btn btn-default nachreichungAbbrechen" id="nachreichungAbbrechen_<?php echo $dokument->akte_id?>">
|
||||
</div>
|
||||
</div>
|
||||
@@ -60,6 +61,7 @@
|
||||
|
||||
</td>
|
||||
<td><?php echo date_format(date_create($dokument->erstelltam), 'd.m.Y') ?></td>
|
||||
<td><input type="button" value="<?php echo ucfirst($this->p->t('ui','loeschen')); ?>" class="btn btn-default dokLoeschen" id="dokLoeschen_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?>></td>
|
||||
<td><?php echo $dokument->langtext ?></td>
|
||||
<?php
|
||||
if (!isset($formalReadonly)) :
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$ORG_NAME = '\'InfoCenter\'';
|
||||
$ONLINE = '\'online\'';
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
@@ -55,10 +56,13 @@
|
||||
a.dokument_kurzbz in ('.$AKTE_TYP.')
|
||||
) AS "AnzahlAkte",
|
||||
(
|
||||
SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END
|
||||
SELECT CASE WHEN student.student_uid IS NULL THEN
|
||||
(CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END)
|
||||
ELSE '. $ONLINE .' END
|
||||
FROM system.tbl_log l
|
||||
LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid
|
||||
LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id
|
||||
LEFT JOIN public.tbl_student student ON tbl_benutzer.uid = student.student_uid
|
||||
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
|
||||
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
|
||||
AND l.person_id = p.person_id
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$ORG_NAME = '\'InfoCenter\'';
|
||||
$IDENTITY = '\'identity\'';
|
||||
$ONLINE = '\'online\'';
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
@@ -42,10 +43,13 @@ $query = '
|
||||
LIMIT 1
|
||||
) AS "LastActionType",
|
||||
(
|
||||
SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END
|
||||
SELECT CASE WHEN student.student_uid IS NULL THEN
|
||||
(CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END)
|
||||
ELSE '. $ONLINE .' END
|
||||
FROM system.tbl_log l
|
||||
LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid
|
||||
LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id
|
||||
LEFT JOIN public.tbl_student student ON tbl_benutzer.uid = student.student_uid
|
||||
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
|
||||
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
|
||||
AND l.person_id = p.person_id
|
||||
@@ -178,7 +182,7 @@ $query = '
|
||||
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
|
||||
AND ps.person_id = p.person_id
|
||||
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
|
||||
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
|
||||
ORDER BY rtp.teilgenommen NULLS FIRST, pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
|
||||
LIMIT 1
|
||||
) AS "ReihungstestAngetreten",
|
||||
(
|
||||
@@ -199,7 +203,7 @@ $query = '
|
||||
LIMIT 1
|
||||
) AS "ReihungstestApplied",
|
||||
(
|
||||
SELECT CONCAT(rtp.datum, rtp.uhrzeit)
|
||||
SELECT (ARRAY_TO_STRING(array_agg(DISTINCT(CONCAT(rtp.datum, \' \', to_char(rtp.uhrzeit, \'HH24:MI\'), \' \', studiengang.kurzbzlang))), \', \'))
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
JOIN public.tbl_prestudent ps USING(prestudent_id)
|
||||
LEFT JOIN (
|
||||
@@ -207,14 +211,17 @@ $query = '
|
||||
rt.studiensemester_kurzbz,
|
||||
rtp.teilgenommen,
|
||||
rt.datum,
|
||||
rt.uhrzeit
|
||||
rt.uhrzeit,
|
||||
rt.studiengang_kz
|
||||
FROM public.tbl_rt_person rtp
|
||||
JOIN tbl_reihungstest rt ON(rtp.rt_id = rt.reihungstest_id)
|
||||
WHERE rt.stufe = 1
|
||||
) rtp ON(rtp.person_id = ps.person_id AND rtp.studiensemester_kurzbz = pss.studiensemester_kurzbz)
|
||||
JOIN tbl_studiengang studiengang ON rtp.studiengang_kz = studiengang.studiengang_kz
|
||||
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
|
||||
AND ps.person_id = p.person_id
|
||||
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
|
||||
GROUP BY pss.datum, pss.insertamum, pss.ext_id
|
||||
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
|
||||
LIMIT 1
|
||||
) AS "ReihungstestDate",
|
||||
@@ -414,10 +421,6 @@ $query = '
|
||||
{
|
||||
$datasetRaw->{'ReihungstestDate'} = '-';
|
||||
}
|
||||
else
|
||||
{
|
||||
$datasetRaw->{'ReihungstestDate'} = date_format(date_create($datasetRaw->{'ReihungstestDate'}),'Y-m-d H:i');
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'ZGVNation'} == null)
|
||||
{
|
||||
|
||||
@@ -124,6 +124,32 @@
|
||||
</div>
|
||||
<div id="collapse<?php echo $zgvpruefung->prestudent_id ?>"
|
||||
class="panel-collapse collapse<?php echo $infoonly ? '' : ' in' ?>">
|
||||
<?php
|
||||
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
|
||||
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
|
||||
{
|
||||
$disabled = $disabledStg = 'disabled';
|
||||
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
|
||||
}
|
||||
|
||||
if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm')
|
||||
{
|
||||
$disabled = 'disabled';
|
||||
$disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
|
||||
|
||||
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
|
||||
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
|
||||
{
|
||||
$disabledStg = 'disabled';
|
||||
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
|
||||
}
|
||||
}
|
||||
|
||||
if (!in_array($studiengangtyp, $studienArtBerechtigung))
|
||||
$disabledPer = 'disabled';
|
||||
else
|
||||
$disabledPer = '';
|
||||
?>
|
||||
<div class="panel-body">
|
||||
<form action="javascript:void(0);" class="zgvform" id="zgvform_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<input type="hidden" name="prestudentid" value="<?php echo $zgvpruefung->prestudent_id ?>" class="prestudentidinput">
|
||||
@@ -318,17 +344,17 @@
|
||||
<?php if (!$infoonly): ?>
|
||||
<div class="row">
|
||||
<div class="col-xs-8 text-left zgvBearbeitungButtons" id="zgvBearbeitungButtons_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<button type="button" class="btn btn-default zgvUebernehmen" id="zgvUebernehmen_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<button type="button" class="btn btn-default zgvUebernehmen" id="zgvUebernehmen_<?php echo $zgvpruefung->prestudent_id ?>" <?php echo $disabledPer?>>
|
||||
<?php echo $this->p->t('infocenter', 'letzteZgvUebernehmen') ?>
|
||||
</button>
|
||||
<button class="btn btn-default zgvRueckfragen" id="zgvRueckfragen_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<button class="btn btn-default zgvRueckfragen" <?php echo $disabledStg . ' ' . $disabledPer?> id="zgvRueckfragen_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<?php echo $this->p->t('infocenter', 'zgvRueckfragen') ?>
|
||||
</button>
|
||||
<span class="zgvStatusText" id="zgvStatusText_<?php echo $zgvpruefung->prestudent_id ?>" <?php (!(isset($zgvpruefung->statusZGV))) ?: print_r('data-info="need"')?>>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-xs-4 text-right">
|
||||
<button type="submit" class="btn btn-default saveZgv" id="zgvSpeichern_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<button type="submit" class="btn btn-default saveZgv" id="zgvSpeichern_<?php echo $zgvpruefung->prestudent_id ?>" <?php echo $disabledPer?>>
|
||||
<?php echo $this->p->t('ui', 'speichern') ?>
|
||||
</button>
|
||||
</div>
|
||||
@@ -336,7 +362,7 @@
|
||||
<?php endif; ?>
|
||||
<br />
|
||||
<?php
|
||||
if (isset($zgvpruefung->prestudentUdfs))
|
||||
if (isset($zgvpruefung->prestudentUdfs) && $studiengangtyp !== 'l')
|
||||
{
|
||||
echo $this->udflib->UDFWidget(
|
||||
array(
|
||||
@@ -362,6 +388,8 @@
|
||||
<div class="form-inline">
|
||||
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<select name="absgstatusgrund"
|
||||
<?php echo $disabledStg ?>
|
||||
<?php echo $disabledPer ?>
|
||||
class="d-inline float-right"
|
||||
required>
|
||||
<option value="null"
|
||||
@@ -373,7 +401,7 @@
|
||||
</select>
|
||||
<span class="input-group-btn">
|
||||
<button type="button"
|
||||
class="btn btn-default absageBtn" id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
class="btn btn-default absageBtn" <?php echo $disabledStg . ' ' . $disabledPer?> id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<?php echo $this->p->t('ui', 'absagen') ?>
|
||||
</button>
|
||||
</span>
|
||||
@@ -381,25 +409,6 @@
|
||||
</div>
|
||||
</div><!-- /.column-absage -->
|
||||
<?php
|
||||
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
|
||||
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
|
||||
{
|
||||
$disabled = $disabledStg = 'disabled';
|
||||
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
|
||||
}
|
||||
|
||||
if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm')
|
||||
{
|
||||
$disabled = 'disabled';
|
||||
$disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
|
||||
|
||||
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
|
||||
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
|
||||
{
|
||||
$disabledStg = 'disabled';
|
||||
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
|
||||
}
|
||||
}
|
||||
if (!$infoonly) :
|
||||
?>
|
||||
<div class="col-lg-8 text-right">
|
||||
@@ -408,6 +417,7 @@
|
||||
<select name="frgstatusgrund"
|
||||
class="d-inline float-right"
|
||||
<?php echo $disabledStg ?>
|
||||
<?php echo $disabledPer ?>
|
||||
required>
|
||||
<option value="null"
|
||||
selected="selected"><?php echo ucfirst($this->p->t('ui', 'freigabeart')) . '...' ?>
|
||||
@@ -417,14 +427,14 @@
|
||||
<?php endforeach ?>
|
||||
</select>
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg ?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
|
||||
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg . ' ' . $disabledPer?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
|
||||
data-toggle="tooltip" title="<?php echo $disabledStgTxt ?>">
|
||||
<?php echo $this->p->t('ui', 'freigabeAnStudiengang') ?>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="input-group" id="igrfrgbtn">
|
||||
<button type="button" id="freigabebtn_<?php echo $zgvpruefung->prestudent_id ?>" class="btn btn-default freigabebtn" <?php echo $disabled ?>
|
||||
<button type="button" id="freigabebtn_<?php echo $zgvpruefung->prestudent_id ?>" class="btn btn-default freigabebtn" <?php echo $disabled . ' ' . $disabledPer?>
|
||||
data-toggle="tooltip" title="<?php echo $disabledTxt ?>">
|
||||
<?php echo $this->p->t('ui', 'freigabeZumReihungstest') ?>
|
||||
</button>
|
||||
@@ -489,6 +499,8 @@
|
||||
<div class="col-lg-4 text-left">
|
||||
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<select name="absgstatusgrund"
|
||||
<?php echo $disabledStg?>
|
||||
<?php echo $disabledPer?>
|
||||
class="d-inline float-right"
|
||||
required>
|
||||
<option value="null"
|
||||
@@ -500,6 +512,8 @@
|
||||
</select>
|
||||
<span class="input-group-btn">
|
||||
<button type="button"
|
||||
<?php echo $disabledStg ?>
|
||||
<?php echo $disabledPer ?>
|
||||
class="btn btn-default absageBtn" id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
|
||||
<?php echo $this->p->t('ui', 'absagen') ?>
|
||||
</button>
|
||||
@@ -552,4 +566,3 @@
|
||||
endforeach; // end foreach zgvpruefungen
|
||||
?>
|
||||
</div><!-- /.panel-group -->
|
||||
|
||||
|
||||
@@ -258,6 +258,9 @@ define('STIP_USER_PASSWORD','password');
|
||||
// Array mit Usern die nicht Kollidieren
|
||||
define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor')));
|
||||
|
||||
// UID des Dummy Lektors
|
||||
define('DUMMY_LEKTOR_UID','_DummyLektor');
|
||||
|
||||
// Soll der Lageplan am Infoterminal angezeigt werden (true|false)
|
||||
//define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN', true);
|
||||
|
||||
|
||||
@@ -345,13 +345,26 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
<menulist id="student-prestudent-menulist-zgvcode" disabled="true"
|
||||
datasources="<?php echo APP_ROOT ?>rdf/zgv.rdf.php?optional=true" flex="1"
|
||||
ref="http://www.technikum-wien.at/zgv/alle"
|
||||
xmlns:ZGV="http://www.technikum-wien.at/zgv/rdf#"
|
||||
style="min-width: 130px">
|
||||
<template>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
|
||||
uri="rdf:*"/>
|
||||
<rule ZGV:aktiv='f'>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
style="text-decoration:line-through;"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
<rule>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
</template>
|
||||
</menulist>
|
||||
<label value="ZGV Ort" control="student-prestudent-textbox-zgvort"/>
|
||||
@@ -402,14 +415,26 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
<menulist id="student-prestudent-menulist-zgvmastercode" disabled="true"
|
||||
datasources="<?php echo APP_ROOT ?>rdf/zgvmaster.rdf.php?optional=true" flex="1"
|
||||
ref="http://www.technikum-wien.at/zgvmaster/alle"
|
||||
xmlns:ZGVMASTER="http://www.technikum-wien.at/zgvmaster/rdf#"
|
||||
style="min-width: 130px" >
|
||||
<template>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
/>
|
||||
</menupopup>
|
||||
<rule ZGVMASTER:aktiv='f'>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
style="text-decoration:line-through;"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
<rule>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
</template>
|
||||
</menulist>
|
||||
<label value="ZGV Master Ort" control="student-prestudent-textbox-zgvmasterort"/>
|
||||
@@ -462,13 +487,26 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
<label value="ZGV Doktor" control="student-prestudent-menulist-zgvdoktorcode"/>
|
||||
<menulist id="student-prestudent-menulist-zgvdoktorcode" disabled="true"
|
||||
datasources="<?php echo APP_ROOT ?>rdf/zgvdoktor.rdf.php?optional=true" flex="1"
|
||||
ref="http://www.technikum-wien.at/zgvdoktor/alle" >
|
||||
ref="http://www.technikum-wien.at/zgvdoktor/alle"
|
||||
xmlns:ZGVDOKTOR="http://www.technikum-wien.at/zgvdoktor/rdf#">
|
||||
<template>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
|
||||
uri="rdf:*"/>
|
||||
</menupopup>
|
||||
<rule ZGVDOKTOR:aktiv='f'>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
style="text-decoration:line-through;"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
<rule>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
|
||||
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
|
||||
uri="rdf:*"
|
||||
/>
|
||||
</menupopup>
|
||||
</rule>
|
||||
</template>
|
||||
</menulist>
|
||||
<label value="ZGV Doktor Ort" control="student-prestudent-textbox-zgvdoktorort"/>
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
/* Copyright (C) 2006 Technikum-Wien
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Alexei Karpenko <karpenko@technikum-wien.at>.
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
|
||||
class gruppemanager extends basis_db
|
||||
{
|
||||
public $new;
|
||||
|
||||
//Tabellenspalten
|
||||
public $uid; // varchar(32)
|
||||
public $gruppe_kurzbz; // varchar(32)
|
||||
public $insertamum; // timestamp
|
||||
public $insertvon; // varchar(32)
|
||||
|
||||
public $uids = array(); // array
|
||||
|
||||
/**
|
||||
* Konstruktor - Laedt optional einen Gruppenmanager
|
||||
* @param $uid
|
||||
* @param $gruppe_kurzbz
|
||||
*/
|
||||
public function __construct($uid=null, $gruppe_kurzbz=null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if(!is_null($gruppe_kurzbz) && !is_null($uid))
|
||||
$this->load($uid, $gruppe_kurzbz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die BenutzerGruppe
|
||||
* @param uid, gruppe_kurzbz
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
public function load($uid, $gruppe_kurzbz)
|
||||
{
|
||||
$qry = "SELECT * FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
if($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->uid = $row->uid;
|
||||
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Es wurde kein Datensatz gefunden';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Laden des Datensatzes';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Manager einer Benutzergruppe
|
||||
* @param gruppe_kurzbz
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
public function load_uids($gruppe_kurzbz)
|
||||
{
|
||||
$qry = "SELECT * FROM public.tbl_gruppe_manager
|
||||
WHERE gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
if ($this->db_num_rows() == 0)
|
||||
return false;
|
||||
else
|
||||
{
|
||||
while ($row = $this->db_fetch_object())
|
||||
{
|
||||
$gm_obj = new gruppemanager();
|
||||
$gm_obj->uid = $row->uid;
|
||||
$this->uids[] = $gm_obj;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Laden des Datensatzes';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft die Variablen vor dem Speichern
|
||||
* auf Gueltigkeit.
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
if(mb_strlen($this->uid)>32)
|
||||
{
|
||||
$this->errormsg = 'UID darf nich laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
if(mb_strlen($this->gruppe_kurzbz)>32)
|
||||
{
|
||||
$this->errormsg = 'Gruppe_kurzbz darf nicht laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
if(mb_strlen($this->insertvon)>32)
|
||||
{
|
||||
$this->errormsg = 'Insertvon darf nicht laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert GruppeManager in die Datenbank
|
||||
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz
|
||||
* angelegt, ansonsten der Datensatz upgedated
|
||||
* @return true wenn erfolgreich, false im Fehlerfall
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
//Variablen auf Gueltigkeit pruefen
|
||||
if(!$this->validate())
|
||||
return false;
|
||||
|
||||
$qry = 'INSERT INTO public.tbl_gruppe_manager (uid, gruppe_kurzbz, insertamum, insertvon)
|
||||
VALUES('.$this->db_add_param($this->uid).','.
|
||||
$this->db_add_param($this->gruppe_kurzbz).','.
|
||||
$this->db_add_param($this->insertamum).','.
|
||||
$this->db_add_param($this->insertvon).');';
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
//Log schreiben
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Speichern des GruppeManagers';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loescht eine Gruppenmanagerzuordnung
|
||||
*
|
||||
* @param $uid
|
||||
* @param $gruppe_kurzbz
|
||||
* @return boolean
|
||||
*/
|
||||
public function delete($uid, $gruppe_kurzbz)
|
||||
{
|
||||
$qry = "DELETE FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if($this->db_query($qry))
|
||||
return true;
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Loeschen der Zuteilung';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -2542,4 +2542,80 @@ class prestudent extends person
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft, ob eine Person offene Bewerbungen besitzt
|
||||
* @param int $person_id ID der zu überprüfenden Person.
|
||||
* @return true wenn vorhanden, false wenn nicht vorhanden
|
||||
*/
|
||||
public function existsOffeneBewerbung($person_id)
|
||||
{
|
||||
if (!is_numeric($person_id))
|
||||
{
|
||||
$this->errormsg = 'Person_id muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
$db = new basis_db();
|
||||
|
||||
$qry = "SELECT
|
||||
prestudent_id
|
||||
FROM
|
||||
tbl_prestudent ps
|
||||
WHERE
|
||||
person_id = ".$this->db_add_param($person_id)."
|
||||
And
|
||||
get_rolle_prestudent(prestudent_id, null) in ('Interessent','Bewerber','Aufgenommener','Wartender');";
|
||||
|
||||
if ($db->db_query($qry))
|
||||
{
|
||||
$num_rows = $db->db_num_rows();
|
||||
if ($num_rows > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft, ob es sich um einen Student / Unterbrecher handelt
|
||||
* @param int $person_id ID der zu überprüfenden Person.
|
||||
* @return true wenn zutreffend, false wenn nicht zutreffend
|
||||
*/
|
||||
public function isStudent($person_id)
|
||||
{
|
||||
if (!is_numeric($person_id))
|
||||
{
|
||||
$this->errormsg = 'Person_id muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
$db = new basis_db();
|
||||
|
||||
$qry = "SELECT
|
||||
prestudent_id
|
||||
FROM
|
||||
tbl_prestudent ps
|
||||
WHERE
|
||||
person_id = ".$this->db_add_param($person_id)."
|
||||
And
|
||||
get_rolle_prestudent(prestudent_id, null) in ('Student','Unterbrecher');";
|
||||
|
||||
if ($db->db_query($qry))
|
||||
{
|
||||
$num_rows = $db->db_num_rows();
|
||||
if ($num_rows > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,58 +7,7 @@ $(document).ready(function ()
|
||||
|
||||
var personid = $("#hiddenpersonid").val();
|
||||
|
||||
//add click events to "formal geprüft" checkboxes
|
||||
$(".prchbox").click(function ()
|
||||
{
|
||||
var boxid = this.id;
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(boxid);
|
||||
var checked = this.checked;
|
||||
DocUeberpruefung.saveFormalGeprueft(personid, akteid, checked)
|
||||
});
|
||||
|
||||
$('select.aktenid').change(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
var typ = $(this).val();
|
||||
DocUeberpruefung.saveDocTyp(personid, akteid, typ);
|
||||
});
|
||||
|
||||
$('.nachreichungInfos').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
DocUeberpruefung.checkNachreichungInputs(akteid);
|
||||
});
|
||||
|
||||
$('.nachreichungAbbrechen').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
DocUeberpruefung.checkNachreichungInputs(akteid);
|
||||
});
|
||||
|
||||
$('.nachreichungSpeichern').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
var typ = $('#aktenid_' + akteid).val();
|
||||
|
||||
var nachreichungAm = $('#nachreichungAm_' + akteid).val();
|
||||
var nachreichungAnmerkung = $('#nachreichungAnmerkung_' + akteid).val();
|
||||
|
||||
if(nachreichungAm === '')
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'));
|
||||
return false;
|
||||
}
|
||||
|
||||
var regEx = /^\d{2}\.\d{2}\.(\d{2}|\d{4})$/;
|
||||
|
||||
if(nachreichungAm.match(regEx) === null)
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'))
|
||||
return false;
|
||||
}
|
||||
|
||||
DocUeberpruefung.saveNachreichung(personid, nachreichungAm, nachreichungAnmerkung, typ);
|
||||
})
|
||||
DocUeberpruefung._addDocUeberpruefungEvents(personid)
|
||||
});
|
||||
|
||||
var DocUeberpruefung = {
|
||||
@@ -158,6 +107,33 @@ var DocUeberpruefung = {
|
||||
);
|
||||
},
|
||||
|
||||
deleteDoc: function(personid, akteid)
|
||||
{
|
||||
FHC_AjaxClient.ajaxCallPost(
|
||||
CALLED_PATH + "/deleteDoc/" + encodeURIComponent(personid),
|
||||
{
|
||||
"akteid": akteid
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isSuccess(data))
|
||||
{
|
||||
DocUeberpruefung._refreshUbersichtDoks();
|
||||
InfocenterDetails._refreshLog();
|
||||
}
|
||||
else
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
}
|
||||
},
|
||||
errorCallback: function(data)
|
||||
{
|
||||
FHC_DialogLib.alertWarning("Fehler beim Speichern!");
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
checkNachreichungInputs: function(akteid)
|
||||
{
|
||||
var inputs = $('#nachreichungInputs_' + akteid);
|
||||
@@ -197,6 +173,19 @@ var DocUeberpruefung = {
|
||||
}
|
||||
},
|
||||
|
||||
_refreshUbersichtDoks: function()
|
||||
{
|
||||
var personid = $("#hiddenpersonid").val();
|
||||
|
||||
$("#uebersichtDoks").load(
|
||||
CONTROLLER_URL + '/reloadUebersichtDoks/' + personid + '?fhc_controller_id=' + FHC_AjaxClient.getUrlParameter('fhc_controller_id'),
|
||||
function () {
|
||||
DocUeberpruefung._formatDocTable();
|
||||
DocUeberpruefung._addDocUeberpruefungEvents(personid);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
_refreshNachzureichendeDoks: function()
|
||||
{
|
||||
var personid = $("#hiddenpersonid").val();
|
||||
@@ -205,10 +194,79 @@ var DocUeberpruefung = {
|
||||
CONTROLLER_URL + '/reloadDoks/' + personid + '?fhc_controller_id=' + FHC_AjaxClient.getUrlParameter('fhc_controller_id'),
|
||||
function () {
|
||||
DocUeberpruefung._formatDocTable();
|
||||
DocUeberpruefung._addDocUeberpruefungEvents(personid);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
_addDocUeberpruefungEvents: function(personid)
|
||||
{
|
||||
//add click events to "formal geprüft" checkboxes
|
||||
$(".prchbox").click(function ()
|
||||
{
|
||||
var boxid = this.id;
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(boxid);
|
||||
var checked = this.checked;
|
||||
DocUeberpruefung.saveFormalGeprueft(personid, akteid, checked)
|
||||
});
|
||||
|
||||
$('select.aktenid').change(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
var typ = $(this).val();
|
||||
DocUeberpruefung.saveDocTyp(personid, akteid, typ);
|
||||
});
|
||||
|
||||
$('.nachreichungInfos').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
DocUeberpruefung.checkNachreichungInputs(akteid);
|
||||
});
|
||||
|
||||
$('.nachreichungAbbrechen').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
DocUeberpruefung.checkNachreichungInputs(akteid);
|
||||
});
|
||||
|
||||
$('.nachreichungSpeichern').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
var typ = $('#aktenid_' + akteid).val();
|
||||
|
||||
var nachreichungAm = $('#nachreichungAm_' + akteid).val();
|
||||
var nachreichungAnmerkung = $('#nachreichungAnmerkung_' + akteid).val();
|
||||
|
||||
if(nachreichungAm === '')
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'));
|
||||
return false;
|
||||
}
|
||||
|
||||
var regEx = /^\d{2}\.\d{2}\.(\d{2}|\d{4})$/;
|
||||
|
||||
if(nachreichungAm.match(regEx) === null)
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'))
|
||||
return false;
|
||||
}
|
||||
|
||||
DocUeberpruefung.saveNachreichung(personid, nachreichungAm, nachreichungAnmerkung, typ);
|
||||
})
|
||||
|
||||
$('.dokLoeschen').click(function()
|
||||
{
|
||||
var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
|
||||
|
||||
var confirmed = confirm('Wollen Sie sicher das Dokument des Dokumentypens: ' + $('#aktenid_' + akteid).find(':selected').text() + ' löschen?');
|
||||
|
||||
if (confirmed)
|
||||
{
|
||||
DocUeberpruefung.deleteDoc(personid, akteid);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_formatDocTable: function()
|
||||
{
|
||||
Tablesort.addTablesorter("doctable", [[2, 1], [1, 0]], ["zebra"]);
|
||||
|
||||
@@ -543,8 +543,8 @@ var InfocenterDetails = {
|
||||
|
||||
var prestudentdata = prestudentresponse.retval;
|
||||
|
||||
var prestudent_id = freigabedata.prestudent_id;
|
||||
var statusgrund_id = freigabedata.statusgrund_id;
|
||||
var prestudent_id = parseInt(freigabedata.prestudent_id);
|
||||
var statusgrund_id = parseInt(freigabedata.statusgrund_id);
|
||||
var rtfreigabe = !$.isNumeric(statusgrund_id);//no Statusgrund - RT Freigabe
|
||||
|
||||
var rtFreigegeben = false;
|
||||
|
||||
@@ -34,11 +34,10 @@ var InfocenterPersonDataset = {
|
||||
|
||||
var auswahlStudienart =
|
||||
'<select class="form-control auswahlStudienArt" style="width:auto;">' +
|
||||
'<option data-id="all"> Alle </option>' +
|
||||
'<option data-id="master"> Master </option>' +
|
||||
'<option data-id="bachelor"> Bachelor </option>' +
|
||||
'</select>';
|
||||
|
||||
InfocenterPersonDataset.getStudienartData(infocenter_studiengangstyp);
|
||||
|
||||
var auswahlAbsageToggle =
|
||||
'<a class="absageToggle">Erweiterte Einstellungen</a>';
|
||||
|
||||
@@ -90,11 +89,9 @@ var InfocenterPersonDataset = {
|
||||
"<div class='h-divider'></div><hr class='studiensemesterline'>"
|
||||
);
|
||||
|
||||
InfocenterPersonDataset.selectStudiengangTyp(infocenter_studiengangstyp)
|
||||
|
||||
$('.auswahlStudienArt').change(function()
|
||||
{
|
||||
InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').attr('data-id'));
|
||||
InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').val());
|
||||
});
|
||||
|
||||
$("#datasetActionsBottom").append(
|
||||
@@ -183,22 +180,6 @@ var InfocenterPersonDataset = {
|
||||
);
|
||||
},
|
||||
|
||||
selectStudiengangTyp: function(typ)
|
||||
{
|
||||
switch (typ)
|
||||
{
|
||||
case 'b, m' :
|
||||
$('.auswahlStudienArt [data-id="all"]').attr('selected', 'selected');
|
||||
break;
|
||||
case 'b' :
|
||||
$('.auswahlStudienArt [data-id="bachelor"]').attr('selected', 'selected');
|
||||
break;
|
||||
case 'm' :
|
||||
$('.auswahlStudienArt [data-id="master"]').attr('selected', 'selected');
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* sets functionality for the actions above and beneath the person table
|
||||
*/
|
||||
@@ -257,20 +238,12 @@ var InfocenterPersonDataset = {
|
||||
});
|
||||
},
|
||||
|
||||
changeStudengangsTyp: function($typ)
|
||||
changeStudengangsTyp: function(typ)
|
||||
{
|
||||
switch ($typ)
|
||||
{
|
||||
case 'all' :
|
||||
var change = 'b\', \'m';
|
||||
break;
|
||||
case 'bachelor' :
|
||||
var change = 'b';
|
||||
break;
|
||||
case 'master' :
|
||||
var change = 'm';
|
||||
break;
|
||||
}
|
||||
let change = typ;
|
||||
|
||||
if (typ === 'all')
|
||||
change = change = 'b\', \'m\', \'l';
|
||||
|
||||
FHC_AjaxClient.showVeil();
|
||||
|
||||
@@ -372,7 +345,8 @@ var InfocenterPersonDataset = {
|
||||
'system/infocenter/InfoCenter/getAbsageData',
|
||||
{},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
successCallback: function(data, textStatus, jqXHR)
|
||||
{
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
data = FHC_AjaxClient.getData(data);
|
||||
@@ -397,6 +371,42 @@ var InfocenterPersonDataset = {
|
||||
}
|
||||
);
|
||||
},
|
||||
getStudienartData: function(infocenter_studiengangstyp)
|
||||
{
|
||||
FHC_AjaxClient.ajaxCallGet(
|
||||
'system/infocenter/InfoCenter/getStudienartData',
|
||||
{},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR)
|
||||
{
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
data = FHC_AjaxClient.getData(data);
|
||||
|
||||
let all = data.map(item => item.typ).join('\',\'');
|
||||
$('.auswahlStudienArt').append($("<option/>")
|
||||
.val(all)
|
||||
.text('Alle')
|
||||
);
|
||||
|
||||
$.each(data, function(key, value)
|
||||
{
|
||||
let isSelected;
|
||||
isSelected = (infocenter_studiengangstyp === value.typ && all.length !== 1) ? 'selected' : false;
|
||||
$('.auswahlStudienArt').append($("<option/>")
|
||||
.val(value.typ)
|
||||
.text(value.bezeichnung)
|
||||
.attr('selected', isSelected)
|
||||
)
|
||||
});
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
/**
|
||||
* initializes call to get the Studiensemester user variable
|
||||
*/
|
||||
|
||||
@@ -4,8 +4,6 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
|
||||
const ANRECHNUNGSTATUS_APPROVED = 'approved';
|
||||
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
|
||||
|
||||
|
||||
|
||||
$(function(){
|
||||
|
||||
const genehmigung_panel = $('#approveAnrechnungDetail-genehmigung-panel');
|
||||
@@ -36,6 +34,8 @@ $(function(){
|
||||
// Init tooltips
|
||||
approveAnrechnungDetail.initTooltips();
|
||||
|
||||
approveAnrechnungDetail.alertIfMaxEctsExceeded();
|
||||
|
||||
// Ask if Approve Anrechnungen
|
||||
$("#approveAnrechnungDetail-approve-anrechnung-ask").click(function(){
|
||||
|
||||
@@ -91,8 +91,12 @@ $(function(){
|
||||
approveAnrechnungDetail.formatGenehmigungIsPositiv(
|
||||
data.retval[0].abgeschlossen_am,
|
||||
data.retval[0].abgeschlossen_von,
|
||||
data.retval[0].status_bezeichnung
|
||||
data.retval[0].status_kurzbz,
|
||||
data.retval[0].status_bezeichnung,
|
||||
);
|
||||
|
||||
approveAnrechnungDetail.sumUpEcts();
|
||||
approveAnrechnungDetail.alertIfMaxEctsExceeded();
|
||||
}
|
||||
},
|
||||
errorCallback: function (jqXHR, textStatus, errorThrown)
|
||||
@@ -168,6 +172,7 @@ $(function(){
|
||||
approveAnrechnungDetail.formatGenehmigungIsNegativ(
|
||||
data.retval[0].abgeschlossen_am,
|
||||
data.retval[0].abgeschlossen_von,
|
||||
data.retval[0].status_kurzbz,
|
||||
data.retval[0].status_bezeichnung,
|
||||
begruendung
|
||||
);
|
||||
@@ -236,6 +241,7 @@ $(function(){
|
||||
|
||||
// Get form data
|
||||
let form_data = $('form').serializeArray();
|
||||
var init_status_kurzbz = $('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz');
|
||||
|
||||
// Prepare data object for ajax call
|
||||
let data = {
|
||||
@@ -248,21 +254,24 @@ $(function(){
|
||||
{
|
||||
successCallback: function (data, textStatus, jqXHR)
|
||||
{
|
||||
console.log(data);
|
||||
if (data.error && data.retval != null)
|
||||
{
|
||||
console.log('inside error');
|
||||
// Print error message
|
||||
FHC_DialogLib.alertWarning(data.retval);
|
||||
}
|
||||
|
||||
if (!data.error && data.retval != null)
|
||||
{
|
||||
console.log('inside success');
|
||||
approveAnrechnungDetail.formatGenehmigungIsWithdrawed(
|
||||
data.retval.status_bezeichnung
|
||||
);
|
||||
|
||||
if (init_status_kurzbz == 'approved')
|
||||
{
|
||||
approveAnrechnungDetail.substractEcts(ects, sumEctsSchulisch, sumEctsBeruflich);
|
||||
approveAnrechnungDetail.alertIfMaxEctsExceeded();
|
||||
}
|
||||
|
||||
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen"));
|
||||
|
||||
}
|
||||
@@ -477,12 +486,13 @@ var approveAnrechnungDetail = {
|
||||
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
|
||||
$('#approveAnrechnungDetail-withdraw-request-recommedation').removeClass('hidden');
|
||||
},
|
||||
formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){
|
||||
formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung){
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden');
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').removeClass('hidden');
|
||||
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
|
||||
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-success');
|
||||
$('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
|
||||
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
|
||||
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
|
||||
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
|
||||
@@ -492,12 +502,13 @@ var approveAnrechnungDetail = {
|
||||
// Show button to withdraw approval
|
||||
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden');
|
||||
},
|
||||
formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){
|
||||
formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung, begruendung){
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden');
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').removeClass('hidden');
|
||||
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
|
||||
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-danger');
|
||||
$('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
|
||||
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
|
||||
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
|
||||
$('#approveAnrechnungDetail-genehmigungDetail-begruendung').text(begruendung);
|
||||
@@ -544,5 +555,76 @@ var approveAnrechnungDetail = {
|
||||
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false);
|
||||
// Hide button to withdraw approval
|
||||
$('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden');
|
||||
},
|
||||
sumUpEcts: function(){
|
||||
var ects = parseFloat($('#ects').text());
|
||||
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
|
||||
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
|
||||
var begruendung_id = $('#begruendung_id').data('begruendung_id');
|
||||
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (begruendung_id == 4)
|
||||
{
|
||||
$('#sumEctsBeruflich').text(sumEctsBeruflich + ects);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#sumEctsSchulisch').text(sumEctsSchulisch + ects);
|
||||
}
|
||||
|
||||
$('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich + ects);
|
||||
|
||||
},
|
||||
substractEcts: function(ects, sumEctsSchulisch, sumEctsBeruflich){
|
||||
var ects = parseFloat($('#ects').text());
|
||||
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
|
||||
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
|
||||
var begruendung_id = $('#begruendung_id').data('begruendung_id');
|
||||
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (begruendung_id == 4)
|
||||
{
|
||||
$('#sumEctsBeruflich').text(sumEctsBeruflich - ects);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#sumEctsSchulisch').text(sumEctsSchulisch - ects);
|
||||
}
|
||||
|
||||
$('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich - ects);
|
||||
},
|
||||
alertIfMaxEctsExceeded: function(){
|
||||
var begruendung_id = $('#begruendung_id').data('begruendung_id');
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(
|
||||
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text())) > 60 ||
|
||||
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsBeruflich').text())) > 60 ||
|
||||
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90
|
||||
)
|
||||
{
|
||||
$('#sumEctsMsg')
|
||||
.html("<br><b>ACHTUNG! Bei Anrechnung von LV: Überschreitung der Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz</b><i class=\"fa fa-lg fa-info-circle\"></i></br>")
|
||||
.addClass('bg-danger text-danger')
|
||||
.tooltip({
|
||||
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
|
||||
placement: 'right',
|
||||
html: true
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#sumEctsMsg').html('').css('border', 'none');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,12 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
|
||||
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
|
||||
|
||||
const COLOR_LIGHTGREY = "#f5f5f5";
|
||||
const COLOR_DANGER = '#f2dede';
|
||||
|
||||
var tabulator = null; // Set in tableBuilt function.
|
||||
|
||||
// Array with accumulated LV ECTS by Prestudent. Used to find out if max ECTS are exceeded.
|
||||
var selectedPrestudentWithAccumulatedLvEcts = [];
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Mutators - setter methods to manipulate table data when entering the tabulator
|
||||
@@ -52,6 +58,10 @@ function hf_filterTrueFalse(headerValue, rowValue){
|
||||
// Adds column details
|
||||
// Sets focus on filterbutton, if table starts with stored filter.
|
||||
function func_tableBuilt(table) {
|
||||
|
||||
// Store table in global var
|
||||
tabulator = table;
|
||||
|
||||
table.addColumn(
|
||||
{
|
||||
title: "Details",
|
||||
@@ -66,7 +76,7 @@ function func_tableBuilt(table) {
|
||||
},
|
||||
target:"_blank"
|
||||
}
|
||||
}, false, "status" // place column after status
|
||||
}, true // place column on the very left
|
||||
);
|
||||
|
||||
// Set focus on filterbutton
|
||||
@@ -76,16 +86,74 @@ function func_tableBuilt(table) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats column ECTS (LV + Bisher).
|
||||
*/
|
||||
var format_ectsSumBisherUndNeu = function(cell, formatterParams, onRendered){
|
||||
let row = cell.getRow();
|
||||
let rowData = row.getData();
|
||||
|
||||
let begruendung_id = (rowData.begruendung_id);
|
||||
let ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich);
|
||||
let ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch;
|
||||
let ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich;
|
||||
|
||||
// If exists, add accumulated LV ECTS to bisherige ECTS
|
||||
if (selectedPrestudentWithAccumulatedLvEcts.length > 0)
|
||||
{
|
||||
let selectedPrestudent = selectedPrestudentWithAccumulatedLvEcts.find(x => x.prestudent_id === rowData.prestudent_id);
|
||||
|
||||
if (selectedPrestudent != undefined)
|
||||
{
|
||||
ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich) + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
|
||||
ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch;
|
||||
ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
|
||||
}
|
||||
|
||||
// Color column if maximum ECTS exceeded
|
||||
if (begruendung_id != 5 && row.isSelected())
|
||||
{
|
||||
|
||||
if (
|
||||
(ectsSumBisherUndNeuSchulisch + ectsSumBisherUndNeuBeruflich) > 90 ||
|
||||
ectsSumBisherUndNeuSchulisch > 60 ||
|
||||
ectsSumBisherUndNeuBeruflich > 60
|
||||
)
|
||||
{
|
||||
cell.getElement().style["background-color"] = COLOR_DANGER;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cell.getElement().style.removeProperty('background-color');
|
||||
}
|
||||
}
|
||||
|
||||
// If max ECTS is exceeded, format font color / weight
|
||||
ectsSumBisherUndNeuTotal = (ectsSumBisherUndNeuTotal > 90) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuTotal + "</u></b></span>" : ectsSumBisherUndNeuTotal;
|
||||
ectsSumBisherUndNeuSchulisch = (ectsSumBisherUndNeuSchulisch > 60) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuSchulisch + "</u></b></span>" : ectsSumBisherUndNeuSchulisch;
|
||||
ectsSumBisherUndNeuBeruflich = (ectsSumBisherUndNeuBeruflich > 60) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuBeruflich + "</u></b></span>" : ectsSumBisherUndNeuBeruflich;
|
||||
|
||||
return "T: " + ectsSumBisherUndNeuTotal + " [ S: " + ectsSumBisherUndNeuSchulisch + " | B: " + ectsSumBisherUndNeuBeruflich + " ]";
|
||||
}
|
||||
|
||||
// Formats the rows
|
||||
function func_rowFormatter(row){
|
||||
let status_kurzbz = row.getData().status_kurzbz;
|
||||
|
||||
row.getCells().forEach(function(cell){
|
||||
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
|
||||
{
|
||||
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
|
||||
}
|
||||
});
|
||||
// If status is anything else then 'Bearbeitet von STGL-Leitung'
|
||||
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
|
||||
{
|
||||
// Disable new selection of updated rows
|
||||
row.getElement().style["pointerEvents"] = "none";
|
||||
|
||||
// ...but leave url links selectable
|
||||
row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
|
||||
row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
|
||||
|
||||
// Color background grey
|
||||
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
|
||||
}
|
||||
}
|
||||
|
||||
// Formats row selectable/unselectable
|
||||
@@ -99,18 +167,23 @@ function func_selectableCheck(row){
|
||||
);
|
||||
}
|
||||
|
||||
// Performes after row was updated
|
||||
function func_rowUpdated(row){
|
||||
// Refresh row formatters
|
||||
row.reformat();
|
||||
// Calculate dynamically sum of all LV ECTS by Student and display, when maximum ECTS are exceeded.
|
||||
// data = selected data, rows = selected rows
|
||||
function func_rowSelectionChanged(data, rows){
|
||||
|
||||
// Deselect and disable new selection of updated rows
|
||||
row.deselect();
|
||||
row.getElement().style["pointerEvents"] = "none";
|
||||
// Sum up over all anzurechnenden LV-ECTS by Prestudent
|
||||
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
|
||||
|
||||
// ...but leave url links selectable
|
||||
row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
|
||||
row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
|
||||
// Loop through all active rows
|
||||
var rowManager = tabulator.rowManager;
|
||||
for (var i = 0; i < rowManager.activeRows.length; i++) {
|
||||
|
||||
// Reinitialize row -> triggers formatters.
|
||||
rowManager.activeRows[i].reinitialize();
|
||||
}
|
||||
|
||||
// Show number of selected rows.
|
||||
approveAnrechnung.showNumberSelectedRows(rows);
|
||||
}
|
||||
|
||||
// Returns tooltip
|
||||
@@ -136,11 +209,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
|
||||
* (Ignore rows that are approved, rejected or in request for recommendation)
|
||||
*/
|
||||
function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
.filter(row =>
|
||||
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_STGL
|
||||
)
|
||||
.forEach((row => row.select()));
|
||||
);
|
||||
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
|
||||
}
|
||||
|
||||
|
||||
@@ -275,13 +349,7 @@ $(function(){
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
// Get selected rows data
|
||||
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
|
||||
.map(function(data){
|
||||
// reduce to necessary fields
|
||||
return {
|
||||
'anrechnung_id' : data.anrechnung_id,
|
||||
}
|
||||
});
|
||||
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData');
|
||||
|
||||
// Alert and exit if no anrechnung is selected
|
||||
if (selected_data.length == 0)
|
||||
@@ -304,19 +372,70 @@ $(function(){
|
||||
{
|
||||
successCallback: function (data, textStatus, jqXHR)
|
||||
{
|
||||
if (data.error && data.retval != null)
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
// Print error message
|
||||
FHC_DialogLib.alertWarning(data.retval);
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
}
|
||||
|
||||
if (!data.error && data.retval != null)
|
||||
else if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// Update status 'genehmigt'
|
||||
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
|
||||
data = FHC_AjaxClient.getData(data);
|
||||
|
||||
var prestudenten = Object.keys(data.prestudenten);
|
||||
|
||||
// Find intersection of selected and in fact updated Anrechnungen (in case server did not approve all).
|
||||
var updatedData = selected_data.filter(x => prestudenten.some(prestudent => x.prestudent_id == prestudent));
|
||||
|
||||
// Sum up over all anzurechnenden LV-ECTS by Prestudent
|
||||
var sumLvEctsByPrestudent = approveAnrechnung.getSumLvEctsByPreStudent(updatedData);
|
||||
|
||||
// Loop through Prestudenten
|
||||
// key = Prestudent, value = Approved Anrechnungen of Prestudent
|
||||
Object.entries(data.prestudenten).forEach(([key, value]) => {
|
||||
|
||||
var rowsToDeselect = [];
|
||||
|
||||
// Get accumulated sum of all LV ECTS
|
||||
var sumLvEcts = sumLvEctsByPrestudent.find(x => x.prestudent_id == key);
|
||||
|
||||
// Get ALL rows of that Prestudent
|
||||
var rows = $('#tableWidgetTabulator').tabulator('searchRows', 'prestudent_id', '=', key);
|
||||
|
||||
// Loop through the rows
|
||||
rows.forEach(row => {
|
||||
var updateData = {};
|
||||
|
||||
// If Anrechnung was approved...
|
||||
if ((value.findIndex(anrechnung_id => row.getData().anrechnung_id == anrechnung_id)) !== -1)
|
||||
{
|
||||
// ...update status
|
||||
updateData.status_kurzbz = data.status_kurzbz;
|
||||
updateData.status_bezeichnung = data.status_bezeichnung;
|
||||
|
||||
// ...and store row to be deselected later on
|
||||
rowsToDeselect.push(row);
|
||||
}
|
||||
|
||||
// Update 'Bisher schulische ECTS' and 'Bisher berufliche ECTS' with the Sum of new approved ECTS
|
||||
updateData.ectsSumSchulisch = row.getData().ectsSumSchulisch + sumLvEcts.ectsSumAnzurechnendeLvsSchulisch,
|
||||
updateData.ectsSumBeruflich = row.getData().ectsSumBeruflich + sumLvEcts.ectsSumAnzurechnendeLvsBeruflich
|
||||
|
||||
|
||||
// Update row
|
||||
row.update(updateData);
|
||||
|
||||
// Reformat row
|
||||
row.reformat();
|
||||
|
||||
})
|
||||
|
||||
// Deselect rows
|
||||
$("#tableWidgetTabulator").tabulator('deselectRow', rowsToDeselect);
|
||||
|
||||
})
|
||||
|
||||
// Print success message
|
||||
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
|
||||
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
|
||||
}
|
||||
},
|
||||
errorCallback: function (jqXHR, textStatus, errorThrown)
|
||||
@@ -393,16 +512,21 @@ $(function(){
|
||||
{
|
||||
successCallback: function (data, textStatus, jqXHR)
|
||||
{
|
||||
if (data.error && data.retval != null)
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
// Print error message
|
||||
FHC_DialogLib.alertWarning(data.retval);
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
}
|
||||
|
||||
if (!data.error && data.retval != null)
|
||||
else if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
data = FHC_AjaxClient.getData(data);
|
||||
|
||||
// Update status 'genehmigt'
|
||||
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
|
||||
$('#tableWidgetTabulator').tabulator('updateData', data);
|
||||
|
||||
// Deselect rows
|
||||
var indexesToDeselect = data.map(x => x.anrechnung_id);
|
||||
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
|
||||
|
||||
// Print success message
|
||||
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenAbgelehnt"));
|
||||
@@ -457,20 +581,21 @@ $(function(){
|
||||
{
|
||||
successCallback: function (data, textStatus, jqXHR)
|
||||
{
|
||||
if (data.error && data.retval != null)
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
// Print error message
|
||||
FHC_DialogLib.alertWarning(data.retval);
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
}
|
||||
|
||||
if (!data.error && data.retval != null)
|
||||
else if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
data = FHC_AjaxClient.getData(data);
|
||||
|
||||
// Print info message, if not all selected recommendations were requested
|
||||
if (data.retval.length < selected_data.length){
|
||||
if (data.length < selected_data.length){
|
||||
FHC_DialogLib.alertInfo(
|
||||
FHC_PhrasesLib.t(
|
||||
"ui", "empfehlungWurdeAngefordertAusnahmeWoKeineLektoren",
|
||||
[selected_data.length, data.retval.length, selected_data.length - data.retval.length])
|
||||
[selected_data.length, data.length, selected_data.length - data.length])
|
||||
);
|
||||
}
|
||||
else
|
||||
@@ -481,7 +606,11 @@ $(function(){
|
||||
}
|
||||
|
||||
//Update status 'genehmigt'
|
||||
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
|
||||
$('#tableWidgetTabulator').tabulator('updateData', data);
|
||||
|
||||
// Deselect rows
|
||||
var indexesToDeselect = data.map(x => x.anrechnung_id);
|
||||
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
|
||||
},
|
||||
errorCallback: function (jqXHR, textStatus, errorThrown)
|
||||
{
|
||||
@@ -595,5 +724,47 @@ var approveAnrechnung = {
|
||||
break;
|
||||
|
||||
}
|
||||
},
|
||||
getSumLvEctsByPreStudent(data){
|
||||
|
||||
var result = [];
|
||||
|
||||
// Berechne für jeden Prestudenten die kumulierte Summe aller selektierten LV ECTS
|
||||
data.reduce((prev, curr) => {
|
||||
|
||||
if (!prev[curr.prestudent_id])
|
||||
{
|
||||
prev[curr.prestudent_id] = {
|
||||
prestudent_id: curr.prestudent_id,
|
||||
ectsSumAnzurechnendeLvsSchulisch: 0,
|
||||
ectsSumAnzurechnendeLvsBeruflich: 0
|
||||
};
|
||||
|
||||
result.push(prev[curr.prestudent_id])
|
||||
}
|
||||
|
||||
// Kumulierte Summe aller selektierten LVs, die angerechnet werden sollen, getrennt nach
|
||||
// schulischer und beruflicher Qualifikation.
|
||||
// Ausgenommen ist die universitäre Qualifikation (5), da diese unbegrenzt möglich sind.
|
||||
if (curr.begruendung_id != 5)
|
||||
{
|
||||
if (curr.begruendung_id == 4)
|
||||
{
|
||||
prev[curr.prestudent_id].ectsSumAnzurechnendeLvsBeruflich += curr.ects;
|
||||
}
|
||||
else
|
||||
{
|
||||
prev[curr.prestudent_id].ectsSumAnzurechnendeLvsSchulisch += curr.ects;
|
||||
}
|
||||
}
|
||||
|
||||
return prev;
|
||||
|
||||
}, {});
|
||||
|
||||
return result;
|
||||
},
|
||||
showNumberSelectedRows(rows){
|
||||
$('#number-selected').html("Ausgewählte Zeilen: <strong>" + rows.length + "</strong>");
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
|
||||
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
|
||||
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
|
||||
|
||||
const COLOR_DANGER = '#f2dede';
|
||||
|
||||
$(function(){
|
||||
const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte
|
||||
|
||||
@@ -17,12 +19,67 @@ $(function(){
|
||||
// Init tooltips
|
||||
requestAnrechnung.initTooltips();
|
||||
|
||||
// Alert message, if maximum ECTS exceeded
|
||||
requestAnrechnung.alertIfMaxEctsExceeded();
|
||||
|
||||
// Alert message inside Begruendungsbox, if maximum ECTS exceeded
|
||||
requestAnrechnung.alertIfMaxEctsExceededInsideBegruendungsbox();
|
||||
|
||||
// Set chars counter for textarea 'Herkunft der Kenntnisse'
|
||||
requestAnrechnung.setCharsCounter();
|
||||
|
||||
// If Sperregrund exists: display Sperre panel, hide Status panel and disable all form elements
|
||||
requestAnrechnung.displaySperreIfHasSperregrund();
|
||||
|
||||
|
||||
$('#requestAnrechnung-form :input[name="begruendung"]').click(function(e){
|
||||
var ectsLv = parseFloat($('#ects').text());
|
||||
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
|
||||
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
|
||||
var begruendung_id = $(this).val();
|
||||
|
||||
if ($(this).is(':checked'))
|
||||
{
|
||||
$('#sumEctsMsg').remove();
|
||||
|
||||
// If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// If max ECTS is ecceeded
|
||||
if (begruendung_id == 4)
|
||||
{
|
||||
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
|
||||
(sumEctsBeruflich + ectsLv) > 60
|
||||
)
|
||||
{
|
||||
// Get ECTS Überschreitungs-message for berufliche Qualifikation
|
||||
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
|
||||
|
||||
// Add to Checkbox text
|
||||
$(this).closest('label').append(msgBeiEctsUeberschreitung);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
|
||||
(sumEctsSchulisch + ectsLv) > 60
|
||||
)
|
||||
{
|
||||
// Get ECTS Überschreitungs-message for schulische Qualifikation
|
||||
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
|
||||
|
||||
// Add to Checkbox text
|
||||
$(this).closest('label').append(msgBeiEctsUeberschreitung);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
$('#requestAnrechnung-form').submit(function(e){
|
||||
|
||||
// Avoid form redirecting automatically
|
||||
@@ -183,5 +240,102 @@ var requestAnrechnung = {
|
||||
|
||||
return true;
|
||||
}
|
||||
},
|
||||
sumUpEcts: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (begruendung_id == 4)
|
||||
{
|
||||
$('#sumEctsBeruflich').text(parseFloat(sumEctsBeruflich) + parseFloat(ects));
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#sumEctsSchulisch').text(parseFloat(sumEctsSchulisch) + parseFloat(ects));
|
||||
}
|
||||
|
||||
$('#sumEctsTotal').text(parseFloat(sumEctsSchulisch) + parseFloat(sumEctsBeruflich) + parseFloat(ects));
|
||||
|
||||
|
||||
},
|
||||
alertIfMaxEctsExceeded: function(){
|
||||
|
||||
if(
|
||||
(parseFloat($('#sumEctsSchulisch').text())) > 60 ||
|
||||
(parseFloat($('#sumEctsBeruflich').text())) > 60 ||
|
||||
(parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90
|
||||
)
|
||||
{
|
||||
$('#requestAnrechnung-maxEctsUeberschrittenMsg')
|
||||
.html("<br><b>Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz ist überschritten. </b><i class=\"fa fa-lg fa-info-circle\"></i></br>")
|
||||
.addClass('bg-danger text-danger')
|
||||
.tooltip({
|
||||
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
|
||||
placement: 'right',
|
||||
html: true
|
||||
});
|
||||
}
|
||||
},
|
||||
alertIfMaxEctsExceededInsideBegruendungsbox: function(){
|
||||
let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
|
||||
|
||||
if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED)
|
||||
{
|
||||
var ectsLv = parseFloat($('#ects').text());
|
||||
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
|
||||
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
|
||||
var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val();
|
||||
|
||||
// If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
|
||||
if (begruendung_id == 5)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// If max ECTS is ecceeded
|
||||
if (begruendung_id == 4)
|
||||
{
|
||||
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
|
||||
(sumEctsBeruflich + ectsLv) > 60
|
||||
)
|
||||
{
|
||||
// Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
|
||||
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
|
||||
|
||||
// Add to Checkbox text
|
||||
$('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
|
||||
(sumEctsSchulisch + ectsLv) > 60
|
||||
)
|
||||
{
|
||||
// Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
|
||||
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
|
||||
|
||||
// Add to Checkbox text
|
||||
$('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
|
||||
|
||||
return $('<span id="sumEctsMsg"></span>')
|
||||
.html(FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTextBeiUeberschreitung",
|
||||
begruendung_id == 4
|
||||
? [(sumEctsSchulisch + sumEctsBeruflich + ects), sumEctsSchulisch, (sumEctsBeruflich + ects)] // beruflich
|
||||
: [(sumEctsSchulisch + sumEctsBeruflich + ects), (sumEctsSchulisch + ects), sumEctsBeruflich])) // schulisch
|
||||
.append('<i class="fa fa-lg fa-info-circle"></i>')
|
||||
.addClass('bg-danger text-danger')
|
||||
.tooltip({
|
||||
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
|
||||
placement: 'right',
|
||||
html: true
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -65,7 +65,7 @@ function func_tableBuilt(table) {
|
||||
},
|
||||
target:"_blank"
|
||||
}
|
||||
}, false, "status" // place column after status
|
||||
}, true // place column on the very left
|
||||
);
|
||||
}
|
||||
|
||||
@@ -127,11 +127,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
|
||||
* (Ignore rows that are approved, rejected or in request for recommendation)
|
||||
*/
|
||||
function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
.filter(row =>
|
||||
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
|
||||
)
|
||||
.forEach((row => row.select()));
|
||||
);
|
||||
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -274,12 +274,13 @@ function func_renderComplete(table){
|
||||
* Select all (filtered) rows and ignore rows that are bestellt and erteilt
|
||||
*/
|
||||
function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
.filter(row => row.getData().bestellt != null && // bestellt
|
||||
row.getData().erteilt != null && // AND erteilt
|
||||
row.getData().akzeptiert == null && // AND NOT akzeptiert
|
||||
row.getData().status != 'Geändert') // AND NOT geändert
|
||||
.forEach((row => row.select()));
|
||||
row.getData().status != 'Geändert'); // AND NOT geändert
|
||||
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -319,12 +319,13 @@ function func_rowUpdated(row){
|
||||
* Select all (filtered) rows that are bestellt
|
||||
*/
|
||||
function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
.filter(row => row.getData().personalnummer >= 0 && // NOT dummies
|
||||
row.getData().bestellt != null && // AND bestellt
|
||||
row.getData().erteilt == null && // AND NOT erteilt
|
||||
row.getData().status != 'Geändert') // AND NOT geaendert
|
||||
.forEach((row => row.select()));
|
||||
row.getData().status != 'Geändert'); // AND NOT geaendert
|
||||
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -343,7 +343,7 @@ function func_rowUpdated(row){
|
||||
* Select all (filtered) rows and ignore rows which have status bestellt
|
||||
*/
|
||||
function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
|
||||
.filter(row => (
|
||||
row.getData().personalnummer > 0 || // not dummies
|
||||
row.getData().personalnummer == null) && // include Projektbetreuer
|
||||
@@ -355,8 +355,9 @@ function tableWidgetHook_selectAllButton(tableWidgetDiv){
|
||||
(row.getData().bestellt != null && // OR (bestellt
|
||||
row.getData().status == 'Geändert') // AND geaendert)
|
||||
)
|
||||
)
|
||||
.forEach((row => row.select()));
|
||||
);
|
||||
|
||||
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
/**
|
||||
* Javascript file for benutzergruppe management page
|
||||
*/
|
||||
|
||||
var Benutzergruppe = {
|
||||
getBenutzer: function(gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallGet(
|
||||
'person/gruppenmanagement/getBenutzer',
|
||||
{
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
let benutzerTable = $("#benutzer-table tbody");
|
||||
benutzerTable.empty();
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// save loaded data
|
||||
let benutzerData = FHC_AjaxClient.getData(data);
|
||||
|
||||
// fill table with Benutzer of Gruppe
|
||||
for (let i = 0; i < benutzerData.length; i++)
|
||||
{
|
||||
let benutzer = benutzerData[i];
|
||||
benutzerTable.append(
|
||||
"<tr>"+
|
||||
"<td>"+benutzer.uid+"</td>"+
|
||||
"<td>"+benutzer.vorname+"</td>"+
|
||||
"<td>"+benutzer.nachname+"</td>"+
|
||||
"<td>"+(benutzer.aktiv === true ? "Ja" : "Nein")+"</td>"+
|
||||
"<td>"+
|
||||
"<button class='btn btn-default benutzerLoeschen' id='"+benutzer.uid+"_benutzerLoeschen'>"+
|
||||
FHC_PhrasesLib.t('ui', 'entfernen')+
|
||||
"</button>"+
|
||||
"</td>"+
|
||||
"</tr>"
|
||||
);
|
||||
|
||||
// add delete event to button
|
||||
$("#"+benutzer.uid+"_benutzerLoeschen").click(
|
||||
function() {
|
||||
Benutzergruppe.removeBenutzer(benutzer.uid, gruppe_kurzbz);
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// add tablesorter to benutzergruppe table
|
||||
Benutzergruppe._setTablesorter();
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
getAllBenutzer: function() {
|
||||
FHC_AjaxClient.ajaxCallGet(
|
||||
'person/gruppenmanagement/getAllBenutzer',
|
||||
null,
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
benutzerArr = [];
|
||||
|
||||
// save loaded data
|
||||
let benutzerData = FHC_AjaxClient.getData(data);
|
||||
|
||||
for (let i = 0; i < benutzerData.length; i++)
|
||||
{
|
||||
let ben = benutzerData[i];
|
||||
|
||||
benutzerArr.push(
|
||||
{
|
||||
vorname: ben.vorname,
|
||||
nachname: ben.nachname,
|
||||
uid: ben.uid,
|
||||
label: ben.nachname + " " + ben.vorname + " (" + ben.uid + ")",
|
||||
id: ben.uid
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// callback for searching source mitarbeiter array correctly
|
||||
let sourceCallback = function(request, response)
|
||||
{
|
||||
// case insensitive matcher
|
||||
let matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
|
||||
|
||||
// match vorname nachname OR nachname vorname OR uid
|
||||
response($.grep(benutzerArr, function (value) {
|
||||
return matcher.test(value.nachname + ' '+value.vorname + ' ' + value.nachname)
|
||||
|| matcher.test(value.uid);
|
||||
}));
|
||||
}
|
||||
|
||||
// fill autocomplete field with benutzer data
|
||||
Benutzergruppe._fillAutocomplete(
|
||||
'teilnehmerSelect',
|
||||
'teilnehmer_uid',
|
||||
sourceCallback
|
||||
);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
addBenutzer: function(uid, gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallPost(
|
||||
'person/gruppenmanagement/addBenutzer',
|
||||
{
|
||||
uid: uid,
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// load Benutzer after add to show change
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
removeBenutzer: function(uid, gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallPost(
|
||||
'person/gruppenmanagement/removeBenutzer',
|
||||
{
|
||||
uid: uid,
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// load Benutzer after remove to show change
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
_fillAutocomplete: function(autocompleteId, idFieldId, source) {
|
||||
// jQuery ui autocomplete for benutzer
|
||||
$("#"+autocompleteId).autocomplete(
|
||||
{
|
||||
// custom matcher
|
||||
source: source,
|
||||
autoFocus: true,
|
||||
select: function(event, ui)
|
||||
{
|
||||
// when autocmplete entry selected, display label text in autocomplete, fill hidden value field
|
||||
$("#"+autocompleteId).val(ui.item.label);
|
||||
$("#"+idFieldId).val(ui.item.id);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
_setTablesorter: function() {
|
||||
Tablesort.addTablesorter(
|
||||
// sort by first and third column asc, show filters beggining with 2 Benutzer, exclude fifth column from filter
|
||||
"benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {4: {filter: false}}}
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* When JQuery is up
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
// get the group name
|
||||
let gruppe_kurzbz = $("#gruppe_kurzbz").val();
|
||||
|
||||
// load Benutzer for autocomplete selection
|
||||
Benutzergruppe.getAllBenutzer();
|
||||
// load Benutzer for table
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
|
||||
// add click event to "add Benutzer" button
|
||||
$("#teilnehmerHinzufuegen").click(function(){
|
||||
let uid = $("#teilnehmer_uid").val();
|
||||
Benutzergruppe.addBenutzer(uid, gruppe_kurzbz);
|
||||
$("#teilnehmerSelect").val('');
|
||||
}
|
||||
);
|
||||
});
|
||||
@@ -32,8 +32,10 @@ if(is_numeric($anrechnung_id))
|
||||
// Add last Anrechnungstatus
|
||||
$anrechnungstatus = new Anrechnung();
|
||||
$anrechnungstatus->getLastAnrechnungstatus($anrechnung_id);
|
||||
|
||||
$anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
|
||||
if(isset($anrechnungstatus->result[0]))
|
||||
$anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
|
||||
else
|
||||
$anrechnung->result[0]->status = '';
|
||||
}
|
||||
elseif(is_numeric($prestudent_id))
|
||||
{
|
||||
@@ -46,7 +48,10 @@ elseif(is_numeric($prestudent_id))
|
||||
{
|
||||
$anrechnungstatus = new Anrechnung();
|
||||
$status = $anrechnungstatus->getLastAnrechnungstatus($row->anrechnung_id);
|
||||
$row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
|
||||
if(isset($anrechnungstatus->result[0]))
|
||||
$row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
|
||||
else
|
||||
$row->status = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -53,6 +53,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
|
||||
<BT:code></BT:code>
|
||||
<BT:bezeichnung>-- keine Auswahl --</BT:bezeichnung>
|
||||
<BT:kurzbz>-- keine Auswahl --</BT:kurzbz>
|
||||
<BT:aktiv></BT:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
';
|
||||
@@ -70,6 +71,7 @@ if($db->db_query($qry))
|
||||
<BT:code><![CDATA[<?php echo $row->zgv_code; ?>]]></BT:code>
|
||||
<BT:bezeichnung><![CDATA[<?php echo $row->zgv_bez; ?>]]></BT:bezeichnung>
|
||||
<BT:kurzbz><![CDATA[<?php echo $row->zgv_kurzbz; ?>]]></BT:kurzbz>
|
||||
<BT:aktiv><![CDATA[<?php echo $row->aktiv; ?>]]></BT:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
<?php
|
||||
@@ -77,4 +79,4 @@ if($db->db_query($qry))
|
||||
}
|
||||
?>
|
||||
</RDF:Seq>
|
||||
</RDF:RDF>
|
||||
</RDF:RDF>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
// header für no cache
|
||||
// header f�r no cache
|
||||
header("Cache-Control: no-cache");
|
||||
header("Cache-Control: post-check=0, pre-check=0",false);
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
@@ -52,6 +52,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
|
||||
<ZGVDOKTOR:code></ZGVDOKTOR:code>
|
||||
<ZGVDOKTOR:bezeichnung>-- keine Auswahl --</ZGVDOKTOR:bezeichnung>
|
||||
<ZGVDOKTOR:kurzbz>-- keine Auswahl --</ZGVDOKTOR:kurzbz>
|
||||
<ZGVDOKTOR:aktiv></ZGVDOKTOR:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
';
|
||||
@@ -69,6 +70,7 @@ if($db->db_query($qry))
|
||||
<ZGVDOKTOR:code><![CDATA[<?php echo $row->zgvdoktor_code; ?>]]></ZGVDOKTOR:code>
|
||||
<ZGVDOKTOR:bezeichnung><![CDATA[<?php echo $row->zgvdoktor_bez; ?>]]></ZGVDOKTOR:bezeichnung>
|
||||
<ZGVDOKTOR:kurzbz><![CDATA[<?php echo $row->zgvdoktor_kurzbz; ?>]]></ZGVDOKTOR:kurzbz>
|
||||
<ZGVDOKTOR:aktiv><![CDATA[<?php echo $row->aktiv; ?>]]></ZGVDOKTOR:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
<?php
|
||||
@@ -76,4 +78,4 @@ if($db->db_query($qry))
|
||||
}
|
||||
?>
|
||||
</RDF:Seq>
|
||||
</RDF:RDF>
|
||||
</RDF:RDF>
|
||||
|
||||
@@ -52,6 +52,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
|
||||
<ZGVMASTER:code></ZGVMASTER:code>
|
||||
<ZGVMASTER:bezeichnung>-- keine Auswahl --</ZGVMASTER:bezeichnung>
|
||||
<ZGVMASTER:kurzbz>-- keine Auswahl --</ZGVMASTER:kurzbz>
|
||||
<ZGVMASTER:aktiv></ZGVMASTER:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
';
|
||||
@@ -69,6 +70,7 @@ if($db->db_query($qry))
|
||||
<ZGVMASTER:code><![CDATA[<?php echo $row->zgvmas_code; ?>]]></ZGVMASTER:code>
|
||||
<ZGVMASTER:bezeichnung><![CDATA[<?php echo $row->zgvmas_bez; ?>]]></ZGVMASTER:bezeichnung>
|
||||
<ZGVMASTER:kurzbz><![CDATA[<?php echo $row->zgvmas_kurzbz; ?>]]></ZGVMASTER:kurzbz>
|
||||
<ZGVMASTER:aktiv><![CDATA[<?php echo $row->aktiv?>]]></ZGVMASTER:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
<?php
|
||||
@@ -76,4 +78,4 @@ if($db->db_query($qry))
|
||||
}
|
||||
?>
|
||||
</RDF:Seq>
|
||||
</RDF:RDF>
|
||||
</RDF:RDF>
|
||||
|
||||
+339
-3
@@ -5169,6 +5169,19 @@ if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHE
|
||||
}
|
||||
}
|
||||
|
||||
// Added Bezeichnung 'Hochschulzeugnis' to Anrechnungbegruendung
|
||||
if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHERE bezeichnung = 'Hochschulzeugnis';"))
|
||||
{
|
||||
if ($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO lehre.tbl_anrechnung_begruendung (bezeichnung) VALUES('Hochschulzeugnis');";
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>lehre.tbl_anrechnung_begruendung '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' lehre.tbl_anrechnung_begruendung: Added bezeichnung "Hochschulzeugnis" <br>';
|
||||
}
|
||||
}
|
||||
|
||||
// Add permission to apply for Anrechnung
|
||||
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'student/anrechnung_beantragen';"))
|
||||
{
|
||||
@@ -5668,6 +5681,46 @@ if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='dvuh'"))
|
||||
}
|
||||
}
|
||||
|
||||
if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app = 'international' "))
|
||||
{
|
||||
if($db->db_num_rows($result)==0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_app(app) VALUES('international');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>App: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Neue App international in system.tbl_app hinzugefügt';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add DMS category "international_nachweis"
|
||||
if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie WHERE kategorie_kurzbz = 'international_nachweis';"))
|
||||
{
|
||||
if ($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO campus.tbl_dms_kategorie (
|
||||
kategorie_kurzbz,
|
||||
bezeichnung,
|
||||
beschreibung,
|
||||
parent_kategorie_kurzbz,
|
||||
oe_kurzbz,
|
||||
berechtigung_kurzbz
|
||||
) VALUES(
|
||||
'international_nachweis',
|
||||
'International Nachweis',
|
||||
'Nachweis der Internationalisierungsmaßnahmen',
|
||||
'fas',
|
||||
'etw',
|
||||
NULL
|
||||
);";
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>campus.tbl_dms_kategorie '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' campus.tbl_dms_kategorie: Added category "international_nachweis"!<br>';
|
||||
}
|
||||
}
|
||||
// Add table issue_status
|
||||
if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue_status LIMIT 1;"))
|
||||
{
|
||||
@@ -6190,6 +6243,72 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
|
||||
}
|
||||
}
|
||||
|
||||
// Creates table public.tbl_gruppe_manager if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_gruppe_manager LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE public.tbl_gruppe_manager (
|
||||
gruppe_manager_id integer,
|
||||
gruppe_kurzbz varchar(32) NOT NULL,
|
||||
uid varchar(32) NOT NULL,
|
||||
insertamum timestamp DEFAULT NOW(),
|
||||
insertvon varchar(32)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE public.tbl_gruppe_manager IS \'Table to save assignments groups to their managers.\';
|
||||
COMMENT ON COLUMN public.tbl_gruppe_manager.gruppe_kurzbz IS \'Name of group\';
|
||||
COMMENT ON COLUMN public.tbl_gruppe_manager.uid IS \'User id of group manager\';
|
||||
|
||||
CREATE SEQUENCE public.seq_gruppe_manager_gruppe_manager_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ALTER COLUMN gruppe_manager_id SET DEFAULT nextval(\'public.seq_gruppe_manager_gruppe_manager_id\'::regclass);
|
||||
|
||||
GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO vilesci;
|
||||
GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO fhcomplete;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT pk_gruppe_manager PRIMARY KEY (gruppe_manager_id);
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_gruppe_kurzbz FOREIGN KEY (gruppe_kurzbz) REFERENCES public.tbl_gruppe(gruppe_kurzbz) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_uid FOREIGN KEY (uid) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT uk_gruppe_manager_gruppe_kurzbz_uid UNIQUE (gruppe_kurzbz, uid);';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>public.tbl_gruppe_manager table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE public.tbl_gruppe_manager TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on public.tbl_gruppe_manager';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.tbl_gruppe_manager TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on public.tbl_gruppe_manager';
|
||||
}
|
||||
|
||||
// Add permission for managing user groups
|
||||
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/gruppenmanager';"))
|
||||
{
|
||||
if($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/gruppenmanager', 'Manager einer Gruppe werden und die Gruppe verwalten');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' system.tbl_berechtigung: Added permission for lehre/gruppenmanager<br>';
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE(chris): Add "Template" to "Lehrtyp"
|
||||
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_lehrtyp WHERE bezeichnung = 'Template';"))
|
||||
{
|
||||
@@ -6259,6 +6378,175 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
|
||||
}
|
||||
}
|
||||
|
||||
// Neue Funktion get_ects_summe_schulisch
|
||||
if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)"))
|
||||
{
|
||||
$qry = 'CREATE FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) RETURNS numeric
|
||||
LANGUAGE plpgsql
|
||||
AS $_$
|
||||
DECLARE var_student_uid ALIAS FOR $1;
|
||||
DECLARE var_prestudent_id ALIAS FOR $2;
|
||||
DECLARE var_studiengang_kz ALIAS FOR $3;
|
||||
DECLARE var_einstiegsausbildungssemester integer;
|
||||
DECLARE var_einstiegsstudiensemester_kurzbz varchar(32);
|
||||
DECLARE var_einstiegsorgform_kurzbz varchar(32);
|
||||
DECLARE rec_quereinstiegs_studiensemester RECORD;
|
||||
DECLARE sum_quereinstiegs_ects numeric(4, 1) := 0;
|
||||
DECLARE sum_schulische_ects numeric(4, 1) := 0;
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
-- IF STUDENT IS QUEREINSTEIGER, GET ECTS SUMME OF ANGERECHNETE SEMESTER
|
||||
-- Get Einstiegssemester
|
||||
SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus
|
||||
WHERE prestudent_id = var_prestudent_id
|
||||
AND status_kurzbz = \'Student\'
|
||||
ORDER BY datum, insertamum, ext_id
|
||||
LIMIT 1;
|
||||
|
||||
-- If Einstiegssemester > 1 (= Quereinsteiger)
|
||||
IF (var_einstiegsausbildungssemester > 1) THEN
|
||||
-- ...get all Quereinstiegssemester
|
||||
FOR rec_quereinstiegs_studiensemester IN SELECT studiensemester_kurzbz FROM public.tbl_studiensemester
|
||||
WHERE ende <= (select start from public.tbl_studiensemester WHERE studiensemester_kurzbz = var_einstiegsstudiensemester_kurzbz )
|
||||
ORDER BY start DESC
|
||||
LIMIT (var_einstiegsausbildungssemester -1)
|
||||
-- ...loop the Quereinstiegssemester
|
||||
LOOP
|
||||
-- ...and sum up ECTS of each Quereinstiegssemester
|
||||
sum_quereinstiegs_ects = sum_quereinstiegs_ects + (SELECT
|
||||
SUM(tbl_lehrveranstaltung.ects)
|
||||
FROM
|
||||
lehre.tbl_studienplan
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_studienplan.studienplan_id = (
|
||||
SELECT
|
||||
studienplan_id
|
||||
FROM
|
||||
lehre.tbl_studienordnung
|
||||
JOIN lehre.tbl_studienplan USING (studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
|
||||
WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz
|
||||
AND tbl_studienplan_semester.semester = var_einstiegsausbildungssemester - 1
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz = rec_quereinstiegs_studiensemester.studiensemester_kurzbz
|
||||
AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz
|
||||
|
||||
LIMIT 1
|
||||
)
|
||||
AND tbl_studienplan_lehrveranstaltung.semester = var_einstiegsausbildungssemester
|
||||
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
|
||||
AND tbl_studienplan_lehrveranstaltung.export = TRUE);
|
||||
|
||||
var_einstiegsausbildungssemester = var_einstiegsausbildungssemester - 1;
|
||||
END LOOP;
|
||||
END IF;
|
||||
|
||||
|
||||
-- GET ECTS SUMME OF ALLE BISHER ANGERECHNETEN LEHRVERANSTALTUNGEN. ANRECHNUNGSGRUND: SCHULISCH.
|
||||
SELECT INTO sum_schulische_ects COALESCE(SUM(ects), 0) FROM (
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(student_uid)
|
||||
WHERE
|
||||
tbl_zeugnisnote.note = 6
|
||||
AND student_uid = var_student_uid
|
||||
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
|
||||
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
|
||||
AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
|
||||
AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects
|
||||
FROM
|
||||
lehre.tbl_anrechnung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
WHERE
|
||||
genehmigt_von IS NOT NULL
|
||||
AND student_uid = var_student_uid
|
||||
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
|
||||
AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
|
||||
) lvsangerechnet;
|
||||
|
||||
-- BUILD ECTS SUMME OF QUEREINSTIEGSSEMESTER- + ANGERECHNETEN LVs-ECTS
|
||||
-- Summe aller bisher schulisch begründet angerechneten LVs + der Quereinstiegssemester
|
||||
sum_schulische_ects = sum_schulische_ects + sum_quereinstiegs_ects;
|
||||
|
||||
RETURN sum_schulische_ects ;
|
||||
|
||||
END;
|
||||
$_$;
|
||||
|
||||
ALTER FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) OWNER TO fhcomplete;';
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz): '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Funktion <b>public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz)</b> hinzugefügt';
|
||||
}
|
||||
|
||||
// Neue Funktion get_ects_summe_beruflich
|
||||
if(!@$db->db_query("SELECT public.get_ects_summe_beruflich('')"))
|
||||
{
|
||||
$qry = 'CREATE FUNCTION public.get_ects_summe_beruflich(character varying) RETURNS numeric
|
||||
LANGUAGE plpgsql
|
||||
AS $_$
|
||||
DECLARE var_student_uid ALIAS FOR $1;
|
||||
DECLARE sum_berufliche_ects numeric(4, 1) := 0;
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT INTO sum_berufliche_ects COALESCE(SUM(ects), 0) FROM (
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(student_uid)
|
||||
WHERE
|
||||
tbl_zeugnisnote.note = 6
|
||||
AND student_uid = var_student_uid
|
||||
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
|
||||
AND begruendung_id = 4 -- beruflich
|
||||
AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
lehrveranstaltung_id, studiensemester_kurzbz, ects
|
||||
FROM
|
||||
lehre.tbl_anrechnung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
WHERE
|
||||
genehmigt_von is not null
|
||||
AND student_uid = var_student_uid
|
||||
AND begruendung_id = 4 -- beruflich
|
||||
) lvsangerechnet;
|
||||
|
||||
RETURN sum_berufliche_ects;
|
||||
|
||||
END;
|
||||
$_$;
|
||||
|
||||
ALTER FUNCTION public.get_ects_summe_beruflich(character varying) OWNER TO fhcomplete;';
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>public.get_ects_summe_beruflich(student_uid): '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Funktion <b>public.get_ects_summe_beruflich(student_uid)</b> hinzugefügt';
|
||||
}
|
||||
|
||||
// Grant SELECT to bis.tbl_gsprogramm for web-user
|
||||
if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_gsprogramm' AND table_schema='bis' AND grantee='web' AND privilege_type in ('SELECT')"))
|
||||
{
|
||||
@@ -6273,6 +6561,54 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants
|
||||
}
|
||||
}
|
||||
|
||||
// Insert document type Grant Agreement
|
||||
if($result = @$db->db_query("SELECT 1 FROM public.tbl_dokument WHERE dokument_kurzbz = 'GrantAgr';"))
|
||||
{
|
||||
if($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO public.tbl_dokument(dokument_kurzbz, bezeichnung, bezeichnung_mehrsprachig) VALUES('GrantAgr', 'Grant Agreement', '{\"Grant Agreement\",\"Grant Agreement\"}');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_dokument '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo 'public.tbl_dokument: Added value \'GrantAgr\'<br>';
|
||||
}
|
||||
}
|
||||
|
||||
//Spalte aktiv zu bis.tbl_zgv hinzufügen
|
||||
if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgv LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE bis.tbl_zgv ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_zgv '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Spalte aktiv zu bis.tbl_zgv hinzugefügt';
|
||||
}
|
||||
|
||||
//Spalte aktiv zu bis.tbl_zgvmaster hinzufügen
|
||||
if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvmaster LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE bis.tbl_zgvmaster ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_zgvmaster '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Spalte aktiv zu bis.tbl_zgvmaster hinzugefügt';
|
||||
}
|
||||
|
||||
//Spalte aktiv zu bis.tbl_zgvdoktor hinzufügen
|
||||
if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvdoktor LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE bis.tbl_zgvdoktor ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_zgvdoktor '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Spalte aktiv zu bis.tbl_zgvdoktor hinzugefügt';
|
||||
}
|
||||
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
||||
|
||||
@@ -6308,9 +6644,9 @@ $tabellen=array(
|
||||
"bis.tbl_oehbeitrag" => array("oehbeitrag_id","studierendenbeitrag","versicherung","von_studiensemester_kurzbz","bis_studiensemester_kurzbz","insertamum","insertvon","updateamum","updatevon"),
|
||||
"bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"),
|
||||
"bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),
|
||||
"bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung"),
|
||||
"bis.tbl_zgvmaster" => array("zgvmas_code","zgvmas_bez","zgvmas_kurzbz","bezeichnung"),
|
||||
"bis.tbl_zgvdoktor" => array("zgvdoktor_code", "zgvdoktor_bez", "zgvdoktor_kurzbz","bezeichnung"),
|
||||
"bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung","aktiv"),
|
||||
"bis.tbl_zgvmaster" => array("zgvmas_code","zgvmas_bez","zgvmas_kurzbz","bezeichnung","aktiv"),
|
||||
"bis.tbl_zgvdoktor" => array("zgvdoktor_code", "zgvdoktor_bez", "zgvdoktor_kurzbz","bezeichnung","aktiv"),
|
||||
"bis.tbl_zweck" => array("zweck_code","kurzbz","bezeichnung","incoming","outgoing"),
|
||||
"bis.tbl_zgvgruppe" => array("gruppe_kurzbz","bezeichnung"),
|
||||
"bis.tbl_zgvgruppe_zuordnung" => array("zgvgruppe_id" ,"studiengang_kz","zgv_code","zgvmas_code","gruppe_kurzbz"),
|
||||
|
||||
@@ -1112,6 +1112,27 @@ $filters = array(
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'dataset_name' => 'gruppenmanagement',
|
||||
'filter_kurzbz' => 'gruppenmanagement',
|
||||
'description' => '{Meine Gruppen}',
|
||||
'sort' => 1,
|
||||
'default_filter' => true,
|
||||
'filter' => '
|
||||
{
|
||||
"name": "gruppenmanagement",
|
||||
"columns": [
|
||||
{"name": "gruppe_kurzbz"},
|
||||
{"name": "gruppe_bezeichnung"},
|
||||
{"name": "gruppe_beschreibung"},
|
||||
{"name": "studiengang_kurzbz"}
|
||||
],
|
||||
"filters": []
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null,
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
+984
-19
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,7 @@ require_once('../../config/vilesci.config.inc.php');
|
||||
require_once('../../include/functions.inc.php');
|
||||
require_once('../../include/studiengang.class.php');
|
||||
require_once('../../include/gruppe.class.php');
|
||||
require_once('../../include/gruppemanager.class.php');
|
||||
require_once('../../include/person.class.php');
|
||||
require_once('../../include/benutzer.class.php');
|
||||
require_once('../../include/student.class.php');
|
||||
@@ -82,17 +83,59 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
<title>Gruppe-Verwaltung</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
|
||||
<link rel="stylesheet" href="../../skin/jquery-ui-1.9.2.custom.min.css" type="text/css">
|
||||
|
||||
<?php
|
||||
include('../../include/meta/jquery.php');
|
||||
include('../../include/meta/jquery-tablesorter.php');
|
||||
?>
|
||||
|
||||
<?php
|
||||
// html Vorlage für ein manager span
|
||||
const MANAGER_HTML = "<span class='manager-uid'>%s - %s %s "
|
||||
."<img class='manager-delete-image' src='../../skin/images/cross.png' title='Manager entfernen' alt='Manager entfernen'>"
|
||||
."<input type='hidden' name='gruppemanager[]' value='%s'>"
|
||||
."</span>";
|
||||
?>
|
||||
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
function conf_del()
|
||||
{
|
||||
return confirm('Diese Gruppe wirklich löschen?');
|
||||
}
|
||||
function setManagerDeleteEvent()
|
||||
{
|
||||
var deleteImages = $('.manager-delete-image');
|
||||
deleteImages.off("click");
|
||||
deleteImages.click(function()
|
||||
{
|
||||
// closest manager uid parent
|
||||
$(this).closest('.manager-uid').remove();
|
||||
adjustManagerTableCellSize();
|
||||
});
|
||||
}
|
||||
function showIfManagerAssignable()
|
||||
{
|
||||
var generiert = $("#generiert").prop('checked');
|
||||
|
||||
if (generiert === true)
|
||||
{
|
||||
$("#gruppemanager").prop("disabled", true);
|
||||
$("#genGruppenManagerHinweis").removeClass("hiddenNotice");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#gruppemanager").prop("disabled", false);
|
||||
$("#genGruppenManagerHinweis").addClass("hiddenNotice");
|
||||
}
|
||||
}
|
||||
function adjustManagerTableCellSize()
|
||||
{
|
||||
// Tabellenzelle vergrössern wenn es Administratorelemente gibt
|
||||
if ($("input[name='gruppemanager[]']").length)
|
||||
$("#gruppenmanager-cell").addClass("gruppenmanager-cell");
|
||||
else
|
||||
$("#gruppenmanager-cell").removeClass("gruppenmanager-cell");
|
||||
}
|
||||
$(document).ready(function()
|
||||
{
|
||||
$("#t1").tablesorter(
|
||||
@@ -110,11 +153,82 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
return false;
|
||||
});
|
||||
|
||||
$( "#mailgrp" ).click(function() {
|
||||
$( "#mailgrp" ).click(function()
|
||||
{
|
||||
$( "#domain_text" ).toggle();
|
||||
$('#gesperrt').prop('disabled', function(i, v) { return !v; });
|
||||
});
|
||||
|
||||
// Löschen von Gruppemanager html bei Klick
|
||||
setManagerDeleteEvent();
|
||||
|
||||
// Hinzufügen von Managern deaktiviert wenn generierte Gruppe
|
||||
showIfManagerAssignable();
|
||||
|
||||
// autocomplete für user input Feld
|
||||
$("#gruppemanager").autocomplete({
|
||||
source: "einheit_autocomplete.php?work=searchUser",
|
||||
minLength:3,
|
||||
response: function(event, ui)
|
||||
{
|
||||
// Value und Label fuer die Anzeige setzen
|
||||
for(i in ui.content)
|
||||
{
|
||||
ui.content[i].value=ui.content[i].uid;
|
||||
ui.content[i].label=ui.content[i].uid+" - "+ui.content[i].vorname+" "+ui.content[i].nachname;
|
||||
}
|
||||
},
|
||||
// bei Auswahl einer uid
|
||||
select: function(event, ui)
|
||||
{
|
||||
// Administrator html holen und Werte ersetzen
|
||||
var managerHtml = "<?php echo MANAGER_HTML ?>";
|
||||
var managerHtmlValues = [ui.item.uid, ui.item.vorname, ui.item.nachname, ui.item.uid];
|
||||
|
||||
for (var i = 0; i < managerHtmlValues.length; i++)
|
||||
{
|
||||
managerHtml = managerHtml.replace(/%s/, managerHtmlValues[i]);
|
||||
}
|
||||
|
||||
// wenn noch nicht vorhanden, Administrator unterhalb des Inputfeldes einfügen
|
||||
if (!$("input[name='gruppemanager[]'][value='"+ui.item.uid+"']").length)
|
||||
{
|
||||
var counter = 0;
|
||||
$(".manager-uid-container").children().each(
|
||||
function() {
|
||||
if ($(this).hasClass('manager-uid'))
|
||||
counter++;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
// nach 5 Managern in nächste Zeile springen
|
||||
if (counter >= 5)
|
||||
{
|
||||
$(".manager-uid-container").prepend(
|
||||
"<p class='manager-separator'></p>"
|
||||
);
|
||||
}
|
||||
|
||||
$(".manager-uid-container").prepend(
|
||||
managerHtml
|
||||
);
|
||||
|
||||
// Loeschen Event für neuen Administrator setzen
|
||||
setManagerDeleteEvent();
|
||||
// Größe der Administrator Tabellenzelle anpassen
|
||||
adjustManagerTableCellSize();
|
||||
}
|
||||
|
||||
// Feld leeren
|
||||
$("#gruppemanager").val('');
|
||||
return false; // prevent default, damit text nicht im Inputfeld bleibt
|
||||
}
|
||||
});
|
||||
|
||||
// Hinzufügen von Managern deaktiviert wenn Gruppe auf generiert setzen
|
||||
$("#generiert").click(showIfManagerAssignable);
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
@@ -126,6 +240,35 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
{
|
||||
background-color: #d1d1d1;
|
||||
}
|
||||
col.first-table-column
|
||||
{
|
||||
width: 130px;
|
||||
}
|
||||
.manager-uid
|
||||
{
|
||||
border: 1px solid black;
|
||||
padding: 2px;
|
||||
margin-right: 2px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.manager-delete-image
|
||||
{
|
||||
position: relative;
|
||||
top: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.manager-separator
|
||||
{
|
||||
margin: 3px;
|
||||
}
|
||||
.gruppenmanager-cell
|
||||
{
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
.hiddenNotice
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -158,8 +301,10 @@ else if (isset($_GET['type']) && $_GET['type']=='delete')
|
||||
|
||||
if($rechte->isBerechtigt('lehre/gruppe', $oe_studiengang, 'suid'))
|
||||
{
|
||||
$grp_kurzbz = $_GET['einheit_id'];
|
||||
|
||||
$e=new gruppe();
|
||||
if(!$e->delete($_GET['einheit_id']))
|
||||
if(!$e->delete($grp_kurzbz))
|
||||
echo $e->errormsg;
|
||||
}
|
||||
else
|
||||
@@ -214,6 +359,7 @@ function printDropDown()
|
||||
echo '<input type="submit" value="Anzeigen" />';
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
function doSave()
|
||||
{
|
||||
global $rechte;
|
||||
@@ -241,8 +387,10 @@ function doSave()
|
||||
$e->new = false;
|
||||
}
|
||||
|
||||
$user = get_uid();
|
||||
|
||||
$e->updateamum = date('Y-m-d H:i:s');
|
||||
$e->updatevon = get_uid();
|
||||
$e->updatevon = $user;
|
||||
$e->bezeichnung = $_POST['bezeichnung'];
|
||||
$e->beschreibung = $_POST['beschreibung'];
|
||||
$e->studiengang_kz = $_POST['studiengang_kz'];
|
||||
@@ -258,13 +406,66 @@ function doSave()
|
||||
$e->sort = $_POST['sort'];
|
||||
$e->content_visible = isset($_POST['content_visible']);
|
||||
|
||||
|
||||
// gruppemanager immer array, leer wenn keine angegeben
|
||||
$gruppemanager_uids = isset($_POST['gruppemanager']) && is_array($_POST['gruppemanager']) ? $_POST['gruppemanager'] : array();
|
||||
|
||||
// Prüfung: generierte Gruppen haben keine Manager
|
||||
if (count($gruppemanager_uids) > 0 && $e->generiert === true)
|
||||
{
|
||||
echo "<span class='error'>Generierte Gruppen dürfen keine Administratoren haben!</span>";
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$e->save())
|
||||
echo $e->errormsg;
|
||||
echo "<span class='error'>".$e->errormsg."</span>";
|
||||
else // wenn Gruppe erfolgreich gespeichert, Gruppenmanager speichern
|
||||
{
|
||||
// Gruppe gemäss Konvention in Großbuchstaben
|
||||
$gruppe_kurzbz = mb_strtoupper($_POST['kurzbz']);
|
||||
|
||||
// bestehende Gruppenmanager laden
|
||||
$bestehende_gruppemanager_uids = array();
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
if ($gruppemanager_hlp->load_uids($gruppe_kurzbz))
|
||||
{
|
||||
foreach ($gruppemanager_hlp->uids as $uid_obj)
|
||||
{
|
||||
$bestehende_gruppemanager_uids[] = $uid_obj->uid;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($gruppemanager_uids as $gruppemanager_uid)
|
||||
{
|
||||
// wenn Gruppenmanager noch nicht zugewiesen
|
||||
if (!in_array($gruppemanager_uid, $bestehende_gruppemanager_uids))
|
||||
{
|
||||
// Gruppemanager speichern
|
||||
$gruppemgr = new gruppemanager();
|
||||
$gruppemgr->uid = $gruppemanager_uid;
|
||||
$gruppemgr->gruppe_kurzbz = $gruppe_kurzbz;
|
||||
$gruppemgr->insertamum = date('Y-m-d H:i:s');
|
||||
$gruppemgr->insertvon = $user;
|
||||
|
||||
if(!$gruppemgr->save())
|
||||
echo $gruppemgr->errormsg;
|
||||
}
|
||||
}
|
||||
|
||||
// zu löschende Gruppemanager ermitteln
|
||||
$geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids);
|
||||
|
||||
// Nicht mehr vorhandene Gruppenmanager löschen
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
foreach ($geloeschte_gruppemanager_uids as $geloeschte_uid)
|
||||
{
|
||||
if (!$gruppemanager_hlp->delete($geloeschte_uid, $gruppe_kurzbz))
|
||||
echo $gruppemanager_hlp->errormsg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function doEdit($kurzbz,$new=false)
|
||||
{
|
||||
global $db, $rechte, $studiengang, $searchItems;
|
||||
@@ -282,6 +483,9 @@ function doEdit($kurzbz,$new=false)
|
||||
<form name="gruppe" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
|
||||
<p><b>Gruppe <?php echo ($new?'hinzufügen':'bearbeiten'); ?></b><br>
|
||||
<table id="newFormTable" border="0">
|
||||
<colgroup>
|
||||
<col span="1" class="first-table-column">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Kurzbezeichnung</td>
|
||||
@@ -341,6 +545,44 @@ function doEdit($kurzbz,$new=false)
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gruppenadministrator</td>
|
||||
<?php
|
||||
$gruppemanagerCellClass = '';
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
$gruppemanager_uids_result = $gruppemanager_hlp->load_uids($e->gruppe_kurzbz);
|
||||
|
||||
// richtige Tabellenzeige Grösse wenn Administratoren vorhanden
|
||||
if ($gruppemanager_uids_result === true)
|
||||
{
|
||||
$gruppemanagerCellClass = ' class="gruppenmanager-cell"';
|
||||
}
|
||||
?>
|
||||
<td<?php echo $gruppemanagerCellClass ?> id="gruppenmanager-cell">
|
||||
<input type="text" name="gruppemanager" id="gruppemanager" autofocus="autofocus" />
|
||||
<span class="hiddenNotice" id="genGruppenManagerHinweis">
|
||||
Generierte Gruppen dürfen keine Administratoren haben.
|
||||
</span>
|
||||
<?php
|
||||
echo "<div class='manager-uid-container'>";
|
||||
// alle Manager der Gruppe anzeigen
|
||||
if ($gruppemanager_uids_result === true)
|
||||
{
|
||||
$count = 1;
|
||||
foreach ($gruppemanager_hlp->uids as $uid_obj)
|
||||
{
|
||||
$ben = new benutzer($uid_obj->uid);
|
||||
// Vorlagestring durch Werte ersetzen und ausgeben
|
||||
echo sprintf(MANAGER_HTML, $uid_obj->uid, $ben->vorname, $ben->nachname, $uid_obj->uid);
|
||||
if ($count % 5 == 0) // neue Zeile nach 5 Elementen
|
||||
echo "<p class='manager-separator'></p>";
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>Optional, Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Semester</td>
|
||||
<td><input type="text" name="semester" size="2" maxlength="1" value="<?php echo $e->semester ?>"></td>
|
||||
|
||||
Reference in New Issue
Block a user