Merge remote-tracking branch 'origin/master'

This commit is contained in:
Manfred
2022-09-14 15:50:35 +02:00
64 changed files with 4269 additions and 623 deletions
+2 -2
View File
@@ -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(
+7
View File
@@ -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()
+47 -7
View File
@@ -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});
}
}
}
}
+121 -1
View File
@@ -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
View File
@@ -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);
}
}
+12 -2
View File
@@ -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);
}
}
+12
View File
@@ -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;
}
/**
+4 -3
View File
@@ -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
*/
+16
View File
@@ -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>&nbsp;<?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>
&nbsp;<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>
&nbsp;<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'); ?>&emsp;
<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>
&ensp;
<b>&ensp;<?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>&emsp;
<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>&emsp;
<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>&ensp;<?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>&ensp;<?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 -->
View File
View File
View File
View File
+3
View File
@@ -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);
+54 -16
View File
@@ -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"/>
+187
View File
@@ -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;
}
}
}
?>
+76
View File
@@ -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;
}
}
+110 -52
View File
@@ -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"]);
+2 -2
View File
@@ -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;
+46 -36
View File
@@ -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);
}
// -----------------------------------------------------------------------------------------------------------------
+223
View File
@@ -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('');
}
);
});
+8 -3
View File
@@ -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
View File
@@ -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>
+4 -2
View File
@@ -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 fr 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>
+3 -1
View File
@@ -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
View File
@@ -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"),
+21
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+249 -7
View File
@@ -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&nbsp;"
."<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>